diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 17:38:51 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-09 17:38:51 -0500 |
commit | 5ede3ceb7b2c2843e153a1803edbdc8c56655950 (patch) | |
tree | 4cfa82b619f7d39b671e4a2a213f4d040b09c486 /arch/arm/mach-mv78xx0 | |
parent | 6d889d03ab1417645e76e129834f76204bae37c0 (diff) | |
parent | 3e2762c8f1141ae8dc708034ea41d6827818c328 (diff) |
Merge tag 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
New feature development
This adds support for new features, and contains stuff from most
platforms. A number of these patches could have fit into other
branches, too, but were small enough not to cause too much
confusion here.
* tag 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (28 commits)
mfd/db8500-prcmu: remove support for early silicon revisions
ARM: ux500: fix the smp_twd clock calculation
ARM: ux500: remove support for early silicon revisions
ARM: ux500: update register files
ARM: ux500: register DB5500 PMU dynamically
ARM: ux500: update ASIC detection for U5500
ARM: ux500: support DB8520
ARM: picoxcell: implement watchdog restart
ARM: OMAP3+: hwmod data: Add the default clockactivity for I2C
ARM: OMAP3: hwmod data: disable multiblock reads on MMC1/2 on OMAP34xx/35xx <= ES2.1
ARM: OMAP: USB: EHCI and OHCI hwmod structures for OMAP4
ARM: OMAP: USB: EHCI and OHCI hwmod structures for OMAP3
ARM: OMAP: hwmod data: Add support for AM35xx UART4/ttyO3
ARM: Orion: Remove address map info from all platform data structures
ARM: Orion: Get address map from plat-orion instead of via platform_data
ARM: Orion: mbus_dram_info consolidation
ARM: Orion: Consolidate the address map setup
ARM: Kirkwood: Add configuration for MPP12 as GPIO
ARM: Kirkwood: Recognize A1 revision of 6282 chip
ARM: ux500: update the MOP500 GPIO assignments
...
Diffstat (limited to 'arch/arm/mach-mv78xx0')
-rw-r--r-- | arch/arm/mach-mv78xx0/addr-map.c | 102 | ||||
-rw-r--r-- | arch/arm/mach-mv78xx0/common.c | 22 | ||||
-rw-r--r-- | arch/arm/mach-mv78xx0/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-mv78xx0/mpp.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-mv78xx0/pcie.c | 4 |
5 files changed, 30 insertions, 100 deletions
diff --git a/arch/arm/mach-mv78xx0/addr-map.c b/arch/arm/mach-mv78xx0/addr-map.c index 311d5b0e9bc7..62b53d710efd 100644 --- a/arch/arm/mach-mv78xx0/addr-map.c +++ b/arch/arm/mach-mv78xx0/addr-map.c | |||
@@ -12,12 +12,12 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/mbus.h> | 13 | #include <linux/mbus.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <plat/addr-map.h> | ||
15 | #include "common.h" | 16 | #include "common.h" |
16 | 17 | ||
17 | /* | 18 | /* |
18 | * Generic Address Decode Windows bit settings | 19 | * Generic Address Decode Windows bit settings |
19 | */ | 20 | */ |
20 | #define TARGET_DDR 0 | ||
21 | #define TARGET_DEV_BUS 1 | 21 | #define TARGET_DEV_BUS 1 |
22 | #define TARGET_PCIE0 4 | 22 | #define TARGET_PCIE0 4 |
23 | #define TARGET_PCIE1 8 | 23 | #define TARGET_PCIE1 8 |
@@ -32,23 +32,10 @@ | |||
32 | #define ATTR_PCIE_MEM(l) (0xf8 & ~(0x10 << (l))) | 32 | #define ATTR_PCIE_MEM(l) (0xf8 & ~(0x10 << (l))) |
33 | 33 | ||
34 | /* | 34 | /* |
35 | * Helpers to get DDR bank info | ||
36 | */ | ||
37 | #define DDR_BASE_CS_OFF(n) (0x0000 + ((n) << 3)) | ||
38 | #define DDR_SIZE_CS_OFF(n) (0x0004 + ((n) << 3)) | ||
39 | |||
40 | /* | ||
41 | * CPU Address Decode Windows registers | 35 | * CPU Address Decode Windows registers |
42 | */ | 36 | */ |
43 | #define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4)) | 37 | #define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4)) |
44 | #define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4)) | 38 | #define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4)) |
45 | #define WIN_CTRL_OFF 0x0000 | ||
46 | #define WIN_BASE_OFF 0x0004 | ||
47 | #define WIN_REMAP_LO_OFF 0x0008 | ||
48 | #define WIN_REMAP_HI_OFF 0x000c | ||
49 | |||
50 | |||
51 | struct mbus_dram_target_info mv78xx0_mbus_dram_info; | ||
52 | 39 | ||
53 | static void __init __iomem *win_cfg_base(int win) | 40 | static void __init __iomem *win_cfg_base(int win) |
54 | { | 41 | { |
@@ -63,94 +50,43 @@ static void __init __iomem *win_cfg_base(int win) | |||
63 | return (void __iomem *)((win < 8) ? WIN0_OFF(win) : WIN8_OFF(win)); | 50 | return (void __iomem *)((win < 8) ? WIN0_OFF(win) : WIN8_OFF(win)); |
64 | } | 51 | } |
65 | 52 | ||
66 | static int __init cpu_win_can_remap(int win) | 53 | /* |
67 | { | 54 | * Description of the windows needed by the platform code |
68 | if (win < 8) | 55 | */ |
69 | return 1; | 56 | static struct __initdata orion_addr_map_cfg addr_map_cfg = { |
70 | 57 | .num_wins = 14, | |
71 | return 0; | 58 | .remappable_wins = 8, |
72 | } | 59 | .win_cfg_base = win_cfg_base, |
73 | 60 | }; | |
74 | static void __init setup_cpu_win(int win, u32 base, u32 size, | ||
75 | u8 target, u8 attr, int remap) | ||
76 | { | ||
77 | void __iomem *addr = win_cfg_base(win); | ||
78 | u32 ctrl; | ||
79 | |||
80 | base &= 0xffff0000; | ||
81 | ctrl = ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1; | ||
82 | |||
83 | writel(base, addr + WIN_BASE_OFF); | ||
84 | writel(ctrl, addr + WIN_CTRL_OFF); | ||
85 | if (cpu_win_can_remap(win)) { | ||
86 | if (remap < 0) | ||
87 | remap = base; | ||
88 | |||
89 | writel(remap & 0xffff0000, addr + WIN_REMAP_LO_OFF); | ||
90 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
91 | } | ||
92 | } | ||
93 | 61 | ||
94 | void __init mv78xx0_setup_cpu_mbus(void) | 62 | void __init mv78xx0_setup_cpu_mbus(void) |
95 | { | 63 | { |
96 | void __iomem *addr; | ||
97 | int i; | ||
98 | int cs; | ||
99 | |||
100 | /* | 64 | /* |
101 | * First, disable and clear windows. | 65 | * Disable, clear and configure windows. |
102 | */ | 66 | */ |
103 | for (i = 0; i < 14; i++) { | 67 | orion_config_wins(&addr_map_cfg, NULL); |
104 | addr = win_cfg_base(i); | ||
105 | |||
106 | writel(0, addr + WIN_BASE_OFF); | ||
107 | writel(0, addr + WIN_CTRL_OFF); | ||
108 | if (cpu_win_can_remap(i)) { | ||
109 | writel(0, addr + WIN_REMAP_LO_OFF); | ||
110 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
111 | } | ||
112 | } | ||
113 | 68 | ||
114 | /* | 69 | /* |
115 | * Setup MBUS dram target info. | 70 | * Setup MBUS dram target info. |
116 | */ | 71 | */ |
117 | mv78xx0_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | ||
118 | |||
119 | if (mv78xx0_core_index() == 0) | 72 | if (mv78xx0_core_index() == 0) |
120 | addr = (void __iomem *)DDR_WINDOW_CPU0_BASE; | 73 | orion_setup_cpu_mbus_target(&addr_map_cfg, |
74 | DDR_WINDOW_CPU0_BASE); | ||
121 | else | 75 | else |
122 | addr = (void __iomem *)DDR_WINDOW_CPU1_BASE; | 76 | orion_setup_cpu_mbus_target(&addr_map_cfg, |
123 | 77 | DDR_WINDOW_CPU1_BASE); | |
124 | for (i = 0, cs = 0; i < 4; i++) { | ||
125 | u32 base = readl(addr + DDR_BASE_CS_OFF(i)); | ||
126 | u32 size = readl(addr + DDR_SIZE_CS_OFF(i)); | ||
127 | |||
128 | /* | ||
129 | * Chip select enabled? | ||
130 | */ | ||
131 | if (size & 1) { | ||
132 | struct mbus_dram_window *w; | ||
133 | |||
134 | w = &mv78xx0_mbus_dram_info.cs[cs++]; | ||
135 | w->cs_index = i; | ||
136 | w->mbus_attr = 0xf & ~(1 << i); | ||
137 | w->base = base & 0xffff0000; | ||
138 | w->size = (size | 0x0000ffff) + 1; | ||
139 | } | ||
140 | } | ||
141 | mv78xx0_mbus_dram_info.num_cs = cs; | ||
142 | } | 78 | } |
143 | 79 | ||
144 | void __init mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, | 80 | void __init mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, |
145 | int maj, int min) | 81 | int maj, int min) |
146 | { | 82 | { |
147 | setup_cpu_win(window, base, size, TARGET_PCIE(maj), | 83 | orion_setup_cpu_win(&addr_map_cfg, window, base, size, |
148 | ATTR_PCIE_IO(min), -1); | 84 | TARGET_PCIE(maj), ATTR_PCIE_IO(min), -1); |
149 | } | 85 | } |
150 | 86 | ||
151 | void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, | 87 | void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, |
152 | int maj, int min) | 88 | int maj, int min) |
153 | { | 89 | { |
154 | setup_cpu_win(window, base, size, TARGET_PCIE(maj), | 90 | orion_setup_cpu_win(&addr_map_cfg, window, base, size, |
155 | ATTR_PCIE_MEM(min), -1); | 91 | TARGET_PCIE(maj), ATTR_PCIE_MEM(min), -1); |
156 | } | 92 | } |
diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c index 5b9632b01169..0cdd41004ad0 100644 --- a/arch/arm/mach-mv78xx0/common.c +++ b/arch/arm/mach-mv78xx0/common.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/serial_8250.h> | 14 | #include <linux/serial_8250.h> |
15 | #include <linux/mbus.h> | ||
16 | #include <linux/ata_platform.h> | 15 | #include <linux/ata_platform.h> |
17 | #include <linux/ethtool.h> | 16 | #include <linux/ethtool.h> |
18 | #include <asm/mach/map.h> | 17 | #include <asm/mach/map.h> |
@@ -23,6 +22,7 @@ | |||
23 | #include <plat/orion_nand.h> | 22 | #include <plat/orion_nand.h> |
24 | #include <plat/time.h> | 23 | #include <plat/time.h> |
25 | #include <plat/common.h> | 24 | #include <plat/common.h> |
25 | #include <plat/addr-map.h> | ||
26 | #include "common.h" | 26 | #include "common.h" |
27 | 27 | ||
28 | static int get_tclk(void); | 28 | static int get_tclk(void); |
@@ -169,8 +169,7 @@ void __init mv78xx0_map_io(void) | |||
169 | ****************************************************************************/ | 169 | ****************************************************************************/ |
170 | void __init mv78xx0_ehci0_init(void) | 170 | void __init mv78xx0_ehci0_init(void) |
171 | { | 171 | { |
172 | orion_ehci_init(&mv78xx0_mbus_dram_info, | 172 | orion_ehci_init(USB0_PHYS_BASE, IRQ_MV78XX0_USB_0); |
173 | USB0_PHYS_BASE, IRQ_MV78XX0_USB_0); | ||
174 | } | 173 | } |
175 | 174 | ||
176 | 175 | ||
@@ -179,8 +178,7 @@ void __init mv78xx0_ehci0_init(void) | |||
179 | ****************************************************************************/ | 178 | ****************************************************************************/ |
180 | void __init mv78xx0_ehci1_init(void) | 179 | void __init mv78xx0_ehci1_init(void) |
181 | { | 180 | { |
182 | orion_ehci_1_init(&mv78xx0_mbus_dram_info, | 181 | orion_ehci_1_init(USB1_PHYS_BASE, IRQ_MV78XX0_USB_1); |
183 | USB1_PHYS_BASE, IRQ_MV78XX0_USB_1); | ||
184 | } | 182 | } |
185 | 183 | ||
186 | 184 | ||
@@ -189,8 +187,7 @@ void __init mv78xx0_ehci1_init(void) | |||
189 | ****************************************************************************/ | 187 | ****************************************************************************/ |
190 | void __init mv78xx0_ehci2_init(void) | 188 | void __init mv78xx0_ehci2_init(void) |
191 | { | 189 | { |
192 | orion_ehci_2_init(&mv78xx0_mbus_dram_info, | 190 | orion_ehci_2_init(USB2_PHYS_BASE, IRQ_MV78XX0_USB_2); |
193 | USB2_PHYS_BASE, IRQ_MV78XX0_USB_2); | ||
194 | } | 191 | } |
195 | 192 | ||
196 | 193 | ||
@@ -199,7 +196,7 @@ void __init mv78xx0_ehci2_init(void) | |||
199 | ****************************************************************************/ | 196 | ****************************************************************************/ |
200 | void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) | 197 | void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) |
201 | { | 198 | { |
202 | orion_ge00_init(eth_data, &mv78xx0_mbus_dram_info, | 199 | orion_ge00_init(eth_data, |
203 | GE00_PHYS_BASE, IRQ_MV78XX0_GE00_SUM, | 200 | GE00_PHYS_BASE, IRQ_MV78XX0_GE00_SUM, |
204 | IRQ_MV78XX0_GE_ERR, get_tclk()); | 201 | IRQ_MV78XX0_GE_ERR, get_tclk()); |
205 | } | 202 | } |
@@ -210,7 +207,7 @@ void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) | |||
210 | ****************************************************************************/ | 207 | ****************************************************************************/ |
211 | void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) | 208 | void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) |
212 | { | 209 | { |
213 | orion_ge01_init(eth_data, &mv78xx0_mbus_dram_info, | 210 | orion_ge01_init(eth_data, |
214 | GE01_PHYS_BASE, IRQ_MV78XX0_GE01_SUM, | 211 | GE01_PHYS_BASE, IRQ_MV78XX0_GE01_SUM, |
215 | NO_IRQ, get_tclk()); | 212 | NO_IRQ, get_tclk()); |
216 | } | 213 | } |
@@ -234,7 +231,7 @@ void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) | |||
234 | eth_data->duplex = DUPLEX_FULL; | 231 | eth_data->duplex = DUPLEX_FULL; |
235 | } | 232 | } |
236 | 233 | ||
237 | orion_ge10_init(eth_data, &mv78xx0_mbus_dram_info, | 234 | orion_ge10_init(eth_data, |
238 | GE10_PHYS_BASE, IRQ_MV78XX0_GE10_SUM, | 235 | GE10_PHYS_BASE, IRQ_MV78XX0_GE10_SUM, |
239 | NO_IRQ, get_tclk()); | 236 | NO_IRQ, get_tclk()); |
240 | } | 237 | } |
@@ -258,7 +255,7 @@ void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) | |||
258 | eth_data->duplex = DUPLEX_FULL; | 255 | eth_data->duplex = DUPLEX_FULL; |
259 | } | 256 | } |
260 | 257 | ||
261 | orion_ge11_init(eth_data, &mv78xx0_mbus_dram_info, | 258 | orion_ge11_init(eth_data, |
262 | GE11_PHYS_BASE, IRQ_MV78XX0_GE11_SUM, | 259 | GE11_PHYS_BASE, IRQ_MV78XX0_GE11_SUM, |
263 | NO_IRQ, get_tclk()); | 260 | NO_IRQ, get_tclk()); |
264 | } | 261 | } |
@@ -277,8 +274,7 @@ void __init mv78xx0_i2c_init(void) | |||
277 | ****************************************************************************/ | 274 | ****************************************************************************/ |
278 | void __init mv78xx0_sata_init(struct mv_sata_platform_data *sata_data) | 275 | void __init mv78xx0_sata_init(struct mv_sata_platform_data *sata_data) |
279 | { | 276 | { |
280 | orion_sata_init(sata_data, &mv78xx0_mbus_dram_info, | 277 | orion_sata_init(sata_data, SATA_PHYS_BASE, IRQ_MV78XX0_SATA); |
281 | SATA_PHYS_BASE, IRQ_MV78XX0_SATA); | ||
282 | } | 278 | } |
283 | 279 | ||
284 | 280 | ||
diff --git a/arch/arm/mach-mv78xx0/common.h b/arch/arm/mach-mv78xx0/common.h index 07d5f8f6be7d..507c767d49e0 100644 --- a/arch/arm/mach-mv78xx0/common.h +++ b/arch/arm/mach-mv78xx0/common.h | |||
@@ -23,7 +23,6 @@ void mv78xx0_init(void); | |||
23 | void mv78xx0_init_early(void); | 23 | void mv78xx0_init_early(void); |
24 | void mv78xx0_init_irq(void); | 24 | void mv78xx0_init_irq(void); |
25 | 25 | ||
26 | extern struct mbus_dram_target_info mv78xx0_mbus_dram_info; | ||
27 | void mv78xx0_setup_cpu_mbus(void); | 26 | void mv78xx0_setup_cpu_mbus(void); |
28 | void mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, | 27 | void mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, |
29 | int maj, int min); | 28 | int maj, int min); |
diff --git a/arch/arm/mach-mv78xx0/mpp.c b/arch/arm/mach-mv78xx0/mpp.c index cf4e494d44bf..df50342179e2 100644 --- a/arch/arm/mach-mv78xx0/mpp.c +++ b/arch/arm/mach-mv78xx0/mpp.c | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <linux/gpio.h> | 10 | #include <linux/gpio.h> |
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/mbus.h> | ||
14 | #include <linux/io.h> | 13 | #include <linux/io.h> |
15 | #include <plat/mpp.h> | 14 | #include <plat/mpp.h> |
16 | #include <mach/hardware.h> | 15 | #include <mach/hardware.h> |
diff --git a/arch/arm/mach-mv78xx0/pcie.c b/arch/arm/mach-mv78xx0/pcie.c index c51af1cac300..12fcb108b0e1 100644 --- a/arch/arm/mach-mv78xx0/pcie.c +++ b/arch/arm/mach-mv78xx0/pcie.c | |||
@@ -10,11 +10,11 @@ | |||
10 | 10 | ||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/pci.h> | 12 | #include <linux/pci.h> |
13 | #include <linux/mbus.h> | ||
14 | #include <video/vga.h> | 13 | #include <video/vga.h> |
15 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
16 | #include <asm/mach/pci.h> | 15 | #include <asm/mach/pci.h> |
17 | #include <plat/pcie.h> | 16 | #include <plat/pcie.h> |
17 | #include <plat/addr-map.h> | ||
18 | #include "common.h" | 18 | #include "common.h" |
19 | 19 | ||
20 | struct pcie_port { | 20 | struct pcie_port { |
@@ -153,7 +153,7 @@ static int __init mv78xx0_pcie_setup(int nr, struct pci_sys_data *sys) | |||
153 | * Generic PCIe unit setup. | 153 | * Generic PCIe unit setup. |
154 | */ | 154 | */ |
155 | orion_pcie_set_local_bus_nr(pp->base, sys->busnr); | 155 | orion_pcie_set_local_bus_nr(pp->base, sys->busnr); |
156 | orion_pcie_setup(pp->base, &mv78xx0_mbus_dram_info); | 156 | orion_pcie_setup(pp->base); |
157 | 157 | ||
158 | sys->resource[0] = &pp->res[0]; | 158 | sys->resource[0] = &pp->res[0]; |
159 | sys->resource[1] = &pp->res[1]; | 159 | sys->resource[1] = &pp->res[1]; |