@@ -61,8 +61,6 @@ static const struct mem_bank_data zynqmp_tcm_banks[] = {
6161 * @np: device node of RPU instance
6262 * @tcm_bank_count: number TCM banks accessible to this RPU
6363 * @tcm_banks: array of each TCM bank data
64- * @rmem_count: Number of reserved mem regions
65- * @rmem: reserved memory region nodes from device tree
6664 * @rproc: rproc handle
6765 * @pm_domain_id: RPU CPU power domain id
6866 */
@@ -71,8 +69,6 @@ struct zynqmp_r5_core {
7169 struct device_node * np ;
7270 int tcm_bank_count ;
7371 struct mem_bank_data * * tcm_banks ;
74- int rmem_count ;
75- struct reserved_mem * * rmem ;
7672 struct rproc * rproc ;
7773 u32 pm_domain_id ;
7874};
@@ -239,38 +235,49 @@ static int add_mem_regions_carveout(struct rproc *rproc)
239235{
240236 struct rproc_mem_entry * rproc_mem ;
241237 struct zynqmp_r5_core * r5_core ;
238+ struct of_phandle_iterator it ;
242239 struct reserved_mem * rmem ;
243- int i , num_mem_regions ;
240+ int i = 0 ;
244241
245242 r5_core = (struct zynqmp_r5_core * )rproc -> priv ;
246- num_mem_regions = r5_core -> rmem_count ;
247243
248- for ( i = 0 ; i < num_mem_regions ; i ++ ) {
249- rmem = r5_core -> rmem [ i ] ;
244+ /* Register associated reserved memory regions */
245+ of_phandle_iterator_init ( & it , r5_core -> np , "memory-region" , NULL , 0 ) ;
250246
251- if (!strncmp (rmem -> name , "vdev0buffer" , strlen ("vdev0buffer" ))) {
247+ while (of_phandle_iterator_next (& it ) == 0 ) {
248+ rmem = of_reserved_mem_lookup (it .node );
249+ if (!rmem ) {
250+ of_node_put (it .node );
251+ dev_err (& rproc -> dev , "unable to acquire memory-region\n" );
252+ return - EINVAL ;
253+ }
254+
255+ if (!strcmp (it .node -> name , "vdev0buffer" )) {
252256 /* Init reserved memory for vdev buffer */
253257 rproc_mem = rproc_of_resm_mem_entry_init (& rproc -> dev , i ,
254258 rmem -> size ,
255259 rmem -> base ,
256- rmem -> name );
260+ it . node -> name );
257261 } else {
258262 /* Register associated reserved memory regions */
259263 rproc_mem = rproc_mem_entry_init (& rproc -> dev , NULL ,
260264 (dma_addr_t )rmem -> base ,
261265 rmem -> size , rmem -> base ,
262266 zynqmp_r5_mem_region_map ,
263267 zynqmp_r5_mem_region_unmap ,
264- rmem -> name );
268+ it . node -> name );
265269 }
266270
267- if (!rproc_mem )
271+ if (!rproc_mem ) {
272+ of_node_put (it .node );
268273 return - ENOMEM ;
274+ }
269275
270276 rproc_add_carveout (rproc , rproc_mem );
271277
272278 dev_dbg (& rproc -> dev , "reserved mem carveout %s addr=%llx, size=0x%llx" ,
273- rmem -> name , rmem -> base , rmem -> size );
279+ it .node -> name , rmem -> base , rmem -> size );
280+ i ++ ;
274281 }
275282
276283 return 0 ;
@@ -726,59 +733,6 @@ static int zynqmp_r5_get_tcm_node(struct zynqmp_r5_cluster *cluster)
726733 return 0 ;
727734}
728735
729- /**
730- * zynqmp_r5_get_mem_region_node()
731- * parse memory-region property and get reserved mem regions
732- *
733- * @r5_core: pointer to zynqmp_r5_core type object
734- *
735- * Return: 0 for success and error code for failure.
736- */
737- static int zynqmp_r5_get_mem_region_node (struct zynqmp_r5_core * r5_core )
738- {
739- struct device_node * np , * rmem_np ;
740- struct reserved_mem * * rmem ;
741- int res_mem_count , i ;
742- struct device * dev ;
743-
744- dev = r5_core -> dev ;
745- np = r5_core -> np ;
746-
747- res_mem_count = of_property_count_elems_of_size (np , "memory-region" ,
748- sizeof (phandle ));
749- if (res_mem_count <= 0 ) {
750- dev_warn (dev , "failed to get memory-region property %d\n" ,
751- res_mem_count );
752- return 0 ;
753- }
754-
755- rmem = devm_kcalloc (dev , res_mem_count ,
756- sizeof (struct reserved_mem * ), GFP_KERNEL );
757- if (!rmem )
758- return - ENOMEM ;
759-
760- for (i = 0 ; i < res_mem_count ; i ++ ) {
761- rmem_np = of_parse_phandle (np , "memory-region" , i );
762- if (!rmem_np )
763- goto release_rmem ;
764-
765- rmem [i ] = of_reserved_mem_lookup (rmem_np );
766- if (!rmem [i ]) {
767- of_node_put (rmem_np );
768- goto release_rmem ;
769- }
770-
771- of_node_put (rmem_np );
772- }
773-
774- r5_core -> rmem_count = res_mem_count ;
775- r5_core -> rmem = rmem ;
776- return 0 ;
777-
778- release_rmem :
779- return - EINVAL ;
780- }
781-
782736/*
783737 * zynqmp_r5_core_init()
784738 * Create and initialize zynqmp_r5_core type object
@@ -806,10 +760,6 @@ static int zynqmp_r5_core_init(struct zynqmp_r5_cluster *cluster,
806760 for (i = 0 ; i < cluster -> core_count ; i ++ ) {
807761 r5_core = cluster -> r5_cores [i ];
808762
809- ret = zynqmp_r5_get_mem_region_node (r5_core );
810- if (ret )
811- dev_warn (dev , "memory-region prop failed %d\n" , ret );
812-
813763 /* Initialize r5 cores with power-domains parsed from dts */
814764 ret = of_property_read_u32_index (r5_core -> np , "power-domains" ,
815765 1 , & r5_core -> pm_domain_id );
0 commit comments