* [PATCH 1/1] dt: Add general DMA window parser @ 2012-05-11 5:07 Hiroshi DOYU 0 siblings, 0 replies; 11+ messages in thread From: Hiroshi DOYU @ 2012-05-11 5:07 UTC (permalink / raw) To: hdoyu-DDmLM1+adcrQT0dZR+AlfA Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA, Thierry Reding, Grant Likely, Rob Herring, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA This code was based on: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" "ibm," prefix could be supported with some modification. Signed-off-by: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Cc: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> --- drivers/of/Kconfig | 4 ++ drivers/of/Makefile | 1 + drivers/of/of_dma.c | 70 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/of_address.h | 13 ++++++++ 4 files changed, 88 insertions(+), 0 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dfba3e6..3b0298b 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -83,4 +83,8 @@ config OF_MTD depends on MTD def_bool y +config OF_DMA + depends on HAS_DMA + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index e027f44..711ff5b 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o obj-$(CONFIG_OF_MTD) += of_mtd.o +obj-$(CONFIG_OF_DMA) += of_dma.o diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c new file mode 100644 index 0000000..a89fe61 --- /dev/null +++ b/drivers/of/of_dma.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. + * + * Based on: + * "arch/microblaze/kernel/prom_parse.c" + * "arch/powerpc/kernel/prom_parse.c" + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#include <linux/export.h> +#include <linux/of_address.h> + +int of_get_dma_window(struct device_node *dn, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *addr, size_t *size) +{ + const __be32 *dma_window, *end; + int bytes, cur_index = 0; + + if (!dn || !addr || !size) + return -EINVAL; + + if (!propname) + propname = "dma-window"; + + dma_window = of_get_property(dn, propname, &bytes); + if (!dma_window) + return -ENODEV; + end = dma_window + bytes / sizeof(*dma_window); + + while (dma_window < end) { + u32 cells; + const void *prop; + + /* busno is always one cell */ + if (busno) + *busno = be32_to_cpup(dma_window++); + + prop = of_get_property(dn, "#dma-address-cells", NULL); + if (!prop) + prop = of_get_property(dn, "#address-cells", NULL); + + cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); + if (!cells) + return -EINVAL; + *addr = of_read_number(dma_window, cells); + dma_window += cells; + + prop = of_get_property(dn, "#dma-size-cells", NULL); + cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); + if (!cells) + return -EINVAL; + *size = of_read_number(dma_window, cells); + dma_window += cells; + + if (cur_index++ == index) + break; + } + return 0; +} +EXPORT_SYMBOL(of_get_dma_window); diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 01b925a..9d9da9d 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -21,6 +21,11 @@ extern void __iomem *of_iomap(struct device_node *device, int index); extern const u32 *of_get_address(struct device_node *dev, int index, u64 *size, unsigned int *flags); +extern int of_get_dma_window(struct device_node *dev, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *phys, size_t *size); + #ifndef pci_address_to_pio static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #define pci_address_to_pio pci_address_to_pio @@ -48,6 +53,14 @@ static inline const u32 *of_get_address(struct device_node *dev, int index, { return NULL; } + +extern int of_get_dma_window(struct device_node *dev, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *phys, size_t *size) +{ + return 0; +} #endif /* CONFIG_OF_ADDRESS */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 1/1] dt: Add general DMA window parser @ 2012-04-24 12:20 Hiroshi DOYU [not found] ` <1335270004-15652-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Hiroshi DOYU @ 2012-04-24 12:20 UTC (permalink / raw) To: hdoyu-DDmLM1+adcrQT0dZR+AlfA Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA, Thierry Reding, Grant Likely, Rob Herring, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA This code was based on: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" "ibm," prefix could be supported with some modification. Signed-off-by: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Cc: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> --- drivers/of/Kconfig | 4 ++ drivers/of/Makefile | 1 + drivers/of/of_dma.c | 70 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/of_address.h | 13 ++++++++ 4 files changed, 88 insertions(+), 0 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dfba3e6..3b0298b 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -83,4 +83,8 @@ config OF_MTD depends on MTD def_bool y +config OF_DMA + depends on HAS_DMA + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index e027f44..711ff5b 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o obj-$(CONFIG_OF_MTD) += of_mtd.o +obj-$(CONFIG_OF_DMA) += of_dma.o diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c new file mode 100644 index 0000000..4869e29 --- /dev/null +++ b/drivers/of/of_dma.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. + * + * Based on: + * "arch/microblaze/kernel/prom_parse.c" + * "arch/powerpc/kernel/prom_parse.c" + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#include <linux/export.h> +#include <linux/of_address.h> + +int of_get_dma_window(struct device_node *dn, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *addr, size_t *size) +{ + const __be32 *dma_window, *end; + int bytes, cur_index = 0; + + if (!dn || !addr || !size) + return -EINVAL; + + if (!propname) + propname = "dma-window"; + + dma_window = of_get_property(dn, propname, &bytes); + if (!dma_window) + return -ENODEV; + end = dma_window + bytes / sizeof(*dma_window); + + while (dma_window < end) { + u32 cells; + const void *prop; + + /* busno is always one cell */ + if (busno) + *busno = be32_to_cpup(dma_window++); + + prop = of_get_property(dn, "#dma-address-cells", NULL); + if (!prop) + prop = of_get_property(dn, "#address-cells", NULL); + + cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); + if (!cells) + return -EINVAL; + *addr = of_read_number(dma_window, cells); + dma_window += cells; + + prop = of_get_property(dn, "#dma-size-cells", NULL); + cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); + if (!cells) + return -EINVAL; + *size = of_read_number(dma_window, cells); + dma_window += cells; + + if (cur_index++ == index) + break; + } + return 0; +} +EXPORT_SYMBOL(of_parse_dma_window); diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 01b925a..9d9da9d 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -21,6 +21,11 @@ extern void __iomem *of_iomap(struct device_node *device, int index); extern const u32 *of_get_address(struct device_node *dev, int index, u64 *size, unsigned int *flags); +extern int of_get_dma_window(struct device_node *dev, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *phys, size_t *size); + #ifndef pci_address_to_pio static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #define pci_address_to_pio pci_address_to_pio @@ -48,6 +53,14 @@ static inline const u32 *of_get_address(struct device_node *dev, int index, { return NULL; } + +extern int of_get_dma_window(struct device_node *dev, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *phys, size_t *size) +{ + return 0; +} #endif /* CONFIG_OF_ADDRESS */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
[parent not found: <1335270004-15652-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* [PATCH 1/1] dt: Add general DMA window parser [not found] ` <1335270004-15652-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-04-30 12:44 ` Hiroshi Doyu 0 siblings, 0 replies; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-30 12:44 UTC (permalink / raw) To: Grant Likely, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Thierry Reding, Rob Herring, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org From: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> This code was based on: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" "ibm," prefix could be supported with some modification. Signed-off-by: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Cc: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> --- drivers/of/Kconfig | 4 ++ drivers/of/Makefile | 1 + drivers/of/of_dma.c | 70 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/of_address.h | 13 ++++++++ 4 files changed, 88 insertions(+), 0 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dfba3e6..3b0298b 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -83,4 +83,8 @@ config OF_MTD depends on MTD def_bool y +config OF_DMA + depends on HAS_DMA + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index e027f44..711ff5b 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o obj-$(CONFIG_OF_MTD) += of_mtd.o +obj-$(CONFIG_OF_DMA) += of_dma.o diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c new file mode 100644 index 0000000..a89fe61 --- /dev/null +++ b/drivers/of/of_dma.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. + * + * Based on: + * "arch/microblaze/kernel/prom_parse.c" + * "arch/powerpc/kernel/prom_parse.c" + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#include <linux/export.h> +#include <linux/of_address.h> + +int of_get_dma_window(struct device_node *dn, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *addr, size_t *size) +{ + const __be32 *dma_window, *end; + int bytes, cur_index = 0; + + if (!dn || !addr || !size) + return -EINVAL; + + if (!propname) + propname = "dma-window"; + + dma_window = of_get_property(dn, propname, &bytes); + if (!dma_window) + return -ENODEV; + end = dma_window + bytes / sizeof(*dma_window); + + while (dma_window < end) { + u32 cells; + const void *prop; + + /* busno is always one cell */ + if (busno) + *busno = be32_to_cpup(dma_window++); + + prop = of_get_property(dn, "#dma-address-cells", NULL); + if (!prop) + prop = of_get_property(dn, "#address-cells", NULL); + + cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); + if (!cells) + return -EINVAL; + *addr = of_read_number(dma_window, cells); + dma_window += cells; + + prop = of_get_property(dn, "#dma-size-cells", NULL); + cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); + if (!cells) + return -EINVAL; + *size = of_read_number(dma_window, cells); + dma_window += cells; + + if (cur_index++ == index) + break; + } + return 0; +} +EXPORT_SYMBOL(of_get_dma_window); diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 01b925a..9d9da9d 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -21,6 +21,11 @@ extern void __iomem *of_iomap(struct device_node *device, int index); extern const u32 *of_get_address(struct device_node *dev, int index, u64 *size, unsigned int *flags); +extern int of_get_dma_window(struct device_node *dev, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *phys, size_t *size); + #ifndef pci_address_to_pio static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #define pci_address_to_pio pci_address_to_pio @@ -48,6 +53,14 @@ static inline const u32 *of_get_address(struct device_node *dev, int index, { return NULL; } + +extern int of_get_dma_window(struct device_node *dev, + const char *propname, int index, + unsigned long *busno, + dma_addr_t *phys, size_t *size) +{ + return 0; +} #endif /* CONFIG_OF_ADDRESS */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/1] arm/dts: Tegra30: Add device tree support for SMMU
@ 2012-04-18 7:31 Arnd Bergmann
2012-04-18 9:18 ` Hiroshi Doyu
0 siblings, 1 reply; 11+ messages in thread
From: Arnd Bergmann @ 2012-04-18 7:31 UTC (permalink / raw)
To: Hiroshi Doyu
Cc: thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org,
swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org,
joerg.roedel-5C7GfCeVMHo@public.gmane.org,
m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
On Wednesday 18 April 2012, Hiroshi Doyu wrote:
> If we can consider IOMMU as one of the implementation of DMA(Direct
> Memory Access), the prefix "dma-(window)" may make sense here. Then,
> we don't have to introduce a new concept "IO virtual address(iova)" in
> addition to the existing "bus address"(?)
>
> Anyway, either name would be ok for me;)
I would just use dma-window, without the "ibm," prefix but following the
same conventions. Note that the of_parse_dma_window function is currently
only defined in powerpc specific code, and should get moved to
drivers/of from arch/powerpc/kernel/prom_parse.c.
Arnd
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/1] arm/dts: Tegra30: Add device tree support for SMMU @ 2012-04-18 9:18 ` Hiroshi Doyu 2012-04-18 9:26 ` Thierry Reding 0 siblings, 1 reply; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-18 9:18 UTC (permalink / raw) To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org Cc: thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org From: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org> Subject: Re: [PATCH 1/1] arm/dts: Tegra30: Add device tree support for SMMU Date: Wed, 18 Apr 2012 09:31:53 +0200 Message-ID: <201204180731.54064.arnd-r2nGTMty4D4@public.gmane.org> > On Wednesday 18 April 2012, Hiroshi Doyu wrote: > > If we can consider IOMMU as one of the implementation of DMA(Direct > > Memory Access), the prefix "dma-(window)" may make sense here. Then, > > we don't have to introduce a new concept "IO virtual address(iova)" in > > addition to the existing "bus address"(?) > > > > Anyway, either name would be ok for me;) > > I would just use dma-window, without the "ibm," prefix but following the > same conventions. Note that the of_parse_dma_window function is currently > only defined in powerpc specific code, and should get moved to > drivers/of from arch/powerpc/kernel/prom_parse.c. Something like below? At least, I verified that this works with "tegra-smmu". >From 67c1dd493637c9e972d04e061a8e67049687021a Mon Sep 17 00:00:00 2001 From: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Date: Wed, 18 Apr 2012 12:09:03 +0300 Subject: [PATCH 1/1] dt: Add general DMA window parser This code was stolen from: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" Once "ibm," prefix is removed from dts file. This generic one could replace the originals. Signed-off-by: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> --- drivers/of/Kconfig | 4 ++++ drivers/of/Makefile | 1 + drivers/of/of_dma.c | 35 +++++++++++++++++++++++++++++++++++ include/linux/of_address.h | 10 ++++++++++ 4 files changed, 50 insertions(+), 0 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dfba3e6..3b0298b 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -83,4 +83,8 @@ config OF_MTD depends on MTD def_bool y +config OF_DMA + depends on HAS_DMA + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index e027f44..711ff5b 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o obj-$(CONFIG_OF_MTD) += of_mtd.o +obj-$(CONFIG_OF_DMA) += of_dma.o diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c new file mode 100644 index 0000000..1db1ccd --- /dev/null +++ b/drivers/of/of_dma.c @@ -0,0 +1,35 @@ +/* + * Stealed from: + * "arch/microblaze/kernel/prom_parse.c" + * "arch/powerpc/kernel/prom_parse.c" + */ + +#include <linux/of_address.h> + +void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, + unsigned long *busno, unsigned long *phys, unsigned long *size) +{ + const u32 *dma_window; + u32 cells; + const unsigned char *prop; + + dma_window = dma_window_prop; + + /* busno is always one cell */ + if (busno) + *busno = *(dma_window++); + + prop = of_get_property(dn, "#dma-address-cells", NULL); + if (!prop) + prop = of_get_property(dn, "#address-cells", NULL); + + cells = prop ? *(u32 *)prop : of_n_addr_cells(dn); + *phys = of_read_number(dma_window, cells); + + dma_window += cells; + + prop = of_get_property(dn, "#dma-size-cells", NULL); + cells = prop ? *(u32 *)prop : of_n_size_cells(dn); + *size = of_read_number(dma_window, cells); +} + diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 01b925a..2a0f7c6 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -21,6 +21,10 @@ extern void __iomem *of_iomap(struct device_node *device, int index); extern const u32 *of_get_address(struct device_node *dev, int index, u64 *size, unsigned int *flags); +extern void of_parse_dma_window(struct device_node *dn, + const void *dma_window_prop, unsigned long *busno, + unsigned long *phys, unsigned long *size); + #ifndef pci_address_to_pio static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #define pci_address_to_pio pci_address_to_pio @@ -48,6 +52,12 @@ static inline const u32 *of_get_address(struct device_node *dev, int index, { return NULL; } + +static inline void of_parse_dma_window(struct device_node *dn, + const void *dma_window_prop, unsigned long *busno, + unsigned long *phys, unsigned long *size) +{ +} #endif /* CONFIG_OF_ADDRESS */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/1] arm/dts: Tegra30: Add device tree support for SMMU @ 2012-04-18 9:26 ` Thierry Reding [not found] ` <20120418092613.GA8632-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Thierry Reding @ 2012-04-18 9:26 UTC (permalink / raw) To: Hiroshi Doyu Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org [-- Attachment #1: Type: text/plain, Size: 1231 bytes --] * Hiroshi Doyu wrote: > diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c > new file mode 100644 > index 0000000..1db1ccd > --- /dev/null > +++ b/drivers/of/of_dma.c > @@ -0,0 +1,35 @@ > +/* > + * Stealed from: "Stolen from" > + * "arch/microblaze/kernel/prom_parse.c" > + * "arch/powerpc/kernel/prom_parse.c" > + */ > + > +#include <linux/of_address.h> > + > +void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, > + unsigned long *busno, unsigned long *phys, unsigned long *size) > +{ > + const u32 *dma_window; Should be __be32. > + u32 cells; > + const unsigned char *prop; > + > + dma_window = dma_window_prop; > + > + /* busno is always one cell */ > + if (busno) > + *busno = *(dma_window++); This needs endianness conversion: *busno = be32_to_cpup(dma_window++); > + > + prop = of_get_property(dn, "#dma-address-cells", NULL); > + if (!prop) > + prop = of_get_property(dn, "#address-cells", NULL); > + > + cells = prop ? *(u32 *)prop : of_n_addr_cells(dn); Same here. > + *phys = of_read_number(dma_window, cells); > + > + dma_window += cells; > + > + prop = of_get_property(dn, "#dma-size-cells", NULL); > + cells = prop ? *(u32 *)prop : of_n_size_cells(dn); And here. Thierry [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <20120418092613.GA8632-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>]
* [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418092613.GA8632-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> @ 2012-04-18 10:19 ` Hiroshi Doyu [not found] ` <20120418.131907.2172387798112620167.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-18 10:19 UTC (permalink / raw) To: thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org Cc: swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Hi, Try again with fixing Thierry's commnets, Thanks. >From 9a632c24949e46df197a216ca95f684edd1db693 Mon Sep 17 00:00:00 2001 From: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Date: Wed, 18 Apr 2012 12:09:03 +0300 Subject: [PATCH 1/1] dt: Add general DMA window parser This code was stolen from: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" Once "ibm," prefix is removed from dts file. This generic one could replace the originals. Signed-off-by: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> --- drivers/of/Kconfig | 4 ++++ drivers/of/Makefile | 1 + drivers/of/of_dma.c | 35 +++++++++++++++++++++++++++++++++++ include/linux/of_address.h | 10 ++++++++++ 4 files changed, 50 insertions(+), 0 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dfba3e6..3b0298b 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -83,4 +83,8 @@ config OF_MTD depends on MTD def_bool y +config OF_DMA + depends on HAS_DMA + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index e027f44..711ff5b 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o obj-$(CONFIG_OF_MTD) += of_mtd.o +obj-$(CONFIG_OF_DMA) += of_dma.o diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c new file mode 100644 index 0000000..a34db5a --- /dev/null +++ b/drivers/of/of_dma.c @@ -0,0 +1,35 @@ +/* + * Stolen from: + * "arch/microblaze/kernel/prom_parse.c" + * "arch/powerpc/kernel/prom_parse.c" + */ + +#include <linux/of_address.h> + +void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, + unsigned long *busno, unsigned long *phys, unsigned long *size) +{ + const __be32 *dma_window; + u32 cells; + const unsigned char *prop; + + dma_window = dma_window_prop; + + /* busno is always one cell */ + if (busno) + *busno = be32_to_cpup(dma_window++); + + prop = of_get_property(dn, "#dma-address-cells", NULL); + if (!prop) + prop = of_get_property(dn, "#address-cells", NULL); + + cells = prop ? *(__be32 *)prop : of_n_addr_cells(dn); + *phys = of_read_number(dma_window, cells); + + dma_window += cells; + + prop = of_get_property(dn, "#dma-size-cells", NULL); + cells = prop ? *(__be32 *)prop : of_n_size_cells(dn); + *size = of_read_number(dma_window, cells); +} + diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 01b925a..2a0f7c6 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -21,6 +21,10 @@ extern void __iomem *of_iomap(struct device_node *device, int index); extern const u32 *of_get_address(struct device_node *dev, int index, u64 *size, unsigned int *flags); +extern void of_parse_dma_window(struct device_node *dn, + const void *dma_window_prop, unsigned long *busno, + unsigned long *phys, unsigned long *size); + #ifndef pci_address_to_pio static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #define pci_address_to_pio pci_address_to_pio @@ -48,6 +52,12 @@ static inline const u32 *of_get_address(struct device_node *dev, int index, { return NULL; } + +static inline void of_parse_dma_window(struct device_node *dn, + const void *dma_window_prop, unsigned long *busno, + unsigned long *phys, unsigned long *size) +{ +} #endif /* CONFIG_OF_ADDRESS */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
[parent not found: <20120418.131907.2172387798112620167.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418.131907.2172387798112620167.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-04-18 10:26 ` Thierry Reding [not found] ` <20120418102629.GA14533-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-18 17:27 ` Stephen Warren 1 sibling, 1 reply; 11+ messages in thread From: Thierry Reding @ 2012-04-18 10:26 UTC (permalink / raw) To: Hiroshi Doyu Cc: arnd-r2nGTMty4D4@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org [-- Attachment #1.1: Type: text/plain, Size: 367 bytes --] * Hiroshi Doyu wrote: > + cells = prop ? *(__be32 *)prop : of_n_addr_cells(dn); I think this needs to be: cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); Only casting isn't enough, you need the bytes to be swapped. > + cells = prop ? *(__be32 *)prop : of_n_size_cells(dn); Similarly: cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); Thierry [-- Attachment #1.2: Type: application/pgp-signature, Size: 198 bytes --] [-- Attachment #2: Type: text/plain, Size: 190 bytes --] _______________________________________________ iommu mailing list iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org https://lists.linuxfoundation.org/mailman/listinfo/iommu ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <20120418102629.GA14533-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>]
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418102629.GA14533-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> @ 2012-04-18 10:36 ` Hiroshi Doyu [not found] ` <20120418.133629.1664781135413277375.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-18 10:36 UTC (permalink / raw) To: thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org From: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> Subject: Re: [PATCH 1/1] dt: Add general DMA window parser Date: Wed, 18 Apr 2012 12:26:29 +0200 Message-ID: <20120418102629.GA14533-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> > * PGP Signed by an unknown key > > * Hiroshi Doyu wrote: > > + cells = prop ? *(__be32 *)prop : of_n_addr_cells(dn); > > I think this needs to be: > > cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); > > Only casting isn't enough, you need the bytes to be swapped. Right. Try again. Sorry for spamming. >From 1ee8a9b3a839456b170af74b11a4304bfda965c4 Mon Sep 17 00:00:00 2001 From: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Date: Wed, 18 Apr 2012 12:09:03 +0300 Subject: [PATCH 1/1] dt: Add general DMA window parser This code was stolen from: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" Once "ibm," prefix is removed from dts file. This generic one could replace the originals. Signed-off-by: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> --- drivers/of/Kconfig | 4 ++++ drivers/of/Makefile | 1 + drivers/of/of_dma.c | 35 +++++++++++++++++++++++++++++++++++ include/linux/of_address.h | 10 ++++++++++ 4 files changed, 50 insertions(+), 0 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index dfba3e6..3b0298b 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -83,4 +83,8 @@ config OF_MTD depends on MTD def_bool y +config OF_DMA + depends on HAS_DMA + def_bool y + endmenu # OF diff --git a/drivers/of/Makefile b/drivers/of/Makefile index e027f44..711ff5b 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_OF_PCI) += of_pci.o obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o obj-$(CONFIG_OF_MTD) += of_mtd.o +obj-$(CONFIG_OF_DMA) += of_dma.o diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c new file mode 100644 index 0000000..45c9e88 --- /dev/null +++ b/drivers/of/of_dma.c @@ -0,0 +1,35 @@ +/* + * Stolen from: + * "arch/microblaze/kernel/prom_parse.c" + * "arch/powerpc/kernel/prom_parse.c" + */ + +#include <linux/of_address.h> + +void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, + unsigned long *busno, unsigned long *phys, unsigned long *size) +{ + const __be32 *dma_window; + u32 cells; + const unsigned char *prop; + + dma_window = dma_window_prop; + + /* busno is always one cell */ + if (busno) + *busno = be32_to_cpup(dma_window++); + + prop = of_get_property(dn, "#dma-address-cells", NULL); + if (!prop) + prop = of_get_property(dn, "#address-cells", NULL); + + cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); + *phys = of_read_number(dma_window, cells); + + dma_window += cells; + + prop = of_get_property(dn, "#dma-size-cells", NULL); + cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); + *size = of_read_number(dma_window, cells); +} + diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 01b925a..2a0f7c6 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -21,6 +21,10 @@ extern void __iomem *of_iomap(struct device_node *device, int index); extern const u32 *of_get_address(struct device_node *dev, int index, u64 *size, unsigned int *flags); +extern void of_parse_dma_window(struct device_node *dn, + const void *dma_window_prop, unsigned long *busno, + unsigned long *phys, unsigned long *size); + #ifndef pci_address_to_pio static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #define pci_address_to_pio pci_address_to_pio @@ -48,6 +52,12 @@ static inline const u32 *of_get_address(struct device_node *dev, int index, { return NULL; } + +static inline void of_parse_dma_window(struct device_node *dn, + const void *dma_window_prop, unsigned long *busno, + unsigned long *phys, unsigned long *size) +{ +} #endif /* CONFIG_OF_ADDRESS */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
[parent not found: <20120418.133629.1664781135413277375.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418.133629.1664781135413277375.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-04-18 10:54 ` Thierry Reding [not found] ` <20120418105423.GA5667-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Thierry Reding @ 2012-04-18 10:54 UTC (permalink / raw) To: Hiroshi Doyu Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org [-- Attachment #1: Type: text/plain, Size: 1572 bytes --] * Hiroshi Doyu wrote: > diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c > new file mode 100644 > index 0000000..45c9e88 > --- /dev/null > +++ b/drivers/of/of_dma.c > @@ -0,0 +1,35 @@ > +/* > + * Stolen from: > + * "arch/microblaze/kernel/prom_parse.c" > + * "arch/powerpc/kernel/prom_parse.c" > + */ > + > +#include <linux/of_address.h> > + > +void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, > + unsigned long *busno, unsigned long *phys, unsigned long *size) > +{ > + const __be32 *dma_window; > + u32 cells; > + const unsigned char *prop; There's no need for this to be const unsigned char *, const void * will do just as well. > + > + dma_window = dma_window_prop; > + > + /* busno is always one cell */ > + if (busno) > + *busno = be32_to_cpup(dma_window++); > + > + prop = of_get_property(dn, "#dma-address-cells", NULL); > + if (!prop) > + prop = of_get_property(dn, "#address-cells", NULL); > + > + cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); > + *phys = of_read_number(dma_window, cells); This should probably fail gracefully if phys == NULL, similar to what you do for busno. > + > + dma_window += cells; > + > + prop = of_get_property(dn, "#dma-size-cells", NULL); > + cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); > + *size = of_read_number(dma_window, cells); Same here. > +} > + And you might want to add a EXPORT_SYMBOL(of_parse_dma_window) here so the function can be used from modules. Sorry for having you go through another round. I should have looked more closely before. Thierry [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <20120418105423.GA5667-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>]
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418105423.GA5667-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> @ 2012-04-18 11:13 ` Hiroshi Doyu 0 siblings, 0 replies; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-18 11:13 UTC (permalink / raw) To: thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org From: Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> Subject: Re: [PATCH 1/1] dt: Add general DMA window parser Date: Wed, 18 Apr 2012 12:54:23 +0200 Message-ID: <20120418105423.GA5667-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> > * PGP Signed by an unknown key > > * Hiroshi Doyu wrote: > > diff --git a/drivers/of/of_dma.c b/drivers/of/of_dma.c > > new file mode 100644 > > index 0000000..45c9e88 > > --- /dev/null > > +++ b/drivers/of/of_dma.c > > @@ -0,0 +1,35 @@ > > +/* > > + * Stolen from: > > + * "arch/microblaze/kernel/prom_parse.c" > > + * "arch/powerpc/kernel/prom_parse.c" > > + */ > > + > > +#include <linux/of_address.h> > > + > > +void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, > > + unsigned long *busno, unsigned long *phys, unsigned long *size) > > +{ > > + const __be32 *dma_window; > > + u32 cells; > > + const unsigned char *prop; > > There's no need for this to be const unsigned char *, const void * will do > just as well. > > > + > > + dma_window = dma_window_prop; > > + > > + /* busno is always one cell */ > > + if (busno) > > + *busno = be32_to_cpup(dma_window++); > > + > > + prop = of_get_property(dn, "#dma-address-cells", NULL); > > + if (!prop) > > + prop = of_get_property(dn, "#address-cells", NULL); > > + > > + cells = prop ? be32_to_cpup(prop) : of_n_addr_cells(dn); > > + *phys = of_read_number(dma_window, cells); > > This should probably fail gracefully if phys == NULL, similar to what you do > for busno. > > > + > > + dma_window += cells; > > + > > + prop = of_get_property(dn, "#dma-size-cells", NULL); > > + cells = prop ? be32_to_cpup(prop) : of_n_size_cells(dn); > > + *size = of_read_number(dma_window, cells); > > Same here. > > > +} > > + > > And you might want to add a EXPORT_SYMBOL(of_parse_dma_window) here so the > function can be used from modules. > > Sorry for having you go through another round. I should have looked more > closely before. No problem, I'll wait for another comments, and post again later. Thank you for reivew. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418.131907.2172387798112620167.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-04-18 10:26 ` Thierry Reding @ 2012-04-18 17:27 ` Stephen Warren [not found] ` <4F8EF99E.3050709-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 1 sibling, 1 reply; 11+ messages in thread From: Stephen Warren @ 2012-04-18 17:27 UTC (permalink / raw) To: Hiroshi Doyu Cc: thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org On 04/18/2012 04:19 AM, Hiroshi Doyu wrote: > Subject: [PATCH 1/1] dt: Add general DMA window parser > > This code was stolen from: > "arch/microblaze/kernel/prom_parse.c" > "arch/powerpc/kernel/prom_parse.c" > > Once "ibm," prefix is removed from dts file. This generic one could > replace the originals. > +extern void of_parse_dma_window(struct device_node *dn, > + const void *dma_window_prop, unsigned long *busno, > + unsigned long *phys, unsigned long *size); At least some other of_*() parsing functions take the property name rather than the property pointer, and also take an index into the property in order to support multiple entries in it. See for example of_parse_phandle and of_get_named_gpio_flags. Should this new API be similar? E.g.: extern void of_parse_dma_window(struct device_node *np, const char *propname, int index, unsigned long *busno, unsigned long *phys, unsigned long *size); ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <4F8EF99E.3050709-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>]
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <4F8EF99E.3050709-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> @ 2012-04-18 19:39 ` Thierry Reding [not found] ` <20120418193945.GA17960-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-19 12:19 ` Hiroshi Doyu 1 sibling, 1 reply; 11+ messages in thread From: Thierry Reding @ 2012-04-18 19:39 UTC (permalink / raw) To: Stephen Warren Cc: Hiroshi Doyu, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org [-- Attachment #1: Type: text/plain, Size: 1127 bytes --] * Stephen Warren wrote: > On 04/18/2012 04:19 AM, Hiroshi Doyu wrote: > > > Subject: [PATCH 1/1] dt: Add general DMA window parser > > > > This code was stolen from: > > "arch/microblaze/kernel/prom_parse.c" > > "arch/powerpc/kernel/prom_parse.c" > > > > Once "ibm," prefix is removed from dts file. This generic one could > > replace the originals. > > > +extern void of_parse_dma_window(struct device_node *dn, > > + const void *dma_window_prop, unsigned long *busno, > > + unsigned long *phys, unsigned long *size); > > At least some other of_*() parsing functions take the property name > rather than the property pointer, and also take an index into the > property in order to support multiple entries in it. See for example > of_parse_phandle and of_get_named_gpio_flags. Should this new API be > similar? E.g.: > > extern void of_parse_dma_window(struct device_node *np, > const char *propname, int index, > unsigned long *busno, > unsigned long *phys, unsigned long *size); In that case the function should return int for proper error handling. Thierry [-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <20120418193945.GA17960-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org>]
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <20120418193945.GA17960-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> @ 2012-04-19 12:32 ` Hiroshi Doyu 0 siblings, 0 replies; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-19 12:32 UTC (permalink / raw) To: Thierry Reding Cc: Stephen Warren, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, joerg.roedel-5C7GfCeVMHo@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org On Wed, 18 Apr 2012 21:39:45 +0200 Thierry Reding <thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org> wrote: > * PGP Signed by an unknown key > > * Stephen Warren wrote: > > On 04/18/2012 04:19 AM, Hiroshi Doyu wrote: > > > > > Subject: [PATCH 1/1] dt: Add general DMA window parser > > > > > > This code was stolen from: > > > "arch/microblaze/kernel/prom_parse.c" > > > "arch/powerpc/kernel/prom_parse.c" > > > > > > Once "ibm," prefix is removed from dts file. This generic one could > > > replace the originals. > > > > > +extern void of_parse_dma_window(struct device_node *dn, > > > + const void *dma_window_prop, unsigned long *busno, > > > + unsigned long *phys, unsigned long *size); > > > > At least some other of_*() parsing functions take the property name > > rather than the property pointer, and also take an index into the > > property in order to support multiple entries in it. See for example > > of_parse_phandle and of_get_named_gpio_flags. Should this new API be > > similar? E.g.: > > > > extern void of_parse_dma_window(struct device_node *np, > > const char *propname, int index, > > unsigned long *busno, > > unsigned long *phys, unsigned long *size); > > In that case the function should return int for proper error handling. Good point. I'll. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/1] dt: Add general DMA window parser [not found] ` <4F8EF99E.3050709-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 2012-04-18 19:39 ` Thierry Reding @ 2012-04-19 12:19 ` Hiroshi Doyu 1 sibling, 0 replies; 11+ messages in thread From: Hiroshi Doyu @ 2012-04-19 12:19 UTC (permalink / raw) To: Stephen Warren Cc: arnd-r2nGTMty4D4@public.gmane.org, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org, thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org, linaro-mm-sig-cunTk1MwBs8s++Sfvej+rw@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org On Wed, 18 Apr 2012 19:27:58 +0200 Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> wrote: > On 04/18/2012 04:19 AM, Hiroshi Doyu wrote: > > > Subject: [PATCH 1/1] dt: Add general DMA window parser > > > > This code was stolen from: > > "arch/microblaze/kernel/prom_parse.c" > > "arch/powerpc/kernel/prom_parse.c" > > > > Once "ibm," prefix is removed from dts file. This generic one could > > replace the originals. It seems that the "ibm," prefix is not used in .dts files, but it comes from the PAPR compliant firmware and cannot be changed. The easiest solution would be to make the function understand both variants. > > +extern void of_parse_dma_window(struct device_node *dn, > > + const void *dma_window_prop, unsigned long *busno, > > + unsigned long *phys, unsigned long *size); > > At least some other of_*() parsing functions take the property name > rather than the property pointer, and also take an index into the > property in order to support multiple entries in it. See for example > of_parse_phandle and of_get_named_gpio_flags. Should this new API be > similar? E.g.: > > extern void of_parse_dma_window(struct device_node *np, > const char *propname, int index, > unsigned long *busno, > unsigned long *phys, unsigned long *size); At least, I can add the code checking the return value of this function, which won't change the existing code. Does anyone know the format of "ibm,dma-window"? ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-05-11 5:07 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-05-11 5:07 [PATCH 1/1] dt: Add general DMA window parser Hiroshi DOYU -- strict thread matches above, loose matches on Subject: below -- 2012-04-24 12:20 [PATCH v3 " Hiroshi DOYU [not found] ` <1335270004-15652-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-04-30 12:44 ` [PATCH " Hiroshi Doyu 2012-04-18 7:31 [PATCH 1/1] arm/dts: Tegra30: Add device tree support for SMMU Arnd Bergmann 2012-04-18 9:18 ` Hiroshi Doyu 2012-04-18 9:26 ` Thierry Reding [not found] ` <20120418092613.GA8632-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-18 10:19 ` [PATCH 1/1] dt: Add general DMA window parser Hiroshi Doyu [not found] ` <20120418.131907.2172387798112620167.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-04-18 10:26 ` Thierry Reding [not found] ` <20120418102629.GA14533-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-18 10:36 ` Hiroshi Doyu [not found] ` <20120418.133629.1664781135413277375.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-04-18 10:54 ` Thierry Reding [not found] ` <20120418105423.GA5667-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-18 11:13 ` Hiroshi Doyu 2012-04-18 17:27 ` Stephen Warren [not found] ` <4F8EF99E.3050709-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 2012-04-18 19:39 ` Thierry Reding [not found] ` <20120418193945.GA17960-RM9K5IK7kjIQXX3q8xo1gnVAuStQJXxyR5q1nwbD4aMs9pC9oP6+/A@public.gmane.org> 2012-04-19 12:32 ` Hiroshi Doyu 2012-04-19 12:19 ` Hiroshi Doyu
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).