]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
board: ti: j721e,j7200: fix do_main_cpsw0_qsgmii_phyinit
authorSiddharth Vadapalli <s-vadapalli@ti.com>
Mon, 2 Feb 2026 14:10:56 +0000 (19:40 +0530)
committerTom Rini <trini@konsulko.com>
Mon, 16 Feb 2026 17:52:02 +0000 (11:52 -0600)
Since commit 27cc5951c862 ("include: env: ti: add default for
do_main_cpsw0_qsgmii_phyinit"), the value of the environment variable
do_main_cpsw0_qsgmii_phyinit happened to remain '0' and couldn't be
changed without user intervention. This behavior is due to the following
cyclic dependency:
A) ti_common.env sets do_main_cpsw0_qsgmii_phyinit to '0' and its value
   can only be updated automatically by main_cpsw0_qsgmii_phyinit.
B) main_cpsw0_qsgmii_phyinit is defined in j721e.env and it can run only
   if 'do_main_cpsw0_qsgmii_phyinit' is already '1' which isn't possible
   unless the user manually assigns the value.

Fix the aforementioned cyclic dependency by using board_late_init() to
detect the QSGMII Daughtercard and set do_main_cpsw0_qsgmii_phyinit.

Additionally, to address the issue of do_main_cpsw0_qsgmii_phyinit being
'undefined' for other platforms, replace:
if test ${do_main_cpsw0_qsgmii_phyinit} -eq 1;
with:
if env exists do_main_cpsw0_qsgmii_phyinit;
in ti_common.env.

Fixes: 27cc5951c862 ("include: env: ti: add default for do_main_cpsw0_qsgmii_phyinit")
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Reviewed-by: Anshul Dalal <anshuld@ti.com>
board/ti/j7200/j7200.env
board/ti/j721e/evm.c
board/ti/j721e/j721e.env
include/env/ti/ti_common.env

index 292fc72fd585dfab8b05e9d9785407eeb9ded4f3..e22a954d8db7c25a5b70d4dc270e325bda472cb5 100644 (file)
@@ -26,7 +26,6 @@ bootdir=/boot
 rd_spec=-
 
 #if CONFIG_TARGET_J7200_A72_EVM
-do_main_cpsw0_qsgmii_phyinit=1
 init_main_cpsw0_qsgmii_phy=gpio set gpio@22_17;
        gpio clear gpio@22_16
 main_cpsw0_qsgmii_phyinit=
index e030fe7dc874fa573befd67ff75eeb36fe8aa4c4..d9be9ce2ed73bee88f5eb9d5c061532db4f26671 100644 (file)
@@ -403,6 +403,19 @@ static void setup_serial(void)
        env_set("serial#", serial_string);
 }
 
+static void qsgmii_daughtercard_env_update(void)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(ext_cards); i++) {
+               if (!strcmp(ext_cards[i].card_name, "J7X-VSC8514-ETH") &&
+                   daughter_card_detect_flags[i]) {
+                       env_set("do_main_cpsw0_qsgmii_phyinit", "1");
+                       return;
+               }
+       }
+}
+
 int board_late_init(void)
 {
        if (IS_ENABLED(CONFIG_TI_I2C_BOARD_DETECT)) {
@@ -412,6 +425,9 @@ int board_late_init(void)
                /* Check for and probe any plugged-in daughtercards */
                if (board_is_j721e_som() || board_is_j7200_som())
                        probe_daughtercards();
+
+               /* Update env for power-on-reset of the QSGMII Daughtercard */
+               qsgmii_daughtercard_env_update();
        }
 
        return 0;
index ead7fbdb212fe36e881103c2d4a03cb863048ba9..34f5f63d60abd91934100328013b16eff0dea434 100644 (file)
@@ -29,9 +29,6 @@ rd_spec=-
 init_main_cpsw0_qsgmii_phy=gpio set gpio@22_17;
        gpio clear gpio@22_16
 main_cpsw0_qsgmii_phyinit=
-       if test $board_name = J721EX-PM1-SOM || test $board_name = J721EX-PM2-SOM || test $board_name = j721e; then
-               do_main_cpsw0_qsgmii_phyinit=1; else
-               do_main_cpsw0_qsgmii_phyinit=0; fi;
        if test ${do_main_cpsw0_qsgmii_phyinit} -eq 1 && test ${dorprocboot} -eq 1 && test ${boot} = mmc; then
                run init_main_cpsw0_qsgmii_phy;                 \
        fi;
index 03e3267ef8a1bf3e14c65df124ed1ac842c88760..a0ed83f52acde35e87fa3333cfe81c5641c13603 100644 (file)
@@ -22,11 +22,10 @@ get_fit_overlaystring=
        done;
 get_fit_config=setexpr name_fit_config gsub / _ conf-${fdtfile}
 run_fit=run get_fit_config; bootm ${addr_fit}#${name_fit_config}${overlaystring}
-do_main_cpsw0_qsgmii_phyinit=0
 bootcmd_ti_mmc=
        run init_${boot};
 #if CONFIG_CMD_REMOTEPROC
-       if test ${do_main_cpsw0_qsgmii_phyinit} -eq 1;
+       if env exists do_main_cpsw0_qsgmii_phyinit;
                then run main_cpsw0_qsgmii_phyinit;
        fi;
        run boot_rprocs;