From: Conor Dooley <conor@kernel.org>
To: daire.mcnamara@microchip.com
Cc: conor.dooley@microchip.com, robh+dt@kernel.org,
krzysztof.kozlowski+dt@linaro.org, paul.walmsley@sifive.com,
palmer@dabbelt.com, aou@eecs.berkeley.edu, lpieralisi@kernel.org,
kw@linux.com, bhelgaas@google.com,
linux-riscv@lists.infradead.org, devicetree@vger.kernel.org,
linux-pci@vger.kernel.org
Subject: Re: [PATCH v1 8/9] PCI: microchip: Partition inbound address translation
Date: Wed, 23 Nov 2022 23:05:34 +0000 [thread overview]
Message-ID: <Y36nPubPl08F/nag@spud> (raw)
In-Reply-To: <20221116135504.258687-9-daire.mcnamara@microchip.com>
On Wed, Nov 16, 2022 at 01:55:03PM +0000, daire.mcnamara@microchip.com wrote:
> From: Daire McNamara <daire.mcnamara@microchip.com>
>
> On Microchip PolarFire SoC the PCIe rootport is behind a set of fabric
> inter connect (fic) busses that encapsulate busses like ABP/AHP, AXI-S
> and AXI-M. Depending on which fic(s) the rootport is wired through to
> cpu space, the rootport driver needs to take account of the address
> translation done by a parent (e.g. fabric) node before setting up its
> own inbound address translation tables from attached devices.
>
> Parse the dma-range properties to determine how much address translation
> to perform in the root port and how much is being provided by the
> fabric.
>
> Signed-off-by: Daire McNamara <daire.mcnamara@microchip.com>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> drivers/pci/controller/pcie-microchip-host.c | 184 ++++++++++++++++++-
> 1 file changed, 178 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/pcie-microchip-host.c b/drivers/pci/controller/pcie-microchip-host.c
> index 62f8c5edfd0e..a90a0a675f14 100644
> --- a/drivers/pci/controller/pcie-microchip-host.c
> +++ b/drivers/pci/controller/pcie-microchip-host.c
> @@ -940,6 +954,46 @@ static int mc_pcie_init_irq_domains(struct mc_pcie *port)
> return mc_allocate_msi_domains(port);
> }
>
> +static int mc_pcie_setup_inbound_ranges(struct platform_device *pdev, struct mc_pcie *port)
> +{
> + void __iomem *bridge_base_addr = port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
> + phys_addr_t pcie_addr;
> + phys_addr_t axi_addr;
> + u32 atr_size;
> + u32 val;
> + int i;
> +
> + for (i = 0; i < port->num_inbound_windows; i++) {
> + atr_size = ilog2(port->inbound_windows[i].size) - 1;
> + atr_size &= GENMASK(5, 0);
> +
> + pcie_addr = port->inbound_windows[i].pci_addr;
> +
> + val = lower_32_bits(pcie_addr) & GENMASK(31, 12);
> + val |= (atr_size << ATR_SIZE_SHIFT);
> + val |= ATR_IMPL_ENABLE;
> + writel(val, bridge_base_addr +
> + ATR0_PCIE_WIN0_SRCADDR_PARAM + (i * ATR_WINDOW_DESC_SIZE));
> + writel(upper_32_bits(pcie_addr), bridge_base_addr +
> + ATR0_PCIE_WIN0_SRC_ADDR + (i * ATR_WINDOW_DESC_SIZE));
> +
> + axi_addr = port->inbound_windows[i].axi_addr;
> +
> + writel(lower_32_bits(axi_addr), bridge_base_addr +
> + ATR0_PCIE_WIN0_TRSL_ADDR_LSB + (i * ATR_WINDOW_DESC_SIZE));
> + writel(upper_32_bits(axi_addr), bridge_base_addr +
> + ATR0_PCIE_WIN0_TRSL_ADDR_UDW + (i * ATR_WINDOW_DESC_SIZE));
> +
> + writel(TRSL_ID_AXI4_MASTER_0, bridge_base_addr +
> + ATR0_PCIE_WIN0_TRSL_PARAM + (i * ATR_WINDOW_DESC_SIZE));
> +
> + dev_dbg(&pdev->dev, "0x%010llx..0x%010llx -> 0x%010llx\n",
> + pcie_addr, pcie_addr + port->inbound_windows[i].size - 1, axi_addr);
If you're going to leave the dbg print in, can you make it more verbose
so that the log message stands on its own?
Other than that, I made most of my comments before submission so LGTM..
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Thanks,
Conor.
WARNING: multiple messages have this Message-ID (diff)
From: Conor Dooley <conor@kernel.org>
To: daire.mcnamara@microchip.com
Cc: conor.dooley@microchip.com, robh+dt@kernel.org,
krzysztof.kozlowski+dt@linaro.org, paul.walmsley@sifive.com,
palmer@dabbelt.com, aou@eecs.berkeley.edu, lpieralisi@kernel.org,
kw@linux.com, bhelgaas@google.com,
linux-riscv@lists.infradead.org, devicetree@vger.kernel.org,
linux-pci@vger.kernel.org
Subject: Re: [PATCH v1 8/9] PCI: microchip: Partition inbound address translation
Date: Wed, 23 Nov 2022 23:05:34 +0000 [thread overview]
Message-ID: <Y36nPubPl08F/nag@spud> (raw)
In-Reply-To: <20221116135504.258687-9-daire.mcnamara@microchip.com>
On Wed, Nov 16, 2022 at 01:55:03PM +0000, daire.mcnamara@microchip.com wrote:
> From: Daire McNamara <daire.mcnamara@microchip.com>
>
> On Microchip PolarFire SoC the PCIe rootport is behind a set of fabric
> inter connect (fic) busses that encapsulate busses like ABP/AHP, AXI-S
> and AXI-M. Depending on which fic(s) the rootport is wired through to
> cpu space, the rootport driver needs to take account of the address
> translation done by a parent (e.g. fabric) node before setting up its
> own inbound address translation tables from attached devices.
>
> Parse the dma-range properties to determine how much address translation
> to perform in the root port and how much is being provided by the
> fabric.
>
> Signed-off-by: Daire McNamara <daire.mcnamara@microchip.com>
> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
> ---
> drivers/pci/controller/pcie-microchip-host.c | 184 ++++++++++++++++++-
> 1 file changed, 178 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/pcie-microchip-host.c b/drivers/pci/controller/pcie-microchip-host.c
> index 62f8c5edfd0e..a90a0a675f14 100644
> --- a/drivers/pci/controller/pcie-microchip-host.c
> +++ b/drivers/pci/controller/pcie-microchip-host.c
> @@ -940,6 +954,46 @@ static int mc_pcie_init_irq_domains(struct mc_pcie *port)
> return mc_allocate_msi_domains(port);
> }
>
> +static int mc_pcie_setup_inbound_ranges(struct platform_device *pdev, struct mc_pcie *port)
> +{
> + void __iomem *bridge_base_addr = port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
> + phys_addr_t pcie_addr;
> + phys_addr_t axi_addr;
> + u32 atr_size;
> + u32 val;
> + int i;
> +
> + for (i = 0; i < port->num_inbound_windows; i++) {
> + atr_size = ilog2(port->inbound_windows[i].size) - 1;
> + atr_size &= GENMASK(5, 0);
> +
> + pcie_addr = port->inbound_windows[i].pci_addr;
> +
> + val = lower_32_bits(pcie_addr) & GENMASK(31, 12);
> + val |= (atr_size << ATR_SIZE_SHIFT);
> + val |= ATR_IMPL_ENABLE;
> + writel(val, bridge_base_addr +
> + ATR0_PCIE_WIN0_SRCADDR_PARAM + (i * ATR_WINDOW_DESC_SIZE));
> + writel(upper_32_bits(pcie_addr), bridge_base_addr +
> + ATR0_PCIE_WIN0_SRC_ADDR + (i * ATR_WINDOW_DESC_SIZE));
> +
> + axi_addr = port->inbound_windows[i].axi_addr;
> +
> + writel(lower_32_bits(axi_addr), bridge_base_addr +
> + ATR0_PCIE_WIN0_TRSL_ADDR_LSB + (i * ATR_WINDOW_DESC_SIZE));
> + writel(upper_32_bits(axi_addr), bridge_base_addr +
> + ATR0_PCIE_WIN0_TRSL_ADDR_UDW + (i * ATR_WINDOW_DESC_SIZE));
> +
> + writel(TRSL_ID_AXI4_MASTER_0, bridge_base_addr +
> + ATR0_PCIE_WIN0_TRSL_PARAM + (i * ATR_WINDOW_DESC_SIZE));
> +
> + dev_dbg(&pdev->dev, "0x%010llx..0x%010llx -> 0x%010llx\n",
> + pcie_addr, pcie_addr + port->inbound_windows[i].size - 1, axi_addr);
If you're going to leave the dbg print in, can you make it more verbose
so that the log message stands on its own?
Other than that, I made most of my comments before submission so LGTM..
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Thanks,
Conor.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2022-11-23 23:06 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-16 13:54 [PATCH v1 0/9] PCI: microchip: Partition address translations daire.mcnamara
2022-11-16 13:54 ` daire.mcnamara
2022-11-16 13:54 ` [PATCH v1 1/9] PCI: microchip: Align register, offset, and mask names with hw docs daire.mcnamara
2022-11-16 13:54 ` daire.mcnamara
2022-11-23 21:09 ` Conor Dooley
2022-11-23 21:09 ` Conor Dooley
2022-11-16 13:54 ` [PATCH v1 2/9] PCI: microchip: Correct the DED and SEC interrupt bit offsets daire.mcnamara
2022-11-16 13:54 ` daire.mcnamara
2022-11-16 15:19 ` Conor Dooley
2022-11-16 15:19 ` Conor Dooley
2022-11-23 21:28 ` Conor Dooley
2022-11-23 21:28 ` Conor Dooley
2022-11-16 13:54 ` [PATCH v1 3/9] PCI: microchip: Enable event handlers to access bridge and ctrl ptrs daire.mcnamara
2022-11-16 13:54 ` daire.mcnamara
2022-11-23 21:34 ` Conor Dooley
2022-11-23 21:34 ` Conor Dooley
2022-11-16 13:54 ` [PATCH v1 4/9] PCI: microchip: Clean up initialisation of interrupts daire.mcnamara
2022-11-16 13:54 ` daire.mcnamara
2022-11-16 15:17 ` kernel test robot
2022-11-16 15:17 ` kernel test robot
2022-11-17 18:28 ` kernel test robot
2022-11-17 18:28 ` kernel test robot
2022-11-23 21:58 ` Conor Dooley
2022-11-23 21:58 ` Conor Dooley
2022-11-16 13:55 ` [PATCH v1 5/9] PCI: microchip: Gather MSI information from hardware config registers daire.mcnamara
2022-11-16 13:55 ` daire.mcnamara
2022-11-16 16:41 ` Bjorn Helgaas
2022-11-16 16:41 ` Bjorn Helgaas
2022-11-23 22:09 ` Conor Dooley
2022-11-23 22:09 ` Conor Dooley
2022-11-16 13:55 ` [PATCH v1 6/9] PCI: microchip: Re-partition code between probe() and init() daire.mcnamara
2022-11-16 13:55 ` daire.mcnamara
2022-11-23 22:39 ` Conor Dooley
2022-11-23 22:39 ` Conor Dooley
2022-11-16 13:55 ` [PATCH v1 7/9] PCI: microchip: Partition outbound address translation daire.mcnamara
2022-11-16 13:55 ` daire.mcnamara
2022-11-23 22:44 ` Conor Dooley
2022-11-23 22:44 ` Conor Dooley
2022-11-16 13:55 ` [PATCH v1 8/9] PCI: microchip: Partition inbound " daire.mcnamara
2022-11-16 13:55 ` daire.mcnamara
2022-11-16 16:49 ` Bjorn Helgaas
2022-11-16 16:49 ` Bjorn Helgaas
2022-11-16 17:01 ` Conor Dooley
2022-11-16 17:01 ` Conor Dooley
2022-11-16 20:10 ` kernel test robot
2022-11-16 20:10 ` kernel test robot
2022-11-17 6:06 ` kernel test robot
2022-11-17 6:06 ` kernel test robot
2022-11-23 23:05 ` Conor Dooley [this message]
2022-11-23 23:05 ` Conor Dooley
2022-11-16 13:55 ` [PATCH v1 9/9] riscv: dts: microchip: add parent ranges and dma-ranges for IKRD v2022.09 daire.mcnamara
2022-11-16 13:55 ` daire.mcnamara
2022-11-23 22:14 ` Conor Dooley
2022-11-23 22:14 ` Conor Dooley
2022-11-23 23:15 ` [PATCH v1 0/9] PCI: microchip: Partition address translations Conor Dooley
2022-11-23 23:15 ` Conor Dooley
-- strict thread matches above, loose matches on Subject: below --
2022-11-27 14:22 [PATCH v1 8/9] PCI: microchip: Partition inbound address translation kernel test robot
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=Y36nPubPl08F/nag@spud \
--to=conor@kernel.org \
--cc=aou@eecs.berkeley.edu \
--cc=bhelgaas@google.com \
--cc=conor.dooley@microchip.com \
--cc=daire.mcnamara@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kw@linux.com \
--cc=linux-pci@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=lpieralisi@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.