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

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (103 commits)
powerpc: Fix bug in move of altivec code to vector.S
powerpc: Add support for swiotlb on 32-bit
powerpc/spufs: Remove unused error path
powerpc: Fix warning when printing a resource_size_t
powerpc/xmon: Remove unused variable in xmon.c
powerpc/pseries: Fix warnings when printing resource_size_t
powerpc: Shield code specific to 64-bit server processors
powerpc: Separate PACA fields for server CPUs
powerpc: Split exception handling out of head_64.S
powerpc: Introduce CONFIG_PPC_BOOK3S
powerpc: Move VMX and VSX asm code to vector.S
powerpc: Set init_bootmem_done on NUMA platforms as well
powerpc/mm: Fix a AB->BA deadlock scenario with nohash MMU context lock
powerpc/mm: Fix some SMP issues with MMU context handling
powerpc: Add PTRACE_SINGLEBLOCK support
fbdev: Add PLB support and cleanup DCR in xilinxfb driver.
powerpc/virtex: Add ml510 reference design device tree
powerpc/virtex: Add Xilinx ML510 reference design support
powerpc/virtex: refactor intc driver and add support for i8259 cascading
powerpc/virtex: Add support for Xilinx PCI host bridge
...

+6193 -2359
+7
Documentation/kernel-parameters.txt
··· 491 491 Also note the kernel might malfunction if you disable 492 492 some critical bits. 493 493 494 + cmo_free_hint= [PPC] Format: { yes | no } 495 + Specify whether pages are marked as being inactive 496 + when they are freed. This is used in CMO environments 497 + to determine OS memory pressure for page stealing by 498 + a hypervisor. 499 + Default: yes 500 + 494 501 code_bytes [X86] How many bytes of object code to print 495 502 in an oops report. 496 503 Range: 0 - 8192
+64
Documentation/powerpc/dts-bindings/ecm.txt
··· 1 + ===================================================================== 2 + E500 LAW & Coherency Module Device Tree Binding 3 + Copyright (C) 2009 Freescale Semiconductor Inc. 4 + ===================================================================== 5 + 6 + Local Access Window (LAW) Node 7 + 8 + The LAW node represents the region of CCSR space where local access 9 + windows are configured. For ECM based devices this is the first 4k 10 + of CCSR space that includes CCSRBAR, ALTCBAR, ALTCAR, BPTR, and some 11 + number of local access windows as specified by fsl,num-laws. 12 + 13 + PROPERTIES 14 + 15 + - compatible 16 + Usage: required 17 + Value type: <string> 18 + Definition: Must include "fsl,ecm-law" 19 + 20 + - reg 21 + Usage: required 22 + Value type: <prop-encoded-array> 23 + Definition: A standard property. The value specifies the 24 + physical address offset and length of the CCSR space 25 + registers. 26 + 27 + - fsl,num-laws 28 + Usage: required 29 + Value type: <u32> 30 + Definition: The value specifies the number of local access 31 + windows for this device. 32 + 33 + ===================================================================== 34 + 35 + E500 Coherency Module Node 36 + 37 + The E500 LAW node represents the region of CCSR space where ECM config 38 + and error reporting registers exist, this is the second 4k (0x1000) 39 + of CCSR space. 40 + 41 + PROPERTIES 42 + 43 + - compatible 44 + Usage: required 45 + Value type: <string> 46 + Definition: Must include "fsl,CHIP-ecm", "fsl,ecm" where 47 + CHIP is the processor (mpc8572, mpc8544, etc.) 48 + 49 + - reg 50 + Usage: required 51 + Value type: <prop-encoded-array> 52 + Definition: A standard property. The value specifies the 53 + physical address offset and length of the CCSR space 54 + registers. 55 + 56 + - interrupts 57 + Usage: required 58 + Value type: <prop-encoded-array> 59 + 60 + - interrupt-parent 61 + Usage: required 62 + Value type: <phandle> 63 + 64 + =====================================================================
+3
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe.txt
··· 17 17 - model : precise model of the QE, Can be "QE", "CPM", or "CPM2" 18 18 - reg : offset and length of the device registers. 19 19 - bus-frequency : the clock frequency for QUICC Engine. 20 + - fsl,qe-num-riscs: define how many RISC engines the QE has. 21 + - fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the 22 + threads. 20 23 21 24 Recommended properties 22 25 - brg-frequency : the internal clock source frequency for baud-rate
+2 -3
Documentation/powerpc/dts-bindings/fsl/esdhc.txt
··· 5 5 6 6 Required properties: 7 7 - compatible : should be 8 - "fsl,<chip>-esdhc", "fsl,mpc8379-esdhc" for MPC83xx processors. 9 - "fsl,<chip>-esdhc", "fsl,mpc8536-esdhc" for MPC85xx processors. 8 + "fsl,<chip>-esdhc", "fsl,esdhc" 10 9 - reg : should contain eSDHC registers location and length. 11 10 - interrupts : should contain eSDHC interrupt. 12 11 - interrupt-parent : interrupt source phandle. ··· 14 15 Example: 15 16 16 17 sdhci@2e000 { 17 - compatible = "fsl,mpc8378-esdhc", "fsl,mpc8379-esdhc"; 18 + compatible = "fsl,mpc8378-esdhc", "fsl,esdhc"; 18 19 reg = <0x2e000 0x1000>; 19 20 interrupts = <42 0x8>; 20 21 interrupt-parent = <&ipic>;
+64
Documentation/powerpc/dts-bindings/fsl/mcm.txt
··· 1 + ===================================================================== 2 + MPX LAW & Coherency Module Device Tree Binding 3 + Copyright (C) 2009 Freescale Semiconductor Inc. 4 + ===================================================================== 5 + 6 + Local Access Window (LAW) Node 7 + 8 + The LAW node represents the region of CCSR space where local access 9 + windows are configured. For MCM based devices this is the first 4k 10 + of CCSR space that includes CCSRBAR, ALTCBAR, ALTCAR, BPTR, and some 11 + number of local access windows as specified by fsl,num-laws. 12 + 13 + PROPERTIES 14 + 15 + - compatible 16 + Usage: required 17 + Value type: <string> 18 + Definition: Must include "fsl,mcm-law" 19 + 20 + - reg 21 + Usage: required 22 + Value type: <prop-encoded-array> 23 + Definition: A standard property. The value specifies the 24 + physical address offset and length of the CCSR space 25 + registers. 26 + 27 + - fsl,num-laws 28 + Usage: required 29 + Value type: <u32> 30 + Definition: The value specifies the number of local access 31 + windows for this device. 32 + 33 + ===================================================================== 34 + 35 + MPX Coherency Module Node 36 + 37 + The MPX LAW node represents the region of CCSR space where MCM config 38 + and error reporting registers exist, this is the second 4k (0x1000) 39 + of CCSR space. 40 + 41 + PROPERTIES 42 + 43 + - compatible 44 + Usage: required 45 + Value type: <string> 46 + Definition: Must include "fsl,CHIP-mcm", "fsl,mcm" where 47 + CHIP is the processor (mpc8641, mpc8610, etc.) 48 + 49 + - reg 50 + Usage: required 51 + Value type: <prop-encoded-array> 52 + Definition: A standard property. The value specifies the 53 + physical address offset and length of the CCSR space 54 + registers. 55 + 56 + - interrupts 57 + Usage: required 58 + Value type: <prop-encoded-array> 59 + 60 + - interrupt-parent 61 + Usage: required 62 + Value type: <phandle> 63 + 64 + =====================================================================
+15 -1
arch/powerpc/Kconfig
··· 42 42 bool 43 43 default y 44 44 45 + config GENERIC_HARDIRQS_NO__DO_IRQ 46 + bool 47 + default y 48 + 45 49 config HAVE_SETUP_PER_CPU_AREA 46 50 def_bool PPC64 47 51 ··· 300 296 config IOMMU_HELPER 301 297 def_bool PPC64 302 298 299 + config SWIOTLB 300 + bool "SWIOTLB support" 301 + default n 302 + select IOMMU_HELPER 303 + ---help--- 304 + Support for IO bounce buffering for systems without an IOMMU. 305 + This allows us to DMA to the full physical address space on 306 + platforms where the size of a physical address is larger 307 + than the bus address. Not all platforms support this. 308 + 303 309 config PPC_NEED_DMA_SYNC_OPS 304 310 def_bool y 305 - depends on NOT_COHERENT_CACHE 311 + depends on (NOT_COHERENT_CACHE || SWIOTLB) 306 312 307 313 config HOTPLUG_CPU 308 314 bool "Support for enabling/disabling CPUs"
+13
arch/powerpc/Kconfig.debug
··· 41 41 This option will add a small amount of overhead to all hypervisor 42 42 calls. 43 43 44 + config PPC_EMULATED_STATS 45 + bool "Emulated instructions tracking" 46 + depends on DEBUG_FS 47 + help 48 + Adds code to keep track of the number of instructions that are 49 + emulated by the in-kernel emulator. Counters for the various classes 50 + of emulated instructions are available under 51 + powerpc/emulated_instructions/ in the root of the debugfs file 52 + system. Optionally (controlled by 53 + powerpc/emulated_instructions/do_warn in debugfs), rate-limited 54 + warnings can be printed to the console when instructions are 55 + emulated. 56 + 44 57 config CODE_PATCHING_SELFTEST 45 58 bool "Run self-tests of the code-patching code." 46 59 depends on DEBUG_KERNEL
+1
arch/powerpc/Makefile
··· 142 142 143 143 head-$(CONFIG_PPC64) += arch/powerpc/kernel/entry_64.o 144 144 head-$(CONFIG_PPC_FPU) += arch/powerpc/kernel/fpu.o 145 + head-$(CONFIG_ALTIVEC) += arch/powerpc/kernel/vector.o 145 146 146 147 core-y += arch/powerpc/kernel/ \ 147 148 arch/powerpc/mm/ \
+13 -1
arch/powerpc/boot/dts/gef_ppc9a.dts
··· 164 164 device_type = "soc"; 165 165 compatible = "fsl,mpc8641-soc", "simple-bus"; 166 166 ranges = <0x0 0xfef00000 0x00100000>; 167 - reg = <0xfef00000 0x100000>; // CCSRBAR 1M 168 167 bus-frequency = <33333333>; 168 + 169 + mcm-law@0 { 170 + compatible = "fsl,mcm-law"; 171 + reg = <0x0 0x1000>; 172 + fsl,num-laws = <10>; 173 + }; 174 + 175 + mcm@1000 { 176 + compatible = "fsl,mpc8641-mcm", "fsl,mcm"; 177 + reg = <0x1000 0x1000>; 178 + interrupts = <17 2>; 179 + interrupt-parent = <&mpic>; 180 + }; 169 181 170 182 i2c1: i2c@3000 { 171 183 #address-cells = <1>;
+13 -1
arch/powerpc/boot/dts/gef_sbc310.dts
··· 163 163 device_type = "soc"; 164 164 compatible = "simple-bus"; 165 165 ranges = <0x0 0xfef00000 0x00100000>; 166 - reg = <0xfef00000 0x100000>; // CCSRBAR 1M 167 166 bus-frequency = <33333333>; 167 + 168 + mcm-law@0 { 169 + compatible = "fsl,mcm-law"; 170 + reg = <0x0 0x1000>; 171 + fsl,num-laws = <10>; 172 + }; 173 + 174 + mcm@1000 { 175 + compatible = "fsl,mpc8641-mcm", "fsl,mcm"; 176 + reg = <0x1000 0x1000>; 177 + interrupts = <17 2>; 178 + interrupt-parent = <&mpic>; 179 + }; 168 180 169 181 i2c1: i2c@3000 { 170 182 #address-cells = <1>;
+13 -1
arch/powerpc/boot/dts/gef_sbc610.dts
··· 128 128 device_type = "soc"; 129 129 compatible = "simple-bus"; 130 130 ranges = <0x0 0xfef00000 0x00100000>; 131 - reg = <0xfef00000 0x100000>; // CCSRBAR 1M 132 131 bus-frequency = <33333333>; 132 + 133 + mcm-law@0 { 134 + compatible = "fsl,mcm-law"; 135 + reg = <0x0 0x1000>; 136 + fsl,num-laws = <10>; 137 + }; 138 + 139 + mcm@1000 { 140 + compatible = "fsl,mpc8641-mcm", "fsl,mcm"; 141 + reg = <0x1000 0x1000>; 142 + interrupts = <17 2>; 143 + interrupt-parent = <&mpic>; 144 + }; 133 145 134 146 i2c1: i2c@3000 { 135 147 #address-cells = <1>;
+13
arch/powerpc/boot/dts/ksi8560.dts
··· 56 56 ranges = <0x00000000 0xfdf00000 0x00100000>; 57 57 bus-frequency = <0>; /* Fixed by bootwrapper */ 58 58 59 + ecm-law@0 { 60 + compatible = "fsl,ecm-law"; 61 + reg = <0x0 0x1000>; 62 + fsl,num-laws = <8>; 63 + }; 64 + 65 + ecm@1000 { 66 + compatible = "fsl,mpc8560-ecm", "fsl,ecm"; 67 + reg = <0x1000 0x1000>; 68 + interrupts = <17 2>; 69 + interrupt-parent = <&mpic>; 70 + }; 71 + 59 72 memory-controller@2000 { 60 73 compatible = "fsl,mpc8540-memory-controller"; 61 74 reg = <0x2000 0x1000>;
+2 -1
arch/powerpc/boot/dts/mpc832x_mds.dts
··· 249 249 reg = <0xe0100000 0x480>; 250 250 brg-frequency = <0>; 251 251 bus-frequency = <198000000>; 252 + fsl,qe-num-riscs = <1>; 253 + fsl,qe-num-snums = <28>; 252 254 253 255 muram@10000 { 254 256 #address-cells = <1>; ··· 371 369 }; 372 370 373 371 pci0: pci@e0008500 { 374 - cell-index = <1>; 375 372 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 376 373 interrupt-map = < 377 374 /* IDSEL 0x11 AD17 */
+2 -1
arch/powerpc/boot/dts/mpc832x_rdb.dts
··· 221 221 reg = <0xe0100000 0x480>; 222 222 brg-frequency = <0>; 223 223 bus-frequency = <198000000>; 224 + fsl,qe-num-riscs = <1>; 225 + fsl,qe-num-snums = <28>; 224 226 225 227 muram@10000 { 226 228 #address-cells = <1>; ··· 329 327 }; 330 328 331 329 pci0: pci@e0008500 { 332 - cell-index = <1>; 333 330 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 334 331 interrupt-map = < 335 332 /* IDSEL 0x10 AD16 (USB) */
-2
arch/powerpc/boot/dts/mpc8349emitx.dts
··· 278 278 }; 279 279 280 280 pci0: pci@e0008500 { 281 - cell-index = <1>; 282 281 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 283 282 interrupt-map = < 284 283 /* IDSEL 0x10 - SATA */ ··· 300 301 }; 301 302 302 303 pci1: pci@e0008600 { 303 - cell-index = <2>; 304 304 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 305 305 interrupt-map = < 306 306 /* IDSEL 0x0E - MiniPCI Slot */
-1
arch/powerpc/boot/dts/mpc8349emitxgp.dts
··· 227 227 }; 228 228 229 229 pci0: pci@e0008600 { 230 - cell-index = <2>; 231 230 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 232 231 interrupt-map = < 233 232 /* IDSEL 0x0F - PCI Slot */
-2
arch/powerpc/boot/dts/mpc834x_mds.dts
··· 286 286 }; 287 287 288 288 pci0: pci@e0008500 { 289 - cell-index = <1>; 290 289 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 291 290 interrupt-map = < 292 291 ··· 347 348 }; 348 349 349 350 pci1: pci@e0008600 { 350 - cell-index = <2>; 351 351 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 352 352 interrupt-map = < 353 353
+2 -1
arch/powerpc/boot/dts/mpc836x_mds.dts
··· 289 289 reg = <0xe0100000 0x480>; 290 290 brg-frequency = <0>; 291 291 bus-frequency = <396000000>; 292 + fsl,qe-num-riscs = <2>; 293 + fsl,qe-num-snums = <28>; 292 294 293 295 muram@10000 { 294 296 #address-cells = <1>; ··· 412 410 }; 413 411 414 412 pci0: pci@e0008500 { 415 - cell-index = <1>; 416 413 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 417 414 interrupt-map = < 418 415
+2
arch/powerpc/boot/dts/mpc836x_rdk.dts
··· 198 198 clock-frequency = <0>; 199 199 bus-frequency = <0>; 200 200 brg-frequency = <0>; 201 + fsl,qe-num-riscs = <2>; 202 + fsl,qe-num-snums = <28>; 201 203 202 204 muram@10000 { 203 205 #address-cells = <1>;
-1
arch/powerpc/boot/dts/mpc8377_mds.dts
··· 383 383 }; 384 384 385 385 pci0: pci@e0008500 { 386 - cell-index = <0>; 387 386 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 388 387 interrupt-map = < 389 388
-1
arch/powerpc/boot/dts/mpc8378_mds.dts
··· 367 367 }; 368 368 369 369 pci0: pci@e0008500 { 370 - cell-index = <0>; 371 370 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 372 371 interrupt-map = < 373 372
-1
arch/powerpc/boot/dts/mpc8379_mds.dts
··· 397 397 }; 398 398 399 399 pci0: pci@e0008500 { 400 - cell-index = <0>; 401 400 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 402 401 interrupt-map = < 403 402
+13 -5
arch/powerpc/boot/dts/mpc8536ds.dts
··· 51 51 device_type = "soc"; 52 52 compatible = "simple-bus"; 53 53 ranges = <0x0 0xffe00000 0x100000>; 54 - reg = <0xffe00000 0x1000>; 55 54 bus-frequency = <0>; // Filled out by uboot. 55 + 56 + ecm-law@0 { 57 + compatible = "fsl,ecm-law"; 58 + reg = <0x0 0x1000>; 59 + fsl,num-laws = <12>; 60 + }; 61 + 62 + ecm@1000 { 63 + compatible = "fsl,mpc8536-ecm", "fsl,ecm"; 64 + reg = <0x1000 0x1000>; 65 + interrupts = <17 2>; 66 + interrupt-parent = <&mpic>; 67 + }; 56 68 57 69 memory-controller@2000 { 58 70 compatible = "fsl,mpc8536-memory-controller"; ··· 333 321 }; 334 322 335 323 pci0: pci@ffe08000 { 336 - cell-index = <0>; 337 324 compatible = "fsl,mpc8540-pci"; 338 325 device_type = "pci"; 339 326 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; ··· 357 346 }; 358 347 359 348 pci1: pcie@ffe09000 { 360 - cell-index = <1>; 361 349 compatible = "fsl,mpc8548-pcie"; 362 350 device_type = "pci"; 363 351 #interrupt-cells = <1>; ··· 393 383 }; 394 384 395 385 pci2: pcie@ffe0a000 { 396 - cell-index = <2>; 397 386 compatible = "fsl,mpc8548-pcie"; 398 387 device_type = "pci"; 399 388 #interrupt-cells = <1>; ··· 429 420 }; 430 421 431 422 pci3: pcie@ffe0b000 { 432 - cell-index = <3>; 433 423 compatible = "fsl,mpc8548-pcie"; 434 424 device_type = "pci"; 435 425 #interrupt-cells = <1>;
+13 -2
arch/powerpc/boot/dts/mpc8540ads.dts
··· 55 55 device_type = "soc"; 56 56 compatible = "simple-bus"; 57 57 ranges = <0x0 0xe0000000 0x100000>; 58 - reg = <0xe0000000 0x100000>; // CCSRBAR 1M 59 58 bus-frequency = <0>; 59 + 60 + ecm-law@0 { 61 + compatible = "fsl,ecm-law"; 62 + reg = <0x0 0x1000>; 63 + fsl,num-laws = <8>; 64 + }; 65 + 66 + ecm@1000 { 67 + compatible = "fsl,mpc8540-ecm", "fsl,ecm"; 68 + reg = <0x1000 0x1000>; 69 + interrupts = <17 2>; 70 + interrupt-parent = <&mpic>; 71 + }; 60 72 61 73 memory-controller@2000 { 62 74 compatible = "fsl,8540-memory-controller"; ··· 270 258 }; 271 259 272 260 pci0: pci@e0008000 { 273 - cell-index = <0>; 274 261 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 275 262 interrupt-map = < 276 263
+13 -3
arch/powerpc/boot/dts/mpc8541cds.dts
··· 55 55 device_type = "soc"; 56 56 compatible = "simple-bus"; 57 57 ranges = <0x0 0xe0000000 0x100000>; 58 - reg = <0xe0000000 0x1000>; // CCSRBAR 1M 59 58 bus-frequency = <0>; 59 + 60 + ecm-law@0 { 61 + compatible = "fsl,ecm-law"; 62 + reg = <0x0 0x1000>; 63 + fsl,num-laws = <8>; 64 + }; 65 + 66 + ecm@1000 { 67 + compatible = "fsl,mpc8541-ecm", "fsl,ecm"; 68 + reg = <0x1000 0x1000>; 69 + interrupts = <17 2>; 70 + interrupt-parent = <&mpic>; 71 + }; 60 72 61 73 memory-controller@2000 { 62 74 compatible = "fsl,8541-memory-controller"; ··· 284 272 }; 285 273 286 274 pci0: pci@e0008000 { 287 - cell-index = <0>; 288 275 interrupt-map-mask = <0x1f800 0x0 0x0 0x7>; 289 276 interrupt-map = < 290 277 ··· 355 344 }; 356 345 357 346 pci1: pci@e0009000 { 358 - cell-index = <1>; 359 347 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 360 348 interrupt-map = < 361 349
+13 -5
arch/powerpc/boot/dts/mpc8544ds.dts
··· 57 57 compatible = "simple-bus"; 58 58 59 59 ranges = <0x0 0xe0000000 0x100000>; 60 - reg = <0xe0000000 0x1000>; // CCSRBAR 1M 61 60 bus-frequency = <0>; // Filled out by uboot. 61 + 62 + ecm-law@0 { 63 + compatible = "fsl,ecm-law"; 64 + reg = <0x0 0x1000>; 65 + fsl,num-laws = <10>; 66 + }; 67 + 68 + ecm@1000 { 69 + compatible = "fsl,mpc8544-ecm", "fsl,ecm"; 70 + reg = <0x1000 0x1000>; 71 + interrupts = <17 2>; 72 + interrupt-parent = <&mpic>; 73 + }; 62 74 63 75 memory-controller@2000 { 64 76 compatible = "fsl,8544-memory-controller"; ··· 286 274 }; 287 275 288 276 pci0: pci@e0008000 { 289 - cell-index = <0>; 290 277 compatible = "fsl,mpc8540-pci"; 291 278 device_type = "pci"; 292 279 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; ··· 317 306 }; 318 307 319 308 pci1: pcie@e0009000 { 320 - cell-index = <1>; 321 309 compatible = "fsl,mpc8548-pcie"; 322 310 device_type = "pci"; 323 311 #interrupt-cells = <1>; ··· 353 343 }; 354 344 355 345 pci2: pcie@e000a000 { 356 - cell-index = <2>; 357 346 compatible = "fsl,mpc8548-pcie"; 358 347 device_type = "pci"; 359 348 #interrupt-cells = <1>; ··· 389 380 }; 390 381 391 382 pci3: pcie@e000b000 { 392 - cell-index = <3>; 393 383 compatible = "fsl,mpc8548-pcie"; 394 384 device_type = "pci"; 395 385 #interrupt-cells = <1>;
+13 -4
arch/powerpc/boot/dts/mpc8548cds.dts
··· 60 60 device_type = "soc"; 61 61 compatible = "simple-bus"; 62 62 ranges = <0x0 0xe0000000 0x100000>; 63 - reg = <0xe0000000 0x1000>; // CCSRBAR 64 63 bus-frequency = <0>; 64 + 65 + ecm-law@0 { 66 + compatible = "fsl,ecm-law"; 67 + reg = <0x0 0x1000>; 68 + fsl,num-laws = <10>; 69 + }; 70 + 71 + ecm@1000 { 72 + compatible = "fsl,mpc8548-ecm", "fsl,ecm"; 73 + reg = <0x1000 0x1000>; 74 + interrupts = <17 2>; 75 + interrupt-parent = <&mpic>; 76 + }; 65 77 66 78 memory-controller@2000 { 67 79 compatible = "fsl,8548-memory-controller"; ··· 340 328 }; 341 329 342 330 pci0: pci@e0008000 { 343 - cell-index = <0>; 344 331 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 345 332 interrupt-map = < 346 333 /* IDSEL 0x4 (PCIX Slot 2) */ ··· 489 478 }; 490 479 491 480 pci1: pci@e0009000 { 492 - cell-index = <1>; 493 481 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 494 482 interrupt-map = < 495 483 ··· 513 503 }; 514 504 515 505 pci2: pcie@e000a000 { 516 - cell-index = <2>; 517 506 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 518 507 interrupt-map = < 519 508
+13 -3
arch/powerpc/boot/dts/mpc8555cds.dts
··· 55 55 device_type = "soc"; 56 56 compatible = "simple-bus"; 57 57 ranges = <0x0 0xe0000000 0x100000>; 58 - reg = <0xe0000000 0x1000>; // CCSRBAR 1M 59 58 bus-frequency = <0>; 59 + 60 + ecm-law@0 { 61 + compatible = "fsl,ecm-law"; 62 + reg = <0x0 0x1000>; 63 + fsl,num-laws = <8>; 64 + }; 65 + 66 + ecm@1000 { 67 + compatible = "fsl,mpc8555-ecm", "fsl,ecm"; 68 + reg = <0x1000 0x1000>; 69 + interrupts = <17 2>; 70 + interrupt-parent = <&mpic>; 71 + }; 60 72 61 73 memory-controller@2000 { 62 74 compatible = "fsl,8555-memory-controller"; ··· 284 272 }; 285 273 286 274 pci0: pci@e0008000 { 287 - cell-index = <0>; 288 275 interrupt-map-mask = <0x1f800 0x0 0x0 0x7>; 289 276 interrupt-map = < 290 277 ··· 355 344 }; 356 345 357 346 pci1: pci@e0009000 { 358 - cell-index = <1>; 359 347 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 360 348 interrupt-map = < 361 349
+13 -2
arch/powerpc/boot/dts/mpc8560ads.dts
··· 55 55 device_type = "soc"; 56 56 compatible = "simple-bus"; 57 57 ranges = <0x0 0xe0000000 0x100000>; 58 - reg = <0xe0000000 0x200>; 59 58 bus-frequency = <330000000>; 59 + 60 + ecm-law@0 { 61 + compatible = "fsl,ecm-law"; 62 + reg = <0x0 0x1000>; 63 + fsl,num-laws = <8>; 64 + }; 65 + 66 + ecm@1000 { 67 + compatible = "fsl,mpc8560-ecm", "fsl,ecm"; 68 + reg = <0x1000 0x1000>; 69 + interrupts = <17 2>; 70 + interrupt-parent = <&mpic>; 71 + }; 60 72 61 73 memory-controller@2000 { 62 74 compatible = "fsl,8540-memory-controller"; ··· 303 291 }; 304 292 305 293 pci0: pci@e0008000 { 306 - cell-index = <0>; 307 294 #interrupt-cells = <1>; 308 295 #size-cells = <2>; 309 296 #address-cells = <3>;
+48 -3
arch/powerpc/boot/dts/mpc8568mds.dts
··· 26 26 serial1 = &serial1; 27 27 pci0 = &pci0; 28 28 pci1 = &pci1; 29 + rapidio0 = &rio0; 29 30 }; 30 31 31 32 cpus { ··· 63 62 device_type = "soc"; 64 63 compatible = "simple-bus"; 65 64 ranges = <0x0 0xe0000000 0x100000>; 66 - reg = <0xe0000000 0x1000>; 67 65 bus-frequency = <0>; 66 + 67 + ecm-law@0 { 68 + compatible = "fsl,ecm-law"; 69 + reg = <0x0 0x1000>; 70 + fsl,num-laws = <10>; 71 + }; 72 + 73 + ecm@1000 { 74 + compatible = "fsl,mpc8568-ecm", "fsl,ecm"; 75 + reg = <0x1000 0x1000>; 76 + interrupts = <17 2>; 77 + interrupt-parent = <&mpic>; 78 + }; 68 79 69 80 memory-controller@2000 { 70 81 compatible = "fsl,8568-memory-controller"; ··· 288 275 device_type = "open-pic"; 289 276 }; 290 277 278 + msi@41600 { 279 + compatible = "fsl,mpc8568-msi", "fsl,mpic-msi"; 280 + reg = <0x41600 0x80>; 281 + msi-available-ranges = <0 0x100>; 282 + interrupts = < 283 + 0xe0 0 284 + 0xe1 0 285 + 0xe2 0 286 + 0xe3 0 287 + 0xe4 0 288 + 0xe5 0 289 + 0xe6 0 290 + 0xe7 0>; 291 + interrupt-parent = <&mpic>; 292 + }; 293 + 291 294 par_io@e0100 { 292 295 reg = <0xe0100 0x100>; 293 296 device_type = "par_io"; ··· 378 349 reg = <0xe0080000 0x480>; 379 350 brg-frequency = <0>; 380 351 bus-frequency = <396000000>; 352 + fsl,qe-num-riscs = <2>; 353 + fsl,qe-num-snums = <28>; 381 354 382 355 muram@10000 { 383 356 #address-cells = <1>; ··· 490 459 }; 491 460 492 461 pci0: pci@e0008000 { 493 - cell-index = <0>; 494 462 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 495 463 interrupt-map = < 496 464 /* IDSEL 0x12 AD18 */ ··· 520 490 521 491 /* PCI Express */ 522 492 pci1: pcie@e000a000 { 523 - cell-index = <2>; 524 493 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 525 494 interrupt-map = < 526 495 ··· 554 525 0x1000000 0x0 0x0 555 526 0x0 0x800000>; 556 527 }; 528 + }; 529 + 530 + rio0: rapidio@e00c00000 { 531 + #address-cells = <2>; 532 + #size-cells = <2>; 533 + compatible = "fsl,mpc8568-rapidio", "fsl,rapidio-delta"; 534 + reg = <0xe00c0000 0x20000>; 535 + ranges = <0x0 0x0 0xc0000000 0x0 0x20000000>; 536 + interrupts = <48 2 /* error */ 537 + 49 2 /* bell_outb */ 538 + 50 2 /* bell_inb */ 539 + 53 2 /* msg1_tx */ 540 + 54 2 /* msg1_rx */ 541 + 55 2 /* msg2_tx */ 542 + 56 2 /* msg2_rx */>; 543 + interrupt-parent = <&mpic>; 557 544 }; 558 545 };
+583
arch/powerpc/boot/dts/mpc8569mds.dts
··· 1 + /* 2 + * MPC8569E MDS Device Tree Source 3 + * 4 + * Copyright (C) 2009 Freescale Semiconductor Inc. 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of the GNU General Public License as published by the 8 + * Free Software Foundation; either version 2 of the License, or (at your 9 + * option) any later version. 10 + */ 11 + 12 + /dts-v1/; 13 + 14 + / { 15 + model = "MPC8569EMDS"; 16 + compatible = "fsl,MPC8569EMDS"; 17 + #address-cells = <1>; 18 + #size-cells = <1>; 19 + 20 + aliases { 21 + serial0 = &serial0; 22 + serial1 = &serial1; 23 + ethernet0 = &enet0; 24 + ethernet1 = &enet1; 25 + ethernet2 = &enet2; 26 + ethernet3 = &enet3; 27 + pci1 = &pci1; 28 + rapidio0 = &rio0; 29 + }; 30 + 31 + cpus { 32 + #address-cells = <1>; 33 + #size-cells = <0>; 34 + 35 + PowerPC,8569@0 { 36 + device_type = "cpu"; 37 + reg = <0x0>; 38 + d-cache-line-size = <32>; // 32 bytes 39 + i-cache-line-size = <32>; // 32 bytes 40 + d-cache-size = <0x8000>; // L1, 32K 41 + i-cache-size = <0x8000>; // L1, 32K 42 + timebase-frequency = <0>; 43 + bus-frequency = <0>; 44 + clock-frequency = <0>; 45 + next-level-cache = <&L2>; 46 + }; 47 + }; 48 + 49 + memory { 50 + device_type = "memory"; 51 + }; 52 + 53 + localbus@e0005000 { 54 + #address-cells = <2>; 55 + #size-cells = <1>; 56 + compatible = "fsl,mpc8569-elbc", "fsl,elbc", "simple-bus"; 57 + reg = <0xe0005000 0x1000>; 58 + interrupts = <19 2>; 59 + interrupt-parent = <&mpic>; 60 + 61 + ranges = <0x0 0x0 0xfe000000 0x02000000 62 + 0x1 0x0 0xf8000000 0x00008000 63 + 0x2 0x0 0xf0000000 0x04000000 64 + 0x3 0x0 0xfc000000 0x00008000 65 + 0x4 0x0 0xf8008000 0x00008000 66 + 0x5 0x0 0xf8010000 0x00008000>; 67 + 68 + nor@0,0 { 69 + #address-cells = <1>; 70 + #size-cells = <1>; 71 + compatible = "cfi-flash"; 72 + reg = <0x0 0x0 0x02000000>; 73 + bank-width = <2>; 74 + device-width = <1>; 75 + }; 76 + 77 + bcsr@1,0 { 78 + compatible = "fsl,mpc8569mds-bcsr"; 79 + reg = <1 0 0x8000>; 80 + }; 81 + 82 + nand@3,0 { 83 + compatible = "fsl,mpc8569-fcm-nand", 84 + "fsl,elbc-fcm-nand"; 85 + reg = <3 0 0x8000>; 86 + }; 87 + 88 + pib@4,0 { 89 + compatible = "fsl,mpc8569mds-pib"; 90 + reg = <4 0 0x8000>; 91 + }; 92 + 93 + pib@5,0 { 94 + compatible = "fsl,mpc8569mds-pib"; 95 + reg = <5 0 0x8000>; 96 + }; 97 + }; 98 + 99 + soc@e0000000 { 100 + #address-cells = <1>; 101 + #size-cells = <1>; 102 + device_type = "soc"; 103 + compatible = "fsl,mpc8569-immr", "simple-bus"; 104 + ranges = <0x0 0xe0000000 0x100000>; 105 + bus-frequency = <0>; 106 + 107 + ecm-law@0 { 108 + compatible = "fsl,ecm-law"; 109 + reg = <0x0 0x1000>; 110 + fsl,num-laws = <10>; 111 + }; 112 + 113 + ecm@1000 { 114 + compatible = "fsl,mpc8569-ecm", "fsl,ecm"; 115 + reg = <0x1000 0x1000>; 116 + interrupts = <17 2>; 117 + interrupt-parent = <&mpic>; 118 + }; 119 + 120 + memory-controller@2000 { 121 + compatible = "fsl,mpc8569-memory-controller"; 122 + reg = <0x2000 0x1000>; 123 + interrupt-parent = <&mpic>; 124 + interrupts = <18 2>; 125 + }; 126 + 127 + i2c@3000 { 128 + #address-cells = <1>; 129 + #size-cells = <0>; 130 + cell-index = <0>; 131 + compatible = "fsl-i2c"; 132 + reg = <0x3000 0x100>; 133 + interrupts = <43 2>; 134 + interrupt-parent = <&mpic>; 135 + dfsrr; 136 + 137 + rtc@68 { 138 + compatible = "dallas,ds1374"; 139 + reg = <0x68>; 140 + }; 141 + }; 142 + 143 + i2c@3100 { 144 + #address-cells = <1>; 145 + #size-cells = <0>; 146 + cell-index = <1>; 147 + compatible = "fsl-i2c"; 148 + reg = <0x3100 0x100>; 149 + interrupts = <43 2>; 150 + interrupt-parent = <&mpic>; 151 + dfsrr; 152 + }; 153 + 154 + serial0: serial@4500 { 155 + cell-index = <0>; 156 + device_type = "serial"; 157 + compatible = "ns16550"; 158 + reg = <0x4500 0x100>; 159 + clock-frequency = <0>; 160 + interrupts = <42 2>; 161 + interrupt-parent = <&mpic>; 162 + }; 163 + 164 + serial1: serial@4600 { 165 + cell-index = <1>; 166 + device_type = "serial"; 167 + compatible = "ns16550"; 168 + reg = <0x4600 0x100>; 169 + clock-frequency = <0>; 170 + interrupts = <42 2>; 171 + interrupt-parent = <&mpic>; 172 + }; 173 + 174 + L2: l2-cache-controller@20000 { 175 + compatible = "fsl,mpc8569-l2-cache-controller"; 176 + reg = <0x20000 0x1000>; 177 + cache-line-size = <32>; // 32 bytes 178 + cache-size = <0x80000>; // L2, 512K 179 + interrupt-parent = <&mpic>; 180 + interrupts = <16 2>; 181 + }; 182 + 183 + dma@21300 { 184 + #address-cells = <1>; 185 + #size-cells = <1>; 186 + compatible = "fsl,mpc8569-dma", "fsl,eloplus-dma"; 187 + reg = <0x21300 0x4>; 188 + ranges = <0x0 0x21100 0x200>; 189 + cell-index = <0>; 190 + dma-channel@0 { 191 + compatible = "fsl,mpc8569-dma-channel", 192 + "fsl,eloplus-dma-channel"; 193 + reg = <0x0 0x80>; 194 + cell-index = <0>; 195 + interrupt-parent = <&mpic>; 196 + interrupts = <20 2>; 197 + }; 198 + dma-channel@80 { 199 + compatible = "fsl,mpc8569-dma-channel", 200 + "fsl,eloplus-dma-channel"; 201 + reg = <0x80 0x80>; 202 + cell-index = <1>; 203 + interrupt-parent = <&mpic>; 204 + interrupts = <21 2>; 205 + }; 206 + dma-channel@100 { 207 + compatible = "fsl,mpc8569-dma-channel", 208 + "fsl,eloplus-dma-channel"; 209 + reg = <0x100 0x80>; 210 + cell-index = <2>; 211 + interrupt-parent = <&mpic>; 212 + interrupts = <22 2>; 213 + }; 214 + dma-channel@180 { 215 + compatible = "fsl,mpc8569-dma-channel", 216 + "fsl,eloplus-dma-channel"; 217 + reg = <0x180 0x80>; 218 + cell-index = <3>; 219 + interrupt-parent = <&mpic>; 220 + interrupts = <23 2>; 221 + }; 222 + }; 223 + 224 + sdhci@2e000 { 225 + compatible = "fsl,mpc8569-esdhc", "fsl,esdhc"; 226 + reg = <0x2e000 0x1000>; 227 + interrupts = <72 0x8>; 228 + interrupt-parent = <&mpic>; 229 + /* Filled in by U-Boot */ 230 + clock-frequency = <0>; 231 + status = "disabled"; 232 + }; 233 + 234 + crypto@30000 { 235 + compatible = "fsl,sec3.1", "fsl,sec3.0", "fsl,sec2.4", 236 + "fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0"; 237 + reg = <0x30000 0x10000>; 238 + interrupts = <45 2 58 2>; 239 + interrupt-parent = <&mpic>; 240 + fsl,num-channels = <4>; 241 + fsl,channel-fifo-len = <24>; 242 + fsl,exec-units-mask = <0xbfe>; 243 + fsl,descriptor-types-mask = <0x3ab0ebf>; 244 + }; 245 + 246 + mpic: pic@40000 { 247 + interrupt-controller; 248 + #address-cells = <0>; 249 + #interrupt-cells = <2>; 250 + reg = <0x40000 0x40000>; 251 + compatible = "chrp,open-pic"; 252 + device_type = "open-pic"; 253 + }; 254 + 255 + msi@41600 { 256 + compatible = "fsl,mpc8568-msi", "fsl,mpic-msi"; 257 + reg = <0x41600 0x80>; 258 + msi-available-ranges = <0 0x100>; 259 + interrupts = < 260 + 0xe0 0 261 + 0xe1 0 262 + 0xe2 0 263 + 0xe3 0 264 + 0xe4 0 265 + 0xe5 0 266 + 0xe6 0 267 + 0xe7 0>; 268 + interrupt-parent = <&mpic>; 269 + }; 270 + 271 + global-utilities@e0000 { 272 + compatible = "fsl,mpc8569-guts"; 273 + reg = <0xe0000 0x1000>; 274 + fsl,has-rstcr; 275 + }; 276 + 277 + par_io@e0100 { 278 + #address-cells = <1>; 279 + #size-cells = <1>; 280 + reg = <0xe0100 0x100>; 281 + ranges = <0x0 0xe0100 0x100>; 282 + device_type = "par_io"; 283 + num-ports = <7>; 284 + 285 + qe_pio_e: gpio-controller@80 { 286 + #gpio-cells = <2>; 287 + compatible = "fsl,mpc8569-qe-pario-bank", 288 + "fsl,mpc8323-qe-pario-bank"; 289 + reg = <0x80 0x18>; 290 + gpio-controller; 291 + }; 292 + 293 + pio1: ucc_pin@01 { 294 + pio-map = < 295 + /* port pin dir open_drain assignment has_irq */ 296 + 0x2 0x1f 0x1 0x0 0x1 0x0 /* QE_MUX_MDC */ 297 + 0x2 0x1e 0x3 0x0 0x2 0x0 /* QE_MUX_MDIO */ 298 + 0x2 0x0b 0x2 0x0 0x1 0x0 /* CLK12*/ 299 + 0x0 0x0 0x1 0x0 0x3 0x0 /* ENET1_TXD0_SER1_TXD0 */ 300 + 0x0 0x1 0x1 0x0 0x3 0x0 /* ENET1_TXD1_SER1_TXD1 */ 301 + 0x0 0x2 0x1 0x0 0x1 0x0 /* ENET1_TXD2_SER1_TXD2 */ 302 + 0x0 0x3 0x1 0x0 0x2 0x0 /* ENET1_TXD3_SER1_TXD3 */ 303 + 0x0 0x6 0x2 0x0 0x3 0x0 /* ENET1_RXD0_SER1_RXD0 */ 304 + 0x0 0x7 0x2 0x0 0x1 0x0 /* ENET1_RXD1_SER1_RXD1 */ 305 + 0x0 0x8 0x2 0x0 0x2 0x0 /* ENET1_RXD2_SER1_RXD2 */ 306 + 0x0 0x9 0x2 0x0 0x2 0x0 /* ENET1_RXD3_SER1_RXD3 */ 307 + 0x0 0x4 0x1 0x0 0x2 0x0 /* ENET1_TX_EN_SER1_RTS_B */ 308 + 0x0 0xc 0x2 0x0 0x3 0x0 /* ENET1_RX_DV_SER1_CTS_B */ 309 + 0x2 0x8 0x2 0x0 0x1 0x0 /* ENET1_GRXCLK */ 310 + 0x2 0x14 0x1 0x0 0x2 0x0>; /* ENET1_GTXCLK */ 311 + }; 312 + 313 + pio2: ucc_pin@02 { 314 + pio-map = < 315 + /* port pin dir open_drain assignment has_irq */ 316 + 0x2 0x1f 0x1 0x0 0x1 0x0 /* QE_MUX_MDC */ 317 + 0x2 0x1e 0x3 0x0 0x2 0x0 /* QE_MUX_MDIO */ 318 + 0x2 0x10 0x2 0x0 0x3 0x0 /* CLK17 */ 319 + 0x0 0xe 0x1 0x0 0x2 0x0 /* ENET2_TXD0_SER2_TXD0 */ 320 + 0x0 0xf 0x1 0x0 0x2 0x0 /* ENET2_TXD1_SER2_TXD1 */ 321 + 0x0 0x10 0x1 0x0 0x1 0x0 /* ENET2_TXD2_SER2_TXD2 */ 322 + 0x0 0x11 0x1 0x0 0x1 0x0 /* ENET2_TXD3_SER2_TXD3 */ 323 + 0x0 0x14 0x2 0x0 0x2 0x0 /* ENET2_RXD0_SER2_RXD0 */ 324 + 0x0 0x15 0x2 0x0 0x1 0x0 /* ENET2_RXD1_SER2_RXD1 */ 325 + 0x0 0x16 0x2 0x0 0x1 0x0 /* ENET2_RXD2_SER2_RXD2 */ 326 + 0x0 0x17 0x2 0x0 0x1 0x0 /* ENET2_RXD3_SER2_RXD3 */ 327 + 0x0 0x12 0x1 0x0 0x2 0x0 /* ENET2_TX_EN_SER2_RTS_B */ 328 + 0x0 0x1a 0x2 0x0 0x3 0x0 /* ENET2_RX_DV_SER2_CTS_B */ 329 + 0x2 0x3 0x2 0x0 0x1 0x0 /* ENET2_GRXCLK */ 330 + 0x2 0x2 0x1 0x0 0x2 0x0>; /* ENET2_GTXCLK */ 331 + }; 332 + 333 + pio3: ucc_pin@03 { 334 + pio-map = < 335 + /* port pin dir open_drain assignment has_irq */ 336 + 0x2 0x1f 0x1 0x0 0x1 0x0 /* QE_MUX_MDC */ 337 + 0x2 0x1e 0x3 0x0 0x2 0x0 /* QE_MUX_MDIO */ 338 + 0x2 0x0b 0x2 0x0 0x1 0x0 /* CLK12*/ 339 + 0x0 0x1d 0x1 0x0 0x2 0x0 /* ENET3_TXD0_SER3_TXD0 */ 340 + 0x0 0x1e 0x1 0x0 0x3 0x0 /* ENET3_TXD1_SER3_TXD1 */ 341 + 0x0 0x1f 0x1 0x0 0x2 0x0 /* ENET3_TXD2_SER3_TXD2 */ 342 + 0x1 0x0 0x1 0x0 0x3 0x0 /* ENET3_TXD3_SER3_TXD3 */ 343 + 0x1 0x3 0x2 0x0 0x3 0x0 /* ENET3_RXD0_SER3_RXD0 */ 344 + 0x1 0x4 0x2 0x0 0x1 0x0 /* ENET3_RXD1_SER3_RXD1 */ 345 + 0x1 0x5 0x2 0x0 0x2 0x0 /* ENET3_RXD2_SER3_RXD2 */ 346 + 0x1 0x6 0x2 0x0 0x3 0x0 /* ENET3_RXD3_SER3_RXD3 */ 347 + 0x1 0x1 0x1 0x0 0x1 0x0 /* ENET3_TX_EN_SER3_RTS_B */ 348 + 0x1 0x9 0x2 0x0 0x3 0x0 /* ENET3_RX_DV_SER3_CTS_B */ 349 + 0x2 0x9 0x2 0x0 0x2 0x0 /* ENET3_GRXCLK */ 350 + 0x2 0x19 0x1 0x0 0x2 0x0>; /* ENET3_GTXCLK */ 351 + }; 352 + 353 + pio4: ucc_pin@04 { 354 + pio-map = < 355 + /* port pin dir open_drain assignment has_irq */ 356 + 0x2 0x1f 0x1 0x0 0x1 0x0 /* QE_MUX_MDC */ 357 + 0x2 0x1e 0x3 0x0 0x2 0x0 /* QE_MUX_MDIO */ 358 + 0x2 0x10 0x2 0x0 0x3 0x0 /* CLK17 */ 359 + 0x1 0xc 0x1 0x0 0x2 0x0 /* ENET4_TXD0_SER4_TXD0 */ 360 + 0x1 0xd 0x1 0x0 0x2 0x0 /* ENET4_TXD1_SER4_TXD1 */ 361 + 0x1 0xe 0x1 0x0 0x1 0x0 /* ENET4_TXD2_SER4_TXD2 */ 362 + 0x1 0xf 0x1 0x0 0x2 0x0 /* ENET4_TXD3_SER4_TXD3 */ 363 + 0x1 0x12 0x2 0x0 0x2 0x0 /* ENET4_RXD0_SER4_RXD0 */ 364 + 0x1 0x13 0x2 0x0 0x1 0x0 /* ENET4_RXD1_SER4_RXD1 */ 365 + 0x1 0x14 0x2 0x0 0x1 0x0 /* ENET4_RXD2_SER4_RXD2 */ 366 + 0x1 0x15 0x2 0x0 0x2 0x0 /* ENET4_RXD3_SER4_RXD3 */ 367 + 0x1 0x10 0x1 0x0 0x2 0x0 /* ENET4_TX_EN_SER4_RTS_B */ 368 + 0x1 0x18 0x2 0x0 0x3 0x0 /* ENET4_RX_DV_SER4_CTS_B */ 369 + 0x2 0x11 0x2 0x0 0x2 0x0 /* ENET4_GRXCLK */ 370 + 0x2 0x18 0x1 0x0 0x2 0x0>; /* ENET4_GTXCLK */ 371 + }; 372 + }; 373 + }; 374 + 375 + qe@e0080000 { 376 + #address-cells = <1>; 377 + #size-cells = <1>; 378 + device_type = "qe"; 379 + compatible = "fsl,qe"; 380 + ranges = <0x0 0xe0080000 0x40000>; 381 + reg = <0xe0080000 0x480>; 382 + brg-frequency = <0>; 383 + bus-frequency = <0>; 384 + fsl,qe-num-riscs = <4>; 385 + fsl,qe-num-snums = <46>; 386 + 387 + qeic: interrupt-controller@80 { 388 + interrupt-controller; 389 + compatible = "fsl,qe-ic"; 390 + #address-cells = <0>; 391 + #interrupt-cells = <1>; 392 + reg = <0x80 0x80>; 393 + interrupts = <46 2 46 2>; //high:30 low:30 394 + interrupt-parent = <&mpic>; 395 + }; 396 + 397 + spi@4c0 { 398 + #address-cells = <1>; 399 + #size-cells = <0>; 400 + compatible = "fsl,mpc8569-qe-spi", "fsl,spi"; 401 + reg = <0x4c0 0x40>; 402 + cell-index = <0>; 403 + interrupts = <2>; 404 + interrupt-parent = <&qeic>; 405 + gpios = <&qe_pio_e 30 0>; 406 + mode = "cpu-qe"; 407 + 408 + serial-flash@0 { 409 + compatible = "stm,m25p40"; 410 + reg = <0>; 411 + spi-max-frequency = <25000000>; 412 + }; 413 + }; 414 + 415 + spi@500 { 416 + cell-index = <1>; 417 + compatible = "fsl,spi"; 418 + reg = <0x500 0x40>; 419 + interrupts = <1>; 420 + interrupt-parent = <&qeic>; 421 + mode = "cpu"; 422 + }; 423 + 424 + enet0: ucc@2000 { 425 + device_type = "network"; 426 + compatible = "ucc_geth"; 427 + cell-index = <1>; 428 + reg = <0x2000 0x200>; 429 + interrupts = <32>; 430 + interrupt-parent = <&qeic>; 431 + local-mac-address = [ 00 00 00 00 00 00 ]; 432 + rx-clock-name = "none"; 433 + tx-clock-name = "clk12"; 434 + pio-handle = <&pio1>; 435 + phy-handle = <&qe_phy0>; 436 + phy-connection-type = "rgmii-id"; 437 + }; 438 + 439 + mdio@2120 { 440 + #address-cells = <1>; 441 + #size-cells = <0>; 442 + reg = <0x2120 0x18>; 443 + compatible = "fsl,ucc-mdio"; 444 + 445 + qe_phy0: ethernet-phy@07 { 446 + interrupt-parent = <&mpic>; 447 + interrupts = <1 1>; 448 + reg = <0x7>; 449 + device_type = "ethernet-phy"; 450 + }; 451 + qe_phy1: ethernet-phy@01 { 452 + interrupt-parent = <&mpic>; 453 + interrupts = <2 1>; 454 + reg = <0x1>; 455 + device_type = "ethernet-phy"; 456 + }; 457 + qe_phy2: ethernet-phy@02 { 458 + interrupt-parent = <&mpic>; 459 + interrupts = <3 1>; 460 + reg = <0x2>; 461 + device_type = "ethernet-phy"; 462 + }; 463 + qe_phy3: ethernet-phy@03 { 464 + interrupt-parent = <&mpic>; 465 + interrupts = <4 1>; 466 + reg = <0x3>; 467 + device_type = "ethernet-phy"; 468 + }; 469 + }; 470 + 471 + enet2: ucc@2200 { 472 + device_type = "network"; 473 + compatible = "ucc_geth"; 474 + cell-index = <3>; 475 + reg = <0x2200 0x200>; 476 + interrupts = <34>; 477 + interrupt-parent = <&qeic>; 478 + local-mac-address = [ 00 00 00 00 00 00 ]; 479 + rx-clock-name = "none"; 480 + tx-clock-name = "clk12"; 481 + pio-handle = <&pio3>; 482 + phy-handle = <&qe_phy2>; 483 + phy-connection-type = "rgmii-id"; 484 + }; 485 + 486 + enet1: ucc@3000 { 487 + device_type = "network"; 488 + compatible = "ucc_geth"; 489 + cell-index = <2>; 490 + reg = <0x3000 0x200>; 491 + interrupts = <33>; 492 + interrupt-parent = <&qeic>; 493 + local-mac-address = [ 00 00 00 00 00 00 ]; 494 + rx-clock-name = "none"; 495 + tx-clock-name = "clk17"; 496 + pio-handle = <&pio2>; 497 + phy-handle = <&qe_phy1>; 498 + phy-connection-type = "rgmii-id"; 499 + }; 500 + 501 + enet3: ucc@3200 { 502 + device_type = "network"; 503 + compatible = "ucc_geth"; 504 + cell-index = <4>; 505 + reg = <0x3200 0x200>; 506 + interrupts = <35>; 507 + interrupt-parent = <&qeic>; 508 + local-mac-address = [ 00 00 00 00 00 00 ]; 509 + rx-clock-name = "none"; 510 + tx-clock-name = "clk17"; 511 + pio-handle = <&pio4>; 512 + phy-handle = <&qe_phy3>; 513 + phy-connection-type = "rgmii-id"; 514 + }; 515 + 516 + muram@10000 { 517 + #address-cells = <1>; 518 + #size-cells = <1>; 519 + compatible = "fsl,qe-muram", "fsl,cpm-muram"; 520 + ranges = <0x0 0x10000 0x20000>; 521 + 522 + data-only@0 { 523 + compatible = "fsl,qe-muram-data", 524 + "fsl,cpm-muram-data"; 525 + reg = <0x0 0x20000>; 526 + }; 527 + }; 528 + 529 + }; 530 + 531 + /* PCI Express */ 532 + pci1: pcie@e000a000 { 533 + compatible = "fsl,mpc8548-pcie"; 534 + device_type = "pci"; 535 + #interrupt-cells = <1>; 536 + #size-cells = <2>; 537 + #address-cells = <3>; 538 + reg = <0xe000a000 0x1000>; 539 + interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 540 + interrupt-map = < 541 + /* IDSEL 0x0 (PEX) */ 542 + 00000 0x0 0x0 0x1 &mpic 0x0 0x1 543 + 00000 0x0 0x0 0x2 &mpic 0x1 0x1 544 + 00000 0x0 0x0 0x3 &mpic 0x2 0x1 545 + 00000 0x0 0x0 0x4 &mpic 0x3 0x1>; 546 + 547 + interrupt-parent = <&mpic>; 548 + interrupts = <26 2>; 549 + bus-range = <0 255>; 550 + ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x10000000 551 + 0x1000000 0x0 0x00000000 0xe2800000 0x0 0x00800000>; 552 + clock-frequency = <33333333>; 553 + pcie@0 { 554 + reg = <0x0 0x0 0x0 0x0 0x0>; 555 + #size-cells = <2>; 556 + #address-cells = <3>; 557 + device_type = "pci"; 558 + ranges = <0x2000000 0x0 0xa0000000 559 + 0x2000000 0x0 0xa0000000 560 + 0x0 0x10000000 561 + 562 + 0x1000000 0x0 0x0 563 + 0x1000000 0x0 0x0 564 + 0x0 0x800000>; 565 + }; 566 + }; 567 + 568 + rio0: rapidio@e00c00000 { 569 + #address-cells = <2>; 570 + #size-cells = <2>; 571 + compatible = "fsl,mpc8569-rapidio", "fsl,rapidio-delta"; 572 + reg = <0xe00c0000 0x20000>; 573 + ranges = <0x0 0x0 0xc0000000 0x0 0x20000000>; 574 + interrupts = <48 2 /* error */ 575 + 49 2 /* bell_outb */ 576 + 50 2 /* bell_inb */ 577 + 53 2 /* msg1_tx */ 578 + 54 2 /* msg1_rx */ 579 + 55 2 /* msg2_tx */ 580 + 56 2 /* msg2_rx */>; 581 + interrupt-parent = <&mpic>; 582 + }; 583 + };
+13 -4
arch/powerpc/boot/dts/mpc8572ds.dts
··· 182 182 device_type = "soc"; 183 183 compatible = "simple-bus"; 184 184 ranges = <0x0 0 0xffe00000 0x100000>; 185 - reg = <0 0xffe00000 0 0x1000>; // CCSRBAR & soc regs, remove once parse code for immrbase fixed 186 185 bus-frequency = <0>; // Filled out by uboot. 186 + 187 + ecm-law@0 { 188 + compatible = "fsl,ecm-law"; 189 + reg = <0x0 0x1000>; 190 + fsl,num-laws = <12>; 191 + }; 192 + 193 + ecm@1000 { 194 + compatible = "fsl,mpc8572-ecm", "fsl,ecm"; 195 + reg = <0x1000 0x1000>; 196 + interrupts = <17 2>; 197 + interrupt-parent = <&mpic>; 198 + }; 187 199 188 200 memory-controller@2000 { 189 201 compatible = "fsl,mpc8572-memory-controller"; ··· 526 514 }; 527 515 528 516 pci0: pcie@ffe08000 { 529 - cell-index = <0>; 530 517 compatible = "fsl,mpc8548-pcie"; 531 518 device_type = "pci"; 532 519 #interrupt-cells = <1>; ··· 735 724 }; 736 725 737 726 pci1: pcie@ffe09000 { 738 - cell-index = <1>; 739 727 compatible = "fsl,mpc8548-pcie"; 740 728 device_type = "pci"; 741 729 #interrupt-cells = <1>; ··· 771 761 }; 772 762 773 763 pci2: pcie@ffe0a000 { 774 - cell-index = <2>; 775 764 compatible = "fsl,mpc8548-pcie"; 776 765 device_type = "pci"; 777 766 #interrupt-cells = <1>;
+24 -15
arch/powerpc/boot/dts/mpc8572ds_36b.dts
··· 182 182 device_type = "soc"; 183 183 compatible = "simple-bus"; 184 184 ranges = <0x0 0xf 0xffe00000 0x100000>; 185 - reg = <0xf 0xffe00000 0 0x1000>; // CCSRBAR & soc regs, remove once parse code for immrbase fixed 186 185 bus-frequency = <0>; // Filled out by uboot. 186 + 187 + ecm-law@0 { 188 + compatible = "fsl,ecm-law"; 189 + reg = <0x0 0x1000>; 190 + fsl,num-laws = <12>; 191 + }; 192 + 193 + ecm@1000 { 194 + compatible = "fsl,mpc8572-ecm", "fsl,ecm"; 195 + reg = <0x1000 0x1000>; 196 + interrupts = <17 2>; 197 + interrupt-parent = <&mpic>; 198 + }; 187 199 188 200 memory-controller@2000 { 189 201 compatible = "fsl,mpc8572-memory-controller"; ··· 526 514 }; 527 515 528 516 pci0: pcie@fffe08000 { 529 - cell-index = <0>; 530 517 compatible = "fsl,mpc8548-pcie"; 531 518 device_type = "pci"; 532 519 #interrupt-cells = <1>; ··· 533 522 #address-cells = <3>; 534 523 reg = <0xf 0xffe08000 0 0x1000>; 535 524 bus-range = <0 255>; 536 - ranges = <0x2000000 0x0 0xc0000000 0xc 0x00000000 0x0 0x20000000 525 + ranges = <0x2000000 0x0 0xe0000000 0xc 0x00000000 0x0 0x20000000 537 526 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x00010000>; 538 527 clock-frequency = <33333333>; 539 528 interrupt-parent = <&mpic>; ··· 660 649 #size-cells = <2>; 661 650 #address-cells = <3>; 662 651 device_type = "pci"; 663 - ranges = <0x2000000 0x0 0xc0000000 664 - 0x2000000 0x0 0xc0000000 652 + ranges = <0x2000000 0x0 0xe0000000 653 + 0x2000000 0x0 0xe0000000 665 654 0x0 0x20000000 666 655 667 656 0x1000000 0x0 0x0 ··· 671 660 reg = <0x0 0x0 0x0 0x0 0x0>; 672 661 #size-cells = <2>; 673 662 #address-cells = <3>; 674 - ranges = <0x2000000 0x0 0xc0000000 675 - 0x2000000 0x0 0xc0000000 663 + ranges = <0x2000000 0x0 0xe0000000 664 + 0x2000000 0x0 0xe0000000 676 665 0x0 0x20000000 677 666 678 667 0x1000000 0x0 0x0 ··· 735 724 }; 736 725 737 726 pci1: pcie@fffe09000 { 738 - cell-index = <1>; 739 727 compatible = "fsl,mpc8548-pcie"; 740 728 device_type = "pci"; 741 729 #interrupt-cells = <1>; ··· 742 732 #address-cells = <3>; 743 733 reg = <0xf 0xffe09000 0 0x1000>; 744 734 bus-range = <0 255>; 745 - ranges = <0x2000000 0x0 0xc0000000 0xc 0x20000000 0x0 0x20000000 735 + ranges = <0x2000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000 746 736 0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x00010000>; 747 737 clock-frequency = <33333333>; 748 738 interrupt-parent = <&mpic>; ··· 760 750 #size-cells = <2>; 761 751 #address-cells = <3>; 762 752 device_type = "pci"; 763 - ranges = <0x2000000 0x0 0xc0000000 764 - 0x2000000 0x0 0xc0000000 753 + ranges = <0x2000000 0x0 0xe0000000 754 + 0x2000000 0x0 0xe0000000 765 755 0x0 0x20000000 766 756 767 757 0x1000000 0x0 0x0 ··· 771 761 }; 772 762 773 763 pci2: pcie@fffe0a000 { 774 - cell-index = <2>; 775 764 compatible = "fsl,mpc8548-pcie"; 776 765 device_type = "pci"; 777 766 #interrupt-cells = <1>; ··· 778 769 #address-cells = <3>; 779 770 reg = <0xf 0xffe0a000 0 0x1000>; 780 771 bus-range = <0 255>; 781 - ranges = <0x2000000 0x0 0xc0000000 0xc 0x40000000 0x0 0x20000000 772 + ranges = <0x2000000 0x0 0xe0000000 0xc 0x40000000 0x0 0x20000000 782 773 0x1000000 0x0 0x00000000 0xf 0xffc20000 0x0 0x00010000>; 783 774 clock-frequency = <33333333>; 784 775 interrupt-parent = <&mpic>; ··· 796 787 #size-cells = <2>; 797 788 #address-cells = <3>; 798 789 device_type = "pci"; 799 - ranges = <0x2000000 0x0 0xc0000000 800 - 0x2000000 0x0 0xc0000000 790 + ranges = <0x2000000 0x0 0xe0000000 791 + 0x2000000 0x0 0xe0000000 801 792 0x0 0x20000000 802 793 803 794 0x1000000 0x0 0x0
+13 -3
arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts
··· 59 59 device_type = "soc"; 60 60 compatible = "simple-bus"; 61 61 ranges = <0x0 0xffe00000 0x100000>; 62 - reg = <0xffe00000 0x1000>; // CCSRBAR & soc regs, remove once parse code for immrbase fixed 63 62 bus-frequency = <0>; // Filled out by uboot. 63 + 64 + ecm-law@0 { 65 + compatible = "fsl,ecm-law"; 66 + reg = <0x0 0x1000>; 67 + fsl,num-laws = <12>; 68 + }; 69 + 70 + ecm@1000 { 71 + compatible = "fsl,mpc8572-ecm", "fsl,ecm"; 72 + reg = <0x1000 0x1000>; 73 + interrupts = <17 2>; 74 + interrupt-parent = <&mpic>; 75 + }; 64 76 65 77 memory-controller@2000 { 66 78 compatible = "fsl,mpc8572-memory-controller"; ··· 250 238 }; 251 239 252 240 pci0: pcie@ffe08000 { 253 - cell-index = <0>; 254 241 compatible = "fsl,mpc8548-pcie"; 255 242 device_type = "pci"; 256 243 #interrupt-cells = <1>; ··· 459 448 }; 460 449 461 450 pci1: pcie@ffe09000 { 462 - cell-index = <1>; 463 451 compatible = "fsl,mpc8548-pcie"; 464 452 device_type = "pci"; 465 453 #interrupt-cells = <1>;
-2
arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts
··· 58 58 device_type = "soc"; 59 59 compatible = "simple-bus"; 60 60 ranges = <0x0 0xffe00000 0x100000>; 61 - reg = <0xffe00000 0x1000>; // CCSRBAR & soc regs, remove once parse code for immrbase fixed 62 61 bus-frequency = <0>; // Filled out by uboot. 63 62 64 63 L2: l2-cache-controller@20000 { ··· 195 196 }; 196 197 197 198 pci2: pcie@ffe0a000 { 198 - cell-index = <2>; 199 199 compatible = "fsl,mpc8548-pcie"; 200 200 device_type = "pci"; 201 201 #interrupt-cells = <1>;
+13 -3
arch/powerpc/boot/dts/mpc8610_hpcd.dts
··· 112 112 device_type = "soc"; 113 113 compatible = "fsl,mpc8610-immr", "simple-bus"; 114 114 ranges = <0x0 0xe0000000 0x00100000>; 115 - reg = <0xe0000000 0x1000>; 116 115 bus-frequency = <0>; 116 + 117 + mcm-law@0 { 118 + compatible = "fsl,mcm-law"; 119 + reg = <0x0 0x1000>; 120 + fsl,num-laws = <10>; 121 + }; 122 + 123 + mcm@1000 { 124 + compatible = "fsl,mpc8610-mcm", "fsl,mcm"; 125 + reg = <0x1000 0x1000>; 126 + interrupts = <17 2>; 127 + interrupt-parent = <&mpic>; 128 + }; 117 129 118 130 i2c@3000 { 119 131 #address-cells = <1>; ··· 328 316 }; 329 317 330 318 pci0: pci@e0008000 { 331 - cell-index = <0>; 332 319 compatible = "fsl,mpc8610-pci"; 333 320 device_type = "pci"; 334 321 #interrupt-cells = <1>; ··· 357 346 }; 358 347 359 348 pci1: pcie@e000a000 { 360 - cell-index = <1>; 361 349 compatible = "fsl,mpc8641-pcie"; 362 350 device_type = "pci"; 363 351 #interrupt-cells = <1>;
+13 -3
arch/powerpc/boot/dts/mpc8641_hpcn.dts
··· 114 114 device_type = "soc"; 115 115 compatible = "simple-bus"; 116 116 ranges = <0x00000000 0xffe00000 0x00100000>; 117 - reg = <0xffe00000 0x00001000>; // CCSRBAR 118 117 bus-frequency = <0>; 118 + 119 + mcm-law@0 { 120 + compatible = "fsl,mcm-law"; 121 + reg = <0x0 0x1000>; 122 + fsl,num-laws = <10>; 123 + }; 124 + 125 + mcm@1000 { 126 + compatible = "fsl,mpc8641-mcm", "fsl,mcm"; 127 + reg = <0x1000 0x1000>; 128 + interrupts = <17 2>; 129 + interrupt-parent = <&mpic>; 130 + }; 119 131 120 132 i2c@3000 { 121 133 #address-cells = <1>; ··· 369 357 }; 370 358 371 359 pci0: pcie@ffe08000 { 372 - cell-index = <0>; 373 360 compatible = "fsl,mpc8641-pcie"; 374 361 device_type = "pci"; 375 362 #interrupt-cells = <1>; ··· 577 566 }; 578 567 579 568 pci1: pcie@ffe09000 { 580 - cell-index = <1>; 581 569 compatible = "fsl,mpc8641-pcie"; 582 570 device_type = "pci"; 583 571 #interrupt-cells = <1>;
+609
arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
··· 1 + /* 2 + * MPC8641 HPCN Device Tree Source 3 + * 4 + * Copyright 2008-2009 Freescale Semiconductor Inc. 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of the GNU General Public License as published by the 8 + * Free Software Foundation; either version 2 of the License, or (at your 9 + * option) any later version. 10 + */ 11 + 12 + /dts-v1/; 13 + 14 + / { 15 + model = "MPC8641HPCN"; 16 + compatible = "fsl,mpc8641hpcn"; 17 + #address-cells = <2>; 18 + #size-cells = <2>; 19 + 20 + aliases { 21 + ethernet0 = &enet0; 22 + ethernet1 = &enet1; 23 + ethernet2 = &enet2; 24 + ethernet3 = &enet3; 25 + serial0 = &serial0; 26 + serial1 = &serial1; 27 + pci0 = &pci0; 28 + pci1 = &pci1; 29 + }; 30 + 31 + cpus { 32 + #address-cells = <1>; 33 + #size-cells = <0>; 34 + 35 + PowerPC,8641@0 { 36 + device_type = "cpu"; 37 + reg = <0>; 38 + d-cache-line-size = <32>; // 32 bytes 39 + i-cache-line-size = <32>; // 32 bytes 40 + d-cache-size = <32768>; // L1, 32K 41 + i-cache-size = <32768>; // L1, 32K 42 + timebase-frequency = <0>; // 33 MHz, from uboot 43 + bus-frequency = <0>; // From uboot 44 + clock-frequency = <0>; // From uboot 45 + }; 46 + PowerPC,8641@1 { 47 + device_type = "cpu"; 48 + reg = <1>; 49 + d-cache-line-size = <32>; // 32 bytes 50 + i-cache-line-size = <32>; // 32 bytes 51 + d-cache-size = <32768>; // L1, 32K 52 + i-cache-size = <32768>; // L1, 32K 53 + timebase-frequency = <0>; // 33 MHz, from uboot 54 + bus-frequency = <0>; // From uboot 55 + clock-frequency = <0>; // From uboot 56 + }; 57 + }; 58 + 59 + memory { 60 + device_type = "memory"; 61 + reg = <0x0 0x00000000 0x0 0x40000000>; // 1G at 0x0 62 + }; 63 + 64 + localbus@fffe05000 { 65 + #address-cells = <2>; 66 + #size-cells = <1>; 67 + compatible = "fsl,mpc8641-localbus", "simple-bus"; 68 + reg = <0x0f 0xffe05000 0x0 0x1000>; 69 + interrupts = <19 2>; 70 + interrupt-parent = <&mpic>; 71 + 72 + ranges = <0 0 0xf 0xef800000 0x00800000 73 + 2 0 0xf 0xffdf8000 0x00008000 74 + 3 0 0xf 0xffdf0000 0x00008000>; 75 + 76 + flash@0,0 { 77 + compatible = "cfi-flash"; 78 + reg = <0 0 0x00800000>; 79 + bank-width = <2>; 80 + device-width = <2>; 81 + #address-cells = <1>; 82 + #size-cells = <1>; 83 + partition@0 { 84 + label = "kernel"; 85 + reg = <0x00000000 0x00300000>; 86 + }; 87 + partition@300000 { 88 + label = "firmware b"; 89 + reg = <0x00300000 0x00100000>; 90 + read-only; 91 + }; 92 + partition@400000 { 93 + label = "fs"; 94 + reg = <0x00400000 0x00300000>; 95 + }; 96 + partition@700000 { 97 + label = "firmware a"; 98 + reg = <0x00700000 0x00100000>; 99 + read-only; 100 + }; 101 + }; 102 + }; 103 + 104 + soc8641@fffe00000 { 105 + #address-cells = <1>; 106 + #size-cells = <1>; 107 + device_type = "soc"; 108 + compatible = "simple-bus"; 109 + ranges = <0x00000000 0x0f 0xffe00000 0x00100000>; 110 + bus-frequency = <0>; 111 + 112 + mcm-law@0 { 113 + compatible = "fsl,mcm-law"; 114 + reg = <0x0 0x1000>; 115 + fsl,num-laws = <10>; 116 + }; 117 + 118 + mcm@1000 { 119 + compatible = "fsl,mpc8641-mcm", "fsl,mcm"; 120 + reg = <0x1000 0x1000>; 121 + interrupts = <17 2>; 122 + interrupt-parent = <&mpic>; 123 + }; 124 + 125 + i2c@3000 { 126 + #address-cells = <1>; 127 + #size-cells = <0>; 128 + cell-index = <0>; 129 + compatible = "fsl-i2c"; 130 + reg = <0x3000 0x100>; 131 + interrupts = <43 2>; 132 + interrupt-parent = <&mpic>; 133 + dfsrr; 134 + }; 135 + 136 + i2c@3100 { 137 + #address-cells = <1>; 138 + #size-cells = <0>; 139 + cell-index = <1>; 140 + compatible = "fsl-i2c"; 141 + reg = <0x3100 0x100>; 142 + interrupts = <43 2>; 143 + interrupt-parent = <&mpic>; 144 + dfsrr; 145 + }; 146 + 147 + dma@21300 { 148 + #address-cells = <1>; 149 + #size-cells = <1>; 150 + compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma"; 151 + reg = <0x21300 0x4>; 152 + ranges = <0x0 0x21100 0x200>; 153 + cell-index = <0>; 154 + dma-channel@0 { 155 + compatible = "fsl,mpc8641-dma-channel", 156 + "fsl,eloplus-dma-channel"; 157 + reg = <0x0 0x80>; 158 + cell-index = <0>; 159 + interrupt-parent = <&mpic>; 160 + interrupts = <20 2>; 161 + }; 162 + dma-channel@80 { 163 + compatible = "fsl,mpc8641-dma-channel", 164 + "fsl,eloplus-dma-channel"; 165 + reg = <0x80 0x80>; 166 + cell-index = <1>; 167 + interrupt-parent = <&mpic>; 168 + interrupts = <21 2>; 169 + }; 170 + dma-channel@100 { 171 + compatible = "fsl,mpc8641-dma-channel", 172 + "fsl,eloplus-dma-channel"; 173 + reg = <0x100 0x80>; 174 + cell-index = <2>; 175 + interrupt-parent = <&mpic>; 176 + interrupts = <22 2>; 177 + }; 178 + dma-channel@180 { 179 + compatible = "fsl,mpc8641-dma-channel", 180 + "fsl,eloplus-dma-channel"; 181 + reg = <0x180 0x80>; 182 + cell-index = <3>; 183 + interrupt-parent = <&mpic>; 184 + interrupts = <23 2>; 185 + }; 186 + }; 187 + 188 + enet0: ethernet@24000 { 189 + #address-cells = <1>; 190 + #size-cells = <1>; 191 + cell-index = <0>; 192 + device_type = "network"; 193 + model = "TSEC"; 194 + compatible = "gianfar"; 195 + reg = <0x24000 0x1000>; 196 + ranges = <0x0 0x24000 0x1000>; 197 + local-mac-address = [ 00 00 00 00 00 00 ]; 198 + interrupts = <29 2 30 2 34 2>; 199 + interrupt-parent = <&mpic>; 200 + tbi-handle = <&tbi0>; 201 + phy-handle = <&phy0>; 202 + phy-connection-type = "rgmii-id"; 203 + 204 + mdio@520 { 205 + #address-cells = <1>; 206 + #size-cells = <0>; 207 + compatible = "fsl,gianfar-mdio"; 208 + reg = <0x520 0x20>; 209 + 210 + phy0: ethernet-phy@0 { 211 + interrupt-parent = <&mpic>; 212 + interrupts = <10 1>; 213 + reg = <0>; 214 + device_type = "ethernet-phy"; 215 + }; 216 + phy1: ethernet-phy@1 { 217 + interrupt-parent = <&mpic>; 218 + interrupts = <10 1>; 219 + reg = <1>; 220 + device_type = "ethernet-phy"; 221 + }; 222 + phy2: ethernet-phy@2 { 223 + interrupt-parent = <&mpic>; 224 + interrupts = <10 1>; 225 + reg = <2>; 226 + device_type = "ethernet-phy"; 227 + }; 228 + phy3: ethernet-phy@3 { 229 + interrupt-parent = <&mpic>; 230 + interrupts = <10 1>; 231 + reg = <3>; 232 + device_type = "ethernet-phy"; 233 + }; 234 + tbi0: tbi-phy@11 { 235 + reg = <0x11>; 236 + device_type = "tbi-phy"; 237 + }; 238 + }; 239 + }; 240 + 241 + enet1: ethernet@25000 { 242 + #address-cells = <1>; 243 + #size-cells = <1>; 244 + cell-index = <1>; 245 + device_type = "network"; 246 + model = "TSEC"; 247 + compatible = "gianfar"; 248 + reg = <0x25000 0x1000>; 249 + ranges = <0x0 0x25000 0x1000>; 250 + local-mac-address = [ 00 00 00 00 00 00 ]; 251 + interrupts = <35 2 36 2 40 2>; 252 + interrupt-parent = <&mpic>; 253 + tbi-handle = <&tbi1>; 254 + phy-handle = <&phy1>; 255 + phy-connection-type = "rgmii-id"; 256 + 257 + mdio@520 { 258 + #address-cells = <1>; 259 + #size-cells = <0>; 260 + compatible = "fsl,gianfar-tbi"; 261 + reg = <0x520 0x20>; 262 + 263 + tbi1: tbi-phy@11 { 264 + reg = <0x11>; 265 + device_type = "tbi-phy"; 266 + }; 267 + }; 268 + }; 269 + 270 + enet2: ethernet@26000 { 271 + #address-cells = <1>; 272 + #size-cells = <1>; 273 + cell-index = <2>; 274 + device_type = "network"; 275 + model = "TSEC"; 276 + compatible = "gianfar"; 277 + reg = <0x26000 0x1000>; 278 + ranges = <0x0 0x26000 0x1000>; 279 + local-mac-address = [ 00 00 00 00 00 00 ]; 280 + interrupts = <31 2 32 2 33 2>; 281 + interrupt-parent = <&mpic>; 282 + tbi-handle = <&tbi2>; 283 + phy-handle = <&phy2>; 284 + phy-connection-type = "rgmii-id"; 285 + 286 + mdio@520 { 287 + #address-cells = <1>; 288 + #size-cells = <0>; 289 + compatible = "fsl,gianfar-tbi"; 290 + reg = <0x520 0x20>; 291 + 292 + tbi2: tbi-phy@11 { 293 + reg = <0x11>; 294 + device_type = "tbi-phy"; 295 + }; 296 + }; 297 + }; 298 + 299 + enet3: ethernet@27000 { 300 + #address-cells = <1>; 301 + #size-cells = <1>; 302 + cell-index = <3>; 303 + device_type = "network"; 304 + model = "TSEC"; 305 + compatible = "gianfar"; 306 + reg = <0x27000 0x1000>; 307 + ranges = <0x0 0x27000 0x1000>; 308 + local-mac-address = [ 00 00 00 00 00 00 ]; 309 + interrupts = <37 2 38 2 39 2>; 310 + interrupt-parent = <&mpic>; 311 + tbi-handle = <&tbi3>; 312 + phy-handle = <&phy3>; 313 + phy-connection-type = "rgmii-id"; 314 + 315 + mdio@520 { 316 + #address-cells = <1>; 317 + #size-cells = <0>; 318 + compatible = "fsl,gianfar-tbi"; 319 + reg = <0x520 0x20>; 320 + 321 + tbi3: tbi-phy@11 { 322 + reg = <0x11>; 323 + device_type = "tbi-phy"; 324 + }; 325 + }; 326 + }; 327 + 328 + serial0: serial@4500 { 329 + cell-index = <0>; 330 + device_type = "serial"; 331 + compatible = "ns16550"; 332 + reg = <0x4500 0x100>; 333 + clock-frequency = <0>; 334 + interrupts = <42 2>; 335 + interrupt-parent = <&mpic>; 336 + }; 337 + 338 + serial1: serial@4600 { 339 + cell-index = <1>; 340 + device_type = "serial"; 341 + compatible = "ns16550"; 342 + reg = <0x4600 0x100>; 343 + clock-frequency = <0>; 344 + interrupts = <28 2>; 345 + interrupt-parent = <&mpic>; 346 + }; 347 + 348 + mpic: pic@40000 { 349 + interrupt-controller; 350 + #address-cells = <0>; 351 + #interrupt-cells = <2>; 352 + reg = <0x40000 0x40000>; 353 + compatible = "chrp,open-pic"; 354 + device_type = "open-pic"; 355 + }; 356 + 357 + global-utilities@e0000 { 358 + compatible = "fsl,mpc8641-guts"; 359 + reg = <0xe0000 0x1000>; 360 + fsl,has-rstcr; 361 + }; 362 + }; 363 + 364 + pci0: pcie@fffe08000 { 365 + cell-index = <0>; 366 + compatible = "fsl,mpc8641-pcie"; 367 + device_type = "pci"; 368 + #interrupt-cells = <1>; 369 + #size-cells = <2>; 370 + #address-cells = <3>; 371 + reg = <0x0f 0xffe08000 0x0 0x1000>; 372 + bus-range = <0x0 0xff>; 373 + ranges = <0x02000000 0x0 0xe0000000 0x0c 0x00000000 0x0 0x20000000 374 + 0x01000000 0x0 0x00000000 0x0f 0xffc00000 0x0 0x00010000>; 375 + clock-frequency = <33333333>; 376 + interrupt-parent = <&mpic>; 377 + interrupts = <24 2>; 378 + interrupt-map-mask = <0xff00 0 0 7>; 379 + interrupt-map = < 380 + /* IDSEL 0x11 func 0 - PCI slot 1 */ 381 + 0x8800 0 0 1 &mpic 2 1 382 + 0x8800 0 0 2 &mpic 3 1 383 + 0x8800 0 0 3 &mpic 4 1 384 + 0x8800 0 0 4 &mpic 1 1 385 + 386 + /* IDSEL 0x11 func 1 - PCI slot 1 */ 387 + 0x8900 0 0 1 &mpic 2 1 388 + 0x8900 0 0 2 &mpic 3 1 389 + 0x8900 0 0 3 &mpic 4 1 390 + 0x8900 0 0 4 &mpic 1 1 391 + 392 + /* IDSEL 0x11 func 2 - PCI slot 1 */ 393 + 0x8a00 0 0 1 &mpic 2 1 394 + 0x8a00 0 0 2 &mpic 3 1 395 + 0x8a00 0 0 3 &mpic 4 1 396 + 0x8a00 0 0 4 &mpic 1 1 397 + 398 + /* IDSEL 0x11 func 3 - PCI slot 1 */ 399 + 0x8b00 0 0 1 &mpic 2 1 400 + 0x8b00 0 0 2 &mpic 3 1 401 + 0x8b00 0 0 3 &mpic 4 1 402 + 0x8b00 0 0 4 &mpic 1 1 403 + 404 + /* IDSEL 0x11 func 4 - PCI slot 1 */ 405 + 0x8c00 0 0 1 &mpic 2 1 406 + 0x8c00 0 0 2 &mpic 3 1 407 + 0x8c00 0 0 3 &mpic 4 1 408 + 0x8c00 0 0 4 &mpic 1 1 409 + 410 + /* IDSEL 0x11 func 5 - PCI slot 1 */ 411 + 0x8d00 0 0 1 &mpic 2 1 412 + 0x8d00 0 0 2 &mpic 3 1 413 + 0x8d00 0 0 3 &mpic 4 1 414 + 0x8d00 0 0 4 &mpic 1 1 415 + 416 + /* IDSEL 0x11 func 6 - PCI slot 1 */ 417 + 0x8e00 0 0 1 &mpic 2 1 418 + 0x8e00 0 0 2 &mpic 3 1 419 + 0x8e00 0 0 3 &mpic 4 1 420 + 0x8e00 0 0 4 &mpic 1 1 421 + 422 + /* IDSEL 0x11 func 7 - PCI slot 1 */ 423 + 0x8f00 0 0 1 &mpic 2 1 424 + 0x8f00 0 0 2 &mpic 3 1 425 + 0x8f00 0 0 3 &mpic 4 1 426 + 0x8f00 0 0 4 &mpic 1 1 427 + 428 + /* IDSEL 0x12 func 0 - PCI slot 2 */ 429 + 0x9000 0 0 1 &mpic 3 1 430 + 0x9000 0 0 2 &mpic 4 1 431 + 0x9000 0 0 3 &mpic 1 1 432 + 0x9000 0 0 4 &mpic 2 1 433 + 434 + /* IDSEL 0x12 func 1 - PCI slot 2 */ 435 + 0x9100 0 0 1 &mpic 3 1 436 + 0x9100 0 0 2 &mpic 4 1 437 + 0x9100 0 0 3 &mpic 1 1 438 + 0x9100 0 0 4 &mpic 2 1 439 + 440 + /* IDSEL 0x12 func 2 - PCI slot 2 */ 441 + 0x9200 0 0 1 &mpic 3 1 442 + 0x9200 0 0 2 &mpic 4 1 443 + 0x9200 0 0 3 &mpic 1 1 444 + 0x9200 0 0 4 &mpic 2 1 445 + 446 + /* IDSEL 0x12 func 3 - PCI slot 2 */ 447 + 0x9300 0 0 1 &mpic 3 1 448 + 0x9300 0 0 2 &mpic 4 1 449 + 0x9300 0 0 3 &mpic 1 1 450 + 0x9300 0 0 4 &mpic 2 1 451 + 452 + /* IDSEL 0x12 func 4 - PCI slot 2 */ 453 + 0x9400 0 0 1 &mpic 3 1 454 + 0x9400 0 0 2 &mpic 4 1 455 + 0x9400 0 0 3 &mpic 1 1 456 + 0x9400 0 0 4 &mpic 2 1 457 + 458 + /* IDSEL 0x12 func 5 - PCI slot 2 */ 459 + 0x9500 0 0 1 &mpic 3 1 460 + 0x9500 0 0 2 &mpic 4 1 461 + 0x9500 0 0 3 &mpic 1 1 462 + 0x9500 0 0 4 &mpic 2 1 463 + 464 + /* IDSEL 0x12 func 6 - PCI slot 2 */ 465 + 0x9600 0 0 1 &mpic 3 1 466 + 0x9600 0 0 2 &mpic 4 1 467 + 0x9600 0 0 3 &mpic 1 1 468 + 0x9600 0 0 4 &mpic 2 1 469 + 470 + /* IDSEL 0x12 func 7 - PCI slot 2 */ 471 + 0x9700 0 0 1 &mpic 3 1 472 + 0x9700 0 0 2 &mpic 4 1 473 + 0x9700 0 0 3 &mpic 1 1 474 + 0x9700 0 0 4 &mpic 2 1 475 + 476 + // IDSEL 0x1c USB 477 + 0xe000 0 0 1 &i8259 12 2 478 + 0xe100 0 0 2 &i8259 9 2 479 + 0xe200 0 0 3 &i8259 10 2 480 + 0xe300 0 0 4 &i8259 11 2 481 + 482 + // IDSEL 0x1d Audio 483 + 0xe800 0 0 1 &i8259 6 2 484 + 485 + // IDSEL 0x1e Legacy 486 + 0xf000 0 0 1 &i8259 7 2 487 + 0xf100 0 0 1 &i8259 7 2 488 + 489 + // IDSEL 0x1f IDE/SATA 490 + 0xf800 0 0 1 &i8259 14 2 491 + 0xf900 0 0 1 &i8259 5 2 492 + >; 493 + 494 + pcie@0 { 495 + reg = <0 0 0 0 0>; 496 + #size-cells = <2>; 497 + #address-cells = <3>; 498 + device_type = "pci"; 499 + ranges = <0x02000000 0x0 0xe0000000 500 + 0x02000000 0x0 0xe0000000 501 + 0x0 0x20000000 502 + 503 + 0x01000000 0x0 0x00000000 504 + 0x01000000 0x0 0x00000000 505 + 0x0 0x00010000>; 506 + uli1575@0 { 507 + reg = <0 0 0 0 0>; 508 + #size-cells = <2>; 509 + #address-cells = <3>; 510 + ranges = <0x02000000 0x0 0xe0000000 511 + 0x02000000 0x0 0xe0000000 512 + 0x0 0x20000000 513 + 0x01000000 0x0 0x00000000 514 + 0x01000000 0x0 0x00000000 515 + 0x0 0x00010000>; 516 + isa@1e { 517 + device_type = "isa"; 518 + #interrupt-cells = <2>; 519 + #size-cells = <1>; 520 + #address-cells = <2>; 521 + reg = <0xf000 0 0 0 0>; 522 + ranges = <1 0 0x01000000 0 0 523 + 0x00001000>; 524 + interrupt-parent = <&i8259>; 525 + 526 + i8259: interrupt-controller@20 { 527 + reg = <1 0x20 2 528 + 1 0xa0 2 529 + 1 0x4d0 2>; 530 + interrupt-controller; 531 + device_type = "interrupt-controller"; 532 + #address-cells = <0>; 533 + #interrupt-cells = <2>; 534 + compatible = "chrp,iic"; 535 + interrupts = <9 2>; 536 + interrupt-parent = <&mpic>; 537 + }; 538 + 539 + i8042@60 { 540 + #size-cells = <0>; 541 + #address-cells = <1>; 542 + reg = <1 0x60 1 1 0x64 1>; 543 + interrupts = <1 3 12 3>; 544 + interrupt-parent = 545 + <&i8259>; 546 + 547 + keyboard@0 { 548 + reg = <0>; 549 + compatible = "pnpPNP,303"; 550 + }; 551 + 552 + mouse@1 { 553 + reg = <1>; 554 + compatible = "pnpPNP,f03"; 555 + }; 556 + }; 557 + 558 + rtc@70 { 559 + compatible = 560 + "pnpPNP,b00"; 561 + reg = <1 0x70 2>; 562 + }; 563 + 564 + gpio@400 { 565 + reg = <1 0x400 0x80>; 566 + }; 567 + }; 568 + }; 569 + }; 570 + 571 + }; 572 + 573 + pci1: pcie@fffe09000 { 574 + cell-index = <1>; 575 + compatible = "fsl,mpc8641-pcie"; 576 + device_type = "pci"; 577 + #interrupt-cells = <1>; 578 + #size-cells = <2>; 579 + #address-cells = <3>; 580 + reg = <0x0f 0xffe09000 0x0 0x1000>; 581 + bus-range = <0x0 0xff>; 582 + ranges = <0x02000000 0x0 0xe0000000 0x0c 0x20000000 0x0 0x20000000 583 + 0x01000000 0x0 0x00000000 0x0f 0xffc10000 0x0 0x00010000>; 584 + clock-frequency = <33333333>; 585 + interrupt-parent = <&mpic>; 586 + interrupts = <25 2>; 587 + interrupt-map-mask = <0xf800 0 0 7>; 588 + interrupt-map = < 589 + /* IDSEL 0x0 */ 590 + 0x0000 0 0 1 &mpic 4 1 591 + 0x0000 0 0 2 &mpic 5 1 592 + 0x0000 0 0 3 &mpic 6 1 593 + 0x0000 0 0 4 &mpic 7 1 594 + >; 595 + pcie@0 { 596 + reg = <0 0 0 0 0>; 597 + #size-cells = <2>; 598 + #address-cells = <3>; 599 + device_type = "pci"; 600 + ranges = <0x02000000 0x0 0xe0000000 601 + 0x02000000 0x0 0xe0000000 602 + 0x0 0x20000000 603 + 604 + 0x01000000 0x0 0x00000000 605 + 0x01000000 0x0 0x00000000 606 + 0x0 0x00010000>; 607 + }; 608 + }; 609 + };
+704
arch/powerpc/boot/dts/p2020ds.dts
··· 1 + /* 2 + * P2020 DS Device Tree Source 3 + * 4 + * Copyright 2009 Freescale Semiconductor Inc. 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of the GNU General Public License as published by the 8 + * Free Software Foundation; either version 2 of the License, or (at your 9 + * option) any later version. 10 + */ 11 + 12 + /dts-v1/; 13 + / { 14 + model = "fsl,P2020"; 15 + compatible = "fsl,P2020DS"; 16 + #address-cells = <2>; 17 + #size-cells = <2>; 18 + 19 + aliases { 20 + ethernet0 = &enet0; 21 + ethernet1 = &enet1; 22 + ethernet2 = &enet2; 23 + serial0 = &serial0; 24 + serial1 = &serial1; 25 + pci0 = &pci0; 26 + pci1 = &pci1; 27 + pci2 = &pci2; 28 + }; 29 + 30 + cpus { 31 + #address-cells = <1>; 32 + #size-cells = <0>; 33 + 34 + PowerPC,P2020@0 { 35 + device_type = "cpu"; 36 + reg = <0x0>; 37 + next-level-cache = <&L2>; 38 + }; 39 + 40 + PowerPC,P2020@1 { 41 + device_type = "cpu"; 42 + reg = <0x1>; 43 + next-level-cache = <&L2>; 44 + }; 45 + }; 46 + 47 + memory { 48 + device_type = "memory"; 49 + }; 50 + 51 + localbus@ffe05000 { 52 + #address-cells = <2>; 53 + #size-cells = <1>; 54 + compatible = "fsl,elbc", "simple-bus"; 55 + reg = <0 0xffe05000 0 0x1000>; 56 + interrupts = <19 2>; 57 + interrupt-parent = <&mpic>; 58 + 59 + ranges = <0x0 0x0 0x0 0xe8000000 0x08000000 60 + 0x1 0x0 0x0 0xe0000000 0x08000000 61 + 0x2 0x0 0x0 0xffa00000 0x00040000 62 + 0x3 0x0 0x0 0xffdf0000 0x00008000 63 + 0x4 0x0 0x0 0xffa40000 0x00040000 64 + 0x5 0x0 0x0 0xffa80000 0x00040000 65 + 0x6 0x0 0x0 0xffac0000 0x00040000>; 66 + 67 + nor@0,0 { 68 + #address-cells = <1>; 69 + #size-cells = <1>; 70 + compatible = "cfi-flash"; 71 + reg = <0x0 0x0 0x8000000>; 72 + bank-width = <2>; 73 + device-width = <1>; 74 + 75 + ramdisk@0 { 76 + reg = <0x0 0x03000000>; 77 + read-only; 78 + }; 79 + 80 + diagnostic@3000000 { 81 + reg = <0x03000000 0x00e00000>; 82 + read-only; 83 + }; 84 + 85 + dink@3e00000 { 86 + reg = <0x03e00000 0x00200000>; 87 + read-only; 88 + }; 89 + 90 + kernel@4000000 { 91 + reg = <0x04000000 0x00400000>; 92 + read-only; 93 + }; 94 + 95 + jffs2@4400000 { 96 + reg = <0x04400000 0x03b00000>; 97 + }; 98 + 99 + dtb@7f00000 { 100 + reg = <0x07f00000 0x00080000>; 101 + read-only; 102 + }; 103 + 104 + u-boot@7f80000 { 105 + reg = <0x07f80000 0x00080000>; 106 + read-only; 107 + }; 108 + }; 109 + 110 + nand@2,0 { 111 + #address-cells = <1>; 112 + #size-cells = <1>; 113 + compatible = "fsl,elbc-fcm-nand"; 114 + reg = <0x2 0x0 0x40000>; 115 + 116 + u-boot@0 { 117 + reg = <0x0 0x02000000>; 118 + read-only; 119 + }; 120 + 121 + jffs2@2000000 { 122 + reg = <0x02000000 0x10000000>; 123 + }; 124 + 125 + ramdisk@12000000 { 126 + reg = <0x12000000 0x08000000>; 127 + read-only; 128 + }; 129 + 130 + kernel@1a000000 { 131 + reg = <0x1a000000 0x04000000>; 132 + }; 133 + 134 + dtb@1e000000 { 135 + reg = <0x1e000000 0x01000000>; 136 + read-only; 137 + }; 138 + 139 + empty@1f000000 { 140 + reg = <0x1f000000 0x21000000>; 141 + }; 142 + }; 143 + 144 + nand@4,0 { 145 + compatible = "fsl,elbc-fcm-nand"; 146 + reg = <0x4 0x0 0x40000>; 147 + }; 148 + 149 + nand@5,0 { 150 + compatible = "fsl,elbc-fcm-nand"; 151 + reg = <0x5 0x0 0x40000>; 152 + }; 153 + 154 + nand@6,0 { 155 + compatible = "fsl,elbc-fcm-nand"; 156 + reg = <0x6 0x0 0x40000>; 157 + }; 158 + }; 159 + 160 + soc@ffe00000 { 161 + #address-cells = <1>; 162 + #size-cells = <1>; 163 + device_type = "soc"; 164 + compatible = "fsl,p2020-immr", "simple-bus"; 165 + ranges = <0x0 0 0xffe00000 0x100000>; 166 + bus-frequency = <0>; // Filled out by uboot. 167 + 168 + ecm-law@0 { 169 + compatible = "fsl,ecm-law"; 170 + reg = <0x0 0x1000>; 171 + fsl,num-laws = <12>; 172 + }; 173 + 174 + ecm@1000 { 175 + compatible = "fsl,p2020-ecm", "fsl,ecm"; 176 + reg = <0x1000 0x1000>; 177 + interrupts = <17 2>; 178 + interrupt-parent = <&mpic>; 179 + }; 180 + 181 + memory-controller@2000 { 182 + compatible = "fsl,p2020-memory-controller"; 183 + reg = <0x2000 0x1000>; 184 + interrupt-parent = <&mpic>; 185 + interrupts = <18 2>; 186 + }; 187 + 188 + i2c@3000 { 189 + #address-cells = <1>; 190 + #size-cells = <0>; 191 + cell-index = <0>; 192 + compatible = "fsl-i2c"; 193 + reg = <0x3000 0x100>; 194 + interrupts = <43 2>; 195 + interrupt-parent = <&mpic>; 196 + dfsrr; 197 + }; 198 + 199 + i2c@3100 { 200 + #address-cells = <1>; 201 + #size-cells = <0>; 202 + cell-index = <1>; 203 + compatible = "fsl-i2c"; 204 + reg = <0x3100 0x100>; 205 + interrupts = <43 2>; 206 + interrupt-parent = <&mpic>; 207 + dfsrr; 208 + }; 209 + 210 + serial0: serial@4500 { 211 + cell-index = <0>; 212 + device_type = "serial"; 213 + compatible = "ns16550"; 214 + reg = <0x4500 0x100>; 215 + clock-frequency = <0>; 216 + interrupts = <42 2>; 217 + interrupt-parent = <&mpic>; 218 + }; 219 + 220 + serial1: serial@4600 { 221 + cell-index = <1>; 222 + device_type = "serial"; 223 + compatible = "ns16550"; 224 + reg = <0x4600 0x100>; 225 + clock-frequency = <0>; 226 + interrupts = <42 2>; 227 + interrupt-parent = <&mpic>; 228 + }; 229 + 230 + spi@7000 { 231 + compatible = "fsl,espi"; 232 + reg = <0x7000 0x1000>; 233 + interrupts = <59 0x2>; 234 + interrupt-parent = <&mpic>; 235 + }; 236 + 237 + dma@c300 { 238 + #address-cells = <1>; 239 + #size-cells = <1>; 240 + compatible = "fsl,eloplus-dma"; 241 + reg = <0xc300 0x4>; 242 + ranges = <0x0 0xc100 0x200>; 243 + cell-index = <1>; 244 + dma-channel@0 { 245 + compatible = "fsl,eloplus-dma-channel"; 246 + reg = <0x0 0x80>; 247 + cell-index = <0>; 248 + interrupt-parent = <&mpic>; 249 + interrupts = <76 2>; 250 + }; 251 + dma-channel@80 { 252 + compatible = "fsl,eloplus-dma-channel"; 253 + reg = <0x80 0x80>; 254 + cell-index = <1>; 255 + interrupt-parent = <&mpic>; 256 + interrupts = <77 2>; 257 + }; 258 + dma-channel@100 { 259 + compatible = "fsl,eloplus-dma-channel"; 260 + reg = <0x100 0x80>; 261 + cell-index = <2>; 262 + interrupt-parent = <&mpic>; 263 + interrupts = <78 2>; 264 + }; 265 + dma-channel@180 { 266 + compatible = "fsl,eloplus-dma-channel"; 267 + reg = <0x180 0x80>; 268 + cell-index = <3>; 269 + interrupt-parent = <&mpic>; 270 + interrupts = <79 2>; 271 + }; 272 + }; 273 + 274 + gpio: gpio-controller@f000 { 275 + #gpio-cells = <2>; 276 + compatible = "fsl,mpc8572-gpio"; 277 + reg = <0xf000 0x100>; 278 + interrupts = <47 0x2>; 279 + interrupt-parent = <&mpic>; 280 + gpio-controller; 281 + }; 282 + 283 + L2: l2-cache-controller@20000 { 284 + compatible = "fsl,p2020-l2-cache-controller"; 285 + reg = <0x20000 0x1000>; 286 + cache-line-size = <32>; // 32 bytes 287 + cache-size = <0x80000>; // L2, 512k 288 + interrupt-parent = <&mpic>; 289 + interrupts = <16 2>; 290 + }; 291 + 292 + dma@21300 { 293 + #address-cells = <1>; 294 + #size-cells = <1>; 295 + compatible = "fsl,eloplus-dma"; 296 + reg = <0x21300 0x4>; 297 + ranges = <0x0 0x21100 0x200>; 298 + cell-index = <0>; 299 + dma-channel@0 { 300 + compatible = "fsl,eloplus-dma-channel"; 301 + reg = <0x0 0x80>; 302 + cell-index = <0>; 303 + interrupt-parent = <&mpic>; 304 + interrupts = <20 2>; 305 + }; 306 + dma-channel@80 { 307 + compatible = "fsl,eloplus-dma-channel"; 308 + reg = <0x80 0x80>; 309 + cell-index = <1>; 310 + interrupt-parent = <&mpic>; 311 + interrupts = <21 2>; 312 + }; 313 + dma-channel@100 { 314 + compatible = "fsl,eloplus-dma-channel"; 315 + reg = <0x100 0x80>; 316 + cell-index = <2>; 317 + interrupt-parent = <&mpic>; 318 + interrupts = <22 2>; 319 + }; 320 + dma-channel@180 { 321 + compatible = "fsl,eloplus-dma-channel"; 322 + reg = <0x180 0x80>; 323 + cell-index = <3>; 324 + interrupt-parent = <&mpic>; 325 + interrupts = <23 2>; 326 + }; 327 + }; 328 + 329 + usb@22000 { 330 + #address-cells = <1>; 331 + #size-cells = <0>; 332 + compatible = "fsl-usb2-dr"; 333 + reg = <0x22000 0x1000>; 334 + interrupt-parent = <&mpic>; 335 + interrupts = <28 0x2>; 336 + phy_type = "ulpi"; 337 + }; 338 + 339 + enet0: ethernet@24000 { 340 + #address-cells = <1>; 341 + #size-cells = <1>; 342 + cell-index = <0>; 343 + device_type = "network"; 344 + model = "eTSEC"; 345 + compatible = "gianfar"; 346 + reg = <0x24000 0x1000>; 347 + ranges = <0x0 0x24000 0x1000>; 348 + local-mac-address = [ 00 00 00 00 00 00 ]; 349 + interrupts = <29 2 30 2 34 2>; 350 + interrupt-parent = <&mpic>; 351 + tbi-handle = <&tbi0>; 352 + phy-handle = <&phy0>; 353 + phy-connection-type = "rgmii-id"; 354 + 355 + mdio@520 { 356 + #address-cells = <1>; 357 + #size-cells = <0>; 358 + compatible = "fsl,gianfar-mdio"; 359 + reg = <0x520 0x20>; 360 + 361 + phy0: ethernet-phy@0 { 362 + interrupt-parent = <&mpic>; 363 + interrupts = <3 1>; 364 + reg = <0x0>; 365 + }; 366 + phy1: ethernet-phy@1 { 367 + interrupt-parent = <&mpic>; 368 + interrupts = <3 1>; 369 + reg = <0x1>; 370 + }; 371 + phy2: ethernet-phy@2 { 372 + interrupt-parent = <&mpic>; 373 + interrupts = <3 1>; 374 + reg = <0x2>; 375 + }; 376 + tbi0: tbi-phy@11 { 377 + reg = <0x11>; 378 + device_type = "tbi-phy"; 379 + }; 380 + }; 381 + }; 382 + 383 + enet1: ethernet@25000 { 384 + #address-cells = <1>; 385 + #size-cells = <1>; 386 + cell-index = <1>; 387 + device_type = "network"; 388 + model = "eTSEC"; 389 + compatible = "gianfar"; 390 + reg = <0x25000 0x1000>; 391 + ranges = <0x0 0x25000 0x1000>; 392 + local-mac-address = [ 00 00 00 00 00 00 ]; 393 + interrupts = <35 2 36 2 40 2>; 394 + interrupt-parent = <&mpic>; 395 + tbi-handle = <&tbi1>; 396 + phy-handle = <&phy1>; 397 + phy-connection-type = "rgmii-id"; 398 + 399 + mdio@520 { 400 + #address-cells = <1>; 401 + #size-cells = <0>; 402 + compatible = "fsl,gianfar-tbi"; 403 + reg = <0x520 0x20>; 404 + 405 + tbi1: tbi-phy@11 { 406 + reg = <0x11>; 407 + device_type = "tbi-phy"; 408 + }; 409 + }; 410 + }; 411 + 412 + enet2: ethernet@26000 { 413 + #address-cells = <1>; 414 + #size-cells = <1>; 415 + cell-index = <2>; 416 + device_type = "network"; 417 + model = "eTSEC"; 418 + compatible = "gianfar"; 419 + reg = <0x26000 0x1000>; 420 + ranges = <0x0 0x26000 0x1000>; 421 + local-mac-address = [ 00 00 00 00 00 00 ]; 422 + interrupts = <31 2 32 2 33 2>; 423 + interrupt-parent = <&mpic>; 424 + tbi-handle = <&tbi2>; 425 + phy-handle = <&phy2>; 426 + phy-connection-type = "rgmii-id"; 427 + 428 + mdio@520 { 429 + #address-cells = <1>; 430 + #size-cells = <0>; 431 + compatible = "fsl,gianfar-tbi"; 432 + reg = <0x520 0x20>; 433 + 434 + tbi2: tbi-phy@11 { 435 + reg = <0x11>; 436 + device_type = "tbi-phy"; 437 + }; 438 + }; 439 + }; 440 + 441 + sdhci@2e000 { 442 + compatible = "fsl,p2020-esdhc", "fsl,esdhc"; 443 + reg = <0x2e000 0x1000>; 444 + interrupts = <72 0x2>; 445 + interrupt-parent = <&mpic>; 446 + /* Filled in by U-Boot */ 447 + clock-frequency = <0>; 448 + }; 449 + 450 + crypto@30000 { 451 + compatible = "fsl,sec3.1", "fsl,sec3.0", "fsl,sec2.4", 452 + "fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0"; 453 + reg = <0x30000 0x10000>; 454 + interrupts = <45 2 58 2>; 455 + interrupt-parent = <&mpic>; 456 + fsl,num-channels = <4>; 457 + fsl,channel-fifo-len = <24>; 458 + fsl,exec-units-mask = <0xbfe>; 459 + fsl,descriptor-types-mask = <0x3ab0ebf>; 460 + }; 461 + 462 + mpic: pic@40000 { 463 + interrupt-controller; 464 + #address-cells = <0>; 465 + #interrupt-cells = <2>; 466 + reg = <0x40000 0x40000>; 467 + compatible = "chrp,open-pic"; 468 + device_type = "open-pic"; 469 + }; 470 + 471 + msi@41600 { 472 + compatible = "fsl,mpic-msi"; 473 + reg = <0x41600 0x80>; 474 + msi-available-ranges = <0 0x100>; 475 + interrupts = < 476 + 0xe0 0 477 + 0xe1 0 478 + 0xe2 0 479 + 0xe3 0 480 + 0xe4 0 481 + 0xe5 0 482 + 0xe6 0 483 + 0xe7 0>; 484 + interrupt-parent = <&mpic>; 485 + }; 486 + 487 + global-utilities@e0000 { //global utilities block 488 + compatible = "fsl,p2020-guts"; 489 + reg = <0xe0000 0x1000>; 490 + fsl,has-rstcr; 491 + }; 492 + }; 493 + 494 + pci0: pcie@ffe08000 { 495 + compatible = "fsl,mpc8548-pcie"; 496 + device_type = "pci"; 497 + #interrupt-cells = <1>; 498 + #size-cells = <2>; 499 + #address-cells = <3>; 500 + reg = <0 0xffe08000 0 0x1000>; 501 + bus-range = <0 255>; 502 + ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000 503 + 0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>; 504 + clock-frequency = <33333333>; 505 + interrupt-parent = <&mpic>; 506 + interrupts = <24 2>; 507 + interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 508 + interrupt-map = < 509 + /* IDSEL 0x0 */ 510 + 0000 0x0 0x0 0x1 &mpic 0x8 0x1 511 + 0000 0x0 0x0 0x2 &mpic 0x9 0x1 512 + 0000 0x0 0x0 0x3 &mpic 0xa 0x1 513 + 0000 0x0 0x0 0x4 &mpic 0xb 0x1 514 + >; 515 + pcie@0 { 516 + reg = <0x0 0x0 0x0 0x0 0x0>; 517 + #size-cells = <2>; 518 + #address-cells = <3>; 519 + device_type = "pci"; 520 + ranges = <0x2000000 0x0 0x80000000 521 + 0x2000000 0x0 0x80000000 522 + 0x0 0x20000000 523 + 524 + 0x1000000 0x0 0x0 525 + 0x1000000 0x0 0x0 526 + 0x0 0x10000>; 527 + }; 528 + }; 529 + 530 + pci1: pcie@ffe09000 { 531 + compatible = "fsl,mpc8548-pcie"; 532 + device_type = "pci"; 533 + #interrupt-cells = <1>; 534 + #size-cells = <2>; 535 + #address-cells = <3>; 536 + reg = <0 0xffe09000 0 0x1000>; 537 + bus-range = <0 255>; 538 + ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000 539 + 0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>; 540 + clock-frequency = <33333333>; 541 + interrupt-parent = <&mpic>; 542 + interrupts = <25 2>; 543 + interrupt-map-mask = <0xff00 0x0 0x0 0x7>; 544 + interrupt-map = < 545 + 546 + // IDSEL 0x11 func 0 - PCI slot 1 547 + 0x8800 0x0 0x0 0x1 &i8259 0x9 0x2 548 + 0x8800 0x0 0x0 0x2 &i8259 0xa 0x2 549 + 550 + // IDSEL 0x11 func 1 - PCI slot 1 551 + 0x8900 0x0 0x0 0x1 &i8259 0x9 0x2 552 + 0x8900 0x0 0x0 0x2 &i8259 0xa 0x2 553 + 554 + // IDSEL 0x11 func 2 - PCI slot 1 555 + 0x8a00 0x0 0x0 0x1 &i8259 0x9 0x2 556 + 0x8a00 0x0 0x0 0x2 &i8259 0xa 0x2 557 + 558 + // IDSEL 0x11 func 3 - PCI slot 1 559 + 0x8b00 0x0 0x0 0x1 &i8259 0x9 0x2 560 + 0x8b00 0x0 0x0 0x2 &i8259 0xa 0x2 561 + 562 + // IDSEL 0x11 func 4 - PCI slot 1 563 + 0x8c00 0x0 0x0 0x1 &i8259 0x9 0x2 564 + 0x8c00 0x0 0x0 0x2 &i8259 0xa 0x2 565 + 566 + // IDSEL 0x11 func 5 - PCI slot 1 567 + 0x8d00 0x0 0x0 0x1 &i8259 0x9 0x2 568 + 0x8d00 0x0 0x0 0x2 &i8259 0xa 0x2 569 + 570 + // IDSEL 0x11 func 6 - PCI slot 1 571 + 0x8e00 0x0 0x0 0x1 &i8259 0x9 0x2 572 + 0x8e00 0x0 0x0 0x2 &i8259 0xa 0x2 573 + 574 + // IDSEL 0x11 func 7 - PCI slot 1 575 + 0x8f00 0x0 0x0 0x1 &i8259 0x9 0x2 576 + 0x8f00 0x0 0x0 0x2 &i8259 0xa 0x2 577 + 578 + // IDSEL 0x1d Audio 579 + 0xe800 0x0 0x0 0x1 &i8259 0x6 0x2 580 + 581 + // IDSEL 0x1e Legacy 582 + 0xf000 0x0 0x0 0x1 &i8259 0x7 0x2 583 + 0xf100 0x0 0x0 0x1 &i8259 0x7 0x2 584 + 585 + // IDSEL 0x1f IDE/SATA 586 + 0xf800 0x0 0x0 0x1 &i8259 0xe 0x2 587 + 0xf900 0x0 0x0 0x1 &i8259 0x5 0x2 588 + >; 589 + 590 + pcie@0 { 591 + reg = <0x0 0x0 0x0 0x0 0x0>; 592 + #size-cells = <2>; 593 + #address-cells = <3>; 594 + device_type = "pci"; 595 + ranges = <0x2000000 0x0 0xa0000000 596 + 0x2000000 0x0 0xa0000000 597 + 0x0 0x20000000 598 + 599 + 0x1000000 0x0 0x0 600 + 0x1000000 0x0 0x0 601 + 0x0 0x10000>; 602 + uli1575@0 { 603 + reg = <0x0 0x0 0x0 0x0 0x0>; 604 + #size-cells = <2>; 605 + #address-cells = <3>; 606 + ranges = <0x2000000 0x0 0xa0000000 607 + 0x2000000 0x0 0xa0000000 608 + 0x0 0x20000000 609 + 610 + 0x1000000 0x0 0x0 611 + 0x1000000 0x0 0x0 612 + 0x0 0x10000>; 613 + isa@1e { 614 + device_type = "isa"; 615 + #interrupt-cells = <2>; 616 + #size-cells = <1>; 617 + #address-cells = <2>; 618 + reg = <0xf000 0x0 0x0 0x0 0x0>; 619 + ranges = <0x1 0x0 0x1000000 0x0 0x0 620 + 0x1000>; 621 + interrupt-parent = <&i8259>; 622 + 623 + i8259: interrupt-controller@20 { 624 + reg = <0x1 0x20 0x2 625 + 0x1 0xa0 0x2 626 + 0x1 0x4d0 0x2>; 627 + interrupt-controller; 628 + device_type = "interrupt-controller"; 629 + #address-cells = <0>; 630 + #interrupt-cells = <2>; 631 + compatible = "chrp,iic"; 632 + interrupts = <4 1>; 633 + interrupt-parent = <&mpic>; 634 + }; 635 + 636 + i8042@60 { 637 + #size-cells = <0>; 638 + #address-cells = <1>; 639 + reg = <0x1 0x60 0x1 0x1 0x64 0x1>; 640 + interrupts = <1 3 12 3>; 641 + interrupt-parent = 642 + <&i8259>; 643 + 644 + keyboard@0 { 645 + reg = <0x0>; 646 + compatible = "pnpPNP,303"; 647 + }; 648 + 649 + mouse@1 { 650 + reg = <0x1>; 651 + compatible = "pnpPNP,f03"; 652 + }; 653 + }; 654 + 655 + rtc@70 { 656 + compatible = "pnpPNP,b00"; 657 + reg = <0x1 0x70 0x2>; 658 + }; 659 + 660 + gpio@400 { 661 + reg = <0x1 0x400 0x80>; 662 + }; 663 + }; 664 + }; 665 + }; 666 + 667 + }; 668 + 669 + pci2: pcie@ffe0a000 { 670 + compatible = "fsl,mpc8548-pcie"; 671 + device_type = "pci"; 672 + #interrupt-cells = <1>; 673 + #size-cells = <2>; 674 + #address-cells = <3>; 675 + reg = <0 0xffe0a000 0 0x1000>; 676 + bus-range = <0 255>; 677 + ranges = <0x2000000 0x0 0xc0000000 0 0xc0000000 0x0 0x20000000 678 + 0x1000000 0x0 0x00000000 0 0xffc20000 0x0 0x10000>; 679 + clock-frequency = <33333333>; 680 + interrupt-parent = <&mpic>; 681 + interrupts = <26 2>; 682 + interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 683 + interrupt-map = < 684 + /* IDSEL 0x0 */ 685 + 0000 0x0 0x0 0x1 &mpic 0x0 0x1 686 + 0000 0x0 0x0 0x2 &mpic 0x1 0x1 687 + 0000 0x0 0x0 0x3 &mpic 0x2 0x1 688 + 0000 0x0 0x0 0x4 &mpic 0x3 0x1 689 + >; 690 + pcie@0 { 691 + reg = <0x0 0x0 0x0 0x0 0x0>; 692 + #size-cells = <2>; 693 + #address-cells = <3>; 694 + device_type = "pci"; 695 + ranges = <0x2000000 0x0 0xc0000000 696 + 0x2000000 0x0 0xc0000000 697 + 0x0 0x20000000 698 + 699 + 0x1000000 0x0 0x0 700 + 0x1000000 0x0 0x0 701 + 0x0 0x10000>; 702 + }; 703 + }; 704 + };
-1
arch/powerpc/boot/dts/sbc8349.dts
··· 278 278 }; 279 279 280 280 pci0: pci@e0008500 { 281 - cell-index = <1>; 282 281 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 283 282 interrupt-map = < 284 283
+13 -3
arch/powerpc/boot/dts/sbc8548.dts
··· 151 151 #size-cells = <1>; 152 152 device_type = "soc"; 153 153 ranges = <0x00000000 0xe0000000 0x00100000>; 154 - reg = <0xe0000000 0x00001000>; // CCSRBAR 155 154 bus-frequency = <0>; 156 155 compatible = "simple-bus"; 156 + 157 + ecm-law@0 { 158 + compatible = "fsl,ecm-law"; 159 + reg = <0x0 0x1000>; 160 + fsl,num-laws = <10>; 161 + }; 162 + 163 + ecm@1000 { 164 + compatible = "fsl,mpc8548-ecm", "fsl,ecm"; 165 + reg = <0x1000 0x1000>; 166 + interrupts = <17 2>; 167 + interrupt-parent = <&mpic>; 168 + }; 157 169 158 170 memory-controller@2000 { 159 171 compatible = "fsl,mpc8548-memory-controller"; ··· 362 350 }; 363 351 364 352 pci0: pci@e0008000 { 365 - cell-index = <0>; 366 353 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 367 354 interrupt-map = < 368 355 /* IDSEL 0x01 (PCI-X slot) @66MHz */ ··· 391 380 }; 392 381 393 382 pci2: pcie@e000a000 { 394 - cell-index = <2>; 395 383 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 396 384 interrupt-map = < 397 385
+13 -2
arch/powerpc/boot/dts/sbc8560.dts
··· 57 57 #size-cells = <1>; 58 58 device_type = "soc"; 59 59 ranges = <0x0 0xff700000 0x00100000>; 60 - reg = <0xff700000 0x00100000>; 61 60 clock-frequency = <0>; 61 + 62 + ecm-law@0 { 63 + compatible = "fsl,ecm-law"; 64 + reg = <0x0 0x1000>; 65 + fsl,num-laws = <8>; 66 + }; 67 + 68 + ecm@1000 { 69 + compatible = "fsl,mpc8560-ecm", "fsl,ecm"; 70 + reg = <0x1000 0x1000>; 71 + interrupts = <17 2>; 72 + interrupt-parent = <&mpic>; 73 + }; 62 74 63 75 memory-controller@2000 { 64 76 compatible = "fsl,mpc8560-memory-controller"; ··· 308 296 }; 309 297 310 298 pci0: pci@ff708000 { 311 - cell-index = <0>; 312 299 #interrupt-cells = <1>; 313 300 #size-cells = <2>; 314 301 #address-cells = <3>;
+13 -3
arch/powerpc/boot/dts/sbc8641d.dts
··· 126 126 device_type = "soc"; 127 127 compatible = "simple-bus"; 128 128 ranges = <0x00000000 0xf8000000 0x00100000>; 129 - reg = <0xf8000000 0x00001000>; // CCSRBAR 130 129 bus-frequency = <0>; 130 + 131 + mcm-law@0 { 132 + compatible = "fsl,mcm-law"; 133 + reg = <0x0 0x1000>; 134 + fsl,num-laws = <10>; 135 + }; 136 + 137 + mcm@1000 { 138 + compatible = "fsl,mpc8641-mcm", "fsl,mcm"; 139 + reg = <0x1000 0x1000>; 140 + interrupts = <17 2>; 141 + interrupt-parent = <&mpic>; 142 + }; 131 143 132 144 i2c@3000 { 133 145 #address-cells = <1>; ··· 383 371 }; 384 372 385 373 pci0: pcie@f8008000 { 386 - cell-index = <0>; 387 374 compatible = "fsl,mpc8641-pcie"; 388 375 device_type = "pci"; 389 376 #interrupt-cells = <1>; ··· 421 410 }; 422 411 423 412 pci1: pcie@f8009000 { 424 - cell-index = <1>; 425 413 compatible = "fsl,mpc8641-pcie"; 426 414 device_type = "pci"; 427 415 #interrupt-cells = <1>;
+22
arch/powerpc/boot/dts/sequoia.dts
··· 199 199 }; 200 200 }; 201 201 202 + ndfc@3,0 { 203 + compatible = "ibm,ndfc"; 204 + reg = <0x00000003 0x00000000 0x00002000>; 205 + ccr = <0x00001000>; 206 + bank-settings = <0x80002222>; 207 + #address-cells = <1>; 208 + #size-cells = <1>; 209 + 210 + nand { 211 + #address-cells = <1>; 212 + #size-cells = <1>; 213 + 214 + partition@0 { 215 + label = "u-boot"; 216 + reg = <0x00000000 0x00084000>; 217 + }; 218 + partition@84000 { 219 + label = "user"; 220 + reg = <0x00000000 0x01f7c000>; 221 + }; 222 + }; 223 + }; 202 224 }; 203 225 204 226 UART0: serial@ef600300 {
+13 -2
arch/powerpc/boot/dts/socrates.dts
··· 55 55 device_type = "soc"; 56 56 57 57 ranges = <0x00000000 0xe0000000 0x00100000>; 58 - reg = <0xe0000000 0x00001000>; // CCSRBAR 1M 59 58 bus-frequency = <0>; // Filled in by U-Boot 60 59 compatible = "fsl,mpc8544-immr", "simple-bus"; 60 + 61 + ecm-law@0 { 62 + compatible = "fsl,ecm-law"; 63 + reg = <0x0 0x1000>; 64 + fsl,num-laws = <10>; 65 + }; 66 + 67 + ecm@1000 { 68 + compatible = "fsl,mpc8544-ecm", "fsl,ecm"; 69 + reg = <0x1000 0x1000>; 70 + interrupts = <17 2>; 71 + interrupt-parent = <&mpic>; 72 + }; 61 73 62 74 memory-controller@2000 { 63 75 compatible = "fsl,mpc8544-memory-controller"; ··· 326 314 }; 327 315 328 316 pci0: pci@e0008000 { 329 - cell-index = <0>; 330 317 #interrupt-cells = <1>; 331 318 #size-cells = <2>; 332 319 #address-cells = <3>;
+13 -2
arch/powerpc/boot/dts/stx_gp3_8560.dts
··· 52 52 #size-cells = <1>; 53 53 device_type = "soc"; 54 54 ranges = <0 0xfdf00000 0x100000>; 55 - reg = <0xfdf00000 0x1000>; 56 55 bus-frequency = <0>; 57 56 compatible = "fsl,mpc8560-immr", "simple-bus"; 57 + 58 + ecm-law@0 { 59 + compatible = "fsl,ecm-law"; 60 + reg = <0x0 0x1000>; 61 + fsl,num-laws = <8>; 62 + }; 63 + 64 + ecm@1000 { 65 + compatible = "fsl,mpc8560-ecm", "fsl,ecm"; 66 + reg = <0x1000 0x1000>; 67 + interrupts = <17 2>; 68 + interrupt-parent = <&mpic>; 69 + }; 58 70 59 71 memory-controller@2000 { 60 72 compatible = "fsl,mpc8540-memory-controller"; ··· 263 251 }; 264 252 265 253 pci0: pci@fdf08000 { 266 - cell-index = <0>; 267 254 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 268 255 interrupt-map = < 269 256
+13 -2
arch/powerpc/boot/dts/tqm8540.dts
··· 54 54 #size-cells = <1>; 55 55 device_type = "soc"; 56 56 ranges = <0x0 0xe0000000 0x100000>; 57 - reg = <0xe0000000 0x200>; 58 57 bus-frequency = <0>; 59 58 compatible = "fsl,mpc8540-immr", "simple-bus"; 59 + 60 + ecm-law@0 { 61 + compatible = "fsl,ecm-law"; 62 + reg = <0x0 0x1000>; 63 + fsl,num-laws = <8>; 64 + }; 65 + 66 + ecm@1000 { 67 + compatible = "fsl,mpc8540-ecm", "fsl,ecm"; 68 + reg = <0x1000 0x1000>; 69 + interrupts = <17 2>; 70 + interrupt-parent = <&mpic>; 71 + }; 60 72 61 73 memory-controller@2000 { 62 74 compatible = "fsl,mpc8540-memory-controller"; ··· 278 266 }; 279 267 280 268 pci0: pci@e0008000 { 281 - cell-index = <0>; 282 269 #interrupt-cells = <1>; 283 270 #size-cells = <2>; 284 271 #address-cells = <3>;
+13 -2
arch/powerpc/boot/dts/tqm8541.dts
··· 53 53 #size-cells = <1>; 54 54 device_type = "soc"; 55 55 ranges = <0x0 0xe0000000 0x100000>; 56 - reg = <0xe0000000 0x200>; 57 56 bus-frequency = <0>; 58 57 compatible = "fsl,mpc8541-immr", "simple-bus"; 58 + 59 + ecm-law@0 { 60 + compatible = "fsl,ecm-law"; 61 + reg = <0x0 0x1000>; 62 + fsl,num-laws = <8>; 63 + }; 64 + 65 + ecm@1000 { 66 + compatible = "fsl,mpc8541-ecm", "fsl,ecm"; 67 + reg = <0x1000 0x1000>; 68 + interrupts = <17 2>; 69 + interrupt-parent = <&mpic>; 70 + }; 59 71 60 72 memory-controller@2000 { 61 73 compatible = "fsl,mpc8540-memory-controller"; ··· 300 288 }; 301 289 302 290 pci0: pci@e0008000 { 303 - cell-index = <0>; 304 291 #interrupt-cells = <1>; 305 292 #size-cells = <2>; 306 293 #address-cells = <3>;
+13 -3
arch/powerpc/boot/dts/tqm8548-bigflash.dts
··· 55 55 #size-cells = <1>; 56 56 device_type = "soc"; 57 57 ranges = <0x0 0xa0000000 0x100000>; 58 - reg = <0xa0000000 0x1000>; // CCSRBAR 59 58 bus-frequency = <0>; 60 59 compatible = "fsl,mpc8548-immr", "simple-bus"; 60 + 61 + ecm-law@0 { 62 + compatible = "fsl,ecm-law"; 63 + reg = <0x0 0x1000>; 64 + fsl,num-laws = <10>; 65 + }; 66 + 67 + ecm@1000 { 68 + compatible = "fsl,mpc8548-ecm", "fsl,ecm"; 69 + reg = <0x1000 0x1000>; 70 + interrupts = <17 2>; 71 + interrupt-parent = <&mpic>; 72 + }; 61 73 62 74 memory-controller@2000 { 63 75 compatible = "fsl,mpc8548-memory-controller"; ··· 431 419 }; 432 420 433 421 pci0: pci@a0008000 { 434 - cell-index = <0>; 435 422 #interrupt-cells = <1>; 436 423 #size-cells = <2>; 437 424 #address-cells = <3>; ··· 452 441 }; 453 442 454 443 pci1: pcie@a000a000 { 455 - cell-index = <2>; 456 444 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 457 445 interrupt-map = < 458 446 /* IDSEL 0x0 (PEX) */
+13 -3
arch/powerpc/boot/dts/tqm8548.dts
··· 55 55 #size-cells = <1>; 56 56 device_type = "soc"; 57 57 ranges = <0x0 0xe0000000 0x100000>; 58 - reg = <0xe0000000 0x1000>; // CCSRBAR 59 58 bus-frequency = <0>; 60 59 compatible = "fsl,mpc8548-immr", "simple-bus"; 60 + 61 + ecm-law@0 { 62 + compatible = "fsl,ecm-law"; 63 + reg = <0x0 0x1000>; 64 + fsl,num-laws = <10>; 65 + }; 66 + 67 + ecm@1000 { 68 + compatible = "fsl,mpc8548-ecm", "fsl,ecm"; 69 + reg = <0x1000 0x1000>; 70 + interrupts = <17 2>; 71 + interrupt-parent = <&mpic>; 72 + }; 61 73 62 74 memory-controller@2000 { 63 75 compatible = "fsl,mpc8548-memory-controller"; ··· 431 419 }; 432 420 433 421 pci0: pci@e0008000 { 434 - cell-index = <0>; 435 422 #interrupt-cells = <1>; 436 423 #size-cells = <2>; 437 424 #address-cells = <3>; ··· 452 441 }; 453 442 454 443 pci1: pcie@e000a000 { 455 - cell-index = <2>; 456 444 interrupt-map-mask = <0xf800 0x0 0x0 0x7>; 457 445 interrupt-map = < 458 446 /* IDSEL 0x0 (PEX) */
+13 -2
arch/powerpc/boot/dts/tqm8555.dts
··· 53 53 #size-cells = <1>; 54 54 device_type = "soc"; 55 55 ranges = <0x0 0xe0000000 0x100000>; 56 - reg = <0xe0000000 0x200>; 57 56 bus-frequency = <0>; 58 57 compatible = "fsl,mpc8555-immr", "simple-bus"; 58 + 59 + ecm-law@0 { 60 + compatible = "fsl,ecm-law"; 61 + reg = <0x0 0x1000>; 62 + fsl,num-laws = <8>; 63 + }; 64 + 65 + ecm@1000 { 66 + compatible = "fsl,mpc8555-ecm", "fsl,ecm"; 67 + reg = <0x1000 0x1000>; 68 + interrupts = <17 2>; 69 + interrupt-parent = <&mpic>; 70 + }; 59 71 60 72 memory-controller@2000 { 61 73 compatible = "fsl,mpc8540-memory-controller"; ··· 300 288 }; 301 289 302 290 pci0: pci@e0008000 { 303 - cell-index = <0>; 304 291 #interrupt-cells = <1>; 305 292 #size-cells = <2>; 306 293 #address-cells = <3>;
+13 -2
arch/powerpc/boot/dts/tqm8560.dts
··· 55 55 #size-cells = <1>; 56 56 device_type = "soc"; 57 57 ranges = <0x0 0xe0000000 0x100000>; 58 - reg = <0xe0000000 0x200>; 59 58 bus-frequency = <0>; 60 59 compatible = "fsl,mpc8560-immr", "simple-bus"; 60 + 61 + ecm-law@0 { 62 + compatible = "fsl,ecm-law"; 63 + reg = <0x0 0x1000>; 64 + fsl,num-laws = <8>; 65 + }; 66 + 67 + ecm@1000 { 68 + compatible = "fsl,mpc8560-ecm", "fsl,ecm"; 69 + reg = <0x1000 0x1000>; 70 + interrupts = <17 2>; 71 + interrupt-parent = <&mpic>; 72 + }; 61 73 62 74 memory-controller@2000 { 63 75 compatible = "fsl,mpc8540-memory-controller"; ··· 371 359 }; 372 360 373 361 pci0: pci@e0008000 { 374 - cell-index = <0>; 375 362 #interrupt-cells = <1>; 376 363 #size-cells = <2>; 377 364 #address-cells = <3>;
+465
arch/powerpc/boot/dts/virtex440-ml510.dts
··· 1 + /* 2 + * Xilinx ML510 Reference Design support 3 + * 4 + * This DTS file was created for the ml510_bsb1_pcores_ppc440 reference design. 5 + * The reference design contains a bug which prevent PCI DMA from working 6 + * properly. A description of the bug is given in the plbv46_pci section. It 7 + * needs to be fixed by the user until Xilinx updates their reference design. 8 + * 9 + * Copyright 2009, Roderick Colenbrander 10 + */ 11 + 12 + /dts-v1/; 13 + / { 14 + #address-cells = <1>; 15 + #size-cells = <1>; 16 + compatible = "xlnx,ml510-ref-design", "xlnx,virtex440"; 17 + dcr-parent = <&ppc440_0>; 18 + DDR2_SDRAM_DIMM0: memory@0 { 19 + device_type = "memory"; 20 + reg = < 0x0 0x20000000 >; 21 + } ; 22 + alias { 23 + ethernet0 = &Hard_Ethernet_MAC; 24 + serial0 = &RS232_Uart_1; 25 + } ; 26 + chosen { 27 + bootargs = "console=ttyS0 root=/dev/ram"; 28 + linux,stdout-path = "/plb@0/serial@83e00000"; 29 + } ; 30 + cpus { 31 + #address-cells = <1>; 32 + #cpus = <0x1>; 33 + #size-cells = <0>; 34 + ppc440_0: cpu@0 { 35 + #address-cells = <1>; 36 + #size-cells = <1>; 37 + clock-frequency = <300000000>; 38 + compatible = "PowerPC,440", "ibm,ppc440"; 39 + d-cache-line-size = <0x20>; 40 + d-cache-size = <0x8000>; 41 + dcr-access-method = "native"; 42 + dcr-controller ; 43 + device_type = "cpu"; 44 + i-cache-line-size = <0x20>; 45 + i-cache-size = <0x8000>; 46 + model = "PowerPC,440"; 47 + reg = <0>; 48 + timebase-frequency = <300000000>; 49 + xlnx,apu-control = <0x2000>; 50 + xlnx,apu-udi-0 = <0x0>; 51 + xlnx,apu-udi-1 = <0x0>; 52 + xlnx,apu-udi-10 = <0x0>; 53 + xlnx,apu-udi-11 = <0x0>; 54 + xlnx,apu-udi-12 = <0x0>; 55 + xlnx,apu-udi-13 = <0x0>; 56 + xlnx,apu-udi-14 = <0x0>; 57 + xlnx,apu-udi-15 = <0x0>; 58 + xlnx,apu-udi-2 = <0x0>; 59 + xlnx,apu-udi-3 = <0x0>; 60 + xlnx,apu-udi-4 = <0x0>; 61 + xlnx,apu-udi-5 = <0x0>; 62 + xlnx,apu-udi-6 = <0x0>; 63 + xlnx,apu-udi-7 = <0x0>; 64 + xlnx,apu-udi-8 = <0x0>; 65 + xlnx,apu-udi-9 = <0x0>; 66 + xlnx,dcr-autolock-enable = <0x1>; 67 + xlnx,dcu-rd-ld-cache-plb-prio = <0x0>; 68 + xlnx,dcu-rd-noncache-plb-prio = <0x0>; 69 + xlnx,dcu-rd-touch-plb-prio = <0x0>; 70 + xlnx,dcu-rd-urgent-plb-prio = <0x0>; 71 + xlnx,dcu-wr-flush-plb-prio = <0x0>; 72 + xlnx,dcu-wr-store-plb-prio = <0x0>; 73 + xlnx,dcu-wr-urgent-plb-prio = <0x0>; 74 + xlnx,dma0-control = <0x0>; 75 + xlnx,dma0-plb-prio = <0x0>; 76 + xlnx,dma0-rxchannelctrl = <0x1010000>; 77 + xlnx,dma0-rxirqtimer = <0x3ff>; 78 + xlnx,dma0-txchannelctrl = <0x1010000>; 79 + xlnx,dma0-txirqtimer = <0x3ff>; 80 + xlnx,dma1-control = <0x0>; 81 + xlnx,dma1-plb-prio = <0x0>; 82 + xlnx,dma1-rxchannelctrl = <0x1010000>; 83 + xlnx,dma1-rxirqtimer = <0x3ff>; 84 + xlnx,dma1-txchannelctrl = <0x1010000>; 85 + xlnx,dma1-txirqtimer = <0x3ff>; 86 + xlnx,dma2-control = <0x0>; 87 + xlnx,dma2-plb-prio = <0x0>; 88 + xlnx,dma2-rxchannelctrl = <0x1010000>; 89 + xlnx,dma2-rxirqtimer = <0x3ff>; 90 + xlnx,dma2-txchannelctrl = <0x1010000>; 91 + xlnx,dma2-txirqtimer = <0x3ff>; 92 + xlnx,dma3-control = <0x0>; 93 + xlnx,dma3-plb-prio = <0x0>; 94 + xlnx,dma3-rxchannelctrl = <0x1010000>; 95 + xlnx,dma3-rxirqtimer = <0x3ff>; 96 + xlnx,dma3-txchannelctrl = <0x1010000>; 97 + xlnx,dma3-txirqtimer = <0x3ff>; 98 + xlnx,endian-reset = <0x0>; 99 + xlnx,generate-plb-timespecs = <0x1>; 100 + xlnx,icu-rd-fetch-plb-prio = <0x0>; 101 + xlnx,icu-rd-spec-plb-prio = <0x0>; 102 + xlnx,icu-rd-touch-plb-prio = <0x0>; 103 + xlnx,interconnect-imask = <0xffffffff>; 104 + xlnx,mplb-allow-lock-xfer = <0x1>; 105 + xlnx,mplb-arb-mode = <0x0>; 106 + xlnx,mplb-awidth = <0x20>; 107 + xlnx,mplb-counter = <0x500>; 108 + xlnx,mplb-dwidth = <0x80>; 109 + xlnx,mplb-max-burst = <0x8>; 110 + xlnx,mplb-native-dwidth = <0x80>; 111 + xlnx,mplb-p2p = <0x0>; 112 + xlnx,mplb-prio-dcur = <0x2>; 113 + xlnx,mplb-prio-dcuw = <0x3>; 114 + xlnx,mplb-prio-icu = <0x4>; 115 + xlnx,mplb-prio-splb0 = <0x1>; 116 + xlnx,mplb-prio-splb1 = <0x0>; 117 + xlnx,mplb-read-pipe-enable = <0x1>; 118 + xlnx,mplb-sync-tattribute = <0x0>; 119 + xlnx,mplb-wdog-enable = <0x1>; 120 + xlnx,mplb-write-pipe-enable = <0x1>; 121 + xlnx,mplb-write-post-enable = <0x1>; 122 + xlnx,num-dma = <0x0>; 123 + xlnx,pir = <0xf>; 124 + xlnx,ppc440mc-addr-base = <0x0>; 125 + xlnx,ppc440mc-addr-high = <0x1fffffff>; 126 + xlnx,ppc440mc-arb-mode = <0x0>; 127 + xlnx,ppc440mc-bank-conflict-mask = <0x1800000>; 128 + xlnx,ppc440mc-control = <0xf810008f>; 129 + xlnx,ppc440mc-max-burst = <0x8>; 130 + xlnx,ppc440mc-prio-dcur = <0x2>; 131 + xlnx,ppc440mc-prio-dcuw = <0x3>; 132 + xlnx,ppc440mc-prio-icu = <0x4>; 133 + xlnx,ppc440mc-prio-splb0 = <0x1>; 134 + xlnx,ppc440mc-prio-splb1 = <0x0>; 135 + xlnx,ppc440mc-row-conflict-mask = <0x7ffe00>; 136 + xlnx,ppcdm-asyncmode = <0x0>; 137 + xlnx,ppcds-asyncmode = <0x0>; 138 + xlnx,user-reset = <0x0>; 139 + } ; 140 + } ; 141 + plb_v46_0: plb@0 { 142 + #address-cells = <1>; 143 + #size-cells = <1>; 144 + compatible = "xlnx,plb-v46-1.03.a", "simple-bus"; 145 + ranges ; 146 + FLASH: flash@fc000000 { 147 + bank-width = <2>; 148 + compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash"; 149 + reg = < 0xfc000000 0x2000000 >; 150 + xlnx,family = "virtex5"; 151 + xlnx,include-datawidth-matching-0 = <0x1>; 152 + xlnx,include-datawidth-matching-1 = <0x0>; 153 + xlnx,include-datawidth-matching-2 = <0x0>; 154 + xlnx,include-datawidth-matching-3 = <0x0>; 155 + xlnx,include-negedge-ioregs = <0x0>; 156 + xlnx,include-plb-ipif = <0x1>; 157 + xlnx,include-wrbuf = <0x1>; 158 + xlnx,max-mem-width = <0x10>; 159 + xlnx,mch-native-dwidth = <0x20>; 160 + xlnx,mch-plb-clk-period-ps = <0x2710>; 161 + xlnx,mch-splb-awidth = <0x20>; 162 + xlnx,mch0-accessbuf-depth = <0x10>; 163 + xlnx,mch0-protocol = <0x0>; 164 + xlnx,mch0-rddatabuf-depth = <0x10>; 165 + xlnx,mch1-accessbuf-depth = <0x10>; 166 + xlnx,mch1-protocol = <0x0>; 167 + xlnx,mch1-rddatabuf-depth = <0x10>; 168 + xlnx,mch2-accessbuf-depth = <0x10>; 169 + xlnx,mch2-protocol = <0x0>; 170 + xlnx,mch2-rddatabuf-depth = <0x10>; 171 + xlnx,mch3-accessbuf-depth = <0x10>; 172 + xlnx,mch3-protocol = <0x0>; 173 + xlnx,mch3-rddatabuf-depth = <0x10>; 174 + xlnx,mem0-width = <0x10>; 175 + xlnx,mem1-width = <0x20>; 176 + xlnx,mem2-width = <0x20>; 177 + xlnx,mem3-width = <0x20>; 178 + xlnx,num-banks-mem = <0x1>; 179 + xlnx,num-channels = <0x2>; 180 + xlnx,priority-mode = <0x0>; 181 + xlnx,synch-mem-0 = <0x0>; 182 + xlnx,synch-mem-1 = <0x0>; 183 + xlnx,synch-mem-2 = <0x0>; 184 + xlnx,synch-mem-3 = <0x0>; 185 + xlnx,synch-pipedelay-0 = <0x2>; 186 + xlnx,synch-pipedelay-1 = <0x2>; 187 + xlnx,synch-pipedelay-2 = <0x2>; 188 + xlnx,synch-pipedelay-3 = <0x2>; 189 + xlnx,tavdv-ps-mem-0 = <0x1adb0>; 190 + xlnx,tavdv-ps-mem-1 = <0x3a98>; 191 + xlnx,tavdv-ps-mem-2 = <0x3a98>; 192 + xlnx,tavdv-ps-mem-3 = <0x3a98>; 193 + xlnx,tcedv-ps-mem-0 = <0x1adb0>; 194 + xlnx,tcedv-ps-mem-1 = <0x3a98>; 195 + xlnx,tcedv-ps-mem-2 = <0x3a98>; 196 + xlnx,tcedv-ps-mem-3 = <0x3a98>; 197 + xlnx,thzce-ps-mem-0 = <0x88b8>; 198 + xlnx,thzce-ps-mem-1 = <0x1b58>; 199 + xlnx,thzce-ps-mem-2 = <0x1b58>; 200 + xlnx,thzce-ps-mem-3 = <0x1b58>; 201 + xlnx,thzoe-ps-mem-0 = <0x1b58>; 202 + xlnx,thzoe-ps-mem-1 = <0x1b58>; 203 + xlnx,thzoe-ps-mem-2 = <0x1b58>; 204 + xlnx,thzoe-ps-mem-3 = <0x1b58>; 205 + xlnx,tlzwe-ps-mem-0 = <0x88b8>; 206 + xlnx,tlzwe-ps-mem-1 = <0x0>; 207 + xlnx,tlzwe-ps-mem-2 = <0x0>; 208 + xlnx,tlzwe-ps-mem-3 = <0x0>; 209 + xlnx,twc-ps-mem-0 = <0x1adb0>; 210 + xlnx,twc-ps-mem-1 = <0x3a98>; 211 + xlnx,twc-ps-mem-2 = <0x3a98>; 212 + xlnx,twc-ps-mem-3 = <0x3a98>; 213 + xlnx,twp-ps-mem-0 = <0x11170>; 214 + xlnx,twp-ps-mem-1 = <0x2ee0>; 215 + xlnx,twp-ps-mem-2 = <0x2ee0>; 216 + xlnx,twp-ps-mem-3 = <0x2ee0>; 217 + xlnx,xcl0-linesize = <0x4>; 218 + xlnx,xcl0-writexfer = <0x1>; 219 + xlnx,xcl1-linesize = <0x4>; 220 + xlnx,xcl1-writexfer = <0x1>; 221 + xlnx,xcl2-linesize = <0x4>; 222 + xlnx,xcl2-writexfer = <0x1>; 223 + xlnx,xcl3-linesize = <0x4>; 224 + xlnx,xcl3-writexfer = <0x1>; 225 + } ; 226 + Hard_Ethernet_MAC: xps-ll-temac@81c00000 { 227 + #address-cells = <1>; 228 + #size-cells = <1>; 229 + compatible = "xlnx,compound"; 230 + ethernet@81c00000 { 231 + compatible = "xlnx,xps-ll-temac-1.01.b"; 232 + device_type = "network"; 233 + interrupt-parent = <&xps_intc_0>; 234 + interrupts = < 8 2 >; 235 + llink-connected = <&Hard_Ethernet_MAC_fifo>; 236 + local-mac-address = [ 02 00 00 00 00 00 ]; 237 + reg = < 0x81c00000 0x40 >; 238 + xlnx,bus2core-clk-ratio = <0x1>; 239 + xlnx,phy-type = <0x3>; 240 + xlnx,phyaddr = <0x1>; 241 + xlnx,rxcsum = <0x0>; 242 + xlnx,rxfifo = <0x8000>; 243 + xlnx,temac-type = <0x0>; 244 + xlnx,txcsum = <0x0>; 245 + xlnx,txfifo = <0x8000>; 246 + } ; 247 + } ; 248 + Hard_Ethernet_MAC_fifo: xps-ll-fifo@81a00000 { 249 + compatible = "xlnx,xps-ll-fifo-1.01.a"; 250 + interrupt-parent = <&xps_intc_0>; 251 + interrupts = < 6 2 >; 252 + reg = < 0x81a00000 0x10000 >; 253 + xlnx,family = "virtex5"; 254 + } ; 255 + IIC_EEPROM: i2c@81600000 { 256 + compatible = "xlnx,xps-iic-2.00.a"; 257 + interrupt-parent = <&xps_intc_0>; 258 + interrupts = < 9 2 >; 259 + reg = < 0x81600000 0x10000 >; 260 + xlnx,clk-freq = <0x5f5e100>; 261 + xlnx,family = "virtex5"; 262 + xlnx,gpo-width = <0x1>; 263 + xlnx,iic-freq = <0x186a0>; 264 + xlnx,scl-inertial-delay = <0x5>; 265 + xlnx,sda-inertial-delay = <0x5>; 266 + xlnx,ten-bit-adr = <0x0>; 267 + } ; 268 + LCD_OPTIONAL: gpio@81420000 { 269 + compatible = "xlnx,xps-gpio-1.00.a"; 270 + reg = < 0x81420000 0x10000 >; 271 + xlnx,all-inputs = <0x0>; 272 + xlnx,all-inputs-2 = <0x0>; 273 + xlnx,dout-default = <0x0>; 274 + xlnx,dout-default-2 = <0x0>; 275 + xlnx,family = "virtex5"; 276 + xlnx,gpio-width = <0xb>; 277 + xlnx,interrupt-present = <0x0>; 278 + xlnx,is-bidir = <0x1>; 279 + xlnx,is-bidir-2 = <0x1>; 280 + xlnx,is-dual = <0x0>; 281 + xlnx,tri-default = <0xffffffff>; 282 + xlnx,tri-default-2 = <0xffffffff>; 283 + } ; 284 + LEDs_4Bit: gpio@81400000 { 285 + compatible = "xlnx,xps-gpio-1.00.a"; 286 + reg = < 0x81400000 0x10000 >; 287 + xlnx,all-inputs = <0x0>; 288 + xlnx,all-inputs-2 = <0x0>; 289 + xlnx,dout-default = <0x0>; 290 + xlnx,dout-default-2 = <0x0>; 291 + xlnx,family = "virtex5"; 292 + xlnx,gpio-width = <0x4>; 293 + xlnx,interrupt-present = <0x0>; 294 + xlnx,is-bidir = <0x1>; 295 + xlnx,is-bidir-2 = <0x1>; 296 + xlnx,is-dual = <0x0>; 297 + xlnx,tri-default = <0xffffffff>; 298 + xlnx,tri-default-2 = <0xffffffff>; 299 + } ; 300 + RS232_Uart_1: serial@83e00000 { 301 + clock-frequency = <100000000>; 302 + compatible = "xlnx,xps-uart16550-2.00.b", "ns16550"; 303 + current-speed = <9600>; 304 + device_type = "serial"; 305 + interrupt-parent = <&xps_intc_0>; 306 + interrupts = < 11 2 >; 307 + reg = < 0x83e00000 0x10000 >; 308 + reg-offset = <0x1003>; 309 + reg-shift = <2>; 310 + xlnx,family = "virtex5"; 311 + xlnx,has-external-rclk = <0x0>; 312 + xlnx,has-external-xin = <0x0>; 313 + xlnx,is-a-16550 = <0x1>; 314 + } ; 315 + SPI_EEPROM: xps-spi@feff8000 { 316 + compatible = "xlnx,xps-spi-2.00.b"; 317 + interrupt-parent = <&xps_intc_0>; 318 + interrupts = < 10 2 >; 319 + reg = < 0xfeff8000 0x80 >; 320 + xlnx,family = "virtex5"; 321 + xlnx,fifo-exist = <0x1>; 322 + xlnx,num-ss-bits = <0x1>; 323 + xlnx,num-transfer-bits = <0x8>; 324 + xlnx,sck-ratio = <0x80>; 325 + } ; 326 + SysACE_CompactFlash: sysace@83600000 { 327 + compatible = "xlnx,xps-sysace-1.00.a"; 328 + interrupt-parent = <&xps_intc_0>; 329 + interrupts = < 7 2 >; 330 + reg = < 0x83600000 0x10000 >; 331 + xlnx,family = "virtex5"; 332 + xlnx,mem-width = <0x10>; 333 + } ; 334 + plbv46_pci_0: plbv46-pci@85e00000 { 335 + #size-cells = <2>; 336 + #address-cells = <3>; 337 + compatible = "xlnx,plbv46-pci-1.03.a"; 338 + device_type = "pci"; 339 + reg = < 0x85e00000 0x10000 >; 340 + 341 + /* 342 + * The default ML510 BSB has C_IPIFBAR2PCIBAR_0 set to 343 + * 0 which means that a read/write to the memory mapped 344 + * i/o region (which starts at 0xa0000000) for pci 345 + * bar 0 on the plb side translates to 0. 346 + * It is important to set this value to 0xa0000000, so 347 + * that inbound and outbound pci transactions work 348 + * properly including DMA. 349 + */ 350 + ranges = <0x02000000 0 0xa0000000 0xa0000000 0 0x20000000 351 + 0x01000000 0 0x00000000 0xf0000000 0 0x00010000>; 352 + 353 + #interrupt-cells = <1>; 354 + interrupt-parent = <&xps_intc_0>; 355 + interrupt-map-mask = <0xff00 0x0 0x0 0x7>; 356 + interrupt-map = < 357 + /* IRQ mapping for pci slots and ALI M1533 358 + * periperhals. In total there are 5 interrupt 359 + * lines connected to a xps_intc controller. 360 + * Four of them are PCI IRQ A, B, C, D and 361 + * which correspond to respectively xpx_intc 362 + * 5, 4, 3 and 2. The fifth interrupt line is 363 + * connected to the south bridge and this one 364 + * uses irq 1 and is active high instead of 365 + * active low. 366 + * 367 + * The M1533 contains various peripherals 368 + * including AC97 audio, a modem, USB, IDE and 369 + * some power management stuff. The modem 370 + * isn't connected on the ML510 and the power 371 + * management core also isn't used. 372 + */ 373 + 374 + /* IDSEL 0x16 / dev=6, bus=0 / PCI slot 3 */ 375 + 0x3000 0 0 1 &xps_intc_0 3 2 376 + 0x3000 0 0 2 &xps_intc_0 2 2 377 + 0x3000 0 0 3 &xps_intc_0 5 2 378 + 0x3000 0 0 4 &xps_intc_0 4 2 379 + 380 + /* IDSEL 0x13 / dev=3, bus=1 / PCI slot 4 */ 381 + /* 382 + 0x11800 0 0 1 &xps_intc_0 5 0 2 383 + 0x11800 0 0 2 &xps_intc_0 4 0 2 384 + 0x11800 0 0 3 &xps_intc_0 3 0 2 385 + 0x11800 0 0 4 &xps_intc_0 2 0 2 386 + */ 387 + 388 + /* According to the datasheet + schematic 389 + * ABCD [FPGA] of slot 5 is mapped to DABC. 390 + * Testing showed that at least A maps to B, 391 + * the mapping of the other pins is a guess 392 + * and for that reason the lines have been 393 + * commented out. 394 + */ 395 + /* IDSEL 0x15 / dev=5, bus=0 / PCI slot 5 */ 396 + 0x2800 0 0 1 &xps_intc_0 4 2 397 + /* 398 + 0x2800 0 0 2 &xps_intc_0 3 2 399 + 0x2800 0 0 3 &xps_intc_0 2 2 400 + 0x2800 0 0 4 &xps_intc_0 5 2 401 + */ 402 + 403 + /* IDSEL 0x12 / dev=2, bus=1 / PCI slot 6 */ 404 + /* 405 + 0x11000 0 0 1 &xps_intc_0 4 0 2 406 + 0x11000 0 0 2 &xps_intc_0 3 0 2 407 + 0x11000 0 0 3 &xps_intc_0 2 0 2 408 + 0x11000 0 0 4 &xps_intc_0 5 0 2 409 + */ 410 + 411 + /* IDSEL 0x11 / dev=1, bus=0 / AC97 audio */ 412 + 0x0800 0 0 1 &i8259 7 2 413 + 414 + /* IDSEL 0x1b / dev=11, bus=0 / IDE */ 415 + 0x5800 0 0 1 &i8259 14 2 416 + 417 + /* IDSEL 0x1f / dev 15, bus=0 / 2x USB 1.1 */ 418 + 0x7800 0 0 1 &i8259 7 2 419 + >; 420 + ali_m1533 { 421 + #size-cells = <1>; 422 + #address-cells = <2>; 423 + i8259: interrupt-controller@20 { 424 + reg = <1 0x20 2 425 + 1 0xa0 2 426 + 1 0x4d0 2>; 427 + interrupt-controller; 428 + device_type = "interrupt-controller"; 429 + #address-cells = <0>; 430 + #interrupt-cells = <2>; 431 + compatible = "chrp,iic"; 432 + 433 + /* south bridge irq is active high */ 434 + interrupts = <1 3>; 435 + interrupt-parent = <&xps_intc_0>; 436 + }; 437 + }; 438 + } ; 439 + xps_bram_if_cntlr_1: xps-bram-if-cntlr@ffff0000 { 440 + compatible = "xlnx,xps-bram-if-cntlr-1.00.a"; 441 + reg = < 0xffff0000 0x10000 >; 442 + xlnx,family = "virtex5"; 443 + } ; 444 + xps_intc_0: interrupt-controller@81800000 { 445 + #interrupt-cells = <0x2>; 446 + compatible = "xlnx,xps-intc-1.00.a"; 447 + interrupt-controller ; 448 + reg = < 0x81800000 0x10000 >; 449 + xlnx,num-intr-inputs = <0xc>; 450 + } ; 451 + xps_tft_0: tft@86e00000 { 452 + compatible = "xlnx,xps-tft-1.00.a"; 453 + reg = < 0x86e00000 0x10000 >; 454 + xlnx,dcr-splb-slave-if = <0x1>; 455 + xlnx,default-tft-base-addr = <0x0>; 456 + xlnx,family = "virtex5"; 457 + xlnx,i2c-slave-addr = <0x76>; 458 + xlnx,mplb-awidth = <0x20>; 459 + xlnx,mplb-dwidth = <0x80>; 460 + xlnx,mplb-native-dwidth = <0x40>; 461 + xlnx,mplb-smallest-slave = <0x20>; 462 + xlnx,tft-interface = <0x1>; 463 + } ; 464 + } ; 465 + } ;
+13 -14
arch/powerpc/boot/dts/warp.dts
··· 1 1 /* 2 2 * Device Tree Source for PIKA Warp 3 3 * 4 - * Copyright (c) 2008 PIKA Technologies 4 + * Copyright (c) 2008-2009 PIKA Technologies 5 5 * Sean MacLennan <smaclennan@pikatech.com> 6 6 * 7 7 * This file is licensed under the terms of the GNU General Public ··· 158 158 159 159 partition@0 { 160 160 label = "splash"; 161 - reg = <0x00000000 0x00020000>; 161 + reg = <0x00000000 0x00010000>; 162 162 }; 163 163 partition@300000 { 164 164 label = "fpga"; ··· 244 244 }; 245 245 246 246 GPIO0: gpio@ef600b00 { 247 - compatible = "ibm,gpio-440ep"; 247 + compatible = "ibm,ppc4xx-gpio"; 248 248 reg = <0xef600b00 0x00000048>; 249 249 #gpio-cells = <2>; 250 250 gpio-controller; 251 251 }; 252 252 253 253 GPIO1: gpio@ef600c00 { 254 - compatible = "ibm,gpio-440ep"; 254 + compatible = "ibm,ppc4xx-gpio"; 255 255 reg = <0xef600c00 0x00000048>; 256 256 #gpio-cells = <2>; 257 257 gpio-controller; 258 + }; 258 259 259 - led@31 { 260 - compatible = "linux,gpio-led"; 261 - linux,name = ":green:"; 262 - gpios = <&GPIO1 31 0>; 263 - }; 264 - 265 - led@30 { 266 - compatible = "linux,gpio-led"; 267 - linux,name = ":red:"; 268 - gpios = <&GPIO1 30 0>; 260 + power-leds { 261 + compatible = "gpio-leds"; 262 + green { 263 + gpios = <&GPIO1 0 0>; 264 + default-state = "on"; 265 + }; 266 + red { 267 + gpios = <&GPIO1 1 0>; 269 268 }; 270 269 }; 271 270
+1 -1
arch/powerpc/configs/40x/acadia_defconfig
··· 252 252 # CONFIG_PCIEPORTBUS is not set 253 253 CONFIG_ARCH_SUPPORTS_MSI=y 254 254 # CONFIG_PCI_MSI is not set 255 - CONFIG_PCI_LEGACY=y 255 + # CONFIG_PCI_LEGACY is not set 256 256 # CONFIG_PCI_DEBUG is not set 257 257 # CONFIG_PCI_STUB is not set 258 258 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/40x/ep405_defconfig
··· 254 254 # CONFIG_PCIEPORTBUS is not set 255 255 CONFIG_ARCH_SUPPORTS_MSI=y 256 256 # CONFIG_PCI_MSI is not set 257 - CONFIG_PCI_LEGACY=y 257 + # CONFIG_PCI_LEGACY is not set 258 258 # CONFIG_PCI_DEBUG is not set 259 259 # CONFIG_PCI_STUB is not set 260 260 # CONFIG_PCCARD is not set
+59 -22
arch/powerpc/configs/40x/kilauea_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.29-rc2 4 - # Tue Jan 20 08:17:52 2009 3 + # Linux kernel version: 2.6.30-rc7 4 + # Wed Jun 3 10:18:16 2009 5 5 # 6 6 # CONFIG_PPC64 is not set 7 7 ··· 27 27 CONFIG_GENERIC_TIME_VSYSCALL=y 28 28 CONFIG_GENERIC_CLOCKEVENTS=y 29 29 CONFIG_GENERIC_HARDIRQS=y 30 + CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 30 31 # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set 31 32 CONFIG_IRQ_PER_CPU=y 32 33 CONFIG_STACKTRACE_SUPPORT=y ··· 50 49 # CONFIG_GENERIC_TBSYNC is not set 51 50 CONFIG_AUDIT_ARCH=y 52 51 CONFIG_GENERIC_BUG=y 52 + CONFIG_DTC=y 53 53 # CONFIG_DEFAULT_UIMAGE is not set 54 54 CONFIG_PPC_DCR_NATIVE=y 55 55 # CONFIG_PPC_DCR_MMIO is not set 56 56 CONFIG_PPC_DCR=y 57 + CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y 57 58 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 58 59 59 60 # ··· 70 67 CONFIG_SYSVIPC=y 71 68 CONFIG_SYSVIPC_SYSCTL=y 72 69 CONFIG_POSIX_MQUEUE=y 70 + CONFIG_POSIX_MQUEUE_SYSCTL=y 73 71 # CONFIG_BSD_PROCESS_ACCT is not set 74 72 # CONFIG_TASKSTATS is not set 75 73 # CONFIG_AUDIT is not set 74 + 75 + # 76 + # RCU Subsystem 77 + # 78 + CONFIG_CLASSIC_RCU=y 79 + # CONFIG_TREE_RCU is not set 80 + # CONFIG_PREEMPT_RCU is not set 81 + # CONFIG_TREE_RCU_TRACE is not set 82 + # CONFIG_PREEMPT_RCU_TRACE is not set 76 83 # CONFIG_IKCONFIG is not set 77 84 CONFIG_LOG_BUF_SHIFT=14 78 85 CONFIG_GROUP_SCHED=y ··· 97 84 # CONFIG_NAMESPACES is not set 98 85 CONFIG_BLK_DEV_INITRD=y 99 86 CONFIG_INITRAMFS_SOURCE="" 87 + CONFIG_RD_GZIP=y 88 + # CONFIG_RD_BZIP2 is not set 89 + # CONFIG_RD_LZMA is not set 100 90 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 101 91 CONFIG_SYSCTL=y 92 + CONFIG_ANON_INODES=y 102 93 CONFIG_EMBEDDED=y 103 94 CONFIG_SYSCTL_SYSCALL=y 104 95 CONFIG_KALLSYMS=y 105 96 CONFIG_KALLSYMS_ALL=y 106 - CONFIG_KALLSYMS_STRIP_GENERATED=y 107 97 CONFIG_KALLSYMS_EXTRA_PASS=y 98 + # CONFIG_STRIP_ASM_SYMS is not set 108 99 CONFIG_HOTPLUG=y 109 100 CONFIG_PRINTK=y 110 101 CONFIG_BUG=y 111 102 CONFIG_ELF_CORE=y 112 - CONFIG_COMPAT_BRK=y 113 103 CONFIG_BASE_FULL=y 114 104 CONFIG_FUTEX=y 115 - CONFIG_ANON_INODES=y 116 105 CONFIG_EPOLL=y 117 106 CONFIG_SIGNALFD=y 118 107 CONFIG_TIMERFD=y ··· 124 109 CONFIG_VM_EVENT_COUNTERS=y 125 110 CONFIG_PCI_QUIRKS=y 126 111 CONFIG_SLUB_DEBUG=y 112 + CONFIG_COMPAT_BRK=y 127 113 # CONFIG_SLAB is not set 128 114 CONFIG_SLUB=y 129 115 # CONFIG_SLOB is not set 130 116 # CONFIG_PROFILING is not set 117 + # CONFIG_MARKERS is not set 131 118 CONFIG_HAVE_OPROFILE=y 132 119 # CONFIG_KPROBES is not set 133 120 CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y ··· 137 120 CONFIG_HAVE_KPROBES=y 138 121 CONFIG_HAVE_KRETPROBES=y 139 122 CONFIG_HAVE_ARCH_TRACEHOOK=y 123 + # CONFIG_SLOW_WORK is not set 140 124 # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set 141 125 CONFIG_SLABINFO=y 142 126 CONFIG_RT_MUTEXES=y ··· 150 132 # CONFIG_MODULE_SRCVERSION_ALL is not set 151 133 CONFIG_BLOCK=y 152 134 CONFIG_LBD=y 153 - # CONFIG_BLK_DEV_IO_TRACE is not set 154 135 # CONFIG_BLK_DEV_BSG is not set 155 136 # CONFIG_BLK_DEV_INTEGRITY is not set 156 137 ··· 165 148 # CONFIG_DEFAULT_CFQ is not set 166 149 # CONFIG_DEFAULT_NOOP is not set 167 150 CONFIG_DEFAULT_IOSCHED="anticipatory" 168 - CONFIG_CLASSIC_RCU=y 169 - # CONFIG_TREE_RCU is not set 170 - # CONFIG_PREEMPT_RCU is not set 171 - # CONFIG_TREE_RCU_TRACE is not set 172 - # CONFIG_PREEMPT_RCU_TRACE is not set 173 151 # CONFIG_FREEZER is not set 174 152 CONFIG_PPC4xx_PCI_EXPRESS=y 175 153 ··· 182 170 # CONFIG_MAKALU is not set 183 171 # CONFIG_WALNUT is not set 184 172 # CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set 185 - # CONFIG_PPC40x_SIMPLE is not set 173 + CONFIG_PPC40x_SIMPLE=y 186 174 CONFIG_405EX=y 187 175 # CONFIG_IPIC is not set 188 176 # CONFIG_MPIC is not set ··· 240 228 CONFIG_BOUNCE=y 241 229 CONFIG_VIRT_TO_BUS=y 242 230 CONFIG_UNEVICTABLE_LRU=y 231 + CONFIG_HAVE_MLOCK=y 232 + CONFIG_HAVE_MLOCKED_PAGE_BIT=y 243 233 CONFIG_PPC_4K_PAGES=y 244 234 # CONFIG_PPC_16K_PAGES is not set 245 235 # CONFIG_PPC_64K_PAGES is not set 236 + # CONFIG_PPC_256K_PAGES is not set 246 237 CONFIG_FORCE_MAX_ZONEORDER=11 247 238 CONFIG_PROC_DEVICETREE=y 248 239 # CONFIG_CMDLINE_BOOL is not set ··· 267 252 # CONFIG_PCIEPORTBUS is not set 268 253 CONFIG_ARCH_SUPPORTS_MSI=y 269 254 # CONFIG_PCI_MSI is not set 270 - CONFIG_PCI_LEGACY=y 255 + # CONFIG_PCI_LEGACY is not set 271 256 # CONFIG_PCI_DEBUG is not set 272 257 # CONFIG_PCI_STUB is not set 258 + # CONFIG_PCI_IOV is not set 273 259 # CONFIG_PCCARD is not set 274 260 # CONFIG_HOTPLUG_PCI is not set 275 261 # CONFIG_HAS_RAPIDIO is not set ··· 288 272 CONFIG_KERNEL_START=0xc0000000 289 273 CONFIG_PHYSICAL_START=0x00000000 290 274 CONFIG_TASK_SIZE=0xc0000000 291 - CONFIG_CONSISTENT_START=0xff100000 292 275 CONFIG_CONSISTENT_SIZE=0x00200000 293 276 CONFIG_NET=y 294 277 295 278 # 296 279 # Networking options 297 280 # 298 - CONFIG_COMPAT_NET_DEV_OPS=y 299 281 CONFIG_PACKET=y 300 282 # CONFIG_PACKET_MMAP is not set 301 283 CONFIG_UNIX=y ··· 343 329 # CONFIG_LAPB is not set 344 330 # CONFIG_ECONET is not set 345 331 # CONFIG_WAN_ROUTER is not set 332 + # CONFIG_PHONET is not set 346 333 # CONFIG_NET_SCHED is not set 347 334 # CONFIG_DCB is not set 348 335 ··· 356 341 # CONFIG_IRDA is not set 357 342 # CONFIG_BT is not set 358 343 # CONFIG_AF_RXRPC is not set 359 - # CONFIG_PHONET is not set 360 344 # CONFIG_WIRELESS is not set 361 345 # CONFIG_WIMAX is not set 362 346 # CONFIG_RFKILL is not set ··· 459 445 # LPDDR flash memory drivers 460 446 # 461 447 # CONFIG_MTD_LPDDR is not set 462 - # CONFIG_MTD_QINFO_PROBE is not set 463 448 464 449 # 465 450 # UBI - Unsorted block images ··· 511 498 # CONFIG_I2O is not set 512 499 # CONFIG_MACINTOSH_DRIVERS is not set 513 500 CONFIG_NETDEVICES=y 501 + CONFIG_COMPAT_NET_DEV_OPS=y 514 502 # CONFIG_DUMMY is not set 515 503 # CONFIG_BONDING is not set 516 504 # CONFIG_MACVLAN is not set ··· 526 512 # CONFIG_SUNGEM is not set 527 513 # CONFIG_CASSINI is not set 528 514 # CONFIG_NET_VENDOR_3COM is not set 515 + # CONFIG_ETHOC is not set 516 + # CONFIG_DNET is not set 529 517 # CONFIG_NET_TULIP is not set 530 518 # CONFIG_HP100 is not set 531 519 CONFIG_IBM_NEW_EMAC=y ··· 556 540 # 557 541 # CONFIG_WLAN_PRE80211 is not set 558 542 # CONFIG_WLAN_80211 is not set 559 - # CONFIG_IWLWIFI_LEDS is not set 560 543 561 544 # 562 545 # Enable WiMAX (Networking options) to see the WiMAX drivers ··· 693 678 # CONFIG_EDAC is not set 694 679 # CONFIG_RTC_CLASS is not set 695 680 # CONFIG_DMADEVICES is not set 681 + # CONFIG_AUXDISPLAY is not set 696 682 # CONFIG_UIO is not set 697 683 # CONFIG_STAGING is not set 698 684 ··· 720 704 # CONFIG_AUTOFS_FS is not set 721 705 # CONFIG_AUTOFS4_FS is not set 722 706 # CONFIG_FUSE_FS is not set 707 + 708 + # 709 + # Caches 710 + # 711 + # CONFIG_FSCACHE is not set 723 712 724 713 # 725 714 # CD-ROM/DVD Filesystems ··· 770 749 # CONFIG_ROMFS_FS is not set 771 750 # CONFIG_SYSV_FS is not set 772 751 # CONFIG_UFS_FS is not set 752 + # CONFIG_NILFS2_FS is not set 773 753 CONFIG_NETWORK_FILESYSTEMS=y 774 754 CONFIG_NFS_FS=y 775 755 CONFIG_NFS_V3=y ··· 782 760 CONFIG_LOCKD_V4=y 783 761 CONFIG_NFS_COMMON=y 784 762 CONFIG_SUNRPC=y 785 - # CONFIG_SUNRPC_REGISTER_V4 is not set 786 763 # CONFIG_RPCSEC_GSS_KRB5 is not set 787 764 # CONFIG_RPCSEC_GSS_SPKM3 is not set 788 765 # CONFIG_SMB_FS is not set ··· 797 776 CONFIG_MSDOS_PARTITION=y 798 777 # CONFIG_NLS is not set 799 778 # CONFIG_DLM is not set 779 + # CONFIG_BINARY_PRINTF is not set 800 780 801 781 # 802 782 # Library routines ··· 812 790 # CONFIG_CRC7 is not set 813 791 # CONFIG_LIBCRC32C is not set 814 792 CONFIG_ZLIB_INFLATE=y 815 - CONFIG_PLIST=y 793 + CONFIG_DECOMPRESS_GZIP=y 816 794 CONFIG_HAS_IOMEM=y 817 795 CONFIG_HAS_IOPORT=y 818 796 CONFIG_HAS_DMA=y 819 797 CONFIG_HAVE_LMB=y 798 + CONFIG_NLATTR=y 820 799 821 800 # 822 801 # Kernel hacking ··· 835 812 CONFIG_DETECT_SOFTLOCKUP=y 836 813 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set 837 814 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 815 + CONFIG_DETECT_HUNG_TASK=y 816 + # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set 817 + CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 838 818 CONFIG_SCHED_DEBUG=y 839 819 # CONFIG_SCHEDSTATS is not set 840 820 # CONFIG_TIMER_STATS is not set ··· 867 841 # CONFIG_FAULT_INJECTION is not set 868 842 # CONFIG_LATENCYTOP is not set 869 843 CONFIG_SYSCTL_SYSCALL_CHECK=y 844 + # CONFIG_DEBUG_PAGEALLOC is not set 870 845 CONFIG_HAVE_FUNCTION_TRACER=y 846 + CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y 871 847 CONFIG_HAVE_DYNAMIC_FTRACE=y 872 848 CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y 849 + CONFIG_TRACING_SUPPORT=y 873 850 874 851 # 875 852 # Tracers ··· 880 851 # CONFIG_FUNCTION_TRACER is not set 881 852 # CONFIG_SCHED_TRACER is not set 882 853 # CONFIG_CONTEXT_SWITCH_TRACER is not set 854 + # CONFIG_EVENT_TRACER is not set 883 855 # CONFIG_BOOT_TRACER is not set 884 856 # CONFIG_TRACE_BRANCH_PROFILING is not set 885 857 # CONFIG_STACK_TRACER is not set 886 - # CONFIG_DYNAMIC_PRINTK_DEBUG is not set 858 + # CONFIG_KMEMTRACE is not set 859 + # CONFIG_WORKQUEUE_TRACER is not set 860 + # CONFIG_BLK_DEV_IO_TRACE is not set 861 + # CONFIG_DYNAMIC_DEBUG is not set 887 862 # CONFIG_SAMPLES is not set 888 863 CONFIG_HAVE_ARCH_KGDB=y 889 864 # CONFIG_KGDB is not set 890 865 CONFIG_PRINT_STACK_DEPTH=64 891 866 # CONFIG_DEBUG_STACKOVERFLOW is not set 892 867 # CONFIG_DEBUG_STACK_USAGE is not set 893 - # CONFIG_DEBUG_PAGEALLOC is not set 868 + # CONFIG_PPC_EMULATED_STATS is not set 894 869 # CONFIG_CODE_PATCHING_SELFTEST is not set 895 870 # CONFIG_FTR_FIXUP_SELFTEST is not set 896 871 # CONFIG_MSI_BITMAP_SELFTEST is not set ··· 925 892 CONFIG_CRYPTO_HASH=y 926 893 CONFIG_CRYPTO_HASH2=y 927 894 CONFIG_CRYPTO_RNG2=y 895 + CONFIG_CRYPTO_PCOMP=y 928 896 CONFIG_CRYPTO_MANAGER=y 929 897 CONFIG_CRYPTO_MANAGER2=y 930 898 # CONFIG_CRYPTO_GF128MUL is not set 931 899 # CONFIG_CRYPTO_NULL is not set 900 + CONFIG_CRYPTO_WORKQUEUE=y 932 901 # CONFIG_CRYPTO_CRYPTD is not set 933 902 # CONFIG_CRYPTO_AUTHENC is not set 934 903 # CONFIG_CRYPTO_TEST is not set ··· 999 964 # Compression 1000 965 # 1001 966 # CONFIG_CRYPTO_DEFLATE is not set 967 + # CONFIG_CRYPTO_ZLIB is not set 1002 968 # CONFIG_CRYPTO_LZO is not set 1003 969 1004 970 # ··· 1008 972 # CONFIG_CRYPTO_ANSI_CPRNG is not set 1009 973 CONFIG_CRYPTO_HW=y 1010 974 # CONFIG_CRYPTO_DEV_HIFN_795X is not set 975 + # CONFIG_CRYPTO_DEV_PPC4XX is not set 1011 976 # CONFIG_PPC_CLOCK is not set 1012 977 # CONFIG_VIRTUALIZATION is not set
+59 -22
arch/powerpc/configs/40x/makalu_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.29-rc2 4 - # Tue Jan 20 08:17:53 2009 3 + # Linux kernel version: 2.6.30-rc7 4 + # Wed Jun 3 09:11:02 2009 5 5 # 6 6 # CONFIG_PPC64 is not set 7 7 ··· 27 27 CONFIG_GENERIC_TIME_VSYSCALL=y 28 28 CONFIG_GENERIC_CLOCKEVENTS=y 29 29 CONFIG_GENERIC_HARDIRQS=y 30 + CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 30 31 # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set 31 32 CONFIG_IRQ_PER_CPU=y 32 33 CONFIG_STACKTRACE_SUPPORT=y ··· 50 49 # CONFIG_GENERIC_TBSYNC is not set 51 50 CONFIG_AUDIT_ARCH=y 52 51 CONFIG_GENERIC_BUG=y 52 + CONFIG_DTC=y 53 53 # CONFIG_DEFAULT_UIMAGE is not set 54 54 CONFIG_PPC_DCR_NATIVE=y 55 55 # CONFIG_PPC_DCR_MMIO is not set 56 56 CONFIG_PPC_DCR=y 57 + CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y 57 58 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 58 59 59 60 # ··· 70 67 CONFIG_SYSVIPC=y 71 68 CONFIG_SYSVIPC_SYSCTL=y 72 69 CONFIG_POSIX_MQUEUE=y 70 + CONFIG_POSIX_MQUEUE_SYSCTL=y 73 71 # CONFIG_BSD_PROCESS_ACCT is not set 74 72 # CONFIG_TASKSTATS is not set 75 73 # CONFIG_AUDIT is not set 74 + 75 + # 76 + # RCU Subsystem 77 + # 78 + CONFIG_CLASSIC_RCU=y 79 + # CONFIG_TREE_RCU is not set 80 + # CONFIG_PREEMPT_RCU is not set 81 + # CONFIG_TREE_RCU_TRACE is not set 82 + # CONFIG_PREEMPT_RCU_TRACE is not set 76 83 # CONFIG_IKCONFIG is not set 77 84 CONFIG_LOG_BUF_SHIFT=14 78 85 CONFIG_GROUP_SCHED=y ··· 97 84 # CONFIG_NAMESPACES is not set 98 85 CONFIG_BLK_DEV_INITRD=y 99 86 CONFIG_INITRAMFS_SOURCE="" 87 + CONFIG_RD_GZIP=y 88 + # CONFIG_RD_BZIP2 is not set 89 + # CONFIG_RD_LZMA is not set 100 90 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 101 91 CONFIG_SYSCTL=y 92 + CONFIG_ANON_INODES=y 102 93 CONFIG_EMBEDDED=y 103 94 CONFIG_SYSCTL_SYSCALL=y 104 95 CONFIG_KALLSYMS=y 105 96 CONFIG_KALLSYMS_ALL=y 106 - CONFIG_KALLSYMS_STRIP_GENERATED=y 107 97 CONFIG_KALLSYMS_EXTRA_PASS=y 98 + # CONFIG_STRIP_ASM_SYMS is not set 108 99 CONFIG_HOTPLUG=y 109 100 CONFIG_PRINTK=y 110 101 CONFIG_BUG=y 111 102 CONFIG_ELF_CORE=y 112 - CONFIG_COMPAT_BRK=y 113 103 CONFIG_BASE_FULL=y 114 104 CONFIG_FUTEX=y 115 - CONFIG_ANON_INODES=y 116 105 CONFIG_EPOLL=y 117 106 CONFIG_SIGNALFD=y 118 107 CONFIG_TIMERFD=y ··· 124 109 CONFIG_VM_EVENT_COUNTERS=y 125 110 CONFIG_PCI_QUIRKS=y 126 111 CONFIG_SLUB_DEBUG=y 112 + CONFIG_COMPAT_BRK=y 127 113 # CONFIG_SLAB is not set 128 114 CONFIG_SLUB=y 129 115 # CONFIG_SLOB is not set 130 116 # CONFIG_PROFILING is not set 117 + # CONFIG_MARKERS is not set 131 118 CONFIG_HAVE_OPROFILE=y 132 119 # CONFIG_KPROBES is not set 133 120 CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y ··· 137 120 CONFIG_HAVE_KPROBES=y 138 121 CONFIG_HAVE_KRETPROBES=y 139 122 CONFIG_HAVE_ARCH_TRACEHOOK=y 123 + # CONFIG_SLOW_WORK is not set 140 124 # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set 141 125 CONFIG_SLABINFO=y 142 126 CONFIG_RT_MUTEXES=y ··· 150 132 # CONFIG_MODULE_SRCVERSION_ALL is not set 151 133 CONFIG_BLOCK=y 152 134 CONFIG_LBD=y 153 - # CONFIG_BLK_DEV_IO_TRACE is not set 154 135 # CONFIG_BLK_DEV_BSG is not set 155 136 # CONFIG_BLK_DEV_INTEGRITY is not set 156 137 ··· 165 148 # CONFIG_DEFAULT_CFQ is not set 166 149 # CONFIG_DEFAULT_NOOP is not set 167 150 CONFIG_DEFAULT_IOSCHED="anticipatory" 168 - CONFIG_CLASSIC_RCU=y 169 - # CONFIG_TREE_RCU is not set 170 - # CONFIG_PREEMPT_RCU is not set 171 - # CONFIG_TREE_RCU_TRACE is not set 172 - # CONFIG_PREEMPT_RCU_TRACE is not set 173 151 # CONFIG_FREEZER is not set 174 152 CONFIG_PPC4xx_PCI_EXPRESS=y 175 153 ··· 182 170 CONFIG_MAKALU=y 183 171 # CONFIG_WALNUT is not set 184 172 # CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set 185 - # CONFIG_PPC40x_SIMPLE is not set 173 + CONFIG_PPC40x_SIMPLE=y 186 174 CONFIG_405EX=y 187 175 # CONFIG_IPIC is not set 188 176 # CONFIG_MPIC is not set ··· 240 228 CONFIG_BOUNCE=y 241 229 CONFIG_VIRT_TO_BUS=y 242 230 CONFIG_UNEVICTABLE_LRU=y 231 + CONFIG_HAVE_MLOCK=y 232 + CONFIG_HAVE_MLOCKED_PAGE_BIT=y 243 233 CONFIG_PPC_4K_PAGES=y 244 234 # CONFIG_PPC_16K_PAGES is not set 245 235 # CONFIG_PPC_64K_PAGES is not set 236 + # CONFIG_PPC_256K_PAGES is not set 246 237 CONFIG_FORCE_MAX_ZONEORDER=11 247 238 CONFIG_PROC_DEVICETREE=y 248 239 # CONFIG_CMDLINE_BOOL is not set ··· 267 252 # CONFIG_PCIEPORTBUS is not set 268 253 CONFIG_ARCH_SUPPORTS_MSI=y 269 254 # CONFIG_PCI_MSI is not set 270 - CONFIG_PCI_LEGACY=y 255 + # CONFIG_PCI_LEGACY is not set 271 256 # CONFIG_PCI_DEBUG is not set 272 257 # CONFIG_PCI_STUB is not set 258 + # CONFIG_PCI_IOV is not set 273 259 # CONFIG_PCCARD is not set 274 260 # CONFIG_HOTPLUG_PCI is not set 275 261 # CONFIG_HAS_RAPIDIO is not set ··· 288 272 CONFIG_KERNEL_START=0xc0000000 289 273 CONFIG_PHYSICAL_START=0x00000000 290 274 CONFIG_TASK_SIZE=0xc0000000 291 - CONFIG_CONSISTENT_START=0xff100000 292 275 CONFIG_CONSISTENT_SIZE=0x00200000 293 276 CONFIG_NET=y 294 277 295 278 # 296 279 # Networking options 297 280 # 298 - CONFIG_COMPAT_NET_DEV_OPS=y 299 281 CONFIG_PACKET=y 300 282 # CONFIG_PACKET_MMAP is not set 301 283 CONFIG_UNIX=y ··· 343 329 # CONFIG_LAPB is not set 344 330 # CONFIG_ECONET is not set 345 331 # CONFIG_WAN_ROUTER is not set 332 + # CONFIG_PHONET is not set 346 333 # CONFIG_NET_SCHED is not set 347 334 # CONFIG_DCB is not set 348 335 ··· 356 341 # CONFIG_IRDA is not set 357 342 # CONFIG_BT is not set 358 343 # CONFIG_AF_RXRPC is not set 359 - # CONFIG_PHONET is not set 360 344 # CONFIG_WIRELESS is not set 361 345 # CONFIG_WIMAX is not set 362 346 # CONFIG_RFKILL is not set ··· 459 445 # LPDDR flash memory drivers 460 446 # 461 447 # CONFIG_MTD_LPDDR is not set 462 - # CONFIG_MTD_QINFO_PROBE is not set 463 448 464 449 # 465 450 # UBI - Unsorted block images ··· 511 498 # CONFIG_I2O is not set 512 499 # CONFIG_MACINTOSH_DRIVERS is not set 513 500 CONFIG_NETDEVICES=y 501 + CONFIG_COMPAT_NET_DEV_OPS=y 514 502 # CONFIG_DUMMY is not set 515 503 # CONFIG_BONDING is not set 516 504 # CONFIG_MACVLAN is not set ··· 526 512 # CONFIG_SUNGEM is not set 527 513 # CONFIG_CASSINI is not set 528 514 # CONFIG_NET_VENDOR_3COM is not set 515 + # CONFIG_ETHOC is not set 516 + # CONFIG_DNET is not set 529 517 # CONFIG_NET_TULIP is not set 530 518 # CONFIG_HP100 is not set 531 519 CONFIG_IBM_NEW_EMAC=y ··· 556 540 # 557 541 # CONFIG_WLAN_PRE80211 is not set 558 542 # CONFIG_WLAN_80211 is not set 559 - # CONFIG_IWLWIFI_LEDS is not set 560 543 561 544 # 562 545 # Enable WiMAX (Networking options) to see the WiMAX drivers ··· 693 678 # CONFIG_EDAC is not set 694 679 # CONFIG_RTC_CLASS is not set 695 680 # CONFIG_DMADEVICES is not set 681 + # CONFIG_AUXDISPLAY is not set 696 682 # CONFIG_UIO is not set 697 683 # CONFIG_STAGING is not set 698 684 ··· 720 704 # CONFIG_AUTOFS_FS is not set 721 705 # CONFIG_AUTOFS4_FS is not set 722 706 # CONFIG_FUSE_FS is not set 707 + 708 + # 709 + # Caches 710 + # 711 + # CONFIG_FSCACHE is not set 723 712 724 713 # 725 714 # CD-ROM/DVD Filesystems ··· 770 749 # CONFIG_ROMFS_FS is not set 771 750 # CONFIG_SYSV_FS is not set 772 751 # CONFIG_UFS_FS is not set 752 + # CONFIG_NILFS2_FS is not set 773 753 CONFIG_NETWORK_FILESYSTEMS=y 774 754 CONFIG_NFS_FS=y 775 755 CONFIG_NFS_V3=y ··· 782 760 CONFIG_LOCKD_V4=y 783 761 CONFIG_NFS_COMMON=y 784 762 CONFIG_SUNRPC=y 785 - # CONFIG_SUNRPC_REGISTER_V4 is not set 786 763 # CONFIG_RPCSEC_GSS_KRB5 is not set 787 764 # CONFIG_RPCSEC_GSS_SPKM3 is not set 788 765 # CONFIG_SMB_FS is not set ··· 797 776 CONFIG_MSDOS_PARTITION=y 798 777 # CONFIG_NLS is not set 799 778 # CONFIG_DLM is not set 779 + # CONFIG_BINARY_PRINTF is not set 800 780 801 781 # 802 782 # Library routines ··· 812 790 # CONFIG_CRC7 is not set 813 791 # CONFIG_LIBCRC32C is not set 814 792 CONFIG_ZLIB_INFLATE=y 815 - CONFIG_PLIST=y 793 + CONFIG_DECOMPRESS_GZIP=y 816 794 CONFIG_HAS_IOMEM=y 817 795 CONFIG_HAS_IOPORT=y 818 796 CONFIG_HAS_DMA=y 819 797 CONFIG_HAVE_LMB=y 798 + CONFIG_NLATTR=y 820 799 821 800 # 822 801 # Kernel hacking ··· 835 812 CONFIG_DETECT_SOFTLOCKUP=y 836 813 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set 837 814 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 815 + CONFIG_DETECT_HUNG_TASK=y 816 + # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set 817 + CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 838 818 CONFIG_SCHED_DEBUG=y 839 819 # CONFIG_SCHEDSTATS is not set 840 820 # CONFIG_TIMER_STATS is not set ··· 867 841 # CONFIG_FAULT_INJECTION is not set 868 842 # CONFIG_LATENCYTOP is not set 869 843 CONFIG_SYSCTL_SYSCALL_CHECK=y 844 + # CONFIG_DEBUG_PAGEALLOC is not set 870 845 CONFIG_HAVE_FUNCTION_TRACER=y 846 + CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y 871 847 CONFIG_HAVE_DYNAMIC_FTRACE=y 872 848 CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y 849 + CONFIG_TRACING_SUPPORT=y 873 850 874 851 # 875 852 # Tracers ··· 880 851 # CONFIG_FUNCTION_TRACER is not set 881 852 # CONFIG_SCHED_TRACER is not set 882 853 # CONFIG_CONTEXT_SWITCH_TRACER is not set 854 + # CONFIG_EVENT_TRACER is not set 883 855 # CONFIG_BOOT_TRACER is not set 884 856 # CONFIG_TRACE_BRANCH_PROFILING is not set 885 857 # CONFIG_STACK_TRACER is not set 886 - # CONFIG_DYNAMIC_PRINTK_DEBUG is not set 858 + # CONFIG_KMEMTRACE is not set 859 + # CONFIG_WORKQUEUE_TRACER is not set 860 + # CONFIG_BLK_DEV_IO_TRACE is not set 861 + # CONFIG_DYNAMIC_DEBUG is not set 887 862 # CONFIG_SAMPLES is not set 888 863 CONFIG_HAVE_ARCH_KGDB=y 889 864 # CONFIG_KGDB is not set 890 865 CONFIG_PRINT_STACK_DEPTH=64 891 866 # CONFIG_DEBUG_STACKOVERFLOW is not set 892 867 # CONFIG_DEBUG_STACK_USAGE is not set 893 - # CONFIG_DEBUG_PAGEALLOC is not set 868 + # CONFIG_PPC_EMULATED_STATS is not set 894 869 # CONFIG_CODE_PATCHING_SELFTEST is not set 895 870 # CONFIG_FTR_FIXUP_SELFTEST is not set 896 871 # CONFIG_MSI_BITMAP_SELFTEST is not set ··· 925 892 CONFIG_CRYPTO_HASH=y 926 893 CONFIG_CRYPTO_HASH2=y 927 894 CONFIG_CRYPTO_RNG2=y 895 + CONFIG_CRYPTO_PCOMP=y 928 896 CONFIG_CRYPTO_MANAGER=y 929 897 CONFIG_CRYPTO_MANAGER2=y 930 898 # CONFIG_CRYPTO_GF128MUL is not set 931 899 # CONFIG_CRYPTO_NULL is not set 900 + CONFIG_CRYPTO_WORKQUEUE=y 932 901 # CONFIG_CRYPTO_CRYPTD is not set 933 902 # CONFIG_CRYPTO_AUTHENC is not set 934 903 # CONFIG_CRYPTO_TEST is not set ··· 999 964 # Compression 1000 965 # 1001 966 # CONFIG_CRYPTO_DEFLATE is not set 967 + # CONFIG_CRYPTO_ZLIB is not set 1002 968 # CONFIG_CRYPTO_LZO is not set 1003 969 1004 970 # ··· 1008 972 # CONFIG_CRYPTO_ANSI_CPRNG is not set 1009 973 CONFIG_CRYPTO_HW=y 1010 974 # CONFIG_CRYPTO_DEV_HIFN_795X is not set 975 + # CONFIG_CRYPTO_DEV_PPC4XX is not set 1011 976 # CONFIG_PPC_CLOCK is not set 1012 977 # CONFIG_VIRTUALIZATION is not set
+1 -1
arch/powerpc/configs/40x/virtex_defconfig
··· 258 258 # CONFIG_PCIEPORTBUS is not set 259 259 CONFIG_ARCH_SUPPORTS_MSI=y 260 260 # CONFIG_PCI_MSI is not set 261 - CONFIG_PCI_LEGACY=y 261 + # CONFIG_PCI_LEGACY is not set 262 262 # CONFIG_PCI_DEBUG is not set 263 263 # CONFIG_PCI_STUB is not set 264 264 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/arches_defconfig
··· 258 258 # CONFIG_PCIEPORTBUS is not set 259 259 CONFIG_ARCH_SUPPORTS_MSI=y 260 260 # CONFIG_PCI_MSI is not set 261 - CONFIG_PCI_LEGACY=y 261 + # CONFIG_PCI_LEGACY is not set 262 262 # CONFIG_PCI_DEBUG is not set 263 263 # CONFIG_PCI_STUB is not set 264 264 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/bamboo_defconfig
··· 262 262 # CONFIG_PCIEPORTBUS is not set 263 263 CONFIG_ARCH_SUPPORTS_MSI=y 264 264 # CONFIG_PCI_MSI is not set 265 - CONFIG_PCI_LEGACY=y 265 + # CONFIG_PCI_LEGACY is not set 266 266 # CONFIG_PCI_DEBUG is not set 267 267 # CONFIG_PCI_STUB is not set 268 268 # CONFIG_PCCARD is not set
+3 -3
arch/powerpc/configs/44x/canyonlands_defconfig
··· 262 262 # CONFIG_PCIEPORTBUS is not set 263 263 CONFIG_ARCH_SUPPORTS_MSI=y 264 264 # CONFIG_PCI_MSI is not set 265 - CONFIG_PCI_LEGACY=y 265 + # CONFIG_PCI_LEGACY is not set 266 266 # CONFIG_PCI_DEBUG is not set 267 267 # CONFIG_PCI_STUB is not set 268 268 # CONFIG_PCCARD is not set ··· 716 716 # 717 717 # Multimedia drivers 718 718 # 719 - CONFIG_DAB=y 719 + # CONFIG_DAB is not set 720 720 # CONFIG_USB_DABUSB is not set 721 721 722 722 # ··· 725 725 # CONFIG_AGP is not set 726 726 # CONFIG_DRM is not set 727 727 # CONFIG_VGASTATE is not set 728 - CONFIG_VIDEO_OUTPUT_CONTROL=m 728 + # CONFIG_VIDEO_OUTPUT_CONTROL is not set 729 729 # CONFIG_FB is not set 730 730 # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 731 731
+1 -1
arch/powerpc/configs/44x/ebony_defconfig
··· 261 261 # CONFIG_PCIEPORTBUS is not set 262 262 CONFIG_ARCH_SUPPORTS_MSI=y 263 263 # CONFIG_PCI_MSI is not set 264 - CONFIG_PCI_LEGACY=y 264 + # CONFIG_PCI_LEGACY is not set 265 265 # CONFIG_PCI_DEBUG is not set 266 266 # CONFIG_PCI_STUB is not set 267 267 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/katmai_defconfig
··· 256 256 # CONFIG_PCIEPORTBUS is not set 257 257 CONFIG_ARCH_SUPPORTS_MSI=y 258 258 # CONFIG_PCI_MSI is not set 259 - CONFIG_PCI_LEGACY=y 259 + # CONFIG_PCI_LEGACY is not set 260 260 # CONFIG_PCI_DEBUG is not set 261 261 # CONFIG_PCI_STUB is not set 262 262 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/rainier_defconfig
··· 260 260 # CONFIG_PCIEPORTBUS is not set 261 261 CONFIG_ARCH_SUPPORTS_MSI=y 262 262 # CONFIG_PCI_MSI is not set 263 - CONFIG_PCI_LEGACY=y 263 + # CONFIG_PCI_LEGACY is not set 264 264 # CONFIG_PCI_DEBUG is not set 265 265 # CONFIG_PCI_STUB is not set 266 266 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/redwood_defconfig
··· 265 265 # CONFIG_PCIEASPM is not set 266 266 CONFIG_ARCH_SUPPORTS_MSI=y 267 267 # CONFIG_PCI_MSI is not set 268 - CONFIG_PCI_LEGACY=y 268 + # CONFIG_PCI_LEGACY is not set 269 269 # CONFIG_PCI_DEBUG is not set 270 270 # CONFIG_PCI_STUB is not set 271 271 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/sam440ep_defconfig
··· 262 262 # CONFIG_PCIEPORTBUS is not set 263 263 CONFIG_ARCH_SUPPORTS_MSI=y 264 264 # CONFIG_PCI_MSI is not set 265 - CONFIG_PCI_LEGACY=y 265 + # CONFIG_PCI_LEGACY is not set 266 266 # CONFIG_PCI_STUB is not set 267 267 # CONFIG_PCCARD is not set 268 268 # CONFIG_HOTPLUG_PCI is not set
+73 -38
arch/powerpc/configs/44x/sequoia_defconfig
··· 1 1 # 2 2 # Automatically generated make config: don't edit 3 - # Linux kernel version: 2.6.29-rc2 4 - # Tue Jan 20 08:22:45 2009 3 + # Linux kernel version: 2.6.29 4 + # Tue Apr 7 17:04:52 2009 5 5 # 6 6 # CONFIG_PPC64 is not set 7 7 ··· 57 57 CONFIG_PPC_DCR_NATIVE=y 58 58 # CONFIG_PPC_DCR_MMIO is not set 59 59 CONFIG_PPC_DCR=y 60 + CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y 60 61 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 61 62 62 63 # ··· 75 74 # CONFIG_BSD_PROCESS_ACCT is not set 76 75 # CONFIG_TASKSTATS is not set 77 76 # CONFIG_AUDIT is not set 77 + 78 + # 79 + # RCU Subsystem 80 + # 81 + CONFIG_CLASSIC_RCU=y 82 + # CONFIG_TREE_RCU is not set 83 + # CONFIG_PREEMPT_RCU is not set 84 + # CONFIG_TREE_RCU_TRACE is not set 85 + # CONFIG_PREEMPT_RCU_TRACE is not set 78 86 # CONFIG_IKCONFIG is not set 79 87 CONFIG_LOG_BUF_SHIFT=14 80 88 CONFIG_GROUP_SCHED=y ··· 98 88 # CONFIG_NAMESPACES is not set 99 89 CONFIG_BLK_DEV_INITRD=y 100 90 CONFIG_INITRAMFS_SOURCE="" 91 + CONFIG_RD_GZIP=y 92 + # CONFIG_RD_BZIP2 is not set 93 + # CONFIG_RD_LZMA is not set 101 94 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 102 95 CONFIG_SYSCTL=y 96 + CONFIG_ANON_INODES=y 103 97 CONFIG_EMBEDDED=y 104 98 CONFIG_SYSCTL_SYSCALL=y 105 99 CONFIG_KALLSYMS=y ··· 113 99 CONFIG_PRINTK=y 114 100 CONFIG_BUG=y 115 101 CONFIG_ELF_CORE=y 116 - CONFIG_COMPAT_BRK=y 117 102 CONFIG_BASE_FULL=y 118 103 CONFIG_FUTEX=y 119 - CONFIG_ANON_INODES=y 120 104 CONFIG_EPOLL=y 121 105 CONFIG_SIGNALFD=y 122 106 CONFIG_TIMERFD=y ··· 124 112 CONFIG_VM_EVENT_COUNTERS=y 125 113 CONFIG_PCI_QUIRKS=y 126 114 CONFIG_SLUB_DEBUG=y 115 + CONFIG_COMPAT_BRK=y 127 116 # CONFIG_SLAB is not set 128 117 CONFIG_SLUB=y 129 118 # CONFIG_SLOB is not set 130 119 # CONFIG_PROFILING is not set 120 + # CONFIG_MARKERS is not set 131 121 CONFIG_HAVE_OPROFILE=y 132 122 # CONFIG_KPROBES is not set 133 123 CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y ··· 137 123 CONFIG_HAVE_KPROBES=y 138 124 CONFIG_HAVE_KRETPROBES=y 139 125 CONFIG_HAVE_ARCH_TRACEHOOK=y 126 + # CONFIG_SLOW_WORK is not set 140 127 # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set 141 128 CONFIG_SLABINFO=y 142 129 CONFIG_RT_MUTEXES=y ··· 150 135 # CONFIG_MODULE_SRCVERSION_ALL is not set 151 136 CONFIG_BLOCK=y 152 137 CONFIG_LBD=y 153 - # CONFIG_BLK_DEV_IO_TRACE is not set 154 138 # CONFIG_BLK_DEV_BSG is not set 155 139 # CONFIG_BLK_DEV_INTEGRITY is not set 156 140 ··· 165 151 # CONFIG_DEFAULT_CFQ is not set 166 152 # CONFIG_DEFAULT_NOOP is not set 167 153 CONFIG_DEFAULT_IOSCHED="anticipatory" 168 - CONFIG_CLASSIC_RCU=y 169 - # CONFIG_TREE_RCU is not set 170 - # CONFIG_PREEMPT_RCU is not set 171 - # CONFIG_TREE_RCU_TRACE is not set 172 - # CONFIG_PREEMPT_RCU_TRACE is not set 173 154 # CONFIG_FREEZER is not set 174 155 # CONFIG_PPC4xx_PCI_EXPRESS is not set 175 156 ··· 185 176 # CONFIG_ARCHES is not set 186 177 # CONFIG_CANYONLANDS is not set 187 178 # CONFIG_GLACIER is not set 179 + # CONFIG_REDWOOD is not set 188 180 # CONFIG_YOSEMITE is not set 189 181 # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set 190 182 CONFIG_PPC44x_SIMPLE=y ··· 248 238 CONFIG_BOUNCE=y 249 239 CONFIG_VIRT_TO_BUS=y 250 240 CONFIG_UNEVICTABLE_LRU=y 241 + CONFIG_HAVE_MLOCK=y 242 + CONFIG_HAVE_MLOCKED_PAGE_BIT=y 243 + CONFIG_STDBINUTILS=y 251 244 CONFIG_PPC_4K_PAGES=y 252 245 # CONFIG_PPC_16K_PAGES is not set 253 246 # CONFIG_PPC_64K_PAGES is not set 247 + # CONFIG_PPC_256K_PAGES is not set 254 248 CONFIG_FORCE_MAX_ZONEORDER=11 255 249 CONFIG_PROC_DEVICETREE=y 256 250 CONFIG_CMDLINE_BOOL=y ··· 276 262 # CONFIG_PCIEPORTBUS is not set 277 263 CONFIG_ARCH_SUPPORTS_MSI=y 278 264 # CONFIG_PCI_MSI is not set 279 - CONFIG_PCI_LEGACY=y 265 + # CONFIG_PCI_LEGACY is not set 280 266 # CONFIG_PCI_DEBUG is not set 281 267 # CONFIG_PCI_STUB is not set 268 + # CONFIG_PCI_IOV is not set 282 269 # CONFIG_PCCARD is not set 283 270 # CONFIG_HOTPLUG_PCI is not set 284 271 # CONFIG_HAS_RAPIDIO is not set ··· 293 278 # Default settings for advanced configuration options are used 294 279 # 295 280 CONFIG_LOWMEM_SIZE=0x30000000 281 + CONFIG_LOWMEM_CAM_NUM=3 296 282 CONFIG_PAGE_OFFSET=0xc0000000 297 283 CONFIG_KERNEL_START=0xc0000000 298 284 CONFIG_PHYSICAL_START=0x00000000 299 285 CONFIG_TASK_SIZE=0xc0000000 300 - CONFIG_CONSISTENT_START=0xff100000 301 - CONFIG_CONSISTENT_SIZE=0x00200000 302 286 CONFIG_NET=y 303 287 304 288 # 305 289 # Networking options 306 290 # 307 - CONFIG_COMPAT_NET_DEV_OPS=y 308 291 CONFIG_PACKET=y 309 292 # CONFIG_PACKET_MMAP is not set 310 293 CONFIG_UNIX=y ··· 352 339 # CONFIG_LAPB is not set 353 340 # CONFIG_ECONET is not set 354 341 # CONFIG_WAN_ROUTER is not set 342 + # CONFIG_PHONET is not set 355 343 # CONFIG_NET_SCHED is not set 356 344 # CONFIG_DCB is not set 357 345 ··· 365 351 # CONFIG_IRDA is not set 366 352 # CONFIG_BT is not set 367 353 # CONFIG_AF_RXRPC is not set 368 - # CONFIG_PHONET is not set 369 354 # CONFIG_WIRELESS is not set 370 355 # CONFIG_WIMAX is not set 371 356 # CONFIG_RFKILL is not set ··· 461 448 # CONFIG_MTD_DOC2000 is not set 462 449 # CONFIG_MTD_DOC2001 is not set 463 450 # CONFIG_MTD_DOC2001PLUS is not set 464 - # CONFIG_MTD_NAND is not set 451 + CONFIG_MTD_NAND=y 452 + # CONFIG_MTD_NAND_VERIFY_WRITE is not set 453 + CONFIG_MTD_NAND_ECC_SMC=y 454 + # CONFIG_MTD_NAND_MUSEUM_IDS is not set 455 + CONFIG_MTD_NAND_IDS=y 456 + CONFIG_MTD_NAND_NDFC=y 457 + # CONFIG_MTD_NAND_DISKONCHIP is not set 458 + # CONFIG_MTD_NAND_CAFE is not set 459 + # CONFIG_MTD_NAND_NANDSIM is not set 460 + # CONFIG_MTD_NAND_PLATFORM is not set 461 + # CONFIG_MTD_NAND_FSL_ELBC is not set 465 462 # CONFIG_MTD_ONENAND is not set 466 463 467 464 # 468 465 # LPDDR flash memory drivers 469 466 # 470 467 # CONFIG_MTD_LPDDR is not set 471 - # CONFIG_MTD_QINFO_PROBE is not set 472 468 473 469 # 474 470 # UBI - Unsorted block images ··· 505 483 # CONFIG_BLK_DEV_HD is not set 506 484 CONFIG_MISC_DEVICES=y 507 485 # CONFIG_PHANTOM is not set 508 - # CONFIG_EEPROM_93CX6 is not set 509 486 # CONFIG_SGI_IOC4 is not set 510 487 # CONFIG_TIFM_CORE is not set 511 488 # CONFIG_ENCLOSURE_SERVICES is not set 512 489 # CONFIG_HP_ILO is not set 513 490 # CONFIG_C2PORT is not set 491 + 492 + # 493 + # EEPROM support 494 + # 495 + # CONFIG_EEPROM_93CX6 is not set 514 496 CONFIG_HAVE_IDE=y 515 497 # CONFIG_IDE is not set 516 498 ··· 541 515 # CONFIG_I2O is not set 542 516 # CONFIG_MACINTOSH_DRIVERS is not set 543 517 CONFIG_NETDEVICES=y 518 + CONFIG_COMPAT_NET_DEV_OPS=y 544 519 # CONFIG_DUMMY is not set 545 520 # CONFIG_BONDING is not set 546 521 # CONFIG_MACVLAN is not set ··· 556 529 # CONFIG_SUNGEM is not set 557 530 # CONFIG_CASSINI is not set 558 531 # CONFIG_NET_VENDOR_3COM is not set 532 + # CONFIG_ETHOC is not set 533 + # CONFIG_DNET is not set 559 534 # CONFIG_NET_TULIP is not set 560 535 # CONFIG_HP100 is not set 561 536 CONFIG_IBM_NEW_EMAC=y ··· 597 568 # CONFIG_QLA3XXX is not set 598 569 # CONFIG_ATL1 is not set 599 570 # CONFIG_ATL1E is not set 571 + # CONFIG_ATL1C is not set 600 572 # CONFIG_JME is not set 601 573 CONFIG_NETDEV_10000=y 602 574 # CONFIG_CHELSIO_T1 is not set ··· 607 577 # CONFIG_IXGBE is not set 608 578 # CONFIG_IXGB is not set 609 579 # CONFIG_S2IO is not set 580 + # CONFIG_VXGE is not set 610 581 # CONFIG_MYRI10GE is not set 611 582 # CONFIG_NETXEN_NIC is not set 612 583 # CONFIG_NIU is not set ··· 617 586 # CONFIG_BNX2X is not set 618 587 # CONFIG_QLGE is not set 619 588 # CONFIG_SFC is not set 589 + # CONFIG_BE2NET is not set 620 590 # CONFIG_TR is not set 621 591 622 592 # ··· 625 593 # 626 594 # CONFIG_WLAN_PRE80211 is not set 627 595 # CONFIG_WLAN_80211 is not set 628 - # CONFIG_IWLWIFI_LEDS is not set 629 596 630 597 # 631 598 # Enable WiMAX (Networking options) to see the WiMAX drivers ··· 765 734 # 766 735 767 736 # 768 - # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; 737 + # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may 769 738 # 770 739 # CONFIG_USB_GADGET is not set 771 740 ··· 781 750 # CONFIG_EDAC is not set 782 751 # CONFIG_RTC_CLASS is not set 783 752 # CONFIG_DMADEVICES is not set 753 + # CONFIG_AUXDISPLAY is not set 784 754 # CONFIG_UIO is not set 785 755 # CONFIG_STAGING is not set 786 756 ··· 808 776 # CONFIG_AUTOFS_FS is not set 809 777 # CONFIG_AUTOFS4_FS is not set 810 778 # CONFIG_FUSE_FS is not set 779 + 780 + # 781 + # Caches 782 + # 783 + # CONFIG_FSCACHE is not set 811 784 812 785 # 813 786 # CD-ROM/DVD Filesystems ··· 879 842 CONFIG_LOCKD_V4=y 880 843 CONFIG_NFS_COMMON=y 881 844 CONFIG_SUNRPC=y 882 - # CONFIG_SUNRPC_REGISTER_V4 is not set 883 845 # CONFIG_RPCSEC_GSS_KRB5 is not set 884 846 # CONFIG_RPCSEC_GSS_SPKM3 is not set 885 847 # CONFIG_SMB_FS is not set ··· 894 858 CONFIG_MSDOS_PARTITION=y 895 859 # CONFIG_NLS is not set 896 860 # CONFIG_DLM is not set 861 + # CONFIG_BINARY_PRINTF is not set 897 862 898 863 # 899 864 # Library routines ··· 910 873 # CONFIG_LIBCRC32C is not set 911 874 CONFIG_ZLIB_INFLATE=y 912 875 CONFIG_ZLIB_DEFLATE=y 913 - CONFIG_PLIST=y 876 + CONFIG_DECOMPRESS_GZIP=y 914 877 CONFIG_HAS_IOMEM=y 915 878 CONFIG_HAS_IOPORT=y 916 879 CONFIG_HAS_DMA=y 917 880 CONFIG_HAVE_LMB=y 881 + CONFIG_NLATTR=y 918 882 919 883 # 920 884 # Kernel hacking ··· 962 924 # CONFIG_FAULT_INJECTION is not set 963 925 # CONFIG_LATENCYTOP is not set 964 926 CONFIG_SYSCTL_SYSCALL_CHECK=y 927 + # CONFIG_DEBUG_PAGEALLOC is not set 965 928 CONFIG_HAVE_FUNCTION_TRACER=y 929 + CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y 966 930 CONFIG_HAVE_DYNAMIC_FTRACE=y 967 931 CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y 932 + CONFIG_TRACING_SUPPORT=y 968 933 969 934 # 970 935 # Tracers ··· 975 934 # CONFIG_FUNCTION_TRACER is not set 976 935 # CONFIG_SCHED_TRACER is not set 977 936 # CONFIG_CONTEXT_SWITCH_TRACER is not set 937 + # CONFIG_EVENT_TRACER is not set 978 938 # CONFIG_BOOT_TRACER is not set 979 939 # CONFIG_TRACE_BRANCH_PROFILING is not set 980 940 # CONFIG_STACK_TRACER is not set 981 - # CONFIG_DYNAMIC_PRINTK_DEBUG is not set 941 + # CONFIG_KMEMTRACE is not set 942 + # CONFIG_WORKQUEUE_TRACER is not set 943 + # CONFIG_BLK_DEV_IO_TRACE is not set 944 + # CONFIG_DYNAMIC_DEBUG is not set 982 945 # CONFIG_SAMPLES is not set 983 946 CONFIG_HAVE_ARCH_KGDB=y 984 947 # CONFIG_KGDB is not set 985 948 CONFIG_PRINT_STACK_DEPTH=64 986 949 # CONFIG_DEBUG_STACKOVERFLOW is not set 987 950 # CONFIG_DEBUG_STACK_USAGE is not set 988 - # CONFIG_DEBUG_PAGEALLOC is not set 989 951 # CONFIG_CODE_PATCHING_SELFTEST is not set 990 952 # CONFIG_FTR_FIXUP_SELFTEST is not set 991 953 # CONFIG_MSI_BITMAP_SELFTEST is not set ··· 996 952 # CONFIG_IRQSTACKS is not set 997 953 # CONFIG_VIRQ_DEBUG is not set 998 954 # CONFIG_BDI_SWITCH is not set 999 - CONFIG_PPC_EARLY_DEBUG=y 1000 - # CONFIG_PPC_EARLY_DEBUG_LPAR is not set 1001 - # CONFIG_PPC_EARLY_DEBUG_G5 is not set 1002 - # CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set 1003 - # CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set 1004 - # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set 1005 - # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set 1006 - # CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set 1007 - # CONFIG_PPC_EARLY_DEBUG_BEAT is not set 1008 - CONFIG_PPC_EARLY_DEBUG_44x=y 1009 - # CONFIG_PPC_EARLY_DEBUG_40x is not set 1010 - # CONFIG_PPC_EARLY_DEBUG_CPM is not set 1011 - CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300 1012 - CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1 955 + # CONFIG_PPC_EARLY_DEBUG is not set 1013 956 1014 957 # 1015 958 # Security options ··· 1019 988 CONFIG_CRYPTO_HASH=y 1020 989 CONFIG_CRYPTO_HASH2=y 1021 990 CONFIG_CRYPTO_RNG2=y 991 + CONFIG_CRYPTO_PCOMP=y 1022 992 CONFIG_CRYPTO_MANAGER=y 1023 993 CONFIG_CRYPTO_MANAGER2=y 1024 994 # CONFIG_CRYPTO_GF128MUL is not set 1025 995 # CONFIG_CRYPTO_NULL is not set 996 + CONFIG_CRYPTO_WORKQUEUE=y 1026 997 # CONFIG_CRYPTO_CRYPTD is not set 1027 998 # CONFIG_CRYPTO_AUTHENC is not set 1028 999 # CONFIG_CRYPTO_TEST is not set ··· 1093 1060 # Compression 1094 1061 # 1095 1062 # CONFIG_CRYPTO_DEFLATE is not set 1063 + # CONFIG_CRYPTO_ZLIB is not set 1096 1064 # CONFIG_CRYPTO_LZO is not set 1097 1065 1098 1066 # ··· 1102 1068 # CONFIG_CRYPTO_ANSI_CPRNG is not set 1103 1069 CONFIG_CRYPTO_HW=y 1104 1070 # CONFIG_CRYPTO_DEV_HIFN_795X is not set 1071 + # CONFIG_CRYPTO_DEV_PPC4XX is not set 1105 1072 # CONFIG_PPC_CLOCK is not set 1106 1073 # CONFIG_VIRTUALIZATION is not set
+1 -1
arch/powerpc/configs/44x/taishan_defconfig
··· 260 260 # CONFIG_PCIEPORTBUS is not set 261 261 CONFIG_ARCH_SUPPORTS_MSI=y 262 262 # CONFIG_PCI_MSI is not set 263 - CONFIG_PCI_LEGACY=y 263 + # CONFIG_PCI_LEGACY is not set 264 264 # CONFIG_PCI_DEBUG is not set 265 265 # CONFIG_PCI_STUB is not set 266 266 # CONFIG_PCCARD is not set
+1 -1
arch/powerpc/configs/44x/virtex5_defconfig
··· 263 263 # CONFIG_PCIEPORTBUS is not set 264 264 CONFIG_ARCH_SUPPORTS_MSI=y 265 265 # CONFIG_PCI_MSI is not set 266 - CONFIG_PCI_LEGACY=y 266 + # CONFIG_PCI_LEGACY is not set 267 267 # CONFIG_PCI_DEBUG is not set 268 268 # CONFIG_PCI_STUB is not set 269 269 # CONFIG_PCCARD is not set
-4
arch/powerpc/include/asm/cpm2.h
··· 14 14 #include <asm/cpm.h> 15 15 #include <sysdev/fsl_soc.h> 16 16 17 - #ifdef CONFIG_PPC_85xx 18 - #define CPM_MAP_ADDR (get_immrbase() + 0x80000) 19 - #endif 20 - 21 17 /* CPM Command register. 22 18 */ 23 19 #define CPM_CR_RST ((uint)0x80000000)
+11
arch/powerpc/include/asm/dma-mapping.h
··· 15 15 #include <linux/scatterlist.h> 16 16 #include <linux/dma-attrs.h> 17 17 #include <asm/io.h> 18 + #include <asm/swiotlb.h> 18 19 19 20 #define DMA_ERROR_CODE (~(dma_addr_t)0x0) 21 + 22 + /* Some dma direct funcs must be visible for use in other dma_ops */ 23 + extern void *dma_direct_alloc_coherent(struct device *dev, size_t size, 24 + dma_addr_t *dma_handle, gfp_t flag); 25 + extern void dma_direct_free_coherent(struct device *dev, size_t size, 26 + void *vaddr, dma_addr_t dma_handle); 27 + 28 + extern unsigned long get_dma_direct_offset(struct device *dev); 20 29 21 30 #ifdef CONFIG_NOT_COHERENT_CACHE 22 31 /* ··· 87 78 dma_addr_t dma_address, size_t size, 88 79 enum dma_data_direction direction, 89 80 struct dma_attrs *attrs); 81 + int (*addr_needs_map)(struct device *dev, dma_addr_t addr, 82 + size_t size); 90 83 #ifdef CONFIG_PPC_NEED_DMA_SYNC_OPS 91 84 void (*sync_single_range_for_cpu)(struct device *hwdev, 92 85 dma_addr_t dma_handle, unsigned long offset,
+2 -2
arch/powerpc/include/asm/elf.h
··· 256 256 * even if we have an executable stack. 257 257 */ 258 258 # define elf_read_implies_exec(ex, exec_stk) (test_thread_flag(TIF_32BIT) ? \ 259 - (exec_stk != EXSTACK_DISABLE_X) : 0) 259 + (exec_stk == EXSTACK_DEFAULT) : 0) 260 260 #else 261 261 # define SET_PERSONALITY(ex) \ 262 262 set_personality(PER_LINUX | (current->personality & (~PER_MASK))) 263 - # define elf_read_implies_exec(ex, exec_stk) (exec_stk != EXSTACK_DISABLE_X) 263 + # define elf_read_implies_exec(ex, exec_stk) (exec_stk == EXSTACK_DEFAULT) 264 264 #endif /* __powerpc64__ */ 265 265 266 266 extern int dcache_bsize;
+73
arch/powerpc/include/asm/emulated_ops.h
··· 1 + /* 2 + * Copyright 2007 Sony Corporation 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License as published by 6 + * the Free Software Foundation; version 2 of the License. 7 + * 8 + * This program is distributed in the hope that it will be useful, 9 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 + * GNU General Public License for more details. 12 + * 13 + * You should have received a copy of the GNU General Public License 14 + * along with this program. 15 + * If not, see <http://www.gnu.org/licenses/>. 16 + */ 17 + 18 + #ifndef _ASM_POWERPC_EMULATED_OPS_H 19 + #define _ASM_POWERPC_EMULATED_OPS_H 20 + 21 + #include <asm/atomic.h> 22 + 23 + 24 + #ifdef CONFIG_PPC_EMULATED_STATS 25 + 26 + struct ppc_emulated_entry { 27 + const char *name; 28 + atomic_t val; 29 + }; 30 + 31 + extern struct ppc_emulated { 32 + #ifdef CONFIG_ALTIVEC 33 + struct ppc_emulated_entry altivec; 34 + #endif 35 + struct ppc_emulated_entry dcba; 36 + struct ppc_emulated_entry dcbz; 37 + struct ppc_emulated_entry fp_pair; 38 + struct ppc_emulated_entry isel; 39 + struct ppc_emulated_entry mcrxr; 40 + struct ppc_emulated_entry mfpvr; 41 + struct ppc_emulated_entry multiple; 42 + struct ppc_emulated_entry popcntb; 43 + struct ppc_emulated_entry spe; 44 + struct ppc_emulated_entry string; 45 + struct ppc_emulated_entry unaligned; 46 + #ifdef CONFIG_MATH_EMULATION 47 + struct ppc_emulated_entry math; 48 + #elif defined(CONFIG_8XX_MINIMAL_FPEMU) 49 + struct ppc_emulated_entry 8xx; 50 + #endif 51 + #ifdef CONFIG_VSX 52 + struct ppc_emulated_entry vsx; 53 + #endif 54 + } ppc_emulated; 55 + 56 + extern u32 ppc_warn_emulated; 57 + 58 + extern void ppc_warn_emulated_print(const char *type); 59 + 60 + #define PPC_WARN_EMULATED(type) \ 61 + do { \ 62 + atomic_inc(&ppc_emulated.type.val); \ 63 + if (ppc_warn_emulated) \ 64 + ppc_warn_emulated_print(ppc_emulated.type.name); \ 65 + } while (0) 66 + 67 + #else /* !CONFIG_PPC_EMULATED_STATS */ 68 + 69 + #define PPC_WARN_EMULATED(type) do { } while (0) 70 + 71 + #endif /* !CONFIG_PPC_EMULATED_STATS */ 72 + 73 + #endif /* _ASM_POWERPC_EMULATED_OPS_H */
+20 -5
arch/powerpc/include/asm/feature-fixups.h
··· 8 8 * 2 of the License, or (at your option) any later version. 9 9 */ 10 10 11 - #ifdef __ASSEMBLY__ 12 - 13 11 /* 14 12 * Feature section common macros 15 13 * ··· 21 23 /* 64 bits kernel, 32 bits code (ie. vdso32) */ 22 24 #define FTR_ENTRY_LONG .llong 23 25 #define FTR_ENTRY_OFFSET .long 0xffffffff; .long 26 + #elif defined(CONFIG_PPC64) 27 + #define FTR_ENTRY_LONG .llong 28 + #define FTR_ENTRY_OFFSET .llong 24 29 #else 25 - /* 64 bit kernel 64 bit code, or 32 bit kernel 32 bit code */ 26 - #define FTR_ENTRY_LONG PPC_LONG 27 - #define FTR_ENTRY_OFFSET PPC_LONG 30 + #define FTR_ENTRY_LONG .long 31 + #define FTR_ENTRY_OFFSET .long 28 32 #endif 29 33 30 34 #define START_FTR_SECTION(label) label##1: ··· 140 140 ALT_FW_FTR_SECTION_END_NESTED_IFSET(msk, 97) 141 141 #define ALT_FW_FTR_SECTION_END_IFCLR(msk) \ 142 142 ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97) 143 + 144 + #ifndef __ASSEMBLY__ 145 + 146 + #define ASM_MMU_FTR_IF(section_if, section_else, msk, val) \ 147 + stringify_in_c(BEGIN_MMU_FTR_SECTION) \ 148 + section_if "; " \ 149 + stringify_in_c(MMU_FTR_SECTION_ELSE) \ 150 + section_else "; " \ 151 + stringify_in_c(ALT_MMU_FTR_SECTION_END((msk), (val))) 152 + 153 + #define ASM_MMU_FTR_IFSET(section_if, section_else, msk) \ 154 + ASM_MMU_FTR_IF(section_if, section_else, (msk), (msk)) 155 + 156 + #define ASM_MMU_FTR_IFCLR(section_if, section_else, msk) \ 157 + ASM_MMU_FTR_IF(section_if, section_else, (msk), 0) 143 158 144 159 #endif /* __ASSEMBLY__ */ 145 160
+6
arch/powerpc/include/asm/lppaca.h
··· 20 20 #define _ASM_POWERPC_LPPACA_H 21 21 #ifdef __KERNEL__ 22 22 23 + /* These definitions relate to hypervisors that only exist when using 24 + * a server type processor 25 + */ 26 + #ifdef CONFIG_PPC_BOOK3S 27 + 23 28 //============================================================================= 24 29 // 25 30 // This control block contains the data that is shared between the ··· 163 158 164 159 extern struct slb_shadow slb_shadow[]; 165 160 161 + #endif /* CONFIG_PPC_BOOK3S */ 166 162 #endif /* __KERNEL__ */ 167 163 #endif /* _ASM_POWERPC_LPPACA_H */
+4
arch/powerpc/include/asm/machdep.h
··· 110 110 void (*show_percpuinfo)(struct seq_file *m, int i); 111 111 112 112 void (*init_IRQ)(void); 113 + 114 + /* Return an irq, or NO_IRQ to indicate there are none pending. 115 + * If for some reason there is no irq, but the interrupt 116 + * shouldn't be counted as spurious, return NO_IRQ_IGNORE. */ 113 117 unsigned int (*get_irq)(void); 114 118 #ifdef CONFIG_KEXEC 115 119 void (*kexec_cpu_down)(int crash_shutdown, int secondary);
+7 -2
arch/powerpc/include/asm/mmu.h
··· 52 52 */ 53 53 #define MMU_FTR_NEED_DTLB_SW_LRU ASM_CONST(0x00200000) 54 54 55 + /* This indicates that the processor uses the ISA 2.06 server tlbie 56 + * mnemonics 57 + */ 58 + #define MMU_FTR_TLBIE_206 ASM_CONST(0x00400000) 59 + 55 60 #ifndef __ASSEMBLY__ 56 61 #include <asm/cputable.h> 57 62 ··· 74 69 #endif /* !__ASSEMBLY__ */ 75 70 76 71 77 - #ifdef CONFIG_PPC64 72 + #if defined(CONFIG_PPC_STD_MMU_64) 78 73 /* 64-bit classic hash table MMU */ 79 74 # include <asm/mmu-hash64.h> 80 - #elif defined(CONFIG_PPC_STD_MMU) 75 + #elif defined(CONFIG_PPC_STD_MMU_32) 81 76 /* 32-bit classic hash table MMU */ 82 77 # include <asm/mmu-hash32.h> 83 78 #elif defined(CONFIG_40x)
-33
arch/powerpc/include/asm/mpc86xx.h
··· 1 - /* 2 - * MPC86xx definitions 3 - * 4 - * Author: Jeff Brown 5 - * 6 - * Copyright 2004 Freescale Semiconductor, Inc 7 - * 8 - * This program is free software; you can redistribute it and/or modify it 9 - * under the terms of the GNU General Public License as published by the 10 - * Free Software Foundation; either version 2 of the License, or (at your 11 - * option) any later version. 12 - */ 13 - 14 - #ifdef __KERNEL__ 15 - #ifndef __ASM_POWERPC_MPC86xx_H__ 16 - #define __ASM_POWERPC_MPC86xx_H__ 17 - 18 - #include <asm/mmu.h> 19 - 20 - #ifdef CONFIG_PPC_86xx 21 - 22 - #define CPU0_BOOT_RELEASE 0x01000000 23 - #define CPU1_BOOT_RELEASE 0x02000000 24 - #define CPU_ALL_RELEASED (CPU0_BOOT_RELEASE | CPU1_BOOT_RELEASE) 25 - #define MCM_PORT_CONFIG_OFFSET 0x1010 26 - 27 - /* Offset from CCSRBAR */ 28 - #define MPC86xx_MCM_OFFSET (0x00000) 29 - #define MPC86xx_MCM_SIZE (0x02000) 30 - 31 - #endif /* CONFIG_PPC_86xx */ 32 - #endif /* __ASM_POWERPC_MPC86xx_H__ */ 33 - #endif /* __KERNEL__ */
+9 -3
arch/powerpc/include/asm/paca.h
··· 43 43 * processor. 44 44 */ 45 45 struct paca_struct { 46 + #ifdef CONFIG_PPC_BOOK3S 46 47 /* 47 48 * Because hw_cpu_id, unlike other paca fields, is accessed 48 49 * routinely from other CPUs (from the IRQ code), we stick to ··· 52 51 */ 53 52 54 53 struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */ 55 - 54 + #endif /* CONFIG_PPC_BOOK3S */ 56 55 /* 57 56 * MAGIC: the spinlock functions in arch/powerpc/lib/locks.c 58 57 * load lock_token and paca_index with a single lwz ··· 65 64 u64 kernel_toc; /* Kernel TOC address */ 66 65 u64 kernelbase; /* Base address of kernel */ 67 66 u64 kernel_msr; /* MSR while running in kernel */ 67 + #ifdef CONFIG_PPC_STD_MMU_64 68 68 u64 stab_real; /* Absolute address of segment table */ 69 69 u64 stab_addr; /* Virtual address of segment table */ 70 + #endif /* CONFIG_PPC_STD_MMU_64 */ 70 71 void *emergency_sp; /* pointer to emergency stack */ 71 72 u64 data_offset; /* per cpu data offset */ 72 73 s16 hw_cpu_id; /* Physical processor number */ 73 74 u8 cpu_start; /* At startup, processor spins until */ 74 75 /* this becomes non-zero. */ 76 + #ifdef CONFIG_PPC_STD_MMU_64 75 77 struct slb_shadow *slb_shadow_ptr; 76 78 77 79 /* ··· 85 81 u64 exmc[10]; /* used for machine checks */ 86 82 u64 exslb[10]; /* used for SLB/segment table misses 87 83 * on the linear mapping */ 88 - 89 - mm_context_t context; 84 + /* SLB related definitions */ 90 85 u16 vmalloc_sllp; 91 86 u16 slb_cache_ptr; 92 87 u16 slb_cache[SLB_CACHE_ENTRIES]; 88 + #endif /* CONFIG_PPC_STD_MMU_64 */ 89 + 90 + mm_context_t context; 93 91 94 92 /* 95 93 * then miscellaneous read-write fields
+5
arch/powerpc/include/asm/page.h
··· 231 231 struct page *p); 232 232 extern int page_is_ram(unsigned long pfn); 233 233 234 + #ifdef CONFIG_PPC_SMLPAR 235 + void arch_free_page(struct page *page, int order); 236 + #define HAVE_ARCH_FREE_PAGE 237 + #endif 238 + 234 239 struct vm_area_struct; 235 240 236 241 typedef struct page *pgtable_t;
+5 -8
arch/powerpc/include/asm/pci-bridge.h
··· 86 86 void *io_base_alloc; 87 87 #endif 88 88 resource_size_t io_base_phys; 89 - #ifndef CONFIG_PPC64 90 89 resource_size_t pci_io_size; 91 - #endif 92 90 93 91 /* Some machines (PReP) have a non 1:1 mapping of 94 92 * the PCI memory space in the CPU bus space 95 93 */ 96 94 resource_size_t pci_mem_offset; 97 - #ifdef CONFIG_PPC64 98 - unsigned long pci_io_size; 99 - #endif 100 95 101 96 /* Some machines have a special region to forward the ISA 102 97 * "memory" cycles such as VGA memory regions. Left to 0 ··· 135 140 struct resource io_resource; 136 141 struct resource mem_resources[3]; 137 142 int global_number; /* PCI domain number */ 143 + 144 + resource_size_t dma_window_base_cur; 145 + resource_size_t dma_window_size; 146 + 138 147 #ifdef CONFIG_PPC64 139 148 unsigned long buid; 140 - unsigned long dma_window_base_cur; 141 - unsigned long dma_window_size; 142 149 143 150 void *private_data; 144 151 #endif /* CONFIG_PPC64 */ ··· 182 185 extern void setup_indirect_pci(struct pci_controller* hose, 183 186 resource_size_t cfg_addr, 184 187 resource_size_t cfg_data, u32 flags); 185 - extern void setup_grackle(struct pci_controller *hose); 186 188 #else /* CONFIG_PPC64 */ 187 189 188 190 /* ··· 217 221 #define PCI_DN(dn) ((struct pci_dn *) (dn)->data) 218 222 219 223 extern struct device_node *fetch_dev_dn(struct pci_dev *dev); 224 + extern void * update_dn_pci_info(struct device_node *dn, void *data); 220 225 221 226 /* Get a device_node from a pci_dev. This code must be fast except 222 227 * in the case where the sysdata is incorrect and needs to be fixed
+5
arch/powerpc/include/asm/pgtable-ppc64.h
··· 31 31 #error TASK_SIZE_USER64 exceeds pagetable range 32 32 #endif 33 33 34 + #ifdef CONFIG_PPC_STD_MMU_64 34 35 #if TASK_SIZE_USER64 > (1UL << (USER_ESID_BITS + SID_SHIFT)) 35 36 #error TASK_SIZE_USER64 exceeds user VSID range 37 + #endif 36 38 #endif 37 39 38 40 /* ··· 201 199 if (!huge) 202 200 assert_pte_locked(mm, addr); 203 201 202 + #ifdef CONFIG_PPC_STD_MMU_64 204 203 if (old & _PAGE_HASHPTE) 205 204 hpte_need_flush(mm, addr, ptep, old, huge); 205 + #endif 206 + 206 207 return old; 207 208 } 208 209
+21 -4
arch/powerpc/include/asm/ppc-opcode.h
··· 25 25 #define PPC_INST_LSWI 0x7c0004aa 26 26 #define PPC_INST_LSWX 0x7c00042a 27 27 #define PPC_INST_LWSYNC 0x7c2004ac 28 + #define PPC_INST_LXVD2X 0x7c000698 28 29 #define PPC_INST_MCRXR 0x7c000400 29 30 #define PPC_INST_MCRXR_MASK 0xfc0007fe 30 31 #define PPC_INST_MFSPR_PVR 0x7c1f42a6 ··· 44 43 45 44 #define PPC_INST_STSWI 0x7c0005aa 46 45 #define PPC_INST_STSWX 0x7c00052a 46 + #define PPC_INST_STXVD2X 0x7c000798 47 + #define PPC_INST_TLBIE 0x7c000264 47 48 #define PPC_INST_TLBILX 0x7c000024 48 49 #define PPC_INST_WAIT 0x7c00007c 49 50 50 51 /* macros to insert fields into opcodes */ 51 - #define __PPC_RA(a) ((a & 0x1f) << 16) 52 - #define __PPC_RB(b) ((b & 0x1f) << 11) 53 - #define __PPC_T_TLB(t) ((t & 0x3) << 21) 54 - #define __PPC_WC(w) ((w & 0x3) << 21) 52 + #define __PPC_RA(a) (((a) & 0x1f) << 16) 53 + #define __PPC_RB(b) (((b) & 0x1f) << 11) 54 + #define __PPC_RS(s) (((s) & 0x1f) << 21) 55 + #define __PPC_XS(s) ((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5)) 56 + #define __PPC_T_TLB(t) (((t) & 0x3) << 21) 57 + #define __PPC_WC(w) (((w) & 0x3) << 21) 55 58 56 59 /* Deal with instructions that older assemblers aren't aware of */ 57 60 #define PPC_DCBAL(a, b) stringify_in_c(.long PPC_INST_DCBAL | \ ··· 74 69 #define PPC_TLBILX_VA(a, b) PPC_TLBILX(3, a, b) 75 70 #define PPC_WAIT(w) stringify_in_c(.long PPC_INST_WAIT | \ 76 71 __PPC_WC(w)) 72 + #define PPC_TLBIE(lp,a) stringify_in_c(.long PPC_INST_TLBIE | \ 73 + __PPC_RB(a) | __PPC_RS(lp)) 74 + 75 + /* 76 + * Define what the VSX XX1 form instructions will look like, then add 77 + * the 128 bit load store instructions based on that. 78 + */ 79 + #define VSX_XX1(s, a, b) (__PPC_XS(s) | __PPC_RA(a) | __PPC_RB(b)) 80 + #define STXVD2X(s, a, b) stringify_in_c(.long PPC_INST_STXVD2X | \ 81 + VSX_XX1((s), (a), (b))) 82 + #define LXVD2X(s, a, b) stringify_in_c(.long PPC_INST_LXVD2X | \ 83 + VSX_XX1((s), (a), (b))) 77 84 78 85 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
-10
arch/powerpc/include/asm/ppc_asm.h
··· 76 76 REST_10GPRS(22, base) 77 77 #endif 78 78 79 - /* 80 - * Define what the VSX XX1 form instructions will look like, then add 81 - * the 128 bit load store instructions based on that. 82 - */ 83 - #define VSX_XX1(xs, ra, rb) (((xs) & 0x1f) << 21 | ((ra) << 16) | \ 84 - ((rb) << 11) | (((xs) >> 5))) 85 - 86 - #define STXVD2X(xs, ra, rb) .long (0x7c000798 | VSX_XX1((xs), (ra), (rb))) 87 - #define LXVD2X(xs, ra, rb) .long (0x7c000698 | VSX_XX1((xs), (ra), (rb))) 88 - 89 79 #define SAVE_2GPRS(n, base) SAVE_GPR(n, base); SAVE_GPR(n+1, base) 90 80 #define SAVE_4GPRS(n, base) SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base) 91 81 #define SAVE_8GPRS(n, base) SAVE_4GPRS(n, base); SAVE_4GPRS(n+4, base)
+4
arch/powerpc/include/asm/ptrace.h
··· 135 135 * These are defined as per linux/ptrace.h, which see. 136 136 */ 137 137 #define arch_has_single_step() (1) 138 + #define arch_has_block_step() (!cpu_has_feature(CPU_FTR_601)) 138 139 extern void user_enable_single_step(struct task_struct *); 140 + extern void user_enable_block_step(struct task_struct *); 139 141 extern void user_disable_single_step(struct task_struct *); 140 142 141 143 #endif /* __ASSEMBLY__ */ ··· 289 287 #define PPC_PTRACE_POKEDATA_3264 0x92 290 288 #define PPC_PTRACE_PEEKUSR_3264 0x91 291 289 #define PPC_PTRACE_POKEUSR_3264 0x90 290 + 291 + #define PTRACE_SINGLEBLOCK 0x100 /* resume execution until next branch */ 292 292 293 293 #endif /* _ASM_POWERPC_PTRACE_H */
+14 -7
arch/powerpc/include/asm/qe.h
··· 22 22 #include <asm/cpm.h> 23 23 #include <asm/immap_qe.h> 24 24 25 - #define QE_NUM_OF_SNUM 28 25 + #define QE_NUM_OF_SNUM 256 /* There are 256 serial number in QE */ 26 26 #define QE_NUM_OF_BRGS 16 27 27 #define QE_NUM_OF_PORTS 1024 28 28 ··· 152 152 int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier); 153 153 int qe_get_snum(void); 154 154 void qe_put_snum(u8 snum); 155 + unsigned int qe_get_num_of_risc(void); 156 + unsigned int qe_get_num_of_snums(void); 157 + 155 158 /* we actually use cpm_muram implementation, define this for convenience */ 156 159 #define qe_muram_init cpm_muram_init 157 160 #define qe_muram_alloc cpm_muram_alloc ··· 234 231 #define QE_ALIGNMENT_OF_PRAM 64 235 232 236 233 /* RISC allocation */ 237 - enum qe_risc_allocation { 238 - QE_RISC_ALLOCATION_RISC1 = 1, /* RISC 1 */ 239 - QE_RISC_ALLOCATION_RISC2 = 2, /* RISC 2 */ 240 - QE_RISC_ALLOCATION_RISC1_AND_RISC2 = 3 /* Dynamically choose 241 - RISC 1 or RISC 2 */ 242 - }; 234 + #define QE_RISC_ALLOCATION_RISC1 0x1 /* RISC 1 */ 235 + #define QE_RISC_ALLOCATION_RISC2 0x2 /* RISC 2 */ 236 + #define QE_RISC_ALLOCATION_RISC3 0x4 /* RISC 3 */ 237 + #define QE_RISC_ALLOCATION_RISC4 0x8 /* RISC 4 */ 238 + #define QE_RISC_ALLOCATION_RISC1_AND_RISC2 (QE_RISC_ALLOCATION_RISC1 | \ 239 + QE_RISC_ALLOCATION_RISC2) 240 + #define QE_RISC_ALLOCATION_FOUR_RISCS (QE_RISC_ALLOCATION_RISC1 | \ 241 + QE_RISC_ALLOCATION_RISC2 | \ 242 + QE_RISC_ALLOCATION_RISC3 | \ 243 + QE_RISC_ALLOCATION_RISC4) 243 244 244 245 /* QE extended filtering Table Lookup Key Size */ 245 246 enum qe_fltr_tbl_lookup_key_size {
+1 -5
arch/powerpc/include/asm/scatterlist.h
··· 21 21 unsigned int offset; 22 22 unsigned int length; 23 23 24 - /* For TCE support */ 24 + /* For TCE or SWIOTLB support */ 25 25 dma_addr_t dma_address; 26 26 u32 dma_length; 27 27 }; ··· 34 34 * is 0. 35 35 */ 36 36 #define sg_dma_address(sg) ((sg)->dma_address) 37 - #ifdef __powerpc64__ 38 37 #define sg_dma_len(sg) ((sg)->dma_length) 39 - #else 40 - #define sg_dma_len(sg) ((sg)->length) 41 - #endif 42 38 43 39 #ifdef __powerpc64__ 44 40 #define ISA_DMA_THRESHOLD (~0UL)
+27
arch/powerpc/include/asm/swiotlb.h
··· 1 + /* 2 + * Copyright (C) 2009 Becky Bruce, Freescale Semiconductor 3 + * 4 + * This program is free software; you can redistribute it and/or modify it 5 + * under the terms of the GNU General Public License as published by the 6 + * Free Software Foundation; either version 2 of the License, or (at your 7 + * option) any later version. 8 + * 9 + */ 10 + 11 + #ifndef __ASM_SWIOTLB_H 12 + #define __ASM_SWIOTLB_H 13 + 14 + #include <linux/swiotlb.h> 15 + 16 + extern struct dma_mapping_ops swiotlb_dma_ops; 17 + extern struct dma_mapping_ops swiotlb_pci_dma_ops; 18 + 19 + int swiotlb_arch_address_needs_mapping(struct device *, dma_addr_t, 20 + size_t size); 21 + 22 + static inline void dma_mark_clean(void *addr, size_t size) {} 23 + 24 + extern unsigned int ppc_swiotlb_enable; 25 + int __init swiotlb_setup_bus_notifier(void); 26 + 27 + #endif /* __ASM_SWIOTLB_H */
+1 -1
arch/powerpc/include/asm/system.h
··· 211 211 212 212 extern unsigned int rtas_data; 213 213 extern int mem_init_done; /* set on boot once kmalloc can be called */ 214 - extern int init_bootmem_done; /* set on !NUMA once bootmem is available */ 214 + extern int init_bootmem_done; /* set once bootmem is available */ 215 215 extern phys_addr_t memory_limit; 216 216 extern unsigned long klimit; 217 217
+21
arch/powerpc/include/asm/xilinx_pci.h
··· 1 + /* 2 + * Xilinx pci external definitions 3 + * 4 + * Copyright 2009 Roderick Colenbrander 5 + * Copyright 2009 Secret Lab Technologies Ltd. 6 + * 7 + * This file is licensed under the terms of the GNU General Public License 8 + * version 2. This program is licensed "as is" without any warranty of any 9 + * kind, whether express or implied. 10 + */ 11 + 12 + #ifndef INCLUDE_XILINX_PCI 13 + #define INCLUDE_XILINX_PCI 14 + 15 + #ifdef CONFIG_XILINX_PCI 16 + extern void __init xilinx_pci_init(void); 17 + #else 18 + static inline void __init xilinx_pci_init(void) { return; } 19 + #endif 20 + 21 + #endif /* INCLUDE_XILINX_PCI */
+3 -1
arch/powerpc/kernel/Makefile
··· 36 36 firmware.o nvram_64.o 37 37 obj64-$(CONFIG_RELOCATABLE) += reloc_64.o 38 38 obj-$(CONFIG_PPC64) += vdso64/ 39 - obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o 39 + obj-$(CONFIG_ALTIVEC) += vecemu.o 40 40 obj-$(CONFIG_PPC_970_NAP) += idle_power4.o 41 41 obj-$(CONFIG_PPC_OF) += of_device.o of_platform.o prom_parse.o 42 42 obj-$(CONFIG_PPC_CLOCK) += clock.o ··· 82 82 obj-$(CONFIG_KPROBES) += kprobes.o 83 83 obj-$(CONFIG_PPC_UDBG_16550) += legacy_serial.o udbg_16550.o 84 84 obj-$(CONFIG_STACKTRACE) += stacktrace.o 85 + obj-$(CONFIG_SWIOTLB) += dma-swiotlb.o 85 86 86 87 pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o 87 88 obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \ ··· 112 111 endif 113 112 114 113 extra-$(CONFIG_PPC_FPU) += fpu.o 114 + extra-$(CONFIG_ALTIVEC) += vector.o 115 115 extra-$(CONFIG_PPC64) += entry_64.o 116 116 117 117 extra-y += systbl_chk.i
+16 -4
arch/powerpc/kernel/align.c
··· 24 24 #include <asm/system.h> 25 25 #include <asm/cache.h> 26 26 #include <asm/cputable.h> 27 + #include <asm/emulated_ops.h> 27 28 28 29 struct aligninfo { 29 30 unsigned char len; ··· 731 730 areg = dsisr & 0x1f; /* register to update */ 732 731 733 732 #ifdef CONFIG_SPE 734 - if ((instr >> 26) == 0x4) 733 + if ((instr >> 26) == 0x4) { 734 + PPC_WARN_EMULATED(spe); 735 735 return emulate_spe(regs, reg, instr); 736 + } 736 737 #endif 737 738 738 739 instr = (dsisr >> 10) & 0x7f; ··· 786 783 flags |= SPLT; 787 784 nb = 8; 788 785 } 786 + PPC_WARN_EMULATED(vsx); 789 787 return emulate_vsx(addr, reg, areg, regs, flags, nb); 790 788 } 791 789 #endif 792 790 /* A size of 0 indicates an instruction we don't support, with 793 791 * the exception of DCBZ which is handled as a special case here 794 792 */ 795 - if (instr == DCBZ) 793 + if (instr == DCBZ) { 794 + PPC_WARN_EMULATED(dcbz); 796 795 return emulate_dcbz(regs, addr); 796 + } 797 797 if (unlikely(nb == 0)) 798 798 return 0; 799 799 800 800 /* Load/Store Multiple instructions are handled in their own 801 801 * function 802 802 */ 803 - if (flags & M) 803 + if (flags & M) { 804 + PPC_WARN_EMULATED(multiple); 804 805 return emulate_multiple(regs, addr, reg, nb, 805 806 flags, instr, swiz); 807 + } 806 808 807 809 /* Verify the address of the operand */ 808 810 if (unlikely(user_mode(regs) && ··· 824 816 } 825 817 826 818 /* Special case for 16-byte FP loads and stores */ 827 - if (nb == 16) 819 + if (nb == 16) { 820 + PPC_WARN_EMULATED(fp_pair); 828 821 return emulate_fp_pair(addr, reg, flags); 822 + } 823 + 824 + PPC_WARN_EMULATED(unaligned); 829 825 830 826 /* If we are loading, get the data from user space, else 831 827 * get it from register values
+17 -15
arch/powerpc/kernel/asm-offsets.c
··· 122 122 DEFINE(PACAKSAVE, offsetof(struct paca_struct, kstack)); 123 123 DEFINE(PACACURRENT, offsetof(struct paca_struct, __current)); 124 124 DEFINE(PACASAVEDMSR, offsetof(struct paca_struct, saved_msr)); 125 - DEFINE(PACASTABREAL, offsetof(struct paca_struct, stab_real)); 126 - DEFINE(PACASTABVIRT, offsetof(struct paca_struct, stab_addr)); 127 125 DEFINE(PACASTABRR, offsetof(struct paca_struct, stab_rr)); 128 126 DEFINE(PACAR1, offsetof(struct paca_struct, saved_r1)); 129 127 DEFINE(PACATOC, offsetof(struct paca_struct, kernel_toc)); ··· 130 132 DEFINE(PACASOFTIRQEN, offsetof(struct paca_struct, soft_enabled)); 131 133 DEFINE(PACAHARDIRQEN, offsetof(struct paca_struct, hard_enabled)); 132 134 DEFINE(PACAPERFPEND, offsetof(struct paca_struct, perf_counter_pending)); 133 - DEFINE(PACASLBCACHE, offsetof(struct paca_struct, slb_cache)); 134 - DEFINE(PACASLBCACHEPTR, offsetof(struct paca_struct, slb_cache_ptr)); 135 135 DEFINE(PACACONTEXTID, offsetof(struct paca_struct, context.id)); 136 - DEFINE(PACAVMALLOCSLLP, offsetof(struct paca_struct, vmalloc_sllp)); 137 136 #ifdef CONFIG_PPC_MM_SLICES 138 137 DEFINE(PACALOWSLICESPSIZE, offsetof(struct paca_struct, 139 138 context.low_slices_psize)); 140 139 DEFINE(PACAHIGHSLICEPSIZE, offsetof(struct paca_struct, 141 140 context.high_slices_psize)); 142 141 DEFINE(MMUPSIZEDEFSIZE, sizeof(struct mmu_psize_def)); 142 + #endif /* CONFIG_PPC_MM_SLICES */ 143 + #ifdef CONFIG_PPC_STD_MMU_64 144 + DEFINE(PACASTABREAL, offsetof(struct paca_struct, stab_real)); 145 + DEFINE(PACASTABVIRT, offsetof(struct paca_struct, stab_addr)); 146 + DEFINE(PACASLBCACHE, offsetof(struct paca_struct, slb_cache)); 147 + DEFINE(PACASLBCACHEPTR, offsetof(struct paca_struct, slb_cache_ptr)); 148 + DEFINE(PACAVMALLOCSLLP, offsetof(struct paca_struct, vmalloc_sllp)); 149 + #ifdef CONFIG_PPC_MM_SLICES 143 150 DEFINE(MMUPSIZESLLP, offsetof(struct mmu_psize_def, sllp)); 144 151 #else 145 152 DEFINE(PACACONTEXTSLLP, offsetof(struct paca_struct, context.sllp)); 146 - 147 153 #endif /* CONFIG_PPC_MM_SLICES */ 148 154 DEFINE(PACA_EXGEN, offsetof(struct paca_struct, exgen)); 149 155 DEFINE(PACA_EXMC, offsetof(struct paca_struct, exmc)); 150 156 DEFINE(PACA_EXSLB, offsetof(struct paca_struct, exslb)); 151 - DEFINE(PACAEMERGSP, offsetof(struct paca_struct, emergency_sp)); 152 157 DEFINE(PACALPPACAPTR, offsetof(struct paca_struct, lppaca_ptr)); 153 - DEFINE(PACAHWCPUID, offsetof(struct paca_struct, hw_cpu_id)); 154 - DEFINE(PACA_STARTPURR, offsetof(struct paca_struct, startpurr)); 155 - DEFINE(PACA_STARTSPURR, offsetof(struct paca_struct, startspurr)); 156 - DEFINE(PACA_USER_TIME, offsetof(struct paca_struct, user_time)); 157 - DEFINE(PACA_SYSTEM_TIME, offsetof(struct paca_struct, system_time)); 158 158 DEFINE(PACA_SLBSHADOWPTR, offsetof(struct paca_struct, slb_shadow_ptr)); 159 - DEFINE(PACA_DATA_OFFSET, offsetof(struct paca_struct, data_offset)); 160 - DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save)); 161 - 162 159 DEFINE(SLBSHADOW_STACKVSID, 163 160 offsetof(struct slb_shadow, save_area[SLB_NUM_BOLTED - 1].vsid)); 164 161 DEFINE(SLBSHADOW_STACKESID, ··· 163 170 DEFINE(LPPACAANYINT, offsetof(struct lppaca, int_dword.any_int)); 164 171 DEFINE(LPPACADECRINT, offsetof(struct lppaca, int_dword.fields.decr_int)); 165 172 DEFINE(SLBSHADOW_SAVEAREA, offsetof(struct slb_shadow, save_area)); 173 + #endif /* CONFIG_PPC_STD_MMU_64 */ 174 + DEFINE(PACAEMERGSP, offsetof(struct paca_struct, emergency_sp)); 175 + DEFINE(PACAHWCPUID, offsetof(struct paca_struct, hw_cpu_id)); 176 + DEFINE(PACA_STARTPURR, offsetof(struct paca_struct, startpurr)); 177 + DEFINE(PACA_STARTSPURR, offsetof(struct paca_struct, startspurr)); 178 + DEFINE(PACA_USER_TIME, offsetof(struct paca_struct, user_time)); 179 + DEFINE(PACA_SYSTEM_TIME, offsetof(struct paca_struct, system_time)); 180 + DEFINE(PACA_DATA_OFFSET, offsetof(struct paca_struct, data_offset)); 181 + DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save)); 166 182 #endif /* CONFIG_PPC64 */ 167 183 168 184 /* RTAS */
+4 -2
arch/powerpc/kernel/cputable.c
··· 427 427 .cpu_name = "POWER7 (architected)", 428 428 .cpu_features = CPU_FTRS_POWER7, 429 429 .cpu_user_features = COMMON_USER_POWER7, 430 - .mmu_features = MMU_FTR_HPTE_TABLE, 430 + .mmu_features = MMU_FTR_HPTE_TABLE | 431 + MMU_FTR_TLBIE_206, 431 432 .icache_bsize = 128, 432 433 .dcache_bsize = 128, 433 434 .machine_check = machine_check_generic, ··· 442 441 .cpu_name = "POWER7 (raw)", 443 442 .cpu_features = CPU_FTRS_POWER7, 444 443 .cpu_user_features = COMMON_USER_POWER7, 445 - .mmu_features = MMU_FTR_HPTE_TABLE, 444 + .mmu_features = MMU_FTR_HPTE_TABLE | 445 + MMU_FTR_TLBIE_206, 446 446 .icache_bsize = 128, 447 447 .dcache_bsize = 128, 448 448 .num_pmcs = 6,
+163
arch/powerpc/kernel/dma-swiotlb.c
··· 1 + /* 2 + * Contains routines needed to support swiotlb for ppc. 3 + * 4 + * Copyright (C) 2009 Becky Bruce, Freescale Semiconductor 5 + * 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms of the GNU General Public License as published by the 8 + * Free Software Foundation; either version 2 of the License, or (at your 9 + * option) any later version. 10 + * 11 + */ 12 + 13 + #include <linux/dma-mapping.h> 14 + #include <linux/pfn.h> 15 + #include <linux/of_platform.h> 16 + #include <linux/platform_device.h> 17 + #include <linux/pci.h> 18 + 19 + #include <asm/machdep.h> 20 + #include <asm/swiotlb.h> 21 + #include <asm/dma.h> 22 + #include <asm/abs_addr.h> 23 + 24 + int swiotlb __read_mostly; 25 + unsigned int ppc_swiotlb_enable; 26 + 27 + void *swiotlb_bus_to_virt(struct device *hwdev, dma_addr_t addr) 28 + { 29 + unsigned long pfn = PFN_DOWN(swiotlb_bus_to_phys(hwdev, addr)); 30 + void *pageaddr = page_address(pfn_to_page(pfn)); 31 + 32 + if (pageaddr != NULL) 33 + return pageaddr + (addr % PAGE_SIZE); 34 + return NULL; 35 + } 36 + 37 + dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, phys_addr_t paddr) 38 + { 39 + return paddr + get_dma_direct_offset(hwdev); 40 + } 41 + 42 + phys_addr_t swiotlb_bus_to_phys(struct device *hwdev, dma_addr_t baddr) 43 + 44 + { 45 + return baddr - get_dma_direct_offset(hwdev); 46 + } 47 + 48 + /* 49 + * Determine if an address needs bounce buffering via swiotlb. 50 + * Going forward I expect the swiotlb code to generalize on using 51 + * a dma_ops->addr_needs_map, and this function will move from here to the 52 + * generic swiotlb code. 53 + */ 54 + int 55 + swiotlb_arch_address_needs_mapping(struct device *hwdev, dma_addr_t addr, 56 + size_t size) 57 + { 58 + struct dma_mapping_ops *dma_ops = get_dma_ops(hwdev); 59 + 60 + BUG_ON(!dma_ops); 61 + return dma_ops->addr_needs_map(hwdev, addr, size); 62 + } 63 + 64 + /* 65 + * Determine if an address is reachable by a pci device, or if we must bounce. 66 + */ 67 + static int 68 + swiotlb_pci_addr_needs_map(struct device *hwdev, dma_addr_t addr, size_t size) 69 + { 70 + u64 mask = dma_get_mask(hwdev); 71 + dma_addr_t max; 72 + struct pci_controller *hose; 73 + struct pci_dev *pdev = to_pci_dev(hwdev); 74 + 75 + hose = pci_bus_to_host(pdev->bus); 76 + max = hose->dma_window_base_cur + hose->dma_window_size; 77 + 78 + /* check that we're within mapped pci window space */ 79 + if ((addr + size > max) | (addr < hose->dma_window_base_cur)) 80 + return 1; 81 + 82 + return !is_buffer_dma_capable(mask, addr, size); 83 + } 84 + 85 + static int 86 + swiotlb_addr_needs_map(struct device *hwdev, dma_addr_t addr, size_t size) 87 + { 88 + return !is_buffer_dma_capable(dma_get_mask(hwdev), addr, size); 89 + } 90 + 91 + 92 + /* 93 + * At the moment, all platforms that use this code only require 94 + * swiotlb to be used if we're operating on HIGHMEM. Since 95 + * we don't ever call anything other than map_sg, unmap_sg, 96 + * map_page, and unmap_page on highmem, use normal dma_ops 97 + * for everything else. 98 + */ 99 + struct dma_mapping_ops swiotlb_dma_ops = { 100 + .alloc_coherent = dma_direct_alloc_coherent, 101 + .free_coherent = dma_direct_free_coherent, 102 + .map_sg = swiotlb_map_sg_attrs, 103 + .unmap_sg = swiotlb_unmap_sg_attrs, 104 + .dma_supported = swiotlb_dma_supported, 105 + .map_page = swiotlb_map_page, 106 + .unmap_page = swiotlb_unmap_page, 107 + .addr_needs_map = swiotlb_addr_needs_map, 108 + .sync_single_range_for_cpu = swiotlb_sync_single_range_for_cpu, 109 + .sync_single_range_for_device = swiotlb_sync_single_range_for_device, 110 + .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, 111 + .sync_sg_for_device = swiotlb_sync_sg_for_device 112 + }; 113 + 114 + struct dma_mapping_ops swiotlb_pci_dma_ops = { 115 + .alloc_coherent = dma_direct_alloc_coherent, 116 + .free_coherent = dma_direct_free_coherent, 117 + .map_sg = swiotlb_map_sg_attrs, 118 + .unmap_sg = swiotlb_unmap_sg_attrs, 119 + .dma_supported = swiotlb_dma_supported, 120 + .map_page = swiotlb_map_page, 121 + .unmap_page = swiotlb_unmap_page, 122 + .addr_needs_map = swiotlb_pci_addr_needs_map, 123 + .sync_single_range_for_cpu = swiotlb_sync_single_range_for_cpu, 124 + .sync_single_range_for_device = swiotlb_sync_single_range_for_device, 125 + .sync_sg_for_cpu = swiotlb_sync_sg_for_cpu, 126 + .sync_sg_for_device = swiotlb_sync_sg_for_device 127 + }; 128 + 129 + static int ppc_swiotlb_bus_notify(struct notifier_block *nb, 130 + unsigned long action, void *data) 131 + { 132 + struct device *dev = data; 133 + 134 + /* We are only intereted in device addition */ 135 + if (action != BUS_NOTIFY_ADD_DEVICE) 136 + return 0; 137 + 138 + /* May need to bounce if the device can't address all of DRAM */ 139 + if (dma_get_mask(dev) < lmb_end_of_DRAM()) 140 + set_dma_ops(dev, &swiotlb_dma_ops); 141 + 142 + return NOTIFY_DONE; 143 + } 144 + 145 + static struct notifier_block ppc_swiotlb_plat_bus_notifier = { 146 + .notifier_call = ppc_swiotlb_bus_notify, 147 + .priority = 0, 148 + }; 149 + 150 + static struct notifier_block ppc_swiotlb_of_bus_notifier = { 151 + .notifier_call = ppc_swiotlb_bus_notify, 152 + .priority = 0, 153 + }; 154 + 155 + int __init swiotlb_setup_bus_notifier(void) 156 + { 157 + bus_register_notifier(&platform_bus_type, 158 + &ppc_swiotlb_plat_bus_notifier); 159 + bus_register_notifier(&of_platform_bus_type, 160 + &ppc_swiotlb_of_bus_notifier); 161 + 162 + return 0; 163 + }
+1 -1
arch/powerpc/kernel/dma.c
··· 19 19 * default the offset is PCI_DRAM_OFFSET. 20 20 */ 21 21 22 - static unsigned long get_dma_direct_offset(struct device *dev) 22 + unsigned long get_dma_direct_offset(struct device *dev) 23 23 { 24 24 if (dev) 25 25 return (unsigned long)dev->archdata.dma_data;
+978
arch/powerpc/kernel/exceptions-64s.S
··· 1 + /* 2 + * This file contains the 64-bit "server" PowerPC variant 3 + * of the low level exception handling including exception 4 + * vectors, exception return, part of the slb and stab 5 + * handling and other fixed offset specific things. 6 + * 7 + * This file is meant to be #included from head_64.S due to 8 + * position dependant assembly. 9 + * 10 + * Most of this originates from head_64.S and thus has the same 11 + * copyright history. 12 + * 13 + */ 14 + 15 + /* 16 + * We layout physical memory as follows: 17 + * 0x0000 - 0x00ff : Secondary processor spin code 18 + * 0x0100 - 0x2fff : pSeries Interrupt prologs 19 + * 0x3000 - 0x5fff : interrupt support, iSeries and common interrupt prologs 20 + * 0x6000 - 0x6fff : Initial (CPU0) segment table 21 + * 0x7000 - 0x7fff : FWNMI data area 22 + * 0x8000 - : Early init and support code 23 + */ 24 + 25 + 26 + /* 27 + * SPRG Usage 28 + * 29 + * Register Definition 30 + * 31 + * SPRG0 reserved for hypervisor 32 + * SPRG1 temp - used to save gpr 33 + * SPRG2 temp - used to save gpr 34 + * SPRG3 virt addr of paca 35 + */ 36 + 37 + /* 38 + * This is the start of the interrupt handlers for pSeries 39 + * This code runs with relocation off. 40 + * Code from here to __end_interrupts gets copied down to real 41 + * address 0x100 when we are running a relocatable kernel. 42 + * Therefore any relative branches in this section must only 43 + * branch to labels in this section. 44 + */ 45 + . = 0x100 46 + .globl __start_interrupts 47 + __start_interrupts: 48 + 49 + STD_EXCEPTION_PSERIES(0x100, system_reset) 50 + 51 + . = 0x200 52 + _machine_check_pSeries: 53 + HMT_MEDIUM 54 + mtspr SPRN_SPRG1,r13 /* save r13 */ 55 + EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) 56 + 57 + . = 0x300 58 + .globl data_access_pSeries 59 + data_access_pSeries: 60 + HMT_MEDIUM 61 + mtspr SPRN_SPRG1,r13 62 + BEGIN_FTR_SECTION 63 + mtspr SPRN_SPRG2,r12 64 + mfspr r13,SPRN_DAR 65 + mfspr r12,SPRN_DSISR 66 + srdi r13,r13,60 67 + rlwimi r13,r12,16,0x20 68 + mfcr r12 69 + cmpwi r13,0x2c 70 + beq do_stab_bolted_pSeries 71 + mtcrf 0x80,r12 72 + mfspr r12,SPRN_SPRG2 73 + END_FTR_SECTION_IFCLR(CPU_FTR_SLB) 74 + EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, data_access_common) 75 + 76 + . = 0x380 77 + .globl data_access_slb_pSeries 78 + data_access_slb_pSeries: 79 + HMT_MEDIUM 80 + mtspr SPRN_SPRG1,r13 81 + mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ 82 + std r3,PACA_EXSLB+EX_R3(r13) 83 + mfspr r3,SPRN_DAR 84 + std r9,PACA_EXSLB+EX_R9(r13) /* save r9 - r12 */ 85 + mfcr r9 86 + #ifdef __DISABLED__ 87 + /* Keep that around for when we re-implement dynamic VSIDs */ 88 + cmpdi r3,0 89 + bge slb_miss_user_pseries 90 + #endif /* __DISABLED__ */ 91 + std r10,PACA_EXSLB+EX_R10(r13) 92 + std r11,PACA_EXSLB+EX_R11(r13) 93 + std r12,PACA_EXSLB+EX_R12(r13) 94 + mfspr r10,SPRN_SPRG1 95 + std r10,PACA_EXSLB+EX_R13(r13) 96 + mfspr r12,SPRN_SRR1 /* and SRR1 */ 97 + #ifndef CONFIG_RELOCATABLE 98 + b .slb_miss_realmode 99 + #else 100 + /* 101 + * We can't just use a direct branch to .slb_miss_realmode 102 + * because the distance from here to there depends on where 103 + * the kernel ends up being put. 104 + */ 105 + mfctr r11 106 + ld r10,PACAKBASE(r13) 107 + LOAD_HANDLER(r10, .slb_miss_realmode) 108 + mtctr r10 109 + bctr 110 + #endif 111 + 112 + STD_EXCEPTION_PSERIES(0x400, instruction_access) 113 + 114 + . = 0x480 115 + .globl instruction_access_slb_pSeries 116 + instruction_access_slb_pSeries: 117 + HMT_MEDIUM 118 + mtspr SPRN_SPRG1,r13 119 + mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ 120 + std r3,PACA_EXSLB+EX_R3(r13) 121 + mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ 122 + std r9,PACA_EXSLB+EX_R9(r13) /* save r9 - r12 */ 123 + mfcr r9 124 + #ifdef __DISABLED__ 125 + /* Keep that around for when we re-implement dynamic VSIDs */ 126 + cmpdi r3,0 127 + bge slb_miss_user_pseries 128 + #endif /* __DISABLED__ */ 129 + std r10,PACA_EXSLB+EX_R10(r13) 130 + std r11,PACA_EXSLB+EX_R11(r13) 131 + std r12,PACA_EXSLB+EX_R12(r13) 132 + mfspr r10,SPRN_SPRG1 133 + std r10,PACA_EXSLB+EX_R13(r13) 134 + mfspr r12,SPRN_SRR1 /* and SRR1 */ 135 + #ifndef CONFIG_RELOCATABLE 136 + b .slb_miss_realmode 137 + #else 138 + mfctr r11 139 + ld r10,PACAKBASE(r13) 140 + LOAD_HANDLER(r10, .slb_miss_realmode) 141 + mtctr r10 142 + bctr 143 + #endif 144 + 145 + MASKABLE_EXCEPTION_PSERIES(0x500, hardware_interrupt) 146 + STD_EXCEPTION_PSERIES(0x600, alignment) 147 + STD_EXCEPTION_PSERIES(0x700, program_check) 148 + STD_EXCEPTION_PSERIES(0x800, fp_unavailable) 149 + MASKABLE_EXCEPTION_PSERIES(0x900, decrementer) 150 + STD_EXCEPTION_PSERIES(0xa00, trap_0a) 151 + STD_EXCEPTION_PSERIES(0xb00, trap_0b) 152 + 153 + . = 0xc00 154 + .globl system_call_pSeries 155 + system_call_pSeries: 156 + HMT_MEDIUM 157 + BEGIN_FTR_SECTION 158 + cmpdi r0,0x1ebe 159 + beq- 1f 160 + END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) 161 + mr r9,r13 162 + mfspr r13,SPRN_SPRG3 163 + mfspr r11,SPRN_SRR0 164 + ld r12,PACAKBASE(r13) 165 + ld r10,PACAKMSR(r13) 166 + LOAD_HANDLER(r12, system_call_entry) 167 + mtspr SPRN_SRR0,r12 168 + mfspr r12,SPRN_SRR1 169 + mtspr SPRN_SRR1,r10 170 + rfid 171 + b . /* prevent speculative execution */ 172 + 173 + /* Fast LE/BE switch system call */ 174 + 1: mfspr r12,SPRN_SRR1 175 + xori r12,r12,MSR_LE 176 + mtspr SPRN_SRR1,r12 177 + rfid /* return to userspace */ 178 + b . 179 + 180 + STD_EXCEPTION_PSERIES(0xd00, single_step) 181 + STD_EXCEPTION_PSERIES(0xe00, trap_0e) 182 + 183 + /* We need to deal with the Altivec unavailable exception 184 + * here which is at 0xf20, thus in the middle of the 185 + * prolog code of the PerformanceMonitor one. A little 186 + * trickery is thus necessary 187 + */ 188 + . = 0xf00 189 + b performance_monitor_pSeries 190 + 191 + . = 0xf20 192 + b altivec_unavailable_pSeries 193 + 194 + . = 0xf40 195 + b vsx_unavailable_pSeries 196 + 197 + #ifdef CONFIG_CBE_RAS 198 + HSTD_EXCEPTION_PSERIES(0x1200, cbe_system_error) 199 + #endif /* CONFIG_CBE_RAS */ 200 + STD_EXCEPTION_PSERIES(0x1300, instruction_breakpoint) 201 + #ifdef CONFIG_CBE_RAS 202 + HSTD_EXCEPTION_PSERIES(0x1600, cbe_maintenance) 203 + #endif /* CONFIG_CBE_RAS */ 204 + STD_EXCEPTION_PSERIES(0x1700, altivec_assist) 205 + #ifdef CONFIG_CBE_RAS 206 + HSTD_EXCEPTION_PSERIES(0x1800, cbe_thermal) 207 + #endif /* CONFIG_CBE_RAS */ 208 + 209 + . = 0x3000 210 + 211 + /*** pSeries interrupt support ***/ 212 + 213 + /* moved from 0xf00 */ 214 + STD_EXCEPTION_PSERIES(., performance_monitor) 215 + STD_EXCEPTION_PSERIES(., altivec_unavailable) 216 + STD_EXCEPTION_PSERIES(., vsx_unavailable) 217 + 218 + /* 219 + * An interrupt came in while soft-disabled; clear EE in SRR1, 220 + * clear paca->hard_enabled and return. 221 + */ 222 + masked_interrupt: 223 + stb r10,PACAHARDIRQEN(r13) 224 + mtcrf 0x80,r9 225 + ld r9,PACA_EXGEN+EX_R9(r13) 226 + mfspr r10,SPRN_SRR1 227 + rldicl r10,r10,48,1 /* clear MSR_EE */ 228 + rotldi r10,r10,16 229 + mtspr SPRN_SRR1,r10 230 + ld r10,PACA_EXGEN+EX_R10(r13) 231 + mfspr r13,SPRN_SPRG1 232 + rfid 233 + b . 234 + 235 + .align 7 236 + do_stab_bolted_pSeries: 237 + mtcrf 0x80,r12 238 + mfspr r12,SPRN_SPRG2 239 + EXCEPTION_PROLOG_PSERIES(PACA_EXSLB, .do_stab_bolted) 240 + 241 + #ifdef CONFIG_PPC_PSERIES 242 + /* 243 + * Vectors for the FWNMI option. Share common code. 244 + */ 245 + .globl system_reset_fwnmi 246 + .align 7 247 + system_reset_fwnmi: 248 + HMT_MEDIUM 249 + mtspr SPRN_SPRG1,r13 /* save r13 */ 250 + EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common) 251 + 252 + .globl machine_check_fwnmi 253 + .align 7 254 + machine_check_fwnmi: 255 + HMT_MEDIUM 256 + mtspr SPRN_SPRG1,r13 /* save r13 */ 257 + EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) 258 + 259 + #endif /* CONFIG_PPC_PSERIES */ 260 + 261 + #ifdef __DISABLED__ 262 + /* 263 + * This is used for when the SLB miss handler has to go virtual, 264 + * which doesn't happen for now anymore but will once we re-implement 265 + * dynamic VSIDs for shared page tables 266 + */ 267 + slb_miss_user_pseries: 268 + std r10,PACA_EXGEN+EX_R10(r13) 269 + std r11,PACA_EXGEN+EX_R11(r13) 270 + std r12,PACA_EXGEN+EX_R12(r13) 271 + mfspr r10,SPRG1 272 + ld r11,PACA_EXSLB+EX_R9(r13) 273 + ld r12,PACA_EXSLB+EX_R3(r13) 274 + std r10,PACA_EXGEN+EX_R13(r13) 275 + std r11,PACA_EXGEN+EX_R9(r13) 276 + std r12,PACA_EXGEN+EX_R3(r13) 277 + clrrdi r12,r13,32 278 + mfmsr r10 279 + mfspr r11,SRR0 /* save SRR0 */ 280 + ori r12,r12,slb_miss_user_common@l /* virt addr of handler */ 281 + ori r10,r10,MSR_IR|MSR_DR|MSR_RI 282 + mtspr SRR0,r12 283 + mfspr r12,SRR1 /* and SRR1 */ 284 + mtspr SRR1,r10 285 + rfid 286 + b . /* prevent spec. execution */ 287 + #endif /* __DISABLED__ */ 288 + 289 + .align 7 290 + .globl __end_interrupts 291 + __end_interrupts: 292 + 293 + /* 294 + * Code from here down to __end_handlers is invoked from the 295 + * exception prologs above. Because the prologs assemble the 296 + * addresses of these handlers using the LOAD_HANDLER macro, 297 + * which uses an addi instruction, these handlers must be in 298 + * the first 32k of the kernel image. 299 + */ 300 + 301 + /*** Common interrupt handlers ***/ 302 + 303 + STD_EXCEPTION_COMMON(0x100, system_reset, .system_reset_exception) 304 + 305 + /* 306 + * Machine check is different because we use a different 307 + * save area: PACA_EXMC instead of PACA_EXGEN. 308 + */ 309 + .align 7 310 + .globl machine_check_common 311 + machine_check_common: 312 + EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC) 313 + FINISH_NAP 314 + DISABLE_INTS 315 + bl .save_nvgprs 316 + addi r3,r1,STACK_FRAME_OVERHEAD 317 + bl .machine_check_exception 318 + b .ret_from_except 319 + 320 + STD_EXCEPTION_COMMON_LITE(0x900, decrementer, .timer_interrupt) 321 + STD_EXCEPTION_COMMON(0xa00, trap_0a, .unknown_exception) 322 + STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception) 323 + STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception) 324 + STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception) 325 + STD_EXCEPTION_COMMON_IDLE(0xf00, performance_monitor, .performance_monitor_exception) 326 + STD_EXCEPTION_COMMON(0x1300, instruction_breakpoint, .instruction_breakpoint_exception) 327 + #ifdef CONFIG_ALTIVEC 328 + STD_EXCEPTION_COMMON(0x1700, altivec_assist, .altivec_assist_exception) 329 + #else 330 + STD_EXCEPTION_COMMON(0x1700, altivec_assist, .unknown_exception) 331 + #endif 332 + #ifdef CONFIG_CBE_RAS 333 + STD_EXCEPTION_COMMON(0x1200, cbe_system_error, .cbe_system_error_exception) 334 + STD_EXCEPTION_COMMON(0x1600, cbe_maintenance, .cbe_maintenance_exception) 335 + STD_EXCEPTION_COMMON(0x1800, cbe_thermal, .cbe_thermal_exception) 336 + #endif /* CONFIG_CBE_RAS */ 337 + 338 + .align 7 339 + system_call_entry: 340 + b system_call_common 341 + 342 + /* 343 + * Here we have detected that the kernel stack pointer is bad. 344 + * R9 contains the saved CR, r13 points to the paca, 345 + * r10 contains the (bad) kernel stack pointer, 346 + * r11 and r12 contain the saved SRR0 and SRR1. 347 + * We switch to using an emergency stack, save the registers there, 348 + * and call kernel_bad_stack(), which panics. 349 + */ 350 + bad_stack: 351 + ld r1,PACAEMERGSP(r13) 352 + subi r1,r1,64+INT_FRAME_SIZE 353 + std r9,_CCR(r1) 354 + std r10,GPR1(r1) 355 + std r11,_NIP(r1) 356 + std r12,_MSR(r1) 357 + mfspr r11,SPRN_DAR 358 + mfspr r12,SPRN_DSISR 359 + std r11,_DAR(r1) 360 + std r12,_DSISR(r1) 361 + mflr r10 362 + mfctr r11 363 + mfxer r12 364 + std r10,_LINK(r1) 365 + std r11,_CTR(r1) 366 + std r12,_XER(r1) 367 + SAVE_GPR(0,r1) 368 + SAVE_GPR(2,r1) 369 + SAVE_4GPRS(3,r1) 370 + SAVE_2GPRS(7,r1) 371 + SAVE_10GPRS(12,r1) 372 + SAVE_10GPRS(22,r1) 373 + lhz r12,PACA_TRAP_SAVE(r13) 374 + std r12,_TRAP(r1) 375 + addi r11,r1,INT_FRAME_SIZE 376 + std r11,0(r1) 377 + li r12,0 378 + std r12,0(r11) 379 + ld r2,PACATOC(r13) 380 + 1: addi r3,r1,STACK_FRAME_OVERHEAD 381 + bl .kernel_bad_stack 382 + b 1b 383 + 384 + /* 385 + * Here r13 points to the paca, r9 contains the saved CR, 386 + * SRR0 and SRR1 are saved in r11 and r12, 387 + * r9 - r13 are saved in paca->exgen. 388 + */ 389 + .align 7 390 + .globl data_access_common 391 + data_access_common: 392 + mfspr r10,SPRN_DAR 393 + std r10,PACA_EXGEN+EX_DAR(r13) 394 + mfspr r10,SPRN_DSISR 395 + stw r10,PACA_EXGEN+EX_DSISR(r13) 396 + EXCEPTION_PROLOG_COMMON(0x300, PACA_EXGEN) 397 + ld r3,PACA_EXGEN+EX_DAR(r13) 398 + lwz r4,PACA_EXGEN+EX_DSISR(r13) 399 + li r5,0x300 400 + b .do_hash_page /* Try to handle as hpte fault */ 401 + 402 + .align 7 403 + .globl instruction_access_common 404 + instruction_access_common: 405 + EXCEPTION_PROLOG_COMMON(0x400, PACA_EXGEN) 406 + ld r3,_NIP(r1) 407 + andis. r4,r12,0x5820 408 + li r5,0x400 409 + b .do_hash_page /* Try to handle as hpte fault */ 410 + 411 + /* 412 + * Here is the common SLB miss user that is used when going to virtual 413 + * mode for SLB misses, that is currently not used 414 + */ 415 + #ifdef __DISABLED__ 416 + .align 7 417 + .globl slb_miss_user_common 418 + slb_miss_user_common: 419 + mflr r10 420 + std r3,PACA_EXGEN+EX_DAR(r13) 421 + stw r9,PACA_EXGEN+EX_CCR(r13) 422 + std r10,PACA_EXGEN+EX_LR(r13) 423 + std r11,PACA_EXGEN+EX_SRR0(r13) 424 + bl .slb_allocate_user 425 + 426 + ld r10,PACA_EXGEN+EX_LR(r13) 427 + ld r3,PACA_EXGEN+EX_R3(r13) 428 + lwz r9,PACA_EXGEN+EX_CCR(r13) 429 + ld r11,PACA_EXGEN+EX_SRR0(r13) 430 + mtlr r10 431 + beq- slb_miss_fault 432 + 433 + andi. r10,r12,MSR_RI /* check for unrecoverable exception */ 434 + beq- unrecov_user_slb 435 + mfmsr r10 436 + 437 + .machine push 438 + .machine "power4" 439 + mtcrf 0x80,r9 440 + .machine pop 441 + 442 + clrrdi r10,r10,2 /* clear RI before setting SRR0/1 */ 443 + mtmsrd r10,1 444 + 445 + mtspr SRR0,r11 446 + mtspr SRR1,r12 447 + 448 + ld r9,PACA_EXGEN+EX_R9(r13) 449 + ld r10,PACA_EXGEN+EX_R10(r13) 450 + ld r11,PACA_EXGEN+EX_R11(r13) 451 + ld r12,PACA_EXGEN+EX_R12(r13) 452 + ld r13,PACA_EXGEN+EX_R13(r13) 453 + rfid 454 + b . 455 + 456 + slb_miss_fault: 457 + EXCEPTION_PROLOG_COMMON(0x380, PACA_EXGEN) 458 + ld r4,PACA_EXGEN+EX_DAR(r13) 459 + li r5,0 460 + std r4,_DAR(r1) 461 + std r5,_DSISR(r1) 462 + b handle_page_fault 463 + 464 + unrecov_user_slb: 465 + EXCEPTION_PROLOG_COMMON(0x4200, PACA_EXGEN) 466 + DISABLE_INTS 467 + bl .save_nvgprs 468 + 1: addi r3,r1,STACK_FRAME_OVERHEAD 469 + bl .unrecoverable_exception 470 + b 1b 471 + 472 + #endif /* __DISABLED__ */ 473 + 474 + 475 + /* 476 + * r13 points to the PACA, r9 contains the saved CR, 477 + * r12 contain the saved SRR1, SRR0 is still ready for return 478 + * r3 has the faulting address 479 + * r9 - r13 are saved in paca->exslb. 480 + * r3 is saved in paca->slb_r3 481 + * We assume we aren't going to take any exceptions during this procedure. 482 + */ 483 + _GLOBAL(slb_miss_realmode) 484 + mflr r10 485 + #ifdef CONFIG_RELOCATABLE 486 + mtctr r11 487 + #endif 488 + 489 + stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */ 490 + std r10,PACA_EXSLB+EX_LR(r13) /* save LR */ 491 + 492 + bl .slb_allocate_realmode 493 + 494 + /* All done -- return from exception. */ 495 + 496 + ld r10,PACA_EXSLB+EX_LR(r13) 497 + ld r3,PACA_EXSLB+EX_R3(r13) 498 + lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */ 499 + #ifdef CONFIG_PPC_ISERIES 500 + BEGIN_FW_FTR_SECTION 501 + ld r11,PACALPPACAPTR(r13) 502 + ld r11,LPPACASRR0(r11) /* get SRR0 value */ 503 + END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 504 + #endif /* CONFIG_PPC_ISERIES */ 505 + 506 + mtlr r10 507 + 508 + andi. r10,r12,MSR_RI /* check for unrecoverable exception */ 509 + beq- 2f 510 + 511 + .machine push 512 + .machine "power4" 513 + mtcrf 0x80,r9 514 + mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */ 515 + .machine pop 516 + 517 + #ifdef CONFIG_PPC_ISERIES 518 + BEGIN_FW_FTR_SECTION 519 + mtspr SPRN_SRR0,r11 520 + mtspr SPRN_SRR1,r12 521 + END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 522 + #endif /* CONFIG_PPC_ISERIES */ 523 + ld r9,PACA_EXSLB+EX_R9(r13) 524 + ld r10,PACA_EXSLB+EX_R10(r13) 525 + ld r11,PACA_EXSLB+EX_R11(r13) 526 + ld r12,PACA_EXSLB+EX_R12(r13) 527 + ld r13,PACA_EXSLB+EX_R13(r13) 528 + rfid 529 + b . /* prevent speculative execution */ 530 + 531 + 2: 532 + #ifdef CONFIG_PPC_ISERIES 533 + BEGIN_FW_FTR_SECTION 534 + b unrecov_slb 535 + END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 536 + #endif /* CONFIG_PPC_ISERIES */ 537 + mfspr r11,SPRN_SRR0 538 + ld r10,PACAKBASE(r13) 539 + LOAD_HANDLER(r10,unrecov_slb) 540 + mtspr SPRN_SRR0,r10 541 + ld r10,PACAKMSR(r13) 542 + mtspr SPRN_SRR1,r10 543 + rfid 544 + b . 545 + 546 + unrecov_slb: 547 + EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB) 548 + DISABLE_INTS 549 + bl .save_nvgprs 550 + 1: addi r3,r1,STACK_FRAME_OVERHEAD 551 + bl .unrecoverable_exception 552 + b 1b 553 + 554 + .align 7 555 + .globl hardware_interrupt_common 556 + .globl hardware_interrupt_entry 557 + hardware_interrupt_common: 558 + EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN) 559 + FINISH_NAP 560 + hardware_interrupt_entry: 561 + DISABLE_INTS 562 + BEGIN_FTR_SECTION 563 + bl .ppc64_runlatch_on 564 + END_FTR_SECTION_IFSET(CPU_FTR_CTRL) 565 + addi r3,r1,STACK_FRAME_OVERHEAD 566 + bl .do_IRQ 567 + b .ret_from_except_lite 568 + 569 + #ifdef CONFIG_PPC_970_NAP 570 + power4_fixup_nap: 571 + andc r9,r9,r10 572 + std r9,TI_LOCAL_FLAGS(r11) 573 + ld r10,_LINK(r1) /* make idle task do the */ 574 + std r10,_NIP(r1) /* equivalent of a blr */ 575 + blr 576 + #endif 577 + 578 + .align 7 579 + .globl alignment_common 580 + alignment_common: 581 + mfspr r10,SPRN_DAR 582 + std r10,PACA_EXGEN+EX_DAR(r13) 583 + mfspr r10,SPRN_DSISR 584 + stw r10,PACA_EXGEN+EX_DSISR(r13) 585 + EXCEPTION_PROLOG_COMMON(0x600, PACA_EXGEN) 586 + ld r3,PACA_EXGEN+EX_DAR(r13) 587 + lwz r4,PACA_EXGEN+EX_DSISR(r13) 588 + std r3,_DAR(r1) 589 + std r4,_DSISR(r1) 590 + bl .save_nvgprs 591 + addi r3,r1,STACK_FRAME_OVERHEAD 592 + ENABLE_INTS 593 + bl .alignment_exception 594 + b .ret_from_except 595 + 596 + .align 7 597 + .globl program_check_common 598 + program_check_common: 599 + EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) 600 + bl .save_nvgprs 601 + addi r3,r1,STACK_FRAME_OVERHEAD 602 + ENABLE_INTS 603 + bl .program_check_exception 604 + b .ret_from_except 605 + 606 + .align 7 607 + .globl fp_unavailable_common 608 + fp_unavailable_common: 609 + EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN) 610 + bne 1f /* if from user, just load it up */ 611 + bl .save_nvgprs 612 + addi r3,r1,STACK_FRAME_OVERHEAD 613 + ENABLE_INTS 614 + bl .kernel_fp_unavailable_exception 615 + BUG_OPCODE 616 + 1: bl .load_up_fpu 617 + b fast_exception_return 618 + 619 + .align 7 620 + .globl altivec_unavailable_common 621 + altivec_unavailable_common: 622 + EXCEPTION_PROLOG_COMMON(0xf20, PACA_EXGEN) 623 + #ifdef CONFIG_ALTIVEC 624 + BEGIN_FTR_SECTION 625 + beq 1f 626 + bl .load_up_altivec 627 + b fast_exception_return 628 + 1: 629 + END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) 630 + #endif 631 + bl .save_nvgprs 632 + addi r3,r1,STACK_FRAME_OVERHEAD 633 + ENABLE_INTS 634 + bl .altivec_unavailable_exception 635 + b .ret_from_except 636 + 637 + .align 7 638 + .globl vsx_unavailable_common 639 + vsx_unavailable_common: 640 + EXCEPTION_PROLOG_COMMON(0xf40, PACA_EXGEN) 641 + #ifdef CONFIG_VSX 642 + BEGIN_FTR_SECTION 643 + bne .load_up_vsx 644 + 1: 645 + END_FTR_SECTION_IFSET(CPU_FTR_VSX) 646 + #endif 647 + bl .save_nvgprs 648 + addi r3,r1,STACK_FRAME_OVERHEAD 649 + ENABLE_INTS 650 + bl .vsx_unavailable_exception 651 + b .ret_from_except 652 + 653 + .align 7 654 + .globl __end_handlers 655 + __end_handlers: 656 + 657 + /* 658 + * Return from an exception with minimal checks. 659 + * The caller is assumed to have done EXCEPTION_PROLOG_COMMON. 660 + * If interrupts have been enabled, or anything has been 661 + * done that might have changed the scheduling status of 662 + * any task or sent any task a signal, you should use 663 + * ret_from_except or ret_from_except_lite instead of this. 664 + */ 665 + fast_exc_return_irq: /* restores irq state too */ 666 + ld r3,SOFTE(r1) 667 + TRACE_AND_RESTORE_IRQ(r3); 668 + ld r12,_MSR(r1) 669 + rldicl r4,r12,49,63 /* get MSR_EE to LSB */ 670 + stb r4,PACAHARDIRQEN(r13) /* restore paca->hard_enabled */ 671 + b 1f 672 + 673 + .globl fast_exception_return 674 + fast_exception_return: 675 + ld r12,_MSR(r1) 676 + 1: ld r11,_NIP(r1) 677 + andi. r3,r12,MSR_RI /* check if RI is set */ 678 + beq- unrecov_fer 679 + 680 + #ifdef CONFIG_VIRT_CPU_ACCOUNTING 681 + andi. r3,r12,MSR_PR 682 + beq 2f 683 + ACCOUNT_CPU_USER_EXIT(r3, r4) 684 + 2: 685 + #endif 686 + 687 + ld r3,_CCR(r1) 688 + ld r4,_LINK(r1) 689 + ld r5,_CTR(r1) 690 + ld r6,_XER(r1) 691 + mtcr r3 692 + mtlr r4 693 + mtctr r5 694 + mtxer r6 695 + REST_GPR(0, r1) 696 + REST_8GPRS(2, r1) 697 + 698 + mfmsr r10 699 + rldicl r10,r10,48,1 /* clear EE */ 700 + rldicr r10,r10,16,61 /* clear RI (LE is 0 already) */ 701 + mtmsrd r10,1 702 + 703 + mtspr SPRN_SRR1,r12 704 + mtspr SPRN_SRR0,r11 705 + REST_4GPRS(10, r1) 706 + ld r1,GPR1(r1) 707 + rfid 708 + b . /* prevent speculative execution */ 709 + 710 + unrecov_fer: 711 + bl .save_nvgprs 712 + 1: addi r3,r1,STACK_FRAME_OVERHEAD 713 + bl .unrecoverable_exception 714 + b 1b 715 + 716 + 717 + /* 718 + * Hash table stuff 719 + */ 720 + .align 7 721 + _STATIC(do_hash_page) 722 + std r3,_DAR(r1) 723 + std r4,_DSISR(r1) 724 + 725 + andis. r0,r4,0xa450 /* weird error? */ 726 + bne- handle_page_fault /* if not, try to insert a HPTE */ 727 + BEGIN_FTR_SECTION 728 + andis. r0,r4,0x0020 /* Is it a segment table fault? */ 729 + bne- do_ste_alloc /* If so handle it */ 730 + END_FTR_SECTION_IFCLR(CPU_FTR_SLB) 731 + 732 + /* 733 + * On iSeries, we soft-disable interrupts here, then 734 + * hard-enable interrupts so that the hash_page code can spin on 735 + * the hash_table_lock without problems on a shared processor. 736 + */ 737 + DISABLE_INTS 738 + 739 + /* 740 + * Currently, trace_hardirqs_off() will be called by DISABLE_INTS 741 + * and will clobber volatile registers when irq tracing is enabled 742 + * so we need to reload them. It may be possible to be smarter here 743 + * and move the irq tracing elsewhere but let's keep it simple for 744 + * now 745 + */ 746 + #ifdef CONFIG_TRACE_IRQFLAGS 747 + ld r3,_DAR(r1) 748 + ld r4,_DSISR(r1) 749 + ld r5,_TRAP(r1) 750 + ld r12,_MSR(r1) 751 + clrrdi r5,r5,4 752 + #endif /* CONFIG_TRACE_IRQFLAGS */ 753 + /* 754 + * We need to set the _PAGE_USER bit if MSR_PR is set or if we are 755 + * accessing a userspace segment (even from the kernel). We assume 756 + * kernel addresses always have the high bit set. 757 + */ 758 + rlwinm r4,r4,32-25+9,31-9,31-9 /* DSISR_STORE -> _PAGE_RW */ 759 + rotldi r0,r3,15 /* Move high bit into MSR_PR posn */ 760 + orc r0,r12,r0 /* MSR_PR | ~high_bit */ 761 + rlwimi r4,r0,32-13,30,30 /* becomes _PAGE_USER access bit */ 762 + ori r4,r4,1 /* add _PAGE_PRESENT */ 763 + rlwimi r4,r5,22+2,31-2,31-2 /* Set _PAGE_EXEC if trap is 0x400 */ 764 + 765 + /* 766 + * r3 contains the faulting address 767 + * r4 contains the required access permissions 768 + * r5 contains the trap number 769 + * 770 + * at return r3 = 0 for success 771 + */ 772 + bl .hash_page /* build HPTE if possible */ 773 + cmpdi r3,0 /* see if hash_page succeeded */ 774 + 775 + BEGIN_FW_FTR_SECTION 776 + /* 777 + * If we had interrupts soft-enabled at the point where the 778 + * DSI/ISI occurred, and an interrupt came in during hash_page, 779 + * handle it now. 780 + * We jump to ret_from_except_lite rather than fast_exception_return 781 + * because ret_from_except_lite will check for and handle pending 782 + * interrupts if necessary. 783 + */ 784 + beq 13f 785 + END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 786 + 787 + BEGIN_FW_FTR_SECTION 788 + /* 789 + * Here we have interrupts hard-disabled, so it is sufficient 790 + * to restore paca->{soft,hard}_enable and get out. 791 + */ 792 + beq fast_exc_return_irq /* Return from exception on success */ 793 + END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) 794 + 795 + /* For a hash failure, we don't bother re-enabling interrupts */ 796 + ble- 12f 797 + 798 + /* 799 + * hash_page couldn't handle it, set soft interrupt enable back 800 + * to what it was before the trap. Note that .raw_local_irq_restore 801 + * handles any interrupts pending at this point. 802 + */ 803 + ld r3,SOFTE(r1) 804 + TRACE_AND_RESTORE_IRQ_PARTIAL(r3, 11f) 805 + bl .raw_local_irq_restore 806 + b 11f 807 + 808 + /* Here we have a page fault that hash_page can't handle. */ 809 + handle_page_fault: 810 + ENABLE_INTS 811 + 11: ld r4,_DAR(r1) 812 + ld r5,_DSISR(r1) 813 + addi r3,r1,STACK_FRAME_OVERHEAD 814 + bl .do_page_fault 815 + cmpdi r3,0 816 + beq+ 13f 817 + bl .save_nvgprs 818 + mr r5,r3 819 + addi r3,r1,STACK_FRAME_OVERHEAD 820 + lwz r4,_DAR(r1) 821 + bl .bad_page_fault 822 + b .ret_from_except 823 + 824 + 13: b .ret_from_except_lite 825 + 826 + /* We have a page fault that hash_page could handle but HV refused 827 + * the PTE insertion 828 + */ 829 + 12: bl .save_nvgprs 830 + mr r5,r3 831 + addi r3,r1,STACK_FRAME_OVERHEAD 832 + ld r4,_DAR(r1) 833 + bl .low_hash_fault 834 + b .ret_from_except 835 + 836 + /* here we have a segment miss */ 837 + do_ste_alloc: 838 + bl .ste_allocate /* try to insert stab entry */ 839 + cmpdi r3,0 840 + bne- handle_page_fault 841 + b fast_exception_return 842 + 843 + /* 844 + * r13 points to the PACA, r9 contains the saved CR, 845 + * r11 and r12 contain the saved SRR0 and SRR1. 846 + * r9 - r13 are saved in paca->exslb. 847 + * We assume we aren't going to take any exceptions during this procedure. 848 + * We assume (DAR >> 60) == 0xc. 849 + */ 850 + .align 7 851 + _GLOBAL(do_stab_bolted) 852 + stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */ 853 + std r11,PACA_EXSLB+EX_SRR0(r13) /* save SRR0 in exc. frame */ 854 + 855 + /* Hash to the primary group */ 856 + ld r10,PACASTABVIRT(r13) 857 + mfspr r11,SPRN_DAR 858 + srdi r11,r11,28 859 + rldimi r10,r11,7,52 /* r10 = first ste of the group */ 860 + 861 + /* Calculate VSID */ 862 + /* This is a kernel address, so protovsid = ESID */ 863 + ASM_VSID_SCRAMBLE(r11, r9, 256M) 864 + rldic r9,r11,12,16 /* r9 = vsid << 12 */ 865 + 866 + /* Search the primary group for a free entry */ 867 + 1: ld r11,0(r10) /* Test valid bit of the current ste */ 868 + andi. r11,r11,0x80 869 + beq 2f 870 + addi r10,r10,16 871 + andi. r11,r10,0x70 872 + bne 1b 873 + 874 + /* Stick for only searching the primary group for now. */ 875 + /* At least for now, we use a very simple random castout scheme */ 876 + /* Use the TB as a random number ; OR in 1 to avoid entry 0 */ 877 + mftb r11 878 + rldic r11,r11,4,57 /* r11 = (r11 << 4) & 0x70 */ 879 + ori r11,r11,0x10 880 + 881 + /* r10 currently points to an ste one past the group of interest */ 882 + /* make it point to the randomly selected entry */ 883 + subi r10,r10,128 884 + or r10,r10,r11 /* r10 is the entry to invalidate */ 885 + 886 + isync /* mark the entry invalid */ 887 + ld r11,0(r10) 888 + rldicl r11,r11,56,1 /* clear the valid bit */ 889 + rotldi r11,r11,8 890 + std r11,0(r10) 891 + sync 892 + 893 + clrrdi r11,r11,28 /* Get the esid part of the ste */ 894 + slbie r11 895 + 896 + 2: std r9,8(r10) /* Store the vsid part of the ste */ 897 + eieio 898 + 899 + mfspr r11,SPRN_DAR /* Get the new esid */ 900 + clrrdi r11,r11,28 /* Permits a full 32b of ESID */ 901 + ori r11,r11,0x90 /* Turn on valid and kp */ 902 + std r11,0(r10) /* Put new entry back into the stab */ 903 + 904 + sync 905 + 906 + /* All done -- return from exception. */ 907 + lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */ 908 + ld r11,PACA_EXSLB+EX_SRR0(r13) /* get saved SRR0 */ 909 + 910 + andi. r10,r12,MSR_RI 911 + beq- unrecov_slb 912 + 913 + mtcrf 0x80,r9 /* restore CR */ 914 + 915 + mfmsr r10 916 + clrrdi r10,r10,2 917 + mtmsrd r10,1 918 + 919 + mtspr SPRN_SRR0,r11 920 + mtspr SPRN_SRR1,r12 921 + ld r9,PACA_EXSLB+EX_R9(r13) 922 + ld r10,PACA_EXSLB+EX_R10(r13) 923 + ld r11,PACA_EXSLB+EX_R11(r13) 924 + ld r12,PACA_EXSLB+EX_R12(r13) 925 + ld r13,PACA_EXSLB+EX_R13(r13) 926 + rfid 927 + b . /* prevent speculative execution */ 928 + 929 + /* 930 + * Space for CPU0's segment table. 931 + * 932 + * On iSeries, the hypervisor must fill in at least one entry before 933 + * we get control (with relocate on). The address is given to the hv 934 + * as a page number (see xLparMap below), so this must be at a 935 + * fixed address (the linker can't compute (u64)&initial_stab >> 936 + * PAGE_SHIFT). 937 + */ 938 + . = STAB0_OFFSET /* 0x6000 */ 939 + .globl initial_stab 940 + initial_stab: 941 + .space 4096 942 + 943 + #ifdef CONFIG_PPC_PSERIES 944 + /* 945 + * Data area reserved for FWNMI option. 946 + * This address (0x7000) is fixed by the RPA. 947 + */ 948 + .= 0x7000 949 + .globl fwnmi_data_area 950 + fwnmi_data_area: 951 + #endif /* CONFIG_PPC_PSERIES */ 952 + 953 + /* iSeries does not use the FWNMI stuff, so it is safe to put 954 + * this here, even if we later allow kernels that will boot on 955 + * both pSeries and iSeries */ 956 + #ifdef CONFIG_PPC_ISERIES 957 + . = LPARMAP_PHYS 958 + .globl xLparMap 959 + xLparMap: 960 + .quad HvEsidsToMap /* xNumberEsids */ 961 + .quad HvRangesToMap /* xNumberRanges */ 962 + .quad STAB0_PAGE /* xSegmentTableOffs */ 963 + .zero 40 /* xRsvd */ 964 + /* xEsids (HvEsidsToMap entries of 2 quads) */ 965 + .quad PAGE_OFFSET_ESID /* xKernelEsid */ 966 + .quad PAGE_OFFSET_VSID /* xKernelVsid */ 967 + .quad VMALLOC_START_ESID /* xKernelEsid */ 968 + .quad VMALLOC_START_VSID /* xKernelVsid */ 969 + /* xRanges (HvRangesToMap entries of 3 quads) */ 970 + .quad HvPagesToMap /* xPages */ 971 + .quad 0 /* xOffset */ 972 + .quad PAGE_OFFSET_VSID << (SID_SHIFT - HW_PAGE_SHIFT) /* xVPN */ 973 + 974 + #endif /* CONFIG_PPC_ISERIES */ 975 + 976 + #ifdef CONFIG_PPC_PSERIES 977 + . = 0x8000 978 + #endif /* CONFIG_PPC_PSERIES */
+5 -24
arch/powerpc/kernel/ftrace.c
··· 23 23 #include <asm/code-patching.h> 24 24 #include <asm/ftrace.h> 25 25 26 - #ifdef CONFIG_PPC32 27 - # define GET_ADDR(addr) addr 28 - #else 29 - /* PowerPC64's functions are data that points to the functions */ 30 - # define GET_ADDR(addr) (*(unsigned long *)addr) 31 - #endif 32 26 33 27 #ifdef CONFIG_DYNAMIC_FTRACE 34 - static unsigned int ftrace_nop_replace(void) 35 - { 36 - return PPC_INST_NOP; 37 - } 38 - 39 28 static unsigned int 40 29 ftrace_call_replace(unsigned long ip, unsigned long addr, int link) 41 30 { 42 31 unsigned int op; 43 32 44 - addr = GET_ADDR(addr); 33 + addr = ppc_function_entry((void *)addr); 45 34 46 35 /* if (link) set op to 'bl' else 'b' */ 47 36 op = create_branch((unsigned int *)ip, addr, link ? 1 : 0); 48 37 49 38 return op; 50 39 } 51 - 52 - #ifdef CONFIG_PPC64 53 - # define _ASM_ALIGN " .align 3 " 54 - # define _ASM_PTR " .llong " 55 - #else 56 - # define _ASM_ALIGN " .align 2 " 57 - # define _ASM_PTR " .long " 58 - #endif 59 40 60 41 static int 61 42 ftrace_modify_code(unsigned long ip, unsigned int old, unsigned int new) ··· 178 197 ptr = ((unsigned long)jmp[0] << 32) + jmp[1]; 179 198 180 199 /* This should match what was called */ 181 - if (ptr != GET_ADDR(addr)) { 200 + if (ptr != ppc_function_entry((void *)addr)) { 182 201 printk(KERN_ERR "addr does not match %lx\n", ptr); 183 202 return -EINVAL; 184 203 } ··· 309 328 if (test_24bit_addr(ip, addr)) { 310 329 /* within range */ 311 330 old = ftrace_call_replace(ip, addr, 1); 312 - new = ftrace_nop_replace(); 331 + new = PPC_INST_NOP; 313 332 return ftrace_modify_code(ip, old, new); 314 333 } 315 334 ··· 447 466 */ 448 467 if (test_24bit_addr(ip, addr)) { 449 468 /* within range */ 450 - old = ftrace_nop_replace(); 469 + old = PPC_INST_NOP; 451 470 new = ftrace_call_replace(ip, addr, 1); 452 471 return ftrace_modify_code(ip, old, new); 453 472 } ··· 551 570 return_hooker = (unsigned long)&mod_return_to_handler; 552 571 #endif 553 572 554 - return_hooker = GET_ADDR(return_hooker); 573 + return_hooker = ppc_function_entry((void *)return_hooker); 555 574 556 575 /* 557 576 * Protect against fault, even if it shouldn't
+4 -97
arch/powerpc/kernel/head_32.S
··· 733 733 AltiVecUnavailable: 734 734 EXCEPTION_PROLOG 735 735 #ifdef CONFIG_ALTIVEC 736 - bne load_up_altivec /* if from user, just load it up */ 736 + beq 1f 737 + bl load_up_altivec /* if from user, just load it up */ 738 + b fast_exception_return 737 739 #endif /* CONFIG_ALTIVEC */ 738 - addi r3,r1,STACK_FRAME_OVERHEAD 740 + 1: addi r3,r1,STACK_FRAME_OVERHEAD 739 741 EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) 740 742 741 743 PerformanceMonitor: ··· 745 743 addi r3,r1,STACK_FRAME_OVERHEAD 746 744 EXC_XFER_STD(0xf00, performance_monitor_exception) 747 745 748 - #ifdef CONFIG_ALTIVEC 749 - /* Note that the AltiVec support is closely modeled after the FP 750 - * support. Changes to one are likely to be applicable to the 751 - * other! */ 752 - load_up_altivec: 753 - /* 754 - * Disable AltiVec for the task which had AltiVec previously, 755 - * and save its AltiVec registers in its thread_struct. 756 - * Enables AltiVec for use in the kernel on return. 757 - * On SMP we know the AltiVec units are free, since we give it up every 758 - * switch. -- Kumar 759 - */ 760 - mfmsr r5 761 - oris r5,r5,MSR_VEC@h 762 - MTMSRD(r5) /* enable use of AltiVec now */ 763 - isync 764 - /* 765 - * For SMP, we don't do lazy AltiVec switching because it just gets too 766 - * horrendously complex, especially when a task switches from one CPU 767 - * to another. Instead we call giveup_altivec in switch_to. 768 - */ 769 - #ifndef CONFIG_SMP 770 - tophys(r6,0) 771 - addis r3,r6,last_task_used_altivec@ha 772 - lwz r4,last_task_used_altivec@l(r3) 773 - cmpwi 0,r4,0 774 - beq 1f 775 - add r4,r4,r6 776 - addi r4,r4,THREAD /* want THREAD of last_task_used_altivec */ 777 - SAVE_32VRS(0,r10,r4) 778 - mfvscr vr0 779 - li r10,THREAD_VSCR 780 - stvx vr0,r10,r4 781 - lwz r5,PT_REGS(r4) 782 - add r5,r5,r6 783 - lwz r4,_MSR-STACK_FRAME_OVERHEAD(r5) 784 - lis r10,MSR_VEC@h 785 - andc r4,r4,r10 /* disable altivec for previous task */ 786 - stw r4,_MSR-STACK_FRAME_OVERHEAD(r5) 787 - 1: 788 - #endif /* CONFIG_SMP */ 789 - /* enable use of AltiVec after return */ 790 - oris r9,r9,MSR_VEC@h 791 - mfspr r5,SPRN_SPRG3 /* current task's THREAD (phys) */ 792 - li r4,1 793 - li r10,THREAD_VSCR 794 - stw r4,THREAD_USED_VR(r5) 795 - lvx vr0,r10,r5 796 - mtvscr vr0 797 - REST_32VRS(0,r10,r5) 798 - #ifndef CONFIG_SMP 799 - subi r4,r5,THREAD 800 - sub r4,r4,r6 801 - stw r4,last_task_used_altivec@l(r3) 802 - #endif /* CONFIG_SMP */ 803 - /* restore registers and return */ 804 - /* we haven't used ctr or xer or lr */ 805 - b fast_exception_return 806 - 807 - /* 808 - * giveup_altivec(tsk) 809 - * Disable AltiVec for the task given as the argument, 810 - * and save the AltiVec registers in its thread_struct. 811 - * Enables AltiVec for use in the kernel on return. 812 - */ 813 - 814 - .globl giveup_altivec 815 - giveup_altivec: 816 - mfmsr r5 817 - oris r5,r5,MSR_VEC@h 818 - SYNC 819 - MTMSRD(r5) /* enable use of AltiVec now */ 820 - isync 821 - cmpwi 0,r3,0 822 - beqlr- /* if no previous owner, done */ 823 - addi r3,r3,THREAD /* want THREAD of task */ 824 - lwz r5,PT_REGS(r3) 825 - cmpwi 0,r5,0 826 - SAVE_32VRS(0, r4, r3) 827 - mfvscr vr0 828 - li r4,THREAD_VSCR 829 - stvx vr0,r4,r3 830 - beq 1f 831 - lwz r4,_MSR-STACK_FRAME_OVERHEAD(r5) 832 - lis r3,MSR_VEC@h 833 - andc r4,r4,r3 /* disable AltiVec for previous task */ 834 - stw r4,_MSR-STACK_FRAME_OVERHEAD(r5) 835 - 1: 836 - #ifndef CONFIG_SMP 837 - li r5,0 838 - lis r4,last_task_used_altivec@ha 839 - stw r5,last_task_used_altivec@l(r4) 840 - #endif /* CONFIG_SMP */ 841 - blr 842 - #endif /* CONFIG_ALTIVEC */ 843 746 844 747 /* 845 748 * This code is jumped to from the startup code to copy
+17 -1078
arch/powerpc/kernel/head_64.S
··· 12 12 * Adapted for 64bit PowerPC by Dave Engebretsen, Peter Bergner, and 13 13 * Mike Corrigan {engebret|bergner|mikejc}@us.ibm.com 14 14 * 15 - * This file contains the low-level support and setup for the 16 - * PowerPC-64 platform, including trap and interrupt dispatch. 15 + * This file contains the entry point for the 64-bit kernel along 16 + * with some early initialization code common to all 64-bit powerpc 17 + * variants. 17 18 * 18 19 * This program is free software; you can redistribute it and/or 19 20 * modify it under the terms of the GNU General Public License ··· 39 38 #include <asm/exception.h> 40 39 #include <asm/irqflags.h> 41 40 42 - /* 43 - * We layout physical memory as follows: 44 - * 0x0000 - 0x00ff : Secondary processor spin code 45 - * 0x0100 - 0x2fff : pSeries Interrupt prologs 46 - * 0x3000 - 0x5fff : interrupt support, iSeries and common interrupt prologs 47 - * 0x6000 - 0x6fff : Initial (CPU0) segment table 48 - * 0x7000 - 0x7fff : FWNMI data area 49 - * 0x8000 - : Early init and support code 50 - */ 51 - 52 - /* 53 - * SPRG Usage 54 - * 55 - * Register Definition 56 - * 57 - * SPRG0 reserved for hypervisor 58 - * SPRG1 temp - used to save gpr 59 - * SPRG2 temp - used to save gpr 60 - * SPRG3 virt addr of paca 41 + /* The physical memory is layed out such that the secondary processor 42 + * spin code sits at 0x0000...0x00ff. On server, the vectors follow 43 + * using the layout described in exceptions-64s.S 61 44 */ 62 45 63 46 /* 64 47 * Entering into this code we make the following assumptions: 65 - * For pSeries: 48 + * 49 + * For pSeries or server processors: 66 50 * 1. The MMU is off & open firmware is running in real mode. 67 51 * 2. The kernel is entered at __start 68 52 * 69 53 * For iSeries: 70 54 * 1. The MMU is on (as it always is for iSeries) 71 55 * 2. The kernel is entered at system_reset_iSeries 56 + * 57 + * For Book3E processors: 58 + * 1. The MMU is on running in AS0 in a state defined in ePAPR 59 + * 2. The kernel is entered at __start 72 60 */ 73 61 74 62 .text ··· 156 166 .text 157 167 158 168 /* 159 - * This is the start of the interrupt handlers for pSeries 160 - * This code runs with relocation off. 161 - * Code from here to __end_interrupts gets copied down to real 162 - * address 0x100 when we are running a relocatable kernel. 163 - * Therefore any relative branches in this section must only 164 - * branch to labels in this section. 169 + * On server, we include the exception vectors code here as it 170 + * relies on absolute addressing which is only possible within 171 + * this compilation unit 165 172 */ 166 - . = 0x100 167 - .globl __start_interrupts 168 - __start_interrupts: 169 - 170 - STD_EXCEPTION_PSERIES(0x100, system_reset) 171 - 172 - . = 0x200 173 - _machine_check_pSeries: 174 - HMT_MEDIUM 175 - mtspr SPRN_SPRG1,r13 /* save r13 */ 176 - EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) 177 - 178 - . = 0x300 179 - .globl data_access_pSeries 180 - data_access_pSeries: 181 - HMT_MEDIUM 182 - mtspr SPRN_SPRG1,r13 183 - BEGIN_FTR_SECTION 184 - mtspr SPRN_SPRG2,r12 185 - mfspr r13,SPRN_DAR 186 - mfspr r12,SPRN_DSISR 187 - srdi r13,r13,60 188 - rlwimi r13,r12,16,0x20 189 - mfcr r12 190 - cmpwi r13,0x2c 191 - beq do_stab_bolted_pSeries 192 - mtcrf 0x80,r12 193 - mfspr r12,SPRN_SPRG2 194 - END_FTR_SECTION_IFCLR(CPU_FTR_SLB) 195 - EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, data_access_common) 196 - 197 - . = 0x380 198 - .globl data_access_slb_pSeries 199 - data_access_slb_pSeries: 200 - HMT_MEDIUM 201 - mtspr SPRN_SPRG1,r13 202 - mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ 203 - std r3,PACA_EXSLB+EX_R3(r13) 204 - mfspr r3,SPRN_DAR 205 - std r9,PACA_EXSLB+EX_R9(r13) /* save r9 - r12 */ 206 - mfcr r9 207 - #ifdef __DISABLED__ 208 - /* Keep that around for when we re-implement dynamic VSIDs */ 209 - cmpdi r3,0 210 - bge slb_miss_user_pseries 211 - #endif /* __DISABLED__ */ 212 - std r10,PACA_EXSLB+EX_R10(r13) 213 - std r11,PACA_EXSLB+EX_R11(r13) 214 - std r12,PACA_EXSLB+EX_R12(r13) 215 - mfspr r10,SPRN_SPRG1 216 - std r10,PACA_EXSLB+EX_R13(r13) 217 - mfspr r12,SPRN_SRR1 /* and SRR1 */ 218 - #ifndef CONFIG_RELOCATABLE 219 - b .slb_miss_realmode 220 - #else 221 - /* 222 - * We can't just use a direct branch to .slb_miss_realmode 223 - * because the distance from here to there depends on where 224 - * the kernel ends up being put. 225 - */ 226 - mfctr r11 227 - ld r10,PACAKBASE(r13) 228 - LOAD_HANDLER(r10, .slb_miss_realmode) 229 - mtctr r10 230 - bctr 173 + #ifdef CONFIG_PPC_BOOK3S 174 + #include "exceptions-64s.S" 231 175 #endif 232 176 233 - STD_EXCEPTION_PSERIES(0x400, instruction_access) 234 - 235 - . = 0x480 236 - .globl instruction_access_slb_pSeries 237 - instruction_access_slb_pSeries: 238 - HMT_MEDIUM 239 - mtspr SPRN_SPRG1,r13 240 - mfspr r13,SPRN_SPRG3 /* get paca address into r13 */ 241 - std r3,PACA_EXSLB+EX_R3(r13) 242 - mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */ 243 - std r9,PACA_EXSLB+EX_R9(r13) /* save r9 - r12 */ 244 - mfcr r9 245 - #ifdef __DISABLED__ 246 - /* Keep that around for when we re-implement dynamic VSIDs */ 247 - cmpdi r3,0 248 - bge slb_miss_user_pseries 249 - #endif /* __DISABLED__ */ 250 - std r10,PACA_EXSLB+EX_R10(r13) 251 - std r11,PACA_EXSLB+EX_R11(r13) 252 - std r12,PACA_EXSLB+EX_R12(r13) 253 - mfspr r10,SPRN_SPRG1 254 - std r10,PACA_EXSLB+EX_R13(r13) 255 - mfspr r12,SPRN_SRR1 /* and SRR1 */ 256 - #ifndef CONFIG_RELOCATABLE 257 - b .slb_miss_realmode 258 - #else 259 - mfctr r11 260 - ld r10,PACAKBASE(r13) 261 - LOAD_HANDLER(r10, .slb_miss_realmode) 262 - mtctr r10 263 - bctr 264 - #endif 265 - 266 - MASKABLE_EXCEPTION_PSERIES(0x500, hardware_interrupt) 267 - STD_EXCEPTION_PSERIES(0x600, alignment) 268 - STD_EXCEPTION_PSERIES(0x700, program_check) 269 - STD_EXCEPTION_PSERIES(0x800, fp_unavailable) 270 - MASKABLE_EXCEPTION_PSERIES(0x900, decrementer) 271 - STD_EXCEPTION_PSERIES(0xa00, trap_0a) 272 - STD_EXCEPTION_PSERIES(0xb00, trap_0b) 273 - 274 - . = 0xc00 275 - .globl system_call_pSeries 276 - system_call_pSeries: 277 - HMT_MEDIUM 278 - BEGIN_FTR_SECTION 279 - cmpdi r0,0x1ebe 280 - beq- 1f 281 - END_FTR_SECTION_IFSET(CPU_FTR_REAL_LE) 282 - mr r9,r13 283 - mfspr r13,SPRN_SPRG3 284 - mfspr r11,SPRN_SRR0 285 - ld r12,PACAKBASE(r13) 286 - ld r10,PACAKMSR(r13) 287 - LOAD_HANDLER(r12, system_call_entry) 288 - mtspr SPRN_SRR0,r12 289 - mfspr r12,SPRN_SRR1 290 - mtspr SPRN_SRR1,r10 291 - rfid 292 - b . /* prevent speculative execution */ 293 - 294 - /* Fast LE/BE switch system call */ 295 - 1: mfspr r12,SPRN_SRR1 296 - xori r12,r12,MSR_LE 297 - mtspr SPRN_SRR1,r12 298 - rfid /* return to userspace */ 299 - b . 300 - 301 - STD_EXCEPTION_PSERIES(0xd00, single_step) 302 - STD_EXCEPTION_PSERIES(0xe00, trap_0e) 303 - 304 - /* We need to deal with the Altivec unavailable exception 305 - * here which is at 0xf20, thus in the middle of the 306 - * prolog code of the PerformanceMonitor one. A little 307 - * trickery is thus necessary 308 - */ 309 - . = 0xf00 310 - b performance_monitor_pSeries 311 - 312 - . = 0xf20 313 - b altivec_unavailable_pSeries 314 - 315 - . = 0xf40 316 - b vsx_unavailable_pSeries 317 - 318 - #ifdef CONFIG_CBE_RAS 319 - HSTD_EXCEPTION_PSERIES(0x1200, cbe_system_error) 320 - #endif /* CONFIG_CBE_RAS */ 321 - STD_EXCEPTION_PSERIES(0x1300, instruction_breakpoint) 322 - #ifdef CONFIG_CBE_RAS 323 - HSTD_EXCEPTION_PSERIES(0x1600, cbe_maintenance) 324 - #endif /* CONFIG_CBE_RAS */ 325 - STD_EXCEPTION_PSERIES(0x1700, altivec_assist) 326 - #ifdef CONFIG_CBE_RAS 327 - HSTD_EXCEPTION_PSERIES(0x1800, cbe_thermal) 328 - #endif /* CONFIG_CBE_RAS */ 329 - 330 - . = 0x3000 331 - 332 - /*** pSeries interrupt support ***/ 333 - 334 - /* moved from 0xf00 */ 335 - STD_EXCEPTION_PSERIES(., performance_monitor) 336 - STD_EXCEPTION_PSERIES(., altivec_unavailable) 337 - STD_EXCEPTION_PSERIES(., vsx_unavailable) 338 - 339 - /* 340 - * An interrupt came in while soft-disabled; clear EE in SRR1, 341 - * clear paca->hard_enabled and return. 342 - */ 343 - masked_interrupt: 344 - stb r10,PACAHARDIRQEN(r13) 345 - mtcrf 0x80,r9 346 - ld r9,PACA_EXGEN+EX_R9(r13) 347 - mfspr r10,SPRN_SRR1 348 - rldicl r10,r10,48,1 /* clear MSR_EE */ 349 - rotldi r10,r10,16 350 - mtspr SPRN_SRR1,r10 351 - ld r10,PACA_EXGEN+EX_R10(r13) 352 - mfspr r13,SPRN_SPRG1 353 - rfid 354 - b . 355 - 356 - .align 7 357 - do_stab_bolted_pSeries: 358 - mtcrf 0x80,r12 359 - mfspr r12,SPRN_SPRG2 360 - EXCEPTION_PROLOG_PSERIES(PACA_EXSLB, .do_stab_bolted) 361 - 362 - #ifdef CONFIG_PPC_PSERIES 363 - /* 364 - * Vectors for the FWNMI option. Share common code. 365 - */ 366 - .globl system_reset_fwnmi 367 - .align 7 368 - system_reset_fwnmi: 369 - HMT_MEDIUM 370 - mtspr SPRN_SPRG1,r13 /* save r13 */ 371 - EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common) 372 - 373 - .globl machine_check_fwnmi 374 - .align 7 375 - machine_check_fwnmi: 376 - HMT_MEDIUM 377 - mtspr SPRN_SPRG1,r13 /* save r13 */ 378 - EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common) 379 - 380 - #endif /* CONFIG_PPC_PSERIES */ 381 - 382 - #ifdef __DISABLED__ 383 - /* 384 - * This is used for when the SLB miss handler has to go virtual, 385 - * which doesn't happen for now anymore but will once we re-implement 386 - * dynamic VSIDs for shared page tables 387 - */ 388 - slb_miss_user_pseries: 389 - std r10,PACA_EXGEN+EX_R10(r13) 390 - std r11,PACA_EXGEN+EX_R11(r13) 391 - std r12,PACA_EXGEN+EX_R12(r13) 392 - mfspr r10,SPRG1 393 - ld r11,PACA_EXSLB+EX_R9(r13) 394 - ld r12,PACA_EXSLB+EX_R3(r13) 395 - std r10,PACA_EXGEN+EX_R13(r13) 396 - std r11,PACA_EXGEN+EX_R9(r13) 397 - std r12,PACA_EXGEN+EX_R3(r13) 398 - clrrdi r12,r13,32 399 - mfmsr r10 400 - mfspr r11,SRR0 /* save SRR0 */ 401 - ori r12,r12,slb_miss_user_common@l /* virt addr of handler */ 402 - ori r10,r10,MSR_IR|MSR_DR|MSR_RI 403 - mtspr SRR0,r12 404 - mfspr r12,SRR1 /* and SRR1 */ 405 - mtspr SRR1,r10 406 - rfid 407 - b . /* prevent spec. execution */ 408 - #endif /* __DISABLED__ */ 409 - 410 - .align 7 411 - .globl __end_interrupts 412 - __end_interrupts: 413 - 414 - /* 415 - * Code from here down to __end_handlers is invoked from the 416 - * exception prologs above. Because the prologs assemble the 417 - * addresses of these handlers using the LOAD_HANDLER macro, 418 - * which uses an addi instruction, these handlers must be in 419 - * the first 32k of the kernel image. 420 - */ 421 - 422 - /*** Common interrupt handlers ***/ 423 - 424 - STD_EXCEPTION_COMMON(0x100, system_reset, .system_reset_exception) 425 - 426 - /* 427 - * Machine check is different because we use a different 428 - * save area: PACA_EXMC instead of PACA_EXGEN. 429 - */ 430 - .align 7 431 - .globl machine_check_common 432 - machine_check_common: 433 - EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC) 434 - FINISH_NAP 435 - DISABLE_INTS 436 - bl .save_nvgprs 437 - addi r3,r1,STACK_FRAME_OVERHEAD 438 - bl .machine_check_exception 439 - b .ret_from_except 440 - 441 - STD_EXCEPTION_COMMON_LITE(0x900, decrementer, .timer_interrupt) 442 - STD_EXCEPTION_COMMON(0xa00, trap_0a, .unknown_exception) 443 - STD_EXCEPTION_COMMON(0xb00, trap_0b, .unknown_exception) 444 - STD_EXCEPTION_COMMON(0xd00, single_step, .single_step_exception) 445 - STD_EXCEPTION_COMMON(0xe00, trap_0e, .unknown_exception) 446 - STD_EXCEPTION_COMMON_IDLE(0xf00, performance_monitor, .performance_monitor_exception) 447 - STD_EXCEPTION_COMMON(0x1300, instruction_breakpoint, .instruction_breakpoint_exception) 448 - #ifdef CONFIG_ALTIVEC 449 - STD_EXCEPTION_COMMON(0x1700, altivec_assist, .altivec_assist_exception) 450 - #else 451 - STD_EXCEPTION_COMMON(0x1700, altivec_assist, .unknown_exception) 452 - #endif 453 - #ifdef CONFIG_CBE_RAS 454 - STD_EXCEPTION_COMMON(0x1200, cbe_system_error, .cbe_system_error_exception) 455 - STD_EXCEPTION_COMMON(0x1600, cbe_maintenance, .cbe_maintenance_exception) 456 - STD_EXCEPTION_COMMON(0x1800, cbe_thermal, .cbe_thermal_exception) 457 - #endif /* CONFIG_CBE_RAS */ 458 - 459 - .align 7 460 - system_call_entry: 461 - b system_call_common 462 - 463 - /* 464 - * Here we have detected that the kernel stack pointer is bad. 465 - * R9 contains the saved CR, r13 points to the paca, 466 - * r10 contains the (bad) kernel stack pointer, 467 - * r11 and r12 contain the saved SRR0 and SRR1. 468 - * We switch to using an emergency stack, save the registers there, 469 - * and call kernel_bad_stack(), which panics. 470 - */ 471 - bad_stack: 472 - ld r1,PACAEMERGSP(r13) 473 - subi r1,r1,64+INT_FRAME_SIZE 474 - std r9,_CCR(r1) 475 - std r10,GPR1(r1) 476 - std r11,_NIP(r1) 477 - std r12,_MSR(r1) 478 - mfspr r11,SPRN_DAR 479 - mfspr r12,SPRN_DSISR 480 - std r11,_DAR(r1) 481 - std r12,_DSISR(r1) 482 - mflr r10 483 - mfctr r11 484 - mfxer r12 485 - std r10,_LINK(r1) 486 - std r11,_CTR(r1) 487 - std r12,_XER(r1) 488 - SAVE_GPR(0,r1) 489 - SAVE_GPR(2,r1) 490 - SAVE_4GPRS(3,r1) 491 - SAVE_2GPRS(7,r1) 492 - SAVE_10GPRS(12,r1) 493 - SAVE_10GPRS(22,r1) 494 - lhz r12,PACA_TRAP_SAVE(r13) 495 - std r12,_TRAP(r1) 496 - addi r11,r1,INT_FRAME_SIZE 497 - std r11,0(r1) 498 - li r12,0 499 - std r12,0(r11) 500 - ld r2,PACATOC(r13) 501 - 1: addi r3,r1,STACK_FRAME_OVERHEAD 502 - bl .kernel_bad_stack 503 - b 1b 504 - 505 - /* 506 - * Here r13 points to the paca, r9 contains the saved CR, 507 - * SRR0 and SRR1 are saved in r11 and r12, 508 - * r9 - r13 are saved in paca->exgen. 509 - */ 510 - .align 7 511 - .globl data_access_common 512 - data_access_common: 513 - mfspr r10,SPRN_DAR 514 - std r10,PACA_EXGEN+EX_DAR(r13) 515 - mfspr r10,SPRN_DSISR 516 - stw r10,PACA_EXGEN+EX_DSISR(r13) 517 - EXCEPTION_PROLOG_COMMON(0x300, PACA_EXGEN) 518 - ld r3,PACA_EXGEN+EX_DAR(r13) 519 - lwz r4,PACA_EXGEN+EX_DSISR(r13) 520 - li r5,0x300 521 - b .do_hash_page /* Try to handle as hpte fault */ 522 - 523 - .align 7 524 - .globl instruction_access_common 525 - instruction_access_common: 526 - EXCEPTION_PROLOG_COMMON(0x400, PACA_EXGEN) 527 - ld r3,_NIP(r1) 528 - andis. r4,r12,0x5820 529 - li r5,0x400 530 - b .do_hash_page /* Try to handle as hpte fault */ 531 - 532 - /* 533 - * Here is the common SLB miss user that is used when going to virtual 534 - * mode for SLB misses, that is currently not used 535 - */ 536 - #ifdef __DISABLED__ 537 - .align 7 538 - .globl slb_miss_user_common 539 - slb_miss_user_common: 540 - mflr r10 541 - std r3,PACA_EXGEN+EX_DAR(r13) 542 - stw r9,PACA_EXGEN+EX_CCR(r13) 543 - std r10,PACA_EXGEN+EX_LR(r13) 544 - std r11,PACA_EXGEN+EX_SRR0(r13) 545 - bl .slb_allocate_user 546 - 547 - ld r10,PACA_EXGEN+EX_LR(r13) 548 - ld r3,PACA_EXGEN+EX_R3(r13) 549 - lwz r9,PACA_EXGEN+EX_CCR(r13) 550 - ld r11,PACA_EXGEN+EX_SRR0(r13) 551 - mtlr r10 552 - beq- slb_miss_fault 553 - 554 - andi. r10,r12,MSR_RI /* check for unrecoverable exception */ 555 - beq- unrecov_user_slb 556 - mfmsr r10 557 - 558 - .machine push 559 - .machine "power4" 560 - mtcrf 0x80,r9 561 - .machine pop 562 - 563 - clrrdi r10,r10,2 /* clear RI before setting SRR0/1 */ 564 - mtmsrd r10,1 565 - 566 - mtspr SRR0,r11 567 - mtspr SRR1,r12 568 - 569 - ld r9,PACA_EXGEN+EX_R9(r13) 570 - ld r10,PACA_EXGEN+EX_R10(r13) 571 - ld r11,PACA_EXGEN+EX_R11(r13) 572 - ld r12,PACA_EXGEN+EX_R12(r13) 573 - ld r13,PACA_EXGEN+EX_R13(r13) 574 - rfid 575 - b . 576 - 577 - slb_miss_fault: 578 - EXCEPTION_PROLOG_COMMON(0x380, PACA_EXGEN) 579 - ld r4,PACA_EXGEN+EX_DAR(r13) 580 - li r5,0 581 - std r4,_DAR(r1) 582 - std r5,_DSISR(r1) 583 - b handle_page_fault 584 - 585 - unrecov_user_slb: 586 - EXCEPTION_PROLOG_COMMON(0x4200, PACA_EXGEN) 587 - DISABLE_INTS 588 - bl .save_nvgprs 589 - 1: addi r3,r1,STACK_FRAME_OVERHEAD 590 - bl .unrecoverable_exception 591 - b 1b 592 - 593 - #endif /* __DISABLED__ */ 594 - 595 - 596 - /* 597 - * r13 points to the PACA, r9 contains the saved CR, 598 - * r12 contain the saved SRR1, SRR0 is still ready for return 599 - * r3 has the faulting address 600 - * r9 - r13 are saved in paca->exslb. 601 - * r3 is saved in paca->slb_r3 602 - * We assume we aren't going to take any exceptions during this procedure. 603 - */ 604 - _GLOBAL(slb_miss_realmode) 605 - mflr r10 606 - #ifdef CONFIG_RELOCATABLE 607 - mtctr r11 608 - #endif 609 - 610 - stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */ 611 - std r10,PACA_EXSLB+EX_LR(r13) /* save LR */ 612 - 613 - bl .slb_allocate_realmode 614 - 615 - /* All done -- return from exception. */ 616 - 617 - ld r10,PACA_EXSLB+EX_LR(r13) 618 - ld r3,PACA_EXSLB+EX_R3(r13) 619 - lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */ 620 - #ifdef CONFIG_PPC_ISERIES 621 - BEGIN_FW_FTR_SECTION 622 - ld r11,PACALPPACAPTR(r13) 623 - ld r11,LPPACASRR0(r11) /* get SRR0 value */ 624 - END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 625 - #endif /* CONFIG_PPC_ISERIES */ 626 - 627 - mtlr r10 628 - 629 - andi. r10,r12,MSR_RI /* check for unrecoverable exception */ 630 - beq- 2f 631 - 632 - .machine push 633 - .machine "power4" 634 - mtcrf 0x80,r9 635 - mtcrf 0x01,r9 /* slb_allocate uses cr0 and cr7 */ 636 - .machine pop 637 - 638 - #ifdef CONFIG_PPC_ISERIES 639 - BEGIN_FW_FTR_SECTION 640 - mtspr SPRN_SRR0,r11 641 - mtspr SPRN_SRR1,r12 642 - END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 643 - #endif /* CONFIG_PPC_ISERIES */ 644 - ld r9,PACA_EXSLB+EX_R9(r13) 645 - ld r10,PACA_EXSLB+EX_R10(r13) 646 - ld r11,PACA_EXSLB+EX_R11(r13) 647 - ld r12,PACA_EXSLB+EX_R12(r13) 648 - ld r13,PACA_EXSLB+EX_R13(r13) 649 - rfid 650 - b . /* prevent speculative execution */ 651 - 652 - 2: 653 - #ifdef CONFIG_PPC_ISERIES 654 - BEGIN_FW_FTR_SECTION 655 - b unrecov_slb 656 - END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 657 - #endif /* CONFIG_PPC_ISERIES */ 658 - mfspr r11,SPRN_SRR0 659 - ld r10,PACAKBASE(r13) 660 - LOAD_HANDLER(r10,unrecov_slb) 661 - mtspr SPRN_SRR0,r10 662 - ld r10,PACAKMSR(r13) 663 - mtspr SPRN_SRR1,r10 664 - rfid 665 - b . 666 - 667 - unrecov_slb: 668 - EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB) 669 - DISABLE_INTS 670 - bl .save_nvgprs 671 - 1: addi r3,r1,STACK_FRAME_OVERHEAD 672 - bl .unrecoverable_exception 673 - b 1b 674 - 675 - .align 7 676 - .globl hardware_interrupt_common 677 - .globl hardware_interrupt_entry 678 - hardware_interrupt_common: 679 - EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN) 680 - FINISH_NAP 681 - hardware_interrupt_entry: 682 - DISABLE_INTS 683 - BEGIN_FTR_SECTION 684 - bl .ppc64_runlatch_on 685 - END_FTR_SECTION_IFSET(CPU_FTR_CTRL) 686 - addi r3,r1,STACK_FRAME_OVERHEAD 687 - bl .do_IRQ 688 - b .ret_from_except_lite 689 - 690 - #ifdef CONFIG_PPC_970_NAP 691 - power4_fixup_nap: 692 - andc r9,r9,r10 693 - std r9,TI_LOCAL_FLAGS(r11) 694 - ld r10,_LINK(r1) /* make idle task do the */ 695 - std r10,_NIP(r1) /* equivalent of a blr */ 696 - blr 697 - #endif 698 - 699 - .align 7 700 - .globl alignment_common 701 - alignment_common: 702 - mfspr r10,SPRN_DAR 703 - std r10,PACA_EXGEN+EX_DAR(r13) 704 - mfspr r10,SPRN_DSISR 705 - stw r10,PACA_EXGEN+EX_DSISR(r13) 706 - EXCEPTION_PROLOG_COMMON(0x600, PACA_EXGEN) 707 - ld r3,PACA_EXGEN+EX_DAR(r13) 708 - lwz r4,PACA_EXGEN+EX_DSISR(r13) 709 - std r3,_DAR(r1) 710 - std r4,_DSISR(r1) 711 - bl .save_nvgprs 712 - addi r3,r1,STACK_FRAME_OVERHEAD 713 - ENABLE_INTS 714 - bl .alignment_exception 715 - b .ret_from_except 716 - 717 - .align 7 718 - .globl program_check_common 719 - program_check_common: 720 - EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) 721 - bl .save_nvgprs 722 - addi r3,r1,STACK_FRAME_OVERHEAD 723 - ENABLE_INTS 724 - bl .program_check_exception 725 - b .ret_from_except 726 - 727 - .align 7 728 - .globl fp_unavailable_common 729 - fp_unavailable_common: 730 - EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN) 731 - bne 1f /* if from user, just load it up */ 732 - bl .save_nvgprs 733 - addi r3,r1,STACK_FRAME_OVERHEAD 734 - ENABLE_INTS 735 - bl .kernel_fp_unavailable_exception 736 - BUG_OPCODE 737 - 1: bl .load_up_fpu 738 - b fast_exception_return 739 - 740 - .align 7 741 - .globl altivec_unavailable_common 742 - altivec_unavailable_common: 743 - EXCEPTION_PROLOG_COMMON(0xf20, PACA_EXGEN) 744 - #ifdef CONFIG_ALTIVEC 745 - BEGIN_FTR_SECTION 746 - beq 1f 747 - bl .load_up_altivec 748 - b fast_exception_return 749 - 1: 750 - END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) 751 - #endif 752 - bl .save_nvgprs 753 - addi r3,r1,STACK_FRAME_OVERHEAD 754 - ENABLE_INTS 755 - bl .altivec_unavailable_exception 756 - b .ret_from_except 757 - 758 - .align 7 759 - .globl vsx_unavailable_common 760 - vsx_unavailable_common: 761 - EXCEPTION_PROLOG_COMMON(0xf40, PACA_EXGEN) 762 - #ifdef CONFIG_VSX 763 - BEGIN_FTR_SECTION 764 - bne .load_up_vsx 765 - 1: 766 - END_FTR_SECTION_IFSET(CPU_FTR_VSX) 767 - #endif 768 - bl .save_nvgprs 769 - addi r3,r1,STACK_FRAME_OVERHEAD 770 - ENABLE_INTS 771 - bl .vsx_unavailable_exception 772 - b .ret_from_except 773 - 774 - .align 7 775 - .globl __end_handlers 776 - __end_handlers: 777 - 778 - /* 779 - * Return from an exception with minimal checks. 780 - * The caller is assumed to have done EXCEPTION_PROLOG_COMMON. 781 - * If interrupts have been enabled, or anything has been 782 - * done that might have changed the scheduling status of 783 - * any task or sent any task a signal, you should use 784 - * ret_from_except or ret_from_except_lite instead of this. 785 - */ 786 - fast_exc_return_irq: /* restores irq state too */ 787 - ld r3,SOFTE(r1) 788 - TRACE_AND_RESTORE_IRQ(r3); 789 - ld r12,_MSR(r1) 790 - rldicl r4,r12,49,63 /* get MSR_EE to LSB */ 791 - stb r4,PACAHARDIRQEN(r13) /* restore paca->hard_enabled */ 792 - b 1f 793 - 794 - .globl fast_exception_return 795 - fast_exception_return: 796 - ld r12,_MSR(r1) 797 - 1: ld r11,_NIP(r1) 798 - andi. r3,r12,MSR_RI /* check if RI is set */ 799 - beq- unrecov_fer 800 - 801 - #ifdef CONFIG_VIRT_CPU_ACCOUNTING 802 - andi. r3,r12,MSR_PR 803 - beq 2f 804 - ACCOUNT_CPU_USER_EXIT(r3, r4) 805 - 2: 806 - #endif 807 - 808 - ld r3,_CCR(r1) 809 - ld r4,_LINK(r1) 810 - ld r5,_CTR(r1) 811 - ld r6,_XER(r1) 812 - mtcr r3 813 - mtlr r4 814 - mtctr r5 815 - mtxer r6 816 - REST_GPR(0, r1) 817 - REST_8GPRS(2, r1) 818 - 819 - mfmsr r10 820 - rldicl r10,r10,48,1 /* clear EE */ 821 - rldicr r10,r10,16,61 /* clear RI (LE is 0 already) */ 822 - mtmsrd r10,1 823 - 824 - mtspr SPRN_SRR1,r12 825 - mtspr SPRN_SRR0,r11 826 - REST_4GPRS(10, r1) 827 - ld r1,GPR1(r1) 828 - rfid 829 - b . /* prevent speculative execution */ 830 - 831 - unrecov_fer: 832 - bl .save_nvgprs 833 - 1: addi r3,r1,STACK_FRAME_OVERHEAD 834 - bl .unrecoverable_exception 835 - b 1b 836 - 837 - #ifdef CONFIG_ALTIVEC 838 - /* 839 - * load_up_altivec(unused, unused, tsk) 840 - * Disable VMX for the task which had it previously, 841 - * and save its vector registers in its thread_struct. 842 - * Enables the VMX for use in the kernel on return. 843 - * On SMP we know the VMX is free, since we give it up every 844 - * switch (ie, no lazy save of the vector registers). 845 - * On entry: r13 == 'current' && last_task_used_altivec != 'current' 846 - */ 847 - _STATIC(load_up_altivec) 848 - mfmsr r5 /* grab the current MSR */ 849 - oris r5,r5,MSR_VEC@h 850 - mtmsrd r5 /* enable use of VMX now */ 851 - isync 852 - 853 - /* 854 - * For SMP, we don't do lazy VMX switching because it just gets too 855 - * horrendously complex, especially when a task switches from one CPU 856 - * to another. Instead we call giveup_altvec in switch_to. 857 - * VRSAVE isn't dealt with here, that is done in the normal context 858 - * switch code. Note that we could rely on vrsave value to eventually 859 - * avoid saving all of the VREGs here... 860 - */ 861 - #ifndef CONFIG_SMP 862 - ld r3,last_task_used_altivec@got(r2) 863 - ld r4,0(r3) 864 - cmpdi 0,r4,0 865 - beq 1f 866 - /* Save VMX state to last_task_used_altivec's THREAD struct */ 867 - addi r4,r4,THREAD 868 - SAVE_32VRS(0,r5,r4) 869 - mfvscr vr0 870 - li r10,THREAD_VSCR 871 - stvx vr0,r10,r4 872 - /* Disable VMX for last_task_used_altivec */ 873 - ld r5,PT_REGS(r4) 874 - ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 875 - lis r6,MSR_VEC@h 876 - andc r4,r4,r6 877 - std r4,_MSR-STACK_FRAME_OVERHEAD(r5) 878 - 1: 879 - #endif /* CONFIG_SMP */ 880 - /* Hack: if we get an altivec unavailable trap with VRSAVE 881 - * set to all zeros, we assume this is a broken application 882 - * that fails to set it properly, and thus we switch it to 883 - * all 1's 884 - */ 885 - mfspr r4,SPRN_VRSAVE 886 - cmpdi 0,r4,0 887 - bne+ 1f 888 - li r4,-1 889 - mtspr SPRN_VRSAVE,r4 890 - 1: 891 - /* enable use of VMX after return */ 892 - ld r4,PACACURRENT(r13) 893 - addi r5,r4,THREAD /* Get THREAD */ 894 - oris r12,r12,MSR_VEC@h 895 - std r12,_MSR(r1) 896 - li r4,1 897 - li r10,THREAD_VSCR 898 - stw r4,THREAD_USED_VR(r5) 899 - lvx vr0,r10,r5 900 - mtvscr vr0 901 - REST_32VRS(0,r4,r5) 902 - #ifndef CONFIG_SMP 903 - /* Update last_task_used_math to 'current' */ 904 - subi r4,r5,THREAD /* Back to 'current' */ 905 - std r4,0(r3) 906 - #endif /* CONFIG_SMP */ 907 - /* restore registers and return */ 908 - blr 909 - #endif /* CONFIG_ALTIVEC */ 910 - 911 - #ifdef CONFIG_VSX 912 - /* 913 - * load_up_vsx(unused, unused, tsk) 914 - * Disable VSX for the task which had it previously, 915 - * and save its vector registers in its thread_struct. 916 - * Reuse the fp and vsx saves, but first check to see if they have 917 - * been saved already. 918 - * On entry: r13 == 'current' && last_task_used_vsx != 'current' 919 - */ 920 - _STATIC(load_up_vsx) 921 - /* Load FP and VSX registers if they haven't been done yet */ 922 - andi. r5,r12,MSR_FP 923 - beql+ load_up_fpu /* skip if already loaded */ 924 - andis. r5,r12,MSR_VEC@h 925 - beql+ load_up_altivec /* skip if already loaded */ 926 - 927 - #ifndef CONFIG_SMP 928 - ld r3,last_task_used_vsx@got(r2) 929 - ld r4,0(r3) 930 - cmpdi 0,r4,0 931 - beq 1f 932 - /* Disable VSX for last_task_used_vsx */ 933 - addi r4,r4,THREAD 934 - ld r5,PT_REGS(r4) 935 - ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 936 - lis r6,MSR_VSX@h 937 - andc r6,r4,r6 938 - std r6,_MSR-STACK_FRAME_OVERHEAD(r5) 939 - 1: 940 - #endif /* CONFIG_SMP */ 941 - ld r4,PACACURRENT(r13) 942 - addi r4,r4,THREAD /* Get THREAD */ 943 - li r6,1 944 - stw r6,THREAD_USED_VSR(r4) /* ... also set thread used vsr */ 945 - /* enable use of VSX after return */ 946 - oris r12,r12,MSR_VSX@h 947 - std r12,_MSR(r1) 948 - #ifndef CONFIG_SMP 949 - /* Update last_task_used_math to 'current' */ 950 - ld r4,PACACURRENT(r13) 951 - std r4,0(r3) 952 - #endif /* CONFIG_SMP */ 953 - b fast_exception_return 954 - #endif /* CONFIG_VSX */ 955 - 956 - /* 957 - * Hash table stuff 958 - */ 959 - .align 7 960 - _STATIC(do_hash_page) 961 - std r3,_DAR(r1) 962 - std r4,_DSISR(r1) 963 - 964 - andis. r0,r4,0xa450 /* weird error? */ 965 - bne- handle_page_fault /* if not, try to insert a HPTE */ 966 - BEGIN_FTR_SECTION 967 - andis. r0,r4,0x0020 /* Is it a segment table fault? */ 968 - bne- do_ste_alloc /* If so handle it */ 969 - END_FTR_SECTION_IFCLR(CPU_FTR_SLB) 970 - 971 - /* 972 - * On iSeries, we soft-disable interrupts here, then 973 - * hard-enable interrupts so that the hash_page code can spin on 974 - * the hash_table_lock without problems on a shared processor. 975 - */ 976 - DISABLE_INTS 977 - 978 - /* 979 - * Currently, trace_hardirqs_off() will be called by DISABLE_INTS 980 - * and will clobber volatile registers when irq tracing is enabled 981 - * so we need to reload them. It may be possible to be smarter here 982 - * and move the irq tracing elsewhere but let's keep it simple for 983 - * now 984 - */ 985 - #ifdef CONFIG_TRACE_IRQFLAGS 986 - ld r3,_DAR(r1) 987 - ld r4,_DSISR(r1) 988 - ld r5,_TRAP(r1) 989 - ld r12,_MSR(r1) 990 - clrrdi r5,r5,4 991 - #endif /* CONFIG_TRACE_IRQFLAGS */ 992 - /* 993 - * We need to set the _PAGE_USER bit if MSR_PR is set or if we are 994 - * accessing a userspace segment (even from the kernel). We assume 995 - * kernel addresses always have the high bit set. 996 - */ 997 - rlwinm r4,r4,32-25+9,31-9,31-9 /* DSISR_STORE -> _PAGE_RW */ 998 - rotldi r0,r3,15 /* Move high bit into MSR_PR posn */ 999 - orc r0,r12,r0 /* MSR_PR | ~high_bit */ 1000 - rlwimi r4,r0,32-13,30,30 /* becomes _PAGE_USER access bit */ 1001 - ori r4,r4,1 /* add _PAGE_PRESENT */ 1002 - rlwimi r4,r5,22+2,31-2,31-2 /* Set _PAGE_EXEC if trap is 0x400 */ 1003 - 1004 - /* 1005 - * r3 contains the faulting address 1006 - * r4 contains the required access permissions 1007 - * r5 contains the trap number 1008 - * 1009 - * at return r3 = 0 for success 1010 - */ 1011 - bl .hash_page /* build HPTE if possible */ 1012 - cmpdi r3,0 /* see if hash_page succeeded */ 1013 - 1014 - BEGIN_FW_FTR_SECTION 1015 - /* 1016 - * If we had interrupts soft-enabled at the point where the 1017 - * DSI/ISI occurred, and an interrupt came in during hash_page, 1018 - * handle it now. 1019 - * We jump to ret_from_except_lite rather than fast_exception_return 1020 - * because ret_from_except_lite will check for and handle pending 1021 - * interrupts if necessary. 1022 - */ 1023 - beq 13f 1024 - END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) 1025 - 1026 - BEGIN_FW_FTR_SECTION 1027 - /* 1028 - * Here we have interrupts hard-disabled, so it is sufficient 1029 - * to restore paca->{soft,hard}_enable and get out. 1030 - */ 1031 - beq fast_exc_return_irq /* Return from exception on success */ 1032 - END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) 1033 - 1034 - /* For a hash failure, we don't bother re-enabling interrupts */ 1035 - ble- 12f 1036 - 1037 - /* 1038 - * hash_page couldn't handle it, set soft interrupt enable back 1039 - * to what it was before the trap. Note that .raw_local_irq_restore 1040 - * handles any interrupts pending at this point. 1041 - */ 1042 - ld r3,SOFTE(r1) 1043 - TRACE_AND_RESTORE_IRQ_PARTIAL(r3, 11f) 1044 - bl .raw_local_irq_restore 1045 - b 11f 1046 - 1047 - /* Here we have a page fault that hash_page can't handle. */ 1048 - handle_page_fault: 1049 - ENABLE_INTS 1050 - 11: ld r4,_DAR(r1) 1051 - ld r5,_DSISR(r1) 1052 - addi r3,r1,STACK_FRAME_OVERHEAD 1053 - bl .do_page_fault 1054 - cmpdi r3,0 1055 - beq+ 13f 1056 - bl .save_nvgprs 1057 - mr r5,r3 1058 - addi r3,r1,STACK_FRAME_OVERHEAD 1059 - lwz r4,_DAR(r1) 1060 - bl .bad_page_fault 1061 - b .ret_from_except 1062 - 1063 - 13: b .ret_from_except_lite 1064 - 1065 - /* We have a page fault that hash_page could handle but HV refused 1066 - * the PTE insertion 1067 - */ 1068 - 12: bl .save_nvgprs 1069 - mr r5,r3 1070 - addi r3,r1,STACK_FRAME_OVERHEAD 1071 - ld r4,_DAR(r1) 1072 - bl .low_hash_fault 1073 - b .ret_from_except 1074 - 1075 - /* here we have a segment miss */ 1076 - do_ste_alloc: 1077 - bl .ste_allocate /* try to insert stab entry */ 1078 - cmpdi r3,0 1079 - bne- handle_page_fault 1080 - b fast_exception_return 1081 - 1082 - /* 1083 - * r13 points to the PACA, r9 contains the saved CR, 1084 - * r11 and r12 contain the saved SRR0 and SRR1. 1085 - * r9 - r13 are saved in paca->exslb. 1086 - * We assume we aren't going to take any exceptions during this procedure. 1087 - * We assume (DAR >> 60) == 0xc. 1088 - */ 1089 - .align 7 1090 - _GLOBAL(do_stab_bolted) 1091 - stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */ 1092 - std r11,PACA_EXSLB+EX_SRR0(r13) /* save SRR0 in exc. frame */ 1093 - 1094 - /* Hash to the primary group */ 1095 - ld r10,PACASTABVIRT(r13) 1096 - mfspr r11,SPRN_DAR 1097 - srdi r11,r11,28 1098 - rldimi r10,r11,7,52 /* r10 = first ste of the group */ 1099 - 1100 - /* Calculate VSID */ 1101 - /* This is a kernel address, so protovsid = ESID */ 1102 - ASM_VSID_SCRAMBLE(r11, r9, 256M) 1103 - rldic r9,r11,12,16 /* r9 = vsid << 12 */ 1104 - 1105 - /* Search the primary group for a free entry */ 1106 - 1: ld r11,0(r10) /* Test valid bit of the current ste */ 1107 - andi. r11,r11,0x80 1108 - beq 2f 1109 - addi r10,r10,16 1110 - andi. r11,r10,0x70 1111 - bne 1b 1112 - 1113 - /* Stick for only searching the primary group for now. */ 1114 - /* At least for now, we use a very simple random castout scheme */ 1115 - /* Use the TB as a random number ; OR in 1 to avoid entry 0 */ 1116 - mftb r11 1117 - rldic r11,r11,4,57 /* r11 = (r11 << 4) & 0x70 */ 1118 - ori r11,r11,0x10 1119 - 1120 - /* r10 currently points to an ste one past the group of interest */ 1121 - /* make it point to the randomly selected entry */ 1122 - subi r10,r10,128 1123 - or r10,r10,r11 /* r10 is the entry to invalidate */ 1124 - 1125 - isync /* mark the entry invalid */ 1126 - ld r11,0(r10) 1127 - rldicl r11,r11,56,1 /* clear the valid bit */ 1128 - rotldi r11,r11,8 1129 - std r11,0(r10) 1130 - sync 1131 - 1132 - clrrdi r11,r11,28 /* Get the esid part of the ste */ 1133 - slbie r11 1134 - 1135 - 2: std r9,8(r10) /* Store the vsid part of the ste */ 1136 - eieio 1137 - 1138 - mfspr r11,SPRN_DAR /* Get the new esid */ 1139 - clrrdi r11,r11,28 /* Permits a full 32b of ESID */ 1140 - ori r11,r11,0x90 /* Turn on valid and kp */ 1141 - std r11,0(r10) /* Put new entry back into the stab */ 1142 - 1143 - sync 1144 - 1145 - /* All done -- return from exception. */ 1146 - lwz r9,PACA_EXSLB+EX_CCR(r13) /* get saved CR */ 1147 - ld r11,PACA_EXSLB+EX_SRR0(r13) /* get saved SRR0 */ 1148 - 1149 - andi. r10,r12,MSR_RI 1150 - beq- unrecov_slb 1151 - 1152 - mtcrf 0x80,r9 /* restore CR */ 1153 - 1154 - mfmsr r10 1155 - clrrdi r10,r10,2 1156 - mtmsrd r10,1 1157 - 1158 - mtspr SPRN_SRR0,r11 1159 - mtspr SPRN_SRR1,r12 1160 - ld r9,PACA_EXSLB+EX_R9(r13) 1161 - ld r10,PACA_EXSLB+EX_R10(r13) 1162 - ld r11,PACA_EXSLB+EX_R11(r13) 1163 - ld r12,PACA_EXSLB+EX_R12(r13) 1164 - ld r13,PACA_EXSLB+EX_R13(r13) 1165 - rfid 1166 - b . /* prevent speculative execution */ 1167 - 1168 - /* 1169 - * Space for CPU0's segment table. 1170 - * 1171 - * On iSeries, the hypervisor must fill in at least one entry before 1172 - * we get control (with relocate on). The address is given to the hv 1173 - * as a page number (see xLparMap below), so this must be at a 1174 - * fixed address (the linker can't compute (u64)&initial_stab >> 1175 - * PAGE_SHIFT). 1176 - */ 1177 - . = STAB0_OFFSET /* 0x6000 */ 1178 - .globl initial_stab 1179 - initial_stab: 1180 - .space 4096 1181 - 1182 - #ifdef CONFIG_PPC_PSERIES 1183 - /* 1184 - * Data area reserved for FWNMI option. 1185 - * This address (0x7000) is fixed by the RPA. 1186 - */ 1187 - .= 0x7000 1188 - .globl fwnmi_data_area 1189 - fwnmi_data_area: 1190 - #endif /* CONFIG_PPC_PSERIES */ 1191 - 1192 - /* iSeries does not use the FWNMI stuff, so it is safe to put 1193 - * this here, even if we later allow kernels that will boot on 1194 - * both pSeries and iSeries */ 1195 - #ifdef CONFIG_PPC_ISERIES 1196 - . = LPARMAP_PHYS 1197 - .globl xLparMap 1198 - xLparMap: 1199 - .quad HvEsidsToMap /* xNumberEsids */ 1200 - .quad HvRangesToMap /* xNumberRanges */ 1201 - .quad STAB0_PAGE /* xSegmentTableOffs */ 1202 - .zero 40 /* xRsvd */ 1203 - /* xEsids (HvEsidsToMap entries of 2 quads) */ 1204 - .quad PAGE_OFFSET_ESID /* xKernelEsid */ 1205 - .quad PAGE_OFFSET_VSID /* xKernelVsid */ 1206 - .quad VMALLOC_START_ESID /* xKernelEsid */ 1207 - .quad VMALLOC_START_VSID /* xKernelVsid */ 1208 - /* xRanges (HvRangesToMap entries of 3 quads) */ 1209 - .quad HvPagesToMap /* xPages */ 1210 - .quad 0 /* xOffset */ 1211 - .quad PAGE_OFFSET_VSID << (SID_SHIFT - HW_PAGE_SHIFT) /* xVPN */ 1212 - 1213 - #endif /* CONFIG_PPC_ISERIES */ 1214 - 1215 - #ifdef CONFIG_PPC_PSERIES 1216 - . = 0x8000 1217 - #endif /* CONFIG_PPC_PSERIES */ 1218 177 1219 178 /* 1220 179 * On pSeries and most other platforms, secondary processors spin
+5 -5
arch/powerpc/kernel/head_booke.h
··· 256 256 * off DE in the DSRR1 value and clearing the debug status. \ 257 257 */ \ 258 258 mfspr r10,SPRN_DBSR; /* check single-step/branch taken */ \ 259 - andis. r10,r10,DBSR_IC@h; \ 259 + andis. r10,r10,(DBSR_IC|DBSR_BT)@h; \ 260 260 beq+ 2f; \ 261 261 \ 262 262 lis r10,KERNELBASE@h; /* check if exception in vectors */ \ ··· 271 271 \ 272 272 /* here it looks like we got an inappropriate debug exception. */ \ 273 273 1: rlwinm r9,r9,0,~MSR_DE; /* clear DE in the CDRR1 value */ \ 274 - lis r10,DBSR_IC@h; /* clear the IC event */ \ 274 + lis r10,(DBSR_IC|DBSR_BT)@h; /* clear the IC event */ \ 275 275 mtspr SPRN_DBSR,r10; \ 276 276 /* restore state and get out */ \ 277 277 lwz r10,_CCR(r11); \ ··· 309 309 * off DE in the CSRR1 value and clearing the debug status. \ 310 310 */ \ 311 311 mfspr r10,SPRN_DBSR; /* check single-step/branch taken */ \ 312 - andis. r10,r10,DBSR_IC@h; \ 312 + andis. r10,r10,(DBSR_IC|DBSR_BT)@h; \ 313 313 beq+ 2f; \ 314 314 \ 315 315 lis r10,KERNELBASE@h; /* check if exception in vectors */ \ ··· 317 317 cmplw r12,r10; \ 318 318 blt+ 2f; /* addr below exception vectors */ \ 319 319 \ 320 - lis r10,DebugCrit@h; \ 320 + lis r10,DebugCrit@h; \ 321 321 ori r10,r10,DebugCrit@l; \ 322 322 cmplw r12,r10; \ 323 323 bgt+ 2f; /* addr above exception vectors */ \ 324 324 \ 325 325 /* here it looks like we got an inappropriate debug exception. */ \ 326 326 1: rlwinm r9,r9,0,~MSR_DE; /* clear DE in the CSRR1 value */ \ 327 - lis r10,DBSR_IC@h; /* clear the IC event */ \ 327 + lis r10,(DBSR_IC|DBSR_BT)@h; /* clear the IC event */ \ 328 328 mtspr SPRN_DBSR,r10; \ 329 329 /* restore state and get out */ \ 330 330 lwz r10,_CCR(r11); \
+70 -61
arch/powerpc/kernel/irq.c
··· 118 118 if (!en) 119 119 return; 120 120 121 + #ifdef CONFIG_PPC_STD_MMU_64 121 122 if (firmware_has_feature(FW_FEATURE_ISERIES)) { 122 123 /* 123 124 * Do we need to disable preemption here? Not really: in the ··· 136 135 if (local_paca->lppaca_ptr->int_dword.any_int) 137 136 iseries_handle_interrupts(); 138 137 } 138 + #endif /* CONFIG_PPC_STD_MMU_64 */ 139 139 140 140 if (test_perf_counter_pending()) { 141 141 clear_perf_counter_pending(); ··· 256 254 } 257 255 #endif 258 256 257 + #ifdef CONFIG_IRQSTACKS 258 + static inline void handle_one_irq(unsigned int irq) 259 + { 260 + struct thread_info *curtp, *irqtp; 261 + unsigned long saved_sp_limit; 262 + struct irq_desc *desc; 263 + 264 + /* Switch to the irq stack to handle this */ 265 + curtp = current_thread_info(); 266 + irqtp = hardirq_ctx[smp_processor_id()]; 267 + 268 + if (curtp == irqtp) { 269 + /* We're already on the irq stack, just handle it */ 270 + generic_handle_irq(irq); 271 + return; 272 + } 273 + 274 + desc = irq_desc + irq; 275 + saved_sp_limit = current->thread.ksp_limit; 276 + 277 + irqtp->task = curtp->task; 278 + irqtp->flags = 0; 279 + 280 + /* Copy the softirq bits in preempt_count so that the 281 + * softirq checks work in the hardirq context. */ 282 + irqtp->preempt_count = (irqtp->preempt_count & ~SOFTIRQ_MASK) | 283 + (curtp->preempt_count & SOFTIRQ_MASK); 284 + 285 + current->thread.ksp_limit = (unsigned long)irqtp + 286 + _ALIGN_UP(sizeof(struct thread_info), 16); 287 + 288 + call_handle_irq(irq, desc, irqtp, desc->handle_irq); 289 + current->thread.ksp_limit = saved_sp_limit; 290 + irqtp->task = NULL; 291 + 292 + /* Set any flag that may have been set on the 293 + * alternate stack 294 + */ 295 + if (irqtp->flags) 296 + set_bits(irqtp->flags, &curtp->flags); 297 + } 298 + #else 299 + static inline void handle_one_irq(unsigned int irq) 300 + { 301 + generic_handle_irq(irq); 302 + } 303 + #endif 304 + 305 + static inline void check_stack_overflow(void) 306 + { 307 + #ifdef CONFIG_DEBUG_STACKOVERFLOW 308 + long sp; 309 + 310 + sp = __get_SP() & (THREAD_SIZE-1); 311 + 312 + /* check for stack overflow: is there less than 2KB free? */ 313 + if (unlikely(sp < (sizeof(struct thread_info) + 2048))) { 314 + printk("do_IRQ: stack overflow: %ld\n", 315 + sp - sizeof(struct thread_info)); 316 + dump_stack(); 317 + } 318 + #endif 319 + } 320 + 259 321 void do_IRQ(struct pt_regs *regs) 260 322 { 261 323 struct pt_regs *old_regs = set_irq_regs(regs); 262 324 unsigned int irq; 263 - #ifdef CONFIG_IRQSTACKS 264 - struct thread_info *curtp, *irqtp; 265 - #endif 266 325 267 326 irq_enter(); 268 327 269 - #ifdef CONFIG_DEBUG_STACKOVERFLOW 270 - /* Debugging check for stack overflow: is there less than 2KB free? */ 271 - { 272 - long sp; 328 + check_stack_overflow(); 273 329 274 - sp = __get_SP() & (THREAD_SIZE-1); 275 - 276 - if (unlikely(sp < (sizeof(struct thread_info) + 2048))) { 277 - printk("do_IRQ: stack overflow: %ld\n", 278 - sp - sizeof(struct thread_info)); 279 - dump_stack(); 280 - } 281 - } 282 - #endif 283 - 284 - /* 285 - * Every platform is required to implement ppc_md.get_irq. 286 - * This function will either return an irq number or NO_IRQ to 287 - * indicate there are no more pending. 288 - * The value NO_IRQ_IGNORE is for buggy hardware and means that this 289 - * IRQ has already been handled. -- Tom 290 - */ 291 330 irq = ppc_md.get_irq(); 292 331 293 - if (irq != NO_IRQ && irq != NO_IRQ_IGNORE) { 294 - #ifdef CONFIG_IRQSTACKS 295 - /* Switch to the irq stack to handle this */ 296 - curtp = current_thread_info(); 297 - irqtp = hardirq_ctx[smp_processor_id()]; 298 - if (curtp != irqtp) { 299 - struct irq_desc *desc = irq_desc + irq; 300 - void *handler = desc->handle_irq; 301 - unsigned long saved_sp_limit = current->thread.ksp_limit; 302 - if (handler == NULL) 303 - handler = &__do_IRQ; 304 - irqtp->task = curtp->task; 305 - irqtp->flags = 0; 306 - 307 - /* Copy the softirq bits in preempt_count so that the 308 - * softirq checks work in the hardirq context. 309 - */ 310 - irqtp->preempt_count = 311 - (irqtp->preempt_count & ~SOFTIRQ_MASK) | 312 - (curtp->preempt_count & SOFTIRQ_MASK); 313 - 314 - current->thread.ksp_limit = (unsigned long)irqtp + 315 - _ALIGN_UP(sizeof(struct thread_info), 16); 316 - call_handle_irq(irq, desc, irqtp, handler); 317 - current->thread.ksp_limit = saved_sp_limit; 318 - irqtp->task = NULL; 319 - 320 - 321 - /* Set any flag that may have been set on the 322 - * alternate stack 323 - */ 324 - if (irqtp->flags) 325 - set_bits(irqtp->flags, &curtp->flags); 326 - } else 327 - #endif 328 - generic_handle_irq(irq); 329 - } else if (irq != NO_IRQ_IGNORE) 332 + if (irq != NO_IRQ && irq != NO_IRQ_IGNORE) 333 + handle_one_irq(irq); 334 + else if (irq != NO_IRQ_IGNORE) 330 335 /* That's not SMP safe ... but who cares ? */ 331 336 ppc_spurious_interrupts++; 332 337
+38 -2
arch/powerpc/kernel/lparcfg.c
··· 169 169 u8 unallocated_weight; 170 170 u16 active_procs_in_pool; 171 171 u16 active_system_procs; 172 + u16 phys_platform_procs; 173 + u32 max_proc_cap_avail; 174 + u32 entitled_proc_cap_avail; 172 175 }; 173 176 174 177 /* ··· 193 190 * XX - Unallocated Variable Processor Capacity Weight. 194 191 * XXXX - Active processors in Physical Processor Pool. 195 192 * XXXX - Processors active on platform. 193 + * R8 (QQQQRRRRRRSSSSSS). if ibm,partition-performance-parameters-level >= 1 194 + * XXXX - Physical platform procs allocated to virtualization. 195 + * XXXXXX - Max procs capacity % available to the partitions pool. 196 + * XXXXXX - Entitled procs capacity % available to the 197 + * partitions pool. 196 198 */ 197 199 static unsigned int h_get_ppp(struct hvcall_ppp_data *ppp_data) 198 200 { 199 201 unsigned long rc; 200 - unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; 202 + unsigned long retbuf[PLPAR_HCALL9_BUFSIZE]; 201 203 202 - rc = plpar_hcall(H_GET_PPP, retbuf); 204 + rc = plpar_hcall9(H_GET_PPP, retbuf); 203 205 204 206 ppp_data->entitlement = retbuf[0]; 205 207 ppp_data->unallocated_entitlement = retbuf[1]; ··· 217 209 ppp_data->unallocated_weight = (retbuf[3] >> 4 * 8) & 0xff; 218 210 ppp_data->active_procs_in_pool = (retbuf[3] >> 2 * 8) & 0xffff; 219 211 ppp_data->active_system_procs = retbuf[3] & 0xffff; 212 + 213 + ppp_data->phys_platform_procs = retbuf[4] >> 6 * 8; 214 + ppp_data->max_proc_cap_avail = (retbuf[4] >> 3 * 8) & 0xffffff; 215 + ppp_data->entitled_proc_cap_avail = retbuf[4] & 0xffffff; 220 216 221 217 return rc; 222 218 } ··· 246 234 static void parse_ppp_data(struct seq_file *m) 247 235 { 248 236 struct hvcall_ppp_data ppp_data; 237 + struct device_node *root; 238 + const int *perf_level; 249 239 int rc; 250 240 251 241 rc = h_get_ppp(&ppp_data); ··· 281 267 seq_printf(m, "capped=%d\n", ppp_data.capped); 282 268 seq_printf(m, "unallocated_capacity=%lld\n", 283 269 ppp_data.unallocated_entitlement); 270 + 271 + /* The last bits of information returned from h_get_ppp are only 272 + * valid if the ibm,partition-performance-parameters-level 273 + * property is >= 1. 274 + */ 275 + root = of_find_node_by_path("/"); 276 + if (root) { 277 + perf_level = of_get_property(root, 278 + "ibm,partition-performance-parameters-level", 279 + NULL); 280 + if (perf_level && (*perf_level >= 1)) { 281 + seq_printf(m, 282 + "physical_procs_allocated_to_virtualization=%d\n", 283 + ppp_data.phys_platform_procs); 284 + seq_printf(m, "max_proc_capacity_available=%d\n", 285 + ppp_data.max_proc_cap_avail); 286 + seq_printf(m, "entitled_proc_capacity_available=%d\n", 287 + ppp_data.entitled_proc_cap_avail); 288 + } 289 + 290 + of_node_put(root); 291 + } 284 292 } 285 293 286 294 /**
-92
arch/powerpc/kernel/misc_64.S
··· 457 457 isync 458 458 blr 459 459 460 - #ifdef CONFIG_ALTIVEC 461 - 462 - #if 0 /* this has no callers for now */ 463 - /* 464 - * disable_kernel_altivec() 465 - * Disable the VMX. 466 - */ 467 - _GLOBAL(disable_kernel_altivec) 468 - mfmsr r3 469 - rldicl r0,r3,(63-MSR_VEC_LG),1 470 - rldicl r3,r0,(MSR_VEC_LG+1),0 471 - mtmsrd r3 /* disable use of VMX now */ 472 - isync 473 - blr 474 - #endif /* 0 */ 475 - 476 - /* 477 - * giveup_altivec(tsk) 478 - * Disable VMX for the task given as the argument, 479 - * and save the vector registers in its thread_struct. 480 - * Enables the VMX for use in the kernel on return. 481 - */ 482 - _GLOBAL(giveup_altivec) 483 - mfmsr r5 484 - oris r5,r5,MSR_VEC@h 485 - mtmsrd r5 /* enable use of VMX now */ 486 - isync 487 - cmpdi 0,r3,0 488 - beqlr- /* if no previous owner, done */ 489 - addi r3,r3,THREAD /* want THREAD of task */ 490 - ld r5,PT_REGS(r3) 491 - cmpdi 0,r5,0 492 - SAVE_32VRS(0,r4,r3) 493 - mfvscr vr0 494 - li r4,THREAD_VSCR 495 - stvx vr0,r4,r3 496 - beq 1f 497 - ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 498 - #ifdef CONFIG_VSX 499 - BEGIN_FTR_SECTION 500 - lis r3,(MSR_VEC|MSR_VSX)@h 501 - FTR_SECTION_ELSE 502 - lis r3,MSR_VEC@h 503 - ALT_FTR_SECTION_END_IFSET(CPU_FTR_VSX) 504 - #else 505 - lis r3,MSR_VEC@h 506 - #endif 507 - andc r4,r4,r3 /* disable FP for previous task */ 508 - std r4,_MSR-STACK_FRAME_OVERHEAD(r5) 509 - 1: 510 - #ifndef CONFIG_SMP 511 - li r5,0 512 - ld r4,last_task_used_altivec@got(r2) 513 - std r5,0(r4) 514 - #endif /* CONFIG_SMP */ 515 - blr 516 - 517 - #endif /* CONFIG_ALTIVEC */ 518 - 519 - #ifdef CONFIG_VSX 520 - /* 521 - * __giveup_vsx(tsk) 522 - * Disable VSX for the task given as the argument. 523 - * Does NOT save vsx registers. 524 - * Enables the VSX for use in the kernel on return. 525 - */ 526 - _GLOBAL(__giveup_vsx) 527 - mfmsr r5 528 - oris r5,r5,MSR_VSX@h 529 - mtmsrd r5 /* enable use of VSX now */ 530 - isync 531 - 532 - cmpdi 0,r3,0 533 - beqlr- /* if no previous owner, done */ 534 - addi r3,r3,THREAD /* want THREAD of task */ 535 - ld r5,PT_REGS(r3) 536 - cmpdi 0,r5,0 537 - beq 1f 538 - ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 539 - lis r3,MSR_VSX@h 540 - andc r4,r4,r3 /* disable VSX for previous task */ 541 - std r4,_MSR-STACK_FRAME_OVERHEAD(r5) 542 - 1: 543 - #ifndef CONFIG_SMP 544 - li r5,0 545 - ld r4,last_task_used_vsx@got(r2) 546 - std r5,0(r4) 547 - #endif /* CONFIG_SMP */ 548 - blr 549 - 550 - #endif /* CONFIG_VSX */ 551 - 552 460 /* kexec_wait(phys_cpu) 553 461 * 554 462 * wait for the flag to change, indicating this kernel is going away but
+13 -1
arch/powerpc/kernel/paca.c
··· 18 18 * field correctly */ 19 19 extern unsigned long __toc_start; 20 20 21 + #ifdef CONFIG_PPC_BOOK3S 22 + 21 23 /* 22 24 * The structure which the hypervisor knows about - this structure 23 25 * should not cross a page boundary. The vpa_init/register_vpa call ··· 43 41 }, 44 42 }; 45 43 44 + #endif /* CONFIG_PPC_BOOK3S */ 45 + 46 + #ifdef CONFIG_PPC_STD_MMU_64 47 + 46 48 /* 47 49 * 3 persistent SLBs are registered here. The buffer will be zero 48 50 * initially, hence will all be invaild until we actually write them. ··· 57 51 .buffer_length = sizeof(struct slb_shadow), 58 52 }, 59 53 }; 54 + 55 + #endif /* CONFIG_PPC_STD_MMU_64 */ 60 56 61 57 /* The Paca is an array with one entry per processor. Each contains an 62 58 * lppaca, which contains the information shared between the ··· 85 77 for (cpu = 0; cpu < NR_CPUS; cpu++) { 86 78 struct paca_struct *new_paca = &paca[cpu]; 87 79 80 + #ifdef CONFIG_PPC_BOOK3S 88 81 new_paca->lppaca_ptr = &lppaca[cpu]; 82 + #endif 89 83 new_paca->lock_token = 0x8000; 90 84 new_paca->paca_index = cpu; 91 85 new_paca->kernel_toc = kernel_toc; 92 86 new_paca->kernelbase = (unsigned long) _stext; 93 87 new_paca->kernel_msr = MSR_KERNEL; 94 88 new_paca->hw_cpu_id = 0xffff; 95 - new_paca->slb_shadow_ptr = &slb_shadow[cpu]; 96 89 new_paca->__current = &init_task; 90 + #ifdef CONFIG_PPC_STD_MMU_64 91 + new_paca->slb_shadow_ptr = &slb_shadow[cpu]; 92 + #endif /* CONFIG_PPC_STD_MMU_64 */ 97 93 98 94 } 99 95 }
+1 -2
arch/powerpc/kernel/pci-common.c
··· 1505 1505 * rest of the code later, for now, keep it as-is as our main 1506 1506 * resource allocation function doesn't deal with sub-trees yet. 1507 1507 */ 1508 - void __devinit pcibios_claim_one_bus(struct pci_bus *bus) 1508 + void pcibios_claim_one_bus(struct pci_bus *bus) 1509 1509 { 1510 1510 struct pci_dev *dev; 1511 1511 struct pci_bus *child_bus; ··· 1533 1533 list_for_each_entry(child_bus, &bus->children, node) 1534 1534 pcibios_claim_one_bus(child_bus); 1535 1535 } 1536 - EXPORT_SYMBOL_GPL(pcibios_claim_one_bus); 1537 1536 1538 1537 1539 1538 /* pcibios_finish_adding_to_bus
-19
arch/powerpc/kernel/pci_32.c
··· 33 33 34 34 void pcibios_make_OF_bus_map(void); 35 35 36 - static void fixup_broken_pcnet32(struct pci_dev* dev); 37 36 static void fixup_cpc710_pci64(struct pci_dev* dev); 38 37 #ifdef CONFIG_PPC_OF 39 38 static u8* pci_to_OF_bus_map; ··· 69 70 } 70 71 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MOTOROLA, PCI_ANY_ID, fixup_hide_host_resource_fsl); 71 72 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, fixup_hide_host_resource_fsl); 72 - 73 - static void 74 - fixup_broken_pcnet32(struct pci_dev* dev) 75 - { 76 - if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) { 77 - dev->vendor = PCI_VENDOR_ID_AMD; 78 - pci_write_config_word(dev, PCI_VENDOR_ID, PCI_VENDOR_ID_AMD); 79 - } 80 - } 81 - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TRIDENT, PCI_ANY_ID, fixup_broken_pcnet32); 82 73 83 74 static void 84 75 fixup_cpc710_pci64(struct pci_dev* dev) ··· 435 446 } 436 447 437 448 subsys_initcall(pcibios_init); 438 - 439 - /* the next one is stolen from the alpha port... */ 440 - void __init 441 - pcibios_update_irq(struct pci_dev *dev, int irq) 442 - { 443 - pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); 444 - /* XXX FIXME - update OF device tree node interrupt property */ 445 - } 446 449 447 450 static struct pci_controller* 448 451 pci_bus_to_hose(int bus)
+6 -11
arch/powerpc/kernel/pci_64.c
··· 43 43 unsigned long pci_io_base = ISA_IO_BASE; 44 44 EXPORT_SYMBOL(pci_io_base); 45 45 46 - static void fixup_broken_pcnet32(struct pci_dev* dev) 47 - { 48 - if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) { 49 - dev->vendor = PCI_VENDOR_ID_AMD; 50 - pci_write_config_word(dev, PCI_VENDOR_ID, PCI_VENDOR_ID_AMD); 51 - } 52 - } 53 - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TRIDENT, PCI_ANY_ID, fixup_broken_pcnet32); 54 - 55 - 56 46 static u32 get_int_prop(struct device_node *np, const char *name, u32 def) 57 47 { 58 48 const u32 *prop; ··· 420 430 * so flushing the hash table is the only sane way to make sure 421 431 * that no hash entries are covering that removed bridge area 422 432 * while still allowing other busses overlapping those pages 433 + * 434 + * Note: If we ever support P2P hotplug on Book3E, we'll have 435 + * to do an appropriate TLB flush here too 423 436 */ 424 437 if (bus->self) { 425 438 struct resource *res = bus->resource[0]; ··· 430 437 pr_debug("IO unmapping for PCI-PCI bridge %s\n", 431 438 pci_name(bus->self)); 432 439 440 + #ifdef CONFIG_PPC_STD_MMU_64 433 441 __flush_hash_table_range(&init_mm, res->start + _IO_BASE, 434 442 res->end + _IO_BASE + 1); 443 + #endif 435 444 return 0; 436 445 } 437 446 ··· 506 511 pr_debug("IO mapping for PHB %s\n", hose->dn->full_name); 507 512 pr_debug(" phys=0x%016llx, virt=0x%p (alloc=0x%p)\n", 508 513 hose->io_base_phys, hose->io_base_virt, hose->io_base_alloc); 509 - pr_debug(" size=0x%016lx (alloc=0x%016lx)\n", 514 + pr_debug(" size=0x%016llx (alloc=0x%016lx)\n", 510 515 hose->pci_io_size, size_page); 511 516 512 517 /* Establish the mapping */
+1 -27
arch/powerpc/kernel/pci_dn.c
··· 27 27 #include <asm/io.h> 28 28 #include <asm/prom.h> 29 29 #include <asm/pci-bridge.h> 30 - #include <asm/pSeries_reconfig.h> 31 30 #include <asm/ppc-pci.h> 32 31 #include <asm/firmware.h> 33 32 ··· 34 35 * Traverse_func that inits the PCI fields of the device node. 35 36 * NOTE: this *must* be done before read/write config to the device. 36 37 */ 37 - static void * __devinit update_dn_pci_info(struct device_node *dn, void *data) 38 + void * __devinit update_dn_pci_info(struct device_node *dn, void *data) 38 39 { 39 40 struct pci_controller *phb = data; 40 41 const int *type = ··· 183 184 } 184 185 EXPORT_SYMBOL(fetch_dev_dn); 185 186 186 - static int pci_dn_reconfig_notifier(struct notifier_block *nb, unsigned long action, void *node) 187 - { 188 - struct device_node *np = node; 189 - struct pci_dn *pci = NULL; 190 - int err = NOTIFY_OK; 191 - 192 - switch (action) { 193 - case PSERIES_RECONFIG_ADD: 194 - pci = np->parent->data; 195 - if (pci) 196 - update_dn_pci_info(np, pci->phb); 197 - break; 198 - default: 199 - err = NOTIFY_DONE; 200 - break; 201 - } 202 - return err; 203 - } 204 - 205 - static struct notifier_block pci_dn_reconfig_nb = { 206 - .notifier_call = pci_dn_reconfig_notifier, 207 - }; 208 - 209 187 /** 210 188 * pci_devs_phb_init - Initialize phbs and pci devs under them. 211 189 * ··· 199 223 /* This must be done first so the device nodes have valid pci info! */ 200 224 list_for_each_entry_safe(phb, tmp, &hose_list, list_node) 201 225 pci_devs_phb_init_dynamic(phb); 202 - 203 - pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb); 204 226 }
+1 -1
arch/powerpc/kernel/process.c
··· 650 650 p->thread.ksp_limit = (unsigned long)task_stack_page(p) + 651 651 _ALIGN_UP(sizeof(struct thread_info), 16); 652 652 653 - #ifdef CONFIG_PPC64 653 + #ifdef CONFIG_PPC_STD_MMU_64 654 654 if (cpu_has_feature(CPU_FTR_SLB)) { 655 655 unsigned long sp_vsid; 656 656 unsigned long llp = mmu_psize_defs[mmu_linear_psize].sllp;
+1 -1
arch/powerpc/kernel/prom.c
··· 585 585 ibm_pa_features, ARRAY_SIZE(ibm_pa_features)); 586 586 } 587 587 588 - #ifdef CONFIG_PPC64 588 + #ifdef CONFIG_PPC_STD_MMU_64 589 589 static void __init check_cpu_slb_size(unsigned long node) 590 590 { 591 591 u32 *slb_size_ptr;
+21 -2
arch/powerpc/kernel/ptrace.c
··· 704 704 705 705 if (regs != NULL) { 706 706 #if defined(CONFIG_40x) || defined(CONFIG_BOOKE) 707 + task->thread.dbcr0 &= ~DBCR0_BT; 707 708 task->thread.dbcr0 |= DBCR0_IDM | DBCR0_IC; 708 709 regs->msr |= MSR_DE; 709 710 #else 711 + regs->msr &= ~MSR_BE; 710 712 regs->msr |= MSR_SE; 713 + #endif 714 + } 715 + set_tsk_thread_flag(task, TIF_SINGLESTEP); 716 + } 717 + 718 + void user_enable_block_step(struct task_struct *task) 719 + { 720 + struct pt_regs *regs = task->thread.regs; 721 + 722 + if (regs != NULL) { 723 + #if defined(CONFIG_40x) || defined(CONFIG_BOOKE) 724 + task->thread.dbcr0 &= ~DBCR0_IC; 725 + task->thread.dbcr0 = DBCR0_IDM | DBCR0_BT; 726 + regs->msr |= MSR_DE; 727 + #else 728 + regs->msr &= ~MSR_SE; 729 + regs->msr |= MSR_BE; 711 730 #endif 712 731 } 713 732 set_tsk_thread_flag(task, TIF_SINGLESTEP); ··· 745 726 746 727 if (regs != NULL) { 747 728 #if defined(CONFIG_40x) || defined(CONFIG_BOOKE) 748 - task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_IDM); 729 + task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_BT | DBCR0_IDM); 749 730 regs->msr &= ~MSR_DE; 750 731 #else 751 - regs->msr &= ~MSR_SE; 732 + regs->msr &= ~(MSR_SE | MSR_BE); 752 733 #endif 753 734 } 754 735 clear_tsk_thread_flag(task, TIF_SINGLESTEP);
+2 -8
arch/powerpc/kernel/rtas_pci.c
··· 93 93 { 94 94 struct device_node *busdn, *dn; 95 95 96 - if (bus->self) 97 - busdn = pci_device_to_OF_node(bus->self); 98 - else 99 - busdn = bus->sysdata; /* must be a phb */ 96 + busdn = pci_bus_to_OF_node(bus); 100 97 101 98 /* Search only direct children of the bus */ 102 99 for (dn = busdn->child; dn; dn = dn->sibling) { ··· 137 140 { 138 141 struct device_node *busdn, *dn; 139 142 140 - if (bus->self) 141 - busdn = pci_device_to_OF_node(bus->self); 142 - else 143 - busdn = bus->sysdata; /* must be a phb */ 143 + busdn = pci_bus_to_OF_node(bus); 144 144 145 145 /* Search only direct children of the bus */ 146 146 for (dn = busdn->child; dn; dn = dn->sibling) {
+6
arch/powerpc/kernel/setup_32.c
··· 39 39 #include <asm/serial.h> 40 40 #include <asm/udbg.h> 41 41 #include <asm/mmu_context.h> 42 + #include <asm/swiotlb.h> 42 43 43 44 #include "setup.h" 44 45 ··· 332 331 if (ppc_md.setup_arch) 333 332 ppc_md.setup_arch(); 334 333 if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab); 334 + 335 + #ifdef CONFIG_SWIOTLB 336 + if (ppc_swiotlb_enable) 337 + swiotlb_init(); 338 + #endif 335 339 336 340 paging_init(); 337 341
+10 -1
arch/powerpc/kernel/setup_64.c
··· 61 61 #include <asm/xmon.h> 62 62 #include <asm/udbg.h> 63 63 #include <asm/kexec.h> 64 + #include <asm/swiotlb.h> 64 65 65 66 #include "setup.h" 66 67 ··· 418 417 if (ppc64_caches.iline_size != 0x80) 419 418 printk("ppc64_caches.icache_line_size = 0x%x\n", 420 419 ppc64_caches.iline_size); 420 + #ifdef CONFIG_PPC_STD_MMU_64 421 421 if (htab_address) 422 422 printk("htab_address = 0x%p\n", htab_address); 423 423 printk("htab_hash_mask = 0x%lx\n", htab_hash_mask); 424 + #endif /* CONFIG_PPC_STD_MMU_64 */ 424 425 if (PHYSICAL_START > 0) 425 426 printk("physical_start = 0x%lx\n", 426 427 PHYSICAL_START); ··· 514 511 irqstack_early_init(); 515 512 emergency_stack_init(); 516 513 514 + #ifdef CONFIG_PPC_STD_MMU_64 517 515 stabs_alloc(); 518 - 516 + #endif 519 517 /* set up the bootmem stuff with available memory */ 520 518 do_init_bootmem(); 521 519 sparse_init(); ··· 527 523 528 524 if (ppc_md.setup_arch) 529 525 ppc_md.setup_arch(); 526 + 527 + #ifdef CONFIG_SWIOTLB 528 + if (ppc_swiotlb_enable) 529 + swiotlb_init(); 530 + #endif 530 531 531 532 paging_init(); 532 533 ppc64_boot_msg(0x15, "Setup Done");
+18 -3
arch/powerpc/kernel/time.c
··· 109 109 static struct clock_event_device decrementer_clockevent = { 110 110 .name = "decrementer", 111 111 .rating = 200, 112 - .shift = 16, 112 + .shift = 0, /* To be filled in */ 113 113 .mult = 0, /* To be filled in */ 114 114 .irq = 0, 115 115 .set_next_event = decrementer_set_next_event, ··· 843 843 decrementer_set_next_event(DECREMENTER_MAX, dev); 844 844 } 845 845 846 + static void __init setup_clockevent_multiplier(unsigned long hz) 847 + { 848 + u64 mult, shift = 32; 849 + 850 + while (1) { 851 + mult = div_sc(hz, NSEC_PER_SEC, shift); 852 + if (mult && (mult >> 32UL) == 0UL) 853 + break; 854 + 855 + shift--; 856 + } 857 + 858 + decrementer_clockevent.shift = shift; 859 + decrementer_clockevent.mult = mult; 860 + } 861 + 846 862 static void register_decrementer_clockevent(int cpu) 847 863 { 848 864 struct clock_event_device *dec = &per_cpu(decrementers, cpu).event; ··· 876 860 { 877 861 int cpu = smp_processor_id(); 878 862 879 - decrementer_clockevent.mult = div_sc(ppc_tb_freq, NSEC_PER_SEC, 880 - decrementer_clockevent.shift); 863 + setup_clockevent_multiplier(ppc_tb_freq); 881 864 decrementer_clockevent.max_delta_ns = 882 865 clockevent_delta2ns(DECREMENTER_MAX, &decrementer_clockevent); 883 866 decrementer_clockevent.min_delta_ns =
+124 -6
arch/powerpc/kernel/traps.c
··· 33 33 #include <linux/backlight.h> 34 34 #include <linux/bug.h> 35 35 #include <linux/kdebug.h> 36 + #include <linux/debugfs.h> 36 37 38 + #include <asm/emulated_ops.h> 37 39 #include <asm/pgtable.h> 38 40 #include <asm/uaccess.h> 39 41 #include <asm/system.h> ··· 759 757 760 758 /* Emulate the mfspr rD, PVR. */ 761 759 if ((instword & PPC_INST_MFSPR_PVR_MASK) == PPC_INST_MFSPR_PVR) { 760 + PPC_WARN_EMULATED(mfpvr); 762 761 rd = (instword >> 21) & 0x1f; 763 762 regs->gpr[rd] = mfspr(SPRN_PVR); 764 763 return 0; 765 764 } 766 765 767 766 /* Emulating the dcba insn is just a no-op. */ 768 - if ((instword & PPC_INST_DCBA_MASK) == PPC_INST_DCBA) 767 + if ((instword & PPC_INST_DCBA_MASK) == PPC_INST_DCBA) { 768 + PPC_WARN_EMULATED(dcba); 769 769 return 0; 770 + } 770 771 771 772 /* Emulate the mcrxr insn. */ 772 773 if ((instword & PPC_INST_MCRXR_MASK) == PPC_INST_MCRXR) { 773 774 int shift = (instword >> 21) & 0x1c; 774 775 unsigned long msk = 0xf0000000UL >> shift; 775 776 777 + PPC_WARN_EMULATED(mcrxr); 776 778 regs->ccr = (regs->ccr & ~msk) | ((regs->xer >> shift) & msk); 777 779 regs->xer &= ~0xf0000000UL; 778 780 return 0; 779 781 } 780 782 781 783 /* Emulate load/store string insn. */ 782 - if ((instword & PPC_INST_STRING_GEN_MASK) == PPC_INST_STRING) 784 + if ((instword & PPC_INST_STRING_GEN_MASK) == PPC_INST_STRING) { 785 + PPC_WARN_EMULATED(string); 783 786 return emulate_string_inst(regs, instword); 787 + } 784 788 785 789 /* Emulate the popcntb (Population Count Bytes) instruction. */ 786 790 if ((instword & PPC_INST_POPCNTB_MASK) == PPC_INST_POPCNTB) { 791 + PPC_WARN_EMULATED(popcntb); 787 792 return emulate_popcntb_inst(regs, instword); 788 793 } 789 794 790 795 /* Emulate isel (Integer Select) instruction */ 791 796 if ((instword & PPC_INST_ISEL_MASK) == PPC_INST_ISEL) { 797 + PPC_WARN_EMULATED(isel); 792 798 return emulate_isel(regs, instword); 793 799 } 794 800 ··· 994 984 995 985 #ifdef CONFIG_MATH_EMULATION 996 986 errcode = do_mathemu(regs); 987 + if (errcode >= 0) 988 + PPC_WARN_EMULATED(math); 997 989 998 990 switch (errcode) { 999 991 case 0: ··· 1017 1005 1018 1006 #elif defined(CONFIG_8XX_MINIMAL_FPEMU) 1019 1007 errcode = Soft_emulate_8xx(regs); 1008 + if (errcode >= 0) 1009 + PPC_WARN_EMULATED(8xx); 1010 + 1020 1011 switch (errcode) { 1021 1012 case 0: 1022 1013 emulate_single_step(regs); ··· 1041 1026 1042 1027 void __kprobes DebugException(struct pt_regs *regs, unsigned long debug_status) 1043 1028 { 1044 - if (debug_status & DBSR_IC) { /* instruction completion */ 1029 + /* Hack alert: On BookE, Branch Taken stops on the branch itself, while 1030 + * on server, it stops on the target of the branch. In order to simulate 1031 + * the server behaviour, we thus restart right away with a single step 1032 + * instead of stopping here when hitting a BT 1033 + */ 1034 + if (debug_status & DBSR_BT) { 1035 + regs->msr &= ~MSR_DE; 1036 + 1037 + /* Disable BT */ 1038 + mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) & ~DBCR0_BT); 1039 + /* Clear the BT event */ 1040 + mtspr(SPRN_DBSR, DBSR_BT); 1041 + 1042 + /* Do the single step trick only when coming from userspace */ 1043 + if (user_mode(regs)) { 1044 + current->thread.dbcr0 &= ~DBCR0_BT; 1045 + current->thread.dbcr0 |= DBCR0_IDM | DBCR0_IC; 1046 + regs->msr |= MSR_DE; 1047 + return; 1048 + } 1049 + 1050 + if (notify_die(DIE_SSTEP, "block_step", regs, 5, 1051 + 5, SIGTRAP) == NOTIFY_STOP) { 1052 + return; 1053 + } 1054 + if (debugger_sstep(regs)) 1055 + return; 1056 + } else if (debug_status & DBSR_IC) { /* Instruction complete */ 1045 1057 regs->msr &= ~MSR_DE; 1046 1058 1047 1059 /* Disable instruction completion */ ··· 1084 1042 if (debugger_sstep(regs)) 1085 1043 return; 1086 1044 1087 - if (user_mode(regs)) { 1088 - current->thread.dbcr0 &= ~DBCR0_IC; 1089 - } 1045 + if (user_mode(regs)) 1046 + current->thread.dbcr0 &= ~(DBCR0_IC); 1090 1047 1091 1048 _exception(SIGTRAP, regs, TRAP_TRACE, regs->nip); 1092 1049 } else if (debug_status & (DBSR_DAC1R | DBSR_DAC1W)) { ··· 1129 1088 1130 1089 flush_altivec_to_thread(current); 1131 1090 1091 + PPC_WARN_EMULATED(altivec); 1132 1092 err = emulate_altivec(regs); 1133 1093 if (err == 0) { 1134 1094 regs->nip += 4; /* skip emulated instruction */ ··· 1328 1286 void __init trap_init(void) 1329 1287 { 1330 1288 } 1289 + 1290 + 1291 + #ifdef CONFIG_PPC_EMULATED_STATS 1292 + 1293 + #define WARN_EMULATED_SETUP(type) .type = { .name = #type } 1294 + 1295 + struct ppc_emulated ppc_emulated = { 1296 + #ifdef CONFIG_ALTIVEC 1297 + WARN_EMULATED_SETUP(altivec), 1298 + #endif 1299 + WARN_EMULATED_SETUP(dcba), 1300 + WARN_EMULATED_SETUP(dcbz), 1301 + WARN_EMULATED_SETUP(fp_pair), 1302 + WARN_EMULATED_SETUP(isel), 1303 + WARN_EMULATED_SETUP(mcrxr), 1304 + WARN_EMULATED_SETUP(mfpvr), 1305 + WARN_EMULATED_SETUP(multiple), 1306 + WARN_EMULATED_SETUP(popcntb), 1307 + WARN_EMULATED_SETUP(spe), 1308 + WARN_EMULATED_SETUP(string), 1309 + WARN_EMULATED_SETUP(unaligned), 1310 + #ifdef CONFIG_MATH_EMULATION 1311 + WARN_EMULATED_SETUP(math), 1312 + #elif defined(CONFIG_8XX_MINIMAL_FPEMU) 1313 + WARN_EMULATED_SETUP(8xx), 1314 + #endif 1315 + #ifdef CONFIG_VSX 1316 + WARN_EMULATED_SETUP(vsx), 1317 + #endif 1318 + }; 1319 + 1320 + u32 ppc_warn_emulated; 1321 + 1322 + void ppc_warn_emulated_print(const char *type) 1323 + { 1324 + if (printk_ratelimit()) 1325 + pr_warning("%s used emulated %s instruction\n", current->comm, 1326 + type); 1327 + } 1328 + 1329 + static int __init ppc_warn_emulated_init(void) 1330 + { 1331 + struct dentry *dir, *d; 1332 + unsigned int i; 1333 + struct ppc_emulated_entry *entries = (void *)&ppc_emulated; 1334 + 1335 + if (!powerpc_debugfs_root) 1336 + return -ENODEV; 1337 + 1338 + dir = debugfs_create_dir("emulated_instructions", 1339 + powerpc_debugfs_root); 1340 + if (!dir) 1341 + return -ENOMEM; 1342 + 1343 + d = debugfs_create_u32("do_warn", S_IRUGO | S_IWUSR, dir, 1344 + &ppc_warn_emulated); 1345 + if (!d) 1346 + goto fail; 1347 + 1348 + for (i = 0; i < sizeof(ppc_emulated)/sizeof(*entries); i++) { 1349 + d = debugfs_create_u32(entries[i].name, S_IRUGO | S_IWUSR, dir, 1350 + (u32 *)&entries[i].val.counter); 1351 + if (!d) 1352 + goto fail; 1353 + } 1354 + 1355 + return 0; 1356 + 1357 + fail: 1358 + debugfs_remove_recursive(dir); 1359 + return -ENOMEM; 1360 + } 1361 + 1362 + device_initcall(ppc_warn_emulated_init); 1363 + 1364 + #endif /* CONFIG_PPC_EMULATED_STATS */
+210
arch/powerpc/kernel/vector.S
··· 1 + #include <asm/processor.h> 1 2 #include <asm/ppc_asm.h> 2 3 #include <asm/reg.h> 4 + #include <asm/asm-offsets.h> 5 + #include <asm/cputable.h> 6 + #include <asm/thread_info.h> 7 + #include <asm/page.h> 8 + 9 + /* 10 + * load_up_altivec(unused, unused, tsk) 11 + * Disable VMX for the task which had it previously, 12 + * and save its vector registers in its thread_struct. 13 + * Enables the VMX for use in the kernel on return. 14 + * On SMP we know the VMX is free, since we give it up every 15 + * switch (ie, no lazy save of the vector registers). 16 + */ 17 + _GLOBAL(load_up_altivec) 18 + mfmsr r5 /* grab the current MSR */ 19 + oris r5,r5,MSR_VEC@h 20 + MTMSRD(r5) /* enable use of AltiVec now */ 21 + isync 22 + 23 + /* 24 + * For SMP, we don't do lazy VMX switching because it just gets too 25 + * horrendously complex, especially when a task switches from one CPU 26 + * to another. Instead we call giveup_altvec in switch_to. 27 + * VRSAVE isn't dealt with here, that is done in the normal context 28 + * switch code. Note that we could rely on vrsave value to eventually 29 + * avoid saving all of the VREGs here... 30 + */ 31 + #ifndef CONFIG_SMP 32 + LOAD_REG_ADDRBASE(r3, last_task_used_altivec) 33 + toreal(r3) 34 + PPC_LL r4,ADDROFF(last_task_used_altivec)(r3) 35 + PPC_LCMPI 0,r4,0 36 + beq 1f 37 + 38 + /* Save VMX state to last_task_used_altivec's THREAD struct */ 39 + toreal(r4) 40 + addi r4,r4,THREAD 41 + SAVE_32VRS(0,r5,r4) 42 + mfvscr vr0 43 + li r10,THREAD_VSCR 44 + stvx vr0,r10,r4 45 + /* Disable VMX for last_task_used_altivec */ 46 + PPC_LL r5,PT_REGS(r4) 47 + toreal(r5) 48 + PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 49 + lis r10,MSR_VEC@h 50 + andc r4,r4,r10 51 + PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 52 + 1: 53 + #endif /* CONFIG_SMP */ 54 + 55 + /* Hack: if we get an altivec unavailable trap with VRSAVE 56 + * set to all zeros, we assume this is a broken application 57 + * that fails to set it properly, and thus we switch it to 58 + * all 1's 59 + */ 60 + mfspr r4,SPRN_VRSAVE 61 + cmpdi 0,r4,0 62 + bne+ 1f 63 + li r4,-1 64 + mtspr SPRN_VRSAVE,r4 65 + 1: 66 + /* enable use of VMX after return */ 67 + #ifdef CONFIG_PPC32 68 + mfspr r5,SPRN_SPRG3 /* current task's THREAD (phys) */ 69 + oris r9,r9,MSR_VEC@h 70 + #else 71 + ld r4,PACACURRENT(r13) 72 + addi r5,r4,THREAD /* Get THREAD */ 73 + oris r12,r12,MSR_VEC@h 74 + std r12,_MSR(r1) 75 + #endif 76 + li r4,1 77 + li r10,THREAD_VSCR 78 + stw r4,THREAD_USED_VR(r5) 79 + lvx vr0,r10,r5 80 + mtvscr vr0 81 + REST_32VRS(0,r4,r5) 82 + #ifndef CONFIG_SMP 83 + /* Update last_task_used_math to 'current' */ 84 + subi r4,r5,THREAD /* Back to 'current' */ 85 + fromreal(r4) 86 + PPC_STL r4,ADDROFF(last_task_used_math)(r3) 87 + #endif /* CONFIG_SMP */ 88 + /* restore registers and return */ 89 + blr 90 + 91 + /* 92 + * giveup_altivec(tsk) 93 + * Disable VMX for the task given as the argument, 94 + * and save the vector registers in its thread_struct. 95 + * Enables the VMX for use in the kernel on return. 96 + */ 97 + _GLOBAL(giveup_altivec) 98 + mfmsr r5 99 + oris r5,r5,MSR_VEC@h 100 + SYNC 101 + MTMSRD(r5) /* enable use of VMX now */ 102 + isync 103 + PPC_LCMPI 0,r3,0 104 + beqlr- /* if no previous owner, done */ 105 + addi r3,r3,THREAD /* want THREAD of task */ 106 + PPC_LL r5,PT_REGS(r3) 107 + PPC_LCMPI 0,r5,0 108 + SAVE_32VRS(0,r4,r3) 109 + mfvscr vr0 110 + li r4,THREAD_VSCR 111 + stvx vr0,r4,r3 112 + beq 1f 113 + PPC_LL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 114 + #ifdef CONFIG_VSX 115 + BEGIN_FTR_SECTION 116 + lis r3,(MSR_VEC|MSR_VSX)@h 117 + FTR_SECTION_ELSE 118 + lis r3,MSR_VEC@h 119 + ALT_FTR_SECTION_END_IFSET(CPU_FTR_VSX) 120 + #else 121 + lis r3,MSR_VEC@h 122 + #endif 123 + andc r4,r4,r3 /* disable FP for previous task */ 124 + PPC_STL r4,_MSR-STACK_FRAME_OVERHEAD(r5) 125 + 1: 126 + #ifndef CONFIG_SMP 127 + li r5,0 128 + LOAD_REG_ADDRBASE(r4,last_task_used_altivec) 129 + PPC_STL r5,ADDROFF(last_task_used_altivec)(r4) 130 + #endif /* CONFIG_SMP */ 131 + blr 132 + 133 + #ifdef CONFIG_VSX 134 + 135 + #ifdef CONFIG_PPC32 136 + #error This asm code isn't ready for 32-bit kernels 137 + #endif 138 + 139 + /* 140 + * load_up_vsx(unused, unused, tsk) 141 + * Disable VSX for the task which had it previously, 142 + * and save its vector registers in its thread_struct. 143 + * Reuse the fp and vsx saves, but first check to see if they have 144 + * been saved already. 145 + */ 146 + _GLOBAL(load_up_vsx) 147 + /* Load FP and VSX registers if they haven't been done yet */ 148 + andi. r5,r12,MSR_FP 149 + beql+ load_up_fpu /* skip if already loaded */ 150 + andis. r5,r12,MSR_VEC@h 151 + beql+ load_up_altivec /* skip if already loaded */ 152 + 153 + #ifndef CONFIG_SMP 154 + ld r3,last_task_used_vsx@got(r2) 155 + ld r4,0(r3) 156 + cmpdi 0,r4,0 157 + beq 1f 158 + /* Disable VSX for last_task_used_vsx */ 159 + addi r4,r4,THREAD 160 + ld r5,PT_REGS(r4) 161 + ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 162 + lis r6,MSR_VSX@h 163 + andc r6,r4,r6 164 + std r6,_MSR-STACK_FRAME_OVERHEAD(r5) 165 + 1: 166 + #endif /* CONFIG_SMP */ 167 + ld r4,PACACURRENT(r13) 168 + addi r4,r4,THREAD /* Get THREAD */ 169 + li r6,1 170 + stw r6,THREAD_USED_VSR(r4) /* ... also set thread used vsr */ 171 + /* enable use of VSX after return */ 172 + oris r12,r12,MSR_VSX@h 173 + std r12,_MSR(r1) 174 + #ifndef CONFIG_SMP 175 + /* Update last_task_used_math to 'current' */ 176 + ld r4,PACACURRENT(r13) 177 + std r4,0(r3) 178 + #endif /* CONFIG_SMP */ 179 + b fast_exception_return 180 + 181 + /* 182 + * __giveup_vsx(tsk) 183 + * Disable VSX for the task given as the argument. 184 + * Does NOT save vsx registers. 185 + * Enables the VSX for use in the kernel on return. 186 + */ 187 + _GLOBAL(__giveup_vsx) 188 + mfmsr r5 189 + oris r5,r5,MSR_VSX@h 190 + mtmsrd r5 /* enable use of VSX now */ 191 + isync 192 + 193 + cmpdi 0,r3,0 194 + beqlr- /* if no previous owner, done */ 195 + addi r3,r3,THREAD /* want THREAD of task */ 196 + ld r5,PT_REGS(r3) 197 + cmpdi 0,r5,0 198 + beq 1f 199 + ld r4,_MSR-STACK_FRAME_OVERHEAD(r5) 200 + lis r3,MSR_VSX@h 201 + andc r4,r4,r3 /* disable VSX for previous task */ 202 + std r4,_MSR-STACK_FRAME_OVERHEAD(r5) 203 + 1: 204 + #ifndef CONFIG_SMP 205 + li r5,0 206 + ld r4,last_task_used_vsx@got(r2) 207 + std r5,0(r4) 208 + #endif /* CONFIG_SMP */ 209 + blr 210 + 211 + #endif /* CONFIG_VSX */ 212 + 3 213 4 214 /* 5 215 * The routines below are in assembler so we can closely control the
+4 -3
arch/powerpc/mm/Makefile
··· 11 11 pgtable_$(CONFIG_WORD_SIZE).o 12 12 obj-$(CONFIG_PPC_MMU_NOHASH) += mmu_context_nohash.o tlb_nohash.o \ 13 13 tlb_nohash_low.o 14 - hash-$(CONFIG_PPC_NATIVE) := hash_native_64.o 15 - obj-$(CONFIG_PPC64) += hash_utils_64.o \ 14 + obj-$(CONFIG_PPC64) += mmap_64.o 15 + hash64-$(CONFIG_PPC_NATIVE) := hash_native_64.o 16 + obj-$(CONFIG_PPC_STD_MMU_64) += hash_utils_64.o \ 16 17 slb_low.o slb.o stab.o \ 17 - mmap_64.o $(hash-y) 18 + mmap_64.o $(hash64-y) 18 19 obj-$(CONFIG_PPC_STD_MMU_32) += ppc_mmu_32.o 19 20 obj-$(CONFIG_PPC_STD_MMU) += hash_low_$(CONFIG_WORD_SIZE).o \ 20 21 tlb_hash$(CONFIG_WORD_SIZE).o \
+11 -2
arch/powerpc/mm/hash_native_64.c
··· 27 27 #include <asm/cputable.h> 28 28 #include <asm/udbg.h> 29 29 #include <asm/kexec.h> 30 + #include <asm/ppc-opcode.h> 30 31 31 32 #ifdef DEBUG_LOW 32 33 #define DBG_LOW(fmt...) udbg_printf(fmt) ··· 50 49 case MMU_PAGE_4K: 51 50 va &= ~0xffful; 52 51 va |= ssize << 8; 53 - asm volatile("tlbie %0,0" : : "r" (va) : "memory"); 52 + asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,0", PPC_TLBIE(%1,%0), 53 + %2) 54 + : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206) 55 + : "memory"); 54 56 break; 55 57 default: 56 58 penc = mmu_psize_defs[psize].penc; 57 59 va &= ~((1ul << mmu_psize_defs[psize].shift) - 1); 58 60 va |= penc << 12; 59 61 va |= ssize << 8; 60 - asm volatile("tlbie %0,1" : : "r" (va) : "memory"); 62 + va |= 1; /* L */ 63 + asm volatile(ASM_MMU_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0), 64 + %2) 65 + : : "r" (va), "r"(0), "i" (MMU_FTR_TLBIE_206) 66 + : "memory"); 61 67 break; 62 68 } 63 69 } ··· 88 80 va &= ~((1ul << mmu_psize_defs[psize].shift) - 1); 89 81 va |= penc << 12; 90 82 va |= ssize << 8; 83 + va |= 1; /* L */ 91 84 asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)" 92 85 : : "r"(va) : "memory"); 93 86 break;
+2
arch/powerpc/mm/init_64.c
··· 66 66 67 67 #include "mmu_decl.h" 68 68 69 + #ifdef CONFIG_PPC_STD_MMU_64 69 70 #if PGTABLE_RANGE > USER_VSID_RANGE 70 71 #warning Limited user VSID range means pagetable space is wasted 71 72 #endif ··· 74 73 #if (TASK_SIZE_USER64 < PGTABLE_RANGE) && (TASK_SIZE_USER64 < USER_VSID_RANGE) 75 74 #warning TASK_SIZE is smaller than it needs to be. 76 75 #endif 76 + #endif /* CONFIG_PPC_STD_MMU_64 */ 77 77 78 78 phys_addr_t memstart_addr = ~0; 79 79 phys_addr_t kernstart_addr;
+12 -7
arch/powerpc/mm/mmu_context_nohash.c
··· 46 46 static unsigned long *context_map; 47 47 static unsigned long *stale_map[NR_CPUS]; 48 48 static struct mm_struct **context_mm; 49 - static spinlock_t context_lock = SPIN_LOCK_UNLOCKED; 49 + static DEFINE_SPINLOCK(context_lock); 50 50 51 51 #define CTX_MAP_SIZE \ 52 52 (sizeof(unsigned long) * (last_context / BITS_PER_LONG + 1)) ··· 73 73 struct mm_struct *mm; 74 74 unsigned int cpu, max; 75 75 76 - again: 77 76 max = last_context - first_context; 78 77 79 78 /* Attempt to free next_context first and then loop until we manage */ ··· 107 108 spin_unlock(&context_lock); 108 109 cpu_relax(); 109 110 spin_lock(&context_lock); 110 - goto again; 111 + 112 + /* This will cause the caller to try again */ 113 + return MMU_NO_CONTEXT; 111 114 } 112 115 #endif /* CONFIG_SMP */ 113 116 ··· 195 194 WARN_ON(prev->context.active < 1); 196 195 prev->context.active--; 197 196 } 197 + 198 + again: 198 199 #endif /* CONFIG_SMP */ 199 200 200 201 /* If we already have a valid assigned context, skip all that */ ··· 215 212 #ifdef CONFIG_SMP 216 213 if (num_online_cpus() > 1) { 217 214 id = steal_context_smp(id); 218 - goto stolen; 215 + if (id == MMU_NO_CONTEXT) 216 + goto again; 219 217 } 220 218 #endif /* CONFIG_SMP */ 221 219 id = steal_context_up(id); ··· 276 272 */ 277 273 void destroy_context(struct mm_struct *mm) 278 274 { 275 + unsigned long flags; 279 276 unsigned int id; 280 277 281 278 if (mm->context.id == MMU_NO_CONTEXT) ··· 284 279 285 280 WARN_ON(mm->context.active != 0); 286 281 287 - spin_lock(&context_lock); 282 + spin_lock_irqsave(&context_lock, flags); 288 283 id = mm->context.id; 289 284 if (id != MMU_NO_CONTEXT) { 290 285 __clear_bit(id, context_map); 291 286 mm->context.id = MMU_NO_CONTEXT; 292 287 #ifdef DEBUG_MAP_CONSISTENCY 293 288 mm->context.active = 0; 294 - context_mm[id] = NULL; 295 289 #endif 290 + context_mm[id] = NULL; 296 291 nr_free_contexts++; 297 292 } 298 - spin_unlock(&context_lock); 293 + spin_unlock_irqrestore(&context_lock, flags); 299 294 } 300 295 301 296 #ifdef CONFIG_SMP
+2
arch/powerpc/mm/numa.c
··· 981 981 mark_reserved_regions_for_nid(nid); 982 982 sparse_memory_present_with_active_regions(nid); 983 983 } 984 + 985 + init_bootmem_done = 1; 984 986 } 985 987 986 988 void __init paging_init(void)
-14
arch/powerpc/oprofile/op_model_fsl_emb.c
··· 228 228 mtpmr(PMRN_PMGC0, pmgc0); 229 229 } 230 230 231 - static void dump_pmcs(void) 232 - { 233 - printk("pmgc0: %x\n", mfpmr(PMRN_PMGC0)); 234 - printk("pmc\t\tpmlca\t\tpmlcb\n"); 235 - printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC0), 236 - mfpmr(PMRN_PMLCA0), mfpmr(PMRN_PMLCB0)); 237 - printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC1), 238 - mfpmr(PMRN_PMLCA1), mfpmr(PMRN_PMLCB1)); 239 - printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC2), 240 - mfpmr(PMRN_PMLCA2), mfpmr(PMRN_PMLCB2)); 241 - printk("%8x\t%8x\t%8x\n", mfpmr(PMRN_PMC3), 242 - mfpmr(PMRN_PMLCA3), mfpmr(PMRN_PMLCB3)); 243 - } 244 - 245 231 static int fsl_emb_cpu_setup(struct op_counter_config *ctr) 246 232 { 247 233 int i;
+2
arch/powerpc/platforms/40x/Kconfig
··· 45 45 depends on 40x 46 46 default n 47 47 select 405EX 48 + select PPC40x_SIMPLE 48 49 select PPC4xx_PCI_EXPRESS 49 50 help 50 51 This option enables support for the AMCC PPC405EX evaluation board. ··· 57 56 select 405EX 58 57 select PCI 59 58 select PPC4xx_PCI_EXPRESS 59 + select PPC40x_SIMPLE 60 60 help 61 61 This option enables support for the AMCC PPC405EX board. 62 62
-2
arch/powerpc/platforms/40x/Makefile
··· 1 - obj-$(CONFIG_KILAUEA) += kilauea.o 2 1 obj-$(CONFIG_HCU4) += hcu4.o 3 - obj-$(CONFIG_MAKALU) += makalu.o 4 2 obj-$(CONFIG_WALNUT) += walnut.o 5 3 obj-$(CONFIG_XILINX_VIRTEX_GENERIC_BOARD) += virtex.o 6 4 obj-$(CONFIG_EP405) += ep405.o
-60
arch/powerpc/platforms/40x/kilauea.c
··· 1 - /* 2 - * Kilauea board specific routines 3 - * 4 - * Copyright 2007-2008 DENX Software Engineering, Stefan Roese <sr@denx.de> 5 - * 6 - * Based on the Walnut code by 7 - * Josh Boyer <jwboyer@linux.vnet.ibm.com> 8 - * Copyright 2007 IBM Corporation 9 - * 10 - * This program is free software; you can redistribute it and/or modify it 11 - * under the terms of the GNU General Public License as published by the 12 - * Free Software Foundation; either version 2 of the License, or (at your 13 - * option) any later version. 14 - */ 15 - #include <linux/init.h> 16 - #include <linux/of_platform.h> 17 - #include <asm/machdep.h> 18 - #include <asm/prom.h> 19 - #include <asm/udbg.h> 20 - #include <asm/time.h> 21 - #include <asm/uic.h> 22 - #include <asm/pci-bridge.h> 23 - #include <asm/ppc4xx.h> 24 - 25 - static __initdata struct of_device_id kilauea_of_bus[] = { 26 - { .compatible = "ibm,plb4", }, 27 - { .compatible = "ibm,opb", }, 28 - { .compatible = "ibm,ebc", }, 29 - {}, 30 - }; 31 - 32 - static int __init kilauea_device_probe(void) 33 - { 34 - of_platform_bus_probe(NULL, kilauea_of_bus, NULL); 35 - 36 - return 0; 37 - } 38 - machine_device_initcall(kilauea, kilauea_device_probe); 39 - 40 - static int __init kilauea_probe(void) 41 - { 42 - unsigned long root = of_get_flat_dt_root(); 43 - 44 - if (!of_flat_dt_is_compatible(root, "amcc,kilauea")) 45 - return 0; 46 - 47 - ppc_pci_set_flags(PPC_PCI_REASSIGN_ALL_RSRC); 48 - 49 - return 1; 50 - } 51 - 52 - define_machine(kilauea) { 53 - .name = "Kilauea", 54 - .probe = kilauea_probe, 55 - .progress = udbg_progress, 56 - .init_IRQ = uic_init_tree, 57 - .get_irq = uic_get_irq, 58 - .restart = ppc4xx_reset_system, 59 - .calibrate_decr = generic_calibrate_decr, 60 - };
-60
arch/powerpc/platforms/40x/makalu.c
··· 1 - /* 2 - * Makalu board specific routines 3 - * 4 - * Copyright 2007 DENX Software Engineering, Stefan Roese <sr@denx.de> 5 - * 6 - * Based on the Walnut code by 7 - * Josh Boyer <jwboyer@linux.vnet.ibm.com> 8 - * Copyright 2007 IBM Corporation 9 - * 10 - * This program is free software; you can redistribute it and/or modify it 11 - * under the terms of the GNU General Public License as published by the 12 - * Free Software Foundation; either version 2 of the License, or (at your 13 - * option) any later version. 14 - */ 15 - #include <linux/init.h> 16 - #include <linux/of_platform.h> 17 - #include <asm/machdep.h> 18 - #include <asm/prom.h> 19 - #include <asm/udbg.h> 20 - #include <asm/time.h> 21 - #include <asm/uic.h> 22 - #include <asm/pci-bridge.h> 23 - #include <asm/ppc4xx.h> 24 - 25 - static __initdata struct of_device_id makalu_of_bus[] = { 26 - { .compatible = "ibm,plb4", }, 27 - { .compatible = "ibm,opb", }, 28 - { .compatible = "ibm,ebc", }, 29 - {}, 30 - }; 31 - 32 - static int __init makalu_device_probe(void) 33 - { 34 - of_platform_bus_probe(NULL, makalu_of_bus, NULL); 35 - 36 - return 0; 37 - } 38 - machine_device_initcall(makalu, makalu_device_probe); 39 - 40 - static int __init makalu_probe(void) 41 - { 42 - unsigned long root = of_get_flat_dt_root(); 43 - 44 - if (!of_flat_dt_is_compatible(root, "amcc,makalu")) 45 - return 0; 46 - 47 - ppc_pci_flags = PPC_PCI_REASSIGN_ALL_RSRC; 48 - 49 - return 1; 50 - } 51 - 52 - define_machine(makalu) { 53 - .name = "Makalu", 54 - .probe = makalu_probe, 55 - .progress = udbg_progress, 56 - .init_IRQ = uic_init_tree, 57 - .get_irq = uic_get_irq, 58 - .restart = ppc4xx_reset_system, 59 - .calibrate_decr = generic_calibrate_decr, 60 - };
+4 -1
arch/powerpc/platforms/40x/ppc40x_simple.c
··· 51 51 * board.c file for it rather than adding it to this list. 52 52 */ 53 53 static char *board[] __initdata = { 54 - "amcc,acadia" 54 + "amcc,acadia", 55 + "amcc,haleakala", 56 + "amcc,kilauea", 57 + "amcc,makalu" 55 58 }; 56 59 57 60 static int __init ppc40x_probe(void)
+2
arch/powerpc/platforms/40x/virtex.c
··· 14 14 #include <asm/prom.h> 15 15 #include <asm/time.h> 16 16 #include <asm/xilinx_intc.h> 17 + #include <asm/xilinx_pci.h> 17 18 #include <asm/ppc4xx.h> 18 19 19 20 static struct of_device_id xilinx_of_bus_ids[] __initdata = { ··· 48 47 define_machine(virtex) { 49 48 .name = "Xilinx Virtex", 50 49 .probe = virtex_probe, 50 + .setup_arch = xilinx_pci_init, 51 51 .init_IRQ = xilinx_intc_init_tree, 52 52 .get_irq = xilinx_intc_get_irq, 53 53 .restart = ppc4xx_reset_system,
+12 -1
arch/powerpc/platforms/44x/Kconfig
··· 156 156 # This option enables support for the IBM PPC440GX evaluation board. 157 157 158 158 config XILINX_VIRTEX440_GENERIC_BOARD 159 - bool "Generic Xilinx Virtex 440 board" 159 + bool "Generic Xilinx Virtex 5 FXT board support" 160 160 depends on 44x 161 161 default n 162 162 select XILINX_VIRTEX_5_FXT ··· 170 170 171 171 Most Virtex 5 designs should use this unless it needs to do some 172 172 special configuration at board probe time. 173 + 174 + config XILINX_ML510 175 + bool "Xilinx ML510 extra support" 176 + depends on XILINX_VIRTEX440_GENERIC_BOARD 177 + select PPC_PCI_CHOICE 178 + select XILINX_PCI if PCI 179 + select PPC_INDIRECT_PCI if PCI 180 + select PPC_I8259 if PCI 181 + help 182 + This option enables extra support for features on the Xilinx ML510 183 + board. The ML510 has a PCI bus with ALI south bridge. 173 184 174 185 config PPC44x_SIMPLE 175 186 bool "Simple PowerPC 44x board support"
+1
arch/powerpc/platforms/44x/Makefile
··· 4 4 obj-$(CONFIG_SAM440EP) += sam440ep.o 5 5 obj-$(CONFIG_WARP) += warp.o 6 6 obj-$(CONFIG_XILINX_VIRTEX_5_FXT) += virtex.o 7 + obj-$(CONFIG_XILINX_ML510) += virtex_ml510.o
+2
arch/powerpc/platforms/44x/virtex.c
··· 16 16 #include <asm/prom.h> 17 17 #include <asm/time.h> 18 18 #include <asm/xilinx_intc.h> 19 + #include <asm/xilinx_pci.h> 19 20 #include <asm/reg.h> 20 21 #include <asm/ppc4xx.h> 21 22 #include "44x.h" ··· 54 53 define_machine(virtex) { 55 54 .name = "Xilinx Virtex440", 56 55 .probe = virtex_probe, 56 + .setup_arch = xilinx_pci_init, 57 57 .init_IRQ = xilinx_intc_init_tree, 58 58 .get_irq = xilinx_intc_get_irq, 59 59 .calibrate_decr = generic_calibrate_decr,
+29
arch/powerpc/platforms/44x/virtex_ml510.c
··· 1 + #include <asm/i8259.h> 2 + #include <linux/pci.h> 3 + #include "44x.h" 4 + 5 + /** 6 + * ml510_ail_quirk 7 + */ 8 + static void __devinit ml510_ali_quirk(struct pci_dev *dev) 9 + { 10 + /* Enable the IDE controller */ 11 + pci_write_config_byte(dev, 0x58, 0x4c); 12 + /* Assign irq 14 to the primary ide channel */ 13 + pci_write_config_byte(dev, 0x44, 0x0d); 14 + /* Assign irq 15 to the secondary ide channel */ 15 + pci_write_config_byte(dev, 0x75, 0x0f); 16 + /* Set the ide controller in native mode */ 17 + pci_write_config_byte(dev, 0x09, 0xff); 18 + 19 + /* INTB = disabled, INTA = disabled */ 20 + pci_write_config_byte(dev, 0x48, 0x00); 21 + /* INTD = disabled, INTC = disabled */ 22 + pci_write_config_byte(dev, 0x4a, 0x00); 23 + /* Audio = INT7, Modem = disabled. */ 24 + pci_write_config_byte(dev, 0x4b, 0x60); 25 + /* USB = INT7 */ 26 + pci_write_config_byte(dev, 0x74, 0x06); 27 + } 28 + DECLARE_PCI_FIXUP_EARLY(0x10b9, 0x1533, ml510_ali_quirk); 29 +
+36 -42
arch/powerpc/platforms/44x/warp.c
··· 1 1 /* 2 2 * PIKA Warp(tm) board specific routines 3 3 * 4 - * Copyright (c) 2008 PIKA Technologies 4 + * Copyright (c) 2008-2009 PIKA Technologies 5 5 * Sean MacLennan <smaclennan@pikatech.com> 6 6 * 7 7 * This program is free software; you can redistribute it and/or modify it ··· 15 15 #include <linux/i2c.h> 16 16 #include <linux/interrupt.h> 17 17 #include <linux/delay.h> 18 + #include <linux/of_gpio.h> 18 19 19 20 #include <asm/machdep.h> 20 21 #include <asm/prom.h> ··· 23 22 #include <asm/time.h> 24 23 #include <asm/uic.h> 25 24 #include <asm/ppc4xx.h> 25 + 26 26 27 27 static __initdata struct of_device_id warp_of_bus[] = { 28 28 { .compatible = "ibm,plb4", }, ··· 57 55 }; 58 56 59 57 58 + static u32 post_info; 59 + 60 60 /* I am not sure this is the best place for this... */ 61 61 static int __init warp_post_info(void) 62 62 { ··· 81 77 82 78 iounmap(fpga); 83 79 84 - if (post1 || post2) 80 + if (post1 || post2) { 85 81 printk(KERN_INFO "Warp POST %08x %08x\n", post1, post2); 86 - else 82 + post_info = 1; 83 + } else 87 84 printk(KERN_INFO "Warp POST OK\n"); 88 85 89 86 return 0; 90 87 } 91 - machine_late_initcall(warp, warp_post_info); 92 88 93 89 94 90 #ifdef CONFIG_SENSORS_AD7414 95 91 96 92 static LIST_HEAD(dtm_shutdown_list); 97 93 static void __iomem *dtm_fpga; 98 - static void __iomem *gpio_base; 94 + static unsigned green_led, red_led; 99 95 100 96 101 97 struct dtm_shutdown { ··· 138 134 static irqreturn_t temp_isr(int irq, void *context) 139 135 { 140 136 struct dtm_shutdown *shutdown; 137 + int value = 1; 141 138 142 139 local_irq_disable(); 140 + 141 + gpio_set_value(green_led, 0); 143 142 144 143 /* Run through the shutdown list. */ 145 144 list_for_each_entry(shutdown, &dtm_shutdown_list, list) 146 145 shutdown->func(shutdown->arg); 147 146 148 - printk(KERN_EMERG "\n\nCritical Temperature Shutdown\n"); 147 + printk(KERN_EMERG "\n\nCritical Temperature Shutdown\n\n"); 149 148 150 149 while (1) { 151 150 if (dtm_fpga) { ··· 156 149 out_be32(dtm_fpga + 0x14, reset); 157 150 } 158 151 159 - if (gpio_base) { 160 - unsigned leds = in_be32(gpio_base); 161 - 162 - /* green off, red toggle */ 163 - leds &= ~0x80000000; 164 - leds ^= 0x40000000; 165 - 166 - out_be32(gpio_base, leds); 167 - } 168 - 152 + gpio_set_value(red_led, value); 153 + value ^= 1; 169 154 mdelay(500); 170 155 } 171 156 } 172 157 173 158 static int pika_setup_leds(void) 174 159 { 175 - struct device_node *np; 176 - const u32 *gpios; 177 - int len; 160 + struct device_node *np, *child; 178 161 179 - np = of_find_compatible_node(NULL, NULL, "linux,gpio-led"); 162 + np = of_find_compatible_node(NULL, NULL, "gpio-leds"); 180 163 if (!np) { 181 - printk(KERN_ERR __FILE__ ": Unable to find gpio-led\n"); 164 + printk(KERN_ERR __FILE__ ": Unable to find leds\n"); 182 165 return -ENOENT; 183 166 } 184 167 185 - gpios = of_get_property(np, "gpios", &len); 168 + for_each_child_of_node(np, child) 169 + if (strcmp(child->name, "green") == 0) { 170 + green_led = of_get_gpio(child, 0); 171 + /* Turn back on the green LED */ 172 + gpio_set_value(green_led, 1); 173 + } else if (strcmp(child->name, "red") == 0) { 174 + red_led = of_get_gpio(child, 0); 175 + /* Set based on post */ 176 + gpio_set_value(red_led, post_info); 177 + } 178 + 186 179 of_node_put(np); 187 - if (!gpios || len < 4) { 188 - printk(KERN_ERR __FILE__ 189 - ": Unable to get gpios property (%d)\n", len); 190 - return -ENOENT; 191 - } 192 - 193 - np = of_find_node_by_phandle(gpios[0]); 194 - if (!np) { 195 - printk(KERN_ERR __FILE__ ": Unable to find gpio\n"); 196 - return -ENOENT; 197 - } 198 - 199 - gpio_base = of_iomap(np, 0); 200 - of_node_put(np); 201 - if (!gpio_base) { 202 - printk(KERN_ERR __FILE__ ": Unable to map gpio"); 203 - return -ENOMEM; 204 - } 205 180 206 181 return 0; 207 182 } ··· 259 270 } 260 271 261 272 found_it: 262 - i2c_put_adapter(adap); 263 - 264 273 pika_setup_critical_temp(client); 274 + 275 + i2c_put_adapter(adap); 265 276 266 277 printk(KERN_INFO "PIKA DTM thread running.\n"); 267 278 ··· 300 311 if (dtm_fpga == NULL) 301 312 return -ENOENT; 302 313 314 + /* Must get post info before thread starts. */ 315 + warp_post_info(); 316 + 303 317 dtm_thread = kthread_run(pika_dtm_thread, dtm_fpga, "pika-dtm"); 304 318 if (IS_ERR(dtm_thread)) { 305 319 iounmap(dtm_fpga); ··· 324 332 { 325 333 return 0; 326 334 } 335 + 336 + machine_late_initcall(warp, warp_post_info); 327 337 328 338 #endif 329 339
+2 -2
arch/powerpc/platforms/52xx/efika.c
··· 34 34 static int rtas_read_config(struct pci_bus *bus, unsigned int devfn, int offset, 35 35 int len, u32 * val) 36 36 { 37 - struct pci_controller *hose = bus->sysdata; 37 + struct pci_controller *hose = pci_bus_to_host(bus); 38 38 unsigned long addr = (offset & 0xff) | ((devfn & 0xff) << 8) 39 39 | (((bus->number - hose->first_busno) & 0xff) << 16) 40 40 | (hose->global_number << 24); ··· 49 49 static int rtas_write_config(struct pci_bus *bus, unsigned int devfn, 50 50 int offset, int len, u32 val) 51 51 { 52 - struct pci_controller *hose = bus->sysdata; 52 + struct pci_controller *hose = pci_bus_to_host(bus); 53 53 unsigned long addr = (offset & 0xff) | ((devfn & 0xff) << 8) 54 54 | (((bus->number - hose->first_busno) & 0xff) << 16) 55 55 | (hose->global_number << 24);
+2 -2
arch/powerpc/platforms/52xx/mpc52xx_pci.c
··· 107 107 mpc52xx_pci_read_config(struct pci_bus *bus, unsigned int devfn, 108 108 int offset, int len, u32 *val) 109 109 { 110 - struct pci_controller *hose = bus->sysdata; 110 + struct pci_controller *hose = pci_bus_to_host(bus); 111 111 u32 value; 112 112 113 113 if (ppc_md.pci_exclude_device) ··· 164 164 mpc52xx_pci_write_config(struct pci_bus *bus, unsigned int devfn, 165 165 int offset, int len, u32 val) 166 166 { 167 - struct pci_controller *hose = bus->sysdata; 167 + struct pci_controller *hose = pci_bus_to_host(bus); 168 168 u32 value, mask; 169 169 170 170 if (ppc_md.pci_exclude_device)
-13
arch/powerpc/platforms/82xx/pq2ads.h
··· 24 24 25 25 #include <linux/seq_file.h> 26 26 27 - /* Backword-compatibility stuff for the drivers */ 28 - #define CPM_MAP_ADDR ((uint)0xf0000000) 29 - #define CPM_IRQ_OFFSET 0 30 - 31 27 /* The ADS8260 has 16, 32-bit wide control/status registers, accessed 32 28 * only on word boundaries. 33 29 * Not all are used (yet), or are interesting to us (yet). ··· 39 43 #define BCSR1_RS232_EN2 ((uint)0x01000000) /* 0 ==enable */ 40 44 #define BCSR3_FETHIEN2 ((uint)0x10000000) /* 0 == enable*/ 41 45 #define BCSR3_FETH2_RST ((uint)0x80000000) /* 0 == reset */ 42 - 43 - /* cpm serial driver works with constants below */ 44 - 45 - #define SIU_INT_SMC1 ((uint)0x04+CPM_IRQ_OFFSET) 46 - #define SIU_INT_SMC2 ((uint)0x05+CPM_IRQ_OFFSET) 47 - #define SIU_INT_SCC1 ((uint)0x28+CPM_IRQ_OFFSET) 48 - #define SIU_INT_SCC2 ((uint)0x29+CPM_IRQ_OFFSET) 49 - #define SIU_INT_SCC3 ((uint)0x2a+CPM_IRQ_OFFSET) 50 - #define SIU_INT_SCC4 ((uint)0x2b+CPM_IRQ_OFFSET) 51 46 52 47 #endif /* __MACH_ADS8260_DEFS */ 53 48 #endif /* __KERNEL__ */
+1
arch/powerpc/platforms/85xx/Kconfig
··· 34 34 bool "Freescale MPC85xx MDS" 35 35 select DEFAULT_UIMAGE 36 36 select PHYLIB 37 + select HAS_RAPIDIO 37 38 help 38 39 This option enables support for the MPC85xx MDS board 39 40
+38 -5
arch/powerpc/platforms/85xx/mpc85xx_ds.c
··· 163 163 #ifdef CONFIG_PCI 164 164 for_each_node_by_type(np, "pci") { 165 165 if (of_device_is_compatible(np, "fsl,mpc8540-pci") || 166 - of_device_is_compatible(np, "fsl,mpc8548-pcie")) { 166 + of_device_is_compatible(np, "fsl,mpc8548-pcie") || 167 + of_device_is_compatible(np, "fsl,p2020-pcie")) { 167 168 struct resource rsrc; 168 169 of_address_to_resource(np, 0, &rsrc); 169 170 if ((rsrc.start & 0xfffff) == primary_phb_addr) ··· 196 195 primary_phb_addr = 0xb000; 197 196 #endif 198 197 return 1; 199 - } else { 200 - return 0; 201 198 } 199 + 200 + return 0; 202 201 } 203 202 204 203 static struct of_device_id __initdata mpc85xxds_ids[] = { ··· 215 214 } 216 215 machine_device_initcall(mpc8544_ds, mpc85xxds_publish_devices); 217 216 machine_device_initcall(mpc8572_ds, mpc85xxds_publish_devices); 217 + machine_device_initcall(p2020_ds, mpc85xxds_publish_devices); 218 218 219 219 /* 220 220 * Called very early, device-tree isn't unflattened ··· 229 227 primary_phb_addr = 0x8000; 230 228 #endif 231 229 return 1; 232 - } else { 233 - return 0; 234 230 } 231 + 232 + return 0; 233 + } 234 + 235 + /* 236 + * Called very early, device-tree isn't unflattened 237 + */ 238 + static int __init p2020_ds_probe(void) 239 + { 240 + unsigned long root = of_get_flat_dt_root(); 241 + 242 + if (of_flat_dt_is_compatible(root, "fsl,P2020DS")) { 243 + #ifdef CONFIG_PCI 244 + primary_phb_addr = 0x9000; 245 + #endif 246 + return 1; 247 + } 248 + 249 + return 0; 235 250 } 236 251 237 252 define_machine(mpc8544_ds) { ··· 268 249 define_machine(mpc8572_ds) { 269 250 .name = "MPC8572 DS", 270 251 .probe = mpc8572_ds_probe, 252 + .setup_arch = mpc85xx_ds_setup_arch, 253 + .init_IRQ = mpc85xx_ds_pic_init, 254 + #ifdef CONFIG_PCI 255 + .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 256 + #endif 257 + .get_irq = mpic_get_irq, 258 + .restart = fsl_rstcr_restart, 259 + .calibrate_decr = generic_calibrate_decr, 260 + .progress = udbg_progress, 261 + }; 262 + 263 + define_machine(p2020_ds) { 264 + .name = "P2020 DS", 265 + .probe = p2020_ds_probe, 271 266 .setup_arch = mpc85xx_ds_setup_arch, 272 267 .init_IRQ = mpc85xx_ds_pic_init, 273 268 #ifdef CONFIG_PCI
+38 -14
arch/powerpc/platforms/85xx/mpc85xx_mds.c
··· 206 206 } 207 207 208 208 if (bcsr_regs) { 209 + if (machine_is(mpc8568_mds)) { 209 210 #define BCSR_UCC1_GETH_EN (0x1 << 7) 210 211 #define BCSR_UCC2_GETH_EN (0x1 << 7) 211 212 #define BCSR_UCC1_MODE_MSK (0x3 << 4) 212 213 #define BCSR_UCC2_MODE_MSK (0x3 << 0) 213 214 214 - /* Turn off UCC1 & UCC2 */ 215 - clrbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); 216 - clrbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); 215 + /* Turn off UCC1 & UCC2 */ 216 + clrbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); 217 + clrbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); 217 218 218 - /* Mode is RGMII, all bits clear */ 219 - clrbits8(&bcsr_regs[11], BCSR_UCC1_MODE_MSK | 220 - BCSR_UCC2_MODE_MSK); 219 + /* Mode is RGMII, all bits clear */ 220 + clrbits8(&bcsr_regs[11], BCSR_UCC1_MODE_MSK | 221 + BCSR_UCC2_MODE_MSK); 221 222 222 - /* Turn UCC1 & UCC2 on */ 223 - setbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); 224 - setbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); 225 - 223 + /* Turn UCC1 & UCC2 on */ 224 + setbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); 225 + setbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); 226 + } 226 227 iounmap(bcsr_regs); 227 228 } 228 229 #endif /* CONFIG_QUICC_ENGINE */ ··· 258 257 259 258 return 0; 260 259 } 261 - machine_arch_initcall(mpc85xx_mds, board_fixups); 260 + machine_arch_initcall(mpc8568_mds, board_fixups); 261 + machine_arch_initcall(mpc8569_mds, board_fixups); 262 262 263 263 static struct of_device_id mpc85xx_ids[] = { 264 264 { .type = "soc", }, ··· 278 276 279 277 return 0; 280 278 } 281 - machine_device_initcall(mpc85xx_mds, mpc85xx_publish_devices); 279 + machine_device_initcall(mpc8568_mds, mpc85xx_publish_devices); 280 + machine_device_initcall(mpc8569_mds, mpc85xx_publish_devices); 282 281 283 282 static void __init mpc85xx_mds_pic_init(void) 284 283 { ··· 324 321 return of_flat_dt_is_compatible(root, "MPC85xxMDS"); 325 322 } 326 323 327 - define_machine(mpc85xx_mds) { 328 - .name = "MPC85xx MDS", 324 + define_machine(mpc8568_mds) { 325 + .name = "MPC8568 MDS", 329 326 .probe = mpc85xx_mds_probe, 327 + .setup_arch = mpc85xx_mds_setup_arch, 328 + .init_IRQ = mpc85xx_mds_pic_init, 329 + .get_irq = mpic_get_irq, 330 + .restart = fsl_rstcr_restart, 331 + .calibrate_decr = generic_calibrate_decr, 332 + .progress = udbg_progress, 333 + #ifdef CONFIG_PCI 334 + .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 335 + #endif 336 + }; 337 + 338 + static int __init mpc8569_mds_probe(void) 339 + { 340 + unsigned long root = of_get_flat_dt_root(); 341 + 342 + return of_flat_dt_is_compatible(root, "fsl,MPC8569EMDS"); 343 + } 344 + 345 + define_machine(mpc8569_mds) { 346 + .name = "MPC8569 MDS", 347 + .probe = mpc8569_mds_probe, 330 348 .setup_arch = mpc85xx_mds_setup_arch, 331 349 .init_IRQ = mpc85xx_mds_pic_init, 332 350 .get_irq = mpic_get_irq,
-1
arch/powerpc/platforms/86xx/gef_ppc9a.c
··· 28 28 #include <asm/time.h> 29 29 #include <asm/machdep.h> 30 30 #include <asm/pci-bridge.h> 31 - #include <asm/mpc86xx.h> 32 31 #include <asm/prom.h> 33 32 #include <mm/mmu_decl.h> 34 33 #include <asm/udbg.h>
-1
arch/powerpc/platforms/86xx/gef_sbc310.c
··· 28 28 #include <asm/time.h> 29 29 #include <asm/machdep.h> 30 30 #include <asm/pci-bridge.h> 31 - #include <asm/mpc86xx.h> 32 31 #include <asm/prom.h> 33 32 #include <mm/mmu_decl.h> 34 33 #include <asm/udbg.h>
-1
arch/powerpc/platforms/86xx/gef_sbc610.c
··· 28 28 #include <asm/time.h> 29 29 #include <asm/machdep.h> 30 30 #include <asm/pci-bridge.h> 31 - #include <asm/mpc86xx.h> 32 31 #include <asm/prom.h> 33 32 #include <mm/mmu_decl.h> 34 33 #include <asm/udbg.h>
-1
arch/powerpc/platforms/86xx/mpc8610_hpcd.c
··· 28 28 #include <asm/time.h> 29 29 #include <asm/machdep.h> 30 30 #include <asm/pci-bridge.h> 31 - #include <asm/mpc86xx.h> 32 31 #include <asm/prom.h> 33 32 #include <mm/mmu_decl.h> 34 33 #include <asm/udbg.h>
-1
arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
··· 24 24 #include <asm/time.h> 25 25 #include <asm/machdep.h> 26 26 #include <asm/pci-bridge.h> 27 - #include <asm/mpc86xx.h> 28 27 #include <asm/prom.h> 29 28 #include <mm/mmu_decl.h> 30 29 #include <asm/udbg.h>
+7 -1
arch/powerpc/platforms/86xx/mpc86xx_smp.c
··· 20 20 #include <asm/pgtable.h> 21 21 #include <asm/pci-bridge.h> 22 22 #include <asm/mpic.h> 23 - #include <asm/mpc86xx.h> 24 23 #include <asm/cacheflush.h> 25 24 26 25 #include <sysdev/fsl_soc.h> ··· 29 30 extern void __secondary_start_mpc86xx(void); 30 31 extern unsigned long __secondary_hold_acknowledge; 31 32 33 + #define MCM_PORT_CONFIG_OFFSET 0x10 34 + 35 + /* Offset from CCSRBAR */ 36 + #define MPC86xx_MCM_OFFSET (0x1000) 37 + #define MPC86xx_MCM_SIZE (0x1000) 32 38 33 39 static void __init 34 40 smp_86xx_release_core(int nr) ··· 52 48 pcr = in_be32(mcm_vaddr + (MCM_PORT_CONFIG_OFFSET >> 2)); 53 49 pcr |= 1 << (nr + 24); 54 50 out_be32(mcm_vaddr + (MCM_PORT_CONFIG_OFFSET >> 2), pcr); 51 + 52 + iounmap(mcm_vaddr); 55 53 } 56 54 57 55
-1
arch/powerpc/platforms/86xx/sbc8641d.c
··· 25 25 #include <asm/time.h> 26 26 #include <asm/machdep.h> 27 27 #include <asm/pci-bridge.h> 28 - #include <asm/mpc86xx.h> 29 28 #include <asm/prom.h> 30 29 #include <mm/mmu_decl.h> 31 30 #include <asm/udbg.h>
-4
arch/powerpc/platforms/8xx/mpc885ads.h
··· 17 17 18 18 #include <sysdev/fsl_soc.h> 19 19 20 - #define MPC8xx_CPM_OFFSET (0x9c0) 21 - #define CPM_MAP_ADDR (get_immrbase() + MPC8xx_CPM_OFFSET) 22 - #define CPM_IRQ_OFFSET 16 // for compability with cpm_uart driver 23 - 24 20 /* Bits of interest in the BCSRs. 25 21 */ 26 22 #define BCSR1_ETHEN ((uint)0x20000000)
+4
arch/powerpc/platforms/Kconfig
··· 329 329 also register MCU GPIOs with the generic GPIO API, so you'll able 330 330 to use MCU pins as GPIOs. 331 331 332 + config XILINX_PCI 333 + bool "Xilinx PCI host bridge support" 334 + depends on PCI && XILINX_VIRTEX 335 + 332 336 endmenu
+13 -13
arch/powerpc/platforms/Kconfig.cputype
··· 10 10 choice 11 11 prompt "Processor Type" 12 12 depends on PPC32 13 - default 6xx 14 13 help 15 14 There are five families of 32 bit PowerPC chips supported. 16 15 The most common ones are the desktop and server CPUs (601, 603, ··· 21 22 22 23 If unsure, select 52xx/6xx/7xx/74xx/82xx/83xx/86xx. 23 24 24 - config 6xx 25 + config PPC_BOOK3S 25 26 bool "512x/52xx/6xx/7xx/74xx/82xx/83xx/86xx" 26 27 select PPC_FPU 27 28 ··· 57 58 58 59 endchoice 59 60 60 - # Until we have a choice of exclusive CPU types on 64-bit, we always 61 - # use PPC_BOOK3S. On 32-bit, this is equivalent to 6xx which is 62 - # "classic" MMU 63 - 64 61 config PPC_BOOK3S 65 - def_bool y 66 - depends on PPC64 || 6xx 62 + default y 63 + depends on PPC64 64 + select PPC_FPU 65 + 67 66 68 67 config POWER4_ONLY 69 68 bool "Optimize for POWER4" ··· 71 74 Cause the compiler to optimize for POWER4/POWER5/PPC970 processors. 72 75 The resulting binary will not work on POWER3 or RS64 processors 73 76 when compiled with binutils 2.15 or later. 77 + 78 + config 6xx 79 + def_bool y 80 + depends on PPC32 && PPC_BOOK3S 74 81 75 82 config POWER3 76 83 bool ··· 204 203 If in doubt, say Y here. 205 204 206 205 config PPC_STD_MMU 207 - bool 208 - depends on 6xx || PPC64 209 - default y 206 + def_bool y 207 + depends on PPC_BOOK3S 210 208 211 209 config PPC_STD_MMU_32 212 210 def_bool y ··· 263 263 If you don't know what to do here, say N. 264 264 265 265 config NR_CPUS 266 - int "Maximum number of CPUs (2-1024)" 267 - range 2 1024 266 + int "Maximum number of CPUs (2-8192)" 267 + range 2 8192 268 268 depends on SMP 269 269 default "32" if PPC64 270 270 default "4"
+2 -8
arch/powerpc/platforms/cell/celleb_pci.c
··· 162 162 unsigned int devfn, int where, int size, u32 *val) 163 163 { 164 164 char *config; 165 - struct device_node *node; 166 - struct pci_controller *hose; 165 + struct pci_controller *hose = pci_bus_to_host(bus); 167 166 unsigned int devno = devfn >> 3; 168 167 unsigned int fn = devfn & 0x7; 169 168 ··· 170 171 BUG_ON(where % size); 171 172 172 173 pr_debug(" fake read: bus=0x%x, ", bus->number); 173 - node = (struct device_node *)bus->sysdata; 174 - hose = pci_find_hose_for_OF_device(node); 175 174 config = get_fake_config_start(hose, devno, fn); 176 175 177 176 pr_debug("devno=0x%x, where=0x%x, size=0x%x, ", devno, where, size); ··· 189 192 unsigned int devfn, int where, int size, u32 val) 190 193 { 191 194 char *config; 192 - struct device_node *node; 193 - struct pci_controller *hose; 195 + struct pci_controller *hose = pci_bus_to_host(bus); 194 196 struct celleb_pci_resource *res; 195 197 unsigned int devno = devfn >> 3; 196 198 unsigned int fn = devfn & 0x7; ··· 197 201 /* allignment check */ 198 202 BUG_ON(where % size); 199 203 200 - node = (struct device_node *)bus->sysdata; 201 - hose = pci_find_hose_for_OF_device(node); 202 204 config = get_fake_config_start(hose, devno, fn); 203 205 204 206 if (!config)
+2 -11
arch/powerpc/platforms/cell/celleb_scc_epci.c
··· 134 134 { 135 135 PCI_IO_ADDR epci_base; 136 136 PCI_IO_ADDR addr; 137 - struct device_node *node; 138 - struct pci_controller *hose; 137 + struct pci_controller *hose = pci_bus_to_host(bus); 139 138 140 139 /* allignment check */ 141 140 BUG_ON(where % size); 142 - 143 - node = (struct device_node *)bus->sysdata; 144 - hose = pci_find_hose_for_OF_device(node); 145 141 146 142 if (!celleb_epci_get_epci_cfg(hose)) 147 143 return PCIBIOS_DEVICE_NOT_FOUND; ··· 194 198 { 195 199 PCI_IO_ADDR epci_base; 196 200 PCI_IO_ADDR addr; 197 - struct device_node *node; 198 - struct pci_controller *hose; 201 + struct pci_controller *hose = pci_bus_to_host(bus); 199 202 200 203 /* allignment check */ 201 204 BUG_ON(where % size); 202 - 203 - node = (struct device_node *)bus->sysdata; 204 - hose = pci_find_hose_for_OF_device(node); 205 - 206 205 207 206 if (!celleb_epci_get_epci_cfg(hose)) 208 207 return PCIBIOS_DEVICE_NOT_FOUND;
+2 -10
arch/powerpc/platforms/cell/celleb_scc_pciex.c
··· 366 366 static int scc_pciex_read_config(struct pci_bus *bus, unsigned int devfn, 367 367 int where, int size, unsigned int *val) 368 368 { 369 - struct device_node *dn; 370 - struct pci_controller *phb; 371 - 372 - dn = bus->sysdata; 373 - phb = pci_find_hose_for_OF_device(dn); 369 + struct pci_controller *phb = pci_bus_to_host(bus); 374 370 375 371 if (bus->number == phb->first_busno && PCI_SLOT(devfn) != 1) { 376 372 *val = ~0; ··· 385 389 static int scc_pciex_write_config(struct pci_bus *bus, unsigned int devfn, 386 390 int where, int size, unsigned int val) 387 391 { 388 - struct device_node *dn; 389 - struct pci_controller *phb; 390 - 391 - dn = bus->sysdata; 392 - phb = pci_find_hose_for_OF_device(dn); 392 + struct pci_controller *phb = pci_bus_to_host(bus); 393 393 394 394 if (bus->number == phb->first_busno && PCI_SLOT(devfn) != 1) 395 395 return PCIBIOS_DEVICE_NOT_FOUND;
-6
arch/powerpc/platforms/cell/spufs/inode.c
··· 631 631 if (IS_ERR(dentry)) 632 632 goto out_dir; 633 633 634 - ret = -EEXIST; 635 - if (dentry->d_inode) 636 - goto out_dput; 637 - 638 634 mode &= ~current_umask(); 639 635 640 636 if (flags & SPU_CREATE_GANG) ··· 644 648 fsnotify_mkdir(nd->path.dentry->d_inode, dentry); 645 649 return ret; 646 650 647 - out_dput: 648 - dput(dentry); 649 651 out_dir: 650 652 mutex_unlock(&nd->path.dentry->d_inode->i_mutex); 651 653 out:
+4 -4
arch/powerpc/platforms/chrp/pci.c
··· 34 34 int len, u32 *val) 35 35 { 36 36 volatile void __iomem *cfg_data; 37 - struct pci_controller *hose = bus->sysdata; 37 + struct pci_controller *hose = pci_bus_to_host(bus); 38 38 39 39 if (bus->number > 7) 40 40 return PCIBIOS_DEVICE_NOT_FOUND; ··· 61 61 int len, u32 val) 62 62 { 63 63 volatile void __iomem *cfg_data; 64 - struct pci_controller *hose = bus->sysdata; 64 + struct pci_controller *hose = pci_bus_to_host(bus); 65 65 66 66 if (bus->number > 7) 67 67 return PCIBIOS_DEVICE_NOT_FOUND; ··· 96 96 int rtas_read_config(struct pci_bus *bus, unsigned int devfn, int offset, 97 97 int len, u32 *val) 98 98 { 99 - struct pci_controller *hose = bus->sysdata; 99 + struct pci_controller *hose = pci_bus_to_host(bus); 100 100 unsigned long addr = (offset & 0xff) | ((devfn & 0xff) << 8) 101 101 | (((bus->number - hose->first_busno) & 0xff) << 16) 102 102 | (hose->global_number << 24); ··· 111 111 int rtas_write_config(struct pci_bus *bus, unsigned int devfn, int offset, 112 112 int len, u32 val) 113 113 { 114 - struct pci_controller *hose = bus->sysdata; 114 + struct pci_controller *hose = pci_bus_to_host(bus); 115 115 unsigned long addr = (offset & 0xff) | ((devfn & 0xff) << 8) 116 116 | (((bus->number - hose->first_busno) & 0xff) << 16) 117 117 | (hose->global_number << 24);
+13 -11
arch/powerpc/platforms/fsl_uli1575.c
··· 51 51 ULI_8259_NONE, /* PIRQH */ 52 52 }; 53 53 54 + static inline bool is_quirk_valid(void) 55 + { 56 + return (machine_is(mpc86xx_hpcn) || 57 + machine_is(mpc8544_ds) || 58 + machine_is(p2020_ds) || 59 + machine_is(mpc8572_ds)); 60 + } 61 + 54 62 /* Bridge */ 55 63 static void __devinit early_uli5249(struct pci_dev *dev) 56 64 { 57 65 unsigned char temp; 58 66 59 - if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) && 60 - !machine_is(mpc8572_ds)) 67 + if (!is_quirk_valid()) 61 68 return; 62 69 63 70 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_IO | ··· 87 80 { 88 81 int i; 89 82 90 - if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) && 91 - !machine_is(mpc8572_ds)) 83 + if (!is_quirk_valid()) 92 84 return; 93 85 94 86 /* ··· 155 149 * IRQ 14: Edge 156 150 * IRQ 15: Edge 157 151 */ 158 - if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) && 159 - !machine_is(mpc8572_ds)) 152 + if (!is_quirk_valid()) 160 153 return; 161 154 162 155 outb(0xfa, 0x4d0); ··· 181 176 unsigned char c; 182 177 unsigned int d; 183 178 184 - if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) && 185 - !machine_is(mpc8572_ds)) 179 + if (!is_quirk_valid()) 186 180 return; 187 181 188 182 /* read/write lock */ ··· 205 201 { 206 202 unsigned short temp; 207 203 208 - if (!machine_is(mpc86xx_hpcn) && !machine_is(mpc8544_ds) && 209 - !machine_is(mpc8572_ds)) 204 + if (!is_quirk_valid()) 210 205 return; 211 206 212 207 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE | ··· 273 270 static void __devinit hpcd_quirk_uli5288(struct pci_dev *dev) 274 271 { 275 272 unsigned char c; 276 - unsigned short temp; 277 273 278 274 if (!machine_is(mpc86xx_hpcd)) 279 275 return;
+1 -1
arch/powerpc/platforms/iseries/iommu.c
··· 177 177 static void pci_dma_dev_setup_iseries(struct pci_dev *pdev) 178 178 { 179 179 struct iommu_table *tbl; 180 - struct device_node *dn = pdev->sysdata; 180 + struct device_node *dn = pci_device_to_OF_node(pdev); 181 181 struct pci_dn *pdn = PCI_DN(dn); 182 182 const u32 *lsn = of_get_property(dn, "linux,logical-slot-number", NULL); 183 183
+4 -4
arch/powerpc/platforms/iseries/pci.c
··· 318 318 { 319 319 struct resource *bar_res = &dev->resource[bar_num]; 320 320 long bar_size = pci_resource_len(dev, bar_num); 321 + struct device_node *dn = pci_device_to_OF_node(dev); 321 322 322 323 /* 323 324 * No space to allocate, quick exit, skip Allocation. ··· 336 335 * Allocate the number of table entries needed for BAR. 337 336 */ 338 337 while (bar_size > 0 ) { 339 - iomm_table[current_iomm_table_entry] = dev->sysdata; 338 + iomm_table[current_iomm_table_entry] = dn; 340 339 ds_addr_table[current_iomm_table_entry] = 341 - iseries_ds_addr(dev->sysdata) | (bar_num << 24); 340 + iseries_ds_addr(dn) | (bar_num << 24); 342 341 bar_size -= IOMM_TABLE_ENTRY_SIZE; 343 342 ++current_iomm_table_entry; 344 343 } ··· 411 410 struct device_node *node; 412 411 int i; 413 412 414 - node = find_device_node(bus, pdev->devfn); 413 + node = pci_device_to_OF_node(pdev); 415 414 pr_debug("PCI: iSeries %s, pdev %p, node %p\n", 416 415 pci_name(pdev), pdev, node); 417 416 if (!node) { ··· 442 441 } 443 442 } 444 443 445 - pdev->sysdata = node; 446 444 allocate_device_bars(pdev); 447 445 iseries_device_information(pdev, bus, *sub_bus); 448 446 }
+1 -1
arch/powerpc/platforms/powermac/pic.c
··· 221 221 continue; 222 222 irq += __ilog2(bits); 223 223 spin_unlock_irqrestore(&pmac_pic_lock, flags); 224 - __do_IRQ(irq); 224 + generic_handle_irq(irq); 225 225 spin_lock_irqsave(&pmac_pic_lock, flags); 226 226 rc = IRQ_HANDLED; 227 227 }
+1 -1
arch/powerpc/platforms/powermac/setup.c
··· 655 655 /* Move that to pci.c */ 656 656 static int pmac_pci_probe_mode(struct pci_bus *bus) 657 657 { 658 - struct device_node *node = bus->sysdata; 658 + struct device_node *node = pci_bus_to_OF_node(bus); 659 659 660 660 /* We need to use normal PCI probing for the AGP bus, 661 661 * since the device for the AGP bridge isn't in the tree.
+1 -15
arch/powerpc/platforms/ps3/smp.c
··· 32 32 #define DBG pr_debug 33 33 #endif 34 34 35 - static irqreturn_t ipi_function_handler(int irq, void *msg) 36 - { 37 - smp_message_recv((int)(long)msg); 38 - return IRQ_HANDLED; 39 - } 40 - 41 35 /** 42 36 * ps3_ipi_virqs - a per cpu array of virqs for ipi use 43 37 */ 44 38 45 39 #define MSG_COUNT 4 46 40 static DEFINE_PER_CPU(unsigned int, ps3_ipi_virqs[MSG_COUNT]); 47 - 48 - static const char *names[MSG_COUNT] = { 49 - "ipi call", 50 - "ipi reschedule", 51 - "ipi migrate", 52 - "ipi debug brk" 53 - }; 54 41 55 42 static void do_message_pass(int target, int msg) 56 43 { ··· 106 119 DBG("%s:%d: (%d, %d) => virq %u\n", 107 120 __func__, __LINE__, cpu, i, virqs[i]); 108 121 109 - result = request_irq(virqs[i], ipi_function_handler, 110 - IRQF_DISABLED, names[i], (void*)(long)i); 122 + result = smp_request_message_ipi(virqs[i], i); 111 123 112 124 if (result) 113 125 virqs[i] = NO_IRQ;
+2 -2
arch/powerpc/platforms/pseries/iommu.c
··· 388 388 389 389 while (pci->phb->dma_window_size * children > 0x80000000ul) 390 390 pci->phb->dma_window_size >>= 1; 391 - pr_debug("No ISA/IDE, window size is 0x%lx\n", 391 + pr_debug("No ISA/IDE, window size is 0x%llx\n", 392 392 pci->phb->dma_window_size); 393 393 pci->phb->dma_window_base_cur = 0; 394 394 ··· 414 414 while (pci->phb->dma_window_size * children > 0x70000000ul) 415 415 pci->phb->dma_window_size >>= 1; 416 416 417 - pr_debug("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size); 417 + pr_debug("ISA/IDE, window size is 0x%llx\n", pci->phb->dma_window_size); 418 418 } 419 419 420 420
+52
arch/powerpc/platforms/pseries/lpar.c
··· 609 609 ppc_md.flush_hash_range = pSeries_lpar_flush_hash_range; 610 610 ppc_md.hpte_clear_all = pSeries_lpar_hptab_clear; 611 611 } 612 + 613 + #ifdef CONFIG_PPC_SMLPAR 614 + #define CMO_FREE_HINT_DEFAULT 1 615 + static int cmo_free_hint_flag = CMO_FREE_HINT_DEFAULT; 616 + 617 + static int __init cmo_free_hint(char *str) 618 + { 619 + char *parm; 620 + parm = strstrip(str); 621 + 622 + if (strcasecmp(parm, "no") == 0 || strcasecmp(parm, "off") == 0) { 623 + printk(KERN_INFO "cmo_free_hint: CMO free page hinting is not active.\n"); 624 + cmo_free_hint_flag = 0; 625 + return 1; 626 + } 627 + 628 + cmo_free_hint_flag = 1; 629 + printk(KERN_INFO "cmo_free_hint: CMO free page hinting is active.\n"); 630 + 631 + if (strcasecmp(parm, "yes") == 0 || strcasecmp(parm, "on") == 0) 632 + return 1; 633 + 634 + return 0; 635 + } 636 + 637 + __setup("cmo_free_hint=", cmo_free_hint); 638 + 639 + static void pSeries_set_page_state(struct page *page, int order, 640 + unsigned long state) 641 + { 642 + int i, j; 643 + unsigned long cmo_page_sz, addr; 644 + 645 + cmo_page_sz = cmo_get_page_size(); 646 + addr = __pa((unsigned long)page_address(page)); 647 + 648 + for (i = 0; i < (1 << order); i++, addr += PAGE_SIZE) { 649 + for (j = 0; j < PAGE_SIZE; j += cmo_page_sz) 650 + plpar_hcall_norets(H_PAGE_INIT, state, addr + j, 0); 651 + } 652 + } 653 + 654 + void arch_free_page(struct page *page, int order) 655 + { 656 + if (!cmo_free_hint_flag || !firmware_has_feature(FW_FEATURE_CMO)) 657 + return; 658 + 659 + pSeries_set_page_state(page, order, H_PAGE_SET_UNUSED); 660 + } 661 + EXPORT_SYMBOL(arch_free_page); 662 + 663 + #endif
+36 -36
arch/powerpc/platforms/pseries/rtasd.c
··· 19 19 #include <linux/vmalloc.h> 20 20 #include <linux/spinlock.h> 21 21 #include <linux/cpu.h> 22 - #include <linux/delay.h> 22 + #include <linux/workqueue.h> 23 23 24 24 #include <asm/uaccess.h> 25 25 #include <asm/io.h> ··· 387 387 } while(error == 0); 388 388 } 389 389 390 - static void do_event_scan_all_cpus(long delay) 390 + static void rtas_event_scan(struct work_struct *w); 391 + DECLARE_DELAYED_WORK(event_scan_work, rtas_event_scan); 392 + 393 + /* 394 + * Delay should be at least one second since some machines have problems if 395 + * we call event-scan too quickly. 396 + */ 397 + static unsigned long event_scan_delay = 1*HZ; 398 + static int first_pass = 1; 399 + 400 + static void rtas_event_scan(struct work_struct *w) 391 401 { 392 - int cpu; 402 + unsigned int cpu; 403 + 404 + do_event_scan(); 393 405 394 406 get_online_cpus(); 395 - cpu = first_cpu(cpu_online_map); 396 - for (;;) { 397 - set_cpus_allowed(current, cpumask_of_cpu(cpu)); 398 - do_event_scan(); 399 - set_cpus_allowed(current, CPU_MASK_ALL); 400 407 401 - /* Drop hotplug lock, and sleep for the specified delay */ 402 - put_online_cpus(); 403 - msleep_interruptible(delay); 404 - get_online_cpus(); 408 + cpu = next_cpu(smp_processor_id(), cpu_online_map); 409 + if (cpu == NR_CPUS) { 410 + cpu = first_cpu(cpu_online_map); 405 411 406 - cpu = next_cpu(cpu, cpu_online_map); 407 - if (cpu == NR_CPUS) 408 - break; 412 + if (first_pass) { 413 + first_pass = 0; 414 + event_scan_delay = 30*HZ/rtas_event_scan_rate; 415 + 416 + if (surveillance_timeout != -1) { 417 + pr_debug("rtasd: enabling surveillance\n"); 418 + enable_surveillance(surveillance_timeout); 419 + pr_debug("rtasd: surveillance enabled\n"); 420 + } 421 + } 409 422 } 423 + 424 + schedule_delayed_work_on(cpu, &event_scan_work, 425 + __round_jiffies_relative(event_scan_delay, cpu)); 426 + 410 427 put_online_cpus(); 411 428 } 412 429 413 - static int rtasd(void *unused) 430 + static void start_event_scan(void) 414 431 { 415 432 unsigned int err_type; 416 433 int rc; 417 - 418 - daemonize("rtasd"); 419 434 420 435 printk(KERN_DEBUG "RTAS daemon started\n"); 421 436 pr_debug("rtasd: will sleep for %d milliseconds\n", ··· 449 434 } 450 435 } 451 436 452 - /* First pass. */ 453 - do_event_scan_all_cpus(1000); 454 - 455 - if (surveillance_timeout != -1) { 456 - pr_debug("rtasd: enabling surveillance\n"); 457 - enable_surveillance(surveillance_timeout); 458 - pr_debug("rtasd: surveillance enabled\n"); 459 - } 460 - 461 - /* Delay should be at least one second since some 462 - * machines have problems if we call event-scan too 463 - * quickly. */ 464 - for (;;) 465 - do_event_scan_all_cpus(30000/rtas_event_scan_rate); 466 - 467 - return -EINVAL; 437 + schedule_delayed_work_on(first_cpu(cpu_online_map), &event_scan_work, 438 + event_scan_delay); 468 439 } 469 440 470 441 static int __init rtas_init(void) ··· 488 487 if (!entry) 489 488 printk(KERN_ERR "Failed to create error_log proc entry\n"); 490 489 491 - if (kernel_thread(rtasd, NULL, CLONE_FS) < 0) 492 - printk(KERN_ERR "Failed to start RTAS daemon\n"); 490 + start_event_scan(); 493 491 494 492 return 0; 495 493 }
+25
arch/powerpc/platforms/pseries/setup.c
··· 63 63 #include <asm/smp.h> 64 64 #include <asm/firmware.h> 65 65 #include <asm/eeh.h> 66 + #include <asm/pSeries_reconfig.h> 66 67 67 68 #include "plpar_wrappers.h" 68 69 #include "pseries.h" ··· 255 254 " interrupt-controller\n"); 256 255 } 257 256 257 + static int pci_dn_reconfig_notifier(struct notifier_block *nb, unsigned long action, void *node) 258 + { 259 + struct device_node *np = node; 260 + struct pci_dn *pci = NULL; 261 + int err = NOTIFY_OK; 262 + 263 + switch (action) { 264 + case PSERIES_RECONFIG_ADD: 265 + pci = np->parent->data; 266 + if (pci) 267 + update_dn_pci_info(np, pci->phb); 268 + break; 269 + default: 270 + err = NOTIFY_DONE; 271 + break; 272 + } 273 + return err; 274 + } 275 + 276 + static struct notifier_block pci_dn_reconfig_nb = { 277 + .notifier_call = pci_dn_reconfig_notifier, 278 + }; 279 + 258 280 static void __init pSeries_setup_arch(void) 259 281 { 260 282 /* Discover PIC type and setup ppc_md accordingly */ ··· 295 271 /* Find and initialize PCI host bridges */ 296 272 init_pci_config_tokens(); 297 273 find_and_init_phbs(); 274 + pSeries_reconfig_notifier_register(&pci_dn_reconfig_nb); 298 275 eeh_init(); 299 276 300 277 pSeries_nvram_init();
+1
arch/powerpc/sysdev/Makefile
··· 34 34 obj-$(CONFIG_4xx) += uic.o 35 35 obj-$(CONFIG_4xx_SOC) += ppc4xx_soc.o 36 36 obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o 37 + obj-$(CONFIG_XILINX_PCI) += xilinx_pci.o 37 38 obj-$(CONFIG_OF_RTC) += of_rtc.o 38 39 ifeq ($(CONFIG_PCI),y) 39 40 obj-$(CONFIG_4xx) += ppc4xx_pci.o
+1 -1
arch/powerpc/sysdev/cpm2.c
··· 61 61 void __init cpm2_reset(void) 62 62 { 63 63 #ifdef CONFIG_PPC_85xx 64 - cpm2_immr = ioremap(CPM_MAP_ADDR, CPM_MAP_SIZE); 64 + cpm2_immr = ioremap(get_immrbase() + 0x80000, CPM_MAP_SIZE); 65 65 #else 66 66 cpm2_immr = ioremap(get_immrbase(), CPM_MAP_SIZE); 67 67 #endif
+7 -2
arch/powerpc/sysdev/fsl_msi.c
··· 113 113 struct msi_msg *msg) 114 114 { 115 115 struct fsl_msi *msi_data = fsl_msi; 116 + struct pci_controller *hose = pci_bus_to_host(pdev->bus); 117 + u32 base = 0; 116 118 117 - msg->address_lo = msi_data->msi_addr_lo; 119 + pci_bus_read_config_dword(hose->bus, 120 + PCI_DEVFN(0, 0), PCI_BASE_ADDRESS_0, &base); 121 + 122 + msg->address_lo = msi_data->msi_addr_lo + base; 118 123 msg->address_hi = msi_data->msi_addr_hi; 119 124 msg->data = hwirq; 120 125 ··· 276 271 msi->irqhost->host_data = msi; 277 272 278 273 msi->msi_addr_hi = 0x0; 279 - msi->msi_addr_lo = res.start + features->msiir_offset; 274 + msi->msi_addr_lo = features->msiir_offset + (res.start & 0xfffff); 280 275 281 276 rc = fsl_msi_init_allocator(msi); 282 277 if (rc) {
+118 -20
arch/powerpc/sysdev/fsl_pci.c
··· 23 23 #include <linux/string.h> 24 24 #include <linux/init.h> 25 25 #include <linux/bootmem.h> 26 + #include <linux/lmb.h> 27 + #include <linux/log2.h> 26 28 27 29 #include <asm/io.h> 28 30 #include <asm/prom.h> ··· 98 96 struct resource *rsrc) 99 97 { 100 98 struct ccsr_pci __iomem *pci; 101 - int i, j, n; 99 + int i, j, n, mem_log, win_idx = 2; 100 + u64 mem, sz, paddr_hi = 0; 101 + u64 paddr_lo = ULLONG_MAX; 102 + u32 pcicsrbar = 0, pcicsrbar_sz; 103 + u32 piwar = PIWAR_EN | PIWAR_PF | PIWAR_TGI_LOCAL | 104 + PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP; 105 + char *name = hose->dn->full_name; 102 106 103 107 pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n", 104 108 (u64)rsrc->start, (u64)rsrc->end - (u64)rsrc->start + 1); ··· 124 116 for(i = 0, j = 1; i < 3; i++) { 125 117 if (!(hose->mem_resources[i].flags & IORESOURCE_MEM)) 126 118 continue; 119 + 120 + paddr_lo = min(paddr_lo, (u64)hose->mem_resources[i].start); 121 + paddr_hi = max(paddr_hi, (u64)hose->mem_resources[i].end); 127 122 128 123 n = setup_one_atmu(pci, j, &hose->mem_resources[i], 129 124 hose->pci_mem_offset); ··· 158 147 } 159 148 } 160 149 161 - /* Setup 2G inbound Memory Window @ 1 */ 162 - out_be32(&pci->piw[2].pitar, 0x00000000); 163 - out_be32(&pci->piw[2].piwbar,0x00000000); 164 - out_be32(&pci->piw[2].piwar, PIWAR_2G); 150 + /* convert to pci address space */ 151 + paddr_hi -= hose->pci_mem_offset; 152 + paddr_lo -= hose->pci_mem_offset; 153 + 154 + if (paddr_hi == paddr_lo) { 155 + pr_err("%s: No outbound window space\n", name); 156 + return ; 157 + } 158 + 159 + if (paddr_lo == 0) { 160 + pr_err("%s: No space for inbound window\n", name); 161 + return ; 162 + } 163 + 164 + /* setup PCSRBAR/PEXCSRBAR */ 165 + early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, 0xffffffff); 166 + early_read_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, &pcicsrbar_sz); 167 + pcicsrbar_sz = ~pcicsrbar_sz + 1; 168 + 169 + if (paddr_hi < (0x100000000ull - pcicsrbar_sz) || 170 + (paddr_lo > 0x100000000ull)) 171 + pcicsrbar = 0x100000000ull - pcicsrbar_sz; 172 + else 173 + pcicsrbar = (paddr_lo - pcicsrbar_sz) & -pcicsrbar_sz; 174 + early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, pcicsrbar); 175 + 176 + paddr_lo = min(paddr_lo, (u64)pcicsrbar); 177 + 178 + pr_info("%s: PCICSRBAR @ 0x%x\n", name, pcicsrbar); 179 + 180 + /* Setup inbound mem window */ 181 + mem = lmb_end_of_DRAM(); 182 + sz = min(mem, paddr_lo); 183 + mem_log = __ilog2_u64(sz); 184 + 185 + /* PCIe can overmap inbound & outbound since RX & TX are separated */ 186 + if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) { 187 + /* Size window to exact size if power-of-two or one size up */ 188 + if ((1ull << mem_log) != mem) { 189 + if ((1ull << mem_log) > mem) 190 + pr_info("%s: Setting PCI inbound window " 191 + "greater than memory size\n", name); 192 + mem_log++; 193 + } 194 + 195 + piwar |= (mem_log - 1); 196 + 197 + /* Setup inbound memory window */ 198 + out_be32(&pci->piw[win_idx].pitar, 0x00000000); 199 + out_be32(&pci->piw[win_idx].piwbar, 0x00000000); 200 + out_be32(&pci->piw[win_idx].piwar, piwar); 201 + win_idx--; 202 + 203 + hose->dma_window_base_cur = 0x00000000; 204 + hose->dma_window_size = (resource_size_t)sz; 205 + } else { 206 + u64 paddr = 0; 207 + 208 + /* Setup inbound memory window */ 209 + out_be32(&pci->piw[win_idx].pitar, paddr >> 12); 210 + out_be32(&pci->piw[win_idx].piwbar, paddr >> 12); 211 + out_be32(&pci->piw[win_idx].piwar, (piwar | (mem_log - 1))); 212 + win_idx--; 213 + 214 + paddr += 1ull << mem_log; 215 + sz -= 1ull << mem_log; 216 + 217 + if (sz) { 218 + mem_log = __ilog2_u64(sz); 219 + piwar |= (mem_log - 1); 220 + 221 + out_be32(&pci->piw[win_idx].pitar, paddr >> 12); 222 + out_be32(&pci->piw[win_idx].piwbar, paddr >> 12); 223 + out_be32(&pci->piw[win_idx].piwar, piwar); 224 + win_idx--; 225 + 226 + paddr += 1ull << mem_log; 227 + } 228 + 229 + hose->dma_window_base_cur = 0x00000000; 230 + hose->dma_window_size = (resource_size_t)paddr; 231 + } 232 + 233 + if (hose->dma_window_size < mem) { 234 + #ifndef CONFIG_SWIOTLB 235 + pr_err("%s: ERROR: Memory size exceeds PCI ATMU ability to " 236 + "map - enable CONFIG_SWIOTLB to avoid dma errors.\n", 237 + name); 238 + #endif 239 + /* adjusting outbound windows could reclaim space in mem map */ 240 + if (paddr_hi < 0xffffffffull) 241 + pr_warning("%s: WARNING: Outbound window cfg leaves " 242 + "gaps in memory map. Adjusting the memory map " 243 + "could reduce unnecessary bounce buffering.\n", 244 + name); 245 + 246 + pr_info("%s: DMA window size is 0x%llx\n", name, 247 + (u64)hose->dma_window_size); 248 + } 165 249 166 250 iounmap(pci); 167 251 } ··· 282 176 } 283 177 } 284 178 285 - static void __init setup_pci_pcsrbar(struct pci_controller *hose) 286 - { 287 - #ifdef CONFIG_PCI_MSI 288 - phys_addr_t immr_base; 289 - 290 - immr_base = get_immrbase(); 291 - early_write_config_dword(hose, 0, 0, PCI_BASE_ADDRESS_0, immr_base); 292 - #endif 293 - } 294 - 295 179 void fsl_pcibios_fixup_bus(struct pci_bus *bus) 296 180 { 297 - struct pci_controller *hose = (struct pci_controller *) bus->sysdata; 181 + struct pci_controller *hose = pci_bus_to_host(bus); 298 182 int i; 299 183 300 184 if ((bus->parent == hose->bus) && ··· 365 269 /* Setup PEX window registers */ 366 270 setup_pci_atmu(hose, &rsrc); 367 271 368 - /* Setup PEXCSRBAR */ 369 - setup_pci_pcsrbar(hose); 370 272 return 0; 371 273 } 372 274 ··· 375 281 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8547E, quirk_fsl_pcie_header); 376 282 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545E, quirk_fsl_pcie_header); 377 283 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545, quirk_fsl_pcie_header); 284 + DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8569E, quirk_fsl_pcie_header); 285 + DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8569, quirk_fsl_pcie_header); 378 286 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568E, quirk_fsl_pcie_header); 379 287 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568, quirk_fsl_pcie_header); 380 288 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567E, quirk_fsl_pcie_header); ··· 392 296 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_header); 393 297 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_header); 394 298 DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header); 299 + DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2020E, quirk_fsl_pcie_header); 300 + DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2020, quirk_fsl_pcie_header); 395 301 #endif /* CONFIG_PPC_85xx || CONFIG_PPC_86xx */ 396 302 397 303 #if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x) ··· 422 324 423 325 static int mpc83xx_pcie_exclude_device(struct pci_bus *bus, unsigned int devfn) 424 326 { 425 - struct pci_controller *hose = bus->sysdata; 327 + struct pci_controller *hose = pci_bus_to_host(bus); 426 328 427 329 if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK) 428 330 return PCIBIOS_DEVICE_NOT_FOUND; ··· 448 350 static void __iomem *mpc83xx_pcie_remap_cfg(struct pci_bus *bus, 449 351 unsigned int devfn, int offset) 450 352 { 451 - struct pci_controller *hose = bus->sysdata; 353 + struct pci_controller *hose = pci_bus_to_host(bus); 452 354 struct mpc83xx_pcie_priv *pcie = hose->dn->data; 453 355 u8 bus_no = bus->number - hose->first_busno; 454 356 u32 dev_base = bus_no << 24 | devfn << 16;
+5 -1
arch/powerpc/sysdev/fsl_pci.h
··· 16 16 17 17 #define PCIE_LTSSM 0x0404 /* PCIE Link Training and Status */ 18 18 #define PCIE_LTSSM_L0 0x16 /* L0 state */ 19 - #define PIWAR_2G 0xa0f5501e /* Enable, Prefetch, Local Mem, Snoop R/W, 2G */ 19 + #define PIWAR_EN 0x80000000 /* Enable */ 20 + #define PIWAR_PF 0x20000000 /* prefetch */ 21 + #define PIWAR_TGI_LOCAL 0x00f00000 /* target - local memory */ 22 + #define PIWAR_READ_SNOOP 0x00050000 23 + #define PIWAR_WRITE_SNOOP 0x00005000 20 24 21 25 /* PCI/PCI Express outbound window reg */ 22 26 struct pci_outbound_window_regs {
+8 -7
arch/powerpc/sysdev/fsl_rio.c
··· 1026 1026 return -EFAULT; 1027 1027 } 1028 1028 dev_info(&dev->dev, "Of-device full name %s\n", dev->node->full_name); 1029 - dev_info(&dev->dev, "Regs start 0x%08x size 0x%08x\n", regs.start, 1030 - regs.end - regs.start + 1); 1029 + dev_info(&dev->dev, "Regs: %pR\n", &regs); 1031 1030 1032 1031 dt_range = of_get_property(dev->node, "ranges", &rlen); 1033 1032 if (!dt_range) { ··· 1076 1077 1077 1078 INIT_LIST_HEAD(&port->dbells); 1078 1079 port->iores.start = law_start; 1079 - port->iores.end = law_start + law_size; 1080 + port->iores.end = law_start + law_size - 1; 1080 1081 port->iores.flags = IORESOURCE_MEM; 1082 + port->iores.name = "rio_io_win"; 1081 1083 1082 1084 priv->bellirq = irq_of_parse_and_map(dev->node, 2); 1083 1085 priv->txirq = irq_of_parse_and_map(dev->node, 3); ··· 1156 1156 out_be32((priv->regs_win + RIO_ISR_AACR), RIO_ISR_AACR_AA); 1157 1157 1158 1158 /* Configure maintenance transaction window */ 1159 - out_be32(&priv->maint_atmu_regs->rowbar, 0x000c0000); 1160 - out_be32(&priv->maint_atmu_regs->rowar, 0x80077015); 1159 + out_be32(&priv->maint_atmu_regs->rowbar, law_start >> 12); 1160 + out_be32(&priv->maint_atmu_regs->rowar, 0x80077015); /* 4M */ 1161 1161 1162 1162 priv->maint_win = ioremap(law_start, RIO_MAINT_WIN_SIZE); 1163 1163 1164 1164 /* Configure outbound doorbell window */ 1165 - out_be32(&priv->dbell_atmu_regs->rowbar, 0x000c0400); 1166 - out_be32(&priv->dbell_atmu_regs->rowar, 0x8004200b); 1165 + out_be32(&priv->dbell_atmu_regs->rowbar, 1166 + (law_start + RIO_MAINT_WIN_SIZE) >> 12); 1167 + out_be32(&priv->dbell_atmu_regs->rowar, 0x8004200b); /* 4k */ 1167 1168 fsl_rio_doorbell_init(port); 1168 1169 1169 1170 return 0;
+4 -10
arch/powerpc/sysdev/fsl_soc.c
··· 379 379 struct device_node *np; 380 380 np = of_find_node_by_name(NULL, "global-utilities"); 381 381 if ((np && of_get_property(np, "fsl,has-rstcr", NULL))) { 382 - const u32 *prop = of_get_property(np, "reg", NULL); 383 - if (prop) { 384 - /* map reset control register 385 - * 0xE00B0 is offset of reset control register 386 - */ 387 - rstcr = ioremap(get_immrbase() + *prop + 0xB0, 0xff); 388 - if (!rstcr) 389 - printk (KERN_EMERG "Error: reset control " 390 - "register not mapped!\n"); 391 - } 382 + rstcr = of_iomap(np, 0) + 0xb0; 383 + if (!rstcr) 384 + printk (KERN_EMERG "Error: reset control register " 385 + "not mapped!\n"); 392 386 } else 393 387 printk (KERN_INFO "rstcr compatible register does not exist!\n"); 394 388 if (np)
+2 -2
arch/powerpc/sysdev/indirect_pci.c
··· 24 24 indirect_read_config(struct pci_bus *bus, unsigned int devfn, int offset, 25 25 int len, u32 *val) 26 26 { 27 - struct pci_controller *hose = bus->sysdata; 27 + struct pci_controller *hose = pci_bus_to_host(bus); 28 28 volatile void __iomem *cfg_data; 29 29 u8 cfg_type = 0; 30 30 u32 bus_no, reg; ··· 82 82 indirect_write_config(struct pci_bus *bus, unsigned int devfn, int offset, 83 83 int len, u32 val) 84 84 { 85 - struct pci_controller *hose = bus->sysdata; 85 + struct pci_controller *hose = pci_bus_to_host(bus); 86 86 volatile void __iomem *cfg_data; 87 87 u8 cfg_type = 0; 88 88 u32 bus_no, reg;
+13 -14
arch/powerpc/sysdev/mpic.c
··· 613 613 #define mpic_irq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq) 614 614 615 615 /* Find an mpic associated with a given linux interrupt */ 616 - static struct mpic *mpic_find(unsigned int irq, unsigned int *is_ipi) 616 + static struct mpic *mpic_find(unsigned int irq) 617 617 { 618 - unsigned int src = mpic_irq_to_hw(irq); 619 - struct mpic *mpic; 620 - 621 618 if (irq < NUM_ISA_INTERRUPTS) 622 619 return NULL; 623 620 624 - mpic = irq_desc[irq].chip_data; 625 - 626 - if (is_ipi) 627 - *is_ipi = (src >= mpic->ipi_vecs[0] && 628 - src <= mpic->ipi_vecs[3]); 629 - 630 - return mpic; 621 + return irq_desc[irq].chip_data; 631 622 } 623 + 624 + /* Determine if the linux irq is an IPI */ 625 + static unsigned int mpic_is_ipi(struct mpic *mpic, unsigned int irq) 626 + { 627 + unsigned int src = mpic_irq_to_hw(irq); 628 + 629 + return (src >= mpic->ipi_vecs[0] && src <= mpic->ipi_vecs[3]); 630 + } 631 + 632 632 633 633 /* Convert a cpu mask from logical to physical cpu numbers. */ 634 634 static inline u32 mpic_physmask(u32 cpumask) ··· 1383 1383 1384 1384 void mpic_irq_set_priority(unsigned int irq, unsigned int pri) 1385 1385 { 1386 - unsigned int is_ipi; 1387 - struct mpic *mpic = mpic_find(irq, &is_ipi); 1386 + struct mpic *mpic = mpic_find(irq); 1388 1387 unsigned int src = mpic_irq_to_hw(irq); 1389 1388 unsigned long flags; 1390 1389 u32 reg; ··· 1392 1393 return; 1393 1394 1394 1395 spin_lock_irqsave(&mpic_lock, flags); 1395 - if (is_ipi) { 1396 + if (mpic_is_ipi(mpic, irq)) { 1396 1397 reg = mpic_ipi_read(src - mpic->ipi_vecs[0]) & 1397 1398 ~MPIC_VECPRI_PRIORITY_MASK; 1398 1399 mpic_ipi_write(src - mpic->ipi_vecs[0],
+2 -2
arch/powerpc/sysdev/ppc4xx_pci.c
··· 1295 1295 static int ppc4xx_pciex_read_config(struct pci_bus *bus, unsigned int devfn, 1296 1296 int offset, int len, u32 *val) 1297 1297 { 1298 - struct pci_controller *hose = (struct pci_controller *) bus->sysdata; 1298 + struct pci_controller *hose = pci_bus_to_host(bus); 1299 1299 struct ppc4xx_pciex_port *port = 1300 1300 &ppc4xx_pciex_ports[hose->indirect_type]; 1301 1301 void __iomem *addr; ··· 1352 1352 static int ppc4xx_pciex_write_config(struct pci_bus *bus, unsigned int devfn, 1353 1353 int offset, int len, u32 val) 1354 1354 { 1355 - struct pci_controller *hose = (struct pci_controller *) bus->sysdata; 1355 + struct pci_controller *hose = pci_bus_to_host(bus); 1356 1356 struct ppc4xx_pciex_port *port = 1357 1357 &ppc4xx_pciex_ports[hose->indirect_type]; 1358 1358 void __iomem *addr;
+71 -4
arch/powerpc/sysdev/qe_lib/qe.c
··· 61 61 EXPORT_SYMBOL(qe_immr); 62 62 63 63 static struct qe_snum snums[QE_NUM_OF_SNUM]; /* Dynamically allocated SNUMs */ 64 + static unsigned int qe_num_of_snum; 64 65 65 66 static phys_addr_t qebase = -1; 66 67 ··· 265 264 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D, 266 265 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89, 267 266 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9, 268 - 0xD8, 0xD9, 0xE8, 0xE9, 267 + 0xD8, 0xD9, 0xE8, 0xE9, 0x08, 0x09, 0x18, 0x19, 268 + 0x28, 0x29, 0x38, 0x39, 0x48, 0x49, 0x58, 0x59, 269 + 0x68, 0x69, 0x78, 0x79, 0x80, 0x81, 269 270 }; 270 271 271 - for (i = 0; i < QE_NUM_OF_SNUM; i++) { 272 + qe_num_of_snum = qe_get_num_of_snums(); 273 + 274 + for (i = 0; i < qe_num_of_snum; i++) { 272 275 snums[i].num = snum_init[i]; 273 276 snums[i].state = QE_SNUM_STATE_FREE; 274 277 } ··· 285 280 int i; 286 281 287 282 spin_lock_irqsave(&qe_lock, flags); 288 - for (i = 0; i < QE_NUM_OF_SNUM; i++) { 283 + for (i = 0; i < qe_num_of_snum; i++) { 289 284 if (snums[i].state == QE_SNUM_STATE_FREE) { 290 285 snums[i].state = QE_SNUM_STATE_USED; 291 286 snum = snums[i].num; ··· 302 297 { 303 298 int i; 304 299 305 - for (i = 0; i < QE_NUM_OF_SNUM; i++) { 300 + for (i = 0; i < qe_num_of_snum; i++) { 306 301 if (snums[i].num == snum) { 307 302 snums[i].state = QE_SNUM_STATE_FREE; 308 303 break; ··· 580 575 } 581 576 EXPORT_SYMBOL(qe_get_firmware_info); 582 577 578 + unsigned int qe_get_num_of_risc(void) 579 + { 580 + struct device_node *qe; 581 + int size; 582 + unsigned int num_of_risc = 0; 583 + const u32 *prop; 584 + 585 + qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 586 + if (!qe) { 587 + /* Older devices trees did not have an "fsl,qe" 588 + * compatible property, so we need to look for 589 + * the QE node by name. 590 + */ 591 + qe = of_find_node_by_type(NULL, "qe"); 592 + if (!qe) 593 + return num_of_risc; 594 + } 595 + 596 + prop = of_get_property(qe, "fsl,qe-num-riscs", &size); 597 + if (prop && size == sizeof(*prop)) 598 + num_of_risc = *prop; 599 + 600 + of_node_put(qe); 601 + 602 + return num_of_risc; 603 + } 604 + EXPORT_SYMBOL(qe_get_num_of_risc); 605 + 606 + unsigned int qe_get_num_of_snums(void) 607 + { 608 + struct device_node *qe; 609 + int size; 610 + unsigned int num_of_snums; 611 + const u32 *prop; 612 + 613 + num_of_snums = 28; /* The default number of snum for threads is 28 */ 614 + qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 615 + if (!qe) { 616 + /* Older devices trees did not have an "fsl,qe" 617 + * compatible property, so we need to look for 618 + * the QE node by name. 619 + */ 620 + qe = of_find_node_by_type(NULL, "qe"); 621 + if (!qe) 622 + return num_of_snums; 623 + } 624 + 625 + prop = of_get_property(qe, "fsl,qe-num-snums", &size); 626 + if (prop && size == sizeof(*prop)) { 627 + num_of_snums = *prop; 628 + if ((num_of_snums < 28) || (num_of_snums > QE_NUM_OF_SNUM)) { 629 + /* No QE ever has fewer than 28 SNUMs */ 630 + pr_err("QE: number of snum is invalid\n"); 631 + return -EINVAL; 632 + } 633 + } 634 + 635 + of_node_put(qe); 636 + 637 + return num_of_snums; 638 + } 639 + EXPORT_SYMBOL(qe_get_num_of_snums);
+2 -2
arch/powerpc/sysdev/tsi108_pci.c
··· 63 63 int offset, int len, u32 val) 64 64 { 65 65 volatile unsigned char *cfg_addr; 66 - struct pci_controller *hose = bus->sysdata; 66 + struct pci_controller *hose = pci_bus_to_host(bus); 67 67 68 68 if (ppc_md.pci_exclude_device) 69 69 if (ppc_md.pci_exclude_device(hose, bus->number, devfunc)) ··· 149 149 int len, u32 * val) 150 150 { 151 151 volatile unsigned char *cfg_addr; 152 - struct pci_controller *hose = bus->sysdata; 152 + struct pci_controller *hose = pci_bus_to_host(bus); 153 153 u32 temp; 154 154 155 155 if (ppc_md.pci_exclude_device)
+63 -18
arch/powerpc/sysdev/xilinx_intc.c
··· 25 25 #include <linux/of.h> 26 26 #include <asm/io.h> 27 27 #include <asm/processor.h> 28 + #include <asm/i8259.h> 28 29 #include <asm/irq.h> 29 30 30 31 /* ··· 192 191 xilinx_intc_init(struct device_node *np) 193 192 { 194 193 struct irq_host * irq; 195 - struct resource res; 196 194 void * regs; 197 - int rc; 198 195 199 196 /* Find and map the intc registers */ 200 - rc = of_address_to_resource(np, 0, &res); 201 - if (rc) { 202 - printk(KERN_ERR __FILE__ ": of_address_to_resource() failed\n"); 197 + regs = of_iomap(np, 0); 198 + if (!regs) { 199 + pr_err("xilinx_intc: could not map registers\n"); 203 200 return NULL; 204 201 } 205 - regs = ioremap(res.start, 32); 206 - 207 - printk(KERN_INFO "Xilinx intc at 0x%08llx mapped to 0x%p\n", 208 - (unsigned long long) res.start, regs); 209 202 210 203 /* Setup interrupt controller */ 211 204 out_be32(regs + XINTC_IER, 0); /* disable all irqs */ ··· 212 217 if (!irq) 213 218 panic(__FILE__ ": Cannot allocate IRQ host\n"); 214 219 irq->host_data = regs; 220 + 215 221 return irq; 216 222 } 217 223 ··· 223 227 return irq_linear_revmap(master_irqhost, in_be32(regs + XINTC_IVR)); 224 228 } 225 229 230 + #if defined(CONFIG_PPC_I8259) 231 + /* 232 + * Support code for cascading to 8259 interrupt controllers 233 + */ 234 + static void xilinx_i8259_cascade(unsigned int irq, struct irq_desc *desc) 235 + { 236 + unsigned int cascade_irq = i8259_irq(); 237 + if (cascade_irq) 238 + generic_handle_irq(cascade_irq); 239 + 240 + /* Let xilinx_intc end the interrupt */ 241 + desc->chip->ack(irq); 242 + desc->chip->unmask(irq); 243 + } 244 + 245 + static void __init xilinx_i8259_setup_cascade(void) 246 + { 247 + struct device_node *cascade_node; 248 + int cascade_irq; 249 + 250 + /* Initialize i8259 controller */ 251 + cascade_node = of_find_compatible_node(NULL, NULL, "chrp,iic"); 252 + if (!cascade_node) 253 + return; 254 + 255 + cascade_irq = irq_of_parse_and_map(cascade_node, 0); 256 + if (!cascade_irq) { 257 + pr_err("virtex_ml510: Failed to map cascade interrupt\n"); 258 + goto out; 259 + } 260 + 261 + i8259_init(cascade_node, 0); 262 + set_irq_chained_handler(cascade_irq, xilinx_i8259_cascade); 263 + 264 + /* Program irq 7 (usb/audio), 14/15 (ide) to level sensitive */ 265 + /* This looks like a dirty hack to me --gcl */ 266 + outb(0xc0, 0x4d0); 267 + outb(0xc0, 0x4d1); 268 + 269 + out: 270 + of_node_put(cascade_node); 271 + } 272 + #else 273 + static inline void xilinx_i8259_setup_cascade(void) { return; } 274 + #endif /* defined(CONFIG_PPC_I8259) */ 275 + 276 + static struct of_device_id xilinx_intc_match[] __initconst = { 277 + { .compatible = "xlnx,opb-intc-1.00.c", }, 278 + { .compatible = "xlnx,xps-intc-1.00.a", }, 279 + {} 280 + }; 281 + 282 + /* 283 + * Initialize master Xilinx interrupt controller 284 + */ 226 285 void __init xilinx_intc_init_tree(void) 227 286 { 228 287 struct device_node *np; 229 288 230 289 /* find top level interrupt controller */ 231 - for_each_compatible_node(np, NULL, "xlnx,opb-intc-1.00.c") { 290 + for_each_matching_node(np, xilinx_intc_match) { 232 291 if (!of_get_property(np, "interrupts", NULL)) 233 292 break; 234 293 } 235 - if (!np) { 236 - for_each_compatible_node(np, NULL, "xlnx,xps-intc-1.00.a") { 237 - if (!of_get_property(np, "interrupts", NULL)) 238 - break; 239 - } 240 - } 241 - 242 - /* xilinx interrupt controller needs to be top level */ 243 294 BUG_ON(!np); 244 295 245 296 master_irqhost = xilinx_intc_init(np); ··· 294 251 295 252 irq_set_default_host(master_irqhost); 296 253 of_node_put(np); 254 + 255 + xilinx_i8259_setup_cascade(); 297 256 }
+132
arch/powerpc/sysdev/xilinx_pci.c
··· 1 + /* 2 + * PCI support for Xilinx plbv46_pci soft-core which can be used on 3 + * Xilinx Virtex ML410 / ML510 boards. 4 + * 5 + * Copyright 2009 Roderick Colenbrander 6 + * Copyright 2009 Secret Lab Technologies Ltd. 7 + * 8 + * The pci bridge fixup code was copied from ppc4xx_pci.c and was written 9 + * by Benjamin Herrenschmidt. 10 + * Copyright 2007 Ben. Herrenschmidt <benh@kernel.crashing.org>, IBM Corp. 11 + * 12 + * This file is licensed under the terms of the GNU General Public License 13 + * version 2. This program is licensed "as is" without any warranty of any 14 + * kind, whether express or implied. 15 + */ 16 + 17 + #include <linux/ioport.h> 18 + #include <linux/of.h> 19 + #include <linux/pci.h> 20 + #include <mm/mmu_decl.h> 21 + #include <asm/io.h> 22 + #include <asm/xilinx_pci.h> 23 + 24 + #define XPLB_PCI_ADDR 0x10c 25 + #define XPLB_PCI_DATA 0x110 26 + #define XPLB_PCI_BUS 0x114 27 + 28 + #define PCI_HOST_ENABLE_CMD PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY 29 + 30 + static struct of_device_id xilinx_pci_match[] = { 31 + { .compatible = "xlnx,plbv46-pci-1.03.a", }, 32 + {} 33 + }; 34 + 35 + /** 36 + * xilinx_pci_fixup_bridge - Block Xilinx PHB configuration. 37 + */ 38 + static void xilinx_pci_fixup_bridge(struct pci_dev *dev) 39 + { 40 + struct pci_controller *hose; 41 + int i; 42 + 43 + if (dev->devfn || dev->bus->self) 44 + return; 45 + 46 + hose = pci_bus_to_host(dev->bus); 47 + if (!hose) 48 + return; 49 + 50 + if (!of_match_node(xilinx_pci_match, hose->dn)) 51 + return; 52 + 53 + /* Hide the PCI host BARs from the kernel as their content doesn't 54 + * fit well in the resource management 55 + */ 56 + for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { 57 + dev->resource[i].start = 0; 58 + dev->resource[i].end = 0; 59 + dev->resource[i].flags = 0; 60 + } 61 + 62 + dev_info(&dev->dev, "Hiding Xilinx plb-pci host bridge resources %s\n", 63 + pci_name(dev)); 64 + } 65 + DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, xilinx_pci_fixup_bridge); 66 + 67 + /** 68 + * xilinx_pci_exclude_device - Don't do config access for non-root bus 69 + * 70 + * This is a hack. Config access to any bus other than bus 0 does not 71 + * currently work on the ML510 so we prevent it here. 72 + */ 73 + static int 74 + xilinx_pci_exclude_device(struct pci_controller *hose, u_char bus, u8 devfn) 75 + { 76 + return (bus != 0); 77 + } 78 + 79 + /** 80 + * xilinx_pci_init - Find and register a Xilinx PCI host bridge 81 + */ 82 + void __init xilinx_pci_init(void) 83 + { 84 + struct pci_controller *hose; 85 + struct resource r; 86 + void __iomem *pci_reg; 87 + struct device_node *pci_node; 88 + 89 + pci_node = of_find_matching_node(NULL, xilinx_pci_match); 90 + if(!pci_node) 91 + return; 92 + 93 + if (of_address_to_resource(pci_node, 0, &r)) { 94 + pr_err("xilinx-pci: cannot resolve base address\n"); 95 + return; 96 + } 97 + 98 + hose = pcibios_alloc_controller(pci_node); 99 + if (!hose) { 100 + pr_err("xilinx-pci: pcibios_alloc_controller() failed\n"); 101 + return; 102 + } 103 + 104 + /* Setup config space */ 105 + setup_indirect_pci(hose, r.start + XPLB_PCI_ADDR, 106 + r.start + XPLB_PCI_DATA, 107 + PPC_INDIRECT_TYPE_SET_CFG_TYPE); 108 + 109 + /* According to the xilinx plbv46_pci documentation the soft-core starts 110 + * a self-init when the bus master enable bit is set. Without this bit 111 + * set the pci bus can't be scanned. 112 + */ 113 + early_write_config_word(hose, 0, 0, PCI_COMMAND, PCI_HOST_ENABLE_CMD); 114 + 115 + /* Set the max latency timer to 255 */ 116 + early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0xff); 117 + 118 + /* Set the max bus number to 255 */ 119 + pci_reg = of_iomap(pci_node, 0); 120 + out_8(pci_reg + XPLB_PCI_BUS, 0xff); 121 + iounmap(pci_reg); 122 + 123 + /* Nothing past the root bridge is working right now. By default 124 + * exclude config access to anything except bus 0 */ 125 + if (!ppc_md.pci_exclude_device) 126 + ppc_md.pci_exclude_device = xilinx_pci_exclude_device; 127 + 128 + /* Register the host bridge with the linux kernel! */ 129 + pci_process_bridge_OF_ranges(hose, pci_node, 1); 130 + 131 + pr_info("xilinx-pci: Registered PCI host bridge\n"); 132 + }
+47
arch/powerpc/xmon/xmon.c
··· 110 110 static void dump(void); 111 111 static void prdump(unsigned long, long); 112 112 static int ppc_inst_dump(unsigned long, long, int); 113 + static void dump_log_buf(void); 113 114 static void backtrace(struct pt_regs *); 114 115 static void excprint(struct pt_regs *); 115 116 static void prregs(struct pt_regs *); ··· 198 197 di dump instructions\n\ 199 198 df dump float values\n\ 200 199 dd dump double values\n\ 200 + dl dump the kernel log buffer\n\ 201 201 dr dump stream of raw bytes\n\ 202 202 e print exception information\n\ 203 203 f flush cache\n\ ··· 2011 2009 nidump = MAX_DUMP; 2012 2010 adrs += ppc_inst_dump(adrs, nidump, 1); 2013 2011 last_cmd = "di\n"; 2012 + } else if (c == 'l') { 2013 + dump_log_buf(); 2014 2014 } else if (c == 'r') { 2015 2015 scanhex(&ndump); 2016 2016 if (ndump == 0) ··· 2126 2122 xmon_print_symbol(addr, "\t# ", ""); 2127 2123 } 2128 2124 2125 + void 2126 + dump_log_buf(void) 2127 + { 2128 + const unsigned long size = 128; 2129 + unsigned long end, addr; 2130 + unsigned char buf[size + 1]; 2131 + 2132 + addr = 0; 2133 + buf[size] = '\0'; 2134 + 2135 + if (setjmp(bus_error_jmp) != 0) { 2136 + printf("Unable to lookup symbol __log_buf!\n"); 2137 + return; 2138 + } 2139 + 2140 + catch_memory_errors = 1; 2141 + sync(); 2142 + addr = kallsyms_lookup_name("__log_buf"); 2143 + 2144 + if (! addr) 2145 + printf("Symbol __log_buf not found!\n"); 2146 + else { 2147 + end = addr + (1 << CONFIG_LOG_BUF_SHIFT); 2148 + while (addr < end) { 2149 + if (! mread(addr, buf, size)) { 2150 + printf("Can't read memory at address 0x%lx\n", addr); 2151 + break; 2152 + } 2153 + 2154 + printf("%s", buf); 2155 + 2156 + if (strlen(buf) < size) 2157 + break; 2158 + 2159 + addr += size; 2160 + } 2161 + } 2162 + 2163 + sync(); 2164 + /* wait a little while to see if we get a machine check */ 2165 + __delay(200); 2166 + catch_memory_errors = 0; 2167 + } 2129 2168 2130 2169 /* 2131 2170 * Memory operations - move, set, print differences
+1 -1
drivers/char/viotape.c
··· 867 867 int j; 868 868 struct device_node *node = vdev->dev.archdata.of_node; 869 869 870 - if (i > VIOTAPE_MAX_TAPE) 870 + if (i >= VIOTAPE_MAX_TAPE) 871 871 return -ENODEV; 872 872 if (!node) 873 873 return -ENODEV;
+3 -3
drivers/i2c/busses/i2c-ibm_iic.c
··· 756 756 goto error_cleanup; 757 757 } 758 758 759 - /* Now register all the child nodes */ 760 - of_register_i2c_devices(adap, np); 761 - 762 759 dev_info(&ofdev->dev, "using %s mode\n", 763 760 dev->fast_mode ? "fast (400 kHz)" : "standard (100 kHz)"); 761 + 762 + /* Now register all the child nodes */ 763 + of_register_i2c_devices(adap, np); 764 764 765 765 return 0; 766 766
+3 -1
drivers/macintosh/therm_adt746x.c
··· 37 37 #define CONFIG_REG 0x40 38 38 #define MANUAL_MASK 0xe0 39 39 #define AUTO_MASK 0x20 40 + #define INVERT_MASK 0x10 40 41 41 42 static u8 TEMP_REG[3] = {0x26, 0x25, 0x27}; /* local, sensor1, sensor2 */ 42 43 static u8 LIMIT_REG[3] = {0x6b, 0x6a, 0x6c}; /* local, sensor1, sensor2 */ ··· 230 229 231 230 if (speed >= 0) { 232 231 manual = read_reg(th, MANUAL_MODE[fan]); 233 - write_reg(th, MANUAL_MODE[fan], manual|MANUAL_MASK); 232 + write_reg(th, MANUAL_MODE[fan], 233 + (manual|MANUAL_MASK) & (~INVERT_MASK)); 234 234 write_reg(th, FAN_SPD_SET[fan], speed); 235 235 } else { 236 236 /* back to automatic */
+20 -4
drivers/net/ucc_geth.c
··· 270 270 u8 num_entries, 271 271 u32 thread_size, 272 272 u32 thread_alignment, 273 - enum qe_risc_allocation risc, 273 + unsigned int risc, 274 274 int skip_page_for_first_entry) 275 275 { 276 276 u32 init_enet_offset; ··· 307 307 static int return_init_enet_entries(struct ucc_geth_private *ugeth, 308 308 u32 *p_start, 309 309 u8 num_entries, 310 - enum qe_risc_allocation risc, 310 + unsigned int risc, 311 311 int skip_page_for_first_entry) 312 312 { 313 313 u32 init_enet_offset; ··· 342 342 u32 __iomem *p_start, 343 343 u8 num_entries, 344 344 u32 thread_size, 345 - enum qe_risc_allocation risc, 345 + unsigned int risc, 346 346 int skip_page_for_first_entry) 347 347 { 348 348 u32 init_enet_offset; ··· 2135 2135 return -ENOMEM; 2136 2136 } 2137 2137 2138 + /* read the number of risc engines, update the riscTx and riscRx 2139 + * if there are 4 riscs in QE 2140 + */ 2141 + if (qe_get_num_of_risc() == 4) { 2142 + ug_info->riscTx = QE_RISC_ALLOCATION_FOUR_RISCS; 2143 + ug_info->riscRx = QE_RISC_ALLOCATION_FOUR_RISCS; 2144 + } 2145 + 2138 2146 ugeth->ug_regs = ioremap(uf_info->regs, sizeof(*ugeth->ug_regs)); 2139 2147 if (!ugeth->ug_regs) { 2140 2148 if (netif_msg_probe(ugeth)) ··· 3710 3702 ug_info->uf_info.utfet = UCC_GETH_UTFET_GIGA_INIT; 3711 3703 ug_info->uf_info.utftt = UCC_GETH_UTFTT_GIGA_INIT; 3712 3704 ug_info->numThreadsTx = UCC_GETH_NUM_OF_THREADS_4; 3713 - ug_info->numThreadsRx = UCC_GETH_NUM_OF_THREADS_4; 3705 + 3706 + /* If QE's snum number is 46 which means we need to support 3707 + * 4 UECs at 1000Base-T simultaneously, we need to allocate 3708 + * more Threads to Rx. 3709 + */ 3710 + if (qe_get_num_of_snums() == 46) 3711 + ug_info->numThreadsRx = UCC_GETH_NUM_OF_THREADS_6; 3712 + else 3713 + ug_info->numThreadsRx = UCC_GETH_NUM_OF_THREADS_4; 3714 3714 } 3715 3715 3716 3716 if (netif_msg_probe(&debug))
+2 -2
drivers/net/ucc_geth.h
··· 1120 1120 enum ucc_geth_maccfg2_pad_and_crc_mode padAndCrc; 1121 1121 enum ucc_geth_num_of_threads numThreadsTx; 1122 1122 enum ucc_geth_num_of_threads numThreadsRx; 1123 - enum qe_risc_allocation riscTx; 1124 - enum qe_risc_allocation riscRx; 1123 + unsigned int riscTx; 1124 + unsigned int riscRx; 1125 1125 }; 1126 1126 1127 1127 /* structure representing UCC GETH */
+1
drivers/of/base.c
··· 447 447 static struct of_modalias_table of_modalias_table[] = { 448 448 { "fsl,mcu-mpc8349emitx", "mcu-mpc8349emitx" }, 449 449 { "mmc-spi-slot", "mmc_spi" }, 450 + { "stm,m25p40", "m25p80" }, 450 451 }; 451 452 452 453 /**
-1
drivers/pci/Makefile
··· 39 39 obj-$(CONFIG_ARM) += setup-bus.o setup-irq.o 40 40 obj-$(CONFIG_PARISC) += setup-bus.o 41 41 obj-$(CONFIG_SUPERH) += setup-bus.o setup-irq.o 42 - obj-$(CONFIG_PPC32) += setup-irq.o 43 42 obj-$(CONFIG_PPC) += setup-bus.o 44 43 obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o 45 44 obj-$(CONFIG_X86_VISWS) += setup-irq.o
+3 -3
drivers/rapidio/rio-scan.c
··· 290 290 * to a RIO device on success or NULL on failure. 291 291 * 292 292 */ 293 - static struct rio_dev *rio_setup_device(struct rio_net *net, 293 + static struct rio_dev __devinit *rio_setup_device(struct rio_net *net, 294 294 struct rio_mport *port, u16 destid, 295 295 u8 hopcount, int do_enum) 296 296 { ··· 559 559 * Recursively enumerates a RIO network. Transactions are sent via the 560 560 * master port passed in @port. 561 561 */ 562 - static int rio_enum_peer(struct rio_net *net, struct rio_mport *port, 562 + static int __devinit rio_enum_peer(struct rio_net *net, struct rio_mport *port, 563 563 u8 hopcount) 564 564 { 565 565 int port_num; ··· 718 718 * Recursively discovers a RIO network. Transactions are sent via the 719 719 * master port passed in @port. 720 720 */ 721 - static int 721 + static int __devinit 722 722 rio_disc_peer(struct rio_net *net, struct rio_mport *port, u16 destid, 723 723 u8 hopcount) 724 724 {
+150 -138
drivers/video/xilinxfb.c
··· 1 1 /* 2 - * xilinxfb.c 3 - * 4 - * Xilinx TFT LCD frame buffer driver 2 + * Xilinx TFT frame buffer driver 5 3 * 6 4 * Author: MontaVista Software, Inc. 7 5 * source@mvista.com 8 6 * 9 7 * 2002-2007 (c) MontaVista Software, Inc. 10 8 * 2007 (c) Secret Lab Technologies, Ltd. 9 + * 2009 (c) Xilinx Inc. 11 10 * 12 11 * This file is licensed under the terms of the GNU General Public License 13 12 * version 2. This program is licensed "as is" without any warranty of any ··· 23 24 #include <linux/device.h> 24 25 #include <linux/module.h> 25 26 #include <linux/kernel.h> 27 + #include <linux/version.h> 26 28 #include <linux/errno.h> 27 29 #include <linux/string.h> 28 30 #include <linux/mm.h> 29 31 #include <linux/fb.h> 30 32 #include <linux/init.h> 31 33 #include <linux/dma-mapping.h> 32 - #include <linux/platform_device.h> 33 - #if defined(CONFIG_OF) 34 34 #include <linux/of_device.h> 35 35 #include <linux/of_platform.h> 36 - #endif 37 - #include <asm/io.h> 36 + #include <linux/io.h> 38 37 #include <linux/xilinxfb.h> 38 + #include <asm/dcr.h> 39 39 40 40 #define DRIVER_NAME "xilinxfb" 41 - #define DRIVER_DESCRIPTION "Xilinx TFT LCD frame buffer driver" 41 + 42 42 43 43 /* 44 44 * Xilinx calls it "PLB TFT LCD Controller" though it can also be used for 45 - * the VGA port on the Xilinx ML40x board. This is a hardware display controller 46 - * for a 640x480 resolution TFT or VGA screen. 45 + * the VGA port on the Xilinx ML40x board. This is a hardware display 46 + * controller for a 640x480 resolution TFT or VGA screen. 47 47 * 48 48 * The interface to the framebuffer is nice and simple. There are two 49 49 * control registers. The first tells the LCD interface where in memory 50 50 * the frame buffer is (only the 11 most significant bits are used, so 51 51 * don't start thinking about scrolling). The second allows the LCD to 52 52 * be turned on or off as well as rotated 180 degrees. 53 + * 54 + * In case of direct PLB access the second control register will be at 55 + * an offset of 4 as compared to the DCR access where the offset is 1 56 + * i.e. REG_CTRL. So this is taken care in the function 57 + * xilinx_fb_out_be32 where it left shifts the offset 2 times in case of 58 + * direct PLB access. 53 59 */ 54 60 #define NUM_REGS 2 55 61 #define REG_FB_ADDR 0 ··· 111 107 .activate = FB_ACTIVATE_NOW 112 108 }; 113 109 110 + 111 + #define PLB_ACCESS_FLAG 0x1 /* 1 = PLB, 0 = DCR */ 112 + 114 113 struct xilinxfb_drvdata { 115 114 116 115 struct fb_info info; /* FB driver info record */ 117 116 118 - u32 regs_phys; /* phys. address of the control registers */ 119 - u32 __iomem *regs; /* virt. address of the control registers */ 117 + phys_addr_t regs_phys; /* phys. address of the control 118 + registers */ 119 + void __iomem *regs; /* virt. address of the control 120 + registers */ 121 + 122 + dcr_host_t dcr_host; 123 + unsigned int dcr_start; 124 + unsigned int dcr_len; 120 125 121 126 void *fb_virt; /* virt. address of the frame buffer */ 122 127 dma_addr_t fb_phys; /* phys. address of the frame buffer */ 123 128 int fb_alloced; /* Flag, was the fb memory alloced? */ 129 + 130 + u8 flags; /* features of the driver */ 124 131 125 132 u32 reg_ctrl_default; 126 133 ··· 143 128 container_of(_info, struct xilinxfb_drvdata, info) 144 129 145 130 /* 146 - * The LCD controller has DCR interface to its registers, but all 147 - * the boards and configurations the driver has been tested with 148 - * use opb2dcr bridge. So the registers are seen as memory mapped. 149 - * This macro is to make it simple to add the direct DCR access 150 - * when it's needed. 131 + * The XPS TFT Controller can be accessed through PLB or DCR interface. 132 + * To perform the read/write on the registers we need to check on 133 + * which bus its connected and call the appropriate write API. 151 134 */ 152 - #define xilinx_fb_out_be32(driverdata, offset, val) \ 153 - out_be32(driverdata->regs + offset, val) 135 + static void xilinx_fb_out_be32(struct xilinxfb_drvdata *drvdata, u32 offset, 136 + u32 val) 137 + { 138 + if (drvdata->flags & PLB_ACCESS_FLAG) 139 + out_be32(drvdata->regs + (offset << 2), val); 140 + else 141 + dcr_write(drvdata->dcr_host, offset, val); 142 + 143 + } 154 144 155 145 static int 156 146 xilinx_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, ··· 223 203 * Bus independent setup/teardown 224 204 */ 225 205 226 - static int xilinxfb_assign(struct device *dev, unsigned long physaddr, 206 + static int xilinxfb_assign(struct device *dev, 207 + struct xilinxfb_drvdata *drvdata, 208 + unsigned long physaddr, 227 209 struct xilinxfb_platform_data *pdata) 228 210 { 229 - struct xilinxfb_drvdata *drvdata; 230 211 int rc; 231 212 int fbsize = pdata->xvirt * pdata->yvirt * BYTES_PER_PIXEL; 232 213 233 - /* Allocate the driver data region */ 234 - drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); 235 - if (!drvdata) { 236 - dev_err(dev, "Couldn't allocate device private record\n"); 237 - return -ENOMEM; 238 - } 239 - dev_set_drvdata(dev, drvdata); 214 + if (drvdata->flags & PLB_ACCESS_FLAG) { 215 + /* 216 + * Map the control registers in if the controller 217 + * is on direct PLB interface. 218 + */ 219 + if (!request_mem_region(physaddr, 8, DRIVER_NAME)) { 220 + dev_err(dev, "Couldn't lock memory region at 0x%08lX\n", 221 + physaddr); 222 + rc = -ENODEV; 223 + goto err_region; 224 + } 240 225 241 - /* Map the control registers in */ 242 - if (!request_mem_region(physaddr, 8, DRIVER_NAME)) { 243 - dev_err(dev, "Couldn't lock memory region at 0x%08lX\n", 244 - physaddr); 245 - rc = -ENODEV; 246 - goto err_region; 247 - } 248 - drvdata->regs_phys = physaddr; 249 - drvdata->regs = ioremap(physaddr, 8); 250 - if (!drvdata->regs) { 251 - dev_err(dev, "Couldn't lock memory region at 0x%08lX\n", 252 - physaddr); 253 - rc = -ENODEV; 254 - goto err_map; 226 + drvdata->regs_phys = physaddr; 227 + drvdata->regs = ioremap(physaddr, 8); 228 + if (!drvdata->regs) { 229 + dev_err(dev, "Couldn't lock memory region at 0x%08lX\n", 230 + physaddr); 231 + rc = -ENODEV; 232 + goto err_map; 233 + } 255 234 } 256 235 257 236 /* Allocate the framebuffer memory */ ··· 266 247 if (!drvdata->fb_virt) { 267 248 dev_err(dev, "Could not allocate frame buffer memory\n"); 268 249 rc = -ENOMEM; 269 - goto err_fbmem; 250 + if (drvdata->flags & PLB_ACCESS_FLAG) 251 + goto err_fbmem; 252 + else 253 + goto err_region; 270 254 } 271 255 272 256 /* Clear (turn to black) the framebuffer */ ··· 282 260 drvdata->reg_ctrl_default = REG_CTRL_ENABLE; 283 261 if (pdata->rotate_screen) 284 262 drvdata->reg_ctrl_default |= REG_CTRL_ROTATE; 285 - xilinx_fb_out_be32(drvdata, REG_CTRL, drvdata->reg_ctrl_default); 263 + xilinx_fb_out_be32(drvdata, REG_CTRL, 264 + drvdata->reg_ctrl_default); 286 265 287 266 /* Fill struct fb_info */ 288 267 drvdata->info.device = dev; ··· 319 296 goto err_regfb; 320 297 } 321 298 299 + if (drvdata->flags & PLB_ACCESS_FLAG) { 300 + /* Put a banner in the log (for DEBUG) */ 301 + dev_dbg(dev, "regs: phys=%lx, virt=%p\n", physaddr, 302 + drvdata->regs); 303 + } 322 304 /* Put a banner in the log (for DEBUG) */ 323 - dev_dbg(dev, "regs: phys=%lx, virt=%p\n", physaddr, drvdata->regs); 324 - dev_dbg(dev, "fb: phys=%llx, virt=%p, size=%x\n", 325 - (unsigned long long) drvdata->fb_phys, drvdata->fb_virt, 326 - fbsize); 305 + dev_dbg(dev, "fb: phys=%p, virt=%p, size=%x\n", 306 + (void *)drvdata->fb_phys, drvdata->fb_virt, fbsize); 327 307 328 308 return 0; /* success */ 329 309 ··· 337 311 if (drvdata->fb_alloced) 338 312 dma_free_coherent(dev, PAGE_ALIGN(fbsize), drvdata->fb_virt, 339 313 drvdata->fb_phys); 314 + else 315 + iounmap(drvdata->fb_virt); 316 + 340 317 /* Turn off the display */ 341 318 xilinx_fb_out_be32(drvdata, REG_CTRL, 0); 342 319 343 320 err_fbmem: 344 - iounmap(drvdata->regs); 321 + if (drvdata->flags & PLB_ACCESS_FLAG) 322 + iounmap(drvdata->regs); 345 323 346 324 err_map: 347 - release_mem_region(physaddr, 8); 325 + if (drvdata->flags & PLB_ACCESS_FLAG) 326 + release_mem_region(physaddr, 8); 348 327 349 328 err_region: 350 329 kfree(drvdata); ··· 373 342 if (drvdata->fb_alloced) 374 343 dma_free_coherent(dev, PAGE_ALIGN(drvdata->info.fix.smem_len), 375 344 drvdata->fb_virt, drvdata->fb_phys); 345 + else 346 + iounmap(drvdata->fb_virt); 376 347 377 348 /* Turn off the display */ 378 349 xilinx_fb_out_be32(drvdata, REG_CTRL, 0); 379 - iounmap(drvdata->regs); 380 350 381 - release_mem_region(drvdata->regs_phys, 8); 351 + /* Release the resources, as allocated based on interface */ 352 + if (drvdata->flags & PLB_ACCESS_FLAG) { 353 + iounmap(drvdata->regs); 354 + release_mem_region(drvdata->regs_phys, 8); 355 + } else 356 + dcr_unmap(drvdata->dcr_host, drvdata->dcr_len); 382 357 383 358 kfree(drvdata); 384 359 dev_set_drvdata(dev, NULL); ··· 393 356 } 394 357 395 358 /* --------------------------------------------------------------------- 396 - * Platform bus binding 397 - */ 398 - 399 - static int 400 - xilinxfb_platform_probe(struct platform_device *pdev) 401 - { 402 - struct xilinxfb_platform_data *pdata; 403 - struct resource *res; 404 - 405 - /* Find the registers address */ 406 - res = platform_get_resource(pdev, IORESOURCE_IO, 0); 407 - if (!res) { 408 - dev_err(&pdev->dev, "Couldn't get registers resource\n"); 409 - return -ENODEV; 410 - } 411 - 412 - /* If a pdata structure is provided, then extract the parameters */ 413 - pdata = &xilinx_fb_default_pdata; 414 - if (pdev->dev.platform_data) { 415 - pdata = pdev->dev.platform_data; 416 - if (!pdata->xres) 417 - pdata->xres = xilinx_fb_default_pdata.xres; 418 - if (!pdata->yres) 419 - pdata->yres = xilinx_fb_default_pdata.yres; 420 - if (!pdata->xvirt) 421 - pdata->xvirt = xilinx_fb_default_pdata.xvirt; 422 - if (!pdata->yvirt) 423 - pdata->yvirt = xilinx_fb_default_pdata.yvirt; 424 - } 425 - 426 - return xilinxfb_assign(&pdev->dev, res->start, pdata); 427 - } 428 - 429 - static int 430 - xilinxfb_platform_remove(struct platform_device *pdev) 431 - { 432 - return xilinxfb_release(&pdev->dev); 433 - } 434 - 435 - 436 - static struct platform_driver xilinxfb_platform_driver = { 437 - .probe = xilinxfb_platform_probe, 438 - .remove = xilinxfb_platform_remove, 439 - .driver = { 440 - .owner = THIS_MODULE, 441 - .name = DRIVER_NAME, 442 - }, 443 - }; 444 - 445 - /* --------------------------------------------------------------------- 446 359 * OF bus binding 447 360 */ 448 361 449 - #if defined(CONFIG_OF) 450 362 static int __devinit 451 363 xilinxfb_of_probe(struct of_device *op, const struct of_device_id *match) 452 364 { 453 - struct resource res; 454 365 const u32 *prop; 366 + u32 *p; 367 + u32 tft_access; 455 368 struct xilinxfb_platform_data pdata; 369 + struct resource res; 456 370 int size, rc; 371 + int start = 0, len = 0; 372 + dcr_host_t dcr_host; 373 + struct xilinxfb_drvdata *drvdata; 457 374 458 375 /* Copy with the default pdata (not a ptr reference!) */ 459 376 pdata = xilinx_fb_default_pdata; 460 377 461 378 dev_dbg(&op->dev, "xilinxfb_of_probe(%p, %p)\n", op, match); 462 379 463 - rc = of_address_to_resource(op->node, 0, &res); 464 - if (rc) { 465 - dev_err(&op->dev, "invalid address\n"); 466 - return rc; 380 + /* 381 + * To check whether the core is connected directly to DCR or PLB 382 + * interface and initialize the tft_access accordingly. 383 + */ 384 + p = (u32 *)of_get_property(op->node, "xlnx,dcr-splb-slave-if", NULL); 385 + 386 + if (p) 387 + tft_access = *p; 388 + else 389 + tft_access = 0; /* For backward compatibility */ 390 + 391 + /* 392 + * Fill the resource structure if its direct PLB interface 393 + * otherwise fill the dcr_host structure. 394 + */ 395 + if (tft_access) { 396 + rc = of_address_to_resource(op->node, 0, &res); 397 + if (rc) { 398 + dev_err(&op->dev, "invalid address\n"); 399 + return -ENODEV; 400 + } 401 + 402 + } else { 403 + start = dcr_resource_start(op->node, 0); 404 + len = dcr_resource_len(op->node, 0); 405 + dcr_host = dcr_map(op->node, start, len); 406 + if (!DCR_MAP_OK(dcr_host)) { 407 + dev_err(&op->dev, "invalid address\n"); 408 + return -ENODEV; 409 + } 467 410 } 468 411 469 412 prop = of_get_property(op->node, "phys-size", &size); ··· 467 450 if (of_find_property(op->node, "rotate-display", NULL)) 468 451 pdata.rotate_screen = 1; 469 452 470 - return xilinxfb_assign(&op->dev, res.start, &pdata); 453 + /* Allocate the driver data region */ 454 + drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL); 455 + if (!drvdata) { 456 + dev_err(&op->dev, "Couldn't allocate device private record\n"); 457 + return -ENOMEM; 458 + } 459 + dev_set_drvdata(&op->dev, drvdata); 460 + 461 + if (tft_access) 462 + drvdata->flags |= PLB_ACCESS_FLAG; 463 + 464 + /* Arguments are passed based on the interface */ 465 + if (drvdata->flags & PLB_ACCESS_FLAG) { 466 + return xilinxfb_assign(&op->dev, drvdata, res.start, &pdata); 467 + } else { 468 + drvdata->dcr_start = start; 469 + drvdata->dcr_len = len; 470 + drvdata->dcr_host = dcr_host; 471 + return xilinxfb_assign(&op->dev, drvdata, 0, &pdata); 472 + } 471 473 } 472 474 473 475 static int __devexit xilinxfb_of_remove(struct of_device *op) ··· 496 460 497 461 /* Match table for of_platform binding */ 498 462 static struct of_device_id xilinxfb_of_match[] __devinitdata = { 463 + { .compatible = "xlnx,xps-tft-1.00.a", }, 499 464 { .compatible = "xlnx,plb-tft-cntlr-ref-1.00.a", }, 465 + { .compatible = "xlnx,plb-dvi-cntlr-ref-1.00.c", }, 500 466 {}, 501 467 }; 502 468 MODULE_DEVICE_TABLE(of, xilinxfb_of_match); ··· 514 476 }, 515 477 }; 516 478 517 - /* Registration helpers to keep the number of #ifdefs to a minimum */ 518 - static inline int __init xilinxfb_of_register(void) 519 - { 520 - pr_debug("xilinxfb: calling of_register_platform_driver()\n"); 521 - return of_register_platform_driver(&xilinxfb_of_driver); 522 - } 523 - 524 - static inline void __exit xilinxfb_of_unregister(void) 525 - { 526 - of_unregister_platform_driver(&xilinxfb_of_driver); 527 - } 528 - #else /* CONFIG_OF */ 529 - /* CONFIG_OF not enabled; do nothing helpers */ 530 - static inline int __init xilinxfb_of_register(void) { return 0; } 531 - static inline void __exit xilinxfb_of_unregister(void) { } 532 - #endif /* CONFIG_OF */ 533 479 534 480 /* --------------------------------------------------------------------- 535 481 * Module setup and teardown ··· 522 500 static int __init 523 501 xilinxfb_init(void) 524 502 { 525 - int rc; 526 - rc = xilinxfb_of_register(); 527 - if (rc) 528 - return rc; 529 - 530 - rc = platform_driver_register(&xilinxfb_platform_driver); 531 - if (rc) 532 - xilinxfb_of_unregister(); 533 - 534 - return rc; 503 + return of_register_platform_driver(&xilinxfb_of_driver); 535 504 } 536 505 537 506 static void __exit 538 507 xilinxfb_cleanup(void) 539 508 { 540 - platform_driver_unregister(&xilinxfb_platform_driver); 541 - xilinxfb_of_unregister(); 509 + of_unregister_platform_driver(&xilinxfb_of_driver); 542 510 } 543 511 544 512 module_init(xilinxfb_init); 545 513 module_exit(xilinxfb_cleanup); 546 514 547 515 MODULE_AUTHOR("MontaVista Software, Inc. <source@mvista.com>"); 548 - MODULE_DESCRIPTION(DRIVER_DESCRIPTION); 516 + MODULE_DESCRIPTION("Xilinx TFT frame buffer driver"); 549 517 MODULE_LICENSE("GPL");
+4
include/linux/pci_ids.h
··· 2289 2289 #define PCI_DEVICE_ID_MPC8547E 0x0018 2290 2290 #define PCI_DEVICE_ID_MPC8545E 0x0019 2291 2291 #define PCI_DEVICE_ID_MPC8545 0x001a 2292 + #define PCI_DEVICE_ID_MPC8569E 0x0061 2293 + #define PCI_DEVICE_ID_MPC8569 0x0060 2292 2294 #define PCI_DEVICE_ID_MPC8568E 0x0020 2293 2295 #define PCI_DEVICE_ID_MPC8568 0x0021 2294 2296 #define PCI_DEVICE_ID_MPC8567E 0x0022 ··· 2303 2301 #define PCI_DEVICE_ID_MPC8572 0x0041 2304 2302 #define PCI_DEVICE_ID_MPC8536E 0x0050 2305 2303 #define PCI_DEVICE_ID_MPC8536 0x0051 2304 + #define PCI_DEVICE_ID_P2020E 0x0070 2305 + #define PCI_DEVICE_ID_P2020 0x0071 2306 2306 #define PCI_DEVICE_ID_MPC8641 0x7010 2307 2307 #define PCI_DEVICE_ID_MPC8641D 0x7011 2308 2308 #define PCI_DEVICE_ID_MPC8610 0x7018