linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* Status of PCI-PCI bridge on UMAX S900
@ 2000-12-25  3:03 jingai
  0 siblings, 0 replies; 12+ messages in thread
From: jingai @ 2000-12-25  3:03 UTC (permalink / raw)
  To: debian-powerpc, linuxppc-dev


Hello, I am just curious if anyone is working on getting the PCI-PCI
bridge code working for the UMAX S900 (similar to 9500, but
obviously different enough to break the code).  The problem is this:
all cards not in slots 1-2 are assigned an IRQ of 1, which is
obviously wrong.  I'm not sure why slot 3 does not work, however,
unless the code just thinks the PCI bridge *is* slot 3 (which it does
appear to be that way).

If no one is currently attempting to fix it, but someone would like to,
here is all of the relevant info I can think of.  Thanks in advance for
any help.

Location of the pci bridge in /proc is:

/proc/device-tree/bandit/pci-bridge/AAPL,interrupts

colour:/home/jingai# lspci
00:0b.0 Host bridge: Apple Computer Inc. Bandit PowerPC host bridge (rev
03)
00:0d.0 Unknown mass storage controller: Promise Technology, Inc. 20267
(rev 02)
00:0e.0 USB Controller: OPTi Inc. 82C861 (rev 10)
00:0f.0 PCI bridge: Digital Equipment Corporation DECchip 21052 (rev 01)
00:10.0 Class ff00: Apple Computer Inc. Grand Central I/O (rev 02)
01:01.0 VGA compatible controller: ATI Technologies Inc Rage 128 RE
01:02.0 Ethernet controller: 3Com Corporation 3c905C-TX [Fast Etherlink]
(rev 30)

colour:/home/jingai# lspci -vv
00:0b.0 Host bridge: Apple Computer Inc. Bandit PowerPC host bridge (rev
03)
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort+ >SERR- <PERR-
        Latency: 32, cache line size 08

00:0d.0 Unknown mass storage controller: Promise Technology, Inc. 20267
(rev 02)
        Subsystem: Promise Technology, Inc.: Unknown device 4d33
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
        Latency: 32
        Interrupt: pin A routed to IRQ 23
        Region 0: I/O ports at 2070 [size=8]
        Region 1: I/O ports at 2060 [size=4]
        Region 2: I/O ports at 2050 [size=8]
        Region 3: I/O ports at 2040 [size=4]
        Region 4: I/O ports at 2000 [size=64]
        Region 5: Memory at 88020000 (32-bit, non-prefetchable) [size=128K]
        Expansion ROM at 88010000 [disabled] [size=64K]
        Capabilities: [58] Power Management version 1
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-

00:0e.0 USB Controller: OPTi Inc. 82C861 (rev 10) (prog-if 10 [OHCI])
        Subsystem: OPTi Inc. 82C861
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR+
        Latency: 32, cache line size 08
        Interrupt: pin A routed to IRQ 24
        Region 0: Memory at 88000000 (32-bit, non-prefetchable) [size=4K]

00:0f.0 PCI bridge: Digital Equipment Corporation DECchip 21052 (rev 01)
(prog-if 00 [Normal decode])
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
        Latency: 32, cache line size 08
        Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
        I/O behind bridge: 00001000-00001fff
        Memory behind bridge: 80800000-87ffffff
        BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-

00:10.0 Class ff00: Apple Computer Inc. Grand Central I/O (rev 02)
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR+
        Latency: 32, cache line size 08
        Region 0: Memory at f3000000 (32-bit, non-prefetchable) [size=128K]

01:01.0 VGA compatible controller: ATI Technologies Inc Rage 128 RE
(prog-if 00 [VGA])
        Subsystem: Unknown device b530:0408
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping+ SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
        Latency: 32 (2000ns min), cache line size 08
        Interrupt: pin A routed to IRQ 1
        Region 0: Memory at 84000000 (32-bit, prefetchable) [size=64M]
        Region 1: I/O ports at 1000 [size=256]
        Region 2: Memory at 80804000 (32-bit, non-prefetchable) [size=16K]
        Expansion ROM at 80840000 [disabled] [size=128K]
        Capabilities: [5c] Power Management version 1
                Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-

01:02.0 Ethernet controller: 3Com Corporation 3c905C-TX [Fast Etherlink]
(rev 30)
        Subsystem: 3Com Corporation 3C905C-TX Fast Etherlink for PC
Management NIC
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
        Latency: 32 (2500ns min, 2500ns max), cache line size 08
        Interrupt: pin A routed to IRQ 1
        Region 0: I/O ports at 1400 [size=128]
        Region 1: Memory at 80800000 (32-bit, non-prefetchable) [size=128]
        Expansion ROM at 80820000 [disabled] [size=128K]
        Capabilities: [dc] Power Management version 2
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0+,D1+,D2+,D3hot+,D3cold-)
                Status: D0 PME-Enable+ DSel=0 DScale=2 PME-


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

^ permalink raw reply	[flat|nested] 12+ messages in thread
[parent not found: <j-jvNB.A.O4F.4jrR6@murphy>]
* Re: Re: Status of PCI-PCI bridge on UMAX S900
  2000-12-27 10:06 ` Benjamin Herrenschmidt
@ 2000-12-28  4:05 jingai
  2000-12-28 14:13 ` Chas Williams
  -1 siblings, 1 reply; 12+ messages in thread
From: jingai @ 2000-12-28  4:05 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: debian-powerpc


> >Hello, I am just curious if anyone is working on getting the PCI-PCI
> >bridge code working for the UMAX S900...
>
> If you want to give it a look by yourself, the code that gets the
> interrupt numbers is in arch/ppc/prom.c. Look at the bits that use the
> "AAPL,interrupt" property and modify it slightly so that when it can't
> find it, it looks for the parent.

Ok, I've given it a more thorough looksee, and here is what I have done:

--- prom.c  Wed Dec 27 22:54:42 2000
+++ prom.c.old  Wed Dec 27 22:04:15 2000
@@ -1566,10 +1566,6 @@
    ip = (int *) get_property(np, "AAPL,interrupts", &l);
    if (ip == 0)
        ip = (int *) get_property(np, "interrupts", &l);
-   /* JSL: HACK FOR UMAX S900 PCI-PCI BRIDGE (DECchip 21052)
-    */
-   if (ip == 0 && np->parent != NULL)
-           ip = (int *) get_property(np->parent, "AAPL,interrupts", &l);
    if (ip != 0) {
        np->intrs = (struct interrupt_info *) mem_start;
        np->n_intrs = l / sizeof(int);

I have verified that the code I added is in fact called when it probes the
two
cards in slots 3 and 4; however, *ip == 1 for both cards.  It seems as
though
the IRQ info cannot be retrieved from AAPL,interrupts, or it is just
incorrect.

I did try *manually* setting the IRQs for these cards to 25 and 26, which
as I expected, did not work... (it appears to have the same effect as
when they are set to 1, considering that is also incorrect).

If it might help, the card in slot 4 is my second ethernet card (used for
my LAN -- internal is used for DSL), and it *does* work a little --
here is output from ping:

PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=7648.2 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=6656.9 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=5657.2 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=255 time=4654.8 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=255 time=3657.5 ms
64 bytes from 192.168.1.2: icmp_seq=5 ttl=255 time=2656.7 ms
64 bytes from 192.168.1.2: icmp_seq=6 ttl=255 time=1657.8 ms
64 bytes from 192.168.1.2: icmp_seq=7 ttl=255 time=657.9 ms

--- 192.168.1.2 ping statistics ---
11 packets transmitted, 8 packets received, 27% packet loss
round-trip min/avg/max = 657.9/4155.8/7648.2 ms

As you might notice, 7648.2ms is pretty bad for a machine in the
next room :)  Not to mention the 27% packet loss..

Anyway, I think I am stepping out of my bounds here now... hopefully
this is enough information for someone to give me some more pointers
on where I should look..

/me really wishes he were a kernel guru right now :)

TIA,
Jonathan

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

^ permalink raw reply	[flat|nested] 12+ messages in thread
* Re: Re: Status of PCI-PCI bridge on UMAX S900
@ 2000-12-29  0:16 jingai
  2000-12-29 15:09 ` Chas Williams
  0 siblings, 1 reply; 12+ messages in thread
From: jingai @ 2000-12-29  0:16 UTC (permalink / raw)
  To: debian-powerpc, linuxppc-dev


> just a short followup to the message i sent to debian-powerpc, i applied
> the following diff and was able to move my usb board to the other side of
the
>
> umax/s900 bridge w/o any ill effect:
>
> --- prom.c.000  Thu Dec 28 08:43:12 2000
> +++ prom.c      Thu Dec 28 09:06:16 2000
> @@ -1563,8 +1563,8 @@
>         }
>
>         ip = (int *) get_property(np, "AAPL,interrupts", &l);
> -       if (ip == 0)
> -               ip = (int *) get_property(np, "interrupts", &l);
> +       if (ip == 0 && np->parent != NULL)
> +               ip = (int *) get_property(np->parent, "AAPL,interrupts",
> &l);
>         if (ip != 0) {
>                 np->intrs = (struct interrupt_info *) mem_start;
>                 np->n_intrs = l / sizeof(int);

Doh!  I didn't even think to check if the second get_property() call
was returning > 0.. this fixes it!  Thanks bunches for spotting that!

> on a related, note, shouldnt the 'right' code be:
>
>     ip = (int *) get_property(np, "interrupts", &l);
>     if (ip > 0)
>     {
>         /* find and assign interrupt -- see above */
>     }
>
> pci boards should only get an interrupt if they have the interrupt
> property (which seems to be the number of interrupts, not the interrupt
number)

Seems correct to me, but I'm no kernel guru, so I'll let someone else
answer
authoritatively.

-j


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

^ permalink raw reply	[flat|nested] 12+ messages in thread
* Re: Re: Status of PCI-PCI bridge on UMAX S900
  2001-01-04 20:41     ` Benjamin Herrenschmidt
@ 2001-01-04 22:48 jingai
  2001-01-04 22:53 ` David Edelsohn
  0 siblings, 1 reply; 12+ messages in thread
From: jingai @ 2001-01-04 22:48 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev


> The "interrupts" property can have various meanings depending on the OF
> version, I suggest you don't mess with it. Just check that if you find no
> AAPL,interrupts, and that pmac_newworld == 0, then look for parent
> AAPL,interrupts.

So, then does the following patch seem valid?  If so, I'd appreciate it if
others with different macs (newworld and oldworld) could try it and let
me know if it breaks anything...

..and if not, how would one go about getting this into the official trees?


--- prom.c.old  Wed Jan  3 20:31:59 2001
+++ prom.c      Thu Jan  4 17:44:02 2001
@@ -1564,8 +1564,15 @@
        }

        ip = (int *) get_property(np, "AAPL,interrupts", &l);
-       if (ip == 0)
+       if (ip == 0) {
+           /* hack to force a look at the parent node for interrupts on
+            * oldworld macs with funky PCI<->PCI bridges (ie, UMAX S900)
+            */
+           if (!pmac_newworld && np->parent != NULL)
+               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);
@@ -1617,8 +1624,15 @@
                return mem_start;

        ip = (int *) get_property(np, "AAPL,interrupts", &l);
-       if (ip == 0)
+       if (ip == 0) {
+           /* hack to force a look at the parent node for interrupts on
+            * oldworld macs with funky PCI<->PCI bridges (ie, UMAX S900)
+            */
+           if (!pmac_newworld && np->parent != NULL)
+               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);
@@ -1774,8 +1788,15 @@
                return mem_start;

        ip = (int *) get_property(np, "AAPL,interrupts", &l);
-       if (ip == 0)
+       if (ip == 0) {
+           /* hack to force a look at the parent node for interrupts on
+            * oldworld macs with funky PCI<->PCI bridges (ie, UMAX S900)
+            */
+           if (!pmac_newworld && np->parent != NULL)
+               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);


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

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

end of thread, other threads:[~2001-01-05 19:51 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-12-25  3:03 Status of PCI-PCI bridge on UMAX S900 jingai
     [not found] <j-jvNB.A.O4F.4jrR6@murphy>
2000-12-27 10:06 ` Benjamin Herrenschmidt
  -- strict thread matches above, loose matches on Subject: below --
2000-12-28  4:05 jingai
2000-12-28 14:13 ` Chas Williams
2000-12-29  0:16 jingai
2000-12-29 15:09 ` Chas Williams
2001-01-04 19:19   ` Tibor Pausz
2001-01-04 20:41     ` Benjamin Herrenschmidt
2001-01-04 20:57       ` David Edelsohn
2001-01-04 21:17         ` Benjamin Herrenschmidt
2001-01-04 21:19           ` Benjamin Herrenschmidt
2001-01-04 22:26     ` Chas Williams
2001-01-05 19:51       ` Tibor Pausz
2001-01-04 22:48 jingai
2001-01-04 22:53 ` David Edelsohn

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).