aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/reset/arm-versatile-reboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/reset/arm-versatile-reboot.c')
-rw-r--r--drivers/power/reset/arm-versatile-reboot.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/drivers/power/reset/arm-versatile-reboot.c b/drivers/power/reset/arm-versatile-reboot.c
index b208073c887d..06d34ab47df5 100644
--- a/drivers/power/reset/arm-versatile-reboot.c
+++ b/drivers/power/reset/arm-versatile-reboot.c
@@ -18,8 +18,8 @@
18#define INTEGRATOR_HDR_LOCK_OFFSET 0x14 18#define INTEGRATOR_HDR_LOCK_OFFSET 0x14
19#define INTEGRATOR_CM_CTRL_RESET (1 << 3) 19#define INTEGRATOR_CM_CTRL_RESET (1 << 3)
20 20
21#define REALVIEW_SYS_LOCK_OFFSET 0x20 21#define VERSATILE_SYS_LOCK_OFFSET 0x20
22#define REALVIEW_SYS_RESETCTL_OFFSET 0x40 22#define VERSATILE_SYS_RESETCTL_OFFSET 0x40
23 23
24/* Magic unlocking token used on all Versatile boards */ 24/* Magic unlocking token used on all Versatile boards */
25#define VERSATILE_LOCK_VAL 0xA05F 25#define VERSATILE_LOCK_VAL 0xA05F
@@ -29,6 +29,7 @@
29 */ 29 */
30enum versatile_reboot { 30enum versatile_reboot {
31 INTEGRATOR_REBOOT_CM, 31 INTEGRATOR_REBOOT_CM,
32 VERSATILE_REBOOT_CM,
32 REALVIEW_REBOOT_EB, 33 REALVIEW_REBOOT_EB,
33 REALVIEW_REBOOT_PB1176, 34 REALVIEW_REBOOT_PB1176,
34 REALVIEW_REBOOT_PB11MP, 35 REALVIEW_REBOOT_PB11MP,
@@ -46,6 +47,10 @@ static const struct of_device_id versatile_reboot_of_match[] = {
46 .data = (void *)INTEGRATOR_REBOOT_CM 47 .data = (void *)INTEGRATOR_REBOOT_CM
47 }, 48 },
48 { 49 {
50 .compatible = "arm,core-module-versatile",
51 .data = (void *)VERSATILE_REBOOT_CM,
52 },
53 {
49 .compatible = "arm,realview-eb-syscon", 54 .compatible = "arm,realview-eb-syscon",
50 .data = (void *)REALVIEW_REBOOT_EB, 55 .data = (void *)REALVIEW_REBOOT_EB,
51 }, 56 },
@@ -82,33 +87,43 @@ static int versatile_reboot(struct notifier_block *this, unsigned long mode,
82 INTEGRATOR_CM_CTRL_RESET, 87 INTEGRATOR_CM_CTRL_RESET,
83 INTEGRATOR_CM_CTRL_RESET); 88 INTEGRATOR_CM_CTRL_RESET);
84 break; 89 break;
90 case VERSATILE_REBOOT_CM:
91 regmap_write(syscon_regmap, VERSATILE_SYS_LOCK_OFFSET,
92 VERSATILE_LOCK_VAL);
93 regmap_update_bits(syscon_regmap,
94 VERSATILE_SYS_RESETCTL_OFFSET,
95 0x0107,
96 0x0105);
97 regmap_write(syscon_regmap, VERSATILE_SYS_LOCK_OFFSET,
98 0);
99 break;
85 case REALVIEW_REBOOT_EB: 100 case REALVIEW_REBOOT_EB:
86 regmap_write(syscon_regmap, REALVIEW_SYS_LOCK_OFFSET, 101 regmap_write(syscon_regmap, VERSATILE_SYS_LOCK_OFFSET,
87 VERSATILE_LOCK_VAL); 102 VERSATILE_LOCK_VAL);
88 regmap_write(syscon_regmap, 103 regmap_write(syscon_regmap,
89 REALVIEW_SYS_RESETCTL_OFFSET, 0x0008); 104 VERSATILE_SYS_RESETCTL_OFFSET, 0x0008);
90 break; 105 break;
91 case REALVIEW_REBOOT_PB1176: 106 case REALVIEW_REBOOT_PB1176:
92 regmap_write(syscon_regmap, REALVIEW_SYS_LOCK_OFFSET, 107 regmap_write(syscon_regmap, VERSATILE_SYS_LOCK_OFFSET,
93 VERSATILE_LOCK_VAL); 108 VERSATILE_LOCK_VAL);
94 regmap_write(syscon_regmap, 109 regmap_write(syscon_regmap,
95 REALVIEW_SYS_RESETCTL_OFFSET, 0x0100); 110 VERSATILE_SYS_RESETCTL_OFFSET, 0x0100);
96 break; 111 break;
97 case REALVIEW_REBOOT_PB11MP: 112 case REALVIEW_REBOOT_PB11MP:
98 case REALVIEW_REBOOT_PBA8: 113 case REALVIEW_REBOOT_PBA8:
99 regmap_write(syscon_regmap, REALVIEW_SYS_LOCK_OFFSET, 114 regmap_write(syscon_regmap, VERSATILE_SYS_LOCK_OFFSET,
100 VERSATILE_LOCK_VAL); 115 VERSATILE_LOCK_VAL);
101 regmap_write(syscon_regmap, REALVIEW_SYS_RESETCTL_OFFSET, 116 regmap_write(syscon_regmap, VERSATILE_SYS_RESETCTL_OFFSET,
102 0x0000); 117 0x0000);
103 regmap_write(syscon_regmap, REALVIEW_SYS_RESETCTL_OFFSET, 118 regmap_write(syscon_regmap, VERSATILE_SYS_RESETCTL_OFFSET,
104 0x0004); 119 0x0004);
105 break; 120 break;
106 case REALVIEW_REBOOT_PBX: 121 case REALVIEW_REBOOT_PBX:
107 regmap_write(syscon_regmap, REALVIEW_SYS_LOCK_OFFSET, 122 regmap_write(syscon_regmap, VERSATILE_SYS_LOCK_OFFSET,
108 VERSATILE_LOCK_VAL); 123 VERSATILE_LOCK_VAL);
109 regmap_write(syscon_regmap, REALVIEW_SYS_RESETCTL_OFFSET, 124 regmap_write(syscon_regmap, VERSATILE_SYS_RESETCTL_OFFSET,
110 0x00f0); 125 0x00f0);
111 regmap_write(syscon_regmap, REALVIEW_SYS_RESETCTL_OFFSET, 126 regmap_write(syscon_regmap, VERSATILE_SYS_RESETCTL_OFFSET,
112 0x00f4); 127 0x00f4);
113 break; 128 break;
114 } 129 }