* [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper
[not found] <20180329083946.25970-1-thomas.petazzoni@bootlin.com>
@ 2018-03-29 8:39 ` Thomas Petazzoni
2018-04-04 11:28 ` Lorenzo Pieralisi
2018-03-29 8:39 ` [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device() Thomas Petazzoni
` (3 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2018-03-29 8:39 UTC (permalink / raw)
To: Bjorn Helgaas, linux-pci
Cc: Gregory Clement, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel,
Thomas Petazzoni, stable
In other to mimic other PCIe host controller drivers, introduce an
advk_pcie_valid_device() helper, used in the configuration read/write
functions.
This patch by itself is not a fix, but it is required for a follow-up
patch that is a fix, hence the Fixes tag and the Cc to stable.
Fixes: 8c39d710363c1 ("PCI: aardvark: Add Aardvark PCI host controller driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
Changes since v3:
- Make the new helper return a bool instead of int
Changes since v2:
- New patch
---
drivers/pci/host/pci-aardvark.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
index b04d37b3c5de..82bff709a4b3 100644
--- a/drivers/pci/host/pci-aardvark.c
+++ b/drivers/pci/host/pci-aardvark.c
@@ -430,6 +430,15 @@ static int advk_pcie_wait_pio(struct advk_pcie *pcie)
return -ETIMEDOUT;
}
+static bool advk_pcie_valid_device(struct advk_pcie *pcie, struct pci_bus *bus,
+ int devfn)
+{
+ if (PCI_SLOT(devfn) != 0)
+ return false;
+
+ return true;
+}
+
static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn,
int where, int size, u32 *val)
{
@@ -437,7 +446,7 @@ static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn,
u32 reg;
int ret;
- if (PCI_SLOT(devfn) != 0) {
+ if (!advk_pcie_valid_device(pcie, bus, devfn)) {
*val = 0xffffffff;
return PCIBIOS_DEVICE_NOT_FOUND;
}
@@ -491,7 +500,7 @@ static int advk_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
int offset;
int ret;
- if (PCI_SLOT(devfn) != 0)
+ if (!advk_pcie_valid_device(pcie, bus, devfn))
return PCIBIOS_DEVICE_NOT_FOUND;
if (where % size)
--
2.14.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device()
[not found] <20180329083946.25970-1-thomas.petazzoni@bootlin.com>
2018-03-29 8:39 ` [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper Thomas Petazzoni
@ 2018-03-29 8:39 ` Thomas Petazzoni
2018-03-29 14:12 ` Gregory CLEMENT
2018-03-29 8:39 ` [PATCH v4 3/6] PCI: aardvark: Set PIO_ADDR_LS correctly in advk_pcie_rd_conf() Thomas Petazzoni
` (2 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2018-03-29 8:39 UTC (permalink / raw)
To: Bjorn Helgaas, linux-pci
Cc: Gregory Clement, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel, stable,
Thomas Petazzoni
From: Victor Gu <xigu@marvell.com>
The PCI configuration space read/write functions were special casing
the situation where PCI_SLOT(devfn) != 0, and returned
PCIBIOS_DEVICE_NOT_FOUND in this case.
However, while this is what is intended for the root bus, it is not
intended for the child busses, as it prevents discovering devices with
PCI_SLOT(x) != 0. Therefore, we return PCIBIOS_DEVICE_NOT_FOUND only
if we're on the root bus.
Fixes: 8c39d710363c1 ("PCI: aardvark: Add Aardvark PCI host controller driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Victor Gu <xigu@marvell.com>
Reviewed-by: Wilson Ding <dingwei@marvell.com>
Reviewed-by: Nadav Haklai <nadavh@marvell.com>
[Thomas: tweak commit log.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
Changes since v2:
- The logic has been factorized into a advk_pcie_valid_device()
helper in a previous patch, so this patch was adjusted accordingly.
---
drivers/pci/host/pci-aardvark.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
index 82bff709a4b3..9d7f9f1c6837 100644
--- a/drivers/pci/host/pci-aardvark.c
+++ b/drivers/pci/host/pci-aardvark.c
@@ -433,7 +433,7 @@ static int advk_pcie_wait_pio(struct advk_pcie *pcie)
static bool advk_pcie_valid_device(struct advk_pcie *pcie, struct pci_bus *bus,
int devfn)
{
- if (PCI_SLOT(devfn) != 0)
+ if ((bus->number == pcie->root_bus_nr) && PCI_SLOT(devfn) != 0)
return false;
return true;
--
2.14.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 3/6] PCI: aardvark: Set PIO_ADDR_LS correctly in advk_pcie_rd_conf()
[not found] <20180329083946.25970-1-thomas.petazzoni@bootlin.com>
2018-03-29 8:39 ` [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device() Thomas Petazzoni
@ 2018-03-29 8:39 ` Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 4/6] PCI: aardvark: Use ISR1 instead of ISR0 interrupt in legacy irq mode Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 5/6] PCI: aardvark: Fix PCIe Max Read Request Size setting Thomas Petazzoni
4 siblings, 0 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2018-03-29 8:39 UTC (permalink / raw)
To: Bjorn Helgaas, linux-pci
Cc: Gregory Clement, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel, stable,
Thomas Petazzoni
From: Victor Gu <xigu@marvell.com>
When setting the PIO_ADDR_LS register during a configuration read, we
were properly passing the device number, function number and register
number, but not the bus number, causing issues when reading the
configuration of PCIe devices.
Fixes: 8c39d710363c1 ("PCI: aardvark: Add Aardvark PCI host controller driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Victor Gu <xigu@marvell.com>
Reviewed-by: Wilson Ding <dingwei@marvell.com>
Reviewed-by: Nadav Haklai <nadavh@marvell.com>
[Thomas: tweak commit log.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
Changes since v2:
- Drop PCIE_BDF() macro, since it's no longer used. Noticed by Bjorn
Helgaas.
---
drivers/pci/host/pci-aardvark.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
index 9d7f9f1c6837..2d0f8148ae9b 100644
--- a/drivers/pci/host/pci-aardvark.c
+++ b/drivers/pci/host/pci-aardvark.c
@@ -172,8 +172,6 @@
#define PCIE_CONFIG_WR_TYPE0 0xa
#define PCIE_CONFIG_WR_TYPE1 0xb
-/* PCI_BDF shifts 8bit, so we need extra 4bit shift */
-#define PCIE_BDF(dev) (dev << 4)
#define PCIE_CONF_BUS(bus) (((bus) & 0xff) << 20)
#define PCIE_CONF_DEV(dev) (((dev) & 0x1f) << 15)
#define PCIE_CONF_FUNC(fun) (((fun) & 0x7) << 12)
@@ -465,7 +463,7 @@ static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn,
advk_writel(pcie, reg, PIO_CTRL);
/* Program the address registers */
- reg = PCIE_BDF(devfn) | PCIE_CONF_REG(where);
+ reg = PCIE_CONF_ADDR(bus->number, devfn, where);
advk_writel(pcie, reg, PIO_ADDR_LS);
advk_writel(pcie, 0, PIO_ADDR_MS);
--
2.14.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 4/6] PCI: aardvark: Use ISR1 instead of ISR0 interrupt in legacy irq mode
[not found] <20180329083946.25970-1-thomas.petazzoni@bootlin.com>
` (2 preceding siblings ...)
2018-03-29 8:39 ` [PATCH v4 3/6] PCI: aardvark: Set PIO_ADDR_LS correctly in advk_pcie_rd_conf() Thomas Petazzoni
@ 2018-03-29 8:39 ` Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 5/6] PCI: aardvark: Fix PCIe Max Read Request Size setting Thomas Petazzoni
4 siblings, 0 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2018-03-29 8:39 UTC (permalink / raw)
To: Bjorn Helgaas, linux-pci
Cc: Gregory Clement, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel, stable,
Thomas Petazzoni
From: Victor Gu <xigu@marvell.com>
The Aardvark has two interrupts sets:
- first set is bit[23:16] of PCIe ISR 0 register(RD0074840h)
- second set is bit[11:8] of PCIe ISR 1 register(RD0074848h)
Only one set should be used, while another set should be masked.
The second set, ISR1, is more advanced, the Legacy INT_X status bit is
asserted once Assert_INTX message is received, and de-asserted after
Deassert_INTX message is received. Therefore, it matches what the
driver is currently doing in the ->irq_mask() and ->irq_unmask()
functions. The ISR0 requires additional work to deassert the
interrupt, which the driver doesn't do currently.
This commit resolves a number of issues with legacy interrupts.
This is part of fixing bug
https://bugzilla.kernel.org/show_bug.cgi?id=196339, this commit was
reported as the user to be important to get a Intel 7260 mini-PCIe
WiFi card working.
Fixes: 8c39d710363c1 ("PCI: aardvark: Add Aardvark PCI host controller driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Victor Gu <xigu@marvell.com>
Reviewed-by: Evan Wang <xswang@marvell.com>
Reviewed-by: Nadav Haklai <nadavh@marvell.com>
[Thomas: tweak commit log.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
drivers/pci/host/pci-aardvark.c | 41 ++++++++++++++++++++++++-----------------
1 file changed, 24 insertions(+), 17 deletions(-)
diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
index 2d0f8148ae9b..f94bd70a8f6d 100644
--- a/drivers/pci/host/pci-aardvark.c
+++ b/drivers/pci/host/pci-aardvark.c
@@ -100,7 +100,8 @@
#define PCIE_ISR1_MASK_REG (CONTROL_BASE_ADDR + 0x4C)
#define PCIE_ISR1_POWER_STATE_CHANGE BIT(4)
#define PCIE_ISR1_FLUSH BIT(5)
-#define PCIE_ISR1_ALL_MASK GENMASK(5, 4)
+#define PCIE_ISR1_INTX_ASSERT(val) BIT(8 + (val))
+#define PCIE_ISR1_ALL_MASK GENMASK(11, 4)
#define PCIE_MSI_ADDR_LOW_REG (CONTROL_BASE_ADDR + 0x50)
#define PCIE_MSI_ADDR_HIGH_REG (CONTROL_BASE_ADDR + 0x54)
#define PCIE_MSI_STATUS_REG (CONTROL_BASE_ADDR + 0x58)
@@ -616,9 +617,9 @@ static void advk_pcie_irq_mask(struct irq_data *d)
irq_hw_number_t hwirq = irqd_to_hwirq(d);
u32 mask;
- mask = advk_readl(pcie, PCIE_ISR0_MASK_REG);
- mask |= PCIE_ISR0_INTX_ASSERT(hwirq);
- advk_writel(pcie, mask, PCIE_ISR0_MASK_REG);
+ mask = advk_readl(pcie, PCIE_ISR1_MASK_REG);
+ mask |= PCIE_ISR1_INTX_ASSERT(hwirq);
+ advk_writel(pcie, mask, PCIE_ISR1_MASK_REG);
}
static void advk_pcie_irq_unmask(struct irq_data *d)
@@ -627,9 +628,9 @@ static void advk_pcie_irq_unmask(struct irq_data *d)
irq_hw_number_t hwirq = irqd_to_hwirq(d);
u32 mask;
- mask = advk_readl(pcie, PCIE_ISR0_MASK_REG);
- mask &= ~PCIE_ISR0_INTX_ASSERT(hwirq);
- advk_writel(pcie, mask, PCIE_ISR0_MASK_REG);
+ mask = advk_readl(pcie, PCIE_ISR1_MASK_REG);
+ mask &= ~PCIE_ISR1_INTX_ASSERT(hwirq);
+ advk_writel(pcie, mask, PCIE_ISR1_MASK_REG);
}
static int advk_pcie_irq_map(struct irq_domain *h,
@@ -772,29 +773,35 @@ static void advk_pcie_handle_msi(struct advk_pcie *pcie)
static void advk_pcie_handle_int(struct advk_pcie *pcie)
{
- u32 val, mask, status;
+ u32 isr0_val, isr0_mask, isr0_status;
+ u32 isr1_val, isr1_mask, isr1_status;
int i, virq;
- val = advk_readl(pcie, PCIE_ISR0_REG);
- mask = advk_readl(pcie, PCIE_ISR0_MASK_REG);
- status = val & ((~mask) & PCIE_ISR0_ALL_MASK);
+ isr0_val = advk_readl(pcie, PCIE_ISR0_REG);
+ isr0_mask = advk_readl(pcie, PCIE_ISR0_MASK_REG);
+ isr0_status = isr0_val & ((~isr0_mask) & PCIE_ISR0_ALL_MASK);
- if (!status) {
- advk_writel(pcie, val, PCIE_ISR0_REG);
+ isr1_val = advk_readl(pcie, PCIE_ISR1_REG);
+ isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG);
+ isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK);
+
+ if (!isr0_status && !isr1_status) {
+ advk_writel(pcie, isr0_val, PCIE_ISR0_REG);
+ advk_writel(pcie, isr1_val, PCIE_ISR1_REG);
return;
}
/* Process MSI interrupts */
- if (status & PCIE_ISR0_MSI_INT_PENDING)
+ if (isr0_status & PCIE_ISR0_MSI_INT_PENDING)
advk_pcie_handle_msi(pcie);
/* Process legacy interrupts */
for (i = 0; i < PCI_NUM_INTX; i++) {
- if (!(status & PCIE_ISR0_INTX_ASSERT(i)))
+ if (!(isr1_status & PCIE_ISR1_INTX_ASSERT(i)))
continue;
- advk_writel(pcie, PCIE_ISR0_INTX_ASSERT(i),
- PCIE_ISR0_REG);
+ advk_writel(pcie, PCIE_ISR1_INTX_ASSERT(i),
+ PCIE_ISR1_REG);
virq = irq_find_mapping(pcie->irq_domain, i);
generic_handle_irq(virq);
--
2.14.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 5/6] PCI: aardvark: Fix PCIe Max Read Request Size setting
[not found] <20180329083946.25970-1-thomas.petazzoni@bootlin.com>
` (3 preceding siblings ...)
2018-03-29 8:39 ` [PATCH v4 4/6] PCI: aardvark: Use ISR1 instead of ISR0 interrupt in legacy irq mode Thomas Petazzoni
@ 2018-03-29 8:39 ` Thomas Petazzoni
4 siblings, 0 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2018-03-29 8:39 UTC (permalink / raw)
To: Bjorn Helgaas, linux-pci
Cc: Gregory Clement, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel,
Evan Wang, stable, Thomas Petazzoni
From: Evan Wang <xswang@marvell.com>
There is an obvious typo issue in the definition of the PCIe maximum
read request size: a bit shift is directly used as a value, while it
should be used to shift the correct value.
Fixes: 8c39d710363c1 ("PCI: aardvark: Add Aardvark PCI host controller driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Evan Wang <xswang@marvell.com>
Reviewed-by: Victor Gu <xigu@marvell.com>
Reviewed-by: Nadav Haklai <nadavh@marvell.com>
[Thomas: tweak commit log.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
drivers/pci/host/pci-aardvark.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
index f94bd70a8f6d..69c4fd50947e 100644
--- a/drivers/pci/host/pci-aardvark.c
+++ b/drivers/pci/host/pci-aardvark.c
@@ -29,6 +29,7 @@
#define PCIE_CORE_DEV_CTRL_STATS_MAX_PAYLOAD_SZ_SHIFT 5
#define PCIE_CORE_DEV_CTRL_STATS_SNOOP_DISABLE (0 << 11)
#define PCIE_CORE_DEV_CTRL_STATS_MAX_RD_REQ_SIZE_SHIFT 12
+#define PCIE_CORE_DEV_CTRL_STATS_MAX_RD_REQ_SZ 0x2
#define PCIE_CORE_LINK_CTRL_STAT_REG 0xd0
#define PCIE_CORE_LINK_L0S_ENTRY BIT(0)
#define PCIE_CORE_LINK_TRAINING BIT(5)
@@ -295,7 +296,8 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)
reg = PCIE_CORE_DEV_CTRL_STATS_RELAX_ORDER_DISABLE |
(7 << PCIE_CORE_DEV_CTRL_STATS_MAX_PAYLOAD_SZ_SHIFT) |
PCIE_CORE_DEV_CTRL_STATS_SNOOP_DISABLE |
- PCIE_CORE_DEV_CTRL_STATS_MAX_RD_REQ_SIZE_SHIFT;
+ (PCIE_CORE_DEV_CTRL_STATS_MAX_RD_REQ_SZ <<
+ PCIE_CORE_DEV_CTRL_STATS_MAX_RD_REQ_SIZE_SHIFT);
advk_writel(pcie, reg, PCIE_CORE_DEV_CTRL_STATS_REG);
/* Program PCIe Control 2 to disable strict ordering */
--
2.14.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device()
2018-03-29 8:39 ` [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device() Thomas Petazzoni
@ 2018-03-29 14:12 ` Gregory CLEMENT
2018-03-29 14:21 ` Thomas Petazzoni
0 siblings, 1 reply; 10+ messages in thread
From: Gregory CLEMENT @ 2018-03-29 14:12 UTC (permalink / raw)
To: Thomas Petazzoni
Cc: Bjorn Helgaas, linux-pci, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel, stable
Hi Thomas,
On jeu., mars 29 2018, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:
> From: Victor Gu <xigu@marvell.com>
>
> The PCI configuration space read/write functions were special casing
causing?
else I don't get it
> the situation where PCI_SLOT(devfn) != 0, and returned
> PCIBIOS_DEVICE_NOT_FOUND in this case.
>
> However, while this is what is intended for the root bus, it is not
> intended for the child busses, as it prevents discovering devices with
buses
> PCI_SLOT(x) != 0. Therefore, we return PCIBIOS_DEVICE_NOT_FOUND only
> if we're on the root bus.
>
Gregory
--
Gregory Clement, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
http://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device()
2018-03-29 14:12 ` Gregory CLEMENT
@ 2018-03-29 14:21 ` Thomas Petazzoni
0 siblings, 0 replies; 10+ messages in thread
From: Thomas Petazzoni @ 2018-03-29 14:21 UTC (permalink / raw)
To: Gregory CLEMENT
Cc: Bjorn Helgaas, linux-pci, Miquèl Raynal, Maxime Chevallier,
Antoine Tenart, Victor Gu, Nadav Haklai, linux-arm-kernel, stable
Hello,
On Thu, 29 Mar 2018 16:12:28 +0200, Gregory CLEMENT wrote:
> Hi Thomas,
>
> On jeu., mars 29 2018, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:
>
> > From: Victor Gu <xigu@marvell.com>
> >
> > The PCI configuration space read/write functions were special casing
> causing?
> else I don't get it
No, no it's really "special casing", i.e "making a special case". I
must admit I don't know if it's proper English, but clearly, "special
causing" doesn't make any sense, and "special casing" is what I wanted
to write.
>
> > the situation where PCI_SLOT(devfn) != 0, and returned
> > PCIBIOS_DEVICE_NOT_FOUND in this case.
> >
> > However, while this is what is intended for the root bus, it is not
> > intended for the child busses, as it prevents discovering devices with
> buses
Merriam-Webster says that both exists [1], though buses is apparently
more common. The kernel has 633 occurrences of busses, and 785
occurrences of buses.
[1] https://www.merriam-webster.com/words-at-play/plural-of-bus
So I'd say my commit log is good as-is :)
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper
2018-03-29 8:39 ` [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper Thomas Petazzoni
@ 2018-04-04 11:28 ` Lorenzo Pieralisi
2018-04-06 9:21 ` Thomas Petazzoni
0 siblings, 1 reply; 10+ messages in thread
From: Lorenzo Pieralisi @ 2018-04-04 11:28 UTC (permalink / raw)
To: Thomas Petazzoni
Cc: Bjorn Helgaas, linux-pci, Gregory Clement, Miquèl Raynal,
Maxime Chevallier, Antoine Tenart, Victor Gu, Nadav Haklai,
linux-arm-kernel, stable
On Thu, Mar 29, 2018 at 10:39:41AM +0200, Thomas Petazzoni wrote:
> In other to mimic other PCIe host controller drivers, introduce an
> advk_pcie_valid_device() helper, used in the configuration read/write
> functions.
>
> This patch by itself is not a fix, but it is required for a follow-up
> patch that is a fix, hence the Fixes tag and the Cc to stable.
Should not we just reshuffle patch 1 and 2 instead of sending this
patch to stable ? I appreciate the merge window is open and timing is
quite tight, it is just to avoid sending churn to stable kernels
for not much.
Thanks,
Lorenzo
> Fixes: 8c39d710363c1 ("PCI: aardvark: Add Aardvark PCI host controller driver")
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> ---
> Changes since v3:
> - Make the new helper return a bool instead of int
> Changes since v2:
> - New patch
> ---
> drivers/pci/host/pci-aardvark.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
> index b04d37b3c5de..82bff709a4b3 100644
> --- a/drivers/pci/host/pci-aardvark.c
> +++ b/drivers/pci/host/pci-aardvark.c
> @@ -430,6 +430,15 @@ static int advk_pcie_wait_pio(struct advk_pcie *pcie)
> return -ETIMEDOUT;
> }
>
> +static bool advk_pcie_valid_device(struct advk_pcie *pcie, struct pci_bus *bus,
> + int devfn)
> +{
> + if (PCI_SLOT(devfn) != 0)
> + return false;
> +
> + return true;
> +}
> +
> static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn,
> int where, int size, u32 *val)
> {
> @@ -437,7 +446,7 @@ static int advk_pcie_rd_conf(struct pci_bus *bus, u32 devfn,
> u32 reg;
> int ret;
>
> - if (PCI_SLOT(devfn) != 0) {
> + if (!advk_pcie_valid_device(pcie, bus, devfn)) {
> *val = 0xffffffff;
> return PCIBIOS_DEVICE_NOT_FOUND;
> }
> @@ -491,7 +500,7 @@ static int advk_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
> int offset;
> int ret;
>
> - if (PCI_SLOT(devfn) != 0)
> + if (!advk_pcie_valid_device(pcie, bus, devfn))
> return PCIBIOS_DEVICE_NOT_FOUND;
>
> if (where % size)
> --
> 2.14.3
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper
2018-04-04 11:28 ` Lorenzo Pieralisi
@ 2018-04-06 9:21 ` Thomas Petazzoni
2018-04-06 13:33 ` Bjorn Helgaas
0 siblings, 1 reply; 10+ messages in thread
From: Thomas Petazzoni @ 2018-04-06 9:21 UTC (permalink / raw)
To: Lorenzo Pieralisi
Cc: Bjorn Helgaas, linux-pci, Gregory Clement, Miquèl Raynal,
Maxime Chevallier, Antoine Tenart, Victor Gu, Nadav Haklai,
linux-arm-kernel, stable
Hello,
On Wed, 4 Apr 2018 12:28:43 +0100, Lorenzo Pieralisi wrote:
> On Thu, Mar 29, 2018 at 10:39:41AM +0200, Thomas Petazzoni wrote:
> > In other to mimic other PCIe host controller drivers, introduce an
> > advk_pcie_valid_device() helper, used in the configuration read/write
> > functions.
> >
> > This patch by itself is not a fix, but it is required for a follow-up
> > patch that is a fix, hence the Fixes tag and the Cc to stable.
>
> Should not we just reshuffle patch 1 and 2 instead of sending this
> patch to stable ? I appreciate the merge window is open and timing is
> quite tight, it is just to avoid sending churn to stable kernels
> for not much.
I can certainly do that, but it's actually Bjorn who asked in the first
place to introduce the advk_pcie_valid_device() helper.
I'll send a new patch series that has these reshuffled.
Thanks,
Thomas
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper
2018-04-06 9:21 ` Thomas Petazzoni
@ 2018-04-06 13:33 ` Bjorn Helgaas
0 siblings, 0 replies; 10+ messages in thread
From: Bjorn Helgaas @ 2018-04-06 13:33 UTC (permalink / raw)
To: Thomas Petazzoni
Cc: Lorenzo Pieralisi, Antoine Tenart, linux-pci, Gregory Clement,
stable, Maxime Chevallier, Nadav Haklai, Victor Gu,
Miquèl Raynal, Bjorn Helgaas, linux-arm-kernel
On Fri, Apr 06, 2018 at 11:21:28AM +0200, Thomas Petazzoni wrote:
> Hello,
>
> On Wed, 4 Apr 2018 12:28:43 +0100, Lorenzo Pieralisi wrote:
> > On Thu, Mar 29, 2018 at 10:39:41AM +0200, Thomas Petazzoni wrote:
> > > In other to mimic other PCIe host controller drivers, introduce an
> > > advk_pcie_valid_device() helper, used in the configuration read/write
> > > functions.
> > >
> > > This patch by itself is not a fix, but it is required for a follow-up
> > > patch that is a fix, hence the Fixes tag and the Cc to stable.
> >
> > Should not we just reshuffle patch 1 and 2 instead of sending this
> > patch to stable ? I appreciate the merge window is open and timing is
> > quite tight, it is just to avoid sending churn to stable kernels
> > for not much.
>
> I can certainly do that, but it's actually Bjorn who asked in the first
> place to introduce the advk_pcie_valid_device() helper.
I did suggest [1] adding advk_pcie_valid_device() to match other
drivers, but I don't care about the order of these patches. If it
makes more sense to put the fix first for easier backporting to
stable, that's fine with me.
[1] https://lkml.kernel.org/r/20180110011136.GB157182@bhelgaas-glaptop.roam.corp.google.com
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-04-06 13:33 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20180329083946.25970-1-thomas.petazzoni@bootlin.com>
2018-03-29 8:39 ` [PATCH v4 1/6] PCI: aardvark: Introduce an advk_pcie_valid_device() helper Thomas Petazzoni
2018-04-04 11:28 ` Lorenzo Pieralisi
2018-04-06 9:21 ` Thomas Petazzoni
2018-04-06 13:33 ` Bjorn Helgaas
2018-03-29 8:39 ` [PATCH v4 2/6] PCI: aardvark: Fix logic in advk_pcie_valid_device() Thomas Petazzoni
2018-03-29 14:12 ` Gregory CLEMENT
2018-03-29 14:21 ` Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 3/6] PCI: aardvark: Set PIO_ADDR_LS correctly in advk_pcie_rd_conf() Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 4/6] PCI: aardvark: Use ISR1 instead of ISR0 interrupt in legacy irq mode Thomas Petazzoni
2018-03-29 8:39 ` [PATCH v4 5/6] PCI: aardvark: Fix PCIe Max Read Request Size setting Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).