Re: [PATCH v2] net: phy: air_en8811h: add AN8811HB MCU assert/deassert support
From: Lucien.Jheng <hidden>
Date: 2026-03-29 05:05:57
Also in:
lkml
Eric Woudstra 於 2026/3/28 下午 06:21 寫道:
On 3/27/26 5:41 AM, Eric Woudstra wrote:quoted
static int __air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address, u32 pbus_data) { int ret; ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_EXT_PAGE_ACCESS, (u16)(pbus_address >> 6)); if (ret < 0) return ret; ret = __mdiobus_write(mdio->bus, mdio->addr, (pbus_address >> 2) & 0xf, (u16)pbus_data); if (ret < 0) return ret; ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_PBUS_DATA_HIGH, (u16)(pbus_data >> 16)); if (ret < 0) return ret; return 0; } static int air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address, u32 pbus_data) { int ret; mutex_lock(&mdio->bus->mdio_lock); ret = __air_pbus_reg_write(mdio, pbus_address, pbus_data); if (ret < 0) dev_err(&mdio->dev, "%s 0x%08x failed: %d\n", __func__, pbus_address, ret); mutex_unlock(&mdio->bus->mdio_lock); return ret; } static int __air_pbus_reg_read(struct mdio_device *mdio, u32 pbus_address, u32 *pbus_data) { int ret, pbus_data_low; ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_EXT_PAGE_ACCESS, (u16)(pbus_address >> 6)); if (ret < 0) return ret; ret = __mdiobus_read(mdio->bus, mdio->addr, (pbus_address >> 2) & 0xf); if (ret < 0) return ret; pbus_data_low = ret; ret = __mdiobus_read(mdio->bus, mdio->addr, AIR_PBUS_DATA_HIGH); if (ret < 0) return ret; *pbus_data = (ret << 16) + pbus_data_low; return 0; } static int air_pbus_reg_read(struct mdio_device *mdio, u32 pbus_address, u32 *pbus_data) { int ret; mutex_lock(&mdio->bus->mdio_lock); ret = __air_pbus_reg_read(mdio, pbus_address, pbus_data); if (ret < 0) dev_err(&mdio->dev, "%s 0x%08x failed: %d\n", __func__, pbus_address, ret); mutex_unlock(&mdio->bus->mdio_lock); return ret; } With: #define AIR_PBUS_DATA_HIGH 0x10Small correction using upper_16_bits() and lower_16_bits(): static int __air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address, u32 pbus_data) { int ret; ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_EXT_PAGE_ACCESS, (u16)(pbus_address >> 6)); if (ret < 0) return ret; ret = __mdiobus_write(mdio->bus, mdio->addr, (pbus_address >> 2) & 0xf, lower_16_bits(pbus_data)); if (ret < 0) return ret; ret = __mdiobus_write(mdio->bus, mdio->addr, AIR_PBUS_DATA_HIGH, upper_16_bits(pbus_data)); if (ret < 0) return ret; return 0; } static int air_pbus_reg_write(struct mdio_device *mdio, u32 pbus_address, u32 pbus_data) { int ret; mutex_lock(&mdio->bus->mdio_lock); ret = __air_pbus_reg_write(mdio, pbus_address, pbus_data); if (ret < 0) dev_err(&mdio->dev, "%s 0x%08x failed: %d\n", __func__, pbus_address, ret); mutex_unlock(&mdio->bus->mdio_lock); return ret; }
Thank you for your feedback. I will include this in the next version.