• Home
  • Raw
  • Download

Lines Matching +full:firmware +full:- +full:initialized

2  * Copyright (C) 2006-2010 Freescale Semiconductor, Inc. All rights reserved.
67 static phys_addr_t qebase = -1;
75 if (qebase != -1) in get_qe_base()
118 out_be32(&qe_immr->cp.cecr, (u32) (cmd | QE_CR_FLG)); in qe_issue_cmd()
121 /* Here device is the SNUM, not sub-block */ in qe_issue_cmd()
135 out_be32(&qe_immr->cp.cecdr, cmd_input); in qe_issue_cmd()
136 out_be32(&qe_immr->cp.cecr, in qe_issue_cmd()
142 ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0, in qe_issue_cmd()
159 * Baud rate clocks are zero-based in the driver code (as that maps
160 * to port numbers). Documentation uses 1-based numbering.
184 prop = of_get_property(qe, "brg-frequency", &size); in qe_get_brg_clk()
194 brg_clk -= mod; in qe_get_brg_clk()
195 else if (mod > (CLK_GRAN - CLK_GRAN_LIMIT)) in qe_get_brg_clk()
196 brg_clk += CLK_GRAN - mod; in qe_get_brg_clk()
208 * @brg: the BRG, QE_BRG1 - QE_BRG16
220 return -EINVAL; in qe_setbrg()
230 that the BRG divisor must be even if you're not using divide-by-16 in qe_setbrg()
236 tempval = ((divisor - 1) << QE_BRGC_DIVISOR_SHIFT) | in qe_setbrg()
239 out_be32(&qe_immr->brg.brgc[brg - QE_BRG1], tempval); in qe_setbrg()
266 return (QE_BRG1 - 1) + i; in qe_clock_source()
274 return (QE_CLK1 - 1) + i; in qe_clock_source()
327 int snum = -EBUSY; in qe_get_snum()
359 struct sdma __iomem *sdma = &qe_immr->sdma; in qe_sdma_init()
360 static unsigned long sdma_buf_offset = (unsigned long)-ENOMEM; in qe_sdma_init()
363 return -ENODEV; in qe_sdma_init()
370 return -ENOMEM; in qe_sdma_init()
373 out_be32(&sdma->sdebcr, (u32) sdma_buf_offset & QE_SDEBCR_BA_MASK); in qe_sdma_init()
374 out_be32(&sdma->sdmr, (QE_SDMR_GLB_1_MSK | in qe_sdma_init()
383 /* Firmware information stored here for qe_get_firmware_info() */
387 * Set to 1 if QE firmware has been uploaded, and therefore
401 const __be32 *code = base + be32_to_cpu(ucode->code_offset); in qe_upload_microcode()
404 if (ucode->major || ucode->minor || ucode->revision) in qe_upload_microcode()
405 printk(KERN_INFO "qe-firmware: " in qe_upload_microcode()
407 ucode->id, ucode->major, ucode->minor, ucode->revision); in qe_upload_microcode()
409 printk(KERN_INFO "qe-firmware: " in qe_upload_microcode()
410 "uploading microcode '%s'\n", ucode->id); in qe_upload_microcode()
412 /* Use auto-increment */ in qe_upload_microcode()
413 out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) | in qe_upload_microcode()
416 for (i = 0; i < be32_to_cpu(ucode->count); i++) in qe_upload_microcode()
417 out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i])); in qe_upload_microcode()
419 /* Set I-RAM Ready Register */ in qe_upload_microcode()
420 out_be32(&qe_immr->iram.iready, be32_to_cpu(QE_IRAM_READY)); in qe_upload_microcode()
424 * Upload a microcode to the I-RAM at a specific address.
435 * 'calc_size' is the calculated size, in bytes, of the firmware structure and
440 int qe_upload_firmware(const struct qe_firmware *firmware) in qe_upload_firmware() argument
449 if (!firmware) { in qe_upload_firmware()
450 printk(KERN_ERR "qe-firmware: invalid pointer\n"); in qe_upload_firmware()
451 return -EINVAL; in qe_upload_firmware()
454 hdr = &firmware->header; in qe_upload_firmware()
455 length = be32_to_cpu(hdr->length); in qe_upload_firmware()
458 if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') || in qe_upload_firmware()
459 (hdr->magic[2] != 'F')) { in qe_upload_firmware()
460 printk(KERN_ERR "qe-firmware: not a microcode\n"); in qe_upload_firmware()
461 return -EPERM; in qe_upload_firmware()
465 if (hdr->version != 1) { in qe_upload_firmware()
466 printk(KERN_ERR "qe-firmware: unsupported version\n"); in qe_upload_firmware()
467 return -EPERM; in qe_upload_firmware()
471 if ((firmware->count < 1) || (firmware->count > MAX_QE_RISC)) { in qe_upload_firmware()
472 printk(KERN_ERR "qe-firmware: invalid data\n"); in qe_upload_firmware()
473 return -EINVAL; in qe_upload_firmware()
477 calc_size += (firmware->count - 1) * sizeof(struct qe_microcode); in qe_upload_firmware()
479 for (i = 0; i < firmware->count; i++) in qe_upload_firmware()
486 be32_to_cpu(firmware->microcode[i].count); in qe_upload_firmware()
490 printk(KERN_ERR "qe-firmware: invalid length\n"); in qe_upload_firmware()
491 return -EPERM; in qe_upload_firmware()
495 crc = be32_to_cpu(*(__be32 *)((void *)firmware + calc_size)); in qe_upload_firmware()
496 if (crc != crc32(0, firmware, calc_size)) { in qe_upload_firmware()
497 printk(KERN_ERR "qe-firmware: firmware CRC is invalid\n"); in qe_upload_firmware()
498 return -EIO; in qe_upload_firmware()
502 * If the microcode calls for it, split the I-RAM. in qe_upload_firmware()
504 if (!firmware->split) in qe_upload_firmware()
505 setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR); in qe_upload_firmware()
507 if (firmware->soc.model) in qe_upload_firmware()
509 "qe-firmware: firmware '%s' for %u V%u.%u\n", in qe_upload_firmware()
510 firmware->id, be16_to_cpu(firmware->soc.model), in qe_upload_firmware()
511 firmware->soc.major, firmware->soc.minor); in qe_upload_firmware()
513 printk(KERN_INFO "qe-firmware: firmware '%s'\n", in qe_upload_firmware()
514 firmware->id); in qe_upload_firmware()
521 strlcpy(qe_firmware_info.id, firmware->id, sizeof(qe_firmware_info.id)); in qe_upload_firmware()
522 qe_firmware_info.extended_modes = firmware->extended_modes; in qe_upload_firmware()
523 memcpy(qe_firmware_info.vtraps, firmware->vtraps, in qe_upload_firmware()
524 sizeof(firmware->vtraps)); in qe_upload_firmware()
527 for (i = 0; i < firmware->count; i++) { in qe_upload_firmware()
528 const struct qe_microcode *ucode = &firmware->microcode[i]; in qe_upload_firmware()
531 if (ucode->code_offset) in qe_upload_firmware()
532 qe_upload_microcode(firmware, ucode); in qe_upload_firmware()
536 u32 trap = be32_to_cpu(ucode->traps[j]); in qe_upload_firmware()
539 out_be32(&qe_immr->rsp[i].tibcr[j], trap); in qe_upload_firmware()
543 out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr)); in qe_upload_firmware()
553 * Get info on the currently-loaded firmware
556 * uploaded a firmware already.
560 static int initialized; in qe_get_firmware_info() local
568 * If we haven't checked yet, and a driver hasn't uploaded a firmware in qe_get_firmware_info()
574 if (initialized) in qe_get_firmware_info()
577 initialized = 1; in qe_get_firmware_info()
590 /* Find the 'firmware' child node */ in qe_get_firmware_info()
592 if (strcmp(fw->name, "firmware") == 0) in qe_get_firmware_info()
598 /* Did we find the 'firmware' node? */ in qe_get_firmware_info()
610 prop = of_find_property(fw, "extended-modes", NULL); in qe_get_firmware_info()
611 if (prop && (prop->length == sizeof(u64))) { in qe_get_firmware_info()
612 const u64 *iprop = prop->value; in qe_get_firmware_info()
617 prop = of_find_property(fw, "virtual-traps", NULL); in qe_get_firmware_info()
618 if (prop && (prop->length == 32)) { in qe_get_firmware_info()
619 const u32 *iprop = prop->value; in qe_get_firmware_info()
649 prop = of_get_property(qe, "fsl,qe-num-riscs", &size); in qe_get_num_of_risc()
678 prop = of_get_property(qe, "fsl,qe-num-snums", &size); in qe_get_num_of_snums()
685 return -EINVAL; in qe_get_num_of_snums()
701 return -ENODEV; in qe_init()
728 .name = "fsl-qe",