media: venus: hfi: Add 6xx interrupt support
This commit adds 6xx specific interrupt support, some register offsets and bitmasks differ from 4xx, which we account for in this commit. [bod: Added commit log. Moved register definition into commit] Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org> Co-developed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
255385ca43
commit
24fcc0522d
1 changed files with 23 additions and 9 deletions
|
@ -359,8 +359,14 @@ static void venus_set_registers(struct venus_hfi_device *hdev)
|
|||
static void venus_soft_int(struct venus_hfi_device *hdev)
|
||||
{
|
||||
void __iomem *cpu_ic_base = hdev->core->cpu_ic_base;
|
||||
u32 clear_bit;
|
||||
|
||||
writel(BIT(CPU_IC_SOFTINT_H2A_SHIFT), cpu_ic_base + CPU_IC_SOFTINT);
|
||||
if (IS_V6(hdev->core))
|
||||
clear_bit = BIT(CPU_IC_SOFTINT_H2A_SHIFT_V6);
|
||||
else
|
||||
clear_bit = BIT(CPU_IC_SOFTINT_H2A_SHIFT);
|
||||
|
||||
writel(clear_bit, cpu_ic_base + CPU_IC_SOFTINT);
|
||||
}
|
||||
|
||||
static int venus_iface_cmdq_write_nolock(struct venus_hfi_device *hdev,
|
||||
|
@ -474,8 +480,10 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
|
|||
if (count >= max_tries)
|
||||
ret = -ETIMEDOUT;
|
||||
|
||||
if (IS_V6(hdev->core))
|
||||
if (IS_V6(hdev->core)) {
|
||||
writel(0x1, cpu_cs_base + CPU_CS_H2XSOFTINTEN_V6);
|
||||
writel(0x0, cpu_cs_base + CPU_CS_X2RPMH_V6);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1061,14 +1069,20 @@ static irqreturn_t venus_isr(struct venus_core *core)
|
|||
return IRQ_NONE;
|
||||
|
||||
status = readl(wrapper_base + WRAPPER_INTR_STATUS);
|
||||
|
||||
if (status & WRAPPER_INTR_STATUS_A2H_MASK ||
|
||||
status & WRAPPER_INTR_STATUS_A2HWD_MASK ||
|
||||
status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
|
||||
hdev->irq_status = status;
|
||||
|
||||
if (IS_V6(core)) {
|
||||
if (status & WRAPPER_INTR_STATUS_A2H_MASK ||
|
||||
status & WRAPPER_INTR_STATUS_A2HWD_MASK_V6 ||
|
||||
status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
|
||||
hdev->irq_status = status;
|
||||
} else {
|
||||
if (status & WRAPPER_INTR_STATUS_A2H_MASK ||
|
||||
status & WRAPPER_INTR_STATUS_A2HWD_MASK ||
|
||||
status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
|
||||
hdev->irq_status = status;
|
||||
}
|
||||
writel(1, cpu_cs_base + CPU_CS_A2HSOFTINTCLR);
|
||||
writel(status, wrapper_base + WRAPPER_INTR_CLEAR);
|
||||
if (!IS_V6(core))
|
||||
writel(status, wrapper_base + WRAPPER_INTR_CLEAR);
|
||||
|
||||
return IRQ_WAKE_THREAD;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue