diff options
Diffstat (limited to 'arch/arm')
| -rw-r--r-- | arch/arm/cpu/armv7/mx6/clock.c | 30 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-mx6/clock.h | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-mx6/iomux.h | 5 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-mx6/mx6sl_pins.h | 12 | 
4 files changed, 48 insertions, 0 deletions
| diff --git a/arch/arm/cpu/armv7/mx6/clock.c b/arch/arm/cpu/armv7/mx6/clock.c index 7a29c9b69..010d93208 100644 --- a/arch/arm/cpu/armv7/mx6/clock.c +++ b/arch/arm/cpu/armv7/mx6/clock.c @@ -282,6 +282,36 @@ static u32 get_mmdc_ch0_clk(void)  	return freq / (podf + 1);  } + +int enable_fec_anatop_clock(void) +{ +	u32 reg = 0; +	s32 timeout = 100000; + +	struct anatop_regs __iomem *anatop = +		(struct anatop_regs __iomem *)ANATOP_BASE_ADDR; + +	reg = readl(&anatop->pll_enet); +	if ((reg & BM_ANADIG_PLL_ENET_POWERDOWN) || +	    (!(reg & BM_ANADIG_PLL_ENET_LOCK))) { +		reg &= ~BM_ANADIG_PLL_ENET_POWERDOWN; +		writel(reg, &anatop->pll_enet); +		while (timeout--) { +			if (readl(&anatop->pll_enet) & BM_ANADIG_PLL_ENET_LOCK) +				break; +		} +		if (timeout < 0) +			return -ETIMEDOUT; +	} + +	/* Enable FEC clock */ +	reg |= BM_ANADIG_PLL_ENET_ENABLE; +	reg &= ~BM_ANADIG_PLL_ENET_BYPASS; +	writel(reg, &anatop->pll_enet); + +	return 0; +} +  #else  static u32 get_mmdc_ch0_clk(void)  { diff --git a/arch/arm/include/asm/arch-mx6/clock.h b/arch/arm/include/asm/arch-mx6/clock.h index c49368765..93f29a780 100644 --- a/arch/arm/include/asm/arch-mx6/clock.h +++ b/arch/arm/include/asm/arch-mx6/clock.h @@ -50,4 +50,5 @@ void enable_usboh3_clk(unsigned char enable);  int enable_sata_clock(void);  int enable_i2c_clk(unsigned char enable, unsigned i2c_num);  void enable_ipu_clock(void); +int enable_fec_anatop_clock(void);  #endif /* __ASM_ARCH_CLOCK_H */ diff --git a/arch/arm/include/asm/arch-mx6/iomux.h b/arch/arm/include/asm/arch-mx6/iomux.h index f4cfd4f92..ff13a1ea9 100644 --- a/arch/arm/include/asm/arch-mx6/iomux.h +++ b/arch/arm/include/asm/arch-mx6/iomux.h @@ -27,6 +27,11 @@  #define IOMUXC_GPR13_SATA_PHY_2_MASK	(0x1f<<2)  #define IOMUXC_GPR13_SATA_PHY_1_MASK	(3<<0) +#define IOMUX_GPR1_FEC_CLOCK_MUX1_SEL_MASK (0x3 << 17) +#define IOMUX_GPR1_FEC_CLOCK_MUX2_SEL_MASK (0x1 << 14) +#define IOMUX_GPR1_FEC_MASK    (IOMUX_GPR1_FEC_CLOCK_MUX1_SEL_MASK \ +				| IOMUX_GPR1_FEC_CLOCK_MUX2_SEL_MASK) +  #define IOMUXC_GPR13_SATA_PHY_8_RXEQ_0P5DB	(0<<24)  #define IOMUXC_GPR13_SATA_PHY_8_RXEQ_1P0DB	(1<<24)  #define IOMUXC_GPR13_SATA_PHY_8_RXEQ_1P5DB	(2<<24) diff --git a/arch/arm/include/asm/arch-mx6/mx6sl_pins.h b/arch/arm/include/asm/arch-mx6/mx6sl_pins.h index b39a354f3..5f9c90ad8 100644 --- a/arch/arm/include/asm/arch-mx6/mx6sl_pins.h +++ b/arch/arm/include/asm/arch-mx6/mx6sl_pins.h @@ -18,5 +18,17 @@ enum {  	MX6_PAD_SD2_DAT3__USDHC2_DAT3				= IOMUX_PAD(0x0570, 0x0268, 0, 0x0000, 0, 0),  	MX6_PAD_UART1_RXD__UART1_RXD				= IOMUX_PAD(0x05A0, 0x0298, 0, 0x07FC, 0, 0),  	MX6_PAD_UART1_TXD__UART1_TXD				= IOMUX_PAD(0x05A4, 0x029C, 0, 0x0000, 0, 0), + +	MX6_PAD_FEC_MDC__FEC_MDC				= IOMUX_PAD(0x41c, 0x12c, 0, 0x000, 0, 0), +	MX6_PAD_FEC_MDIO__FEC_MDIO				= IOMUX_PAD(0x420, 0x130, 0, 0x6f4, 1, 0), +	MX6_PAD_FEC_CRS_DV__FEC_RX_DV				= IOMUX_PAD(0x418, 0x128, 0, 0x704, 1, 0), +	MX6_PAD_FEC_RXD0__FEC_RX_DATA0				= IOMUX_PAD(0x42c, 0x13c, 0, 0x6f8, 0, 0), +	MX6_PAD_FEC_RXD1__FEC_RX_DATA1				= IOMUX_PAD(0x430, 0x140, 0, 0x6fc, 1, 0), +	MX6_PAD_FEC_TX_EN__FEC_TX_EN				= IOMUX_PAD(0x438, 0x148, 0, 0x000, 0, 0), +	MX6_PAD_FEC_TXD0__FEC_TX_DATA0				= IOMUX_PAD(0x43c, 0x14c, 0, 0x000, 0, 0), +	MX6_PAD_FEC_TXD1__FEC_TX_DATA1				= IOMUX_PAD(0x440, 0x150, 0, 0x000, 0, 0), +	MX6_PAD_FEC_REF_CLK__FEC_REF_OUT			= IOMUX_PAD(0x424, 0x134, 0x10, 0x000, 0, 0), +	MX6_PAD_FEC_RX_ER__GPIO_4_19				= IOMUX_PAD(0x0428, 0x0138, 5, 0x0000, 0, 0), +	MX6_PAD_FEC_TX_CLK__GPIO_4_21				= IOMUX_PAD(0x0434, 0x0144, 5, 0x0000, 0, 0),  };  #endif	/* __ASM_ARCH_MX6_MX6SL_PINS_H__ */ |