Re: 2.2.18 megaraid driver broken [was: Re: Linux 2.2.18pre11]

From: Miquel van Smoorenburg (miquels@cistron.nl)
Date: Fri Sep 29 2000 - 09:50:31 EST


According to Miquel van Smoorenburg:
> The megaraid driver in 2.2.18 doesn't work with MegaRaid 434 cards.
> I've tried it on 2 different systems. Using 2.2.18pre11 with the
> megaraid.[ch] from 2.2.17 works just fine.
>
> I've only been able to test with SMP systems though - perhaps this is
> a uniprocessor / SMP problem ?

Right, I've now booted a non-smp kernel - same problem still.
Magic sysrq tells me that the kernel is stuck at 0xc01ca3b9, which
in my kernel is megaIssueCmd()

Disassembling the kernel and comparing it with the source code,
it turns out that it's stuck in

        while (mbox->numstatus == 0xFF);

Now megaIssueCmd() was changed in the 2.2.18 patch, and this is
the part that seems to be responsible for it (see below).

Alan, can you forward this to the maintainer, or tell me from whom
you got the 2.2.18 patch so I can forward this to them ?

@@ -1261,10 +1519,18 @@
     if (megaCfg->flag & BOARD_QUARTZ) {
       mbox->mraid_poll = 0;
       mbox->mraid_ack = 0;
+ mbox->numstatus = 0xFF;
+ mbox->status = 0xFF;
       WRINDOOR (megaCfg, phys_mbox | 0x1);
 
- while ((cmdDone = RDOUTDOOR (megaCfg)) != 0x10001234);
- WROUTDOOR (megaCfg, cmdDone);
+ while (mbox->numstatus == 0xFF);
+ while (mbox->status == 0xFF);
+ while (mbox->mraid_poll != 0x77);
+ mbox->mraid_poll = 0;
+ mbox->mraid_ack = 0x77;
+
+ /* while ((cmdDone = RDOUTDOOR (megaCfg)) != 0x10001234);
+ WROUTDOOR (megaCfg, cmdDone);*/
 
       if (pScb) {
         mega_cmd_done (megaCfg, pScb, mbox->status);

Mike.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Sep 30 2000 - 21:00:24 EST