Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40a8cc53 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: pcie: add mutex for PCIe enumeration"

parents 6055fbc0 36b9010f
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -591,6 +591,7 @@ struct msm_pcie_dev_t {
	bool				 cfg_access;
	spinlock_t			 cfg_lock;
	unsigned long		    irqsave_flags;
	struct mutex			enumerate_lock;
	struct mutex		     setup_lock;

	struct irq_domain		*irq_domain;
@@ -4840,12 +4841,15 @@ int msm_pcie_enumerate(u32 rc_idx)
	int ret = 0, bus_ret = 0, scan_ret = 0;
	struct msm_pcie_dev_t *dev = &msm_pcie_dev[rc_idx];

	mutex_lock(&dev->enumerate_lock);

	PCIE_DBG(dev, "Enumerate RC%d\n", rc_idx);

	if (!dev->drv_ready) {
		PCIE_DBG(dev, "RC%d has not been successfully probed yet\n",
			rc_idx);
		return -EPROBE_DEFER;
		ret = -EPROBE_DEFER;
		goto out;
	}

	if (!dev->enumerated) {
@@ -4872,8 +4876,7 @@ int msm_pcie_enumerate(u32 rc_idx)
				PCIE_ERR(dev,
					"PCIe: failed to get host bridge resources for RC%d: %d\n",
					dev->rc_idx, ret);

				return ret;
				goto out;
			}

			if (dev->ep_latency) {
@@ -4892,8 +4895,8 @@ int msm_pcie_enumerate(u32 rc_idx)
				PCIE_ERR(dev,
					"PCIe: failed to create root bus for RC%d\n",
					dev->rc_idx);

				return -ENOMEM;
				ret = -ENOMEM;
				goto out;
			}

			scan_ret = pci_scan_child_bus(bus);
@@ -4941,7 +4944,8 @@ int msm_pcie_enumerate(u32 rc_idx)
				PCIE_ERR(dev,
					"PCIe: Did not find PCI device for RC%d.\n",
					dev->rc_idx);
				return -ENODEV;
				ret = -ENODEV;
				goto out;
			}

			bus_ret = bus_for_each_dev(&pci_bus_type, NULL, dev,
@@ -4951,7 +4955,8 @@ int msm_pcie_enumerate(u32 rc_idx)
				PCIE_ERR(dev,
					"PCIe: Failed to set up device table for RC%d\n",
					dev->rc_idx);
				return -ENODEV;
				ret = -ENODEV;
				goto out;
			}
		} else {
			PCIE_ERR(dev, "PCIe: failed to enable RC%d.\n",
@@ -4962,6 +4967,9 @@ int msm_pcie_enumerate(u32 rc_idx)
			dev->rc_idx);
	}

out:
	mutex_unlock(&dev->enumerate_lock);

	return ret;
}
EXPORT_SYMBOL(msm_pcie_enumerate);
@@ -6303,6 +6311,7 @@ int __init pcie_init(void)
				rc_name, i);
		spin_lock_init(&msm_pcie_dev[i].cfg_lock);
		msm_pcie_dev[i].cfg_access = true;
		mutex_init(&msm_pcie_dev[i].enumerate_lock);
		mutex_init(&msm_pcie_dev[i].setup_lock);
		mutex_init(&msm_pcie_dev[i].recovery_lock);
		spin_lock_init(&msm_pcie_dev[i].linkdown_lock);