[OpenBIOS] r322 - openbios-devel/arch/ppc/qemu

svn at openbios.org svn at openbios.org
Tue Dec 23 21:36:45 CET 2008


Author: blueswirl
Date: 2008-12-23 21:36:45 +0100 (Tue, 23 Dec 2008)
New Revision: 322

Modified:
   openbios-devel/arch/ppc/qemu/init.c
   openbios-devel/arch/ppc/qemu/start.S
Log:
Get ram size from the configuration device

Modified: openbios-devel/arch/ppc/qemu/init.c
===================================================================
--- openbios-devel/arch/ppc/qemu/init.c	2008-12-23 18:32:42 UTC (rev 321)
+++ openbios-devel/arch/ppc/qemu/init.c	2008-12-23 20:36:45 UTC (rev 322)
@@ -152,6 +152,9 @@
 
         printk("CPUs: %x\n", temp);
 
+        temp = fw_cfg_read_i32(FW_CFG_RAM_SIZE);
+        printk("Memory: %dM\n", temp / 1024 / 1024);
+
         fw_cfg_read(FW_CFG_UUID, qemu_uuid, 16);
 
         printk("UUID: " UUID_FMT "\n", qemu_uuid[0], qemu_uuid[1], qemu_uuid[2],

Modified: openbios-devel/arch/ppc/qemu/start.S
===================================================================
--- openbios-devel/arch/ppc/qemu/start.S	2008-12-23 18:32:42 UTC (rev 321)
+++ openbios-devel/arch/ppc/qemu/start.S	2008-12-23 20:36:45 UTC (rev 322)
@@ -356,43 +356,30 @@
         isync
         blr
 
-	/* compute RAM size
-	 *
-	 * Exception vectors are beween 0x00000000 and 0x00004000
-	 * RAM size is limited to 2 MB (0x80000000)
-	 * MMIO and IO are after 0x80000000.
-	 * ROM is at 0xfff00000
-	 * so we can scan from 0x4000 to 0x80000000
-	 *
-	 */
+        /* Get RAM size from Qemu configuration device */
 
+#define CFG_ADDR 0xf0000510
+#define FW_CFG_RAM_SIZE         0x03
+
 compute_ramsize:
-	li	r3, 0x4000	/* start address */
+        lis     r9,HA(CFG_ADDR)
+        ori     r9,r9,LO(CFG_ADDR)
+        li      r0,FW_CFG_RAM_SIZE
+        sth     r0,0(r9)
+        lis     r9,HA(CFG_ADDR + 2)
+        ori     r9,r9,LO(CFG_ADDR + 2)
+        lbz     r1,0(r9)
+        lbz     r0,0(r9)
+        slwi    r0,r0,8
+        or      r1,r1,r0
+        lbz     r0,0(r9)
+        slwi    r0,r0,16
+        or      r1,r1,r0
+        lbz     r0,0(r9)
+        slwi    r0,r0,24
+        or      r3,r1,r0
+        blr
 
-	/* how many pages between 0x4000 and 0x80000000 */
-
-	lis	r4, 0x0007
-	ori	r4, r4, 0xfffc
-	mtctr	r4
-
-	/* pattern to write in memory */
-
-	lis	r4, 0x55aa
-	ori	r4, r4, 0x55aa
-
-memloop:
-	/* store and re-read pattern */
-
-	stw	r4, 0(r3)
-	sync
-	lwz	r0, 0(r3)
-	cmpw	cr7, r0, r4
-	bne	cr7, exit_memloop
-	addi	r3, r3, 4096	/* add page size */
-	bdnz	memloop
-exit_memloop:
-	blr
-
         /* Hard reset vector */
 	.section .romentry,"ax"
 	bl	_start




More information about the OpenBIOS mailing list