Bug 7407 - Hangs in Calgary IOMMU init on IBM x460
Summary: Hangs in Calgary IOMMU init on IBM x460
Status: RESOLVED CODE_FIX
Alias: None
Product: Platform Specific/Hardware
Classification: Unclassified
Component: x86-64 (show other bugs)
Hardware: i386 Linux
: P2 high
Assignee: Muli Ben-Yehuda
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-10-24 07:24 UTC by Laurent Vivier
Modified: 2006-11-03 11:41 UTC (History)
2 users (show)

See Also:
Kernel Version: 2.6.18
Tree: Mainline
Regression: ---


Attachments

Description Laurent Vivier 2006-10-24 07:24:47 UTC
Most recent kernel where this bug did not occur: ?
Distribution: Debian 3.1
Hardware Environment: IBM x460, 4 dual core Xeon 3 GHz, 14 GB RAM, 2 70 GB SAS
disks.
Software Environment: Debian 3.1 (Sarge) with mainline kernel 2.6.18 patched
with SAS and AIC94xx drivers. Can be reproduced with kernel-2.6.19-rc2 without
patches (SAS and AIC94xx included in mainline)
Problem Description:

During the kernel boot sequence, it hangs in Calgary IOMMU init.

I put some traces in the kernel to show where:

-->calgary_iommu_init
 PCI-DMA: Using Calgary IOMMU
 -->calgary_init
 -->calgary_init_one
 Calgary: bus number 0 address 0xfda00000
 -->calgary_setup_tar
 -->calgary_reserve_regions
 <--calgary_reserve_regions
 Calgary: going to set up TAR <bbar ffffc20000080000>...
 before calgary_reg
 -->calgary_reg
 <--calgary_reg
 before readq(target)

It hangs at the first readq() after the calgary_req() in calgary_setup().

Steps to reproduce:

Configure kernel to use calgary IOMMU and boot.
You can can avoid the problem using "iommu=off".
Using "acpi=noirq" changes nothing.
Comment 1 Muli Ben-Yehuda 2006-10-24 08:32:19 UTC
Summarizing: we're hanging on the first Calgary register access, the machine
space address for Calgary registers (0xfda00000) and the ioremap response look
correct. The only clue so far is that this machine has a rev 2 Calgary, and the
code works fine on a rev 1 Calgary... I don't see anything obvious in the
errata, continuing to investigate.
Comment 2 Muli Ben-Yehuda 2006-10-29 03:08:22 UTC
Turns out the BIOS is initializing Calgary's BBAR register to a different
address than the one we were expecting. Laurent put together a preliminary patch
to get the BBAR address out of the BIOS supplied tables rather than calculate it
ourselves.
Comment 3 Muli Ben-Yehuda 2006-11-03 11:41:57 UTC
Patch submitted:
http://marc.theaimsgroup.com/?l=linux-kernel&m=116250442901467&w=2 and will be
included in 2.6.20.

Note You need to log in before you can comment on or make changes to this bug.