From patchwork Wed Nov 30 06:07:55 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gabe Black X-Patchwork-Id: 128415 X-Patchwork-Delegate: graeme.russ@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id B5C66B6F68 for ; Wed, 30 Nov 2011 17:08:47 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E985F2839C; Wed, 30 Nov 2011 07:08:44 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ezfJxfH2ba9O; Wed, 30 Nov 2011 07:08:44 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E7AA42836E; Wed, 30 Nov 2011 07:08:42 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 37B6328353 for ; Wed, 30 Nov 2011 07:08:08 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id oH4K6OwZxplR for ; Wed, 30 Nov 2011 07:08:06 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-yx0-f202.google.com (mail-yx0-f202.google.com [209.85.213.202]) by theia.denx.de (Postfix) with ESMTPS id 1D9532835C for ; Wed, 30 Nov 2011 07:08:02 +0100 (CET) Received: by yenl2 with SMTP id l2so15566yen.3 for ; Tue, 29 Nov 2011 22:08:01 -0800 (PST) Received: by 10.100.233.40 with SMTP id f40mr206914anh.13.1322633281076; Tue, 29 Nov 2011 22:08:01 -0800 (PST) Received: by 10.100.233.40 with SMTP id f40mr206892anh.13.1322633280929; Tue, 29 Nov 2011 22:08:00 -0800 (PST) Received: from wpzn3.hot.corp.google.com (216-239-44-65.google.com [216.239.44.65]) by gmr-mx.google.com with ESMTPS id d63si313637yhe.2.2011.11.29.22.08.00 (version=TLSv1/SSLv3 cipher=AES128-SHA); Tue, 29 Nov 2011 22:08:00 -0800 (PST) Received: from wpaz5.hot.corp.google.com (wpaz5.hot.corp.google.com [172.24.198.69]) by wpzn3.hot.corp.google.com (Postfix) with ESMTPS id D257510004D; Tue, 29 Nov 2011 22:08:00 -0800 (PST) Received: from gabeblack.mtv.corp.google.com (gabeblack.mtv.corp.google.com [172.22.72.31]) by wpaz5.hot.corp.google.com with ESMTP id pAU67x3U004826; Tue, 29 Nov 2011 22:07:59 -0800 Received: by gabeblack.mtv.corp.google.com (Postfix, from userid 134246) id 5118F2010A3; Tue, 29 Nov 2011 22:07:59 -0800 (PST) From: Gabe Black To: U-Boot Mailing List Date: Tue, 29 Nov 2011 22:07:55 -0800 Message-Id: <1322633275-10542-5-git-send-email-gabeblack@chromium.org> X-Mailer: git-send-email 1.7.3.1 In-Reply-To: <1322633275-10542-1-git-send-email-gabeblack@chromium.org> References: <1322633275-10542-1-git-send-email-gabeblack@chromium.org> X-System-Of-Record: true Subject: [U-Boot] [PATCH 4/4] x86: Add infrastructure to extract an e820 table from the coreboot tables X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Signed-off-by: Gabe Black --- arch/x86/cpu/coreboot/sdram.c | 32 ++++++++++++++++++++++++++------ arch/x86/include/asm/zimage.h | 5 +++++ arch/x86/lib/zimage.c | 10 ++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/arch/x86/cpu/coreboot/sdram.c b/arch/x86/cpu/coreboot/sdram.c index b5b086b..ce73467 100644 --- a/arch/x86/cpu/coreboot/sdram.c +++ b/arch/x86/cpu/coreboot/sdram.c @@ -23,6 +23,8 @@ */ #include +#include +#include #include #include #include @@ -30,18 +32,36 @@ DECLARE_GLOBAL_DATA_PTR; +unsigned install_e820_map(unsigned max_entries, struct e820entry *entries) +{ + int i; + + unsigned num_entries = min(lib_sysinfo.n_memranges, max_entries); + if (num_entries < lib_sysinfo.n_memranges) { + printf("Warning: Limiting e820 map to %d entries.\n", + num_entries); + } + for (i = 0; i < num_entries; i++) { + struct memrange *memrange = &lib_sysinfo.memrange[i]; + + entries[i].addr = memrange->base; + entries[i].size = memrange->size; + entries[i].type = memrange->type; + } + return num_entries; +} + int dram_init_f(void) { int i; phys_size_t ram_size = 0; + for (i = 0; i < lib_sysinfo.n_memranges; i++) { - unsigned long long end = \ - lib_sysinfo.memrange[i].base + - lib_sysinfo.memrange[i].size; - if (lib_sysinfo.memrange[i].type == CB_MEM_RAM && - end > ram_size) { + struct memrange *memrange = &lib_sysinfo.memrange[i]; + unsigned long long end = memrange->base + memrange->size; + + if (memrange->type == CB_MEM_RAM && end > ram_size) ram_size = end; - } } gd->ram_size = ram_size; if (ram_size == 0) diff --git a/arch/x86/include/asm/zimage.h b/arch/x86/include/asm/zimage.h index a02637f..b172048 100644 --- a/arch/x86/include/asm/zimage.h +++ b/arch/x86/include/asm/zimage.h @@ -24,6 +24,8 @@ #ifndef _ASM_ZIMAGE_H_ #define _ASM_ZIMAGE_H_ +#include + /* linux i386 zImage/bzImage header. Offsets relative to * the start of the image */ @@ -65,6 +67,9 @@ #define BZIMAGE_LOAD_ADDR 0x100000 #define ZIMAGE_LOAD_ADDR 0x10000 +/* Implementation defined function to install an e820 map. */ +unsigned install_e820_map(unsigned max_entries, struct e820entry *); + void *load_zimage(char *image, unsigned long kernel_size, unsigned long initrd_addr, unsigned long initrd_size, int auto_boot); diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index 6843ff6..1fde13f 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -51,6 +51,16 @@ #define COMMAND_LINE_SIZE 2048 +unsigned generic_install_e820_map(unsigned max_entries, + struct e820entry *entries) +{ + return 0; +} + +unsigned install_e820_map(unsigned max_entries, + struct e820entry *entries) + __attribute__((weak, alias("generic_install_e820_map"))); + static void build_command_line(char *command_line, int auto_boot) { char *env_command_line;