diff options
Diffstat (limited to 'arch/mips/sibyte/swarm/setup.c')
-rw-r--r-- | arch/mips/sibyte/swarm/setup.c | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/arch/mips/sibyte/swarm/setup.c b/arch/mips/sibyte/swarm/setup.c index 83572d8f3e14..8b3ef0e4cd55 100644 --- a/arch/mips/sibyte/swarm/setup.c +++ b/arch/mips/sibyte/swarm/setup.c | |||
@@ -69,7 +69,7 @@ const char *get_system_type(void) | |||
69 | return "SiByte " SIBYTE_BOARD_NAME; | 69 | return "SiByte " SIBYTE_BOARD_NAME; |
70 | } | 70 | } |
71 | 71 | ||
72 | void __init swarm_time_init(void) | 72 | void __init plat_time_init(void) |
73 | { | 73 | { |
74 | #if defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X) | 74 | #if defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X) |
75 | /* Setup HPT */ | 75 | /* Setup HPT */ |
@@ -104,6 +104,44 @@ int swarm_be_handler(struct pt_regs *regs, int is_fixup) | |||
104 | return (is_fixup ? MIPS_BE_FIXUP : MIPS_BE_FATAL); | 104 | return (is_fixup ? MIPS_BE_FIXUP : MIPS_BE_FATAL); |
105 | } | 105 | } |
106 | 106 | ||
107 | enum swarm_rtc_type { | ||
108 | RTC_NONE, | ||
109 | RTC_XICOR, | ||
110 | RTC_M4LT81 | ||
111 | }; | ||
112 | |||
113 | enum swarm_rtc_type swarm_rtc_type; | ||
114 | |||
115 | unsigned long read_persistent_clock(void) | ||
116 | { | ||
117 | switch (swarm_rtc_type) { | ||
118 | case RTC_XICOR: | ||
119 | return xicor_get_time(); | ||
120 | |||
121 | case RTC_M4LT81: | ||
122 | return m41t81_get_time(); | ||
123 | |||
124 | case RTC_NONE: | ||
125 | default: | ||
126 | return mktime(2000, 1, 1, 0, 0, 0); | ||
127 | } | ||
128 | } | ||
129 | |||
130 | int rtc_mips_set_time(unsigned long sec) | ||
131 | { | ||
132 | switch (swarm_rtc_type) { | ||
133 | case RTC_XICOR: | ||
134 | return xicor_set_time(sec); | ||
135 | |||
136 | case RTC_M4LT81: | ||
137 | return m41t81_set_time(sec); | ||
138 | |||
139 | case RTC_NONE: | ||
140 | default: | ||
141 | return -1; | ||
142 | } | ||
143 | } | ||
144 | |||
107 | void __init plat_mem_setup(void) | 145 | void __init plat_mem_setup(void) |
108 | { | 146 | { |
109 | #if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80) | 147 | #if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80) |
@@ -116,20 +154,12 @@ void __init plat_mem_setup(void) | |||
116 | 154 | ||
117 | panic_timeout = 5; /* For debug. */ | 155 | panic_timeout = 5; /* For debug. */ |
118 | 156 | ||
119 | board_time_init = swarm_time_init; | ||
120 | board_be_handler = swarm_be_handler; | 157 | board_be_handler = swarm_be_handler; |
121 | 158 | ||
122 | if (xicor_probe()) { | 159 | if (xicor_probe()) |
123 | printk("swarm setup: Xicor 1241 RTC detected.\n"); | 160 | swarm_rtc_type = RTC_XICOR; |
124 | rtc_mips_get_time = xicor_get_time; | 161 | if (m41t81_probe()) |
125 | rtc_mips_set_time = xicor_set_time; | 162 | swarm_rtc_type = RTC_M4LT81; |
126 | } | ||
127 | |||
128 | if (m41t81_probe()) { | ||
129 | printk("swarm setup: M41T81 RTC detected.\n"); | ||
130 | rtc_mips_get_time = m41t81_get_time; | ||
131 | rtc_mips_set_time = m41t81_set_time; | ||
132 | } | ||
133 | 163 | ||
134 | printk("This kernel optimized for " | 164 | printk("This kernel optimized for " |
135 | #ifdef CONFIG_SIMULATION | 165 | #ifdef CONFIG_SIMULATION |