summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2019-08-09 10:40:33 -0400
committerArnd Bergmann <arnd@arndb.de>2019-08-15 15:33:52 -0400
commitecca1a6277aac10e40e4baba28adb893899b24b3 (patch)
treec36f914a8560d30ef2a188896b74429edac697aa
parent9dc03ffd996d4103cc2a11286d61e517bce27440 (diff)
net: lpc-enet: move phy setup into platform code
Setting the phy mode requires touching a platform specific register, which prevents us from building the driver without its header files. Move it into a separate function in arch/arm/mach/lpc32xx to hide the core registers from the network driver. Link: https://lore.kernel.org/r/20190809144043.476786-8-arnd@arndb.de Acked-by: Sylvain Lemieux <slemieux.tyco@gmail.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--arch/arm/mach-lpc32xx/common.c12
-rw-r--r--drivers/net/ethernet/nxp/lpc_eth.c12
-rw-r--r--include/linux/soc/nxp/lpc32xx-misc.h5
3 files changed, 18 insertions, 11 deletions
diff --git a/arch/arm/mach-lpc32xx/common.c b/arch/arm/mach-lpc32xx/common.c
index f648324d5fb4..a475339333c1 100644
--- a/arch/arm/mach-lpc32xx/common.c
+++ b/arch/arm/mach-lpc32xx/common.c
@@ -63,6 +63,18 @@ u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr)
63} 63}
64EXPORT_SYMBOL_GPL(lpc32xx_return_iram); 64EXPORT_SYMBOL_GPL(lpc32xx_return_iram);
65 65
66void lpc32xx_set_phy_interface_mode(phy_interface_t mode)
67{
68 u32 tmp = __raw_readl(LPC32XX_CLKPWR_MACCLK_CTRL);
69 tmp &= ~LPC32XX_CLKPWR_MACCTRL_PINS_MSK;
70 if (mode == PHY_INTERFACE_MODE_MII)
71 tmp |= LPC32XX_CLKPWR_MACCTRL_USE_MII_PINS;
72 else
73 tmp |= LPC32XX_CLKPWR_MACCTRL_USE_RMII_PINS;
74 __raw_writel(tmp, LPC32XX_CLKPWR_MACCLK_CTRL);
75}
76EXPORT_SYMBOL_GPL(lpc32xx_set_phy_interface_mode);
77
66static struct map_desc lpc32xx_io_desc[] __initdata = { 78static struct map_desc lpc32xx_io_desc[] __initdata = {
67 { 79 {
68 .virtual = (unsigned long)IO_ADDRESS(LPC32XX_AHB0_START), 80 .virtual = (unsigned long)IO_ADDRESS(LPC32XX_AHB0_START),
diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
index bcdd0adcfb0c..0893b77c385d 100644
--- a/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/drivers/net/ethernet/nxp/lpc_eth.c
@@ -20,9 +20,6 @@
20#include <linux/spinlock.h> 20#include <linux/spinlock.h>
21#include <linux/soc/nxp/lpc32xx-misc.h> 21#include <linux/soc/nxp/lpc32xx-misc.h>
22 22
23#include <mach/hardware.h>
24#include <mach/platform.h>
25
26#define MODNAME "lpc-eth" 23#define MODNAME "lpc-eth"
27#define DRV_VERSION "1.00" 24#define DRV_VERSION "1.00"
28 25
@@ -1237,16 +1234,9 @@ static int lpc_eth_drv_probe(struct platform_device *pdev)
1237 dma_addr_t dma_handle; 1234 dma_addr_t dma_handle;
1238 struct resource *res; 1235 struct resource *res;
1239 int irq, ret; 1236 int irq, ret;
1240 u32 tmp;
1241 1237
1242 /* Setup network interface for RMII or MII mode */ 1238 /* Setup network interface for RMII or MII mode */
1243 tmp = __raw_readl(LPC32XX_CLKPWR_MACCLK_CTRL); 1239 lpc32xx_set_phy_interface_mode(lpc_phy_interface_mode(dev));
1244 tmp &= ~LPC32XX_CLKPWR_MACCTRL_PINS_MSK;
1245 if (lpc_phy_interface_mode(dev) == PHY_INTERFACE_MODE_MII)
1246 tmp |= LPC32XX_CLKPWR_MACCTRL_USE_MII_PINS;
1247 else
1248 tmp |= LPC32XX_CLKPWR_MACCTRL_USE_RMII_PINS;
1249 __raw_writel(tmp, LPC32XX_CLKPWR_MACCLK_CTRL);
1250 1240
1251 /* Get platform resources */ 1241 /* Get platform resources */
1252 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1242 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
diff --git a/include/linux/soc/nxp/lpc32xx-misc.h b/include/linux/soc/nxp/lpc32xx-misc.h
index f232e1a1bcdc..af4f82f6cf3b 100644
--- a/include/linux/soc/nxp/lpc32xx-misc.h
+++ b/include/linux/soc/nxp/lpc32xx-misc.h
@@ -9,9 +9,11 @@
9#define __SOC_LPC32XX_MISC_H 9#define __SOC_LPC32XX_MISC_H
10 10
11#include <linux/types.h> 11#include <linux/types.h>
12#include <linux/phy.h>
12 13
13#ifdef CONFIG_ARCH_LPC32XX 14#ifdef CONFIG_ARCH_LPC32XX
14extern u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr); 15extern u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr);
16extern void lpc32xx_set_phy_interface_mode(phy_interface_t mode);
15#else 17#else
16static inline u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr) 18static inline u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr)
17{ 19{
@@ -19,6 +21,9 @@ static inline u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaadd
19 *dmaaddr = 0; 21 *dmaaddr = 0;
20 return 0; 22 return 0;
21} 23}
24static inline void lpc32xx_set_phy_interface_mode(phy_interface_t mode)
25{
26}
22#endif 27#endif
23 28
24#endif /* __SOC_LPC32XX_MISC_H */ 29#endif /* __SOC_LPC32XX_MISC_H */