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

Merge remote-tracking branch 'scottwood/next' into next

Scott says:

"Highlights include a bunch of 8xx optimizations, device tree bindings
for Freescale BMan, QMan, and FMan datapath components, misc device tree
updates, and inbound rio window support."

+1599 -543
+12 -2
Documentation/devicetree/bindings/clock/qoriq-clock.txt
··· 62 62 It takes parent's clock-frequency as its clock. 63 63 * "fsl,qoriq-sysclk-2.0": for input system clock (v2.0). 64 64 It takes parent's clock-frequency as its clock. 65 + * "fsl,qoriq-platform-pll-1.0" for the platform PLL clock (v1.0) 66 + * "fsl,qoriq-platform-pll-2.0" for the platform PLL clock (v2.0) 65 67 - #clock-cells: From common clock binding. The number of cells in a 66 68 clock-specifier. Should be <0> for "fsl,qoriq-sysclk-[1,2].0" 67 69 clocks, or <1> for "fsl,qoriq-core-pll-[1,2].0" clocks. ··· 130 128 clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 131 129 clock-output-names = "cmux1"; 132 130 }; 131 + 132 + platform-pll: platform-pll@c00 { 133 + #clock-cells = <1>; 134 + reg = <0xc00 0x4>; 135 + compatible = "fsl,qoriq-platform-pll-1.0"; 136 + clocks = <&sysclk>; 137 + clock-output-names = "platform-pll", "platform-pll-div2"; 138 + }; 133 139 }; 134 - } 140 + }; 135 141 136 142 Example for clock consumer: 137 143 ··· 149 139 clocks = <&mux0>; 150 140 ... 151 141 }; 152 - } 142 + };
+534
Documentation/devicetree/bindings/powerpc/fsl/fman.txt
··· 1 + ============================================================================= 2 + Freescale Frame Manager Device Bindings 3 + 4 + CONTENTS 5 + - FMan Node 6 + - FMan Port Node 7 + - FMan MURAM Node 8 + - FMan dTSEC/XGEC/mEMAC Node 9 + - FMan IEEE 1588 Node 10 + - Example 11 + 12 + ============================================================================= 13 + FMan Node 14 + 15 + DESCRIPTION 16 + 17 + Due to the fact that the FMan is an aggregation of sub-engines (ports, MACs, 18 + etc.) the FMan node will have child nodes for each of them. 19 + 20 + PROPERTIES 21 + 22 + - compatible 23 + Usage: required 24 + Value type: <stringlist> 25 + Definition: Must include "fsl,fman" 26 + FMan version can be determined via FM_IP_REV_1 register in the 27 + FMan block. The offset is 0xc4 from the beginning of the 28 + Frame Processing Manager memory map (0xc3000 from the 29 + beginning of the FMan node). 30 + 31 + - cell-index 32 + Usage: required 33 + Value type: <u32> 34 + Definition: Specifies the index of the FMan unit. 35 + 36 + The cell-index value may be used by the SoC, to identify the 37 + FMan unit in the SoC memory map. In the table bellow, 38 + there's a description of the cell-index use in each SoC: 39 + 40 + - P1023: 41 + register[bit] FMan unit cell-index 42 + ============================================================ 43 + DEVDISR[1] 1 0 44 + 45 + - P2041, P3041, P4080 P5020, P5040: 46 + register[bit] FMan unit cell-index 47 + ============================================================ 48 + DCFG_DEVDISR2[6] 1 0 49 + DCFG_DEVDISR2[14] 2 1 50 + (Second FM available only in P4080 and P5040) 51 + 52 + - B4860, T1040, T2080, T4240: 53 + register[bit] FMan unit cell-index 54 + ============================================================ 55 + DCFG_CCSR_DEVDISR2[24] 1 0 56 + DCFG_CCSR_DEVDISR2[25] 2 1 57 + (Second FM available only in T4240) 58 + 59 + DEVDISR, DCFG_DEVDISR2 and DCFG_CCSR_DEVDISR2 are located in 60 + the specific SoC "Device Configuration/Pin Control" Memory 61 + Map. 62 + 63 + - reg 64 + Usage: required 65 + Value type: <prop-encoded-array> 66 + Definition: A standard property. Specifies the offset of the 67 + following configuration registers: 68 + - BMI configuration registers. 69 + - QMI configuration registers. 70 + - DMA configuration registers. 71 + - FPM configuration registers. 72 + - FMan controller configuration registers. 73 + 74 + - ranges 75 + Usage: required 76 + Value type: <prop-encoded-array> 77 + Definition: A standard property. 78 + 79 + - clocks 80 + Usage: required 81 + Value type: <prop-encoded-array> 82 + Definition: phandle for the fman input clock. 83 + 84 + - clock-names 85 + usage: required 86 + Value type: <stringlist> 87 + Definition: "fmanclk" for the fman input clock. 88 + 89 + - interrupts 90 + Usage: required 91 + Value type: <prop-encoded-array> 92 + Definition: A pair of IRQs are specified in this property. 93 + The first element is associated with the event interrupts and 94 + the second element is associated with the error interrupts. 95 + 96 + - fsl,qman-channel-range 97 + Usage: required 98 + Value type: <prop-encoded-array> 99 + Definition: Specifies the range of the available dedicated 100 + channels in the FMan. The first cell specifies the beginning 101 + of the range and the second cell specifies the number of 102 + channels. 103 + Further information available at: 104 + "Work Queue (WQ) Channel Assignments in the QMan" section 105 + in DPAA Reference Manual. 106 + 107 + - fsl,qman 108 + - fsl,bman 109 + Usage: required 110 + Definition: See soc/fsl/qman.txt and soc/fsl/bman.txt 111 + 112 + ============================================================================= 113 + FMan MURAM Node 114 + 115 + DESCRIPTION 116 + 117 + FMan Internal memory - shared between all the FMan modules. 118 + It contains data structures that are common and written to or read by 119 + the modules. 120 + FMan internal memory is split into the following parts: 121 + Packet buffering (Tx/Rx FIFOs) 122 + Frames internal context 123 + 124 + PROPERTIES 125 + 126 + - compatible 127 + Usage: required 128 + Value type: <stringlist> 129 + Definition: Must include "fsl,fman-muram" 130 + 131 + - ranges 132 + Usage: required 133 + Value type: <prop-encoded-array> 134 + Definition: A standard property. 135 + Specifies the multi-user memory offset and the size within 136 + the FMan. 137 + 138 + EXAMPLE 139 + 140 + muram@0 { 141 + compatible = "fsl,fman-muram"; 142 + ranges = <0 0x000000 0x28000>; 143 + }; 144 + 145 + ============================================================================= 146 + FMan Port Node 147 + 148 + DESCRIPTION 149 + 150 + The Frame Manager (FMan) supports several types of hardware ports: 151 + Ethernet receiver (RX) 152 + Ethernet transmitter (TX) 153 + Offline/Host command (O/H) 154 + 155 + PROPERTIES 156 + 157 + - compatible 158 + Usage: required 159 + Value type: <stringlist> 160 + Definition: A standard property. 161 + Must include one of the following: 162 + - "fsl,fman-v2-port-oh" for FManV2 OH ports 163 + - "fsl,fman-v2-port-rx" for FManV2 RX ports 164 + - "fsl,fman-v2-port-tx" for FManV2 TX ports 165 + - "fsl,fman-v3-port-oh" for FManV3 OH ports 166 + - "fsl,fman-v3-port-rx" for FManV3 RX ports 167 + - "fsl,fman-v3-port-tx" for FManV3 TX ports 168 + 169 + - cell-index 170 + Usage: required 171 + Value type: <u32> 172 + Definition: Specifies the hardware port id. 173 + Each hardware port on the FMan has its own hardware PortID. 174 + Super set of all hardware Port IDs available at FMan Reference 175 + Manual under "FMan Hardware Ports in Freescale Devices" table. 176 + 177 + Each hardware port is assigned a 4KB, port-specific page in 178 + the FMan hardware port memory region (which is part of the 179 + FMan memory map). The first 4 KB in the FMan hardware ports 180 + memory region is used for what are called common registers. 181 + The subsequent 63 4KB pages are allocated to the hardware 182 + ports. 183 + The page of a specific port is determined by the cell-index. 184 + 185 + - reg 186 + Usage: required 187 + Value type: <prop-encoded-array> 188 + Definition: There is one reg region describing the port 189 + configuration registers. 190 + 191 + EXAMPLE 192 + 193 + port@a8000 { 194 + cell-index = <0x28>; 195 + compatible = "fsl,fman-v2-port-tx"; 196 + reg = <0xa8000 0x1000>; 197 + }; 198 + 199 + port@88000 { 200 + cell-index = <0x8>; 201 + compatible = "fsl,fman-v2-port-rx"; 202 + reg = <0x88000 0x1000>; 203 + }; 204 + 205 + port@81000 { 206 + cell-index = <0x1>; 207 + compatible = "fsl,fman-v2-port-oh"; 208 + reg = <0x81000 0x1000>; 209 + }; 210 + 211 + ============================================================================= 212 + FMan dTSEC/XGEC/mEMAC Node 213 + 214 + DESCRIPTION 215 + 216 + mEMAC/dTSEC/XGEC are the Ethernet network interfaces 217 + 218 + PROPERTIES 219 + 220 + - compatible 221 + Usage: required 222 + Value type: <stringlist> 223 + Definition: A standard property. 224 + Must include one of the following: 225 + - "fsl,fman-dtsec" for dTSEC MAC 226 + - "fsl,fman-xgec" for XGEC MAC 227 + - "fsl,fman-memac for mEMAC MAC 228 + 229 + - cell-index 230 + Usage: required 231 + Value type: <u32> 232 + Definition: Specifies the MAC id. 233 + 234 + The cell-index value may be used by the FMan or the SoC, to 235 + identify the MAC unit in the FMan (or SoC) memory map. 236 + In the tables bellow there's a description of the cell-index 237 + use, there are two tables, one describes the use of cell-index 238 + by the FMan, the second describes the use by the SoC: 239 + 240 + 1. FMan Registers 241 + 242 + FManV2: 243 + register[bit] MAC cell-index 244 + ============================================================ 245 + FM_EPI[16] XGEC 8 246 + FM_EPI[16+n] dTSECn n-1 247 + FM_NPI[11+n] dTSECn n-1 248 + n = 1,..,5 249 + 250 + FManV3: 251 + register[bit] MAC cell-index 252 + ============================================================ 253 + FM_EPI[16+n] mEMACn n-1 254 + FM_EPI[25] mEMAC10 9 255 + 256 + FM_NPI[11+n] mEMACn n-1 257 + FM_NPI[10] mEMAC10 9 258 + FM_NPI[11] mEMAC9 8 259 + n = 1,..8 260 + 261 + FM_EPI and FM_NPI are located in the FMan memory map. 262 + 263 + 2. SoC registers: 264 + 265 + - P2041, P3041, P4080 P5020, P5040: 266 + register[bit] FMan MAC cell 267 + Unit index 268 + ============================================================ 269 + DCFG_DEVDISR2[7] 1 XGEC 8 270 + DCFG_DEVDISR2[7+n] 1 dTSECn n-1 271 + DCFG_DEVDISR2[15] 2 XGEC 8 272 + DCFG_DEVDISR2[15+n] 2 dTSECn n-1 273 + n = 1,..5 274 + 275 + - T1040, T2080, T4240, B4860: 276 + register[bit] FMan MAC cell 277 + Unit index 278 + ============================================================ 279 + DCFG_CCSR_DEVDISR2[n-1] 1 mEMACn n-1 280 + DCFG_CCSR_DEVDISR2[11+n] 2 mEMACn n-1 281 + n = 1,..6,9,10 282 + 283 + EVDISR, DCFG_DEVDISR2 and DCFG_CCSR_DEVDISR2 are located in 284 + the specific SoC "Device Configuration/Pin Control" Memory 285 + Map. 286 + 287 + - reg 288 + Usage: required 289 + Value type: <prop-encoded-array> 290 + Definition: A standard property. 291 + 292 + - fsl,fman-ports 293 + Usage: required 294 + Value type: <prop-encoded-array> 295 + Definition: An array of two phandles - the first references is 296 + the FMan RX port and the second is the TX port used by this 297 + MAC. 298 + 299 + - ptp-timer 300 + Usage required 301 + Value type: <phandle> 302 + Definition: A phandle for 1EEE1588 timer. 303 + 304 + EXAMPLE 305 + 306 + fman1_tx28: port@a8000 { 307 + cell-index = <0x28>; 308 + compatible = "fsl,fman-v2-port-tx"; 309 + reg = <0xa8000 0x1000>; 310 + }; 311 + 312 + fman1_rx8: port@88000 { 313 + cell-index = <0x8>; 314 + compatible = "fsl,fman-v2-port-rx"; 315 + reg = <0x88000 0x1000>; 316 + }; 317 + 318 + ptp-timer: ptp_timer@fe000 { 319 + compatible = "fsl,fman-ptp-timer"; 320 + reg = <0xfe000 0x1000>; 321 + }; 322 + 323 + ethernet@e0000 { 324 + compatible = "fsl,fman-dtsec"; 325 + cell-index = <0>; 326 + reg = <0xe0000 0x1000>; 327 + fsl,fman-ports = <&fman1_rx8 &fman1_tx28>; 328 + ptp-timer = <&ptp-timer>; 329 + }; 330 + 331 + ============================================================================ 332 + FMan IEEE 1588 Node 333 + 334 + DESCRIPTION 335 + 336 + The FMan interface to support IEEE 1588 337 + 338 + 339 + PROPERTIES 340 + 341 + - compatible 342 + Usage: required 343 + Value type: <stringlist> 344 + Definition: A standard property. 345 + Must include "fsl,fman-ptp-timer". 346 + 347 + - reg 348 + Usage: required 349 + Value type: <prop-encoded-array> 350 + Definition: A standard property. 351 + 352 + EXAMPLE 353 + 354 + ptp-timer@fe000 { 355 + compatible = "fsl,fman-ptp-timer"; 356 + reg = <0xfe000 0x1000>; 357 + }; 358 + 359 + ============================================================================= 360 + Example 361 + 362 + fman@400000 { 363 + #address-cells = <1>; 364 + #size-cells = <1>; 365 + cell-index = <1>; 366 + compatible = "fsl,fman" 367 + ranges = <0 0x400000 0x100000>; 368 + reg = <0x400000 0x100000>; 369 + clocks = <&fman_clk>; 370 + clock-names = "fmanclk"; 371 + interrupts = < 372 + 96 2 0 0 373 + 16 2 1 1>; 374 + fsl,qman-channel-range = <0x40 0xc>; 375 + 376 + muram@0 { 377 + compatible = "fsl,fman-muram"; 378 + reg = <0x0 0x28000>; 379 + }; 380 + 381 + port@81000 { 382 + cell-index = <1>; 383 + compatible = "fsl,fman-v2-port-oh"; 384 + reg = <0x81000 0x1000>; 385 + }; 386 + 387 + port@82000 { 388 + cell-index = <2>; 389 + compatible = "fsl,fman-v2-port-oh"; 390 + reg = <0x82000 0x1000>; 391 + }; 392 + 393 + port@83000 { 394 + cell-index = <3>; 395 + compatible = "fsl,fman-v2-port-oh"; 396 + reg = <0x83000 0x1000>; 397 + }; 398 + 399 + port@84000 { 400 + cell-index = <4>; 401 + compatible = "fsl,fman-v2-port-oh"; 402 + reg = <0x84000 0x1000>; 403 + }; 404 + 405 + port@85000 { 406 + cell-index = <5>; 407 + compatible = "fsl,fman-v2-port-oh"; 408 + reg = <0x85000 0x1000>; 409 + }; 410 + 411 + port@86000 { 412 + cell-index = <6>; 413 + compatible = "fsl,fman-v2-port-oh"; 414 + reg = <0x86000 0x1000>; 415 + }; 416 + 417 + fman1_rx_0x8: port@88000 { 418 + cell-index = <0x8>; 419 + compatible = "fsl,fman-v2-port-rx"; 420 + reg = <0x88000 0x1000>; 421 + }; 422 + 423 + fman1_rx_0x9: port@89000 { 424 + cell-index = <0x9>; 425 + compatible = "fsl,fman-v2-port-rx"; 426 + reg = <0x89000 0x1000>; 427 + }; 428 + 429 + fman1_rx_0xa: port@8a000 { 430 + cell-index = <0xa>; 431 + compatible = "fsl,fman-v2-port-rx"; 432 + reg = <0x8a000 0x1000>; 433 + }; 434 + 435 + fman1_rx_0xb: port@8b000 { 436 + cell-index = <0xb>; 437 + compatible = "fsl,fman-v2-port-rx"; 438 + reg = <0x8b000 0x1000>; 439 + }; 440 + 441 + fman1_rx_0xc: port@8c000 { 442 + cell-index = <0xc>; 443 + compatible = "fsl,fman-v2-port-rx"; 444 + reg = <0x8c000 0x1000>; 445 + }; 446 + 447 + fman1_rx_0x10: port@90000 { 448 + cell-index = <0x10>; 449 + compatible = "fsl,fman-v2-port-rx"; 450 + reg = <0x90000 0x1000>; 451 + }; 452 + 453 + fman1_tx_0x28: port@a8000 { 454 + cell-index = <0x28>; 455 + compatible = "fsl,fman-v2-port-tx"; 456 + reg = <0xa8000 0x1000>; 457 + }; 458 + 459 + fman1_tx_0x29: port@a9000 { 460 + cell-index = <0x29>; 461 + compatible = "fsl,fman-v2-port-tx"; 462 + reg = <0xa9000 0x1000>; 463 + }; 464 + 465 + fman1_tx_0x2a: port@aa000 { 466 + cell-index = <0x2a>; 467 + compatible = "fsl,fman-v2-port-tx"; 468 + reg = <0xaa000 0x1000>; 469 + }; 470 + 471 + fman1_tx_0x2b: port@ab000 { 472 + cell-index = <0x2b>; 473 + compatible = "fsl,fman-v2-port-tx"; 474 + reg = <0xab000 0x1000>; 475 + }; 476 + 477 + fman1_tx_0x2c: port@ac0000 { 478 + cell-index = <0x2c>; 479 + compatible = "fsl,fman-v2-port-tx"; 480 + reg = <0xac000 0x1000>; 481 + }; 482 + 483 + fman1_tx_0x30: port@b0000 { 484 + cell-index = <0x30>; 485 + compatible = "fsl,fman-v2-port-tx"; 486 + reg = <0xb0000 0x1000>; 487 + }; 488 + 489 + ethernet@e0000 { 490 + compatible = "fsl,fman-dtsec"; 491 + cell-index = <0>; 492 + reg = <0xe0000 0x1000>; 493 + fsl,fman-ports = <&fman1_rx_0x8 &fman1_tx_0x28>; 494 + }; 495 + 496 + ethernet@e2000 { 497 + compatible = "fsl,fman-dtsec"; 498 + cell-index = <1>; 499 + reg = <0xe2000 0x1000>; 500 + fsl,fman-ports = <&fman1_rx_0x9 &fman1_tx_0x29>; 501 + }; 502 + 503 + ethernet@e4000 { 504 + compatible = "fsl,fman-dtsec"; 505 + cell-index = <2>; 506 + reg = <0xe4000 0x1000>; 507 + fsl,fman-ports = <&fman1_rx_0xa &fman1_tx_0x2a>; 508 + }; 509 + 510 + ethernet@e6000 { 511 + compatible = "fsl,fman-dtsec"; 512 + cell-index = <3>; 513 + reg = <0xe6000 0x1000>; 514 + fsl,fman-ports = <&fman1_rx_0xb &fman1_tx_0x2b>; 515 + }; 516 + 517 + ethernet@e8000 { 518 + compatible = "fsl,fman-dtsec"; 519 + cell-index = <4>; 520 + reg = <0xf0000 0x1000>; 521 + fsl,fman-ports = <&fman1_rx_0xc &fman1_tx_0x2c>; 522 + 523 + ethernet@f0000 { 524 + cell-index = <8>; 525 + compatible = "fsl,fman-xgec"; 526 + reg = <0xf0000 0x1000>; 527 + fsl,fman-ports = <&fman1_rx_0x10 &fman1_tx_0x30>; 528 + }; 529 + 530 + ptp-timer@fe000 { 531 + compatible = "fsl,fman-ptp-timer"; 532 + reg = <0xfe000 0x1000>; 533 + }; 534 + };
+56
Documentation/devicetree/bindings/soc/fsl/bman-portals.txt
··· 1 + QorIQ DPAA Buffer Manager Portals Device Tree Binding 2 + 3 + Copyright (C) 2008 - 2014 Freescale Semiconductor Inc. 4 + 5 + CONTENTS 6 + 7 + - BMan Portal 8 + - Example 9 + 10 + BMan Portal Node 11 + 12 + Portals are memory mapped interfaces to BMan that allow low-latency, lock-less 13 + interaction by software running on processor cores, accelerators and network 14 + interfaces with the BMan 15 + 16 + PROPERTIES 17 + 18 + - compatible 19 + Usage: Required 20 + Value type: <stringlist> 21 + Definition: Must include "fsl,bman-portal-<hardware revision>" 22 + May include "fsl,<SoC>-bman-portal" or "fsl,bman-portal" 23 + 24 + - reg 25 + Usage: Required 26 + Value type: <prop-encoded-array> 27 + Definition: Two regions. The first is the cache-enabled region of 28 + the portal. The second is the cache-inhibited region of 29 + the portal 30 + 31 + - interrupts 32 + Usage: Required 33 + Value type: <prop-encoded-array> 34 + Definition: Standard property 35 + 36 + EXAMPLE 37 + 38 + The example below shows a (P4080) BMan portals container/bus node with two portals 39 + 40 + bman-portals@ff4000000 { 41 + #address-cells = <1>; 42 + #size-cells = <1>; 43 + compatible = "simple-bus"; 44 + ranges = <0 0xf 0xf4000000 0x200000>; 45 + 46 + bman-portal@0 { 47 + compatible = "fsl,bman-portal-1.0.0", "fsl,bman-portal"; 48 + reg = <0x0 0x4000>, <0x100000 0x1000>; 49 + interrupts = <105 2 0 0>; 50 + }; 51 + bman-portal@4000 { 52 + compatible = "fsl,bman-portal-1.0.0", "fsl,bman-portal"; 53 + reg = <0x4000 0x4000>, <0x101000 0x1000>; 54 + interrupts = <107 2 0 0>; 55 + }; 56 + };
+125
Documentation/devicetree/bindings/soc/fsl/bman.txt
··· 1 + QorIQ DPAA Buffer Manager Device Tree Bindings 2 + 3 + Copyright (C) 2008 - 2014 Freescale Semiconductor Inc. 4 + 5 + CONTENTS 6 + 7 + - BMan Node 8 + - BMan Private Memory Node 9 + - Example 10 + 11 + BMan Node 12 + 13 + The Buffer Manager is part of the Data-Path Acceleration Architecture (DPAA). 14 + BMan supports hardware allocation and deallocation of buffers belonging to pools 15 + originally created by software with configurable depletion thresholds. This 16 + binding covers the CCSR space programming model 17 + 18 + PROPERTIES 19 + 20 + - compatible 21 + Usage: Required 22 + Value type: <stringlist> 23 + Definition: Must include "fsl,bman" 24 + May include "fsl,<SoC>-bman" 25 + 26 + - reg 27 + Usage: Required 28 + Value type: <prop-encoded-array> 29 + Definition: Registers region within the CCSR address space 30 + 31 + The BMan revision information is located in the BMAN_IP_REV_1/2 registers which 32 + are located at offsets 0xbf8 and 0xbfc 33 + 34 + - interrupts 35 + Usage: Required 36 + Value type: <prop-encoded-array> 37 + Definition: Standard property. The error interrupt 38 + 39 + - fsl,liodn 40 + Usage: See pamu.txt 41 + Value type: <prop-encoded-array> 42 + Definition: PAMU property used for static LIODN assignment 43 + 44 + - fsl,iommu-parent 45 + Usage: See pamu.txt 46 + Value type: <phandle> 47 + Definition: PAMU property used for dynamic LIODN assignment 48 + 49 + For additional details about the PAMU/LIODN binding(s) see pamu.txt 50 + 51 + Devices connected to a BMan instance via Direct Connect Portals (DCP) must link 52 + to the respective BMan instance 53 + 54 + - fsl,bman 55 + Usage: Required 56 + Value type: <prop-encoded-array> 57 + Description: List of phandle and DCP index pairs, to the BMan instance 58 + to which this device is connected via the DCP 59 + 60 + BMan Private Memory Node 61 + 62 + BMan requires a contiguous range of physical memory used for the backing store 63 + for BMan Free Buffer Proxy Records (FBPR). This memory is reserved/allocated as a 64 + node under the /reserved-memory node 65 + 66 + The BMan FBPR memory node must be named "bman-fbpr" 67 + 68 + PROPERTIES 69 + 70 + - compatible 71 + Usage: required 72 + Value type: <stringlist> 73 + Definition: Must inclide "fsl,bman-fbpr" 74 + 75 + The following constraints are relevant to the FBPR private memory: 76 + - The size must be 2^(size + 1), with size = 11..33. That is 4 KiB to 77 + 16 GiB 78 + - The alignment must be a muliptle of the memory size 79 + 80 + The size of the FBPR must be chosen by observing the hardware features configured 81 + via the Reset Configuration Word (RCW) and that are relevant to a specific board 82 + (e.g. number of MAC(s) pinned-out, number of offline/host command FMan ports, 83 + etc.). The size configured in the DT must reflect the hardware capabilities and 84 + not the specific needs of an application 85 + 86 + For additional details about reserved memory regions see reserved-memory.txt 87 + 88 + EXAMPLE 89 + 90 + The example below shows a BMan FBPR dynamic allocation memory node 91 + 92 + reserved-memory { 93 + #address-cells = <2>; 94 + #size-cells = <2>; 95 + ranges; 96 + 97 + bman_fbpr: bman-fbpr { 98 + compatible = "fsl,bman-fbpr"; 99 + alloc-ranges = <0 0 0xf 0xffffffff>; 100 + size = <0 0x1000000>; 101 + alignment = <0 0x1000000>; 102 + }; 103 + }; 104 + 105 + The example below shows a (P4080) BMan CCSR-space node 106 + 107 + crypto@300000 { 108 + ... 109 + fsl,bman = <&bman, 2>; 110 + ... 111 + }; 112 + 113 + bman: bman@31a000 { 114 + compatible = "fsl,bman"; 115 + reg = <0x31a000 0x1000>; 116 + interrupts = <16 2 1 2>; 117 + fsl,liodn = <0x17>; 118 + memory-region = <&bman_fbpr>; 119 + }; 120 + 121 + fman@400000 { 122 + ... 123 + fsl,bman = <&bman, 0>; 124 + ... 125 + };
+154
Documentation/devicetree/bindings/soc/fsl/qman-portals.txt
··· 1 + QorIQ DPAA Queue Manager Portals Device Tree Binding 2 + 3 + Copyright (C) 2008 - 2014 Freescale Semiconductor Inc. 4 + 5 + CONTENTS 6 + 7 + - QMan Portal 8 + - QMan Pool Channel 9 + - Example 10 + 11 + QMan Portal Node 12 + 13 + Portals are memory mapped interfaces to QMan that allow low-latency, lock-less 14 + interaction by software running on processor cores, accelerators and network 15 + interfaces with the QMan 16 + 17 + PROPERTIES 18 + 19 + - compatible 20 + Usage: Required 21 + Value type: <stringlist> 22 + Definition: Must include "fsl,qman-portal-<hardware revision>" 23 + May include "fsl,<SoC>-qman-portal" or "fsl,qman-portal" 24 + 25 + - reg 26 + Usage: Required 27 + Value type: <prop-encoded-array> 28 + Definition: Two regions. The first is the cache-enabled region of 29 + the portal. The second is the cache-inhibited region of 30 + the portal 31 + 32 + - interrupts 33 + Usage: Required 34 + Value type: <prop-encoded-array> 35 + Definition: Standard property 36 + 37 + - fsl,liodn 38 + Usage: See pamu.txt 39 + Value type: <prop-encoded-array> 40 + Definition: Two LIODN(s). DQRR LIODN (DLIODN) and Frame LIODN 41 + (FLIODN) 42 + 43 + - fsl,iommu-parent 44 + Usage: See pamu.txt 45 + Value type: <phandle> 46 + Definition: PAMU property used for dynamic LIODN assignment 47 + 48 + For additional details about the PAMU/LIODN binding(s) see pamu.txt 49 + 50 + - fsl,qman-channel-id 51 + Usage: Required 52 + Value type: <u32> 53 + Definition: The hardware index of the channel. This can also be 54 + determined by dividing any of the channel's 8 work queue 55 + IDs by 8 56 + 57 + In addition to these properties the qman-portals should have sub-nodes to 58 + represent the HW devices/portals that are connected to the software portal 59 + described here 60 + 61 + The currently supported sub-nodes are: 62 + * fman0 63 + * fman1 64 + * pme 65 + * crypto 66 + 67 + These subnodes should have the following properties: 68 + 69 + - fsl,liodn 70 + Usage: See pamu.txt 71 + Value type: <prop-encoded-array> 72 + Definition: PAMU property used for static LIODN assignment 73 + 74 + - fsl,iommu-parent 75 + Usage: See pamu.txt 76 + Value type: <phandle> 77 + Definition: PAMU property used for dynamic LIODN assignment 78 + 79 + - dev-handle 80 + Usage: Required 81 + Value type: <phandle> 82 + Definition: The phandle to the particular hardware device that this 83 + portal is connected to. 84 + 85 + DPAA QMan Pool Channel Nodes 86 + 87 + Pool Channels are defined with the following properties. 88 + 89 + PROPERTIES 90 + 91 + - compatible 92 + Usage: Required 93 + Value type: <stringlist> 94 + Definition: Must include "fsl,qman-pool-channel" 95 + May include "fsl,<SoC>-qman-pool-channel" 96 + 97 + - fsl,qman-channel-id 98 + Usage: Required 99 + Value type: <u32> 100 + Definition: The hardware index of the channel. This can also be 101 + determined by dividing any of the channel's 8 work queue 102 + IDs by 8 103 + 104 + EXAMPLE 105 + 106 + The example below shows a (P4080) QMan portals container/bus node with two portals 107 + 108 + qman-portals@ff4200000 { 109 + #address-cells = <1>; 110 + #size-cells = <1>; 111 + compatible = "simple-bus"; 112 + ranges = <0 0xf 0xf4200000 0x200000>; 113 + 114 + qman-portal@0 { 115 + compatible = "fsl,qman-portal-1.2.0", "fsl,qman-portal"; 116 + reg = <0 0x4000>, <0x100000 0x1000>; 117 + interrupts = <104 2 0 0>; 118 + fsl,liodn = <1 2>; 119 + fsl,qman-channel-id = <0>; 120 + 121 + fman0 { 122 + fsl,liodn = <0x21>; 123 + dev-handle = <&fman0>; 124 + }; 125 + fman1 { 126 + fsl,liodn = <0xa1>; 127 + dev-handle = <&fman1>; 128 + }; 129 + crypto { 130 + fsl,liodn = <0x41 0x66>; 131 + dev-handle = <&crypto>; 132 + }; 133 + }; 134 + qman-portal@4000 { 135 + compatible = "fsl,qman-portal-1.2.0", "fsl,qman-portal"; 136 + reg = <0x4000 0x4000>, <0x101000 0x1000>; 137 + interrupts = <106 2 0 0>; 138 + fsl,liodn = <3 4>; 139 + fsl,qman-channel-id = <1>; 140 + 141 + fman0 { 142 + fsl,liodn = <0x22>; 143 + dev-handle = <&fman0>; 144 + }; 145 + fman1 { 146 + fsl,liodn = <0xa2>; 147 + dev-handle = <&fman1>; 148 + }; 149 + crypto { 150 + fsl,liodn = <0x42 0x67>; 151 + dev-handle = <&crypto>; 152 + }; 153 + }; 154 + };
+165
Documentation/devicetree/bindings/soc/fsl/qman.txt
··· 1 + QorIQ DPAA Queue Manager Device Tree Binding 2 + 3 + Copyright (C) 2008 - 2014 Freescale Semiconductor Inc. 4 + 5 + CONTENTS 6 + 7 + - QMan Node 8 + - QMan Private Memory Nodes 9 + - Example 10 + 11 + QMan Node 12 + 13 + The Queue Manager is part of the Data-Path Acceleration Architecture (DPAA). QMan 14 + supports queuing and QoS scheduling of frames to CPUs, network interfaces and 15 + DPAA logic modules, maintains packet ordering within flows. Besides providing 16 + flow-level queuing, is also responsible for congestion management functions such 17 + as RED/WRED, congestion notifications and tail discards. This binding covers the 18 + CCSR space programming model 19 + 20 + PROPERTIES 21 + 22 + - compatible 23 + Usage: Required 24 + Value type: <stringlist> 25 + Definition: Must include "fsl,qman" 26 + May include "fsl,<SoC>-qman" 27 + 28 + - reg 29 + Usage: Required 30 + Value type: <prop-encoded-array> 31 + Definition: Registers region within the CCSR address space 32 + 33 + The QMan revision information is located in the QMAN_IP_REV_1/2 registers which 34 + are located at offsets 0xbf8 and 0xbfc 35 + 36 + - interrupts 37 + Usage: Required 38 + Value type: <prop-encoded-array> 39 + Definition: Standard property. The error interrupt 40 + 41 + - fsl,liodn 42 + Usage: See pamu.txt 43 + Value type: <prop-encoded-array> 44 + Definition: PAMU property used for static LIODN assignment 45 + 46 + - fsl,iommu-parent 47 + Usage: See pamu.txt 48 + Value type: <phandle> 49 + Definition: PAMU property used for dynamic LIODN assignment 50 + 51 + For additional details about the PAMU/LIODN binding(s) see pamu.txt 52 + 53 + - clocks 54 + Usage: See clock-bindings.txt and qoriq-clock.txt 55 + Value type: <prop-encoded-array> 56 + Definition: Reference input clock. Its frequency is half of the 57 + platform clock 58 + 59 + Devices connected to a QMan instance via Direct Connect Portals (DCP) must link 60 + to the respective QMan instance 61 + 62 + - fsl,qman 63 + Usage: Required 64 + Value type: <prop-encoded-array> 65 + Description: List of phandle and DCP index pairs, to the QMan instance 66 + to which this device is connected via the DCP 67 + 68 + QMan Private Memory Nodes 69 + 70 + QMan requires two contiguous range of physical memory used for the backing store 71 + for QMan Frame Queue Descriptor (FQD) and Packed Frame Descriptor Record (PFDR). 72 + This memory is reserved/allocated as a nodes under the /reserved-memory node 73 + 74 + The QMan FQD memory node must be named "qman-fqd" 75 + 76 + PROPERTIES 77 + 78 + - compatible 79 + Usage: required 80 + Value type: <stringlist> 81 + Definition: Must inclide "fsl,qman-fqd" 82 + 83 + The QMan PFDR memory node must be named "qman-pfdr" 84 + 85 + PROPERTIES 86 + 87 + - compatible 88 + Usage: required 89 + Value type: <stringlist> 90 + Definition: Must inclide "fsl,qman-pfdr" 91 + 92 + The following constraints are relevant to the FQD and PFDR private memory: 93 + - The size must be 2^(size + 1), with size = 11..29. That is 4 KiB to 94 + 1 GiB 95 + - The alignment must be a muliptle of the memory size 96 + 97 + The size of the FQD and PFDP must be chosen by observing the hardware features 98 + configured via the Reset Configuration Word (RCW) and that are relevant to a 99 + specific board (e.g. number of MAC(s) pinned-out, number of offline/host command 100 + FMan ports, etc.). The size configured in the DT must reflect the hardware 101 + capabilities and not the specific needs of an application 102 + 103 + For additional details about reserved memory regions see reserved-memory.txt 104 + 105 + EXAMPLE 106 + 107 + The example below shows a QMan FQD and a PFDR dynamic allocation memory nodes 108 + 109 + reserved-memory { 110 + #address-cells = <2>; 111 + #size-cells = <2>; 112 + ranges; 113 + 114 + qman_fqd: qman-fqd { 115 + compatible = "fsl,qman-fqd"; 116 + alloc-ranges = <0 0 0xf 0xffffffff>; 117 + size = <0 0x400000>; 118 + alignment = <0 0x400000>; 119 + }; 120 + qman_pfdr: qman-pfdr { 121 + compatible = "fsl,qman-pfdr"; 122 + alloc-ranges = <0 0 0xf 0xffffffff>; 123 + size = <0 0x2000000>; 124 + alignment = <0 0x2000000>; 125 + }; 126 + }; 127 + 128 + The example below shows a (P4080) QMan CCSR-space node 129 + 130 + clockgen: global-utilities@e1000 { 131 + ... 132 + sysclk: sysclk { 133 + ... 134 + }; 135 + ... 136 + platform_pll: platform-pll@c00 { 137 + #clock-cells = <1>; 138 + reg = <0xc00 0x4>; 139 + compatible = "fsl,qoriq-platform-pll-1.0"; 140 + clocks = <&sysclk>; 141 + clock-output-names = "platform-pll", "platform-pll-div2"; 142 + }; 143 + ... 144 + }; 145 + 146 + crypto@300000 { 147 + ... 148 + fsl,qman = <&qman, 2>; 149 + ... 150 + }; 151 + 152 + qman: qman@318000 { 153 + compatible = "fsl,qman"; 154 + reg = <0x318000 0x1000>; 155 + interrupts = <16 2 1 3> 156 + fsl,liodn = <0x16>; 157 + memory-region = <&qman_fqd &qman_pfdr>; 158 + clocks = <&platform_pll 1>; 159 + }; 160 + 161 + fman@400000 { 162 + ... 163 + fsl,qman = <&qman, 0>; 164 + ... 165 + };
+1 -1
arch/powerpc/Kconfig
··· 552 552 bool "4k page size" 553 553 554 554 config PPC_16K_PAGES 555 - bool "16k page size" if 44x 555 + bool "16k page size" if 44x || PPC_8xx 556 556 557 557 config PPC_64K_PAGES 558 558 bool "64k page size" if 44x || PPC_STD_MMU_64 || PPC_BOOK3E_64
+2 -2
arch/powerpc/boot/dts/b4860emu.dts
··· 193 193 fsl,liodn-bits = <12>; 194 194 }; 195 195 196 - clockgen: global-utilities@e1000 { 196 + /include/ "fsl/qoriq-clockgen2.dtsi" 197 + global-utilities@e1000 { 197 198 compatible = "fsl,b4-clockgen", "fsl,qoriq-clockgen-2.0"; 198 - reg = <0xe1000 0x1000>; 199 199 }; 200 200 201 201 /include/ "fsl/qoriq-dma-0.dtsi"
+23
arch/powerpc/boot/dts/b4qds.dtsi
··· 152 152 reg = <0x68>; 153 153 }; 154 154 }; 155 + 156 + i2c@2 { 157 + #address-cells = <1>; 158 + #size-cells = <0>; 159 + reg = <0x2>; 160 + 161 + ina220@40 { 162 + compatible = "ti,ina220"; 163 + reg = <0x40>; 164 + shunt-resistor = <1000>; 165 + }; 166 + }; 167 + 168 + i2c@3 { 169 + #address-cells = <1>; 170 + #size-cells = <0>; 171 + reg = <0x3>; 172 + 173 + adt7461@4c { 174 + compatible = "adi,adt7461"; 175 + reg = <0x4c>; 176 + }; 177 + }; 155 178 }; 156 179 }; 157 180
-50
arch/powerpc/boot/dts/bsc9131rdb.dtsi
··· 40 40 compatible = "fsl,ifc-nand"; 41 41 reg = <0x0 0x0 0x4000>; 42 42 43 - partition@0 { 44 - /* This location must not be altered */ 45 - /* 3MB for u-boot Bootloader Image */ 46 - reg = <0x0 0x00300000>; 47 - label = "NAND U-Boot Image"; 48 - read-only; 49 - }; 50 - 51 - partition@300000 { 52 - /* 1MB for DTB Image */ 53 - reg = <0x00300000 0x00100000>; 54 - label = "NAND DTB Image"; 55 - }; 56 - 57 - partition@400000 { 58 - /* 8MB for Linux Kernel Image */ 59 - reg = <0x00400000 0x00800000>; 60 - label = "NAND Linux Kernel Image"; 61 - }; 62 - 63 - partition@c00000 { 64 - /* Rest space for Root file System Image */ 65 - reg = <0x00c00000 0x07400000>; 66 - label = "NAND RFS Image"; 67 - }; 68 43 }; 69 44 }; 70 45 ··· 56 81 compatible = "spansion,s25sl12801"; 57 82 reg = <0>; 58 83 spi-max-frequency = <50000000>; 59 - 60 - /* 512KB for u-boot Bootloader Image */ 61 - partition@0 { 62 - reg = <0x0 0x00080000>; 63 - label = "SPI Flash U-Boot Image"; 64 - read-only; 65 - }; 66 - 67 - /* 512KB for DTB Image */ 68 - partition@80000 { 69 - reg = <0x00080000 0x00080000>; 70 - label = "SPI Flash DTB Image"; 71 - }; 72 - 73 - /* 4MB for Linux Kernel Image */ 74 - partition@100000 { 75 - reg = <0x00100000 0x00400000>; 76 - label = "SPI Flash Kernel Image"; 77 - }; 78 - 79 - /*11MB for RFS Image */ 80 - partition@500000 { 81 - reg = <0x00500000 0x00B00000>; 82 - label = "SPI Flash RFS Image"; 83 - }; 84 84 85 85 }; 86 86 };
+2 -26
arch/powerpc/boot/dts/fsl/b4420si-post.dtsi
··· 80 80 compatible = "fsl,b4420-device-config", "fsl,qoriq-device-config-2.0"; 81 81 }; 82 82 83 - clockgen: global-utilities@e1000 { 83 + /include/ "qoriq-clockgen2.dtsi" 84 + global-utilities@e1000 { 84 85 compatible = "fsl,b4420-clockgen", "fsl,qoriq-clockgen-2.0"; 85 - ranges = <0x0 0xe1000 0x1000>; 86 - #address-cells = <1>; 87 - #size-cells = <1>; 88 - 89 - sysclk: sysclk { 90 - #clock-cells = <0>; 91 - compatible = "fsl,qoriq-sysclk-2.0"; 92 - clock-output-names = "sysclk"; 93 - }; 94 - 95 - pll0: pll0@800 { 96 - #clock-cells = <1>; 97 - reg = <0x800 0x4>; 98 - compatible = "fsl,qoriq-core-pll-2.0"; 99 - clocks = <&sysclk>; 100 - clock-output-names = "pll0", "pll0-div2", "pll0-div4"; 101 - }; 102 - 103 - pll1: pll1@820 { 104 - #clock-cells = <1>; 105 - reg = <0x820 0x4>; 106 - compatible = "fsl,qoriq-core-pll-2.0"; 107 - clocks = <&sysclk>; 108 - clock-output-names = "pll1", "pll1-div2", "pll1-div4"; 109 - }; 110 86 111 87 mux0: mux0@0 { 112 88 #clock-cells = <0>;
+2 -26
arch/powerpc/boot/dts/fsl/b4860si-post.dtsi
··· 124 124 compatible = "fsl,b4860-device-config", "fsl,qoriq-device-config-2.0"; 125 125 }; 126 126 127 - clockgen: global-utilities@e1000 { 127 + /include/ "qoriq-clockgen2.dtsi" 128 + global-utilities@e1000 { 128 129 compatible = "fsl,b4860-clockgen", "fsl,qoriq-clockgen-2.0"; 129 - ranges = <0x0 0xe1000 0x1000>; 130 - #address-cells = <1>; 131 - #size-cells = <1>; 132 - 133 - sysclk: sysclk { 134 - #clock-cells = <0>; 135 - compatible = "fsl,qoriq-sysclk-2.0"; 136 - clock-output-names = "sysclk"; 137 - }; 138 - 139 - pll0: pll0@800 { 140 - #clock-cells = <1>; 141 - reg = <0x800 0x4>; 142 - compatible = "fsl,qoriq-core-pll-2.0"; 143 - clocks = <&sysclk>; 144 - clock-output-names = "pll0", "pll0-div2", "pll0-div4"; 145 - }; 146 - 147 - pll1: pll1@820 { 148 - #clock-cells = <1>; 149 - reg = <0x820 0x4>; 150 - compatible = "fsl,qoriq-core-pll-2.0"; 151 - clocks = <&sysclk>; 152 - clock-output-names = "pll1", "pll1-div2", "pll1-div4"; 153 - }; 154 130 155 131 mux0: mux0@0 { 156 132 #clock-cells = <0>;
+2 -46
arch/powerpc/boot/dts/fsl/p2041si-post.dtsi
··· 305 305 #sleep-cells = <2>; 306 306 }; 307 307 308 - clockgen: global-utilities@e1000 { 308 + /include/ "qoriq-clockgen1.dtsi" 309 + global-utilities@e1000 { 309 310 compatible = "fsl,p2041-clockgen", "fsl,qoriq-clockgen-1.0"; 310 - ranges = <0x0 0xe1000 0x1000>; 311 - reg = <0xe1000 0x1000>; 312 - clock-frequency = <0>; 313 - #address-cells = <1>; 314 - #size-cells = <1>; 315 - 316 - sysclk: sysclk { 317 - #clock-cells = <0>; 318 - compatible = "fsl,qoriq-sysclk-1.0"; 319 - clock-output-names = "sysclk"; 320 - }; 321 - 322 - pll0: pll0@800 { 323 - #clock-cells = <1>; 324 - reg = <0x800 0x4>; 325 - compatible = "fsl,qoriq-core-pll-1.0"; 326 - clocks = <&sysclk>; 327 - clock-output-names = "pll0", "pll0-div2"; 328 - }; 329 - 330 - pll1: pll1@820 { 331 - #clock-cells = <1>; 332 - reg = <0x820 0x4>; 333 - compatible = "fsl,qoriq-core-pll-1.0"; 334 - clocks = <&sysclk>; 335 - clock-output-names = "pll1", "pll1-div2"; 336 - }; 337 - 338 - mux0: mux0@0 { 339 - #clock-cells = <0>; 340 - reg = <0x0 0x4>; 341 - compatible = "fsl,qoriq-core-mux-1.0"; 342 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 343 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 344 - clock-output-names = "cmux0"; 345 - }; 346 - 347 - mux1: mux1@20 { 348 - #clock-cells = <0>; 349 - reg = <0x20 0x4>; 350 - compatible = "fsl,qoriq-core-mux-1.0"; 351 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 352 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 353 - clock-output-names = "cmux1"; 354 - }; 355 311 356 312 mux2: mux2@40 { 357 313 #clock-cells = <0>;
+2 -46
arch/powerpc/boot/dts/fsl/p3041si-post.dtsi
··· 332 332 #sleep-cells = <2>; 333 333 }; 334 334 335 - clockgen: global-utilities@e1000 { 335 + /include/ "qoriq-clockgen1.dtsi" 336 + global-utilities@e1000 { 336 337 compatible = "fsl,p3041-clockgen", "fsl,qoriq-clockgen-1.0"; 337 - ranges = <0x0 0xe1000 0x1000>; 338 - reg = <0xe1000 0x1000>; 339 - clock-frequency = <0>; 340 - #address-cells = <1>; 341 - #size-cells = <1>; 342 - 343 - sysclk: sysclk { 344 - #clock-cells = <0>; 345 - compatible = "fsl,qoriq-sysclk-1.0"; 346 - clock-output-names = "sysclk"; 347 - }; 348 - 349 - pll0: pll0@800 { 350 - #clock-cells = <1>; 351 - reg = <0x800 0x4>; 352 - compatible = "fsl,qoriq-core-pll-1.0"; 353 - clocks = <&sysclk>; 354 - clock-output-names = "pll0", "pll0-div2"; 355 - }; 356 - 357 - pll1: pll1@820 { 358 - #clock-cells = <1>; 359 - reg = <0x820 0x4>; 360 - compatible = "fsl,qoriq-core-pll-1.0"; 361 - clocks = <&sysclk>; 362 - clock-output-names = "pll1", "pll1-div2"; 363 - }; 364 - 365 - mux0: mux0@0 { 366 - #clock-cells = <0>; 367 - reg = <0x0 0x4>; 368 - compatible = "fsl,qoriq-core-mux-1.0"; 369 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 370 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 371 - clock-output-names = "cmux0"; 372 - }; 373 - 374 - mux1: mux1@20 { 375 - #clock-cells = <0>; 376 - reg = <0x20 0x4>; 377 - compatible = "fsl,qoriq-core-mux-1.0"; 378 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 379 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 380 - clock-output-names = "cmux1"; 381 - }; 382 338 383 339 mux2: mux2@40 { 384 340 #clock-cells = <0>;
+2 -46
arch/powerpc/boot/dts/fsl/p4080si-post.dtsi
··· 352 352 #sleep-cells = <2>; 353 353 }; 354 354 355 - clockgen: global-utilities@e1000 { 355 + /include/ "qoriq-clockgen1.dtsi" 356 + global-utilities@e1000 { 356 357 compatible = "fsl,p4080-clockgen", "fsl,qoriq-clockgen-1.0"; 357 - ranges = <0x0 0xe1000 0x1000>; 358 - reg = <0xe1000 0x1000>; 359 - clock-frequency = <0>; 360 - #address-cells = <1>; 361 - #size-cells = <1>; 362 - 363 - sysclk: sysclk { 364 - #clock-cells = <0>; 365 - compatible = "fsl,qoriq-sysclk-1.0"; 366 - clock-output-names = "sysclk"; 367 - }; 368 - 369 - pll0: pll0@800 { 370 - #clock-cells = <1>; 371 - reg = <0x800 0x4>; 372 - compatible = "fsl,qoriq-core-pll-1.0"; 373 - clocks = <&sysclk>; 374 - clock-output-names = "pll0", "pll0-div2"; 375 - }; 376 - 377 - pll1: pll1@820 { 378 - #clock-cells = <1>; 379 - reg = <0x820 0x4>; 380 - compatible = "fsl,qoriq-core-pll-1.0"; 381 - clocks = <&sysclk>; 382 - clock-output-names = "pll1", "pll1-div2"; 383 - }; 384 358 385 359 pll2: pll2@840 { 386 360 #clock-cells = <1>; ··· 370 396 compatible = "fsl,qoriq-core-pll-1.0"; 371 397 clocks = <&sysclk>; 372 398 clock-output-names = "pll3", "pll3-div2"; 373 - }; 374 - 375 - mux0: mux0@0 { 376 - #clock-cells = <0>; 377 - reg = <0x0 0x4>; 378 - compatible = "fsl,qoriq-core-mux-1.0"; 379 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 380 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 381 - clock-output-names = "cmux0"; 382 - }; 383 - 384 - mux1: mux1@20 { 385 - #clock-cells = <0>; 386 - reg = <0x20 0x4>; 387 - compatible = "fsl,qoriq-core-mux-1.0"; 388 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 389 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 390 - clock-output-names = "cmux1"; 391 399 }; 392 400 393 401 mux2: mux2@40 {
+2 -46
arch/powerpc/boot/dts/fsl/p5020si-post.dtsi
··· 337 337 #sleep-cells = <2>; 338 338 }; 339 339 340 - clockgen: global-utilities@e1000 { 340 + /include/ "qoriq-clockgen1.dtsi" 341 + global-utilities@e1000 { 341 342 compatible = "fsl,p5020-clockgen", "fsl,qoriq-clockgen-1.0"; 342 - ranges = <0x0 0xe1000 0x1000>; 343 - reg = <0xe1000 0x1000>; 344 - clock-frequency = <0>; 345 - #address-cells = <1>; 346 - #size-cells = <1>; 347 - 348 - sysclk: sysclk { 349 - #clock-cells = <0>; 350 - compatible = "fsl,qoriq-sysclk-1.0"; 351 - clock-output-names = "sysclk"; 352 - }; 353 - 354 - pll0: pll0@800 { 355 - #clock-cells = <1>; 356 - reg = <0x800 0x4>; 357 - compatible = "fsl,qoriq-core-pll-1.0"; 358 - clocks = <&sysclk>; 359 - clock-output-names = "pll0", "pll0-div2"; 360 - }; 361 - 362 - pll1: pll1@820 { 363 - #clock-cells = <1>; 364 - reg = <0x820 0x4>; 365 - compatible = "fsl,qoriq-core-pll-1.0"; 366 - clocks = <&sysclk>; 367 - clock-output-names = "pll1", "pll1-div2"; 368 - }; 369 - 370 - mux0: mux0@0 { 371 - #clock-cells = <0>; 372 - reg = <0x0 0x4>; 373 - compatible = "fsl,qoriq-core-mux-1.0"; 374 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 375 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 376 - clock-output-names = "cmux0"; 377 - }; 378 - 379 - mux1: mux1@20 { 380 - #clock-cells = <0>; 381 - reg = <0x20 0x4>; 382 - compatible = "fsl,qoriq-core-mux-1.0"; 383 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 384 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 385 - clock-output-names = "cmux1"; 386 - }; 387 343 }; 388 344 389 345 rcpm: global-utilities@e2000 {
+2 -46
arch/powerpc/boot/dts/fsl/p5040si-post.dtsi
··· 297 297 #sleep-cells = <2>; 298 298 }; 299 299 300 - clockgen: global-utilities@e1000 { 300 + /include/ "qoriq-clockgen1.dtsi" 301 + global-utilities@e1000 { 301 302 compatible = "fsl,p5040-clockgen", "fsl,qoriq-clockgen-1.0"; 302 - ranges = <0x0 0xe1000 0x1000>; 303 - reg = <0xe1000 0x1000>; 304 - clock-frequency = <0>; 305 - #address-cells = <1>; 306 - #size-cells = <1>; 307 - 308 - sysclk: sysclk { 309 - #clock-cells = <0>; 310 - compatible = "fsl,qoriq-sysclk-1.0"; 311 - clock-output-names = "sysclk"; 312 - }; 313 - 314 - pll0: pll0@800 { 315 - #clock-cells = <1>; 316 - reg = <0x800 0x4>; 317 - compatible = "fsl,qoriq-core-pll-1.0"; 318 - clocks = <&sysclk>; 319 - clock-output-names = "pll0", "pll0-div2"; 320 - }; 321 - 322 - pll1: pll1@820 { 323 - #clock-cells = <1>; 324 - reg = <0x820 0x4>; 325 - compatible = "fsl,qoriq-core-pll-1.0"; 326 - clocks = <&sysclk>; 327 - clock-output-names = "pll1", "pll1-div2"; 328 - }; 329 - 330 - mux0: mux0@0 { 331 - #clock-cells = <0>; 332 - reg = <0x0 0x4>; 333 - compatible = "fsl,qoriq-core-mux-1.0"; 334 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 335 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 336 - clock-output-names = "cmux0"; 337 - }; 338 - 339 - mux1: mux1@20 { 340 - #clock-cells = <0>; 341 - reg = <0x20 0x4>; 342 - compatible = "fsl,qoriq-core-mux-1.0"; 343 - clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 344 - clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 345 - clock-output-names = "cmux1"; 346 - }; 347 303 348 304 mux2: mux2@40 { 349 305 #clock-cells = <0>;
+85
arch/powerpc/boot/dts/fsl/qoriq-clockgen1.dtsi
··· 1 + /* 2 + * QorIQ clock control device tree stub [ controller @ offset 0xe1000 ] 3 + * 4 + * Copyright 2014 Freescale Semiconductor Inc. 5 + * 6 + * Redistribution and use in source and binary forms, with or without 7 + * modification, are permitted provided that the following conditions are met: 8 + * * Redistributions of source code must retain the above copyright 9 + * notice, this list of conditions and the following disclaimer. 10 + * * Redistributions in binary form must reproduce the above copyright 11 + * notice, this list of conditions and the following disclaimer in the 12 + * documentation and/or other materials provided with the distribution. 13 + * * Neither the name of Freescale Semiconductor nor the 14 + * names of its contributors may be used to endorse or promote products 15 + * derived from this software without specific prior written permission. 16 + * 17 + * 18 + * ALTERNATIVELY, this software may be distributed under the terms of the 19 + * GNU General Public License ("GPL") as published by the Free Software 20 + * Foundation, either version 2 of that License or (at your option) any 21 + * later version. 22 + * 23 + * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 24 + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25 + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26 + * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 27 + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28 + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 30 + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 32 + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 + */ 34 + 35 + global-utilities@e1000 { 36 + compatible = "fsl,qoriq-clockgen-1.0"; 37 + ranges = <0x0 0xe1000 0x1000>; 38 + reg = <0xe1000 0x1000>; 39 + clock-frequency = <0>; 40 + #address-cells = <1>; 41 + #size-cells = <1>; 42 + 43 + sysclk: sysclk { 44 + #clock-cells = <0>; 45 + compatible = "fsl,qoriq-sysclk-1.0", "fixed-clock"; 46 + clock-output-names = "sysclk"; 47 + }; 48 + pll0: pll0@800 { 49 + #clock-cells = <1>; 50 + reg = <0x800 0x4>; 51 + compatible = "fsl,qoriq-core-pll-1.0"; 52 + clocks = <&sysclk>; 53 + clock-output-names = "pll0", "pll0-div2"; 54 + }; 55 + pll1: pll1@820 { 56 + #clock-cells = <1>; 57 + reg = <0x820 0x4>; 58 + compatible = "fsl,qoriq-core-pll-1.0"; 59 + clocks = <&sysclk>; 60 + clock-output-names = "pll1", "pll1-div2"; 61 + }; 62 + mux0: mux0@0 { 63 + #clock-cells = <0>; 64 + reg = <0x0 0x4>; 65 + compatible = "fsl,qoriq-core-mux-1.0"; 66 + clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 67 + clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 68 + clock-output-names = "cmux0"; 69 + }; 70 + mux1: mux1@20 { 71 + #clock-cells = <0>; 72 + reg = <0x20 0x4>; 73 + compatible = "fsl,qoriq-core-mux-1.0"; 74 + clocks = <&pll0 0>, <&pll0 1>, <&pll1 0>, <&pll1 1>; 75 + clock-names = "pll0", "pll0-div2", "pll1", "pll1-div2"; 76 + clock-output-names = "cmux1"; 77 + }; 78 + platform_pll: platform-pll@c00 { 79 + #clock-cells = <1>; 80 + reg = <0xc00 0x4>; 81 + compatible = "fsl,qoriq-platform-pll-1.0"; 82 + clocks = <&sysclk>; 83 + clock-output-names = "platform-pll", "platform-pll-div2"; 84 + }; 85 + };
+68
arch/powerpc/boot/dts/fsl/qoriq-clockgen2.dtsi
··· 1 + /* 2 + * QorIQ clock control device tree stub [ controller @ offset 0xe1000 ] 3 + * 4 + * Copyright 2014 Freescale Semiconductor Inc. 5 + * 6 + * Redistribution and use in source and binary forms, with or without 7 + * modification, are permitted provided that the following conditions are met: 8 + * * Redistributions of source code must retain the above copyright 9 + * notice, this list of conditions and the following disclaimer. 10 + * * Redistributions in binary form must reproduce the above copyright 11 + * notice, this list of conditions and the following disclaimer in the 12 + * documentation and/or other materials provided with the distribution. 13 + * * Neither the name of Freescale Semiconductor nor the 14 + * names of its contributors may be used to endorse or promote products 15 + * derived from this software without specific prior written permission. 16 + * 17 + * 18 + * ALTERNATIVELY, this software may be distributed under the terms of the 19 + * GNU General Public License ("GPL") as published by the Free Software 20 + * Foundation, either version 2 of that License or (at your option) any 21 + * later version. 22 + * 23 + * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 24 + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25 + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26 + * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 27 + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28 + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 30 + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 32 + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 + */ 34 + 35 + global-utilities@e1000 { 36 + compatible = "fsl,qoriq-clockgen-2.0"; 37 + ranges = <0x0 0xe1000 0x1000>; 38 + reg = <0xe1000 0x1000>; 39 + #address-cells = <1>; 40 + #size-cells = <1>; 41 + 42 + sysclk: sysclk { 43 + #clock-cells = <0>; 44 + compatible = "fsl,qoriq-sysclk-2.0", "fixed-clock"; 45 + clock-output-names = "sysclk"; 46 + }; 47 + pll0: pll0@800 { 48 + #clock-cells = <1>; 49 + reg = <0x800 0x4>; 50 + compatible = "fsl,qoriq-core-pll-2.0"; 51 + clocks = <&sysclk>; 52 + clock-output-names = "pll0", "pll0-div2", "pll0-div4"; 53 + }; 54 + pll1: pll1@820 { 55 + #clock-cells = <1>; 56 + reg = <0x820 0x4>; 57 + compatible = "fsl,qoriq-core-pll-2.0"; 58 + clocks = <&sysclk>; 59 + clock-output-names = "pll1", "pll1-div2", "pll1-div4"; 60 + }; 61 + platform_pll: platform-pll@c00 { 62 + #clock-cells = <1>; 63 + reg = <0xc00 0x4>; 64 + compatible = "fsl,qoriq-platform-pll-2.0"; 65 + clocks = <&sysclk>; 66 + clock-output-names = "platform-pll", "platform-pll-div2"; 67 + }; 68 + };
+2 -28
arch/powerpc/boot/dts/fsl/t1040si-post.dtsi
··· 281 281 fsl,liodn-bits = <12>; 282 282 }; 283 283 284 - clockgen: global-utilities@e1000 { 284 + /include/ "qoriq-clockgen2.dtsi" 285 + global-utilities@e1000 { 285 286 compatible = "fsl,t1040-clockgen", "fsl,qoriq-clockgen-2.0"; 286 - ranges = <0x0 0xe1000 0x1000>; 287 - reg = <0xe1000 0x1000>; 288 - #address-cells = <1>; 289 - #size-cells = <1>; 290 - 291 - sysclk: sysclk { 292 - #clock-cells = <0>; 293 - compatible = "fsl,qoriq-sysclk-2.0"; 294 - clock-output-names = "sysclk", "fixed-clock"; 295 - }; 296 - 297 - 298 - pll0: pll0@800 { 299 - #clock-cells = <1>; 300 - reg = <0x800 4>; 301 - compatible = "fsl,qoriq-core-pll-2.0"; 302 - clocks = <&sysclk>; 303 - clock-output-names = "pll0", "pll0-div2", "pll0-div4"; 304 - }; 305 - 306 - pll1: pll1@820 { 307 - #clock-cells = <1>; 308 - reg = <0x820 4>; 309 - compatible = "fsl,qoriq-core-pll-2.0"; 310 - clocks = <&sysclk>; 311 - clock-output-names = "pll1", "pll1-div2", "pll1-div4"; 312 - }; 313 287 314 288 mux0: mux0@0 { 315 289 #clock-cells = <0>;
+2 -27
arch/powerpc/boot/dts/fsl/t2081si-post.dtsi
··· 305 305 fsl,liodn-bits = <12>; 306 306 }; 307 307 308 - clockgen: global-utilities@e1000 { 308 + /include/ "qoriq-clockgen2.dtsi" 309 + global-utilities@e1000 { 309 310 compatible = "fsl,t2080-clockgen", "fsl,qoriq-clockgen-2.0"; 310 - ranges = <0x0 0xe1000 0x1000>; 311 - reg = <0xe1000 0x1000>; 312 - #address-cells = <1>; 313 - #size-cells = <1>; 314 - 315 - sysclk: sysclk { 316 - #clock-cells = <0>; 317 - compatible = "fsl,qoriq-sysclk-2.0"; 318 - clock-output-names = "sysclk", "fixed-clock"; 319 - }; 320 - 321 - pll0: pll0@800 { 322 - #clock-cells = <1>; 323 - reg = <0x800 4>; 324 - compatible = "fsl,qoriq-core-pll-2.0"; 325 - clocks = <&sysclk>; 326 - clock-output-names = "pll0", "pll0-div2", "pll0-div4"; 327 - }; 328 - 329 - pll1: pll1@820 { 330 - #clock-cells = <1>; 331 - reg = <0x820 4>; 332 - compatible = "fsl,qoriq-core-pll-2.0"; 333 - clocks = <&sysclk>; 334 - clock-output-names = "pll1", "pll1-div2", "pll1-div4"; 335 - }; 336 311 337 312 mux0: mux0@0 { 338 313 #clock-cells = <0>;
+2 -27
arch/powerpc/boot/dts/fsl/t4240si-post.dtsi
··· 368 368 fsl,liodn-bits = <12>; 369 369 }; 370 370 371 - clockgen: global-utilities@e1000 { 371 + /include/ "qoriq-clockgen2.dtsi" 372 + global-utilities@e1000 { 372 373 compatible = "fsl,t4240-clockgen", "fsl,qoriq-clockgen-2.0"; 373 - ranges = <0x0 0xe1000 0x1000>; 374 - reg = <0xe1000 0x1000>; 375 - #address-cells = <1>; 376 - #size-cells = <1>; 377 - 378 - sysclk: sysclk { 379 - #clock-cells = <0>; 380 - compatible = "fsl,qoriq-sysclk-2.0"; 381 - clock-output-names = "sysclk"; 382 - }; 383 - 384 - pll0: pll0@800 { 385 - #clock-cells = <1>; 386 - reg = <0x800 0x4>; 387 - compatible = "fsl,qoriq-core-pll-2.0"; 388 - clocks = <&sysclk>; 389 - clock-output-names = "pll0", "pll0-div2", "pll0-div4"; 390 - }; 391 - 392 - pll1: pll1@820 { 393 - #clock-cells = <1>; 394 - reg = <0x820 0x4>; 395 - compatible = "fsl,qoriq-core-pll-2.0"; 396 - clocks = <&sysclk>; 397 - clock-output-names = "pll1", "pll1-div2", "pll1-div4"; 398 - }; 399 374 400 375 pll2: pll2@840 { 401 376 #clock-cells = <1>;
+20
arch/powerpc/boot/dts/p3041ds.dts
··· 98 98 reg = <0x68>; 99 99 interrupts = <0x1 0x1 0 0>; 100 100 }; 101 + ina220@40 { 102 + compatible = "ti,ina220"; 103 + reg = <0x40>; 104 + shunt-resistor = <1000>; 105 + }; 106 + ina220@41 { 107 + compatible = "ti,ina220"; 108 + reg = <0x41>; 109 + shunt-resistor = <1000>; 110 + }; 111 + ina220@44 { 112 + compatible = "ti,ina220"; 113 + reg = <0x44>; 114 + shunt-resistor = <1000>; 115 + }; 116 + ina220@45 { 117 + compatible = "ti,ina220"; 118 + reg = <0x45>; 119 + shunt-resistor = <1000>; 120 + }; 101 121 adt7461@4c { 102 122 compatible = "adi,adt7461"; 103 123 reg = <0x4c>;
+20
arch/powerpc/boot/dts/p5020ds.dts
··· 98 98 reg = <0x68>; 99 99 interrupts = <0x1 0x1 0 0>; 100 100 }; 101 + ina220@40 { 102 + compatible = "ti,ina220"; 103 + reg = <0x40>; 104 + shunt-resistor = <1000>; 105 + }; 106 + ina220@41 { 107 + compatible = "ti,ina220"; 108 + reg = <0x41>; 109 + shunt-resistor = <1000>; 110 + }; 111 + ina220@44 { 112 + compatible = "ti,ina220"; 113 + reg = <0x44>; 114 + shunt-resistor = <1000>; 115 + }; 116 + ina220@45 { 117 + compatible = "ti,ina220"; 118 + reg = <0x45>; 119 + shunt-resistor = <1000>; 120 + }; 101 121 adt7461@4c { 102 122 compatible = "adi,adt7461"; 103 123 reg = <0x4c>;
+20
arch/powerpc/boot/dts/p5040ds.dts
··· 95 95 reg = <0x68>; 96 96 interrupts = <0x1 0x1 0 0>; 97 97 }; 98 + ina220@40 { 99 + compatible = "ti,ina220"; 100 + reg = <0x40>; 101 + shunt-resistor = <1000>; 102 + }; 103 + ina220@41 { 104 + compatible = "ti,ina220"; 105 + reg = <0x41>; 106 + shunt-resistor = <1000>; 107 + }; 108 + ina220@44 { 109 + compatible = "ti,ina220"; 110 + reg = <0x44>; 111 + shunt-resistor = <1000>; 112 + }; 113 + ina220@45 { 114 + compatible = "ti,ina220"; 115 + reg = <0x45>; 116 + shunt-resistor = <1000>; 117 + }; 98 118 adt7461@4c { 99 119 compatible = "adi,adt7461"; 100 120 reg = <0x4c>;
+7
arch/powerpc/boot/dts/t104xrdb.dtsi
··· 83 83 }; 84 84 }; 85 85 86 + i2c@118000 { 87 + adt7461@4c { 88 + compatible = "adi,adt7461"; 89 + reg = <0x4c>; 90 + }; 91 + }; 92 + 86 93 i2c@118100 { 87 94 pca9546@77 { 88 95 compatible = "nxp,pca9546";
+11
arch/powerpc/boot/dts/t208xqds.dtsi
··· 169 169 shunt-resistor = <1000>; 170 170 }; 171 171 }; 172 + 173 + i2c@3 { 174 + #address-cells = <1>; 175 + #size-cells = <0>; 176 + reg = <0x3>; 177 + 178 + adt7461@4c { 179 + compatible = "adi,adt7461"; 180 + reg = <0x4c>; 181 + }; 182 + }; 172 183 }; 173 184 }; 174 185
+2 -2
arch/powerpc/boot/dts/t4240emu.dts
··· 250 250 fsl,liodn-bits = <12>; 251 251 }; 252 252 253 - clockgen: global-utilities@e1000 { 253 + /include/ "fsl/qoriq-clockgen2.dtsi" 254 + global-utilities@e1000 { 254 255 compatible = "fsl,t4240-clockgen", "fsl,qoriq-clockgen-2.0"; 255 - reg = <0xe1000 0x1000>; 256 256 }; 257 257 258 258 /include/ "fsl/qoriq-dma-0.dtsi"
+1
arch/powerpc/configs/corenet32_smp_defconfig
··· 144 144 CONFIG_RTC_DRV_DS3232=y 145 145 CONFIG_UIO=y 146 146 CONFIG_STAGING=y 147 + CONFIG_MEMORY=y 147 148 CONFIG_VIRT_DRIVERS=y 148 149 CONFIG_FSL_HV_MANAGER=y 149 150 CONFIG_EXT2_FS=y
+1
arch/powerpc/configs/corenet64_smp_defconfig
··· 118 118 CONFIG_VIRT_DRIVERS=y 119 119 CONFIG_FSL_HV_MANAGER=y 120 120 CONFIG_FSL_CORENET_CF=y 121 + CONFIG_MEMORY=y 121 122 CONFIG_EXT2_FS=y 122 123 CONFIG_EXT3_FS=y 123 124 CONFIG_ISO9660_FS=m
+1
arch/powerpc/configs/mpc85xx_defconfig
··· 215 215 CONFIG_RTC_DRV_CMOS=y 216 216 CONFIG_DMADEVICES=y 217 217 CONFIG_FSL_DMA=y 218 + CONFIG_MEMORY=y 218 219 # CONFIG_NET_DMA is not set 219 220 CONFIG_EXT2_FS=y 220 221 CONFIG_EXT3_FS=y
+1
arch/powerpc/configs/mpc85xx_smp_defconfig
··· 216 216 CONFIG_RTC_DRV_CMOS=y 217 217 CONFIG_DMADEVICES=y 218 218 CONFIG_FSL_DMA=y 219 + CONFIG_MEMORY=y 219 220 # CONFIG_NET_DMA is not set 220 221 CONFIG_EXT2_FS=y 221 222 CONFIG_EXT3_FS=y
+4 -1
arch/powerpc/include/asm/fsl_guts.h
··· 68 68 u8 res0b4[0xc0 - 0xb4]; 69 69 __be32 iovselsr; /* 0x.00c0 - I/O voltage select status register 70 70 Called 'elbcvselcr' on 86xx SOCs */ 71 - u8 res0c4[0x224 - 0xc4]; 71 + u8 res0c4[0x100 - 0xc4]; 72 + __be32 rcwsr[16]; /* 0x.0100 - Reset Control Word Status registers 73 + There are 16 registers */ 74 + u8 res140[0x224 - 0x140]; 72 75 __be32 iodelay1; /* 0x.0224 - IO delay control register 1 */ 73 76 __be32 iodelay2; /* 0x.0228 - IO delay control register 2 */ 74 77 u8 res22c[0x604 - 0x22c];
+2
arch/powerpc/include/asm/mmu-8xx.h
··· 56 56 * additional information from the MI_EPN, and MI_TWC registers. 57 57 */ 58 58 #define SPRN_MI_RPN 790 59 + #define MI_SPS16K 0x00000008 /* Small page size (0 = 4k, 1 = 16k) */ 59 60 60 61 /* Define an RPN value for mapping kernel memory to large virtual 61 62 * pages for boot initialization. This has real page number of 0, ··· 130 129 * additional information from the MD_EPN, and MD_TWC registers. 131 130 */ 132 131 #define SPRN_MD_RPN 798 132 + #define MD_SPS16K 0x00000008 /* Small page size (0 = 4k, 1 = 16k) */ 133 133 134 134 /* This is a temporary storage register that could be used to save 135 135 * a processor working register during a tablewalk.
+20
arch/powerpc/include/asm/pgtable-ppc32.h
··· 170 170 #ifdef PTE_ATOMIC_UPDATES 171 171 unsigned long old, tmp; 172 172 173 + #ifdef CONFIG_PPC_8xx 174 + unsigned long tmp2; 175 + 176 + __asm__ __volatile__("\ 177 + 1: lwarx %0,0,%4\n\ 178 + andc %1,%0,%5\n\ 179 + or %1,%1,%6\n\ 180 + /* 0x200 == Extended encoding, bit 22 */ \ 181 + /* Bit 22 has to be 1 if neither _PAGE_USER nor _PAGE_RW are set */ \ 182 + rlwimi %1,%1,32-2,0x200\n /* get _PAGE_USER */ \ 183 + rlwinm %3,%1,32-1,0x200\n /* get _PAGE_RW */ \ 184 + or %1,%3,%1\n\ 185 + xori %1,%1,0x200\n" 186 + " stwcx. %1,0,%4\n\ 187 + bne- 1b" 188 + : "=&r" (old), "=&r" (tmp), "=m" (*p), "=&r" (tmp2) 189 + : "r" (p), "r" (clr), "r" (set), "m" (*p) 190 + : "cc" ); 191 + #else /* CONFIG_PPC_8xx */ 173 192 __asm__ __volatile__("\ 174 193 1: lwarx %0,0,%3\n\ 175 194 andc %1,%0,%4\n\ ··· 199 180 : "=&r" (old), "=&r" (tmp), "=m" (*p) 200 181 : "r" (p), "r" (clr), "r" (set), "m" (*p) 201 182 : "cc" ); 183 + #endif /* CONFIG_PPC_8xx */ 202 184 #else /* PTE_ATOMIC_UPDATES */ 203 185 unsigned long old = pte_val(*p); 204 186 *p = __pte((old & ~clr) | set);
+5 -2
arch/powerpc/include/asm/pte-8xx.h
··· 48 48 */ 49 49 #define _PAGE_RW 0x0400 /* lsb PP bits, inverted in HW */ 50 50 #define _PAGE_USER 0x0800 /* msb PP bits */ 51 + /* set when neither _PAGE_USER nor _PAGE_RW are set */ 52 + #define _PAGE_KNLRO 0x0200 51 53 52 54 #define _PMD_PRESENT 0x0001 53 55 #define _PMD_BAD 0x0ff0 54 56 #define _PMD_PAGE_MASK 0x000c 55 57 #define _PMD_PAGE_8M 0x000c 56 58 57 - #define _PTE_NONE_MASK _PAGE_ACCESSED 59 + #define _PTE_NONE_MASK _PAGE_KNLRO 58 60 59 61 /* Until my rework is finished, 8xx still needs atomic PTE updates */ 60 62 #define PTE_ATOMIC_UPDATES 1 61 63 62 64 /* We need to add _PAGE_SHARED to kernel pages */ 63 - #define _PAGE_KERNEL_RO (_PAGE_SHARED) 65 + #define _PAGE_KERNEL_RO (_PAGE_SHARED | _PAGE_KNLRO) 66 + #define _PAGE_KERNEL_ROX (_PAGE_EXEC | _PAGE_KNLRO) 64 67 #define _PAGE_KERNEL_RW (_PAGE_DIRTY | _PAGE_RW | _PAGE_HWWRITE) 65 68 66 69 #endif /* __KERNEL__ */
+122 -108
arch/powerpc/kernel/head_8xx.S
··· 33 33 34 34 /* Macro to make the code more readable. */ 35 35 #ifdef CONFIG_8xx_CPU6 36 - #define DO_8xx_CPU6(val, reg) \ 37 - li reg, val; \ 38 - stw reg, 12(r0); \ 39 - lwz reg, 12(r0); 36 + #define SPRN_MI_TWC_ADDR 0x2b80 37 + #define SPRN_MI_RPN_ADDR 0x2d80 38 + #define SPRN_MD_TWC_ADDR 0x3b80 39 + #define SPRN_MD_RPN_ADDR 0x3d80 40 + 41 + #define MTSPR_CPU6(spr, reg, treg) \ 42 + li treg, spr##_ADDR; \ 43 + stw treg, 12(r0); \ 44 + lwz treg, 12(r0); \ 45 + mtspr spr, reg 40 46 #else 41 - #define DO_8xx_CPU6(val, reg) 47 + #define MTSPR_CPU6(spr, reg, treg) \ 48 + mtspr spr, reg 42 49 #endif 50 + 51 + /* 52 + * Value for the bits that have fixed value in RPN entries. 53 + * Also used for tagging DAR for DTLBerror. 54 + */ 55 + #ifdef CONFIG_PPC_16K_PAGES 56 + #define RPN_PATTERN (0x00f0 | MD_SPS16K) 57 + #else 58 + #define RPN_PATTERN 0x00f0 59 + #endif 60 + 43 61 __HEAD 44 62 _ENTRY(_stext); 45 63 _ENTRY(_start); ··· 82 64 * entry into each of the instruction and data TLBs to map the first 83 65 * 8M 1:1. I also mapped an additional I/O space 1:1 so we can get to 84 66 * the "internal" processor registers before MMU_init is called. 85 - * 86 - * The TLB code currently contains a major hack. Since I use the condition 87 - * code register, I have to save and restore it. I am out of registers, so 88 - * I just store it in memory location 0 (the TLB handlers are not reentrant). 89 - * To avoid making any decisions, I need to use the "segment" valid bit 90 - * in the first level table, but that would require many changes to the 91 - * Linux page directory/table functions that I don't want to do right now. 92 67 * 93 68 * -- Dan 94 69 */ ··· 222 211 EXCEPTION_PROLOG 223 212 mfspr r4,SPRN_DAR 224 213 stw r4,_DAR(r11) 225 - li r5,0x00f0 214 + li r5,RPN_PATTERN 226 215 mtspr SPRN_DAR,r5 /* Tag DAR, to be used in DTLB Error */ 227 216 mfspr r5,SPRN_DSISR 228 217 stw r5,_DSISR(r11) ··· 230 219 EXC_XFER_STD(0x200, machine_check_exception) 231 220 232 221 /* Data access exception. 233 - * This is "never generated" by the MPC8xx. We jump to it for other 234 - * translation errors. 222 + * This is "never generated" by the MPC8xx. 235 223 */ 236 224 . = 0x300 237 225 DataAccess: 238 - EXCEPTION_PROLOG 239 - mfspr r10,SPRN_DSISR 240 - stw r10,_DSISR(r11) 241 - mr r5,r10 242 - mfspr r4,SPRN_DAR 243 - li r10,0x00f0 244 - mtspr SPRN_DAR,r10 /* Tag DAR, to be used in DTLB Error */ 245 - EXC_XFER_LITE(0x300, handle_page_fault) 246 226 247 227 /* Instruction access exception. 248 - * This is "never generated" by the MPC8xx. We jump to it for other 249 - * translation errors. 228 + * This is "never generated" by the MPC8xx. 250 229 */ 251 230 . = 0x400 252 231 InstructionAccess: 253 - EXCEPTION_PROLOG 254 - mr r4,r12 255 - mr r5,r9 256 - EXC_XFER_LITE(0x400, handle_page_fault) 257 232 258 233 /* External interrupt */ 259 234 EXCEPTION(0x500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE) ··· 250 253 EXCEPTION_PROLOG 251 254 mfspr r4,SPRN_DAR 252 255 stw r4,_DAR(r11) 253 - li r5,0x00f0 256 + li r5,RPN_PATTERN 254 257 mtspr SPRN_DAR,r5 /* Tag DAR, to be used in DTLB Error */ 255 258 mfspr r5,SPRN_DSISR 256 259 stw r5,_DSISR(r11) ··· 289 292 . = 0x1100 290 293 /* 291 294 * For the MPC8xx, this is a software tablewalk to load the instruction 292 - * TLB. It is modelled after the example in the Motorola manual. The task 293 - * switch loads the M_TWB register with the pointer to the first level table. 295 + * TLB. The task switch loads the M_TW register with the pointer to the first 296 + * level table. 294 297 * If we discover there is no second level table (value is zero) or if there 295 298 * is an invalid pte, we load that into the TLB, which causes another fault 296 299 * into the TLB Error interrupt where we can handle such problems. ··· 299 302 */ 300 303 InstructionTLBMiss: 301 304 #ifdef CONFIG_8xx_CPU6 302 - stw r3, 8(r0) 305 + mtspr SPRN_DAR, r3 303 306 #endif 304 307 EXCEPTION_PROLOG_0 305 308 mtspr SPRN_SPRG_SCRATCH2, r10 306 309 mfspr r10, SPRN_SRR0 /* Get effective address of fault */ 307 310 #ifdef CONFIG_8xx_CPU15 308 - addi r11, r10, 0x1000 311 + addi r11, r10, PAGE_SIZE 309 312 tlbie r11 310 - addi r11, r10, -0x1000 313 + addi r11, r10, -PAGE_SIZE 311 314 tlbie r11 312 315 #endif 313 - DO_8xx_CPU6(0x3780, r3) 314 - mtspr SPRN_MD_EPN, r10 /* Have to use MD_EPN for walk, MI_EPN can't */ 315 - mfspr r10, SPRN_M_TWB /* Get level 1 table entry address */ 316 316 317 317 /* If we are faulting a kernel address, we have to use the 318 318 * kernel page tables. ··· 317 323 #ifdef CONFIG_MODULES 318 324 /* Only modules will cause ITLB Misses as we always 319 325 * pin the first 8MB of kernel memory */ 320 - andi. r11, r10, 0x0800 /* Address >= 0x80000000 */ 326 + andis. r11, r10, 0x8000 /* Address >= 0x80000000 */ 327 + #endif 328 + mfspr r11, SPRN_M_TW /* Get level 1 table base address */ 329 + #ifdef CONFIG_MODULES 321 330 beq 3f 322 - lis r11, swapper_pg_dir@h 323 - ori r11, r11, swapper_pg_dir@l 324 - rlwimi r10, r11, 0, 2, 19 331 + lis r11, (swapper_pg_dir-PAGE_OFFSET)@h 332 + ori r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l 325 333 3: 326 334 #endif 327 - lwz r11, 0(r10) /* Get the level 1 entry */ 335 + /* Extract level 1 index */ 336 + rlwinm r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29 337 + lwzx r11, r10, r11 /* Get the level 1 entry */ 328 338 rlwinm. r10, r11,0,0,19 /* Extract page descriptor page address */ 329 339 beq 2f /* If zero, don't try to find a pte */ 330 340 331 341 /* We have a pte table, so load the MI_TWC with the attributes 332 342 * for this "segment." 333 343 */ 334 - ori r11,r11,1 /* Set valid bit */ 335 - DO_8xx_CPU6(0x2b80, r3) 336 - mtspr SPRN_MI_TWC, r11 /* Set segment attributes */ 337 - DO_8xx_CPU6(0x3b80, r3) 338 - mtspr SPRN_MD_TWC, r11 /* Load pte table base address */ 339 - mfspr r11, SPRN_MD_TWC /* ....and get the pte address */ 340 - lwz r10, 0(r11) /* Get the pte */ 344 + MTSPR_CPU6(SPRN_MI_TWC, r11, r3) /* Set segment attributes */ 345 + mfspr r11, SPRN_SRR0 /* Get effective address of fault */ 346 + /* Extract level 2 index */ 347 + rlwinm r11, r11, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29 348 + lwzx r10, r10, r11 /* Get the pte */ 341 349 342 350 #ifdef CONFIG_SWAP 343 351 andi. r11, r10, _PAGE_ACCESSED | _PAGE_PRESENT 344 352 cmpwi cr0, r11, _PAGE_ACCESSED | _PAGE_PRESENT 353 + li r11, RPN_PATTERN 345 354 bne- cr0, 2f 355 + #else 356 + li r11, RPN_PATTERN 346 357 #endif 347 358 /* The Linux PTE won't go exactly into the MMU TLB. 348 359 * Software indicator bits 21 and 28 must be clear. ··· 355 356 * set. All other Linux PTE bits control the behavior 356 357 * of the MMU. 357 358 */ 358 - li r11, 0x00f0 359 359 rlwimi r10, r11, 0, 0x07f8 /* Set 24-27, clear 21-23,28 */ 360 - DO_8xx_CPU6(0x2d80, r3) 361 - mtspr SPRN_MI_RPN, r10 /* Update TLB entry */ 360 + MTSPR_CPU6(SPRN_MI_RPN, r10, r3) /* Update TLB entry */ 362 361 363 362 /* Restore registers */ 364 363 #ifdef CONFIG_8xx_CPU6 365 - lwz r3, 8(r0) 364 + mfspr r3, SPRN_DAR 365 + mtspr SPRN_DAR, r11 /* Tag DAR */ 366 366 #endif 367 367 mfspr r10, SPRN_SPRG_SCRATCH2 368 368 EXCEPTION_EPILOG_0 369 369 rfi 370 370 2: 371 - mfspr r11, SPRN_SRR1 371 + mfspr r10, SPRN_SRR1 372 372 /* clear all error bits as TLB Miss 373 373 * sets a few unconditionally 374 374 */ 375 - rlwinm r11, r11, 0, 0xffff 376 - mtspr SPRN_SRR1, r11 375 + rlwinm r10, r10, 0, 0xffff 376 + mtspr SPRN_SRR1, r10 377 377 378 378 /* Restore registers */ 379 379 #ifdef CONFIG_8xx_CPU6 380 - lwz r3, 8(r0) 380 + mfspr r3, SPRN_DAR 381 + mtspr SPRN_DAR, r11 /* Tag DAR */ 381 382 #endif 382 383 mfspr r10, SPRN_SPRG_SCRATCH2 383 - EXCEPTION_EPILOG_0 384 - b InstructionAccess 384 + b InstructionTLBError1 385 385 386 386 . = 0x1200 387 387 DataStoreTLBMiss: 388 388 #ifdef CONFIG_8xx_CPU6 389 - stw r3, 8(r0) 389 + mtspr SPRN_DAR, r3 390 390 #endif 391 391 EXCEPTION_PROLOG_0 392 392 mtspr SPRN_SPRG_SCRATCH2, r10 393 - mfspr r10, SPRN_M_TWB /* Get level 1 table entry address */ 393 + mfspr r10, SPRN_MD_EPN 394 394 395 395 /* If we are faulting a kernel address, we have to use the 396 396 * kernel page tables. 397 397 */ 398 - andi. r11, r10, 0x0800 398 + andis. r11, r10, 0x8000 399 + mfspr r11, SPRN_M_TW /* Get level 1 table base address */ 399 400 beq 3f 400 - lis r11, swapper_pg_dir@h 401 - ori r11, r11, swapper_pg_dir@l 402 - rlwimi r10, r11, 0, 2, 19 401 + lis r11, (swapper_pg_dir-PAGE_OFFSET)@h 402 + ori r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l 403 403 3: 404 - lwz r11, 0(r10) /* Get the level 1 entry */ 404 + /* Extract level 1 index */ 405 + rlwinm r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29 406 + lwzx r11, r10, r11 /* Get the level 1 entry */ 405 407 rlwinm. r10, r11,0,0,19 /* Extract page descriptor page address */ 406 408 beq 2f /* If zero, don't try to find a pte */ 407 409 408 410 /* We have a pte table, so load fetch the pte from the table. 409 411 */ 410 - ori r11, r11, 1 /* Set valid bit in physical L2 page */ 411 - DO_8xx_CPU6(0x3b80, r3) 412 - mtspr SPRN_MD_TWC, r11 /* Load pte table base address */ 413 - mfspr r10, SPRN_MD_TWC /* ....and get the pte address */ 412 + mfspr r10, SPRN_MD_EPN /* Get address of fault */ 413 + /* Extract level 2 index */ 414 + rlwinm r10, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29 415 + rlwimi r10, r11, 0, 0, 32 - PAGE_SHIFT - 1 /* Add level 2 base */ 414 416 lwz r10, 0(r10) /* Get the pte */ 415 417 416 418 /* Insert the Guarded flag into the TWC from the Linux PTE. ··· 425 425 * It is bit 25 in the Linux PTE and bit 30 in the TWC 426 426 */ 427 427 rlwimi r11, r10, 32-5, 30, 30 428 - DO_8xx_CPU6(0x3b80, r3) 429 - mtspr SPRN_MD_TWC, r11 428 + MTSPR_CPU6(SPRN_MD_TWC, r11, r3) 430 429 431 430 /* Both _PAGE_ACCESSED and _PAGE_PRESENT has to be set. 432 431 * We also need to know if the insn is a load/store, so: ··· 441 442 and r11, r11, r10 442 443 rlwimi r10, r11, 0, _PAGE_PRESENT 443 444 #endif 444 - /* Honour kernel RO, User NA */ 445 - /* 0x200 == Extended encoding, bit 22 */ 446 - rlwimi r10, r10, 32-2, 0x200 /* Copy USER to bit 22, 0x200 */ 447 - /* r11 = (r10 & _PAGE_RW) >> 1 */ 448 - rlwinm r11, r10, 32-1, 0x200 449 - or r10, r11, r10 450 - /* invert RW and 0x200 bits */ 451 - xori r10, r10, _PAGE_RW | 0x200 445 + /* invert RW */ 446 + xori r10, r10, _PAGE_RW 452 447 453 448 /* The Linux PTE won't go exactly into the MMU TLB. 454 449 * Software indicator bits 22 and 28 must be clear. ··· 450 457 * set. All other Linux PTE bits control the behavior 451 458 * of the MMU. 452 459 */ 453 - 2: li r11, 0x00f0 460 + 2: li r11, RPN_PATTERN 454 461 rlwimi r10, r11, 0, 24, 28 /* Set 24-27, clear 28 */ 455 - DO_8xx_CPU6(0x3d80, r3) 456 - mtspr SPRN_MD_RPN, r10 /* Update TLB entry */ 462 + MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */ 457 463 458 464 /* Restore registers */ 459 465 #ifdef CONFIG_8xx_CPU6 460 - lwz r3, 8(r0) 466 + mfspr r3, SPRN_DAR 461 467 #endif 462 468 mtspr SPRN_DAR, r11 /* Tag DAR */ 463 469 mfspr r10, SPRN_SPRG_SCRATCH2 ··· 469 477 */ 470 478 . = 0x1300 471 479 InstructionTLBError: 472 - b InstructionAccess 480 + EXCEPTION_PROLOG_0 481 + InstructionTLBError1: 482 + EXCEPTION_PROLOG_1 483 + EXCEPTION_PROLOG_2 484 + mr r4,r12 485 + mr r5,r9 486 + andis. r10,r5,0x4000 487 + beq+ 1f 488 + tlbie r4 489 + /* 0x400 is InstructionAccess exception, needed by bad_page_fault() */ 490 + 1: EXC_XFER_LITE(0x400, handle_page_fault) 473 491 474 492 /* This is the data TLB error on the MPC8xx. This could be due to 475 493 * many reasons, including a dirty update to a pte. We bail out to ··· 490 488 EXCEPTION_PROLOG_0 491 489 492 490 mfspr r11, SPRN_DAR 493 - cmpwi cr0, r11, 0x00f0 491 + cmpwi cr0, r11, RPN_PATTERN 494 492 beq- FixupDAR /* must be a buggy dcbX, icbi insn. */ 495 493 DARFixed:/* Return from dcbx instruction bug workaround */ 496 - EXCEPTION_EPILOG_0 497 - b DataAccess 494 + EXCEPTION_PROLOG_1 495 + EXCEPTION_PROLOG_2 496 + mfspr r5,SPRN_DSISR 497 + stw r5,_DSISR(r11) 498 + mfspr r4,SPRN_DAR 499 + andis. r10,r5,0x4000 500 + beq+ 1f 501 + tlbie r4 502 + 1: li r10,RPN_PATTERN 503 + mtspr SPRN_DAR,r10 /* Tag DAR, to be used in DTLB Error */ 504 + /* 0x300 is DataAccess exception, needed by bad_page_fault() */ 505 + EXC_XFER_LITE(0x300, handle_page_fault) 498 506 499 507 EXCEPTION(0x1500, Trap_15, unknown_exception, EXC_XFER_EE) 500 508 EXCEPTION(0x1600, Trap_16, unknown_exception, EXC_XFER_EE) ··· 533 521 #define NO_SELF_MODIFYING_CODE 534 522 FixupDAR:/* Entry point for dcbx workaround. */ 535 523 #ifdef CONFIG_8xx_CPU6 536 - stw r3, 8(r0) 524 + mtspr SPRN_DAR, r3 537 525 #endif 538 526 mtspr SPRN_SPRG_SCRATCH2, r10 539 527 /* fetch instruction from memory. */ 540 528 mfspr r10, SPRN_SRR0 541 529 andis. r11, r10, 0x8000 /* Address >= 0x80000000 */ 542 - DO_8xx_CPU6(0x3780, r3) 543 - mtspr SPRN_MD_EPN, r10 544 - mfspr r11, SPRN_M_TWB /* Get level 1 table entry address */ 530 + mfspr r11, SPRN_M_TW /* Get level 1 table base address */ 545 531 beq- 3f /* Branch if user space */ 546 532 lis r11, (swapper_pg_dir-PAGE_OFFSET)@h 547 533 ori r11, r11, (swapper_pg_dir-PAGE_OFFSET)@l 548 - rlwimi r11, r10, 32-20, 0xffc /* r11 = r11&~0xffc|(r10>>20)&0xffc */ 549 - 3: lwz r11, 0(r11) /* Get the level 1 entry */ 550 - DO_8xx_CPU6(0x3b80, r3) 551 - mtspr SPRN_MD_TWC, r11 /* Load pte table base address */ 552 - mfspr r11, SPRN_MD_TWC /* ....and get the pte address */ 553 - lwz r11, 0(r11) /* Get the pte */ 534 + /* Extract level 1 index */ 535 + 3: rlwinm r10, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29 536 + lwzx r11, r10, r11 /* Get the level 1 entry */ 537 + rlwinm r10, r11,0,0,19 /* Extract page descriptor page address */ 538 + mfspr r11, SPRN_SRR0 /* Get effective address of fault */ 539 + /* Extract level 2 index */ 540 + rlwinm r11, r11, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29 541 + lwzx r11, r10, r11 /* Get the pte */ 554 542 #ifdef CONFIG_8xx_CPU6 555 - lwz r3, 8(r0) /* restore r3 from memory */ 543 + mfspr r3, SPRN_DAR 556 544 #endif 557 545 /* concat physical page address(r11) and page offset(r10) */ 558 - rlwimi r11, r10, 0, 20, 31 546 + mfspr r10, SPRN_SRR0 547 + rlwimi r11, r10, 0, 32 - PAGE_SHIFT, 31 559 548 lwz r11,0(r11) 560 549 /* Check if it really is a dcbx instruction. */ 561 550 /* dcbt and dcbtst does not generate DTLB Misses/Errors, ··· 711 698 #ifdef CONFIG_8xx_CPU6 712 699 lis r4, cpu6_errata_word@h 713 700 ori r4, r4, cpu6_errata_word@l 714 - li r3, 0x3980 701 + li r3, 0x3f80 715 702 stw r3, 12(r4) 716 703 lwz r3, 12(r4) 717 704 #endif 718 - mtspr SPRN_M_TWB, r6 705 + mtspr SPRN_M_TW, r6 719 706 lis r4,2f@h 720 707 ori r4,r4,2f@l 721 708 tophys(r4,r4) ··· 889 876 lis r6, cpu6_errata_word@h 890 877 ori r6, r6, cpu6_errata_word@l 891 878 tophys (r4, r4) 892 - li r7, 0x3980 879 + li r7, 0x3f80 893 880 stw r7, 12(r6) 894 881 lwz r7, 12(r6) 895 - mtspr SPRN_M_TWB, r4 /* Update MMU base address */ 882 + mtspr SPRN_M_TW, r4 /* Update MMU base address */ 896 883 li r7, 0x3380 897 884 stw r7, 12(r6) 898 885 lwz r7, 12(r6) ··· 900 887 #else 901 888 mtspr SPRN_M_CASID,r3 /* Update context */ 902 889 tophys (r4, r4) 903 - mtspr SPRN_M_TWB, r4 /* and pgd */ 890 + mtspr SPRN_M_TW, r4 /* and pgd */ 904 891 #endif 905 892 SYNC 906 893 blr ··· 932 919 .globl sdata 933 920 sdata: 934 921 .globl empty_zero_page 922 + .align PAGE_SHIFT 935 923 empty_zero_page: 936 - .space 4096 924 + .space PAGE_SIZE 937 925 938 926 .globl swapper_pg_dir 939 927 swapper_pg_dir: 940 - .space 4096 928 + .space PGD_TABLE_SIZE 941 929 942 930 /* Room for two PTE table poiners, usually the kernel and current user 943 931 * pointer to their respective root page table (pgdir).
-7
arch/powerpc/mm/fault.c
··· 43 43 #include <asm/tlbflush.h> 44 44 #include <asm/siginfo.h> 45 45 #include <asm/debug.h> 46 - #include <mm/mmu_decl.h> 47 46 48 47 #include "icswx.h" 49 48 ··· 379 380 goto bad_area; 380 381 #endif /* CONFIG_6xx */ 381 382 #if defined(CONFIG_8xx) 382 - /* 8xx sometimes need to load a invalid/non-present TLBs. 383 - * These must be invalidated separately as linux mm don't. 384 - */ 385 - if (error_code & 0x40000000) /* no translation? */ 386 - _tlbil_va(address, 0, 0, 0); 387 - 388 383 /* The MPC8xx seems to always set 0x80000000, which is 389 384 * "undefined". Of those that can be set, this is the only 390 385 * one which seems bad.
-4
arch/powerpc/platforms/8xx/Kconfig
··· 1 - config FADS 2 - bool 3 - 4 1 config CPM1 5 2 bool 6 3 select CPM ··· 10 13 11 14 config MPC8XXFADS 12 15 bool "FADS" 13 - select FADS 14 16 15 17 config MPC86XADS 16 18 bool "MPC86XADS"
+104
arch/powerpc/sysdev/fsl_rio.c
··· 58 58 #define RIO_ISR_AACR 0x10120 59 59 #define RIO_ISR_AACR_AA 0x1 /* Accept All ID */ 60 60 61 + #define RIWTAR_TRAD_VAL_SHIFT 12 62 + #define RIWTAR_TRAD_MASK 0x00FFFFFF 63 + #define RIWBAR_BADD_VAL_SHIFT 12 64 + #define RIWBAR_BADD_MASK 0x003FFFFF 65 + #define RIWAR_ENABLE 0x80000000 66 + #define RIWAR_TGINT_LOCAL 0x00F00000 67 + #define RIWAR_RDTYP_NO_SNOOP 0x00040000 68 + #define RIWAR_RDTYP_SNOOP 0x00050000 69 + #define RIWAR_WRTYP_NO_SNOOP 0x00004000 70 + #define RIWAR_WRTYP_SNOOP 0x00005000 71 + #define RIWAR_WRTYP_ALLOC 0x00006000 72 + #define RIWAR_SIZE_MASK 0x0000003F 73 + 61 74 #define __fsl_read_rio_config(x, addr, err, op) \ 62 75 __asm__ __volatile__( \ 63 76 "1: "op" %1,0(%2)\n" \ ··· 279 266 return 0; 280 267 } 281 268 269 + static void fsl_rio_inbound_mem_init(struct rio_priv *priv) 270 + { 271 + int i; 272 + 273 + /* close inbound windows */ 274 + for (i = 0; i < RIO_INB_ATMU_COUNT; i++) 275 + out_be32(&priv->inb_atmu_regs[i].riwar, 0); 276 + } 277 + 278 + int fsl_map_inb_mem(struct rio_mport *mport, dma_addr_t lstart, 279 + u64 rstart, u32 size, u32 flags) 280 + { 281 + struct rio_priv *priv = mport->priv; 282 + u32 base_size; 283 + unsigned int base_size_log; 284 + u64 win_start, win_end; 285 + u32 riwar; 286 + int i; 287 + 288 + if ((size & (size - 1)) != 0) 289 + return -EINVAL; 290 + 291 + base_size_log = ilog2(size); 292 + base_size = 1 << base_size_log; 293 + 294 + /* check if addresses are aligned with the window size */ 295 + if (lstart & (base_size - 1)) 296 + return -EINVAL; 297 + if (rstart & (base_size - 1)) 298 + return -EINVAL; 299 + 300 + /* check for conflicting ranges */ 301 + for (i = 0; i < RIO_INB_ATMU_COUNT; i++) { 302 + riwar = in_be32(&priv->inb_atmu_regs[i].riwar); 303 + if ((riwar & RIWAR_ENABLE) == 0) 304 + continue; 305 + win_start = ((u64)(in_be32(&priv->inb_atmu_regs[i].riwbar) & RIWBAR_BADD_MASK)) 306 + << RIWBAR_BADD_VAL_SHIFT; 307 + win_end = win_start + ((1 << ((riwar & RIWAR_SIZE_MASK) + 1)) - 1); 308 + if (rstart < win_end && (rstart + size) > win_start) 309 + return -EINVAL; 310 + } 311 + 312 + /* find unused atmu */ 313 + for (i = 0; i < RIO_INB_ATMU_COUNT; i++) { 314 + riwar = in_be32(&priv->inb_atmu_regs[i].riwar); 315 + if ((riwar & RIWAR_ENABLE) == 0) 316 + break; 317 + } 318 + if (i >= RIO_INB_ATMU_COUNT) 319 + return -ENOMEM; 320 + 321 + out_be32(&priv->inb_atmu_regs[i].riwtar, lstart >> RIWTAR_TRAD_VAL_SHIFT); 322 + out_be32(&priv->inb_atmu_regs[i].riwbar, rstart >> RIWBAR_BADD_VAL_SHIFT); 323 + out_be32(&priv->inb_atmu_regs[i].riwar, RIWAR_ENABLE | RIWAR_TGINT_LOCAL | 324 + RIWAR_RDTYP_SNOOP | RIWAR_WRTYP_SNOOP | (base_size_log - 1)); 325 + 326 + return 0; 327 + } 328 + 329 + void fsl_unmap_inb_mem(struct rio_mport *mport, dma_addr_t lstart) 330 + { 331 + u32 win_start_shift, base_start_shift; 332 + struct rio_priv *priv = mport->priv; 333 + u32 riwar, riwtar; 334 + int i; 335 + 336 + /* skip default window */ 337 + base_start_shift = lstart >> RIWTAR_TRAD_VAL_SHIFT; 338 + for (i = 0; i < RIO_INB_ATMU_COUNT; i++) { 339 + riwar = in_be32(&priv->inb_atmu_regs[i].riwar); 340 + if ((riwar & RIWAR_ENABLE) == 0) 341 + continue; 342 + 343 + riwtar = in_be32(&priv->inb_atmu_regs[i].riwtar); 344 + win_start_shift = riwtar & RIWTAR_TRAD_MASK; 345 + if (win_start_shift == base_start_shift) { 346 + out_be32(&priv->inb_atmu_regs[i].riwar, riwar & ~RIWAR_ENABLE); 347 + return; 348 + } 349 + } 350 + } 351 + 282 352 void fsl_rio_port_error_handler(int offset) 283 353 { 284 354 /*XXX: Error recovery is not implemented, we just clear errors */ ··· 485 389 ops->add_outb_message = fsl_add_outb_message; 486 390 ops->add_inb_buffer = fsl_add_inb_buffer; 487 391 ops->get_inb_message = fsl_get_inb_message; 392 + ops->map_inb = fsl_map_inb_mem; 393 + ops->unmap_inb = fsl_unmap_inb_mem; 488 394 489 395 rmu_node = of_parse_phandle(dev->dev.of_node, "fsl,srio-rmu-handle", 0); 490 396 if (!rmu_node) { ··· 700 602 RIO_ATMU_REGS_PORT2_OFFSET)); 701 603 702 604 priv->maint_atmu_regs = priv->atmu_regs + 1; 605 + priv->inb_atmu_regs = (struct rio_inb_atmu_regs __iomem *) 606 + (priv->regs_win + 607 + ((i == 0) ? RIO_INB_ATMU_REGS_PORT1_OFFSET : 608 + RIO_INB_ATMU_REGS_PORT2_OFFSET)); 609 + 703 610 704 611 /* Set to receive any dist ID for serial RapidIO controller. */ 705 612 if (port->phy_type == RIO_PHY_SERIAL) ··· 723 620 rio_law_start = range_start; 724 621 725 622 fsl_rio_setup_rmu(port, rmu_np[i]); 623 + fsl_rio_inbound_mem_init(priv); 726 624 727 625 dbell->mport[i] = port; 728 626
+13
arch/powerpc/sysdev/fsl_rio.h
··· 50 50 #define RIO_S_DBELL_REGS_OFFSET 0x13400 51 51 #define RIO_S_PW_REGS_OFFSET 0x134e0 52 52 #define RIO_ATMU_REGS_DBELL_OFFSET 0x10C40 53 + #define RIO_INB_ATMU_REGS_PORT1_OFFSET 0x10d60 54 + #define RIO_INB_ATMU_REGS_PORT2_OFFSET 0x10f60 53 55 54 56 #define MAX_MSG_UNIT_NUM 2 55 57 #define MAX_PORT_NUM 4 58 + #define RIO_INB_ATMU_COUNT 4 56 59 57 60 struct rio_atmu_regs { 58 61 u32 rowtar; ··· 64 61 u32 pad1; 65 62 u32 rowar; 66 63 u32 pad2[3]; 64 + }; 65 + 66 + struct rio_inb_atmu_regs { 67 + u32 riwtar; 68 + u32 pad1; 69 + u32 riwbar; 70 + u32 pad2; 71 + u32 riwar; 72 + u32 pad3[3]; 67 73 }; 68 74 69 75 struct rio_dbell_ring { ··· 111 99 void __iomem *regs_win; 112 100 struct rio_atmu_regs __iomem *atmu_regs; 113 101 struct rio_atmu_regs __iomem *maint_atmu_regs; 102 + struct rio_inb_atmu_regs __iomem *inb_atmu_regs; 114 103 void __iomem *maint_win; 115 104 void *rmm_handle; /* RapidIO message manager(unit) Handle */ 116 105 };