Lines Matching refs:hva

16 #include "hva.h"
17 #include "hva-hw.h"
62 /* fix hva clock rate */
103 struct hva_dev *hva = data;
106 hva->sts_reg = readl_relaxed(hva->regs + HVA_HIF_FIFO_STS);
107 hva->sfl_reg = readl_relaxed(hva->regs + HVA_HIF_REG_SFL);
110 writel_relaxed(0x1, hva->regs + HVA_HIF_REG_IT_ACK);
117 struct hva_dev *hva = arg;
118 struct device *dev = hva_to_dev(hva);
119 u32 status = hva->sts_reg & 0xFF;
124 HVA_PREFIX, __func__, hva->sts_reg & 0xFF, hva->sfl_reg & 0xF);
130 ctx_id = (hva->sts_reg & 0xFF00) >> 8;
137 ctx = hva->instances[ctx_id];
194 complete(&hva->interrupt);
201 struct hva_dev *hva = data;
204 hva->sts_reg = readl_relaxed(hva->regs + HVA_HIF_FIFO_STS);
205 hva->sfl_reg = readl_relaxed(hva->regs + HVA_HIF_REG_SFL);
208 hva->lmi_err_reg = readl_relaxed(hva->regs + HVA_HIF_REG_LMI_ERR);
209 hva->emi_err_reg = readl_relaxed(hva->regs + HVA_HIF_REG_EMI_ERR);
210 hva->hec_mif_err_reg = readl_relaxed(hva->regs +
214 writel_relaxed(0x1, hva->regs + HVA_HIF_REG_IT_ACK);
221 struct hva_dev *hva = arg;
222 struct device *dev = hva_to_dev(hva);
227 HVA_PREFIX, hva->sts_reg & 0xFF, hva->sfl_reg & 0xF);
233 ctx_id = (hva->sts_reg & 0xFF00) >> 8;
240 ctx = hva->instances[ctx_id];
244 if (hva->lmi_err_reg) {
246 ctx->name, hva->lmi_err_reg);
250 if (hva->emi_err_reg) {
252 ctx->name, hva->emi_err_reg);
256 if (hva->hec_mif_err_reg) {
258 ctx->name, hva->hec_mif_err_reg);
262 complete(&hva->interrupt);
267 static unsigned long int hva_hw_get_ip_version(struct hva_dev *hva)
269 struct device *dev = hva_to_dev(hva);
274 mutex_unlock(&hva->protect_mutex);
278 version = readl_relaxed(hva->regs + HVA_HIF_REG_VERSION) &
298 int hva_hw_probe(struct platform_device *pdev, struct hva_dev *hva)
304 WARN_ON(!hva);
307 hva->regs = devm_platform_ioremap_resource(pdev, 0);
308 if (IS_ERR(hva->regs)) {
310 return PTR_ERR(hva->regs);
319 hva->esram_addr = esram->start;
320 hva->esram_size = resource_size(esram);
323 HVA_PREFIX, hva->esram_addr, hva->esram_size);
326 hva->clk = devm_clk_get(dev, "clk_hva");
327 if (IS_ERR(hva->clk)) {
329 return PTR_ERR(hva->clk);
332 ret = clk_prepare(hva->clk);
335 hva->clk = ERR_PTR(-EINVAL);
343 hva->irq_its = ret;
345 ret = devm_request_threaded_irq(dev, hva->irq_its, hva_hw_its_interrupt,
348 "hva_its_irq", hva);
351 HVA_PREFIX, hva->irq_its);
354 disable_irq(hva->irq_its);
360 hva->irq_err = ret;
362 ret = devm_request_threaded_irq(dev, hva->irq_err, hva_hw_err_interrupt,
365 "hva_err_irq", hva);
368 HVA_PREFIX, hva->irq_err);
371 disable_irq(hva->irq_err);
374 mutex_init(&hva->protect_mutex);
377 init_completion(&hva->interrupt);
392 hva->ip_version = hva_hw_get_ip_version(hva);
394 if (hva->ip_version == HVA_VERSION_UNKNOWN) {
399 dev_info(dev, "%s found hva device (version 0x%lx)\n", HVA_PREFIX,
400 hva->ip_version);
409 if (hva->clk)
410 clk_unprepare(hva->clk);
415 void hva_hw_remove(struct hva_dev *hva)
417 struct device *dev = hva_to_dev(hva);
419 disable_irq(hva->irq_its);
420 disable_irq(hva->irq_err);
428 struct hva_dev *hva = dev_get_drvdata(dev);
430 clk_disable_unprepare(hva->clk);
437 struct hva_dev *hva = dev_get_drvdata(dev);
439 if (clk_prepare_enable(hva->clk)) {
440 dev_err(hva->dev, "%s failed to prepare hva clk\n",
445 if (clk_set_rate(hva->clk, CLK_RATE)) {
448 clk_disable_unprepare(hva->clk);
458 struct hva_dev *hva = ctx_to_hdev(ctx);
459 struct device *dev = hva_to_dev(hva);
465 mutex_lock(&hva->protect_mutex);
468 enable_irq(hva->irq_its);
469 enable_irq(hva->irq_err);
479 reg = readl_relaxed(hva->regs + HVA_HIF_REG_CLK_GATING);
490 writel_relaxed(reg, hva->regs + HVA_HIF_REG_CLK_GATING);
496 writel_relaxed(BSM_CFG_VAL1, hva->regs + HVA_HIF_REG_BSM);
499 writel_relaxed(MIF_CFG_VAL3, hva->regs + HVA_HIF_REG_MIF_CFG);
500 writel_relaxed(HEC_MIF_CFG_VAL, hva->regs + HVA_HIF_REG_HEC_MIF_CFG);
510 writel_relaxed(cmd + (client_id << 8), hva->regs + HVA_HIF_FIFO_CMD);
511 writel_relaxed(task->paddr, hva->regs + HVA_HIF_FIFO_CMD);
513 if (!wait_for_completion_timeout(&hva->interrupt,
528 disable_irq(hva->irq_its);
529 disable_irq(hva->irq_err);
534 writel_relaxed(reg, hva->regs + HVA_HIF_REG_CLK_GATING);
542 mutex_unlock(&hva->protect_mutex);
549 #reg, readl_relaxed(hva->regs + reg))
551 void hva_hw_dump_regs(struct hva_dev *hva, struct seq_file *s)
553 struct device *dev = hva_to_dev(hva);
555 mutex_lock(&hva->protect_mutex);
559 mutex_unlock(&hva->protect_mutex);
563 seq_printf(s, "Registers:\nReg @ = 0x%p\n", hva->regs);
583 mutex_unlock(&hva->protect_mutex);