1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (C) 2006-2010 Freescale Semiconductor, Inc. All rights reserved. 4 * 5 * Authors: Shlomi Gridish <gridish@freescale.com> 6 * Li Yang <leoli@freescale.com> 7 * Based on cpm2_common.c from Dan Malek (dmalek@jlc.net) 8 * 9 * Description: 10 * General Purpose functions for the global management of the 11 * QUICC Engine (QE). 12 */ 13 #include <linux/errno.h> 14 #include <linux/sched.h> 15 #include <linux/kernel.h> 16 #include <linux/param.h> 17 #include <linux/string.h> 18 #include <linux/spinlock.h> 19 #include <linux/mm.h> 20 #include <linux/interrupt.h> 21 #include <linux/module.h> 22 #include <linux/delay.h> 23 #include <linux/ioport.h> 24 #include <linux/crc32.h> 25 #include <linux/mod_devicetable.h> 26 #include <linux/of_platform.h> 27 #include <asm/irq.h> 28 #include <asm/page.h> 29 #include <asm/pgtable.h> 30 #include <soc/fsl/qe/immap_qe.h> 31 #include <soc/fsl/qe/qe.h> 32 #include <asm/prom.h> 33 #include <asm/rheap.h> 34 35 static void qe_snums_init(void); 36 static int qe_sdma_init(void); 37 38 static DEFINE_SPINLOCK(qe_lock); 39 DEFINE_SPINLOCK(cmxgcr_lock); 40 EXPORT_SYMBOL(cmxgcr_lock); 41 42 /* QE snum state */ 43 enum qe_snum_state { 44 QE_SNUM_STATE_USED, 45 QE_SNUM_STATE_FREE 46 }; 47 48 /* QE snum */ 49 struct qe_snum { 50 u8 num; 51 enum qe_snum_state state; 52 }; 53 54 /* We allocate this here because it is used almost exclusively for 55 * the communication processor devices. 56 */ 57 struct qe_immap __iomem *qe_immr; 58 EXPORT_SYMBOL(qe_immr); 59 60 static struct qe_snum snums[QE_NUM_OF_SNUM]; /* Dynamically allocated SNUMs */ 61 static unsigned int qe_num_of_snum; 62 63 static phys_addr_t qebase = -1; 64 65 static phys_addr_t get_qe_base(void) 66 { 67 struct device_node *qe; 68 int ret; 69 struct resource res; 70 71 if (qebase != -1) 72 return qebase; 73 74 qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 75 if (!qe) { 76 qe = of_find_node_by_type(NULL, "qe"); 77 if (!qe) 78 return qebase; 79 } 80 81 ret = of_address_to_resource(qe, 0, &res); 82 if (!ret) 83 qebase = res.start; 84 of_node_put(qe); 85 86 return qebase; 87 } 88 89 void qe_reset(void) 90 { 91 if (qe_immr == NULL) 92 qe_immr = ioremap(get_qe_base(), QE_IMMAP_SIZE); 93 94 qe_snums_init(); 95 96 qe_issue_cmd(QE_RESET, QE_CR_SUBBLOCK_INVALID, 97 QE_CR_PROTOCOL_UNSPECIFIED, 0); 98 99 /* Reclaim the MURAM memory for our use. */ 100 qe_muram_init(); 101 102 if (qe_sdma_init()) 103 panic("sdma init failed!"); 104 } 105 106 int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input) 107 { 108 unsigned long flags; 109 u8 mcn_shift = 0, dev_shift = 0; 110 u32 ret; 111 112 spin_lock_irqsave(&qe_lock, flags); 113 if (cmd == QE_RESET) { 114 out_be32(&qe_immr->cp.cecr, (u32) (cmd | QE_CR_FLG)); 115 } else { 116 if (cmd == QE_ASSIGN_PAGE) { 117 /* Here device is the SNUM, not sub-block */ 118 dev_shift = QE_CR_SNUM_SHIFT; 119 } else if (cmd == QE_ASSIGN_RISC) { 120 /* Here device is the SNUM, and mcnProtocol is 121 * e_QeCmdRiscAssignment value */ 122 dev_shift = QE_CR_SNUM_SHIFT; 123 mcn_shift = QE_CR_MCN_RISC_ASSIGN_SHIFT; 124 } else { 125 if (device == QE_CR_SUBBLOCK_USB) 126 mcn_shift = QE_CR_MCN_USB_SHIFT; 127 else 128 mcn_shift = QE_CR_MCN_NORMAL_SHIFT; 129 } 130 131 out_be32(&qe_immr->cp.cecdr, cmd_input); 132 out_be32(&qe_immr->cp.cecr, 133 (cmd | QE_CR_FLG | ((u32) device << dev_shift) | (u32) 134 mcn_protocol << mcn_shift)); 135 } 136 137 /* wait for the QE_CR_FLG to clear */ 138 ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0, 139 100, 0); 140 /* On timeout (e.g. failure), the expression will be false (ret == 0), 141 otherwise it will be true (ret == 1). */ 142 spin_unlock_irqrestore(&qe_lock, flags); 143 144 return ret == 1; 145 } 146 EXPORT_SYMBOL(qe_issue_cmd); 147 148 /* Set a baud rate generator. This needs lots of work. There are 149 * 16 BRGs, which can be connected to the QE channels or output 150 * as clocks. The BRGs are in two different block of internal 151 * memory mapped space. 152 * The BRG clock is the QE clock divided by 2. 153 * It was set up long ago during the initial boot phase and is 154 * is given to us. 155 * Baud rate clocks are zero-based in the driver code (as that maps 156 * to port numbers). Documentation uses 1-based numbering. 157 */ 158 static unsigned int brg_clk = 0; 159 160 #define CLK_GRAN (1000) 161 #define CLK_GRAN_LIMIT (5) 162 163 unsigned int qe_get_brg_clk(void) 164 { 165 struct device_node *qe; 166 int size; 167 const u32 *prop; 168 unsigned int mod; 169 170 if (brg_clk) 171 return brg_clk; 172 173 qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 174 if (!qe) { 175 qe = of_find_node_by_type(NULL, "qe"); 176 if (!qe) 177 return brg_clk; 178 } 179 180 prop = of_get_property(qe, "brg-frequency", &size); 181 if (prop && size == sizeof(*prop)) 182 brg_clk = *prop; 183 184 of_node_put(qe); 185 186 /* round this if near to a multiple of CLK_GRAN */ 187 mod = brg_clk % CLK_GRAN; 188 if (mod) { 189 if (mod < CLK_GRAN_LIMIT) 190 brg_clk -= mod; 191 else if (mod > (CLK_GRAN - CLK_GRAN_LIMIT)) 192 brg_clk += CLK_GRAN - mod; 193 } 194 195 return brg_clk; 196 } 197 EXPORT_SYMBOL(qe_get_brg_clk); 198 199 #define PVR_VER_836x 0x8083 200 #define PVR_VER_832x 0x8084 201 202 /* Program the BRG to the given sampling rate and multiplier 203 * 204 * @brg: the BRG, QE_BRG1 - QE_BRG16 205 * @rate: the desired sampling rate 206 * @multiplier: corresponds to the value programmed in GUMR_L[RDCR] or 207 * GUMR_L[TDCR]. E.g., if this BRG is the RX clock, and GUMR_L[RDCR]=01, 208 * then 'multiplier' should be 8. 209 */ 210 int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier) 211 { 212 u32 divisor, tempval; 213 u32 div16 = 0; 214 215 if ((brg < QE_BRG1) || (brg > QE_BRG16)) 216 return -EINVAL; 217 218 divisor = qe_get_brg_clk() / (rate * multiplier); 219 220 if (divisor > QE_BRGC_DIVISOR_MAX + 1) { 221 div16 = QE_BRGC_DIV16; 222 divisor /= 16; 223 } 224 225 /* Errata QE_General4, which affects some MPC832x and MPC836x SOCs, says 226 that the BRG divisor must be even if you're not using divide-by-16 227 mode. */ 228 if (pvr_version_is(PVR_VER_836x) || pvr_version_is(PVR_VER_832x)) 229 if (!div16 && (divisor & 1) && (divisor > 3)) 230 divisor++; 231 232 tempval = ((divisor - 1) << QE_BRGC_DIVISOR_SHIFT) | 233 QE_BRGC_ENABLE | div16; 234 235 out_be32(&qe_immr->brg.brgc[brg - QE_BRG1], tempval); 236 237 return 0; 238 } 239 EXPORT_SYMBOL(qe_setbrg); 240 241 /* Convert a string to a QE clock source enum 242 * 243 * This function takes a string, typically from a property in the device 244 * tree, and returns the corresponding "enum qe_clock" value. 245 */ 246 enum qe_clock qe_clock_source(const char *source) 247 { 248 unsigned int i; 249 250 if (strcasecmp(source, "none") == 0) 251 return QE_CLK_NONE; 252 253 if (strcmp(source, "tsync_pin") == 0) 254 return QE_TSYNC_PIN; 255 256 if (strcmp(source, "rsync_pin") == 0) 257 return QE_RSYNC_PIN; 258 259 if (strncasecmp(source, "brg", 3) == 0) { 260 i = simple_strtoul(source + 3, NULL, 10); 261 if ((i >= 1) && (i <= 16)) 262 return (QE_BRG1 - 1) + i; 263 else 264 return QE_CLK_DUMMY; 265 } 266 267 if (strncasecmp(source, "clk", 3) == 0) { 268 i = simple_strtoul(source + 3, NULL, 10); 269 if ((i >= 1) && (i <= 24)) 270 return (QE_CLK1 - 1) + i; 271 else 272 return QE_CLK_DUMMY; 273 } 274 275 return QE_CLK_DUMMY; 276 } 277 EXPORT_SYMBOL(qe_clock_source); 278 279 /* Initialize SNUMs (thread serial numbers) according to 280 * QE Module Control chapter, SNUM table 281 */ 282 static void qe_snums_init(void) 283 { 284 int i; 285 static const u8 snum_init_76[] = { 286 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D, 287 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89, 288 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9, 289 0xD8, 0xD9, 0xE8, 0xE9, 0x44, 0x45, 0x4C, 0x4D, 290 0x54, 0x55, 0x5C, 0x5D, 0x64, 0x65, 0x6C, 0x6D, 291 0x74, 0x75, 0x7C, 0x7D, 0x84, 0x85, 0x8C, 0x8D, 292 0x94, 0x95, 0x9C, 0x9D, 0xA4, 0xA5, 0xAC, 0xAD, 293 0xB4, 0xB5, 0xBC, 0xBD, 0xC4, 0xC5, 0xCC, 0xCD, 294 0xD4, 0xD5, 0xDC, 0xDD, 0xE4, 0xE5, 0xEC, 0xED, 295 0xF4, 0xF5, 0xFC, 0xFD, 296 }; 297 static const u8 snum_init_46[] = { 298 0x04, 0x05, 0x0C, 0x0D, 0x14, 0x15, 0x1C, 0x1D, 299 0x24, 0x25, 0x2C, 0x2D, 0x34, 0x35, 0x88, 0x89, 300 0x98, 0x99, 0xA8, 0xA9, 0xB8, 0xB9, 0xC8, 0xC9, 301 0xD8, 0xD9, 0xE8, 0xE9, 0x08, 0x09, 0x18, 0x19, 302 0x28, 0x29, 0x38, 0x39, 0x48, 0x49, 0x58, 0x59, 303 0x68, 0x69, 0x78, 0x79, 0x80, 0x81, 304 }; 305 static const u8 *snum_init; 306 307 qe_num_of_snum = qe_get_num_of_snums(); 308 309 if (qe_num_of_snum == 76) 310 snum_init = snum_init_76; 311 else 312 snum_init = snum_init_46; 313 314 for (i = 0; i < qe_num_of_snum; i++) { 315 snums[i].num = snum_init[i]; 316 snums[i].state = QE_SNUM_STATE_FREE; 317 } 318 } 319 320 int qe_get_snum(void) 321 { 322 unsigned long flags; 323 int snum = -EBUSY; 324 int i; 325 326 spin_lock_irqsave(&qe_lock, flags); 327 for (i = 0; i < qe_num_of_snum; i++) { 328 if (snums[i].state == QE_SNUM_STATE_FREE) { 329 snums[i].state = QE_SNUM_STATE_USED; 330 snum = snums[i].num; 331 break; 332 } 333 } 334 spin_unlock_irqrestore(&qe_lock, flags); 335 336 return snum; 337 } 338 EXPORT_SYMBOL(qe_get_snum); 339 340 void qe_put_snum(u8 snum) 341 { 342 int i; 343 344 for (i = 0; i < qe_num_of_snum; i++) { 345 if (snums[i].num == snum) { 346 snums[i].state = QE_SNUM_STATE_FREE; 347 break; 348 } 349 } 350 } 351 EXPORT_SYMBOL(qe_put_snum); 352 353 static int qe_sdma_init(void) 354 { 355 struct sdma __iomem *sdma = &qe_immr->sdma; 356 static unsigned long sdma_buf_offset = (unsigned long)-ENOMEM; 357 358 if (!sdma) 359 return -ENODEV; 360 361 /* allocate 2 internal temporary buffers (512 bytes size each) for 362 * the SDMA */ 363 if (IS_ERR_VALUE(sdma_buf_offset)) { 364 sdma_buf_offset = qe_muram_alloc(512 * 2, 4096); 365 if (IS_ERR_VALUE(sdma_buf_offset)) 366 return -ENOMEM; 367 } 368 369 out_be32(&sdma->sdebcr, (u32) sdma_buf_offset & QE_SDEBCR_BA_MASK); 370 out_be32(&sdma->sdmr, (QE_SDMR_GLB_1_MSK | 371 (0x1 << QE_SDMR_CEN_SHIFT))); 372 373 return 0; 374 } 375 376 /* The maximum number of RISCs we support */ 377 #define MAX_QE_RISC 4 378 379 /* Firmware information stored here for qe_get_firmware_info() */ 380 static struct qe_firmware_info qe_firmware_info; 381 382 /* 383 * Set to 1 if QE firmware has been uploaded, and therefore 384 * qe_firmware_info contains valid data. 385 */ 386 static int qe_firmware_uploaded; 387 388 /* 389 * Upload a QE microcode 390 * 391 * This function is a worker function for qe_upload_firmware(). It does 392 * the actual uploading of the microcode. 393 */ 394 static void qe_upload_microcode(const void *base, 395 const struct qe_microcode *ucode) 396 { 397 const __be32 *code = base + be32_to_cpu(ucode->code_offset); 398 unsigned int i; 399 400 if (ucode->major || ucode->minor || ucode->revision) 401 printk(KERN_INFO "qe-firmware: " 402 "uploading microcode '%s' version %u.%u.%u\n", 403 ucode->id, ucode->major, ucode->minor, ucode->revision); 404 else 405 printk(KERN_INFO "qe-firmware: " 406 "uploading microcode '%s'\n", ucode->id); 407 408 /* Use auto-increment */ 409 out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) | 410 QE_IRAM_IADD_AIE | QE_IRAM_IADD_BADDR); 411 412 for (i = 0; i < be32_to_cpu(ucode->count); i++) 413 out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i])); 414 415 /* Set I-RAM Ready Register */ 416 out_be32(&qe_immr->iram.iready, be32_to_cpu(QE_IRAM_READY)); 417 } 418 419 /* 420 * Upload a microcode to the I-RAM at a specific address. 421 * 422 * See Documentation/powerpc/qe_firmware.txt for information on QE microcode 423 * uploading. 424 * 425 * Currently, only version 1 is supported, so the 'version' field must be 426 * set to 1. 427 * 428 * The SOC model and revision are not validated, they are only displayed for 429 * informational purposes. 430 * 431 * 'calc_size' is the calculated size, in bytes, of the firmware structure and 432 * all of the microcode structures, minus the CRC. 433 * 434 * 'length' is the size that the structure says it is, including the CRC. 435 */ 436 int qe_upload_firmware(const struct qe_firmware *firmware) 437 { 438 unsigned int i; 439 unsigned int j; 440 u32 crc; 441 size_t calc_size = sizeof(struct qe_firmware); 442 size_t length; 443 const struct qe_header *hdr; 444 445 if (!firmware) { 446 printk(KERN_ERR "qe-firmware: invalid pointer\n"); 447 return -EINVAL; 448 } 449 450 hdr = &firmware->header; 451 length = be32_to_cpu(hdr->length); 452 453 /* Check the magic */ 454 if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') || 455 (hdr->magic[2] != 'F')) { 456 printk(KERN_ERR "qe-firmware: not a microcode\n"); 457 return -EPERM; 458 } 459 460 /* Check the version */ 461 if (hdr->version != 1) { 462 printk(KERN_ERR "qe-firmware: unsupported version\n"); 463 return -EPERM; 464 } 465 466 /* Validate some of the fields */ 467 if ((firmware->count < 1) || (firmware->count > MAX_QE_RISC)) { 468 printk(KERN_ERR "qe-firmware: invalid data\n"); 469 return -EINVAL; 470 } 471 472 /* Validate the length and check if there's a CRC */ 473 calc_size += (firmware->count - 1) * sizeof(struct qe_microcode); 474 475 for (i = 0; i < firmware->count; i++) 476 /* 477 * For situations where the second RISC uses the same microcode 478 * as the first, the 'code_offset' and 'count' fields will be 479 * zero, so it's okay to add those. 480 */ 481 calc_size += sizeof(__be32) * 482 be32_to_cpu(firmware->microcode[i].count); 483 484 /* Validate the length */ 485 if (length != calc_size + sizeof(__be32)) { 486 printk(KERN_ERR "qe-firmware: invalid length\n"); 487 return -EPERM; 488 } 489 490 /* Validate the CRC */ 491 crc = be32_to_cpu(*(__be32 *)((void *)firmware + calc_size)); 492 if (crc != crc32(0, firmware, calc_size)) { 493 printk(KERN_ERR "qe-firmware: firmware CRC is invalid\n"); 494 return -EIO; 495 } 496 497 /* 498 * If the microcode calls for it, split the I-RAM. 499 */ 500 if (!firmware->split) 501 setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR); 502 503 if (firmware->soc.model) 504 printk(KERN_INFO 505 "qe-firmware: firmware '%s' for %u V%u.%u\n", 506 firmware->id, be16_to_cpu(firmware->soc.model), 507 firmware->soc.major, firmware->soc.minor); 508 else 509 printk(KERN_INFO "qe-firmware: firmware '%s'\n", 510 firmware->id); 511 512 /* 513 * The QE only supports one microcode per RISC, so clear out all the 514 * saved microcode information and put in the new. 515 */ 516 memset(&qe_firmware_info, 0, sizeof(qe_firmware_info)); 517 strlcpy(qe_firmware_info.id, firmware->id, sizeof(qe_firmware_info.id)); 518 qe_firmware_info.extended_modes = firmware->extended_modes; 519 memcpy(qe_firmware_info.vtraps, firmware->vtraps, 520 sizeof(firmware->vtraps)); 521 522 /* Loop through each microcode. */ 523 for (i = 0; i < firmware->count; i++) { 524 const struct qe_microcode *ucode = &firmware->microcode[i]; 525 526 /* Upload a microcode if it's present */ 527 if (ucode->code_offset) 528 qe_upload_microcode(firmware, ucode); 529 530 /* Program the traps for this processor */ 531 for (j = 0; j < 16; j++) { 532 u32 trap = be32_to_cpu(ucode->traps[j]); 533 534 if (trap) 535 out_be32(&qe_immr->rsp[i].tibcr[j], trap); 536 } 537 538 /* Enable traps */ 539 out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr)); 540 } 541 542 qe_firmware_uploaded = 1; 543 544 return 0; 545 } 546 EXPORT_SYMBOL(qe_upload_firmware); 547 548 /* 549 * Get info on the currently-loaded firmware 550 * 551 * This function also checks the device tree to see if the boot loader has 552 * uploaded a firmware already. 553 */ 554 struct qe_firmware_info *qe_get_firmware_info(void) 555 { 556 static int initialized; 557 struct property *prop; 558 struct device_node *qe; 559 struct device_node *fw = NULL; 560 const char *sprop; 561 unsigned int i; 562 563 /* 564 * If we haven't checked yet, and a driver hasn't uploaded a firmware 565 * yet, then check the device tree for information. 566 */ 567 if (qe_firmware_uploaded) 568 return &qe_firmware_info; 569 570 if (initialized) 571 return NULL; 572 573 initialized = 1; 574 575 /* 576 * Newer device trees have an "fsl,qe" compatible property for the QE 577 * node, but we still need to support older device trees. 578 */ 579 qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 580 if (!qe) { 581 qe = of_find_node_by_type(NULL, "qe"); 582 if (!qe) 583 return NULL; 584 } 585 586 /* Find the 'firmware' child node */ 587 fw = of_get_child_by_name(qe, "firmware"); 588 of_node_put(qe); 589 590 /* Did we find the 'firmware' node? */ 591 if (!fw) 592 return NULL; 593 594 qe_firmware_uploaded = 1; 595 596 /* Copy the data into qe_firmware_info*/ 597 sprop = of_get_property(fw, "id", NULL); 598 if (sprop) 599 strlcpy(qe_firmware_info.id, sprop, 600 sizeof(qe_firmware_info.id)); 601 602 prop = of_find_property(fw, "extended-modes", NULL); 603 if (prop && (prop->length == sizeof(u64))) { 604 const u64 *iprop = prop->value; 605 606 qe_firmware_info.extended_modes = *iprop; 607 } 608 609 prop = of_find_property(fw, "virtual-traps", NULL); 610 if (prop && (prop->length == 32)) { 611 const u32 *iprop = prop->value; 612 613 for (i = 0; i < ARRAY_SIZE(qe_firmware_info.vtraps); i++) 614 qe_firmware_info.vtraps[i] = iprop[i]; 615 } 616 617 of_node_put(fw); 618 619 return &qe_firmware_info; 620 } 621 EXPORT_SYMBOL(qe_get_firmware_info); 622 623 unsigned int qe_get_num_of_risc(void) 624 { 625 struct device_node *qe; 626 int size; 627 unsigned int num_of_risc = 0; 628 const u32 *prop; 629 630 qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 631 if (!qe) { 632 /* Older devices trees did not have an "fsl,qe" 633 * compatible property, so we need to look for 634 * the QE node by name. 635 */ 636 qe = of_find_node_by_type(NULL, "qe"); 637 if (!qe) 638 return num_of_risc; 639 } 640 641 prop = of_get_property(qe, "fsl,qe-num-riscs", &size); 642 if (prop && size == sizeof(*prop)) 643 num_of_risc = *prop; 644 645 of_node_put(qe); 646 647 return num_of_risc; 648 } 649 EXPORT_SYMBOL(qe_get_num_of_risc); 650 651 unsigned int qe_get_num_of_snums(void) 652 { 653 struct device_node *qe; 654 int size; 655 unsigned int num_of_snums; 656 const u32 *prop; 657 658 num_of_snums = 28; /* The default number of snum for threads is 28 */ 659 qe = of_find_compatible_node(NULL, NULL, "fsl,qe"); 660 if (!qe) { 661 /* Older devices trees did not have an "fsl,qe" 662 * compatible property, so we need to look for 663 * the QE node by name. 664 */ 665 qe = of_find_node_by_type(NULL, "qe"); 666 if (!qe) 667 return num_of_snums; 668 } 669 670 prop = of_get_property(qe, "fsl,qe-num-snums", &size); 671 if (prop && size == sizeof(*prop)) { 672 num_of_snums = *prop; 673 if ((num_of_snums < 28) || (num_of_snums > QE_NUM_OF_SNUM)) { 674 /* No QE ever has fewer than 28 SNUMs */ 675 pr_err("QE: number of snum is invalid\n"); 676 of_node_put(qe); 677 return -EINVAL; 678 } 679 } 680 681 of_node_put(qe); 682 683 return num_of_snums; 684 } 685 EXPORT_SYMBOL(qe_get_num_of_snums); 686 687 static int __init qe_init(void) 688 { 689 struct device_node *np; 690 691 np = of_find_compatible_node(NULL, NULL, "fsl,qe"); 692 if (!np) 693 return -ENODEV; 694 qe_reset(); 695 of_node_put(np); 696 return 0; 697 } 698 subsys_initcall(qe_init); 699 700 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC_85xx) 701 static int qe_resume(struct platform_device *ofdev) 702 { 703 if (!qe_alive_during_sleep()) 704 qe_reset(); 705 return 0; 706 } 707 708 static int qe_probe(struct platform_device *ofdev) 709 { 710 return 0; 711 } 712 713 static const struct of_device_id qe_ids[] = { 714 { .compatible = "fsl,qe", }, 715 { }, 716 }; 717 718 static struct platform_driver qe_driver = { 719 .driver = { 720 .name = "fsl-qe", 721 .of_match_table = qe_ids, 722 }, 723 .probe = qe_probe, 724 .resume = qe_resume, 725 }; 726 727 builtin_platform_driver(qe_driver); 728 #endif /* defined(CONFIG_SUSPEND) && defined(CONFIG_PPC_85xx) */ 729