提交 9d637348 编写于 作者: E Ezequiel Garcia 提交者: Jason Cooper

ARM: mvebu: Don't apply the thermal quirk if the SoC revision is unknown

Currently, the thermal quirk is skipped only if the SoC revision is known to be
one that does not need them, but if the SoC revision cannot be obtained, the
quirk is applied assuming it's needed.

However, this quirk must be applied only we are sure the SoC needs it, for it
breaks the thermal support if applied on a SoC that doesn't need it. The reason
for this is that the quirk consists in changing the thermal devicetree
compatible string and register offsets, to workaround a hardware bug in the
early SoC revision.

Such changes are wrong if the SoC is a new revision and doesn't need
the workaround. Therefore, this commit changes the behavior, by
requiring the SoC revision to be known in order to peform a quirk.
Signed-off-by: NEzequiel Garcia <ezequiel.garcia@free-electrons.com>
Link: https://lkml.kernel.org/r/1402425283-24989-1-git-send-email-ezequiel.garcia@free-electrons.comSigned-off-by: NJason Cooper <jason@lakedaemon.net>
上级 a178050a
...@@ -118,8 +118,16 @@ static void __init thermal_quirk(void) ...@@ -118,8 +118,16 @@ static void __init thermal_quirk(void)
{ {
struct device_node *np; struct device_node *np;
u32 dev, rev; u32 dev, rev;
int res;
if (mvebu_get_soc_id(&dev, &rev) == 0 && rev > ARMADA_375_Z1_REV) /*
* The early SoC Z1 revision needs a quirk to be applied in order
* for the thermal controller to work properly. This quirk breaks
* the thermal support if applied on a SoC that doesn't need it,
* so we enforce the SoC revision to be known.
*/
res = mvebu_get_soc_id(&dev, &rev);
if (res < 0 || (res == 0 && rev > ARMADA_375_Z1_REV))
return; return;
for_each_compatible_node(np, NULL, "marvell,armada375-thermal") { for_each_compatible_node(np, NULL, "marvell,armada375-thermal") {
...@@ -153,7 +161,8 @@ static void __init thermal_quirk(void) ...@@ -153,7 +161,8 @@ static void __init thermal_quirk(void)
/* /*
* The thermal controller needs some quirk too, so let's change * The thermal controller needs some quirk too, so let's change
* the compatible string to reflect this. * the compatible string to reflect this and allow the driver
* the take the necessary action.
*/ */
prop = kzalloc(sizeof(*prop), GFP_KERNEL); prop = kzalloc(sizeof(*prop), GFP_KERNEL);
prop->name = kstrdup("compatible", GFP_KERNEL); prop->name = kstrdup("compatible", GFP_KERNEL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册