Message ID | 20190808075013.4852-4-jiaxun.yang@flygoat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [1/7] MIPS: init: Drop boot_mem_map | expand |
On Thu, Aug 08, 2019 at 03:50:09PM +0800, Jiaxun Yang wrote: > boot_mem_map is nolonger exist so we need to maintain a list > of prom memory by ourselves. > > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> > --- > arch/mips/fw/arc/memory.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/arch/mips/fw/arc/memory.c b/arch/mips/fw/arc/memory.c > index 429b7f8d2aeb..02e954b3700e 100644 > --- a/arch/mips/fw/arc/memory.c > +++ b/arch/mips/fw/arc/memory.c > @@ -27,6 +27,11 @@ > > #undef DEBUG > > +#define MAX_PROM_MEM 5 > +static phys_addr_t prom_mem_base[MAX_PROM_MEM] __initdata; > +static phys_addr_t prom_mem_size[MAX_PROM_MEM] __initdata; > +static unsigned int nr_prom_mem __initdata; > + > /* > * For ARC firmware memory functions the unit of meassuring memory is always > * a 4k page of memory > @@ -129,6 +134,7 @@ void __init prom_meminit(void) > } > #endif > > + nr_prom_mem = 0; > p = PROM_NULL_MDESC; > while ((p = ArcGetMemoryDescriptor(p))) { > unsigned long base, size; > @@ -139,6 +145,12 @@ void __init prom_meminit(void) > type = prom_memtype_classify(p->type); > > add_memory_region(base, size, type); > + > + if (type == BOOT_MEM_ROM_DATA) { > + prom_mem_base[nr_prom_mem] = base; > + prom_mem_size[nr_prom_mem] = size; > + nr_prom_mem++; Are you sure, that five prom-mem regions is enough? What about adding a sanity check here so no to exceed the array size? -Sergey > + } > } > } > > @@ -150,12 +162,8 @@ void __init prom_free_prom_memory(void) > if (prom_flags & PROM_FLAG_DONT_FREE_TEMP) > return; > > - for (i = 0; i < boot_mem_map.nr_map; i++) { > - if (boot_mem_map.map[i].type != BOOT_MEM_ROM_DATA) > - continue; > - > - addr = boot_mem_map.map[i].addr; > + for (i = 0; i < nr_prom_mem; i++) { > free_init_pages("prom memory", > - addr, addr + boot_mem_map.map[i].size); > + prom_mem_base[i], prom_mem_base[i] + prom_mem_size[i]); > } > } > -- > 2.22.0 >
On Wed, Aug 14, 2019 at 03:03:41PM +0300, Serge Semin wrote: > On Thu, Aug 08, 2019 at 03:50:09PM +0800, Jiaxun Yang wrote: > > boot_mem_map is nolonger exist so we need to maintain a list > > of prom memory by ourselves. > > > > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> > > --- > > arch/mips/fw/arc/memory.c | 20 ++++++++++++++------ > > 1 file changed, 14 insertions(+), 6 deletions(-) > > > > diff --git a/arch/mips/fw/arc/memory.c b/arch/mips/fw/arc/memory.c > > index 429b7f8d2aeb..02e954b3700e 100644 > > --- a/arch/mips/fw/arc/memory.c > > +++ b/arch/mips/fw/arc/memory.c > > @@ -27,6 +27,11 @@ > > > > #undef DEBUG > > > > +#define MAX_PROM_MEM 5 > > +static phys_addr_t prom_mem_base[MAX_PROM_MEM] __initdata; > > +static phys_addr_t prom_mem_size[MAX_PROM_MEM] __initdata; > > +static unsigned int nr_prom_mem __initdata; > > + > > /* > > * For ARC firmware memory functions the unit of meassuring memory is always > > * a 4k page of memory > > @@ -129,6 +134,7 @@ void __init prom_meminit(void) > > } > > #endif > > > > + nr_prom_mem = 0; > > p = PROM_NULL_MDESC; > > while ((p = ArcGetMemoryDescriptor(p))) { > > unsigned long base, size; > > @@ -139,6 +145,12 @@ void __init prom_meminit(void) > > type = prom_memtype_classify(p->type); > > > > add_memory_region(base, size, type); > > + > > + if (type == BOOT_MEM_ROM_DATA) { > > + prom_mem_base[nr_prom_mem] = base; > > + prom_mem_size[nr_prom_mem] = size; > > + nr_prom_mem++; > > Are you sure, that five prom-mem regions is enough? it's not enough: ARCH: Microsoft-Jazz PROMLIB: ARC firmware Version 1 Revision 1 CPU revision is: 00000430 FPU revision is: 00000500 Determined physical RAM map: memory: 00054000 @ 00000000 (reserved) memory: 0002c000 @ 00054000 (usable) memory: 0001f000 @ 007e0000 (ROM data) memory: 007b2000 @ 007ff000 (usable) memory: 0004f000 @ 00fb1000 (ROM data) memory: 01000000 @ 01000000 (usable) memory: 00323000 @ 00080000 (reserved) memory: 0043d000 @ 003a3000 (usable) that's from a Olivetti M700 system. Thomas.
On 2019/8/14 下午8:03, Serge Semin wrote: > On Thu, Aug 08, 2019 at 03:50:09PM +0800, Jiaxun Yang wrote: >> boot_mem_map is nolonger exist so we need to maintain a list >> of prom memory by ourselves. >> >> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> >> --- >> arch/mips/fw/arc/memory.c | 20 ++++++++++++++------ >> 1 file changed, 14 insertions(+), 6 deletions(-) >> >> diff --git a/arch/mips/fw/arc/memory.c b/arch/mips/fw/arc/memory.c >> index 429b7f8d2aeb..02e954b3700e 100644 >> --- a/arch/mips/fw/arc/memory.c >> +++ b/arch/mips/fw/arc/memory.c >> @@ -27,6 +27,11 @@ >> >> #undef DEBUG >> >> +#define MAX_PROM_MEM 5 >> +static phys_addr_t prom_mem_base[MAX_PROM_MEM] __initdata; >> +static phys_addr_t prom_mem_size[MAX_PROM_MEM] __initdata; >> +static unsigned int nr_prom_mem __initdata; >> + >> /* >> * For ARC firmware memory functions the unit of meassuring memory is always >> * a 4k page of memory >> @@ -129,6 +134,7 @@ void __init prom_meminit(void) >> } >> #endif >> >> + nr_prom_mem = 0; >> p = PROM_NULL_MDESC; >> while ((p = ArcGetMemoryDescriptor(p))) { >> unsigned long base, size; >> @@ -139,6 +145,12 @@ void __init prom_meminit(void) >> type = prom_memtype_classify(p->type); >> >> add_memory_region(base, size, type); >> + >> + if (type == BOOT_MEM_ROM_DATA) { >> + prom_mem_base[nr_prom_mem] = base; >> + prom_mem_size[nr_prom_mem] = size; >> + nr_prom_mem++; > Are you sure, that five prom-mem regions is enough? What about adding > a sanity check here so no to exceed the array size? Five should be enough, as far as I know yamon will only allocate one or two. But you are right, add a sanity check would be better. - Jiaxun > > -Sergey > >> + } >> } >> } >> >> @@ -150,12 +162,8 @@ void __init prom_free_prom_memory(void) >> if (prom_flags & PROM_FLAG_DONT_FREE_TEMP) >> return; >> >> - for (i = 0; i < boot_mem_map.nr_map; i++) { >> - if (boot_mem_map.map[i].type != BOOT_MEM_ROM_DATA) >> - continue; >> - >> - addr = boot_mem_map.map[i].addr; >> + for (i = 0; i < nr_prom_mem; i++) { >> free_init_pages("prom memory", >> - addr, addr + boot_mem_map.map[i].size); >> + prom_mem_base[i], prom_mem_base[i] + prom_mem_size[i]); >> } >> } >> -- >> 2.22.0 >>
diff --git a/arch/mips/fw/arc/memory.c b/arch/mips/fw/arc/memory.c index 429b7f8d2aeb..02e954b3700e 100644 --- a/arch/mips/fw/arc/memory.c +++ b/arch/mips/fw/arc/memory.c @@ -27,6 +27,11 @@ #undef DEBUG +#define MAX_PROM_MEM 5 +static phys_addr_t prom_mem_base[MAX_PROM_MEM] __initdata; +static phys_addr_t prom_mem_size[MAX_PROM_MEM] __initdata; +static unsigned int nr_prom_mem __initdata; + /* * For ARC firmware memory functions the unit of meassuring memory is always * a 4k page of memory @@ -129,6 +134,7 @@ void __init prom_meminit(void) } #endif + nr_prom_mem = 0; p = PROM_NULL_MDESC; while ((p = ArcGetMemoryDescriptor(p))) { unsigned long base, size; @@ -139,6 +145,12 @@ void __init prom_meminit(void) type = prom_memtype_classify(p->type); add_memory_region(base, size, type); + + if (type == BOOT_MEM_ROM_DATA) { + prom_mem_base[nr_prom_mem] = base; + prom_mem_size[nr_prom_mem] = size; + nr_prom_mem++; + } } } @@ -150,12 +162,8 @@ void __init prom_free_prom_memory(void) if (prom_flags & PROM_FLAG_DONT_FREE_TEMP) return; - for (i = 0; i < boot_mem_map.nr_map; i++) { - if (boot_mem_map.map[i].type != BOOT_MEM_ROM_DATA) - continue; - - addr = boot_mem_map.map[i].addr; + for (i = 0; i < nr_prom_mem; i++) { free_init_pages("prom memory", - addr, addr + boot_mem_map.map[i].size); + prom_mem_base[i], prom_mem_base[i] + prom_mem_size[i]); } }
boot_mem_map is nolonger exist so we need to maintain a list of prom memory by ourselves. Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> --- arch/mips/fw/arc/memory.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)