From: Bjorn Helgaas <helgaas@kernel.org>
To: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, devicetree@vger.kernel.org,
Rob Herring <robh+dt@kernel.org>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Kumar Gala <galak@codeaurora.org>,
linux-arm-kernel@lists.infradead.org,
Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Gregory Clement <gregory.clement@free-electrons.com>,
Nadav Haklai <nadavh@marvell.com>,
Lior Amsalem <alior@marvell.com>, Hanna Hawa <hannah@marvell.com>,
Yehuda Yitschak <yehuday@marvell.com>
Subject: Re: [PATCH v3 0/2] pci: host: new driver for Marvell Armada 7K/8K PCIe controller
Date: Tue, 26 Apr 2016 12:31:44 -0500 [thread overview]
Message-ID: <20160426173144.GB27803@localhost> (raw)
In-Reply-To: <1461659506-10387-1-git-send-email-thomas.petazzoni@free-electrons.com>
On Tue, Apr 26, 2016 at 10:31:44AM +0200, Thomas Petazzoni wrote:
> Hello,
>
> Here is the third iteration of the PCIe host controller driver needed
> for the ARM64 Marvell Armada 7K/8K platform.
>
> Changes since v2:
>
> - Added Rob Herring's Acked-by on the Device Tree binding patch.
>
> - Reworked the PCIe host driver following the suggestion of Bjorn
> Helgaas: creation of armada8k_add_pcie_port() and
> armada8k_pcie_establish_link() in order to follow the convention of
> other Designware based drivers.
>
> Thanks!
>
> Thomas
>
> Thomas Petazzoni (2):
> dt-bindings: pci: add DT binding for Marvell Armada 7K/8K PCIe
> controller
> pci: host: new driver for Marvell Armada 7K/8K PCIe controller
>
> .../devicetree/bindings/pci/pci-armada8k.txt | 38 +++
> drivers/pci/host/Kconfig | 11 +
> drivers/pci/host/Makefile | 1 +
> drivers/pci/host/pcie-armada8k.c | 276 +++++++++++++++++++++
> 4 files changed, 326 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/pci/pci-armada8k.txt
> create mode 100644 drivers/pci/host/pcie-armada8k.c
Thanks, Thomas, I applied these to pci/host-armada for v4.7.
I added the tweaks below to use dev_dbg() instead of pr_debug(), use
dw_pcie_wait_for_link() instead of another hand-coded timeout loop,
and fix a typo and remove unused constants.
Bjorn
diff --git a/drivers/pci/host/pcie-armada8k.c b/drivers/pci/host/pcie-armada8k.c
index 7302de2..811ddf8 100644
--- a/drivers/pci/host/pcie-armada8k.c
+++ b/drivers/pci/host/pcie-armada8k.c
@@ -10,8 +10,6 @@
* warranty of any kind, whether express or implied.
*/
-#define pr_fmt(fmt) "armada-8k-pcie: " fmt
-
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
@@ -39,8 +37,6 @@ struct armada8k_pcie {
#define PCIE_APP_LTSSM_EN BIT(2)
#define PCIE_DEVICE_TYPE_SHIFT 4
#define PCIE_DEVICE_TYPE_MASK 0xF
-#define PCIE_DEVICE_TYPE_EP 0x0 /* Endpoint */
-#define PCIE_DEVICE_TYPE_LEP 0x1 /* Legacy endpoint */
#define PCIE_DEVICE_TYPE_RC 0x4 /* Root complex */
#define PCIE_GLOBAL_STATUS_REG 0x8
@@ -69,14 +65,12 @@ struct armada8k_pcie {
#define AX_USER_DOMAIN_MASK 0x3
#define AX_USER_DOMAIN_SHIFT 4
-
-
#define to_armada8k_pcie(x) container_of(x, struct armada8k_pcie, pp)
static int armada8k_pcie_link_up(struct pcie_port *pp)
{
- u32 reg;
struct armada8k_pcie *pcie = to_armada8k_pcie(pp);
+ u32 reg;
u32 mask = PCIE_GLB_STS_RDLH_LINK_UP | PCIE_GLB_STS_PHY_LINK_UP;
reg = readl(pcie->base + PCIE_GLOBAL_STATUS_REG);
@@ -84,7 +78,7 @@ static int armada8k_pcie_link_up(struct pcie_port *pp)
if ((reg & mask) == mask)
return 1;
- pr_debug("No link detected (Global-Status: 0x%08x).\n", reg);
+ dev_dbg(pp->dev, "No link detected (Global-Status: 0x%08x).\n", reg);
return 0;
}
@@ -92,10 +86,9 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
{
struct armada8k_pcie *pcie = to_armada8k_pcie(pp);
void __iomem *base = pcie->base;
- int timeout = 1000;
u32 reg;
- if (!armada8k_pcie_link_up(pp)) {
+ if (!dw_pcie_link_up(pp)) {
/* Disable LTSSM state machine to enable configuration */
reg = readl(base + PCIE_GLOBAL_CONTROL_REG);
reg &= ~(PCIE_APP_LTSSM_EN);
@@ -129,7 +122,7 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
PCIE_INT_C_ASSERT_MASK | PCIE_INT_D_ASSERT_MASK;
writel(reg, base + PCIE_GLOBAL_INT_MASK1_REG);
- if (!armada8k_pcie_link_up(pp)) {
+ if (!dw_pcie_link_up(pp)) {
/* Configuration done. Start LTSSM */
reg = readl(base + PCIE_GLOBAL_CONTROL_REG);
reg |= PCIE_APP_LTSSM_EN;
@@ -137,14 +130,7 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
}
/* Wait until the link becomes active again */
- while (timeout) {
- if (armada8k_pcie_link_up(pp))
- break;
- msleep(1);
- timeout--;
- }
-
- if (timeout == 0)
+ if (dw_pcie_wait_for_link(pp))
dev_err(pp->dev, "Link not up after reconfiguration\n");
}
@@ -163,7 +149,7 @@ static irqreturn_t armada8k_pcie_irq_handler(int irq, void *arg)
/*
* Interrupts are directly handled by the device driver of the
- * PCI device. However, there are also latched into the PCIe
+ * PCI device. However, they are also latched into the PCIe
* controller, so we simply discard them.
*/
val = readl(base + PCIE_GLOBAL_INT_CAUSE1_REG);
WARNING: multiple messages have this Message-ID (diff)
From: helgaas@kernel.org (Bjorn Helgaas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 0/2] pci: host: new driver for Marvell Armada 7K/8K PCIe controller
Date: Tue, 26 Apr 2016 12:31:44 -0500 [thread overview]
Message-ID: <20160426173144.GB27803@localhost> (raw)
In-Reply-To: <1461659506-10387-1-git-send-email-thomas.petazzoni@free-electrons.com>
On Tue, Apr 26, 2016 at 10:31:44AM +0200, Thomas Petazzoni wrote:
> Hello,
>
> Here is the third iteration of the PCIe host controller driver needed
> for the ARM64 Marvell Armada 7K/8K platform.
>
> Changes since v2:
>
> - Added Rob Herring's Acked-by on the Device Tree binding patch.
>
> - Reworked the PCIe host driver following the suggestion of Bjorn
> Helgaas: creation of armada8k_add_pcie_port() and
> armada8k_pcie_establish_link() in order to follow the convention of
> other Designware based drivers.
>
> Thanks!
>
> Thomas
>
> Thomas Petazzoni (2):
> dt-bindings: pci: add DT binding for Marvell Armada 7K/8K PCIe
> controller
> pci: host: new driver for Marvell Armada 7K/8K PCIe controller
>
> .../devicetree/bindings/pci/pci-armada8k.txt | 38 +++
> drivers/pci/host/Kconfig | 11 +
> drivers/pci/host/Makefile | 1 +
> drivers/pci/host/pcie-armada8k.c | 276 +++++++++++++++++++++
> 4 files changed, 326 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/pci/pci-armada8k.txt
> create mode 100644 drivers/pci/host/pcie-armada8k.c
Thanks, Thomas, I applied these to pci/host-armada for v4.7.
I added the tweaks below to use dev_dbg() instead of pr_debug(), use
dw_pcie_wait_for_link() instead of another hand-coded timeout loop,
and fix a typo and remove unused constants.
Bjorn
diff --git a/drivers/pci/host/pcie-armada8k.c b/drivers/pci/host/pcie-armada8k.c
index 7302de2..811ddf8 100644
--- a/drivers/pci/host/pcie-armada8k.c
+++ b/drivers/pci/host/pcie-armada8k.c
@@ -10,8 +10,6 @@
* warranty of any kind, whether express or implied.
*/
-#define pr_fmt(fmt) "armada-8k-pcie: " fmt
-
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
@@ -39,8 +37,6 @@ struct armada8k_pcie {
#define PCIE_APP_LTSSM_EN BIT(2)
#define PCIE_DEVICE_TYPE_SHIFT 4
#define PCIE_DEVICE_TYPE_MASK 0xF
-#define PCIE_DEVICE_TYPE_EP 0x0 /* Endpoint */
-#define PCIE_DEVICE_TYPE_LEP 0x1 /* Legacy endpoint */
#define PCIE_DEVICE_TYPE_RC 0x4 /* Root complex */
#define PCIE_GLOBAL_STATUS_REG 0x8
@@ -69,14 +65,12 @@ struct armada8k_pcie {
#define AX_USER_DOMAIN_MASK 0x3
#define AX_USER_DOMAIN_SHIFT 4
-
-
#define to_armada8k_pcie(x) container_of(x, struct armada8k_pcie, pp)
static int armada8k_pcie_link_up(struct pcie_port *pp)
{
- u32 reg;
struct armada8k_pcie *pcie = to_armada8k_pcie(pp);
+ u32 reg;
u32 mask = PCIE_GLB_STS_RDLH_LINK_UP | PCIE_GLB_STS_PHY_LINK_UP;
reg = readl(pcie->base + PCIE_GLOBAL_STATUS_REG);
@@ -84,7 +78,7 @@ static int armada8k_pcie_link_up(struct pcie_port *pp)
if ((reg & mask) == mask)
return 1;
- pr_debug("No link detected (Global-Status: 0x%08x).\n", reg);
+ dev_dbg(pp->dev, "No link detected (Global-Status: 0x%08x).\n", reg);
return 0;
}
@@ -92,10 +86,9 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
{
struct armada8k_pcie *pcie = to_armada8k_pcie(pp);
void __iomem *base = pcie->base;
- int timeout = 1000;
u32 reg;
- if (!armada8k_pcie_link_up(pp)) {
+ if (!dw_pcie_link_up(pp)) {
/* Disable LTSSM state machine to enable configuration */
reg = readl(base + PCIE_GLOBAL_CONTROL_REG);
reg &= ~(PCIE_APP_LTSSM_EN);
@@ -129,7 +122,7 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
PCIE_INT_C_ASSERT_MASK | PCIE_INT_D_ASSERT_MASK;
writel(reg, base + PCIE_GLOBAL_INT_MASK1_REG);
- if (!armada8k_pcie_link_up(pp)) {
+ if (!dw_pcie_link_up(pp)) {
/* Configuration done. Start LTSSM */
reg = readl(base + PCIE_GLOBAL_CONTROL_REG);
reg |= PCIE_APP_LTSSM_EN;
@@ -137,14 +130,7 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
}
/* Wait until the link becomes active again */
- while (timeout) {
- if (armada8k_pcie_link_up(pp))
- break;
- msleep(1);
- timeout--;
- }
-
- if (timeout == 0)
+ if (dw_pcie_wait_for_link(pp))
dev_err(pp->dev, "Link not up after reconfiguration\n");
}
@@ -163,7 +149,7 @@ static irqreturn_t armada8k_pcie_irq_handler(int irq, void *arg)
/*
* Interrupts are directly handled by the device driver of the
- * PCI device. However, there are also latched into the PCIe
+ * PCI device. However, they are also latched into the PCIe
* controller, so we simply discard them.
*/
val = readl(base + PCIE_GLOBAL_INT_CAUSE1_REG);
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Thomas Petazzoni
<thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
Cc: Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
Andrew Lunn <andrew-g2DYL2Zd6BY@public.gmane.org>,
Sebastian Hesselbarth
<sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Gregory Clement
<gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
Nadav Haklai <nadavh-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
Lior Amsalem <alior-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
Hanna Hawa <hannah-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>,
Yehuda Yitschak <yehuday-eYqpPyKDWXRBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [PATCH v3 0/2] pci: host: new driver for Marvell Armada 7K/8K PCIe controller
Date: Tue, 26 Apr 2016 12:31:44 -0500 [thread overview]
Message-ID: <20160426173144.GB27803@localhost> (raw)
In-Reply-To: <1461659506-10387-1-git-send-email-thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
On Tue, Apr 26, 2016 at 10:31:44AM +0200, Thomas Petazzoni wrote:
> Hello,
>
> Here is the third iteration of the PCIe host controller driver needed
> for the ARM64 Marvell Armada 7K/8K platform.
>
> Changes since v2:
>
> - Added Rob Herring's Acked-by on the Device Tree binding patch.
>
> - Reworked the PCIe host driver following the suggestion of Bjorn
> Helgaas: creation of armada8k_add_pcie_port() and
> armada8k_pcie_establish_link() in order to follow the convention of
> other Designware based drivers.
>
> Thanks!
>
> Thomas
>
> Thomas Petazzoni (2):
> dt-bindings: pci: add DT binding for Marvell Armada 7K/8K PCIe
> controller
> pci: host: new driver for Marvell Armada 7K/8K PCIe controller
>
> .../devicetree/bindings/pci/pci-armada8k.txt | 38 +++
> drivers/pci/host/Kconfig | 11 +
> drivers/pci/host/Makefile | 1 +
> drivers/pci/host/pcie-armada8k.c | 276 +++++++++++++++++++++
> 4 files changed, 326 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/pci/pci-armada8k.txt
> create mode 100644 drivers/pci/host/pcie-armada8k.c
Thanks, Thomas, I applied these to pci/host-armada for v4.7.
I added the tweaks below to use dev_dbg() instead of pr_debug(), use
dw_pcie_wait_for_link() instead of another hand-coded timeout loop,
and fix a typo and remove unused constants.
Bjorn
diff --git a/drivers/pci/host/pcie-armada8k.c b/drivers/pci/host/pcie-armada8k.c
index 7302de2..811ddf8 100644
--- a/drivers/pci/host/pcie-armada8k.c
+++ b/drivers/pci/host/pcie-armada8k.c
@@ -10,8 +10,6 @@
* warranty of any kind, whether express or implied.
*/
-#define pr_fmt(fmt) "armada-8k-pcie: " fmt
-
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
@@ -39,8 +37,6 @@ struct armada8k_pcie {
#define PCIE_APP_LTSSM_EN BIT(2)
#define PCIE_DEVICE_TYPE_SHIFT 4
#define PCIE_DEVICE_TYPE_MASK 0xF
-#define PCIE_DEVICE_TYPE_EP 0x0 /* Endpoint */
-#define PCIE_DEVICE_TYPE_LEP 0x1 /* Legacy endpoint */
#define PCIE_DEVICE_TYPE_RC 0x4 /* Root complex */
#define PCIE_GLOBAL_STATUS_REG 0x8
@@ -69,14 +65,12 @@ struct armada8k_pcie {
#define AX_USER_DOMAIN_MASK 0x3
#define AX_USER_DOMAIN_SHIFT 4
-
-
#define to_armada8k_pcie(x) container_of(x, struct armada8k_pcie, pp)
static int armada8k_pcie_link_up(struct pcie_port *pp)
{
- u32 reg;
struct armada8k_pcie *pcie = to_armada8k_pcie(pp);
+ u32 reg;
u32 mask = PCIE_GLB_STS_RDLH_LINK_UP | PCIE_GLB_STS_PHY_LINK_UP;
reg = readl(pcie->base + PCIE_GLOBAL_STATUS_REG);
@@ -84,7 +78,7 @@ static int armada8k_pcie_link_up(struct pcie_port *pp)
if ((reg & mask) == mask)
return 1;
- pr_debug("No link detected (Global-Status: 0x%08x).\n", reg);
+ dev_dbg(pp->dev, "No link detected (Global-Status: 0x%08x).\n", reg);
return 0;
}
@@ -92,10 +86,9 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
{
struct armada8k_pcie *pcie = to_armada8k_pcie(pp);
void __iomem *base = pcie->base;
- int timeout = 1000;
u32 reg;
- if (!armada8k_pcie_link_up(pp)) {
+ if (!dw_pcie_link_up(pp)) {
/* Disable LTSSM state machine to enable configuration */
reg = readl(base + PCIE_GLOBAL_CONTROL_REG);
reg &= ~(PCIE_APP_LTSSM_EN);
@@ -129,7 +122,7 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
PCIE_INT_C_ASSERT_MASK | PCIE_INT_D_ASSERT_MASK;
writel(reg, base + PCIE_GLOBAL_INT_MASK1_REG);
- if (!armada8k_pcie_link_up(pp)) {
+ if (!dw_pcie_link_up(pp)) {
/* Configuration done. Start LTSSM */
reg = readl(base + PCIE_GLOBAL_CONTROL_REG);
reg |= PCIE_APP_LTSSM_EN;
@@ -137,14 +130,7 @@ static void armada8k_pcie_establish_link(struct pcie_port *pp)
}
/* Wait until the link becomes active again */
- while (timeout) {
- if (armada8k_pcie_link_up(pp))
- break;
- msleep(1);
- timeout--;
- }
-
- if (timeout == 0)
+ if (dw_pcie_wait_for_link(pp))
dev_err(pp->dev, "Link not up after reconfiguration\n");
}
@@ -163,7 +149,7 @@ static irqreturn_t armada8k_pcie_irq_handler(int irq, void *arg)
/*
* Interrupts are directly handled by the device driver of the
- * PCI device. However, there are also latched into the PCIe
+ * PCI device. However, they are also latched into the PCIe
* controller, so we simply discard them.
*/
val = readl(base + PCIE_GLOBAL_INT_CAUSE1_REG);
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-04-26 17:31 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-26 8:31 [PATCH v3 0/2] pci: host: new driver for Marvell Armada 7K/8K PCIe controller Thomas Petazzoni
2016-04-26 8:31 ` Thomas Petazzoni
2016-04-26 8:31 ` Thomas Petazzoni
2016-04-26 8:31 ` [PATCH v3 1/2] dt-bindings: pci: add DT binding " Thomas Petazzoni
2016-04-26 8:31 ` Thomas Petazzoni
2016-04-26 8:31 ` [PATCH v3 2/2] pci: host: new driver " Thomas Petazzoni
2016-04-26 8:31 ` Thomas Petazzoni
2016-04-26 17:31 ` Bjorn Helgaas [this message]
2016-04-26 17:31 ` [PATCH v3 0/2] " Bjorn Helgaas
2016-04-26 17:31 ` Bjorn Helgaas
2016-04-26 19:08 ` Thomas Petazzoni
2016-04-26 19:08 ` Thomas Petazzoni
2016-04-26 19:08 ` Thomas Petazzoni
2016-04-26 21:45 ` Bjorn Helgaas
2016-04-26 21:45 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160426173144.GB27803@localhost \
--to=helgaas@kernel.org \
--cc=alior@marvell.com \
--cc=andrew@lunn.ch \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=gregory.clement@free-electrons.com \
--cc=hannah@marvell.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jason@lakedaemon.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=nadavh@marvell.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=sebastian.hesselbarth@gmail.com \
--cc=thomas.petazzoni@free-electrons.com \
--cc=yehuday@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.