diff options
| author | Vlad Lungu <vlad@comsys.ro> | 2008-01-16 19:27:51 +0200 | 
|---|---|---|
| committer | Shinya Kuribayashi <skuribay@ruby.dti.ne.jp> | 2008-01-17 08:28:08 +0900 | 
| commit | 0764c164fed6277d359cf132d55187ea34290114 (patch) | |
| tree | f6862e709f1ce4f12a0e5dd0cf9746fa5f7d88c7 | |
| parent | 4c9e98ace78e7de972adf7da7135a46ec0a4ee7e (diff) | |
| download | olio-uboot-2014.01-0764c164fed6277d359cf132d55187ea34290114.tar.xz olio-uboot-2014.01-0764c164fed6277d359cf132d55187ea34290114.zip | |
MIPS:Target support for qemu -M mips
With serial, NE2000, IDE support. Tested in big-endian mode.
Memory size hard-coded to 128M for now, so don't play with
the -m option.
Signed-off-by: Vlad Lungu <vlad@comsys.ro>
| -rw-r--r-- | MAINTAINERS | 3 | ||||
| -rwxr-xr-x | MAKEALL | 1 | ||||
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | board/qemu-mips/Makefile | 45 | ||||
| -rw-r--r-- | board/qemu-mips/README | 11 | ||||
| -rw-r--r-- | board/qemu-mips/config.mk | 10 | ||||
| -rw-r--r-- | board/qemu-mips/flash.c | 40 | ||||
| -rw-r--r-- | board/qemu-mips/lowlevel_init.S | 41 | ||||
| -rw-r--r-- | board/qemu-mips/qemu-mips.c | 89 | ||||
| -rw-r--r-- | board/qemu-mips/u-boot.lds | 72 | ||||
| -rw-r--r-- | include/configs/qemu-mips.h | 164 | 
11 files changed, 482 insertions, 0 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index fed45f74d..fb10ff724 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -583,6 +583,9 @@ Thomas Lange <thomas@corelatus.se>  	dbau1x00		MIPS32 Au1000  	gth2			MIPS32 Au1000 +Vlad Lungu <vlad@comsys.ro> +	qemu_mips		MIPS32 +  #########################################################################  # Nios-32 Systems:							#  #									# @@ -543,6 +543,7 @@ LIST_arm="		\  LIST_mips4kc="		\  	incaip		\ +	qemu_mips	\  "  LIST_mips5kc="		\ @@ -2601,6 +2601,12 @@ pb1000_config		:	unconfig  	@echo "#define CONFIG_PB1000 1" >>$(obj)include/config.h  	@$(MKCONFIG) -a pb1x00 mips mips pb1x00 +qemu_mips_config: unconfig +	@mkdir -p $(obj)include +	@ >$(obj)include/config.h +	@echo "#define CONFIG_QEMU_MIPS 1" >>$(obj)include/config.h +	@$(MKCONFIG) -a qemu-mips mips mips qemu-mips +  #########################################################################  ## MIPS64 5Kc  ######################################################################### diff --git a/board/qemu-mips/Makefile b/board/qemu-mips/Makefile new file mode 100644 index 000000000..23be44742 --- /dev/null +++ b/board/qemu-mips/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).a + +COBJS	= $(BOARD).o flash.o +SOBJS	= lowlevel_init.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	 $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/qemu-mips/README b/board/qemu-mips/README new file mode 100644 index 000000000..39570b13d --- /dev/null +++ b/board/qemu-mips/README @@ -0,0 +1,11 @@ +By Vlad Lungu vlad@comsys.ro 2007-Oct-01 +---------------------------------------- +Qemu is a full system emulator. See + +http://fabrice.bellard.free.fr/qemu + +Limitations & comments +---------------------- +Supports the "-m mips" configuration of qemu: serial,NE2000,IDE. +Support is big endian only for now (or at least this is what I tested). +Derived from au1x00 with a lot of things cut out. diff --git a/board/qemu-mips/config.mk b/board/qemu-mips/config.mk new file mode 100644 index 000000000..4d4078a40 --- /dev/null +++ b/board/qemu-mips/config.mk @@ -0,0 +1,10 @@ +# +# Qemu -M mips system emulator +# See http://fabrice.bellard.free.fr/qemu +# + +# ROM version +TEXT_BASE = 0xbfc00000 + +# RAM version +#TEXT_BASE = 0x80001000 diff --git a/board/qemu-mips/flash.c b/board/qemu-mips/flash.c new file mode 100644 index 000000000..e98827201 --- /dev/null +++ b/board/qemu-mips/flash.c @@ -0,0 +1,40 @@ +/* + * (C) Copyright 2003 + * 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 <common.h> +/*----------------------------------------------------------------------- + * flash_init() + * + * sets up flash_info and returns size of FLASH (bytes) + */ +unsigned long flash_init(void) +{ +	printf("Skipping flash_init\n"); +	return(0); +} + +int write_buff(void *info, uchar *src, ulong addr, ulong cnt) +{ +	printf("write_buff not implemented\n"); +	return(-1); +} diff --git a/board/qemu-mips/lowlevel_init.S b/board/qemu-mips/lowlevel_init.S new file mode 100644 index 000000000..28166bceb --- /dev/null +++ b/board/qemu-mips/lowlevel_init.S @@ -0,0 +1,41 @@ +/* Memory sub-system initialization code */ + +#include <config.h> +#include <version.h> +#include <asm/regdef.h> +#include <asm/mipsregs.h> + +	.text +	.set noreorder +	.set mips32 + +	.globl	lowlevel_init +lowlevel_init: + +	/* +	 * Step 2) Establish Status Register +	 * (set BEV, clear ERL, clear EXL, clear IE) +	 */ +	li	t1, 0x00400000 +	mtc0	t1, CP0_STATUS + +	/* +	 * Step 3) Establish CP0 Config0 +	 * (set K0=3) +	 */ +	li	t1, 0x00000003 +	mtc0	t1, CP0_CONFIG + +	/* +	 * Step 7) Establish Cause +	 * (set IV bit) +	 */ +	li	t1, 0x00800000 +	mtc0	t1, CP0_CAUSE + +	/* Establish Wired (and Random) */ +	mtc0	zero, CP0_WIRED +	nop + +	j	ra +	nop diff --git a/board/qemu-mips/qemu-mips.c b/board/qemu-mips/qemu-mips.c new file mode 100644 index 000000000..a6ad7b9ab --- /dev/null +++ b/board/qemu-mips/qemu-mips.c @@ -0,0 +1,89 @@ +/* + * (C) Copyright 2007 + * Vlad Lungu vlad@comsys.ro + * + * 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 <command.h> +#include <asm/mipsregs.h> +#include <asm/io.h> + +long int initdram(int board_type) +{ +	/* Sdram is setup by assembler code */ +	/* If memory could be changed, we should return the true value here */ +	return MEM_SIZE*1024*1024; +} + +int checkboard(void) +{ +	u32 proc_id; +	u32 config1; + +	proc_id = read_32bit_cp0_register(CP0_PRID); +	printf("Board: Qemu -M mips CPU: "); +	switch (proc_id) { +	case 0x00018000: +		printf("4Kc"); +		break; +	case 0x00018400: +		printf("4KEcR1"); +		break; +	case 0x00019000: +		printf("4KEc"); +		break; +	case 0x00019300: +		config1 = read_mips32_cp0_config1(); +		if (config1 & 1) +			printf("24Kf"); +		else +			printf("24Kc"); +		break; +	case 0x00019500: +		printf("34Kf"); +		break; +	case 0x00000400: +		printf("R4000"); +		break; +	case 0x00018100: +		config1 = read_mips32_cp0_config1(); +		if (config1 & 1) +			printf("5Kf"); +		else +			printf("5Kc"); +		break; +	case 0x000182a0: +		printf("20Kc"); +		break; + +	default: +		printf("unknown"); +	} +	printf(" proc_id=0x%x\n", proc_id); + +	return 0; +} + +int misc_init_r(void) +{ +	set_io_port_base(0); +	return 0; +} diff --git a/board/qemu-mips/u-boot.lds b/board/qemu-mips/u-boot.lds new file mode 100644 index 000000000..c2a85661e --- /dev/null +++ b/board/qemu-mips/u-boot.lds @@ -0,0 +1,72 @@ +/* + * (C) Copyright 2003 + * Wolfgang Denk 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 + */ + +/* +OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips") +*/ +OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips") +OUTPUT_ARCH(mips) +ENTRY(_start) +SECTIONS +{ +	. = 0x00000000; + +	. = ALIGN(4); +	.text       : +	{ +	  *(.text) +	} + +	. = ALIGN(4); +	.rodata  : { *(.rodata) } + +	. = ALIGN(4); +	.data  : { *(.data) } + +	. = .; +	_gp = ALIGN(16) +0x7ff0; + +	.got  : { +	__got_start = .; +		*(.got) +	__got_end = .; +	} + +	. = ALIGN(4); +	.sdata  : { *(.sdata) } + +	. = .; +	.u_boot_cmd : { +	__u_boot_cmd_start = .; +	*(.u_boot_cmd) +	__u_boot_cmd_end = .; +	} + +	uboot_end_data = .; +	num_got_entries = (__got_end - __got_start) >> 2; + +	. = ALIGN(4); +	.sbss  : { *(.sbss) } +	.bss  : { *(.bss) } +	uboot_end = .; +} diff --git a/include/configs/qemu-mips.h b/include/configs/qemu-mips.h new file mode 100644 index 000000000..8fdb8e35f --- /dev/null +++ b/include/configs/qemu-mips.h @@ -0,0 +1,164 @@ +/* + * (C) Copyright 2003 + * 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 + */ + +/* + * This file contains the configuration parameters for the dbau1x00 board. + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CONFIG_MIPS32		1  /* MIPS32 CPU core	*/ +#define CONFIG_QEMU_MIPS        1 +#define CONFIG_MISC_INIT_R + +#undef DEBUG + +/*IP address is default used by Qemu*/ +#define CONFIG_IPADDR		10.0.2.15    	     /* Our IP address */ +#define CONFIG_SERVERIP		10.0.2.2	     /* Server IP address*/ + +#define CONFIG_BOOTDELAY	10	/* autoboot after 10 seconds	*/ + +#define CONFIG_BAUDRATE		115200 + +/* valid baudrates */ +#define CFG_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 } + +#define	CONFIG_TIMESTAMP		/* Print image info with timestamp */ +#undef	CONFIG_BOOTARGS + +#define	CONFIG_EXTRA_ENV_SETTINGS					\ +	"addmisc=setenv bootargs ${bootargs} "				\ +		"console=ttyS0,${baudrate} "				\ +		"panic=1\0"						\ +	"bootfile=/tftpboot/vmlinux\0"				\ +	"load=tftp 80500000 ${u-boot}\0"				\ +	"" + +#define CONFIG_BOOTCOMMAND	"bootp;bootelf" + + +/* + * BOOTP options + */ +#define CONFIG_BOOTP_BOOTFILESIZE +#define CONFIG_BOOTP_BOOTPATH +#define CONFIG_BOOTP_GATEWAY +#define CONFIG_BOOTP_HOSTNAME + + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> + +#define CONFIG_CMD_ELF +#define CONFIG_CMD_FAT +#define CONFIG_CMD_EXT2 +#undef  CONFIG_CMD_IMLS +#undef  CONFIG_CMD_FLASH +#undef  CONFIG_CMD_LOADB +#undef  CONFIG_CMD_LOADS +#define CONFIG_CMD_DHCP + +#define CONFIG_DRIVER_NE2000 +#define CONFIG_DRIVER_NE2000_BASE	(0xb4000300) + +#define CFG_NO_FLASH +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE    1 +#define CFG_NS16550_CLK         115200 +#define CFG_NS16550_COM1        (0xb40003f8) +#define CONFIG_CONS_INDEX	1 + +#define CONFIG_CMD_IDE +#define CONFIG_DOS_PARTITION + +#define CFG_IDE_MAXBUS	2 +#define CFG_ATA_IDE0_OFFSET	(0x1f0) +#define CFG_ATA_IDE1_OFFSET	(0x170) +#define CFG_ATA_DATA_OFFSET	(0) +#define CFG_ATA_REG_OFFSET	(0) +#define CFG_ATA_BASE_ADDR	(0xb4000000) + +#define CFG_IDE_MAXDEVICE	(4) + +/* + * Miscellaneous configurable options + */ +#define	CFG_LONGHELP				/* undef to save memory      */ + +#define	CFG_PROMPT		"qemu-mips # "	/* Monitor Command Prompt    */ + +#define	CFG_CBSIZE		256		/* Console I/O Buffer Size   */ +#define	CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)  /* Print Buffer Size */ +#define	CFG_MAXARGS		16		/* max number of command args*/ + +#define CFG_MALLOC_LEN		128*1024 + +#define CFG_BOOTPARAMS_LEN	128*1024 + +#define CFG_MHZ			132 + +#define CFG_HZ                  (CFG_MHZ * 1000000) + +#define CFG_SDRAM_BASE		0x80000000     /* Cached addr */ + +#define	CFG_LOAD_ADDR		0x81000000     /* default load address	*/ + +#define CFG_MEMTEST_START	0x80100000 +#define CFG_MEMTEST_END		0x80800000 + +/*----------------------------------------------------------------------- + * FLASH and environment organization + */ + +/* The following #defines are needed to get flash environment right */ +#define	CFG_MONITOR_BASE	TEXT_BASE +#define	CFG_MONITOR_LEN		(192 << 10) + +#define CFG_INIT_SP_OFFSET	0x400000 + +/* We boot from this flash, selected with dip switch */ +#define CFG_FLASH_BASE		0xbfc00000 + +#define	CFG_ENV_IS_NOWHERE	1 + +/* Address and size of Primary Environment Sector	*/ +#define CFG_ENV_SIZE		0x10000 +#undef CONFIG_NET_MULTI + +#define MEM_SIZE 128 + +#undef CONFIG_MEMSIZE_IN_BYTES + +/*----------------------------------------------------------------------- + * Cache Configuration + */ +#define CFG_DCACHE_SIZE		16384 +#define CFG_ICACHE_SIZE		16384 +#define CFG_CACHELINE_SIZE	32 + +#endif	/* __CONFIG_H */ |