[U-Boot-Users] Target support for qemu -M mips
Shinya Kuribayashi
skuribay at ruby.dti.ne.jp
Wed Jan 16 14:08:42 CET 2008
Dear Vlad,
There are some coding style issues, but I'm fine with contents of the
patch itself. Please find comments below and resubmit.
Shinya
Vlad Lungu wrote:
> 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.
No leading spaces for descriptions
> Signed-off-by: Vlad Lungu <vlad at comsys.ro>
> ---
Please consider to add qemu target entry to MAINTAINERS file. I don't
think it's essential, but would be helpful.
> MAKEALL | 1 +
> Makefile | 6 ++
> board/qemu-mips/Makefile | 45 +++++++++++
> board/qemu-mips/README | 11 +++
> board/qemu-mips/config.mk | 11 +++
> board/qemu-mips/flash.c | 43 ++++++++++
> board/qemu-mips/lowlevel_init.S | 41 ++++++++++
> board/qemu-mips/qemu-mips.c | 89 +++++++++++++++++++++
> board/qemu-mips/u-boot.lds | 70 +++++++++++++++++
> include/configs/qemu-mips.h | 164
> +++++++++++++++++++++++++++++++++++++++
> 10 files changed, 481 insertions(+), 0 deletions(-)
> create mode 100644 board/qemu-mips/Makefile
> create mode 100644 board/qemu-mips/README
> create mode 100644 board/qemu-mips/config.mk
> create mode 100644 board/qemu-mips/flash.c
> create mode 100644 board/qemu-mips/lowlevel_init.S
> create mode 100644 board/qemu-mips/qemu-mips.c
> create mode 100644 board/qemu-mips/u-boot.lds
> create mode 100644 include/configs/qemu-mips.h
>
> diff --git a/MAKEALL b/MAKEALL
> index a02412b..7647d67 100755
> --- a/MAKEALL
> +++ b/MAKEALL
> @@ -524,6 +524,7 @@ LIST_arm=" \
>
> LIST_mips4kc=" \
> incaip \
> + qemu_mips \
> "
>
> LIST_mips5kc=" \
> diff --git a/Makefile b/Makefile
> index 1ff80b5..3e1b074 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2514,6 +2514,12 @@ pb1000_config : unconfig
> @echo "#define CONFIG_PB1000 1" >>$(obj)include/config.h
> @$(MKCONFIG) -a pb1x00 mips mips pb1x00
>
> +qemu_mips_config : unconfig
"qemu_mips_config:", no spaces, would be good for bash completion :-)
> + @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 0000000..23be447
> --- /dev/null
> +++ b/board/qemu-mips/Makefile
> @@ -0,0 +1,45 @@
> +#
> +# (C) Copyright 2003-2006
> +# Wolfgang Denk, DENX Software Engineering, wd at 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 0000000..39570b1
> --- /dev/null
> +++ b/board/qemu-mips/README
> @@ -0,0 +1,11 @@
> +By Vlad Lungu vlad at 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 0000000..61269ce
> --- /dev/null
> +++ b/board/qemu-mips/config.mk
> @@ -0,0 +1,11 @@
> +
needless empty line
> +#
> +# 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 0000000..49f0134
> --- /dev/null
> +++ b/board/qemu-mips/flash.c
> @@ -0,0 +1,43 @@
> +/*
> + * (C) Copyright 2003
> + * Wolfgang Denk, DENX Software Engineering, wd at 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>
> +#if 0
> +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH
> chips */
> +#endif
Please remove #if 0 - #endif
> +/*-----------------------------------------------------------------------
> + * flash_init()
> + *
> + * sets up flash_info and returns size of FLASH (bytes)
> + */
> +unsigned long flash_init (void)
I'd like to 'no space between function name and open parenthesis '('.
example)
$ linux/scripts/checkpatch.pl qemu-mips.patch says
WARNING: no space between function name and open parenthesis '('
#185: FILE: board/qemu-mips/flash.c:33:
+unsigned long flash_init (void)
WARNING: no space between function name and open parenthesis '('
#187: FILE: board/qemu-mips/flash.c:35:
+ printf ("Skipping flash_init\n");
ERROR: "foo * bar" should be "foo *bar"
#191: FILE: board/qemu-mips/flash.c:39:
+int write_buff ( void * info, uchar * src, ulong addr, ulong cnt)
WARNING: no space between function name and open parenthesis '('
#191: FILE: board/qemu-mips/flash.c:39:
+int write_buff ( void * info, uchar * src, ulong addr, ulong cnt)
ERROR: no space after that open parenthesis '('
#191: FILE: board/qemu-mips/flash.c:39:
+int write_buff ( void * info, uchar * src, ulong addr, ulong cnt)
WARNING: no space between function name and open parenthesis '('
#193: FILE: board/qemu-mips/flash.c:41:
+ printf ("write_buff not implemented\n");
and more... Please fix.
> +{
> + 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 0000000..28166bc
> --- /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 0000000..345bb95
> --- /dev/null
> +++ b/board/qemu-mips/qemu-mips.c
> @@ -0,0 +1,89 @@
> +/*
> + * (C) Copyright 2007
> + * Vlad Lungu vlad at 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;
> +}
> +
> +
don't add 2 newlines
> +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;
> +}
please fix a bad bracket and no leading tabs
> diff --git a/board/qemu-mips/u-boot.lds b/board/qemu-mips/u-boot.lds
> new file mode 100644
> index 0000000..8793320
> --- /dev/null
> +++ b/board/qemu-mips/u-boot.lds
> @@ -0,0 +1,70 @@
> +/*
> + * (C) Copyright 2003
> + * Wolfgang Denk Engineering, <wd at 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) }
> +
> + . = ALIGN(16);
> + _gp = .;
> +
> + .got : { + __got_start = .;
> + *(.got) + __got_end = .;
> + }
> +
> + . = ALIGN(4);
> + .sdata : { *(.sdata) }
> +
> + . = .;
> + __u_boot_cmd_start = .;
> + .u_boot_cmd : { *(.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 = .;
> +}
please update .lds to the latest board/dbau1x00/u-boot.lds, etc.
I'd like to see
. = .;
_gp = ALIGN(16) + 0x7ff0;
and
.u_boot_cmd : {
__u_boot_cmd_start = .;
*(.u_boot_cmd)
__u_boot_cmd_end = .;
}
and so on. I understand it works well without such changes, but it's
better to keep all target together.
> diff --git a/include/configs/qemu-mips.h b/include/configs/qemu-mips.h
> new file mode 100644
> index 0000000..1f93ad7
> --- /dev/null
> +++ b/include/configs/qemu-mips.h
> @@ -0,0 +1,164 @@
> +/*
> + * (C) Copyright 2003
> + * Wolfgang Denk, DENX Software Engineering, wd at 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) /* FIXME causes
> overflow in net.c */
> +
> +#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 */
For some reason, line wrapped due to Thunderbird. Sorry for ugliness.
More information about the U-Boot
mailing list