On 9/14/25 6:41 AM, Lucien.Jheng wrote:

+#include <phy.h>
+#include <errno.h>
+#include <log.h>
+#include <env.h>
+#include <malloc.h>
+#include <fs_loader.h>
+#include <asm/unaligned.h>
+#include <linux/iopoll.h>
+#include <linux/bitops.h>
+#include <linux/compat.h>
+#include <dm/device_compat.h>
+#include <u-boot/crc.h>

Keep the list sorted.

+#define air_upper_16_bits(n) ((u16)((n) >> 16))
+#define air_lower_16_bits(n) ((u16)((n) & 0xffff))

As a separate/follow up patch, you could port Linux wordpart.h to U-Boot .
[...]

+struct en8811h_priv {
+       int firmware_version;
+       bool            mcu_needs_restart;
+       struct led      led[EN8811H_LED_COUNT];
+};

Use tabs consistently , there is a space before firmware_version , replace with tab.

[...]

+static int en8811h_load_firmware(struct phy_device *phydev)
+{
+       struct en8811h_priv *priv = phydev->priv;
+       void *buffer;
+       int ret;
+
+       if (!IS_ENABLED(CONFIG_FS_LOADER))
+               return -EOPNOTSUPP;
+
+       ret = en8811h_read_fw(&buffer);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = air_buckpbus_reg_write(phydev, EN8811H_FW_CTRL_1,
+                                    EN8811H_FW_CTRL_1_START);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = air_buckpbus_reg_modify(phydev, EN8811H_FW_CTRL_2,
+                                     EN8811H_FW_CTRL_2_LOADING,
+                                     EN8811H_FW_CTRL_2_LOADING);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = air_write_buf(phydev, AIR_FW_ADDR_DM, EN8811H_MD32_DM_SIZE,
+                           (unsigned char *)buffer);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = air_write_buf(phydev, AIR_FW_ADDR_DSP, EN8811H_MD32_DSP_SIZE,
+                           (unsigned char *)buffer + EN8811H_MD32_DM_SIZE);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = air_buckpbus_reg_modify(phydev, EN8811H_FW_CTRL_2,
+                                     EN8811H_FW_CTRL_2_LOADING, 0);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = air_buckpbus_reg_write(phydev, EN8811H_FW_CTRL_1,
+                                    EN8811H_FW_CTRL_1_FINISH);
+       if (ret < 0)
+               goto en8811h_load_firmware_out;
+
+       ret = en8811h_wait_mcu_ready(phydev);
+
+       air_buckpbus_reg_read(phydev, EN8811H_FW_VERSION,
+                             &priv->firmware_version);
+       printf("MD32 firmware version: %08x\n",
+              priv->firmware_version);

Can this be log_debug() or debug() , or is this print really needed ?

+en8811h_load_firmware_out:
+       free(buffer);
+       if (ret < 0)
+               printf("Firmware loading failed: %d\n", ret);
+
+       return ret;
+}

[...]

+static int en8811h_probe(struct phy_device *phydev)
+{
+       struct en8811h_priv *priv;
+
+       priv = malloc(sizeof(*priv));

Use "priv = calloc(1, sizeof(*priv));" and you can remove the memset() below, calloc zeroes out the allocated data.

+       if (!priv)
+               return -ENOMEM;
+       memset(priv, 0, sizeof(*priv));
[...]

Reply via email to