From: Marc Zyngier <maz@kernel.org>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Rob Herring <robh+dt@kernel.org>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Tom Joseph <tjoseph@cadence.com>, <linux-omap@vger.kernel.org>,
<linux-pci@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
Lokesh Vutla <lokeshvutla@ti.com>
Subject: Re: [PATCH 3/4] PCI: j721e: Add PCIe support for j7200
Date: Fri, 02 Apr 2021 12:17:09 +0100 [thread overview]
Message-ID: <87a6qhey16.wl-maz@kernel.org> (raw)
In-Reply-To: <20210325090936.9306-4-kishon@ti.com>
On Thu, 25 Mar 2021 09:09:35 +0000,
Kishon Vijay Abraham I <kishon@ti.com> wrote:
>
> J7200 has the same PCIe IP as in J721E with minor changes in the
> wrapper. Add PCIe support for j7200 accounting for the wrapper
> changes in pci-j721e.c
> Changes from J721E:
> *) Allows byte access of bridge configuration space registers
> *) Changes in legacy interrupt register map
>
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> ---
> drivers/pci/controller/cadence/pci-j721e.c | 111 ++++++++++++++++++---
> 1 file changed, 99 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
> index 17db86a51ca8..f175f116abf6 100644
> --- a/drivers/pci/controller/cadence/pci-j721e.c
> +++ b/drivers/pci/controller/cadence/pci-j721e.c
> @@ -27,6 +27,7 @@
> #define STATUS_REG_SYS_2 0x508
> #define STATUS_CLR_REG_SYS_2 0x708
> #define LINK_DOWN BIT(1)
> +#define J7200_LINK_DOWN BIT(10)
>
> #define EOI_REG 0x10
>
> @@ -35,6 +36,10 @@
> #define STATUS_CLR_REG_SYS_0 0x700
> #define INTx_EN(num) (1 << (num))
>
> +#define ENABLE_REG_SYS_1 0x104
> +#define STATUS_REG_SYS_1 0x504
> +#define SYS1_INTx_EN(num) (1 << (22 + (num)))
> +
> #define J721E_PCIE_USER_CMD_STATUS 0x4
> #define LINK_TRAINING_ENABLE BIT(0)
>
> @@ -48,6 +53,14 @@ enum link_status {
> LINK_UP_DL_COMPLETED,
> };
>
> +#define USER_EOI_REG 0xC8
> +enum eoi_reg {
> + EOI_DOWNSTREAM_INTERRUPT,
> + EOI_FLR_INTERRUPT,
> + EOI_LEGACY_INTERRUPT,
> + EOI_POWER_STATE_INTERRUPT,
> +};
> +
> #define J721E_MODE_RC BIT(7)
> #define LANE_COUNT_MASK BIT(8)
> #define LANE_COUNT(n) ((n) << 8)
> @@ -65,6 +78,8 @@ struct j721e_pcie {
> void __iomem *user_cfg_base;
> void __iomem *intd_cfg_base;
> struct irq_domain *legacy_irq_domain;
> + bool is_intc_v1;
> + u32 link_irq_reg_field;
> };
>
> enum j721e_pcie_mode {
> @@ -75,6 +90,9 @@ enum j721e_pcie_mode {
> struct j721e_pcie_data {
> enum j721e_pcie_mode mode;
> bool quirk_retrain_flag;
> + bool is_intc_v1;
> + bool byte_access_allowed;
> + const struct cdns_pcie_ops *ops;
> };
>
> static inline u32 j721e_pcie_user_readl(struct j721e_pcie *pcie, u32 offset)
> @@ -106,12 +124,12 @@ static irqreturn_t j721e_pcie_link_irq_handler(int irq, void *priv)
> u32 reg;
>
> reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_2);
> - if (!(reg & LINK_DOWN))
> + if (!(reg & pcie->link_irq_reg_field))
> return IRQ_NONE;
>
> dev_err(dev, "LINK DOWN!\n");
>
> - j721e_pcie_intd_writel(pcie, STATUS_CLR_REG_SYS_2, LINK_DOWN);
> + j721e_pcie_intd_writel(pcie, STATUS_CLR_REG_SYS_2, pcie->link_irq_reg_field);
> return IRQ_HANDLED;
> }
>
> @@ -119,12 +137,40 @@ static void j721e_pcie_config_link_irq(struct j721e_pcie *pcie)
> {
> u32 reg;
>
> + pcie->link_irq_reg_field = J7200_LINK_DOWN;
> + if (pcie->is_intc_v1)
> + pcie->link_irq_reg_field = LINK_DOWN;
> +
> reg = j721e_pcie_intd_readl(pcie, ENABLE_REG_SYS_2);
> - reg |= LINK_DOWN;
> + reg |= pcie->link_irq_reg_field;
> j721e_pcie_intd_writel(pcie, ENABLE_REG_SYS_2, reg);
> }
>
> static void j721e_pcie_legacy_irq_handler(struct irq_desc *desc)
> +{
> + struct j721e_pcie *pcie = irq_desc_get_handler_data(desc);
> + struct irq_chip *chip = irq_desc_get_chip(desc);
> + int virq;
> + u32 reg;
> + int i;
> +
> + chained_irq_enter(chip, desc);
> +
> + for (i = 0; i < PCI_NUM_INTX; i++) {
> + reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_1);
> + if (!(reg & SYS1_INTx_EN(i)))
> + continue;
> +
> + virq = irq_find_mapping(pcie->legacy_irq_domain, i);
> + generic_handle_irq(virq);
> + j721e_pcie_user_writel(pcie, USER_EOI_REG,
> + EOI_LEGACY_INTERRUPT);
Exact same comment as in the previous patch: this EOI (which I assume
is used to regenerate the GIC edge at after handling the INTx level
interrupt) must be placed in a irq_eoi() callback.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Rob Herring <robh+dt@kernel.org>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Tom Joseph <tjoseph@cadence.com>, <linux-omap@vger.kernel.org>,
<linux-pci@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
Lokesh Vutla <lokeshvutla@ti.com>
Subject: Re: [PATCH 3/4] PCI: j721e: Add PCIe support for j7200
Date: Fri, 02 Apr 2021 12:17:09 +0100 [thread overview]
Message-ID: <87a6qhey16.wl-maz@kernel.org> (raw)
In-Reply-To: <20210325090936.9306-4-kishon@ti.com>
On Thu, 25 Mar 2021 09:09:35 +0000,
Kishon Vijay Abraham I <kishon@ti.com> wrote:
>
> J7200 has the same PCIe IP as in J721E with minor changes in the
> wrapper. Add PCIe support for j7200 accounting for the wrapper
> changes in pci-j721e.c
> Changes from J721E:
> *) Allows byte access of bridge configuration space registers
> *) Changes in legacy interrupt register map
>
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> ---
> drivers/pci/controller/cadence/pci-j721e.c | 111 ++++++++++++++++++---
> 1 file changed, 99 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
> index 17db86a51ca8..f175f116abf6 100644
> --- a/drivers/pci/controller/cadence/pci-j721e.c
> +++ b/drivers/pci/controller/cadence/pci-j721e.c
> @@ -27,6 +27,7 @@
> #define STATUS_REG_SYS_2 0x508
> #define STATUS_CLR_REG_SYS_2 0x708
> #define LINK_DOWN BIT(1)
> +#define J7200_LINK_DOWN BIT(10)
>
> #define EOI_REG 0x10
>
> @@ -35,6 +36,10 @@
> #define STATUS_CLR_REG_SYS_0 0x700
> #define INTx_EN(num) (1 << (num))
>
> +#define ENABLE_REG_SYS_1 0x104
> +#define STATUS_REG_SYS_1 0x504
> +#define SYS1_INTx_EN(num) (1 << (22 + (num)))
> +
> #define J721E_PCIE_USER_CMD_STATUS 0x4
> #define LINK_TRAINING_ENABLE BIT(0)
>
> @@ -48,6 +53,14 @@ enum link_status {
> LINK_UP_DL_COMPLETED,
> };
>
> +#define USER_EOI_REG 0xC8
> +enum eoi_reg {
> + EOI_DOWNSTREAM_INTERRUPT,
> + EOI_FLR_INTERRUPT,
> + EOI_LEGACY_INTERRUPT,
> + EOI_POWER_STATE_INTERRUPT,
> +};
> +
> #define J721E_MODE_RC BIT(7)
> #define LANE_COUNT_MASK BIT(8)
> #define LANE_COUNT(n) ((n) << 8)
> @@ -65,6 +78,8 @@ struct j721e_pcie {
> void __iomem *user_cfg_base;
> void __iomem *intd_cfg_base;
> struct irq_domain *legacy_irq_domain;
> + bool is_intc_v1;
> + u32 link_irq_reg_field;
> };
>
> enum j721e_pcie_mode {
> @@ -75,6 +90,9 @@ enum j721e_pcie_mode {
> struct j721e_pcie_data {
> enum j721e_pcie_mode mode;
> bool quirk_retrain_flag;
> + bool is_intc_v1;
> + bool byte_access_allowed;
> + const struct cdns_pcie_ops *ops;
> };
>
> static inline u32 j721e_pcie_user_readl(struct j721e_pcie *pcie, u32 offset)
> @@ -106,12 +124,12 @@ static irqreturn_t j721e_pcie_link_irq_handler(int irq, void *priv)
> u32 reg;
>
> reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_2);
> - if (!(reg & LINK_DOWN))
> + if (!(reg & pcie->link_irq_reg_field))
> return IRQ_NONE;
>
> dev_err(dev, "LINK DOWN!\n");
>
> - j721e_pcie_intd_writel(pcie, STATUS_CLR_REG_SYS_2, LINK_DOWN);
> + j721e_pcie_intd_writel(pcie, STATUS_CLR_REG_SYS_2, pcie->link_irq_reg_field);
> return IRQ_HANDLED;
> }
>
> @@ -119,12 +137,40 @@ static void j721e_pcie_config_link_irq(struct j721e_pcie *pcie)
> {
> u32 reg;
>
> + pcie->link_irq_reg_field = J7200_LINK_DOWN;
> + if (pcie->is_intc_v1)
> + pcie->link_irq_reg_field = LINK_DOWN;
> +
> reg = j721e_pcie_intd_readl(pcie, ENABLE_REG_SYS_2);
> - reg |= LINK_DOWN;
> + reg |= pcie->link_irq_reg_field;
> j721e_pcie_intd_writel(pcie, ENABLE_REG_SYS_2, reg);
> }
>
> static void j721e_pcie_legacy_irq_handler(struct irq_desc *desc)
> +{
> + struct j721e_pcie *pcie = irq_desc_get_handler_data(desc);
> + struct irq_chip *chip = irq_desc_get_chip(desc);
> + int virq;
> + u32 reg;
> + int i;
> +
> + chained_irq_enter(chip, desc);
> +
> + for (i = 0; i < PCI_NUM_INTX; i++) {
> + reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_1);
> + if (!(reg & SYS1_INTx_EN(i)))
> + continue;
> +
> + virq = irq_find_mapping(pcie->legacy_irq_domain, i);
> + generic_handle_irq(virq);
> + j721e_pcie_user_writel(pcie, USER_EOI_REG,
> + EOI_LEGACY_INTERRUPT);
Exact same comment as in the previous patch: this EOI (which I assume
is used to regenerate the GIC edge at after handling the INTx level
interrupt) must be placed in a irq_eoi() callback.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-04-02 11:17 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-25 9:09 [PATCH 0/4] PCI: Add legacy interrupt support in pci-j721e Kishon Vijay Abraham I
2021-03-25 9:09 ` Kishon Vijay Abraham I
2021-03-25 9:09 ` [PATCH 1/4] dt-bindings: PCI: ti,j721e: Add bindings to specify legacy interrupts Kishon Vijay Abraham I
2021-03-25 9:09 ` [PATCH 1/4] dt-bindings: PCI: ti, j721e: " Kishon Vijay Abraham I
2021-03-25 16:56 ` Rob Herring
2021-03-25 16:56 ` Rob Herring
2021-03-25 9:09 ` [PATCH 2/4] PCI: j721e: Add PCI legacy interrupt support for J721E Kishon Vijay Abraham I
2021-03-25 9:09 ` Kishon Vijay Abraham I
2021-03-25 20:41 ` Bjorn Helgaas
2021-03-25 20:41 ` Bjorn Helgaas
2021-03-25 9:09 ` [PATCH 3/4] PCI: j721e: Add PCIe support for j7200 Kishon Vijay Abraham I
2021-03-25 9:09 ` Kishon Vijay Abraham I
2021-04-02 11:17 ` Marc Zyngier [this message]
2021-04-02 11:17 ` Marc Zyngier
2021-03-25 9:09 ` [PATCH 4/4] PCI: j721e: Add PCIe support for AM64 Kishon Vijay Abraham I
2021-03-25 9:09 ` Kishon Vijay Abraham I
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=87a6qhey16.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=kishon@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lokeshvutla@ti.com \
--cc=lorenzo.pieralisi@arm.com \
--cc=robh+dt@kernel.org \
--cc=tjoseph@cadence.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.