+Vignesh & Siddharth
On 22/01/2025 10:53, Chintan Vankar wrote:
>
>
> On 07/01/25 20:03, Roger Quadros wrote:
>>
>>
>> On 07/01/2025 11:38, Chintan Vankar wrote:
>>> To support Ethernet boot on AM68-SK, probe AM65 CPSW NUSS driver in
>>> board_init_f().
>>>
>>> Signed-off-by: Chintan Vankar <[email protected]>
>>> ---
>>> arch/arm/mach-k3/j721s2/j721s2_init.c | 10 ++++++++++
>>> 1 file changed, 10 insertions(+)
>>>
>>> diff --git a/arch/arm/mach-k3/j721s2/j721s2_init.c
>>> b/arch/arm/mach-k3/j721s2/j721s2_init.c
>>> index 6ce3eb87efb..7208bee5785 100644
>>> --- a/arch/arm/mach-k3/j721s2/j721s2_init.c
>>> +++ b/arch/arm/mach-k3/j721s2/j721s2_init.c
>>> @@ -329,6 +329,16 @@ void board_init_f(ulong dummy)
>>> setup_qos();
>>> + if (IS_ENABLED(CONFIG_SPL_ETH) &&
>>> IS_ENABLED(CONFIG_TI_AM65_CPSW_NUSS) &&
>>> + spl_boot_device() == BOOT_DEVICE_ETHERNET) {
>>> + struct udevice *cpswdev;
>>> +
>>> + ret = uclass_get_device_by_driver(UCLASS_MISC,
>>> DM_DRIVER_GET(am65_cpsw_nuss),
>>> + &cpswdev);
>>> + if (ret)
>>> + printf("Failed to probe am65_cpsw_nuss driver..\n");
>>> + }
>>> +
>>
>> This looks like a hack. Please find out why the Ethernet driver is not being
>> probed when SPL tries to load image over net.
>>
>
> Hello Roger,
>
> The driver is defined as UCLASS_MISC which should be probed explicitly,
The driver was originally built without UCLASS_MISC, but
commit 38922b1f4acc ("net: ti: am65-cpsw: Add support for multi port
independent MAC mode")
Added UCLASS_MISC and states there that
" Since top level driver is now UCLASS_MISC, board files would need to
instantiate this driver explicitly."
Not an elegant solution. So we need to fix something in the am65-cpuss driver.
Looking at drivers/net/mvpp2.c we can see a possible solution.
1) don't define .probe for the parent driver (UCLASS_MISC). Instead define .bind
that will scan the device tree for ports and bind the port device and driver.
e.g. see mvpp2_base_bind()
2) in port driver .probe (UCLASS_ETH), if parent has not been probed
then call the parent probe (am65_cpsw_probe_nuss) . Also set a flag so parent
probe
only gets called once.
3) update all board files no not explicitly probe the am65-cpsw UCLASS_MISC
driver.
Siddharth / Vignesh do you see any issues with this solution?
> I have discussed the same with Nishanth in following thread:
> https://lore.kernel.org/all/[email protected]/
>
>> We have the following defined at the am65-cpsw-nuss driver.
>>
>> U_BOOT_DRIVER(am65_cpsw_nuss) = {
>> .name = "am65_cpsw_nuss",
>> .id = UCLASS_MISC,
>> .of_match = am65_cpsw_nuss_ids,
>> .probe = am65_cpsw_probe_nuss,
>> .priv_auto = sizeof(struct am65_cpsw_common),
>> };
>>
>> U_BOOT_DRIVER(am65_cpsw_nuss_port) = {
>> .name = "am65_cpsw_nuss_port",
>> .id = UCLASS_ETH,
>> .probe = am65_cpsw_port_probe,
>> .ops = &am65_cpsw_ops,
>> .priv_auto = sizeof(struct am65_cpsw_priv),
>> .plat_auto = sizeof(struct eth_pdata),
>> .flags = DM_FLAG_ALLOC_PRIV_DMA | DM_FLAG_OS_PREPARE,
>> };
>>
>> It looks like am65_cpsw_probe_nuss() is not being invoked for you.
>>
>> Can you please check if am65_cpsw_port_probe() was invoked?
>> If yes but am65_cpsw_probe_nuss() was not then we need to fix the
>> DM hierarchy for AM65_CPSW?
>>
> None of the probe function is getting invoked here, since we need
That is strange. am65_cpsw_probe_nuss() should be called at least for
port 0 since it is defined as UCLASS_ETH.
> Ethernet functionality here we need to probe function in board_init_f().
> We have discussed the same at here:
> https://lore.kernel.org/r/[email protected]/#t
>
>
>>> if (IS_ENABLED(CONFIG_CPU_V7R) && IS_ENABLED(CONFIG_K3_AVS0)) {
>>> ret = uclass_get_device_by_driver(UCLASS_MISC,
>>> DM_DRIVER_GET(k3_avs),
>>> &dev);
>>
--
cheers,
-roger