Re: PCI rescan issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2014/6/19 21:35, Jon Baker wrote:
> 
> On 06/19/2014 12:25 AM, Yijing Wang wrote:
>> On 2014/6/19 9:33, Jon Baker wrote:
>>> I am trying to find a solution to a Linux PCI rescan problem.
>>>
>>> I have CentOS 6.5
>>>
>>>     [jbaker@server0 ~]$ uname -a
>>>     Linux server0 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
>> Can you test it in the latest kernel?
> 
> Not easily, this is a system shared amongst several developers and containing some specific tools and applications. And unfortunately we know this works with a 3.X kernel on an embedded target used by another group at our company. - Jon
>>
>>> I have an Altera FPGA PCIe protoboard I am trying to test in a TYAN FT77A-B7059.
>>>
>>> We are trying to solve some hotplug/FPGA reload issues; when we reload the FPGA the PCI interface reloads confusing linux pci code.
>>>
>>> After bootup the board is seen by the kernel; lscpi shows Altera FPGA PCIe protoboard settings and config space.  We can load our driver and all is well.
>>>
>>> When we reload the FPGA lscpi display shows all "ff" for config space.  As root I tried
>> What happened during you reload the FPGA? reset PCI device or other anything?
> I do not know, we have not monitored this.  The PCI interface is contained within the FPGA so I don't really know for sure how that behaves on reload. - Jon

If you find lspci PCI device return all ff after FPGA reload, and you do nothing during reload. I think the PCI device can not found after
your FPAG reload, as I mentioned, maybe the PCI device power or link has problems. I think this is not a Linux problem.

You can try this:
1. echo 1 > /sys/bus/pci/devices/0000:8a:00.0/remove
2. Reload FPGA board.
3. echo 1 > /sys/bus/pci/rescan
4. lspci to show your PCI device

Here make your device removed before FPGA board reload, avoid some stall device info in OS.

or

You can go to /sys/bus/pci/slots/ to find whether your PCI device support hotplug.
If yes, you can
echo 0 > /sys/bus/pci/slots/$device/power
echo 1 > /sys/bus/pci/slots/$device/power
reset the PCI device, then lspci show device whether is found.

>>
>>>     echo 1 > /sys/bus/pci/rescan
>>>
>>> But no change to lspci output.
>>>
>>> I tried some variants
>>>
>>>     echo 1 > /sys/bus/pci/devices/0000:8a:00.0/rescan
>>>
>>> no change to lspci output.
>>>
>>>     echo 1 > /sys/bus/pci/devices/0000:8a:00.0/remove
>>>     echo 1 > /sys/bus/pci/rescan
>> I guess the device link to your board was disconnect. Maybe the power to device is off or link error. So OS
>> can not access pci device config space and return nothing found.
>>
>> If you provide more detailed info is better. like lspci -vvvxxx, dmesg etc. before and after your operations.
> 
> I have logged this...
> 
> After system power up (case where everything works expected):
> 
>     $ lspci -vvv -xx -s 13:00.0
>     13:00.0 Non-VGA unclassified device: Device 1b83:f002 (rev 01)
>             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-
>             Latency: 0, Cache Line Size: 64 bytes
>             Interrupt: pin A routed to IRQ 11
>             Region 0: Memory at dcc00000 (32-bit, non-prefetchable) [size=256K]
>             Region 1: Memory at dcb00000 (32-bit, non-prefetchable) [size=1M]
>             Capabilities: <access denied>
>     00: 83 1b 02 f0 06 00 10 00 01 00 00 00 10 00 00 00
>     10: 00 00 c0 dc 00 00 b0 dc 00 00 00 00 00 00 00 00
>     20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 00

Can you show the upstream port device lspci info ? If 13:00.0 device support hotplug, upstream device got a register
to control the slot power.


> 
> 
> After FPGA reload:
> 
>     $ lspci -vvv -xx -s 13:00.0
>     13:00.0 Non-VGA unclassified device: Device 1b83:f002 (rev ff) (prog-if ff)
>             !!! Unknown header type 7f
>     00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>     10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>     20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>     30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> 
> 
> - Jon
> 
>>
>>> This removed the device and it did not show up again in lscpi.
>>>
>>> Kernel has PCI HOTPLUG enabled:
>>>
>>>     [jbaker@server0 ~]$ cat /boot/config-2.6.32-431.el6.x86_64 | grep HOTPLUG
>>>     CONFIG_HOTPLUG=y
>>>     CONFIG_MEMORY_HOTPLUG=y
>>>     CONFIG_MEMORY_HOTPLUG_SPARSE=y
>>>     CONFIG_HOTPLUG_CPU=y
>>>     CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
>>>     CONFIG_ACPI_HOTPLUG_CPU=y
>>>     CONFIG_ACPI_HOTPLUG_MEMORY=y
>>>     CONFIG_ACPI_HOTPLUG_MEMORY_AUTO_ONLINE=y
>>>     CONFIG_HOTPLUG_PCI_PCIE=y
>>>     CONFIG_HOTPLUG_PCI=y
>>>     CONFIG_HOTPLUG_PCI_FAKE=m
>>>     CONFIG_HOTPLUG_PCI_ACPI=y
>>>     CONFIG_HOTPLUG_PCI_ACPI_IBM=m
>>>     # CONFIG_HOTPLUG_PCI_CPCI is not set
>>>     CONFIG_HOTPLUG_PCI_SHPC=m
>>>     [jbaker@server0 ~]$
>>>
>>> The kernel has pciehp module loaded, I see pciehp messages in /var/log/messages.
>>>
>>> In other distros, on other platforms, echo 1 > /sys/bus/pci/rescan has worked but does not appear to work here for CentOS 6.5 on this hardware.
>>>
>>> This problem is much discussed on the web but I have yet to see a solution discussed. I am thinking the 2.6.32-431.5.1.el6.x86_64 kernel may require a patch(es).  The rescan may not be resetting the PCIe card?
>>>
>>> Any ideas how to get rescan to work?
>>>
>>> Thank you,
>>>
>>> Jon Baker
>>>
>>
> 
> -- 
> ===================================
> Jon Baker
> Software Engineer
> ViaSat Inc.
> Cleveland OH
> 216-706-7800
> jon.baker@xxxxxxxxxx
> www.viasat.com
> ===================================
> 


-- 
Thanks!
Yijing

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux