From: laurent.pinchart@ideasonboard.com (Laurent Pinchart)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv9 2/6] dma-debug: add support for resource mappings
Date: Mon, 05 Sep 2016 12:39:06 +0300 [thread overview]
Message-ID: <2296171.Os8u9NTgGI@avalon> (raw)
In-Reply-To: <20160810112219.17964-3-niklas.soderlund+renesas@ragnatech.se>
Hi Niklas,
Thank you for the patch.
On Wednesday 10 Aug 2016 13:22:15 Niklas S?derlund wrote:
> A MMIO mapped resource can not be represented by a struct page so a new
> debug type is needed to handle this. This patch add such type and
> functionality to add/remove entries and how to translate them to a
> physical address.
>
> Signed-off-by: Niklas S?derlund <niklas.soderlund+renesas@ragnatech.se>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> include/linux/dma-debug.h | 19 +++++++++++++++++
> lib/dma-debug.c | 52 +++++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 69 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/dma-debug.h b/include/linux/dma-debug.h
> index fe8cb61..c7d844f 100644
> --- a/include/linux/dma-debug.h
> +++ b/include/linux/dma-debug.h
> @@ -56,6 +56,13 @@ extern void debug_dma_alloc_coherent(struct device *dev,
> size_t size, extern void debug_dma_free_coherent(struct device *dev, size_t
> size, void *virt, dma_addr_t addr);
>
> +extern void debug_dma_map_resource(struct device *dev, phys_addr_t addr,
> + size_t size, int direction,
> + dma_addr_t dma_addr);
> +
> +extern void debug_dma_unmap_resource(struct device *dev, dma_addr_t
> dma_addr, + size_t size, int direction);
> +
> extern void debug_dma_sync_single_for_cpu(struct device *dev,
> dma_addr_t dma_handle, size_t size,
> int direction);
> @@ -141,6 +148,18 @@ static inline void debug_dma_free_coherent(struct
> device *dev, size_t size, {
> }
>
> +static inline void debug_dma_map_resource(struct device *dev, phys_addr_t
> addr, + size_t size, int direction,
> + dma_addr_t dma_addr)
> +{
> +}
> +
> +static inline void debug_dma_unmap_resource(struct device *dev,
> + dma_addr_t dma_addr, size_t size,
> + int direction)
> +{
> +}
> +
> static inline void debug_dma_sync_single_for_cpu(struct device *dev,
> dma_addr_t dma_handle,
> size_t size, int direction)
> diff --git a/lib/dma-debug.c b/lib/dma-debug.c
> index fcfa193..2ba086b 100644
> --- a/lib/dma-debug.c
> +++ b/lib/dma-debug.c
> @@ -43,6 +43,7 @@ enum {
> dma_debug_page,
> dma_debug_sg,
> dma_debug_coherent,
> + dma_debug_resource,
> };
>
> enum map_err_types {
> @@ -150,8 +151,9 @@ static const char *const maperr2str[] = {
> [MAP_ERR_CHECKED] = "dma map error checked",
> };
>
> -static const char *type2name[4] = { "single", "page",
> - "scather-gather", "coherent" };
> +static const char *type2name[5] = { "single", "page",
> + "scather-gather", "coherent",
> + "resource" };
>
> static const char *dir2name[4] = { "DMA_BIDIRECTIONAL", "DMA_TO_DEVICE",
> "DMA_FROM_DEVICE", "DMA_NONE" };
> @@ -399,6 +401,9 @@ static void hash_bucket_del(struct dma_debug_entry
> *entry)
>
> static unsigned long long phys_addr(struct dma_debug_entry *entry)
> {
> + if (entry->type == dma_debug_resource)
> + return __pfn_to_phys(entry->pfn) + entry->offset;
> +
> return page_to_phys(pfn_to_page(entry->pfn)) + entry->offset;
> }
>
> @@ -1495,6 +1500,49 @@ void debug_dma_free_coherent(struct device *dev,
> size_t size, }
> EXPORT_SYMBOL(debug_dma_free_coherent);
>
> +void debug_dma_map_resource(struct device *dev, phys_addr_t addr, size_t
> size, + int direction, dma_addr_t dma_addr)
> +{
> + struct dma_debug_entry *entry;
> +
> + if (unlikely(dma_debug_disabled()))
> + return;
> +
> + entry = dma_entry_alloc();
> + if (!entry)
> + return;
> +
> + entry->type = dma_debug_resource;
> + entry->dev = dev;
> + entry->pfn = __phys_to_pfn(addr);
> + entry->offset = offset_in_page(addr);
> + entry->size = size;
> + entry->dev_addr = dma_addr;
> + entry->direction = direction;
> + entry->map_err_type = MAP_ERR_NOT_CHECKED;
> +
> + add_dma_entry(entry);
> +}
> +EXPORT_SYMBOL(debug_dma_map_resource);
> +
> +void debug_dma_unmap_resource(struct device *dev, dma_addr_t dma_addr,
> + size_t size, int direction)
> +{
> + struct dma_debug_entry ref = {
> + .type = dma_debug_resource,
> + .dev = dev,
> + .dev_addr = dma_addr,
> + .size = size,
> + .direction = direction,
> + };
> +
> + if (unlikely(dma_debug_disabled()))
> + return;
> +
> + check_unmap(&ref);
> +}
> +EXPORT_SYMBOL(debug_dma_unmap_resource);
> +
> void debug_dma_sync_single_for_cpu(struct device *dev, dma_addr_t
> dma_handle, size_t size, int direction)
> {
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2016-09-05 9:39 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-10 11:22 [PATCHv9 0/6] dmaengine: rcar-dmac: add iommu support for slave transfers Niklas Söderlund
2016-08-10 11:22 ` [PATCHv9 1/6] dma-mapping: add {map,unmap}_resource to dma_map_ops Niklas Söderlund
2016-08-10 11:22 ` [PATCHv9 2/6] dma-debug: add support for resource mappings Niklas Söderlund
2016-09-05 9:39 ` Laurent Pinchart [this message]
2016-08-10 11:22 ` [PATCHv9 3/6] dma-mapping: add dma_{map,unmap}_resource Niklas Söderlund
2016-09-05 9:46 ` Laurent Pinchart
2016-08-10 11:22 ` [PATCHv9 4/6] arm: dma-mapping: add {map, unmap}_resource for iommu ops Niklas Söderlund
2016-08-23 15:31 ` [PATCHv9 4/6] arm: dma-mapping: add {map,unmap}_resource " Niklas Söderlund
2016-09-05 9:54 ` [PATCHv9 4/6] arm: dma-mapping: add {map, unmap}_resource " Laurent Pinchart
2016-08-10 11:22 ` [PATCHv9 5/6] dmaengine: rcar-dmac: group slave configuration Niklas Söderlund
2016-08-10 11:22 ` [PATCHv9 6/6] dmaengine: rcar-dmac: add iommu support for slave transfers Niklas Söderlund
2016-09-05 9:52 ` Laurent Pinchart
2016-09-05 10:37 ` Robin Murphy
2017-01-01 23:08 ` Laurent Pinchart
2017-01-09 15:42 ` Niklas Söderlund
2016-08-10 17:37 ` [PATCHv9 0/6] " Vinod Koul
2016-09-15 16:26 ` Vinod Koul
2016-09-16 9:07 ` Arnd Bergmann
2016-09-16 9:48 ` Laurent Pinchart
2016-09-16 10:36 ` Robin Murphy
2016-09-16 12:05 ` Laurent Pinchart
2016-09-16 12:49 ` Robin Murphy
2016-09-16 13:01 ` Laurent Pinchart
2016-09-16 12:02 ` Arnd Bergmann
2016-09-16 12:09 ` Laurent Pinchart
2016-09-16 12:22 ` Arnd Bergmann
2016-09-16 12:58 ` Laurent Pinchart
2016-09-23 7:25 ` Niklas Söderlund
2016-09-26 16:47 ` Vinod Koul
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=2296171.Os8u9NTgGI@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox