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

Commit 6cbb247e authored by Bjorn Helgaas's avatar Bjorn Helgaas
Browse files

PCI: designware: Wait for link to come up with consistent style



All the DesignWare-based host drivers loop waiting for the link to come up,
but they do it several ways that are needlessly different.

Wait for the link to come up in a consistent style across all the
DesignWare drivers.  No functional change.

Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Acked-by: default avatarPratyush Anand <pratyush.anand@gmail.com>
parent 1d3f9bac
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -93,9 +93,9 @@ static int dra7xx_pcie_link_up(struct pcie_port *pp)

static int dra7xx_pcie_establish_link(struct pcie_port *pp)
{
	u32 reg;
	unsigned int retries = 1000;
	struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pp);
	u32 reg;
	unsigned int retries;

	if (dw_pcie_link_up(pp)) {
		dev_err(pp->dev, "link is already up\n");
@@ -106,18 +106,14 @@ static int dra7xx_pcie_establish_link(struct pcie_port *pp)
	reg |= LTSSM_EN;
	dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD, reg);

	while (retries--) {
	for (retries = 0; retries < 1000; retries++) {
		if (dw_pcie_link_up(pp))
			break;
			return 0;
		usleep_range(10, 20);
	}

	if (retries == 0) {
	dev_err(pp->dev, "link is not up\n");
		return -ETIMEDOUT;
	}

	return 0;
	return -EINVAL;
}

static void dra7xx_pcie_enable_interrupts(struct pcie_port *pp)
+15 −19
Original line number Diff line number Diff line
@@ -316,9 +316,9 @@ static void exynos_pcie_assert_reset(struct pcie_port *pp)

static int exynos_pcie_establish_link(struct pcie_port *pp)
{
	u32 val;
	int count = 0;
	struct exynos_pcie *exynos_pcie = to_exynos_pcie(pp);
	u32 val;
	unsigned int retries;

	if (dw_pcie_link_up(pp)) {
		dev_err(pp->dev, "Link already up\n");
@@ -357,14 +357,16 @@ static int exynos_pcie_establish_link(struct pcie_port *pp)
			  PCIE_APP_LTSSM_ENABLE);

	/* check if the link is up or not */
	while (!dw_pcie_link_up(pp)) {
	for (retries = 0; retries < 10; retries++) {
		if (dw_pcie_link_up(pp)) {
			dev_info(pp->dev, "Link up\n");
			return 0;
		}
		mdelay(100);
		count++;
		if (count == 10) {
			while (exynos_phy_readl(exynos_pcie,
						PCIE_PHY_PLL_LOCKED) == 0) {
				val = exynos_blk_readl(exynos_pcie,
						       PCIE_PHY_PLL_LOCKED);
	}

	while (exynos_phy_readl(exynos_pcie, PCIE_PHY_PLL_LOCKED) == 0) {
		val = exynos_blk_readl(exynos_pcie, PCIE_PHY_PLL_LOCKED);
		dev_info(pp->dev, "PLL Locked: 0x%x\n", val);
	}
	/* power off phy */
@@ -373,12 +375,6 @@ static int exynos_pcie_establish_link(struct pcie_port *pp)
	dev_err(pp->dev, "PCIe Link Fail\n");
	return -EINVAL;
}
	}

	dev_info(pp->dev, "Link up\n");

	return 0;
}

static void exynos_pcie_clear_irq_pulse(struct pcie_port *pp)
{
+9 −11
Original line number Diff line number Diff line
@@ -335,12 +335,13 @@ static void imx6_pcie_init_phy(struct pcie_port *pp)

static int imx6_pcie_wait_for_link(struct pcie_port *pp)
{
	int count = 200;
	unsigned int retries;

	while (!dw_pcie_link_up(pp)) {
	for (retries = 0; retries < 200; retries++) {
		if (dw_pcie_link_up(pp))
			return 0;
		usleep_range(100, 1000);
		if (--count)
			continue;
	}

	dev_err(pp->dev, "phy link never came up\n");
	dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n",
@@ -349,9 +350,6 @@ static int imx6_pcie_wait_for_link(struct pcie_port *pp)
	return -EINVAL;
}

	return 0;
}

static irqreturn_t imx6_pcie_msi_handler(int irq, void *arg)
{
	struct pcie_port *pp = arg;
+7 −9
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ DECLARE_PCI_FIXUP_ENABLE(PCI_ANY_ID, PCI_ANY_ID, quirk_limit_mrrs);
static int ks_pcie_establish_link(struct keystone_pcie *ks_pcie)
{
	struct pcie_port *pp = &ks_pcie->pp;
	int count = 200;
	unsigned int retries;

	dw_pcie_setup_rc(pp);

@@ -99,19 +99,17 @@ static int ks_pcie_establish_link(struct keystone_pcie *ks_pcie)

	ks_dw_pcie_initiate_link_train(ks_pcie);
	/* check if the link is up or not */
	while (!dw_pcie_link_up(pp)) {
	for (retries = 0; retries < 200; retries++) {
		if (dw_pcie_link_up(pp))
			return 0;
		usleep_range(100, 1000);
		if (--count) {
		ks_dw_pcie_initiate_link_train(ks_pcie);
			continue;
	}

	dev_err(pp->dev, "phy link never came up\n");
	return -EINVAL;
}

	return 0;
}

static void ks_pcie_msi_irq_handler(unsigned int irq, struct irq_desc *desc)
{
	struct keystone_pcie *ks_pcie = irq_desc_get_handler_data(desc);
+6 −8
Original line number Diff line number Diff line
@@ -64,18 +64,16 @@ static int ls_pcie_link_up(struct pcie_port *pp)

static int ls_pcie_establish_link(struct pcie_port *pp)
{
	int count = 0;
	unsigned int retries;

	while (!dw_pcie_link_up(pp)) {
	for (retries = 0; retries < 200; retries++) {
		if (dw_pcie_link_up(pp))
			return 0;
		usleep_range(100, 1000);
		count++;
		if (count >= 200) {
			dev_err(pp->dev, "phy link never came up\n");
			return -EINVAL;
		}
	}

	return 0;
	dev_err(pp->dev, "phy link never came up\n");
	return -EINVAL;
}

static void ls_pcie_host_init(struct pcie_port *pp)
Loading