diff options
-rw-r--r-- | arch/arm/mach-omap2/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/am35xx-emac.c | 114 | ||||
-rw-r--r-- | arch/arm/mach-omap2/am35xx-emac.h | 15 | ||||
-rw-r--r-- | arch/arm/mach-omap2/am35xx.h | 46 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 33 | ||||
-rw-r--r-- | arch/arm/mach-omap2/pdata-quirks.c | 1 |
6 files changed, 2 insertions, 210 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 29da3f44e7b1..bc1a056be219 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -281,7 +281,4 @@ ifneq ($(CONFIG_HWSPINLOCK_OMAP),) | |||
281 | obj-y += hwspinlock.o | 281 | obj-y += hwspinlock.o |
282 | endif | 282 | endif |
283 | 283 | ||
284 | emac-$(CONFIG_TI_DAVINCI_EMAC) := am35xx-emac.o | ||
285 | obj-y += $(emac-m) $(emac-y) | ||
286 | |||
287 | obj-y += common-board-devices.o twl-common.o dss-common.o | 284 | obj-y += common-board-devices.o twl-common.o dss-common.o |
diff --git a/arch/arm/mach-omap2/am35xx-emac.c b/arch/arm/mach-omap2/am35xx-emac.c deleted file mode 100644 index 6a6935caac1e..000000000000 --- a/arch/arm/mach-omap2/am35xx-emac.c +++ /dev/null | |||
@@ -1,114 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Ilya Yanok, Emcraft Systems | ||
3 | * | ||
4 | * Based on mach-omap2/board-am3517evm.c | ||
5 | * Copyright (C) 2009 Texas Instruments Incorporated | ||
6 | * Author: Ranjith Lohithakshan <ranjithl@ti.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 | ||
10 | * published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind, | ||
13 | * whether express or implied; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | */ | ||
17 | |||
18 | #include <linux/err.h> | ||
19 | #include <linux/davinci_emac.h> | ||
20 | #include "omap_device.h" | ||
21 | #include "am35xx.h" | ||
22 | #include "control.h" | ||
23 | #include "am35xx-emac.h" | ||
24 | |||
25 | static void am35xx_enable_emac_int(void) | ||
26 | { | ||
27 | u32 v; | ||
28 | |||
29 | v = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||
30 | v |= (AM35XX_CPGMAC_C0_RX_PULSE_CLR | AM35XX_CPGMAC_C0_TX_PULSE_CLR | | ||
31 | AM35XX_CPGMAC_C0_MISC_PULSE_CLR | AM35XX_CPGMAC_C0_RX_THRESH_CLR); | ||
32 | omap_ctrl_writel(v, AM35XX_CONTROL_LVL_INTR_CLEAR); | ||
33 | omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); /* OCP barrier */ | ||
34 | } | ||
35 | |||
36 | static void am35xx_disable_emac_int(void) | ||
37 | { | ||
38 | u32 v; | ||
39 | |||
40 | v = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); | ||
41 | v |= (AM35XX_CPGMAC_C0_RX_PULSE_CLR | AM35XX_CPGMAC_C0_TX_PULSE_CLR); | ||
42 | omap_ctrl_writel(v, AM35XX_CONTROL_LVL_INTR_CLEAR); | ||
43 | omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); /* OCP barrier */ | ||
44 | } | ||
45 | |||
46 | static struct emac_platform_data am35xx_emac_pdata = { | ||
47 | .ctrl_reg_offset = AM35XX_EMAC_CNTRL_OFFSET, | ||
48 | .ctrl_mod_reg_offset = AM35XX_EMAC_CNTRL_MOD_OFFSET, | ||
49 | .ctrl_ram_offset = AM35XX_EMAC_CNTRL_RAM_OFFSET, | ||
50 | .ctrl_ram_size = AM35XX_EMAC_CNTRL_RAM_SIZE, | ||
51 | .hw_ram_addr = AM35XX_EMAC_HW_RAM_ADDR, | ||
52 | .version = EMAC_VERSION_2, | ||
53 | .interrupt_enable = am35xx_enable_emac_int, | ||
54 | .interrupt_disable = am35xx_disable_emac_int, | ||
55 | }; | ||
56 | |||
57 | static struct mdio_platform_data am35xx_mdio_pdata; | ||
58 | |||
59 | static int __init omap_davinci_emac_dev_init(struct omap_hwmod *oh, | ||
60 | void *pdata, int pdata_len) | ||
61 | { | ||
62 | struct platform_device *pdev; | ||
63 | |||
64 | pdev = omap_device_build(oh->class->name, 0, oh, pdata, pdata_len); | ||
65 | if (IS_ERR(pdev)) { | ||
66 | WARN(1, "Can't build omap_device for %s:%s.\n", | ||
67 | oh->class->name, oh->name); | ||
68 | return PTR_ERR(pdev); | ||
69 | } | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | |||
74 | void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) | ||
75 | { | ||
76 | struct omap_hwmod *oh; | ||
77 | u32 v; | ||
78 | int ret; | ||
79 | |||
80 | oh = omap_hwmod_lookup("davinci_mdio"); | ||
81 | if (!oh) { | ||
82 | pr_err("Could not find davinci_mdio hwmod\n"); | ||
83 | return; | ||
84 | } | ||
85 | |||
86 | am35xx_mdio_pdata.bus_freq = mdio_bus_freq; | ||
87 | |||
88 | ret = omap_davinci_emac_dev_init(oh, &am35xx_mdio_pdata, | ||
89 | sizeof(am35xx_mdio_pdata)); | ||
90 | if (ret) { | ||
91 | pr_err("Could not build davinci_mdio hwmod device\n"); | ||
92 | return; | ||
93 | } | ||
94 | |||
95 | oh = omap_hwmod_lookup("davinci_emac"); | ||
96 | if (!oh) { | ||
97 | pr_err("Could not find davinci_emac hwmod\n"); | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | am35xx_emac_pdata.rmii_en = rmii_en; | ||
102 | |||
103 | ret = omap_davinci_emac_dev_init(oh, &am35xx_emac_pdata, | ||
104 | sizeof(am35xx_emac_pdata)); | ||
105 | if (ret) { | ||
106 | pr_err("Could not build davinci_emac hwmod device\n"); | ||
107 | return; | ||
108 | } | ||
109 | |||
110 | v = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); | ||
111 | v &= ~AM35XX_CPGMACSS_SW_RST; | ||
112 | omap_ctrl_writel(v, AM35XX_CONTROL_IP_SW_RESET); | ||
113 | omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */ | ||
114 | } | ||
diff --git a/arch/arm/mach-omap2/am35xx-emac.h b/arch/arm/mach-omap2/am35xx-emac.h deleted file mode 100644 index 15c6f9ce59a2..000000000000 --- a/arch/arm/mach-omap2/am35xx-emac.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Ilya Yanok, Emcraft Systems | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #define AM35XX_DEFAULT_MDIO_FREQUENCY 1000000 | ||
10 | |||
11 | #if defined(CONFIG_TI_DAVINCI_EMAC) || defined(CONFIG_TI_DAVINCI_EMAC_MODULE) | ||
12 | void am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en); | ||
13 | #else | ||
14 | static inline void am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) {} | ||
15 | #endif | ||
diff --git a/arch/arm/mach-omap2/am35xx.h b/arch/arm/mach-omap2/am35xx.h deleted file mode 100644 index 95594495fcf6..000000000000 --- a/arch/arm/mach-omap2/am35xx.h +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | /*: | ||
2 | * Address mappings and base address for AM35XX specific interconnects | ||
3 | * and peripherals. | ||
4 | * | ||
5 | * Copyright (C) 2009 Texas Instruments | ||
6 | * | ||
7 | * Author: Sriramakrishnan <srk@ti.com> | ||
8 | * Vaibhav Hiremath <hvaibhav@ti.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | #ifndef __ASM_ARCH_AM35XX_H | ||
15 | #define __ASM_ARCH_AM35XX_H | ||
16 | |||
17 | /* | ||
18 | * Base addresses | ||
19 | * Note: OMAP3430 IVA2 memory space is being used for AM35xx IPSS modules | ||
20 | */ | ||
21 | #define AM35XX_IPSS_EMAC_BASE 0x5C000000 | ||
22 | #define AM35XX_IPSS_USBOTGSS_BASE 0x5C040000 | ||
23 | #define AM35XX_IPSS_HECC_BASE 0x5C050000 | ||
24 | #define AM35XX_IPSS_VPFE_BASE 0x5C060000 | ||
25 | |||
26 | |||
27 | /* HECC module specifc offset definitions */ | ||
28 | #define AM35XX_HECC_SCC_HECC_OFFSET (0x0) | ||
29 | #define AM35XX_HECC_SCC_RAM_OFFSET (0x3000) | ||
30 | #define AM35XX_HECC_RAM_OFFSET (0x3000) | ||
31 | #define AM35XX_HECC_MBOX_OFFSET (0x2000) | ||
32 | #define AM35XX_HECC_INT_LINE (0x0) | ||
33 | #define AM35XX_HECC_VERSION (0x1) | ||
34 | |||
35 | #define AM35XX_EMAC_CNTRL_OFFSET (0x10000) | ||
36 | #define AM35XX_EMAC_CNTRL_MOD_OFFSET (0x0) | ||
37 | #define AM35XX_EMAC_CNTRL_RAM_OFFSET (0x20000) | ||
38 | #define AM35XX_EMAC_MDIO_OFFSET (0x30000) | ||
39 | #define AM35XX_IPSS_MDIO_BASE (AM35XX_IPSS_EMAC_BASE + \ | ||
40 | AM35XX_EMAC_MDIO_OFFSET) | ||
41 | #define AM35XX_EMAC_CNTRL_RAM_SIZE (0x2000) | ||
42 | #define AM35XX_EMAC_RAM_ADDR (AM3517_EMAC_BASE + \ | ||
43 | AM3517_EMAC_CNTRL_RAM_OFFSET) | ||
44 | #define AM35XX_EMAC_HW_RAM_ADDR (0x01E20000) | ||
45 | |||
46 | #endif /* __ASM_ARCH_AM35XX_H */ | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 11468eea3871..4e8e93c398db 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -29,8 +29,6 @@ | |||
29 | #include <linux/platform_data/mailbox-omap.h> | 29 | #include <linux/platform_data/mailbox-omap.h> |
30 | #include <plat/dmtimer.h> | 30 | #include <plat/dmtimer.h> |
31 | 31 | ||
32 | #include "am35xx.h" | ||
33 | |||
34 | #include "soc.h" | 32 | #include "soc.h" |
35 | #include "omap_hwmod.h" | 33 | #include "omap_hwmod.h" |
36 | #include "omap_hwmod_common_data.h" | 34 | #include "omap_hwmod_common_data.h" |
@@ -50,6 +48,8 @@ | |||
50 | * elsewhere. | 48 | * elsewhere. |
51 | */ | 49 | */ |
52 | 50 | ||
51 | #define AM35XX_IPSS_USBOTGSS_BASE 0x5C040000 | ||
52 | |||
53 | /* | 53 | /* |
54 | * IP blocks | 54 | * IP blocks |
55 | */ | 55 | */ |
@@ -3459,15 +3459,6 @@ static struct omap_hwmod_ocp_if am35xx_mdio__l3 = { | |||
3459 | .user = OCP_USER_MPU, | 3459 | .user = OCP_USER_MPU, |
3460 | }; | 3460 | }; |
3461 | 3461 | ||
3462 | static struct omap_hwmod_addr_space am35xx_mdio_addrs[] = { | ||
3463 | { | ||
3464 | .pa_start = AM35XX_IPSS_MDIO_BASE, | ||
3465 | .pa_end = AM35XX_IPSS_MDIO_BASE + SZ_4K - 1, | ||
3466 | .flags = ADDR_TYPE_RT, | ||
3467 | }, | ||
3468 | { } | ||
3469 | }; | ||
3470 | |||
3471 | /* l4_core -> davinci mdio */ | 3462 | /* l4_core -> davinci mdio */ |
3472 | /* | 3463 | /* |
3473 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; | 3464 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; |
@@ -3478,25 +3469,15 @@ static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = { | |||
3478 | .master = &omap3xxx_l4_core_hwmod, | 3469 | .master = &omap3xxx_l4_core_hwmod, |
3479 | .slave = &am35xx_mdio_hwmod, | 3470 | .slave = &am35xx_mdio_hwmod, |
3480 | .clk = "emac_fck", | 3471 | .clk = "emac_fck", |
3481 | .addr = am35xx_mdio_addrs, | ||
3482 | .user = OCP_USER_MPU, | 3472 | .user = OCP_USER_MPU, |
3483 | }; | 3473 | }; |
3484 | 3474 | ||
3485 | static struct omap_hwmod_irq_info am35xx_emac_mpu_irqs[] = { | ||
3486 | { .name = "rxthresh", .irq = 67 + OMAP_INTC_START, }, | ||
3487 | { .name = "rx_pulse", .irq = 68 + OMAP_INTC_START, }, | ||
3488 | { .name = "tx_pulse", .irq = 69 + OMAP_INTC_START }, | ||
3489 | { .name = "misc_pulse", .irq = 70 + OMAP_INTC_START }, | ||
3490 | { .irq = -1 }, | ||
3491 | }; | ||
3492 | |||
3493 | static struct omap_hwmod_class am35xx_emac_class = { | 3475 | static struct omap_hwmod_class am35xx_emac_class = { |
3494 | .name = "davinci_emac", | 3476 | .name = "davinci_emac", |
3495 | }; | 3477 | }; |
3496 | 3478 | ||
3497 | static struct omap_hwmod am35xx_emac_hwmod = { | 3479 | static struct omap_hwmod am35xx_emac_hwmod = { |
3498 | .name = "davinci_emac", | 3480 | .name = "davinci_emac", |
3499 | .mpu_irqs = am35xx_emac_mpu_irqs, | ||
3500 | .class = &am35xx_emac_class, | 3481 | .class = &am35xx_emac_class, |
3501 | /* | 3482 | /* |
3502 | * According to Mark Greer, the MPU will not return from WFI | 3483 | * According to Mark Greer, the MPU will not return from WFI |
@@ -3519,15 +3500,6 @@ static struct omap_hwmod_ocp_if am35xx_emac__l3 = { | |||
3519 | .user = OCP_USER_MPU, | 3500 | .user = OCP_USER_MPU, |
3520 | }; | 3501 | }; |
3521 | 3502 | ||
3522 | static struct omap_hwmod_addr_space am35xx_emac_addrs[] = { | ||
3523 | { | ||
3524 | .pa_start = AM35XX_IPSS_EMAC_BASE, | ||
3525 | .pa_end = AM35XX_IPSS_EMAC_BASE + 0x30000 - 1, | ||
3526 | .flags = ADDR_TYPE_RT, | ||
3527 | }, | ||
3528 | { } | ||
3529 | }; | ||
3530 | |||
3531 | /* l4_core -> davinci emac */ | 3503 | /* l4_core -> davinci emac */ |
3532 | /* | 3504 | /* |
3533 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; | 3505 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; |
@@ -3538,7 +3510,6 @@ static struct omap_hwmod_ocp_if am35xx_l4_core__emac = { | |||
3538 | .master = &omap3xxx_l4_core_hwmod, | 3510 | .master = &omap3xxx_l4_core_hwmod, |
3539 | .slave = &am35xx_emac_hwmod, | 3511 | .slave = &am35xx_emac_hwmod, |
3540 | .clk = "emac_ick", | 3512 | .clk = "emac_ick", |
3541 | .addr = am35xx_emac_addrs, | ||
3542 | .user = OCP_USER_MPU, | 3513 | .user = OCP_USER_MPU, |
3543 | }; | 3514 | }; |
3544 | 3515 | ||
diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c index 3d7eee1d3cfa..190fa43e7479 100644 --- a/arch/arm/mach-omap2/pdata-quirks.c +++ b/arch/arm/mach-omap2/pdata-quirks.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/platform_data/pinctrl-single.h> | 19 | #include <linux/platform_data/pinctrl-single.h> |
20 | #include <linux/platform_data/iommu-omap.h> | 20 | #include <linux/platform_data/iommu-omap.h> |
21 | 21 | ||
22 | #include "am35xx.h" | ||
23 | #include "common.h" | 22 | #include "common.h" |
24 | #include "common-board-devices.h" | 23 | #include "common-board-devices.h" |
25 | #include "dss-common.h" | 24 | #include "dss-common.h" |