Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Nov 2005 07:01:04 GMT
From:      Arthur Hartwig <arthur.hartwig@nokia.com>
To:        freebsd-i386@FreeBSD.org
Subject:   Re: i386/89214: FreeBSD 6.0 disc 1 boot fails to find CDROM
Message-ID:  <200511220701.jAM714j7068331@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR i386/89214; it has been noted by GNATS.

From: Arthur Hartwig <arthur.hartwig@nokia.com>
To: bug-followup@FreeBSD.org, arthur.hartwig@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.
 
 
 
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200511220701.jAM714j7068331>