
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@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@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@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@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@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@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@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.