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>
30 #include <linux/mod_devicetable.h>
31 #include <linux/of_platform.h>
34 #include <asm/pgtable.h>
35 #include <asm/immap_qe.h>
38 #include <asm/rheap.h>
40 static void qe_snums_init(void);
41 static int qe_sdma_init(void);
43 static DEFINE_SPINLOCK(qe_lock
);
44 DEFINE_SPINLOCK(cmxgcr_lock
);
45 EXPORT_SYMBOL(cmxgcr_lock
);
56 enum qe_snum_state state
;
59 /* We allocate this here because it is used almost exclusively for
60 * the communication processor devices.
62 struct qe_immap __iomem
*qe_immr
;
63 EXPORT_SYMBOL(qe_immr
);
65 static struct qe_snum snums
[QE_NUM_OF_SNUM
]; /* Dynamically allocated SNUMs */
66 static unsigned int qe_num_of_snum
;
68 static phys_addr_t qebase
= -1;
70 phys_addr_t
get_qe_base(void)
72 struct device_node
*qe
;
79 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
81 qe
= of_find_node_by_type(NULL
, "qe");
86 prop
= of_get_property(qe
, "reg", &size
);
87 if (prop
&& size
>= sizeof(*prop
))
88 qebase
= of_translate_address(qe
, prop
);
94 EXPORT_SYMBOL(get_qe_base
);
99 qe_immr
= ioremap(get_qe_base(), QE_IMMAP_SIZE
);
103 qe_issue_cmd(QE_RESET
, QE_CR_SUBBLOCK_INVALID
,
104 QE_CR_PROTOCOL_UNSPECIFIED
, 0);
106 /* Reclaim the MURAM memory for our use. */
110 panic("sdma init failed!");
113 int qe_issue_cmd(u32 cmd
, u32 device
, u8 mcn_protocol
, u32 cmd_input
)
116 u8 mcn_shift
= 0, dev_shift
= 0;
119 spin_lock_irqsave(&qe_lock
, flags
);
120 if (cmd
== QE_RESET
) {
121 out_be32(&qe_immr
->cp
.cecr
, (u32
) (cmd
| QE_CR_FLG
));
123 if (cmd
== QE_ASSIGN_PAGE
) {
124 /* Here device is the SNUM, not sub-block */
125 dev_shift
= QE_CR_SNUM_SHIFT
;
126 } else if (cmd
== QE_ASSIGN_RISC
) {
127 /* Here device is the SNUM, and mcnProtocol is
128 * e_QeCmdRiscAssignment value */
129 dev_shift
= QE_CR_SNUM_SHIFT
;
130 mcn_shift
= QE_CR_MCN_RISC_ASSIGN_SHIFT
;
132 if (device
== QE_CR_SUBBLOCK_USB
)
133 mcn_shift
= QE_CR_MCN_USB_SHIFT
;
135 mcn_shift
= QE_CR_MCN_NORMAL_SHIFT
;
138 out_be32(&qe_immr
->cp
.cecdr
, cmd_input
);
139 out_be32(&qe_immr
->cp
.cecr
,
140 (cmd
| QE_CR_FLG
| ((u32
) device
<< dev_shift
) | (u32
)
141 mcn_protocol
<< mcn_shift
));
144 /* wait for the QE_CR_FLG to clear */
145 ret
= spin_event_timeout((in_be32(&qe_immr
->cp
.cecr
) & QE_CR_FLG
) == 0,
147 /* On timeout (e.g. failure), the expression will be false (ret == 0),
148 otherwise it will be true (ret == 1). */
149 spin_unlock_irqrestore(&qe_lock
, flags
);
153 EXPORT_SYMBOL(qe_issue_cmd
);
155 /* Set a baud rate generator. This needs lots of work. There are
156 * 16 BRGs, which can be connected to the QE channels or output
157 * as clocks. The BRGs are in two different block of internal
158 * memory mapped space.
159 * The BRG clock is the QE clock divided by 2.
160 * It was set up long ago during the initial boot phase and is
162 * Baud rate clocks are zero-based in the driver code (as that maps
163 * to port numbers). Documentation uses 1-based numbering.
165 static unsigned int brg_clk
= 0;
167 unsigned int qe_get_brg_clk(void)
169 struct device_node
*qe
;
176 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
178 qe
= of_find_node_by_type(NULL
, "qe");
183 prop
= of_get_property(qe
, "brg-frequency", &size
);
184 if (prop
&& size
== sizeof(*prop
))
191 EXPORT_SYMBOL(qe_get_brg_clk
);
193 /* Program the BRG to the given sampling rate and multiplier
195 * @brg: the BRG, QE_BRG1 - QE_BRG16
196 * @rate: the desired sampling rate
197 * @multiplier: corresponds to the value programmed in GUMR_L[RDCR] or
198 * GUMR_L[TDCR]. E.g., if this BRG is the RX clock, and GUMR_L[RDCR]=01,
199 * then 'multiplier' should be 8.
201 int qe_setbrg(enum qe_clock brg
, unsigned int rate
, unsigned int multiplier
)
203 u32 divisor
, tempval
;
206 if ((brg
< QE_BRG1
) || (brg
> QE_BRG16
))
209 divisor
= qe_get_brg_clk() / (rate
* multiplier
);
211 if (divisor
> QE_BRGC_DIVISOR_MAX
+ 1) {
212 div16
= QE_BRGC_DIV16
;
216 /* Errata QE_General4, which affects some MPC832x and MPC836x SOCs, says
217 that the BRG divisor must be even if you're not using divide-by-16
219 if (!div16
&& (divisor
& 1))
222 tempval
= ((divisor
- 1) << QE_BRGC_DIVISOR_SHIFT
) |
223 QE_BRGC_ENABLE
| div16
;
225 out_be32(&qe_immr
->brg
.brgc
[brg
- QE_BRG1
], tempval
);
229 EXPORT_SYMBOL(qe_setbrg
);
231 /* Convert a string to a QE clock source enum
233 * This function takes a string, typically from a property in the device
234 * tree, and returns the corresponding "enum qe_clock" value.
236 enum qe_clock
qe_clock_source(const char *source
)
240 if (strcasecmp(source
, "none") == 0)
243 if (strncasecmp(source
, "brg", 3) == 0) {
244 i
= simple_strtoul(source
+ 3, NULL
, 10);
245 if ((i
>= 1) && (i
<= 16))
246 return (QE_BRG1
- 1) + i
;
251 if (strncasecmp(source
, "clk", 3) == 0) {
252 i
= simple_strtoul(source
+ 3, NULL
, 10);
253 if ((i
>= 1) && (i
<= 24))
254 return (QE_CLK1
- 1) + i
;
261 EXPORT_SYMBOL(qe_clock_source
);
263 /* Initialize SNUMs (thread serial numbers) according to
264 * QE Module Control chapter, SNUM table
266 static void qe_snums_init(void)
269 static const u8 snum_init
[] = {
270 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D,
271 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89,
272 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9,
273 0xD8, 0xD9, 0xE8, 0xE9, 0x08, 0x09, 0x18, 0x19,
274 0x28, 0x29, 0x38, 0x39, 0x48, 0x49, 0x58, 0x59,
275 0x68, 0x69, 0x78, 0x79, 0x80, 0x81,
278 qe_num_of_snum
= qe_get_num_of_snums();
280 for (i
= 0; i
< qe_num_of_snum
; i
++) {
281 snums
[i
].num
= snum_init
[i
];
282 snums
[i
].state
= QE_SNUM_STATE_FREE
;
286 int qe_get_snum(void)
292 spin_lock_irqsave(&qe_lock
, flags
);
293 for (i
= 0; i
< qe_num_of_snum
; i
++) {
294 if (snums
[i
].state
== QE_SNUM_STATE_FREE
) {
295 snums
[i
].state
= QE_SNUM_STATE_USED
;
300 spin_unlock_irqrestore(&qe_lock
, flags
);
304 EXPORT_SYMBOL(qe_get_snum
);
306 void qe_put_snum(u8 snum
)
310 for (i
= 0; i
< qe_num_of_snum
; i
++) {
311 if (snums
[i
].num
== snum
) {
312 snums
[i
].state
= QE_SNUM_STATE_FREE
;
317 EXPORT_SYMBOL(qe_put_snum
);
319 static int qe_sdma_init(void)
321 struct sdma __iomem
*sdma
= &qe_immr
->sdma
;
322 static unsigned long sdma_buf_offset
= (unsigned long)-ENOMEM
;
327 /* allocate 2 internal temporary buffers (512 bytes size each) for
329 if (IS_ERR_VALUE(sdma_buf_offset
)) {
330 sdma_buf_offset
= qe_muram_alloc(512 * 2, 4096);
331 if (IS_ERR_VALUE(sdma_buf_offset
))
335 out_be32(&sdma
->sdebcr
, (u32
) sdma_buf_offset
& QE_SDEBCR_BA_MASK
);
336 out_be32(&sdma
->sdmr
, (QE_SDMR_GLB_1_MSK
|
337 (0x1 << QE_SDMR_CEN_SHIFT
)));
342 /* The maximum number of RISCs we support */
343 #define MAX_QE_RISC 4
345 /* Firmware information stored here for qe_get_firmware_info() */
346 static struct qe_firmware_info qe_firmware_info
;
349 * Set to 1 if QE firmware has been uploaded, and therefore
350 * qe_firmware_info contains valid data.
352 static int qe_firmware_uploaded
;
355 * Upload a QE microcode
357 * This function is a worker function for qe_upload_firmware(). It does
358 * the actual uploading of the microcode.
360 static void qe_upload_microcode(const void *base
,
361 const struct qe_microcode
*ucode
)
363 const __be32
*code
= base
+ be32_to_cpu(ucode
->code_offset
);
366 if (ucode
->major
|| ucode
->minor
|| ucode
->revision
)
367 printk(KERN_INFO
"qe-firmware: "
368 "uploading microcode '%s' version %u.%u.%u\n",
369 ucode
->id
, ucode
->major
, ucode
->minor
, ucode
->revision
);
371 printk(KERN_INFO
"qe-firmware: "
372 "uploading microcode '%s'\n", ucode
->id
);
374 /* Use auto-increment */
375 out_be32(&qe_immr
->iram
.iadd
, be32_to_cpu(ucode
->iram_offset
) |
376 QE_IRAM_IADD_AIE
| QE_IRAM_IADD_BADDR
);
378 for (i
= 0; i
< be32_to_cpu(ucode
->count
); i
++)
379 out_be32(&qe_immr
->iram
.idata
, be32_to_cpu(code
[i
]));
383 * Upload a microcode to the I-RAM at a specific address.
385 * See Documentation/powerpc/qe-firmware.txt for information on QE microcode
388 * Currently, only version 1 is supported, so the 'version' field must be
391 * The SOC model and revision are not validated, they are only displayed for
392 * informational purposes.
394 * 'calc_size' is the calculated size, in bytes, of the firmware structure and
395 * all of the microcode structures, minus the CRC.
397 * 'length' is the size that the structure says it is, including the CRC.
399 int qe_upload_firmware(const struct qe_firmware
*firmware
)
404 size_t calc_size
= sizeof(struct qe_firmware
);
406 const struct qe_header
*hdr
;
409 printk(KERN_ERR
"qe-firmware: invalid pointer\n");
413 hdr
= &firmware
->header
;
414 length
= be32_to_cpu(hdr
->length
);
416 /* Check the magic */
417 if ((hdr
->magic
[0] != 'Q') || (hdr
->magic
[1] != 'E') ||
418 (hdr
->magic
[2] != 'F')) {
419 printk(KERN_ERR
"qe-firmware: not a microcode\n");
423 /* Check the version */
424 if (hdr
->version
!= 1) {
425 printk(KERN_ERR
"qe-firmware: unsupported version\n");
429 /* Validate some of the fields */
430 if ((firmware
->count
< 1) || (firmware
->count
> MAX_QE_RISC
)) {
431 printk(KERN_ERR
"qe-firmware: invalid data\n");
435 /* Validate the length and check if there's a CRC */
436 calc_size
+= (firmware
->count
- 1) * sizeof(struct qe_microcode
);
438 for (i
= 0; i
< firmware
->count
; i
++)
440 * For situations where the second RISC uses the same microcode
441 * as the first, the 'code_offset' and 'count' fields will be
442 * zero, so it's okay to add those.
444 calc_size
+= sizeof(__be32
) *
445 be32_to_cpu(firmware
->microcode
[i
].count
);
447 /* Validate the length */
448 if (length
!= calc_size
+ sizeof(__be32
)) {
449 printk(KERN_ERR
"qe-firmware: invalid length\n");
453 /* Validate the CRC */
454 crc
= be32_to_cpu(*(__be32
*)((void *)firmware
+ calc_size
));
455 if (crc
!= crc32(0, firmware
, calc_size
)) {
456 printk(KERN_ERR
"qe-firmware: firmware CRC is invalid\n");
461 * If the microcode calls for it, split the I-RAM.
463 if (!firmware
->split
)
464 setbits16(&qe_immr
->cp
.cercr
, QE_CP_CERCR_CIR
);
466 if (firmware
->soc
.model
)
468 "qe-firmware: firmware '%s' for %u V%u.%u\n",
469 firmware
->id
, be16_to_cpu(firmware
->soc
.model
),
470 firmware
->soc
.major
, firmware
->soc
.minor
);
472 printk(KERN_INFO
"qe-firmware: firmware '%s'\n",
476 * The QE only supports one microcode per RISC, so clear out all the
477 * saved microcode information and put in the new.
479 memset(&qe_firmware_info
, 0, sizeof(qe_firmware_info
));
480 strcpy(qe_firmware_info
.id
, firmware
->id
);
481 qe_firmware_info
.extended_modes
= firmware
->extended_modes
;
482 memcpy(qe_firmware_info
.vtraps
, firmware
->vtraps
,
483 sizeof(firmware
->vtraps
));
485 /* Loop through each microcode. */
486 for (i
= 0; i
< firmware
->count
; i
++) {
487 const struct qe_microcode
*ucode
= &firmware
->microcode
[i
];
489 /* Upload a microcode if it's present */
490 if (ucode
->code_offset
)
491 qe_upload_microcode(firmware
, ucode
);
493 /* Program the traps for this processor */
494 for (j
= 0; j
< 16; j
++) {
495 u32 trap
= be32_to_cpu(ucode
->traps
[j
]);
498 out_be32(&qe_immr
->rsp
[i
].tibcr
[j
], trap
);
502 out_be32(&qe_immr
->rsp
[i
].eccr
, be32_to_cpu(ucode
->eccr
));
505 qe_firmware_uploaded
= 1;
509 EXPORT_SYMBOL(qe_upload_firmware
);
512 * Get info on the currently-loaded firmware
514 * This function also checks the device tree to see if the boot loader has
515 * uploaded a firmware already.
517 struct qe_firmware_info
*qe_get_firmware_info(void)
519 static int initialized
;
520 struct property
*prop
;
521 struct device_node
*qe
;
522 struct device_node
*fw
= NULL
;
527 * If we haven't checked yet, and a driver hasn't uploaded a firmware
528 * yet, then check the device tree for information.
530 if (qe_firmware_uploaded
)
531 return &qe_firmware_info
;
539 * Newer device trees have an "fsl,qe" compatible property for the QE
540 * node, but we still need to support older device trees.
542 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
544 qe
= of_find_node_by_type(NULL
, "qe");
549 /* Find the 'firmware' child node */
550 for_each_child_of_node(qe
, fw
) {
551 if (strcmp(fw
->name
, "firmware") == 0)
557 /* Did we find the 'firmware' node? */
561 qe_firmware_uploaded
= 1;
563 /* Copy the data into qe_firmware_info*/
564 sprop
= of_get_property(fw
, "id", NULL
);
566 strncpy(qe_firmware_info
.id
, sprop
,
567 sizeof(qe_firmware_info
.id
) - 1);
569 prop
= of_find_property(fw
, "extended-modes", NULL
);
570 if (prop
&& (prop
->length
== sizeof(u64
))) {
571 const u64
*iprop
= prop
->value
;
573 qe_firmware_info
.extended_modes
= *iprop
;
576 prop
= of_find_property(fw
, "virtual-traps", NULL
);
577 if (prop
&& (prop
->length
== 32)) {
578 const u32
*iprop
= prop
->value
;
580 for (i
= 0; i
< ARRAY_SIZE(qe_firmware_info
.vtraps
); i
++)
581 qe_firmware_info
.vtraps
[i
] = iprop
[i
];
586 return &qe_firmware_info
;
588 EXPORT_SYMBOL(qe_get_firmware_info
);
590 unsigned int qe_get_num_of_risc(void)
592 struct device_node
*qe
;
594 unsigned int num_of_risc
= 0;
597 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
599 /* Older devices trees did not have an "fsl,qe"
600 * compatible property, so we need to look for
601 * the QE node by name.
603 qe
= of_find_node_by_type(NULL
, "qe");
608 prop
= of_get_property(qe
, "fsl,qe-num-riscs", &size
);
609 if (prop
&& size
== sizeof(*prop
))
616 EXPORT_SYMBOL(qe_get_num_of_risc
);
618 unsigned int qe_get_num_of_snums(void)
620 struct device_node
*qe
;
622 unsigned int num_of_snums
;
625 num_of_snums
= 28; /* The default number of snum for threads is 28 */
626 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
628 /* Older devices trees did not have an "fsl,qe"
629 * compatible property, so we need to look for
630 * the QE node by name.
632 qe
= of_find_node_by_type(NULL
, "qe");
637 prop
= of_get_property(qe
, "fsl,qe-num-snums", &size
);
638 if (prop
&& size
== sizeof(*prop
)) {
639 num_of_snums
= *prop
;
640 if ((num_of_snums
< 28) || (num_of_snums
> QE_NUM_OF_SNUM
)) {
641 /* No QE ever has fewer than 28 SNUMs */
642 pr_err("QE: number of snum is invalid\n");
652 EXPORT_SYMBOL(qe_get_num_of_snums
);
654 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC_85xx)
655 static int qe_resume(struct platform_device
*ofdev
)
657 if (!qe_alive_during_sleep())
662 static int qe_probe(struct platform_device
*ofdev
,
663 const struct of_device_id
*id
)
668 static const struct of_device_id qe_ids
[] = {
669 { .compatible
= "fsl,qe", },
673 static struct of_platform_driver qe_driver
= {
676 .owner
= THIS_MODULE
,
677 .of_match_table
= qe_ids
,
683 static int __init
qe_drv_init(void)
685 return of_register_platform_driver(&qe_driver
);
687 device_initcall(qe_drv_init
);
688 #endif /* defined(CONFIG_SUSPEND) && defined(CONFIG_PPC_85xx) */