Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'microblaze-3.15-rc1' of git://git.monstr.eu/linux-2.6-microblaze

Pull Microblaze updates from Michal Simek:
- use asm-generic/io.h and fix intc/timer code
- clean platform handling
- enable some syscalls

* tag 'microblaze-3.15-rc1' of git://git.monstr.eu/linux-2.6-microblaze:
microblaze: Use asm-generic/io.h
microblaze: Remove platform folder
microblaze: Remove generic platform
microblaze: Sort Kconfig options
microblaze: Move DTS file to common location at boot/dts folder
microblaze: Fix compilation failure because of release_thread
microblaze: Fix sparse warning because of missing cpu.h header
microblaze: Make timer driver endian aware
microblaze: Make intc driver endian aware
microblaze: Wire-up new system calls sched_setattr/getattr
microblaze: Wire-up preadv/pwritev in syscall table
microblaze: Enable pselect6 syscall
microblaze: Drop architecture-specific declaration of early_printk
microblaze: Rename global function heartbeat()

+558 -814
+27 -27
arch/microblaze/Kconfig
··· 1 1 config MICROBLAZE 2 2 def_bool y 3 3 select ARCH_MIGHT_HAVE_PC_PARPORT 4 - select HAVE_MEMBLOCK 5 - select HAVE_MEMBLOCK_NODE_MAP 6 - select HAVE_FUNCTION_TRACER 7 - select HAVE_FUNCTION_TRACE_MCOUNT_TEST 8 - select HAVE_FUNCTION_GRAPH_TRACER 9 - select HAVE_DYNAMIC_FTRACE 10 - select HAVE_FTRACE_MCOUNT_RECORD 11 - select ARCH_WANT_OPTIONAL_GPIOLIB 12 - select HAVE_OPROFILE 13 - select HAVE_ARCH_KGDB 14 - select HAVE_DMA_ATTRS 15 - select HAVE_DMA_API_DEBUG 16 - select TRACING_SUPPORT 17 - select OF 18 - select OF_EARLY_FLATTREE 19 4 select ARCH_WANT_IPC_PARSE_VERSION 20 - select HAVE_DEBUG_KMEMLEAK 21 - select IRQ_DOMAIN 22 - select VIRT_TO_BUS 5 + select ARCH_WANT_OPTIONAL_GPIOLIB 6 + select BUILDTIME_EXTABLE_SORT 7 + select CLKSRC_OF 8 + select CLONE_BACKWARDS3 9 + select COMMON_CLK 10 + select GENERIC_ATOMIC64 11 + select GENERIC_CLOCKEVENTS 12 + select GENERIC_CPU_DEVICES 13 + select GENERIC_IDLE_POLL_SETUP 23 14 select GENERIC_IRQ_PROBE 24 15 select GENERIC_IRQ_SHOW 25 16 select GENERIC_PCI_IOMAP 26 - select GENERIC_CPU_DEVICES 27 - select GENERIC_ATOMIC64 28 - select GENERIC_CLOCKEVENTS 29 - select COMMON_CLK 30 17 select GENERIC_SCHED_CLOCK 31 - select GENERIC_IDLE_POLL_SETUP 18 + select HAVE_ARCH_KGDB 19 + select HAVE_DEBUG_KMEMLEAK 20 + select HAVE_DMA_API_DEBUG 21 + select HAVE_DMA_ATTRS 22 + select HAVE_DYNAMIC_FTRACE 23 + select HAVE_FTRACE_MCOUNT_RECORD 24 + select HAVE_FUNCTION_GRAPH_TRACER 25 + select HAVE_FUNCTION_TRACE_MCOUNT_TEST 26 + select HAVE_FUNCTION_TRACER 27 + select HAVE_MEMBLOCK 28 + select HAVE_MEMBLOCK_NODE_MAP 29 + select HAVE_OPROFILE 30 + select IRQ_DOMAIN 32 31 select MODULES_USE_ELF_RELA 33 - select CLONE_BACKWARDS3 34 - select CLKSRC_OF 35 - select BUILDTIME_EXTABLE_SORT 32 + select OF 33 + select OF_EARLY_FLATTREE 34 + select TRACING_SUPPORT 35 + select VIRT_TO_BUS 36 36 37 37 config SWAP 38 38 def_bool n ··· 74 74 75 75 source "kernel/Kconfig.freezer" 76 76 77 - source "arch/microblaze/platform/Kconfig.platform" 77 + source "arch/microblaze/Kconfig.platform" 78 78 79 79 menu "Processor type and features" 80 80
-1
arch/microblaze/Makefile
··· 48 48 libs-y += arch/microblaze/lib/ 49 49 core-y += arch/microblaze/kernel/ 50 50 core-y += arch/microblaze/mm/ 51 - core-y += arch/microblaze/platform/ 52 51 core-$(CONFIG_PCI) += arch/microblaze/pci/ 53 52 54 53 drivers-$(CONFIG_OPROFILE) += arch/microblaze/oprofile/
+366 -1
arch/microblaze/boot/dts/system.dts
··· 1 - ../../platform/generic/system.dts 1 + /* 2 + * Device Tree Generator version: 1.1 3 + * 4 + * (C) Copyright 2007-2008 Xilinx, Inc. 5 + * (C) Copyright 2007-2009 Michal Simek 6 + * 7 + * Michal SIMEK <monstr@monstr.eu> 8 + * 9 + * This program is free software; you can redistribute it and/or 10 + * modify it under the terms of the GNU General Public License as 11 + * published by the Free Software Foundation; either version 2 of 12 + * the License, or (at your option) any later version. 13 + * 14 + * This program is distributed in the hope that it will be useful, 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + * You should have received a copy of the GNU General Public License 20 + * along with this program; if not, write to the Free Software 21 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22 + * MA 02111-1307 USA 23 + * 24 + * CAUTION: This file is automatically generated by libgen. 25 + * Version: Xilinx EDK 10.1.03 EDK_K_SP3.6 26 + * 27 + * XPS project directory: Xilinx-ML505-ll_temac-sgdma-MMU-FDT-edk101 28 + */ 29 + 30 + /dts-v1/; 31 + / { 32 + #address-cells = <1>; 33 + #size-cells = <1>; 34 + compatible = "xlnx,microblaze"; 35 + hard-reset-gpios = <&LEDs_8Bit 2 1>; 36 + model = "testing"; 37 + DDR2_SDRAM: memory@90000000 { 38 + device_type = "memory"; 39 + reg = < 0x90000000 0x10000000 >; 40 + } ; 41 + aliases { 42 + ethernet0 = &Hard_Ethernet_MAC; 43 + serial0 = &RS232_Uart_1; 44 + } ; 45 + chosen { 46 + bootargs = "console=ttyUL0,115200 highres=on"; 47 + linux,stdout-path = "/plb@0/serial@84000000"; 48 + } ; 49 + cpus { 50 + #address-cells = <1>; 51 + #cpus = <0x1>; 52 + #size-cells = <0>; 53 + microblaze_0: cpu@0 { 54 + clock-frequency = <125000000>; 55 + compatible = "xlnx,microblaze-7.10.d"; 56 + d-cache-baseaddr = <0x90000000>; 57 + d-cache-highaddr = <0x9fffffff>; 58 + d-cache-line-size = <0x10>; 59 + d-cache-size = <0x2000>; 60 + device_type = "cpu"; 61 + i-cache-baseaddr = <0x90000000>; 62 + i-cache-highaddr = <0x9fffffff>; 63 + i-cache-line-size = <0x10>; 64 + i-cache-size = <0x2000>; 65 + model = "microblaze,7.10.d"; 66 + reg = <0>; 67 + timebase-frequency = <125000000>; 68 + xlnx,addr-tag-bits = <0xf>; 69 + xlnx,allow-dcache-wr = <0x1>; 70 + xlnx,allow-icache-wr = <0x1>; 71 + xlnx,area-optimized = <0x0>; 72 + xlnx,cache-byte-size = <0x2000>; 73 + xlnx,d-lmb = <0x1>; 74 + xlnx,d-opb = <0x0>; 75 + xlnx,d-plb = <0x1>; 76 + xlnx,data-size = <0x20>; 77 + xlnx,dcache-addr-tag = <0xf>; 78 + xlnx,dcache-always-used = <0x1>; 79 + xlnx,dcache-byte-size = <0x2000>; 80 + xlnx,dcache-line-len = <0x4>; 81 + xlnx,dcache-use-fsl = <0x1>; 82 + xlnx,debug-enabled = <0x1>; 83 + xlnx,div-zero-exception = <0x1>; 84 + xlnx,dopb-bus-exception = <0x0>; 85 + xlnx,dynamic-bus-sizing = <0x1>; 86 + xlnx,edge-is-positive = <0x1>; 87 + xlnx,family = "virtex5"; 88 + xlnx,endianness = <0x1>; 89 + xlnx,fpu-exception = <0x1>; 90 + xlnx,fsl-data-size = <0x20>; 91 + xlnx,fsl-exception = <0x0>; 92 + xlnx,fsl-links = <0x0>; 93 + xlnx,i-lmb = <0x1>; 94 + xlnx,i-opb = <0x0>; 95 + xlnx,i-plb = <0x1>; 96 + xlnx,icache-always-used = <0x1>; 97 + xlnx,icache-line-len = <0x4>; 98 + xlnx,icache-use-fsl = <0x1>; 99 + xlnx,ill-opcode-exception = <0x1>; 100 + xlnx,instance = "microblaze_0"; 101 + xlnx,interconnect = <0x1>; 102 + xlnx,interrupt-is-edge = <0x0>; 103 + xlnx,iopb-bus-exception = <0x0>; 104 + xlnx,mmu-dtlb-size = <0x4>; 105 + xlnx,mmu-itlb-size = <0x2>; 106 + xlnx,mmu-tlb-access = <0x3>; 107 + xlnx,mmu-zones = <0x10>; 108 + xlnx,number-of-pc-brk = <0x1>; 109 + xlnx,number-of-rd-addr-brk = <0x0>; 110 + xlnx,number-of-wr-addr-brk = <0x0>; 111 + xlnx,opcode-0x0-illegal = <0x1>; 112 + xlnx,pvr = <0x2>; 113 + xlnx,pvr-user1 = <0x0>; 114 + xlnx,pvr-user2 = <0x0>; 115 + xlnx,reset-msr = <0x0>; 116 + xlnx,sco = <0x0>; 117 + xlnx,unaligned-exceptions = <0x1>; 118 + xlnx,use-barrel = <0x1>; 119 + xlnx,use-dcache = <0x1>; 120 + xlnx,use-div = <0x1>; 121 + xlnx,use-ext-brk = <0x1>; 122 + xlnx,use-ext-nm-brk = <0x1>; 123 + xlnx,use-extended-fsl-instr = <0x0>; 124 + xlnx,use-fpu = <0x2>; 125 + xlnx,use-hw-mul = <0x2>; 126 + xlnx,use-icache = <0x1>; 127 + xlnx,use-interrupt = <0x1>; 128 + xlnx,use-mmu = <0x3>; 129 + xlnx,use-msr-instr = <0x1>; 130 + xlnx,use-pcmp-instr = <0x1>; 131 + } ; 132 + } ; 133 + mb_plb: plb@0 { 134 + #address-cells = <1>; 135 + #size-cells = <1>; 136 + compatible = "xlnx,plb-v46-1.03.a", "xlnx,plb-v46-1.00.a", "simple-bus"; 137 + ranges ; 138 + FLASH: flash@a0000000 { 139 + bank-width = <2>; 140 + compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash"; 141 + reg = < 0xa0000000 0x2000000 >; 142 + xlnx,family = "virtex5"; 143 + xlnx,include-datawidth-matching-0 = <0x1>; 144 + xlnx,include-datawidth-matching-1 = <0x0>; 145 + xlnx,include-datawidth-matching-2 = <0x0>; 146 + xlnx,include-datawidth-matching-3 = <0x0>; 147 + xlnx,include-negedge-ioregs = <0x0>; 148 + xlnx,include-plb-ipif = <0x1>; 149 + xlnx,include-wrbuf = <0x1>; 150 + xlnx,max-mem-width = <0x10>; 151 + xlnx,mch-native-dwidth = <0x20>; 152 + xlnx,mch-plb-clk-period-ps = <0x1f40>; 153 + xlnx,mch-splb-awidth = <0x20>; 154 + xlnx,mch0-accessbuf-depth = <0x10>; 155 + xlnx,mch0-protocol = <0x0>; 156 + xlnx,mch0-rddatabuf-depth = <0x10>; 157 + xlnx,mch1-accessbuf-depth = <0x10>; 158 + xlnx,mch1-protocol = <0x0>; 159 + xlnx,mch1-rddatabuf-depth = <0x10>; 160 + xlnx,mch2-accessbuf-depth = <0x10>; 161 + xlnx,mch2-protocol = <0x0>; 162 + xlnx,mch2-rddatabuf-depth = <0x10>; 163 + xlnx,mch3-accessbuf-depth = <0x10>; 164 + xlnx,mch3-protocol = <0x0>; 165 + xlnx,mch3-rddatabuf-depth = <0x10>; 166 + xlnx,mem0-width = <0x10>; 167 + xlnx,mem1-width = <0x20>; 168 + xlnx,mem2-width = <0x20>; 169 + xlnx,mem3-width = <0x20>; 170 + xlnx,num-banks-mem = <0x1>; 171 + xlnx,num-channels = <0x0>; 172 + xlnx,priority-mode = <0x0>; 173 + xlnx,synch-mem-0 = <0x0>; 174 + xlnx,synch-mem-1 = <0x0>; 175 + xlnx,synch-mem-2 = <0x0>; 176 + xlnx,synch-mem-3 = <0x0>; 177 + xlnx,synch-pipedelay-0 = <0x2>; 178 + xlnx,synch-pipedelay-1 = <0x2>; 179 + xlnx,synch-pipedelay-2 = <0x2>; 180 + xlnx,synch-pipedelay-3 = <0x2>; 181 + xlnx,tavdv-ps-mem-0 = <0x1adb0>; 182 + xlnx,tavdv-ps-mem-1 = <0x3a98>; 183 + xlnx,tavdv-ps-mem-2 = <0x3a98>; 184 + xlnx,tavdv-ps-mem-3 = <0x3a98>; 185 + xlnx,tcedv-ps-mem-0 = <0x1adb0>; 186 + xlnx,tcedv-ps-mem-1 = <0x3a98>; 187 + xlnx,tcedv-ps-mem-2 = <0x3a98>; 188 + xlnx,tcedv-ps-mem-3 = <0x3a98>; 189 + xlnx,thzce-ps-mem-0 = <0x88b8>; 190 + xlnx,thzce-ps-mem-1 = <0x1b58>; 191 + xlnx,thzce-ps-mem-2 = <0x1b58>; 192 + xlnx,thzce-ps-mem-3 = <0x1b58>; 193 + xlnx,thzoe-ps-mem-0 = <0x1b58>; 194 + xlnx,thzoe-ps-mem-1 = <0x1b58>; 195 + xlnx,thzoe-ps-mem-2 = <0x1b58>; 196 + xlnx,thzoe-ps-mem-3 = <0x1b58>; 197 + xlnx,tlzwe-ps-mem-0 = <0x88b8>; 198 + xlnx,tlzwe-ps-mem-1 = <0x0>; 199 + xlnx,tlzwe-ps-mem-2 = <0x0>; 200 + xlnx,tlzwe-ps-mem-3 = <0x0>; 201 + xlnx,twc-ps-mem-0 = <0x2af8>; 202 + xlnx,twc-ps-mem-1 = <0x3a98>; 203 + xlnx,twc-ps-mem-2 = <0x3a98>; 204 + xlnx,twc-ps-mem-3 = <0x3a98>; 205 + xlnx,twp-ps-mem-0 = <0x11170>; 206 + xlnx,twp-ps-mem-1 = <0x2ee0>; 207 + xlnx,twp-ps-mem-2 = <0x2ee0>; 208 + xlnx,twp-ps-mem-3 = <0x2ee0>; 209 + xlnx,xcl0-linesize = <0x4>; 210 + xlnx,xcl0-writexfer = <0x1>; 211 + xlnx,xcl1-linesize = <0x4>; 212 + xlnx,xcl1-writexfer = <0x1>; 213 + xlnx,xcl2-linesize = <0x4>; 214 + xlnx,xcl2-writexfer = <0x1>; 215 + xlnx,xcl3-linesize = <0x4>; 216 + xlnx,xcl3-writexfer = <0x1>; 217 + } ; 218 + Hard_Ethernet_MAC: xps-ll-temac@81c00000 { 219 + #address-cells = <1>; 220 + #size-cells = <1>; 221 + compatible = "xlnx,compound"; 222 + ranges ; 223 + ethernet@81c00000 { 224 + compatible = "xlnx,xps-ll-temac-1.01.b", "xlnx,xps-ll-temac-1.00.a"; 225 + interrupt-parent = <&xps_intc_0>; 226 + interrupts = < 5 2 >; 227 + llink-connected = <&PIM3>; 228 + local-mac-address = [ 00 0a 35 00 00 00 ]; 229 + reg = < 0x81c00000 0x40 >; 230 + xlnx,bus2core-clk-ratio = <0x1>; 231 + xlnx,phy-type = <0x1>; 232 + xlnx,phyaddr = <0x1>; 233 + xlnx,rxcsum = <0x0>; 234 + xlnx,rxfifo = <0x1000>; 235 + xlnx,temac-type = <0x0>; 236 + xlnx,txcsum = <0x0>; 237 + xlnx,txfifo = <0x1000>; 238 + } ; 239 + } ; 240 + IIC_EEPROM: i2c@81600000 { 241 + compatible = "xlnx,xps-iic-2.00.a"; 242 + interrupt-parent = <&xps_intc_0>; 243 + interrupts = < 6 2 >; 244 + reg = < 0x81600000 0x10000 >; 245 + xlnx,clk-freq = <0x7735940>; 246 + xlnx,family = "virtex5"; 247 + xlnx,gpo-width = <0x1>; 248 + xlnx,iic-freq = <0x186a0>; 249 + xlnx,scl-inertial-delay = <0x0>; 250 + xlnx,sda-inertial-delay = <0x0>; 251 + xlnx,ten-bit-adr = <0x0>; 252 + } ; 253 + LEDs_8Bit: gpio@81400000 { 254 + compatible = "xlnx,xps-gpio-1.00.a"; 255 + interrupt-parent = <&xps_intc_0>; 256 + interrupts = < 7 2 >; 257 + reg = < 0x81400000 0x10000 >; 258 + xlnx,all-inputs = <0x0>; 259 + xlnx,all-inputs-2 = <0x0>; 260 + xlnx,dout-default = <0x0>; 261 + xlnx,dout-default-2 = <0x0>; 262 + xlnx,family = "virtex5"; 263 + xlnx,gpio-width = <0x8>; 264 + xlnx,interrupt-present = <0x1>; 265 + xlnx,is-bidir = <0x1>; 266 + xlnx,is-bidir-2 = <0x1>; 267 + xlnx,is-dual = <0x0>; 268 + xlnx,tri-default = <0xffffffff>; 269 + xlnx,tri-default-2 = <0xffffffff>; 270 + #gpio-cells = <2>; 271 + gpio-controller; 272 + } ; 273 + 274 + gpio-leds { 275 + compatible = "gpio-leds"; 276 + 277 + heartbeat { 278 + label = "Heartbeat"; 279 + gpios = <&LEDs_8Bit 4 1>; 280 + linux,default-trigger = "heartbeat"; 281 + }; 282 + 283 + yellow { 284 + label = "Yellow"; 285 + gpios = <&LEDs_8Bit 5 1>; 286 + }; 287 + 288 + red { 289 + label = "Red"; 290 + gpios = <&LEDs_8Bit 6 1>; 291 + }; 292 + 293 + green { 294 + label = "Green"; 295 + gpios = <&LEDs_8Bit 7 1>; 296 + }; 297 + } ; 298 + RS232_Uart_1: serial@84000000 { 299 + clock-frequency = <125000000>; 300 + compatible = "xlnx,xps-uartlite-1.00.a"; 301 + current-speed = <115200>; 302 + device_type = "serial"; 303 + interrupt-parent = <&xps_intc_0>; 304 + interrupts = < 8 0 >; 305 + port-number = <0>; 306 + reg = < 0x84000000 0x10000 >; 307 + xlnx,baudrate = <0x1c200>; 308 + xlnx,data-bits = <0x8>; 309 + xlnx,family = "virtex5"; 310 + xlnx,odd-parity = <0x0>; 311 + xlnx,use-parity = <0x0>; 312 + } ; 313 + SysACE_CompactFlash: sysace@83600000 { 314 + compatible = "xlnx,xps-sysace-1.00.a"; 315 + interrupt-parent = <&xps_intc_0>; 316 + interrupts = < 4 2 >; 317 + reg = < 0x83600000 0x10000 >; 318 + xlnx,family = "virtex5"; 319 + xlnx,mem-width = <0x10>; 320 + } ; 321 + debug_module: debug@84400000 { 322 + compatible = "xlnx,mdm-1.00.d"; 323 + reg = < 0x84400000 0x10000 >; 324 + xlnx,family = "virtex5"; 325 + xlnx,interconnect = <0x1>; 326 + xlnx,jtag-chain = <0x2>; 327 + xlnx,mb-dbg-ports = <0x1>; 328 + xlnx,uart-width = <0x8>; 329 + xlnx,use-uart = <0x1>; 330 + xlnx,write-fsl-ports = <0x0>; 331 + } ; 332 + mpmc@90000000 { 333 + #address-cells = <1>; 334 + #size-cells = <1>; 335 + compatible = "xlnx,mpmc-4.02.a"; 336 + ranges ; 337 + PIM3: sdma@84600180 { 338 + compatible = "xlnx,ll-dma-1.00.a"; 339 + interrupt-parent = <&xps_intc_0>; 340 + interrupts = < 2 2 1 2 >; 341 + reg = < 0x84600180 0x80 >; 342 + } ; 343 + } ; 344 + xps_intc_0: interrupt-controller@81800000 { 345 + #interrupt-cells = <0x2>; 346 + compatible = "xlnx,xps-intc-1.00.a"; 347 + interrupt-controller ; 348 + reg = < 0x81800000 0x10000 >; 349 + xlnx,kind-of-intr = <0x100>; 350 + xlnx,num-intr-inputs = <0x9>; 351 + } ; 352 + xps_timer_1: timer@83c00000 { 353 + compatible = "xlnx,xps-timer-1.00.a"; 354 + interrupt-parent = <&xps_intc_0>; 355 + interrupts = < 3 2 >; 356 + reg = < 0x83c00000 0x10000 >; 357 + xlnx,count-width = <0x20>; 358 + xlnx,family = "virtex5"; 359 + xlnx,gen0-assert = <0x1>; 360 + xlnx,gen1-assert = <0x1>; 361 + xlnx,one-timer-only = <0x0>; 362 + xlnx,trig0-assert = <0x1>; 363 + xlnx,trig1-assert = <0x1>; 364 + } ; 365 + } ; 366 + } ;
+13 -289
arch/microblaze/include/asm/io.h
··· 15 15 #include <asm/page.h> 16 16 #include <linux/types.h> 17 17 #include <linux/mm.h> /* Get struct page {...} */ 18 - #include <asm-generic/iomap.h> 19 18 20 19 #ifndef CONFIG_PCI 21 20 #define _IO_BASE 0 ··· 24 25 #define _IO_BASE isa_io_base 25 26 #define _ISA_MEM_BASE isa_mem_base 26 27 #define PCI_DRAM_OFFSET pci_dram_offset 27 - #endif 28 + struct pci_dev; 29 + extern void pci_iounmap(struct pci_dev *dev, void __iomem *); 30 + #define pci_iounmap pci_iounmap 28 31 29 32 extern unsigned long isa_io_base; 30 - extern unsigned long pci_io_base; 31 33 extern unsigned long pci_dram_offset; 32 - 33 34 extern resource_size_t isa_mem_base; 35 + #endif 34 36 37 + #define PCI_IOBASE ((void __iomem *)_IO_BASE) 35 38 #define IO_SPACE_LIMIT (0xFFFFFFFF) 36 39 37 - /* the following is needed to support PCI with some drivers */ 38 - 39 - #define mmiowb() 40 - 41 - static inline unsigned char __raw_readb(const volatile void __iomem *addr) 42 - { 43 - return *(volatile unsigned char __force *)addr; 44 - } 45 - static inline unsigned short __raw_readw(const volatile void __iomem *addr) 46 - { 47 - return *(volatile unsigned short __force *)addr; 48 - } 49 - static inline unsigned int __raw_readl(const volatile void __iomem *addr) 50 - { 51 - return *(volatile unsigned int __force *)addr; 52 - } 53 - static inline unsigned long __raw_readq(const volatile void __iomem *addr) 54 - { 55 - return *(volatile unsigned long __force *)addr; 56 - } 57 - static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr) 58 - { 59 - *(volatile unsigned char __force *)addr = v; 60 - } 61 - static inline void __raw_writew(unsigned short v, volatile void __iomem *addr) 62 - { 63 - *(volatile unsigned short __force *)addr = v; 64 - } 65 - static inline void __raw_writel(unsigned int v, volatile void __iomem *addr) 66 - { 67 - *(volatile unsigned int __force *)addr = v; 68 - } 69 - static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr) 70 - { 71 - *(volatile unsigned long __force *)addr = v; 72 - } 73 - 74 - /* 75 - * read (readb, readw, readl, readq) and write (writeb, writew, 76 - * writel, writeq) accessors are for PCI and thus little endian. 77 - * Linux 2.4 for Microblaze had this wrong. 78 - */ 79 - static inline unsigned char readb(const volatile void __iomem *addr) 80 - { 81 - return *(volatile unsigned char __force *)addr; 82 - } 83 - static inline unsigned short readw(const volatile void __iomem *addr) 84 - { 85 - return le16_to_cpu(*(volatile unsigned short __force *)addr); 86 - } 87 - static inline unsigned int readl(const volatile void __iomem *addr) 88 - { 89 - return le32_to_cpu(*(volatile unsigned int __force *)addr); 90 - } 91 - #define readq readq 92 - static inline u64 readq(const volatile void __iomem *addr) 93 - { 94 - return le64_to_cpu(__raw_readq(addr)); 95 - } 96 - static inline void writeb(unsigned char v, volatile void __iomem *addr) 97 - { 98 - *(volatile unsigned char __force *)addr = v; 99 - } 100 - static inline void writew(unsigned short v, volatile void __iomem *addr) 101 - { 102 - *(volatile unsigned short __force *)addr = cpu_to_le16(v); 103 - } 104 - static inline void writel(unsigned int v, volatile void __iomem *addr) 105 - { 106 - *(volatile unsigned int __force *)addr = cpu_to_le32(v); 107 - } 108 - #define writeq(b, addr) __raw_writeq(cpu_to_le64(b), addr) 109 - 110 - /* ioread and iowrite variants. thease are for now same as __raw_ 111 - * variants of accessors. we might check for endianess in the feature 112 - */ 113 - #define ioread8(addr) __raw_readb((u8 *)(addr)) 114 - #define ioread16(addr) __raw_readw((u16 *)(addr)) 115 - #define ioread32(addr) __raw_readl((u32 *)(addr)) 116 - #define iowrite8(v, addr) __raw_writeb((u8)(v), (u8 *)(addr)) 117 - #define iowrite16(v, addr) __raw_writew((u16)(v), (u16 *)(addr)) 118 - #define iowrite32(v, addr) __raw_writel((u32)(v), (u32 *)(addr)) 119 - 120 - #define ioread16be(addr) __raw_readw((u16 *)(addr)) 121 - #define ioread32be(addr) __raw_readl((u32 *)(addr)) 122 - #define iowrite16be(v, addr) __raw_writew((u16)(v), (u16 *)(addr)) 123 - #define iowrite32be(v, addr) __raw_writel((u32)(v), (u32 *)(addr)) 124 - 125 - /* These are the definitions for the x86 IO instructions 126 - * inb/inw/inl/outb/outw/outl, the "string" versions 127 - * insb/insw/insl/outsb/outsw/outsl, and the "pausing" versions 128 - * inb_p/inw_p/... 129 - * The macros don't do byte-swapping. 130 - */ 131 - #define inb(port) readb((u8 *)((unsigned long)(port))) 132 - #define outb(val, port) writeb((val), (u8 *)((unsigned long)(port))) 133 - #define inw(port) readw((u16 *)((unsigned long)(port))) 134 - #define outw(val, port) writew((val), (u16 *)((unsigned long)(port))) 135 - #define inl(port) readl((u32 *)((unsigned long)(port))) 136 - #define outl(val, port) writel((val), (u32 *)((unsigned long)(port))) 137 - 138 - #define inb_p(port) inb((port)) 139 - #define outb_p(val, port) outb((val), (port)) 140 - #define inw_p(port) inw((port)) 141 - #define outw_p(val, port) outw((val), (port)) 142 - #define inl_p(port) inl((port)) 143 - #define outl_p(val, port) outl((val), (port)) 144 - 145 - #define memset_io(a, b, c) memset((void *)(a), (b), (c)) 146 - #define memcpy_fromio(a, b, c) memcpy((a), (void *)(b), (c)) 147 - #define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) 148 - 149 40 #ifdef CONFIG_MMU 150 - 151 - #define phys_to_virt(addr) ((void *)__phys_to_virt(addr)) 152 - #define virt_to_phys(addr) ((unsigned long)__virt_to_phys(addr)) 153 - #define virt_to_bus(addr) ((unsigned long)__virt_to_phys(addr)) 154 - 155 41 #define page_to_bus(page) (page_to_phys(page)) 156 - #define bus_to_virt(addr) (phys_to_virt(addr)) 157 42 158 43 extern void iounmap(void __iomem *addr); 159 - /*extern void *__ioremap(phys_addr_t address, unsigned long size, 160 - unsigned long flags);*/ 44 + 161 45 extern void __iomem *ioremap(phys_addr_t address, unsigned long size); 162 - #define ioremap_writethrough(addr, size) ioremap((addr), (size)) 163 - #define ioremap_nocache(addr, size) ioremap((addr), (size)) 164 - #define ioremap_fullcache(addr, size) ioremap((addr), (size)) 165 - 166 - #else /* CONFIG_MMU */ 167 - 168 - /** 169 - * virt_to_phys - map virtual addresses to physical 170 - * @address: address to remap 171 - * 172 - * The returned physical address is the physical (CPU) mapping for 173 - * the memory address given. It is only valid to use this function on 174 - * addresses directly mapped or allocated via kmalloc. 175 - * 176 - * This function does not give bus mappings for DMA transfers. In 177 - * almost all conceivable cases a device driver should not be using 178 - * this function 179 - */ 180 - static inline unsigned long __iomem virt_to_phys(volatile void *address) 181 - { 182 - return __pa((unsigned long)address); 183 - } 184 - 185 - #define virt_to_bus virt_to_phys 186 - 187 - /** 188 - * phys_to_virt - map physical address to virtual 189 - * @address: address to remap 190 - * 191 - * The returned virtual address is a current CPU mapping for 192 - * the memory address given. It is only valid to use this function on 193 - * addresses that have a kernel mapping 194 - * 195 - * This function does not handle bus mappings for DMA transfers. In 196 - * almost all conceivable cases a device driver should not be using 197 - * this function 198 - */ 199 - static inline void *phys_to_virt(unsigned long address) 200 - { 201 - return (void *)__va(address); 202 - } 203 - 204 - #define bus_to_virt(a) phys_to_virt(a) 205 - 206 - static inline void __iomem *__ioremap(phys_addr_t address, unsigned long size, 207 - unsigned long flags) 208 - { 209 - return (void *)address; 210 - } 211 - 212 - #define ioremap(physaddr, size) ((void __iomem *)(unsigned long)(physaddr)) 213 - #define iounmap(addr) ((void)0) 214 - #define ioremap_nocache(physaddr, size) ioremap(physaddr, size) 46 + #define ioremap_writethrough(addr, size) ioremap((addr), (size)) 47 + #define ioremap_nocache(addr, size) ioremap((addr), (size)) 48 + #define ioremap_fullcache(addr, size) ioremap((addr), (size)) 49 + #define ioremap_wc(addr, size) ioremap((addr), (size)) 215 50 216 51 #endif /* CONFIG_MMU */ 217 52 218 - /* 219 - * Convert a physical pointer to a virtual kernel pointer for /dev/mem 220 - * access 221 - */ 222 - #define xlate_dev_mem_ptr(p) __va(p) 223 - 224 - /* 225 - * Convert a virtual cached pointer to an uncached pointer 226 - */ 227 - #define xlate_dev_kmem_ptr(p) p 228 - 229 - /* 230 - * Big Endian 231 - */ 53 + /* Big Endian */ 232 54 #define out_be32(a, v) __raw_writel((v), (void __iomem __force *)(a)) 233 55 #define out_be16(a, v) __raw_writew((v), (a)) 234 56 ··· 59 239 #define writel_be(v, a) out_be32((__force unsigned *)a, v) 60 240 #define readl_be(a) in_be32((__force unsigned *)a) 61 241 62 - /* 63 - * Little endian 64 - */ 65 - 242 + /* Little endian */ 66 243 #define out_le32(a, v) __raw_writel(__cpu_to_le32(v), (a)) 67 244 #define out_le16(a, v) __raw_writew(__cpu_to_le16(v), (a)) 68 245 ··· 70 253 #define out_8(a, v) __raw_writeb((v), (a)) 71 254 #define in_8(a) __raw_readb(a) 72 255 73 - #define mmiowb() 74 - 75 - #define ioport_map(port, nr) ((void __iomem *)(port)) 76 - #define ioport_unmap(addr) 77 - 78 - /* from asm-generic/io.h */ 79 - #ifndef insb 80 - static inline void insb(unsigned long addr, void *buffer, int count) 81 - { 82 - if (count) { 83 - u8 *buf = buffer; 84 - do { 85 - u8 x = inb(addr); 86 - *buf++ = x; 87 - } while (--count); 88 - } 89 - } 90 - #endif 91 - 92 - #ifndef insw 93 - static inline void insw(unsigned long addr, void *buffer, int count) 94 - { 95 - if (count) { 96 - u16 *buf = buffer; 97 - do { 98 - u16 x = inw(addr); 99 - *buf++ = x; 100 - } while (--count); 101 - } 102 - } 103 - #endif 104 - 105 - #ifndef insl 106 - static inline void insl(unsigned long addr, void *buffer, int count) 107 - { 108 - if (count) { 109 - u32 *buf = buffer; 110 - do { 111 - u32 x = inl(addr); 112 - *buf++ = x; 113 - } while (--count); 114 - } 115 - } 116 - #endif 117 - 118 - #ifndef outsb 119 - static inline void outsb(unsigned long addr, const void *buffer, int count) 120 - { 121 - if (count) { 122 - const u8 *buf = buffer; 123 - do { 124 - outb(*buf++, addr); 125 - } while (--count); 126 - } 127 - } 128 - #endif 129 - 130 - #ifndef outsw 131 - static inline void outsw(unsigned long addr, const void *buffer, int count) 132 - { 133 - if (count) { 134 - const u16 *buf = buffer; 135 - do { 136 - outw(*buf++, addr); 137 - } while (--count); 138 - } 139 - } 140 - #endif 141 - 142 - #ifndef outsl 143 - static inline void outsl(unsigned long addr, const void *buffer, int count) 144 - { 145 - if (count) { 146 - const u32 *buf = buffer; 147 - do { 148 - outl(*buf++, addr); 149 - } while (--count); 150 - } 151 - } 152 - #endif 153 - 154 - #define ioread8_rep(p, dst, count) \ 155 - insb((unsigned long) (p), (dst), (count)) 156 - #define ioread16_rep(p, dst, count) \ 157 - insw((unsigned long) (p), (dst), (count)) 158 - #define ioread32_rep(p, dst, count) \ 159 - insl((unsigned long) (p), (dst), (count)) 160 - 161 - #define iowrite8_rep(p, src, count) \ 162 - outsb((unsigned long) (p), (src), (count)) 163 - #define iowrite16_rep(p, src, count) \ 164 - outsw((unsigned long) (p), (src), (count)) 165 - #define iowrite32_rep(p, src, count) \ 166 - outsl((unsigned long) (p), (src), (count)) 256 + #include <asm-generic/io.h> 167 257 168 258 #define readb_relaxed readb 169 259 #define readw_relaxed readw
+1 -1
arch/microblaze/include/asm/processor.h
··· 122 122 } 123 123 124 124 /* Free all resources held by a thread. */ 125 - extern inline void release_thread(struct task_struct *dead_task) 125 + static inline void release_thread(struct task_struct *dead_task) 126 126 { 127 127 } 128 128
+2 -4
arch/microblaze/include/asm/setup.h
··· 19 19 20 20 extern char *klimit; 21 21 22 - void early_printk(const char *fmt, ...); 23 - 24 22 int setup_early_printk(char *opt); 25 23 void remap_early_printk(void); 26 24 void disable_early_printk(void); 27 25 28 - void heartbeat(void); 29 - void setup_heartbeat(void); 26 + void microblaze_heartbeat(void); 27 + void microblaze_setup_heartbeat(void); 30 28 31 29 # ifdef CONFIG_MMU 32 30 extern void mmu_reset(void);
+4 -2
arch/microblaze/include/uapi/asm/unistd.h
··· 93 93 #define __NR_settimeofday 79 /* ok */ 94 94 #define __NR_getgroups 80 /* ok */ 95 95 #define __NR_setgroups 81 /* ok */ 96 - #define __NR_select 82 /* obsolete -> sys_pselect7 */ 96 + #define __NR_select 82 /* obsolete -> sys_pselect6 */ 97 97 #define __NR_symlink 83 /* symlinkat */ 98 98 #define __NR_oldlstat 84 /* remove */ 99 99 #define __NR_readlink 85 /* obsolete -> sys_readlinkat */ ··· 320 320 #define __NR_readlinkat 305 /* ok */ 321 321 #define __NR_fchmodat 306 /* ok */ 322 322 #define __NR_faccessat 307 /* ok */ 323 - #define __NR_pselect6 308 /* obsolete -> sys_pselect7 */ 323 + #define __NR_pselect6 308 /* ok */ 324 324 #define __NR_ppoll 309 /* ok */ 325 325 #define __NR_unshare 310 /* ok */ 326 326 #define __NR_set_robust_list 311 /* ok */ ··· 396 396 #define __NR_process_vm_writev 378 397 397 #define __NR_kcmp 379 398 398 #define __NR_finit_module 380 399 + #define __NR_sched_setattr 381 400 + #define __NR_sched_getattr 382 399 401 400 402 #endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */
+1 -1
arch/microblaze/kernel/Makefile
··· 16 16 17 17 obj-y += dma.o exceptions.o \ 18 18 hw_exception_handler.o intc.o irq.o \ 19 - process.o prom.o prom_parse.o ptrace.o \ 19 + platform.o process.o prom.o prom_parse.o ptrace.o \ 20 20 reset.o setup.o signal.o sys_microblaze.o timer.o traps.o unwind.o 21 21 22 22 obj-y += cpu/
+2 -2
arch/microblaze/kernel/heartbeat.c
··· 17 17 18 18 static unsigned int base_addr; 19 19 20 - void heartbeat(void) 20 + void microblaze_heartbeat(void) 21 21 { 22 22 static unsigned int cnt, period, dist; 23 23 ··· 42 42 } 43 43 } 44 44 45 - void setup_heartbeat(void) 45 + void microblaze_setup_heartbeat(void) 46 46 { 47 47 struct device_node *gpio = NULL; 48 48 int *prop;
+41 -10
arch/microblaze/kernel/intc.c
··· 32 32 #define MER_ME (1<<0) 33 33 #define MER_HIE (1<<1) 34 34 35 + static unsigned int (*read_fn)(void __iomem *); 36 + static void (*write_fn)(u32, void __iomem *); 37 + 38 + static void intc_write32(u32 val, void __iomem *addr) 39 + { 40 + iowrite32(val, addr); 41 + } 42 + 43 + static unsigned int intc_read32(void __iomem *addr) 44 + { 45 + return ioread32(addr); 46 + } 47 + 48 + static void intc_write32_be(u32 val, void __iomem *addr) 49 + { 50 + iowrite32be(val, addr); 51 + } 52 + 53 + static unsigned int intc_read32_be(void __iomem *addr) 54 + { 55 + return ioread32be(addr); 56 + } 57 + 35 58 static void intc_enable_or_unmask(struct irq_data *d) 36 59 { 37 60 unsigned long mask = 1 << d->hwirq; ··· 66 43 * acks the irq before calling the interrupt handler 67 44 */ 68 45 if (irqd_is_level_type(d)) 69 - out_be32(intc_baseaddr + IAR, mask); 46 + write_fn(mask, intc_baseaddr + IAR); 70 47 71 - out_be32(intc_baseaddr + SIE, mask); 48 + write_fn(mask, intc_baseaddr + SIE); 72 49 } 73 50 74 51 static void intc_disable_or_mask(struct irq_data *d) 75 52 { 76 53 pr_debug("disable: %ld\n", d->hwirq); 77 - out_be32(intc_baseaddr + CIE, 1 << d->hwirq); 54 + write_fn(1 << d->hwirq, intc_baseaddr + CIE); 78 55 } 79 56 80 57 static void intc_ack(struct irq_data *d) 81 58 { 82 59 pr_debug("ack: %ld\n", d->hwirq); 83 - out_be32(intc_baseaddr + IAR, 1 << d->hwirq); 60 + write_fn(1 << d->hwirq, intc_baseaddr + IAR); 84 61 } 85 62 86 63 static void intc_mask_ack(struct irq_data *d) ··· 88 65 unsigned long mask = 1 << d->hwirq; 89 66 90 67 pr_debug("disable_and_ack: %ld\n", d->hwirq); 91 - out_be32(intc_baseaddr + CIE, mask); 92 - out_be32(intc_baseaddr + IAR, mask); 68 + write_fn(mask, intc_baseaddr + CIE); 69 + write_fn(mask, intc_baseaddr + IAR); 93 70 } 94 71 95 72 static struct irq_chip intc_dev = { ··· 106 83 { 107 84 unsigned int hwirq, irq = -1; 108 85 109 - hwirq = in_be32(intc_baseaddr + IVR); 86 + hwirq = read_fn(intc_baseaddr + IVR); 110 87 if (hwirq != -1U) 111 88 irq = irq_find_mapping(root_domain, hwirq); 112 89 ··· 163 140 pr_info("%s: num_irq=%d, edge=0x%x\n", 164 141 intc->full_name, nr_irq, intr_mask); 165 142 143 + write_fn = intc_write32; 144 + read_fn = intc_read32; 145 + 166 146 /* 167 147 * Disable all external interrupts until they are 168 148 * explicity requested. 169 149 */ 170 - out_be32(intc_baseaddr + IER, 0); 150 + write_fn(0, intc_baseaddr + IER); 171 151 172 152 /* Acknowledge any pending interrupts just in case. */ 173 - out_be32(intc_baseaddr + IAR, 0xffffffff); 153 + write_fn(0xffffffff, intc_baseaddr + IAR); 174 154 175 155 /* Turn on the Master Enable. */ 176 - out_be32(intc_baseaddr + MER, MER_HIE | MER_ME); 156 + write_fn(MER_HIE | MER_ME, intc_baseaddr + MER); 157 + if (!(read_fn(intc_baseaddr + MER) & (MER_HIE | MER_ME))) { 158 + write_fn = intc_write32_be; 159 + read_fn = intc_read32_be; 160 + write_fn(MER_HIE | MER_ME, intc_baseaddr + MER); 161 + } 177 162 178 163 /* Yeah, okay, casting the intr_mask to a void* is butt-ugly, but I'm 179 164 * lazy and Michal can clean it up to something nicer when he tests
+1
arch/microblaze/kernel/process.c
··· 8 8 * for more details. 9 9 */ 10 10 11 + #include <linux/cpu.h> 11 12 #include <linux/export.h> 12 13 #include <linux/sched.h> 13 14 #include <linux/pm.h>
+1 -1
arch/microblaze/kernel/signal.c
··· 216 216 /* MS: I need add offset in page */ 217 217 address += ((unsigned long)frame->tramp) & ~PAGE_MASK; 218 218 /* MS address is virtual */ 219 - address = virt_to_phys(address); 219 + address = __virt_to_phys(address); 220 220 invalidate_icache_range(address, address + 8); 221 221 flush_dcache_range(address, address + 8); 222 222 }
+5 -3
arch/microblaze/kernel/syscall_table.S
··· 308 308 .long sys_readlinkat /* 305 */ 309 309 .long sys_fchmodat 310 310 .long sys_faccessat 311 - .long sys_ni_syscall /* pselect6 */ 311 + .long sys_pselect6 312 312 .long sys_ppoll 313 313 .long sys_unshare /* 310 */ 314 314 .long sys_set_robust_list ··· 363 363 .long sys_sendmsg /* 360 */ 364 364 .long sys_recvmsg 365 365 .long sys_accept4 366 - .long sys_ni_syscall 367 - .long sys_ni_syscall 366 + .long sys_preadv 367 + .long sys_pwritev 368 368 .long sys_rt_tgsigqueueinfo /* 365 */ 369 369 .long sys_perf_event_open 370 370 .long sys_recvmmsg ··· 381 381 .long sys_process_vm_writev 382 382 .long sys_kcmp 383 383 .long sys_finit_module 384 + .long sys_sched_setattr 385 + .long sys_sched_getattr
+49 -17
arch/microblaze/kernel/timer.c
··· 43 43 #define TCSR_PWMA (1<<9) 44 44 #define TCSR_ENALL (1<<10) 45 45 46 + static unsigned int (*read_fn)(void __iomem *); 47 + static void (*write_fn)(u32, void __iomem *); 48 + 49 + static void timer_write32(u32 val, void __iomem *addr) 50 + { 51 + iowrite32(val, addr); 52 + } 53 + 54 + static unsigned int timer_read32(void __iomem *addr) 55 + { 56 + return ioread32(addr); 57 + } 58 + 59 + static void timer_write32_be(u32 val, void __iomem *addr) 60 + { 61 + iowrite32be(val, addr); 62 + } 63 + 64 + static unsigned int timer_read32_be(void __iomem *addr) 65 + { 66 + return ioread32be(addr); 67 + } 68 + 46 69 static inline void xilinx_timer0_stop(void) 47 70 { 48 - out_be32(timer_baseaddr + TCSR0, 49 - in_be32(timer_baseaddr + TCSR0) & ~TCSR_ENT); 71 + write_fn(read_fn(timer_baseaddr + TCSR0) & ~TCSR_ENT, 72 + timer_baseaddr + TCSR0); 50 73 } 51 74 52 75 static inline void xilinx_timer0_start_periodic(unsigned long load_val) ··· 77 54 if (!load_val) 78 55 load_val = 1; 79 56 /* loading value to timer reg */ 80 - out_be32(timer_baseaddr + TLR0, load_val); 57 + write_fn(load_val, timer_baseaddr + TLR0); 81 58 82 59 /* load the initial value */ 83 - out_be32(timer_baseaddr + TCSR0, TCSR_LOAD); 60 + write_fn(TCSR_LOAD, timer_baseaddr + TCSR0); 84 61 85 62 /* see timer data sheet for detail 86 63 * !ENALL - don't enable 'em all ··· 95 72 * UDT - set the timer as down counter 96 73 * !MDT0 - generate mode 97 74 */ 98 - out_be32(timer_baseaddr + TCSR0, 99 - TCSR_TINT|TCSR_ENIT|TCSR_ENT|TCSR_ARHT|TCSR_UDT); 75 + write_fn(TCSR_TINT|TCSR_ENIT|TCSR_ENT|TCSR_ARHT|TCSR_UDT, 76 + timer_baseaddr + TCSR0); 100 77 } 101 78 102 79 static inline void xilinx_timer0_start_oneshot(unsigned long load_val) ··· 104 81 if (!load_val) 105 82 load_val = 1; 106 83 /* loading value to timer reg */ 107 - out_be32(timer_baseaddr + TLR0, load_val); 84 + write_fn(load_val, timer_baseaddr + TLR0); 108 85 109 86 /* load the initial value */ 110 - out_be32(timer_baseaddr + TCSR0, TCSR_LOAD); 87 + write_fn(TCSR_LOAD, timer_baseaddr + TCSR0); 111 88 112 - out_be32(timer_baseaddr + TCSR0, 113 - TCSR_TINT|TCSR_ENIT|TCSR_ENT|TCSR_ARHT|TCSR_UDT); 89 + write_fn(TCSR_TINT|TCSR_ENIT|TCSR_ENT|TCSR_ARHT|TCSR_UDT, 90 + timer_baseaddr + TCSR0); 114 91 } 115 92 116 93 static int xilinx_timer_set_next_event(unsigned long delta, ··· 156 133 157 134 static inline void timer_ack(void) 158 135 { 159 - out_be32(timer_baseaddr + TCSR0, in_be32(timer_baseaddr + TCSR0)); 136 + write_fn(read_fn(timer_baseaddr + TCSR0), timer_baseaddr + TCSR0); 160 137 } 161 138 162 139 static irqreturn_t timer_interrupt(int irq, void *dev_id) 163 140 { 164 141 struct clock_event_device *evt = &clockevent_xilinx_timer; 165 142 #ifdef CONFIG_HEART_BEAT 166 - heartbeat(); 143 + microblaze_heartbeat(); 167 144 #endif 168 145 timer_ack(); 169 146 evt->event_handler(evt); ··· 192 169 193 170 static u64 xilinx_clock_read(void) 194 171 { 195 - return in_be32(timer_baseaddr + TCR1); 172 + return read_fn(timer_baseaddr + TCR1); 196 173 } 197 174 198 175 static cycle_t xilinx_read(struct clocksource *cs) ··· 240 217 panic("failed to register clocksource"); 241 218 242 219 /* stop timer1 */ 243 - out_be32(timer_baseaddr + TCSR1, 244 - in_be32(timer_baseaddr + TCSR1) & ~TCSR_ENT); 220 + write_fn(read_fn(timer_baseaddr + TCSR1) & ~TCSR_ENT, 221 + timer_baseaddr + TCSR1); 245 222 /* start timer1 - up counting without interrupt */ 246 - out_be32(timer_baseaddr + TCSR1, TCSR_TINT|TCSR_ENT|TCSR_ARHT); 223 + write_fn(TCSR_TINT|TCSR_ENT|TCSR_ARHT, timer_baseaddr + TCSR1); 247 224 248 225 /* register timecounter - for ftrace support */ 249 226 init_xilinx_timecounter(); ··· 266 243 if (!timer_baseaddr) { 267 244 pr_err("ERROR: invalid timer base address\n"); 268 245 BUG(); 246 + } 247 + 248 + write_fn = timer_write32; 249 + read_fn = timer_read32; 250 + 251 + write_fn(TCSR_MDT, timer_baseaddr + TCSR0); 252 + if (!(read_fn(timer_baseaddr + TCSR0) & TCSR_MDT)) { 253 + write_fn = timer_write32_be; 254 + read_fn = timer_read32_be; 269 255 } 270 256 271 257 irq = irq_of_parse_and_map(timer, 0); ··· 306 274 307 275 setup_irq(irq, &timer_irqaction); 308 276 #ifdef CONFIG_HEART_BEAT 309 - setup_heartbeat(); 277 + microblaze_setup_heartbeat(); 310 278 #endif 311 279 xilinx_clocksource_init(); 312 280 xilinx_clockevent_init();
+1 -1
arch/microblaze/mm/consistent.c
··· 117 117 ret = (void *)va; 118 118 119 119 /* This gives us the real physical address of the first page. */ 120 - *dma_handle = pa = virt_to_bus((void *)vaddr); 120 + *dma_handle = pa = __virt_to_phys(vaddr); 121 121 #endif 122 122 123 123 /*
+1 -1
arch/microblaze/mm/init.c
··· 369 369 if (initrd_start) { 370 370 unsigned long size; 371 371 size = initrd_end - initrd_start; 372 - memblock_reserve(virt_to_phys(initrd_start), size); 372 + memblock_reserve(__virt_to_phys(initrd_start), size); 373 373 } 374 374 #endif /* CONFIG_BLK_DEV_INITRD */ 375 375
+3 -2
arch/microblaze/mm/pgtable.c
··· 69 69 * 70 70 * However, allow remap of rootfs: TBD 71 71 */ 72 + 72 73 if (mem_init_done && 73 74 p >= memory_start && p < virt_to_phys(high_memory) && 74 - !(p >= virt_to_phys((unsigned long)&__bss_stop) && 75 - p < virt_to_phys((unsigned long)__bss_stop))) { 75 + !(p >= __virt_to_phys((phys_addr_t)__bss_stop) && 76 + p < __virt_to_phys((phys_addr_t)__bss_stop))) { 76 77 pr_warn("__ioremap(): phys addr "PTE_FMT" is RAM lr %pf\n", 77 78 (unsigned long)p, __builtin_return_address(0)); 78 79 return NULL;
+40 -15
arch/microblaze/platform/Kconfig.platform arch/microblaze/Kconfig.platform
··· 5 5 # 6 6 7 7 menu "Platform options" 8 - choice 9 - prompt "Platform" 10 - default PLATFORM_MICROBLAZE_AUTO 11 - help 12 - Choose which hardware board/platform you are targeting. 13 - 14 - config PLATFORM_GENERIC 15 - bool "Generic" 16 - help 17 - Choose this option for the Generic platform. 18 - 19 - endchoice 20 8 21 9 config OPT_LIB_FUNCTION 22 10 bool "Optimalized lib function" ··· 25 37 Allows turn on optimalized library function (memcpy and memmove). 26 38 Function are written in asm code. 27 39 28 - if PLATFORM_GENERIC=y 29 - source "arch/microblaze/platform/generic/Kconfig.auto" 30 - endif 40 + # Definitions for MICROBLAZE0 41 + comment "Definitions for MICROBLAZE0" 42 + 43 + config KERNEL_BASE_ADDR 44 + hex "Physical address where Linux Kernel is" 45 + default "0x90000000" 46 + help 47 + BASE Address for kernel 48 + 49 + config XILINX_MICROBLAZE0_FAMILY 50 + string "Targeted FPGA family" 51 + default "virtex5" 52 + 53 + config XILINX_MICROBLAZE0_USE_MSR_INSTR 54 + int "USE_MSR_INSTR range (0:1)" 55 + default 0 56 + 57 + config XILINX_MICROBLAZE0_USE_PCMP_INSTR 58 + int "USE_PCMP_INSTR range (0:1)" 59 + default 0 60 + 61 + config XILINX_MICROBLAZE0_USE_BARREL 62 + int "USE_BARREL range (0:1)" 63 + default 0 64 + 65 + config XILINX_MICROBLAZE0_USE_DIV 66 + int "USE_DIV range (0:1)" 67 + default 0 68 + 69 + config XILINX_MICROBLAZE0_USE_HW_MUL 70 + int "USE_HW_MUL values (0=NONE, 1=MUL32, 2=MUL64)" 71 + default 0 72 + 73 + config XILINX_MICROBLAZE0_USE_FPU 74 + int "USE_FPU values (0=NONE, 1=BASIC, 2=EXTENDED)" 75 + default 0 76 + 77 + config XILINX_MICROBLAZE0_HW_VER 78 + string "Core version number" 79 + default 7.10.d 31 80 32 81 endmenu
-6
arch/microblaze/platform/Makefile
··· 1 - # 2 - # Makefile for arch/microblaze/platform directory 3 - # 4 - #obj-$(CONFIG_PLATFORM_GENERIC) += generic/ 5 - 6 - obj-y += platform.o
-61
arch/microblaze/platform/generic/Kconfig.auto
··· 1 - # 2 - # (C) Copyright 2007 Michal Simek 3 - # 4 - # Michal SIMEK <monstr@monstr.eu> 5 - # 6 - # This program is free software; you can redistribute it and/or 7 - # modify it under the terms of the GNU General Public License as 8 - # published by the Free Software Foundation; either version 2 of 9 - # the License, or (at your option) any later version. 10 - # 11 - # This program is distributed in the hope that it will be useful, 12 - # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 - # GNU General Public License for more details. 15 - # 16 - # You should have received a copy of the GNU General Public License 17 - # along with this program; if not, write to the Free Software 18 - # Foundation, Inc., 59 Temple Place, Suite 330, Boston, 19 - # MA 02111-1307 USA 20 - # 21 - 22 - # Definitions for MICROBLAZE0 23 - comment "Definitions for MICROBLAZE0" 24 - 25 - config KERNEL_BASE_ADDR 26 - hex "Physical address where Linux Kernel is" 27 - default "0x90000000" 28 - help 29 - BASE Address for kernel 30 - 31 - config XILINX_MICROBLAZE0_FAMILY 32 - string "Targeted FPGA family" 33 - default "virtex5" 34 - 35 - config XILINX_MICROBLAZE0_USE_MSR_INSTR 36 - int "USE_MSR_INSTR range (0:1)" 37 - default 0 38 - 39 - config XILINX_MICROBLAZE0_USE_PCMP_INSTR 40 - int "USE_PCMP_INSTR range (0:1)" 41 - default 0 42 - 43 - config XILINX_MICROBLAZE0_USE_BARREL 44 - int "USE_BARREL range (0:1)" 45 - default 0 46 - 47 - config XILINX_MICROBLAZE0_USE_DIV 48 - int "USE_DIV range (0:1)" 49 - default 0 50 - 51 - config XILINX_MICROBLAZE0_USE_HW_MUL 52 - int "USE_HW_MUL values (0=NONE, 1=MUL32, 2=MUL64)" 53 - default 0 54 - 55 - config XILINX_MICROBLAZE0_USE_FPU 56 - int "USE_FPU values (0=NONE, 1=BASIC, 2=EXTENDED)" 57 - default 0 58 - 59 - config XILINX_MICROBLAZE0_HW_VER 60 - string "Core version number" 61 - default 7.10.d
-3
arch/microblaze/platform/generic/Makefile
··· 1 - # 2 - # Empty Makefile to keep make clean happy 3 - #
-366
arch/microblaze/platform/generic/system.dts
··· 1 - /* 2 - * Device Tree Generator version: 1.1 3 - * 4 - * (C) Copyright 2007-2008 Xilinx, Inc. 5 - * (C) Copyright 2007-2009 Michal Simek 6 - * 7 - * Michal SIMEK <monstr@monstr.eu> 8 - * 9 - * This program is free software; you can redistribute it and/or 10 - * modify it under the terms of the GNU General Public License as 11 - * published by the Free Software Foundation; either version 2 of 12 - * the License, or (at your option) any later version. 13 - * 14 - * This program is distributed in the hope that it will be useful, 15 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 - * GNU General Public License for more details. 18 - * 19 - * You should have received a copy of the GNU General Public License 20 - * along with this program; if not, write to the Free Software 21 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22 - * MA 02111-1307 USA 23 - * 24 - * CAUTION: This file is automatically generated by libgen. 25 - * Version: Xilinx EDK 10.1.03 EDK_K_SP3.6 26 - * 27 - * XPS project directory: Xilinx-ML505-ll_temac-sgdma-MMU-FDT-edk101 28 - */ 29 - 30 - /dts-v1/; 31 - / { 32 - #address-cells = <1>; 33 - #size-cells = <1>; 34 - compatible = "xlnx,microblaze"; 35 - hard-reset-gpios = <&LEDs_8Bit 2 1>; 36 - model = "testing"; 37 - DDR2_SDRAM: memory@90000000 { 38 - device_type = "memory"; 39 - reg = < 0x90000000 0x10000000 >; 40 - } ; 41 - aliases { 42 - ethernet0 = &Hard_Ethernet_MAC; 43 - serial0 = &RS232_Uart_1; 44 - } ; 45 - chosen { 46 - bootargs = "console=ttyUL0,115200 highres=on"; 47 - linux,stdout-path = "/plb@0/serial@84000000"; 48 - } ; 49 - cpus { 50 - #address-cells = <1>; 51 - #cpus = <0x1>; 52 - #size-cells = <0>; 53 - microblaze_0: cpu@0 { 54 - clock-frequency = <125000000>; 55 - compatible = "xlnx,microblaze-7.10.d"; 56 - d-cache-baseaddr = <0x90000000>; 57 - d-cache-highaddr = <0x9fffffff>; 58 - d-cache-line-size = <0x10>; 59 - d-cache-size = <0x2000>; 60 - device_type = "cpu"; 61 - i-cache-baseaddr = <0x90000000>; 62 - i-cache-highaddr = <0x9fffffff>; 63 - i-cache-line-size = <0x10>; 64 - i-cache-size = <0x2000>; 65 - model = "microblaze,7.10.d"; 66 - reg = <0>; 67 - timebase-frequency = <125000000>; 68 - xlnx,addr-tag-bits = <0xf>; 69 - xlnx,allow-dcache-wr = <0x1>; 70 - xlnx,allow-icache-wr = <0x1>; 71 - xlnx,area-optimized = <0x0>; 72 - xlnx,cache-byte-size = <0x2000>; 73 - xlnx,d-lmb = <0x1>; 74 - xlnx,d-opb = <0x0>; 75 - xlnx,d-plb = <0x1>; 76 - xlnx,data-size = <0x20>; 77 - xlnx,dcache-addr-tag = <0xf>; 78 - xlnx,dcache-always-used = <0x1>; 79 - xlnx,dcache-byte-size = <0x2000>; 80 - xlnx,dcache-line-len = <0x4>; 81 - xlnx,dcache-use-fsl = <0x1>; 82 - xlnx,debug-enabled = <0x1>; 83 - xlnx,div-zero-exception = <0x1>; 84 - xlnx,dopb-bus-exception = <0x0>; 85 - xlnx,dynamic-bus-sizing = <0x1>; 86 - xlnx,edge-is-positive = <0x1>; 87 - xlnx,family = "virtex5"; 88 - xlnx,endianness = <0x1>; 89 - xlnx,fpu-exception = <0x1>; 90 - xlnx,fsl-data-size = <0x20>; 91 - xlnx,fsl-exception = <0x0>; 92 - xlnx,fsl-links = <0x0>; 93 - xlnx,i-lmb = <0x1>; 94 - xlnx,i-opb = <0x0>; 95 - xlnx,i-plb = <0x1>; 96 - xlnx,icache-always-used = <0x1>; 97 - xlnx,icache-line-len = <0x4>; 98 - xlnx,icache-use-fsl = <0x1>; 99 - xlnx,ill-opcode-exception = <0x1>; 100 - xlnx,instance = "microblaze_0"; 101 - xlnx,interconnect = <0x1>; 102 - xlnx,interrupt-is-edge = <0x0>; 103 - xlnx,iopb-bus-exception = <0x0>; 104 - xlnx,mmu-dtlb-size = <0x4>; 105 - xlnx,mmu-itlb-size = <0x2>; 106 - xlnx,mmu-tlb-access = <0x3>; 107 - xlnx,mmu-zones = <0x10>; 108 - xlnx,number-of-pc-brk = <0x1>; 109 - xlnx,number-of-rd-addr-brk = <0x0>; 110 - xlnx,number-of-wr-addr-brk = <0x0>; 111 - xlnx,opcode-0x0-illegal = <0x1>; 112 - xlnx,pvr = <0x2>; 113 - xlnx,pvr-user1 = <0x0>; 114 - xlnx,pvr-user2 = <0x0>; 115 - xlnx,reset-msr = <0x0>; 116 - xlnx,sco = <0x0>; 117 - xlnx,unaligned-exceptions = <0x1>; 118 - xlnx,use-barrel = <0x1>; 119 - xlnx,use-dcache = <0x1>; 120 - xlnx,use-div = <0x1>; 121 - xlnx,use-ext-brk = <0x1>; 122 - xlnx,use-ext-nm-brk = <0x1>; 123 - xlnx,use-extended-fsl-instr = <0x0>; 124 - xlnx,use-fpu = <0x2>; 125 - xlnx,use-hw-mul = <0x2>; 126 - xlnx,use-icache = <0x1>; 127 - xlnx,use-interrupt = <0x1>; 128 - xlnx,use-mmu = <0x3>; 129 - xlnx,use-msr-instr = <0x1>; 130 - xlnx,use-pcmp-instr = <0x1>; 131 - } ; 132 - } ; 133 - mb_plb: plb@0 { 134 - #address-cells = <1>; 135 - #size-cells = <1>; 136 - compatible = "xlnx,plb-v46-1.03.a", "xlnx,plb-v46-1.00.a", "simple-bus"; 137 - ranges ; 138 - FLASH: flash@a0000000 { 139 - bank-width = <2>; 140 - compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash"; 141 - reg = < 0xa0000000 0x2000000 >; 142 - xlnx,family = "virtex5"; 143 - xlnx,include-datawidth-matching-0 = <0x1>; 144 - xlnx,include-datawidth-matching-1 = <0x0>; 145 - xlnx,include-datawidth-matching-2 = <0x0>; 146 - xlnx,include-datawidth-matching-3 = <0x0>; 147 - xlnx,include-negedge-ioregs = <0x0>; 148 - xlnx,include-plb-ipif = <0x1>; 149 - xlnx,include-wrbuf = <0x1>; 150 - xlnx,max-mem-width = <0x10>; 151 - xlnx,mch-native-dwidth = <0x20>; 152 - xlnx,mch-plb-clk-period-ps = <0x1f40>; 153 - xlnx,mch-splb-awidth = <0x20>; 154 - xlnx,mch0-accessbuf-depth = <0x10>; 155 - xlnx,mch0-protocol = <0x0>; 156 - xlnx,mch0-rddatabuf-depth = <0x10>; 157 - xlnx,mch1-accessbuf-depth = <0x10>; 158 - xlnx,mch1-protocol = <0x0>; 159 - xlnx,mch1-rddatabuf-depth = <0x10>; 160 - xlnx,mch2-accessbuf-depth = <0x10>; 161 - xlnx,mch2-protocol = <0x0>; 162 - xlnx,mch2-rddatabuf-depth = <0x10>; 163 - xlnx,mch3-accessbuf-depth = <0x10>; 164 - xlnx,mch3-protocol = <0x0>; 165 - xlnx,mch3-rddatabuf-depth = <0x10>; 166 - xlnx,mem0-width = <0x10>; 167 - xlnx,mem1-width = <0x20>; 168 - xlnx,mem2-width = <0x20>; 169 - xlnx,mem3-width = <0x20>; 170 - xlnx,num-banks-mem = <0x1>; 171 - xlnx,num-channels = <0x0>; 172 - xlnx,priority-mode = <0x0>; 173 - xlnx,synch-mem-0 = <0x0>; 174 - xlnx,synch-mem-1 = <0x0>; 175 - xlnx,synch-mem-2 = <0x0>; 176 - xlnx,synch-mem-3 = <0x0>; 177 - xlnx,synch-pipedelay-0 = <0x2>; 178 - xlnx,synch-pipedelay-1 = <0x2>; 179 - xlnx,synch-pipedelay-2 = <0x2>; 180 - xlnx,synch-pipedelay-3 = <0x2>; 181 - xlnx,tavdv-ps-mem-0 = <0x1adb0>; 182 - xlnx,tavdv-ps-mem-1 = <0x3a98>; 183 - xlnx,tavdv-ps-mem-2 = <0x3a98>; 184 - xlnx,tavdv-ps-mem-3 = <0x3a98>; 185 - xlnx,tcedv-ps-mem-0 = <0x1adb0>; 186 - xlnx,tcedv-ps-mem-1 = <0x3a98>; 187 - xlnx,tcedv-ps-mem-2 = <0x3a98>; 188 - xlnx,tcedv-ps-mem-3 = <0x3a98>; 189 - xlnx,thzce-ps-mem-0 = <0x88b8>; 190 - xlnx,thzce-ps-mem-1 = <0x1b58>; 191 - xlnx,thzce-ps-mem-2 = <0x1b58>; 192 - xlnx,thzce-ps-mem-3 = <0x1b58>; 193 - xlnx,thzoe-ps-mem-0 = <0x1b58>; 194 - xlnx,thzoe-ps-mem-1 = <0x1b58>; 195 - xlnx,thzoe-ps-mem-2 = <0x1b58>; 196 - xlnx,thzoe-ps-mem-3 = <0x1b58>; 197 - xlnx,tlzwe-ps-mem-0 = <0x88b8>; 198 - xlnx,tlzwe-ps-mem-1 = <0x0>; 199 - xlnx,tlzwe-ps-mem-2 = <0x0>; 200 - xlnx,tlzwe-ps-mem-3 = <0x0>; 201 - xlnx,twc-ps-mem-0 = <0x2af8>; 202 - xlnx,twc-ps-mem-1 = <0x3a98>; 203 - xlnx,twc-ps-mem-2 = <0x3a98>; 204 - xlnx,twc-ps-mem-3 = <0x3a98>; 205 - xlnx,twp-ps-mem-0 = <0x11170>; 206 - xlnx,twp-ps-mem-1 = <0x2ee0>; 207 - xlnx,twp-ps-mem-2 = <0x2ee0>; 208 - xlnx,twp-ps-mem-3 = <0x2ee0>; 209 - xlnx,xcl0-linesize = <0x4>; 210 - xlnx,xcl0-writexfer = <0x1>; 211 - xlnx,xcl1-linesize = <0x4>; 212 - xlnx,xcl1-writexfer = <0x1>; 213 - xlnx,xcl2-linesize = <0x4>; 214 - xlnx,xcl2-writexfer = <0x1>; 215 - xlnx,xcl3-linesize = <0x4>; 216 - xlnx,xcl3-writexfer = <0x1>; 217 - } ; 218 - Hard_Ethernet_MAC: xps-ll-temac@81c00000 { 219 - #address-cells = <1>; 220 - #size-cells = <1>; 221 - compatible = "xlnx,compound"; 222 - ranges ; 223 - ethernet@81c00000 { 224 - compatible = "xlnx,xps-ll-temac-1.01.b", "xlnx,xps-ll-temac-1.00.a"; 225 - interrupt-parent = <&xps_intc_0>; 226 - interrupts = < 5 2 >; 227 - llink-connected = <&PIM3>; 228 - local-mac-address = [ 00 0a 35 00 00 00 ]; 229 - reg = < 0x81c00000 0x40 >; 230 - xlnx,bus2core-clk-ratio = <0x1>; 231 - xlnx,phy-type = <0x1>; 232 - xlnx,phyaddr = <0x1>; 233 - xlnx,rxcsum = <0x0>; 234 - xlnx,rxfifo = <0x1000>; 235 - xlnx,temac-type = <0x0>; 236 - xlnx,txcsum = <0x0>; 237 - xlnx,txfifo = <0x1000>; 238 - } ; 239 - } ; 240 - IIC_EEPROM: i2c@81600000 { 241 - compatible = "xlnx,xps-iic-2.00.a"; 242 - interrupt-parent = <&xps_intc_0>; 243 - interrupts = < 6 2 >; 244 - reg = < 0x81600000 0x10000 >; 245 - xlnx,clk-freq = <0x7735940>; 246 - xlnx,family = "virtex5"; 247 - xlnx,gpo-width = <0x1>; 248 - xlnx,iic-freq = <0x186a0>; 249 - xlnx,scl-inertial-delay = <0x0>; 250 - xlnx,sda-inertial-delay = <0x0>; 251 - xlnx,ten-bit-adr = <0x0>; 252 - } ; 253 - LEDs_8Bit: gpio@81400000 { 254 - compatible = "xlnx,xps-gpio-1.00.a"; 255 - interrupt-parent = <&xps_intc_0>; 256 - interrupts = < 7 2 >; 257 - reg = < 0x81400000 0x10000 >; 258 - xlnx,all-inputs = <0x0>; 259 - xlnx,all-inputs-2 = <0x0>; 260 - xlnx,dout-default = <0x0>; 261 - xlnx,dout-default-2 = <0x0>; 262 - xlnx,family = "virtex5"; 263 - xlnx,gpio-width = <0x8>; 264 - xlnx,interrupt-present = <0x1>; 265 - xlnx,is-bidir = <0x1>; 266 - xlnx,is-bidir-2 = <0x1>; 267 - xlnx,is-dual = <0x0>; 268 - xlnx,tri-default = <0xffffffff>; 269 - xlnx,tri-default-2 = <0xffffffff>; 270 - #gpio-cells = <2>; 271 - gpio-controller; 272 - } ; 273 - 274 - gpio-leds { 275 - compatible = "gpio-leds"; 276 - 277 - heartbeat { 278 - label = "Heartbeat"; 279 - gpios = <&LEDs_8Bit 4 1>; 280 - linux,default-trigger = "heartbeat"; 281 - }; 282 - 283 - yellow { 284 - label = "Yellow"; 285 - gpios = <&LEDs_8Bit 5 1>; 286 - }; 287 - 288 - red { 289 - label = "Red"; 290 - gpios = <&LEDs_8Bit 6 1>; 291 - }; 292 - 293 - green { 294 - label = "Green"; 295 - gpios = <&LEDs_8Bit 7 1>; 296 - }; 297 - } ; 298 - RS232_Uart_1: serial@84000000 { 299 - clock-frequency = <125000000>; 300 - compatible = "xlnx,xps-uartlite-1.00.a"; 301 - current-speed = <115200>; 302 - device_type = "serial"; 303 - interrupt-parent = <&xps_intc_0>; 304 - interrupts = < 8 0 >; 305 - port-number = <0>; 306 - reg = < 0x84000000 0x10000 >; 307 - xlnx,baudrate = <0x1c200>; 308 - xlnx,data-bits = <0x8>; 309 - xlnx,family = "virtex5"; 310 - xlnx,odd-parity = <0x0>; 311 - xlnx,use-parity = <0x0>; 312 - } ; 313 - SysACE_CompactFlash: sysace@83600000 { 314 - compatible = "xlnx,xps-sysace-1.00.a"; 315 - interrupt-parent = <&xps_intc_0>; 316 - interrupts = < 4 2 >; 317 - reg = < 0x83600000 0x10000 >; 318 - xlnx,family = "virtex5"; 319 - xlnx,mem-width = <0x10>; 320 - } ; 321 - debug_module: debug@84400000 { 322 - compatible = "xlnx,mdm-1.00.d"; 323 - reg = < 0x84400000 0x10000 >; 324 - xlnx,family = "virtex5"; 325 - xlnx,interconnect = <0x1>; 326 - xlnx,jtag-chain = <0x2>; 327 - xlnx,mb-dbg-ports = <0x1>; 328 - xlnx,uart-width = <0x8>; 329 - xlnx,use-uart = <0x1>; 330 - xlnx,write-fsl-ports = <0x0>; 331 - } ; 332 - mpmc@90000000 { 333 - #address-cells = <1>; 334 - #size-cells = <1>; 335 - compatible = "xlnx,mpmc-4.02.a"; 336 - ranges ; 337 - PIM3: sdma@84600180 { 338 - compatible = "xlnx,ll-dma-1.00.a"; 339 - interrupt-parent = <&xps_intc_0>; 340 - interrupts = < 2 2 1 2 >; 341 - reg = < 0x84600180 0x80 >; 342 - } ; 343 - } ; 344 - xps_intc_0: interrupt-controller@81800000 { 345 - #interrupt-cells = <0x2>; 346 - compatible = "xlnx,xps-intc-1.00.a"; 347 - interrupt-controller ; 348 - reg = < 0x81800000 0x10000 >; 349 - xlnx,kind-of-intr = <0x100>; 350 - xlnx,num-intr-inputs = <0x9>; 351 - } ; 352 - xps_timer_1: timer@83c00000 { 353 - compatible = "xlnx,xps-timer-1.00.a"; 354 - interrupt-parent = <&xps_intc_0>; 355 - interrupts = < 3 2 >; 356 - reg = < 0x83c00000 0x10000 >; 357 - xlnx,count-width = <0x20>; 358 - xlnx,family = "virtex5"; 359 - xlnx,gen0-assert = <0x1>; 360 - xlnx,gen1-assert = <0x1>; 361 - xlnx,one-timer-only = <0x0>; 362 - xlnx,trig0-assert = <0x1>; 363 - xlnx,trig1-assert = <0x1>; 364 - } ; 365 - } ; 366 - } ;
arch/microblaze/platform/platform.c arch/microblaze/kernel/platform.c