All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down
@ 2022-02-15 10:23 Pali Rohár
  2022-02-15 10:23 ` [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected Pali Rohár
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Pali Rohár @ 2022-02-15 10:23 UTC (permalink / raw)
  To: Stefan Roese, Marek Behún; +Cc: u-boot

If a PIO request is executed while link-down, the whole controller gets
stuck in a non-functional state, and even after link comes up again, PIO
requests won't work anymore, and a reset of the whole PCIe controller is
needed. Therefore we need to prevent sending PIO requests while the link
is down.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 drivers/pci/pci-aardvark.c | 38 +++++++++++++++++++++-----------------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c
index 1eb257ea8b4a..ccaeecaca8e3 100644
--- a/drivers/pci/pci-aardvark.c
+++ b/drivers/pci/pci-aardvark.c
@@ -177,6 +177,23 @@ static inline uint advk_readl(struct pcie_advk *pcie, uint reg)
 	return readl(pcie->base + reg);
 }
 
+/**
+ * pcie_advk_link_up() - Check if PCIe link is up or not
+ *
+ * @pcie: The PCI device to access
+ *
+ * Return true on link up.
+ * Return false on link down.
+ */
+static bool pcie_advk_link_up(struct pcie_advk *pcie)
+{
+	u32 val, ltssm_state;
+
+	val = advk_readl(pcie, ADVK_LMI_PHY_CFG0);
+	ltssm_state = (val & ADVK_LMI_PHY_CFG0_LTSSM_MASK) >> ADVK_LMI_PHY_CFG0_LTSSM_SHIFT;
+	return ltssm_state >= ADVK_LMI_PHY_CFG0_LTSSM_L0 && ltssm_state < ADVK_LMI_PHY_CFG0_LTSSM_DISABLED;
+}
+
 /**
  * pcie_advk_addr_valid() - Check for valid bus address
  *
@@ -195,6 +212,10 @@ static bool pcie_advk_addr_valid(struct pcie_advk *pcie,
 	if (busno == 0 && (dev != 0 || func != 0))
 		return false;
 
+	/* Access to other buses is possible when link is up */
+	if (busno != 0 && !pcie_advk_link_up(pcie))
+		return false;
+
 	/*
 	 * In PCI-E only a single device (0) can exist on the secondary bus.
 	 * Beyond the secondary bus, there might be a Switch and anything is
@@ -618,23 +639,6 @@ retry:
 	return ret;
 }
 
-/**
- * pcie_advk_link_up() - Check if PCIe link is up or not
- *
- * @pcie: The PCI device to access
- *
- * Return 1 (true) on link up.
- * Return 0 (false) on link down.
- */
-static int pcie_advk_link_up(struct pcie_advk *pcie)
-{
-	u32 val, ltssm_state;
-
-	val = advk_readl(pcie, ADVK_LMI_PHY_CFG0);
-	ltssm_state = (val & ADVK_LMI_PHY_CFG0_LTSSM_MASK) >> ADVK_LMI_PHY_CFG0_LTSSM_SHIFT;
-	return ltssm_state >= ADVK_LMI_PHY_CFG0_LTSSM_L0 && ltssm_state < ADVK_LMI_PHY_CFG0_LTSSM_DISABLED;
-}
-
 /**
  * pcie_advk_wait_for_link() - Wait for link training to be accomplished
  *
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected
  2022-02-15 10:23 [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Pali Rohár
@ 2022-02-15 10:23 ` Pali Rohár
  2022-02-16  8:58   ` Stefan Roese
  2022-02-15 10:23 ` [PATCH u-boot-marvell 3/3] arm: a37xx: pci: Update comment about Command/Direct mode Pali Rohár
  2022-02-16  8:57 ` [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Stefan Roese
  2 siblings, 1 reply; 6+ messages in thread
From: Pali Rohár @ 2022-02-15 10:23 UTC (permalink / raw)
  To: Stefan Roese, Marek Behún; +Cc: u-boot

Allow access to config space of PCIe Root Port (which is always present on
the root bus) even when PCIe link is down or no card is connected.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 drivers/pci/pci-aardvark.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c
index ccaeecaca8e3..c795ef10b884 100644
--- a/drivers/pci/pci-aardvark.c
+++ b/drivers/pci/pci-aardvark.c
@@ -645,11 +645,8 @@ retry:
  * @pcie: The PCI device to access
  *
  * Wait up to 1 second for link training to be accomplished.
- *
- * Return 1 (true) if link training ends up with link up success.
- * Return 0 (false) if link training ends up with link up failure.
  */
-static int pcie_advk_wait_for_link(struct pcie_advk *pcie)
+static void pcie_advk_wait_for_link(struct pcie_advk *pcie)
 {
 	int retries;
 
@@ -657,15 +654,13 @@ static int pcie_advk_wait_for_link(struct pcie_advk *pcie)
 	for (retries = 0; retries < LINK_MAX_RETRIES; retries++) {
 		if (pcie_advk_link_up(pcie)) {
 			printf("PCIe: Link up\n");
-			return 0;
+			return;
 		}
 
 		udelay(LINK_WAIT_TIMEOUT);
 	}
 
 	printf("PCIe: Link down\n");
-
-	return -ETIMEDOUT;
 }
 
 /*
@@ -898,8 +893,7 @@ static int pcie_advk_setup_hw(struct pcie_advk *pcie)
 		return -EINVAL;
 
 	/* Wait for PCIe link up */
-	if (pcie_advk_wait_for_link(pcie))
-		return -ENXIO;
+	pcie_advk_wait_for_link(pcie);
 
 	return 0;
 }
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH u-boot-marvell 3/3] arm: a37xx: pci: Update comment about Command/Direct mode
  2022-02-15 10:23 [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Pali Rohár
  2022-02-15 10:23 ` [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected Pali Rohár
@ 2022-02-15 10:23 ` Pali Rohár
  2022-02-16  8:59   ` Stefan Roese
  2022-02-16  8:57 ` [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Stefan Roese
  2 siblings, 1 reply; 6+ messages in thread
From: Pali Rohár @ 2022-02-15 10:23 UTC (permalink / raw)
  To: Stefan Roese, Marek Behún; +Cc: u-boot

Code is changing PCIe controller from Command mode to Direct mode.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 drivers/pci/pci-aardvark.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c
index c795ef10b884..4f7e61ecf166 100644
--- a/drivers/pci/pci-aardvark.c
+++ b/drivers/pci/pci-aardvark.c
@@ -757,7 +757,7 @@ static int pcie_advk_setup_hw(struct pcie_advk *pcie)
 	int i, wins;
 	u32 reg;
 
-	/* Set to Direct mode */
+	/* Set from Command to Direct mode */
 	reg = advk_readl(pcie, ADVK_CORE_CTRL_CONFIG);
 	reg &= ~ADVK_CORE_CTRL_CONFIG_COMMAND_MODE;
 	advk_writel(pcie, reg, ADVK_CORE_CTRL_CONFIG);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down
  2022-02-15 10:23 [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Pali Rohár
  2022-02-15 10:23 ` [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected Pali Rohár
  2022-02-15 10:23 ` [PATCH u-boot-marvell 3/3] arm: a37xx: pci: Update comment about Command/Direct mode Pali Rohár
@ 2022-02-16  8:57 ` Stefan Roese
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Roese @ 2022-02-16  8:57 UTC (permalink / raw)
  To: Pali Rohár, Marek Behún; +Cc: u-boot

On 2/15/22 11:23, Pali Rohár wrote:
> If a PIO request is executed while link-down, the whole controller gets
> stuck in a non-functional state, and even after link comes up again, PIO
> requests won't work anymore, and a reset of the whole PCIe controller is
> needed. Therefore we need to prevent sending PIO requests while the link
> is down.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   drivers/pci/pci-aardvark.c | 38 +++++++++++++++++++++-----------------
>   1 file changed, 21 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c
> index 1eb257ea8b4a..ccaeecaca8e3 100644
> --- a/drivers/pci/pci-aardvark.c
> +++ b/drivers/pci/pci-aardvark.c
> @@ -177,6 +177,23 @@ static inline uint advk_readl(struct pcie_advk *pcie, uint reg)
>   	return readl(pcie->base + reg);
>   }
>   
> +/**
> + * pcie_advk_link_up() - Check if PCIe link is up or not
> + *
> + * @pcie: The PCI device to access
> + *
> + * Return true on link up.
> + * Return false on link down.
> + */
> +static bool pcie_advk_link_up(struct pcie_advk *pcie)
> +{
> +	u32 val, ltssm_state;
> +
> +	val = advk_readl(pcie, ADVK_LMI_PHY_CFG0);
> +	ltssm_state = (val & ADVK_LMI_PHY_CFG0_LTSSM_MASK) >> ADVK_LMI_PHY_CFG0_LTSSM_SHIFT;
> +	return ltssm_state >= ADVK_LMI_PHY_CFG0_LTSSM_L0 && ltssm_state < ADVK_LMI_PHY_CFG0_LTSSM_DISABLED;
> +}
> +
>   /**
>    * pcie_advk_addr_valid() - Check for valid bus address
>    *
> @@ -195,6 +212,10 @@ static bool pcie_advk_addr_valid(struct pcie_advk *pcie,
>   	if (busno == 0 && (dev != 0 || func != 0))
>   		return false;
>   
> +	/* Access to other buses is possible when link is up */
> +	if (busno != 0 && !pcie_advk_link_up(pcie))
> +		return false;
> +
>   	/*
>   	 * In PCI-E only a single device (0) can exist on the secondary bus.
>   	 * Beyond the secondary bus, there might be a Switch and anything is
> @@ -618,23 +639,6 @@ retry:
>   	return ret;
>   }
>   
> -/**
> - * pcie_advk_link_up() - Check if PCIe link is up or not
> - *
> - * @pcie: The PCI device to access
> - *
> - * Return 1 (true) on link up.
> - * Return 0 (false) on link down.
> - */
> -static int pcie_advk_link_up(struct pcie_advk *pcie)
> -{
> -	u32 val, ltssm_state;
> -
> -	val = advk_readl(pcie, ADVK_LMI_PHY_CFG0);
> -	ltssm_state = (val & ADVK_LMI_PHY_CFG0_LTSSM_MASK) >> ADVK_LMI_PHY_CFG0_LTSSM_SHIFT;
> -	return ltssm_state >= ADVK_LMI_PHY_CFG0_LTSSM_L0 && ltssm_state < ADVK_LMI_PHY_CFG0_LTSSM_DISABLED;
> -}
> -
>   /**
>    * pcie_advk_wait_for_link() - Wait for link training to be accomplished
>    *

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected
  2022-02-15 10:23 ` [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected Pali Rohár
@ 2022-02-16  8:58   ` Stefan Roese
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Roese @ 2022-02-16  8:58 UTC (permalink / raw)
  To: Pali Rohár, Marek Behún; +Cc: u-boot

On 2/15/22 11:23, Pali Rohár wrote:
> Allow access to config space of PCIe Root Port (which is always present on
> the root bus) even when PCIe link is down or no card is connected.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   drivers/pci/pci-aardvark.c | 12 +++---------
>   1 file changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c
> index ccaeecaca8e3..c795ef10b884 100644
> --- a/drivers/pci/pci-aardvark.c
> +++ b/drivers/pci/pci-aardvark.c
> @@ -645,11 +645,8 @@ retry:
>    * @pcie: The PCI device to access
>    *
>    * Wait up to 1 second for link training to be accomplished.
> - *
> - * Return 1 (true) if link training ends up with link up success.
> - * Return 0 (false) if link training ends up with link up failure.
>    */
> -static int pcie_advk_wait_for_link(struct pcie_advk *pcie)
> +static void pcie_advk_wait_for_link(struct pcie_advk *pcie)
>   {
>   	int retries;
>   
> @@ -657,15 +654,13 @@ static int pcie_advk_wait_for_link(struct pcie_advk *pcie)
>   	for (retries = 0; retries < LINK_MAX_RETRIES; retries++) {
>   		if (pcie_advk_link_up(pcie)) {
>   			printf("PCIe: Link up\n");
> -			return 0;
> +			return;
>   		}
>   
>   		udelay(LINK_WAIT_TIMEOUT);
>   	}
>   
>   	printf("PCIe: Link down\n");
> -
> -	return -ETIMEDOUT;
>   }
>   
>   /*
> @@ -898,8 +893,7 @@ static int pcie_advk_setup_hw(struct pcie_advk *pcie)
>   		return -EINVAL;
>   
>   	/* Wait for PCIe link up */
> -	if (pcie_advk_wait_for_link(pcie))
> -		return -ENXIO;
> +	pcie_advk_wait_for_link(pcie);
>   
>   	return 0;
>   }

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH u-boot-marvell 3/3] arm: a37xx: pci: Update comment about Command/Direct mode
  2022-02-15 10:23 ` [PATCH u-boot-marvell 3/3] arm: a37xx: pci: Update comment about Command/Direct mode Pali Rohár
@ 2022-02-16  8:59   ` Stefan Roese
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Roese @ 2022-02-16  8:59 UTC (permalink / raw)
  To: Pali Rohár, Marek Behún; +Cc: u-boot

On 2/15/22 11:23, Pali Rohár wrote:
> Code is changing PCIe controller from Command mode to Direct mode.
> 
> Signed-off-by: Pali Rohár <pali@kernel.org>

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

> ---
>   drivers/pci/pci-aardvark.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c
> index c795ef10b884..4f7e61ecf166 100644
> --- a/drivers/pci/pci-aardvark.c
> +++ b/drivers/pci/pci-aardvark.c
> @@ -757,7 +757,7 @@ static int pcie_advk_setup_hw(struct pcie_advk *pcie)
>   	int i, wins;
>   	u32 reg;
>   
> -	/* Set to Direct mode */
> +	/* Set from Command to Direct mode */
>   	reg = advk_readl(pcie, ADVK_CORE_CTRL_CONFIG);
>   	reg &= ~ADVK_CORE_CTRL_CONFIG_COMMAND_MODE;
>   	advk_writel(pcie, reg, ADVK_CORE_CTRL_CONFIG);

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-02-16  9:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-15 10:23 [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Pali Rohár
2022-02-15 10:23 ` [PATCH u-boot-marvell 2/3] arm: a37xx: pci: Register controller also when no PCIe card is connected Pali Rohár
2022-02-16  8:58   ` Stefan Roese
2022-02-15 10:23 ` [PATCH u-boot-marvell 3/3] arm: a37xx: pci: Update comment about Command/Direct mode Pali Rohár
2022-02-16  8:59   ` Stefan Roese
2022-02-16  8:57 ` [PATCH u-boot-marvell 1/3] arm: a37xx: pci: Do not try to access other buses when link is down Stefan Roese

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.