[sparc] Add bugfix/sparc/sunblade-clock-hang.patch, fixing the
boot-time crash during clock probing on SunBlade 100/150 due to incorrect mapping of PCI resources. (closes: #392078). Patch has been pushed to stable. Ref: http://marc.theaimsgroup.com/?t=116036108600001&r=1&w=2 svn path=/dists/trunk/linux-2.6/; revision=7637
This commit is contained in:
parent
0a1f22f800
commit
05d36b54f2
|
@ -7,10 +7,13 @@ linux-2.6 (2.6.18-4) UNRELEASED; urgency=low
|
|||
[ Jurij Smakov ]
|
||||
* [sparc] Remove sparc64-atyfb-xl-gr.patch, it does more harm than
|
||||
good in 2.6.18.
|
||||
* [sparc] Add bugfix/sparc/sunblade-clock-hang.patch, fixing the
|
||||
boot-time crash during clock probing on SunBlade 100/150 due to
|
||||
incorrect mapping of PCI resources. (closes: #392078)
|
||||
|
||||
-- Norbert Tretkowski <nobse@debian.org> Sat, 21 Oct 2006 18:52:12 +0200
|
||||
|
||||
linux-2.6 (2.6.18-3) unstable; urgency=low
|
||||
linux-2.6 (2.6.18-3) unstable; urgency=low
|
||||
|
||||
[ Bastian Blank ]
|
||||
* Fix home of patch apply script.
|
||||
|
@ -19,8 +22,8 @@ linux-2.6 (2.6.18-3) unstable; urgency=low
|
|||
* Add AHCI suspend support.
|
||||
* Add patch to support bindmount without nodev on vserver.
|
||||
* Update fedora xen patch to changeset 36252.
|
||||
|
||||
[ Steve Langasek ]
|
||||
|
||||
[ Steve Langasek ]
|
||||
* [alpha] restore alpha-prctl.patch, which keeps disappearing every time
|
||||
there's a kernel upgrade :/
|
||||
|
||||
|
@ -112,7 +115,7 @@ linux-2.6 (2.6.18-3) unstable; urgency=low
|
|||
* Fix oops when removing suspended serial port.
|
||||
* Check if DLC is still attached to the TTY.
|
||||
* Add fedora backport of i965 DRM support.
|
||||
|
||||
|
||||
[ Martin Michlmayr ]
|
||||
* [mips] Apply some patches from linux-mips' linux-2.6.18-stable GIT tree:
|
||||
- The o32 fstatat syscall behaves differently on 32 and 64 bit kernels
|
||||
|
@ -124,7 +127,7 @@ linux-2.6 (2.6.18-3) unstable; urgency=low
|
|||
- Do not use -msym32 option for modules
|
||||
- Fix O32 personality(2) call with 0xffffffff argument
|
||||
- Use compat_sys_mount
|
||||
|
||||
|
||||
[ dann frazier ]
|
||||
* [ia64]: Fix booting on HP cell systems, thanks to Troy Heber
|
||||
- Enable CONFIG_HUGETLBFS
|
||||
|
@ -140,7 +143,7 @@ linux-2.6 (2.6.18-3) unstable; urgency=low
|
|||
* [powerpc] Added AMD74xx driver module to the powerpc64 flavour
|
||||
(Closes: #391861).
|
||||
|
||||
[ Kyle McMartin ]
|
||||
[ Kyle McMartin ]
|
||||
* [hppa] Force CROSS_COMPILE=hppa64-linux-gnu- (closes: #389296)
|
||||
|
||||
-- Bastian Blank <waldi@debian.org> Sat, 21 Oct 2006 15:59:43 +0200
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
[SPARC64]: Fix PCI memory space root resource on Hummingbird.
|
||||
|
||||
For Hummingbird PCI controllers, we should create the root
|
||||
PCI memory space resource as the full 4GB area, and then
|
||||
allocate the IOMMU DMA translation window out of there.
|
||||
|
||||
The old code just assumed that the IOMMU DMA translation base
|
||||
to the top of the 4GB area was unusable. This is not true on
|
||||
many systems such as SB100 and SB150, where the IOMMU DMA
|
||||
translation window sits at 0xc0000000->0xdfffffff.
|
||||
|
||||
So what would happen is that any device mapped by the firmware
|
||||
at the top section 0xe0000000->0xffffffff would get remapped
|
||||
by Linux somewhere else leading to all kinds of problems and
|
||||
boot failures.
|
||||
|
||||
While we're here, report more cases of OBP resource assignment
|
||||
conflicts. The only truly valid ones are ROM resource conflicts.
|
||||
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
diff --git a/arch/sparc64/kernel/pci_common.c b/arch/sparc64/kernel/pci_common.c
|
||||
index 7a59cc7..827ae30 100644
|
||||
--- a/arch/sparc64/kernel/pci_common.c
|
||||
+++ b/arch/sparc64/kernel/pci_common.c
|
||||
@@ -330,19 +330,6 @@ #endif
|
||||
return res;
|
||||
}
|
||||
|
||||
-static int __init pdev_resource_collisions_expected(struct pci_dev *pdev)
|
||||
-{
|
||||
- if (pdev->vendor != PCI_VENDOR_ID_SUN)
|
||||
- return 0;
|
||||
-
|
||||
- if (pdev->device == PCI_DEVICE_ID_SUN_RIO_EBUS ||
|
||||
- pdev->device == PCI_DEVICE_ID_SUN_RIO_1394 ||
|
||||
- pdev->device == PCI_DEVICE_ID_SUN_RIO_USB)
|
||||
- return 1;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static void __init pdev_record_assignments(struct pci_pbm_info *pbm,
|
||||
struct pci_dev *pdev)
|
||||
{
|
||||
@@ -400,19 +387,23 @@ static void __init pdev_record_assignmen
|
||||
pbm->parent->resource_adjust(pdev, res, root);
|
||||
|
||||
if (request_resource(root, res) < 0) {
|
||||
+ int rnum;
|
||||
+
|
||||
/* OK, there is some conflict. But this is fine
|
||||
* since we'll reassign it in the fixup pass.
|
||||
*
|
||||
- * We notify the user that OBP made an error if it
|
||||
- * is a case we don't expect.
|
||||
+ * Do not print the warning for ROM resources
|
||||
+ * as such a conflict is quite common and
|
||||
+ * harmless as the ROM bar is disabled.
|
||||
*/
|
||||
- if (!pdev_resource_collisions_expected(pdev)) {
|
||||
- printk(KERN_ERR "PCI: Address space collision on region %ld "
|
||||
+ rnum = (res - &pdev->resource[0]);
|
||||
+ if (rnum != PCI_ROM_RESOURCE)
|
||||
+ printk(KERN_ERR "PCI: Resource collision, "
|
||||
+ "region %d "
|
||||
"[%016lx:%016lx] of device %s\n",
|
||||
- (res - &pdev->resource[0]),
|
||||
+ rnum,
|
||||
res->start, res->end,
|
||||
pci_name(pdev));
|
||||
- }
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/arch/sparc64/kernel/pci_sabre.c b/arch/sparc64/kernel/pci_sabre.c
|
||||
index 4589185..f04c6d2 100644
|
||||
--- a/arch/sparc64/kernel/pci_sabre.c
|
||||
+++ b/arch/sparc64/kernel/pci_sabre.c
|
||||
@@ -1196,7 +1196,7 @@ static void pbm_register_toplevel_resour
|
||||
&pbm->mem_space);
|
||||
}
|
||||
|
||||
-static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp, u32 dma_begin)
|
||||
+static void sabre_pbm_init(struct pci_controller_info *p, struct device_node *dp, u32 dma_start, u32 dma_end)
|
||||
{
|
||||
struct pci_pbm_info *pbm;
|
||||
struct device_node *node;
|
||||
@@ -1261,6 +1261,8 @@ static void sabre_pbm_init(struct pci_co
|
||||
node = node->sibling;
|
||||
}
|
||||
if (simbas_found == 0) {
|
||||
+ struct resource *rp;
|
||||
+
|
||||
/* No APBs underneath, probably this is a hummingbird
|
||||
* system.
|
||||
*/
|
||||
@@ -1302,8 +1304,10 @@ static void sabre_pbm_init(struct pci_co
|
||||
pbm->io_space.end = pbm->io_space.start + (1UL << 24) - 1UL;
|
||||
pbm->io_space.flags = IORESOURCE_IO;
|
||||
|
||||
- pbm->mem_space.start = p->pbm_A.controller_regs + SABRE_MEMSPACE;
|
||||
- pbm->mem_space.end = pbm->mem_space.start + (unsigned long)dma_begin - 1UL;
|
||||
+ pbm->mem_space.start =
|
||||
+ (p->pbm_A.controller_regs + SABRE_MEMSPACE);
|
||||
+ pbm->mem_space.end =
|
||||
+ (pbm->mem_space.start + ((1UL << 32UL) - 1UL));
|
||||
pbm->mem_space.flags = IORESOURCE_MEM;
|
||||
|
||||
if (request_resource(&ioport_resource, &pbm->io_space) < 0) {
|
||||
@@ -1315,6 +1319,17 @@ static void sabre_pbm_init(struct pci_co
|
||||
prom_halt();
|
||||
}
|
||||
|
||||
+ rp = kmalloc(sizeof(*rp), GFP_KERNEL);
|
||||
+ if (!rp) {
|
||||
+ prom_printf("Cannot allocate IOMMU resource.\n");
|
||||
+ prom_halt();
|
||||
+ }
|
||||
+ rp->name = "IOMMU";
|
||||
+ rp->start = pbm->mem_space.start + (unsigned long) dma_start;
|
||||
+ rp->end = pbm->mem_space.start + (unsigned long) dma_end - 1UL;
|
||||
+ rp->flags = IORESOURCE_BUSY;
|
||||
+ request_resource(&pbm->mem_space, rp);
|
||||
+
|
||||
pci_register_legacy_regions(&pbm->io_space,
|
||||
&pbm->mem_space);
|
||||
}
|
||||
@@ -1450,5 +1465,5 @@ void sabre_init(struct device_node *dp,
|
||||
/*
|
||||
* Look for APB underneath.
|
||||
*/
|
||||
- sabre_pbm_init(p, dp, vdma[0]);
|
||||
+ sabre_pbm_init(p, dp, vdma[0], vdma[0] + vdma[1]);
|
||||
}
|
|
@ -1 +1,2 @@
|
|||
- sparc64-atyfb-xl-gr.patch
|
||||
+ bugfix/sparc/sunblade-clock-hang.patch
|
||||
|
|
Loading…
Reference in New Issue