[PATCH] board: ti: j721e,j7200: fix do_main_cpsw0_qsgmii_phyinit

Anshul Dalal anshuld at ti.com
Tue Feb 3 06:21:45 CET 2026


On Mon Feb 2, 2026 at 7:40 PM IST, Siddharth Vadapalli wrote:
> 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 at ti.com>
> ---
>
> Hello,
>
> This patch is based on commit
> eed514b11d0 video: correct label for cyclic video_idle
> of the master branch of U-Boot.
>
> Patch has been tested on:
> 1. J721E-EVM (Has a QSGMII Daughtercard)
> https://gist.github.com/Siddharth-Vadapalli-at-TI/0b453ca7d9e133263ebe10f79b3f685f
> 2. J7200-EVM (Has a QSGMII Daughtercard)
> https://gist.github.com/Siddharth-Vadapalli-at-TI/3f408ec145e71404ef46194b8c1d4f5b
> 3. AM625-SK (Does not have a QSGMII Daughtercard and the 'undefined
> variable' error isn't seen):
> https://gist.github.com/Siddharth-Vadapalli-at-TI/a16d4a02701b7ef594fd1b98ee015144
>
> Regards,
> Siddharth.
>
>  board/ti/j7200/j7200.env     |  1 -
>  board/ti/j721e/evm.c         | 16 ++++++++++++++++
>  board/ti/j721e/j721e.env     |  3 ---
>  include/env/ti/ti_common.env |  3 +--
>  4 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/board/ti/j7200/j7200.env b/board/ti/j7200/j7200.env
> index 292fc72fd58..e22a954d8db 100644
> --- a/board/ti/j7200/j7200.env
> +++ b/board/ti/j7200/j7200.env
> @@ -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 at 22_17;
>  	gpio clear gpio at 22_16
>  main_cpsw0_qsgmii_phyinit=
> diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c
> index e030fe7dc87..d82bf4af7e8 100644
> --- a/board/ti/j721e/evm.c
> +++ b/board/ti/j721e/evm.c
> @@ -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;
> diff --git a/board/ti/j721e/j721e.env b/board/ti/j721e/j721e.env
> index ead7fbdb212..34f5f63d60a 100644
> --- a/board/ti/j721e/j721e.env
> +++ b/board/ti/j721e/j721e.env
> @@ -29,9 +29,6 @@ rd_spec=-
>  init_main_cpsw0_qsgmii_phy=gpio set gpio at 22_17;
>  	gpio clear gpio at 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;
> diff --git a/include/env/ti/ti_common.env b/include/env/ti/ti_common.env
> index 03e3267ef8a..a0ed83f52ac 100644
> --- a/include/env/ti/ti_common.env
> +++ b/include/env/ti/ti_common.env
> @@ -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;

The patch looks good to me however I wonder if we should factor out
cpsw0_qsgmii related envs out of ti_common.env since as far as I can
tell we only seem to be using it for the j721e/j7200 devices.

>  		then run main_cpsw0_qsgmii_phyinit;
>  	fi;
>  	run boot_rprocs;



More information about the U-Boot mailing list