diff options
58 files changed, 173 insertions, 71 deletions
diff --git a/arch/arm/mach-dove/cm-a510.c b/arch/arm/mach-dove/cm-a510.c index 96e0e94e5fa9..03e11f9dca97 100644 --- a/arch/arm/mach-dove/cm-a510.c +++ b/arch/arm/mach-dove/cm-a510.c | |||
@@ -90,6 +90,7 @@ MACHINE_START(CM_A510, "Compulab CM-A510 Board") | |||
90 | .boot_params = 0x00000100, | 90 | .boot_params = 0x00000100, |
91 | .init_machine = cm_a510_init, | 91 | .init_machine = cm_a510_init, |
92 | .map_io = dove_map_io, | 92 | .map_io = dove_map_io, |
93 | .init_early = dove_init_early, | ||
93 | .init_irq = dove_init_irq, | 94 | .init_irq = dove_init_irq, |
94 | .timer = &dove_timer, | 95 | .timer = &dove_timer, |
95 | MACHINE_END | 96 | MACHINE_END |
diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c index fe627aba6da7..e06a88f1f81d 100644 --- a/arch/arm/mach-dove/common.c +++ b/arch/arm/mach-dove/common.c | |||
@@ -532,6 +532,11 @@ void __init dove_i2c_init(void) | |||
532 | /***************************************************************************** | 532 | /***************************************************************************** |
533 | * Time handling | 533 | * Time handling |
534 | ****************************************************************************/ | 534 | ****************************************************************************/ |
535 | void __init dove_init_early(void) | ||
536 | { | ||
537 | orion_time_set_base(TIMER_VIRT_BASE); | ||
538 | } | ||
539 | |||
535 | static int get_tclk(void) | 540 | static int get_tclk(void) |
536 | { | 541 | { |
537 | /* use DOVE_RESET_SAMPLE_HI/LO to detect tclk */ | 542 | /* use DOVE_RESET_SAMPLE_HI/LO to detect tclk */ |
@@ -540,7 +545,8 @@ static int get_tclk(void) | |||
540 | 545 | ||
541 | static void dove_timer_init(void) | 546 | static void dove_timer_init(void) |
542 | { | 547 | { |
543 | orion_time_init(IRQ_DOVE_BRIDGE, get_tclk()); | 548 | orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR, |
549 | IRQ_DOVE_BRIDGE, get_tclk()); | ||
544 | } | 550 | } |
545 | 551 | ||
546 | struct sys_timer dove_timer = { | 552 | struct sys_timer dove_timer = { |
diff --git a/arch/arm/mach-dove/common.h b/arch/arm/mach-dove/common.h index a51517c3fe76..6a2046e44706 100644 --- a/arch/arm/mach-dove/common.h +++ b/arch/arm/mach-dove/common.h | |||
@@ -22,6 +22,7 @@ extern struct mbus_dram_target_info dove_mbus_dram_info; | |||
22 | */ | 22 | */ |
23 | void dove_map_io(void); | 23 | void dove_map_io(void); |
24 | void dove_init(void); | 24 | void dove_init(void); |
25 | void dove_init_early(void); | ||
25 | void dove_init_irq(void); | 26 | void dove_init_irq(void); |
26 | void dove_setup_cpu_mbus(void); | 27 | void dove_setup_cpu_mbus(void); |
27 | void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data); | 28 | void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data); |
diff --git a/arch/arm/mach-dove/dove-db-setup.c b/arch/arm/mach-dove/dove-db-setup.c index 95925aa76dd9..2ac34ecfa745 100644 --- a/arch/arm/mach-dove/dove-db-setup.c +++ b/arch/arm/mach-dove/dove-db-setup.c | |||
@@ -97,6 +97,7 @@ MACHINE_START(DOVE_DB, "Marvell DB-MV88AP510-BP Development Board") | |||
97 | .boot_params = 0x00000100, | 97 | .boot_params = 0x00000100, |
98 | .init_machine = dove_db_init, | 98 | .init_machine = dove_db_init, |
99 | .map_io = dove_map_io, | 99 | .map_io = dove_map_io, |
100 | .init_early = dove_init_early, | ||
100 | .init_irq = dove_init_irq, | 101 | .init_irq = dove_init_irq, |
101 | .timer = &dove_timer, | 102 | .timer = &dove_timer, |
102 | MACHINE_END | 103 | MACHINE_END |
diff --git a/arch/arm/mach-dove/include/mach/bridge-regs.h b/arch/arm/mach-dove/include/mach/bridge-regs.h index 214a4c31f069..226949dc4ac0 100644 --- a/arch/arm/mach-dove/include/mach/bridge-regs.h +++ b/arch/arm/mach-dove/include/mach/bridge-regs.h | |||
@@ -26,10 +26,6 @@ | |||
26 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | 26 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) |
27 | #define SOFT_RESET 0x00000001 | 27 | #define SOFT_RESET 0x00000001 |
28 | 28 | ||
29 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
30 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
31 | #define BRIDGE_INT_TIMER0 0x0002 | ||
32 | #define BRIDGE_INT_TIMER1 0x0004 | ||
33 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | 29 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) |
34 | 30 | ||
35 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | 31 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) |
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 7ec14dbf4547..20e71df3e3bb 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -847,6 +847,11 @@ static void __init kirkwood_wdt_init(void) | |||
847 | /***************************************************************************** | 847 | /***************************************************************************** |
848 | * Time handling | 848 | * Time handling |
849 | ****************************************************************************/ | 849 | ****************************************************************************/ |
850 | void __init kirkwood_init_early(void) | ||
851 | { | ||
852 | orion_time_set_base(TIMER_VIRT_BASE); | ||
853 | } | ||
854 | |||
850 | int kirkwood_tclk; | 855 | int kirkwood_tclk; |
851 | 856 | ||
852 | static int __init kirkwood_find_tclk(void) | 857 | static int __init kirkwood_find_tclk(void) |
@@ -865,7 +870,9 @@ static int __init kirkwood_find_tclk(void) | |||
865 | static void __init kirkwood_timer_init(void) | 870 | static void __init kirkwood_timer_init(void) |
866 | { | 871 | { |
867 | kirkwood_tclk = kirkwood_find_tclk(); | 872 | kirkwood_tclk = kirkwood_find_tclk(); |
868 | orion_time_init(IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk); | 873 | |
874 | orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR, | ||
875 | IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk); | ||
869 | } | 876 | } |
870 | 877 | ||
871 | struct sys_timer kirkwood_timer = { | 878 | struct sys_timer kirkwood_timer = { |
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index a35b86235772..b9b0f0968a36 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h | |||
@@ -27,6 +27,7 @@ struct kirkwood_asoc_platform_data; | |||
27 | */ | 27 | */ |
28 | void kirkwood_map_io(void); | 28 | void kirkwood_map_io(void); |
29 | void kirkwood_init(void); | 29 | void kirkwood_init(void); |
30 | void kirkwood_init_early(void); | ||
30 | void kirkwood_init_irq(void); | 31 | void kirkwood_init_irq(void); |
31 | 32 | ||
32 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; | 33 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; |
diff --git a/arch/arm/mach-kirkwood/d2net_v2-setup.c b/arch/arm/mach-kirkwood/d2net_v2-setup.c index a31c9499ab36..043cfd5e140b 100644 --- a/arch/arm/mach-kirkwood/d2net_v2-setup.c +++ b/arch/arm/mach-kirkwood/d2net_v2-setup.c | |||
@@ -224,6 +224,7 @@ MACHINE_START(D2NET_V2, "LaCie d2 Network v2") | |||
224 | .boot_params = 0x00000100, | 224 | .boot_params = 0x00000100, |
225 | .init_machine = d2net_v2_init, | 225 | .init_machine = d2net_v2_init, |
226 | .map_io = kirkwood_map_io, | 226 | .map_io = kirkwood_map_io, |
227 | .init_early = kirkwood_init_early, | ||
227 | .init_irq = kirkwood_init_irq, | 228 | .init_irq = kirkwood_init_irq, |
228 | .timer = &kirkwood_timer, | 229 | .timer = &kirkwood_timer, |
229 | MACHINE_END | 230 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c index 9ea71182d31a..bff04e04d679 100644 --- a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c +++ b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c | |||
@@ -100,6 +100,7 @@ MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board") | |||
100 | .boot_params = 0x00000100, | 100 | .boot_params = 0x00000100, |
101 | .init_machine = db88f6281_init, | 101 | .init_machine = db88f6281_init, |
102 | .map_io = kirkwood_map_io, | 102 | .map_io = kirkwood_map_io, |
103 | .init_early = kirkwood_init_early, | ||
103 | .init_irq = kirkwood_init_irq, | 104 | .init_irq = kirkwood_init_irq, |
104 | .timer = &kirkwood_timer, | 105 | .timer = &kirkwood_timer, |
105 | MACHINE_END | 106 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/dockstar-setup.c b/arch/arm/mach-kirkwood/dockstar-setup.c index 433ea368c060..f14dfb8508c5 100644 --- a/arch/arm/mach-kirkwood/dockstar-setup.c +++ b/arch/arm/mach-kirkwood/dockstar-setup.c | |||
@@ -105,6 +105,7 @@ MACHINE_START(DOCKSTAR, "Seagate FreeAgent DockStar") | |||
105 | .boot_params = 0x00000100, | 105 | .boot_params = 0x00000100, |
106 | .init_machine = dockstar_init, | 106 | .init_machine = dockstar_init, |
107 | .map_io = kirkwood_map_io, | 107 | .map_io = kirkwood_map_io, |
108 | .init_early = kirkwood_init_early, | ||
108 | .init_irq = kirkwood_init_irq, | 109 | .init_irq = kirkwood_init_irq, |
109 | .timer = &kirkwood_timer, | 110 | .timer = &kirkwood_timer, |
110 | MACHINE_END | 111 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/guruplug-setup.c b/arch/arm/mach-kirkwood/guruplug-setup.c index 8f47dc0a2fef..41d1b40696a3 100644 --- a/arch/arm/mach-kirkwood/guruplug-setup.c +++ b/arch/arm/mach-kirkwood/guruplug-setup.c | |||
@@ -124,6 +124,7 @@ MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board") | |||
124 | .boot_params = 0x00000100, | 124 | .boot_params = 0x00000100, |
125 | .init_machine = guruplug_init, | 125 | .init_machine = guruplug_init, |
126 | .map_io = kirkwood_map_io, | 126 | .map_io = kirkwood_map_io, |
127 | .init_early = kirkwood_init_early, | ||
127 | .init_irq = kirkwood_init_irq, | 128 | .init_irq = kirkwood_init_irq, |
128 | .timer = &kirkwood_timer, | 129 | .timer = &kirkwood_timer, |
129 | MACHINE_END | 130 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/include/mach/bridge-regs.h b/arch/arm/mach-kirkwood/include/mach/bridge-regs.h index aff0e1327e38..957bd7997d7e 100644 --- a/arch/arm/mach-kirkwood/include/mach/bridge-regs.h +++ b/arch/arm/mach-kirkwood/include/mach/bridge-regs.h | |||
@@ -29,9 +29,6 @@ | |||
29 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | 29 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) |
30 | #define WDT_INT_REQ 0x0008 | 30 | #define WDT_INT_REQ 0x0008 |
31 | 31 | ||
32 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
33 | #define BRIDGE_INT_TIMER0 0x0002 | ||
34 | #define BRIDGE_INT_TIMER1 0x0004 | ||
35 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | 32 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) |
36 | 33 | ||
37 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | 34 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) |
diff --git a/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c b/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c index 1e5266f57e2a..00cca22eca6f 100644 --- a/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c +++ b/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c | |||
@@ -166,6 +166,7 @@ MACHINE_START(MV88F6281GTW_GE, "Marvell 88F6281 GTW GE Board") | |||
166 | .boot_params = 0x00000100, | 166 | .boot_params = 0x00000100, |
167 | .init_machine = mv88f6281gtw_ge_init, | 167 | .init_machine = mv88f6281gtw_ge_init, |
168 | .map_io = kirkwood_map_io, | 168 | .map_io = kirkwood_map_io, |
169 | .init_early = kirkwood_init_early, | ||
169 | .init_irq = kirkwood_init_irq, | 170 | .init_irq = kirkwood_init_irq, |
170 | .timer = &kirkwood_timer, | 171 | .timer = &kirkwood_timer, |
171 | MACHINE_END | 172 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/netspace_v2-setup.c b/arch/arm/mach-kirkwood/netspace_v2-setup.c index 65ee21fd2f3b..7cdab5776452 100644 --- a/arch/arm/mach-kirkwood/netspace_v2-setup.c +++ b/arch/arm/mach-kirkwood/netspace_v2-setup.c | |||
@@ -261,6 +261,7 @@ MACHINE_START(NETSPACE_V2, "LaCie Network Space v2") | |||
261 | .boot_params = 0x00000100, | 261 | .boot_params = 0x00000100, |
262 | .init_machine = netspace_v2_init, | 262 | .init_machine = netspace_v2_init, |
263 | .map_io = kirkwood_map_io, | 263 | .map_io = kirkwood_map_io, |
264 | .init_early = kirkwood_init_early, | ||
264 | .init_irq = kirkwood_init_irq, | 265 | .init_irq = kirkwood_init_irq, |
265 | .timer = &kirkwood_timer, | 266 | .timer = &kirkwood_timer, |
266 | MACHINE_END | 267 | MACHINE_END |
@@ -271,6 +272,7 @@ MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2") | |||
271 | .boot_params = 0x00000100, | 272 | .boot_params = 0x00000100, |
272 | .init_machine = netspace_v2_init, | 273 | .init_machine = netspace_v2_init, |
273 | .map_io = kirkwood_map_io, | 274 | .map_io = kirkwood_map_io, |
275 | .init_early = kirkwood_init_early, | ||
274 | .init_irq = kirkwood_init_irq, | 276 | .init_irq = kirkwood_init_irq, |
275 | .timer = &kirkwood_timer, | 277 | .timer = &kirkwood_timer, |
276 | MACHINE_END | 278 | MACHINE_END |
@@ -281,6 +283,7 @@ MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2") | |||
281 | .boot_params = 0x00000100, | 283 | .boot_params = 0x00000100, |
282 | .init_machine = netspace_v2_init, | 284 | .init_machine = netspace_v2_init, |
283 | .map_io = kirkwood_map_io, | 285 | .map_io = kirkwood_map_io, |
286 | .init_early = kirkwood_init_early, | ||
284 | .init_irq = kirkwood_init_irq, | 287 | .init_irq = kirkwood_init_irq, |
285 | .timer = &kirkwood_timer, | 288 | .timer = &kirkwood_timer, |
286 | MACHINE_END | 289 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/netxbig_v2-setup.c b/arch/arm/mach-kirkwood/netxbig_v2-setup.c index 93afd3c8bfd8..6be627deb0fc 100644 --- a/arch/arm/mach-kirkwood/netxbig_v2-setup.c +++ b/arch/arm/mach-kirkwood/netxbig_v2-setup.c | |||
@@ -402,6 +402,7 @@ MACHINE_START(NET2BIG_V2, "LaCie 2Big Network v2") | |||
402 | .boot_params = 0x00000100, | 402 | .boot_params = 0x00000100, |
403 | .init_machine = netxbig_v2_init, | 403 | .init_machine = netxbig_v2_init, |
404 | .map_io = kirkwood_map_io, | 404 | .map_io = kirkwood_map_io, |
405 | .init_early = kirkwood_init_early, | ||
405 | .init_irq = kirkwood_init_irq, | 406 | .init_irq = kirkwood_init_irq, |
406 | .timer = &kirkwood_timer, | 407 | .timer = &kirkwood_timer, |
407 | MACHINE_END | 408 | MACHINE_END |
@@ -412,6 +413,7 @@ MACHINE_START(NET5BIG_V2, "LaCie 5Big Network v2") | |||
412 | .boot_params = 0x00000100, | 413 | .boot_params = 0x00000100, |
413 | .init_machine = netxbig_v2_init, | 414 | .init_machine = netxbig_v2_init, |
414 | .map_io = kirkwood_map_io, | 415 | .map_io = kirkwood_map_io, |
416 | .init_early = kirkwood_init_early, | ||
415 | .init_irq = kirkwood_init_irq, | 417 | .init_irq = kirkwood_init_irq, |
416 | .timer = &kirkwood_timer, | 418 | .timer = &kirkwood_timer, |
417 | MACHINE_END | 419 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/openrd-setup.c b/arch/arm/mach-kirkwood/openrd-setup.c index cfcca4174e25..f69beeff4450 100644 --- a/arch/arm/mach-kirkwood/openrd-setup.c +++ b/arch/arm/mach-kirkwood/openrd-setup.c | |||
@@ -217,6 +217,7 @@ MACHINE_START(OPENRD_BASE, "Marvell OpenRD Base Board") | |||
217 | .boot_params = 0x00000100, | 217 | .boot_params = 0x00000100, |
218 | .init_machine = openrd_init, | 218 | .init_machine = openrd_init, |
219 | .map_io = kirkwood_map_io, | 219 | .map_io = kirkwood_map_io, |
220 | .init_early = kirkwood_init_early, | ||
220 | .init_irq = kirkwood_init_irq, | 221 | .init_irq = kirkwood_init_irq, |
221 | .timer = &kirkwood_timer, | 222 | .timer = &kirkwood_timer, |
222 | MACHINE_END | 223 | MACHINE_END |
@@ -228,6 +229,7 @@ MACHINE_START(OPENRD_CLIENT, "Marvell OpenRD Client Board") | |||
228 | .boot_params = 0x00000100, | 229 | .boot_params = 0x00000100, |
229 | .init_machine = openrd_init, | 230 | .init_machine = openrd_init, |
230 | .map_io = kirkwood_map_io, | 231 | .map_io = kirkwood_map_io, |
232 | .init_early = kirkwood_init_early, | ||
231 | .init_irq = kirkwood_init_irq, | 233 | .init_irq = kirkwood_init_irq, |
232 | .timer = &kirkwood_timer, | 234 | .timer = &kirkwood_timer, |
233 | MACHINE_END | 235 | MACHINE_END |
@@ -239,6 +241,7 @@ MACHINE_START(OPENRD_ULTIMATE, "Marvell OpenRD Ultimate Board") | |||
239 | .boot_params = 0x00000100, | 241 | .boot_params = 0x00000100, |
240 | .init_machine = openrd_init, | 242 | .init_machine = openrd_init, |
241 | .map_io = kirkwood_map_io, | 243 | .map_io = kirkwood_map_io, |
244 | .init_early = kirkwood_init_early, | ||
242 | .init_irq = kirkwood_init_irq, | 245 | .init_irq = kirkwood_init_irq, |
243 | .timer = &kirkwood_timer, | 246 | .timer = &kirkwood_timer, |
244 | MACHINE_END | 247 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c index 0049614cd324..75c6601b8d87 100644 --- a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c | |||
@@ -82,6 +82,7 @@ MACHINE_START(RD88F6192_NAS, "Marvell RD-88F6192-NAS Development Board") | |||
82 | .boot_params = 0x00000100, | 82 | .boot_params = 0x00000100, |
83 | .init_machine = rd88f6192_init, | 83 | .init_machine = rd88f6192_init, |
84 | .map_io = kirkwood_map_io, | 84 | .map_io = kirkwood_map_io, |
85 | .init_early = kirkwood_init_early, | ||
85 | .init_irq = kirkwood_init_irq, | 86 | .init_irq = kirkwood_init_irq, |
86 | .timer = &kirkwood_timer, | 87 | .timer = &kirkwood_timer, |
87 | MACHINE_END | 88 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c index 0998a08cf42d..0f75494d5902 100644 --- a/arch/arm/mach-kirkwood/rd88f6281-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c | |||
@@ -118,6 +118,7 @@ MACHINE_START(RD88F6281, "Marvell RD-88F6281 Reference Board") | |||
118 | .boot_params = 0x00000100, | 118 | .boot_params = 0x00000100, |
119 | .init_machine = rd88f6281_init, | 119 | .init_machine = rd88f6281_init, |
120 | .map_io = kirkwood_map_io, | 120 | .map_io = kirkwood_map_io, |
121 | .init_early = kirkwood_init_early, | ||
121 | .init_irq = kirkwood_init_irq, | 122 | .init_irq = kirkwood_init_irq, |
122 | .timer = &kirkwood_timer, | 123 | .timer = &kirkwood_timer, |
123 | MACHINE_END | 124 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/sheevaplug-setup.c b/arch/arm/mach-kirkwood/sheevaplug-setup.c index d2eec35dfe0f..0a95063f6d32 100644 --- a/arch/arm/mach-kirkwood/sheevaplug-setup.c +++ b/arch/arm/mach-kirkwood/sheevaplug-setup.c | |||
@@ -134,6 +134,7 @@ MACHINE_START(SHEEVAPLUG, "Marvell SheevaPlug Reference Board") | |||
134 | .boot_params = 0x00000100, | 134 | .boot_params = 0x00000100, |
135 | .init_machine = sheevaplug_init, | 135 | .init_machine = sheevaplug_init, |
136 | .map_io = kirkwood_map_io, | 136 | .map_io = kirkwood_map_io, |
137 | .init_early = kirkwood_init_early, | ||
137 | .init_irq = kirkwood_init_irq, | 138 | .init_irq = kirkwood_init_irq, |
138 | .timer = &kirkwood_timer, | 139 | .timer = &kirkwood_timer, |
139 | MACHINE_END | 140 | MACHINE_END |
@@ -144,6 +145,7 @@ MACHINE_START(ESATA_SHEEVAPLUG, "Marvell eSATA SheevaPlug Reference Board") | |||
144 | .boot_params = 0x00000100, | 145 | .boot_params = 0x00000100, |
145 | .init_machine = sheevaplug_init, | 146 | .init_machine = sheevaplug_init, |
146 | .map_io = kirkwood_map_io, | 147 | .map_io = kirkwood_map_io, |
148 | .init_early = kirkwood_init_early, | ||
147 | .init_irq = kirkwood_init_irq, | 149 | .init_irq = kirkwood_init_irq, |
148 | .timer = &kirkwood_timer, | 150 | .timer = &kirkwood_timer, |
149 | MACHINE_END | 151 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/t5325-setup.c b/arch/arm/mach-kirkwood/t5325-setup.c index f38c282d864b..e6b9b1b22a35 100644 --- a/arch/arm/mach-kirkwood/t5325-setup.c +++ b/arch/arm/mach-kirkwood/t5325-setup.c | |||
@@ -204,6 +204,7 @@ MACHINE_START(T5325, "HP t5325 Thin Client") | |||
204 | .boot_params = 0x00000100, | 204 | .boot_params = 0x00000100, |
205 | .init_machine = hp_t5325_init, | 205 | .init_machine = hp_t5325_init, |
206 | .map_io = kirkwood_map_io, | 206 | .map_io = kirkwood_map_io, |
207 | .init_early = kirkwood_init_early, | ||
207 | .init_irq = kirkwood_init_irq, | 208 | .init_irq = kirkwood_init_irq, |
208 | .timer = &kirkwood_timer, | 209 | .timer = &kirkwood_timer, |
209 | MACHINE_END | 210 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/ts219-setup.c b/arch/arm/mach-kirkwood/ts219-setup.c index dc999c4c5806..68f32f2bf552 100644 --- a/arch/arm/mach-kirkwood/ts219-setup.c +++ b/arch/arm/mach-kirkwood/ts219-setup.c | |||
@@ -135,6 +135,7 @@ MACHINE_START(TS219, "QNAP TS-119/TS-219") | |||
135 | .boot_params = 0x00000100, | 135 | .boot_params = 0x00000100, |
136 | .init_machine = qnap_ts219_init, | 136 | .init_machine = qnap_ts219_init, |
137 | .map_io = kirkwood_map_io, | 137 | .map_io = kirkwood_map_io, |
138 | .init_early = kirkwood_init_early, | ||
138 | .init_irq = kirkwood_init_irq, | 139 | .init_irq = kirkwood_init_irq, |
139 | .timer = &kirkwood_timer, | 140 | .timer = &kirkwood_timer, |
140 | MACHINE_END | 141 | MACHINE_END |
diff --git a/arch/arm/mach-kirkwood/ts41x-setup.c b/arch/arm/mach-kirkwood/ts41x-setup.c index 0f84e0af397f..d5d009970705 100644 --- a/arch/arm/mach-kirkwood/ts41x-setup.c +++ b/arch/arm/mach-kirkwood/ts41x-setup.c | |||
@@ -179,6 +179,7 @@ MACHINE_START(TS41X, "QNAP TS-41x") | |||
179 | .boot_params = 0x00000100, | 179 | .boot_params = 0x00000100, |
180 | .init_machine = qnap_ts41x_init, | 180 | .init_machine = qnap_ts41x_init, |
181 | .map_io = kirkwood_map_io, | 181 | .map_io = kirkwood_map_io, |
182 | .init_early = kirkwood_init_early, | ||
182 | .init_irq = kirkwood_init_irq, | 183 | .init_irq = kirkwood_init_irq, |
183 | .timer = &kirkwood_timer, | 184 | .timer = &kirkwood_timer, |
184 | MACHINE_END | 185 | MACHINE_END |
diff --git a/arch/arm/mach-loki/common.c b/arch/arm/mach-loki/common.c index 818f19d7ab1f..e41e909cf8f4 100644 --- a/arch/arm/mach-loki/common.c +++ b/arch/arm/mach-loki/common.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/timex.h> | 18 | #include <asm/timex.h> |
19 | #include <asm/mach/map.h> | 19 | #include <asm/mach/map.h> |
20 | #include <asm/mach/time.h> | 20 | #include <asm/mach/time.h> |
21 | #include <mach/bridge-regs.h> | ||
21 | #include <mach/loki.h> | 22 | #include <mach/loki.h> |
22 | #include <plat/orion_nand.h> | 23 | #include <plat/orion_nand.h> |
23 | #include <plat/time.h> | 24 | #include <plat/time.h> |
@@ -290,9 +291,15 @@ void __init loki_uart1_init(void) | |||
290 | /***************************************************************************** | 291 | /***************************************************************************** |
291 | * Time handling | 292 | * Time handling |
292 | ****************************************************************************/ | 293 | ****************************************************************************/ |
294 | void __init loki_init_early(void) | ||
295 | { | ||
296 | orion_time_set_base(TIMER_VIRT_BASE); | ||
297 | } | ||
298 | |||
293 | static void loki_timer_init(void) | 299 | static void loki_timer_init(void) |
294 | { | 300 | { |
295 | orion_time_init(IRQ_LOKI_BRIDGE, LOKI_TCLK); | 301 | orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR, |
302 | IRQ_LOKI_BRIDGE, LOKI_TCLK); | ||
296 | } | 303 | } |
297 | 304 | ||
298 | struct sys_timer loki_timer = { | 305 | struct sys_timer loki_timer = { |
diff --git a/arch/arm/mach-loki/common.h b/arch/arm/mach-loki/common.h index 26054fd0f05e..a315dcf8887c 100644 --- a/arch/arm/mach-loki/common.h +++ b/arch/arm/mach-loki/common.h | |||
@@ -18,6 +18,7 @@ struct mv643xx_eth_platform_data; | |||
18 | */ | 18 | */ |
19 | void loki_map_io(void); | 19 | void loki_map_io(void); |
20 | void loki_init(void); | 20 | void loki_init(void); |
21 | void loki_init_early(void); | ||
21 | void loki_init_irq(void); | 22 | void loki_init_irq(void); |
22 | 23 | ||
23 | extern struct mbus_dram_target_info loki_mbus_dram_info; | 24 | extern struct mbus_dram_target_info loki_mbus_dram_info; |
diff --git a/arch/arm/mach-loki/include/mach/bridge-regs.h b/arch/arm/mach-loki/include/mach/bridge-regs.h index a3fabf70044f..fd87732097cd 100644 --- a/arch/arm/mach-loki/include/mach/bridge-regs.h +++ b/arch/arm/mach-loki/include/mach/bridge-regs.h | |||
@@ -17,11 +17,6 @@ | |||
17 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | 17 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) |
18 | #define SOFT_RESET 0x00000001 | 18 | #define SOFT_RESET 0x00000001 |
19 | 19 | ||
20 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
21 | |||
22 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
23 | #define BRIDGE_INT_TIMER0 0x0002 | ||
24 | #define BRIDGE_INT_TIMER1 0x0004 | ||
25 | #define BRIDGE_INT_TIMER1_CLR 0x0004 | 20 | #define BRIDGE_INT_TIMER1_CLR 0x0004 |
26 | 21 | ||
27 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | 22 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) |
diff --git a/arch/arm/mach-loki/lb88rc8480-setup.c b/arch/arm/mach-loki/lb88rc8480-setup.c index a1e75e7fc500..35eae4e6abb2 100644 --- a/arch/arm/mach-loki/lb88rc8480-setup.c +++ b/arch/arm/mach-loki/lb88rc8480-setup.c | |||
@@ -93,6 +93,7 @@ MACHINE_START(LB88RC8480, "Marvell LB88RC8480 Development Board") | |||
93 | .boot_params = 0x00000100, | 93 | .boot_params = 0x00000100, |
94 | .init_machine = lb88rc8480_init, | 94 | .init_machine = lb88rc8480_init, |
95 | .map_io = loki_map_io, | 95 | .map_io = loki_map_io, |
96 | .init_early = loki_init_early, | ||
96 | .init_irq = loki_init_irq, | 97 | .init_irq = loki_init_irq, |
97 | .timer = &loki_timer, | 98 | .timer = &loki_timer, |
98 | MACHINE_END | 99 | MACHINE_END |
diff --git a/arch/arm/mach-mv78xx0/buffalo-wxl-setup.c b/arch/arm/mach-mv78xx0/buffalo-wxl-setup.c index 29e390e89ff4..20f3f125ed2b 100644 --- a/arch/arm/mach-mv78xx0/buffalo-wxl-setup.c +++ b/arch/arm/mach-mv78xx0/buffalo-wxl-setup.c | |||
@@ -148,6 +148,7 @@ MACHINE_START(TERASTATION_WXL, "Buffalo Nas WXL") | |||
148 | .boot_params = 0x00000100, | 148 | .boot_params = 0x00000100, |
149 | .init_machine = wxl_init, | 149 | .init_machine = wxl_init, |
150 | .map_io = mv78xx0_map_io, | 150 | .map_io = mv78xx0_map_io, |
151 | .init_early = mv78xx0_init_early, | ||
151 | .init_irq = mv78xx0_init_irq, | 152 | .init_irq = mv78xx0_init_irq, |
152 | .timer = &mv78xx0_timer, | 153 | .timer = &mv78xx0_timer, |
153 | MACHINE_END | 154 | MACHINE_END |
diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c index 08465eb6a2c2..44fb4e55be0d 100644 --- a/arch/arm/mach-mv78xx0/common.c +++ b/arch/arm/mach-mv78xx0/common.c | |||
@@ -818,9 +818,15 @@ void __init mv78xx0_uart3_init(void) | |||
818 | /***************************************************************************** | 818 | /***************************************************************************** |
819 | * Time handling | 819 | * Time handling |
820 | ****************************************************************************/ | 820 | ****************************************************************************/ |
821 | void __init mv78xx0_init_early(void) | ||
822 | { | ||
823 | orion_time_set_base(TIMER_VIRT_BASE); | ||
824 | } | ||
825 | |||
821 | static void mv78xx0_timer_init(void) | 826 | static void mv78xx0_timer_init(void) |
822 | { | 827 | { |
823 | orion_time_init(IRQ_MV78XX0_TIMER_1, get_tclk()); | 828 | orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR, |
829 | IRQ_MV78XX0_TIMER_1, get_tclk()); | ||
824 | } | 830 | } |
825 | 831 | ||
826 | struct sys_timer mv78xx0_timer = { | 832 | struct sys_timer mv78xx0_timer = { |
diff --git a/arch/arm/mach-mv78xx0/common.h b/arch/arm/mach-mv78xx0/common.h index befc22475469..632e63d65e7a 100644 --- a/arch/arm/mach-mv78xx0/common.h +++ b/arch/arm/mach-mv78xx0/common.h | |||
@@ -20,6 +20,7 @@ struct mv_sata_platform_data; | |||
20 | int mv78xx0_core_index(void); | 20 | int mv78xx0_core_index(void); |
21 | void mv78xx0_map_io(void); | 21 | void mv78xx0_map_io(void); |
22 | void mv78xx0_init(void); | 22 | void mv78xx0_init(void); |
23 | void mv78xx0_init_early(void); | ||
23 | void mv78xx0_init_irq(void); | 24 | void mv78xx0_init_irq(void); |
24 | 25 | ||
25 | extern struct mbus_dram_target_info mv78xx0_mbus_dram_info; | 26 | extern struct mbus_dram_target_info mv78xx0_mbus_dram_info; |
diff --git a/arch/arm/mach-mv78xx0/db78x00-bp-setup.c b/arch/arm/mach-mv78xx0/db78x00-bp-setup.c index 207c95e403b9..df5aebe5b0fa 100644 --- a/arch/arm/mach-mv78xx0/db78x00-bp-setup.c +++ b/arch/arm/mach-mv78xx0/db78x00-bp-setup.c | |||
@@ -96,6 +96,7 @@ MACHINE_START(DB78X00_BP, "Marvell DB-78x00-BP Development Board") | |||
96 | .boot_params = 0x00000100, | 96 | .boot_params = 0x00000100, |
97 | .init_machine = db78x00_init, | 97 | .init_machine = db78x00_init, |
98 | .map_io = mv78xx0_map_io, | 98 | .map_io = mv78xx0_map_io, |
99 | .init_early = mv78xx0_init_early, | ||
99 | .init_irq = mv78xx0_init_irq, | 100 | .init_irq = mv78xx0_init_irq, |
100 | .timer = &mv78xx0_timer, | 101 | .timer = &mv78xx0_timer, |
101 | MACHINE_END | 102 | MACHINE_END |
diff --git a/arch/arm/mach-mv78xx0/include/mach/bridge-regs.h b/arch/arm/mach-mv78xx0/include/mach/bridge-regs.h index 2d14c4fe294d..c64dbb96dbad 100644 --- a/arch/arm/mach-mv78xx0/include/mach/bridge-regs.h +++ b/arch/arm/mach-mv78xx0/include/mach/bridge-regs.h | |||
@@ -20,10 +20,6 @@ | |||
20 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | 20 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) |
21 | #define SOFT_RESET 0x00000001 | 21 | #define SOFT_RESET 0x00000001 |
22 | 22 | ||
23 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
24 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
25 | #define BRIDGE_INT_TIMER0 0x0002 | ||
26 | #define BRIDGE_INT_TIMER1 0x0004 | ||
27 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | 23 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) |
28 | 24 | ||
29 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | 25 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) |
diff --git a/arch/arm/mach-mv78xx0/rd78x00-masa-setup.c b/arch/arm/mach-mv78xx0/rd78x00-masa-setup.c index 3511ad4d973b..d927f14c6810 100644 --- a/arch/arm/mach-mv78xx0/rd78x00-masa-setup.c +++ b/arch/arm/mach-mv78xx0/rd78x00-masa-setup.c | |||
@@ -81,6 +81,7 @@ MACHINE_START(RD78X00_MASA, "Marvell RD-78x00-MASA Development Board") | |||
81 | .boot_params = 0x00000100, | 81 | .boot_params = 0x00000100, |
82 | .init_machine = rd78x00_masa_init, | 82 | .init_machine = rd78x00_masa_init, |
83 | .map_io = mv78xx0_map_io, | 83 | .map_io = mv78xx0_map_io, |
84 | .init_early = mv78xx0_init_early, | ||
84 | .init_irq = mv78xx0_init_irq, | 85 | .init_irq = mv78xx0_init_irq, |
85 | .timer = &mv78xx0_timer, | 86 | .timer = &mv78xx0_timer, |
86 | MACHINE_END | 87 | MACHINE_END |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 8dc2c76d2260..986c3bf4e6b8 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
27 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
28 | #include <asm/mach/time.h> | 28 | #include <asm/mach/time.h> |
29 | #include <mach/bridge-regs.h> | ||
29 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
30 | #include <mach/orion5x.h> | 31 | #include <mach/orion5x.h> |
31 | #include <plat/ehci-orion.h> | 32 | #include <plat/ehci-orion.h> |
@@ -599,6 +600,11 @@ void __init orion5x_wdt_init(void) | |||
599 | /***************************************************************************** | 600 | /***************************************************************************** |
600 | * Time handling | 601 | * Time handling |
601 | ****************************************************************************/ | 602 | ****************************************************************************/ |
603 | void __init orion5x_init_early(void) | ||
604 | { | ||
605 | orion_time_set_base(TIMER_VIRT_BASE); | ||
606 | } | ||
607 | |||
602 | int orion5x_tclk; | 608 | int orion5x_tclk; |
603 | 609 | ||
604 | int __init orion5x_find_tclk(void) | 610 | int __init orion5x_find_tclk(void) |
@@ -616,7 +622,9 @@ int __init orion5x_find_tclk(void) | |||
616 | static void orion5x_timer_init(void) | 622 | static void orion5x_timer_init(void) |
617 | { | 623 | { |
618 | orion5x_tclk = orion5x_find_tclk(); | 624 | orion5x_tclk = orion5x_find_tclk(); |
619 | orion_time_init(IRQ_ORION5X_BRIDGE, orion5x_tclk); | 625 | |
626 | orion_time_init(ORION5X_BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR, | ||
627 | IRQ_ORION5X_BRIDGE, orion5x_tclk); | ||
620 | } | 628 | } |
621 | 629 | ||
622 | struct sys_timer orion5x_timer = { | 630 | struct sys_timer orion5x_timer = { |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index 8f004503c96d..f2b2b35e8646 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -9,6 +9,7 @@ struct mv_sata_platform_data; | |||
9 | * Basic Orion init functions used early by machine-setup. | 9 | * Basic Orion init functions used early by machine-setup. |
10 | */ | 10 | */ |
11 | void orion5x_map_io(void); | 11 | void orion5x_map_io(void); |
12 | void orion5x_init_early(void); | ||
12 | void orion5x_init_irq(void); | 13 | void orion5x_init_irq(void); |
13 | void orion5x_init(void); | 14 | void orion5x_init(void); |
14 | extern int orion5x_tclk; | 15 | extern int orion5x_tclk; |
diff --git a/arch/arm/mach-orion5x/d2net-setup.c b/arch/arm/mach-orion5x/d2net-setup.c index b1c451f5ee27..425807579303 100644 --- a/arch/arm/mach-orion5x/d2net-setup.c +++ b/arch/arm/mach-orion5x/d2net-setup.c | |||
@@ -339,6 +339,7 @@ MACHINE_START(D2NET, "LaCie d2 Network") | |||
339 | .boot_params = 0x00000100, | 339 | .boot_params = 0x00000100, |
340 | .init_machine = d2net_init, | 340 | .init_machine = d2net_init, |
341 | .map_io = orion5x_map_io, | 341 | .map_io = orion5x_map_io, |
342 | .init_early = orion5x_init_early, | ||
342 | .init_irq = orion5x_init_irq, | 343 | .init_irq = orion5x_init_irq, |
343 | .timer = &orion5x_timer, | 344 | .timer = &orion5x_timer, |
344 | .fixup = tag_fixup_mem32, | 345 | .fixup = tag_fixup_mem32, |
@@ -350,6 +351,7 @@ MACHINE_START(BIGDISK, "LaCie Big Disk Network") | |||
350 | .boot_params = 0x00000100, | 351 | .boot_params = 0x00000100, |
351 | .init_machine = d2net_init, | 352 | .init_machine = d2net_init, |
352 | .map_io = orion5x_map_io, | 353 | .map_io = orion5x_map_io, |
354 | .init_early = orion5x_init_early, | ||
353 | .init_irq = orion5x_init_irq, | 355 | .init_irq = orion5x_init_irq, |
354 | .timer = &orion5x_timer, | 356 | .timer = &orion5x_timer, |
355 | .fixup = tag_fixup_mem32, | 357 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c index df1083f5b6eb..c10a11715376 100644 --- a/arch/arm/mach-orion5x/db88f5281-setup.c +++ b/arch/arm/mach-orion5x/db88f5281-setup.c | |||
@@ -361,6 +361,7 @@ MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board") | |||
361 | .boot_params = 0x00000100, | 361 | .boot_params = 0x00000100, |
362 | .init_machine = db88f5281_init, | 362 | .init_machine = db88f5281_init, |
363 | .map_io = orion5x_map_io, | 363 | .map_io = orion5x_map_io, |
364 | .init_early = orion5x_init_early, | ||
364 | .init_irq = orion5x_init_irq, | 365 | .init_irq = orion5x_init_irq, |
365 | .timer = &orion5x_timer, | 366 | .timer = &orion5x_timer, |
366 | MACHINE_END | 367 | MACHINE_END |
diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c index 3a7bc0e36982..90ab022eabeb 100644 --- a/arch/arm/mach-orion5x/dns323-setup.c +++ b/arch/arm/mach-orion5x/dns323-setup.c | |||
@@ -733,6 +733,7 @@ MACHINE_START(DNS323, "D-Link DNS-323") | |||
733 | .boot_params = 0x00000100, | 733 | .boot_params = 0x00000100, |
734 | .init_machine = dns323_init, | 734 | .init_machine = dns323_init, |
735 | .map_io = orion5x_map_io, | 735 | .map_io = orion5x_map_io, |
736 | .init_early = orion5x_init_early, | ||
736 | .init_irq = orion5x_init_irq, | 737 | .init_irq = orion5x_init_irq, |
737 | .timer = &orion5x_timer, | 738 | .timer = &orion5x_timer, |
738 | .fixup = tag_fixup_mem32, | 739 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/edmini_v2-setup.c b/arch/arm/mach-orion5x/edmini_v2-setup.c index ba98459f44b0..d037a90c216c 100644 --- a/arch/arm/mach-orion5x/edmini_v2-setup.c +++ b/arch/arm/mach-orion5x/edmini_v2-setup.c | |||
@@ -254,6 +254,7 @@ MACHINE_START(EDMINI_V2, "LaCie Ethernet Disk mini V2") | |||
254 | .boot_params = 0x00000100, | 254 | .boot_params = 0x00000100, |
255 | .init_machine = edmini_v2_init, | 255 | .init_machine = edmini_v2_init, |
256 | .map_io = orion5x_map_io, | 256 | .map_io = orion5x_map_io, |
257 | .init_early = orion5x_init_early, | ||
257 | .init_irq = orion5x_init_irq, | 258 | .init_irq = orion5x_init_irq, |
258 | .timer = &orion5x_timer, | 259 | .timer = &orion5x_timer, |
259 | .fixup = tag_fixup_mem32, | 260 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/include/mach/bridge-regs.h b/arch/arm/mach-orion5x/include/mach/bridge-regs.h index 5c9744cd8ef6..96484bcd34ca 100644 --- a/arch/arm/mach-orion5x/include/mach/bridge-regs.h +++ b/arch/arm/mach-orion5x/include/mach/bridge-regs.h | |||
@@ -22,14 +22,12 @@ | |||
22 | 22 | ||
23 | #define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c) | 23 | #define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c) |
24 | 24 | ||
25 | #define BRIDGE_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x110) | ||
26 | |||
25 | #define POWER_MNG_CTRL_REG (ORION5X_BRIDGE_VIRT_BASE | 0x11C) | 27 | #define POWER_MNG_CTRL_REG (ORION5X_BRIDGE_VIRT_BASE | 0x11C) |
26 | 28 | ||
27 | #define BRIDGE_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x110) | ||
28 | #define WDT_INT_REQ 0x0008 | 29 | #define WDT_INT_REQ 0x0008 |
29 | 30 | ||
30 | #define BRIDGE_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x114) | ||
31 | #define BRIDGE_INT_TIMER0 0x0002 | ||
32 | #define BRIDGE_INT_TIMER1 0x0004 | ||
33 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | 31 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) |
34 | 32 | ||
35 | #define MAIN_IRQ_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x200) | 33 | #define MAIN_IRQ_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x200) |
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c index 4be9aa08de69..47497c76162a 100644 --- a/arch/arm/mach-orion5x/kurobox_pro-setup.c +++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c | |||
@@ -382,6 +382,7 @@ MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro") | |||
382 | .boot_params = 0x00000100, | 382 | .boot_params = 0x00000100, |
383 | .init_machine = kurobox_pro_init, | 383 | .init_machine = kurobox_pro_init, |
384 | .map_io = orion5x_map_io, | 384 | .map_io = orion5x_map_io, |
385 | .init_early = orion5x_init_early, | ||
385 | .init_irq = orion5x_init_irq, | 386 | .init_irq = orion5x_init_irq, |
386 | .timer = &orion5x_timer, | 387 | .timer = &orion5x_timer, |
387 | .fixup = tag_fixup_mem32, | 388 | .fixup = tag_fixup_mem32, |
@@ -394,6 +395,7 @@ MACHINE_START(LINKSTATION_PRO, "Buffalo Linkstation Pro/Live") | |||
394 | .boot_params = 0x00000100, | 395 | .boot_params = 0x00000100, |
395 | .init_machine = kurobox_pro_init, | 396 | .init_machine = kurobox_pro_init, |
396 | .map_io = orion5x_map_io, | 397 | .map_io = orion5x_map_io, |
398 | .init_early = orion5x_init_early, | ||
397 | .init_irq = orion5x_init_irq, | 399 | .init_irq = orion5x_init_irq, |
398 | .timer = &orion5x_timer, | 400 | .timer = &orion5x_timer, |
399 | .fixup = tag_fixup_mem32, | 401 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/ls-chl-setup.c b/arch/arm/mach-orion5x/ls-chl-setup.c index 20a9b66cbafa..6ae12aa6d759 100644 --- a/arch/arm/mach-orion5x/ls-chl-setup.c +++ b/arch/arm/mach-orion5x/ls-chl-setup.c | |||
@@ -321,6 +321,7 @@ MACHINE_START(LINKSTATION_LSCHL, "Buffalo Linkstation LiveV3 (LS-CHL)") | |||
321 | .boot_params = 0x00000100, | 321 | .boot_params = 0x00000100, |
322 | .init_machine = lschl_init, | 322 | .init_machine = lschl_init, |
323 | .map_io = orion5x_map_io, | 323 | .map_io = orion5x_map_io, |
324 | .init_early = orion5x_init_early, | ||
324 | .init_irq = orion5x_init_irq, | 325 | .init_irq = orion5x_init_irq, |
325 | .timer = &orion5x_timer, | 326 | .timer = &orion5x_timer, |
326 | .fixup = tag_fixup_mem32, | 327 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/ls_hgl-setup.c b/arch/arm/mach-orion5x/ls_hgl-setup.c index 437364b7168e..7adafd79cf98 100644 --- a/arch/arm/mach-orion5x/ls_hgl-setup.c +++ b/arch/arm/mach-orion5x/ls_hgl-setup.c | |||
@@ -268,6 +268,7 @@ MACHINE_START(LINKSTATION_LS_HGL, "Buffalo Linkstation LS-HGL") | |||
268 | .boot_params = 0x00000100, | 268 | .boot_params = 0x00000100, |
269 | .init_machine = ls_hgl_init, | 269 | .init_machine = ls_hgl_init, |
270 | .map_io = orion5x_map_io, | 270 | .map_io = orion5x_map_io, |
271 | .init_early = orion5x_init_early, | ||
271 | .init_irq = orion5x_init_irq, | 272 | .init_irq = orion5x_init_irq, |
272 | .timer = &orion5x_timer, | 273 | .timer = &orion5x_timer, |
273 | .fixup = tag_fixup_mem32, | 274 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/lsmini-setup.c b/arch/arm/mach-orion5x/lsmini-setup.c index ab9b0cf0a90b..869958f5c394 100644 --- a/arch/arm/mach-orion5x/lsmini-setup.c +++ b/arch/arm/mach-orion5x/lsmini-setup.c | |||
@@ -270,6 +270,7 @@ MACHINE_START(LINKSTATION_MINI, "Buffalo Linkstation Mini") | |||
270 | .boot_params = 0x00000100, | 270 | .boot_params = 0x00000100, |
271 | .init_machine = lsmini_init, | 271 | .init_machine = lsmini_init, |
272 | .map_io = orion5x_map_io, | 272 | .map_io = orion5x_map_io, |
273 | .init_early = orion5x_init_early, | ||
273 | .init_irq = orion5x_init_irq, | 274 | .init_irq = orion5x_init_irq, |
274 | .timer = &orion5x_timer, | 275 | .timer = &orion5x_timer, |
275 | .fixup = tag_fixup_mem32, | 276 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/mss2-setup.c b/arch/arm/mach-orion5x/mss2-setup.c index 2f0e16cd7e81..b43b208153cb 100644 --- a/arch/arm/mach-orion5x/mss2-setup.c +++ b/arch/arm/mach-orion5x/mss2-setup.c | |||
@@ -264,6 +264,7 @@ MACHINE_START(MSS2, "Maxtor Shared Storage II") | |||
264 | .boot_params = 0x00000100, | 264 | .boot_params = 0x00000100, |
265 | .init_machine = mss2_init, | 265 | .init_machine = mss2_init, |
266 | .map_io = orion5x_map_io, | 266 | .map_io = orion5x_map_io, |
267 | .init_early = orion5x_init_early, | ||
267 | .init_irq = orion5x_init_irq, | 268 | .init_irq = orion5x_init_irq, |
268 | .timer = &orion5x_timer, | 269 | .timer = &orion5x_timer, |
269 | .fixup = tag_fixup_mem32 | 270 | .fixup = tag_fixup_mem32 |
diff --git a/arch/arm/mach-orion5x/mv2120-setup.c b/arch/arm/mach-orion5x/mv2120-setup.c index b3d90f25de9f..c55d071707f5 100644 --- a/arch/arm/mach-orion5x/mv2120-setup.c +++ b/arch/arm/mach-orion5x/mv2120-setup.c | |||
@@ -232,6 +232,7 @@ MACHINE_START(MV2120, "HP Media Vault mv2120") | |||
232 | .boot_params = 0x00000100, | 232 | .boot_params = 0x00000100, |
233 | .init_machine = mv2120_init, | 233 | .init_machine = mv2120_init, |
234 | .map_io = orion5x_map_io, | 234 | .map_io = orion5x_map_io, |
235 | .init_early = orion5x_init_early, | ||
235 | .init_irq = orion5x_init_irq, | 236 | .init_irq = orion5x_init_irq, |
236 | .timer = &orion5x_timer, | 237 | .timer = &orion5x_timer, |
237 | .fixup = tag_fixup_mem32 | 238 | .fixup = tag_fixup_mem32 |
diff --git a/arch/arm/mach-orion5x/net2big-setup.c b/arch/arm/mach-orion5x/net2big-setup.c index d6665b31665f..429ecafe9fdd 100644 --- a/arch/arm/mach-orion5x/net2big-setup.c +++ b/arch/arm/mach-orion5x/net2big-setup.c | |||
@@ -422,6 +422,7 @@ MACHINE_START(NET2BIG, "LaCie 2Big Network") | |||
422 | .boot_params = 0x00000100, | 422 | .boot_params = 0x00000100, |
423 | .init_machine = net2big_init, | 423 | .init_machine = net2big_init, |
424 | .map_io = orion5x_map_io, | 424 | .map_io = orion5x_map_io, |
425 | .init_early = orion5x_init_early, | ||
425 | .init_irq = orion5x_init_irq, | 426 | .init_irq = orion5x_init_irq, |
426 | .timer = &orion5x_timer, | 427 | .timer = &orion5x_timer, |
427 | .fixup = tag_fixup_mem32, | 428 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c index f4c26fd731f4..34310ab56e29 100644 --- a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c +++ b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c | |||
@@ -172,6 +172,7 @@ MACHINE_START(RD88F5181L_FXO, "Marvell Orion-VoIP FXO Reference Design") | |||
172 | .boot_params = 0x00000100, | 172 | .boot_params = 0x00000100, |
173 | .init_machine = rd88f5181l_fxo_init, | 173 | .init_machine = rd88f5181l_fxo_init, |
174 | .map_io = orion5x_map_io, | 174 | .map_io = orion5x_map_io, |
175 | .init_early = orion5x_init_early, | ||
175 | .init_irq = orion5x_init_irq, | 176 | .init_irq = orion5x_init_irq, |
176 | .timer = &orion5x_timer, | 177 | .timer = &orion5x_timer, |
177 | .fixup = tag_fixup_mem32, | 178 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c index b5942909bab0..c1f79fa014ed 100644 --- a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c +++ b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c | |||
@@ -184,6 +184,7 @@ MACHINE_START(RD88F5181L_GE, "Marvell Orion-VoIP GE Reference Design") | |||
184 | .boot_params = 0x00000100, | 184 | .boot_params = 0x00000100, |
185 | .init_machine = rd88f5181l_ge_init, | 185 | .init_machine = rd88f5181l_ge_init, |
186 | .map_io = orion5x_map_io, | 186 | .map_io = orion5x_map_io, |
187 | .init_early = orion5x_init_early, | ||
187 | .init_irq = orion5x_init_irq, | 188 | .init_irq = orion5x_init_irq, |
188 | .timer = &orion5x_timer, | 189 | .timer = &orion5x_timer, |
189 | .fixup = tag_fixup_mem32, | 190 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c index 165ed87029b2..67ec6959b267 100644 --- a/arch/arm/mach-orion5x/rd88f5182-setup.c +++ b/arch/arm/mach-orion5x/rd88f5182-setup.c | |||
@@ -308,6 +308,7 @@ MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") | |||
308 | .boot_params = 0x00000100, | 308 | .boot_params = 0x00000100, |
309 | .init_machine = rd88f5182_init, | 309 | .init_machine = rd88f5182_init, |
310 | .map_io = orion5x_map_io, | 310 | .map_io = orion5x_map_io, |
311 | .init_early = orion5x_init_early, | ||
311 | .init_irq = orion5x_init_irq, | 312 | .init_irq = orion5x_init_irq, |
312 | .timer = &orion5x_timer, | 313 | .timer = &orion5x_timer, |
313 | MACHINE_END | 314 | MACHINE_END |
diff --git a/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c b/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c index 02ff45f3e2e3..b080c6966d10 100644 --- a/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c +++ b/arch/arm/mach-orion5x/rd88f6183ap-ge-setup.c | |||
@@ -126,6 +126,7 @@ MACHINE_START(RD88F6183AP_GE, "Marvell Orion-1-90 AP GE Reference Design") | |||
126 | .boot_params = 0x00000100, | 126 | .boot_params = 0x00000100, |
127 | .init_machine = rd88f6183ap_ge_init, | 127 | .init_machine = rd88f6183ap_ge_init, |
128 | .map_io = orion5x_map_io, | 128 | .map_io = orion5x_map_io, |
129 | .init_early = orion5x_init_early, | ||
129 | .init_irq = orion5x_init_irq, | 130 | .init_irq = orion5x_init_irq, |
130 | .timer = &orion5x_timer, | 131 | .timer = &orion5x_timer, |
131 | .fixup = tag_fixup_mem32, | 132 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/terastation_pro2-setup.c b/arch/arm/mach-orion5x/terastation_pro2-setup.c index 4403fae5ab0e..5653ee6c71d8 100644 --- a/arch/arm/mach-orion5x/terastation_pro2-setup.c +++ b/arch/arm/mach-orion5x/terastation_pro2-setup.c | |||
@@ -361,6 +361,7 @@ MACHINE_START(TERASTATION_PRO2, "Buffalo Terastation Pro II/Live") | |||
361 | .boot_params = 0x00000100, | 361 | .boot_params = 0x00000100, |
362 | .init_machine = tsp2_init, | 362 | .init_machine = tsp2_init, |
363 | .map_io = orion5x_map_io, | 363 | .map_io = orion5x_map_io, |
364 | .init_early = orion5x_init_early, | ||
364 | .init_irq = orion5x_init_irq, | 365 | .init_irq = orion5x_init_irq, |
365 | .timer = &orion5x_timer, | 366 | .timer = &orion5x_timer, |
366 | .fixup = tag_fixup_mem32, | 367 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c index 1e196129d763..8bbd27ea6735 100644 --- a/arch/arm/mach-orion5x/ts209-setup.c +++ b/arch/arm/mach-orion5x/ts209-setup.c | |||
@@ -325,6 +325,7 @@ MACHINE_START(TS209, "QNAP TS-109/TS-209") | |||
325 | .boot_params = 0x00000100, | 325 | .boot_params = 0x00000100, |
326 | .init_machine = qnap_ts209_init, | 326 | .init_machine = qnap_ts209_init, |
327 | .map_io = orion5x_map_io, | 327 | .map_io = orion5x_map_io, |
328 | .init_early = orion5x_init_early, | ||
328 | .init_irq = orion5x_init_irq, | 329 | .init_irq = orion5x_init_irq, |
329 | .timer = &orion5x_timer, | 330 | .timer = &orion5x_timer, |
330 | .fixup = tag_fixup_mem32, | 331 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/ts409-setup.c b/arch/arm/mach-orion5x/ts409-setup.c index 428af2046e36..92f393f08fa4 100644 --- a/arch/arm/mach-orion5x/ts409-setup.c +++ b/arch/arm/mach-orion5x/ts409-setup.c | |||
@@ -314,6 +314,7 @@ MACHINE_START(TS409, "QNAP TS-409") | |||
314 | .boot_params = 0x00000100, | 314 | .boot_params = 0x00000100, |
315 | .init_machine = qnap_ts409_init, | 315 | .init_machine = qnap_ts409_init, |
316 | .map_io = orion5x_map_io, | 316 | .map_io = orion5x_map_io, |
317 | .init_early = orion5x_init_early, | ||
317 | .init_irq = orion5x_init_irq, | 318 | .init_irq = orion5x_init_irq, |
318 | .timer = &orion5x_timer, | 319 | .timer = &orion5x_timer, |
319 | .fixup = tag_fixup_mem32, | 320 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index a00c4f671f56..f4ff53c9fb39 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
@@ -613,6 +613,7 @@ MACHINE_START(TS78XX, "Technologic Systems TS-78xx SBC") | |||
613 | .boot_params = 0x00000100, | 613 | .boot_params = 0x00000100, |
614 | .init_machine = ts78xx_init, | 614 | .init_machine = ts78xx_init, |
615 | .map_io = ts78xx_map_io, | 615 | .map_io = ts78xx_map_io, |
616 | .init_early = orion5x_init_early, | ||
616 | .init_irq = orion5x_init_irq, | 617 | .init_irq = orion5x_init_irq, |
617 | .timer = &orion5x_timer, | 618 | .timer = &orion5x_timer, |
618 | MACHINE_END | 619 | MACHINE_END |
diff --git a/arch/arm/mach-orion5x/wnr854t-setup.c b/arch/arm/mach-orion5x/wnr854t-setup.c index 7994d6ec08a8..4e5216be0745 100644 --- a/arch/arm/mach-orion5x/wnr854t-setup.c +++ b/arch/arm/mach-orion5x/wnr854t-setup.c | |||
@@ -175,6 +175,7 @@ MACHINE_START(WNR854T, "Netgear WNR854T") | |||
175 | .boot_params = 0x00000100, | 175 | .boot_params = 0x00000100, |
176 | .init_machine = wnr854t_init, | 176 | .init_machine = wnr854t_init, |
177 | .map_io = orion5x_map_io, | 177 | .map_io = orion5x_map_io, |
178 | .init_early = orion5x_init_early, | ||
178 | .init_irq = orion5x_init_irq, | 179 | .init_irq = orion5x_init_irq, |
179 | .timer = &orion5x_timer, | 180 | .timer = &orion5x_timer, |
180 | .fixup = tag_fixup_mem32, | 181 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/mach-orion5x/wrt350n-v2-setup.c b/arch/arm/mach-orion5x/wrt350n-v2-setup.c index a5989b7eb53e..fab79d09cc5c 100644 --- a/arch/arm/mach-orion5x/wrt350n-v2-setup.c +++ b/arch/arm/mach-orion5x/wrt350n-v2-setup.c | |||
@@ -263,6 +263,7 @@ MACHINE_START(WRT350N_V2, "Linksys WRT350N v2") | |||
263 | .boot_params = 0x00000100, | 263 | .boot_params = 0x00000100, |
264 | .init_machine = wrt350n_v2_init, | 264 | .init_machine = wrt350n_v2_init, |
265 | .map_io = orion5x_map_io, | 265 | .map_io = orion5x_map_io, |
266 | .init_early = orion5x_init_early, | ||
266 | .init_irq = orion5x_init_irq, | 267 | .init_irq = orion5x_init_irq, |
267 | .timer = &orion5x_timer, | 268 | .timer = &orion5x_timer, |
268 | .fixup = tag_fixup_mem32, | 269 | .fixup = tag_fixup_mem32, |
diff --git a/arch/arm/plat-orion/include/plat/time.h b/arch/arm/plat-orion/include/plat/time.h index c06ca35f3613..4d5f1f6e18df 100644 --- a/arch/arm/plat-orion/include/plat/time.h +++ b/arch/arm/plat-orion/include/plat/time.h | |||
@@ -11,7 +11,10 @@ | |||
11 | #ifndef __PLAT_TIME_H | 11 | #ifndef __PLAT_TIME_H |
12 | #define __PLAT_TIME_H | 12 | #define __PLAT_TIME_H |
13 | 13 | ||
14 | void orion_time_init(unsigned int irq, unsigned int tclk); | 14 | void orion_time_set_base(u32 timer_base); |
15 | |||
16 | void orion_time_init(u32 bridge_base, u32 bridge_timer1_clr_mask, | ||
17 | unsigned int irq, unsigned int tclk); | ||
15 | 18 | ||
16 | 19 | ||
17 | #endif | 20 | #endif |
diff --git a/arch/arm/plat-orion/time.c b/arch/arm/plat-orion/time.c index c3da2478b2aa..742b0323c57b 100644 --- a/arch/arm/plat-orion/time.c +++ b/arch/arm/plat-orion/time.c | |||
@@ -18,28 +18,42 @@ | |||
18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
19 | #include <linux/irq.h> | 19 | #include <linux/irq.h> |
20 | #include <asm/sched_clock.h> | 20 | #include <asm/sched_clock.h> |
21 | #include <asm/mach/time.h> | ||
22 | #include <mach/bridge-regs.h> | ||
23 | #include <mach/hardware.h> | ||
24 | 21 | ||
25 | /* | 22 | /* |
26 | * Number of timer ticks per jiffy. | 23 | * MBus bridge block registers. |
27 | */ | 24 | */ |
28 | static u32 ticks_per_jiffy; | 25 | #define BRIDGE_CAUSE_OFF 0x0110 |
26 | #define BRIDGE_MASK_OFF 0x0114 | ||
27 | #define BRIDGE_INT_TIMER0 0x0002 | ||
28 | #define BRIDGE_INT_TIMER1 0x0004 | ||
29 | 29 | ||
30 | 30 | ||
31 | /* | 31 | /* |
32 | * Timer block registers. | 32 | * Timer block registers. |
33 | */ | 33 | */ |
34 | #define TIMER_CTRL (TIMER_VIRT_BASE + 0x0000) | 34 | #define TIMER_CTRL_OFF 0x0000 |
35 | #define TIMER0_EN 0x0001 | 35 | #define TIMER0_EN 0x0001 |
36 | #define TIMER0_RELOAD_EN 0x0002 | 36 | #define TIMER0_RELOAD_EN 0x0002 |
37 | #define TIMER1_EN 0x0004 | 37 | #define TIMER1_EN 0x0004 |
38 | #define TIMER1_RELOAD_EN 0x0008 | 38 | #define TIMER1_RELOAD_EN 0x0008 |
39 | #define TIMER0_RELOAD (TIMER_VIRT_BASE + 0x0010) | 39 | #define TIMER0_RELOAD_OFF 0x0010 |
40 | #define TIMER0_VAL (TIMER_VIRT_BASE + 0x0014) | 40 | #define TIMER0_VAL_OFF 0x0014 |
41 | #define TIMER1_RELOAD (TIMER_VIRT_BASE + 0x0018) | 41 | #define TIMER1_RELOAD_OFF 0x0018 |
42 | #define TIMER1_VAL (TIMER_VIRT_BASE + 0x001c) | 42 | #define TIMER1_VAL_OFF 0x001c |
43 | |||
44 | |||
45 | /* | ||
46 | * SoC-specific data. | ||
47 | */ | ||
48 | static void __iomem *bridge_base; | ||
49 | static u32 bridge_timer1_clr_mask; | ||
50 | static void __iomem *timer_base; | ||
51 | |||
52 | |||
53 | /* | ||
54 | * Number of timer ticks per jiffy. | ||
55 | */ | ||
56 | static u32 ticks_per_jiffy; | ||
43 | 57 | ||
44 | 58 | ||
45 | /* | 59 | /* |
@@ -50,14 +64,14 @@ static DEFINE_CLOCK_DATA(cd); | |||
50 | 64 | ||
51 | unsigned long long notrace sched_clock(void) | 65 | unsigned long long notrace sched_clock(void) |
52 | { | 66 | { |
53 | u32 cyc = 0xffffffff - readl(TIMER0_VAL); | 67 | u32 cyc = ~readl(timer_base + TIMER0_VAL_OFF); |
54 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); | 68 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); |
55 | } | 69 | } |
56 | 70 | ||
57 | 71 | ||
58 | static void notrace orion_update_sched_clock(void) | 72 | static void notrace orion_update_sched_clock(void) |
59 | { | 73 | { |
60 | u32 cyc = 0xffffffff - readl(TIMER0_VAL); | 74 | u32 cyc = ~readl(timer_base + TIMER0_VAL_OFF); |
61 | update_sched_clock(&cd, cyc, (u32)~0); | 75 | update_sched_clock(&cd, cyc, (u32)~0); |
62 | } | 76 | } |
63 | 77 | ||
@@ -71,7 +85,7 @@ static void __init setup_sched_clock(unsigned long tclk) | |||
71 | */ | 85 | */ |
72 | static cycle_t orion_clksrc_read(struct clocksource *cs) | 86 | static cycle_t orion_clksrc_read(struct clocksource *cs) |
73 | { | 87 | { |
74 | return 0xffffffff - readl(TIMER0_VAL); | 88 | return 0xffffffff - readl(timer_base + TIMER0_VAL_OFF); |
75 | } | 89 | } |
76 | 90 | ||
77 | static struct clocksource orion_clksrc = { | 91 | static struct clocksource orion_clksrc = { |
@@ -101,23 +115,23 @@ orion_clkevt_next_event(unsigned long delta, struct clock_event_device *dev) | |||
101 | /* | 115 | /* |
102 | * Clear and enable clockevent timer interrupt. | 116 | * Clear and enable clockevent timer interrupt. |
103 | */ | 117 | */ |
104 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); | 118 | writel(bridge_timer1_clr_mask, bridge_base + BRIDGE_CAUSE_OFF); |
105 | 119 | ||
106 | u = readl(BRIDGE_MASK); | 120 | u = readl(bridge_base + BRIDGE_MASK_OFF); |
107 | u |= BRIDGE_INT_TIMER1; | 121 | u |= BRIDGE_INT_TIMER1; |
108 | writel(u, BRIDGE_MASK); | 122 | writel(u, bridge_base + BRIDGE_MASK_OFF); |
109 | 123 | ||
110 | /* | 124 | /* |
111 | * Setup new clockevent timer value. | 125 | * Setup new clockevent timer value. |
112 | */ | 126 | */ |
113 | writel(delta, TIMER1_VAL); | 127 | writel(delta, timer_base + TIMER1_VAL_OFF); |
114 | 128 | ||
115 | /* | 129 | /* |
116 | * Enable the timer. | 130 | * Enable the timer. |
117 | */ | 131 | */ |
118 | u = readl(TIMER_CTRL); | 132 | u = readl(timer_base + TIMER_CTRL_OFF); |
119 | u = (u & ~TIMER1_RELOAD_EN) | TIMER1_EN; | 133 | u = (u & ~TIMER1_RELOAD_EN) | TIMER1_EN; |
120 | writel(u, TIMER_CTRL); | 134 | writel(u, timer_base + TIMER_CTRL_OFF); |
121 | 135 | ||
122 | local_irq_restore(flags); | 136 | local_irq_restore(flags); |
123 | 137 | ||
@@ -135,37 +149,38 @@ orion_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
135 | /* | 149 | /* |
136 | * Setup timer to fire at 1/HZ intervals. | 150 | * Setup timer to fire at 1/HZ intervals. |
137 | */ | 151 | */ |
138 | writel(ticks_per_jiffy - 1, TIMER1_RELOAD); | 152 | writel(ticks_per_jiffy - 1, timer_base + TIMER1_RELOAD_OFF); |
139 | writel(ticks_per_jiffy - 1, TIMER1_VAL); | 153 | writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL_OFF); |
140 | 154 | ||
141 | /* | 155 | /* |
142 | * Enable timer interrupt. | 156 | * Enable timer interrupt. |
143 | */ | 157 | */ |
144 | u = readl(BRIDGE_MASK); | 158 | u = readl(bridge_base + BRIDGE_MASK_OFF); |
145 | writel(u | BRIDGE_INT_TIMER1, BRIDGE_MASK); | 159 | writel(u | BRIDGE_INT_TIMER1, bridge_base + BRIDGE_MASK_OFF); |
146 | 160 | ||
147 | /* | 161 | /* |
148 | * Enable timer. | 162 | * Enable timer. |
149 | */ | 163 | */ |
150 | u = readl(TIMER_CTRL); | 164 | u = readl(timer_base + TIMER_CTRL_OFF); |
151 | writel(u | TIMER1_EN | TIMER1_RELOAD_EN, TIMER_CTRL); | 165 | writel(u | TIMER1_EN | TIMER1_RELOAD_EN, |
166 | timer_base + TIMER_CTRL_OFF); | ||
152 | } else { | 167 | } else { |
153 | /* | 168 | /* |
154 | * Disable timer. | 169 | * Disable timer. |
155 | */ | 170 | */ |
156 | u = readl(TIMER_CTRL); | 171 | u = readl(timer_base + TIMER_CTRL_OFF); |
157 | writel(u & ~TIMER1_EN, TIMER_CTRL); | 172 | writel(u & ~TIMER1_EN, timer_base + TIMER_CTRL_OFF); |
158 | 173 | ||
159 | /* | 174 | /* |
160 | * Disable timer interrupt. | 175 | * Disable timer interrupt. |
161 | */ | 176 | */ |
162 | u = readl(BRIDGE_MASK); | 177 | u = readl(bridge_base + BRIDGE_MASK_OFF); |
163 | writel(u & ~BRIDGE_INT_TIMER1, BRIDGE_MASK); | 178 | writel(u & ~BRIDGE_INT_TIMER1, bridge_base + BRIDGE_MASK_OFF); |
164 | 179 | ||
165 | /* | 180 | /* |
166 | * ACK pending timer interrupt. | 181 | * ACK pending timer interrupt. |
167 | */ | 182 | */ |
168 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); | 183 | writel(bridge_timer1_clr_mask, bridge_base + BRIDGE_CAUSE_OFF); |
169 | 184 | ||
170 | } | 185 | } |
171 | local_irq_restore(flags); | 186 | local_irq_restore(flags); |
@@ -185,7 +200,7 @@ static irqreturn_t orion_timer_interrupt(int irq, void *dev_id) | |||
185 | /* | 200 | /* |
186 | * ACK timer interrupt and call event handler. | 201 | * ACK timer interrupt and call event handler. |
187 | */ | 202 | */ |
188 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); | 203 | writel(bridge_timer1_clr_mask, bridge_base + BRIDGE_CAUSE_OFF); |
189 | orion_clkevt.event_handler(&orion_clkevt); | 204 | orion_clkevt.event_handler(&orion_clkevt); |
190 | 205 | ||
191 | return IRQ_HANDLED; | 206 | return IRQ_HANDLED; |
@@ -197,31 +212,45 @@ static struct irqaction orion_timer_irq = { | |||
197 | .handler = orion_timer_interrupt | 212 | .handler = orion_timer_interrupt |
198 | }; | 213 | }; |
199 | 214 | ||
200 | void __init orion_time_init(unsigned int irq, unsigned int tclk) | 215 | void __init |
216 | orion_time_set_base(u32 _timer_base) | ||
217 | { | ||
218 | timer_base = (void __iomem *)_timer_base; | ||
219 | } | ||
220 | |||
221 | void __init | ||
222 | orion_time_init(u32 _bridge_base, u32 _bridge_timer1_clr_mask, | ||
223 | unsigned int irq, unsigned int tclk) | ||
201 | { | 224 | { |
202 | u32 u; | 225 | u32 u; |
203 | 226 | ||
227 | /* | ||
228 | * Set SoC-specific data. | ||
229 | */ | ||
230 | bridge_base = (void __iomem *)_bridge_base; | ||
231 | bridge_timer1_clr_mask = _bridge_timer1_clr_mask; | ||
232 | |||
204 | ticks_per_jiffy = (tclk + HZ/2) / HZ; | 233 | ticks_per_jiffy = (tclk + HZ/2) / HZ; |
205 | 234 | ||
206 | /* | 235 | /* |
207 | * Set scale and timer for sched_clock | 236 | * Set scale and timer for sched_clock. |
208 | */ | 237 | */ |
209 | setup_sched_clock(tclk); | 238 | setup_sched_clock(tclk); |
210 | 239 | ||
211 | /* | 240 | /* |
212 | * Setup free-running clocksource timer (interrupts | 241 | * Setup free-running clocksource timer (interrupts |
213 | * disabled.) | 242 | * disabled). |
214 | */ | 243 | */ |
215 | writel(0xffffffff, TIMER0_VAL); | 244 | writel(0xffffffff, timer_base + TIMER0_VAL_OFF); |
216 | writel(0xffffffff, TIMER0_RELOAD); | 245 | writel(0xffffffff, timer_base + TIMER0_RELOAD_OFF); |
217 | u = readl(BRIDGE_MASK); | 246 | u = readl(bridge_base + BRIDGE_MASK_OFF); |
218 | writel(u & ~BRIDGE_INT_TIMER0, BRIDGE_MASK); | 247 | writel(u & ~BRIDGE_INT_TIMER0, bridge_base + BRIDGE_MASK_OFF); |
219 | u = readl(TIMER_CTRL); | 248 | u = readl(timer_base + TIMER_CTRL_OFF); |
220 | writel(u | TIMER0_EN | TIMER0_RELOAD_EN, TIMER_CTRL); | 249 | writel(u | TIMER0_EN | TIMER0_RELOAD_EN, timer_base + TIMER_CTRL_OFF); |
221 | clocksource_register_hz(&orion_clksrc, tclk); | 250 | clocksource_register_hz(&orion_clksrc, tclk); |
222 | 251 | ||
223 | /* | 252 | /* |
224 | * Setup clockevent timer (interrupt-driven.) | 253 | * Setup clockevent timer (interrupt-driven). |
225 | */ | 254 | */ |
226 | setup_irq(irq, &orion_timer_irq); | 255 | setup_irq(irq, &orion_timer_irq); |
227 | orion_clkevt.mult = div_sc(tclk, NSEC_PER_SEC, orion_clkevt.shift); | 256 | orion_clkevt.mult = div_sc(tclk, NSEC_PER_SEC, orion_clkevt.shift); |