On Thu, Dec 30, 2010 at 6:07 PM, Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk wrote:
This patch removes the SPARC32-specific map_pages() function from the IOMMU driver, plus switches obp_dumb_memalloc() over to use OFMEM. OFMEM property generation is enabled for the /memory and /virtual-memory nodes, and any remaining traces of the old memory variables are removed.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk
openbios-devel/arch/sparc32/lib.c | 69 +++++++++------------------ openbios-devel/drivers/iommu.c | 2 +- openbios-devel/include/libopenbios/ofmem.h | 1 - 3 files changed, 24 insertions(+), 48 deletions(-)
diff --git a/openbios-devel/arch/sparc32/lib.c b/openbios-devel/arch/sparc32/lib.c index 74ac5e7..6b51f1c 100644 --- a/openbios-devel/arch/sparc32/lib.c +++ b/openbios-devel/arch/sparc32/lib.c @@ -53,8 +53,6 @@ struct mem { char *curp; };
-static struct mem cmem; /* Current memory, virtual */ -static struct mem cio; /* Current I/O space */ struct mem cdvmem; /* Current device virtual memory space */
unsigned int va_shift; @@ -190,7 +188,7 @@ find_pte(unsigned long va, int alloc) return pa2va(pa); }
-void +static void map_pages(phys_addr_t phys, unsigned long virt, unsigned long size, unsigned long mode) { @@ -353,29 +351,19 @@ void ofmem_arch_early_map_pages(phys_addr_t phys, ucell virt, ucell size, ucell
char *obp_dumb_memalloc(char *va, unsigned int size) {
- size = (size + 7) & ~7;
- // XXX should use normal memory alloc
- totavail[0].num_bytes -= size;
- DPRINTF("obp_dumb_memalloc va 0x%p size %x at 0x%x\n", va, size,
- totavail[0].num_bytes);
- // If va is null, the allocator is supposed to pick a "suitable" address.
- // (See OpenSolaric prom_alloc.c) There's not any real guidance as
- // to what might be "suitable". So we mimic the behavior of a Sun boot
- // ROM.
- if (va == NULL) {
- va = (char *)(totmap[0].start_adr - size);
- totmap[0].start_adr -= size;
- totmap[0].num_bytes += size;
- DPRINTF("obp_dumb_memalloc req null -> 0x%p\n", va);
- }
- phys_addr_t phys;
- ucell virt;
- /* Claim physical memory */
- phys = ofmem_claim_phys(-1, size, CONFIG_OFMEM_MALLOC_ALIGN);
- /* Claim virtual memory */
- virt = ofmem_claim_virt(pointer2cell(va), size, 0);
- map_pages(totavail[0].num_bytes, (unsigned long)va, size, ofmem_arch_default_translation_mode(totavail[0].num_bytes));
- /* Map the memory */
- ofmem_map(phys, virt, size, ofmem_arch_default_translation_mode(phys));
- update_memory_properties();
- return va;
- return cell2pointer(virt);
}
void obp_dumb_memfree(__attribute__((unused))char *va, @@ -387,6 +375,9 @@ void obp_dumb_memfree(__attribute__((unused))char *va, void ob_init_mmu(void) {
- ucell *reg;
- ofmem_t *ofmem;
This variable is not read after it has been initialized, so GCC 4.6.0 complains: CC target/arch/sparc32/lib.o ../arch/sparc32/lib.c: In function 'ob_init_mmu': ../arch/sparc32/lib.c:379:14: error: variable 'ofmem' set but not used [-Werror=unused-but-set-variable]
Please remove the variable: diff --git a/arch/sparc32/lib.c b/arch/sparc32/lib.c index 37b33f0..f9956ce 100644 --- a/arch/sparc32/lib.c +++ b/arch/sparc32/lib.c @@ -376,7 +376,6 @@ void ob_init_mmu(void) { ucell *reg; - ofmem_t *ofmem;
init_romvec_mem();
@@ -394,7 +393,7 @@ ob_init_mmu(void) ofmem_register(s_phandle_memory, s_phandle_mmu);
/* Setup /memory:reg (totphys) property */ - ofmem = ofmem_arch_get_private(); + ofmem_arch_get_private(); reg = malloc(3 * sizeof(ucell)); ofmem_arch_encode_physaddr(reg, 0); /* physical base */ reg[2] = (ucell)ofmem_arch_get_phys_top(); /* size */