* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox