PCIe Bar "Memory at <unassigned>"

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

PCIe Bar "Memory at <unassigned>"

Jump to solution
6,956 Views
gertbrünz
Contributor I

Hi,

I have a custom PCIe board (Gennum GN4124 + Altera Cyclone4) connected to SABRESD board with i.mx6q.

(Poky (Yocto Project Reference Distro) 1.6.1 imx6qsabresd /dev/ttymxc0)

The Gennum PCIe bridge requests 3 memory regions 1M+1M+4k, but the system does not assigned any memory.

root@imx6qsabresd:~# lspci -vv

01:00.0 Non-VGA unclassified device: Device 1a39:0004 (rev 01)

        Subsystem: Device 1a39:0001
        Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Interrupt: pin A routed to IRQ 155
        Region 0: Memory at <unassigned> (64-bit, non-prefetchable) [disabled] [size=1M]
        Region 2: Memory at <unassigned> (64-bit, non-prefetchable) [disabled] [size=1M]
        Region 4: Memory at <unassigned> (64-bit, non-prefetchable) [disabled] [size=4K]
        Capabilities: [40] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME+
        Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [58] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s unlimited, L1 unlimited
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range ABCD, TimeoutDis-, LTR-, OBFF Not Supported
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
                LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-
                         EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-

root@imx6qsabresd:~# dmesg | grep pci

pci_bus 0000:00: root bus resource [io  0x1000-0x10000]
pci_bus 0000:00: root bus resource [mem 0x01000000-0x01efffff]
pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
pci_bus 0000:00: scanning bus
pci 0000:00:00.0: [16c3:abcd] type 01 class 0x060400
pci 0000:00:00.0: reg 10: [mem 0x00000000-0x000fffff]
pci 0000:00:00.0: reg 38: [mem 0x00000000-0x0000ffff pref]
pci 0000:00:00.0: calling pci_fixup_ide_bases+0x0/0x3c
pci 0000:00:00.0: supports D1
pci 0000:00:00.0: PME# supported from D0 D1 D3hot D3cold
pci 0000:00:00.0: PME# disabled
pci_bus 0000:00: fixups for bus
pci 0000:00:00.0: scanning [bus 01-01] behind bridge, pass 0
pci 0000:00:00.0: scanning [bus 00-00] behind bridge, pass 1
pci_bus 0000:01: scanning bus
pci 0000:01:00.0: [1a39:0004] type 00 class 0x000000
pci 0000:01:00.0: reg 10: [mem 0x00000000-0x000fffff 64bit]
pci 0000:01:00.0: reg 18: [mem 0x00000000-0x000fffff 64bit]
pci 0000:01:00.0: reg 20: [mem 0x00000000-0x00000fff 64bit]
pci 0000:01:00.0: calling pci_fixup_ide_bases+0x0/0x3c
pci_bus 0000:01: fixups for bus
pci_bus 0000:01: bus scan returning with max=01
pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
pci_bus 0000:00: bus scan returning with max=01
pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 01
pci 0000:00:00.0: fixup irq: got 155
pci 0000:00:00.0: assigning IRQ 155
pci 0000:01:00.0: fixup irq: got 155
pci 0000:01:00.0: assigning IRQ 155
pci 0000:00:00.0: BAR 0: assigned [mem 0x01000000-0x010fffff]
pci 0000:00:00.0: BAR 0: set to [mem 0x01000000-0x010fffff] (PCI address [0x1000000-0x10fffff])
pci 0000:00:00.0: BAR 8: assigned [mem 0x01100000-0x013fffff]
pci 0000:00:00.0: BAR 6: assigned [mem 0x01400000-0x0140ffff pref]
pci 0000:00:00.0: PCI bridge to [bus 01]
pci 0000:00:00.0:   bridge window [mem 0x01100000-0x013fffff]
pci_bus 0000:00: resource 4 [io  0x1000-0x10000]
pci_bus 0000:00: resource 5 [mem 0x01000000-0x01efffff]
pci_bus 0000:01: resource 1 [mem 0x01100000-0x013fffff]
ehci-pci: EHCI PCI platform driver

The PCIe card works fine on a Intel Atom based embedded system.

Can someone help me in finding a solution please?

Thank you very much.

Labels (2)
0 Kudos
1 Solution
4,090 Views
gertbrünz
Contributor I

Hi,

the problem is solved by setting the PCI class to 0x0680 (bridge device other).

Then the requested memory regions are assigned.

root@MBa6x:~

01:00.0 Bridge: Device 1a39:0004 (rev 01)
        Subsystem: Device 1a39:0001
        Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Interrupt: pin A routed to IRQ 385
        Region 0: Memory at 01100000 (64-bit, non-prefetchable) [size=1M]
        Region 2: Memory at 01200000 (64-bit, non-prefetchable) [size=1M]
        Region 4: Memory at 01300000 (64-bit, non-prefetchable) [size=4K]
        Capabilities: [40] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [48] MSI: Mask- 64bit+ Count=4/4 Enable+
                Address: 00000000472b5000  Data: 0001
        Capabilities: [58] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 unlimited, L1 unlimited
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range ABCD, TimeoutDis-
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
                LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -6dB
        Kernel driver in use: cyclone4

in file: drivers/pci/setup-bus.c

static void __dev_sort_resources(struct pci_dev *dev,  struct list_head *head)

{

    u16 class = dev->class >> 8;

    /* Don't touch classless devices or host bridges or ioapics.  */

    if (class == PCI_CLASS_NOT_DEFINED || class == PCI_CLASS_BRIDGE_HOST)

        return;

    /* Don't touch ioapic devices already enabled by firmware */

    if (class == PCI_CLASS_SYSTEM_PIC) {

        u16 command;

        pci_read_config_word(dev, PCI_COMMAND, &command);

        if (command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))

            return;

    }

    pdev_sort_resources(dev, head);

}

here my classless device missed the memory assignment.

Thanks for your help.

Gert

View solution in original post

0 Kudos
2 Replies
4,091 Views
gertbrünz
Contributor I

Hi,

the problem is solved by setting the PCI class to 0x0680 (bridge device other).

Then the requested memory regions are assigned.

root@MBa6x:~

01:00.0 Bridge: Device 1a39:0004 (rev 01)
        Subsystem: Device 1a39:0001
        Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Interrupt: pin A routed to IRQ 385
        Region 0: Memory at 01100000 (64-bit, non-prefetchable) [size=1M]
        Region 2: Memory at 01200000 (64-bit, non-prefetchable) [size=1M]
        Region 4: Memory at 01300000 (64-bit, non-prefetchable) [size=4K]
        Capabilities: [40] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [48] MSI: Mask- 64bit+ Count=4/4 Enable+
                Address: 00000000472b5000  Data: 0001
        Capabilities: [58] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 unlimited, L1 unlimited
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range ABCD, TimeoutDis-
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
                LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -6dB
        Kernel driver in use: cyclone4

in file: drivers/pci/setup-bus.c

static void __dev_sort_resources(struct pci_dev *dev,  struct list_head *head)

{

    u16 class = dev->class >> 8;

    /* Don't touch classless devices or host bridges or ioapics.  */

    if (class == PCI_CLASS_NOT_DEFINED || class == PCI_CLASS_BRIDGE_HOST)

        return;

    /* Don't touch ioapic devices already enabled by firmware */

    if (class == PCI_CLASS_SYSTEM_PIC) {

        u16 command;

        pci_read_config_word(dev, PCI_COMMAND, &command);

        if (command & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))

            return;

    }

    pdev_sort_resources(dev, head);

}

here my classless device missed the memory assignment.

Thanks for your help.

Gert

0 Kudos
4,090 Views
jamesbone
NXP TechSupport
NXP TechSupport

We are analyzing your request internally .


Have a great day,
Jaime

0 Kudos