Opened 3 years ago

Last modified 4 months ago

#13046 assigned bug

Hide downstream PCI devices when not present

Reported by: kallisti5 Owned by: nobody
Priority: normal Milestone: Unscheduled
Component: System/Kernel Version: R1/Development
Keywords: PCI hotplug Cc:
Blocked By: Blocking:
Has a Patch: no Platform: All

Description (last modified by kallisti5)

It seems newer skylake systems can have "hidden" PCI devices. Haiku currently iterates through all PCI devices resulting in drivers (such as XHCI) attempting to access invalid PCI devices (memory spaces return all 0xffffffff)

Attached is the lspci on linux from a small dell dongle plugged and unplugged.

Haiku sees the PCI bus like the plugged output.

Overview:

Linux, no USB C dongles:

$ lspci -tvnn
-[0000:00]-+-00.0  Intel Corporation Skylake Host Bridge/DRAM Registers [8086:1904]
           +-02.0  Intel Corporation HD Graphics 520 [8086:1916]
           +-04.0  Intel Corporation Skylake Processor Thermal Subsystem [8086:1903]
           +-14.0  Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller [8086:9d2f]
           +-14.2  Intel Corporation Sunrise Point-LP Thermal subsystem [8086:9d31]
           +-15.0  Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 [8086:9d60]
           +-15.1  Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 [8086:9d61]
           +-16.0  Intel Corporation Sunrise Point-LP CSME HECI #1 [8086:9d3a]
           +-17.0  Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] [8086:9d03]
           +-1c.0-[01-39]--
           +-1c.4-[3a]----00.0  Intel Corporation Wireless 7265 [8086:095a]
           +-1c.5-[3b]----00.0  Realtek Semiconductor Co., Ltd. RTS525A PCI Express Card Reader [10ec:525a]
           +-1f.0  Intel Corporation Sunrise Point-LP LPC Controller [8086:9d48]
           +-1f.2  Intel Corporation Sunrise Point-LP PMC [8086:9d21]
           +-1f.3  Intel Corporation Sunrise Point-LP HD Audio [8086:9d70]
           \-1f.4  Intel Corporation Sunrise Point-LP SMBus [8086:9d23]

Linux, USB C dongle plugged in:

-[0000:00]-+-00.0  Intel Corporation Skylake Host Bridge/DRAM Registers [8086:1904]
           +-02.0  Intel Corporation HD Graphics 520 [8086:1916]
           +-04.0  Intel Corporation Skylake Processor Thermal Subsystem [8086:1903]
           +-14.0  Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller [8086:9d2f]
           +-14.2  Intel Corporation Sunrise Point-LP Thermal subsystem [8086:9d31]
           +-15.0  Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 [8086:9d60]
           +-15.1  Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 [8086:9d61]
           +-16.0  Intel Corporation Sunrise Point-LP CSME HECI #1 [8086:9d3a]
           +-17.0  Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] [8086:9d03]
           +-1c.0-[01-39]----00.0-[02-39]--+-00.0-[03]--
           |                               +-01.0-[04-38]--
           |                               \-02.0-[39]----00.0  Intel Corporation DSL6340 USB 3.1 Controller [Alpine Ridge] [8086:15b5]
           +-1c.4-[3a]----00.0  Intel Corporation Wireless 7265 [8086:095a]
           +-1c.5-[3b]----00.0  Realtek Semiconductor Co., Ltd. RTS525A PCI Express Card Reader [10ec:525a]
           +-1f.0  Intel Corporation Sunrise Point-LP LPC Controller [8086:9d48]
           +-1f.2  Intel Corporation Sunrise Point-LP PMC [8086:9d21]
           +-1f.3  Intel Corporation Sunrise Point-LP HD Audio [8086:9d70]
           \-1f.4  Intel Corporation Sunrise Point-LP SMBus [8086:9d23]

Attachments (3)

lspci-unplugged.txt (10.6 KB) - added by kallisti5 3 years ago.
USB C Dongle unattached - Linux
lspci-plugged.txt (14.6 KB) - added by kallisti5 3 years ago.
USB C Dongle attached - Linux
IMG_20161102_085935.jpg (425.3 KB) - added by kallisti5 3 years ago.

Download all attachments as: .zip

Change History (13)

Changed 3 years ago by kallisti5

Attachment: lspci-unplugged.txt added

USB C Dongle unattached - Linux

Changed 3 years ago by kallisti5

Attachment: lspci-plugged.txt added

USB C Dongle attached - Linux

comment:1 Changed 3 years ago by kallisti5

Blocking: 12885 added

comment:2 Changed 3 years ago by kallisti5

Description: modified (diff)

comment:3 Changed 3 years ago by korli

Well, it would be nice to provide a syslog (see ReportingBugs). It would have helped for #12885 in the first place...

comment:4 Changed 3 years ago by kallisti5

I will as soon as someone figures out how to get syslogs from a machine that can't access it's boot device, doesn't have a serial port, and won't boot up. Until then screenshots of syslogs is the best it's gonna get. :-). Care to write an early USB serial driver that works on a broken USB bus?

comment:5 Changed 3 years ago by kallisti5

My only thought is to leverage a thunderbolt 3 PCI enclosure and plug in a pcie serial card that presents the port like a built in port... I can try that but chances are low of it working.

comment:6 Changed 3 years ago by korli

Maybe add a "break;" at http://cgit.haiku-os.org/haiku/tree/src/add-ons/kernel/busses/usb/xhci.cpp#n837 It should initialize only the first USB XHCI controller, and let the system boot up.

Changed 3 years ago by kallisti5

Attachment: IMG_20161102_085935.jpg added

comment:7 Changed 3 years ago by kallisti5

I'll give the break a try. I did check the xhci interface version, if "invalid" then return. It got me past the problem, but resulted in a no boot devices issue :-| If I plug in the USB C dongle it has the same effect.

I noticed the bar flags are normally 04 *except* on those secondary PCIe devices that should be hidden... then they're 00

04 in the bar == 0100b which is "type 10b" aka 64-bit addressing. I tried the 64-bit addressing but it didn't solve the issue. (although a good addition to check for and use)

comment:8 Changed 2 years ago by axeld

Owner: changed from axeld to nobody
Status: newassigned

comment:9 Changed 7 months ago by waddlesplash

Blocking: 12885 removed

comment:10 Changed 4 months ago by waddlesplash

Soo ... actually it appears Sunrise Point's root PCI controller has a particularly nasty bug which may be the real cause of this: http://xref.plausible.coop/source/xref/linux-master/drivers/pci/quirks.c#4350

We may need to implement that quirk in Haiku also.

Note: See TracTickets for help on using tickets.