@@ -102,36 +102,13 @@ static void __init alloc_reserved_mem_array(void)
102102 reserved_mem = new_array ;
103103}
104104
105- static void __init fdt_init_reserved_mem_node (struct reserved_mem * rmem ,
106- unsigned long node );
105+ static void fdt_init_reserved_mem_node (unsigned long node , const char * uname ,
106+ phys_addr_t base , phys_addr_t size );
107107static int fdt_validate_reserved_mem_node (unsigned long node ,
108108 phys_addr_t * align );
109109static int fdt_fixup_reserved_mem_node (unsigned long node ,
110110 phys_addr_t base , phys_addr_t size );
111111
112- /*
113- * fdt_reserved_mem_save_node() - save fdt node for second pass initialization
114- */
115- static void __init fdt_reserved_mem_save_node (unsigned long node , const char * uname ,
116- phys_addr_t base , phys_addr_t size )
117- {
118- struct reserved_mem * rmem = & reserved_mem [reserved_mem_count ];
119-
120- if (reserved_mem_count == total_reserved_mem_cnt ) {
121- pr_err ("not enough space for all defined regions.\n" );
122- return ;
123- }
124-
125- rmem -> name = uname ;
126- rmem -> base = base ;
127- rmem -> size = size ;
128-
129- /* Call the region specific initialization function */
130- fdt_init_reserved_mem_node (rmem , node );
131-
132- reserved_mem_count ++ ;
133- }
134-
135112static int __init early_init_dt_reserve_memory (phys_addr_t base ,
136113 phys_addr_t size , bool nomap )
137114{
@@ -316,7 +293,7 @@ void __init fdt_scan_reserved_mem_late(void)
316293
317294 if (size ) {
318295 uname = fdt_get_name (fdt , child , NULL );
319- fdt_reserved_mem_save_node (child , uname , base , size );
296+ fdt_init_reserved_mem_node (child , uname , base , size );
320297 }
321298 }
322299
@@ -515,9 +492,8 @@ static int __init __reserved_mem_alloc_size(unsigned long node, const char *unam
515492 }
516493
517494 fdt_fixup_reserved_mem_node (node , base , size );
495+ fdt_init_reserved_mem_node (node , uname , base , size );
518496
519- /* Save region in the reserved_mem array */
520- fdt_reserved_mem_save_node (node , uname , base , size );
521497 return 0 ;
522498}
523499
@@ -619,30 +595,46 @@ static int __init __reserved_mem_init_node(struct reserved_mem *rmem,
619595 return ret ;
620596}
621597
622-
623598/**
624599 * fdt_init_reserved_mem_node() - Initialize a reserved memory region
625- * @rmem: reserved_mem struct of the memory region to be initialized.
626600 * @node: fdt node of the initialized region
601+ * @uname: name of the reserved memory node
602+ * @base: base address of the reserved memory region
603+ * @size: size of the reserved memory region
627604 *
628- * This function is used to call the region specific initialization
629- * function for a reserved memory region.
605+ * This function calls the region-specific initialization function for a
606+ * reserved memory region and saves all region-specific data to the
607+ * reserved_mem array to allow of_reserved_mem_lookup() to find it.
630608 */
631- static void __init fdt_init_reserved_mem_node (struct reserved_mem * rmem ,
632- unsigned long node )
609+ static void __init fdt_init_reserved_mem_node (unsigned long node , const char * uname ,
610+ phys_addr_t base , phys_addr_t size )
633611{
634612 int err = 0 ;
635613 bool nomap ;
636614
615+ struct reserved_mem * rmem = & reserved_mem [reserved_mem_count ];
616+
617+ if (reserved_mem_count == total_reserved_mem_cnt ) {
618+ pr_err ("not enough space for all defined regions.\n" );
619+ return ;
620+ }
621+
622+ rmem -> name = uname ;
623+ rmem -> base = base ;
624+ rmem -> size = size ;
625+
637626 nomap = of_get_flat_dt_prop (node , "no-map" , NULL ) != NULL ;
638627
639628 err = __reserved_mem_init_node (rmem , node );
640629 if (err != 0 && err != - ENODEV ) {
641630 pr_info ("node %s compatible matching fail\n" , rmem -> name );
631+ rmem -> name = NULL ;
632+
642633 if (nomap )
643634 memblock_clear_nomap (rmem -> base , rmem -> size );
644635 else
645636 memblock_phys_free (rmem -> base , rmem -> size );
637+ return ;
646638 } else {
647639 phys_addr_t end = rmem -> base + rmem -> size - 1 ;
648640 bool reusable =
@@ -654,6 +646,8 @@ static void __init fdt_init_reserved_mem_node(struct reserved_mem *rmem,
654646 reusable ? "reusable" : "non-reusable" ,
655647 rmem -> name ? rmem -> name : "unknown" );
656648 }
649+
650+ reserved_mem_count ++ ;
657651}
658652
659653struct rmem_assigned_device {
0 commit comments