qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 3/4] hw/arm: sabrelite: Connect the Ethernet PHY at addres


From: Guenter Roeck
Subject: Re: [PATCH v3 3/4] hw/arm: sabrelite: Connect the Ethernet PHY at address 6
Date: Sun, 2 May 2021 06:58:54 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1

On 5/1/21 6:37 PM, Guenter Roeck wrote:
> On 5/1/21 5:24 PM, Bin Meng wrote:
>> On Sun, May 2, 2021 at 7:21 AM Guenter Roeck <linux@roeck-us.net> wrote:
>>>
>>> On 5/1/21 2:40 PM, Philippe Mathieu-Daudé wrote:
>>>> On 5/1/21 10:12 PM, Guenter Roeck wrote:
>>>>> On 4/30/21 9:28 PM, Bin Meng wrote:
>>>>>> On Fri, Apr 30, 2021 at 10:41 PM Guenter Roeck <linux@roeck-us.net> 
>>>>>> wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> On Wed, Jan 06, 2021 at 02:35:03PM +0800, Bin Meng wrote:
>>>>>>>> From: Bin Meng <bin.meng@windriver.com>
>>>>>>>>
>>>>>>>> At present, when booting U-Boot on QEMU sabrelite, we see:
>>>>>>>>
>>>>>>>>   Net:   Board Net Initialization Failed
>>>>>>>>   No ethernet found.
>>>>>>>>
>>>>>>>> U-Boot scans PHY at address 4/5/6/7 (see board_eth_init() in the
>>>>>>>> U-Boot source: board/boundary/nitrogen6x/nitrogen6x.c). On the real
>>>>>>>> board, the Ethernet PHY is at address 6. Adjust this by updating the
>>>>>>>> "fec-phy-num" property of the fsl_imx6 SoC object.
>>>>>>>>
>>>>>>>> With this change, U-Boot sees the PHY but complains MAC address:
>>>>>>>>
>>>>>>>>   Net:   using phy at 6
>>>>>>>>   FEC [PRIME]
>>>>>>>>   Error: FEC address not set.
>>>>>>>>
>>>>>>>> This is due to U-Boot tries to read the MAC address from the fuse,
>>>>>>>> which QEMU does not have any valid content filled in. However this
>>>>>>>> does not prevent the Ethernet from working in QEMU. We just need to
>>>>>>>> set up the MAC address later in the U-Boot command shell, by:
>>>>>>>>
>>>>>>>>   => setenv ethaddr 00:11:22:33:44:55
>>>>>>>>
>>>>>>>
>>>>>>> With this patch in place, the standard Ethernet interface no longer 
>>>>>>> works when
>>>>>>> booting sabrelite Linux images directly (without u-boot) using the 
>>>>>>> following
>>>>>>> qemu command.
>>>>>>>         qemu-system-arm -M sabrelite -kernel arch/arm/boot/zImage
>>>>>>>         ...
>>>>>>>
>>>>>>> The Ethernet interface still instantiates, but packet transfer to the 
>>>>>>> host
>>>>>>> no longer works. Reverting this patch fixes the problem for me.
>>>>>>>
>>>>>>> Is there a qemu command line parameter that is now necessary to 
>>>>>>> instantiate
>>>>>>> the Ethernet interface when booting Linux ?
>>>>>>
>>>>>> Enabling "guest_errors" shows that Linux kernel fec driver is trying
>>>>>> to read PHY at address 0, which is not what we want.
>>>>>>
>>>>>> [imx.fec.phy]imx_phy_read: Bad phy num 0
>>>>>>
>>>>>> The device tree blob of the sabrelite does not contain a node for the
>>>>>> ethernet phy specifying phy address, so I suspect Linux kernel driver
>>>>>> is using default phy address 0 instead.
>>>>>>
>>>>>> Could you please test on a real hardware to see what happens?
>>>>>>
>>>>>
>>>>> The problem is that qemu returns 0 when the OS tries to read from a
>>>>> non-existing PHY. Linux expects it to return 0xffff, and believes that
>>>>> a PHY is there if 0 is returned.
>>>>
>>>> Correct.
>>>>
>>>
>>> I'll send a patch. Next question is why the Ethernet interfaces on 
>>> mcimx6ul-evk
>>> and mcimx7d-sabre don't work. I either get no connectivity at all (similar 
>>> to
>>> the above) or something like
>>>
>>> fec 2188000.ethernet eth1: Unable to connect to phy
>>> ifconfig: SIOCSIFFLAGS: No such device
>>>
>>> Any idea ?
>>
>> I don't see these 2 are supported targets of QEMU:
>> https://wiki.qemu.org/Documentation/Platforms/ARM
>>
> 
> Reality says otherwise.
> 
> $ qemu-system-arm --version
> QEMU emulator version 6.0.0 (v6.0.0-25-geac5bb0cc1-dirty)
> Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers
> $ qemu-system-arm -M ? | grep mcim
> mcimx6ul-evk         Freescale i.MX6UL Evaluation Kit (Cortex A7)
> mcimx7d-sabre        Freescale i.MX7 DUAL SABRE (Cortex A7)
> 

Anyway, the underlying problem is that the phy chips are not connected
to the MDIO bus associated with each Ethernet controller. In other words,
unlike the current imx fec emulation suggests, there is no 1:1 connection
between Ethernet and phy. This is even mentioned in commit 461c51ad42
("Add a phy-num property to the i.MX FEC emulator"):

"As an example with the i.MX6UL the NXP SOC has 2 Ethernet devices but
 only one MDIO bus on which the 2 related PHY are connected but at unique
 addresses."

Unfortunately that commit doesn't actually solve the problem where 2 Ethernet
devices are connected to a single MDIO bus; it just adds support for setting
the phy address.

I have no idea how to solve that in a clean way in qemu.

Guenter



reply via email to

[Prev in Thread] Current Thread [Next in Thread]