staticinlinebool dae_is_support(struct hisi_qm *qm)
{ if (test_bit(QM_SUPPORT_DAE, &qm->caps)) returntrue;
returnfalse;
}
int hisi_dae_set_user_domain(struct hisi_qm *qm)
{
u32 val; int ret;
if (!dae_is_support(qm)) return 0;
val = readl(qm->io_base + DAE_MEM_START_OFFSET);
val |= DAE_MEM_START_MASK;
writel(val, qm->io_base + DAE_MEM_START_OFFSET);
ret = readl_relaxed_poll_timeout(qm->io_base + DAE_MEM_DONE_OFFSET, val,
val & DAE_MEM_DONE_MASK,
DAE_REG_RD_INTVRL_US, DAE_REG_RD_TMOUT_US); if (ret)
pci_err(qm->pdev, "failed to init dae memory!\n");
return ret;
}
int hisi_dae_set_alg(struct hisi_qm *qm)
{
size_t len;
if (!dae_is_support(qm)) return 0;
if (!qm->uacce) return 0;
len = strlen(qm->uacce->algs); /* A line break may be required */ if (len + strlen(DAE_ALG_NAME) + 1 >= QM_DEV_ALG_MAX_LEN) {
pci_err(qm->pdev, "algorithm name is too long!\n"); return -EINVAL;
}
err_status = hisi_dae_get_hw_err_status(qm); if (!err_status) return ACC_ERR_NONE;
hisi_dae_log_hw_error(qm, err_status);
if (err_status & DAE_ERR_NFE_MASK) { /* Disable the same error reporting until device is recovered. */
hisi_dae_disable_error_report(qm, err_status); return ACC_ERR_NEED_RESET;
}
hisi_dae_clear_hw_err_status(qm, err_status);
err_status = hisi_dae_get_hw_err_status(qm); if (err_status & DAE_ERR_NFE_MASK) returntrue;
returnfalse;
}
int hisi_dae_close_axi_master_ooo(struct hisi_qm *qm)
{
u32 val; int ret;
if (!dae_is_support(qm)) return 0;
val = readl(qm->io_base + DAE_AM_CTRL_GLOBAL_OFFSET);
val |= BIT(0);
writel(val, qm->io_base + DAE_AM_CTRL_GLOBAL_OFFSET);
ret = readl_relaxed_poll_timeout(qm->io_base + DAE_AM_RETURN_OFFSET,
val, (val == DAE_AM_RETURN_MASK),
DAE_REG_RD_INTVRL_US, DAE_REG_RD_TMOUT_US); if (ret)
dev_err(&qm->pdev->dev, "failed to close dae axi ooo!\n");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.