Lines Matching defs:pdsp
1495 struct knav_pdsp_info *pdsp;
1499 pdsp = devm_kzalloc(dev, sizeof(*pdsp), GFP_KERNEL);
1500 if (!pdsp) {
1502 dev_err(dev, "out of memory allocating pdsp\n");
1505 pdsp->name = knav_queue_find_name(child);
1506 pdsp->iram =
1509 pdsp->regs =
1512 pdsp->intd =
1515 pdsp->command =
1519 if (IS_ERR(pdsp->command) || IS_ERR(pdsp->iram) ||
1520 IS_ERR(pdsp->regs) || IS_ERR(pdsp->intd)) {
1521 dev_err(dev, "failed to map pdsp %s regs\n",
1522 pdsp->name);
1523 if (!IS_ERR(pdsp->command))
1524 devm_iounmap(dev, pdsp->command);
1525 if (!IS_ERR(pdsp->iram))
1526 devm_iounmap(dev, pdsp->iram);
1527 if (!IS_ERR(pdsp->regs))
1528 devm_iounmap(dev, pdsp->regs);
1529 if (!IS_ERR(pdsp->intd))
1530 devm_iounmap(dev, pdsp->intd);
1531 devm_kfree(dev, pdsp);
1534 of_property_read_u32(child, "id", &pdsp->id);
1535 list_add_tail(&pdsp->list, &kdev->pdsps);
1536 dev_dbg(dev, "added pdsp %s: command %p, iram %p, regs %p, intd %p\n",
1537 pdsp->name, pdsp->command, pdsp->iram, pdsp->regs,
1538 pdsp->intd);
1544 struct knav_pdsp_info *pdsp)
1549 val = readl_relaxed(&pdsp->regs->control) & ~PDSP_CTRL_ENABLE;
1550 writel_relaxed(val, &pdsp->regs->control);
1551 ret = knav_queue_pdsp_wait(&pdsp->regs->control, timeout,
1554 dev_err(kdev->dev, "timed out on pdsp %s stop\n", pdsp->name);
1557 pdsp->loaded = false;
1558 pdsp->started = false;
1563 struct knav_pdsp_info *pdsp)
1583 dev_err(kdev->dev, "failed to get firmware for pdsp\n");
1590 writel_relaxed(pdsp->id + 1, pdsp->command + 0x18);
1595 writel_relaxed(be32_to_cpu(fwdata[i]), pdsp->iram + i);
1602 struct knav_pdsp_info *pdsp)
1608 writel_relaxed(0xffffffff, pdsp->command);
1609 while (readl_relaxed(pdsp->command) != 0xffffffff)
1613 val = readl_relaxed(&pdsp->regs->control);
1615 writel_relaxed(val, &pdsp->regs->control);
1617 /* enable pdsp */
1618 val = readl_relaxed(&pdsp->regs->control) | PDSP_CTRL_ENABLE;
1619 writel_relaxed(val, &pdsp->regs->control);
1622 ret = knav_queue_pdsp_wait(pdsp->command, timeout, 0);
1625 "timed out on pdsp %s command register wait\n",
1626 pdsp->name);
1634 struct knav_pdsp_info *pdsp;
1637 for_each_pdsp(kdev, pdsp)
1638 knav_queue_stop_pdsp(kdev, pdsp);
1643 struct knav_pdsp_info *pdsp;
1647 /* now load them all. We return success even if pdsp
1651 * it and init the range only if pdsp is started.
1653 for_each_pdsp(kdev, pdsp) {
1654 ret = knav_queue_load_pdsp(kdev, pdsp);
1656 pdsp->loaded = true;
1659 for_each_pdsp(kdev, pdsp) {
1660 if (pdsp->loaded) {
1661 ret = knav_queue_start_pdsp(kdev, pdsp);
1663 pdsp->started = true;
1813 /* get pdsp configuration values from device tree */