[U-Boot, v2, 1/1] net: phy: Add the Airoha EN8811H PHY driver

Lucien.Jheng lucienzx159 at gmail.com
Sun Jun 29 18:10:27 CEST 2025


Marek Vasut 於 2025/6/29 下午 10:31 寫道:
> On 6/15/25 3:12 PM, Lucien.Jheng wrote:
>> Add the driver for the Airoha EN8811H 2.5 Gigabit PHY. The PHY supports
>> 100/1000/2500 Mbps with auto negotiation only.
>>
>> The driver uses two firmware files, for which updated versions are 
>> added to
>> linux-firmware already.
>>
>> Locating the AIROHA FW within the filesystem at the designated partition
>> and path will trigger its automatic loading and writing to the PHY 
>> via MDIO.
>> If need board specific loading override,
>> please override the en8811h_read_fw function on board or architecture 
>> level.
>>
>> Linux upstream AIROHA EN8811H driver commit:
>> 71e79430117d56c409c5ea485a263bc0d8083390
>>
>> Based on the Linux upstream AIROHA EN8811H driver code(air_en8811h.c),
>> I have modified the relevant process to align with the U-Boot boot 
>> sequence.
>> and have validated this on Banana Pi BPI-R3 Mini.
>>
>> Signed-off-by: Lucien.Jheng <lucienzx159 at gmail.com>
>> ---
>> Change in PATCH v2:
>> air_en8811h.c:
>>   * Fix: Indentation and coding style
>>   * Fix: Invert conditionals in some APIs to reduce indent.
>>   * Correct en8811h_read_fw(): Integrate malloc to allow other users to
>>     fully override the loading process and return a buffer containing 
>> the firmware from its source.
>>
>>   drivers/net/phy/Kconfig       |  43 ++
>>   drivers/net/phy/Makefile      |   1 +
>>   drivers/net/phy/air_en8811h.c | 857 ++++++++++++++++++++++++++++++++++
>>   3 files changed, 901 insertions(+)
>>   create mode 100644 drivers/net/phy/air_en8811h.c
>>
>> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
>> index 3132718e4f8..f053f8196c2 100644
>> --- a/drivers/net/phy/Kconfig
>> +++ b/drivers/net/phy/Kconfig
>> @@ -79,6 +79,49 @@ config PHY_ADIN
>>       help
>>           Add support for configuring RGMII on Analog Devices ADIN PHYs.
>>
>> +menuconfig PHY_AIROHA
>> +    bool "Airoha Ethernet PHYs support"
>> +
>> +config PHY_AIROHA_EN8811H
>> +    bool "Airoha Ethernet EN8811H support"
>> +    depends on PHY_AIROHA
>> +    help
>> +      AIROHA EN8811H supported.
>> +
>> +choice
>> +    prompt "Location of the Airoha PHY firmware"
>> +    default PHY_AIROHA_FW_IN_MMC
>> +    depends on PHY_AIROHA_EN8811H
>> +
>> +config PHY_AIROHA_FW_IN_MMC
>> +    bool "Airoha firmware in MMC partition"
>> +    help
>> +      Airoha PHYs use firmware which can be loaded automatically
>> +      from storage directly attached to the PHY, and then loaded
>> +      via MDIO commands by the boot loader. The firmware is loaded
>> +      from a file specified by the PHY_AIROHA_FW_PART,
>> +      PHY_AIROHA_FW_DM_FILEPATH and PHY_AIROHA_FW_DSP_FILEPATH options.
> I ran into the same firmware loading problem recently. I took a 
> different approach, have a look at [1] and specifically function 
> rcar_gen4_pcie_load_firmware() . This invokes U-Boot shell script , 
> which has to be defined by the user, and which loads the firmware by 
> whatever means necessary, from whatever storage or location . I think 
> that might be the generic approach to U-Boot firmware loading . If the 
> user needs to change the firmware loading location, they do not need 
> to rebuild the U-Boot itself, they simply update their environment and 
> the matching script. What do you think ?
>
> [1] 
> https://patchwork.ozlabs.org/project/uboot/patch/20250617081641.8385-5-marek.vasut+renesas@mailbox.org/ 
>

Hi Marek

I've looked at the `rcar_gen4_pcie_load_firmware` API. As you mentioned, 
it allows users to set the storage and location from the U-Boot shell, 
meaning they don't need to recompile U-Boot.

However, I recently checked out `FS_LOADER` and realized it's 
essentially the same approach as how I'm currently placing firmware on 
eMMC, just with a unified API(request_firmware_into_buf).

I'm wondering if there's a future possibility to integrate U-Boot shell 
scripts into `FS_LOADER`?

Also, given that the Kernel has a built-in firmware mechanism where 
files are compiled directly into the Kernel image, I'm curious if U-Boot 
might adopt a similar approach in the future. I'm also considering if 
`binman_sym` could be a viable alternative.

For the short term, though, I'll go ahead and submit the EN8811H 
firmware loading method using the `rcar_gen4_pcie_load_firmware` 
approach. I'll then explore potential improvements later.

Thanks!





More information about the U-Boot mailing list