diff options
44 files changed, 634 insertions, 421 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a91009c61870..0063845d2088 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -936,6 +936,7 @@ config ARCH_DAVINCI | |||
936 | 936 | ||
937 | config ARCH_OMAP | 937 | config ARCH_OMAP |
938 | bool "TI OMAP" | 938 | bool "TI OMAP" |
939 | depends on MMU | ||
939 | select HAVE_CLK | 940 | select HAVE_CLK |
940 | select ARCH_REQUIRE_GPIOLIB | 941 | select ARCH_REQUIRE_GPIOLIB |
941 | select ARCH_HAS_CPUFREQ | 942 | select ARCH_HAS_CPUFREQ |
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts index 5b4506c0a8c4..cdcb98c7e075 100644 --- a/arch/arm/boot/dts/omap3-beagle.dts +++ b/arch/arm/boot/dts/omap3-beagle.dts | |||
@@ -61,9 +61,9 @@ | |||
61 | }; | 61 | }; |
62 | 62 | ||
63 | &mmc2 { | 63 | &mmc2 { |
64 | status = "disable"; | 64 | status = "disabled"; |
65 | }; | 65 | }; |
66 | 66 | ||
67 | &mmc3 { | 67 | &mmc3 { |
68 | status = "disable"; | 68 | status = "disabled"; |
69 | }; | 69 | }; |
diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts index 1efe0c587985..9d8abf0938e0 100644 --- a/arch/arm/boot/dts/omap4-panda.dts +++ b/arch/arm/boot/dts/omap4-panda.dts | |||
@@ -74,15 +74,15 @@ | |||
74 | }; | 74 | }; |
75 | 75 | ||
76 | &mmc2 { | 76 | &mmc2 { |
77 | status = "disable"; | 77 | status = "disabled"; |
78 | }; | 78 | }; |
79 | 79 | ||
80 | &mmc3 { | 80 | &mmc3 { |
81 | status = "disable"; | 81 | status = "disabled"; |
82 | }; | 82 | }; |
83 | 83 | ||
84 | &mmc4 { | 84 | &mmc4 { |
85 | status = "disable"; | 85 | status = "disabled"; |
86 | }; | 86 | }; |
87 | 87 | ||
88 | &mmc5 { | 88 | &mmc5 { |
diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index d08c4d137280..9b1c13a16c2c 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts | |||
@@ -147,11 +147,11 @@ | |||
147 | }; | 147 | }; |
148 | 148 | ||
149 | &mmc3 { | 149 | &mmc3 { |
150 | status = "disable"; | 150 | status = "disabled"; |
151 | }; | 151 | }; |
152 | 152 | ||
153 | &mmc4 { | 153 | &mmc4 { |
154 | status = "disable"; | 154 | status = "disabled"; |
155 | }; | 155 | }; |
156 | 156 | ||
157 | &mmc5 { | 157 | &mmc5 { |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index 11828e632532..d3c29b377af9 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -196,6 +196,7 @@ CONFIG_RTC_DRV_TWL4030=y | |||
196 | CONFIG_EXT2_FS=y | 196 | CONFIG_EXT2_FS=y |
197 | CONFIG_EXT3_FS=y | 197 | CONFIG_EXT3_FS=y |
198 | # CONFIG_EXT3_FS_XATTR is not set | 198 | # CONFIG_EXT3_FS_XATTR is not set |
199 | CONFIG_EXT4_FS=y | ||
199 | CONFIG_QUOTA=y | 200 | CONFIG_QUOTA=y |
200 | CONFIG_QFMT_V2=y | 201 | CONFIG_QFMT_V2=y |
201 | CONFIG_MSDOS_FS=y | 202 | CONFIG_MSDOS_FS=y |
diff --git a/arch/arm/mach-davinci/include/mach/entry-macro.S b/arch/arm/mach-davinci/include/mach/entry-macro.S index 768b3c060214..cf5f573eb5fd 100644 --- a/arch/arm/mach-davinci/include/mach/entry-macro.S +++ b/arch/arm/mach-davinci/include/mach/entry-macro.S | |||
@@ -30,12 +30,10 @@ | |||
30 | #endif | 30 | #endif |
31 | #if defined(CONFIG_CP_INTC) | 31 | #if defined(CONFIG_CP_INTC) |
32 | 1001: ldr \irqnr, [\base, #0x80] /* get irq number */ | 32 | 1001: ldr \irqnr, [\base, #0x80] /* get irq number */ |
33 | mov \tmp, \irqnr, lsr #31 | ||
33 | and \irqnr, \irqnr, #0xff /* irq is in bits 0-9 */ | 34 | and \irqnr, \irqnr, #0xff /* irq is in bits 0-9 */ |
34 | mov \tmp, \irqnr, lsr #3 | 35 | and \tmp, \tmp, #0x1 |
35 | and \tmp, \tmp, #0xfc | 36 | cmp \tmp, #0x1 |
36 | add \tmp, \tmp, #0x280 /* get the register offset */ | ||
37 | ldr \irqstat, [\base, \tmp] /* get the intc status */ | ||
38 | cmp \irqstat, #0x0 | ||
39 | #endif | 37 | #endif |
40 | 1002: | 38 | 1002: |
41 | .endm | 39 | .endm |
diff --git a/arch/arm/mach-ep93xx/edb93xx.c b/arch/arm/mach-ep93xx/edb93xx.c index d74c5cddb98b..3bb8e56969a5 100644 --- a/arch/arm/mach-ep93xx/edb93xx.c +++ b/arch/arm/mach-ep93xx/edb93xx.c | |||
@@ -91,8 +91,8 @@ static void __init edb93xx_register_i2c(void) | |||
91 | ep93xx_register_i2c(&edb93xx_i2c_gpio_data, | 91 | ep93xx_register_i2c(&edb93xx_i2c_gpio_data, |
92 | edb93xxa_i2c_board_info, | 92 | edb93xxa_i2c_board_info, |
93 | ARRAY_SIZE(edb93xxa_i2c_board_info)); | 93 | ARRAY_SIZE(edb93xxa_i2c_board_info)); |
94 | } else if (machine_is_edb9307() || machine_is_edb9312() || | 94 | } else if (machine_is_edb9302() || machine_is_edb9307() |
95 | machine_is_edb9315()) { | 95 | || machine_is_edb9312() || machine_is_edb9315()) { |
96 | ep93xx_register_i2c(&edb93xx_i2c_gpio_data, | 96 | ep93xx_register_i2c(&edb93xx_i2c_gpio_data, |
97 | edb93xx_i2c_board_info, | 97 | edb93xx_i2c_board_info, |
98 | ARRAY_SIZE(edb93xx_i2c_board_info)); | 98 | ARRAY_SIZE(edb93xx_i2c_board_info)); |
diff --git a/arch/arm/mach-mxs/module-tx28.c b/arch/arm/mach-mxs/module-tx28.c index 9a7b08b2a925..0f71f82101cc 100644 --- a/arch/arm/mach-mxs/module-tx28.c +++ b/arch/arm/mach-mxs/module-tx28.c | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/gpio.h> | 11 | #include <linux/gpio.h> |
12 | 12 | ||
13 | #include <mach/iomux-mx28.h> | 13 | #include <mach/iomux-mx28.h> |
14 | #include "../devices-mx28.h" | 14 | #include "devices-mx28.h" |
15 | 15 | ||
16 | #include "module-tx28.h" | 16 | #include "module-tx28.h" |
17 | 17 | ||
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 4cf5142f22cc..2f4ace6f91d1 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -35,6 +35,7 @@ config ARCH_OMAP3 | |||
35 | select CPU_V7 | 35 | select CPU_V7 |
36 | select USB_ARCH_HAS_EHCI if USB_SUPPORT | 36 | select USB_ARCH_HAS_EHCI if USB_SUPPORT |
37 | select ARCH_HAS_OPP | 37 | select ARCH_HAS_OPP |
38 | select PM_RUNTIME if CPU_IDLE | ||
38 | select PM_OPP if PM | 39 | select PM_OPP if PM |
39 | select ARM_CPU_SUSPEND if PM | 40 | select ARM_CPU_SUSPEND if PM |
40 | select MULTI_IRQ_HANDLER | 41 | select MULTI_IRQ_HANDLER |
@@ -52,6 +53,7 @@ config ARCH_OMAP4 | |||
52 | select PL310_ERRATA_727915 | 53 | select PL310_ERRATA_727915 |
53 | select ARM_ERRATA_720789 | 54 | select ARM_ERRATA_720789 |
54 | select ARCH_HAS_OPP | 55 | select ARCH_HAS_OPP |
56 | select PM_RUNTIME if CPU_IDLE | ||
55 | select PM_OPP if PM | 57 | select PM_OPP if PM |
56 | select USB_ARCH_HAS_EHCI if USB_SUPPORT | 58 | select USB_ARCH_HAS_EHCI if USB_SUPPORT |
57 | select ARM_CPU_SUSPEND if PM | 59 | select ARM_CPU_SUSPEND if PM |
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index fa742f3c2629..6be43ac5c35c 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -66,9 +66,7 @@ ifeq ($(CONFIG_PM),y) | |||
66 | obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o | 66 | obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o |
67 | obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o | 67 | obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o |
68 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o | 68 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o |
69 | obj-$(CONFIG_ARCH_OMAP3) += cpuidle34xx.o | ||
70 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o | 69 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o |
71 | obj-$(CONFIG_ARCH_OMAP4) += cpuidle44xx.o | ||
72 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o | 70 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o |
73 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o | 71 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o |
74 | obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o | 72 | obj-$(CONFIG_OMAP_SMARTREFLEX_CLASS3) += smartreflex-class3.o |
@@ -82,6 +80,11 @@ endif | |||
82 | 80 | ||
83 | endif | 81 | endif |
84 | 82 | ||
83 | ifeq ($(CONFIG_CPU_IDLE),y) | ||
84 | obj-$(CONFIG_ARCH_OMAP3) += cpuidle34xx.o | ||
85 | obj-$(CONFIG_ARCH_OMAP4) += cpuidle44xx.o | ||
86 | endif | ||
87 | |||
85 | # PRCM | 88 | # PRCM |
86 | obj-y += prm_common.o | 89 | obj-y += prm_common.o |
87 | obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o | 90 | obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o |
diff --git a/arch/arm/mach-omap2/am35xx-emac.c b/arch/arm/mach-omap2/am35xx-emac.c index 447682c4e11c..2c90ac686686 100644 --- a/arch/arm/mach-omap2/am35xx-emac.c +++ b/arch/arm/mach-omap2/am35xx-emac.c | |||
@@ -15,27 +15,13 @@ | |||
15 | * General Public License for more details. | 15 | * General Public License for more details. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/clk.h> | 18 | #include <linux/err.h> |
19 | #include <linux/davinci_emac.h> | 19 | #include <linux/davinci_emac.h> |
20 | #include <linux/platform_device.h> | 20 | #include <asm/system.h> |
21 | #include <plat/irqs.h> | 21 | #include <plat/omap_device.h> |
22 | #include <mach/am35xx.h> | 22 | #include <mach/am35xx.h> |
23 | |||
24 | #include "control.h" | 23 | #include "control.h" |
25 | 24 | #include "am35xx-emac.h" | |
26 | static struct mdio_platform_data am35xx_emac_mdio_pdata; | ||
27 | |||
28 | static struct resource am35xx_emac_mdio_resources[] = { | ||
29 | DEFINE_RES_MEM(AM35XX_IPSS_EMAC_BASE + AM35XX_EMAC_MDIO_OFFSET, SZ_4K), | ||
30 | }; | ||
31 | |||
32 | static struct platform_device am35xx_emac_mdio_device = { | ||
33 | .name = "davinci_mdio", | ||
34 | .id = 0, | ||
35 | .num_resources = ARRAY_SIZE(am35xx_emac_mdio_resources), | ||
36 | .resource = am35xx_emac_mdio_resources, | ||
37 | .dev.platform_data = &am35xx_emac_mdio_pdata, | ||
38 | }; | ||
39 | 25 | ||
40 | static void am35xx_enable_emac_int(void) | 26 | static void am35xx_enable_emac_int(void) |
41 | { | 27 | { |
@@ -69,41 +55,57 @@ static struct emac_platform_data am35xx_emac_pdata = { | |||
69 | .interrupt_disable = am35xx_disable_emac_int, | 55 | .interrupt_disable = am35xx_disable_emac_int, |
70 | }; | 56 | }; |
71 | 57 | ||
72 | static struct resource am35xx_emac_resources[] = { | 58 | static struct mdio_platform_data am35xx_mdio_pdata; |
73 | DEFINE_RES_MEM(AM35XX_IPSS_EMAC_BASE, 0x30000), | ||
74 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_RXTHRESH_IRQ), | ||
75 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_RX_PULSE_IRQ), | ||
76 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_TX_PULSE_IRQ), | ||
77 | DEFINE_RES_IRQ(INT_35XX_EMAC_C0_MISC_PULSE_IRQ), | ||
78 | }; | ||
79 | 59 | ||
80 | static struct platform_device am35xx_emac_device = { | 60 | static int __init omap_davinci_emac_dev_init(struct omap_hwmod *oh, |
81 | .name = "davinci_emac", | 61 | void *pdata, int pdata_len) |
82 | .id = -1, | 62 | { |
83 | .num_resources = ARRAY_SIZE(am35xx_emac_resources), | 63 | struct platform_device *pdev; |
84 | .resource = am35xx_emac_resources, | 64 | |
85 | .dev = { | 65 | pdev = omap_device_build(oh->class->name, 0, oh, pdata, pdata_len, |
86 | .platform_data = &am35xx_emac_pdata, | 66 | NULL, 0, false); |
87 | }, | 67 | if (IS_ERR(pdev)) { |
88 | }; | 68 | WARN(1, "Can't build omap_device for %s:%s.\n", |
69 | oh->class->name, oh->name); | ||
70 | return PTR_ERR(pdev); | ||
71 | } | ||
72 | |||
73 | return 0; | ||
74 | } | ||
89 | 75 | ||
90 | void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) | 76 | void __init am35xx_emac_init(unsigned long mdio_bus_freq, u8 rmii_en) |
91 | { | 77 | { |
78 | struct omap_hwmod *oh; | ||
92 | u32 v; | 79 | u32 v; |
93 | int err; | 80 | int ret; |
94 | 81 | ||
95 | am35xx_emac_pdata.rmii_en = rmii_en; | 82 | oh = omap_hwmod_lookup("davinci_mdio"); |
96 | am35xx_emac_mdio_pdata.bus_freq = mdio_bus_freq; | 83 | if (!oh) { |
97 | err = platform_device_register(&am35xx_emac_device); | 84 | pr_err("Could not find davinci_mdio hwmod\n"); |
98 | if (err) { | 85 | return; |
99 | pr_err("AM35x: failed registering EMAC device: %d\n", err); | 86 | } |
87 | |||
88 | am35xx_mdio_pdata.bus_freq = mdio_bus_freq; | ||
89 | |||
90 | ret = omap_davinci_emac_dev_init(oh, &am35xx_mdio_pdata, | ||
91 | sizeof(am35xx_mdio_pdata)); | ||
92 | if (ret) { | ||
93 | pr_err("Could not build davinci_mdio hwmod device\n"); | ||
100 | return; | 94 | return; |
101 | } | 95 | } |
102 | 96 | ||
103 | err = platform_device_register(&am35xx_emac_mdio_device); | 97 | oh = omap_hwmod_lookup("davinci_emac"); |
104 | if (err) { | 98 | if (!oh) { |
105 | pr_err("AM35x: failed registering EMAC MDIO device: %d\n", err); | 99 | pr_err("Could not find davinci_emac hwmod\n"); |
106 | platform_device_unregister(&am35xx_emac_device); | 100 | return; |
101 | } | ||
102 | |||
103 | am35xx_emac_pdata.rmii_en = rmii_en; | ||
104 | |||
105 | ret = omap_davinci_emac_dev_init(oh, &am35xx_emac_pdata, | ||
106 | sizeof(am35xx_emac_pdata)); | ||
107 | if (ret) { | ||
108 | pr_err("Could not build davinci_emac hwmod device\n"); | ||
107 | return; | 109 | return; |
108 | } | 110 | } |
109 | 111 | ||
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 99ca6bad5c30..0dac4db01139 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c | |||
@@ -218,9 +218,6 @@ static struct twl4030_gpio_platform_data sdp2430_gpio_data = { | |||
218 | }; | 218 | }; |
219 | 219 | ||
220 | static struct twl4030_platform_data sdp2430_twldata = { | 220 | static struct twl4030_platform_data sdp2430_twldata = { |
221 | .irq_base = TWL4030_IRQ_BASE, | ||
222 | .irq_end = TWL4030_IRQ_END, | ||
223 | |||
224 | /* platform_data for children goes here */ | 221 | /* platform_data for children goes here */ |
225 | .gpio = &sdp2430_gpio_data, | 222 | .gpio = &sdp2430_gpio_data, |
226 | .vmmc1 = &sdp2430_vmmc1, | 223 | .vmmc1 = &sdp2430_vmmc1, |
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 580fd17208da..6202fc76e490 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c | |||
@@ -433,7 +433,7 @@ static struct platform_device *omap3_beagle_devices[] __initdata = { | |||
433 | 433 | ||
434 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { | 434 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { |
435 | 435 | ||
436 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 436 | .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, |
437 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, | 437 | .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, |
438 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | 438 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, |
439 | 439 | ||
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index 932e1778aff9..fca93d1afd43 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c | |||
@@ -93,9 +93,6 @@ static struct twl4030_usb_data omap3logic_usb_data = { | |||
93 | 93 | ||
94 | 94 | ||
95 | static struct twl4030_platform_data omap3logic_twldata = { | 95 | static struct twl4030_platform_data omap3logic_twldata = { |
96 | .irq_base = TWL4030_IRQ_BASE, | ||
97 | .irq_end = TWL4030_IRQ_END, | ||
98 | |||
99 | /* platform_data for children goes here */ | 96 | /* platform_data for children goes here */ |
100 | .gpio = &omap3logic_gpio_data, | 97 | .gpio = &omap3logic_gpio_data, |
101 | .vmmc1 = &omap3logic_vmmc1, | 98 | .vmmc1 = &omap3logic_vmmc1, |
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c index 1efdec236ae8..a67aaa97dcd8 100644 --- a/arch/arm/mach-omap2/clock3xxx_data.c +++ b/arch/arm/mach-omap2/clock3xxx_data.c | |||
@@ -2490,13 +2490,13 @@ static struct clk uart4_fck = { | |||
2490 | }; | 2490 | }; |
2491 | 2491 | ||
2492 | static struct clk uart4_fck_am35xx = { | 2492 | static struct clk uart4_fck_am35xx = { |
2493 | .name = "uart4_fck", | 2493 | .name = "uart4_fck", |
2494 | .ops = &clkops_omap2_dflt_wait, | 2494 | .ops = &clkops_omap2_dflt_wait, |
2495 | .parent = &per_48m_fck, | 2495 | .parent = &core_48m_fck, |
2496 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), | 2496 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), |
2497 | .enable_bit = OMAP3430_EN_UART4_SHIFT, | 2497 | .enable_bit = AM35XX_EN_UART4_SHIFT, |
2498 | .clkdm_name = "core_l4_clkdm", | 2498 | .clkdm_name = "core_l4_clkdm", |
2499 | .recalc = &followparent_recalc, | 2499 | .recalc = &followparent_recalc, |
2500 | }; | 2500 | }; |
2501 | 2501 | ||
2502 | static struct clk gpt2_fck = { | 2502 | static struct clk gpt2_fck = { |
@@ -3201,8 +3201,12 @@ static struct clk vpfe_fck = { | |||
3201 | }; | 3201 | }; |
3202 | 3202 | ||
3203 | /* | 3203 | /* |
3204 | * The UART1/2 functional clock acts as the functional | 3204 | * The UART1/2 functional clock acts as the functional clock for |
3205 | * clock for UART4. No separate fclk control available. | 3205 | * UART4. No separate fclk control available. XXX Well now we have a |
3206 | * uart4_fck that is apparently used as the UART4 functional clock, | ||
3207 | * but it also seems that uart1_fck or uart2_fck are still needed, at | ||
3208 | * least for UART4 softresets to complete. This really needs | ||
3209 | * clarification. | ||
3206 | */ | 3210 | */ |
3207 | static struct clk uart4_ick_am35xx = { | 3211 | static struct clk uart4_ick_am35xx = { |
3208 | .name = "uart4_ick", | 3212 | .name = "uart4_ick", |
@@ -3474,12 +3478,12 @@ static struct omap_clk omap3xxx_clks[] = { | |||
3474 | CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX), | 3478 | CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX), |
3475 | CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX), | 3479 | CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX), |
3476 | CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX), | 3480 | CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX), |
3477 | CLK("davinci_emac", NULL, &emac_ick, CK_AM35XX), | 3481 | CLK("davinci_emac.0", NULL, &emac_ick, CK_AM35XX), |
3478 | CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX), | 3482 | CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX), |
3479 | CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX), | 3483 | CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX), |
3480 | CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX), | 3484 | CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX), |
3481 | CLK("musb-am35x", "ick", &hsotgusb_ick_am35xx, CK_AM35XX), | 3485 | CLK(NULL, "hsotgusb_ick", &hsotgusb_ick_am35xx, CK_AM35XX), |
3482 | CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), | 3486 | CLK(NULL, "hsotgusb_fck", &hsotgusb_fck_am35xx, CK_AM35XX), |
3483 | CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), | 3487 | CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), |
3484 | CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), | 3488 | CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), |
3485 | CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX), | 3489 | CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX), |
diff --git a/arch/arm/mach-omap2/clockdomains3xxx_data.c b/arch/arm/mach-omap2/clockdomains3xxx_data.c index 6038adb97710..8e35080026d3 100644 --- a/arch/arm/mach-omap2/clockdomains3xxx_data.c +++ b/arch/arm/mach-omap2/clockdomains3xxx_data.c | |||
@@ -59,6 +59,12 @@ static struct clkdm_dep gfx_sgx_3xxx_wkdeps[] = { | |||
59 | { NULL }, | 59 | { NULL }, |
60 | }; | 60 | }; |
61 | 61 | ||
62 | static struct clkdm_dep gfx_sgx_am35x_wkdeps[] = { | ||
63 | { .clkdm_name = "mpu_clkdm" }, | ||
64 | { .clkdm_name = "wkup_clkdm" }, | ||
65 | { NULL }, | ||
66 | }; | ||
67 | |||
62 | /* 3430: PM_WKDEP_PER: CORE, IVA2, MPU, WKUP */ | 68 | /* 3430: PM_WKDEP_PER: CORE, IVA2, MPU, WKUP */ |
63 | static struct clkdm_dep per_wkdeps[] = { | 69 | static struct clkdm_dep per_wkdeps[] = { |
64 | { .clkdm_name = "core_l3_clkdm" }, | 70 | { .clkdm_name = "core_l3_clkdm" }, |
@@ -69,6 +75,14 @@ static struct clkdm_dep per_wkdeps[] = { | |||
69 | { NULL }, | 75 | { NULL }, |
70 | }; | 76 | }; |
71 | 77 | ||
78 | static struct clkdm_dep per_am35x_wkdeps[] = { | ||
79 | { .clkdm_name = "core_l3_clkdm" }, | ||
80 | { .clkdm_name = "core_l4_clkdm" }, | ||
81 | { .clkdm_name = "mpu_clkdm" }, | ||
82 | { .clkdm_name = "wkup_clkdm" }, | ||
83 | { NULL }, | ||
84 | }; | ||
85 | |||
72 | /* 3430ES2: PM_WKDEP_USBHOST: CORE, IVA2, MPU, WKUP */ | 86 | /* 3430ES2: PM_WKDEP_USBHOST: CORE, IVA2, MPU, WKUP */ |
73 | static struct clkdm_dep usbhost_wkdeps[] = { | 87 | static struct clkdm_dep usbhost_wkdeps[] = { |
74 | { .clkdm_name = "core_l3_clkdm" }, | 88 | { .clkdm_name = "core_l3_clkdm" }, |
@@ -79,6 +93,14 @@ static struct clkdm_dep usbhost_wkdeps[] = { | |||
79 | { NULL }, | 93 | { NULL }, |
80 | }; | 94 | }; |
81 | 95 | ||
96 | static struct clkdm_dep usbhost_am35x_wkdeps[] = { | ||
97 | { .clkdm_name = "core_l3_clkdm" }, | ||
98 | { .clkdm_name = "core_l4_clkdm" }, | ||
99 | { .clkdm_name = "mpu_clkdm" }, | ||
100 | { .clkdm_name = "wkup_clkdm" }, | ||
101 | { NULL }, | ||
102 | }; | ||
103 | |||
82 | /* 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER */ | 104 | /* 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER */ |
83 | static struct clkdm_dep mpu_3xxx_wkdeps[] = { | 105 | static struct clkdm_dep mpu_3xxx_wkdeps[] = { |
84 | { .clkdm_name = "core_l3_clkdm" }, | 106 | { .clkdm_name = "core_l3_clkdm" }, |
@@ -89,6 +111,14 @@ static struct clkdm_dep mpu_3xxx_wkdeps[] = { | |||
89 | { NULL }, | 111 | { NULL }, |
90 | }; | 112 | }; |
91 | 113 | ||
114 | static struct clkdm_dep mpu_am35x_wkdeps[] = { | ||
115 | { .clkdm_name = "core_l3_clkdm" }, | ||
116 | { .clkdm_name = "core_l4_clkdm" }, | ||
117 | { .clkdm_name = "dss_clkdm" }, | ||
118 | { .clkdm_name = "per_clkdm" }, | ||
119 | { NULL }, | ||
120 | }; | ||
121 | |||
92 | /* 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER */ | 122 | /* 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER */ |
93 | static struct clkdm_dep iva2_wkdeps[] = { | 123 | static struct clkdm_dep iva2_wkdeps[] = { |
94 | { .clkdm_name = "core_l3_clkdm" }, | 124 | { .clkdm_name = "core_l3_clkdm" }, |
@@ -116,6 +146,12 @@ static struct clkdm_dep dss_wkdeps[] = { | |||
116 | { NULL }, | 146 | { NULL }, |
117 | }; | 147 | }; |
118 | 148 | ||
149 | static struct clkdm_dep dss_am35x_wkdeps[] = { | ||
150 | { .clkdm_name = "mpu_clkdm" }, | ||
151 | { .clkdm_name = "wkup_clkdm" }, | ||
152 | { NULL }, | ||
153 | }; | ||
154 | |||
119 | /* 3430: PM_WKDEP_NEON: MPU */ | 155 | /* 3430: PM_WKDEP_NEON: MPU */ |
120 | static struct clkdm_dep neon_wkdeps[] = { | 156 | static struct clkdm_dep neon_wkdeps[] = { |
121 | { .clkdm_name = "mpu_clkdm" }, | 157 | { .clkdm_name = "mpu_clkdm" }, |
@@ -131,6 +167,11 @@ static struct clkdm_dep dss_sleepdeps[] = { | |||
131 | { NULL }, | 167 | { NULL }, |
132 | }; | 168 | }; |
133 | 169 | ||
170 | static struct clkdm_dep dss_am35x_sleepdeps[] = { | ||
171 | { .clkdm_name = "mpu_clkdm" }, | ||
172 | { NULL }, | ||
173 | }; | ||
174 | |||
134 | /* 3430: CM_SLEEPDEP_PER: MPU, IVA */ | 175 | /* 3430: CM_SLEEPDEP_PER: MPU, IVA */ |
135 | static struct clkdm_dep per_sleepdeps[] = { | 176 | static struct clkdm_dep per_sleepdeps[] = { |
136 | { .clkdm_name = "mpu_clkdm" }, | 177 | { .clkdm_name = "mpu_clkdm" }, |
@@ -138,6 +179,11 @@ static struct clkdm_dep per_sleepdeps[] = { | |||
138 | { NULL }, | 179 | { NULL }, |
139 | }; | 180 | }; |
140 | 181 | ||
182 | static struct clkdm_dep per_am35x_sleepdeps[] = { | ||
183 | { .clkdm_name = "mpu_clkdm" }, | ||
184 | { NULL }, | ||
185 | }; | ||
186 | |||
141 | /* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */ | 187 | /* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */ |
142 | static struct clkdm_dep usbhost_sleepdeps[] = { | 188 | static struct clkdm_dep usbhost_sleepdeps[] = { |
143 | { .clkdm_name = "mpu_clkdm" }, | 189 | { .clkdm_name = "mpu_clkdm" }, |
@@ -145,6 +191,11 @@ static struct clkdm_dep usbhost_sleepdeps[] = { | |||
145 | { NULL }, | 191 | { NULL }, |
146 | }; | 192 | }; |
147 | 193 | ||
194 | static struct clkdm_dep usbhost_am35x_sleepdeps[] = { | ||
195 | { .clkdm_name = "mpu_clkdm" }, | ||
196 | { NULL }, | ||
197 | }; | ||
198 | |||
148 | /* 3430: CM_SLEEPDEP_CAM: MPU */ | 199 | /* 3430: CM_SLEEPDEP_CAM: MPU */ |
149 | static struct clkdm_dep cam_sleepdeps[] = { | 200 | static struct clkdm_dep cam_sleepdeps[] = { |
150 | { .clkdm_name = "mpu_clkdm" }, | 201 | { .clkdm_name = "mpu_clkdm" }, |
@@ -175,6 +226,15 @@ static struct clockdomain mpu_3xxx_clkdm = { | |||
175 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, | 226 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, |
176 | }; | 227 | }; |
177 | 228 | ||
229 | static struct clockdomain mpu_am35x_clkdm = { | ||
230 | .name = "mpu_clkdm", | ||
231 | .pwrdm = { .name = "mpu_pwrdm" }, | ||
232 | .flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP, | ||
233 | .dep_bit = OMAP3430_EN_MPU_SHIFT, | ||
234 | .wkdep_srcs = mpu_am35x_wkdeps, | ||
235 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK, | ||
236 | }; | ||
237 | |||
178 | static struct clockdomain neon_clkdm = { | 238 | static struct clockdomain neon_clkdm = { |
179 | .name = "neon_clkdm", | 239 | .name = "neon_clkdm", |
180 | .pwrdm = { .name = "neon_pwrdm" }, | 240 | .pwrdm = { .name = "neon_pwrdm" }, |
@@ -210,6 +270,15 @@ static struct clockdomain sgx_clkdm = { | |||
210 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, | 270 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, |
211 | }; | 271 | }; |
212 | 272 | ||
273 | static struct clockdomain sgx_am35x_clkdm = { | ||
274 | .name = "sgx_clkdm", | ||
275 | .pwrdm = { .name = "sgx_pwrdm" }, | ||
276 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
277 | .wkdep_srcs = gfx_sgx_am35x_wkdeps, | ||
278 | .sleepdep_srcs = gfx_sgx_sleepdeps, | ||
279 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK, | ||
280 | }; | ||
281 | |||
213 | /* | 282 | /* |
214 | * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but | 283 | * The die-to-die clockdomain was documented in the 34xx ES1 TRM, but |
215 | * then that information was removed from the 34xx ES2+ TRM. It is | 284 | * then that information was removed from the 34xx ES2+ TRM. It is |
@@ -261,6 +330,16 @@ static struct clockdomain dss_3xxx_clkdm = { | |||
261 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, | 330 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, |
262 | }; | 331 | }; |
263 | 332 | ||
333 | static struct clockdomain dss_am35x_clkdm = { | ||
334 | .name = "dss_clkdm", | ||
335 | .pwrdm = { .name = "dss_pwrdm" }, | ||
336 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
337 | .dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT, | ||
338 | .wkdep_srcs = dss_am35x_wkdeps, | ||
339 | .sleepdep_srcs = dss_am35x_sleepdeps, | ||
340 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK, | ||
341 | }; | ||
342 | |||
264 | static struct clockdomain cam_clkdm = { | 343 | static struct clockdomain cam_clkdm = { |
265 | .name = "cam_clkdm", | 344 | .name = "cam_clkdm", |
266 | .pwrdm = { .name = "cam_pwrdm" }, | 345 | .pwrdm = { .name = "cam_pwrdm" }, |
@@ -279,6 +358,15 @@ static struct clockdomain usbhost_clkdm = { | |||
279 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, | 358 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, |
280 | }; | 359 | }; |
281 | 360 | ||
361 | static struct clockdomain usbhost_am35x_clkdm = { | ||
362 | .name = "usbhost_clkdm", | ||
363 | .pwrdm = { .name = "core_pwrdm" }, | ||
364 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
365 | .wkdep_srcs = usbhost_am35x_wkdeps, | ||
366 | .sleepdep_srcs = usbhost_am35x_sleepdeps, | ||
367 | .clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK, | ||
368 | }; | ||
369 | |||
282 | static struct clockdomain per_clkdm = { | 370 | static struct clockdomain per_clkdm = { |
283 | .name = "per_clkdm", | 371 | .name = "per_clkdm", |
284 | .pwrdm = { .name = "per_pwrdm" }, | 372 | .pwrdm = { .name = "per_pwrdm" }, |
@@ -289,6 +377,16 @@ static struct clockdomain per_clkdm = { | |||
289 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, | 377 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, |
290 | }; | 378 | }; |
291 | 379 | ||
380 | static struct clockdomain per_am35x_clkdm = { | ||
381 | .name = "per_clkdm", | ||
382 | .pwrdm = { .name = "per_pwrdm" }, | ||
383 | .flags = CLKDM_CAN_HWSUP_SWSUP, | ||
384 | .dep_bit = OMAP3430_EN_PER_SHIFT, | ||
385 | .wkdep_srcs = per_am35x_wkdeps, | ||
386 | .sleepdep_srcs = per_am35x_sleepdeps, | ||
387 | .clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK, | ||
388 | }; | ||
389 | |||
292 | /* | 390 | /* |
293 | * Disable hw supervised mode for emu_clkdm, because emu_pwrdm is | 391 | * Disable hw supervised mode for emu_clkdm, because emu_pwrdm is |
294 | * switched of even if sdti is in use | 392 | * switched of even if sdti is in use |
@@ -341,31 +439,44 @@ static struct clkdm_autodep clkdm_autodeps[] = { | |||
341 | } | 439 | } |
342 | }; | 440 | }; |
343 | 441 | ||
442 | static struct clkdm_autodep clkdm_am35x_autodeps[] = { | ||
443 | { | ||
444 | .clkdm = { .name = "mpu_clkdm" }, | ||
445 | }, | ||
446 | { | ||
447 | .clkdm = { .name = NULL }, | ||
448 | } | ||
449 | }; | ||
450 | |||
344 | /* | 451 | /* |
345 | * | 452 | * |
346 | */ | 453 | */ |
347 | 454 | ||
348 | static struct clockdomain *clockdomains_omap3430_common[] __initdata = { | 455 | static struct clockdomain *clockdomains_common[] __initdata = { |
349 | &wkup_common_clkdm, | 456 | &wkup_common_clkdm, |
350 | &cm_common_clkdm, | 457 | &cm_common_clkdm, |
351 | &prm_common_clkdm, | 458 | &prm_common_clkdm, |
352 | &mpu_3xxx_clkdm, | ||
353 | &neon_clkdm, | 459 | &neon_clkdm, |
354 | &iva2_clkdm, | ||
355 | &d2d_clkdm, | ||
356 | &core_l3_3xxx_clkdm, | 460 | &core_l3_3xxx_clkdm, |
357 | &core_l4_3xxx_clkdm, | 461 | &core_l4_3xxx_clkdm, |
358 | &dss_3xxx_clkdm, | ||
359 | &cam_clkdm, | ||
360 | &per_clkdm, | ||
361 | &emu_clkdm, | 462 | &emu_clkdm, |
362 | &dpll1_clkdm, | 463 | &dpll1_clkdm, |
363 | &dpll2_clkdm, | ||
364 | &dpll3_clkdm, | 464 | &dpll3_clkdm, |
365 | &dpll4_clkdm, | 465 | &dpll4_clkdm, |
366 | NULL | 466 | NULL |
367 | }; | 467 | }; |
368 | 468 | ||
469 | static struct clockdomain *clockdomains_omap3430[] __initdata = { | ||
470 | &mpu_3xxx_clkdm, | ||
471 | &iva2_clkdm, | ||
472 | &d2d_clkdm, | ||
473 | &dss_3xxx_clkdm, | ||
474 | &cam_clkdm, | ||
475 | &per_clkdm, | ||
476 | &dpll2_clkdm, | ||
477 | NULL | ||
478 | }; | ||
479 | |||
369 | static struct clockdomain *clockdomains_omap3430es1[] __initdata = { | 480 | static struct clockdomain *clockdomains_omap3430es1[] __initdata = { |
370 | &gfx_3430es1_clkdm, | 481 | &gfx_3430es1_clkdm, |
371 | NULL, | 482 | NULL, |
@@ -378,21 +489,41 @@ static struct clockdomain *clockdomains_omap3430es2plus[] __initdata = { | |||
378 | NULL, | 489 | NULL, |
379 | }; | 490 | }; |
380 | 491 | ||
492 | static struct clockdomain *clockdomains_am35x[] __initdata = { | ||
493 | &mpu_am35x_clkdm, | ||
494 | &sgx_am35x_clkdm, | ||
495 | &dss_am35x_clkdm, | ||
496 | &per_am35x_clkdm, | ||
497 | &usbhost_am35x_clkdm, | ||
498 | &dpll5_clkdm, | ||
499 | NULL | ||
500 | }; | ||
501 | |||
381 | void __init omap3xxx_clockdomains_init(void) | 502 | void __init omap3xxx_clockdomains_init(void) |
382 | { | 503 | { |
383 | struct clockdomain **sc; | 504 | struct clockdomain **sc; |
505 | unsigned int rev; | ||
384 | 506 | ||
385 | if (!cpu_is_omap34xx()) | 507 | if (!cpu_is_omap34xx()) |
386 | return; | 508 | return; |
387 | 509 | ||
388 | clkdm_register_platform_funcs(&omap3_clkdm_operations); | 510 | clkdm_register_platform_funcs(&omap3_clkdm_operations); |
389 | clkdm_register_clkdms(clockdomains_omap3430_common); | 511 | clkdm_register_clkdms(clockdomains_common); |
390 | 512 | ||
391 | sc = (omap_rev() == OMAP3430_REV_ES1_0) ? clockdomains_omap3430es1 : | 513 | rev = omap_rev(); |
392 | clockdomains_omap3430es2plus; | ||
393 | 514 | ||
394 | clkdm_register_clkdms(sc); | 515 | if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) { |
516 | clkdm_register_clkdms(clockdomains_am35x); | ||
517 | clkdm_register_autodeps(clkdm_am35x_autodeps); | ||
518 | } else { | ||
519 | clkdm_register_clkdms(clockdomains_omap3430); | ||
520 | |||
521 | sc = (rev == OMAP3430_REV_ES1_0) ? | ||
522 | clockdomains_omap3430es1 : clockdomains_omap3430es2plus; | ||
523 | |||
524 | clkdm_register_clkdms(sc); | ||
525 | clkdm_register_autodeps(clkdm_autodeps); | ||
526 | } | ||
395 | 527 | ||
396 | clkdm_register_autodeps(clkdm_autodeps); | ||
397 | clkdm_complete_init(); | 528 | clkdm_complete_init(); |
398 | } | 529 | } |
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h index 8083a8cdc55f..766338fe4d34 100644 --- a/arch/arm/mach-omap2/cm-regbits-34xx.h +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h | |||
@@ -169,8 +169,6 @@ | |||
169 | /* AM35XX specific CM_ICLKEN1_CORE bits */ | 169 | /* AM35XX specific CM_ICLKEN1_CORE bits */ |
170 | #define AM35XX_EN_IPSS_MASK (1 << 4) | 170 | #define AM35XX_EN_IPSS_MASK (1 << 4) |
171 | #define AM35XX_EN_IPSS_SHIFT 4 | 171 | #define AM35XX_EN_IPSS_SHIFT 4 |
172 | #define AM35XX_EN_UART4_MASK (1 << 23) | ||
173 | #define AM35XX_EN_UART4_SHIFT 23 | ||
174 | 172 | ||
175 | /* CM_ICLKEN2_CORE */ | 173 | /* CM_ICLKEN2_CORE */ |
176 | #define OMAP3430_EN_PKA_MASK (1 << 4) | 174 | #define OMAP3430_EN_PKA_MASK (1 << 4) |
@@ -207,6 +205,8 @@ | |||
207 | #define OMAP3430_ST_DES2_MASK (1 << 26) | 205 | #define OMAP3430_ST_DES2_MASK (1 << 26) |
208 | #define OMAP3430_ST_MSPRO_SHIFT 23 | 206 | #define OMAP3430_ST_MSPRO_SHIFT 23 |
209 | #define OMAP3430_ST_MSPRO_MASK (1 << 23) | 207 | #define OMAP3430_ST_MSPRO_MASK (1 << 23) |
208 | #define AM35XX_ST_UART4_SHIFT 23 | ||
209 | #define AM35XX_ST_UART4_MASK (1 << 23) | ||
210 | #define OMAP3430_ST_HDQ_SHIFT 22 | 210 | #define OMAP3430_ST_HDQ_SHIFT 22 |
211 | #define OMAP3430_ST_HDQ_MASK (1 << 22) | 211 | #define OMAP3430_ST_HDQ_MASK (1 << 22) |
212 | #define OMAP3430ES1_ST_FAC_SHIFT 8 | 212 | #define OMAP3430ES1_ST_FAC_SHIFT 8 |
diff --git a/arch/arm/mach-omap2/common-board-devices.c b/arch/arm/mach-omap2/common-board-devices.c index 1706ebcec08d..c1875862679f 100644 --- a/arch/arm/mach-omap2/common-board-devices.c +++ b/arch/arm/mach-omap2/common-board-devices.c | |||
@@ -63,28 +63,30 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce, | |||
63 | struct spi_board_info *spi_bi = &ads7846_spi_board_info; | 63 | struct spi_board_info *spi_bi = &ads7846_spi_board_info; |
64 | int err; | 64 | int err; |
65 | 65 | ||
66 | if (board_pdata && board_pdata->get_pendown_state) { | 66 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); |
67 | err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown"); | 67 | if (err) { |
68 | if (err) { | 68 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); |
69 | pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err); | 69 | return; |
70 | return; | ||
71 | } | ||
72 | gpio_export(gpio_pendown, 0); | ||
73 | |||
74 | if (gpio_debounce) | ||
75 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
76 | } | 70 | } |
77 | 71 | ||
72 | if (gpio_debounce) | ||
73 | gpio_set_debounce(gpio_pendown, gpio_debounce); | ||
74 | |||
78 | spi_bi->bus_num = bus_num; | 75 | spi_bi->bus_num = bus_num; |
79 | spi_bi->irq = gpio_to_irq(gpio_pendown); | 76 | spi_bi->irq = gpio_to_irq(gpio_pendown); |
80 | 77 | ||
81 | if (board_pdata) { | 78 | if (board_pdata) { |
82 | board_pdata->gpio_pendown = gpio_pendown; | 79 | board_pdata->gpio_pendown = gpio_pendown; |
83 | spi_bi->platform_data = board_pdata; | 80 | spi_bi->platform_data = board_pdata; |
81 | if (board_pdata->get_pendown_state) | ||
82 | gpio_export(gpio_pendown, 0); | ||
84 | } else { | 83 | } else { |
85 | ads7846_config.gpio_pendown = gpio_pendown; | 84 | ads7846_config.gpio_pendown = gpio_pendown; |
86 | } | 85 | } |
87 | 86 | ||
87 | if (!board_pdata || (board_pdata && !board_pdata->get_pendown_state)) | ||
88 | gpio_free(gpio_pendown); | ||
89 | |||
88 | spi_register_board_info(&ads7846_spi_board_info, 1); | 90 | spi_register_board_info(&ads7846_spi_board_info, 1); |
89 | } | 91 | } |
90 | #else | 92 | #else |
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 207bc1c7759f..31344528eb54 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c | |||
@@ -36,8 +36,6 @@ | |||
36 | #include "control.h" | 36 | #include "control.h" |
37 | #include "common.h" | 37 | #include "common.h" |
38 | 38 | ||
39 | #ifdef CONFIG_CPU_IDLE | ||
40 | |||
41 | /* Mach specific information to be recorded in the C-state driver_data */ | 39 | /* Mach specific information to be recorded in the C-state driver_data */ |
42 | struct omap3_idle_statedata { | 40 | struct omap3_idle_statedata { |
43 | u32 mpu_state; | 41 | u32 mpu_state; |
@@ -379,9 +377,3 @@ int __init omap3_idle_init(void) | |||
379 | 377 | ||
380 | return 0; | 378 | return 0; |
381 | } | 379 | } |
382 | #else | ||
383 | int __init omap3_idle_init(void) | ||
384 | { | ||
385 | return 0; | ||
386 | } | ||
387 | #endif /* CONFIG_CPU_IDLE */ | ||
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c index be1617ca84bd..02d15bbd4e35 100644 --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c | |||
@@ -22,8 +22,6 @@ | |||
22 | #include "pm.h" | 22 | #include "pm.h" |
23 | #include "prm.h" | 23 | #include "prm.h" |
24 | 24 | ||
25 | #ifdef CONFIG_CPU_IDLE | ||
26 | |||
27 | /* Machine specific information */ | 25 | /* Machine specific information */ |
28 | struct omap4_idle_statedata { | 26 | struct omap4_idle_statedata { |
29 | u32 cpu_state; | 27 | u32 cpu_state; |
@@ -199,9 +197,3 @@ int __init omap4_idle_init(void) | |||
199 | 197 | ||
200 | return 0; | 198 | return 0; |
201 | } | 199 | } |
202 | #else | ||
203 | int __init omap4_idle_init(void) | ||
204 | { | ||
205 | return 0; | ||
206 | } | ||
207 | #endif /* CONFIG_CPU_IDLE */ | ||
diff --git a/arch/arm/mach-omap2/include/mach/am35xx.h b/arch/arm/mach-omap2/include/mach/am35xx.h index f1e13d1ca5e7..95594495fcf6 100644 --- a/arch/arm/mach-omap2/include/mach/am35xx.h +++ b/arch/arm/mach-omap2/include/mach/am35xx.h | |||
@@ -36,6 +36,8 @@ | |||
36 | #define AM35XX_EMAC_CNTRL_MOD_OFFSET (0x0) | 36 | #define AM35XX_EMAC_CNTRL_MOD_OFFSET (0x0) |
37 | #define AM35XX_EMAC_CNTRL_RAM_OFFSET (0x20000) | 37 | #define AM35XX_EMAC_CNTRL_RAM_OFFSET (0x20000) |
38 | #define AM35XX_EMAC_MDIO_OFFSET (0x30000) | 38 | #define AM35XX_EMAC_MDIO_OFFSET (0x30000) |
39 | #define AM35XX_IPSS_MDIO_BASE (AM35XX_IPSS_EMAC_BASE + \ | ||
40 | AM35XX_EMAC_MDIO_OFFSET) | ||
39 | #define AM35XX_EMAC_CNTRL_RAM_SIZE (0x2000) | 41 | #define AM35XX_EMAC_CNTRL_RAM_SIZE (0x2000) |
40 | #define AM35XX_EMAC_RAM_ADDR (AM3517_EMAC_BASE + \ | 42 | #define AM35XX_EMAC_RAM_ADDR (AM3517_EMAC_BASE + \ |
41 | AM3517_EMAC_CNTRL_RAM_OFFSET) | 43 | AM3517_EMAC_CNTRL_RAM_OFFSET) |
diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index 6038a8c84b74..4c35366c7e4d 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c | |||
@@ -262,7 +262,7 @@ int __init omap_intc_of_init(struct device_node *node, | |||
262 | struct device_node *parent) | 262 | struct device_node *parent) |
263 | { | 263 | { |
264 | struct resource res; | 264 | struct resource res; |
265 | u32 nr_irqs = 96; | 265 | u32 nr_irq = 96; |
266 | 266 | ||
267 | if (WARN_ON(!node)) | 267 | if (WARN_ON(!node)) |
268 | return -ENODEV; | 268 | return -ENODEV; |
@@ -272,10 +272,10 @@ int __init omap_intc_of_init(struct device_node *node, | |||
272 | return -EINVAL; | 272 | return -EINVAL; |
273 | } | 273 | } |
274 | 274 | ||
275 | if (of_property_read_u32(node, "ti,intc-size", &nr_irqs)) | 275 | if (of_property_read_u32(node, "ti,intc-size", &nr_irq)) |
276 | pr_warn("unable to get intc-size, default to %d\n", nr_irqs); | 276 | pr_warn("unable to get intc-size, default to %d\n", nr_irq); |
277 | 277 | ||
278 | omap_init_irq(res.start, nr_irqs, of_node_get(node)); | 278 | omap_init_irq(res.start, nr_irq, of_node_get(node)); |
279 | 279 | ||
280 | return 0; | 280 | return 0; |
281 | } | 281 | } |
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index 19b8b6774862..6875be837d9f 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c | |||
@@ -83,8 +83,6 @@ static int omap2_mbox_startup(struct omap_mbox *mbox) | |||
83 | l = mbox_read_reg(MAILBOX_REVISION); | 83 | l = mbox_read_reg(MAILBOX_REVISION); |
84 | pr_debug("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f)); | 84 | pr_debug("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f)); |
85 | 85 | ||
86 | omap2_mbox_enable_irq(mbox, IRQ_RX); | ||
87 | |||
88 | return 0; | 86 | return 0; |
89 | } | 87 | } |
90 | 88 | ||
diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c index ac49384d0285..1be8bcb52e93 100644 --- a/arch/arm/mach-omap2/omap-iommu.c +++ b/arch/arm/mach-omap2/omap-iommu.c | |||
@@ -73,19 +73,17 @@ static struct iommu_device omap4_devices[] = { | |||
73 | .da_end = 0xFFFFF000, | 73 | .da_end = 0xFFFFF000, |
74 | }, | 74 | }, |
75 | }, | 75 | }, |
76 | #if defined(CONFIG_MPU_TESLA_IOMMU) | ||
77 | { | 76 | { |
78 | .base = OMAP4_MMU2_BASE, | 77 | .base = OMAP4_MMU2_BASE, |
79 | .irq = INT_44XX_DSP_MMU, | 78 | .irq = OMAP44XX_IRQ_TESLA_MMU, |
80 | .pdata = { | 79 | .pdata = { |
81 | .name = "tesla", | 80 | .name = "tesla", |
82 | .nr_tlb_entries = 32, | 81 | .nr_tlb_entries = 32, |
83 | .clk_name = "tesla_ick", | 82 | .clk_name = "dsp_fck", |
84 | .da_start = 0x0, | 83 | .da_start = 0x0, |
85 | .da_end = 0xFFFFF000, | 84 | .da_end = 0xFFFFF000, |
86 | }, | 85 | }, |
87 | }, | 86 | }, |
88 | #endif | ||
89 | }; | 87 | }; |
90 | #define NR_OMAP4_IOMMU_DEVICES ARRAY_SIZE(omap4_devices) | 88 | #define NR_OMAP4_IOMMU_DEVICES ARRAY_SIZE(omap4_devices) |
91 | static struct platform_device *omap4_iommu_pdev[NR_OMAP4_IOMMU_DEVICES]; | 89 | static struct platform_device *omap4_iommu_pdev[NR_OMAP4_IOMMU_DEVICES]; |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index b26d3c9bca16..a8653af19697 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -527,11 +527,27 @@ static struct omap_hwmod omap36xx_uart4_hwmod = { | |||
527 | 527 | ||
528 | static struct omap_hwmod_irq_info am35xx_uart4_mpu_irqs[] = { | 528 | static struct omap_hwmod_irq_info am35xx_uart4_mpu_irqs[] = { |
529 | { .irq = INT_35XX_UART4_IRQ, }, | 529 | { .irq = INT_35XX_UART4_IRQ, }, |
530 | { .irq = -1 } | ||
530 | }; | 531 | }; |
531 | 532 | ||
532 | static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = { | 533 | static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = { |
533 | { .name = "rx", .dma_req = AM35XX_DMA_UART4_RX, }, | 534 | { .name = "rx", .dma_req = AM35XX_DMA_UART4_RX, }, |
534 | { .name = "tx", .dma_req = AM35XX_DMA_UART4_TX, }, | 535 | { .name = "tx", .dma_req = AM35XX_DMA_UART4_TX, }, |
536 | { .dma_req = -1 } | ||
537 | }; | ||
538 | |||
539 | /* | ||
540 | * XXX AM35xx UART4 cannot complete its softreset without uart1_fck or | ||
541 | * uart2_fck being enabled. So we add uart1_fck as an optional clock, | ||
542 | * below, and set the HWMOD_CONTROL_OPT_CLKS_IN_RESET. This really | ||
543 | * should not be needed. The functional clock structure of the AM35xx | ||
544 | * UART4 is extremely unclear and opaque; it is unclear what the role | ||
545 | * of uart1/2_fck is for the UART4. Any clarification from either | ||
546 | * empirical testing or the AM3505/3517 hardware designers would be | ||
547 | * most welcome. | ||
548 | */ | ||
549 | static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = { | ||
550 | { .role = "softreset_uart1_fck", .clk = "uart1_fck" }, | ||
535 | }; | 551 | }; |
536 | 552 | ||
537 | static struct omap_hwmod am35xx_uart4_hwmod = { | 553 | static struct omap_hwmod am35xx_uart4_hwmod = { |
@@ -543,11 +559,14 @@ static struct omap_hwmod am35xx_uart4_hwmod = { | |||
543 | .omap2 = { | 559 | .omap2 = { |
544 | .module_offs = CORE_MOD, | 560 | .module_offs = CORE_MOD, |
545 | .prcm_reg_id = 1, | 561 | .prcm_reg_id = 1, |
546 | .module_bit = OMAP3430_EN_UART4_SHIFT, | 562 | .module_bit = AM35XX_EN_UART4_SHIFT, |
547 | .idlest_reg_id = 1, | 563 | .idlest_reg_id = 1, |
548 | .idlest_idle_bit = OMAP3430_EN_UART4_SHIFT, | 564 | .idlest_idle_bit = AM35XX_ST_UART4_SHIFT, |
549 | }, | 565 | }, |
550 | }, | 566 | }, |
567 | .opt_clks = am35xx_uart4_opt_clks, | ||
568 | .opt_clks_cnt = ARRAY_SIZE(am35xx_uart4_opt_clks), | ||
569 | .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, | ||
551 | .class = &omap2_uart_class, | 570 | .class = &omap2_uart_class, |
552 | }; | 571 | }; |
553 | 572 | ||
@@ -1638,25 +1657,20 @@ static struct omap_hwmod omap3xxx_usbhsotg_hwmod = { | |||
1638 | 1657 | ||
1639 | /* usb_otg_hs */ | 1658 | /* usb_otg_hs */ |
1640 | static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = { | 1659 | static struct omap_hwmod_irq_info am35xx_usbhsotg_mpu_irqs[] = { |
1641 | |||
1642 | { .name = "mc", .irq = 71 }, | 1660 | { .name = "mc", .irq = 71 }, |
1643 | { .irq = -1 } | 1661 | { .irq = -1 } |
1644 | }; | 1662 | }; |
1645 | 1663 | ||
1646 | static struct omap_hwmod_class am35xx_usbotg_class = { | 1664 | static struct omap_hwmod_class am35xx_usbotg_class = { |
1647 | .name = "am35xx_usbotg", | 1665 | .name = "am35xx_usbotg", |
1648 | .sysc = NULL, | ||
1649 | }; | 1666 | }; |
1650 | 1667 | ||
1651 | static struct omap_hwmod am35xx_usbhsotg_hwmod = { | 1668 | static struct omap_hwmod am35xx_usbhsotg_hwmod = { |
1652 | .name = "am35x_otg_hs", | 1669 | .name = "am35x_otg_hs", |
1653 | .mpu_irqs = am35xx_usbhsotg_mpu_irqs, | 1670 | .mpu_irqs = am35xx_usbhsotg_mpu_irqs, |
1654 | .main_clk = NULL, | 1671 | .main_clk = "hsotgusb_fck", |
1655 | .prcm = { | ||
1656 | .omap2 = { | ||
1657 | }, | ||
1658 | }, | ||
1659 | .class = &am35xx_usbotg_class, | 1672 | .class = &am35xx_usbotg_class, |
1673 | .flags = HWMOD_NO_IDLEST, | ||
1660 | }; | 1674 | }; |
1661 | 1675 | ||
1662 | /* MMC/SD/SDIO common */ | 1676 | /* MMC/SD/SDIO common */ |
@@ -2097,9 +2111,10 @@ static struct omap_hwmod_ocp_if omap3xxx_usbhsotg__l3 = { | |||
2097 | static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = { | 2111 | static struct omap_hwmod_ocp_if am35xx_usbhsotg__l3 = { |
2098 | .master = &am35xx_usbhsotg_hwmod, | 2112 | .master = &am35xx_usbhsotg_hwmod, |
2099 | .slave = &omap3xxx_l3_main_hwmod, | 2113 | .slave = &omap3xxx_l3_main_hwmod, |
2100 | .clk = "core_l3_ick", | 2114 | .clk = "hsotgusb_ick", |
2101 | .user = OCP_USER_MPU, | 2115 | .user = OCP_USER_MPU, |
2102 | }; | 2116 | }; |
2117 | |||
2103 | /* L4_CORE -> L4_WKUP interface */ | 2118 | /* L4_CORE -> L4_WKUP interface */ |
2104 | static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = { | 2119 | static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = { |
2105 | .master = &omap3xxx_l4_core_hwmod, | 2120 | .master = &omap3xxx_l4_core_hwmod, |
@@ -2243,6 +2258,7 @@ static struct omap_hwmod_addr_space am35xx_uart4_addr_space[] = { | |||
2243 | .pa_end = OMAP3_UART4_AM35XX_BASE + SZ_1K - 1, | 2258 | .pa_end = OMAP3_UART4_AM35XX_BASE + SZ_1K - 1, |
2244 | .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, | 2259 | .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT, |
2245 | }, | 2260 | }, |
2261 | { } | ||
2246 | }; | 2262 | }; |
2247 | 2263 | ||
2248 | static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = { | 2264 | static struct omap_hwmod_ocp_if am35xx_l4_core__uart4 = { |
@@ -2393,7 +2409,7 @@ static struct omap_hwmod_addr_space am35xx_usbhsotg_addrs[] = { | |||
2393 | static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = { | 2409 | static struct omap_hwmod_ocp_if am35xx_l4_core__usbhsotg = { |
2394 | .master = &omap3xxx_l4_core_hwmod, | 2410 | .master = &omap3xxx_l4_core_hwmod, |
2395 | .slave = &am35xx_usbhsotg_hwmod, | 2411 | .slave = &am35xx_usbhsotg_hwmod, |
2396 | .clk = "l4_ick", | 2412 | .clk = "hsotgusb_ick", |
2397 | .addr = am35xx_usbhsotg_addrs, | 2413 | .addr = am35xx_usbhsotg_addrs, |
2398 | .user = OCP_USER_MPU, | 2414 | .user = OCP_USER_MPU, |
2399 | }; | 2415 | }; |
@@ -3138,6 +3154,107 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__counter_32k = { | |||
3138 | .user = OCP_USER_MPU | OCP_USER_SDMA, | 3154 | .user = OCP_USER_MPU | OCP_USER_SDMA, |
3139 | }; | 3155 | }; |
3140 | 3156 | ||
3157 | /* am35xx has Davinci MDIO & EMAC */ | ||
3158 | static struct omap_hwmod_class am35xx_mdio_class = { | ||
3159 | .name = "davinci_mdio", | ||
3160 | }; | ||
3161 | |||
3162 | static struct omap_hwmod am35xx_mdio_hwmod = { | ||
3163 | .name = "davinci_mdio", | ||
3164 | .class = &am35xx_mdio_class, | ||
3165 | .flags = HWMOD_NO_IDLEST, | ||
3166 | }; | ||
3167 | |||
3168 | /* | ||
3169 | * XXX Should be connected to an IPSS hwmod, not the L3 directly; | ||
3170 | * but this will probably require some additional hwmod core support, | ||
3171 | * so is left as a future to-do item. | ||
3172 | */ | ||
3173 | static struct omap_hwmod_ocp_if am35xx_mdio__l3 = { | ||
3174 | .master = &am35xx_mdio_hwmod, | ||
3175 | .slave = &omap3xxx_l3_main_hwmod, | ||
3176 | .clk = "emac_fck", | ||
3177 | .user = OCP_USER_MPU, | ||
3178 | }; | ||
3179 | |||
3180 | static struct omap_hwmod_addr_space am35xx_mdio_addrs[] = { | ||
3181 | { | ||
3182 | .pa_start = AM35XX_IPSS_MDIO_BASE, | ||
3183 | .pa_end = AM35XX_IPSS_MDIO_BASE + SZ_4K - 1, | ||
3184 | .flags = ADDR_TYPE_RT, | ||
3185 | }, | ||
3186 | { } | ||
3187 | }; | ||
3188 | |||
3189 | /* l4_core -> davinci mdio */ | ||
3190 | /* | ||
3191 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; | ||
3192 | * but this will probably require some additional hwmod core support, | ||
3193 | * so is left as a future to-do item. | ||
3194 | */ | ||
3195 | static struct omap_hwmod_ocp_if am35xx_l4_core__mdio = { | ||
3196 | .master = &omap3xxx_l4_core_hwmod, | ||
3197 | .slave = &am35xx_mdio_hwmod, | ||
3198 | .clk = "emac_fck", | ||
3199 | .addr = am35xx_mdio_addrs, | ||
3200 | .user = OCP_USER_MPU, | ||
3201 | }; | ||
3202 | |||
3203 | static struct omap_hwmod_irq_info am35xx_emac_mpu_irqs[] = { | ||
3204 | { .name = "rxthresh", .irq = INT_35XX_EMAC_C0_RXTHRESH_IRQ }, | ||
3205 | { .name = "rx_pulse", .irq = INT_35XX_EMAC_C0_RX_PULSE_IRQ }, | ||
3206 | { .name = "tx_pulse", .irq = INT_35XX_EMAC_C0_TX_PULSE_IRQ }, | ||
3207 | { .name = "misc_pulse", .irq = INT_35XX_EMAC_C0_MISC_PULSE_IRQ }, | ||
3208 | { .irq = -1 } | ||
3209 | }; | ||
3210 | |||
3211 | static struct omap_hwmod_class am35xx_emac_class = { | ||
3212 | .name = "davinci_emac", | ||
3213 | }; | ||
3214 | |||
3215 | static struct omap_hwmod am35xx_emac_hwmod = { | ||
3216 | .name = "davinci_emac", | ||
3217 | .mpu_irqs = am35xx_emac_mpu_irqs, | ||
3218 | .class = &am35xx_emac_class, | ||
3219 | .flags = HWMOD_NO_IDLEST, | ||
3220 | }; | ||
3221 | |||
3222 | /* l3_core -> davinci emac interface */ | ||
3223 | /* | ||
3224 | * XXX Should be connected to an IPSS hwmod, not the L3 directly; | ||
3225 | * but this will probably require some additional hwmod core support, | ||
3226 | * so is left as a future to-do item. | ||
3227 | */ | ||
3228 | static struct omap_hwmod_ocp_if am35xx_emac__l3 = { | ||
3229 | .master = &am35xx_emac_hwmod, | ||
3230 | .slave = &omap3xxx_l3_main_hwmod, | ||
3231 | .clk = "emac_ick", | ||
3232 | .user = OCP_USER_MPU, | ||
3233 | }; | ||
3234 | |||
3235 | static struct omap_hwmod_addr_space am35xx_emac_addrs[] = { | ||
3236 | { | ||
3237 | .pa_start = AM35XX_IPSS_EMAC_BASE, | ||
3238 | .pa_end = AM35XX_IPSS_EMAC_BASE + 0x30000 - 1, | ||
3239 | .flags = ADDR_TYPE_RT, | ||
3240 | }, | ||
3241 | { } | ||
3242 | }; | ||
3243 | |||
3244 | /* l4_core -> davinci emac */ | ||
3245 | /* | ||
3246 | * XXX Should be connected to an IPSS hwmod, not the L4_CORE directly; | ||
3247 | * but this will probably require some additional hwmod core support, | ||
3248 | * so is left as a future to-do item. | ||
3249 | */ | ||
3250 | static struct omap_hwmod_ocp_if am35xx_l4_core__emac = { | ||
3251 | .master = &omap3xxx_l4_core_hwmod, | ||
3252 | .slave = &am35xx_emac_hwmod, | ||
3253 | .clk = "emac_ick", | ||
3254 | .addr = am35xx_emac_addrs, | ||
3255 | .user = OCP_USER_MPU, | ||
3256 | }; | ||
3257 | |||
3141 | static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = { | 3258 | static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = { |
3142 | &omap3xxx_l3_main__l4_core, | 3259 | &omap3xxx_l3_main__l4_core, |
3143 | &omap3xxx_l3_main__l4_per, | 3260 | &omap3xxx_l3_main__l4_per, |
@@ -3266,6 +3383,10 @@ static struct omap_hwmod_ocp_if *am35xx_hwmod_ocp_ifs[] __initdata = { | |||
3266 | &omap3xxx_l4_core__usb_tll_hs, | 3383 | &omap3xxx_l4_core__usb_tll_hs, |
3267 | &omap3xxx_l4_core__es3plus_mmc1, | 3384 | &omap3xxx_l4_core__es3plus_mmc1, |
3268 | &omap3xxx_l4_core__es3plus_mmc2, | 3385 | &omap3xxx_l4_core__es3plus_mmc2, |
3386 | &am35xx_mdio__l3, | ||
3387 | &am35xx_l4_core__mdio, | ||
3388 | &am35xx_emac__l3, | ||
3389 | &am35xx_l4_core__emac, | ||
3269 | NULL | 3390 | NULL |
3270 | }; | 3391 | }; |
3271 | 3392 | ||
diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c index de6d46451746..d8f6dbf45d16 100644 --- a/arch/arm/mach-omap2/opp.c +++ b/arch/arm/mach-omap2/opp.c | |||
@@ -53,7 +53,7 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, | |||
53 | omap_table_init = 1; | 53 | omap_table_init = 1; |
54 | 54 | ||
55 | /* Lets now register with OPP library */ | 55 | /* Lets now register with OPP library */ |
56 | for (i = 0; i < opp_def_size; i++) { | 56 | for (i = 0; i < opp_def_size; i++, opp_def++) { |
57 | struct omap_hwmod *oh; | 57 | struct omap_hwmod *oh; |
58 | struct device *dev; | 58 | struct device *dev; |
59 | 59 | ||
@@ -86,7 +86,6 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, | |||
86 | __func__, opp_def->freq, | 86 | __func__, opp_def->freq, |
87 | opp_def->hwmod_name, i, r); | 87 | opp_def->hwmod_name, i, r); |
88 | } | 88 | } |
89 | opp_def++; | ||
90 | } | 89 | } |
91 | 90 | ||
92 | return 0; | 91 | return 0; |
diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 78564895e914..ab04d3bba2e7 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h | |||
@@ -15,12 +15,25 @@ | |||
15 | 15 | ||
16 | #include "powerdomain.h" | 16 | #include "powerdomain.h" |
17 | 17 | ||
18 | #ifdef CONFIG_CPU_IDLE | ||
19 | extern int __init omap3_idle_init(void); | ||
20 | extern int __init omap4_idle_init(void); | ||
21 | #else | ||
22 | static inline int omap3_idle_init(void) | ||
23 | { | ||
24 | return 0; | ||
25 | } | ||
26 | |||
27 | static inline int omap4_idle_init(void) | ||
28 | { | ||
29 | return 0; | ||
30 | } | ||
31 | #endif | ||
32 | |||
18 | extern void *omap3_secure_ram_storage; | 33 | extern void *omap3_secure_ram_storage; |
19 | extern void omap3_pm_off_mode_enable(int); | 34 | extern void omap3_pm_off_mode_enable(int); |
20 | extern void omap_sram_idle(void); | 35 | extern void omap_sram_idle(void); |
21 | extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state); | 36 | extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state); |
22 | extern int omap3_idle_init(void); | ||
23 | extern int omap4_idle_init(void); | ||
24 | extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused); | 37 | extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused); |
25 | extern int (*omap_pm_suspend)(void); | 38 | extern int (*omap_pm_suspend)(void); |
26 | 39 | ||
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 3a595e899724..9b463c987508 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -581,10 +581,13 @@ static void __init prcm_setup_regs(void) | |||
581 | OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); | 581 | OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); |
582 | 582 | ||
583 | /* Don't attach IVA interrupts */ | 583 | /* Don't attach IVA interrupts */ |
584 | omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); | 584 | if (omap3_has_iva()) { |
585 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); | 585 | omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); |
586 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); | 586 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); |
587 | omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL); | 587 | omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); |
588 | omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, | ||
589 | OMAP3430_PM_IVAGRPSEL); | ||
590 | } | ||
588 | 591 | ||
589 | /* Clear any pending 'reset' flags */ | 592 | /* Clear any pending 'reset' flags */ |
590 | omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); | 593 | omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); |
@@ -598,7 +601,9 @@ static void __init prcm_setup_regs(void) | |||
598 | /* Clear any pending PRCM interrupts */ | 601 | /* Clear any pending PRCM interrupts */ |
599 | omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); | 602 | omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); |
600 | 603 | ||
601 | omap3_iva_idle(); | 604 | if (omap3_has_iva()) |
605 | omap3_iva_idle(); | ||
606 | |||
602 | omap3_d2d_idle(); | 607 | omap3_d2d_idle(); |
603 | } | 608 | } |
604 | 609 | ||
diff --git a/arch/arm/mach-omap2/powerdomains3xxx_data.c b/arch/arm/mach-omap2/powerdomains3xxx_data.c index fb0a0a6869d1..bb883e463078 100644 --- a/arch/arm/mach-omap2/powerdomains3xxx_data.c +++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c | |||
@@ -71,6 +71,22 @@ static struct powerdomain mpu_3xxx_pwrdm = { | |||
71 | .voltdm = { .name = "mpu_iva" }, | 71 | .voltdm = { .name = "mpu_iva" }, |
72 | }; | 72 | }; |
73 | 73 | ||
74 | static struct powerdomain mpu_am35x_pwrdm = { | ||
75 | .name = "mpu_pwrdm", | ||
76 | .prcm_offs = MPU_MOD, | ||
77 | .pwrsts = PWRSTS_ON, | ||
78 | .pwrsts_logic_ret = PWRSTS_ON, | ||
79 | .flags = PWRDM_HAS_MPU_QUIRK, | ||
80 | .banks = 1, | ||
81 | .pwrsts_mem_ret = { | ||
82 | [0] = PWRSTS_ON, | ||
83 | }, | ||
84 | .pwrsts_mem_on = { | ||
85 | [0] = PWRSTS_ON, | ||
86 | }, | ||
87 | .voltdm = { .name = "mpu_iva" }, | ||
88 | }; | ||
89 | |||
74 | /* | 90 | /* |
75 | * The USBTLL Save-and-Restore mechanism is broken on | 91 | * The USBTLL Save-and-Restore mechanism is broken on |
76 | * 3430s up to ES3.0 and 3630ES1.0. Hence this feature | 92 | * 3430s up to ES3.0 and 3630ES1.0. Hence this feature |
@@ -120,6 +136,23 @@ static struct powerdomain core_3xxx_es3_1_pwrdm = { | |||
120 | .voltdm = { .name = "core" }, | 136 | .voltdm = { .name = "core" }, |
121 | }; | 137 | }; |
122 | 138 | ||
139 | static struct powerdomain core_am35x_pwrdm = { | ||
140 | .name = "core_pwrdm", | ||
141 | .prcm_offs = CORE_MOD, | ||
142 | .pwrsts = PWRSTS_ON, | ||
143 | .pwrsts_logic_ret = PWRSTS_ON, | ||
144 | .banks = 2, | ||
145 | .pwrsts_mem_ret = { | ||
146 | [0] = PWRSTS_ON, /* MEM1RETSTATE */ | ||
147 | [1] = PWRSTS_ON, /* MEM2RETSTATE */ | ||
148 | }, | ||
149 | .pwrsts_mem_on = { | ||
150 | [0] = PWRSTS_ON, /* MEM1ONSTATE */ | ||
151 | [1] = PWRSTS_ON, /* MEM2ONSTATE */ | ||
152 | }, | ||
153 | .voltdm = { .name = "core" }, | ||
154 | }; | ||
155 | |||
123 | static struct powerdomain dss_pwrdm = { | 156 | static struct powerdomain dss_pwrdm = { |
124 | .name = "dss_pwrdm", | 157 | .name = "dss_pwrdm", |
125 | .prcm_offs = OMAP3430_DSS_MOD, | 158 | .prcm_offs = OMAP3430_DSS_MOD, |
@@ -135,6 +168,21 @@ static struct powerdomain dss_pwrdm = { | |||
135 | .voltdm = { .name = "core" }, | 168 | .voltdm = { .name = "core" }, |
136 | }; | 169 | }; |
137 | 170 | ||
171 | static struct powerdomain dss_am35x_pwrdm = { | ||
172 | .name = "dss_pwrdm", | ||
173 | .prcm_offs = OMAP3430_DSS_MOD, | ||
174 | .pwrsts = PWRSTS_ON, | ||
175 | .pwrsts_logic_ret = PWRSTS_ON, | ||
176 | .banks = 1, | ||
177 | .pwrsts_mem_ret = { | ||
178 | [0] = PWRSTS_ON, /* MEMRETSTATE */ | ||
179 | }, | ||
180 | .pwrsts_mem_on = { | ||
181 | [0] = PWRSTS_ON, /* MEMONSTATE */ | ||
182 | }, | ||
183 | .voltdm = { .name = "core" }, | ||
184 | }; | ||
185 | |||
138 | /* | 186 | /* |
139 | * Although the 34XX TRM Rev K Table 4-371 notes that retention is a | 187 | * Although the 34XX TRM Rev K Table 4-371 notes that retention is a |
140 | * possible SGX powerstate, the SGX device itself does not support | 188 | * possible SGX powerstate, the SGX device itself does not support |
@@ -156,6 +204,21 @@ static struct powerdomain sgx_pwrdm = { | |||
156 | .voltdm = { .name = "core" }, | 204 | .voltdm = { .name = "core" }, |
157 | }; | 205 | }; |
158 | 206 | ||
207 | static struct powerdomain sgx_am35x_pwrdm = { | ||
208 | .name = "sgx_pwrdm", | ||
209 | .prcm_offs = OMAP3430ES2_SGX_MOD, | ||
210 | .pwrsts = PWRSTS_ON, | ||
211 | .pwrsts_logic_ret = PWRSTS_ON, | ||
212 | .banks = 1, | ||
213 | .pwrsts_mem_ret = { | ||
214 | [0] = PWRSTS_ON, /* MEMRETSTATE */ | ||
215 | }, | ||
216 | .pwrsts_mem_on = { | ||
217 | [0] = PWRSTS_ON, /* MEMONSTATE */ | ||
218 | }, | ||
219 | .voltdm = { .name = "core" }, | ||
220 | }; | ||
221 | |||
159 | static struct powerdomain cam_pwrdm = { | 222 | static struct powerdomain cam_pwrdm = { |
160 | .name = "cam_pwrdm", | 223 | .name = "cam_pwrdm", |
161 | .prcm_offs = OMAP3430_CAM_MOD, | 224 | .prcm_offs = OMAP3430_CAM_MOD, |
@@ -186,6 +249,21 @@ static struct powerdomain per_pwrdm = { | |||
186 | .voltdm = { .name = "core" }, | 249 | .voltdm = { .name = "core" }, |
187 | }; | 250 | }; |
188 | 251 | ||
252 | static struct powerdomain per_am35x_pwrdm = { | ||
253 | .name = "per_pwrdm", | ||
254 | .prcm_offs = OMAP3430_PER_MOD, | ||
255 | .pwrsts = PWRSTS_ON, | ||
256 | .pwrsts_logic_ret = PWRSTS_ON, | ||
257 | .banks = 1, | ||
258 | .pwrsts_mem_ret = { | ||
259 | [0] = PWRSTS_ON, /* MEMRETSTATE */ | ||
260 | }, | ||
261 | .pwrsts_mem_on = { | ||
262 | [0] = PWRSTS_ON, /* MEMONSTATE */ | ||
263 | }, | ||
264 | .voltdm = { .name = "core" }, | ||
265 | }; | ||
266 | |||
189 | static struct powerdomain emu_pwrdm = { | 267 | static struct powerdomain emu_pwrdm = { |
190 | .name = "emu_pwrdm", | 268 | .name = "emu_pwrdm", |
191 | .prcm_offs = OMAP3430_EMU_MOD, | 269 | .prcm_offs = OMAP3430_EMU_MOD, |
@@ -200,6 +278,14 @@ static struct powerdomain neon_pwrdm = { | |||
200 | .voltdm = { .name = "mpu_iva" }, | 278 | .voltdm = { .name = "mpu_iva" }, |
201 | }; | 279 | }; |
202 | 280 | ||
281 | static struct powerdomain neon_am35x_pwrdm = { | ||
282 | .name = "neon_pwrdm", | ||
283 | .prcm_offs = OMAP3430_NEON_MOD, | ||
284 | .pwrsts = PWRSTS_ON, | ||
285 | .pwrsts_logic_ret = PWRSTS_ON, | ||
286 | .voltdm = { .name = "mpu_iva" }, | ||
287 | }; | ||
288 | |||
203 | static struct powerdomain usbhost_pwrdm = { | 289 | static struct powerdomain usbhost_pwrdm = { |
204 | .name = "usbhost_pwrdm", | 290 | .name = "usbhost_pwrdm", |
205 | .prcm_offs = OMAP3430ES2_USBHOST_MOD, | 291 | .prcm_offs = OMAP3430ES2_USBHOST_MOD, |
@@ -293,6 +379,22 @@ static struct powerdomain *powerdomains_omap3430es3_1plus[] __initdata = { | |||
293 | NULL | 379 | NULL |
294 | }; | 380 | }; |
295 | 381 | ||
382 | static struct powerdomain *powerdomains_am35x[] __initdata = { | ||
383 | &wkup_omap2_pwrdm, | ||
384 | &mpu_am35x_pwrdm, | ||
385 | &neon_am35x_pwrdm, | ||
386 | &core_am35x_pwrdm, | ||
387 | &sgx_am35x_pwrdm, | ||
388 | &dss_am35x_pwrdm, | ||
389 | &per_am35x_pwrdm, | ||
390 | &emu_pwrdm, | ||
391 | &dpll1_pwrdm, | ||
392 | &dpll3_pwrdm, | ||
393 | &dpll4_pwrdm, | ||
394 | &dpll5_pwrdm, | ||
395 | NULL | ||
396 | }; | ||
397 | |||
296 | void __init omap3xxx_powerdomains_init(void) | 398 | void __init omap3xxx_powerdomains_init(void) |
297 | { | 399 | { |
298 | unsigned int rev; | 400 | unsigned int rev; |
@@ -301,21 +403,34 @@ void __init omap3xxx_powerdomains_init(void) | |||
301 | return; | 403 | return; |
302 | 404 | ||
303 | pwrdm_register_platform_funcs(&omap3_pwrdm_operations); | 405 | pwrdm_register_platform_funcs(&omap3_pwrdm_operations); |
304 | pwrdm_register_pwrdms(powerdomains_omap3430_common); | ||
305 | 406 | ||
306 | rev = omap_rev(); | 407 | rev = omap_rev(); |
307 | 408 | ||
308 | if (rev == OMAP3430_REV_ES1_0) | 409 | if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) { |
309 | pwrdm_register_pwrdms(powerdomains_omap3430es1); | 410 | pwrdm_register_pwrdms(powerdomains_am35x); |
310 | else if (rev == OMAP3430_REV_ES2_0 || rev == OMAP3430_REV_ES2_1 || | 411 | } else { |
311 | rev == OMAP3430_REV_ES3_0 || rev == OMAP3630_REV_ES1_0) | 412 | pwrdm_register_pwrdms(powerdomains_omap3430_common); |
312 | pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0); | 413 | |
313 | else if (rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2 || | 414 | switch (rev) { |
314 | rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1 || | 415 | case OMAP3430_REV_ES1_0: |
315 | rev == OMAP3630_REV_ES1_1 || rev == OMAP3630_REV_ES1_2) | 416 | pwrdm_register_pwrdms(powerdomains_omap3430es1); |
316 | pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus); | 417 | break; |
317 | else | 418 | case OMAP3430_REV_ES2_0: |
318 | WARN(1, "OMAP3 powerdomain init: unknown chip type\n"); | 419 | case OMAP3430_REV_ES2_1: |
420 | case OMAP3430_REV_ES3_0: | ||
421 | case OMAP3630_REV_ES1_0: | ||
422 | pwrdm_register_pwrdms(powerdomains_omap3430es2_es3_0); | ||
423 | break; | ||
424 | case OMAP3430_REV_ES3_1: | ||
425 | case OMAP3430_REV_ES3_1_2: | ||
426 | case OMAP3630_REV_ES1_1: | ||
427 | case OMAP3630_REV_ES1_2: | ||
428 | pwrdm_register_pwrdms(powerdomains_omap3430es3_1plus); | ||
429 | break; | ||
430 | default: | ||
431 | WARN(1, "OMAP3 powerdomain init: unknown chip type\n"); | ||
432 | } | ||
433 | } | ||
319 | 434 | ||
320 | pwrdm_complete_init(); | 435 | pwrdm_complete_init(); |
321 | } | 436 | } |
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index 6da3ba483ad1..cc1398e8b469 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h | |||
@@ -203,8 +203,8 @@ | |||
203 | #define OMAP3430_EN_MMC2_SHIFT 25 | 203 | #define OMAP3430_EN_MMC2_SHIFT 25 |
204 | #define OMAP3430_EN_MMC1_MASK (1 << 24) | 204 | #define OMAP3430_EN_MMC1_MASK (1 << 24) |
205 | #define OMAP3430_EN_MMC1_SHIFT 24 | 205 | #define OMAP3430_EN_MMC1_SHIFT 24 |
206 | #define OMAP3430_EN_UART4_MASK (1 << 23) | 206 | #define AM35XX_EN_UART4_MASK (1 << 23) |
207 | #define OMAP3430_EN_UART4_SHIFT 23 | 207 | #define AM35XX_EN_UART4_SHIFT 23 |
208 | #define OMAP3430_EN_MCSPI4_MASK (1 << 21) | 208 | #define OMAP3430_EN_MCSPI4_MASK (1 << 21) |
209 | #define OMAP3430_EN_MCSPI4_SHIFT 21 | 209 | #define OMAP3430_EN_MCSPI4_SHIFT 21 |
210 | #define OMAP3430_EN_MCSPI3_MASK (1 << 20) | 210 | #define OMAP3430_EN_MCSPI3_MASK (1 << 20) |
diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c index dfe00ddb5c60..534d732caa1e 100644 --- a/arch/arm/mach-omap2/prm_common.c +++ b/arch/arm/mach-omap2/prm_common.c | |||
@@ -85,7 +85,7 @@ static void omap_prcm_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
85 | unsigned long priority_pending[OMAP_PRCM_MAX_NR_PENDING_REG]; | 85 | unsigned long priority_pending[OMAP_PRCM_MAX_NR_PENDING_REG]; |
86 | struct irq_chip *chip = irq_desc_get_chip(desc); | 86 | struct irq_chip *chip = irq_desc_get_chip(desc); |
87 | unsigned int virtirq; | 87 | unsigned int virtirq; |
88 | int nr_irqs = prcm_irq_setup->nr_regs * 32; | 88 | int nr_irq = prcm_irq_setup->nr_regs * 32; |
89 | 89 | ||
90 | /* | 90 | /* |
91 | * If we are suspended, mask all interrupts from PRCM level, | 91 | * If we are suspended, mask all interrupts from PRCM level, |
@@ -110,7 +110,7 @@ static void omap_prcm_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
110 | prcm_irq_setup->read_pending_irqs(pending); | 110 | prcm_irq_setup->read_pending_irqs(pending); |
111 | 111 | ||
112 | /* No bit set, then all IRQs are handled */ | 112 | /* No bit set, then all IRQs are handled */ |
113 | if (find_first_bit(pending, nr_irqs) >= nr_irqs) | 113 | if (find_first_bit(pending, nr_irq) >= nr_irq) |
114 | break; | 114 | break; |
115 | 115 | ||
116 | omap_prcm_events_filter_priority(pending, priority_pending); | 116 | omap_prcm_events_filter_priority(pending, priority_pending); |
@@ -121,11 +121,11 @@ static void omap_prcm_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
121 | */ | 121 | */ |
122 | 122 | ||
123 | /* Serve priority events first */ | 123 | /* Serve priority events first */ |
124 | for_each_set_bit(virtirq, priority_pending, nr_irqs) | 124 | for_each_set_bit(virtirq, priority_pending, nr_irq) |
125 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); | 125 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); |
126 | 126 | ||
127 | /* Serve normal events next */ | 127 | /* Serve normal events next */ |
128 | for_each_set_bit(virtirq, pending, nr_irqs) | 128 | for_each_set_bit(virtirq, pending, nr_irq) |
129 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); | 129 | generic_handle_irq(prcm_irq_setup->base_irq + virtirq); |
130 | } | 130 | } |
131 | if (chip->irq_ack) | 131 | if (chip->irq_ack) |
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index 43a979075338..3882f3c7608c 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c | |||
@@ -49,6 +49,7 @@ static struct i2c_board_info __initdata omap4_i2c1_board_info[] = { | |||
49 | }, | 49 | }, |
50 | }; | 50 | }; |
51 | 51 | ||
52 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | ||
52 | static int twl_set_voltage(void *data, int target_uV) | 53 | static int twl_set_voltage(void *data, int target_uV) |
53 | { | 54 | { |
54 | struct voltagedomain *voltdm = (struct voltagedomain *)data; | 55 | struct voltagedomain *voltdm = (struct voltagedomain *)data; |
@@ -60,6 +61,7 @@ static int twl_get_voltage(void *data) | |||
60 | struct voltagedomain *voltdm = (struct voltagedomain *)data; | 61 | struct voltagedomain *voltdm = (struct voltagedomain *)data; |
61 | return voltdm_get_voltage(voltdm); | 62 | return voltdm_get_voltage(voltdm); |
62 | } | 63 | } |
64 | #endif | ||
63 | 65 | ||
64 | void __init omap_pmic_init(int bus, u32 clkrate, | 66 | void __init omap_pmic_init(int bus, u32 clkrate, |
65 | const char *pmic_type, int pmic_irq, | 67 | const char *pmic_type, int pmic_irq, |
@@ -213,10 +215,6 @@ static struct twl_regulator_driver_data omap3_vdd2_drvdata = { | |||
213 | void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, | 215 | void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, |
214 | u32 pdata_flags, u32 regulators_flags) | 216 | u32 pdata_flags, u32 regulators_flags) |
215 | { | 217 | { |
216 | if (!pmic_data->irq_base) | ||
217 | pmic_data->irq_base = TWL4030_IRQ_BASE; | ||
218 | if (!pmic_data->irq_end) | ||
219 | pmic_data->irq_end = TWL4030_IRQ_END; | ||
220 | if (!pmic_data->vdd1) { | 218 | if (!pmic_data->vdd1) { |
221 | omap3_vdd1.driver_data = &omap3_vdd1_drvdata; | 219 | omap3_vdd1.driver_data = &omap3_vdd1_drvdata; |
222 | omap3_vdd1_drvdata.data = voltdm_lookup("mpu_iva"); | 220 | omap3_vdd1_drvdata.data = voltdm_lookup("mpu_iva"); |
@@ -481,11 +479,6 @@ static struct regulator_init_data omap4_v2v1_idata = { | |||
481 | void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, | 479 | void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data, |
482 | u32 pdata_flags, u32 regulators_flags) | 480 | u32 pdata_flags, u32 regulators_flags) |
483 | { | 481 | { |
484 | if (!pmic_data->irq_base) | ||
485 | pmic_data->irq_base = TWL6030_IRQ_BASE; | ||
486 | if (!pmic_data->irq_end) | ||
487 | pmic_data->irq_end = TWL6030_IRQ_END; | ||
488 | |||
489 | if (!pmic_data->vdd1) { | 482 | if (!pmic_data->vdd1) { |
490 | omap4_vdd1.driver_data = &omap4_vdd1_drvdata; | 483 | omap4_vdd1.driver_data = &omap4_vdd1_drvdata; |
491 | omap4_vdd1_drvdata.data = voltdm_lookup("mpu"); | 484 | omap4_vdd1_drvdata.data = voltdm_lookup("mpu"); |
diff --git a/arch/arm/mach-vt8500/Makefile b/arch/arm/mach-vt8500/Makefile index 81aedb7c893c..54e69973f39b 100644 --- a/arch/arm/mach-vt8500/Makefile +++ b/arch/arm/mach-vt8500/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | obj-y += devices.o gpio.o irq.o timer.o | 1 | obj-y += devices.o gpio.o irq.o timer.o restart.o |
2 | 2 | ||
3 | obj-$(CONFIG_VTWM_VERSION_VT8500) += devices-vt8500.o | 3 | obj-$(CONFIG_VTWM_VERSION_VT8500) += devices-vt8500.o |
4 | obj-$(CONFIG_VTWM_VERSION_WM8505) += devices-wm8505.o | 4 | obj-$(CONFIG_VTWM_VERSION_WM8505) += devices-wm8505.o |
diff --git a/arch/arm/mach-vt8500/bv07.c b/arch/arm/mach-vt8500/bv07.c index a464c7584411..f9fbeb2d10e9 100644 --- a/arch/arm/mach-vt8500/bv07.c +++ b/arch/arm/mach-vt8500/bv07.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
26 | #include <mach/restart.h> | ||
26 | 27 | ||
27 | #include "devices.h" | 28 | #include "devices.h" |
28 | 29 | ||
@@ -62,6 +63,7 @@ void __init bv07_init(void) | |||
62 | else | 63 | else |
63 | printk(KERN_ERR "PMC Hibernation register could not be remapped, not enabling power off!\n"); | 64 | printk(KERN_ERR "PMC Hibernation register could not be remapped, not enabling power off!\n"); |
64 | 65 | ||
66 | wmt_setup_restart(); | ||
65 | vt8500_set_resources(); | 67 | vt8500_set_resources(); |
66 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 68 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
67 | vt8500_gpio_init(); | 69 | vt8500_gpio_init(); |
@@ -69,6 +71,7 @@ void __init bv07_init(void) | |||
69 | 71 | ||
70 | MACHINE_START(BV07, "Benign BV07 Mini Netbook") | 72 | MACHINE_START(BV07, "Benign BV07 Mini Netbook") |
71 | .atag_offset = 0x100, | 73 | .atag_offset = 0x100, |
74 | .restart = wmt_restart, | ||
72 | .reserve = vt8500_reserve_mem, | 75 | .reserve = vt8500_reserve_mem, |
73 | .map_io = vt8500_map_io, | 76 | .map_io = vt8500_map_io, |
74 | .init_irq = vt8500_init_irq, | 77 | .init_irq = vt8500_init_irq, |
diff --git a/arch/arm/mach-vt8500/include/mach/restart.h b/arch/arm/mach-vt8500/include/mach/restart.h new file mode 100644 index 000000000000..89f9b787d2a0 --- /dev/null +++ b/arch/arm/mach-vt8500/include/mach/restart.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* linux/arch/arm/mach-vt8500/restart.h | ||
2 | * | ||
3 | * Copyright (C) 2012 Tony Prisk <linux@prisktech.co.nz> | ||
4 | * | ||
5 | * This software is licensed under the terms of the GNU General Public | ||
6 | * License version 2, as published by the Free Software Foundation, and | ||
7 | * may be copied, distributed, and modified under those terms. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | void wmt_setup_restart(void); | ||
17 | void wmt_restart(char mode, const char *cmd); | ||
diff --git a/arch/arm/mach-vt8500/include/mach/system.h b/arch/arm/mach-vt8500/include/mach/system.h deleted file mode 100644 index 58fa8010ee61..000000000000 --- a/arch/arm/mach-vt8500/include/mach/system.h +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-vt8500/include/mach/system.h | ||
3 | * | ||
4 | */ | ||
5 | #include <asm/io.h> | ||
6 | |||
7 | /* PM Software Reset request register */ | ||
8 | #define VT8500_PMSR_VIRT 0xf8130060 | ||
9 | |||
10 | static inline void arch_reset(char mode, const char *cmd) | ||
11 | { | ||
12 | writel(1, VT8500_PMSR_VIRT); | ||
13 | } | ||
diff --git a/arch/arm/mach-vt8500/restart.c b/arch/arm/mach-vt8500/restart.c new file mode 100644 index 000000000000..497e89a5e130 --- /dev/null +++ b/arch/arm/mach-vt8500/restart.c | |||
@@ -0,0 +1,54 @@ | |||
1 | /* linux/arch/arm/mach-vt8500/restart.c | ||
2 | * | ||
3 | * Copyright (C) 2012 Tony Prisk <linux@prisktech.co.nz> | ||
4 | * | ||
5 | * This software is licensed under the terms of the GNU General Public | ||
6 | * License version 2, as published by the Free Software Foundation, and | ||
7 | * may be copied, distributed, and modified under those terms. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | */ | ||
15 | #include <asm/io.h> | ||
16 | #include <linux/of.h> | ||
17 | #include <linux/of_address.h> | ||
18 | |||
19 | #define LEGACY_PMC_BASE 0xD8130000 | ||
20 | #define WMT_PRIZM_PMSR_REG 0x60 | ||
21 | |||
22 | static void __iomem *pmc_base; | ||
23 | |||
24 | void wmt_setup_restart(void) | ||
25 | { | ||
26 | struct device_node *np; | ||
27 | |||
28 | /* | ||
29 | * Check if Power Mgmt Controller node is present in device tree. If no | ||
30 | * device tree node, use the legacy PMSR value (valid for all current | ||
31 | * SoCs). | ||
32 | */ | ||
33 | np = of_find_compatible_node(NULL, NULL, "wmt,prizm-pmc"); | ||
34 | if (np) { | ||
35 | pmc_base = of_iomap(np, 0); | ||
36 | |||
37 | if (!pmc_base) | ||
38 | pr_err("%s:of_iomap(pmc) failed\n", __func__); | ||
39 | |||
40 | of_node_put(np); | ||
41 | } else { | ||
42 | pmc_base = ioremap(LEGACY_PMC_BASE, 0x1000); | ||
43 | if (!pmc_base) { | ||
44 | pr_err("%s:ioremap(rstc) failed\n", __func__); | ||
45 | return; | ||
46 | } | ||
47 | } | ||
48 | } | ||
49 | |||
50 | void wmt_restart(char mode, const char *cmd) | ||
51 | { | ||
52 | if (pmc_base) | ||
53 | writel(1, pmc_base + WMT_PRIZM_PMSR_REG); | ||
54 | } | ||
diff --git a/arch/arm/mach-vt8500/wm8505_7in.c b/arch/arm/mach-vt8500/wm8505_7in.c index cf910a956080..db19886caf7c 100644 --- a/arch/arm/mach-vt8500/wm8505_7in.c +++ b/arch/arm/mach-vt8500/wm8505_7in.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
26 | #include <mach/restart.h> | ||
26 | 27 | ||
27 | #include "devices.h" | 28 | #include "devices.h" |
28 | 29 | ||
@@ -61,7 +62,7 @@ void __init wm8505_7in_init(void) | |||
61 | pm_power_off = &vt8500_power_off; | 62 | pm_power_off = &vt8500_power_off; |
62 | else | 63 | else |
63 | printk(KERN_ERR "PMC Hibernation register could not be remapped, not enabling power off!\n"); | 64 | printk(KERN_ERR "PMC Hibernation register could not be remapped, not enabling power off!\n"); |
64 | 65 | wmt_setup_restart(); | |
65 | wm8505_set_resources(); | 66 | wm8505_set_resources(); |
66 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 67 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
67 | vt8500_gpio_init(); | 68 | vt8500_gpio_init(); |
@@ -69,6 +70,7 @@ void __init wm8505_7in_init(void) | |||
69 | 70 | ||
70 | MACHINE_START(WM8505_7IN_NETBOOK, "WM8505 7-inch generic netbook") | 71 | MACHINE_START(WM8505_7IN_NETBOOK, "WM8505 7-inch generic netbook") |
71 | .atag_offset = 0x100, | 72 | .atag_offset = 0x100, |
73 | .restart = wmt_restart, | ||
72 | .reserve = wm8505_reserve_mem, | 74 | .reserve = wm8505_reserve_mem, |
73 | .map_io = wm8505_map_io, | 75 | .map_io = wm8505_map_io, |
74 | .init_irq = wm8505_init_irq, | 76 | .init_irq = wm8505_init_irq, |
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index de6c0a08f461..430081ac0c47 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
@@ -238,9 +238,7 @@ IS_AM_SUBCLASS(335x, 0x335) | |||
238 | /* | 238 | /* |
239 | * Macros to detect individual cpu types. | 239 | * Macros to detect individual cpu types. |
240 | * These are only rarely needed. | 240 | * These are only rarely needed. |
241 | * cpu_is_omap330(): True for OMAP330 | 241 | * cpu_is_omap310(): True for OMAP310 |
242 | * cpu_is_omap730(): True for OMAP730 | ||
243 | * cpu_is_omap850(): True for OMAP850 | ||
244 | * cpu_is_omap1510(): True for OMAP1510 | 242 | * cpu_is_omap1510(): True for OMAP1510 |
245 | * cpu_is_omap1610(): True for OMAP1610 | 243 | * cpu_is_omap1610(): True for OMAP1610 |
246 | * cpu_is_omap1611(): True for OMAP1611 | 244 | * cpu_is_omap1611(): True for OMAP1611 |
@@ -262,8 +260,6 @@ static inline int is_omap ##type (void) \ | |||
262 | } | 260 | } |
263 | 261 | ||
264 | IS_OMAP_TYPE(310, 0x0310) | 262 | IS_OMAP_TYPE(310, 0x0310) |
265 | IS_OMAP_TYPE(730, 0x0730) | ||
266 | IS_OMAP_TYPE(850, 0x0850) | ||
267 | IS_OMAP_TYPE(1510, 0x1510) | 263 | IS_OMAP_TYPE(1510, 0x1510) |
268 | IS_OMAP_TYPE(1610, 0x1610) | 264 | IS_OMAP_TYPE(1610, 0x1610) |
269 | IS_OMAP_TYPE(1611, 0x1611) | 265 | IS_OMAP_TYPE(1611, 0x1611) |
@@ -277,8 +273,6 @@ IS_OMAP_TYPE(2430, 0x2430) | |||
277 | IS_OMAP_TYPE(3430, 0x3430) | 273 | IS_OMAP_TYPE(3430, 0x3430) |
278 | 274 | ||
279 | #define cpu_is_omap310() 0 | 275 | #define cpu_is_omap310() 0 |
280 | #define cpu_is_omap730() 0 | ||
281 | #define cpu_is_omap850() 0 | ||
282 | #define cpu_is_omap1510() 0 | 276 | #define cpu_is_omap1510() 0 |
283 | #define cpu_is_omap1610() 0 | 277 | #define cpu_is_omap1610() 0 |
284 | #define cpu_is_omap5912() 0 | 278 | #define cpu_is_omap5912() 0 |
@@ -294,19 +288,9 @@ IS_OMAP_TYPE(3430, 0x3430) | |||
294 | 288 | ||
295 | /* | 289 | /* |
296 | * Whether we have MULTI_OMAP1 or not, we still need to distinguish | 290 | * Whether we have MULTI_OMAP1 or not, we still need to distinguish |
297 | * between 730 vs 850, 330 vs. 1510 and 1611B/5912 vs. 1710. | 291 | * between 310 vs. 1510 and 1611B/5912 vs. 1710. |
298 | */ | 292 | */ |
299 | 293 | ||
300 | #if defined(CONFIG_ARCH_OMAP730) | ||
301 | # undef cpu_is_omap730 | ||
302 | # define cpu_is_omap730() is_omap730() | ||
303 | #endif | ||
304 | |||
305 | #if defined(CONFIG_ARCH_OMAP850) | ||
306 | # undef cpu_is_omap850 | ||
307 | # define cpu_is_omap850() is_omap850() | ||
308 | #endif | ||
309 | |||
310 | #if defined(CONFIG_ARCH_OMAP15XX) | 294 | #if defined(CONFIG_ARCH_OMAP15XX) |
311 | # undef cpu_is_omap310 | 295 | # undef cpu_is_omap310 |
312 | # undef cpu_is_omap1510 | 296 | # undef cpu_is_omap1510 |
diff --git a/arch/arm/plat-omap/include/plat/mux.h b/arch/arm/plat-omap/include/plat/mux.h index aeba71796ad9..323948959200 100644 --- a/arch/arm/plat-omap/include/plat/mux.h +++ b/arch/arm/plat-omap/include/plat/mux.h | |||
@@ -99,7 +99,7 @@ | |||
99 | 99 | ||
100 | /* | 100 | /* |
101 | * OMAP730/850 has a slightly different config for the pin mux. | 101 | * OMAP730/850 has a slightly different config for the pin mux. |
102 | * - config regs are the OMAP7XX_IO_CONF_x regs (see omap730.h) regs and | 102 | * - config regs are the OMAP7XX_IO_CONF_x regs (see omap7xx.h) regs and |
103 | * not the FUNC_MUX_CTRL_x regs from hardware.h | 103 | * not the FUNC_MUX_CTRL_x regs from hardware.h |
104 | * - for pull-up/down, only has one enable bit which is is in the same register | 104 | * - for pull-up/down, only has one enable bit which is is in the same register |
105 | * as mux config | 105 | * as mux config |
diff --git a/arch/arm/plat-omap/include/plat/omap730.h b/arch/arm/plat-omap/include/plat/omap730.h deleted file mode 100644 index 14272bc1a6fd..000000000000 --- a/arch/arm/plat-omap/include/plat/omap730.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* arch/arm/plat-omap/include/mach/omap730.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP730 processor. | ||
4 | * | ||
5 | * Cleanup for Linux-2.6 by Dirk Behme <dirk.behme@de.bosch.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP730_H | ||
29 | #define __ASM_ARCH_OMAP730_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP730_DSP_BASE 0xE0000000 | ||
40 | #define OMAP730_DSP_SIZE 0x50000 | ||
41 | #define OMAP730_DSP_START 0xE0000000 | ||
42 | |||
43 | #define OMAP730_DSPREG_BASE 0xE1000000 | ||
44 | #define OMAP730_DSPREG_SIZE SZ_128K | ||
45 | #define OMAP730_DSPREG_START 0xE1000000 | ||
46 | |||
47 | /* | ||
48 | * ---------------------------------------------------------------------------- | ||
49 | * OMAP730 specific configuration registers | ||
50 | * ---------------------------------------------------------------------------- | ||
51 | */ | ||
52 | #define OMAP730_CONFIG_BASE 0xfffe1000 | ||
53 | #define OMAP730_IO_CONF_0 0xfffe1070 | ||
54 | #define OMAP730_IO_CONF_1 0xfffe1074 | ||
55 | #define OMAP730_IO_CONF_2 0xfffe1078 | ||
56 | #define OMAP730_IO_CONF_3 0xfffe107c | ||
57 | #define OMAP730_IO_CONF_4 0xfffe1080 | ||
58 | #define OMAP730_IO_CONF_5 0xfffe1084 | ||
59 | #define OMAP730_IO_CONF_6 0xfffe1088 | ||
60 | #define OMAP730_IO_CONF_7 0xfffe108c | ||
61 | #define OMAP730_IO_CONF_8 0xfffe1090 | ||
62 | #define OMAP730_IO_CONF_9 0xfffe1094 | ||
63 | #define OMAP730_IO_CONF_10 0xfffe1098 | ||
64 | #define OMAP730_IO_CONF_11 0xfffe109c | ||
65 | #define OMAP730_IO_CONF_12 0xfffe10a0 | ||
66 | #define OMAP730_IO_CONF_13 0xfffe10a4 | ||
67 | |||
68 | #define OMAP730_MODE_1 0xfffe1010 | ||
69 | #define OMAP730_MODE_2 0xfffe1014 | ||
70 | |||
71 | /* CSMI specials: in terms of base + offset */ | ||
72 | #define OMAP730_MODE2_OFFSET 0x14 | ||
73 | |||
74 | /* | ||
75 | * ---------------------------------------------------------------------------- | ||
76 | * OMAP730 traffic controller configuration registers | ||
77 | * ---------------------------------------------------------------------------- | ||
78 | */ | ||
79 | #define OMAP730_FLASH_CFG_0 0xfffecc10 | ||
80 | #define OMAP730_FLASH_ACFG_0 0xfffecc50 | ||
81 | #define OMAP730_FLASH_CFG_1 0xfffecc14 | ||
82 | #define OMAP730_FLASH_ACFG_1 0xfffecc54 | ||
83 | |||
84 | /* | ||
85 | * ---------------------------------------------------------------------------- | ||
86 | * OMAP730 DSP control registers | ||
87 | * ---------------------------------------------------------------------------- | ||
88 | */ | ||
89 | #define OMAP730_ICR_BASE 0xfffbb800 | ||
90 | #define OMAP730_DSP_M_CTL 0xfffbb804 | ||
91 | #define OMAP730_DSP_MMU_BASE 0xfffed200 | ||
92 | |||
93 | /* | ||
94 | * ---------------------------------------------------------------------------- | ||
95 | * OMAP730 PCC_UPLD configuration registers | ||
96 | * ---------------------------------------------------------------------------- | ||
97 | */ | ||
98 | #define OMAP730_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
99 | #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00) | ||
100 | |||
101 | #endif /* __ASM_ARCH_OMAP730_H */ | ||
102 | |||
diff --git a/arch/arm/plat-omap/include/plat/omap850.h b/arch/arm/plat-omap/include/plat/omap850.h deleted file mode 100644 index c33f67981712..000000000000 --- a/arch/arm/plat-omap/include/plat/omap850.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* arch/arm/plat-omap/include/mach/omap850.h | ||
2 | * | ||
3 | * Hardware definitions for TI OMAP850 processor. | ||
4 | * | ||
5 | * Derived from omap730.h by Zebediah C. McClure <zmc@lurian.net> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | * | ||
12 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
13 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
14 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
15 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
16 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
17 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
18 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
19 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
20 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
21 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
22 | * | ||
23 | * You should have received a copy of the GNU General Public License along | ||
24 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
25 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
26 | */ | ||
27 | |||
28 | #ifndef __ASM_ARCH_OMAP850_H | ||
29 | #define __ASM_ARCH_OMAP850_H | ||
30 | |||
31 | /* | ||
32 | * ---------------------------------------------------------------------------- | ||
33 | * Base addresses | ||
34 | * ---------------------------------------------------------------------------- | ||
35 | */ | ||
36 | |||
37 | /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */ | ||
38 | |||
39 | #define OMAP850_DSP_BASE 0xE0000000 | ||
40 | #define OMAP850_DSP_SIZE 0x50000 | ||
41 | #define OMAP850_DSP_START 0xE0000000 | ||
42 | |||
43 | #define OMAP850_DSPREG_BASE 0xE1000000 | ||
44 | #define OMAP850_DSPREG_SIZE SZ_128K | ||
45 | #define OMAP850_DSPREG_START 0xE1000000 | ||
46 | |||
47 | /* | ||
48 | * ---------------------------------------------------------------------------- | ||
49 | * OMAP850 specific configuration registers | ||
50 | * ---------------------------------------------------------------------------- | ||
51 | */ | ||
52 | #define OMAP850_CONFIG_BASE 0xfffe1000 | ||
53 | #define OMAP850_IO_CONF_0 0xfffe1070 | ||
54 | #define OMAP850_IO_CONF_1 0xfffe1074 | ||
55 | #define OMAP850_IO_CONF_2 0xfffe1078 | ||
56 | #define OMAP850_IO_CONF_3 0xfffe107c | ||
57 | #define OMAP850_IO_CONF_4 0xfffe1080 | ||
58 | #define OMAP850_IO_CONF_5 0xfffe1084 | ||
59 | #define OMAP850_IO_CONF_6 0xfffe1088 | ||
60 | #define OMAP850_IO_CONF_7 0xfffe108c | ||
61 | #define OMAP850_IO_CONF_8 0xfffe1090 | ||
62 | #define OMAP850_IO_CONF_9 0xfffe1094 | ||
63 | #define OMAP850_IO_CONF_10 0xfffe1098 | ||
64 | #define OMAP850_IO_CONF_11 0xfffe109c | ||
65 | #define OMAP850_IO_CONF_12 0xfffe10a0 | ||
66 | #define OMAP850_IO_CONF_13 0xfffe10a4 | ||
67 | |||
68 | #define OMAP850_MODE_1 0xfffe1010 | ||
69 | #define OMAP850_MODE_2 0xfffe1014 | ||
70 | |||
71 | /* CSMI specials: in terms of base + offset */ | ||
72 | #define OMAP850_MODE2_OFFSET 0x14 | ||
73 | |||
74 | /* | ||
75 | * ---------------------------------------------------------------------------- | ||
76 | * OMAP850 traffic controller configuration registers | ||
77 | * ---------------------------------------------------------------------------- | ||
78 | */ | ||
79 | #define OMAP850_FLASH_CFG_0 0xfffecc10 | ||
80 | #define OMAP850_FLASH_ACFG_0 0xfffecc50 | ||
81 | #define OMAP850_FLASH_CFG_1 0xfffecc14 | ||
82 | #define OMAP850_FLASH_ACFG_1 0xfffecc54 | ||
83 | |||
84 | /* | ||
85 | * ---------------------------------------------------------------------------- | ||
86 | * OMAP850 DSP control registers | ||
87 | * ---------------------------------------------------------------------------- | ||
88 | */ | ||
89 | #define OMAP850_ICR_BASE 0xfffbb800 | ||
90 | #define OMAP850_DSP_M_CTL 0xfffbb804 | ||
91 | #define OMAP850_DSP_MMU_BASE 0xfffed200 | ||
92 | |||
93 | /* | ||
94 | * ---------------------------------------------------------------------------- | ||
95 | * OMAP850 PCC_UPLD configuration registers | ||
96 | * ---------------------------------------------------------------------------- | ||
97 | */ | ||
98 | #define OMAP850_PCC_UPLD_CTRL_BASE (0xfffe0900) | ||
99 | #define OMAP850_PCC_UPLD_CTRL (OMAP850_PCC_UPLD_CTRL_BASE + 0x00) | ||
100 | |||
101 | #endif /* __ASM_ARCH_OMAP850_H */ | ||
102 | |||
diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c index ad32621aa52e..5e13c3884aa4 100644 --- a/arch/arm/plat-omap/mailbox.c +++ b/arch/arm/plat-omap/mailbox.c | |||
@@ -282,6 +282,8 @@ static int omap_mbox_startup(struct omap_mbox *mbox) | |||
282 | } | 282 | } |
283 | mbox->rxq = mq; | 283 | mbox->rxq = mq; |
284 | mq->mbox = mbox; | 284 | mq->mbox = mbox; |
285 | |||
286 | omap_mbox_enable_irq(mbox, IRQ_RX); | ||
285 | } | 287 | } |
286 | mutex_unlock(&mbox_configured_lock); | 288 | mutex_unlock(&mbox_configured_lock); |
287 | return 0; | 289 | return 0; |
@@ -305,6 +307,7 @@ static void omap_mbox_fini(struct omap_mbox *mbox) | |||
305 | mutex_lock(&mbox_configured_lock); | 307 | mutex_lock(&mbox_configured_lock); |
306 | 308 | ||
307 | if (!--mbox->use_count) { | 309 | if (!--mbox->use_count) { |
310 | omap_mbox_disable_irq(mbox, IRQ_RX); | ||
308 | free_irq(mbox->irq, mbox); | 311 | free_irq(mbox->irq, mbox); |
309 | tasklet_kill(&mbox->txq->tasklet); | 312 | tasklet_kill(&mbox->txq->tasklet); |
310 | flush_work_sync(&mbox->rxq->work); | 313 | flush_work_sync(&mbox->rxq->work); |
@@ -338,13 +341,15 @@ struct omap_mbox *omap_mbox_get(const char *name, struct notifier_block *nb) | |||
338 | if (!mbox) | 341 | if (!mbox) |
339 | return ERR_PTR(-ENOENT); | 342 | return ERR_PTR(-ENOENT); |
340 | 343 | ||
341 | ret = omap_mbox_startup(mbox); | ||
342 | if (ret) | ||
343 | return ERR_PTR(-ENODEV); | ||
344 | |||
345 | if (nb) | 344 | if (nb) |
346 | blocking_notifier_chain_register(&mbox->notifier, nb); | 345 | blocking_notifier_chain_register(&mbox->notifier, nb); |
347 | 346 | ||
347 | ret = omap_mbox_startup(mbox); | ||
348 | if (ret) { | ||
349 | blocking_notifier_chain_unregister(&mbox->notifier, nb); | ||
350 | return ERR_PTR(-ENODEV); | ||
351 | } | ||
352 | |||
348 | return mbox; | 353 | return mbox; |
349 | } | 354 | } |
350 | EXPORT_SYMBOL(omap_mbox_get); | 355 | EXPORT_SYMBOL(omap_mbox_get); |
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h index 3993477103a5..555382660bc4 100644 --- a/include/linux/i2c/twl.h +++ b/include/linux/i2c/twl.h | |||
@@ -683,7 +683,6 @@ struct twl4030_audio_data { | |||
683 | }; | 683 | }; |
684 | 684 | ||
685 | struct twl4030_platform_data { | 685 | struct twl4030_platform_data { |
686 | unsigned irq_base, irq_end; | ||
687 | struct twl4030_clock_init_data *clock; | 686 | struct twl4030_clock_init_data *clock; |
688 | struct twl4030_bci_platform_data *bci; | 687 | struct twl4030_bci_platform_data *bci; |
689 | struct twl4030_gpio_platform_data *gpio; | 688 | struct twl4030_gpio_platform_data *gpio; |