From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mario Six Date: Fri, 27 Apr 2018 14:52:10 +0200 Subject: [U-Boot] [PATCH v2 2/2] ihs_mdio: Make DM-compatible In-Reply-To: <20180427125210.891-1-mario.six@gdsys.cc> References: <20180427125210.891-1-mario.six@gdsys.cc> Message-ID: <20180427125210.891-2-mario.six@gdsys.cc> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Make the ihs_mdio driver DM-compatible, while retaining the old functionality for not-yet-converted boards. Signed-off-by: Mario Six --- v1 -> v2: * Switched to regmap usage (instead of fpgamap) --- 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 b5fe3dbbdc..6b06b1d692 100644 --- a/board/gdsys/common/ihs_mdio.c +++ b/board/gdsys/common/ihs_mdio.c @@ -7,36 +7,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 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