[U-Boot] [PATCH v2] [x86] Add a basic implementation for a coreboot board

From: Gabe Black gabeblack@google.com
Signed-off-by: Gabe Black gabeblack@chromium.org --- Changes in v2: Get rid of some dead/unnecessary code in the Makefile and coreboot.c.
board/chromebook-x86/coreboot/Makefile | 53 +++++++++++++++ board/chromebook-x86/coreboot/coreboot.c | 77 ++++++++++++++++++++++ board/chromebook-x86/coreboot/coreboot_pci.c | 30 +++++++++ board/chromebook-x86/coreboot/coreboot_start.S | 29 ++++++++ board/chromebook-x86/coreboot/coreboot_start16.S | 46 +++++++++++++ 5 files changed, 235 insertions(+), 0 deletions(-) create mode 100644 board/chromebook-x86/coreboot/Makefile create mode 100644 board/chromebook-x86/coreboot/coreboot.c create mode 100644 board/chromebook-x86/coreboot/coreboot_pci.c create mode 100644 board/chromebook-x86/coreboot/coreboot_start.S create mode 100644 board/chromebook-x86/coreboot/coreboot_start16.S
diff --git a/board/chromebook-x86/coreboot/Makefile b/board/chromebook-x86/coreboot/Makefile new file mode 100644 index 0000000..dbeee50 --- /dev/null +++ b/board/chromebook-x86/coreboot/Makefile @@ -0,0 +1,53 @@ +# +# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. +# (C) Copyright 2008 +# Graeme Russ, graeme.russ@gmail.com. +# +# (C) Copyright 2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2002 +# Daniel Engstr�m, Omicron Ceti AB, daniel@omicron.se. +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB = $(obj)lib$(BOARD).o + +COBJS-y += coreboot.o +COBJS-$(CONFIG_PCI) += coreboot_pci.o +SOBJS-y += coreboot_start16.o +SOBJS-y += coreboot_start.o + +SRCS := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) +OBJS := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) + +$(LIB): $(obj).depend $(OBJS) $(SOBJS) + $(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/chromebook-x86/coreboot/coreboot.c b/board/chromebook-x86/coreboot/coreboot.c new file mode 100644 index 0000000..88e4223 --- /dev/null +++ b/board/chromebook-x86/coreboot/coreboot.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * (C) Copyright 2008 + * Graeme Russ, graeme.russ@gmail.com. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <asm/u-boot-x86.h> +#include <flash.h> +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN; + +/* + * Miscellaneous platform dependent initializations + */ +int board_early_init_f(void) +{ + return 0; +} + +int board_early_init_r(void) +{ + /* CPU Speed to 100MHz */ + gd->cpu_clk = 100000000; + + /* Crystal is 33.000MHz */ + gd->bus_clk = 33000000; + + return 0; +} + +void show_boot_progress(int val) +{ +} + + +int last_stage_init(void) +{ + return 0; +} + +#ifndef CONFIG_SYS_NO_FLASH +ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info) +{ + return 0; +} +#endif + +int board_eth_init(bd_t *bis) +{ + return pci_eth_init(bis); +} + +void setup_pcat_compatibility() +{ +} diff --git a/board/chromebook-x86/coreboot/coreboot_pci.c b/board/chromebook-x86/coreboot/coreboot_pci.c new file mode 100644 index 0000000..4ef7e5a --- /dev/null +++ b/board/chromebook-x86/coreboot/coreboot_pci.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * (C) Copyright 2008,2009 + * Graeme Russ, graeme.russ@gmail.com + * + * (C) Copyright 2002 + * Daniel Engstr�m, Omicron Ceti AB, daniel@omicron.se + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +void pci_init_board(void) +{ +} diff --git a/board/chromebook-x86/coreboot/coreboot_start.S b/board/chromebook-x86/coreboot/coreboot_start.S new file mode 100644 index 0000000..ef1e1d1 --- /dev/null +++ b/board/chromebook-x86/coreboot/coreboot_start.S @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * (C) Copyright 2008 + * Graeme Russ, graeme.russ@gmail.com. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* board early intialization */ +.globl early_board_init +early_board_init: + /* No 32-bit board specific initialisation */ + jmp early_board_init_ret diff --git a/board/chromebook-x86/coreboot/coreboot_start16.S b/board/chromebook-x86/coreboot/coreboot_start16.S new file mode 100644 index 0000000..1bd6294 --- /dev/null +++ b/board/chromebook-x86/coreboot/coreboot_start16.S @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. + * (C) Copyright 2008 + * Graeme Russ, graeme.russ@gmail.com. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * 16bit initialization code. + * This code have to map the area of the boot flash + * that is used by U-boot to its final destination. + */ + +.text +.section .start16, "ax" +.code16 +.globl board_init16 +board_init16: + jmp board_init16_ret + +.section .bios, "ax" +.code16 +.globl realmode_reset +.hidden realmode_reset +.type realmode_reset, @function +realmode_reset: + +1: hlt + jmp 1

i'm not terribly familiar with what it takes to make an x86 board, but i don't see anything jumping out of this patch.
i would note however that you should merge the boards.cfg update into this patch. merging one or the other doesn't make much sense, and there's no reason to keep them split.
+void setup_pcat_compatibility()
should be "(void)" -mike

The early startup code is in arch/x86/cpu/start.S or start16.S depending on the state of the CPU when u-boot is entered, and this code is called back into at various points during startup. You can see that those callbacks stubbed out where there's a label and then a jump back immediately after it, for instance here:
+board_init16: + jmp board_init16_ret
I have no problem merging the commits, but I'll wait for Graeme to weigh in since it's a little easier to merge them than to unmerge them.
Gabe
On Fri, Nov 4, 2011 at 3:24 PM, Mike Frysinger vapier@gentoo.org wrote:
i'm not terribly familiar with what it takes to make an x86 board, but i don't see anything jumping out of this patch.
i would note however that you should merge the boards.cfg update into this patch. merging one or the other doesn't make much sense, and there's no reason to keep them split.
+void setup_pcat_compatibility()
should be "(void)" -mike

On Friday 04 November 2011 18:33:16 Gabe Black wrote:
The early startup code is in arch/x86/cpu/start.S or start16.S depending on the state of the CPU when u-boot is entered, and this code is called back into at various points during startup. You can see that those callbacks stubbed out where there's a label and then a jump back immediately after it, for instance here:
when i said "jumping out", i meant "nothing jumps out at me as being wrong" ;) -mike

Hi Gabe,
On 05/11/11 09:33, Gabe Black wrote:
The early startup code is in arch/x86/cpu/start.S or start16.S depending on the state of the CPU when u-boot is entered, and this code is called back into at various points during startup. You can see that those callbacks stubbed out where there's a label and then a jump back immediately after it, for instance here:
+board_init16:
jmp board_init16_ret
I have no problem merging the commits, but I'll wait for Graeme to weigh in since it's a little easier to merge them than to unmerge them.
Well I guess that is my cue ;)
I agree that this should be a single commit. I have a few other comments...
I'm just about to send through another patchset (today) which will probably impact on your patches - In particular I am adding more config granularity to deal with the horrible mess that is board_init_r(). Now that the merge window is closed, I will create a 'next' branch which you can work from.
Since coreboot is doing all the low level initialisation, I don't see the need for any of the 16-bit start code (start_16.S). Let's look at CONFIG_SKIP_LOWLEVEL_INIT. I don't know how to _not_ compile a source file based on a define using the COBJS-$(CONFIG_<blah>) style.
Also, we may be performing a completely unnecessary relocation - I think we should be able to start at board_init_r(), but there may be some board_init_f() functions that we may still need to call. This seems a very close parallel to IPL/SPL - Have a look at what they do
From what I can gather, the likely scenario is that U-Boot will always be
loaded by coreboot on the chromebook, and it's likely that other coreboot motherboards may want to do the same. Therefore can you change: board/chromebook-x86/coreboot to: board/coreboot/chromebook-x86/
Regarding the empty functions, I know they are required to keep the linker happy. I see two options:
1) #ifdef the call sites 2) create weak stubs
I'm open to debate on the preferred approach
Regards,
Graeme
Gabe
On Fri, Nov 4, 2011 at 3:24 PM, Mike Frysinger <vapier@gentoo.org mailto:vapier@gentoo.org> wrote:
i'm not terribly familiar with what it takes to make an x86 board, but i don't see anything jumping out of this patch. i would note however that you should merge the boards.cfg update into this patch. merging one or the other doesn't make much sense, and there's no reason to keep them split. > +void setup_pcat_compatibility() should be "(void)" -mike

Dear Gabe Black,
In message 1320443602-2677-1-git-send-email-gabeblack@chromium.org you wrote:
--===============1488196431== Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit
From: Gabe Black gabeblack@google.com
Signed-off-by: Gabe Black gabeblack@chromium.org
Changes in v2: Get rid of some dead/unnecessary code in the Makefile and coreboot.c.
v2 ?????
...
+int board_early_init_f(void) +{
- return 0;
+}
Drop empty functions.
- /* CPU Speed to 100MHz */
- gd->cpu_clk = 100000000;
- /* Crystal is 33.000MHz */
- gd->bus_clk = 33000000;
You should use #defines for these.
+void show_boot_progress(int val) +{ +}
+int last_stage_init(void) +{
- return 0;
+}
+#ifndef CONFIG_SYS_NO_FLASH +ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info) +{
- return 0;
+} +#endif
Drop empty functions.
+void setup_pcat_compatibility() +{ +}
Drop empty functions.
+void pci_init_board(void) +{ +}
Drop empty functions.
Best regards,
Wolfgang Denk
participants (4)
-
Gabe Black
-
Graeme Russ
-
Mike Frysinger
-
Wolfgang Denk