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 int qe_alive_during_sleep(void)
75 ret
= !of_find_compatible_node(NULL
, NULL
, "fsl,mpc8569-pmc");
79 EXPORT_SYMBOL(qe_alive_during_sleep
);
81 phys_addr_t
get_qe_base(void)
83 struct device_node
*qe
;
90 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
92 qe
= of_find_node_by_type(NULL
, "qe");
97 prop
= of_get_property(qe
, "reg", &size
);
98 if (prop
&& size
>= sizeof(*prop
))
99 qebase
= of_translate_address(qe
, prop
);
105 EXPORT_SYMBOL(get_qe_base
);
107 void __init
qe_reset(void)
110 qe_immr
= ioremap(get_qe_base(), QE_IMMAP_SIZE
);
114 qe_issue_cmd(QE_RESET
, QE_CR_SUBBLOCK_INVALID
,
115 QE_CR_PROTOCOL_UNSPECIFIED
, 0);
117 /* Reclaim the MURAM memory for our use. */
121 panic("sdma init failed!");
124 int qe_issue_cmd(u32 cmd
, u32 device
, u8 mcn_protocol
, u32 cmd_input
)
127 u8 mcn_shift
= 0, dev_shift
= 0;
130 spin_lock_irqsave(&qe_lock
, flags
);
131 if (cmd
== QE_RESET
) {
132 out_be32(&qe_immr
->cp
.cecr
, (u32
) (cmd
| QE_CR_FLG
));
134 if (cmd
== QE_ASSIGN_PAGE
) {
135 /* Here device is the SNUM, not sub-block */
136 dev_shift
= QE_CR_SNUM_SHIFT
;
137 } else if (cmd
== QE_ASSIGN_RISC
) {
138 /* Here device is the SNUM, and mcnProtocol is
139 * e_QeCmdRiscAssignment value */
140 dev_shift
= QE_CR_SNUM_SHIFT
;
141 mcn_shift
= QE_CR_MCN_RISC_ASSIGN_SHIFT
;
143 if (device
== QE_CR_SUBBLOCK_USB
)
144 mcn_shift
= QE_CR_MCN_USB_SHIFT
;
146 mcn_shift
= QE_CR_MCN_NORMAL_SHIFT
;
149 out_be32(&qe_immr
->cp
.cecdr
, cmd_input
);
150 out_be32(&qe_immr
->cp
.cecr
,
151 (cmd
| QE_CR_FLG
| ((u32
) device
<< dev_shift
) | (u32
)
152 mcn_protocol
<< mcn_shift
));
155 /* wait for the QE_CR_FLG to clear */
156 ret
= spin_event_timeout((in_be32(&qe_immr
->cp
.cecr
) & QE_CR_FLG
) == 0,
158 /* On timeout (e.g. failure), the expression will be false (ret == 0),
159 otherwise it will be true (ret == 1). */
160 spin_unlock_irqrestore(&qe_lock
, flags
);
164 EXPORT_SYMBOL(qe_issue_cmd
);
166 /* Set a baud rate generator. This needs lots of work. There are
167 * 16 BRGs, which can be connected to the QE channels or output
168 * as clocks. The BRGs are in two different block of internal
169 * memory mapped space.
170 * The BRG clock is the QE clock divided by 2.
171 * It was set up long ago during the initial boot phase and is
173 * Baud rate clocks are zero-based in the driver code (as that maps
174 * to port numbers). Documentation uses 1-based numbering.
176 static unsigned int brg_clk
= 0;
178 unsigned int qe_get_brg_clk(void)
180 struct device_node
*qe
;
187 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
189 qe
= of_find_node_by_type(NULL
, "qe");
194 prop
= of_get_property(qe
, "brg-frequency", &size
);
195 if (prop
&& size
== sizeof(*prop
))
202 EXPORT_SYMBOL(qe_get_brg_clk
);
204 /* Program the BRG to the given sampling rate and multiplier
206 * @brg: the BRG, QE_BRG1 - QE_BRG16
207 * @rate: the desired sampling rate
208 * @multiplier: corresponds to the value programmed in GUMR_L[RDCR] or
209 * GUMR_L[TDCR]. E.g., if this BRG is the RX clock, and GUMR_L[RDCR]=01,
210 * then 'multiplier' should be 8.
212 int qe_setbrg(enum qe_clock brg
, unsigned int rate
, unsigned int multiplier
)
214 u32 divisor
, tempval
;
217 if ((brg
< QE_BRG1
) || (brg
> QE_BRG16
))
220 divisor
= qe_get_brg_clk() / (rate
* multiplier
);
222 if (divisor
> QE_BRGC_DIVISOR_MAX
+ 1) {
223 div16
= QE_BRGC_DIV16
;
227 /* Errata QE_General4, which affects some MPC832x and MPC836x SOCs, says
228 that the BRG divisor must be even if you're not using divide-by-16
230 if (!div16
&& (divisor
& 1))
233 tempval
= ((divisor
- 1) << QE_BRGC_DIVISOR_SHIFT
) |
234 QE_BRGC_ENABLE
| div16
;
236 out_be32(&qe_immr
->brg
.brgc
[brg
- QE_BRG1
], tempval
);
240 EXPORT_SYMBOL(qe_setbrg
);
242 /* Convert a string to a QE clock source enum
244 * This function takes a string, typically from a property in the device
245 * tree, and returns the corresponding "enum qe_clock" value.
247 enum qe_clock
qe_clock_source(const char *source
)
251 if (strcasecmp(source
, "none") == 0)
254 if (strncasecmp(source
, "brg", 3) == 0) {
255 i
= simple_strtoul(source
+ 3, NULL
, 10);
256 if ((i
>= 1) && (i
<= 16))
257 return (QE_BRG1
- 1) + i
;
262 if (strncasecmp(source
, "clk", 3) == 0) {
263 i
= simple_strtoul(source
+ 3, NULL
, 10);
264 if ((i
>= 1) && (i
<= 24))
265 return (QE_CLK1
- 1) + i
;
272 EXPORT_SYMBOL(qe_clock_source
);
274 /* Initialize SNUMs (thread serial numbers) according to
275 * QE Module Control chapter, SNUM table
277 static void qe_snums_init(void)
280 static const u8 snum_init
[] = {
281 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D,
282 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89,
283 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9,
284 0xD8, 0xD9, 0xE8, 0xE9, 0x08, 0x09, 0x18, 0x19,
285 0x28, 0x29, 0x38, 0x39, 0x48, 0x49, 0x58, 0x59,
286 0x68, 0x69, 0x78, 0x79, 0x80, 0x81,
289 qe_num_of_snum
= qe_get_num_of_snums();
291 for (i
= 0; i
< qe_num_of_snum
; i
++) {
292 snums
[i
].num
= snum_init
[i
];
293 snums
[i
].state
= QE_SNUM_STATE_FREE
;
297 int qe_get_snum(void)
303 spin_lock_irqsave(&qe_lock
, flags
);
304 for (i
= 0; i
< qe_num_of_snum
; i
++) {
305 if (snums
[i
].state
== QE_SNUM_STATE_FREE
) {
306 snums
[i
].state
= QE_SNUM_STATE_USED
;
311 spin_unlock_irqrestore(&qe_lock
, flags
);
315 EXPORT_SYMBOL(qe_get_snum
);
317 void qe_put_snum(u8 snum
)
321 for (i
= 0; i
< qe_num_of_snum
; i
++) {
322 if (snums
[i
].num
== snum
) {
323 snums
[i
].state
= QE_SNUM_STATE_FREE
;
328 EXPORT_SYMBOL(qe_put_snum
);
330 static int qe_sdma_init(void)
332 struct sdma __iomem
*sdma
= &qe_immr
->sdma
;
333 unsigned long sdma_buf_offset
;
338 /* allocate 2 internal temporary buffers (512 bytes size each) for
340 sdma_buf_offset
= qe_muram_alloc(512 * 2, 4096);
341 if (IS_ERR_VALUE(sdma_buf_offset
))
344 out_be32(&sdma
->sdebcr
, (u32
) sdma_buf_offset
& QE_SDEBCR_BA_MASK
);
345 out_be32(&sdma
->sdmr
, (QE_SDMR_GLB_1_MSK
|
346 (0x1 << QE_SDMR_CEN_SHIFT
)));
351 /* The maximum number of RISCs we support */
352 #define MAX_QE_RISC 2
354 /* Firmware information stored here for qe_get_firmware_info() */
355 static struct qe_firmware_info qe_firmware_info
;
358 * Set to 1 if QE firmware has been uploaded, and therefore
359 * qe_firmware_info contains valid data.
361 static int qe_firmware_uploaded
;
364 * Upload a QE microcode
366 * This function is a worker function for qe_upload_firmware(). It does
367 * the actual uploading of the microcode.
369 static void qe_upload_microcode(const void *base
,
370 const struct qe_microcode
*ucode
)
372 const __be32
*code
= base
+ be32_to_cpu(ucode
->code_offset
);
375 if (ucode
->major
|| ucode
->minor
|| ucode
->revision
)
376 printk(KERN_INFO
"qe-firmware: "
377 "uploading microcode '%s' version %u.%u.%u\n",
378 ucode
->id
, ucode
->major
, ucode
->minor
, ucode
->revision
);
380 printk(KERN_INFO
"qe-firmware: "
381 "uploading microcode '%s'\n", ucode
->id
);
383 /* Use auto-increment */
384 out_be32(&qe_immr
->iram
.iadd
, be32_to_cpu(ucode
->iram_offset
) |
385 QE_IRAM_IADD_AIE
| QE_IRAM_IADD_BADDR
);
387 for (i
= 0; i
< be32_to_cpu(ucode
->count
); i
++)
388 out_be32(&qe_immr
->iram
.idata
, be32_to_cpu(code
[i
]));
392 * Upload a microcode to the I-RAM at a specific address.
394 * See Documentation/powerpc/qe-firmware.txt for information on QE microcode
397 * Currently, only version 1 is supported, so the 'version' field must be
400 * The SOC model and revision are not validated, they are only displayed for
401 * informational purposes.
403 * 'calc_size' is the calculated size, in bytes, of the firmware structure and
404 * all of the microcode structures, minus the CRC.
406 * 'length' is the size that the structure says it is, including the CRC.
408 int qe_upload_firmware(const struct qe_firmware
*firmware
)
413 size_t calc_size
= sizeof(struct qe_firmware
);
415 const struct qe_header
*hdr
;
418 printk(KERN_ERR
"qe-firmware: invalid pointer\n");
422 hdr
= &firmware
->header
;
423 length
= be32_to_cpu(hdr
->length
);
425 /* Check the magic */
426 if ((hdr
->magic
[0] != 'Q') || (hdr
->magic
[1] != 'E') ||
427 (hdr
->magic
[2] != 'F')) {
428 printk(KERN_ERR
"qe-firmware: not a microcode\n");
432 /* Check the version */
433 if (hdr
->version
!= 1) {
434 printk(KERN_ERR
"qe-firmware: unsupported version\n");
438 /* Validate some of the fields */
439 if ((firmware
->count
< 1) || (firmware
->count
> MAX_QE_RISC
)) {
440 printk(KERN_ERR
"qe-firmware: invalid data\n");
444 /* Validate the length and check if there's a CRC */
445 calc_size
+= (firmware
->count
- 1) * sizeof(struct qe_microcode
);
447 for (i
= 0; i
< firmware
->count
; i
++)
449 * For situations where the second RISC uses the same microcode
450 * as the first, the 'code_offset' and 'count' fields will be
451 * zero, so it's okay to add those.
453 calc_size
+= sizeof(__be32
) *
454 be32_to_cpu(firmware
->microcode
[i
].count
);
456 /* Validate the length */
457 if (length
!= calc_size
+ sizeof(__be32
)) {
458 printk(KERN_ERR
"qe-firmware: invalid length\n");
462 /* Validate the CRC */
463 crc
= be32_to_cpu(*(__be32
*)((void *)firmware
+ calc_size
));
464 if (crc
!= crc32(0, firmware
, calc_size
)) {
465 printk(KERN_ERR
"qe-firmware: firmware CRC is invalid\n");
470 * If the microcode calls for it, split the I-RAM.
472 if (!firmware
->split
)
473 setbits16(&qe_immr
->cp
.cercr
, QE_CP_CERCR_CIR
);
475 if (firmware
->soc
.model
)
477 "qe-firmware: firmware '%s' for %u V%u.%u\n",
478 firmware
->id
, be16_to_cpu(firmware
->soc
.model
),
479 firmware
->soc
.major
, firmware
->soc
.minor
);
481 printk(KERN_INFO
"qe-firmware: firmware '%s'\n",
485 * The QE only supports one microcode per RISC, so clear out all the
486 * saved microcode information and put in the new.
488 memset(&qe_firmware_info
, 0, sizeof(qe_firmware_info
));
489 strcpy(qe_firmware_info
.id
, firmware
->id
);
490 qe_firmware_info
.extended_modes
= firmware
->extended_modes
;
491 memcpy(qe_firmware_info
.vtraps
, firmware
->vtraps
,
492 sizeof(firmware
->vtraps
));
494 /* Loop through each microcode. */
495 for (i
= 0; i
< firmware
->count
; i
++) {
496 const struct qe_microcode
*ucode
= &firmware
->microcode
[i
];
498 /* Upload a microcode if it's present */
499 if (ucode
->code_offset
)
500 qe_upload_microcode(firmware
, ucode
);
502 /* Program the traps for this processor */
503 for (j
= 0; j
< 16; j
++) {
504 u32 trap
= be32_to_cpu(ucode
->traps
[j
]);
507 out_be32(&qe_immr
->rsp
[i
].tibcr
[j
], trap
);
511 out_be32(&qe_immr
->rsp
[i
].eccr
, be32_to_cpu(ucode
->eccr
));
514 qe_firmware_uploaded
= 1;
518 EXPORT_SYMBOL(qe_upload_firmware
);
521 * Get info on the currently-loaded firmware
523 * This function also checks the device tree to see if the boot loader has
524 * uploaded a firmware already.
526 struct qe_firmware_info
*qe_get_firmware_info(void)
528 static int initialized
;
529 struct property
*prop
;
530 struct device_node
*qe
;
531 struct device_node
*fw
= NULL
;
536 * If we haven't checked yet, and a driver hasn't uploaded a firmware
537 * yet, then check the device tree for information.
539 if (qe_firmware_uploaded
)
540 return &qe_firmware_info
;
548 * Newer device trees have an "fsl,qe" compatible property for the QE
549 * node, but we still need to support older device trees.
551 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
553 qe
= of_find_node_by_type(NULL
, "qe");
558 /* Find the 'firmware' child node */
559 for_each_child_of_node(qe
, fw
) {
560 if (strcmp(fw
->name
, "firmware") == 0)
566 /* Did we find the 'firmware' node? */
570 qe_firmware_uploaded
= 1;
572 /* Copy the data into qe_firmware_info*/
573 sprop
= of_get_property(fw
, "id", NULL
);
575 strncpy(qe_firmware_info
.id
, sprop
,
576 sizeof(qe_firmware_info
.id
) - 1);
578 prop
= of_find_property(fw
, "extended-modes", NULL
);
579 if (prop
&& (prop
->length
== sizeof(u64
))) {
580 const u64
*iprop
= prop
->value
;
582 qe_firmware_info
.extended_modes
= *iprop
;
585 prop
= of_find_property(fw
, "virtual-traps", NULL
);
586 if (prop
&& (prop
->length
== 32)) {
587 const u32
*iprop
= prop
->value
;
589 for (i
= 0; i
< ARRAY_SIZE(qe_firmware_info
.vtraps
); i
++)
590 qe_firmware_info
.vtraps
[i
] = iprop
[i
];
595 return &qe_firmware_info
;
597 EXPORT_SYMBOL(qe_get_firmware_info
);
599 unsigned int qe_get_num_of_risc(void)
601 struct device_node
*qe
;
603 unsigned int num_of_risc
= 0;
606 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
608 /* Older devices trees did not have an "fsl,qe"
609 * compatible property, so we need to look for
610 * the QE node by name.
612 qe
= of_find_node_by_type(NULL
, "qe");
617 prop
= of_get_property(qe
, "fsl,qe-num-riscs", &size
);
618 if (prop
&& size
== sizeof(*prop
))
625 EXPORT_SYMBOL(qe_get_num_of_risc
);
627 unsigned int qe_get_num_of_snums(void)
629 struct device_node
*qe
;
631 unsigned int num_of_snums
;
634 num_of_snums
= 28; /* The default number of snum for threads is 28 */
635 qe
= of_find_compatible_node(NULL
, NULL
, "fsl,qe");
637 /* Older devices trees did not have an "fsl,qe"
638 * compatible property, so we need to look for
639 * the QE node by name.
641 qe
= of_find_node_by_type(NULL
, "qe");
646 prop
= of_get_property(qe
, "fsl,qe-num-snums", &size
);
647 if (prop
&& size
== sizeof(*prop
)) {
648 num_of_snums
= *prop
;
649 if ((num_of_snums
< 28) || (num_of_snums
> QE_NUM_OF_SNUM
)) {
650 /* No QE ever has fewer than 28 SNUMs */
651 pr_err("QE: number of snum is invalid\n");
660 EXPORT_SYMBOL(qe_get_num_of_snums
);