
2013/2/2 Gabor Juhos juhosg@openwrt.org:
Add minimal support for the MIPS Malta CoreLV board emulated by Qemu. The only supported peripherial is the UART.
This is enough to boot U-Boot to the command prompt both in little and big endian mode.
Signed-off-by: Gabor Juhos juhosg@openwrt.org Cc: Daniel Schwierzeck daniel.schwierzeck@googlemail.com
Changes since v1:
- remove custom u-boot.lds file
- rebased against mips/testing
Changes since RFC: ---
Screenshot:
U-Boot 2013.01-00075-g80fa5c7 (Feb 02 2013 - 16:59:19)
Board: MIPS Malta CoreLV (Qemu) DRAM: 256 MiB Using default environment
In: serial Out: serial Err: serial qemu-malta # version
U-Boot 2013.01-00075-g80fa5c7 (Feb 02 2013 - 16:59:19) mips-openwrt-linux-uclibc-gcc (Linaro GCC 4.6-2012.12) 4.6.4 20121210 (prerelease) GNU ld (GNU Binutils) 2.22 qemu-malta # help ? - alias for 'help' base - print or set address offset bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console editenv - edit environment variable env - environment handling commands go - start application at address 'addr' help - print command description/usage iminfo - print header information for application image imxtract- extract a part of a multi-image itest - return true/false on integer compare loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing address) mtest - simple RAM read/write test mw - memory write (fill) nm - memory modify (constant address) printenv- print environment variables reset - Perform RESET of the CPU run - run commands in an environment variable setenv - set environment variables sleep - delay execution for some time source - run script from memory version - print monitor, compiler and linker version qemu-malta #
arch/mips/include/asm/malta.h | 16 ++++++ board/qemu-malta/Makefile | 45 +++++++++++++++++ board/qemu-malta/lowlevel_init.S | 19 +++++++ board/qemu-malta/qemu-malta.c | 20 ++++++++ boards.cfg | 2 + include/configs/qemu-malta.h | 104 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 206 insertions(+) create mode 100644 arch/mips/include/asm/malta.h create mode 100644 board/qemu-malta/Makefile create mode 100644 board/qemu-malta/lowlevel_init.S create mode 100644 board/qemu-malta/qemu-malta.c create mode 100644 include/configs/qemu-malta.h
diff --git a/arch/mips/include/asm/malta.h b/arch/mips/include/asm/malta.h new file mode 100644 index 0000000..b215164 --- /dev/null +++ b/arch/mips/include/asm/malta.h @@ -0,0 +1,16 @@ +/*
- Copyright (C) 2013 Gabor Juhos juhosg@openwrt.org
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License version 2 as published
- by the Free Software Foundation.
- */
+#ifndef _MIPS_ASM_MALTA_H +#define _MIPS_ASM_MALTA_H
+#define MALTA_IO_PORT_BASE 0x10000000
+#define MALTA_UART_BASE (MALTA_IO_PORT_BASE + 0x3f8)
+#endif /* _MIPS_ASM_MALTA_H */ diff --git a/board/qemu-malta/Makefile b/board/qemu-malta/Makefile new file mode 100644 index 0000000..6251bb8 --- /dev/null +++ b/board/qemu-malta/Makefile @@ -0,0 +1,45 @@ +# +# (C) Copyright 2003-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 = $(BOARD).o +SOBJS = lowlevel_init.o
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) +SOBJS := $(addprefix $(obj),$(SOBJS))
+$(LIB): $(OBJS) $(SOBJS)
$(call cmd_link_o_target, $(OBJS) $(SOBJS))
+#########################################################################
+# defines $(obj).depend target +include $(SRCTREE)/rules.mk
+sinclude $(obj).depend
+######################################################################### diff --git a/board/qemu-malta/lowlevel_init.S b/board/qemu-malta/lowlevel_init.S new file mode 100644 index 0000000..c5c5bd9 --- /dev/null +++ b/board/qemu-malta/lowlevel_init.S @@ -0,0 +1,19 @@ +/*
- Copyright (C) 2013 Gabor Juhos juhosg@openwrt.org
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License version 2 as published
- by the Free Software Foundation.
- */
+#include <asm/regdef.h>
.text
.set noreorder
.set mips32
.globl lowlevel_init
+lowlevel_init:
jr ra
nop
can't we use CONFIG_SKIP_LOWLEVEL_INIT and drop this file? We neither need to initialize a memory controller nor caches on Qemu.
diff --git a/board/qemu-malta/qemu-malta.c b/board/qemu-malta/qemu-malta.c new file mode 100644 index 0000000..9ba711d --- /dev/null +++ b/board/qemu-malta/qemu-malta.c @@ -0,0 +1,20 @@ +/*
- Copyright (C) 2013 Gabor Juhos juhosg@openwrt.org
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License version 2 as published
- by the Free Software Foundation.
- */
+#include <common.h>
+phys_size_t initdram(int board_type) +{
return CONFIG_SYS_MEM_SIZE;
+}
+int checkboard(void) +{
puts("Board: MIPS Malta CoreLV (Qemu)\n");
return 0;
+} diff --git a/boards.cfg b/boards.cfg index 98f7a14..7f919e5 100644 --- a/boards.cfg +++ b/boards.cfg @@ -426,6 +426,8 @@ qemu_mips mips mips32 qemu-mips - qemu_mipsel mips mips32 qemu-mips - - qemu-mips:SYS_LITTLE_ENDIAN qemu_mips64 mips mips64 qemu-mips - - qemu-mips64:SYS_BIG_ENDIAN qemu_mips64el mips mips64 qemu-mips - - qemu-mips64:SYS_LITTLE_ENDIAN +qemu_malta mips mips32 qemu-malta - - qemu-malta:MIPS32,SYS_BIG_ENDIAN +qemu_maltael mips mips32 qemu-malta - - qemu-malta:MIPS32,SYS_LITTLE_ENDIAN vct_platinum mips mips32 vct micronas - vct:VCT_PLATINUM vct_platinumavc mips mips32 vct micronas - vct:VCT_PLATINUMAVC vct_platinumavc_onenand mips mips32 vct micronas - vct:VCT_PLATINUMAVC,VCT_ONENAND diff --git a/include/configs/qemu-malta.h b/include/configs/qemu-malta.h new file mode 100644 index 0000000..c72c5dd --- /dev/null +++ b/include/configs/qemu-malta.h @@ -0,0 +1,104 @@ +/*
- Copyright (C) 2013 Gabor Juhos juhosg@openwrt.org
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License version 2 as published
- by the Free Software Foundation.
- */
+#ifndef _QEMU_MALTA_CONFIG_H +#define _QEMU_MALTA_CONFIG_H
+#include <asm/addrspace.h> +#include <asm/malta.h>
+/*
- System configuration
- */
+#define CONFIG_QEMU_MALTA
we should extend qemu-mips.h and define CONFIG_QEMU_MALTA respectively CONFIG_QEMU_MALTA in boards.cfg to avoid redundant code. All differences could be handled with these options.
+/*
- CPU Configuration
- */
+#define CONFIG_SYS_MHZ 250 /* arbitrary value */ +#define CONFIG_SYS_MIPS_TIMER_FREQ (CONFIG_SYS_MHZ * 1000000) +#define CONFIG_SYS_HZ 1000
+#define CONFIG_SYS_DCACHE_SIZE 16384 /* arbitrary value */ +#define CONFIG_SYS_ICACHE_SIZE 16384 /* arbitrary value */ +#define CONFIG_SYS_CACHELINE_SIZE 32 /* arbitrary value */
+#define CONFIG_SWAP_IO_SPACE
+/*
- Memory map
- */
+#define CONFIG_SYS_TEXT_BASE 0xbfc00000 /* Rom version */ +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_SDRAM_BASE 0x80000000 /* Cached addr */ +#define CONFIG_SYS_MEM_SIZE (256 * 1024 * 1024)
+#define CONFIG_SYS_INIT_SP_OFFSET 0x400000
+#define CONFIG_SYS_LOAD_ADDR 0x81000000 +#define CONFIG_SYS_MEMTEST_START 0x80100000 +#define CONFIG_SYS_MEMTEST_END 0x80800000
+#define CONFIG_SYS_MALLOC_LEN (128 * 1024) +#define CONFIG_SYS_BOOTPARAMS_LEN (128 * 1024)
+/*
- Console configuration
- */
+#if defined(CONFIG_SYS_LITTLE_ENDIAN) +#define CONFIG_SYS_PROMPT "qemu-maltael # " +#else +#define CONFIG_SYS_PROMPT "qemu-malta # " +#endif
+#define CONFIG_SYS_CBSIZE 256 +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS 16
+#define CONFIG_AUTO_COMPLETE +#define CONFIG_CMDLINE_EDITING
+/*
- Serial driver
- */
+#define CONFIG_BAUDRATE 115200
+#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE 1 +#define CONFIG_SYS_NS16550_CLK 115200 +#define CONFIG_SYS_NS16550_COM1 CKSEG1ADDR(MALTA_UART_BASE) +#define CONFIG_CONS_INDEX 1
+/*
- Environment
- */
+#define CONFIG_ENV_IS_NOWHERE +#define CONFIG_ENV_SIZE 0x10000
+/*
- Flash configuration
- */
+#define CONFIG_SYS_NO_FLASH
+/*
- Commands
- */
+#include <config_cmd_default.h>
+#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_LOADB +#undef CONFIG_CMD_LOADS +#undef CONFIG_CMD_NET +#undef CONFIG_CMD_NFS
+#define CONFIG_SYS_LONGHELP /* verbose help, undef to save memory */
+#endif /* _QEMU_MALTA_CONFIG_H */
1.7.10