Message ID | 1337323393-1035-1-git-send-email-hdoyu@nvidia.com |
---|---|
State | Not Applicable, archived |
Headers | show |
On 05/18/2012 12:43 AM, Hiroshi DOYU wrote: > This code was based on: > "arch/microblaze/kernel/prom_parse.c" > "arch/powerpc/kernel/prom_parse.c" > > Can be promoted as a global function for general use. > > Signed-off-by: Hiroshi DOYU <hdoyu@nvidia.com> Hiroshi, Once this is accepted, it might be worth following up on the original of_get_dma_window thread and noting that once it's approved, an updated version of the patch will be needed to remove this code at the same time. A couple comments below though: > +static 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; Since bytes is an out parameter from of_get_property, do you need to wrap the declaration in uninitialized_var() to prevent a compile warning like the other patch you sent me downstream? > + 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++); Shouldn't the ++ happen even if (!busno)? Once those are fixed, in the interests of fixing the compile error, Acked-by: Stephen Warren <swarren@wwwdotorg.org> -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Stephen, Joerg, Stephen Warren <swarren@wwwdotorg.org> wrote @ Fri, 18 May 2012 17:15:34 +0200: > On 05/18/2012 12:43 AM, Hiroshi DOYU wrote: > > This code was based on: > > "arch/microblaze/kernel/prom_parse.c" > > "arch/powerpc/kernel/prom_parse.c" > > > > Can be promoted as a global function for general use. > > > > Signed-off-by: Hiroshi DOYU <hdoyu@nvidia.com> > > Hiroshi, > > Once this is accepted, it might be worth following up on the original > of_get_dma_window thread and noting that once it's approved, an updated > version of the patch will be needed to remove this code at the same time. > > A couple comments below though: > > > +static 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; > > Since bytes is an out parameter from of_get_property, do you need to > wrap the declaration in uninitialized_var() to prevent a compile warning > like the other patch you sent me downstream? > > > + 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++); > > Shouldn't the ++ happen even if (!busno)? Hm...the above code happens to work with our "dma-window" format right now, but most likely this seems incmpatible with "ibm,dma-window" format. I couldn't find the official format previously. I'm wondering that those "(ibm,)dma-window" and "(ibm,)dma-range" may be able to be generally used since those parameters are quite common to any IOMMUs. I'll hold off those patches at least this time Joerg, as Stephen proposed originally. Could you please revert or drop the original one this time? [PATCH 1/2] iommu/tegra: smmu: Add device tree support for SMMU PS: I'm being off-line'd mostly next four weeks, and my response would be delayed. -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, May 18, 2012 at 10:56:19PM +0200, Hiroshi Doyu wrote: > Joerg, as Stephen proposed originally. Could you please revert or drop > the original one this time? > > [PATCH 1/2] iommu/tegra: smmu: Add device tree support for SMMU I removed the patch from my tree. Regards, Joerg
diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index 192fc4a..7fc444b 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -874,6 +874,56 @@ static struct iommu_ops smmu_iommu_ops = { .pgsize_bitmap = SMMU_IOMMU_PGSIZES, }; +static 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; +} + static int tegra_smmu_suspend(struct device *dev) { struct smmu_device *smmu = dev_get_drvdata(dev);
This code was based on: "arch/microblaze/kernel/prom_parse.c" "arch/powerpc/kernel/prom_parse.c" Can be promoted as a global function for general use. Signed-off-by: Hiroshi DOYU <hdoyu@nvidia.com> --- Based on the discussion: http://marc.info/?l=linux-tegra&m=133732046606458&w=2 --- drivers/iommu/tegra-smmu.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-)