|
@@ -267,6 +267,43 @@ arch_initcall(sbc8560_rtc_init);
|
|
|
|
|
|
#endif /* M48T59 */
|
|
|
|
|
|
+static __u8 __iomem *brstcr;
|
|
|
+
|
|
|
+static int __init sbc8560_bdrstcr_init(void)
|
|
|
+{
|
|
|
+ struct device_node *np;
|
|
|
+ struct resource res;
|
|
|
+
|
|
|
+ np = of_find_compatible_node(NULL, NULL, "wrs,sbc8560-brstcr");
|
|
|
+ if (np == NULL) {
|
|
|
+ printk(KERN_WARNING "sbc8560: No board specific RSTCR in DTB.\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+
|
|
|
+ of_address_to_resource(np, 0, &res);
|
|
|
+
|
|
|
+ printk(KERN_INFO "sbc8560: Found BRSTCR at i/o 0x%x\n", res.start);
|
|
|
+
|
|
|
+ brstcr = ioremap(res.start, res.end - res.start);
|
|
|
+ if(!brstcr)
|
|
|
+ printk(KERN_WARNING "sbc8560: ioremap of brstcr failed.\n");
|
|
|
+
|
|
|
+ of_node_put(np);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+arch_initcall(sbc8560_bdrstcr_init);
|
|
|
+
|
|
|
+void sbc8560_rstcr_restart(char * cmd)
|
|
|
+{
|
|
|
+ local_irq_disable();
|
|
|
+ if(brstcr)
|
|
|
+ clrbits8(brstcr, 0x80);
|
|
|
+
|
|
|
+ while(1);
|
|
|
+}
|
|
|
+
|
|
|
define_machine(sbc8560) {
|
|
|
.name = "SBC8560",
|
|
|
.probe = sbc8560_probe,
|
|
@@ -274,7 +311,7 @@ define_machine(sbc8560) {
|
|
|
.init_IRQ = sbc8560_pic_init,
|
|
|
.show_cpuinfo = sbc8560_show_cpuinfo,
|
|
|
.get_irq = mpic_get_irq,
|
|
|
- .restart = fsl_rstcr_restart,
|
|
|
+ .restart = sbc8560_rstcr_restart,
|
|
|
.calibrate_decr = generic_calibrate_decr,
|
|
|
.progress = udbg_progress,
|
|
|
};
|