RE: [PATCH net-next v7 4/4] net: phy: realtek: load firmware for RTL8261C_CG
From: Javen <hidden>
Date: 2026-07-01 03:14:02
Also in:
lkml
On Mon, Jun 29, 2026 at 02:47:18PM +0800, javen wrote:quoted
From: Javen Xu <redacted> This patch adds support for loading firmware. Download some parameters for RTL8261C_CG. Signed-off-by: Javen Xu <redacted> --- Changes in v2: - remove __pack, struct rtl8261x_fw_header and rtl8261x_fw_entry will not pad - reverse xmas tree for some definition - add explanation on rtl_phy_write_mmd_bits() Changes in v3: - add struct rtl8261x_priv Changes in v4: - add struct device *dev Changes in v5: - no changes Changes in v6: - replace rtl_phy_write_mmd_bits with phy_modify_mmd, keep mdio lock - check msb and lsb at the beginning of rtl8261x_fw_execute_entry() - add comments on rtl8261x_config_init() Changes in v7: - no changes --- drivers/net/phy/realtek/realtek_main.c | 220 +++++++++++++++++++++++++ 1 file changed, 220 insertions(+)diff --git a/drivers/net/phy/realtek/realtek_main.cb/drivers/net/phy/realtek/realtek_main.c index ef3700894ebf..bf7bc19fb44c 100644--- a/drivers/net/phy/realtek/realtek_main.c +++ b/drivers/net/phy/realtek/realtek_main.c@@ -8,7 +8,9 @@ * Copyright (c) 2004 Freescale Semiconductor, Inc. */ #include <linux/bitops.h> +#include <linux/crc32.h> #include <linux/ethtool_netlink.h> +#include <linux/firmware.h> #include <linux/of.h> #include <linux/phy.h> #include <linux/pm_wakeirq.h>@@ -281,6 +283,42 @@ RTL8261X_INT_ALDPS_CHG | \ RTL8261X_INT_JABBER) +#define FW_MAIN_MAGIC 0x52544C38 +#define FW_SUB_MAGIC_8261C 0x32363143 +#define RTL8261X_POLL_TIMEOUT_MS 100 + +#define RTL8261C_CE_FW_NAME "rtl_nic/rtl8261c.bin" +MODULE_FIRMWARE(RTL8261C_CE_FW_NAME); + +enum rtl8261x_fw_op { + OP_WRITE = 0x00, /* Write */ + OP_POLL = 0x02, /* Polling */ +}; + +struct rtl8261x_fw_header { + __le32 main_magic; /* Main magic number 0x52544C38 ("RTL8") */ + __le32 sub_magic; /* Sub magic number */ + __le16 version_major; /* Major version */ + __le16 version_minor; /* Minor version */ + __le16 num_entries; /* Number of entries */ + __le16 reserved; /* Reserved */ + __le32 crc32; /* CRC32 checksum */ +}; + +struct rtl8261x_fw_entry { + __u8 type; /* Operation type (OP_*) */ + __u8 dev; /* MMD device */ + __le16 addr; /* Register address */ + __u8 msb; /* MSB bit position */ + __u8 lsb; /* LSB bit position */ + __le16 value; /* Value to write/compare */ + __le16 timeout_ms; /* Poll timeout in milliseconds */ + __u8 poll_set; /* Poll for set (1) or clear (0) */ + __u8 reserved; /* Reserved */ +};Are there other devices which need firmware download? Do they use the same header? I'm just wondering if this will be reused by other devices?
Hi Andrew, Currently, RTL8261C is the only device which needs this firmware download flow. Future Realtek PHY ICs which require firmware download are expected to use the same firmware format, so the current header/entry definition is intended to be reusable. BRs, Javen
Andrew