From 9831244cb8b3e72aa03851cfa73819e2964de330 Mon Sep 17 00:00:00 2001 From: "Ronald G. Minnich" Date: Fri, 12 Feb 2016 22:37:48 +0000 Subject: emulation/qemu-power8: initial mainboard and arch commit This builds and produces an image. The next step is to get a 'halt' instruction into the boot block and then attach with qemu. I can't get the powerpc64le-linux-gnu-ld.bfd to recognize any output arch but powerpc. That makes no sense to me. Change-Id: Ia2a5fe07a1457e7b6974ab1473539c7447d7a449 Signed-off-by: Ronald G. Minnich Reviewed-on: https://review.coreboot.org/13704 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth --- src/mainboard/emulation/qemu-power8/Kconfig | 53 ++++++++++++++++++++ src/mainboard/emulation/qemu-power8/Kconfig.name | 2 + src/mainboard/emulation/qemu-power8/Makefile.inc | 25 ++++++++++ src/mainboard/emulation/qemu-power8/board_info.txt | 2 + src/mainboard/emulation/qemu-power8/bootblock.c | 29 +++++++++++ src/mainboard/emulation/qemu-power8/cbmem.c | 25 ++++++++++ src/mainboard/emulation/qemu-power8/devicetree.cb | 17 +++++++ src/mainboard/emulation/qemu-power8/mainboard.c | 36 ++++++++++++++ src/mainboard/emulation/qemu-power8/memlayout.ld | 29 +++++++++++ src/mainboard/emulation/qemu-power8/romstage.c | 23 +++++++++ src/mainboard/emulation/qemu-power8/uart.c | 57 ++++++++++++++++++++++ 11 files changed, 298 insertions(+) create mode 100644 src/mainboard/emulation/qemu-power8/Kconfig create mode 100644 src/mainboard/emulation/qemu-power8/Kconfig.name create mode 100644 src/mainboard/emulation/qemu-power8/Makefile.inc create mode 100644 src/mainboard/emulation/qemu-power8/board_info.txt create mode 100644 src/mainboard/emulation/qemu-power8/bootblock.c create mode 100644 src/mainboard/emulation/qemu-power8/cbmem.c create mode 100644 src/mainboard/emulation/qemu-power8/devicetree.cb create mode 100644 src/mainboard/emulation/qemu-power8/mainboard.c create mode 100644 src/mainboard/emulation/qemu-power8/memlayout.ld create mode 100644 src/mainboard/emulation/qemu-power8/romstage.c create mode 100644 src/mainboard/emulation/qemu-power8/uart.c (limited to 'src/mainboard/emulation/qemu-power8') diff --git a/src/mainboard/emulation/qemu-power8/Kconfig b/src/mainboard/emulation/qemu-power8/Kconfig new file mode 100644 index 0000000000..556322aae9 --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/Kconfig @@ -0,0 +1,53 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2014 Google Inc. +## +## This software is licensed under the terms of the GNU General Public +## License version 2, as published by the Free Software Foundation, and +## may be copied, distributed, and modified under those terms. +## +## 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. + +# To execute, do: +# qemu-system-?? + +if BOARD_EMULATION_QEMU_POWER8 + +config BOARD_SPECIFIC_OPTIONS # dummy + def_bool y + select BOARD_ROMSIZE_KB_4096 + select ARCH_BOOTBLOCK_POWER8 + select HAVE_UART_SPECIAL + select ARCH_POWER8 + +config MAINBOARD_DIR + string + default "emulation/qemu-power8" + +config MAINBOARD_PART_NUMBER + string + default "QEMU POWER8" + +config MAX_CPUS + int + default 1 + +config MAINBOARD_VENDOR + string + default "QEMU" + +config DRAM_SIZE_MB + int + default 32768 + +# Memory map for qemu power8 + +config RAMTOP + hex + default 0x1000000 + +endif # BOARD_EMULATION_QEMU_POWER8 diff --git a/src/mainboard/emulation/qemu-power8/Kconfig.name b/src/mainboard/emulation/qemu-power8/Kconfig.name new file mode 100644 index 0000000000..34fdddc2f8 --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/Kconfig.name @@ -0,0 +1,2 @@ +config BOARD_EMULATION_QEMU_POWER8 + bool "QEMU power8" diff --git a/src/mainboard/emulation/qemu-power8/Makefile.inc b/src/mainboard/emulation/qemu-power8/Makefile.inc new file mode 100644 index 0000000000..db005bbab8 --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/Makefile.inc @@ -0,0 +1,25 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2013 Google Inc. +## +## This software is licensed under the terms of the GNU General Public +## License version 2, as published by the Free Software Foundation, and +## may be copied, distributed, and modified under those terms. +## +## 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. + +bootblock-y += bootblock.c +bootblock-y += uart.c +romstage-y += cbmem.c +ramstage-y += cbmem.c +romstage-y += romstage.c +romstage-y += uart.c +ramstage-y += uart.c + +bootblock-y += memlayout.ld +romstage-y += memlayout.ld +ramstage-y += memlayout.ld diff --git a/src/mainboard/emulation/qemu-power8/board_info.txt b/src/mainboard/emulation/qemu-power8/board_info.txt new file mode 100644 index 0000000000..9f5782581d --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/board_info.txt @@ -0,0 +1,2 @@ +Board name: QEMU POWER8 +Category: emulation diff --git a/src/mainboard/emulation/qemu-power8/bootblock.c b/src/mainboard/emulation/qemu-power8/bootblock.c new file mode 100644 index 0000000000..d92c16951a --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/bootblock.c @@ -0,0 +1,29 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 Google Inc. + * + * 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; version 2 of the License. + * + * 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. + */ + +#include +#include +#include + +// the qemu part of all this is very, very non-hardware like. +// so it gets its own bootblock. +void main(void) +{ + if (IS_ENABLED(CONFIG_BOOTBLOCK_CONSOLE)) { + console_init(); + } + + run_romstage(); +} diff --git a/src/mainboard/emulation/qemu-power8/cbmem.c b/src/mainboard/emulation/qemu-power8/cbmem.c new file mode 100644 index 0000000000..bf5c0bcc79 --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/cbmem.c @@ -0,0 +1,25 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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. + */ + +#include + +void *cbmem_top(void) +{ + /* Top of cbmem is at lowest usable DRAM address below 4GiB. */ + /* For now, last 1M of 4G */ + void *ptr = (void *) ((1ULL << 32) - 1048576); + return ptr; +} + diff --git a/src/mainboard/emulation/qemu-power8/devicetree.cb b/src/mainboard/emulation/qemu-power8/devicetree.cb new file mode 100644 index 0000000000..6096ad0a6f --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/devicetree.cb @@ -0,0 +1,17 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2014 Google, Inc. +## +## This software is licensed under the terms of the GNU General Public +## License version 2, as published by the Free Software Foundation, and +## may be copied, distributed, and modified under those terms. +## +## 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. + +chip cpu/qemu-power8 + device cpu_cluster 0 on end +end diff --git a/src/mainboard/emulation/qemu-power8/mainboard.c b/src/mainboard/emulation/qemu-power8/mainboard.c new file mode 100644 index 0000000000..b7a7213d2c --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/mainboard.c @@ -0,0 +1,36 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2014 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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. + */ + +#include +#include +#include + +static void mainboard_enable(device_t dev) +{ + + if (!dev) { + printk(BIOS_EMERG, "No dev0; die\n"); + while (1) + ; + } + + // Where does ram live? + ram_resource(dev, 0, 2048, 32768); + cbmem_recovery(0); +} + +struct chip_operations mainboard_ops = { + .enable_dev = mainboard_enable, +}; diff --git a/src/mainboard/emulation/qemu-power8/memlayout.ld b/src/mainboard/emulation/qemu-power8/memlayout.ld new file mode 100644 index 0000000000..2daad3069d --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/memlayout.ld @@ -0,0 +1,29 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2014 Google Inc. + * + * 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; version 2 of the License. + * + * 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. + */ + +#include + +#include + +// TODO: fill in these blanks for Power8. +SECTIONS +{ + DRAM_START(0x0) + BOOTBLOCK(0x0, 64K) + ROMSTAGE(0x20000, 128K) + STACK(0x40000, 0x3ff00) + PRERAM_CBMEM_CONSOLE(0x80000, 8K) + RAMSTAGE(0x100000, 16M) +} diff --git a/src/mainboard/emulation/qemu-power8/romstage.c b/src/mainboard/emulation/qemu-power8/romstage.c new file mode 100644 index 0000000000..b6314ccd1c --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/romstage.c @@ -0,0 +1,23 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2013 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * 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. + */ + +#include +#include + +void main(void) +{ + console_init(); + run_ramstage(); +} diff --git a/src/mainboard/emulation/qemu-power8/uart.c b/src/mainboard/emulation/qemu-power8/uart.c new file mode 100644 index 0000000000..508d679c5c --- /dev/null +++ b/src/mainboard/emulation/qemu-power8/uart.c @@ -0,0 +1,57 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2014 Google Inc. + * + * 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; version 2 of the License. + * + * 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. + */ + +#include +#include +#include +#include + +static uint8_t *buf = (void *)0; +uintptr_t uart_platform_base(int idx) +{ + return (uintptr_t) buf; +} + +void uart_init(int idx) +{ +} + +unsigned char uart_rx_byte(int idx) +{ + return 0; +} + +void uart_tx_byte(int idx, unsigned char data) +{ + +} + +void uart_tx_flush(int idx) +{ +} + +#ifndef __PRE_RAM__ +void uart_fill_lb(void *data) +{ + struct lb_serial serial; + + serial.type = LB_SERIAL_TYPE_MEMORY_MAPPED; + serial.baseaddr = 0; + serial.baud = 115200; + serial.regwidth = 1; + lb_add_serial(&serial, data); + lb_add_console(LB_TAG_CONSOLE_SERIAL8250MEM, data); +} +#endif -- cgit v1.2.3