[SPARC]: Fix bus handling in build_device_resources().

We mistakedly modify 'bus' in the innermost loop. What
should happen is that at each register index iteration,
we start with the same 'bus'.

So preserve it's value at the top level, and use a loop
local variable 'dbus' for iteration.

This bug causes registers other than the first to be
decoded improperly.

Signed-off-by: David S. Miller <davem@davemloft.net>

+8 -6
+4 -3
arch/sparc/kernel/of_device.c
··· 495 u32 *reg = (preg + (index * ((na + ns) * 4))); 496 struct device_node *dp = op->node; 497 struct device_node *pp = p_op->node; 498 - struct of_bus *pbus; 499 u64 size, result = OF_BAD_ADDR; 500 unsigned long flags; 501 int dna, dns; ··· 516 517 dna = na; 518 dns = ns; 519 520 while (1) { 521 dp = pp; ··· 529 pbus = of_match_bus(pp); 530 pbus->count_cells(dp, &pna, &pns); 531 532 - if (build_one_resource(dp, bus, pbus, addr, 533 dna, dns, pna)) 534 break; 535 536 dna = pna; 537 dns = pns; 538 - bus = pbus; 539 } 540 541 build_res:
··· 495 u32 *reg = (preg + (index * ((na + ns) * 4))); 496 struct device_node *dp = op->node; 497 struct device_node *pp = p_op->node; 498 + struct of_bus *pbus, *dbus; 499 u64 size, result = OF_BAD_ADDR; 500 unsigned long flags; 501 int dna, dns; ··· 516 517 dna = na; 518 dns = ns; 519 + dbus = bus; 520 521 while (1) { 522 dp = pp; ··· 528 pbus = of_match_bus(pp); 529 pbus->count_cells(dp, &pna, &pns); 530 531 + if (build_one_resource(dp, dbus, pbus, addr, 532 dna, dns, pna)) 533 break; 534 535 dna = pna; 536 dns = pns; 537 + dbus = pbus; 538 } 539 540 build_res:
+4 -3
arch/sparc64/kernel/of_device.c
··· 581 u32 *reg = (preg + (index * ((na + ns) * 4))); 582 struct device_node *dp = op->node; 583 struct device_node *pp = p_op->node; 584 - struct of_bus *pbus; 585 u64 size, result = OF_BAD_ADDR; 586 unsigned long flags; 587 int dna, dns; ··· 599 600 dna = na; 601 dns = ns; 602 603 while (1) { 604 dp = pp; ··· 612 pbus = of_match_bus(pp); 613 pbus->count_cells(dp, &pna, &pns); 614 615 - if (build_one_resource(dp, bus, pbus, addr, 616 dna, dns, pna)) 617 break; 618 619 dna = pna; 620 dns = pns; 621 - bus = pbus; 622 } 623 624 build_res:
··· 581 u32 *reg = (preg + (index * ((na + ns) * 4))); 582 struct device_node *dp = op->node; 583 struct device_node *pp = p_op->node; 584 + struct of_bus *pbus, *dbus; 585 u64 size, result = OF_BAD_ADDR; 586 unsigned long flags; 587 int dna, dns; ··· 599 600 dna = na; 601 dns = ns; 602 + dbus = bus; 603 604 while (1) { 605 dp = pp; ··· 611 pbus = of_match_bus(pp); 612 pbus->count_cells(dp, &pna, &pns); 613 614 + if (build_one_resource(dp, dbus, pbus, addr, 615 dna, dns, pna)) 616 break; 617 618 dna = pna; 619 dns = pns; 620 + dbus = pbus; 621 } 622 623 build_res: