aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2016-01-25 03:29:53 -0500
committerSebastian Reichel <sre@kernel.org>2016-02-14 23:45:22 -0500
commit3f652c969dd223a6ff1df6e9a7052b0424a14167 (patch)
tree5e3014a2d18f8db02a6e4763b4a59be8ab3c05d4 /drivers/power
parent5b7a0187391fe9b48eec532bf0b4b814d491d5f5 (diff)
power/reset: versatile: support the actual versatile
While this driver is named after the Versatile family of boards (ARM reference designs) the machine actually called Versatile was not supported. This patch makes the driver handle also that machine. We augment the register names for the reset to *VERSATILE* as well since it is the same register offsets for Versatile and RealView. Cc: Rob Herring <robh@kernel.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Sebastian Reichel <sre@kernel.org>
Diffstat (limited to 'drivers/power')
-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 }