aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2015-12-09 03:18:11 -0500
committerVinod Koul <vinod.koul@intel.com>2015-12-09 22:02:42 -0500
commitae0add740cd06169cd124f9aaa6eceb11e5b3060 (patch)
tree4643b28059485006da968fa21e34078c4e6cf9f7
parentecb7deceff2a51d3be50518969bc06411f485a62 (diff)
dmaengine: edma: DT: Change reserved slot array from 16bit to 32bit type
This change makes the DT file to be easier to read since the reserved slots array does not need the '/bits/ 16' to be specified, which might confuse some people. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Rob Herring <robh@kernel.org> Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r--Documentation/devicetree/bindings/dma/ti-edma.txt5
-rw-r--r--drivers/dma/edma.c31
2 files changed, 27 insertions, 9 deletions
diff --git a/Documentation/devicetree/bindings/dma/ti-edma.txt b/Documentation/devicetree/bindings/dma/ti-edma.txt
index ae8b8f1d6e69..079b42a81d7c 100644
--- a/Documentation/devicetree/bindings/dma/ti-edma.txt
+++ b/Documentation/devicetree/bindings/dma/ti-edma.txt
@@ -56,9 +56,8 @@ edma: edma@49000000 {
56 56
57 /* Channel 20 and 21 is allocated for memcpy */ 57 /* Channel 20 and 21 is allocated for memcpy */
58 ti,edma-memcpy-channels = <20 21>; 58 ti,edma-memcpy-channels = <20 21>;
59 /* The following PaRAM slots are reserved: 35-45 and 100-110 */ 59 /* The following PaRAM slots are reserved: 35-44 and 100-109 */
60 ti,edma-reserved-slot-ranges = /bits/ 16 <35 10>, 60 ti,edma-reserved-slot-ranges = <35 10>, <100 10>;
61 /bits/ 16 <100 10>;
62}; 61};
63 62
64edma_tptc0: tptc@49800000 { 63edma_tptc0: tptc@49800000 {
diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
index 3da20291db56..ee3091c45c95 100644
--- a/drivers/dma/edma.c
+++ b/drivers/dma/edma.c
@@ -2015,31 +2015,50 @@ static struct edma_soc_info *edma_setup_info_from_dt(struct device *dev,
2015 &sz); 2015 &sz);
2016 if (prop) { 2016 if (prop) {
2017 const char pname[] = "ti,edma-reserved-slot-ranges"; 2017 const char pname[] = "ti,edma-reserved-slot-ranges";
2018 u32 (*tmp)[2];
2018 s16 (*rsv_slots)[2]; 2019 s16 (*rsv_slots)[2];
2019 size_t nelm = sz / sizeof(*rsv_slots); 2020 size_t nelm = sz / sizeof(*tmp);
2020 struct edma_rsv_info *rsv_info; 2021 struct edma_rsv_info *rsv_info;
2022 int i;
2021 2023
2022 if (!nelm) 2024 if (!nelm)
2023 return info; 2025 return info;
2024 2026
2027 tmp = kcalloc(nelm, sizeof(*tmp), GFP_KERNEL);
2028 if (!tmp)
2029 return ERR_PTR(-ENOMEM);
2030
2025 rsv_info = devm_kzalloc(dev, sizeof(*rsv_info), GFP_KERNEL); 2031 rsv_info = devm_kzalloc(dev, sizeof(*rsv_info), GFP_KERNEL);
2026 if (!rsv_info) 2032 if (!rsv_info) {
2033 kfree(tmp);
2027 return ERR_PTR(-ENOMEM); 2034 return ERR_PTR(-ENOMEM);
2035 }
2028 2036
2029 rsv_slots = devm_kcalloc(dev, nelm + 1, sizeof(*rsv_slots), 2037 rsv_slots = devm_kcalloc(dev, nelm + 1, sizeof(*rsv_slots),
2030 GFP_KERNEL); 2038 GFP_KERNEL);
2031 if (!rsv_slots) 2039 if (!rsv_slots) {
2040 kfree(tmp);
2032 return ERR_PTR(-ENOMEM); 2041 return ERR_PTR(-ENOMEM);
2042 }
2033 2043
2034 ret = of_property_read_u16_array(dev->of_node, pname, 2044 ret = of_property_read_u32_array(dev->of_node, pname,
2035 (u16 *)rsv_slots, nelm * 2); 2045 (u32 *)tmp, nelm * 2);
2036 if (ret) 2046 if (ret) {
2047 kfree(tmp);
2037 return ERR_PTR(ret); 2048 return ERR_PTR(ret);
2049 }
2038 2050
2051 for (i = 0; i < nelm; i++) {
2052 rsv_slots[i][0] = tmp[i][0];
2053 rsv_slots[i][1] = tmp[i][1];
2054 }
2039 rsv_slots[nelm][0] = -1; 2055 rsv_slots[nelm][0] = -1;
2040 rsv_slots[nelm][1] = -1; 2056 rsv_slots[nelm][1] = -1;
2057
2041 info->rsv = rsv_info; 2058 info->rsv = rsv_info;
2042 info->rsv->rsv_slots = (const s16 (*)[2])rsv_slots; 2059 info->rsv->rsv_slots = (const s16 (*)[2])rsv_slots;
2060
2061 kfree(tmp);
2043 } 2062 }
2044 2063
2045 return info; 2064 return info;