MIPS:Target support for qemu -M mips
authorVlad Lungu <vlad@comsys.ro>
Wed, 16 Jan 2008 17:27:51 +0000 (19:27 +0200)
committerShinya Kuribayashi <skuribay@ruby.dti.ne.jp>
Wed, 16 Jan 2008 23:28:08 +0000 (08:28 +0900)
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>
MAINTAINERS
MAKEALL
Makefile
board/qemu-mips/Makefile [new file with mode: 0644]
board/qemu-mips/README [new file with mode: 0644]
board/qemu-mips/config.mk [new file with mode: 0644]
board/qemu-mips/flash.c [new file with mode: 0644]
board/qemu-mips/lowlevel_init.S [new file with mode: 0644]
board/qemu-mips/qemu-mips.c [new file with mode: 0644]
board/qemu-mips/u-boot.lds [new file with mode: 0644]
include/configs/qemu-mips.h [new file with mode: 0644]

index fed45f74d5819f8f33cc7fac0ac0eedbbfd0706e..fb10ff7240457163afa7a455524291948ee0e6f2 100644 (file)
@@ -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:                                                     #
 #                                                                      #
diff --git a/MAKEALL b/MAKEALL
index 8e6713e46c63c3b5790b559c0b4c2249017cee6c..a4384b9aa9729dc1c25657082e1a3b9c9d777bc4 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -543,6 +543,7 @@ LIST_arm="          \
 
 LIST_mips4kc="         \
        incaip          \
+       qemu_mips       \
 "
 
 LIST_mips5kc="         \
index 1b3d2e64e277406bf026d84820cef51d21e93673..f45c326d0c2b772f3ec9a1cb295d3793c510626a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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 (file)
index 0000000..23be447
--- /dev/null
@@ -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 (file)
index 0000000..39570b1
--- /dev/null
@@ -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 (file)
index 0000000..4d4078a
--- /dev/null
@@ -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 (file)
index 0000000..e988272
--- /dev/null
@@ -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 (file)
index 0000000..28166bc
--- /dev/null
@@ -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 (file)
index 0000000..a6ad7b9
--- /dev/null
@@ -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 (file)
index 0000000..c2a8566
--- /dev/null
@@ -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 (file)
index 0000000..8fdb8e3
--- /dev/null
@@ -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 */