Commit 24fcc052 authored by Dikshita Agarwal's avatar Dikshita Agarwal Committed by Mauro Carvalho Chehab

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: default avatarDikshita Agarwal <dikshita@codeaurora.org>
Co-developed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 255385ca
...@@ -359,8 +359,14 @@ static void venus_set_registers(struct venus_hfi_device *hdev) ...@@ -359,8 +359,14 @@ static void venus_set_registers(struct venus_hfi_device *hdev)
static void venus_soft_int(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; 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, 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) ...@@ -474,8 +480,10 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
if (count >= max_tries) if (count >= max_tries)
ret = -ETIMEDOUT; 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); writel(0x0, cpu_cs_base + CPU_CS_X2RPMH_V6);
}
return ret; return ret;
} }
...@@ -1061,14 +1069,20 @@ static irqreturn_t venus_isr(struct venus_core *core) ...@@ -1061,14 +1069,20 @@ static irqreturn_t venus_isr(struct venus_core *core)
return IRQ_NONE; return IRQ_NONE;
status = readl(wrapper_base + WRAPPER_INTR_STATUS); status = readl(wrapper_base + WRAPPER_INTR_STATUS);
if (IS_V6(core)) {
if (status & WRAPPER_INTR_STATUS_A2H_MASK || if (status & WRAPPER_INTR_STATUS_A2H_MASK ||
status & WRAPPER_INTR_STATUS_A2HWD_MASK || status & WRAPPER_INTR_STATUS_A2HWD_MASK_V6 ||
status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK) status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
hdev->irq_status = status; 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(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; return IRQ_WAKE_THREAD;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment