diff options
author | Arnd Bergmann <arnd@arndb.de> | 2019-08-09 10:40:33 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2019-08-15 15:33:52 -0400 |
commit | ecca1a6277aac10e40e4baba28adb893899b24b3 (patch) | |
tree | c36f914a8560d30ef2a188896b74429edac697aa | |
parent | 9dc03ffd996d4103cc2a11286d61e517bce27440 (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.c | 12 | ||||
-rw-r--r-- | drivers/net/ethernet/nxp/lpc_eth.c | 12 | ||||
-rw-r--r-- | include/linux/soc/nxp/lpc32xx-misc.h | 5 |
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 | } |
64 | EXPORT_SYMBOL_GPL(lpc32xx_return_iram); | 64 | EXPORT_SYMBOL_GPL(lpc32xx_return_iram); |
65 | 65 | ||
66 | void 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 | } | ||
76 | EXPORT_SYMBOL_GPL(lpc32xx_set_phy_interface_mode); | ||
77 | |||
66 | static struct map_desc lpc32xx_io_desc[] __initdata = { | 78 | static 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 |
14 | extern u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr); | 15 | extern u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr); |
16 | extern void lpc32xx_set_phy_interface_mode(phy_interface_t mode); | ||
15 | #else | 17 | #else |
16 | static inline u32 lpc32xx_return_iram(void __iomem **mapbase, dma_addr_t *dmaaddr) | 18 | static 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 | } |
24 | static 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 */ |