From: Minda Chen <minda.chen@starfivetech.com>
To: "Daire McNamara" <daire.mcnamara@microchip.com>,
"Conor Dooley" <conor@kernel.org>,
"Rob Herring" <robh+dt@kernel.org>,
"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Emil Renner Berthing" <emil.renner.berthing@canonical.com>
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-pci@vger.kernel.org,
"Pali Rohár" <pali@kernel.org>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Mason Huo" <mason.huo@starfivetech.com>,
"Leyfoon Tan" <leyfoon.tan@starfivetech.com>,
"Kevin Xie" <kevin.xie@starfivetech.com>,
"Minda Chen" <minda.chen@starfivetech.com>
Subject: [PATCH v3 07/11] PCI: microchip: Rename IRQ init function
Date: Mon, 14 Aug 2023 16:20:12 +0800 [thread overview]
Message-ID: <20230814082016.104181-8-minda.chen@starfivetech.com> (raw)
In-Reply-To: <20230814082016.104181-1-minda.chen@starfivetech.com>
Rename IRQ init function and prepare for re-use
IRQ init function.
rename list:
mc_init_interrupts -> plda_init_interrupts
mc_pcie_init_irq_domain-> plda_pcie_init_irq_domains
Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
---
.../pci/controller/plda/pcie-microchip-host.c | 37 +++++++++++++------
drivers/pci/controller/plda/pcie-plda.h | 7 ++++
2 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/drivers/pci/controller/plda/pcie-microchip-host.c b/drivers/pci/controller/plda/pcie-microchip-host.c
index b42f1aac3ec3..140e7ca1a5cb 100644
--- a/drivers/pci/controller/plda/pcie-microchip-host.c
+++ b/drivers/pci/controller/plda/pcie-microchip-host.c
@@ -559,7 +559,7 @@ static int mc_pcie_init_clks(struct device *dev)
return 0;
}
-static int mc_pcie_init_irq_domains(struct plda_pcie_rp *port)
+static int plda_pcie_init_irq_domains(struct plda_pcie_rp *port, struct plda_evt *evt)
{
struct device *dev = port->dev;
struct device_node *node = dev->of_node;
@@ -572,8 +572,8 @@ static int mc_pcie_init_irq_domains(struct plda_pcie_rp *port)
return -EINVAL;
}
- port->event_domain = irq_domain_add_linear(pcie_intc_node, NUM_EVENTS,
- &event_domain_ops, port);
+ port->event_domain = irq_domain_add_linear(pcie_intc_node, port->num_events,
+ evt->domain_ops, port);
if (!port->event_domain) {
dev_err(dev, "failed to get event domain\n");
of_node_put(pcie_intc_node);
@@ -658,14 +658,15 @@ static void mc_disable_interrupts(struct mc_pcie *port)
writel_relaxed(GENMASK(31, 0), bridge_base_addr + ISTATUS_HOST);
}
-static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp *port)
+static int plda_init_interrupts(struct platform_device *pdev,
+ struct plda_pcie_rp *port, struct plda_evt *evt)
{
struct device *dev = &pdev->dev;
int irq;
int i, intx_irq, msi_irq, event_irq;
int ret;
- ret = mc_pcie_init_irq_domains(port);
+ ret = plda_pcie_init_irq_domains(port, evt);
if (ret) {
dev_err(dev, "failed creating IRQ domains\n");
return ret;
@@ -675,15 +676,18 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
if (irq < 0)
return -ENODEV;
- for (i = 0; i < NUM_EVENTS; i++) {
+ for (i = 0; i < port->num_events; i++) {
event_irq = irq_create_mapping(port->event_domain, i);
if (!event_irq) {
dev_err(dev, "failed to map hwirq %d\n", i);
return -ENXIO;
}
- ret = devm_request_irq(dev, event_irq, mc_event_handler,
- 0, event_cause[i].sym, port);
+ if (evt->request_evt_irq)
+ ret = evt->request_evt_irq(port, event_irq, i);
+ else
+ ret = devm_request_irq(dev, event_irq, plda_event_handler,
+ 0, NULL, port);
if (ret) {
dev_err(dev, "failed to request IRQ %d\n", event_irq);
return ret;
@@ -691,7 +695,7 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
}
intx_irq = irq_create_mapping(port->event_domain,
- EVENT_LOCAL_PM_MSI_INT_INTX);
+ evt->intx_evt);
if (!intx_irq) {
dev_err(dev, "failed to map INTx interrupt\n");
return -ENXIO;
@@ -701,7 +705,7 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
irq_set_chained_handler_and_data(intx_irq, plda_handle_intx, port);
msi_irq = irq_create_mapping(port->event_domain,
- EVENT_LOCAL_PM_MSI_INT_MSI);
+ evt->msi_evt);
if (!msi_irq)
return -ENXIO;
@@ -714,6 +718,13 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
return 0;
}
+static int mc_request_evt_irq(struct plda_pcie_rp *plda, int event_irq,
+ int evt)
+{
+ return devm_request_irq(plda->dev, event_irq, mc_event_handler,
+ 0, event_cause[evt].sym, plda);
+}
+
static int mc_platform_init(struct pci_config_window *cfg)
{
struct device *dev = cfg->parent;
@@ -721,6 +732,9 @@ static int mc_platform_init(struct pci_config_window *cfg)
void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
struct pci_host_bridge *bridge = platform_get_drvdata(pdev);
+ struct plda_evt evt = {&event_domain_ops, mc_request_evt_irq,
+ EVENT_LOCAL_PM_MSI_INT_INTX,
+ EVENT_LOCAL_PM_MSI_INT_MSI};
int ret;
/* Configure address translation table 0 for PCIe config space */
@@ -737,7 +751,7 @@ static int mc_platform_init(struct pci_config_window *cfg)
return ret;
/* Address translation is up; safe to enable interrupts */
- ret = mc_init_interrupts(pdev, &port->plda);
+ ret = plda_init_interrupts(pdev, &port->plda, &evt);
if (ret)
return ret;
@@ -758,6 +772,7 @@ static int mc_host_probe(struct platform_device *pdev)
plda = &port->plda;
plda->dev = dev;
+ plda->num_events = NUM_EVENTS;
port->axi_base_addr = devm_platform_ioremap_resource(pdev, 1);
if (IS_ERR(port->axi_base_addr))
diff --git a/drivers/pci/controller/plda/pcie-plda.h b/drivers/pci/controller/plda/pcie-plda.h
index 56483ebb678d..7571b0bbf37f 100644
--- a/drivers/pci/controller/plda/pcie-plda.h
+++ b/drivers/pci/controller/plda/pcie-plda.h
@@ -126,6 +126,13 @@ struct plda_pcie_rp {
int num_events;
};
+struct plda_evt {
+ const struct irq_domain_ops *domain_ops;
+ int (*request_evt_irq)(struct plda_pcie_rp *pcie, int evt_irq, int event);
+ int intx_evt;
+ int msi_evt;
+};
+
void plda_handle_msi(struct irq_desc *desc);
int plda_allocate_msi_domains(struct plda_pcie_rp *port);
irqreturn_t plda_event_handler(int irq, void *dev_id);
--
2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Minda Chen <minda.chen@starfivetech.com>
To: "Daire McNamara" <daire.mcnamara@microchip.com>,
"Conor Dooley" <conor@kernel.org>,
"Rob Herring" <robh+dt@kernel.org>,
"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Emil Renner Berthing" <emil.renner.berthing@canonical.com>
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-pci@vger.kernel.org,
"Pali Rohár" <pali@kernel.org>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Mason Huo" <mason.huo@starfivetech.com>,
"Leyfoon Tan" <leyfoon.tan@starfivetech.com>,
"Kevin Xie" <kevin.xie@starfivetech.com>,
"Minda Chen" <minda.chen@starfivetech.com>
Subject: [PATCH v3 07/11] PCI: microchip: Rename IRQ init function
Date: Mon, 14 Aug 2023 16:20:12 +0800 [thread overview]
Message-ID: <20230814082016.104181-8-minda.chen@starfivetech.com> (raw)
In-Reply-To: <20230814082016.104181-1-minda.chen@starfivetech.com>
Rename IRQ init function and prepare for re-use
IRQ init function.
rename list:
mc_init_interrupts -> plda_init_interrupts
mc_pcie_init_irq_domain-> plda_pcie_init_irq_domains
Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
---
.../pci/controller/plda/pcie-microchip-host.c | 37 +++++++++++++------
drivers/pci/controller/plda/pcie-plda.h | 7 ++++
2 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/drivers/pci/controller/plda/pcie-microchip-host.c b/drivers/pci/controller/plda/pcie-microchip-host.c
index b42f1aac3ec3..140e7ca1a5cb 100644
--- a/drivers/pci/controller/plda/pcie-microchip-host.c
+++ b/drivers/pci/controller/plda/pcie-microchip-host.c
@@ -559,7 +559,7 @@ static int mc_pcie_init_clks(struct device *dev)
return 0;
}
-static int mc_pcie_init_irq_domains(struct plda_pcie_rp *port)
+static int plda_pcie_init_irq_domains(struct plda_pcie_rp *port, struct plda_evt *evt)
{
struct device *dev = port->dev;
struct device_node *node = dev->of_node;
@@ -572,8 +572,8 @@ static int mc_pcie_init_irq_domains(struct plda_pcie_rp *port)
return -EINVAL;
}
- port->event_domain = irq_domain_add_linear(pcie_intc_node, NUM_EVENTS,
- &event_domain_ops, port);
+ port->event_domain = irq_domain_add_linear(pcie_intc_node, port->num_events,
+ evt->domain_ops, port);
if (!port->event_domain) {
dev_err(dev, "failed to get event domain\n");
of_node_put(pcie_intc_node);
@@ -658,14 +658,15 @@ static void mc_disable_interrupts(struct mc_pcie *port)
writel_relaxed(GENMASK(31, 0), bridge_base_addr + ISTATUS_HOST);
}
-static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp *port)
+static int plda_init_interrupts(struct platform_device *pdev,
+ struct plda_pcie_rp *port, struct plda_evt *evt)
{
struct device *dev = &pdev->dev;
int irq;
int i, intx_irq, msi_irq, event_irq;
int ret;
- ret = mc_pcie_init_irq_domains(port);
+ ret = plda_pcie_init_irq_domains(port, evt);
if (ret) {
dev_err(dev, "failed creating IRQ domains\n");
return ret;
@@ -675,15 +676,18 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
if (irq < 0)
return -ENODEV;
- for (i = 0; i < NUM_EVENTS; i++) {
+ for (i = 0; i < port->num_events; i++) {
event_irq = irq_create_mapping(port->event_domain, i);
if (!event_irq) {
dev_err(dev, "failed to map hwirq %d\n", i);
return -ENXIO;
}
- ret = devm_request_irq(dev, event_irq, mc_event_handler,
- 0, event_cause[i].sym, port);
+ if (evt->request_evt_irq)
+ ret = evt->request_evt_irq(port, event_irq, i);
+ else
+ ret = devm_request_irq(dev, event_irq, plda_event_handler,
+ 0, NULL, port);
if (ret) {
dev_err(dev, "failed to request IRQ %d\n", event_irq);
return ret;
@@ -691,7 +695,7 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
}
intx_irq = irq_create_mapping(port->event_domain,
- EVENT_LOCAL_PM_MSI_INT_INTX);
+ evt->intx_evt);
if (!intx_irq) {
dev_err(dev, "failed to map INTx interrupt\n");
return -ENXIO;
@@ -701,7 +705,7 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
irq_set_chained_handler_and_data(intx_irq, plda_handle_intx, port);
msi_irq = irq_create_mapping(port->event_domain,
- EVENT_LOCAL_PM_MSI_INT_MSI);
+ evt->msi_evt);
if (!msi_irq)
return -ENXIO;
@@ -714,6 +718,13 @@ static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp
return 0;
}
+static int mc_request_evt_irq(struct plda_pcie_rp *plda, int event_irq,
+ int evt)
+{
+ return devm_request_irq(plda->dev, event_irq, mc_event_handler,
+ 0, event_cause[evt].sym, plda);
+}
+
static int mc_platform_init(struct pci_config_window *cfg)
{
struct device *dev = cfg->parent;
@@ -721,6 +732,9 @@ static int mc_platform_init(struct pci_config_window *cfg)
void __iomem *bridge_base_addr =
port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
struct pci_host_bridge *bridge = platform_get_drvdata(pdev);
+ struct plda_evt evt = {&event_domain_ops, mc_request_evt_irq,
+ EVENT_LOCAL_PM_MSI_INT_INTX,
+ EVENT_LOCAL_PM_MSI_INT_MSI};
int ret;
/* Configure address translation table 0 for PCIe config space */
@@ -737,7 +751,7 @@ static int mc_platform_init(struct pci_config_window *cfg)
return ret;
/* Address translation is up; safe to enable interrupts */
- ret = mc_init_interrupts(pdev, &port->plda);
+ ret = plda_init_interrupts(pdev, &port->plda, &evt);
if (ret)
return ret;
@@ -758,6 +772,7 @@ static int mc_host_probe(struct platform_device *pdev)
plda = &port->plda;
plda->dev = dev;
+ plda->num_events = NUM_EVENTS;
port->axi_base_addr = devm_platform_ioremap_resource(pdev, 1);
if (IS_ERR(port->axi_base_addr))
diff --git a/drivers/pci/controller/plda/pcie-plda.h b/drivers/pci/controller/plda/pcie-plda.h
index 56483ebb678d..7571b0bbf37f 100644
--- a/drivers/pci/controller/plda/pcie-plda.h
+++ b/drivers/pci/controller/plda/pcie-plda.h
@@ -126,6 +126,13 @@ struct plda_pcie_rp {
int num_events;
};
+struct plda_evt {
+ const struct irq_domain_ops *domain_ops;
+ int (*request_evt_irq)(struct plda_pcie_rp *pcie, int evt_irq, int event);
+ int intx_evt;
+ int msi_evt;
+};
+
void plda_handle_msi(struct irq_desc *desc);
int plda_allocate_msi_domains(struct plda_pcie_rp *port);
irqreturn_t plda_event_handler(int irq, void *dev_id);
--
2.17.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2023-08-14 8:21 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-14 8:20 [PATCH v3 0/11] Refactoring Microchip PCIe driver and add StarFive PCIe Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 8:20 ` [PATCH v3 01/11] dt-bindings: PCI: Add PLDA XpressRICH PCIe host common properties Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-17 15:40 ` Rob Herring
2023-08-17 15:40 ` Rob Herring
2023-08-14 8:20 ` [PATCH v3 02/11] PCI: microchip: Move pcie-microchip-host.c to plda directory Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:33 ` Conor Dooley
2023-08-14 13:33 ` Conor Dooley
2023-08-14 8:20 ` [PATCH v3 03/11] PCI: microchip: Move PLDA IP register macros to pcie-plda.h Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:32 ` Conor Dooley
2023-08-14 13:32 ` Conor Dooley
2023-08-14 8:20 ` [PATCH v3 04/11] PCI: microchip: Rename data structure and functions Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:42 ` Conor Dooley
2023-08-14 13:42 ` Conor Dooley
2023-08-14 8:20 ` [PATCH v3 05/11] PCI: plda: Move the common functions to pcie-plda-host.c Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:46 ` Conor Dooley
2023-08-14 13:46 ` Conor Dooley
2023-08-14 8:20 ` [PATCH v3 06/11] PCI: plda: Add event interrupt codes and IRQ domain ops Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:52 ` Conor Dooley
2023-08-14 13:52 ` Conor Dooley
2023-08-15 10:12 ` Minda Chen
2023-08-15 10:12 ` Minda Chen
2023-08-15 13:11 ` Conor Dooley
2023-08-15 13:11 ` Conor Dooley
2023-08-18 10:15 ` Minda Chen
2023-08-18 10:15 ` Minda Chen
2023-08-14 8:20 ` Minda Chen [this message]
2023-08-14 8:20 ` [PATCH v3 07/11] PCI: microchip: Rename IRQ init function Minda Chen
2023-08-14 13:55 ` Conor Dooley
2023-08-14 13:55 ` Conor Dooley
2023-08-15 10:43 ` Minda Chen
2023-08-15 10:43 ` Minda Chen
2023-08-14 8:20 ` [PATCH v3 08/11] PCI: microchip: Move IRQ init functions to pcie-plda-host.c Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:57 ` Conor Dooley
2023-08-14 13:57 ` Conor Dooley
2023-08-15 10:15 ` Minda Chen
2023-08-15 10:15 ` Minda Chen
2023-08-14 8:20 ` [PATCH v3 09/11] dt-bindings: PCI: Add StarFive JH7110 PCIe controller Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 13:18 ` Conor Dooley
2023-08-14 13:18 ` Conor Dooley
2023-08-17 15:40 ` Rob Herring
2023-08-17 15:40 ` Rob Herring
2023-08-25 9:06 ` Minda Chen
2023-08-25 9:06 ` Minda Chen
2023-08-25 9:21 ` Krzysztof Kozlowski
2023-08-25 9:21 ` Krzysztof Kozlowski
2023-08-14 8:20 ` [PATCH v3 10/11] PCI: starfive: Add " Minda Chen
2023-08-14 8:20 ` Minda Chen
2023-08-14 8:20 ` [PATCH v3 11/11] riscv: dts: starfive: add PCIe dts configuration for JH7110 Minda Chen
2023-08-14 8:20 ` Minda Chen
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=20230814082016.104181-8-minda.chen@starfivetech.com \
--to=minda.chen@starfivetech.com \
--cc=aou@eecs.berkeley.edu \
--cc=bhelgaas@google.com \
--cc=conor@kernel.org \
--cc=daire.mcnamara@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=emil.renner.berthing@canonical.com \
--cc=kevin.xie@starfivetech.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kw@linux.com \
--cc=leyfoon.tan@starfivetech.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=lpieralisi@kernel.org \
--cc=mason.huo@starfivetech.com \
--cc=p.zabel@pengutronix.de \
--cc=pali@kernel.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=robh+dt@kernel.org \
/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.