Thread (14 messages) 14 messages, 3 authors, 2017-08-23

[PATCH v11 2/4] PCI: Factor out pci_bus_wait_crs()

From: helgaas@kernel.org (Bjorn Helgaas)
Date: 2017-08-21 19:18:10
Also in: linux-arm-msm, linux-pci, lkml

On Mon, Aug 21, 2017 at 09:53:56AM -0400, Sinan Kaya wrote:
On 8/18/2017 5:32 PM, Bjorn Helgaas wrote:
quoted
+	if ((*l & 0xffff) != 0x0001)
+		return true;	/* not a CRS completion */
 
This version certainly looks cleaner. However, it breaks pci_flr_wait().

If some root port doesn't support CRS and returns 0xFFFFFFFF, pci_bus_wait_crs()
function returns true. pci_flr_wait() prematurely bails out from here.


pci_flr_wait()
{

+	ret = pci_bus_wait_crs(dev->bus, dev->devfn, &id, 60000);
+	if (ret)
+		return;

}

We can change the return code to false above but then we break pci_bus_read_dev_vendor_id()
function. 

That's why, I was interested in creating a pci_bus_crs_visibility_supported() helper
function that would check for the magic 0x0001 value and return true. Otherwise, false. 

pci_bus_read_dev_vendor_id() would do this

pci_bus_read_dev_vendor_id()
{
	...
	if (pci_bus_crs_visibility_supported())
		return pci_bus_wait_crs(dev->bus, dev->devfn, &id, 60000);

	return true
}

Similar pattern for pci_flr_wait().
I think that makes sense.  We'd want to check for CRS SV being
enabled, e.g., maybe read PCI_EXP_RTCTL_CRSSVE back in
pci_enable_crs() and cache it somewhere.  Maybe a crs_sv_enabled bit
in the root port's pci_dev, and check it with something like what
pcie_root_rcb_set() does?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help