i386/73706: ATA_IDENTIFY timed out under FreeBSD 5.3

Jonas Davidsson aphex at bredband.net
Wed Dec 8 08:10:30 PST 2004


The following reply was made to PR i386/73706; it has been noted by GNATS.

From: Jonas Davidsson <aphex at bredband.net>
To: Maxim Frolov <mfr at compumatica.de>
Cc: freebsd-gnats-submit at FreeBSD.org
Subject: Re: i386/73706: ATA_IDENTIFY timed out under FreeBSD 5.3
Date: Wed, 08 Dec 2004 17:05:16 +0100

 RELENG_5_3-p2 looks like this:
 
         if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline)) {
 #if defined(__ia64__) || defined(__i386__) || defined(__amd64__)
                 /*
                  * Try to re-route interrupts. Sometimes the BIOS or
                  * firmware may leave bogus values in these registers.
                  * If the re-route fails, then just stick with what we
                  * have.
                  */
                 irq = PCI_ASSIGN_INTERRUPT(bus, dev);
                 if (PCI_INTERRUPT_VALID(irq)) {
                         pci_write_config(dev, PCIR_INTLINE, irq, 1);
                         cfg->intline = irq;
                 } else
 #endif
                         irq = cfg->intline;
                 resource_list_add(rl, SYS_RES_IRQ, 0, irq, irq, 1);
         }
 
 
 Do you mean to comment out everything between "#if defined" and "#endif"?
 This would leave
         if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline)) {
                         irq = cfg->intline;
                 resource_list_add(rl, SYS_RES_IRQ, 0, irq, irq, 1);
         }
 
 active. Just checking to make sure, will try this tonight.
 
 Maxim Frolov wrote:
 > I found a workaround (or solution) for the problem:
 > 
 > In file sys/dev/pci/pci.c:
 > 
 > If the following block is commented out, ATA devices on primary controller are 
 > working:
 > 
 > #if 0
 > #if defined(__ia64__) || defined(__i386__) || defined(__amd64__) || \
 > defined(__arm__)
 > /*
 >  * Try to re-route interrupts. Sometimes the BIOS or
 >  * firmware may leave bogus values in these registers.
 >  * If the re-route fails, then just stick with what we
 >  * have.
 >  */
 > irq = PCI_ASSIGN_INTERRUPT(bus, dev);
 > if (PCI_INTERRUPT_VALID(irq)) {
 > pci_write_config(dev, PCIR_INTLINE, irq, 1);
 > cfg->intline = irq;
 > } else
 > #endif
 > #endif
 > 
 > 
 > 
 > 


More information about the freebsd-i386 mailing list