[coreboot] [PATCH][v3] read actual memory size in qemu-i386

Peter Stuge peter at stuge.se
Fri Jun 6 23:08:21 CEST 2008


On Fri, Jun 06, 2008 at 11:01:06PM +0200, Patrick Georgi wrote:
> Index: northbridge/intel/i440bxemulation/domain
> ===================================================================
> --- northbridge/intel/i440bxemulation/domain	(revision 689)
> +++ northbridge/intel/i440bxemulation/domain	(working copy)
> @@ -19,6 +19,5 @@
>   */
>  
>  {
> -	ramsize = "128";

Is this parameter now used anywhere else?


>  	device_operations = "i440bx_domain";
>  };
> Index: northbridge/intel/i440bxemulation/i440bx.c
> ===================================================================
> --- northbridge/intel/i440bxemulation/i440bx.c	(revision 689)
> +++ northbridge/intel/i440bxemulation/i440bx.c	(working copy)
> @@ -37,25 +37,40 @@
>   * such modified SOFTWARE should be clearly marked, so as not to confuse
>   * it with the version available from LANL.
>   */
> + /* dynamic qemu ram size detection
> +    Copyright 2008 Patrick Georgi <patrick at georgi-clan.de>
> +    Licensed under the terms of the GNU General Public License v2 or later
> + */

Maybe nicer to have the same style on all comments?


>  #include <types.h>
>  #include <console.h>
>  #include <device/device.h>
>  #include <device/pci.h>
>  #include <string.h>
> +#include <io.h>
>  #include "i440bx.h"
>  #include "statictree.h"
>  
>  /* Here are the ops for 440BX as a PCI domain. */
>  
> +static int inb_cmos(int port)
> +{
> +	outb(port, 0x70);
> +	return inb(0x71);
> +}
> +

Is this available somewhere else? Should it be?


>  static void pci_domain_set_resources(struct device *dev)
>  {
>  	struct device *mc_dev;
>  	u32 tolmk;		/* Top of low mem, Kbytes. */
>  	int idx;
> -	struct northbridge_intel_i440bxemulation_domain_config *device_configuration =
> -	    dev->device_configuration;
> -	tolmk = device_configuration->ramsize * 1024;
> +	/* read large mem memory descriptor
> +	   for <16 MB read the more detailed small mem descriptor
> +	   all values in kbytes */
> +	tolmk = ((inb_cmos(0x35)<<8) |inb_cmos(0x34)) * 64;
> +	if (tolmk <= 16 * 1024) {
> +		tolmk = (inb_cmos(0x31)<<8) |inb_cmos(0x30);
> +	}

I like this.


//Peter




More information about the coreboot mailing list