Commit 4ee1f6b5 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Nicolas Pitre

ARM: Remove dependency of plat-orion time code on mach directory includes.

This patch makes the various mach dirs that use the plat-orion time
code pass in timer and bridge addresses explicitly, instead of having
plat-orion get those values by including a mach dir include file --
the latter mechanism is problematic if you want to support multiple
ARM platforms in the same kernel image.
Signed-off-by: default avatarLennert Buytenhek <buytenh@secretlab.ca>
Signed-off-by: default avatarNicolas Pitre <nico@fluxnic.net>
parent 40ff15a6
...@@ -90,6 +90,7 @@ MACHINE_START(CM_A510, "Compulab CM-A510 Board") ...@@ -90,6 +90,7 @@ MACHINE_START(CM_A510, "Compulab CM-A510 Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = cm_a510_init, .init_machine = cm_a510_init,
.map_io = dove_map_io, .map_io = dove_map_io,
.init_early = dove_init_early,
.init_irq = dove_init_irq, .init_irq = dove_init_irq,
.timer = &dove_timer, .timer = &dove_timer,
MACHINE_END MACHINE_END
...@@ -532,6 +532,11 @@ void __init dove_i2c_init(void) ...@@ -532,6 +532,11 @@ void __init dove_i2c_init(void)
/***************************************************************************** /*****************************************************************************
* Time handling * Time handling
****************************************************************************/ ****************************************************************************/
void __init dove_init_early(void)
{
orion_time_set_base(TIMER_VIRT_BASE);
}
static int get_tclk(void) static int get_tclk(void)
{ {
/* use DOVE_RESET_SAMPLE_HI/LO to detect tclk */ /* use DOVE_RESET_SAMPLE_HI/LO to detect tclk */
...@@ -540,7 +545,8 @@ static int get_tclk(void) ...@@ -540,7 +545,8 @@ static int get_tclk(void)
static void dove_timer_init(void) static void dove_timer_init(void)
{ {
orion_time_init(IRQ_DOVE_BRIDGE, get_tclk()); orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR,
IRQ_DOVE_BRIDGE, get_tclk());
} }
struct sys_timer dove_timer = { struct sys_timer dove_timer = {
......
...@@ -22,6 +22,7 @@ extern struct mbus_dram_target_info dove_mbus_dram_info; ...@@ -22,6 +22,7 @@ extern struct mbus_dram_target_info dove_mbus_dram_info;
*/ */
void dove_map_io(void); void dove_map_io(void);
void dove_init(void); void dove_init(void);
void dove_init_early(void);
void dove_init_irq(void); void dove_init_irq(void);
void dove_setup_cpu_mbus(void); void dove_setup_cpu_mbus(void);
void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data); void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data);
......
...@@ -97,6 +97,7 @@ MACHINE_START(DOVE_DB, "Marvell DB-MV88AP510-BP Development Board") ...@@ -97,6 +97,7 @@ MACHINE_START(DOVE_DB, "Marvell DB-MV88AP510-BP Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = dove_db_init, .init_machine = dove_db_init,
.map_io = dove_map_io, .map_io = dove_map_io,
.init_early = dove_init_early,
.init_irq = dove_init_irq, .init_irq = dove_init_irq,
.timer = &dove_timer, .timer = &dove_timer,
MACHINE_END MACHINE_END
...@@ -26,10 +26,6 @@ ...@@ -26,10 +26,6 @@
#define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c)
#define SOFT_RESET 0x00000001 #define SOFT_RESET 0x00000001
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
#define BRIDGE_INT_TIMER0 0x0002
#define BRIDGE_INT_TIMER1 0x0004
#define BRIDGE_INT_TIMER1_CLR (~0x0004) #define BRIDGE_INT_TIMER1_CLR (~0x0004)
#define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200)
......
...@@ -847,6 +847,11 @@ static void __init kirkwood_wdt_init(void) ...@@ -847,6 +847,11 @@ static void __init kirkwood_wdt_init(void)
/***************************************************************************** /*****************************************************************************
* Time handling * Time handling
****************************************************************************/ ****************************************************************************/
void __init kirkwood_init_early(void)
{
orion_time_set_base(TIMER_VIRT_BASE);
}
int kirkwood_tclk; int kirkwood_tclk;
static int __init kirkwood_find_tclk(void) static int __init kirkwood_find_tclk(void)
...@@ -865,7 +870,9 @@ static int __init kirkwood_find_tclk(void) ...@@ -865,7 +870,9 @@ static int __init kirkwood_find_tclk(void)
static void __init kirkwood_timer_init(void) static void __init kirkwood_timer_init(void)
{ {
kirkwood_tclk = kirkwood_find_tclk(); kirkwood_tclk = kirkwood_find_tclk();
orion_time_init(IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk);
orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR,
IRQ_KIRKWOOD_BRIDGE, kirkwood_tclk);
} }
struct sys_timer kirkwood_timer = { struct sys_timer kirkwood_timer = {
......
...@@ -27,6 +27,7 @@ struct kirkwood_asoc_platform_data; ...@@ -27,6 +27,7 @@ struct kirkwood_asoc_platform_data;
*/ */
void kirkwood_map_io(void); void kirkwood_map_io(void);
void kirkwood_init(void); void kirkwood_init(void);
void kirkwood_init_early(void);
void kirkwood_init_irq(void); void kirkwood_init_irq(void);
extern struct mbus_dram_target_info kirkwood_mbus_dram_info; extern struct mbus_dram_target_info kirkwood_mbus_dram_info;
......
...@@ -224,6 +224,7 @@ MACHINE_START(D2NET_V2, "LaCie d2 Network v2") ...@@ -224,6 +224,7 @@ MACHINE_START(D2NET_V2, "LaCie d2 Network v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = d2net_v2_init, .init_machine = d2net_v2_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -100,6 +100,7 @@ MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board") ...@@ -100,6 +100,7 @@ MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = db88f6281_init, .init_machine = db88f6281_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -105,6 +105,7 @@ MACHINE_START(DOCKSTAR, "Seagate FreeAgent DockStar") ...@@ -105,6 +105,7 @@ MACHINE_START(DOCKSTAR, "Seagate FreeAgent DockStar")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = dockstar_init, .init_machine = dockstar_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -124,6 +124,7 @@ MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board") ...@@ -124,6 +124,7 @@ MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = guruplug_init, .init_machine = guruplug_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -29,9 +29,6 @@ ...@@ -29,9 +29,6 @@
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
#define WDT_INT_REQ 0x0008 #define WDT_INT_REQ 0x0008
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
#define BRIDGE_INT_TIMER0 0x0002
#define BRIDGE_INT_TIMER1 0x0004
#define BRIDGE_INT_TIMER1_CLR (~0x0004) #define BRIDGE_INT_TIMER1_CLR (~0x0004)
#define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200)
......
...@@ -166,6 +166,7 @@ MACHINE_START(MV88F6281GTW_GE, "Marvell 88F6281 GTW GE Board") ...@@ -166,6 +166,7 @@ MACHINE_START(MV88F6281GTW_GE, "Marvell 88F6281 GTW GE Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = mv88f6281gtw_ge_init, .init_machine = mv88f6281gtw_ge_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -261,6 +261,7 @@ MACHINE_START(NETSPACE_V2, "LaCie Network Space v2") ...@@ -261,6 +261,7 @@ MACHINE_START(NETSPACE_V2, "LaCie Network Space v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = netspace_v2_init, .init_machine = netspace_v2_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -271,6 +272,7 @@ MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2") ...@@ -271,6 +272,7 @@ MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = netspace_v2_init, .init_machine = netspace_v2_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -281,6 +283,7 @@ MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2") ...@@ -281,6 +283,7 @@ MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = netspace_v2_init, .init_machine = netspace_v2_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
......
...@@ -402,6 +402,7 @@ MACHINE_START(NET2BIG_V2, "LaCie 2Big Network v2") ...@@ -402,6 +402,7 @@ MACHINE_START(NET2BIG_V2, "LaCie 2Big Network v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = netxbig_v2_init, .init_machine = netxbig_v2_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -412,6 +413,7 @@ MACHINE_START(NET5BIG_V2, "LaCie 5Big Network v2") ...@@ -412,6 +413,7 @@ MACHINE_START(NET5BIG_V2, "LaCie 5Big Network v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = netxbig_v2_init, .init_machine = netxbig_v2_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
......
...@@ -217,6 +217,7 @@ MACHINE_START(OPENRD_BASE, "Marvell OpenRD Base Board") ...@@ -217,6 +217,7 @@ MACHINE_START(OPENRD_BASE, "Marvell OpenRD Base Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = openrd_init, .init_machine = openrd_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -228,6 +229,7 @@ MACHINE_START(OPENRD_CLIENT, "Marvell OpenRD Client Board") ...@@ -228,6 +229,7 @@ MACHINE_START(OPENRD_CLIENT, "Marvell OpenRD Client Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = openrd_init, .init_machine = openrd_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -239,6 +241,7 @@ MACHINE_START(OPENRD_ULTIMATE, "Marvell OpenRD Ultimate Board") ...@@ -239,6 +241,7 @@ MACHINE_START(OPENRD_ULTIMATE, "Marvell OpenRD Ultimate Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = openrd_init, .init_machine = openrd_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
......
...@@ -82,6 +82,7 @@ MACHINE_START(RD88F6192_NAS, "Marvell RD-88F6192-NAS Development Board") ...@@ -82,6 +82,7 @@ MACHINE_START(RD88F6192_NAS, "Marvell RD-88F6192-NAS Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd88f6192_init, .init_machine = rd88f6192_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -118,6 +118,7 @@ MACHINE_START(RD88F6281, "Marvell RD-88F6281 Reference Board") ...@@ -118,6 +118,7 @@ MACHINE_START(RD88F6281, "Marvell RD-88F6281 Reference Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd88f6281_init, .init_machine = rd88f6281_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -134,6 +134,7 @@ MACHINE_START(SHEEVAPLUG, "Marvell SheevaPlug Reference Board") ...@@ -134,6 +134,7 @@ MACHINE_START(SHEEVAPLUG, "Marvell SheevaPlug Reference Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = sheevaplug_init, .init_machine = sheevaplug_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -144,6 +145,7 @@ MACHINE_START(ESATA_SHEEVAPLUG, "Marvell eSATA SheevaPlug Reference Board") ...@@ -144,6 +145,7 @@ MACHINE_START(ESATA_SHEEVAPLUG, "Marvell eSATA SheevaPlug Reference Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = sheevaplug_init, .init_machine = sheevaplug_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
......
...@@ -204,6 +204,7 @@ MACHINE_START(T5325, "HP t5325 Thin Client") ...@@ -204,6 +204,7 @@ MACHINE_START(T5325, "HP t5325 Thin Client")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = hp_t5325_init, .init_machine = hp_t5325_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -135,6 +135,7 @@ MACHINE_START(TS219, "QNAP TS-119/TS-219") ...@@ -135,6 +135,7 @@ MACHINE_START(TS219, "QNAP TS-119/TS-219")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = qnap_ts219_init, .init_machine = qnap_ts219_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -179,6 +179,7 @@ MACHINE_START(TS41X, "QNAP TS-41x") ...@@ -179,6 +179,7 @@ MACHINE_START(TS41X, "QNAP TS-41x")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = qnap_ts41x_init, .init_machine = qnap_ts41x_init,
.map_io = kirkwood_map_io, .map_io = kirkwood_map_io,
.init_early = kirkwood_init_early,
.init_irq = kirkwood_init_irq, .init_irq = kirkwood_init_irq,
.timer = &kirkwood_timer, .timer = &kirkwood_timer,
MACHINE_END MACHINE_END
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <asm/timex.h> #include <asm/timex.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <mach/bridge-regs.h>
#include <mach/loki.h> #include <mach/loki.h>
#include <plat/orion_nand.h> #include <plat/orion_nand.h>
#include <plat/time.h> #include <plat/time.h>
...@@ -290,9 +291,15 @@ void __init loki_uart1_init(void) ...@@ -290,9 +291,15 @@ void __init loki_uart1_init(void)
/***************************************************************************** /*****************************************************************************
* Time handling * Time handling
****************************************************************************/ ****************************************************************************/
void __init loki_init_early(void)
{
orion_time_set_base(TIMER_VIRT_BASE);
}
static void loki_timer_init(void) static void loki_timer_init(void)
{ {
orion_time_init(IRQ_LOKI_BRIDGE, LOKI_TCLK); orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR,
IRQ_LOKI_BRIDGE, LOKI_TCLK);
} }
struct sys_timer loki_timer = { struct sys_timer loki_timer = {
......
...@@ -18,6 +18,7 @@ struct mv643xx_eth_platform_data; ...@@ -18,6 +18,7 @@ struct mv643xx_eth_platform_data;
*/ */
void loki_map_io(void); void loki_map_io(void);
void loki_init(void); void loki_init(void);
void loki_init_early(void);
void loki_init_irq(void); void loki_init_irq(void);
extern struct mbus_dram_target_info loki_mbus_dram_info; extern struct mbus_dram_target_info loki_mbus_dram_info;
......
...@@ -17,11 +17,6 @@ ...@@ -17,11 +17,6 @@
#define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c)
#define SOFT_RESET 0x00000001 #define SOFT_RESET 0x00000001
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
#define BRIDGE_INT_TIMER0 0x0002
#define BRIDGE_INT_TIMER1 0x0004
#define BRIDGE_INT_TIMER1_CLR 0x0004 #define BRIDGE_INT_TIMER1_CLR 0x0004
#define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200)
......
...@@ -93,6 +93,7 @@ MACHINE_START(LB88RC8480, "Marvell LB88RC8480 Development Board") ...@@ -93,6 +93,7 @@ MACHINE_START(LB88RC8480, "Marvell LB88RC8480 Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = lb88rc8480_init, .init_machine = lb88rc8480_init,
.map_io = loki_map_io, .map_io = loki_map_io,
.init_early = loki_init_early,
.init_irq = loki_init_irq, .init_irq = loki_init_irq,
.timer = &loki_timer, .timer = &loki_timer,
MACHINE_END MACHINE_END
...@@ -148,6 +148,7 @@ MACHINE_START(TERASTATION_WXL, "Buffalo Nas WXL") ...@@ -148,6 +148,7 @@ MACHINE_START(TERASTATION_WXL, "Buffalo Nas WXL")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = wxl_init, .init_machine = wxl_init,
.map_io = mv78xx0_map_io, .map_io = mv78xx0_map_io,
.init_early = mv78xx0_init_early,
.init_irq = mv78xx0_init_irq, .init_irq = mv78xx0_init_irq,
.timer = &mv78xx0_timer, .timer = &mv78xx0_timer,
MACHINE_END MACHINE_END
...@@ -818,9 +818,15 @@ void __init mv78xx0_uart3_init(void) ...@@ -818,9 +818,15 @@ void __init mv78xx0_uart3_init(void)
/***************************************************************************** /*****************************************************************************
* Time handling * Time handling
****************************************************************************/ ****************************************************************************/
void __init mv78xx0_init_early(void)
{
orion_time_set_base(TIMER_VIRT_BASE);
}
static void mv78xx0_timer_init(void) static void mv78xx0_timer_init(void)
{ {
orion_time_init(IRQ_MV78XX0_TIMER_1, get_tclk()); orion_time_init(BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR,
IRQ_MV78XX0_TIMER_1, get_tclk());
} }
struct sys_timer mv78xx0_timer = { struct sys_timer mv78xx0_timer = {
......
...@@ -20,6 +20,7 @@ struct mv_sata_platform_data; ...@@ -20,6 +20,7 @@ struct mv_sata_platform_data;
int mv78xx0_core_index(void); int mv78xx0_core_index(void);
void mv78xx0_map_io(void); void mv78xx0_map_io(void);
void mv78xx0_init(void); void mv78xx0_init(void);
void mv78xx0_init_early(void);
void mv78xx0_init_irq(void); void mv78xx0_init_irq(void);
extern struct mbus_dram_target_info mv78xx0_mbus_dram_info; extern struct mbus_dram_target_info mv78xx0_mbus_dram_info;
......
...@@ -96,6 +96,7 @@ MACHINE_START(DB78X00_BP, "Marvell DB-78x00-BP Development Board") ...@@ -96,6 +96,7 @@ MACHINE_START(DB78X00_BP, "Marvell DB-78x00-BP Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = db78x00_init, .init_machine = db78x00_init,
.map_io = mv78xx0_map_io, .map_io = mv78xx0_map_io,
.init_early = mv78xx0_init_early,
.init_irq = mv78xx0_init_irq, .init_irq = mv78xx0_init_irq,
.timer = &mv78xx0_timer, .timer = &mv78xx0_timer,
MACHINE_END MACHINE_END
...@@ -20,10 +20,6 @@ ...@@ -20,10 +20,6 @@
#define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c)
#define SOFT_RESET 0x00000001 #define SOFT_RESET 0x00000001
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
#define BRIDGE_INT_TIMER0 0x0002
#define BRIDGE_INT_TIMER1 0x0004
#define BRIDGE_INT_TIMER1_CLR (~0x0004) #define BRIDGE_INT_TIMER1_CLR (~0x0004)
#define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200)
......
...@@ -81,6 +81,7 @@ MACHINE_START(RD78X00_MASA, "Marvell RD-78x00-MASA Development Board") ...@@ -81,6 +81,7 @@ MACHINE_START(RD78X00_MASA, "Marvell RD-78x00-MASA Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd78x00_masa_init, .init_machine = rd78x00_masa_init,
.map_io = mv78xx0_map_io, .map_io = mv78xx0_map_io,
.init_early = mv78xx0_init_early,
.init_irq = mv78xx0_init_irq, .init_irq = mv78xx0_init_irq,
.timer = &mv78xx0_timer, .timer = &mv78xx0_timer,
MACHINE_END MACHINE_END
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <mach/bridge-regs.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/orion5x.h> #include <mach/orion5x.h>
#include <plat/ehci-orion.h> #include <plat/ehci-orion.h>
...@@ -599,6 +600,11 @@ void __init orion5x_wdt_init(void) ...@@ -599,6 +600,11 @@ void __init orion5x_wdt_init(void)
/***************************************************************************** /*****************************************************************************
* Time handling * Time handling
****************************************************************************/ ****************************************************************************/
void __init orion5x_init_early(void)
{
orion_time_set_base(TIMER_VIRT_BASE);
}
int orion5x_tclk; int orion5x_tclk;
int __init orion5x_find_tclk(void) int __init orion5x_find_tclk(void)
...@@ -616,7 +622,9 @@ int __init orion5x_find_tclk(void) ...@@ -616,7 +622,9 @@ int __init orion5x_find_tclk(void)
static void orion5x_timer_init(void) static void orion5x_timer_init(void)
{ {
orion5x_tclk = orion5x_find_tclk(); orion5x_tclk = orion5x_find_tclk();
orion_time_init(IRQ_ORION5X_BRIDGE, orion5x_tclk);
orion_time_init(ORION5X_BRIDGE_VIRT_BASE, BRIDGE_INT_TIMER1_CLR,
IRQ_ORION5X_BRIDGE, orion5x_tclk);
} }
struct sys_timer orion5x_timer = { struct sys_timer orion5x_timer = {
......
...@@ -9,6 +9,7 @@ struct mv_sata_platform_data; ...@@ -9,6 +9,7 @@ struct mv_sata_platform_data;
* Basic Orion init functions used early by machine-setup. * Basic Orion init functions used early by machine-setup.
*/ */
void orion5x_map_io(void); void orion5x_map_io(void);
void orion5x_init_early(void);
void orion5x_init_irq(void); void orion5x_init_irq(void);
void orion5x_init(void); void orion5x_init(void);
extern int orion5x_tclk; extern int orion5x_tclk;
......
...@@ -339,6 +339,7 @@ MACHINE_START(D2NET, "LaCie d2 Network") ...@@ -339,6 +339,7 @@ MACHINE_START(D2NET, "LaCie d2 Network")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = d2net_init, .init_machine = d2net_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
...@@ -350,6 +351,7 @@ MACHINE_START(BIGDISK, "LaCie Big Disk Network") ...@@ -350,6 +351,7 @@ MACHINE_START(BIGDISK, "LaCie Big Disk Network")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = d2net_init, .init_machine = d2net_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -361,6 +361,7 @@ MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board") ...@@ -361,6 +361,7 @@ MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = db88f5281_init, .init_machine = db88f5281_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
MACHINE_END MACHINE_END
...@@ -733,6 +733,7 @@ MACHINE_START(DNS323, "D-Link DNS-323") ...@@ -733,6 +733,7 @@ MACHINE_START(DNS323, "D-Link DNS-323")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = dns323_init, .init_machine = dns323_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -254,6 +254,7 @@ MACHINE_START(EDMINI_V2, "LaCie Ethernet Disk mini V2") ...@@ -254,6 +254,7 @@ MACHINE_START(EDMINI_V2, "LaCie Ethernet Disk mini V2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = edmini_v2_init, .init_machine = edmini_v2_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -22,14 +22,12 @@ ...@@ -22,14 +22,12 @@
#define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c) #define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c)
#define BRIDGE_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x110)
#define POWER_MNG_CTRL_REG (ORION5X_BRIDGE_VIRT_BASE | 0x11C) #define POWER_MNG_CTRL_REG (ORION5X_BRIDGE_VIRT_BASE | 0x11C)
#define BRIDGE_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x110)
#define WDT_INT_REQ 0x0008 #define WDT_INT_REQ 0x0008
#define BRIDGE_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x114)
#define BRIDGE_INT_TIMER0 0x0002
#define BRIDGE_INT_TIMER1 0x0004
#define BRIDGE_INT_TIMER1_CLR (~0x0004) #define BRIDGE_INT_TIMER1_CLR (~0x0004)
#define MAIN_IRQ_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x200) #define MAIN_IRQ_CAUSE (ORION5X_BRIDGE_VIRT_BASE | 0x200)
......
...@@ -382,6 +382,7 @@ MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro") ...@@ -382,6 +382,7 @@ MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = kurobox_pro_init, .init_machine = kurobox_pro_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
...@@ -394,6 +395,7 @@ MACHINE_START(LINKSTATION_PRO, "Buffalo Linkstation Pro/Live") ...@@ -394,6 +395,7 @@ MACHINE_START(LINKSTATION_PRO, "Buffalo Linkstation Pro/Live")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = kurobox_pro_init, .init_machine = kurobox_pro_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -321,6 +321,7 @@ MACHINE_START(LINKSTATION_LSCHL, "Buffalo Linkstation LiveV3 (LS-CHL)") ...@@ -321,6 +321,7 @@ MACHINE_START(LINKSTATION_LSCHL, "Buffalo Linkstation LiveV3 (LS-CHL)")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = lschl_init, .init_machine = lschl_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -268,6 +268,7 @@ MACHINE_START(LINKSTATION_LS_HGL, "Buffalo Linkstation LS-HGL") ...@@ -268,6 +268,7 @@ MACHINE_START(LINKSTATION_LS_HGL, "Buffalo Linkstation LS-HGL")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = ls_hgl_init, .init_machine = ls_hgl_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -270,6 +270,7 @@ MACHINE_START(LINKSTATION_MINI, "Buffalo Linkstation Mini") ...@@ -270,6 +270,7 @@ MACHINE_START(LINKSTATION_MINI, "Buffalo Linkstation Mini")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = lsmini_init, .init_machine = lsmini_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -264,6 +264,7 @@ MACHINE_START(MSS2, "Maxtor Shared Storage II") ...@@ -264,6 +264,7 @@ MACHINE_START(MSS2, "Maxtor Shared Storage II")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = mss2_init, .init_machine = mss2_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32 .fixup = tag_fixup_mem32
......
...@@ -232,6 +232,7 @@ MACHINE_START(MV2120, "HP Media Vault mv2120") ...@@ -232,6 +232,7 @@ MACHINE_START(MV2120, "HP Media Vault mv2120")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = mv2120_init, .init_machine = mv2120_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32 .fixup = tag_fixup_mem32
......
...@@ -422,6 +422,7 @@ MACHINE_START(NET2BIG, "LaCie 2Big Network") ...@@ -422,6 +422,7 @@ MACHINE_START(NET2BIG, "LaCie 2Big Network")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = net2big_init, .init_machine = net2big_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -172,6 +172,7 @@ MACHINE_START(RD88F5181L_FXO, "Marvell Orion-VoIP FXO Reference Design") ...@@ -172,6 +172,7 @@ MACHINE_START(RD88F5181L_FXO, "Marvell Orion-VoIP FXO Reference Design")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd88f5181l_fxo_init, .init_machine = rd88f5181l_fxo_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -184,6 +184,7 @@ MACHINE_START(RD88F5181L_GE, "Marvell Orion-VoIP GE Reference Design") ...@@ -184,6 +184,7 @@ MACHINE_START(RD88F5181L_GE, "Marvell Orion-VoIP GE Reference Design")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd88f5181l_ge_init, .init_machine = rd88f5181l_ge_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -308,6 +308,7 @@ MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") ...@@ -308,6 +308,7 @@ MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd88f5182_init, .init_machine = rd88f5182_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
MACHINE_END MACHINE_END
...@@ -126,6 +126,7 @@ MACHINE_START(RD88F6183AP_GE, "Marvell Orion-1-90 AP GE Reference Design") ...@@ -126,6 +126,7 @@ MACHINE_START(RD88F6183AP_GE, "Marvell Orion-1-90 AP GE Reference Design")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = rd88f6183ap_ge_init, .init_machine = rd88f6183ap_ge_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -361,6 +361,7 @@ MACHINE_START(TERASTATION_PRO2, "Buffalo Terastation Pro II/Live") ...@@ -361,6 +361,7 @@ MACHINE_START(TERASTATION_PRO2, "Buffalo Terastation Pro II/Live")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = tsp2_init, .init_machine = tsp2_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -325,6 +325,7 @@ MACHINE_START(TS209, "QNAP TS-109/TS-209") ...@@ -325,6 +325,7 @@ MACHINE_START(TS209, "QNAP TS-109/TS-209")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = qnap_ts209_init, .init_machine = qnap_ts209_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -314,6 +314,7 @@ MACHINE_START(TS409, "QNAP TS-409") ...@@ -314,6 +314,7 @@ MACHINE_START(TS409, "QNAP TS-409")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = qnap_ts409_init, .init_machine = qnap_ts409_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -613,6 +613,7 @@ MACHINE_START(TS78XX, "Technologic Systems TS-78xx SBC") ...@@ -613,6 +613,7 @@ MACHINE_START(TS78XX, "Technologic Systems TS-78xx SBC")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = ts78xx_init, .init_machine = ts78xx_init,
.map_io = ts78xx_map_io, .map_io = ts78xx_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
MACHINE_END MACHINE_END
...@@ -175,6 +175,7 @@ MACHINE_START(WNR854T, "Netgear WNR854T") ...@@ -175,6 +175,7 @@ MACHINE_START(WNR854T, "Netgear WNR854T")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = wnr854t_init, .init_machine = wnr854t_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -263,6 +263,7 @@ MACHINE_START(WRT350N_V2, "Linksys WRT350N v2") ...@@ -263,6 +263,7 @@ MACHINE_START(WRT350N_V2, "Linksys WRT350N v2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.init_machine = wrt350n_v2_init, .init_machine = wrt350n_v2_init,
.map_io = orion5x_map_io, .map_io = orion5x_map_io,
.init_early = orion5x_init_early,
.init_irq = orion5x_init_irq, .init_irq = orion5x_init_irq,
.timer = &orion5x_timer, .timer = &orion5x_timer,
.fixup = tag_fixup_mem32, .fixup = tag_fixup_mem32,
......
...@@ -11,7 +11,10 @@ ...@@ -11,7 +11,10 @@
#ifndef __PLAT_TIME_H #ifndef __PLAT_TIME_H
#define __PLAT_TIME_H #define __PLAT_TIME_H
void orion_time_init(unsigned int irq, unsigned int tclk); void orion_time_set_base(u32 timer_base);
void orion_time_init(u32 bridge_base, u32 bridge_timer1_clr_mask,
unsigned int irq, unsigned int tclk);
#endif #endif
...@@ -18,28 +18,42 @@ ...@@ -18,28 +18,42 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/sched_clock.h> #include <asm/sched_clock.h>
#include <asm/mach/time.h>
#include <mach/bridge-regs.h>
#include <mach/hardware.h>
/* /*
* Number of timer ticks per jiffy. * MBus bridge block registers.
*/ */
static u32 ticks_per_jiffy; #define BRIDGE_CAUSE_OFF 0x0110
#define BRIDGE_MASK_OFF 0x0114
#define BRIDGE_INT_TIMER0 0x0002
#define BRIDGE_INT_TIMER1 0x0004
/* /*
* Timer block registers. * Timer block registers.
*/ */
#define TIMER_CTRL (TIMER_VIRT_BASE + 0x0000) #define TIMER_CTRL_OFF 0x0000
#define TIMER0_EN 0x0001 #define TIMER0_EN 0x0001
#define TIMER0_RELOAD_EN 0x0002 #define TIMER0_RELOAD_EN 0x0002
#define TIMER1_EN 0x0004 #define TIMER1_EN 0x0004
#define TIMER1_RELOAD_EN 0x0008 #define TIMER1_RELOAD_EN 0x0008
#define TIMER0_RELOAD (TIMER_VIRT_BASE + 0x0010) #define TIMER0_RELOAD_OFF 0x0010
#define TIMER0_VAL (TIMER_VIRT_BASE + 0x0014) #define TIMER0_VAL_OFF 0x0014
#define TIMER1_RELOAD (TIMER_VIRT_BASE + 0x0018) #define TIMER1_RELOAD_OFF 0x0018
#define TIMER1_VAL (TIMER_VIRT_BASE + 0x001c) #define TIMER1_VAL_OFF 0x001c
/*
* SoC-specific data.
*/
static void __iomem *bridge_base;
static u32 bridge_timer1_clr_mask;
static void __iomem *timer_base;
/*
* Number of timer ticks per jiffy.
*/
static u32 ticks_per_jiffy;
/* /*
...@@ -50,14 +64,14 @@ static DEFINE_CLOCK_DATA(cd); ...@@ -50,14 +64,14 @@ static DEFINE_CLOCK_DATA(cd);
unsigned long long notrace sched_clock(void) unsigned long long notrace sched_clock(void)
{ {
u32 cyc = 0xffffffff - readl(TIMER0_VAL); u32 cyc = ~readl(timer_base + TIMER0_VAL_OFF);
return cyc_to_sched_clock(&cd, cyc, (u32)~0); return cyc_to_sched_clock(&cd, cyc, (u32)~0);
} }
static void notrace orion_update_sched_clock(void) static void notrace orion_update_sched_clock(void)
{ {
u32 cyc = 0xffffffff - readl(TIMER0_VAL); u32 cyc = ~readl(timer_base + TIMER0_VAL_OFF);
update_sched_clock(&cd, cyc, (u32)~0); update_sched_clock(&cd, cyc, (u32)~0);
} }
...@@ -71,7 +85,7 @@ static void __init setup_sched_clock(unsigned long tclk) ...@@ -71,7 +85,7 @@ static void __init setup_sched_clock(unsigned long tclk)
*/ */
static cycle_t orion_clksrc_read(struct clocksource *cs) static cycle_t orion_clksrc_read(struct clocksource *cs)
{ {
return 0xffffffff - readl(TIMER0_VAL); return 0xffffffff - readl(timer_base + TIMER0_VAL_OFF);
} }
static struct clocksource orion_clksrc = { static struct clocksource orion_clksrc = {
...@@ -101,23 +115,23 @@ orion_clkevt_next_event(unsigned long delta, struct clock_event_device *dev) ...@@ -101,23 +115,23 @@ orion_clkevt_next_event(unsigned long delta, struct clock_event_device *dev)
/* /*
* Clear and enable clockevent timer interrupt. * Clear and enable clockevent timer interrupt.
*/ */
writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); writel(bridge_timer1_clr_mask, bridge_base + BRIDGE_CAUSE_OFF);
u = readl(BRIDGE_MASK); u = readl(bridge_base + BRIDGE_MASK_OFF);
u |= BRIDGE_INT_TIMER1; u |= BRIDGE_INT_TIMER1;
writel(u, BRIDGE_MASK); writel(u, bridge_base + BRIDGE_MASK_OFF);
/* /*
* Setup new clockevent timer value. * Setup new clockevent timer value.
*/ */
writel(delta, TIMER1_VAL); writel(delta, timer_base + TIMER1_VAL_OFF);
/* /*
* Enable the timer. * Enable the timer.
*/ */
u = readl(TIMER_CTRL); u = readl(timer_base + TIMER_CTRL_OFF);
u = (u & ~TIMER1_RELOAD_EN) | TIMER1_EN; u = (u & ~TIMER1_RELOAD_EN) | TIMER1_EN;
writel(u, TIMER_CTRL); writel(u, timer_base + TIMER_CTRL_OFF);
local_irq_restore(flags); local_irq_restore(flags);
...@@ -135,37 +149,38 @@ orion_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev) ...@@ -135,37 +149,38 @@ orion_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev)
/* /*
* Setup timer to fire at 1/HZ intervals. * Setup timer to fire at 1/HZ intervals.
*/ */
writel(ticks_per_jiffy - 1, TIMER1_RELOAD); writel(ticks_per_jiffy - 1, timer_base + TIMER1_RELOAD_OFF);
writel(ticks_per_jiffy - 1, TIMER1_VAL); writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL_OFF);
/* /*
* Enable timer interrupt. * Enable timer interrupt.
*/ */
u = readl(BRIDGE_MASK); u = readl(bridge_base + BRIDGE_MASK_OFF);
writel(u | BRIDGE_INT_TIMER1, BRIDGE_MASK); writel(u | BRIDGE_INT_TIMER1, bridge_base + BRIDGE_MASK_OFF);
/* /*
* Enable timer. * Enable timer.
*/ */
u = readl(TIMER_CTRL); u = readl(timer_base + TIMER_CTRL_OFF);
writel(u | TIMER1_EN | TIMER1_RELOAD_EN, TIMER_CTRL); writel(u | TIMER1_EN | TIMER1_RELOAD_EN,
timer_base + TIMER_CTRL_OFF);
} else { } else {
/* /*
* Disable timer. * Disable timer.
*/ */
u = readl(TIMER_CTRL); u = readl(timer_base + TIMER_CTRL_OFF);
writel(u & ~TIMER1_EN, TIMER_CTRL); writel(u & ~TIMER1_EN, timer_base + TIMER_CTRL_OFF);
/* /*
* Disable timer interrupt. * Disable timer interrupt.
*/ */
u = readl(BRIDGE_MASK); u = readl(bridge_base + BRIDGE_MASK_OFF);
writel(u & ~BRIDGE_INT_TIMER1, BRIDGE_MASK); writel(u & ~BRIDGE_INT_TIMER1, bridge_base + BRIDGE_MASK_OFF);
/* /*
* ACK pending timer interrupt. * ACK pending timer interrupt.
*/ */
writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); writel(bridge_timer1_clr_mask, bridge_base + BRIDGE_CAUSE_OFF);
} }
local_irq_restore(flags); local_irq_restore(flags);
...@@ -185,7 +200,7 @@ static irqreturn_t orion_timer_interrupt(int irq, void *dev_id) ...@@ -185,7 +200,7 @@ static irqreturn_t orion_timer_interrupt(int irq, void *dev_id)
/* /*
* ACK timer interrupt and call event handler. * ACK timer interrupt and call event handler.
*/ */
writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); writel(bridge_timer1_clr_mask, bridge_base + BRIDGE_CAUSE_OFF);
orion_clkevt.event_handler(&orion_clkevt); orion_clkevt.event_handler(&orion_clkevt);
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -197,31 +212,45 @@ static struct irqaction orion_timer_irq = { ...@@ -197,31 +212,45 @@ static struct irqaction orion_timer_irq = {
.handler = orion_timer_interrupt .handler = orion_timer_interrupt
}; };
void __init orion_time_init(unsigned int irq, unsigned int tclk) void __init
orion_time_set_base(u32 _timer_base)
{
timer_base = (void __iomem *)_timer_base;
}
void __init
orion_time_init(u32 _bridge_base, u32 _bridge_timer1_clr_mask,
unsigned int irq, unsigned int tclk)
{ {
u32 u; u32 u;
/*
* Set SoC-specific data.
*/
bridge_base = (void __iomem *)_bridge_base;
bridge_timer1_clr_mask = _bridge_timer1_clr_mask;
ticks_per_jiffy = (tclk + HZ/2) / HZ; ticks_per_jiffy = (tclk + HZ/2) / HZ;
/* /*
* Set scale and timer for sched_clock * Set scale and timer for sched_clock.
*/ */
setup_sched_clock(tclk); setup_sched_clock(tclk);
/* /*
* Setup free-running clocksource timer (interrupts * Setup free-running clocksource timer (interrupts
* disabled.) * disabled).
*/ */
writel(0xffffffff, TIMER0_VAL); writel(0xffffffff, timer_base + TIMER0_VAL_OFF);
writel(0xffffffff, TIMER0_RELOAD); writel(0xffffffff, timer_base + TIMER0_RELOAD_OFF);
u = readl(BRIDGE_MASK); u = readl(bridge_base + BRIDGE_MASK_OFF);
writel(u & ~BRIDGE_INT_TIMER0, BRIDGE_MASK); writel(u & ~BRIDGE_INT_TIMER0, bridge_base + BRIDGE_MASK_OFF);
u = readl(TIMER_CTRL); u = readl(timer_base + TIMER_CTRL_OFF);
writel(u | TIMER0_EN | TIMER0_RELOAD_EN, TIMER_CTRL); writel(u | TIMER0_EN | TIMER0_RELOAD_EN, timer_base + TIMER_CTRL_OFF);
clocksource_register_hz(&orion_clksrc, tclk); clocksource_register_hz(&orion_clksrc, tclk);
/* /*
* Setup clockevent timer (interrupt-driven.) * Setup clockevent timer (interrupt-driven).
*/ */
setup_irq(irq, &orion_timer_irq); setup_irq(irq, &orion_timer_irq);
orion_clkevt.mult = div_sc(tclk, NSEC_PER_SEC, orion_clkevt.shift); orion_clkevt.mult = div_sc(tclk, NSEC_PER_SEC, orion_clkevt.shift);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment