aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2015-03-22 23:16:38 -0400
committerGrant Likely <grant.likely@linaro.org>2015-03-28 00:03:58 -0400
commita5ed1ad07b3a75894311e12fdd401bf64d0667fe (patch)
treec93a6bb5ccdf0e4d817f4c0aacdd69e82b201ff0 /drivers/of
parent121c92cad33db29685f09e11c892b99c1b87ce7d (diff)
drivers/of: Add empty ranges quirk for PA-Semi
The "sdc" node is missing the ranges property, it needs to be treated as having an empty one otherwise translation fails for its children. Fixes 746c9e9f92dd, "of/base: Fix PowerPC address parsing hack" Tested-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Grant Likely <grant.likely@linaro.org> Cc: Stable <stable@vger.kernel.org> # v3.18+
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/address.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/of/address.c b/drivers/of/address.c
index ad2906919d45..78a7dcbec7d8 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -450,12 +450,17 @@ static struct of_bus *of_match_bus(struct device_node *np)
450 return NULL; 450 return NULL;
451} 451}
452 452
453static int of_empty_ranges_quirk(void) 453static int of_empty_ranges_quirk(struct device_node *np)
454{ 454{
455 if (IS_ENABLED(CONFIG_PPC)) { 455 if (IS_ENABLED(CONFIG_PPC)) {
456 /* To save cycles, we cache the result */ 456 /* To save cycles, we cache the result for global "Mac" setting */
457 static int quirk_state = -1; 457 static int quirk_state = -1;
458 458
459 /* PA-SEMI sdc DT bug */
460 if (of_device_is_compatible(np, "1682m-sdc"))
461 return true;
462
463 /* Make quirk cached */
459 if (quirk_state < 0) 464 if (quirk_state < 0)
460 quirk_state = 465 quirk_state =
461 of_machine_is_compatible("Power Macintosh") || 466 of_machine_is_compatible("Power Macintosh") ||
@@ -490,7 +495,7 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
490 * This code is only enabled on powerpc. --gcl 495 * This code is only enabled on powerpc. --gcl
491 */ 496 */
492 ranges = of_get_property(parent, rprop, &rlen); 497 ranges = of_get_property(parent, rprop, &rlen);
493 if (ranges == NULL && !of_empty_ranges_quirk()) { 498 if (ranges == NULL && !of_empty_ranges_quirk(parent)) {
494 pr_debug("OF: no ranges; cannot translate\n"); 499 pr_debug("OF: no ranges; cannot translate\n");
495 return 1; 500 return 1;
496 } 501 }