linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* PowerDomain 3940UWD
@ 1999-09-09 17:14 Ryuichi Oikawa
  1999-09-09 18:14 ` Michel Lanners
  0 siblings, 1 reply; 5+ messages in thread
From: Ryuichi Oikawa @ 1999-09-09 17:14 UTC (permalink / raw)
  To: linuxppc-dev


Hello all,

I've tried Adaptec PowerDomain 3094UWD, dual channel UW SCSI card
with PCI-PCI bridge and two SCSI controllers under the bridge,
and I noticed driver related and OF related problems.

First I tried vger 2.2.12 kernel that caused machine check exception
at first IO write transaction. I thought that this was normal because
OF didn't properly set up P2P bridge's IO forwarding window.
The real problem was this part(aic7xxx.c):

#ifdef MMAPIO
          if ( !(temp_p->flags & AHC_MULTI_CHANNEL) ||
               ((temp_p->chip != (AHC_AIC7870 | AHC_PCI)) &&
                (temp_p->chip != (AHC_AIC7880 | AHC_PCI))) )
          {
	   ...... select MMIO and does ioremap ....
           ...... if it fails select normal IO ....
	  }
#endif

that rejected my SCSI card from MMIO forcing normal IO resulting in machin
check. So I had to ignore this statement by #if !defined(__powerpc__) ...
#endif statement.

Does anyone know what is this restriction for?


After that aic7xxx.c properly detected two SCSI chips but entered in a
timeout/resetting loop:-(  Apparently interrupts weren't fixed-up by
pcibios_fixup. So I scanned OF searching for correnct IRQ number and
found it at AAPL,interrupts field of P2P bridge. SCSI controllers didn't
have any AAPL,interrupts of course. It seems OF inserts AAPL,interrupts
only at the top node of the slot when it detects a card in the physical
slot. Therefore I had to change arch/ppc/kernel/prom.c as 

--- prom.c.orig	Sun Aug 29 00:22:21 1999
+++ prom.c	Thu Sep  9 22:38:07 1999
@@ -915,8 +915,12 @@
 	}
 
 	ip = (int *) get_property(np, "AAPL,interrupts", &l);
-	if (ip == 0)
-		ip = (int *) get_property(np, "interrupts", &l);
+	if (ip == 0) {
+	  if(get_property(np, "AAPL,slot-name", &l) != 0 && np->parent != 0)
+	    ip = (int *) get_property(np->parent, "AAPL,interrupts", &l);
+	  else
+	    ip = (int *) get_property(np, "interrupts", &l);
+	}
 	if (ip != 0) {
 		np->intrs = (struct interrupt_info *) mem_start;
 		np->n_intrs = l / sizeof(int);

,and now aic7xxx.c is working fine for both SCSI channel.

I don't know if it is OF(PowerMac8500, OF 1.0.5) version specific,
or SCSI card specific, or PowerMac OF nature. Any ideas?


Regards,

Ryuichi Oikawa
roikawa@rr.iij4u.or.jp


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~1999-09-18 19:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
1999-09-09 17:14 PowerDomain 3940UWD Ryuichi Oikawa
1999-09-09 18:14 ` Michel Lanners
1999-09-11 17:57   ` Ryuichi Oikawa
1999-09-12 21:02     ` Michel Lanners
1999-09-18 19:07       ` Ryuichi Oikawa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).