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

Marek Vasut marek.vasut at mailbox.org
Sun Jun 29 16:31:45 CEST 2025


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/


More information about the U-Boot mailing list