Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: amd64-current (still?) won't boot (another one)



On Sat, Aug 11, 2012 at 09:45:36PM +0200, Manuel Bouyer wrote:
> On Sat, Aug 11, 2012 at 07:09:31PM +0200, Markus W Kilbinger wrote:
> > Just build / tried a new actual kernel with your workaround: It fixes
> > (mostly) the problem: My machine is functioning normally again, all
> > harddisk are found and run fine.
> > 
> > Small 'but': The mainboards disk activity LED stays always lit !?
> > 
> > Just cosmetics?
> 
> I'll see if I can reproduce this problem on an amd machine I have here.

Or maybe you can try the attached patch (I can't test before one week) ?

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--
Index: ahcisata_core.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/ahcisata_core.c,v
retrieving revision 1.41
diff -u -p -u -r1.41 ahcisata_core.c
--- ahcisata_core.c     10 Aug 2012 16:35:00 -0000      1.41
+++ ahcisata_core.c     11 Aug 2012 20:00:26 -0000
@@ -644,6 +644,7 @@ ahci_do_reset_drive(struct ata_channel *
        uint32_t sig;
 
        KASSERT((AHCI_READ(sc, AHCI_P_CMD(chp->ch_channel)) & AHCI_P_CMD_CR) == 
0);
+again:
        /* clear port interrupt register */
        AHCI_WRITE(sc, AHCI_P_IS(chp->ch_channel), 0xffffffff);
        /* clear SErrors and start operations */
@@ -660,7 +661,6 @@ ahci_do_reset_drive(struct ata_channel *
        if (drive > 0) {
                KASSERT(sc->sc_ahci_cap & AHCI_CAP_SPM);
        }
-again:
        /* polled command, assume interrupts are disabled */
        /* use slot 0 to send reset, the channel is idle */
        cmd_h = &achp->ahcic_cmdh[0];
@@ -701,6 +701,7 @@ again:
                         * try again with port 0
                         */
                        drive = 0;
+                       ahci_channel_stop(sc, chp, flags);
                        goto again;
                }
                aprint_error("%s channel %d: clearing WDCTL_RST failed "


Home | Main Index | Thread Index | Old Index