[PATCH 1/1] [U-Boot, v4, 1/1]net: phy: Add the Airoha EN8811H PHY driver
Marek Vasut
marek.vasut at mailbox.org
Sun Sep 14 19:49:23 CEST 2025
On 9/14/25 6:41 AM, 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 v4:
> air_en8811.c:
> * Create the airoha folder
directory
> to store all future airoha phy drivers.
> * Use `request_firmware_into_buf_via_script` for firmware loading.
[...]
> +++ b/drivers/net/phy/airoha/Kconfig
> @@ -0,0 +1,11 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +menuconfig PHY_AIROHA
> + bool "Airoha Ethernet PHYs support"
> +
> +config PHY_AIROHA_EN8811
> + bool "Airoha Ethernet EN8811H support"
> + depends on PHY_AIROHA
> + select FS_LOADER
It seems tabs/spaces are mixed here, please fix.
> + help
> + AIROHA EN8811H supported.
[...]
> +#define EN8811H_MD32_DM_SIZE 0x4000
> +#define EN8811H_MD32_DSP_SIZE 0x20000
> +
> + #define EN8811H_FW_CTRL_1 0x0f0018
> + #define EN8811H_FW_CTRL_1_START 0x0
> + #define EN8811H_FW_CTRL_1_FINISH 0x1
> + #define EN8811H_FW_CTRL_2 0x800000
> + #define EN8811H_FW_CTRL_2_LOADING BIT(11)
Same here, avoid leading space.
[...]
> +__weak int en8811h_read_fw(void **addr)
Does this still have to be a __weak function, now that it uses generic
fw loader ?
> +{
> + void *buffer;
> + int ret;
> +
> + if (!IS_ENABLED(CONFIG_FS_LOADER))
> + return -EOPNOTSUPP;
> +
> + buffer = malloc(EN8811H_MD32_DM_SIZE + EN8811H_MD32_DSP_SIZE);
> + if (!buffer) {
> + printf("Failed to allocate memory for firmware\n");
> + return -ENOMEM;
> + }
> +
> + ret = request_firmware_into_buf_via_script(&buffer,
I think 'buffer' without the & should be used here.
> + EN8811H_MD32_DM_SIZE + EN8811H_MD32_DSP_SIZE,
> + "en8811h_load_firmware");
[...]
More information about the U-Boot
mailing list