From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>
Cc: Matthew Wilcox <willy@linux.intel.com>,
Keith Busch <keith.busch@intel.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>,
David Gibson <david@gibson.dropbear.id.au>,
Christoph Hellwig <hch@infradead.org>,
"David S. Miller" <davem@davemloft.net>,
linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH 4/7 v2] pseries/iommu: implement DDW-aware dma_get_page_shift
Date: Tue, 27 Oct 2015 16:56:10 +1100 [thread overview]
Message-ID: <562F11FA.9090805@ozlabs.ru> (raw)
In-Reply-To: <20151023205925.GF10197@linux.vnet.ibm.com>
On 10/24/2015 07:59 AM, Nishanth Aravamudan wrote:
> When DDW (Dynamic DMA Windows) are present for a device, we have stored
> the TCE (Translation Control Entry) size in a special device tree
> property. Check if we have enabled DDW for the device and return the TCE
> size from that property if present. If the property isn't present,
> fallback to looking the value up in struct iommu_table. If we don't find
> a iommu_table, fallback to the kernel's page size.
>
> Signed-off-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
> ---
> arch/powerpc/platforms/pseries/iommu.c | 36 ++++++++++++++++++++++++++++++++++
> 1 file changed, 36 insertions(+)
>
> diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
> index 0946b98..1bf6471 100644
> --- a/arch/powerpc/platforms/pseries/iommu.c
> +++ b/arch/powerpc/platforms/pseries/iommu.c
> @@ -1292,6 +1292,40 @@ static u64 dma_get_required_mask_pSeriesLP(struct device *dev)
> return dma_iommu_ops.get_required_mask(dev);
> }
>
> +static unsigned long dma_get_page_shift_pSeriesLP(struct device *dev)
> +{
> + struct iommu_table *tbl;
> +
> + if (!disable_ddw && dev_is_pci(dev)) {
> + struct pci_dev *pdev = to_pci_dev(dev);
> + struct device_node *dn;
> +
> + dn = pci_device_to_OF_node(pdev);
> +
> + /* search upwards for ibm,dma-window */
> + for (; dn && PCI_DN(dn) && !PCI_DN(dn)->table_group;
> + dn = dn->parent)
> + if (of_get_property(dn, "ibm,dma-window", NULL))
> + break;
> + /*
> + * if there is a DDW configuration, the TCE shift is stored in
> + * the property
> + */
> + if (dn && PCI_DN(dn)) {
> + const struct dynamic_dma_window_prop *direct64 =
> + of_get_property(dn, DIRECT64_PROPNAME, NULL);
This DIRECT64_PROPNAME property is only present under pHyp, QEMU/KVM does
not set it as 64bit windows are dynamic there so something like
find_existing_ddw() needs to be used here.
> + if (direct64)
> + return be32_to_cpu(direct64->tce_shift);
> + }
> + }
> +
> + tbl = get_iommu_table_base(dev);
> + if (tbl)
> + return tbl->it_page_shift;
> +
> + return PAGE_SHIFT;
> +}
> +
> #else /* CONFIG_PCI */
> #define pci_dma_bus_setup_pSeries NULL
> #define pci_dma_dev_setup_pSeries NULL
> @@ -1299,6 +1333,7 @@ static u64 dma_get_required_mask_pSeriesLP(struct device *dev)
> #define pci_dma_dev_setup_pSeriesLP NULL
> #define dma_set_mask_pSeriesLP NULL
> #define dma_get_required_mask_pSeriesLP NULL
> +#define dma_get_page_shift_pSeriesLP NULL
> #endif /* !CONFIG_PCI */
>
> static int iommu_mem_notifier(struct notifier_block *nb, unsigned long action,
> @@ -1395,6 +1430,7 @@ void iommu_init_early_pSeries(void)
> pseries_pci_controller_ops.dma_dev_setup = pci_dma_dev_setup_pSeriesLP;
> ppc_md.dma_set_mask = dma_set_mask_pSeriesLP;
> ppc_md.dma_get_required_mask = dma_get_required_mask_pSeriesLP;
> + ppc_md.dma_get_page_shift = dma_get_page_shift_pSeriesLP;
> } else {
> pseries_pci_controller_ops.dma_bus_setup = pci_dma_bus_setup_pSeries;
> pseries_pci_controller_ops.dma_dev_setup = pci_dma_dev_setup_pSeries;
>
--
Alexey
next prev parent reply other threads:[~2015-10-27 5:56 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-23 20:54 [PATCH 0/5 v3] Fix NVMe driver support on Power with 32-bit DMA Nishanth Aravamudan
2015-10-23 20:56 ` [PATCH 1/7 v3] dma-mapping: add generic dma_get_page_shift API Nishanth Aravamudan
2015-10-23 20:57 ` [PATCH 2/7 v2] powerpc/dma-mapping: override dma_get_page_shift Nishanth Aravamudan
2015-10-27 6:02 ` Alexey Kardashevskiy
2015-10-27 14:06 ` Busch, Keith
2015-10-27 22:27 ` Nishanth Aravamudan
2015-10-28 1:00 ` Alexey Kardashevskiy
2015-10-28 1:54 ` Nishanth Aravamudan
2015-10-28 2:20 ` Benjamin Herrenschmidt
2015-10-28 2:30 ` Nishanth Aravamudan
2015-10-28 3:20 ` Benjamin Herrenschmidt
2015-10-23 20:57 ` [PATCH 0/5 v3] Fix NVMe driver support on Power with 32-bit DMA Nishanth Aravamudan
2015-10-23 20:58 ` [PATCH 3/7 v2] powerpc/dma: implement per-platform dma_get_page_shift Nishanth Aravamudan
2015-10-23 20:59 ` [PATCH 4/7 v2] pseries/iommu: implement DDW-aware dma_get_page_shift Nishanth Aravamudan
2015-10-27 5:56 ` Alexey Kardashevskiy [this message]
2015-10-27 22:22 ` Nishanth Aravamudan
2015-10-23 21:00 ` [PATCH 5/7] [RFC PATCH 5/7] sparc: rename kernel/iommu_common.h -> include/asm/iommu_common.h Nishanth Aravamudan
2015-10-23 21:02 ` Nishanth Aravamudan
2015-10-23 21:01 ` [RFC PATCH 6/7] sparc/dma-mapping: override dma_get_page_shift Nishanth Aravamudan
2015-10-23 21:02 ` [PATCH 7/7 v2] drivers/nvme: default to the IOMMU page size Nishanth Aravamudan
2015-10-27 1:27 ` [PATCH 0/5 v3] Fix NVMe driver support on Power with 32-bit DMA David Miller
2015-10-27 22:20 ` Nishanth Aravamudan
2015-10-27 22:36 ` Busch, Keith
2015-10-28 0:54 ` David Miller
2015-10-28 13:59 ` Busch, Keith
2015-10-29 11:55 ` Christoph Hellwig
2015-10-29 15:57 ` Nishanth Aravamudan
2015-10-29 17:20 ` Busch, Keith
2015-10-30 21:35 ` [PATCH 1/1 v3] drivers/nvme: default to 4k device page size Nishanth Aravamudan
2015-10-30 21:48 ` Keith Busch
2015-10-30 22:13 ` Nishanth Aravamudan
2015-11-03 13:18 ` Christoph Hellwig
2015-11-03 13:46 ` Keith Busch
2015-11-05 17:01 ` [PATCH 1/1 v4] " Nishanth Aravamudan
2015-11-05 19:58 ` Christoph Hellwig
2015-11-05 21:54 ` Nishanth Aravamudan
2015-11-06 16:13 ` Nishanth Aravamudan
2015-11-13 7:37 ` Christoph Hellwig
2015-11-13 15:08 ` Keith Busch
2015-11-18 14:42 ` Christoph Hellwig
2015-10-30 1:49 ` [PATCH 0/5 v3] Fix NVMe driver support on Power with 32-bit DMA David Miller
2015-10-30 21:35 ` Nishanth Aravamudan
2015-10-27 22:57 ` Julian Calaby
2015-10-27 23:40 ` Nishanth Aravamudan
2015-10-27 23:43 ` Julian Calaby
2015-10-28 0:29 ` Benjamin Herrenschmidt
2015-10-28 1:00 ` David Miller
2015-10-28 0:53 ` David Miller
2015-10-28 1:52 ` Nishanth Aravamudan
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=562F11FA.9090805@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=davem@davemloft.net \
--cc=david@gibson.dropbear.id.au \
--cc=hch@infradead.org \
--cc=keith.busch@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=nacc@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=sparclinux@vger.kernel.org \
--cc=willy@linux.intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).