aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-mvebu
diff options
context:
space:
mode:
authorEzequiel Garcia <ezequiel.garcia@free-electrons.com>2014-11-04 11:00:39 -0500
committerJason Cooper <jason@lakedaemon.net>2014-11-08 22:19:39 -0500
commit172ed82cef421a205e1f557372a4a1338dc46edc (patch)
treee6ae8f7e3a6580af52fba6b0b5e1905ca4d07c77 /arch/arm/mach-mvebu
parentf114040e3ea6e07372334ade75d1ee0775c355e1 (diff)
ARM: mvebu: Remove thermal quirk for A375 Z1 revision
The Armada 375 Z1 SoC revision is no longer supported. This commit removes the quirk required to "fix" the reg property and the compatible string of the thermal devicetree node. Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> Link: https://lkml.kernel.org/r/1415116839-4323-3-git-send-email-ezequiel.garcia@free-electrons.com Signed-off-by: Jason Cooper <jason@lakedaemon.net>
Diffstat (limited to 'arch/arm/mach-mvebu')
-rw-r--r--arch/arm/mach-mvebu/board-v7.c66
1 files changed, 1 insertions, 65 deletions
diff --git a/arch/arm/mach-mvebu/board-v7.c b/arch/arm/mach-mvebu/board-v7.c
index 6478626e3ff6..461e726a7012 100644
--- a/arch/arm/mach-mvebu/board-v7.c
+++ b/arch/arm/mach-mvebu/board-v7.c
@@ -124,76 +124,12 @@ static void __init i2c_quirk(void)
124 return; 124 return;
125} 125}
126 126
127#define A375_Z1_THERMAL_FIXUP_OFFSET 0xc
128
129static void __init thermal_quirk(void)
130{
131 struct device_node *np;
132 u32 dev, rev;
133 int res;
134
135 /*
136 * The early SoC Z1 revision needs a quirk to be applied in order
137 * for the thermal controller to work properly. This quirk breaks
138 * the thermal support if applied on a SoC that doesn't need it,
139 * so we enforce the SoC revision to be known.
140 */
141 res = mvebu_get_soc_id(&dev, &rev);
142 if (res < 0 || (res == 0 && rev > ARMADA_375_Z1_REV))
143 return;
144
145 for_each_compatible_node(np, NULL, "marvell,armada375-thermal") {
146 struct property *prop;
147 __be32 newval, *newprop, *oldprop;
148 int len;
149
150 /*
151 * The register offset is at a wrong location. This quirk
152 * creates a new reg property as a clone of the previous
153 * one and corrects the offset.
154 */
155 oldprop = (__be32 *)of_get_property(np, "reg", &len);
156 if (!oldprop)
157 continue;
158
159 /* Create a duplicate of the 'reg' property */
160 prop = kzalloc(sizeof(*prop), GFP_KERNEL);
161 prop->length = len;
162 prop->name = kstrdup("reg", GFP_KERNEL);
163 prop->value = kzalloc(len, GFP_KERNEL);
164 memcpy(prop->value, oldprop, len);
165
166 /* Fixup the register offset of the second entry */
167 oldprop += 2;
168 newprop = (__be32 *)prop->value + 2;
169 newval = cpu_to_be32(be32_to_cpu(*oldprop) -
170 A375_Z1_THERMAL_FIXUP_OFFSET);
171 *newprop = newval;
172 of_update_property(np, prop);
173
174 /*
175 * The thermal controller needs some quirk too, so let's change
176 * the compatible string to reflect this and allow the driver
177 * the take the necessary action.
178 */
179 prop = kzalloc(sizeof(*prop), GFP_KERNEL);
180 prop->name = kstrdup("compatible", GFP_KERNEL);
181 prop->length = sizeof("marvell,armada375-z1-thermal");
182 prop->value = kstrdup("marvell,armada375-z1-thermal",
183 GFP_KERNEL);
184 of_update_property(np, prop);
185 }
186 return;
187}
188
189static void __init mvebu_dt_init(void) 127static void __init mvebu_dt_init(void)
190{ 128{
191 if (of_machine_is_compatible("plathome,openblocks-ax3-4")) 129 if (of_machine_is_compatible("plathome,openblocks-ax3-4"))
192 i2c_quirk(); 130 i2c_quirk();
193 if (of_machine_is_compatible("marvell,a375-db")) { 131 if (of_machine_is_compatible("marvell,a375-db"))
194 external_abort_quirk(); 132 external_abort_quirk();
195 thermal_quirk();
196 }
197 133
198 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 134 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
199} 135}