Author: mcayland Date: Thu Dec 30 14:56:24 2010 New Revision: 995 URL: http://tracker.coreboot.org/trac/openbios/changeset/995
Log: Introduce ofmem_arch_get_phys_top() for specifying the top of physical memory in OFMEM.
At the same time, teach OFMEM to make use of it when calculating the /memory available property.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk
Modified: trunk/openbios-devel/arch/ppc/qemu/ofmem.c trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c trunk/openbios-devel/include/libopenbios/ofmem.h trunk/openbios-devel/libopenbios/ofmem_common.c
Modified: trunk/openbios-devel/arch/ppc/qemu/ofmem.c ============================================================================== --- trunk/openbios-devel/arch/ppc/qemu/ofmem.c Thu Dec 30 14:56:20 2010 (r994) +++ trunk/openbios-devel/arch/ppc/qemu/ofmem.c Thu Dec 30 14:56:24 2010 (r995) @@ -115,6 +115,13 @@ return IO_BASE; }
+phys_addr_t ofmem_arch_get_phys_top(void) +{ + ofmem_t *ofmem = ofmem_arch_get_private(); + + return ofmem->ramsize; +} + void ofmem_arch_unmap_pages(ucell virt, ucell size) { /* kill page mappings in provided range */
Modified: trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c ============================================================================== --- trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c Thu Dec 30 14:56:20 2010 (r994) +++ trunk/openbios-devel/arch/sparc64/ofmem_sparc64.c Thu Dec 30 14:56:24 2010 (r995) @@ -63,6 +63,13 @@ return (ucell)TOP_OF_RAM; }
+phys_addr_t ofmem_arch_get_phys_top(void) +{ + ofmem_t *ofmem = ofmem_arch_get_private(); + + return ofmem->ramsize; +} + retain_t *ofmem_arch_get_retained(void) { /* Retained area is at the top of physical RAM */
Modified: trunk/openbios-devel/include/libopenbios/ofmem.h ============================================================================== --- trunk/openbios-devel/include/libopenbios/ofmem.h Thu Dec 30 14:56:20 2010 (r994) +++ trunk/openbios-devel/include/libopenbios/ofmem.h Thu Dec 30 14:56:24 2010 (r995) @@ -62,6 +62,7 @@ extern void* ofmem_arch_get_malloc_base(void); extern ucell ofmem_arch_get_heap_top(void); extern ucell ofmem_arch_get_virt_top(void); +extern phys_addr_t ofmem_arch_get_phys_top(void); extern retain_t* ofmem_arch_get_retained(void); extern int ofmem_arch_get_physaddr_cellsize(void); extern int ofmem_arch_encode_physaddr(ucell *p, phys_addr_t value);
Modified: trunk/openbios-devel/libopenbios/ofmem_common.c ============================================================================== --- trunk/openbios-devel/libopenbios/ofmem_common.c Thu Dec 30 14:56:20 2010 (r994) +++ trunk/openbios-devel/libopenbios/ofmem_common.c Thu Dec 30 14:56:24 2010 (r995) @@ -354,7 +354,7 @@ ofmem_t *ofmem = ofmem_arch_get_private();
ofmem_update_memory_available(s_phandle_memory, ofmem->phys_range, - &phys_range_prop, &phys_range_prop_size, &phys_range_prop_used, get_ram_size()); + &phys_range_prop, &phys_range_prop_size, &phys_range_prop_used, ofmem_arch_get_phys_top()); ofmem_update_memory_available(s_phandle_mmu, ofmem->virt_range, &virt_range_prop, &virt_range_prop_size, &virt_range_prop_used, -1ULL); ofmem_update_mmu_translations(); @@ -481,7 +481,7 @@ }
static phys_addr_t ofmem_claim_phys_( phys_addr_t phys, ucell size, ucell align, - ucell min, ucell max, int reverse ) + phys_addr_t min, phys_addr_t max, int reverse ) { ofmem_t *ofmem = ofmem_arch_get_private(); if( !align ) { @@ -511,7 +511,7 @@ " align=" FMT_ucellx "\n", phys, size, align);
- return ofmem_claim_phys_( phys, size, align, 0, get_ram_size(), 0 ); + return ofmem_claim_phys_( phys, size, align, 0, ofmem_arch_get_phys_top(), 0 ); }
static ucell ofmem_claim_virt_( ucell virt, ucell size, ucell align, @@ -591,7 +591,7 @@ } else { if( align < 0x1000 ) align = 0x1000; - phys = ofmem_claim_phys_( addr, size, align, 0, get_ram_size(), 1 /* reverse */ ); + phys = ofmem_claim_phys_( addr, size, align, 0, ofmem_arch_get_phys_top(), 1 /* reverse */ ); virt = ofmem_claim_virt_( addr, size, align, 0, get_ram_size(), 1 /* reverse */ ); if( phys == -1 || virt == -1 ) { OFMEM_TRACE("ofmem_claim failed\n");