diff options
-rw-r--r-- | arch/arm/mach-imx/clock-imx25.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/clock-imx27.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/clock-imx35.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-mx5/clock-mx51-mx53.c | 6 | ||||
-rw-r--r-- | arch/arm/plat-mxc/devices/platform-fec.c | 21 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/devices-common.h | 1 | ||||
-rw-r--r-- | drivers/net/fec.c | 22 |
7 files changed, 40 insertions, 17 deletions
diff --git a/arch/arm/mach-imx/clock-imx25.c b/arch/arm/mach-imx/clock-imx25.c index 006b30e4b4e7..13d61f34bd34 100644 --- a/arch/arm/mach-imx/clock-imx25.c +++ b/arch/arm/mach-imx/clock-imx25.c | |||
@@ -296,7 +296,7 @@ static struct clk_lookup lookups[] = { | |||
296 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) | 296 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c_clk) |
297 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk) | 297 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c_clk) |
298 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk) | 298 | _REGISTER_CLOCK("imx-i2c.2", NULL, i2c_clk) |
299 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 299 | _REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk) |
300 | _REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk) | 300 | _REGISTER_CLOCK("imxdi_rtc.0", NULL, dryice_clk) |
301 | _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) | 301 | _REGISTER_CLOCK("imx-fb.0", NULL, lcdc_clk) |
302 | _REGISTER_CLOCK("imx2-wdt.0", NULL, wdt_clk) | 302 | _REGISTER_CLOCK("imx2-wdt.0", NULL, wdt_clk) |
diff --git a/arch/arm/mach-imx/clock-imx27.c b/arch/arm/mach-imx/clock-imx27.c index 8c9a681ebfc1..6912b821b37b 100644 --- a/arch/arm/mach-imx/clock-imx27.c +++ b/arch/arm/mach-imx/clock-imx27.c | |||
@@ -663,7 +663,7 @@ static struct clk_lookup lookups[] = { | |||
663 | _REGISTER_CLOCK(NULL, "brom", brom_clk) | 663 | _REGISTER_CLOCK(NULL, "brom", brom_clk) |
664 | _REGISTER_CLOCK(NULL, "emma", emma_clk) | 664 | _REGISTER_CLOCK(NULL, "emma", emma_clk) |
665 | _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) | 665 | _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) |
666 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 666 | _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) |
667 | _REGISTER_CLOCK(NULL, "emi", emi_clk) | 667 | _REGISTER_CLOCK(NULL, "emi", emi_clk) |
668 | _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) | 668 | _REGISTER_CLOCK(NULL, "sahara2", sahara2_clk) |
669 | _REGISTER_CLOCK(NULL, "ata", ata_clk) | 669 | _REGISTER_CLOCK(NULL, "ata", ata_clk) |
diff --git a/arch/arm/mach-imx/clock-imx35.c b/arch/arm/mach-imx/clock-imx35.c index b44cb065e629..7718101099b7 100644 --- a/arch/arm/mach-imx/clock-imx35.c +++ b/arch/arm/mach-imx/clock-imx35.c | |||
@@ -461,7 +461,8 @@ static struct clk_lookup lookups[] = { | |||
461 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) | 461 | _REGISTER_CLOCK("sdhci-esdhc-imx.0", NULL, esdhc1_clk) |
462 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) | 462 | _REGISTER_CLOCK("sdhci-esdhc-imx.1", NULL, esdhc2_clk) |
463 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) | 463 | _REGISTER_CLOCK("sdhci-esdhc-imx.2", NULL, esdhc3_clk) |
464 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 464 | /* i.mx35 has the i.mx27 type fec */ |
465 | _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) | ||
465 | _REGISTER_CLOCK(NULL, "gpio", gpio1_clk) | 466 | _REGISTER_CLOCK(NULL, "gpio", gpio1_clk) |
466 | _REGISTER_CLOCK(NULL, "gpio", gpio2_clk) | 467 | _REGISTER_CLOCK(NULL, "gpio", gpio2_clk) |
467 | _REGISTER_CLOCK(NULL, "gpio", gpio3_clk) | 468 | _REGISTER_CLOCK(NULL, "gpio", gpio3_clk) |
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index b8119e8fb519..76e450ba8589 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c | |||
@@ -1427,7 +1427,8 @@ static struct clk_lookup mx51_lookups[] = { | |||
1427 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) | 1427 | _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) |
1428 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) | 1428 | _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) |
1429 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 1429 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
1430 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 1430 | /* i.mx51 has the i.mx27 type fec */ |
1431 | _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) | ||
1431 | _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) | 1432 | _REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk) |
1432 | _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) | 1433 | _REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk) |
1433 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 1434 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
@@ -1478,7 +1479,8 @@ static struct clk_lookup mx53_lookups[] = { | |||
1478 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) | 1479 | _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) |
1479 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) | 1480 | _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) |
1480 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) | 1481 | _REGISTER_CLOCK(NULL, "gpt", gpt_clk) |
1481 | _REGISTER_CLOCK("fec.0", NULL, fec_clk) | 1482 | /* i.mx53 has the i.mx25 type fec */ |
1483 | _REGISTER_CLOCK("imx25-fec.0", NULL, fec_clk) | ||
1482 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) | 1484 | _REGISTER_CLOCK(NULL, "iim_clk", iim_clk) |
1483 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) | 1485 | _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) |
1484 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) | 1486 | _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) |
diff --git a/arch/arm/plat-mxc/devices/platform-fec.c b/arch/arm/plat-mxc/devices/platform-fec.c index 4fc6ffc2a13e..0bae44e890db 100644 --- a/arch/arm/plat-mxc/devices/platform-fec.c +++ b/arch/arm/plat-mxc/devices/platform-fec.c | |||
@@ -11,40 +11,45 @@ | |||
11 | #include <mach/hardware.h> | 11 | #include <mach/hardware.h> |
12 | #include <mach/devices-common.h> | 12 | #include <mach/devices-common.h> |
13 | 13 | ||
14 | #define imx_fec_data_entry_single(soc) \ | 14 | #define imx_fec_data_entry_single(soc, _devid) \ |
15 | { \ | 15 | { \ |
16 | .devid = _devid, \ | ||
16 | .iobase = soc ## _FEC_BASE_ADDR, \ | 17 | .iobase = soc ## _FEC_BASE_ADDR, \ |
17 | .irq = soc ## _INT_FEC, \ | 18 | .irq = soc ## _INT_FEC, \ |
18 | } | 19 | } |
19 | 20 | ||
20 | #ifdef CONFIG_SOC_IMX25 | 21 | #ifdef CONFIG_SOC_IMX25 |
21 | const struct imx_fec_data imx25_fec_data __initconst = | 22 | const struct imx_fec_data imx25_fec_data __initconst = |
22 | imx_fec_data_entry_single(MX25); | 23 | imx_fec_data_entry_single(MX25, "imx25-fec"); |
23 | #endif /* ifdef CONFIG_SOC_IMX25 */ | 24 | #endif /* ifdef CONFIG_SOC_IMX25 */ |
24 | 25 | ||
25 | #ifdef CONFIG_SOC_IMX27 | 26 | #ifdef CONFIG_SOC_IMX27 |
26 | const struct imx_fec_data imx27_fec_data __initconst = | 27 | const struct imx_fec_data imx27_fec_data __initconst = |
27 | imx_fec_data_entry_single(MX27); | 28 | imx_fec_data_entry_single(MX27, "imx27-fec"); |
28 | #endif /* ifdef CONFIG_SOC_IMX27 */ | 29 | #endif /* ifdef CONFIG_SOC_IMX27 */ |
29 | 30 | ||
30 | #ifdef CONFIG_SOC_IMX35 | 31 | #ifdef CONFIG_SOC_IMX35 |
32 | /* i.mx35 has the i.mx27 type fec */ | ||
31 | const struct imx_fec_data imx35_fec_data __initconst = | 33 | const struct imx_fec_data imx35_fec_data __initconst = |
32 | imx_fec_data_entry_single(MX35); | 34 | imx_fec_data_entry_single(MX35, "imx27-fec"); |
33 | #endif | 35 | #endif |
34 | 36 | ||
35 | #ifdef CONFIG_SOC_IMX50 | 37 | #ifdef CONFIG_SOC_IMX50 |
38 | /* i.mx50 has the i.mx25 type fec */ | ||
36 | const struct imx_fec_data imx50_fec_data __initconst = | 39 | const struct imx_fec_data imx50_fec_data __initconst = |
37 | imx_fec_data_entry_single(MX50); | 40 | imx_fec_data_entry_single(MX50, "imx25-fec"); |
38 | #endif | 41 | #endif |
39 | 42 | ||
40 | #ifdef CONFIG_SOC_IMX51 | 43 | #ifdef CONFIG_SOC_IMX51 |
44 | /* i.mx51 has the i.mx27 type fec */ | ||
41 | const struct imx_fec_data imx51_fec_data __initconst = | 45 | const struct imx_fec_data imx51_fec_data __initconst = |
42 | imx_fec_data_entry_single(MX51); | 46 | imx_fec_data_entry_single(MX51, "imx27-fec"); |
43 | #endif | 47 | #endif |
44 | 48 | ||
45 | #ifdef CONFIG_SOC_IMX53 | 49 | #ifdef CONFIG_SOC_IMX53 |
50 | /* i.mx53 has the i.mx25 type fec */ | ||
46 | const struct imx_fec_data imx53_fec_data __initconst = | 51 | const struct imx_fec_data imx53_fec_data __initconst = |
47 | imx_fec_data_entry_single(MX53); | 52 | imx_fec_data_entry_single(MX53, "imx25-fec"); |
48 | #endif | 53 | #endif |
49 | 54 | ||
50 | struct platform_device *__init imx_add_fec( | 55 | struct platform_device *__init imx_add_fec( |
@@ -63,7 +68,7 @@ struct platform_device *__init imx_add_fec( | |||
63 | }, | 68 | }, |
64 | }; | 69 | }; |
65 | 70 | ||
66 | return imx_add_platform_device_dmamask("fec", 0, | 71 | return imx_add_platform_device_dmamask(data->devid, 0, |
67 | res, ARRAY_SIZE(res), | 72 | res, ARRAY_SIZE(res), |
68 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); | 73 | pdata, sizeof(*pdata), DMA_BIT_MASK(32)); |
69 | } | 74 | } |
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h index bf93820ab61c..6ac24501426d 100644 --- a/arch/arm/plat-mxc/include/mach/devices-common.h +++ b/arch/arm/plat-mxc/include/mach/devices-common.h | |||
@@ -30,6 +30,7 @@ static inline struct platform_device *imx_add_platform_device( | |||
30 | 30 | ||
31 | #include <linux/fec.h> | 31 | #include <linux/fec.h> |
32 | struct imx_fec_data { | 32 | struct imx_fec_data { |
33 | const char *devid; | ||
33 | resource_size_t iobase; | 34 | resource_size_t iobase; |
34 | resource_size_t irq; | 35 | resource_size_t irq; |
35 | }; | 36 | }; |
diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 5b631fe74738..ed137bbbcf61 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c | |||
@@ -66,17 +66,28 @@ | |||
66 | #define FEC_QUIRK_ENET_MAC (1 << 0) | 66 | #define FEC_QUIRK_ENET_MAC (1 << 0) |
67 | /* Controller needs driver to swap frame */ | 67 | /* Controller needs driver to swap frame */ |
68 | #define FEC_QUIRK_SWAP_FRAME (1 << 1) | 68 | #define FEC_QUIRK_SWAP_FRAME (1 << 1) |
69 | /* Controller uses gasket */ | ||
70 | #define FEC_QUIRK_USE_GASKET (1 << 2) | ||
69 | 71 | ||
70 | static struct platform_device_id fec_devtype[] = { | 72 | static struct platform_device_id fec_devtype[] = { |
71 | { | 73 | { |
74 | /* keep it for coldfire */ | ||
72 | .name = DRIVER_NAME, | 75 | .name = DRIVER_NAME, |
73 | .driver_data = 0, | 76 | .driver_data = 0, |
74 | }, { | 77 | }, { |
78 | .name = "imx25-fec", | ||
79 | .driver_data = FEC_QUIRK_USE_GASKET, | ||
80 | }, { | ||
81 | .name = "imx27-fec", | ||
82 | .driver_data = 0, | ||
83 | }, { | ||
75 | .name = "imx28-fec", | 84 | .name = "imx28-fec", |
76 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME, | 85 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME, |
77 | }, | 86 | }, { |
78 | { } | 87 | /* sentinel */ |
88 | } | ||
79 | }; | 89 | }; |
90 | MODULE_DEVICE_TABLE(platform, fec_devtype); | ||
80 | 91 | ||
81 | static unsigned char macaddr[ETH_ALEN]; | 92 | static unsigned char macaddr[ETH_ALEN]; |
82 | module_param_array(macaddr, byte, NULL, 0); | 93 | module_param_array(macaddr, byte, NULL, 0); |
@@ -427,7 +438,7 @@ fec_restart(struct net_device *ndev, int duplex) | |||
427 | 438 | ||
428 | } else { | 439 | } else { |
429 | #ifdef FEC_MIIGSK_ENR | 440 | #ifdef FEC_MIIGSK_ENR |
430 | if (fep->phy_interface == PHY_INTERFACE_MODE_RMII) { | 441 | if (id_entry->driver_data & FEC_QUIRK_USE_GASKET) { |
431 | /* disable the gasket and wait */ | 442 | /* disable the gasket and wait */ |
432 | writel(0, fep->hwp + FEC_MIIGSK_ENR); | 443 | writel(0, fep->hwp + FEC_MIIGSK_ENR); |
433 | while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4) | 444 | while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4) |
@@ -436,8 +447,11 @@ fec_restart(struct net_device *ndev, int duplex) | |||
436 | /* | 447 | /* |
437 | * configure the gasket: | 448 | * configure the gasket: |
438 | * RMII, 50 MHz, no loopback, no echo | 449 | * RMII, 50 MHz, no loopback, no echo |
450 | * MII, 25 MHz, no loopback, no echo | ||
439 | */ | 451 | */ |
440 | writel(1, fep->hwp + FEC_MIIGSK_CFGR); | 452 | writel((fep->phy_interface == PHY_INTERFACE_MODE_RMII) ? |
453 | 1 : 0, fep->hwp + FEC_MIIGSK_CFGR); | ||
454 | |||
441 | 455 | ||
442 | /* re-enable the gasket */ | 456 | /* re-enable the gasket */ |
443 | writel(2, fep->hwp + FEC_MIIGSK_ENR); | 457 | writel(2, fep->hwp + FEC_MIIGSK_ENR); |