diff options
-rw-r--r-- | arch/arm/mach-mvf/board-colibri_vf.c | 24 | ||||
-rw-r--r-- | arch/arm/mach-mvf/devices-mvf.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-mvf/mvf_fec.c | 14 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/iomux-mvf.h | 13 | ||||
-rw-r--r-- | drivers/net/Kconfig | 7 | ||||
-rwxr-xr-x | drivers/net/fec.c | 6 |
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 */ |