lkml.org 
[lkml]   [2007]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[BUG] 2.6.21.1: ide-pci is not finding ide controller.
    From

    I've got a rather old x86 box that I'm booting 2.6.21.1 on;
    this kernel is not finding an ide controller on it.

    The motherboard has 4 ide controllers total; two olde-fashioned
    ones (PIIX4, using the original 40-pin IDE ribbon cable) and two
    "HighPoint HPT366" controllers, taking the 80-pin cable.
    BIOS allows the two olde-fashioned channels to be enabled
    or disabled; but the HPT seems to alaways be on (I could not
    find any BIOS entry to play with them.)

    A bit of debugging localized the symptoms to drivers/ide/setup-pci.c
    It seems that there was some recent ide-pci fix that changed/fixed
    the way that pci config space is read' this "fix" breaks my recognition
    of my controller. I made a lame attempt to google for pci ide config
    space, but could not find any specs, and so can quite figure out what's
    wrong. Details below.

    First, a debugging patch; I can boot with this patch, because it
    disables the case that fails.

    Index: linux-2.6.21.1/drivers/ide/setup-pci.c
    ===================================================================
    --- linux-2.6.21.1.orig/drivers/ide/setup-pci.c 2007-05-22 20:03:10.000000000 -0500
    +++ linux-2.6.21.1/drivers/ide/setup-pci.c 2007-05-22 20:03:26.000000000 -0500
    @@ -585,15 +585,24 @@
    for (port = 0; port <= 1; ++port) {
    ide_pci_enablebit_t *e = &(d->enablebits[port]);

    +#if 0
    if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) ||
    (tmp & e->mask) != e->val))
    continue; /* port not enabled */
    +#endif
    + if (e->reg) {
    + int rc = pci_read_config_byte(dev, e->reg, &tmp);
    +printk ("duude port %d readrc=%d got ereg=%x, tmp=%x\n", port, rc, e->reg, tmp);
    + }
    +printk ("duuude port =%d tmp=%x mask=%x tmp&mask=%x val=%x\n", port, tmp, e->mask, tmp&e->mask, e->val);

    if (d->channels <= port)
    break;

    - if ((hwif = ide_hwif_configure(dev, d, mate, port, pciirq)) == NULL)
    - continue;
    + if ((hwif = ide_hwif_configure(dev, d, mate, port, pciirq)) == NULL) {
    +printk(KERN_ERR "duuude port=%d didn't work!!!!!!!!!!!!!!!!! \n", port);
    +continue;
    +}

    /* setup proper ancestral information */
    hwif->gendev.parent = &dev->dev;

    Now, for some output. I applied this patch to 2.6.19 (which boots fine)
    and to 2.6.21.1, so that behaviour can be compared. First, te 2.6.21
    output:


    [ 0.000000] Linux version 2.6.21.1linas (root@backlot) (gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)) #5 SMP PREEMPT Sat May 19 13:40:44 CDT 2007
    ...
    [ 35.177649] Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
    [ 35.177724] ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
    [ 35.177960] PIIX4: IDE controller at PCI slot 0000:00:07.1
    [ 35.178042] PCI: Enabling device 0000:00:07.1 (0000 -> 0001)
    [ 35.178219] PIIX4: chipset revision 1
    [ 35.178283] PIIX4: not 100% native mode: will probe irqs later
    [ 35.178355] duude port 0 readrc=0 got ereg=41, tmp=0
    [ 35.178421] duuude port =0 tmp=0 mask=80 tmp&mask=0 val=80
    tmp&mask != val, so this and the next
    controller are not ordinarily found.
    That's OK, since this controller is
    "disabled" in BIOS.

    [ 35.178505] ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:pio, hdb:pio
    [ 35.178689] duude port 1 readrc=0 got ereg=43, tmp=0
    [ 35.178754] duuude port =1 tmp=0 mask=80 tmp&mask=0 val=80
    [ 35.178824] ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:pio, hdd:pio
    [ 35.179010] Probing IDE interface ide0...
    [ 35.738016] Probing IDE interface ide1...
    [ 36.297984] HPT366: onboard version of chipset, pin1=1 pin2=2
    [ 36.298060] HPT366: IDE controller at PCI slot 0000:00:13.0
    [ 36.298143] ACPI: PCI Interrupt 0000:00:13.0[A] -> GSI 18 (level, low) -> IRQ 16
    [ 36.298275] HPT366: chipset revision 1
    [ 36.298350] HPT366: using 33 MHz PCI clock
    [ 36.298412] HPT366: 100% native mode on irq 16
    [ 36.298478] duude port 0 readrc=0 got ereg=50, tmp=33
    [ 36.298542] duuude port =0 tmp=33 mask=4 tmp&mask=0 val=4
    tmp&mask != val, so this, and the next
    controller is not usually found.
    By comparison, tmp, mask and val were
    all zero in 2.6.19-rc4 (see below)

    I cannot find any way to enable or
    disable this controller in BIOS.

    [ 36.298619] ide2: BM-DMA at 0xdc00-0xdc07, BIOS settings: hde:DMA, hdf:pio
    [ 36.298805] duude port 1 readrc=0 got ereg=54, tmp=33
    [ 36.298871] duuude port =1 tmp=33 mask=4 tmp&mask=0 val=4
    [ 36.298943] ACPI: PCI Interrupt 0000:00:13.1[B] -> GSI 18 (level, low) -> IRQ 16
    [ 36.299079] HPT366: using 33 MHz PCI clock
    [ 36.299145] duude port 0 readrc=0 got ereg=50, tmp=33
    [ 36.299210] duuude port =0 tmp=33 mask=4 tmp&mask=0 val=4
    [ 36.299284] ide3: BM-DMA at 0xe800-0xe807, BIOS settings: hdg:DMA, hdh:pio
    [ 36.299457] duude port 1 readrc=0 got ereg=54, tmp=33
    [ 36.299522] duuude port =1 tmp=33 mask=4 tmp&mask=0 val=4
    [ 36.299592] Probing IDE interface ide2...
    [ 36.586101] hde: Maxtor 6Y200P0, ATA DISK drive
    [ 37.258080] ide2 at 0xd400-0xd407,0xd802 on irq 16
    [ 37.258569] Probing IDE interface ide3...
    [ 37.545991] hdg: Maxtor 4G160J8, ATA DISK drive
    [ 38.217957] ide3 at 0xe000-0xe007,0xe402 on irq 16
    [ 38.219288] Probing IDE interface ide0...
    [ 38.781666] Probing IDE interface ide1...
    [ 39.341883] hde: max request size: 512KiB
    [ 39.342712] hde: 398297088 sectors (203928 MB) w/7936KiB Cache, CHS=24792/255/63, UDMA(66)
    [ 39.343158] hde: cache flushes supported
    [ 39.343357] hde: hde1 hde2 < hde5 hde6 hde7 hde8 hde9 >
    [ 39.387815] hdg: max request size: 512KiB
    [ 39.389453] hdg: 320173056 sectors (163928 MB) w/2048KiB Cache, CHS=19929/255/63, UDMA(66)
    [ 39.389747] hdg: cache flushes not supported
    [ 39.389949] hdg: hdg1 hdg2 < hdg5 hdg6 hdg7 hdg8 >

    ======================================================================
    For comparison, an older 2.6.19 kernel.

    [ 0.000000] Linux version 2.6.19-rc4-git3linas (root@backlot) (gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)) #2 SMP PREEMPT Tue May 22 20:07:21 CDT 2007
    [ 0.686498] Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
    [ 0.686570] ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
    [ 0.686805] PIIX4: IDE controller at PCI slot 0000:00:07.1
    [ 0.686888] PCI: Enabling device 0000:00:07.1 (0000 -> 0001)
    [ 0.686980] PIIX4: chipset revision 1
    [ 0.687041] PIIX4: not 100% native mode: will probe irqs later
    [ 0.687111] duude port 0 readrc=0 got ereg=41, tmp=0
    [ 0.687176] duuude port =0 tmp=0 mask=80 tmp&mask=0 val=80
    [ 0.687259] ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:pio, hdb:pio
    [ 0.687438] duude port 1 readrc=0 got ereg=43, tmp=0
    [ 0.687502] duuude port =1 tmp=0 mask=80 tmp&mask=0 val=80
    [ 0.687571] ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:pio, hdd:pio
    [ 0.687745] Probing IDE interface ide0...
    [ 1.255798] Probing IDE interface ide1...
    [ 1.819761] HPT366: onboard version of chipset, pin1=1 pin2=2
    [ 1.819843] HPT366: IDE controller at PCI slot 0000:00:13.0
    [ 1.819935] HPT366: chipset revision 1
    [ 1.820014] HPT366: 100% native mode on irq 18
    [ 1.820079] duuude port =0 tmp=0 mask=0 tmp&mask=0 val=0
    [ 1.820161] ide2: BM-DMA at 0xdc00-0xdc07, BIOS settings: hde:DMA, hdf:pio
    Why lookit! The older kernels got all zeros
    for ths test ... but the result is that the
    if statements pass, and the controller is
    recognized! I guess someone "fixed" this,
    breaking my system.

    [ 1.820342] duuude port =1 tmp=0 mask=0 tmp&mask=0 val=0
    [ 1.820435] duuude port =0 tmp=0 mask=0 tmp&mask=0 val=0
    [ 1.820517] ide3: BM-DMA at 0xe800-0xe807, BIOS settings: hdg:DMA, hdh:pio
    [ 1.820688] duuude port =1 tmp=0 mask=0 tmp&mask=0 val=0
    [ 1.820757] Probing IDE interface ide2...
    [ 2.111886] hde: Maxtor 6Y200P0, ATA DISK drive
    [ 2.787893] ide2 at 0xd400-0xd407,0xd802 on irq 18
    [ 2.788368] Probing IDE interface ide3...
    [ 3.079775] hdg: Maxtor 4G160J8, ATA DISK drive
    [ 3.755761] ide3 at 0xe000-0xe007,0xe402 on irq 18
    [ 3.757057] Probing IDE interface ide0...
    [ 4.323446] Probing IDE interface ide1...
    [ 4.887657] hde: max request size: 512KiB
    [ 4.888436] hde: 398297088 sectors (203928 MB) w/7936KiB Cache, CHS=24792/255/63, UDMA(66)
    [ 4.888869] hde: cache flushes supported
    [ 4.889141] hde: hde1 hde2 < hde5 hde6 hde7 hde8 hde9 >
    [ 4.949544] hdg: max request size: 512KiB
    [ 4.951136] hdg: 320173056 sectors (163928 MB) w/2048KiB Cache, CHS=19929/255/63, UDMA(66)
    [ 4.951410] hdg: cache flushes not supported
    [ 4.951610] hdg: hdg1 hdg2 < hdg5 hdg6 hdg7 hdg8 >
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-05-23 22:15    [W:0.033 / U:1.956 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site