aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2008-01-23 23:29:14 -0500
committerPaul Mackerras <paulus@samba.org>2008-01-23 23:29:14 -0500
commitdcb571be2019ae677bc5ed64437dbc87ae1eb67f (patch)
tree1b93f9ea3568be4dcc49ffb2adc0d3ab0a02b47f /Documentation
parent9156ad48338e0306e508ead5c0d9986050744475 (diff)
parent96f39c1718091d63dc1c5012d566737ea0d2a20c (diff)
Merge branch 'for-2.6.25' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc into for-2.6.25
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/powerpc/00-INDEX3
-rw-r--r--Documentation/powerpc/booting-without-of.txt91
-rw-r--r--Documentation/powerpc/qe_firmware.txt295
3 files changed, 382 insertions, 7 deletions
diff --git a/Documentation/powerpc/00-INDEX b/Documentation/powerpc/00-INDEX
index 94a3c577b083..3be84aa38dfe 100644
--- a/Documentation/powerpc/00-INDEX
+++ b/Documentation/powerpc/00-INDEX
@@ -28,3 +28,6 @@ sound.txt
28 - info on sound support under Linux/PPC 28 - info on sound support under Linux/PPC
29zImage_layout.txt 29zImage_layout.txt
30 - info on the kernel images for Linux/PPC 30 - info on the kernel images for Linux/PPC
31qe_firmware.txt
32 - describes the layout of firmware binaries for the Freescale QUICC
33 Engine and the code that parses and uploads the microcode therein.
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
index 6d1d0856063e..da98154328a0 100644
--- a/Documentation/powerpc/booting-without-of.txt
+++ b/Documentation/powerpc/booting-without-of.txt
@@ -52,7 +52,11 @@ Table of Contents
52 i) Freescale QUICC Engine module (QE) 52 i) Freescale QUICC Engine module (QE)
53 j) CFI or JEDEC memory-mapped NOR flash 53 j) CFI or JEDEC memory-mapped NOR flash
54 k) Global Utilities Block 54 k) Global Utilities Block
55 l) Xilinx IP cores 55 l) Freescale Communications Processor Module
56 m) Chipselect/Local Bus
57 n) 4xx/Axon EMAC ethernet nodes
58 o) Xilinx IP cores
59 p) Freescale Synchronous Serial Interface
56 60
57 VII - Specifying interrupt information for devices 61 VII - Specifying interrupt information for devices
58 1) interrupts property 62 1) interrupts property
@@ -1257,6 +1261,10 @@ platforms are moved over to use the flattened-device-tree model.
1257 services interrupts for this device. 1261 services interrupts for this device.
1258 - phy-handle : The phandle for the PHY connected to this ethernet 1262 - phy-handle : The phandle for the PHY connected to this ethernet
1259 controller. 1263 controller.
1264 - fixed-link : <a b c d e> where a is emulated phy id - choose any,
1265 but unique to the all specified fixed-links, b is duplex - 0 half,
1266 1 full, c is link speed - d#10/d#100/d#1000, d is pause - 0 no
1267 pause, 1 pause, e is asym_pause - 0 no asym_pause, 1 asym_pause.
1260 1268
1261 Recommended properties: 1269 Recommended properties:
1262 1270
@@ -1411,7 +1419,6 @@ platforms are moved over to use the flattened-device-tree model.
1411 1419
1412 Example multi port host USB controller device node : 1420 Example multi port host USB controller device node :
1413 usb@22000 { 1421 usb@22000 {
1414 device_type = "usb";
1415 compatible = "fsl-usb2-mph"; 1422 compatible = "fsl-usb2-mph";
1416 reg = <22000 1000>; 1423 reg = <22000 1000>;
1417 #address-cells = <1>; 1424 #address-cells = <1>;
@@ -1425,7 +1432,6 @@ platforms are moved over to use the flattened-device-tree model.
1425 1432
1426 Example dual role USB controller device node : 1433 Example dual role USB controller device node :
1427 usb@23000 { 1434 usb@23000 {
1428 device_type = "usb";
1429 compatible = "fsl-usb2-dr"; 1435 compatible = "fsl-usb2-dr";
1430 reg = <23000 1000>; 1436 reg = <23000 1000>;
1431 #address-cells = <1>; 1437 #address-cells = <1>;
@@ -1589,7 +1595,6 @@ platforms are moved over to use the flattened-device-tree model.
1589 iii) USB (Universal Serial Bus Controller) 1595 iii) USB (Universal Serial Bus Controller)
1590 1596
1591 Required properties: 1597 Required properties:
1592 - device_type : should be "usb".
1593 - compatible : could be "qe_udc" or "fhci-hcd". 1598 - compatible : could be "qe_udc" or "fhci-hcd".
1594 - mode : the could be "host" or "slave". 1599 - mode : the could be "host" or "slave".
1595 - reg : Offset and length of the register set for the device 1600 - reg : Offset and length of the register set for the device
@@ -1603,7 +1608,6 @@ platforms are moved over to use the flattened-device-tree model.
1603 1608
1604 Example(slave): 1609 Example(slave):
1605 usb@6c0 { 1610 usb@6c0 {
1606 device_type = "usb";
1607 compatible = "qe_udc"; 1611 compatible = "qe_udc";
1608 reg = <6c0 40>; 1612 reg = <6c0 40>;
1609 interrupts = <8b 0>; 1613 interrupts = <8b 0>;
@@ -1616,7 +1620,7 @@ platforms are moved over to use the flattened-device-tree model.
1616 1620
1617 Required properties: 1621 Required properties:
1618 - device_type : should be "network", "hldc", "uart", "transparent" 1622 - device_type : should be "network", "hldc", "uart", "transparent"
1619 "bisync" or "atm". 1623 "bisync", "atm", or "serial".
1620 - compatible : could be "ucc_geth" or "fsl_atm" and so on. 1624 - compatible : could be "ucc_geth" or "fsl_atm" and so on.
1621 - model : should be "UCC". 1625 - model : should be "UCC".
1622 - device-id : the ucc number(1-8), corresponding to UCCx in UM. 1626 - device-id : the ucc number(1-8), corresponding to UCCx in UM.
@@ -1629,6 +1633,13 @@ platforms are moved over to use the flattened-device-tree model.
1629 - interrupt-parent : the phandle for the interrupt controller that 1633 - interrupt-parent : the phandle for the interrupt controller that
1630 services interrupts for this device. 1634 services interrupts for this device.
1631 - pio-handle : The phandle for the Parallel I/O port configuration. 1635 - pio-handle : The phandle for the Parallel I/O port configuration.
1636 - port-number : for UART drivers, the port number to use, between 0 and 3.
1637 This usually corresponds to the /dev/ttyQE device, e.g. <0> = /dev/ttyQE0.
1638 The port number is added to the minor number of the device. Unlike the
1639 CPM UART driver, the port-number is required for the QE UART driver.
1640 - soft-uart : for UART drivers, if specified this means the QE UART device
1641 driver should use "Soft-UART" mode, which is needed on some SOCs that have
1642 broken UART hardware. Soft-UART is provided via a microcode upload.
1632 - rx-clock-name: the UCC receive clock source 1643 - rx-clock-name: the UCC receive clock source
1633 "none": clock source is disabled 1644 "none": clock source is disabled
1634 "brg1" through "brg16": clock source is BRG1-BRG16, respectively 1645 "brg1" through "brg16": clock source is BRG1-BRG16, respectively
@@ -1788,6 +1799,32 @@ platforms are moved over to use the flattened-device-tree model.
1788 }; 1799 };
1789 }; 1800 };
1790 1801
1802 viii) Uploaded QE firmware
1803
1804 If a new firwmare has been uploaded to the QE (usually by the
1805 boot loader), then a 'firmware' child node should be added to the QE
1806 node. This node provides information on the uploaded firmware that
1807 device drivers may need.
1808
1809 Required properties:
1810 - id: The string name of the firmware. This is taken from the 'id'
1811 member of the qe_firmware structure of the uploaded firmware.
1812 Device drivers can search this string to determine if the
1813 firmware they want is already present.
1814 - extended-modes: The Extended Modes bitfield, taken from the
1815 firmware binary. It is a 64-bit number represented
1816 as an array of two 32-bit numbers.
1817 - virtual-traps: The virtual traps, taken from the firmware binary.
1818 It is an array of 8 32-bit numbers.
1819
1820 Example:
1821
1822 firmware {
1823 id = "Soft-UART";
1824 extended-modes = <0 0>;
1825 virtual-traps = <0 0 0 0 0 0 0 0>;
1826 }
1827
1791 j) CFI or JEDEC memory-mapped NOR flash 1828 j) CFI or JEDEC memory-mapped NOR flash
1792 1829
1793 Flash chips (Memory Technology Devices) are often used for solid state 1830 Flash chips (Memory Technology Devices) are often used for solid state
@@ -2269,7 +2306,7 @@ platforms are moved over to use the flattened-device-tree model.
2269 available. 2306 available.
2270 For Axon: 0x0000012a 2307 For Axon: 0x0000012a
2271 2308
2272 l) Xilinx IP cores 2309 o) Xilinx IP cores
2273 2310
2274 The Xilinx EDK toolchain ships with a set of IP cores (devices) for use 2311 The Xilinx EDK toolchain ships with a set of IP cores (devices) for use
2275 in Xilinx Spartan and Virtex FPGAs. The devices cover the whole range 2312 in Xilinx Spartan and Virtex FPGAs. The devices cover the whole range
@@ -2539,6 +2576,46 @@ platforms are moved over to use the flattened-device-tree model.
2539 Requred properties: 2576 Requred properties:
2540 - current-speed : Baud rate of uartlite 2577 - current-speed : Baud rate of uartlite
2541 2578
2579 p) Freescale Synchronous Serial Interface
2580
2581 The SSI is a serial device that communicates with audio codecs. It can
2582 be programmed in AC97, I2S, left-justified, or right-justified modes.
2583
2584 Required properties:
2585 - compatible : compatible list, containing "fsl,ssi"
2586 - cell-index : the SSI, <0> = SSI1, <1> = SSI2, and so on
2587 - reg : offset and length of the register set for the device
2588 - interrupts : <a b> where a is the interrupt number and b is a
2589 field that represents an encoding of the sense and
2590 level information for the interrupt. This should be
2591 encoded based on the information in section 2)
2592 depending on the type of interrupt controller you
2593 have.
2594 - interrupt-parent : the phandle for the interrupt controller that
2595 services interrupts for this device.
2596 - fsl,mode : the operating mode for the SSI interface
2597 "i2s-slave" - I2S mode, SSI is clock slave
2598 "i2s-master" - I2S mode, SSI is clock master
2599 "lj-slave" - left-justified mode, SSI is clock slave
2600 "lj-master" - l.j. mode, SSI is clock master
2601 "rj-slave" - right-justified mode, SSI is clock slave
2602 "rj-master" - r.j., SSI is clock master
2603 "ac97-slave" - AC97 mode, SSI is clock slave
2604 "ac97-master" - AC97 mode, SSI is clock master
2605
2606 Optional properties:
2607 - codec-handle : phandle to a 'codec' node that defines an audio
2608 codec connected to this SSI. This node is typically
2609 a child of an I2C or other control node.
2610
2611 Child 'codec' node required properties:
2612 - compatible : compatible list, contains the name of the codec
2613
2614 Child 'codec' node optional properties:
2615 - clock-frequency : The frequency of the input clock, which typically
2616 comes from an on-board dedicated oscillator.
2617
2618
2542 More devices will be defined as this spec matures. 2619 More devices will be defined as this spec matures.
2543 2620
2544VII - Specifying interrupt information for devices 2621VII - Specifying interrupt information for devices
diff --git a/Documentation/powerpc/qe_firmware.txt b/Documentation/powerpc/qe_firmware.txt
new file mode 100644
index 000000000000..896266432d33
--- /dev/null
+++ b/Documentation/powerpc/qe_firmware.txt
@@ -0,0 +1,295 @@
1 Freescale QUICC Engine Firmware Uploading
2 -----------------------------------------
3
4(c) 2007 Timur Tabi <timur at freescale.com>,
5 Freescale Semiconductor
6
7Table of Contents
8=================
9
10 I - Software License for Firmware
11
12 II - Microcode Availability
13
14 III - Description and Terminology
15
16 IV - Microcode Programming Details
17
18 V - Firmware Structure Layout
19
20 VI - Sample Code for Creating Firmware Files
21
22Revision Information
23====================
24
25November 30, 2007: Rev 1.0 - Initial version
26
27I - Software License for Firmware
28=================================
29
30Each firmware file comes with its own software license. For information on
31the particular license, please see the license text that is distributed with
32the firmware.
33
34II - Microcode Availability
35===========================
36
37Firmware files are distributed through various channels. Some are available on
38http://opensource.freescale.com. For other firmware files, please contact
39your Freescale representative or your operating system vendor.
40
41III - Description and Terminology
42================================
43
44In this document, the term 'microcode' refers to the sequence of 32-bit
45integers that compose the actual QE microcode.
46
47The term 'firmware' refers to a binary blob that contains the microcode as
48well as other data that
49
50 1) describes the microcode's purpose
51 2) describes how and where to upload the microcode
52 3) specifies the values of various registers
53 4) includes additional data for use by specific device drivers
54
55Firmware files are binary files that contain only a firmware.
56
57IV - Microcode Programming Details
58===================================
59
60The QE architecture allows for only one microcode present in I-RAM for each
61RISC processor. To replace any current microcode, a full QE reset (which
62disables the microcode) must be performed first.
63
64QE microcode is uploaded using the following procedure:
65
661) The microcode is placed into I-RAM at a specific location, using the
67 IRAM.IADD and IRAM.IDATA registers.
68
692) The CERCR.CIR bit is set to 0 or 1, depending on whether the firmware
70 needs split I-RAM. Split I-RAM is only meaningful for SOCs that have
71 QEs with multiple RISC processors, such as the 8360. Splitting the I-RAM
72 allows each processor to run a different microcode, effectively creating an
73 asymmetric multiprocessing (AMP) system.
74
753) The TIBCR trap registers are loaded with the addresses of the trap handlers
76 in the microcode.
77
784) The RSP.ECCR register is programmed with the value provided.
79
805) If necessary, device drivers that need the virtual traps and extended mode
81 data will use them.
82
83Virtual Microcode Traps
84
85These virtual traps are conditional branches in the microcode. These are
86"soft" provisional introduced in the ROMcode in order to enable higher
87flexibility and save h/w traps If new features are activated or an issue is
88being fixed in the RAM package utilizing they should be activated. This data
89structure signals the microcode which of these virtual traps is active.
90
91This structure contains 6 words that the application should copy to some
92specific been defined. This table describes the structure.
93
94 ---------------------------------------------------------------
95 | Offset in | | Destination Offset | Size of |
96 | array | Protocol | within PRAM | Operand |
97 --------------------------------------------------------------|
98 | 0 | Ethernet | 0xF8 | 4 bytes |
99 | | interworking | | |
100 ---------------------------------------------------------------
101 | 4 | ATM | 0xF8 | 4 bytes |
102 | | interworking | | |
103 ---------------------------------------------------------------
104 | 8 | PPP | 0xF8 | 4 bytes |
105 | | interworking | | |
106 ---------------------------------------------------------------
107 | 12 | Ethernet RX | 0x22 | 1 byte |
108 | | Distributor Page | | |
109 ---------------------------------------------------------------
110 | 16 | ATM Globtal | 0x28 | 1 byte |
111 | | Params Table | | |
112 ---------------------------------------------------------------
113 | 20 | Insert Frame | 0xF8 | 4 bytes |
114 ---------------------------------------------------------------
115
116
117Extended Modes
118
119This is a double word bit array (64 bits) that defines special functionality
120which has an impact on the softwarew drivers. Each bit has its own impact
121and has special instructions for the s/w associated with it. This structure is
122described in this table:
123
124 -----------------------------------------------------------------------
125 | Bit # | Name | Description |
126 -----------------------------------------------------------------------
127 | 0 | General | Indicates that prior to each host command |
128 | | push command | given by the application, the software must |
129 | | | assert a special host command (push command)|
130 | | | CECDR = 0x00800000. |
131 | | | CECR = 0x01c1000f. |
132 -----------------------------------------------------------------------
133 | 1 | UCC ATM | Indicates that after issuing ATM RX INIT |
134 | | RX INIT | command, the host must issue another special|
135 | | push command | command (push command) and immediately |
136 | | | following that re-issue the ATM RX INIT |
137 | | | command. (This makes the sequence of |
138 | | | initializing the ATM receiver a sequence of |
139 | | | three host commands) |
140 | | | CECDR = 0x00800000. |
141 | | | CECR = 0x01c1000f. |
142 -----------------------------------------------------------------------
143 | 2 | Add/remove | Indicates that following the specific host |
144 | | command | command: "Add/Remove entry in Hash Lookup |
145 | | validation | Table" used in Interworking setup, the user |
146 | | | must issue another command. |
147 | | | CECDR = 0xce000003. |
148 | | | CECR = 0x01c10f58. |
149 -----------------------------------------------------------------------
150 | 3 | General push | Indicates that the s/w has to initialize |
151 | | command | some pointers in the Ethernet thread pages |
152 | | | which are used when Header Compression is |
153 | | | activated. The full details of these |
154 | | | pointers is located in the software drivers.|
155 -----------------------------------------------------------------------
156 | 4 | General push | Indicates that after issuing Ethernet TX |
157 | | command | INIT command, user must issue this command |
158 | | | for each SNUM of Ethernet TX thread. |
159 | | | CECDR = 0x00800003. |
160 | | | CECR = 0x7'b{0}, 8'b{Enet TX thread SNUM}, |
161 | | | 1'b{1}, 12'b{0}, 4'b{1} |
162 -----------------------------------------------------------------------
163 | 5 - 31 | N/A | Reserved, set to zero. |
164 -----------------------------------------------------------------------
165
166V - Firmware Structure Layout
167==============================
168
169QE microcode from Freescale is typically provided as a header file. This
170header file contains macros that define the microcode binary itself as well as
171some other data used in uploading that microcode. The format of these files
172do not lend themselves to simple inclusion into other code. Hence,
173the need for a more portable format. This section defines that format.
174
175Instead of distributing a header file, the microcode and related data are
176embedded into a binary blob. This blob is passed to the qe_upload_firmware()
177function, which parses the blob and performs everything necessary to upload
178the microcode.
179
180All integers are big-endian. See the comments for function
181qe_upload_firmware() for up-to-date implementation information.
182
183This structure supports versioning, where the version of the structure is
184embedded into the structure itself. To ensure forward and backwards
185compatibility, all versions of the structure must use the same 'qe_header'
186structure at the beginning.
187
188'header' (type: struct qe_header):
189 The 'length' field is the size, in bytes, of the entire structure,
190 including all the microcode embedded in it, as well as the CRC (if
191 present).
192
193 The 'magic' field is an array of three bytes that contains the letters
194 'Q', 'E', and 'F'. This is an identifier that indicates that this
195 structure is a QE Firmware structure.
196
197 The 'version' field is a single byte that indicates the version of this
198 structure. If the layout of the structure should ever need to be
199 changed to add support for additional types of microcode, then the
200 version number should also be changed.
201
202The 'id' field is a null-terminated string(suitable for printing) that
203identifies the firmware.
204
205The 'count' field indicates the number of 'microcode' structures. There
206must be one and only one 'microcode' structure for each RISC processor.
207Therefore, this field also represents the number of RISC processors for this
208SOC.
209
210The 'soc' structure contains the SOC numbers and revisions used to match
211the microcode to the SOC itself. Normally, the microcode loader should
212check the data in this structure with the SOC number and revisions, and
213only upload the microcode if there's a match. However, this check is not
214made on all platforms.
215
216Although it is not recommended, you can specify '0' in the soc.model
217field to skip matching SOCs altogether.
218
219The 'model' field is a 16-bit number that matches the actual SOC. The
220'major' and 'minor' fields are the major and minor revision numbrs,
221respectively, of the SOC.
222
223For example, to match the 8323, revision 1.0:
224 soc.model = 8323
225 soc.major = 1
226 soc.minor = 0
227
228'padding' is neccessary for structure alignment. This field ensures that the
229'extended_modes' field is aligned on a 64-bit boundary.
230
231'extended_modes' is a bitfield that defines special functionality which has an
232impact on the device drivers. Each bit has its own impact and has special
233instructions for the driver associated with it. This field is stored in
234the QE library and available to any driver that calles qe_get_firmware_info().
235
236'vtraps' is an array of 8 words that contain virtual trap values for each
237virtual traps. As with 'extended_modes', this field is stored in the QE
238library and available to any driver that calles qe_get_firmware_info().
239
240'microcode' (type: struct qe_microcode):
241 For each RISC processor there is one 'microcode' structure. The first
242 'microcode' structure is for the first RISC, and so on.
243
244 The 'id' field is a null-terminated string suitable for printing that
245 identifies this particular microcode.
246
247 'traps' is an array of 16 words that contain hardware trap values
248 for each of the 16 traps. If trap[i] is 0, then this particular
249 trap is to be ignored (i.e. not written to TIBCR[i]). The entire value
250 is written as-is to the TIBCR[i] register, so be sure to set the EN
251 and T_IBP bits if necessary.
252
253 'eccr' is the value to program into the ECCR register.
254
255 'iram_offset' is the offset into IRAM to start writing the
256 microcode.
257
258 'count' is the number of 32-bit words in the microcode.
259
260 'code_offset' is the offset, in bytes, from the beginning of this
261 structure where the microcode itself can be found. The first
262 microcode binary should be located immediately after the 'microcode'
263 array.
264
265 'major', 'minor', and 'revision' are the major, minor, and revision
266 version numbers, respectively, of the microcode. If all values are 0,
267 then these fields are ignored.
268
269 'reserved' is necessary for structure alignment. Since 'microcode'
270 is an array, the 64-bit 'extended_modes' field needs to be aligned
271 on a 64-bit boundary, and this can only happen if the size of
272 'microcode' is a multiple of 8 bytes. To ensure that, we add
273 'reserved'.
274
275After the last microcode is a 32-bit CRC. It can be calculated using
276this algorithm:
277
278u32 crc32(const u8 *p, unsigned int len)
279{
280 unsigned int i;
281 u32 crc = 0;
282
283 while (len--) {
284 crc ^= *p++;
285 for (i = 0; i < 8; i++)
286 crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
287 }
288 return crc;
289}
290
291VI - Sample Code for Creating Firmware Files
292============================================
293
294A Python program that creates firmware binaries from the header files normally
295distributed by Freescale can be found on http://opensource.freescale.com.