From: sharath.kumar.d.m@intel.com
To: helgaas@kernel.org
Cc: bhelgaas@google.com, dinguyen@kernel.org, kw@linux.com,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
lpieralisi@kernel.org, robh@kernel.org,
sharath.kumar.d.m@intel.com
Subject: [PATCH v4 1/2] PCI: altera: refactor driver for supporting new platform
Date: Sun, 17 Sep 2023 22:35:45 +0530 [thread overview]
Message-ID: <20230917170546.2097352-2-sharath.kumar.d.m@intel.com> (raw)
In-Reply-To: <20230917170546.2097352-1-sharath.kumar.d.m@intel.com>
From: D M Sharath Kumar <sharath.kumar.d.m@intel.com>
added the below callbacks that eases is supporting newer platforms
for read/write to root port configuration space registers
for read/write to non root port (endpoint, switch) cfg space regs
root port interrupt handler
Signed-off-by: D M Sharath Kumar <sharath.kumar.d.m@intel.com>
---
drivers/pci/controller/pcie-altera.c | 108 +++++++++++++++++++--------
1 file changed, 75 insertions(+), 33 deletions(-)
diff --git a/drivers/pci/controller/pcie-altera.c b/drivers/pci/controller/pcie-altera.c
index a9536dc4bf96..bb073f8424ed 100644
--- a/drivers/pci/controller/pcie-altera.c
+++ b/drivers/pci/controller/pcie-altera.c
@@ -3,6 +3,7 @@
* Copyright Altera Corporation (C) 2013-2015. All rights reserved
*
* Author: Ley Foon Tan <lftan@altera.com>
+ * Author: sharath <sharath.kumar.d.m@intel.com>
* Description: Altera PCIe host controller driver
*/
@@ -99,10 +100,15 @@ struct altera_pcie_ops {
void (*tlp_write_pkt)(struct altera_pcie *pcie, u32 *headers,
u32 data, bool align);
bool (*get_link_status)(struct altera_pcie *pcie);
- int (*rp_read_cfg)(struct altera_pcie *pcie, int where,
- int size, u32 *value);
- int (*rp_write_cfg)(struct altera_pcie *pcie, u8 busno,
- int where, int size, u32 value);
+ int (*alt_read_own_cfg)(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 *value);
+ int (*alt_write_own_cfg)(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 value);
+ int (*alt_read_other_cfg)(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 *value);
+ int (*alt_write_other_cfg)(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size, u32 value);
+ void (*rp_isr)(struct irq_desc *desc);
};
struct altera_pcie_data {
@@ -379,8 +385,8 @@ static int tlp_cfg_dword_write(struct altera_pcie *pcie, u8 bus, u32 devfn,
return PCIBIOS_SUCCESSFUL;
}
-static int s10_rp_read_cfg(struct altera_pcie *pcie, int where,
- int size, u32 *value)
+static int s10_rp_read_cfg(struct altera_pcie *pcie, u8 busno, u32 devfn,
+ int where, int size, u32 *value)
{
void __iomem *addr = S10_RP_CFG_ADDR(pcie, where);
@@ -399,7 +405,7 @@ static int s10_rp_read_cfg(struct altera_pcie *pcie, int where,
return PCIBIOS_SUCCESSFUL;
}
-static int s10_rp_write_cfg(struct altera_pcie *pcie, u8 busno,
+static int s10_rp_write_cfg(struct altera_pcie *pcie, u8 busno, u32 devfn,
int where, int size, u32 value)
{
void __iomem *addr = S10_RP_CFG_ADDR(pcie, where);
@@ -426,18 +432,13 @@ static int s10_rp_write_cfg(struct altera_pcie *pcie, u8 busno,
return PCIBIOS_SUCCESSFUL;
}
-static int _altera_pcie_cfg_read(struct altera_pcie *pcie, u8 busno,
- unsigned int devfn, int where, int size,
- u32 *value)
+static int arr_read_cfg(struct altera_pcie *pcie, u8 busno, u32 devfn,
+ int where, int size, u32 *value)
{
int ret;
u32 data;
u8 byte_en;
- if (busno == pcie->root_bus_nr && pcie->pcie_data->ops->rp_read_cfg)
- return pcie->pcie_data->ops->rp_read_cfg(pcie, where,
- size, value);
-
switch (size) {
case 1:
byte_en = 1 << (where & 3);
@@ -470,18 +471,13 @@ static int _altera_pcie_cfg_read(struct altera_pcie *pcie, u8 busno,
return PCIBIOS_SUCCESSFUL;
}
-static int _altera_pcie_cfg_write(struct altera_pcie *pcie, u8 busno,
- unsigned int devfn, int where, int size,
- u32 value)
+static int arr_write_cfg(struct altera_pcie *pcie, u8 busno, u32 devfn,
+ int where, int size, u32 value)
{
u32 data32;
u32 shift = 8 * (where & 3);
u8 byte_en;
- if (busno == pcie->root_bus_nr && pcie->pcie_data->ops->rp_write_cfg)
- return pcie->pcie_data->ops->rp_write_cfg(pcie, busno,
- where, size, value);
-
switch (size) {
case 1:
data32 = (value & 0xff) << shift;
@@ -499,6 +495,37 @@ static int _altera_pcie_cfg_write(struct altera_pcie *pcie, u8 busno,
return tlp_cfg_dword_write(pcie, busno, devfn, (where & ~DWORD_MASK),
byte_en, data32);
+
+}
+
+static int _altera_pcie_cfg_read(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size,
+ u32 *value)
+{
+ if (busno == pcie->root_bus_nr &&
+ pcie->pcie_data->ops->alt_read_own_cfg)
+ return pcie->pcie_data->ops->alt_read_own_cfg(pcie, busno,
+ devfn, where, size, value);
+
+ if (pcie->pcie_data->ops->alt_read_other_cfg)
+ return pcie->pcie_data->ops->alt_read_other_cfg(pcie, busno,
+ devfn, where, size, value);
+ return PCIBIOS_FUNC_NOT_SUPPORTED;
+}
+
+static int _altera_pcie_cfg_write(struct altera_pcie *pcie, u8 busno,
+ unsigned int devfn, int where, int size,
+ u32 value)
+{
+ if (busno == pcie->root_bus_nr &&
+ pcie->pcie_data->ops->alt_write_own_cfg)
+ return pcie->pcie_data->ops->alt_write_own_cfg(pcie, busno,
+ devfn, where, size, value);
+
+ if (pcie->pcie_data->ops->alt_write_other_cfg)
+ return pcie->pcie_data->ops->alt_write_other_cfg(pcie, busno,
+ devfn, where, size, value);
+ return PCIBIOS_FUNC_NOT_SUPPORTED;
}
static int altera_pcie_cfg_read(struct pci_bus *bus, unsigned int devfn,
@@ -660,7 +687,6 @@ static void altera_pcie_isr(struct irq_desc *desc)
dev_err_ratelimited(dev, "unexpected IRQ, INT%d\n", bit);
}
}
-
chained_irq_exit(chip, desc);
}
@@ -691,9 +717,13 @@ static int altera_pcie_parse_dt(struct altera_pcie *pcie)
{
struct platform_device *pdev = pcie->pdev;
- pcie->cra_base = devm_platform_ioremap_resource_byname(pdev, "Cra");
- if (IS_ERR(pcie->cra_base))
- return PTR_ERR(pcie->cra_base);
+ if ((pcie->pcie_data->version == ALTERA_PCIE_V1) ||
+ (pcie->pcie_data->version == ALTERA_PCIE_V2)) {
+ pcie->cra_base =
+ devm_platform_ioremap_resource_byname(pdev, "Cra");
+ if (IS_ERR(pcie->cra_base))
+ return PTR_ERR(pcie->cra_base);
+ }
if (pcie->pcie_data->version == ALTERA_PCIE_V2) {
pcie->hip_base =
@@ -707,7 +737,8 @@ static int altera_pcie_parse_dt(struct altera_pcie *pcie)
if (pcie->irq < 0)
return pcie->irq;
- irq_set_chained_handler_and_data(pcie->irq, altera_pcie_isr, pcie);
+ irq_set_chained_handler_and_data(pcie->irq,
+ pcie->pcie_data->ops->rp_isr, pcie);
return 0;
}
@@ -720,14 +751,22 @@ static const struct altera_pcie_ops altera_pcie_ops_1_0 = {
.tlp_read_pkt = tlp_read_packet,
.tlp_write_pkt = tlp_write_packet,
.get_link_status = altera_pcie_link_up,
+ .alt_read_own_cfg = arr_read_cfg,
+ .alt_write_own_cfg = arr_write_cfg,
+ .alt_read_other_cfg = arr_read_cfg,
+ .alt_write_other_cfg = arr_write_cfg,
+ .rp_isr = altera_pcie_isr,
};
static const struct altera_pcie_ops altera_pcie_ops_2_0 = {
.tlp_read_pkt = s10_tlp_read_packet,
.tlp_write_pkt = s10_tlp_write_packet,
.get_link_status = s10_altera_pcie_link_up,
- .rp_read_cfg = s10_rp_read_cfg,
- .rp_write_cfg = s10_rp_write_cfg,
+ .alt_read_own_cfg = s10_rp_read_cfg,
+ .alt_write_own_cfg = s10_rp_write_cfg,
+ .alt_read_other_cfg = arr_read_cfg,
+ .alt_write_other_cfg = arr_write_cfg,
+ .rp_isr = altera_pcie_isr,
};
static const struct altera_pcie_data altera_pcie_1_0_data = {
@@ -792,11 +831,14 @@ static int altera_pcie_probe(struct platform_device *pdev)
return ret;
}
- /* clear all interrupts */
- cra_writel(pcie, P2A_INT_STS_ALL, P2A_INT_STATUS);
- /* enable all interrupts */
- cra_writel(pcie, P2A_INT_ENA_ALL, P2A_INT_ENABLE);
- altera_pcie_host_init(pcie);
+ if ((pcie->pcie_data->version == ALTERA_PCIE_V1) ||
+ (pcie->pcie_data->version == ALTERA_PCIE_V2)) {
+ /* clear all interrupts */
+ cra_writel(pcie, P2A_INT_STS_ALL, P2A_INT_STATUS);
+ /* enable all interrupts */
+ cra_writel(pcie, P2A_INT_ENA_ALL, P2A_INT_ENABLE);
+ altera_pcie_host_init(pcie);
+ }
bridge->sysdata = pcie;
bridge->busnr = pcie->root_bus_nr;
--
2.34.1
next prev parent reply other threads:[~2023-09-17 17:06 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-16 6:33 [PATCH 0/1] pci: agilex_rp: add pci root port support for agilex platform sharath.kumar.d.m
2023-06-16 6:33 ` [PATCH 1/1] pci: agilex_pci: add pcie rootport support for agilex sharath.kumar.d.m
2023-06-16 15:21 ` Bjorn Helgaas
2023-09-06 11:09 ` [PATCH v2 0/2] PCI: Altera: add support to Agilex family sharath.kumar.d.m
2023-09-06 11:09 ` [PATCH v2 1/2] PCI: altera: refactor driver for supporting new platform sharath.kumar.d.m
2023-09-06 17:08 ` Bjorn Helgaas
2023-09-08 9:09 ` D M, Sharath Kumar
2023-09-08 12:44 ` Bjorn Helgaas
2023-09-08 13:40 ` D M, Sharath Kumar
2023-09-08 19:52 ` Bjorn Helgaas
2023-09-11 10:33 ` [PATCH 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 12:24 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 12:24 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 12:24 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 13:35 ` [PATCH v2 1/2] PCI: altera: refactor driver for supporting new platform D M, Sharath Kumar
2023-09-11 20:08 ` Bjorn Helgaas
2023-09-13 12:59 ` Bjorn Helgaas
2023-09-17 17:05 ` [PATCH v4 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-17 17:05 ` sharath.kumar.d.m [this message]
2023-09-17 17:05 ` [PATCH v4 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-10-25 22:05 ` Bjorn Helgaas
2023-10-28 13:26 ` [PATCH v5 2/2] PCI: altera: add support for agilex7 " sharath.kumar.d.m
2023-10-25 21:51 ` [PATCH v4 0/2] PCI: altera: add support to agilex family Bjorn Helgaas
2023-10-28 13:33 ` [PATCH v5 " sharath.kumar.d.m
2023-09-11 13:53 ` [PATCH v3 " sharath.kumar.d.m
2023-09-11 13:53 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:53 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-15 10:51 ` [PATCH v3 0/2] PCI: altera: add support to agilex family Dinh Nguyen
2023-09-06 11:09 ` [PATCH v2 2/2] PCI: altera: add suport for Agilex Family FPGA sharath.kumar.d.m
2023-09-06 17:12 ` Bjorn Helgaas
2023-09-08 9:15 ` D M, Sharath Kumar
2023-09-08 12:47 ` Bjorn Helgaas
2023-09-08 14:35 ` D M, Sharath Kumar
2023-09-08 19:48 ` Bjorn Helgaas
2023-09-11 10:38 ` [PATCH 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 13:08 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 13:08 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:08 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 14:08 ` [PATCH v2 2/2] PCI: altera: add suport for Agilex Family FPGA D M, Sharath Kumar
2023-09-11 13:16 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 13:16 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:16 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 13:22 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 13:22 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:22 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 13:25 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 13:25 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:25 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 10:15 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 12:16 ` sharath.kumar.d.m
2023-09-11 13:31 ` sharath.kumar.d.m
2023-09-11 13:31 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:31 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
2023-09-11 13:45 ` [PATCH v3 0/2] PCI: altera: add support to agilex family sharath.kumar.d.m
2023-09-11 13:45 ` [PATCH v3 1/2] PCI: altera: refactor driver for supporting new platforms sharath.kumar.d.m
2023-09-11 13:45 ` [PATCH v3 2/2] PCI: altera: add support for agilex family fpga sharath.kumar.d.m
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=20230917170546.2097352-2-sharath.kumar.d.m@intel.com \
--to=sharath.kumar.d.m@intel.com \
--cc=bhelgaas@google.com \
--cc=dinguyen@kernel.org \
--cc=helgaas@kernel.org \
--cc=kw@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=robh@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.