| From foo@baz Sun Apr 20 18:23:45 PDT 2014 |
| From: oftedal <oftedal@gmail.com> |
| Date: Fri, 18 Oct 2013 22:28:29 +0200 |
| Subject: sparc: PCI: Fix incorrect address calculation of PCI Bridge windows on Simba-bridges |
| |
| From: oftedal <oftedal@gmail.com> |
| |
| [ Upstream commit 557fc5873ef178c4b3e1e36a42db547ecdc43f9b ] |
| |
| The SIMBA APB Bridges lacks the 'ranges' of-property describing the |
| PCI I/O and memory areas located beneath the bridge. Faking this |
| information has been performed by reading range registers in the |
| APB bridge, and calculating the corresponding areas. |
| |
| In commit 01f94c4a6ced476ce69b895426fc29bfc48c69bd |
| ("Fix sabre pci controllers with new probing scheme.") a bug was |
| introduced into this calculation, causing the PCI memory areas |
| to be calculated incorrectly: The shift size was set to be |
| identical for I/O and MEM ranges, which is incorrect. |
| |
| This patch set the shift size of the MEM range back to the |
| value used before 01f94c4a6ced476ce69b895426fc29bfc48c69bd. |
| |
| Signed-off-by: Kjetil Oftedal <oftedal@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/sparc/kernel/pci.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/arch/sparc/kernel/pci.c |
| +++ b/arch/sparc/kernel/pci.c |
| @@ -399,8 +399,8 @@ static void apb_fake_ranges(struct pci_d |
| apb_calc_first_last(map, &first, &last); |
| res = bus->resource[1]; |
| res->flags = IORESOURCE_MEM; |
| - region.start = (first << 21); |
| - region.end = (last << 21) + ((1 << 21) - 1); |
| + region.start = (first << 29); |
| + region.end = (last << 29) + ((1 << 29) - 1); |
| pcibios_bus_to_resource(dev, res, ®ion); |
| } |
| |