2 * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved.
4 * Authors: Shlomi Gridish <gridish@freescale.com>
5 * Li Yang <leoli@freescale.com>
6 * Based on cpm2_common.c from Dan Malek (dmalek@jlc.net)
9 * General Purpose functions for the global management of the
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version.
17 #include <linux/errno.h>
18 #include <linux/sched.h>
19 #include <linux/kernel.h>
20 #include <linux/param.h>
21 #include <linux/string.h>
22 #include <linux/spinlock.h>
24 #include <linux/interrupt.h>
25 #include <linux/bootmem.h>
26 #include <linux/module.h>
27 #include <linux/delay.h>
28 #include <linux/ioport.h>
29 #include <linux/crc32.h>
32 #include <asm/pgtable.h>
33 #include <asm/immap_qe.h>
36 #include <asm/rheap.h>
38 static void qe_snums_init(void);
39 static int qe_sdma_init(void);
41 static DEFINE_SPINLOCK(qe_lock);
42 DEFINE_SPINLOCK(cmxgcr_lock);
43 EXPORT_SYMBOL(cmxgcr_lock);
54 enum qe_snum_state state;
57 /* We allocate this here because it is used almost exclusively for
58 * the communication processor devices.
60 struct qe_immap __iomem *qe_immr;
61 EXPORT_SYMBOL(qe_immr);
63 static struct qe_snum snums[QE_NUM_OF_SNUM]; /* Dynamically allocated SNUMs */
64 static unsigned int qe_num_of_snum;
66 static phys_addr_t qebase = -1;
68 phys_addr_t get_qe_base(void)
70 struct device_node *qe;
77 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
79 qe = of_find_node_by_type(NULL, "qe");
84 prop = of_get_property(qe, "reg", &size);
85 if (prop && size >= sizeof(*prop))
86 qebase = of_translate_address(qe, prop);
92 EXPORT_SYMBOL(get_qe_base);
94 void __init qe_reset(void)
97 qe_immr = ioremap(get_qe_base(), QE_IMMAP_SIZE);
101 qe_issue_cmd(QE_RESET, QE_CR_SUBBLOCK_INVALID,
102 QE_CR_PROTOCOL_UNSPECIFIED, 0);
104 /* Reclaim the MURAM memory for our use. */
108 panic("sdma init failed!");
111 int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input)
114 u8 mcn_shift = 0, dev_shift = 0;
116 spin_lock_irqsave(&qe_lock, flags);
117 if (cmd == QE_RESET) {
118 out_be32(&qe_immr->cp.cecr, (u32) (cmd | QE_CR_FLG));
120 if (cmd == QE_ASSIGN_PAGE) {
121 /* Here device is the SNUM, not sub-block */
122 dev_shift = QE_CR_SNUM_SHIFT;
123 } else if (cmd == QE_ASSIGN_RISC) {
124 /* Here device is the SNUM, and mcnProtocol is
125 * e_QeCmdRiscAssignment value */
126 dev_shift = QE_CR_SNUM_SHIFT;
127 mcn_shift = QE_CR_MCN_RISC_ASSIGN_SHIFT;
129 if (device == QE_CR_SUBBLOCK_USB)
130 mcn_shift = QE_CR_MCN_USB_SHIFT;
132 mcn_shift = QE_CR_MCN_NORMAL_SHIFT;
135 out_be32(&qe_immr->cp.cecdr, cmd_input);
136 out_be32(&qe_immr->cp.cecr,
137 (cmd | QE_CR_FLG | ((u32) device << dev_shift) | (u32)
138 mcn_protocol << mcn_shift));
141 /* wait for the QE_CR_FLG to clear */
142 while(in_be32(&qe_immr->cp.cecr) & QE_CR_FLG)
144 spin_unlock_irqrestore(&qe_lock, flags);
148 EXPORT_SYMBOL(qe_issue_cmd);
150 /* Set a baud rate generator. This needs lots of work. There are
151 * 16 BRGs, which can be connected to the QE channels or output
152 * as clocks. The BRGs are in two different block of internal
153 * memory mapped space.
154 * The BRG clock is the QE clock divided by 2.
155 * It was set up long ago during the initial boot phase and is
157 * Baud rate clocks are zero-based in the driver code (as that maps
158 * to port numbers). Documentation uses 1-based numbering.
160 static unsigned int brg_clk = 0;
162 unsigned int qe_get_brg_clk(void)
164 struct device_node *qe;
171 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
173 qe = of_find_node_by_type(NULL, "qe");
178 prop = of_get_property(qe, "brg-frequency", &size);
179 if (prop && size == sizeof(*prop))
186 EXPORT_SYMBOL(qe_get_brg_clk);
188 /* Program the BRG to the given sampling rate and multiplier
190 * @brg: the BRG, QE_BRG1 - QE_BRG16
191 * @rate: the desired sampling rate
192 * @multiplier: corresponds to the value programmed in GUMR_L[RDCR] or
193 * GUMR_L[TDCR]. E.g., if this BRG is the RX clock, and GUMR_L[RDCR]=01,
194 * then 'multiplier' should be 8.
196 int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier)
198 u32 divisor, tempval;
201 if ((brg < QE_BRG1) || (brg > QE_BRG16))
204 divisor = qe_get_brg_clk() / (rate * multiplier);
206 if (divisor > QE_BRGC_DIVISOR_MAX + 1) {
207 div16 = QE_BRGC_DIV16;
211 /* Errata QE_General4, which affects some MPC832x and MPC836x SOCs, says
212 that the BRG divisor must be even if you're not using divide-by-16
214 if (!div16 && (divisor & 1))
217 tempval = ((divisor - 1) << QE_BRGC_DIVISOR_SHIFT) |
218 QE_BRGC_ENABLE | div16;
220 out_be32(&qe_immr->brg.brgc[brg - QE_BRG1], tempval);
224 EXPORT_SYMBOL(qe_setbrg);
226 /* Convert a string to a QE clock source enum
228 * This function takes a string, typically from a property in the device
229 * tree, and returns the corresponding "enum qe_clock" value.
231 enum qe_clock qe_clock_source(const char *source)
235 if (strcasecmp(source, "none") == 0)
238 if (strncasecmp(source, "brg", 3) == 0) {
239 i = simple_strtoul(source + 3, NULL, 10);
240 if ((i >= 1) && (i <= 16))
241 return (QE_BRG1 - 1) + i;
246 if (strncasecmp(source, "clk", 3) == 0) {
247 i = simple_strtoul(source + 3, NULL, 10);
248 if ((i >= 1) && (i <= 24))
249 return (QE_CLK1 - 1) + i;
256 EXPORT_SYMBOL(qe_clock_source);
258 /* Initialize SNUMs (thread serial numbers) according to
259 * QE Module Control chapter, SNUM table
261 static void qe_snums_init(void)
264 static const u8 snum_init[] = {
265 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D,
266 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89,
267 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9,
268 0xD8, 0xD9, 0xE8, 0xE9, 0x08, 0x09, 0x18, 0x19,
269 0x28, 0x29, 0x38, 0x39, 0x48, 0x49, 0x58, 0x59,
270 0x68, 0x69, 0x78, 0x79, 0x80, 0x81,
273 qe_num_of_snum = qe_get_num_of_snums();
275 for (i = 0; i < qe_num_of_snum; i++) {
276 snums[i].num = snum_init[i];
277 snums[i].state = QE_SNUM_STATE_FREE;
281 int qe_get_snum(void)
287 spin_lock_irqsave(&qe_lock, flags);
288 for (i = 0; i < qe_num_of_snum; i++) {
289 if (snums[i].state == QE_SNUM_STATE_FREE) {
290 snums[i].state = QE_SNUM_STATE_USED;
295 spin_unlock_irqrestore(&qe_lock, flags);
299 EXPORT_SYMBOL(qe_get_snum);
301 void qe_put_snum(u8 snum)
305 for (i = 0; i < qe_num_of_snum; i++) {
306 if (snums[i].num == snum) {
307 snums[i].state = QE_SNUM_STATE_FREE;
312 EXPORT_SYMBOL(qe_put_snum);
314 static int qe_sdma_init(void)
316 struct sdma __iomem *sdma = &qe_immr->sdma;
317 unsigned long sdma_buf_offset;
322 /* allocate 2 internal temporary buffers (512 bytes size each) for
324 sdma_buf_offset = qe_muram_alloc(512 * 2, 4096);
325 if (IS_ERR_VALUE(sdma_buf_offset))
328 out_be32(&sdma->sdebcr, (u32) sdma_buf_offset & QE_SDEBCR_BA_MASK);
329 out_be32(&sdma->sdmr, (QE_SDMR_GLB_1_MSK |
330 (0x1 << QE_SDMR_CEN_SHIFT)));
335 /* The maximum number of RISCs we support */
336 #define MAX_QE_RISC 2
338 /* Firmware information stored here for qe_get_firmware_info() */
339 static struct qe_firmware_info qe_firmware_info;
342 * Set to 1 if QE firmware has been uploaded, and therefore
343 * qe_firmware_info contains valid data.
345 static int qe_firmware_uploaded;
348 * Upload a QE microcode
350 * This function is a worker function for qe_upload_firmware(). It does
351 * the actual uploading of the microcode.
353 static void qe_upload_microcode(const void *base,
354 const struct qe_microcode *ucode)
356 const __be32 *code = base + be32_to_cpu(ucode->code_offset);
359 if (ucode->major || ucode->minor || ucode->revision)
360 printk(KERN_INFO "qe-firmware: "
361 "uploading microcode '%s' version %u.%u.%u\n",
362 ucode->id, ucode->major, ucode->minor, ucode->revision);
364 printk(KERN_INFO "qe-firmware: "
365 "uploading microcode '%s'\n", ucode->id);
367 /* Use auto-increment */
368 out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) |
369 QE_IRAM_IADD_AIE | QE_IRAM_IADD_BADDR);
371 for (i = 0; i < be32_to_cpu(ucode->count); i++)
372 out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i]));
376 * Upload a microcode to the I-RAM at a specific address.
378 * See Documentation/powerpc/qe-firmware.txt for information on QE microcode
381 * Currently, only version 1 is supported, so the 'version' field must be
384 * The SOC model and revision are not validated, they are only displayed for
385 * informational purposes.
387 * 'calc_size' is the calculated size, in bytes, of the firmware structure and
388 * all of the microcode structures, minus the CRC.
390 * 'length' is the size that the structure says it is, including the CRC.
392 int qe_upload_firmware(const struct qe_firmware *firmware)
397 size_t calc_size = sizeof(struct qe_firmware);
399 const struct qe_header *hdr;
402 printk(KERN_ERR "qe-firmware: invalid pointer\n");
406 hdr = &firmware->header;
407 length = be32_to_cpu(hdr->length);
409 /* Check the magic */
410 if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') ||
411 (hdr->magic[2] != 'F')) {
412 printk(KERN_ERR "qe-firmware: not a microcode\n");
416 /* Check the version */
417 if (hdr->version != 1) {
418 printk(KERN_ERR "qe-firmware: unsupported version\n");
422 /* Validate some of the fields */
423 if ((firmware->count < 1) || (firmware->count > MAX_QE_RISC)) {
424 printk(KERN_ERR "qe-firmware: invalid data\n");
428 /* Validate the length and check if there's a CRC */
429 calc_size += (firmware->count - 1) * sizeof(struct qe_microcode);
431 for (i = 0; i < firmware->count; i++)
433 * For situations where the second RISC uses the same microcode
434 * as the first, the 'code_offset' and 'count' fields will be
435 * zero, so it's okay to add those.
437 calc_size += sizeof(__be32) *
438 be32_to_cpu(firmware->microcode[i].count);
440 /* Validate the length */
441 if (length != calc_size + sizeof(__be32)) {
442 printk(KERN_ERR "qe-firmware: invalid length\n");
446 /* Validate the CRC */
447 crc = be32_to_cpu(*(__be32 *)((void *)firmware + calc_size));
448 if (crc != crc32(0, firmware, calc_size)) {
449 printk(KERN_ERR "qe-firmware: firmware CRC is invalid\n");
454 * If the microcode calls for it, split the I-RAM.
456 if (!firmware->split)
457 setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR);
459 if (firmware->soc.model)
461 "qe-firmware: firmware '%s' for %u V%u.%u\n",
462 firmware->id, be16_to_cpu(firmware->soc.model),
463 firmware->soc.major, firmware->soc.minor);
465 printk(KERN_INFO "qe-firmware: firmware '%s'\n",
469 * The QE only supports one microcode per RISC, so clear out all the
470 * saved microcode information and put in the new.
472 memset(&qe_firmware_info, 0, sizeof(qe_firmware_info));
473 strcpy(qe_firmware_info.id, firmware->id);
474 qe_firmware_info.extended_modes = firmware->extended_modes;
475 memcpy(qe_firmware_info.vtraps, firmware->vtraps,
476 sizeof(firmware->vtraps));
478 /* Loop through each microcode. */
479 for (i = 0; i < firmware->count; i++) {
480 const struct qe_microcode *ucode = &firmware->microcode[i];
482 /* Upload a microcode if it's present */
483 if (ucode->code_offset)
484 qe_upload_microcode(firmware, ucode);
486 /* Program the traps for this processor */
487 for (j = 0; j < 16; j++) {
488 u32 trap = be32_to_cpu(ucode->traps[j]);
491 out_be32(&qe_immr->rsp[i].tibcr[j], trap);
495 out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr));
498 qe_firmware_uploaded = 1;
502 EXPORT_SYMBOL(qe_upload_firmware);
505 * Get info on the currently-loaded firmware
507 * This function also checks the device tree to see if the boot loader has
508 * uploaded a firmware already.
510 struct qe_firmware_info *qe_get_firmware_info(void)
512 static int initialized;
513 struct property *prop;
514 struct device_node *qe;
515 struct device_node *fw = NULL;
520 * If we haven't checked yet, and a driver hasn't uploaded a firmware
521 * yet, then check the device tree for information.
523 if (qe_firmware_uploaded)
524 return &qe_firmware_info;
532 * Newer device trees have an "fsl,qe" compatible property for the QE
533 * node, but we still need to support older device trees.
535 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
537 qe = of_find_node_by_type(NULL, "qe");
542 /* Find the 'firmware' child node */
543 for_each_child_of_node(qe, fw) {
544 if (strcmp(fw->name, "firmware") == 0)
550 /* Did we find the 'firmware' node? */
554 qe_firmware_uploaded = 1;
556 /* Copy the data into qe_firmware_info*/
557 sprop = of_get_property(fw, "id", NULL);
559 strncpy(qe_firmware_info.id, sprop,
560 sizeof(qe_firmware_info.id) - 1);
562 prop = of_find_property(fw, "extended-modes", NULL);
563 if (prop && (prop->length == sizeof(u64))) {
564 const u64 *iprop = prop->value;
566 qe_firmware_info.extended_modes = *iprop;
569 prop = of_find_property(fw, "virtual-traps", NULL);
570 if (prop && (prop->length == 32)) {
571 const u32 *iprop = prop->value;
573 for (i = 0; i < ARRAY_SIZE(qe_firmware_info.vtraps); i++)
574 qe_firmware_info.vtraps[i] = iprop[i];
579 return &qe_firmware_info;
581 EXPORT_SYMBOL(qe_get_firmware_info);
583 unsigned int qe_get_num_of_risc(void)
585 struct device_node *qe;
587 unsigned int num_of_risc = 0;
590 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
592 /* Older devices trees did not have an "fsl,qe"
593 * compatible property, so we need to look for
594 * the QE node by name.
596 qe = of_find_node_by_type(NULL, "qe");
601 prop = of_get_property(qe, "fsl,qe-num-riscs", &size);
602 if (prop && size == sizeof(*prop))
609 EXPORT_SYMBOL(qe_get_num_of_risc);
611 unsigned int qe_get_num_of_snums(void)
613 struct device_node *qe;
615 unsigned int num_of_snums;
618 num_of_snums = 28; /* The default number of snum for threads is 28 */
619 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
621 /* Older devices trees did not have an "fsl,qe"
622 * compatible property, so we need to look for
623 * the QE node by name.
625 qe = of_find_node_by_type(NULL, "qe");
630 prop = of_get_property(qe, "fsl,qe-num-snums", &size);
631 if (prop && size == sizeof(*prop)) {
632 num_of_snums = *prop;
633 if ((num_of_snums < 28) || (num_of_snums > QE_NUM_OF_SNUM)) {
634 /* No QE ever has fewer than 28 SNUMs */
635 pr_err("QE: number of snum is invalid\n");
644 EXPORT_SYMBOL(qe_get_num_of_snums);