diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2013-12-08 19:07:22 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2013-12-08 19:07:22 +0100 |
commit | 6f2c1e1ed1d9ac59e8dda23d151d0085888498e8 (patch) | |
tree | 0498c98bcedf2a9f97fb75f6869acde02ee42f79 /target | |
parent | 18d3d19d929699d3f27c414090e86ed16669dc07 (diff) |
add support for microblaze architecture, tested with qemu-system-microblaze{,el}
Diffstat (limited to 'target')
23 files changed, 5123 insertions, 23 deletions
diff --git a/target/arch.lst b/target/arch.lst index 3556ee214..e2b207f5f 100644 --- a/target/arch.lst +++ b/target/arch.lst @@ -2,6 +2,7 @@ arm avr32 cris m68k +microblaze mips ppc ppc64 diff --git a/target/config/Config.in b/target/config/Config.in index f5cf3e120..e59b86010 100644 --- a/target/config/Config.in +++ b/target/config/Config.in @@ -7,6 +7,9 @@ config ADK_TARGET_KERNEL_VMLINUZ config ADK_TARGET_KERNEL_ZIMAGE boolean +config ADK_TARGET_KERNEL_LINUXBIN + boolean + config ADK_TARGET_KERNEL_IMAGE boolean @@ -17,6 +20,7 @@ config ADK_TARGET_KERNEL string default "zImage" if ADK_TARGET_KERNEL_ZIMAGE default "Image" if ADK_TARGET_KERNEL_IMAGE + default "simpleImage.system" if ADK_TARGET_KERNEL_LINUXBIN default "vmlinuz" if ADK_TARGET_KERNEL_VMLINUZ default "bzImage" if ADK_TARGET_KERNEL_BZIMAGE default "vmlinux" @@ -412,6 +416,9 @@ config ADK_CPU_MIPS32 config ADK_CPU_MIPS64 boolean +config ADK_CPU_MICROBLAZE + boolean + config ADK_CPU_RASPBERRY_PI boolean @@ -426,6 +433,8 @@ config ADK_TARGET_CPU_ARCH default "i686" if ADK_CPU_PENTIUM_M default "i686" if ADK_CPU_ATOM default "m68k" if ADK_LINUX_M68K + default "microblaze" if ADK_LINUX_MICROBLAZE && ADK_big + default "microblazeel" if ADK_LINUX_MICROBLAZE && ADK_little default "mips64" if ADK_LINUX_MIPS && ADK_big && ADK_TARGET_KERNEL64 default "mips64el" if ADK_LINUX_MIPS && ADK_little && ADK_TARGET_KERNEL64 default "mips" if ADK_LINUX_MIPS && ADK_big @@ -492,6 +501,8 @@ config ADK_TARGET_CMDLINE default "console=ttyS0,115200 console=tty0" if ADK_TARGET_SYSTEM_IBM_X40 default "console=ttyS0,115200 console=tty0" if ADK_TARGET_SYSTEM_INTEL_ATOM default "console=ttyS0,115200 console=tty0" if ADK_TARGET_SYSTEM_QEMU_I686 + default "console=ttyUL0" if ADK_TARGET_SYSTEM_QEMU_MICROBLAZE + default "console=ttyUL0" if ADK_TARGET_SYSTEM_QEMU_MICROBLAZEEL default "console=ttyS0,115200 console=tty0" if ADK_TARGET_SYSTEM_VBOX_I686 default "console=ttyS0,115200 console=tty0" if ADK_TARGET_QEMU_ARM_MODEL_SPITZ default "console=ttyAMA0 console=tty0" if ADK_TARGET_QEMU_ARM_MODEL_VERSATILE @@ -537,6 +548,7 @@ config ADK_TARGET_LIB_UCLIBC boolean select ADK_uclibc depends on \ + !ADK_LINUX_MICROBLAZE && \ !ADK_LINUX_SPARC64 && \ !ADK_LINUX_PPC64 && \ !ADK_LINUX_NATIVE @@ -551,10 +563,8 @@ config ADK_TARGET_LIB_EGLIBC ADK_LINUX_ARM || \ ADK_LINUX_ARMEB || \ ADK_LINUX_M68K || \ + ADK_LINUX_MICROBLAZE || \ ADK_LINUX_MIPS || \ - ADK_LINUX_MIPSEL || \ - ADK_LINUX_MIPS64 || \ - ADK_LINUX_MIPS64EL || \ ADK_LINUX_PPC || \ ADK_LINUX_PPC64 || \ ADK_LINUX_SH || \ @@ -573,10 +583,8 @@ config ADK_TARGET_LIB_GLIBC ADK_LINUX_ARM || \ ADK_LINUX_ARMEB || \ ADK_LINUX_M68K || \ + ADK_LINUX_MICROBLAZE || \ ADK_LINUX_MIPS || \ - ADK_LINUX_MIPSEL || \ - ADK_LINUX_MIPS64 || \ - ADK_LINUX_MIPS64EL || \ ADK_LINUX_PPC || \ ADK_LINUX_PPC64 || \ ADK_LINUX_SH || \ @@ -593,8 +601,8 @@ config ADK_TARGET_LIB_MUSL select ADK_musl depends on \ ADK_LINUX_ARM || \ + ADK_LINUX_MICROBLAZE || \ ADK_LINUX_MIPS || \ - ADK_LINUX_MIPSEL || \ ADK_LINUX_PPC || \ ADK_LINUX_X86 || \ ADK_LINUX_X86_64 @@ -633,6 +641,7 @@ config ADK_TARGET_ROOTFS_INITRAMFS ADK_HARDWARE_QEMU || \ ADK_TARGET_SYSTEM_ARANYM_M68K || \ ADK_LINUX_ARM || \ + ADK_LINUX_MICROBLAZE || \ ADK_LINUX_MIPS || \ ADK_LINUX_PPC || \ ADK_LINUX_SPARC || \ @@ -652,6 +661,7 @@ config ADK_TARGET_ROOTFS_INITRAMFS_PIGGYBACK depends on \ ADK_HARDWARE_QEMU || \ ADK_LINUX_ARM || \ + ADK_LINUX_MICROBLAZE || \ ADK_LINUX_MIPS || \ ADK_LINUX_PPC || \ ADK_LINUX_SPARC || \ diff --git a/target/config/Config.in.arch.choice b/target/config/Config.in.arch.choice index 1ab3a4ecc..ce58aa2c1 100644 --- a/target/config/Config.in.arch.choice +++ b/target/config/Config.in.arch.choice @@ -38,6 +38,12 @@ config ADK_LINUX_M68K help Support for m68k systems. +config ADK_LINUX_MICROBLAZE + bool "microblaze system" + select ADK_microblaze + help + Support for Microblaze systems. + config ADK_LINUX_MIPS bool "mips system" select ADK_mips diff --git a/target/config/Config.in.arch.default b/target/config/Config.in.arch.default index 1d3453c2b..737ce525c 100644 --- a/target/config/Config.in.arch.default +++ b/target/config/Config.in.arch.default @@ -5,9 +5,6 @@ config ADK_native config ADK_arm bool -config ADK_armeb - bool - config ADK_avr32 bool @@ -17,16 +14,10 @@ config ADK_cris config ADK_m68k bool -config ADK_mips - bool - -config ADK_mipsel - bool - -config ADK_mips64 +config ADK_microblaze bool -config ADK_mips64el +config ADK_mips bool config ADK_ppc @@ -53,14 +44,11 @@ config ADK_x86 config ADK_TARGET_ARCH string default "arm" if ADK_arm - default "arm" if ADK_armeb default "avr32" if ADK_avr32 default "cris" if ADK_cris default "m68k" if ADK_m68k + default "microblaze" if ADK_microblaze default "mips" if ADK_mips - default "mips" if ADK_mipsel - default "mips" if ADK_mips64 - default "mips" if ADK_mips64el default "ppc" if ADK_ppc default "ppc64" if ADK_ppc64 default "sparc" if ADK_sparc diff --git a/target/config/Config.in.system.choice b/target/config/Config.in.system.choice index 83f2e4e3d..8f6f7413f 100644 --- a/target/config/Config.in.system.choice +++ b/target/config/Config.in.system.choice @@ -2,6 +2,7 @@ source "target/arm/Config.in" source "target/avr32/Config.in" source "target/cris/Config.in" source "target/m68k/Config.in" +source "target/microblaze/Config.in" source "target/mips/Config.in" source "target/ppc/Config.in" source "target/ppc64/Config.in" diff --git a/target/linux/Config.in b/target/linux/Config.in index e4b81dd2f..79511489c 100644 --- a/target/linux/Config.in +++ b/target/linux/Config.in @@ -18,6 +18,7 @@ source target/linux/config/Config.in.bluetooth source target/linux/config/Config.in.watchdog source target/linux/config/Config.in.leds source target/linux/config/Config.in.misc +source target/linux/config/Config.in.microblaze source target/linux/config/Config.in.mips source target/linux/config/Config.in.lib source target/linux/config/Config.in.pm diff --git a/target/linux/config/Config.in.microblaze b/target/linux/config/Config.in.microblaze new file mode 100644 index 000000000..5a6764250 --- /dev/null +++ b/target/linux/config/Config.in.microblaze @@ -0,0 +1,4 @@ +config ADK_KERNEL_OPT_LIB_ASM + default y if ADK_TARGET_SYSTEM_QEMU_MICROBLAZE + default n + boolean diff --git a/target/linux/patches/3.11.10/microblaze-dts.patch b/target/linux/patches/3.11.10/microblaze-dts.patch new file mode 100644 index 000000000..e73959a73 --- /dev/null +++ b/target/linux/patches/3.11.10/microblaze-dts.patch @@ -0,0 +1,475 @@ +diff -Nur linux-3.11.10.orig/arch/microblaze/platform/generic/system.dts linux-3.11.10/arch/microblaze/platform/generic/system.dts +--- linux-3.11.10.orig/arch/microblaze/platform/generic/system.dts 2013-11-29 19:42:37.000000000 +0100 ++++ linux-3.11.10/arch/microblaze/platform/generic/system.dts 2013-12-08 13:01:59.000000000 +0100 +@@ -1,102 +1,72 @@ +-/* +- * Device Tree Generator version: 1.1 +- * +- * (C) Copyright 2007-2008 Xilinx, Inc. +- * (C) Copyright 2007-2009 Michal Simek +- * +- * Michal SIMEK <monstr@monstr.eu> +- * +- * 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 +- * +- * CAUTION: This file is automatically generated by libgen. +- * Version: Xilinx EDK 10.1.03 EDK_K_SP3.6 +- * +- * XPS project directory: Xilinx-ML505-ll_temac-sgdma-MMU-FDT-edk101 +- */ +- + /dts-v1/; ++ + / { +- #address-cells = <1>; +- #size-cells = <1>; ++ #address-cells = <0x1>; ++ #size-cells = <0x1>; + compatible = "xlnx,microblaze"; +- hard-reset-gpios = <&LEDs_8Bit 2 1>; + model = "testing"; +- DDR2_SDRAM: memory@90000000 { ++ ++ memory@90000000 { + device_type = "memory"; +- reg = < 0x90000000 0x10000000 >; +- } ; +- aliases { +- ethernet0 = &Hard_Ethernet_MAC; +- serial0 = &RS232_Uart_1; +- } ; ++ reg = <0x90000000 0x8000000>; ++ }; ++ + chosen { +- bootargs = "console=ttyUL0,115200 highres=on"; ++ bootargs = "console=ttyUL0,115200"; + linux,stdout-path = "/plb@0/serial@84000000"; +- } ; ++ }; ++ + cpus { +- #address-cells = <1>; ++ #address-cells = <0x1>; + #cpus = <0x1>; +- #size-cells = <0>; +- microblaze_0: cpu@0 { +- clock-frequency = <125000000>; ++ #size-cells = <0x0>; ++ ++ cpu@0 { ++ clock-frequency = <0x3b9aca0>; + compatible = "xlnx,microblaze-7.10.d"; + d-cache-baseaddr = <0x90000000>; +- d-cache-highaddr = <0x9fffffff>; ++ d-cache-highaddr = <0x97ffffff>; + d-cache-line-size = <0x10>; +- d-cache-size = <0x2000>; ++ d-cache-size = <0x800>; + device_type = "cpu"; + i-cache-baseaddr = <0x90000000>; +- i-cache-highaddr = <0x9fffffff>; ++ i-cache-highaddr = <0x97ffffff>; + i-cache-line-size = <0x10>; +- i-cache-size = <0x2000>; ++ i-cache-size = <0x800>; + model = "microblaze,7.10.d"; +- reg = <0>; +- timebase-frequency = <125000000>; +- xlnx,addr-tag-bits = <0xf>; ++ reg = <0x0>; ++ timebase-frequency = <0x3b9aca0>; ++ xlnx,addr-tag-bits = <0x10>; + xlnx,allow-dcache-wr = <0x1>; + xlnx,allow-icache-wr = <0x1>; + xlnx,area-optimized = <0x0>; +- xlnx,cache-byte-size = <0x2000>; ++ xlnx,cache-byte-size = <0x800>; + xlnx,d-lmb = <0x1>; + xlnx,d-opb = <0x0>; + xlnx,d-plb = <0x1>; + xlnx,data-size = <0x20>; +- xlnx,dcache-addr-tag = <0xf>; +- xlnx,dcache-always-used = <0x1>; +- xlnx,dcache-byte-size = <0x2000>; ++ xlnx,dcache-addr-tag = <0x10>; ++ xlnx,dcache-always-used = <0x0>; ++ xlnx,dcache-byte-size = <0x800>; + xlnx,dcache-line-len = <0x4>; + xlnx,dcache-use-fsl = <0x1>; + xlnx,debug-enabled = <0x1>; +- xlnx,div-zero-exception = <0x1>; ++ xlnx,div-zero-exception = <0x0>; + xlnx,dopb-bus-exception = <0x0>; + xlnx,dynamic-bus-sizing = <0x1>; + xlnx,edge-is-positive = <0x1>; +- xlnx,family = "virtex5"; +- xlnx,endianness = <0x1>; +- xlnx,fpu-exception = <0x1>; ++ xlnx,family = "spartan3adsp"; ++ xlnx,fpu-exception = <0x0>; + xlnx,fsl-data-size = <0x20>; + xlnx,fsl-exception = <0x0>; + xlnx,fsl-links = <0x0>; + xlnx,i-lmb = <0x1>; + xlnx,i-opb = <0x0>; + xlnx,i-plb = <0x1>; +- xlnx,icache-always-used = <0x1>; ++ xlnx,icache-always-used = <0x0>; + xlnx,icache-line-len = <0x4>; + xlnx,icache-use-fsl = <0x1>; +- xlnx,ill-opcode-exception = <0x1>; ++ xlnx,ill-opcode-exception = <0x0>; + xlnx,instance = "microblaze_0"; + xlnx,interconnect = <0x1>; + xlnx,interrupt-is-edge = <0x0>; +@@ -105,11 +75,11 @@ + xlnx,mmu-itlb-size = <0x2>; + xlnx,mmu-tlb-access = <0x3>; + xlnx,mmu-zones = <0x10>; +- xlnx,number-of-pc-brk = <0x1>; +- xlnx,number-of-rd-addr-brk = <0x0>; +- xlnx,number-of-wr-addr-brk = <0x0>; +- xlnx,opcode-0x0-illegal = <0x1>; +- xlnx,pvr = <0x2>; ++ xlnx,number-of-pc-brk = <0x3>; ++ xlnx,number-of-rd-addr-brk = <0x2>; ++ xlnx,number-of-wr-addr-brk = <0x2>; ++ xlnx,opcode-0x0-illegal = <0x0>; ++ xlnx,pvr = <0x1>; + xlnx,pvr-user1 = <0x0>; + xlnx,pvr-user2 = <0x0>; + xlnx,reset-msr = <0x0>; +@@ -117,29 +87,44 @@ + xlnx,unaligned-exceptions = <0x1>; + xlnx,use-barrel = <0x1>; + xlnx,use-dcache = <0x1>; +- xlnx,use-div = <0x1>; ++ xlnx,use-div = <0x0>; + xlnx,use-ext-brk = <0x1>; + xlnx,use-ext-nm-brk = <0x1>; + xlnx,use-extended-fsl-instr = <0x0>; +- xlnx,use-fpu = <0x2>; +- xlnx,use-hw-mul = <0x2>; ++ xlnx,use-fpu = <0x0>; ++ xlnx,use-hw-mul = <0x1>; + xlnx,use-icache = <0x1>; + xlnx,use-interrupt = <0x1>; + xlnx,use-mmu = <0x3>; + xlnx,use-msr-instr = <0x1>; + xlnx,use-pcmp-instr = <0x1>; +- } ; +- } ; +- mb_plb: plb@0 { +- #address-cells = <1>; +- #size-cells = <1>; +- compatible = "xlnx,plb-v46-1.03.a", "xlnx,plb-v46-1.00.a", "simple-bus"; +- ranges ; +- FLASH: flash@a0000000 { +- bank-width = <2>; ++ }; ++ }; ++ ++ plb@0 { ++ #address-cells = <0x1>; ++ #size-cells = <0x1>; ++ compatible = "xlnx,plb-v46-1.03.a", "simple-bus"; ++ ranges; ++ ++ ethernet@81000000 { ++ compatible = "xlnx,xps-ethernetlite-2.00.b"; ++ device_type = "network"; ++ interrupt-parent = <0x1>; ++ interrupts = <0x1 0x0>; ++ local-mac-address = [02 00 00 00 00 00]; ++ reg = <0x81000000 0x10000>; ++ xlnx,duplex = <0x1>; ++ xlnx,family = "spartan3adsp"; ++ xlnx,rx-ping-pong = <0x0>; ++ xlnx,tx-ping-pong = <0x0>; ++ }; ++ ++ flash@a0000000 { ++ bank-width = <0x1>; + compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash"; +- reg = < 0xa0000000 0x2000000 >; +- xlnx,family = "virtex5"; ++ reg = <0xa0000000 0x1000000>; ++ xlnx,family = "spartan3adsp"; + xlnx,include-datawidth-matching-0 = <0x1>; + xlnx,include-datawidth-matching-1 = <0x0>; + xlnx,include-datawidth-matching-2 = <0x0>; +@@ -147,9 +132,9 @@ + xlnx,include-negedge-ioregs = <0x0>; + xlnx,include-plb-ipif = <0x1>; + xlnx,include-wrbuf = <0x1>; +- xlnx,max-mem-width = <0x10>; ++ xlnx,max-mem-width = <0x8>; + xlnx,mch-native-dwidth = <0x20>; +- xlnx,mch-plb-clk-period-ps = <0x1f40>; ++ xlnx,mch-plb-clk-period-ps = <0x3e80>; + xlnx,mch-splb-awidth = <0x20>; + xlnx,mch0-accessbuf-depth = <0x10>; + xlnx,mch0-protocol = <0x0>; +@@ -163,7 +148,7 @@ + xlnx,mch3-accessbuf-depth = <0x10>; + xlnx,mch3-protocol = <0x0>; + xlnx,mch3-rddatabuf-depth = <0x10>; +- xlnx,mem0-width = <0x10>; ++ xlnx,mem0-width = <0x8>; + xlnx,mem1-width = <0x20>; + xlnx,mem2-width = <0x20>; + xlnx,mem3-width = <0x20>; +@@ -178,31 +163,31 @@ + xlnx,synch-pipedelay-1 = <0x2>; + xlnx,synch-pipedelay-2 = <0x2>; + xlnx,synch-pipedelay-3 = <0x2>; +- xlnx,tavdv-ps-mem-0 = <0x1adb0>; ++ xlnx,tavdv-ps-mem-0 = <0x11170>; + xlnx,tavdv-ps-mem-1 = <0x3a98>; + xlnx,tavdv-ps-mem-2 = <0x3a98>; + xlnx,tavdv-ps-mem-3 = <0x3a98>; +- xlnx,tcedv-ps-mem-0 = <0x1adb0>; ++ xlnx,tcedv-ps-mem-0 = <0x11170>; + xlnx,tcedv-ps-mem-1 = <0x3a98>; + xlnx,tcedv-ps-mem-2 = <0x3a98>; + xlnx,tcedv-ps-mem-3 = <0x3a98>; +- xlnx,thzce-ps-mem-0 = <0x88b8>; ++ xlnx,thzce-ps-mem-0 = <0x61a8>; + xlnx,thzce-ps-mem-1 = <0x1b58>; + xlnx,thzce-ps-mem-2 = <0x1b58>; + xlnx,thzce-ps-mem-3 = <0x1b58>; +- xlnx,thzoe-ps-mem-0 = <0x1b58>; ++ xlnx,thzoe-ps-mem-0 = <0x61a8>; + xlnx,thzoe-ps-mem-1 = <0x1b58>; + xlnx,thzoe-ps-mem-2 = <0x1b58>; + xlnx,thzoe-ps-mem-3 = <0x1b58>; +- xlnx,tlzwe-ps-mem-0 = <0x88b8>; ++ xlnx,tlzwe-ps-mem-0 = <0x1388>; + xlnx,tlzwe-ps-mem-1 = <0x0>; + xlnx,tlzwe-ps-mem-2 = <0x0>; + xlnx,tlzwe-ps-mem-3 = <0x0>; +- xlnx,twc-ps-mem-0 = <0x2af8>; ++ xlnx,twc-ps-mem-0 = <0x11170>; + xlnx,twc-ps-mem-1 = <0x3a98>; + xlnx,twc-ps-mem-2 = <0x3a98>; + xlnx,twc-ps-mem-3 = <0x3a98>; +- xlnx,twp-ps-mem-0 = <0x11170>; ++ xlnx,twp-ps-mem-0 = <0xafc8>; + xlnx,twp-ps-mem-1 = <0x2ee0>; + xlnx,twp-ps-mem-2 = <0x2ee0>; + xlnx,twp-ps-mem-3 = <0x2ee0>; +@@ -214,154 +199,83 @@ + xlnx,xcl2-writexfer = <0x1>; + xlnx,xcl3-linesize = <0x4>; + xlnx,xcl3-writexfer = <0x1>; +- } ; +- Hard_Ethernet_MAC: xps-ll-temac@81c00000 { +- #address-cells = <1>; +- #size-cells = <1>; +- compatible = "xlnx,compound"; +- ranges ; +- ethernet@81c00000 { +- compatible = "xlnx,xps-ll-temac-1.01.b", "xlnx,xps-ll-temac-1.00.a"; +- device_type = "network"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 5 2 >; +- llink-connected = <&PIM3>; +- local-mac-address = [ 00 0a 35 00 00 00 ]; +- reg = < 0x81c00000 0x40 >; +- xlnx,bus2core-clk-ratio = <0x1>; +- xlnx,phy-type = <0x1>; +- xlnx,phyaddr = <0x1>; +- xlnx,rxcsum = <0x0>; +- xlnx,rxfifo = <0x1000>; +- xlnx,temac-type = <0x0>; +- xlnx,txcsum = <0x0>; +- xlnx,txfifo = <0x1000>; +- } ; +- } ; +- IIC_EEPROM: i2c@81600000 { +- compatible = "xlnx,xps-iic-2.00.a"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 6 2 >; +- reg = < 0x81600000 0x10000 >; +- xlnx,clk-freq = <0x7735940>; +- xlnx,family = "virtex5"; +- xlnx,gpo-width = <0x1>; +- xlnx,iic-freq = <0x186a0>; +- xlnx,scl-inertial-delay = <0x0>; +- xlnx,sda-inertial-delay = <0x0>; +- xlnx,ten-bit-adr = <0x0>; +- } ; +- LEDs_8Bit: gpio@81400000 { ++ }; ++ ++ gpio@81400000 { + compatible = "xlnx,xps-gpio-1.00.a"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 7 2 >; +- reg = < 0x81400000 0x10000 >; ++ interrupt-parent = <0x1>; ++ interrupts = <0x2 0x2>; ++ reg = <0x81400000 0x10000>; + xlnx,all-inputs = <0x0>; + xlnx,all-inputs-2 = <0x0>; + xlnx,dout-default = <0x0>; + xlnx,dout-default-2 = <0x0>; +- xlnx,family = "virtex5"; ++ xlnx,family = "spartan3adsp"; + xlnx,gpio-width = <0x8>; + xlnx,interrupt-present = <0x1>; +- xlnx,is-bidir = <0x1>; ++ xlnx,is-bidir = <0x0>; + xlnx,is-bidir-2 = <0x1>; + xlnx,is-dual = <0x0>; + xlnx,tri-default = <0xffffffff>; + xlnx,tri-default-2 = <0xffffffff>; +- #gpio-cells = <2>; +- gpio-controller; +- } ; +- +- gpio-leds { +- compatible = "gpio-leds"; +- +- heartbeat { +- label = "Heartbeat"; +- gpios = <&LEDs_8Bit 4 1>; +- linux,default-trigger = "heartbeat"; +- }; +- +- yellow { +- label = "Yellow"; +- gpios = <&LEDs_8Bit 5 1>; +- }; +- +- red { +- label = "Red"; +- gpios = <&LEDs_8Bit 6 1>; +- }; +- +- green { +- label = "Green"; +- gpios = <&LEDs_8Bit 7 1>; +- }; +- } ; +- RS232_Uart_1: serial@84000000 { +- clock-frequency = <125000000>; ++ }; ++ ++ serial@84000000 { ++ clock-frequency = <0x3b9aca0>; + compatible = "xlnx,xps-uartlite-1.00.a"; +- current-speed = <115200>; ++ current-speed = <0x1c200>; + device_type = "serial"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 8 0 >; +- port-number = <0>; +- reg = < 0x84000000 0x10000 >; ++ interrupt-parent = <0x1>; ++ interrupts = <0x3 0x0>; ++ port-number = <0x0>; ++ reg = <0x84000000 0x10000>; + xlnx,baudrate = <0x1c200>; + xlnx,data-bits = <0x8>; +- xlnx,family = "virtex5"; ++ xlnx,family = "spartan3adsp"; + xlnx,odd-parity = <0x0>; + xlnx,use-parity = <0x0>; +- } ; +- SysACE_CompactFlash: sysace@83600000 { +- compatible = "xlnx,xps-sysace-1.00.a"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 4 2 >; +- reg = < 0x83600000 0x10000 >; +- xlnx,family = "virtex5"; +- xlnx,mem-width = <0x10>; +- } ; +- debug_module: debug@84400000 { ++ }; ++ ++ debug@84400000 { + compatible = "xlnx,mdm-1.00.d"; +- reg = < 0x84400000 0x10000 >; +- xlnx,family = "virtex5"; ++ reg = <0x84400000 0x10000>; ++ xlnx,family = "spartan3adsp"; + xlnx,interconnect = <0x1>; + xlnx,jtag-chain = <0x2>; + xlnx,mb-dbg-ports = <0x1>; + xlnx,uart-width = <0x8>; + xlnx,use-uart = <0x1>; + xlnx,write-fsl-ports = <0x0>; +- } ; ++ }; ++ + mpmc@90000000 { +- #address-cells = <1>; +- #size-cells = <1>; +- compatible = "xlnx,mpmc-4.02.a"; +- ranges ; +- PIM3: sdma@84600180 { +- compatible = "xlnx,ll-dma-1.00.a"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 2 2 1 2 >; +- reg = < 0x84600180 0x80 >; +- } ; +- } ; +- xps_intc_0: interrupt-controller@81800000 { ++ #address-cells = <0x1>; ++ #size-cells = <0x1>; ++ compatible = "xlnx,mpmc-4.03.a"; ++ }; ++ ++ interrupt-controller@81800000 { + #interrupt-cells = <0x2>; + compatible = "xlnx,xps-intc-1.00.a"; +- interrupt-controller ; +- reg = < 0x81800000 0x10000 >; +- xlnx,kind-of-intr = <0x100>; +- xlnx,num-intr-inputs = <0x9>; +- } ; +- xps_timer_1: timer@83c00000 { ++ interrupt-controller; ++ reg = <0x81800000 0x10000>; ++ xlnx,kind-of-intr = <0xa>; ++ xlnx,num-intr-inputs = <0x4>; ++ linux,phandle = <0x1>; ++ }; ++ ++ timer@83c00000 { + compatible = "xlnx,xps-timer-1.00.a"; +- interrupt-parent = <&xps_intc_0>; +- interrupts = < 3 2 >; +- reg = < 0x83c00000 0x10000 >; ++ interrupt-parent = <0x1>; ++ interrupts = <0x0 0x2>; ++ reg = <0x83c00000 0x10000>; + xlnx,count-width = <0x20>; +- xlnx,family = "virtex5"; ++ xlnx,family = "spartan3adsp"; + xlnx,gen0-assert = <0x1>; + xlnx,gen1-assert = <0x1>; + xlnx,one-timer-only = <0x0>; + xlnx,trig0-assert = <0x1>; + xlnx,trig1-assert = <0x1>; +- } ; +- } ; +-} ; ++ }; ++ }; ++}; diff --git a/target/linux/patches/3.11.10/microblaze-setup.patch b/target/linux/patches/3.11.10/microblaze-setup.patch new file mode 100644 index 000000000..43815f274 --- /dev/null +++ b/target/linux/patches/3.11.10/microblaze-setup.patch @@ -0,0 +1,12 @@ +diff -Nur linux-3.11.10.orig/arch/microblaze/kernel/setup.c linux-3.11.10/arch/microblaze/kernel/setup.c +--- linux-3.11.10.orig/arch/microblaze/kernel/setup.c 2013-11-29 19:42:37.000000000 +0100 ++++ linux-3.11.10/arch/microblaze/kernel/setup.c 2013-12-08 13:02:37.000000000 +0100 +@@ -177,7 +177,7 @@ + #else + if (!msr) { + pr_info("!!!Your kernel not setup MSR instruction but "); +- pr_cont"CPU have it %x\n", msr); ++ pr_cont("CPU have it %x\n", msr); + } + #endif + diff --git a/target/microblaze/Config.in b/target/microblaze/Config.in new file mode 100644 index 000000000..582be7719 --- /dev/null +++ b/target/microblaze/Config.in @@ -0,0 +1,9 @@ +choice +depends on ADK_LINUX_MICROBLAZE && !ADK_CHOOSE_TARGET_ARCH +prompt "Target system" + +config ADK_CHOOSE_TARGET_SYSTEM_MICROBLAZE + boolean "Choose target system" + +source "target/microblaze/Config.in.systems" +endchoice diff --git a/target/microblaze/Makefile b/target/microblaze/Makefile new file mode 100644 index 000000000..3ff728627 --- /dev/null +++ b/target/microblaze/Makefile @@ -0,0 +1,42 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include $(TOPDIR)/rules.mk +include $(TOPDIR)/mk/kernel.mk +include $(TOPDIR)/mk/modules.mk +include $(TOPDIR)/mk/kernel-build.mk +include $(TOPDIR)/mk/image.mk + +KERNEL:=$(LINUX_DIR)/arch/microblaze/boot/$(ADK_TARGET_KERNEL) + +ifeq ($(ADK_TARGET_FS),archive) +imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) + @echo "The RootFS tarball is: $(BIN_DIR)/$(ROOTFSTARBALL)" +ifneq ($(ADK_HARDWARE_QEMU),) + @cp $(KERNEL) $(BIN_DIR)/$(TARGET_KERNEL) + @echo 'The kernel file is: $(BIN_DIR)/${TARGET_KERNEL}' + @echo "Use following command to create a QEMU Image:" + @echo "./scripts/create.sh +g qemu-${CPU_ARCH}.img $(BIN_DIR)/$(ROOTFSTARBALL)" + @echo "Start qemu with following options:" + @echo 'qemu-system-${CPU_ARCH} -nographic -kernel $(BIN_DIR)/$(TARGET_KERNEL) qemu-${CPU_ARCH}.img' +endif +endif +ifeq ($(ADK_TARGET_FS),initramfs) +imageinstall: $(BIN_DIR)/$(INITRAMFS) + @cp $(KERNEL) $(BIN_DIR)/$(TARGET_KERNEL) + @echo 'The kernel file is: $(BIN_DIR)/${TARGET_KERNEL}' + @echo 'The initramfs image is: ${BIN_DIR}/${INITRAMFS}' +ifneq ($(ADK_HARDWARE_QEMU),) + @echo "Start qemu with following command line:" + @echo 'qemu-system-${CPU_ARCH} -nographic -kernel $(BIN_DIR)/$(TARGET_KERNEL) -initrd ${BIN_DIR}/${INITRAMFS}' +endif +endif +ifeq ($(ADK_TARGET_FS),initramfs-piggyback) +imageinstall: createinitramfs + @cp $(KERNEL) $(BIN_DIR)/$(TARGET_KERNEL) + @echo 'The kernel+initramfs file is: $(BIN_DIR)/${TARGET_KERNEL}' +ifneq ($(ADK_HARDWARE_QEMU),) + @echo "Start qemu with following command line:" + @echo 'qemu-system-${CPU_ARCH} -nographic -kernel $(BIN_DIR)/$(TARGET_KERNEL)' +endif +endif diff --git a/target/microblaze/kernel.config b/target/microblaze/kernel.config new file mode 100644 index 000000000..ffea9e904 --- /dev/null +++ b/target/microblaze/kernel.config @@ -0,0 +1,1337 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/microblaze 3.11.10 Kernel Configuration +# +CONFIG_MICROBLAZE=y +# CONFIG_SWAP is not set +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_ZONE_DMA=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_CSUM=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +# CONFIG_COMPILE_TEST is not set +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_DEFAULT_HOSTNAME="openadk" +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +# CONFIG_FHANDLE is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_IRQ_DOMAIN=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y + +# +# Timers subsystem +# +CONFIG_HZ_PERIODIC=y +# CONFIG_NO_HZ_IDLE is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set + +# +# RCU Subsystem +# +CONFIG_TINY_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_RCU_STALL_COMMON is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=17 +# CONFIG_CGROUPS is not set +# CONFIG_CHECKPOINT_RESTORE is not set +# CONFIG_NAMESPACES is not set +CONFIG_UIDGID_CONVERTED=y +# CONFIG_UIDGID_STRICT_TYPE_CHECKS is not set +# CONFIG_SCHED_AUTOGROUP is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EXPERT=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_BASE_FULL is not set +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_PCI_QUIRKS=y +CONFIG_EMBEDDED=y + +# +# Kernel Performance Events And Counters +# +# CONFIG_VM_EVENT_C |