[OpenBIOS] [commit] r1022 - in trunk/openbios-devel: arch/sparc32 drivers

repository service svn at openbios.org
Tue Feb 8 23:06:54 CET 2011


Author: mcayland
Date: Tue Feb  8 23:06:54 2011
New Revision: 1022
URL: http://tracker.coreboot.org/trac/openbios/changeset/1022

Log:
Fix up /virtual-memory reg property on SPARC32.

Make it similar to the OBP output with 2 entries consisting of half the virtual address space.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>

Modified:
   trunk/openbios-devel/arch/sparc32/lib.c
   trunk/openbios-devel/drivers/iommu.c

Modified: trunk/openbios-devel/arch/sparc32/lib.c
==============================================================================
--- trunk/openbios-devel/arch/sparc32/lib.c	Tue Feb  8 23:06:51 2011	(r1021)
+++ trunk/openbios-devel/arch/sparc32/lib.c	Tue Feb  8 23:06:54 2011	(r1022)
@@ -373,7 +373,10 @@
 void
 ob_init_mmu(void)
 {
-    ucell *reg;
+    ucell *memreg;
+    ucell *virtreg;
+    phys_addr_t virtregsize;
+    ofmem_t *ofmem = ofmem_arch_get_private();
 
     init_romvec_mem();
 
@@ -391,18 +394,35 @@
     ofmem_register(s_phandle_memory, s_phandle_mmu);
 
     /* Setup /memory:reg (totphys) property */
-    reg = malloc(3 * sizeof(ucell));
-    ofmem_arch_encode_physaddr(reg, 0); /* physical base */
-    reg[2] = (ucell)ofmem_arch_get_phys_top(); /* size */
+    memreg = malloc(3 * sizeof(ucell));
+    ofmem_arch_encode_physaddr(memreg, 0); /* physical base */
+    memreg[2] = (ucell)ofmem->ramsize; /* size */
 
     push_str("/memory");
     fword("find-device");
-    PUSH(pointer2cell(reg));
+    PUSH(pointer2cell(memreg));
     PUSH(3 * sizeof(ucell));
     push_str("reg");
     PUSH_ph(s_phandle_memory);
     fword("encode-property");
 
+    /* Setup /virtual-memory:reg property */
+    virtregsize = ((phys_addr_t)((ucell)-1) + 1) / 2;
+    
+    virtreg = malloc(6 * sizeof(ucell));
+    ofmem_arch_encode_physaddr(virtreg, 0);
+    virtreg[2] = virtregsize;
+    ofmem_arch_encode_physaddr(&virtreg[3], virtregsize);
+    virtreg[5] = virtregsize;
+    
+    push_str("/virtual-memory");
+    fword("find-device");
+    PUSH(pointer2cell(virtreg));
+    PUSH(6 * sizeof(ucell));
+    push_str("reg");
+    PUSH_ph(s_phandle_mmu);
+    fword("encode-property");
+    
     PUSH(0);
     fword("active-package!");
     bind_func("pgmap@", pgmap_fetch);

Modified: trunk/openbios-devel/drivers/iommu.c
==============================================================================
--- trunk/openbios-devel/drivers/iommu.c	Tue Feb  8 23:06:51 2011	(r1021)
+++ trunk/openbios-devel/drivers/iommu.c	Tue Feb  8 23:06:54 2011	(r1022)
@@ -155,20 +155,6 @@
 
     regs = iommu_init(&ciommu, base);
 
-    push_str("/virtual-memory");
-    fword("find-device");
-
-    PUSH(base >> 32);
-    fword("encode-int");
-    PUSH(base & 0xffffffff);
-    fword("encode-int");
-    fword("encode+");
-    PUSH(IOMMU_REGS);
-    fword("encode-int");
-    fword("encode+");
-    push_str("reg");
-    fword("property");
-
     push_str("/iommu");
     fword("find-device");
     PUSH((unsigned long)regs);



More information about the OpenBIOS mailing list