i386/89214: FreeBSD 6.0 disc 1 boot fails to find CDROM

Arthur Hartwig arthur.hartwig at nokia.com
Mon Nov 21 23:01:05 PST 2005


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

From: Arthur Hartwig <arthur.hartwig at nokia.com>
To: bug-followup at FreeBSD.org, arthur.hartwig at nokia.com
Cc:  
Subject: Re: i386/89214: FreeBSD 6.0 disc 1 boot fails to find CDROM
Date: Tue, 22 Nov 2005 17:00:22 +1000

 I have further investigated the problem and found a workaround for my 
 particular configuration.
 
 The CDROM is connected as the SLAVE device on the SECONDARY IDE channel 
 of the Intel ICH7. A verbose boot showed that the slave device was not 
 being tested on the two IDE channels off the ICH7 and a debugging 
 session showed ATA_NO_SLAVE was being set (erroneously) in the 
 ata_channel structures associated with the ICH7.
 
 Fix:
 In ata_intel_reset() in ata-chipset.c treat ICH6 and ICH7 the same:
 
  > diff -b -C 3 ata-chipset.c.orig ata-chipset.c
 *** ata-chipset.c.orig  Tue Nov 22 11:41:06 2005
 --- ata-chipset.c       Tue Nov 22 11:48:25 2005
 ***************
 *** 1848,1854 ****
       /* ICH6 has 4 SATA ports as master/slave on 2 channels so deal with
 pairs */
       if (ctlr->chip->chipid == ATA_I82801FB_S1 ||
         ctlr->chip->chipid == ATA_I82801FB_R1 ||
 !       ctlr->chip->chipid == ATA_I82801FB_M) {
         mask = (0x0005 << ch->unit);
       }
       else {
 --- 1848,1855 ----
       /* ICH6 has 4 SATA ports as master/slave on 2 channels so deal with
 pairs */
       if (ctlr->chip->chipid == ATA_I82801FB_S1 ||
         ctlr->chip->chipid == ATA_I82801FB_R1 ||
 !       ctlr->chip->chipid == ATA_I82801FB_M  ||
 !       ctlr->chip->chipid == ATA_I82801GB_S1) {
         mask = (0x0005 << ch->unit);
       }
       else {
 
 but this should be generalised to cope with all the ICH7 variants. It 
 would probably be even better to rearrange the logic to better cope with 
 all the ICH variants in a more transparent way. (From the comments, the 
 current code seems to assume that if the ICH is not an ICH6 then it must 
 be an ICH5).
 
 After making this change and rebuilding the kernel the CDROM was found 
 and its details reported.
 
 
 
 


More information about the freebsd-i386 mailing list