summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-mvf/board-colibri_vf.c24
-rw-r--r--arch/arm/mach-mvf/devices-mvf.h4
-rw-r--r--arch/arm/mach-mvf/mvf_fec.c14
-rw-r--r--arch/arm/plat-mxc/include/mach/iomux-mvf.h13
-rw-r--r--drivers/net/Kconfig7
-rwxr-xr-xdrivers/net/fec.c6
6 files changed, 63 insertions, 5 deletions
diff --git a/arch/arm/mach-mvf/board-colibri_vf.c b/arch/arm/mach-mvf/board-colibri_vf.c
index 782d8d7b2ddd..a631517e5490 100644
--- a/arch/arm/mach-mvf/board-colibri_vf.c
+++ b/arch/arm/mach-mvf/board-colibri_vf.c
@@ -108,6 +108,20 @@ static iomux_v3_cfg_t mvf600_pads[] = {
/* GPIO for CAN Interrupt */
MVF600_PAD43_PTB21__CAN_INT,
+ /* FEC0: Ethernet */
+#ifdef CONFIG_FEC0
+ MVF600_PAD2_PTA9__RMII_CLKOUT,
+ MVF600_PAD45_PTC0__RMII0_MDC,
+ MVF600_PAD46_PTC1__RMII0_MDIO,
+ MVF600_PAD47_PTC2__RMII0_CRS_DV,
+ MVF600_PAD48_PTC3__RMII0_RXD1,
+ MVF600_PAD49_PTC4__RMII0_RXD0,
+ MVF600_PAD50_PTC5__RMII0_RXER,
+ MVF600_PAD51_PTC6__RMII0_TXD1,
+ MVF600_PAD52_PTC7__RMII0_TXD0,
+ MVF600_PAD53_PTC8__RMII0_TXEN,
+#endif
+
/* FEC1: Ethernet */
MVF600_PAD0_PTA6__RMII_CLKOUT,
MVF600_PAD54_PTC9__RMII1_MDC,
@@ -155,7 +169,9 @@ static iomux_v3_cfg_t mvf600_pads[] = {
MVF600_PAD131_PTE26_DCU0_B5,
MVF600_PAD132_PTE27_DCU0_B6,
MVF600_PAD133_PTE28_DCU0_B7,
+#ifndef CONFIG_FEC0
MVF600_PAD45_PTC0_BL_ON,
+#endif
/* UART1: UART_C */
MVF600_PAD26_PTB4_UART1_TX,
@@ -183,10 +199,18 @@ static iomux_v3_cfg_t mvf600_pads[] = {
MVF600_PAD108_PTE3__USB_OC,
/* PWM */
+#ifndef CONFIG_FEC0
MVF600_PAD22_PTB0_FTM0CH0, //PWM<A> multiplexed MVF600_PAD52_PTC7_VID7
+#else
+ MVF600_PAD22_PTB0_GPIO,
+#endif
MVF600_PAD23_PTB1_FTM0CH1, //PWM<c>
MVF600_PAD30_PTB8_FTM1CH0, //PWM<B>
+#ifndef CONFIG_FEC0
MVF600_PAD31_PTB9_FTM1CH1, //PWM<D> multiplexed MVF600_PAD51_PTC6_VID6
+#else
+ MVF600_PAD31_PTB9_GPIO,
+#endif
/* Wake-Up GPIO */
MVF600_PAD41_PTB19__GPIO,
diff --git a/arch/arm/mach-mvf/devices-mvf.h b/arch/arm/mach-mvf/devices-mvf.h
index c434834ba0b2..c5c3db9d13a1 100644
--- a/arch/arm/mach-mvf/devices-mvf.h
+++ b/arch/arm/mach-mvf/devices-mvf.h
@@ -28,8 +28,8 @@ extern const struct imx_snvs_rtc_data mvf_snvs_rtc_data __initconst;
imx_add_snvs_rtc(&mvf_snvs_rtc_data)
extern const struct imx_fec_data mvf_fec_data[] __initconst;
-#define mvf_add_fec(id, pdata) \
- imx_add_fec(id, &mvf_fec_data[id], pdata)
+#define mvf_add_fec(id, fec_data, pdata) \
+ imx_add_fec(id, fec_data, pdata)
extern const struct imx_sdhci_esdhc_imx_data
mvf_sdhci_esdhc_imx_data[] __initconst;
diff --git a/arch/arm/mach-mvf/mvf_fec.c b/arch/arm/mach-mvf/mvf_fec.c
index 55ba44bf73f0..5cbed27ba9aa 100644
--- a/arch/arm/mach-mvf/mvf_fec.c
+++ b/arch/arm/mach-mvf/mvf_fec.c
@@ -53,9 +53,19 @@ void __init mvf_init_fec(struct fec_platform_data fec_data)
memcpy(fec_data.mac, default_mac, ETH_ALEN);
#if !defined(CONFIG_COLIBRI_VF)
- mvf_add_fec(0, &fec_data);
+#ifdef CONFIG_FEC0
+ mvf_add_fec(0, &mvf_fec_data[0], &fec_data);
#endif
#ifdef CONFIG_FEC1
- mvf_add_fec(1, &fec_data);
+ mvf_add_fec(1, &mvf_fec_data[1], &fec_data);
+#endif
+#else
+ /* Inverse device ID */
+#ifdef CONFIG_FEC1
+ mvf_add_fec(0, &mvf_fec_data[1], &fec_data);
+#endif
+#ifdef CONFIG_FEC0
+ mvf_add_fec(1, &mvf_fec_data[0], &fec_data);
+#endif
#endif
}
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mvf.h b/arch/arm/plat-mxc/include/mach/iomux-mvf.h
index 9978dc02f832..b77d2d40d284 100644
--- a/arch/arm/plat-mxc/include/mach/iomux-mvf.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-mvf.h
@@ -170,6 +170,10 @@ typedef enum iomux_config {
#define MVF600_PAD0_PTA6__RMII_CLKOUT \
IOMUX_PAD(0x0000, 0x0000, 1, 0x0000, 0, \
MVF600_ENET_PAD_CTRL | PAD_CTL_IBE_ENABLE)
+#define MVF600_PAD2_PTA9__RMII_CLKOUT \
+ IOMUX_PAD(0x0008, 0x0008, 2, 0x0000, 0, \
+ MVF600_ENET_PAD_CTRL | PAD_CTL_IBE_ENABLE)
+
#define MVF600_PAD45_PTC0__RMII0_MDC \
IOMUX_PAD(0x00B4, 0x00B4, 1, 0x0000, 0, \
MVF600_ENET_PAD_CTRL | PAD_CTL_OBE_ENABLE)
@@ -432,6 +436,15 @@ typedef enum iomux_config {
IOMUX_PAD(0x002C, 0x002C, 6, 0x0390, 0, \
MVF600_UART_PAD_CTRL | PAD_CTL_IBE_ENABLE)
+/* GPIO Input (disabled in case of 2nd Ethernet) */
+#define MVF600_PAD22_PTB0_GPIO \
+ IOMUX_PAD(0x0058, 0x0058, 0, 0x0000, 0, \
+ MVF600_GPIO_GENERAL_CTRL | PAD_CTL_IBE_ENABLE)
+#define MVF600_PAD31_PTB9_GPIO \
+ IOMUX_PAD(0x007C, 0x007C, 0, 0x0000, 0, \
+ MVF600_GPIO_GENERAL_CTRL | PAD_CTL_IBE_ENABLE)
+
+
/* FlexTimer channel pin */
#define MVF600_PAD22_PTB0_FTM0CH0 \
IOMUX_PAD(0x0058, 0x0058, 1, 0x0000, 0, MVF600_FTM0_CH_CTRL)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index de2905a67e76..31da73894a70 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1951,6 +1951,13 @@ config FEC
Say Y here if you want to use the built-in 10/100 Fast ethernet
controller on some Motorola ColdFire and Freescale i.MX processors.
+config FEC0
+ bool "First FEC ethernet controller (of Vybrid and ColdFire)"
+ depends on FEC && (ARCH_MVF || M54455 || M5441X)
+ help
+ Say Y here if you want to use the first built-in 10/100 Fast
+ ethernet controller on Vybrid and some ColdFire processors.
+
config FEC1
bool "Second FEC ethernet controller (of Vybrid and ColdFire)"
depends on FEC && (ARCH_MVF || M54455 || M5441X)
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 8a2c60f29898..bcd02e5cfaf0 100755
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -691,8 +691,12 @@ static void __inline__ fec_get_mac(struct net_device *ndev)
memcpy(ndev->dev_addr, iap, ETH_ALEN);
-#if !defined(CONFIG_COLIBRI_VF)
/* Adjust MAC if using macaddr */
+#if CONFIG_COLIBRI_VF
+ /* Add 0x100000 to the first MAC address to get the second */
+ if (iap == macaddr)
+ ndev->dev_addr[3] = macaddr[3] + (fep->pdev->id * 0x10);
+#else
if (iap == macaddr)
ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->pdev->id;
#endif /* !CONFIG_COLIBRI_VF */