From 9a519dfe8a3789012c6621f50e90a92b5ab84d21 Mon Sep 17 00:00:00 2001 From: Mario Six Date: Fri, 27 Apr 2018 14:52:10 +0200 Subject: [PATCH] ihs_mdio: Make DM-compatible Make the ihs_mdio driver DM-compatible, while retaining the old functionality for not-yet-converted boards. Signed-off-by: Mario Six --- board/gdsys/common/ihs_mdio.c | 58 ++++++++++++++++++++++++++++++++--- board/gdsys/common/ihs_mdio.h | 5 +++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/board/gdsys/common/ihs_mdio.c b/board/gdsys/common/ihs_mdio.c index 664643486a..b17e8db91b 100644 --- a/board/gdsys/common/ihs_mdio.c +++ b/board/gdsys/common/ihs_mdio.c @@ -6,36 +6,84 @@ #include -#include #include +#ifdef CONFIG_GDSYS_LEGACY_DRIVERS +#include +#else +#include +#include +#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, +}; + +static inline u16 read_reg(struct udevice *fpga, uint base, uint addr) +{ + struct regmap *map; + u8 *ptr; + + regmap_init_mem(fpga, &map); + ptr = regmap_get_range(map, 0); + + return in_le16((u16 *)(ptr + base + addr)); +} + +static inline void write_reg(struct udevice *fpga, uint base, uint addr, + u16 val) +{ + struct regmap *map; + u8 *ptr; + + regmap_init_mem(fpga, &map); + ptr = regmap_get_range(map, 0); + + out_le16((u16 *)(ptr + base + addr), val); +} +#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 + val = read_reg(info->fpga, info->base, REG_MDIO_CONTROL); +#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 + write_reg(info->fpga, info->base, REG_MDIO_CONTROL, val); +#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 + write_reg(info->fpga, info->base, REG_MDIO_ADDR_DATA, val); +#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 + val = read_reg(info->fpga, info->base, REG_MDIO_RX_DATA); +#endif return val; } diff --git a/board/gdsys/common/ihs_mdio.h b/board/gdsys/common/ihs_mdio.h index cddc335c10..d0a4b0d7a8 100644 --- a/board/gdsys/common/ihs_mdio.h +++ b/board/gdsys/common/ihs_mdio.h @@ -8,7 +8,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.25.1