[U-Boot] [PATCH 1/2] ihs_mdio: Encapsulate register access

To prepare for DM conversion, encapsulate all register accesses in function calls.
Signed-off-by: Mario Six mario.six@gdsys.cc --- board/gdsys/common/ihs_mdio.c | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-)
diff --git a/board/gdsys/common/ihs_mdio.c b/board/gdsys/common/ihs_mdio.c index 822517d4b2..b5fe3dbbdc 100644 --- a/board/gdsys/common/ihs_mdio.c +++ b/board/gdsys/common/ihs_mdio.c @@ -12,6 +12,34 @@
#include "ihs_mdio.h"
+static inline u16 read_control(struct ihs_mdio_info *info) +{ + u16 val; + + FPGA_GET_REG(info->fpga, mdio.control, &val); + + return val; +} + +static inline void write_control(struct ihs_mdio_info *info, u16 val) +{ + FPGA_SET_REG(info->fpga, mdio.control, val); +} + +static inline void write_addr_data(struct ihs_mdio_info *info, u16 val) +{ + FPGA_SET_REG(info->fpga, mdio.address_data, val); +} + +static inline u16 read_rx_data(struct ihs_mdio_info *info) +{ + u16 val; + + FPGA_GET_REG(info->fpga, mdio.rx_data, &val); + + return val; +} + static int ihs_mdio_idle(struct mii_dev *bus) { struct ihs_mdio_info *info = bus->priv; @@ -19,7 +47,7 @@ static int ihs_mdio_idle(struct mii_dev *bus) unsigned int ctr = 0;
do { - FPGA_GET_REG(info->fpga, mdio.control, &val); + val = read_control(info); udelay(100); if (ctr++ > 10) return -1; @@ -43,13 +71,13 @@ static int ihs_mdio_read(struct mii_dev *bus, int addr, int dev_addr,
ihs_mdio_idle(bus);
- FPGA_SET_REG(info->fpga, mdio.control, - ((addr & 0x1f) << 5) | (regnum & 0x1f) | (2 << 10)); + write_control(info, + ((addr & 0x1f) << 5) | (regnum & 0x1f) | (2 << 10));
/* wait for rx data available */ udelay(100);
- FPGA_GET_REG(info->fpga, mdio.rx_data, &val); + val = read_rx_data(info);
return val; } @@ -61,9 +89,8 @@ static int ihs_mdio_write(struct mii_dev *bus, int addr, int dev_addr,
ihs_mdio_idle(bus);
- FPGA_SET_REG(info->fpga, mdio.address_data, value); - FPGA_SET_REG(info->fpga, mdio.control, - ((addr & 0x1f) << 5) | (regnum & 0x1f) | (1 << 10)); + write_addr_data(info, value); + write_control(info, ((addr & 0x1f) << 5) | (regnum & 0x1f) | (1 << 10));
return 0; }

Make the ihs_mdio driver DM-compatible, while retaining the old functionality for not-yet-converted boards.
Signed-off-by: Mario Six mario.six@gdsys.cc --- board/gdsys/common/ihs_mdio.c | 38 +++++++++++++++++++++++++++++++++----- board/gdsys/common/ihs_mdio.h | 5 +++++ 2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/board/gdsys/common/ihs_mdio.c b/board/gdsys/common/ihs_mdio.c index b5fe3dbbdc..43355f0069 100644 --- a/board/gdsys/common/ihs_mdio.c +++ b/board/gdsys/common/ihs_mdio.c @@ -7,36 +7,64 @@
#include <common.h>
-#include <gdsys_fpga.h> #include <miiphy.h> +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS +#include <gdsys_fpga.h> +#else +#include <fpgamap.h> +#endif
#include "ihs_mdio.h"
+#ifndef CONFIG_GDSYS_LEGACY_DRIVERS +enum { + REG_MDIO_CONTROL = 0x0, + REG_MDIO_ADDR_DATA = 0x2, + REG_MDIO_RX_DATA = 0x4, +}; +#endif + static inline u16 read_control(struct ihs_mdio_info *info) { u16 val; - +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS FPGA_GET_REG(info->fpga, mdio.control, &val); - +#else + fpgamap_read(info->fpga, info->base + REG_MDIO_CONTROL, &val, + FPGAMAP_SIZE_16); +#endif return val; }
static inline void write_control(struct ihs_mdio_info *info, u16 val) { +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS FPGA_SET_REG(info->fpga, mdio.control, val); +#else + fpgamap_write(info->fpga, info->base + REG_MDIO_CONTROL, &val, + FPGAMAP_SIZE_16); +#endif }
static inline void write_addr_data(struct ihs_mdio_info *info, u16 val) { +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS FPGA_SET_REG(info->fpga, mdio.address_data, val); +#else + fpgamap_write(info->fpga, info->base + REG_MDIO_ADDR_DATA, &val, + FPGAMAP_SIZE_16); +#endif }
static inline u16 read_rx_data(struct ihs_mdio_info *info) { u16 val; - +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS FPGA_GET_REG(info->fpga, mdio.rx_data, &val); - +#else + fpgamap_read(info->fpga, info->base + REG_MDIO_RX_DATA, &val, + FPGAMAP_SIZE_16); +#endif return val; }
diff --git a/board/gdsys/common/ihs_mdio.h b/board/gdsys/common/ihs_mdio.h index 64b4049378..3e3ba25bc6 100644 --- a/board/gdsys/common/ihs_mdio.h +++ b/board/gdsys/common/ihs_mdio.h @@ -9,7 +9,12 @@ #define _IHS_MDIO_H_
struct ihs_mdio_info { +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS u32 fpga; +#else + struct udevice *fpga; + int base; +#endif char *name; };
-- 2.16.1
participants (1)
-
Mario Six