From cedefd833bc33942fc50f242fb8c96c7491136fa Mon Sep 17 00:00:00 2001 From: Markus Stockhausen Date: Wed, 25 Mar 2026 10:54:11 +0100 Subject: [PATCH] realtek: mdio: create new port structure The central control structure of the mdio bus holds several attributes. These target two different objects. Some of them are for the (up to 56) controller ports, some of them are for the (up to 4) controller busses. Establish a separate port structure that will hold data about each port and use it in the control structure. As a first usage type move the page attribute over. Signed-off-by: Markus Stockhausen Link: https://github.com/openwrt/openwrt/pull/22604 Signed-off-by: Robert Marko --- .../drivers/net/mdio/mdio-realtek-otto.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c b/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c index 1b293c3141..5806581c79 100644 --- a/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c +++ b/target/linux/realtek/files-6.12/drivers/net/mdio/mdio-realtek-otto.c @@ -172,11 +172,14 @@ * reimplemented. For now it should be sufficient. */ +struct rtmdio_port { + int page; +}; struct rtmdio_ctrl { struct regmap *map; const struct rtmdio_config *cfg; - int page[RTMDIO_MAX_PHY]; + struct rtmdio_port port[RTMDIO_MAX_PHY]; bool raw[RTMDIO_MAX_PHY]; int smi_bus[RTMDIO_MAX_PHY]; int smi_addr[RTMDIO_MAX_PHY]; @@ -508,14 +511,14 @@ static int rtmdio_read(struct mii_bus *bus, int addr, int regnum) if (addr >= ctrl->cfg->num_phys) return -ENODEV; - if (regnum == RTMDIO_PAGE_SELECT && ctrl->page[addr] != ctrl->cfg->raw_page) - return ctrl->page[addr]; + if (regnum == RTMDIO_PAGE_SELECT && ctrl->port[addr].page != ctrl->cfg->raw_page) + return ctrl->port[addr].page; - ctrl->raw[addr] = (ctrl->page[addr] == ctrl->cfg->raw_page); + ctrl->raw[addr] = (ctrl->port[addr].page == ctrl->cfg->raw_page); - err = (*ctrl->cfg->read_phy)(bus, addr, ctrl->page[addr], regnum, &val); + err = (*ctrl->cfg->read_phy)(bus, addr, ctrl->port[addr].page, regnum, &val); pr_debug("rd_PHY(adr=%d, pag=%d, reg=%d) = %d, err = %d\n", - addr, ctrl->page[addr], regnum, val, err); + addr, ctrl->port[addr].page, regnum, val, err); return err ? err : val; } @@ -541,10 +544,10 @@ static int rtmdio_write(struct mii_bus *bus, int addr, int regnum, u16 val) if (addr >= ctrl->cfg->num_phys) return -ENODEV; - page = ctrl->page[addr]; + page = ctrl->port[addr].page; if (regnum == RTMDIO_PAGE_SELECT) - ctrl->page[addr] = val; + ctrl->port[addr].page = val; if (!ctrl->raw[addr] && (regnum != RTMDIO_PAGE_SELECT || page == ctrl->cfg->raw_page)) { ctrl->raw[addr] = (page == ctrl->cfg->raw_page);