From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: Thippeswamy Havalige <thippesw@amd.com>
Cc: robh@kernel.org, linux-pci@vger.kernel.org, bhelgaas@google.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org, devicetree@vger.kernel.org,
bharat.kumar.gogada@amd.com, michal.simek@amd.com,
lpieralisi@kernel.org, kw@linux.com
Subject: Re: [PATCH v2 2/2] PCI: xilinx-cpm: Add support for Versal CPM5 Root Port controller 1
Date: Tue, 17 Sep 2024 20:39:59 +0530 [thread overview]
Message-ID: <20240917150959.3fsytm4xguoit2xd@thinkpad> (raw)
In-Reply-To: <20240916163748.2223815-1-thippesw@amd.com>
On Mon, Sep 16, 2024 at 10:07:48PM +0530, Thippeswamy Havalige wrote:
For some reason, this patch is not threaded and not part of the series:
[PATCH v2 0/2] Add support for CPM5 controller 1
> This patch adds support for the Xilinx Versal CPM5 Root Port Controller 1.
s/patch/commit
Once this patch gets merged, it will become a commit.
> The key difference between Controller 0 and Controller 1 lies in the
> platform-specific error interrupt bits, which are located at different
> register offsets.
>
> To handle these differences, a variant structure is introduced that holds
> the following platform-specific details:
>
The variant structure is already present in the driver. Hence not introduced
in *this* patch.
> - Interrupt status register offset (ir_status)
> - Interrupt enable register offset (ir_enable)
> - Miscellaneous interrupt values (ir_misc_value)
>
> The driver differentiates between Controller 0 and Controller 1 using the
> compatible string in the device tree. This ensures that the appropriate
> register offsets are used for each controller, allowing for correct
> handling of platform-specific interrupts and initialization.
>
> Signed-off-by: Thippeswamy Havalige <thippesw@amd.com>
> ---
> changes in v2:
> --------------
> 1. Introduced new constants for Controller 1.
> 2. Extended the xilinx_cpm_variant structure to support
> a. ir_status,
> b. ir_enable, and
> c. ir_misc_value for different controllers.
> 3. Updated IRQ handling and initialization to use the variant structure.
> 4. Added a new device tree match entry for Controller 1.
> ---
> drivers/pci/controller/pcie-xilinx-cpm.c | 47 ++++++++++++++++++------
> 1 file changed, 36 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/pci/controller/pcie-xilinx-cpm.c b/drivers/pci/controller/pcie-xilinx-cpm.c
> index a0f5e1d67b04..b783fff27c9d 100644
> --- a/drivers/pci/controller/pcie-xilinx-cpm.c
> +++ b/drivers/pci/controller/pcie-xilinx-cpm.c
> @@ -30,11 +30,14 @@
> #define XILINX_CPM_PCIE_REG_IDRN_MASK 0x00000E3C
> #define XILINX_CPM_PCIE_MISC_IR_STATUS 0x00000340
> #define XILINX_CPM_PCIE_MISC_IR_ENABLE 0x00000348
> -#define XILINX_CPM_PCIE_MISC_IR_LOCAL BIT(1)
> +#define XILINX_CPM_PCIE0_MISC_IR_LOCAL BIT(1)
> +#define XILINX_CPM_PCIE1_MISC_IR_LOCAL BIT(2)
>
> -#define XILINX_CPM_PCIE_IR_STATUS 0x000002A0
> -#define XILINX_CPM_PCIE_IR_ENABLE 0x000002A8
> -#define XILINX_CPM_PCIE_IR_LOCAL BIT(0)
> +#define XILINX_CPM_PCIE0_IR_STATUS 0x000002A0
> +#define XILINX_CPM_PCIE1_IR_STATUS 0x000002B4
> +#define XILINX_CPM_PCIE0_IR_ENABLE 0x000002A8
> +#define XILINX_CPM_PCIE1_IR_ENABLE 0x000002BC
> +#define XILINX_CPM_PCIE_IR_LOCAL BIT(0)
>
> #define IMR(x) BIT(XILINX_PCIE_INTR_ ##x)
>
> @@ -80,6 +83,7 @@
> enum xilinx_cpm_version {
> CPM,
> CPM5,
> + CPM5_HOST1,
> };
>
> /**
> @@ -88,6 +92,9 @@ enum xilinx_cpm_version {
> */
> struct xilinx_cpm_variant {
> enum xilinx_cpm_version version;
> + u32 ir_status;
> + u32 ir_enable;
> + u32 ir_misc_value;
Kdoc comments missing for these members.
> };
>
> /**
> @@ -269,6 +276,7 @@ static void xilinx_cpm_pcie_event_flow(struct irq_desc *desc)
> {
> struct xilinx_cpm_pcie *port = irq_desc_get_handler_data(desc);
> struct irq_chip *chip = irq_desc_get_chip(desc);
> + const struct xilinx_cpm_variant *variant = port->variant;
> unsigned long val;
> int i;
>
> @@ -279,11 +287,11 @@ static void xilinx_cpm_pcie_event_flow(struct irq_desc *desc)
> generic_handle_domain_irq(port->cpm_domain, i);
> pcie_write(port, val, XILINX_CPM_PCIE_REG_IDR);
>
> - if (port->variant->version == CPM5) {
> - val = readl_relaxed(port->cpm_base + XILINX_CPM_PCIE_IR_STATUS);
> + if (variant->ir_status) {
> + val = readl_relaxed(port->cpm_base + variant->ir_status);
> if (val)
> writel_relaxed(val, port->cpm_base +
> - XILINX_CPM_PCIE_IR_STATUS);
> + variant->ir_status);
> }
>
> /*
> @@ -465,6 +473,8 @@ static int xilinx_cpm_setup_irq(struct xilinx_cpm_pcie *port)
> */
> static void xilinx_cpm_pcie_init_port(struct xilinx_cpm_pcie *port)
> {
> + const struct xilinx_cpm_variant *variant = port->variant;
> +
> if (cpm_pcie_link_up(port))
> dev_info(port->dev, "PCIe Link is UP\n");
> else
> @@ -483,15 +493,15 @@ static void xilinx_cpm_pcie_init_port(struct xilinx_cpm_pcie *port)
> * XILINX_CPM_PCIE_MISC_IR_ENABLE register is mapped to
> * CPM SLCR block.
> */
> - writel(XILINX_CPM_PCIE_MISC_IR_LOCAL,
> + writel(variant->ir_misc_value,
> port->cpm_base + XILINX_CPM_PCIE_MISC_IR_ENABLE);
>
> - if (port->variant->version == CPM5) {
> + if (variant->ir_enable) {
> writel(XILINX_CPM_PCIE_IR_LOCAL,
> - port->cpm_base + XILINX_CPM_PCIE_IR_ENABLE);
> + port->cpm_base + variant->ir_enable);
> }
>
> - /* Enable the Bridge enable bit */
> + /* Set Bridge enable bit */
This changes doesn't belong to this patch.
> pcie_write(port, pcie_read(port, XILINX_CPM_PCIE_REG_RPSC) |
> XILINX_CPM_PCIE_REG_RPSC_BEN,
> XILINX_CPM_PCIE_REG_RPSC);
> @@ -609,10 +619,21 @@ static int xilinx_cpm_pcie_probe(struct platform_device *pdev)
>
> static const struct xilinx_cpm_variant cpm_host = {
> .version = CPM,
> + .ir_misc_value = XILINX_CPM_PCIE0_MISC_IR_LOCAL,
> };
>
> static const struct xilinx_cpm_variant cpm5_host = {
> .version = CPM5,
> + .ir_misc_value = XILINX_CPM_PCIE0_MISC_IR_LOCAL,
> + .ir_status = XILINX_CPM_PCIE0_IR_STATUS,
> + .ir_enable = XILINX_CPM_PCIE0_IR_ENABLE,
> +};
> +
> +static const struct xilinx_cpm_variant cpm5_host1 = {
> + .version = CPM5_HOST1,
> + .ir_misc_value = XILINX_CPM_PCIE1_MISC_IR_LOCAL,
> + .ir_status = XILINX_CPM_PCIE1_IR_STATUS,
> + .ir_enable = XILINX_CPM_PCIE1_IR_ENABLE,
> };
>
> static const struct of_device_id xilinx_cpm_pcie_of_match[] = {
> @@ -624,6 +645,10 @@ static const struct of_device_id xilinx_cpm_pcie_of_match[] = {
> .compatible = "xlnx,versal-cpm5-host",
> .data = &cpm5_host,
> },
> + {
> + .compatible = "xlnx,versal-cpm5-host1-1",
This doesn't look like a valid compatible name. Please use the compatible as per
the IP version.
- Mani
--
மணிவண்ணன் சதாசிவம்
next prev parent reply other threads:[~2024-09-17 15:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-16 16:37 [PATCH v2 2/2] PCI: xilinx-cpm: Add support for Versal CPM5 Root Port controller 1 Thippeswamy Havalige
2024-09-17 15:09 ` Manivannan Sadhasivam [this message]
2024-09-17 15:19 ` Havalige, Thippeswamy
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=20240917150959.3fsytm4xguoit2xd@thinkpad \
--to=manivannan.sadhasivam@linaro.org \
--cc=bharat.kumar.gogada@amd.com \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kw@linux.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=michal.simek@amd.com \
--cc=robh@kernel.org \
--cc=thippesw@amd.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.