2006-02-18 05:27:01

by Brian Hall

[permalink] [raw]
Subject: Help: DGE-560T not recognized by Linux


I have just built a new system, based on an Asrock 939Dual-Sata
motherboard. It only has 100MB built-in networking (uli526x), so I
purchased a D-Link DGE-560T PCI-e gigabit NIC ($81 at Newegg) thinking
it was supported by Linux. Looking at the card, it appears to be a
Marvell chip, but neither the sk98lin or skge drivers worked. I tried
other GBe drivers as well, they didn't recognize it either.

Is there a place where I can just add this card's ID and use one of the
sk* drivers? I paged through the source but didn't see an obvious place
to add a card ID, but it must be in there somewhere.

I'm not subscribed to linux-kernel, please CC: me on replies, thanks.

Here's the info from the card:
big M on the chip (Marvell I assume)
88E8052-NNC
GMAA17011A1
0442 A2P

and on the back of the card:

00005A708649 0592
DLink
531CL00467 DGE-560T 70-13-001-001

from lspci:

02:00.0 0200: 1186:4b00 (rev 11)
Subsystem: 1186:4b00

02:00.0 Ethernet controller: D-Link System Inc Unknown device 4b00 (rev
11) Subsystem: D-Link System Inc Unknown device 4b00
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR+ FastB2B- Status: Cap+ 66MHz- UDF- FastB2B-
ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR+ <PERR- Latency:
0, Cache Line Size 10 Interrupt: pin A routed to IRQ 11
Region 0: Memory at ff3fc000 (64-bit, non-prefetchable)
[size=16K] Region 2: I/O ports at 9800 [size=256]
Expansion ROM at 50000000 [disabled] [size=128K]
Capabilities: [48] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1
+,D2+,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [50] Vital Product Data
Capabilities: [5c] Message Signalled Interrupts: 64bit+
Queue=0/1 Enable- Address: 0000000000000000 Data: 0000
Capabilities: [e0] Express Legacy Endpoint IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0,
ExtTag- Device: Latency L0s unlimited, L1 unlimited
Device: AtnBtn- AtnInd- PwrInd-
Device: Errors: Correctable- Non-Fatal- Fatal-
Unsupported- Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop-
Device: MaxPayload 128 bytes, MaxReadReq 512 bytes
Link: Supported Speed 2.5Gb/s, Width x1, ASPM L0s, Port
214 Link: Latency L0s <256ns, L1 unlimited
Link: ASPM Disabled RCB 128 bytes CommClk- ExtSynch-
Link: Speed 2.5Gb/s, Width x1


--
Brian Hall, Linux Consultant http://pcisys.net/~brihall
"Smoke may indicate you have exceeded maximum performance levels."


2006-02-18 05:39:22

by Randy Dunlap

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Fri, 17 Feb 2006 22:27:20 -0700 Brian Hall wrote:

>
> I have just built a new system, based on an Asrock 939Dual-Sata
> motherboard. It only has 100MB built-in networking (uli526x), so I
> purchased a D-Link DGE-560T PCI-e gigabit NIC ($81 at Newegg) thinking
> it was supported by Linux. Looking at the card, it appears to be a
> Marvell chip, but neither the sk98lin or skge drivers worked. I tried
> other GBe drivers as well, they didn't recognize it either.
>
> Is there a place where I can just add this card's ID and use one of the
> sk* drivers? I paged through the source but didn't see an obvious place
> to add a card ID, but it must be in there somewhere.

The sky2 driver seems to support this device.
drivers/net/sky2.c
in very recent kernels.

> I'm not subscribed to linux-kernel, please CC: me on replies, thanks.
>
> Here's the info from the card:
> big M on the chip (Marvell I assume)
> 88E8052-NNC
> GMAA17011A1
> 0442 A2P
>
> and on the back of the card:
>
> 00005A708649 0592
> DLink
> 531CL00467 DGE-560T 70-13-001-001
>
> from lspci:
>
> 02:00.0 0200: 1186:4b00 (rev 11)
> Subsystem: 1186:4b00
>
> 02:00.0 Ethernet controller: D-Link System Inc Unknown device 4b00 (rev
> 11) Subsystem: D-Link System Inc Unknown device 4b00
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
> ParErr- Stepping- SERR+ FastB2B- Status: Cap+ 66MHz- UDF- FastB2B-
> ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR+ <PERR- Latency:
> 0, Cache Line Size 10 Interrupt: pin A routed to IRQ 11
> Region 0: Memory at ff3fc000 (64-bit, non-prefetchable)
> [size=16K] Region 2: I/O ports at 9800 [size=256]
> Expansion ROM at 50000000 [disabled] [size=128K]
> Capabilities: [48] Power Management version 2
> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1
> +,D2+,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=1 PME-
> Capabilities: [50] Vital Product Data
> Capabilities: [5c] Message Signalled Interrupts: 64bit+
> Queue=0/1 Enable- Address: 0000000000000000 Data: 0000
> Capabilities: [e0] Express Legacy Endpoint IRQ 0
> Device: Supported: MaxPayload 128 bytes, PhantFunc 0,
> ExtTag- Device: Latency L0s unlimited, L1 unlimited
> Device: AtnBtn- AtnInd- PwrInd-
> Device: Errors: Correctable- Non-Fatal- Fatal-
> Unsupported- Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop-
> Device: MaxPayload 128 bytes, MaxReadReq 512 bytes
> Link: Supported Speed 2.5Gb/s, Width x1, ASPM L0s, Port
> 214 Link: Latency L0s <256ns, L1 unlimited
> Link: ASPM Disabled RCB 128 bytes CommClk- ExtSynch-
> Link: Speed 2.5Gb/s, Width x1


---
~Randy

2006-02-18 06:26:05

by Andrew Morton

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

Brian Hall <[email protected]> wrote:
>
> I have just built a new system, based on an Asrock 939Dual-Sata
> motherboard. It only has 100MB built-in networking (uli526x), so I
> purchased a D-Link DGE-560T PCI-e gigabit NIC ($81 at Newegg) thinking
> it was supported by Linux. Looking at the card, it appears to be a
> Marvell chip, but neither the sk98lin or skge drivers worked. I tried
> other GBe drivers as well, they didn't recognize it either.
>
> Is there a place where I can just add this card's ID and use one of the
> sk* drivers? I paged through the source but didn't see an obvious place
> to add a card ID, but it must be in there somewhere.
>
> I'm not subscribed to linux-kernel, please CC: me on replies, thanks.
>
> Here's the info from the card:
> big M on the chip (Marvell I assume)
> 88E8052-NNC
> GMAA17011A1
> 0442 A2P
>
> and on the back of the card:
>
> 00005A708649 0592
> DLink
> 531CL00467 DGE-560T 70-13-001-001
>
> from lspci:
>
> 02:00.0 0200: 1186:4b00 (rev 11)
> Subsystem: 1186:4b00

See drivers/net/sk98lin/skge.c:skge_pci_tbl[]:

/* DLink card does not have valid VPD so this driver gags
* { PCI_VENDOR_ID_DLINK, 0x4c00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
*/

That's your card, except yours is 0x4b00.

You can try it, but it might gag...

Also see drivers/net/skge.c:skge_id_table[]:

{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, PCI_DEVICE_ID_DLINK_DGE510T), },

That's the same device as in sk98lin/skge.c. Try adding a line

{ PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4b00), },

2006-02-18 07:35:44

by Brian Hall

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Fri, 17 Feb 2006 22:24:28 -0800
Andrew Morton <[email protected]> wrote:

> Brian Hall <[email protected]> wrote:
> >
> > I have just built a new system, based on an Asrock 939Dual-Sata
> > motherboard. It only has 100MB built-in networking (uli526x), so I
> > purchased a D-Link DGE-560T PCI-e gigabit NIC ($81 at Newegg)
> > thinking it was supported by Linux. Looking at the card, it appears
> > to be a Marvell chip, but neither the sk98lin or skge drivers
> > worked. I tried other GBe drivers as well, they didn't recognize it
> > either.
> >
> > Is there a place where I can just add this card's ID and use one
> > of the sk* drivers? I paged through the source but didn't see an
> > obvious place to add a card ID, but it must be in there somewhere.
> >
> > I'm not subscribed to linux-kernel, please CC: me on replies,
> > thanks.
> >
> > Here's the info from the card:
> > big M on the chip (Marvell I assume)
> > 88E8052-NNC
> > GMAA17011A1
> > 0442 A2P
> >
> > and on the back of the card:
> >
> > 00005A708649 0592
> > DLink
> > 531CL00467 DGE-560T 70-13-001-001
> >
> > from lspci:
> >
> > 02:00.0 0200: 1186:4b00 (rev 11)
> > Subsystem: 1186:4b00
>
> See drivers/net/sk98lin/skge.c:skge_pci_tbl[]:
>
> /* DLink card does not have valid VPD so this driver gags
> * { PCI_VENDOR_ID_DLINK, 0x4c00, PCI_ANY_ID, PCI_ANY_ID, 0,
> 0, 0 }, */
>
> That's your card, except yours is 0x4b00.
>
> You can try it, but it might gag...

Didn't work at all, no effect.

> Also see drivers/net/skge.c:skge_id_table[]:
>
> { PCI_DEVICE(PCI_VENDOR_ID_DLINK,
> PCI_DEVICE_ID_DLINK_DGE510T), },
>
> That's the same device as in sk98lin/skge.c. Try adding a line
>
> { PCI_DEVICE(PCI_VENDOR_ID_DLINK, 0x4b00), },

Using sk98lin this "almost" worked- brought the line up, got a
gigabit connection light on my switch, but trying to assign an IP to
the interface results in a kernel panic. Not good...

I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
reason it fails to access the card, maybe because I have an ULi chipset?

Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config space
Feb 17 23:18:46 syrinx ACPI: PCI interrupt for device 0000:02:00.0
disabled
Feb 17 23:18:46 syrinx sky2: probe of 0000:02:00.0 failed with
error -22
Feb 17 23:23:03 syrinx ACPI: PCI Interrupt 0000:02:00.0[A] ->
GSI 30 (level, low) -> IRQ 24
Feb 17 23:23:03 syrinx PCI: Setting latency timer of device
0000:02:00.0 to 64
Feb 17 23:23:03 syrinx sky2 0000:02:00.0: can't
access PCI config space
Feb 17 23:23:03 syrinx ACPI: PCI interrupt for
device 0000:02:00.0 disabled
Feb 17 23:23:03 syrinx sky2: probe of
0000:02:00.0 failed with error -22

Here's the PCI options I have enabled in 2.6.16-rc4:
CONFIG_PCI=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCI_MSI=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_NET_PCI=y

# lspci
00:00.0 Host bridge: ALi Corporation M1695 K8 Northbridge [PCI Express and HyperTransport]
00:01.0 PCI bridge: ALi Corporation Unknown device 524b
00:02.0 PCI bridge: ALi Corporation Unknown device 524c
00:04.0 Host bridge: ALi Corporation M1689 K8 Northbridge [Super K8 Single Chip]
00:05.0 PCI bridge: ALi Corporation AGP8X Controller
00:06.0 PCI bridge: ALi Corporation M5249 HTT to PCI Bridge
00:07.0 ISA bridge: ALi Corporation M1563 HyperTransport South Bridge (rev 70)
00:07.1 Bridge: ALi Corporation M7101 Power Management Controller [PMU]
00:11.0 Ethernet controller: ALi Corporation M5263 Ethernet Controller (rev 40)
00:12.0 IDE interface: ALi Corporation M5229 IDE (rev c7)
00:12.1 IDE interface: ALi Corporation ULi 5289 SATA (rev 10)
00:13.0 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
00:13.1 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
00:13.2 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
00:13.3 USB Controller: ALi Corporation USB 2.0 Controller (rev 01)
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
02:00.0 Ethernet controller: D-Link System Inc Unknown device 4b00 (rev 11)
03:00.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 SE] (rev 01)
03:00.1 Display controller: ATI Technologies Inc RV280 [Radeon 9200 SE] (Secondary) (rev 01)
04:06.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 07)
04:06.1 Input device controller: Creative Labs SB Live! MIDI/Game Port (rev 07)

--
Brian Hall
Linux Consultant
http://pcisys.net/~brihall

2006-02-18 07:50:08

by Andrew Morton

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

Brian Hall <[email protected]> wrote:
>
> Using sk98lin this "almost" worked- brought the line up, got a
> gigabit connection light on my switch, but trying to assign an IP to
> the interface results in a kernel panic. Not good...

As Randy says, sky2 looks like your best bet.

> I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
> reason it fails to access the card, maybe because I have an ULi chipset?
>
> Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config space

Looks like something died way down in the PCI bus config space read/write
operations. I don't know what would cause that. You could perhaps play
with `pci=conf1', `pci=conf2', etc as per
Documentation/kernel-parameters.txt.

2006-02-18 15:55:00

by Edgar Hucek

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

I'm hitting here the same problem on the Intel iMac.

Here are some infos :

lspci -n :
02:00.0 0200: 11ab:4362 (rev 22)

lspci -vv:
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8053 PCI-E
Gigabit Ethernet Controller (rev 22)
Subsystem: Marvell Technology Group Ltd. Marvell RDK-8053
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 16
Region 0: Memory at 88200000 (64-bit, non-prefetchable) [size=16K]
Region 2: I/O ports at 1000 [size=256]
Expansion ROM at 1ff00000 [disabled] [size=128K]
Capabilities: [48] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [50] Vital Product Data
Capabilities: [5c] Message Signalled Interrupts: 64bit+
Queue=0/1 Enable-
Address: 0000000000000000 Data: 0000
Capabilities: [e0] Express Legacy Endpoint IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0,
ExtTag-
Device: Latency L0s unlimited, L1 unlimited
Device: AtnBtn- AtnInd- PwrInd-
Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
Device: MaxPayload 128 bytes, MaxReadReq 2048 bytes
Link: Supported Speed 2.5Gb/s, Width x1, ASPM L0s, Port 0
Link: Latency L0s <256ns, L1 unlimited
Link: ASPM Disabled RCB 128 bytes CommClk+ ExtSynch-
Link: Speed 2.5Gb/s, Width x1

Infos from dmesg :

ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 16 (level, low) -> IRQ 16
PCI: Setting latency timer of device 0000:02:00.0 to 64
sky2 0000:02:00.0: can't access PCI config space
ACPI: PCI interrupt for device 0000:02:00.0 disabled
sky2: probe of 0000:02:00.0 failed with error -22

If i can provide more infos let me know.

cu

Edgar

Andrew Morton wrote:
> Brian Hall <[email protected]> wrote:
>> Using sk98lin this "almost" worked- brought the line up, got a
>> gigabit connection light on my switch, but trying to assign an IP to
>> the interface results in a kernel panic. Not good...
>
> As Randy says, sky2 looks like your best bet.
>
>> I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
>> reason it fails to access the card, maybe because I have an ULi chipset?
>>
>> Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config space
>
> Looks like something died way down in the PCI bus config space read/write
> operations. I don't know what would cause that. You could perhaps play
> with `pci=conf1', `pci=conf2', etc as per
> Documentation/kernel-parameters.txt.
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2006-02-18 17:01:26

by Brian Hall

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Fri, 17 Feb 2006 23:48:41 -0800
Andrew Morton <[email protected]> wrote:
> Brian Hall <[email protected]> wrote:
> > I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
> > reason it fails to access the card, maybe because I have an ULi
> > chipset?
> >
> > Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config
> > space
>
> Looks like something died way down in the PCI bus config space
> read/write operations. I don't know what would cause that. You
> could perhaps play with `pci=conf1', `pci=conf2', etc as per
> Documentation/kernel-parameters.txt.

OK, I tried all these pci= options, plus acpi=off, to no effect:
conf1, conf2, nommconf, biosirq, noacpi, routeirq, nosort, rom,
lastbus=2, assign-busses, usepirqmask acpi=off

Also tried adjusting PCIe-related stuff in the BIOS (underclocking PCIe
from 100 to 70 and adjusting Northbridge options). No change.

Unfortunately this is the only PCIe card I have (my video is a AGP
Radeon 9200). Do I need to force this card to be enabled somehow with a
setpci command?

--
Brian Hall
Linux Consultant
http://pcisys.net/~brihall

2006-02-18 19:30:14

by Sergey Vlasov

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Sat, 18 Feb 2006 10:01:26 -0700 Brian Hall wrote:

> On Fri, 17 Feb 2006 23:48:41 -0800
> Andrew Morton <[email protected]> wrote:
> > Brian Hall <[email protected]> wrote:
> > > I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
> > > reason it fails to access the card, maybe because I have an ULi
> > > chipset?
> > >
> > > Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config
> > > space
> >
> > Looks like something died way down in the PCI bus config space
> > read/write operations. I don't know what would cause that. You
> > could perhaps play with `pci=conf1', `pci=conf2', etc as per
> > Documentation/kernel-parameters.txt.
>
> OK, I tried all these pci= options, plus acpi=off, to no effect:
> conf1, conf2, nommconf, biosirq, noacpi, routeirq, nosort, rom,
> lastbus=2, assign-busses, usepirqmask acpi=off
>
> Also tried adjusting PCIe-related stuff in the BIOS (underclocking PCIe
> from 100 to 70 and adjusting Northbridge options). No change.

Most likely it fails here:

err = pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
0xffffffffUL);
if (err)
goto pci_err;

PEX_UNC_ERR_STAT is 0x104; this register is outside of the standard
256-byte PCI configuration space, and is reachable only via the MMCONFIG
access mechanism. Seems that kernel is not using MMCONFIG for some
reason; you mentioned that you have CONFIG_PCI_MMCONFIG=y in kernel
config, so it looks like your BIOS does not provide proper MCFG table.
Full dmesg output might give some clues.


Attachments:
(No filename) (1.49 kB)
(No filename) (190.00 B)
Download all attachments

2006-02-19 00:32:28

by Stephen Hemminger

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Sat, 18 Feb 2006 22:29:46 +0300
Sergey Vlasov <[email protected]> wrote:

> On Sat, 18 Feb 2006 10:01:26 -0700 Brian Hall wrote:
>
> > On Fri, 17 Feb 2006 23:48:41 -0800
> > Andrew Morton <[email protected]> wrote:
> > > Brian Hall <[email protected]> wrote:
> > > > I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
> > > > reason it fails to access the card, maybe because I have an ULi
> > > > chipset?
> > > >
> > > > Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config
> > > > space
> > >
> > > Looks like something died way down in the PCI bus config space
> > > read/write operations. I don't know what would cause that. You
> > > could perhaps play with `pci=conf1', `pci=conf2', etc as per
> > > Documentation/kernel-parameters.txt.
> >
> > OK, I tried all these pci= options, plus acpi=off, to no effect:
> > conf1, conf2, nommconf, biosirq, noacpi, routeirq, nosort, rom,
> > lastbus=2, assign-busses, usepirqmask acpi=off
> >
> > Also tried adjusting PCIe-related stuff in the BIOS (underclocking PCIe
> > from 100 to 70 and adjusting Northbridge options). No change.
>
> Most likely it fails here:
>
> err = pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
> 0xffffffffUL);
> if (err)
> goto pci_err;
>
> PEX_UNC_ERR_STAT is 0x104; this register is outside of the standard
> 256-byte PCI configuration space, and is reachable only via the MMCONFIG
> access mechanism. Seems that kernel is not using MMCONFIG for some
> reason; you mentioned that you have CONFIG_PCI_MMCONFIG=y in kernel
> config, so it looks like your BIOS does not provide proper MCFG table.
> Full dmesg output might give some clues.

The problem can also be caused by buggy BIOS's that don't report
proper values for mmconfig space. There is some code in mmconfig.c that
tries to handle that. It might not handle what ever your system is reporting.
Andi Kleen seems to be the last person involved and might be able to help.

It would be useful to add some printk's to mmconfig to dump out the table
after it discovers the table.

2006-02-19 01:04:52

by Greg KH

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Sat, Feb 18, 2006 at 04:35:55PM -0800, Stephen Hemminger wrote:
> On Sat, 18 Feb 2006 22:29:46 +0300
> Sergey Vlasov <[email protected]> wrote:
>
> > On Sat, 18 Feb 2006 10:01:26 -0700 Brian Hall wrote:
> >
> > > On Fri, 17 Feb 2006 23:48:41 -0800
> > > Andrew Morton <[email protected]> wrote:
> > > > Brian Hall <[email protected]> wrote:
> > > > > I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
> > > > > reason it fails to access the card, maybe because I have an ULi
> > > > > chipset?
> > > > >
> > > > > Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config
> > > > > space
> > > >
> > > > Looks like something died way down in the PCI bus config space
> > > > read/write operations. I don't know what would cause that. You
> > > > could perhaps play with `pci=conf1', `pci=conf2', etc as per
> > > > Documentation/kernel-parameters.txt.
> > >
> > > OK, I tried all these pci= options, plus acpi=off, to no effect:
> > > conf1, conf2, nommconf, biosirq, noacpi, routeirq, nosort, rom,
> > > lastbus=2, assign-busses, usepirqmask acpi=off
> > >
> > > Also tried adjusting PCIe-related stuff in the BIOS (underclocking PCIe
> > > from 100 to 70 and adjusting Northbridge options). No change.
> >
> > Most likely it fails here:
> >
> > err = pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
> > 0xffffffffUL);
> > if (err)
> > goto pci_err;
> >
> > PEX_UNC_ERR_STAT is 0x104; this register is outside of the standard
> > 256-byte PCI configuration space, and is reachable only via the MMCONFIG
> > access mechanism. Seems that kernel is not using MMCONFIG for some
> > reason; you mentioned that you have CONFIG_PCI_MMCONFIG=y in kernel
> > config, so it looks like your BIOS does not provide proper MCFG table.
> > Full dmesg output might give some clues.
>
> The problem can also be caused by buggy BIOS's that don't report
> proper values for mmconfig space. There is some code in mmconfig.c that
> tries to handle that. It might not handle what ever your system is reporting.
> Andi Kleen seems to be the last person involved and might be able to help.
>
> It would be useful to add some printk's to mmconfig to dump out the table
> after it discovers the table.

Andi has a follow-on patch at:
http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/gregkh-03-pci/pci-give-pci-config-access-initialization-a-defined-ordering.patch
that should take care of these kinds of mmconfig issues by ordering the
pci config accessors properly.

Can you test this patch out to see if it fixes this problem on your
machine?

thanks,

greg k-h

2006-02-19 02:55:06

by Brian Hall

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

For the benefit of anyone searching later:

The problem was the current linux Marvell drivers (2.6.15/16rc4) not
detecting my Dlink card. After trying and failing to compile with the
linux driver (2.6.13-based) supplied on the retail CD (suprised, didn't
even think to look there at first!), I went to the Marvell site
directly and downloaded their version of the sk98lin driver, which
comes with a script to create a patch against whatever your current
linux version is in /usr/src/linux. That was found at:

http://www.marvell.com/drivers/driverDisplay.do?dId=107&pId=10

Yukon GigE Linux driver, Jan 12 2006, install-8_30.tar.bz2

After applying the generated patch against 2.6.15-ck4, I now have a
version of sk98lin that works with my DGE-560T.

Feb 18 16:59:31 syrinx sk98lin: Network Device Driver v8.30.2.3
Feb 18 16:59:31 syrinx (C)Copyright 1999-2005 Marvell(R).
Feb 18 16:59:31 syrinx ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 30
(level, low) -> IRQ 19
Feb 18 16:59:31 syrinx PCI: Setting latency timer of device
0000:02:00.0 to 64 Feb 18 16:59:31 syrinx eth0: DGE-560T Gigabit
PCI-Express Ethernet Adapter
Feb 18 16:59:31 syrinx PrefPort:A RlmtMode:Check Link State
Feb 18 16:59:35 syrinx eth0: network connection up using port A
Feb 18 16:59:35 syrinx speed: 1000
Feb 18 16:59:35 syrinx autonegotiation: yes
Feb 18 16:59:35 syrinx duplex mode: full
Feb 18 16:59:35 syrinx flowctrl: symmetric
Feb 18 16:59:35 syrinx role: slave
Feb 18 16:59:35 syrinx irq moderation: disabled
Feb 18 16:59:35 syrinx tcp offload: enabled
Feb 18 16:59:35 syrinx scatter-gather: enabled
Feb 18 16:59:35 syrinx tx-checksum: enabled
Feb 18 16:59:35 syrinx rx-checksum: enabled
Feb 18 16:59:35 syrinx rx-polling: enabled

I'll try the kernel sk* drivers again when >=2.6.16 is released.

A further note, neither the Yukon DOS diagnostics that came with the
card (v6.27.1.3), nor the newer diagnostics that I downloaded from
Marvell (v6.30.x.y) could properly detect my card. Kept getting the
error "Board register check failed". Just in case anyone might think
that would indicate a bad card, in my case it didn't. This was with an
Opteron 165 on an Asrock 939Dual-SATA2.

--
Brian Hall
Linux Consultant
http://pcisys.net/~brihall

2006-02-19 07:41:42

by Jerome Lacoste

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On 2/19/06, Brian Hall <[email protected]> wrote:
> For the benefit of anyone searching later:
>
> The problem was the current linux Marvell drivers (2.6.15/16rc4) not
> detecting my Dlink card. After trying and failing to compile with the
> linux driver (2.6.13-based) supplied on the retail CD (suprised, didn't
> even think to look there at first!), I went to the Marvell site
> directly and downloaded their version of the sk98lin driver, which
> comes with a script to create a patch against whatever your current
> linux version is in /usr/src/linux. That was found at:
>
> http://www.marvell.com/drivers/driverDisplay.do?dId=107&pId=10

Interesting. First time I see a vendor distribute a GPL kernel source
patch. It could be interesting to diff this with what is in the
current kernel.

J

2006-02-19 16:20:34

by Brian Hall

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Sat, 18 Feb 2006 17:04:41 -0800
Greg KH <[email protected]> wrote:
> On Sat, Feb 18, 2006 at 04:35:55PM -0800, Stephen Hemminger wrote:
> > The problem can also be caused by buggy BIOS's that don't report
> > proper values for mmconfig space. There is some code in mmconfig.c
> > that tries to handle that. It might not handle what ever your
> > system is reporting. Andi Kleen seems to be the last person
> > involved and might be able to help.
> >
> > It would be useful to add some printk's to mmconfig to dump out the
> > table after it discovers the table.
>
> Andi has a follow-on patch at:
> http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/gregkh-03-pci/pci-give-pci-config-access-initialization-a-defined-ordering.patch
> that should take care of these kinds of mmconfig issues by ordering
> the pci config accessors properly.
>
> Can you test this patch out to see if it fixes this problem on your
> machine?

I applied this patch to 2.6.15-ck4 and 2.6.14-rc4, in both cases the
compilation fails the same way:

CC arch/x86_64/pci/../../i386/pci/acpi.o
CC arch/x86_64/pci/../../i386/pci/common.o
CC arch/x86_64/pci/../../i386/pci/direct.o
CC arch/x86_64/pci/../../i386/pci/fixup.o
CC arch/x86_64/pci/../../i386/pci/i386.o
CC arch/x86_64/pci/../../i386/pci/init.o
CC arch/x86_64/pci/../../i386/pci/irq.o
CC arch/x86_64/pci/../../i386/pci/legacy.o
CC arch/x86_64/pci/mmconfig.o
arch/x86_64/pci/mmconfig.c:143: error: conflicting types for
'pci_mmcfg_init' arch/i386/pci/pci.h:85: error: previous declaration of
'pci_mmcfg_init' was here arch/x86_64/pci/mmconfig.c:143: error:
conflicting types for 'pci_mmcfg_init' arch/i386/pci/pci.h:85: error:
previous declaration of 'pci_mmcfg_init' was here make[1]: ***
[arch/x86_64/pci/mmconfig.o] Error 1 make: *** [arch/x86_64/pci] Error 2
make: *** Waiting for unfinished jobs....

I've attached my current dmesg output (using the Marvell sk98lin driver
that works for me), and also my current kernel config.

--
Brian Hall, Linux Consultant http://pcisys.net/~brihall
A day without radiation is like a day without sunshine.


Attachments:
2.6.15-ck4.dmesg.txt.gz (5.29 kB)
config.gz (3.66 kB)
Download all attachments

2006-02-19 17:14:15

by Andi Kleen

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Sunday 19 February 2006 17:20, Brian Hall wrote:
> On Sat, 18 Feb 2006 17:04:41 -0800
> Greg KH <[email protected]> wrote:
> > On Sat, Feb 18, 2006 at 04:35:55PM -0800, Stephen Hemminger wrote:
> > > The problem can also be caused by buggy BIOS's that don't report
> > > proper values for mmconfig space. There is some code in mmconfig.c
> > > that tries to handle that. It might not handle what ever your
> > > system is reporting. Andi Kleen seems to be the last person
> > > involved and might be able to help.
> > >
> > > It would be useful to add some printk's to mmconfig to dump out the
> > > table after it discovers the table.
> >
> > Andi has a follow-on patch at:
> > http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/gregkh-03-pci/pci-give-pci-config-access-initialization-a-defined-ordering.patch
> > that should take care of these kinds of mmconfig issues by ordering
> > the pci config accessors properly.
> >
> > Can you test this patch out to see if it fixes this problem on your
> > machine?
>
> I applied this patch to 2.6.15-ck4 and 2.6.14-rc4, in both cases the
> compilation fails the same way:

The patch is for 2.6.16-rc3, not 2.6.15 or earlier prehistory. In general
we only care about the latest kernels on these lists.

-Andi

2006-02-20 11:47:41

by Willy Tarreau

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

Hi Greg,

On Sat, Feb 18, 2006 at 05:04:41PM -0800, Greg KH wrote:
> On Sat, Feb 18, 2006 at 04:35:55PM -0800, Stephen Hemminger wrote:
> > On Sat, 18 Feb 2006 22:29:46 +0300
> > Sergey Vlasov <[email protected]> wrote:
> >
> > > On Sat, 18 Feb 2006 10:01:26 -0700 Brian Hall wrote:
> > >
> > > > On Fri, 17 Feb 2006 23:48:41 -0800
> > > > Andrew Morton <[email protected]> wrote:
> > > > > Brian Hall <[email protected]> wrote:
> > > > > > I see that the sky2 driver in 2.6.16rc4 lists my card, but for some
> > > > > > reason it fails to access the card, maybe because I have an ULi
> > > > > > chipset?
> > > > > >
> > > > > > Feb 17 23:18:46 syrinx sky2 0000:02:00.0: can't access PCI config
> > > > > > space
> > > > >
> > > > > Looks like something died way down in the PCI bus config space
> > > > > read/write operations. I don't know what would cause that. You
> > > > > could perhaps play with `pci=conf1', `pci=conf2', etc as per
> > > > > Documentation/kernel-parameters.txt.
> > > >
> > > > OK, I tried all these pci= options, plus acpi=off, to no effect:
> > > > conf1, conf2, nommconf, biosirq, noacpi, routeirq, nosort, rom,
> > > > lastbus=2, assign-busses, usepirqmask acpi=off
> > > >
> > > > Also tried adjusting PCIe-related stuff in the BIOS (underclocking PCIe
> > > > from 100 to 70 and adjusting Northbridge options). No change.
> > >
> > > Most likely it fails here:
> > >
> > > err = pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
> > > 0xffffffffUL);
> > > if (err)
> > > goto pci_err;
> > >
> > > PEX_UNC_ERR_STAT is 0x104; this register is outside of the standard
> > > 256-byte PCI configuration space, and is reachable only via the MMCONFIG
> > > access mechanism. Seems that kernel is not using MMCONFIG for some
> > > reason; you mentioned that you have CONFIG_PCI_MMCONFIG=y in kernel
> > > config, so it looks like your BIOS does not provide proper MCFG table.
> > > Full dmesg output might give some clues.
> >
> > The problem can also be caused by buggy BIOS's that don't report
> > proper values for mmconfig space. There is some code in mmconfig.c that
> > tries to handle that. It might not handle what ever your system is reporting.
> > Andi Kleen seems to be the last person involved and might be able to help.
> >
> > It would be useful to add some printk's to mmconfig to dump out the table
> > after it discovers the table.
>
> Andi has a follow-on patch at:
> http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/gregkh-03-pci/pci-give-pci-config-access-initialization-a-defined-ordering.patch
> that should take care of these kinds of mmconfig issues by ordering the
> pci config accessors properly.
>
> Can you test this patch out to see if it fixes this problem on your
> machine?

Today, I had the *exact* same problem on one server equipped with the same
card. I tried the patch above which did not change anything. However, I
finally fixed it by simply enabling ACPI. Then it always works with and
without the patch above. I could not test marvell's driver because it does
not build on 2.6.16-rc4, but strangely my previous kernel on this machine
was a 2.6.12-rc4-mm2 patched with marvell's driver and with ACPI disabled.

So it seems that marvell's driver on 2.6.12 was able to access config space
even without ACPI while sky2 on 2.6.16-rc4 cannot. I have no idea why,
unfortunately.

Just my 2 cents,
Willy

2006-02-20 12:56:51

by Sergey Vlasov

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Mon, Feb 20, 2006 at 12:43:41PM +0100, Willy Tarreau wrote:
> Today, I had the *exact* same problem on one server equipped with the same
> card. I tried the patch above which did not change anything. However, I
> finally fixed it by simply enabling ACPI. Then it always works with and
> without the patch above. I could not test marvell's driver because it does
> not build on 2.6.16-rc4, but strangely my previous kernel on this machine
> was a 2.6.12-rc4-mm2 patched with marvell's driver and with ACPI disabled.
>
> So it seems that marvell's driver on 2.6.12 was able to access config space
> even without ACPI while sky2 on 2.6.16-rc4 cannot. I have no idea why,
> unfortunately.

Apparently Marvell's driver accesses PCIE configuration registers through
I/O ports specific to their hardware:

/*
* Macro PCI_C()
*
* Use this macro to access PCI config register from the I/O space.
*
* para:
* pAC Pointer to adapter context
* Addr PCI configuration register to access.
* Values: PCI_VENDOR_ID ... PCI_VPD_ADR_REG,
*
* usage SK_IN16(IoC, PCI_C(pAC, PCI_VENDOR_ID), pVal);
*/
#define PCI_C(p, Addr) \
(((CHIP_ID_YUKON_2(p)) ? Y2_CFG_SPC : B7_CFG_SPC) + (Addr))

...

/* clear any PEX errors */
SK_OUT32(IoC, PCI_C(pAC, PEX_UNC_ERR_STAT), 0xffffffffUL);

SK_IN16(IoC, PCI_C(pAC, PEX_LNK_STAT), &Word);

pAC->GIni.GIPexWidth = (SK_U8)((Word & PEX_LS_LINK_WI_MSK) >> 4);

...

SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);

SK_OUT16(IoC, PCI_C(pAC, PEX_DEV_CTRL), Word);

SK_OUT8(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);

...

/* clear the interrupt */
SK_OUT32(IoC, B2_TST_CTRL1, TST_CFG_WRITE_ON);
SK_OUT32(IoC, PCI_C(pAC, PEX_UNC_ERR_STAT), 0xffffffffUL);
SK_OUT32(IoC, B2_TST_CTRL1, TST_CFG_WRITE_OFF);

But sky2 uses standard pci_read_config_*, pci_write_config_* functions,
which require working MMCONFIG access. Maybe sky2 should be changed to
use I/O space for access to PCIE-specific configuration registers.


Attachments:
(No filename) (1.92 kB)
(No filename) (189.00 B)
Download all attachments

2006-02-22 03:51:20

by Brian Hall

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

On Mon, Feb 20, 2006 at 12:43:41PM +0100, Willy Tarreau wrote:
> Today, I had the *exact* same problem on one server equipped with the same
> card. I tried the patch above which did not change anything. However, I
> finally fixed it by simply enabling ACPI. Then it always works with and
> without the patch above. I could not test marvell's driver because it does
> not build on 2.6.16-rc4, but strangely my previous kernel on this machine
> was a 2.6.12-rc4-mm2 patched with marvell's driver and with ACPI disabled.
>
> So it seems that marvell's driver on 2.6.12 was able to access config space
> even without ACPI while sky2 on 2.6.16-rc4 cannot. I have no idea why,
> unfortunately.
>
> Just my 2 cents,
> Willy

Thanks for the input. As far as I can tell I do have ACPI enabled, and
sky2 still fails on 2.6.15, 2.6.16-rc3 or -rc4. See my attached dmesg
output and config.

Also, if you get the latest driver from Marvel it does apply to more
recent kernels (install-8_30.tar.bz2), 2.6.15 for sure.

I have the Marvell script generated patches for 2.6.15 and
2.6.16-rc3 available, but they are 350K each compressed which seems
a bit large to email.

I made them available from my website if you are interested:

http://home.pcisys.net/~brihall/sk98lin_v8.30.2.3_2.6.15_patch.gz

http://home.pcisys.net/~brihall/sk98lin_v8.30.2.3_2.6.16_patch.gz


--
Brian Hall
Linux Consultant
http://pcisys.net/~brihall


Attachments:
(No filename) (1.38 kB)
config.gz (3.66 kB)
2.6.15-ck4.dmesg.txt.gz (5.29 kB)
Download all attachments

2006-02-22 19:52:32

by Stephen Hemminger

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux

I just posted a bunch of patches to netdev, one of them is the one to
workaround/avoid pci_config issues.

2006-02-28 15:08:31

by Brian Hall

[permalink] [raw]
Subject: Re: Help: DGE-560T not recognized by Linux


sky2 works for my card in 2.6.16-rc5:

GSI 21 sharing vector 0x32 and IRQ 21
ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 30 (level, low) -> IRQ 50
PCI: Setting latency timer of device 0000:02:00.0 to 64
sky2 v0.15 addr 0xff2fc000 irq 50 Yukon-EC (0xb6) rev 1
sky2 eth0: addr 00:00:5a:70:86:49
sky2 0000:02:00.0: No interrupt was generated using MSI, switching to
INTx mode. Please report this failure to the PCI maintainer and include
system chipset information.
uli526x: ULi M5261/M5263 net driver, version 0.9.3 (2005-7-29)
GSI 22 sharing vector 0x42 and IRQ 22
ACPI: PCI Interrupt 0000:00:11.0[A] -> GSI 17 (level, low) -> IRQ 66
eth1: ULi M5263 at pci0000:00:11.0, 00:13:8f:78:b3:32, irq 66.

I do have Message Signalled Interrupts enabled, and PCIe, although MSI
doesn't seem to work. Possibly not supported on my ULi motherboard
(Asrock 939Dual-Sata2, M1689/M1563 chipset).

dmesg and lspci attached.

--
Brian Hall
Linux Consultant
http://pcisys.net/~brihall


Attachments:
2.6.16-rc5.dmesg.gz (5.07 kB)
lspci.txt.gz (3.44 kB)
Download all attachments