Commit ff2a7013 authored by Bryan O'Donoghue's avatar Bryan O'Donoghue Committed by Mauro Carvalho Chehab

media: venus: hfi,pm,firmware: Convert to block relative addressing

An upcoming silicon change places a number of existing blocks within the
Venus at different relative offsets to the base address of IO region.

In order to handle this difference this patch changes the address offsets
of the registers to function as offsets relative to the relevant sub-block
of registers within the IO region not the base address of the IO region.

As a result of this change venus_readl() and venus_writel() are deleted.
Co-developed-by: default avatarDikshita Agarwal <dikshita@codeaurora.org>
Signed-off-by: default avatarDikshita Agarwal <dikshita@codeaurora.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 b4053a20
...@@ -27,19 +27,19 @@ ...@@ -27,19 +27,19 @@
static void venus_reset_cpu(struct venus_core *core) static void venus_reset_cpu(struct venus_core *core)
{ {
u32 fw_size = core->fw.mapped_mem_size; u32 fw_size = core->fw.mapped_mem_size;
void __iomem *base = core->base; void __iomem *wrapper_base = core->wrapper_base;
writel(0, base + WRAPPER_FW_START_ADDR); writel(0, wrapper_base + WRAPPER_FW_START_ADDR);
writel(fw_size, base + WRAPPER_FW_END_ADDR); writel(fw_size, wrapper_base + WRAPPER_FW_END_ADDR);
writel(0, base + WRAPPER_CPA_START_ADDR); writel(0, wrapper_base + WRAPPER_CPA_START_ADDR);
writel(fw_size, base + WRAPPER_CPA_END_ADDR); writel(fw_size, wrapper_base + WRAPPER_CPA_END_ADDR);
writel(fw_size, base + WRAPPER_NONPIX_START_ADDR); writel(fw_size, wrapper_base + WRAPPER_NONPIX_START_ADDR);
writel(fw_size, base + WRAPPER_NONPIX_END_ADDR); writel(fw_size, wrapper_base + WRAPPER_NONPIX_END_ADDR);
writel(0x0, base + WRAPPER_CPU_CGC_DIS); writel(0x0, wrapper_base + WRAPPER_CPU_CGC_DIS);
writel(0x0, base + WRAPPER_CPU_CLOCK_CONFIG); writel(0x0, wrapper_base + WRAPPER_CPU_CLOCK_CONFIG);
/* Bring ARM9 out of reset */ /* Bring ARM9 out of reset */
writel(0, base + WRAPPER_A9SS_SW_RESET); writel(0, wrapper_base + WRAPPER_A9SS_SW_RESET);
} }
int venus_set_hw_state(struct venus_core *core, bool resume) int venus_set_hw_state(struct venus_core *core, bool resume)
...@@ -56,7 +56,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume) ...@@ -56,7 +56,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume)
if (resume) if (resume)
venus_reset_cpu(core); venus_reset_cpu(core);
else else
writel(1, core->base + WRAPPER_A9SS_SW_RESET); writel(1, core->wrapper_base + WRAPPER_A9SS_SW_RESET);
return 0; return 0;
} }
...@@ -159,12 +159,12 @@ static int venus_shutdown_no_tz(struct venus_core *core) ...@@ -159,12 +159,12 @@ static int venus_shutdown_no_tz(struct venus_core *core)
size_t unmapped; size_t unmapped;
u32 reg; u32 reg;
struct device *dev = core->fw.dev; struct device *dev = core->fw.dev;
void __iomem *base = core->base; void __iomem *wrapper_base = core->wrapper_base;
/* Assert the reset to ARM9 */ /* Assert the reset to ARM9 */
reg = readl_relaxed(base + WRAPPER_A9SS_SW_RESET); reg = readl_relaxed(wrapper_base + WRAPPER_A9SS_SW_RESET);
reg |= WRAPPER_A9SS_SW_RESET_BIT; reg |= WRAPPER_A9SS_SW_RESET_BIT;
writel_relaxed(reg, base + WRAPPER_A9SS_SW_RESET); writel_relaxed(reg, wrapper_base + WRAPPER_A9SS_SW_RESET);
/* Make sure reset is asserted before the mapping is removed */ /* Make sure reset is asserted before the mapping is removed */
mb(); mb();
......
...@@ -345,16 +345,6 @@ static void venus_free(struct venus_hfi_device *hdev, struct mem_desc *mem) ...@@ -345,16 +345,6 @@ static void venus_free(struct venus_hfi_device *hdev, struct mem_desc *mem)
dma_free_attrs(dev, mem->size, mem->kva, mem->da, mem->attrs); dma_free_attrs(dev, mem->size, mem->kva, mem->da, mem->attrs);
} }
static void venus_writel(struct venus_hfi_device *hdev, u32 reg, u32 value)
{
writel(value, hdev->core->base + reg);
}
static u32 venus_readl(struct venus_hfi_device *hdev, u32 reg)
{
return readl(hdev->core->base + reg);
}
static void venus_set_registers(struct venus_hfi_device *hdev) static void venus_set_registers(struct venus_hfi_device *hdev)
{ {
const struct venus_resources *res = hdev->core->res; const struct venus_resources *res = hdev->core->res;
...@@ -363,12 +353,14 @@ static void venus_set_registers(struct venus_hfi_device *hdev) ...@@ -363,12 +353,14 @@ static void venus_set_registers(struct venus_hfi_device *hdev)
unsigned int i; unsigned int i;
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
venus_writel(hdev, tbl[i].reg, tbl[i].value); writel(tbl[i].value, hdev->core->base + tbl[i].reg);
} }
static void venus_soft_int(struct venus_hfi_device *hdev) static void venus_soft_int(struct venus_hfi_device *hdev)
{ {
venus_writel(hdev, CPU_IC_SOFTINT, BIT(CPU_IC_SOFTINT_H2A_SHIFT)); void __iomem *cpu_ic_base = hdev->core->cpu_ic_base;
writel(BIT(CPU_IC_SOFTINT_H2A_SHIFT), 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,
...@@ -452,14 +444,16 @@ static int venus_boot_core(struct venus_hfi_device *hdev) ...@@ -452,14 +444,16 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
static const unsigned int max_tries = 100; static const unsigned int max_tries = 100;
u32 ctrl_status = 0; u32 ctrl_status = 0;
unsigned int count = 0; unsigned int count = 0;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
void __iomem *wrapper_base = hdev->core->wrapper_base;
int ret = 0; int ret = 0;
venus_writel(hdev, VIDC_CTRL_INIT, BIT(VIDC_CTRL_INIT_CTRL_SHIFT)); writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
venus_writel(hdev, WRAPPER_INTR_MASK, WRAPPER_INTR_MASK_A2HVCODEC_MASK); writel(WRAPPER_INTR_MASK_A2HVCODEC_MASK, wrapper_base + WRAPPER_INTR_MASK);
venus_writel(hdev, CPU_CS_SCIACMDARG3, 1); writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
while (!ctrl_status && count < max_tries) { while (!ctrl_status && count < max_tries) {
ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0); ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
if ((ctrl_status & CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK) == 4) { if ((ctrl_status & CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK) == 4) {
dev_err(dev, "invalid setting for UC_REGION\n"); dev_err(dev, "invalid setting for UC_REGION\n");
ret = -EINVAL; ret = -EINVAL;
...@@ -479,9 +473,11 @@ static int venus_boot_core(struct venus_hfi_device *hdev) ...@@ -479,9 +473,11 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
static u32 venus_hwversion(struct venus_hfi_device *hdev) static u32 venus_hwversion(struct venus_hfi_device *hdev)
{ {
struct device *dev = hdev->core->dev; struct device *dev = hdev->core->dev;
u32 ver = venus_readl(hdev, WRAPPER_HW_VERSION); void __iomem *wrapper_base = hdev->core->wrapper_base;
u32 ver;
u32 major, minor, step; u32 major, minor, step;
ver = readl(wrapper_base + WRAPPER_HW_VERSION);
major = ver & WRAPPER_HW_VERSION_MAJOR_VERSION_MASK; major = ver & WRAPPER_HW_VERSION_MAJOR_VERSION_MASK;
major = major >> WRAPPER_HW_VERSION_MAJOR_VERSION_SHIFT; major = major >> WRAPPER_HW_VERSION_MAJOR_VERSION_SHIFT;
minor = ver & WRAPPER_HW_VERSION_MINOR_VERSION_MASK; minor = ver & WRAPPER_HW_VERSION_MINOR_VERSION_MASK;
...@@ -496,6 +492,7 @@ static u32 venus_hwversion(struct venus_hfi_device *hdev) ...@@ -496,6 +492,7 @@ static u32 venus_hwversion(struct venus_hfi_device *hdev)
static int venus_run(struct venus_hfi_device *hdev) static int venus_run(struct venus_hfi_device *hdev)
{ {
struct device *dev = hdev->core->dev; struct device *dev = hdev->core->dev;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
int ret; int ret;
/* /*
...@@ -504,12 +501,12 @@ static int venus_run(struct venus_hfi_device *hdev) ...@@ -504,12 +501,12 @@ static int venus_run(struct venus_hfi_device *hdev)
*/ */
venus_set_registers(hdev); venus_set_registers(hdev);
venus_writel(hdev, UC_REGION_ADDR, hdev->ifaceq_table.da); writel(hdev->ifaceq_table.da, cpu_cs_base + UC_REGION_ADDR);
venus_writel(hdev, UC_REGION_SIZE, SHARED_QSIZE); writel(SHARED_QSIZE, cpu_cs_base + UC_REGION_SIZE);
venus_writel(hdev, CPU_CS_SCIACMDARG2, hdev->ifaceq_table.da); writel(hdev->ifaceq_table.da, cpu_cs_base + CPU_CS_SCIACMDARG2);
venus_writel(hdev, CPU_CS_SCIACMDARG1, 0x01); writel(0x01, cpu_cs_base + CPU_CS_SCIACMDARG1);
if (hdev->sfr.da) if (hdev->sfr.da)
venus_writel(hdev, SFR_ADDR, hdev->sfr.da); writel(hdev->sfr.da, cpu_cs_base + SFR_ADDR);
ret = venus_boot_core(hdev); ret = venus_boot_core(hdev);
if (ret) { if (ret) {
...@@ -524,17 +521,18 @@ static int venus_run(struct venus_hfi_device *hdev) ...@@ -524,17 +521,18 @@ static int venus_run(struct venus_hfi_device *hdev)
static int venus_halt_axi(struct venus_hfi_device *hdev) static int venus_halt_axi(struct venus_hfi_device *hdev)
{ {
void __iomem *base = hdev->core->base; void __iomem *wrapper_base = hdev->core->wrapper_base;
void __iomem *vbif_base = hdev->core->vbif_base;
struct device *dev = hdev->core->dev; struct device *dev = hdev->core->dev;
u32 val; u32 val;
int ret; int ret;
if (IS_V4(hdev->core)) { if (IS_V4(hdev->core)) {
val = venus_readl(hdev, WRAPPER_CPU_AXI_HALT); val = readl(wrapper_base + WRAPPER_CPU_AXI_HALT);
val |= WRAPPER_CPU_AXI_HALT_HALT; val |= WRAPPER_CPU_AXI_HALT_HALT;
venus_writel(hdev, WRAPPER_CPU_AXI_HALT, val); writel(val, wrapper_base + WRAPPER_CPU_AXI_HALT);
ret = readl_poll_timeout(base + WRAPPER_CPU_AXI_HALT_STATUS, ret = readl_poll_timeout(wrapper_base + WRAPPER_CPU_AXI_HALT_STATUS,
val, val,
val & WRAPPER_CPU_AXI_HALT_STATUS_IDLE, val & WRAPPER_CPU_AXI_HALT_STATUS_IDLE,
POLL_INTERVAL_US, POLL_INTERVAL_US,
...@@ -548,12 +546,12 @@ static int venus_halt_axi(struct venus_hfi_device *hdev) ...@@ -548,12 +546,12 @@ static int venus_halt_axi(struct venus_hfi_device *hdev)
} }
/* Halt AXI and AXI IMEM VBIF Access */ /* Halt AXI and AXI IMEM VBIF Access */
val = venus_readl(hdev, VBIF_AXI_HALT_CTRL0); val = readl(vbif_base + VBIF_AXI_HALT_CTRL0);
val |= VBIF_AXI_HALT_CTRL0_HALT_REQ; val |= VBIF_AXI_HALT_CTRL0_HALT_REQ;
venus_writel(hdev, VBIF_AXI_HALT_CTRL0, val); writel(val, vbif_base + VBIF_AXI_HALT_CTRL0);
/* Request for AXI bus port halt */ /* Request for AXI bus port halt */
ret = readl_poll_timeout(base + VBIF_AXI_HALT_CTRL1, val, ret = readl_poll_timeout(vbif_base + VBIF_AXI_HALT_CTRL1, val,
val & VBIF_AXI_HALT_CTRL1_HALT_ACK, val & VBIF_AXI_HALT_CTRL1_HALT_ACK,
POLL_INTERVAL_US, POLL_INTERVAL_US,
VBIF_AXI_HALT_ACK_TIMEOUT_US); VBIF_AXI_HALT_ACK_TIMEOUT_US);
...@@ -1046,19 +1044,21 @@ static irqreturn_t venus_isr(struct venus_core *core) ...@@ -1046,19 +1044,21 @@ static irqreturn_t venus_isr(struct venus_core *core)
{ {
struct venus_hfi_device *hdev = to_hfi_priv(core); struct venus_hfi_device *hdev = to_hfi_priv(core);
u32 status; u32 status;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
void __iomem *wrapper_base = hdev->core->wrapper_base;
if (!hdev) if (!hdev)
return IRQ_NONE; return IRQ_NONE;
status = venus_readl(hdev, WRAPPER_INTR_STATUS); status = readl(wrapper_base + WRAPPER_INTR_STATUS);
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 ||
status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK) status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
hdev->irq_status = status; hdev->irq_status = status;
venus_writel(hdev, CPU_CS_A2HSOFTINTCLR, 1); writel(1, cpu_cs_base + CPU_CS_A2HSOFTINTCLR);
venus_writel(hdev, WRAPPER_INTR_CLEAR, status); writel(status, wrapper_base + WRAPPER_INTR_CLEAR);
return IRQ_WAKE_THREAD; return IRQ_WAKE_THREAD;
} }
...@@ -1391,6 +1391,7 @@ static int venus_suspend_1xx(struct venus_core *core) ...@@ -1391,6 +1391,7 @@ static int venus_suspend_1xx(struct venus_core *core)
{ {
struct venus_hfi_device *hdev = to_hfi_priv(core); struct venus_hfi_device *hdev = to_hfi_priv(core);
struct device *dev = core->dev; struct device *dev = core->dev;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
u32 ctrl_status; u32 ctrl_status;
int ret; int ret;
...@@ -1425,7 +1426,7 @@ static int venus_suspend_1xx(struct venus_core *core) ...@@ -1425,7 +1426,7 @@ static int venus_suspend_1xx(struct venus_core *core)
return -EINVAL; return -EINVAL;
} }
ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0); ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
if (!(ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)) { if (!(ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)) {
mutex_unlock(&hdev->lock); mutex_unlock(&hdev->lock);
return -EINVAL; return -EINVAL;
...@@ -1446,10 +1447,12 @@ static int venus_suspend_1xx(struct venus_core *core) ...@@ -1446,10 +1447,12 @@ static int venus_suspend_1xx(struct venus_core *core)
static bool venus_cpu_and_video_core_idle(struct venus_hfi_device *hdev) static bool venus_cpu_and_video_core_idle(struct venus_hfi_device *hdev)
{ {
void __iomem *wrapper_base = hdev->core->wrapper_base;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
u32 ctrl_status, cpu_status; u32 ctrl_status, cpu_status;
cpu_status = venus_readl(hdev, WRAPPER_CPU_STATUS); cpu_status = readl(wrapper_base + WRAPPER_CPU_STATUS);
ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0); ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
if (cpu_status & WRAPPER_CPU_STATUS_WFI && if (cpu_status & WRAPPER_CPU_STATUS_WFI &&
ctrl_status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK) ctrl_status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
...@@ -1460,10 +1463,12 @@ static bool venus_cpu_and_video_core_idle(struct venus_hfi_device *hdev) ...@@ -1460,10 +1463,12 @@ static bool venus_cpu_and_video_core_idle(struct venus_hfi_device *hdev)
static bool venus_cpu_idle_and_pc_ready(struct venus_hfi_device *hdev) static bool venus_cpu_idle_and_pc_ready(struct venus_hfi_device *hdev)
{ {
void __iomem *wrapper_base = hdev->core->wrapper_base;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
u32 ctrl_status, cpu_status; u32 ctrl_status, cpu_status;
cpu_status = venus_readl(hdev, WRAPPER_CPU_STATUS); cpu_status = readl(wrapper_base + WRAPPER_CPU_STATUS);
ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0); ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
if (cpu_status & WRAPPER_CPU_STATUS_WFI && if (cpu_status & WRAPPER_CPU_STATUS_WFI &&
ctrl_status & CPU_CS_SCIACMDARG0_PC_READY) ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)
...@@ -1476,6 +1481,7 @@ static int venus_suspend_3xx(struct venus_core *core) ...@@ -1476,6 +1481,7 @@ static int venus_suspend_3xx(struct venus_core *core)
{ {
struct venus_hfi_device *hdev = to_hfi_priv(core); struct venus_hfi_device *hdev = to_hfi_priv(core);
struct device *dev = core->dev; struct device *dev = core->dev;
void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
u32 ctrl_status; u32 ctrl_status;
bool val; bool val;
int ret; int ret;
...@@ -1492,7 +1498,7 @@ static int venus_suspend_3xx(struct venus_core *core) ...@@ -1492,7 +1498,7 @@ static int venus_suspend_3xx(struct venus_core *core)
return -EINVAL; return -EINVAL;
} }
ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0); ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
if (ctrl_status & CPU_CS_SCIACMDARG0_PC_READY) if (ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)
goto power_off; goto power_off;
......
...@@ -8,27 +8,28 @@ ...@@ -8,27 +8,28 @@
#define VBIF_BASE 0x80000 #define VBIF_BASE 0x80000
#define VBIF_AXI_HALT_CTRL0 (VBIF_BASE + 0x208) #define VBIF_AXI_HALT_CTRL0 0x208
#define VBIF_AXI_HALT_CTRL1 (VBIF_BASE + 0x20c) #define VBIF_AXI_HALT_CTRL1 0x20c
#define VBIF_AXI_HALT_CTRL0_HALT_REQ BIT(0) #define VBIF_AXI_HALT_CTRL0_HALT_REQ BIT(0)
#define VBIF_AXI_HALT_CTRL1_HALT_ACK BIT(0) #define VBIF_AXI_HALT_CTRL1_HALT_ACK BIT(0)
#define VBIF_AXI_HALT_ACK_TIMEOUT_US 500000 #define VBIF_AXI_HALT_ACK_TIMEOUT_US 500000
#define CPU_BASE 0xc0000 #define CPU_BASE 0xc0000
#define CPU_CS_BASE (CPU_BASE + 0x12000) #define CPU_CS_BASE (CPU_BASE + 0x12000)
#define CPU_IC_BASE (CPU_BASE + 0x1f000) #define CPU_IC_BASE (CPU_BASE + 0x1f000)
#define CPU_CS_A2HSOFTINTCLR (CPU_CS_BASE + 0x1c) #define CPU_CS_A2HSOFTINTCLR 0x1c
#define VIDC_CTRL_INIT (CPU_CS_BASE + 0x48) #define VIDC_CTRL_INIT 0x48
#define VIDC_CTRL_INIT_RESERVED_BITS31_1_MASK 0xfffffffe #define VIDC_CTRL_INIT_RESERVED_BITS31_1_MASK 0xfffffffe
#define VIDC_CTRL_INIT_RESERVED_BITS31_1_SHIFT 1 #define VIDC_CTRL_INIT_RESERVED_BITS31_1_SHIFT 1
#define VIDC_CTRL_INIT_CTRL_MASK 0x1 #define VIDC_CTRL_INIT_CTRL_MASK 0x1
#define VIDC_CTRL_INIT_CTRL_SHIFT 0 #define VIDC_CTRL_INIT_CTRL_SHIFT 0
/* HFI control status */ /* HFI control status */
#define CPU_CS_SCIACMDARG0 (CPU_CS_BASE + 0x4c) #define CPU_CS_SCIACMDARG0 0x4c
#define CPU_CS_SCIACMDARG0_MASK 0xff #define CPU_CS_SCIACMDARG0_MASK 0xff
#define CPU_CS_SCIACMDARG0_SHIFT 0x0 #define CPU_CS_SCIACMDARG0_SHIFT 0x0
#define CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK 0xfe #define CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK 0xfe
...@@ -39,42 +40,43 @@ ...@@ -39,42 +40,43 @@
#define CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK BIT(30) #define CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK BIT(30)
/* HFI queue table info */ /* HFI queue table info */
#define CPU_CS_SCIACMDARG1 (CPU_CS_BASE + 0x50) #define CPU_CS_SCIACMDARG1 0x50
/* HFI queue table address */ /* HFI queue table address */
#define CPU_CS_SCIACMDARG2 (CPU_CS_BASE + 0x54) #define CPU_CS_SCIACMDARG2 0x54
/* Venus cpu */ /* Venus cpu */
#define CPU_CS_SCIACMDARG3 (CPU_CS_BASE + 0x58) #define CPU_CS_SCIACMDARG3 0x58
#define SFR_ADDR (CPU_CS_BASE + 0x5c) #define SFR_ADDR 0x5c
#define MMAP_ADDR (CPU_CS_BASE + 0x60) #define MMAP_ADDR 0x60
#define UC_REGION_ADDR (CPU_CS_BASE + 0x64) #define UC_REGION_ADDR 0x64
#define UC_REGION_SIZE (CPU_CS_BASE + 0x68) #define UC_REGION_SIZE 0x68
#define CPU_IC_SOFTINT (CPU_IC_BASE + 0x18) /* Relative to CPU_IC_BASE */
#define CPU_IC_SOFTINT 0x18
#define CPU_IC_SOFTINT_H2A_MASK 0x8000 #define CPU_IC_SOFTINT_H2A_MASK 0x8000
#define CPU_IC_SOFTINT_H2A_SHIFT 0xf #define CPU_IC_SOFTINT_H2A_SHIFT 0xf
/* Venus wrapper */ /* Venus wrapper */
#define WRAPPER_BASE 0x000e0000 #define WRAPPER_BASE 0x000e0000
#define WRAPPER_HW_VERSION (WRAPPER_BASE + 0x00) #define WRAPPER_HW_VERSION 0x00
#define WRAPPER_HW_VERSION_MAJOR_VERSION_MASK 0x78000000 #define WRAPPER_HW_VERSION_MAJOR_VERSION_MASK 0x78000000
#define WRAPPER_HW_VERSION_MAJOR_VERSION_SHIFT 28 #define WRAPPER_HW_VERSION_MAJOR_VERSION_SHIFT 28
#define WRAPPER_HW_VERSION_MINOR_VERSION_MASK 0xfff0000 #define WRAPPER_HW_VERSION_MINOR_VERSION_MASK 0xfff0000
#define WRAPPER_HW_VERSION_MINOR_VERSION_SHIFT 16 #define WRAPPER_HW_VERSION_MINOR_VERSION_SHIFT 16
#define WRAPPER_HW_VERSION_STEP_VERSION_MASK 0xffff #define WRAPPER_HW_VERSION_STEP_VERSION_MASK 0xffff
#define WRAPPER_CLOCK_CONFIG (WRAPPER_BASE + 0x04) #define WRAPPER_CLOCK_CONFIG 0x04
#define WRAPPER_INTR_STATUS (WRAPPER_BASE + 0x0c) #define WRAPPER_INTR_STATUS 0x0c
#define WRAPPER_INTR_STATUS_A2HWD_MASK 0x10 #define WRAPPER_INTR_STATUS_A2HWD_MASK 0x10
#define WRAPPER_INTR_STATUS_A2HWD_SHIFT 0x4 #define WRAPPER_INTR_STATUS_A2HWD_SHIFT 0x4
#define WRAPPER_INTR_STATUS_A2H_MASK 0x4 #define WRAPPER_INTR_STATUS_A2H_MASK 0x4
#define WRAPPER_INTR_STATUS_A2H_SHIFT 0x2 #define WRAPPER_INTR_STATUS_A2H_SHIFT 0x2
#define WRAPPER_INTR_MASK (WRAPPER_BASE + 0x10) #define WRAPPER_INTR_MASK 0x10
#define WRAPPER_INTR_MASK_A2HWD_BASK 0x10 #define WRAPPER_INTR_MASK_A2HWD_BASK 0x10
#define WRAPPER_INTR_MASK_A2HWD_SHIFT 0x4 #define WRAPPER_INTR_MASK_A2HWD_SHIFT 0x4
#define WRAPPER_INTR_MASK_A2HVCODEC_MASK 0x8 #define WRAPPER_INTR_MASK_A2HVCODEC_MASK 0x8
...@@ -82,41 +84,41 @@ ...@@ -82,41 +84,41 @@
#define WRAPPER_INTR_MASK_A2HCPU_MASK 0x4 #define WRAPPER_INTR_MASK_A2HCPU_MASK 0x4
#define WRAPPER_INTR_MASK_A2HCPU_SHIFT 0x2 #define WRAPPER_INTR_MASK_A2HCPU_SHIFT 0x2
#define WRAPPER_INTR_CLEAR (WRAPPER_BASE + 0x14) #define WRAPPER_INTR_CLEAR 0x14
#define WRAPPER_INTR_CLEAR_A2HWD_MASK 0x10 #define WRAPPER_INTR_CLEAR_A2HWD_MASK 0x10
#define WRAPPER_INTR_CLEAR_A2HWD_SHIFT 0x4 #define WRAPPER_INTR_CLEAR_A2HWD_SHIFT 0x4
#define WRAPPER_INTR_CLEAR_A2H_MASK 0x4 #define WRAPPER_INTR_CLEAR_A2H_MASK 0x4
#define WRAPPER_INTR_CLEAR_A2H_SHIFT 0x2 #define WRAPPER_INTR_CLEAR_A2H_SHIFT 0x2
#define WRAPPER_POWER_STATUS (WRAPPER_BASE + 0x44) #define WRAPPER_POWER_STATUS 0x44
#define WRAPPER_VDEC_VCODEC_POWER_CONTROL (WRAPPER_BASE + 0x48) #define WRAPPER_VDEC_VCODEC_POWER_CONTROL 0x48
#define WRAPPER_VENC_VCODEC_POWER_CONTROL (WRAPPER_BASE + 0x4c) #define WRAPPER_VENC_VCODEC_POWER_CONTROL 0x4c
#define WRAPPER_VDEC_VENC_AHB_BRIDGE_SYNC_RESET (WRAPPER_BASE + 0x64) #define WRAPPER_VDEC_VENC_AHB_BRIDGE_SYNC_RESET 0x64
#define WRAPPER_CPU_CLOCK_CONFIG (WRAPPER_BASE + 0x2000) #define WRAPPER_CPU_CLOCK_CONFIG 0x2000
#define WRAPPER_CPU_AXI_HALT (WRAPPER_BASE + 0x2008) #define WRAPPER_CPU_AXI_HALT 0x2008
#define WRAPPER_CPU_AXI_HALT_HALT BIT(16) #define WRAPPER_CPU_AXI_HALT_HALT BIT(16)
#define WRAPPER_CPU_AXI_HALT_STATUS (WRAPPER_BASE + 0x200c) #define WRAPPER_CPU_AXI_HALT_STATUS 0x200c
#define WRAPPER_CPU_AXI_HALT_STATUS_IDLE BIT(24) #define WRAPPER_CPU_AXI_HALT_STATUS_IDLE BIT(24)
#define WRAPPER_CPU_CGC_DIS (WRAPPER_BASE + 0x2010) #define WRAPPER_CPU_CGC_DIS 0x2010
#define WRAPPER_CPU_STATUS (WRAPPER_BASE + 0x2014) #define WRAPPER_CPU_STATUS 0x2014
#define WRAPPER_CPU_STATUS_WFI BIT(0) #define WRAPPER_CPU_STATUS_WFI BIT(0)
#define WRAPPER_SW_RESET (WRAPPER_BASE + 0x3000) #define WRAPPER_SW_RESET 0x3000
#define WRAPPER_CPA_START_ADDR (WRAPPER_BASE + 0x1020) #define WRAPPER_CPA_START_ADDR 0x1020
#define WRAPPER_CPA_END_ADDR (WRAPPER_BASE + 0x1024) #define WRAPPER_CPA_END_ADDR 0x1024
#define WRAPPER_FW_START_ADDR (WRAPPER_BASE + 0x1028) #define WRAPPER_FW_START_ADDR 0x1028
#define WRAPPER_FW_END_ADDR (WRAPPER_BASE + 0x102C) #define WRAPPER_FW_END_ADDR 0x102C
#define WRAPPER_NONPIX_START_ADDR (WRAPPER_BASE + 0x1030) #define WRAPPER_NONPIX_START_ADDR 0x1030
#define WRAPPER_NONPIX_END_ADDR (WRAPPER_BASE + 0x1034) #define WRAPPER_NONPIX_END_ADDR 0x1034
#define WRAPPER_A9SS_SW_RESET (WRAPPER_BASE + 0x3000) #define WRAPPER_A9SS_SW_RESET 0x3000
#define WRAPPER_A9SS_SW_RESET_BIT BIT(4) #define WRAPPER_A9SS_SW_RESET_BIT BIT(4)
/* Venus 4xx */ /* Venus 4xx */
#define WRAPPER_VCODEC0_MMCC_POWER_STATUS (WRAPPER_BASE + 0x90) #define WRAPPER_VCODEC0_MMCC_POWER_STATUS 0x90
#define WRAPPER_VCODEC0_MMCC_POWER_CONTROL (WRAPPER_BASE + 0x94) #define WRAPPER_VCODEC0_MMCC_POWER_CONTROL 0x94
#define WRAPPER_VCODEC1_MMCC_POWER_STATUS (WRAPPER_BASE + 0x110) #define WRAPPER_VCODEC1_MMCC_POWER_STATUS 0x110
#define WRAPPER_VCODEC1_MMCC_POWER_CONTROL (WRAPPER_BASE + 0x114) #define WRAPPER_VCODEC1_MMCC_POWER_CONTROL 0x114
#endif #endif
...@@ -323,9 +323,9 @@ vcodec_control_v3(struct venus_core *core, u32 session_type, bool enable) ...@@ -323,9 +323,9 @@ vcodec_control_v3(struct venus_core *core, u32 session_type, bool enable)
void __iomem *ctrl; void __iomem *ctrl;
if (session_type == VIDC_SESSION_TYPE_DEC) if (session_type == VIDC_SESSION_TYPE_DEC)
ctrl = core->base + WRAPPER_VDEC_VCODEC_POWER_CONTROL; ctrl = core->wrapper_base + WRAPPER_VDEC_VCODEC_POWER_CONTROL;
else else
ctrl = core->base + WRAPPER_VENC_VCODEC_POWER_CONTROL; ctrl = core->wrapper_base + WRAPPER_VENC_VCODEC_POWER_CONTROL;
if (enable) if (enable)
writel(0, ctrl); writel(0, ctrl);
...@@ -401,11 +401,11 @@ static int vcodec_control_v4(struct venus_core *core, u32 coreid, bool enable) ...@@ -401,11 +401,11 @@ static int vcodec_control_v4(struct venus_core *core, u32 coreid, bool enable)
int ret; int ret;
if (coreid == VIDC_CORE_ID_1) { if (coreid == VIDC_CORE_ID_1) {
ctrl = core->base + WRAPPER_VCODEC0_MMCC_POWER_CONTROL; ctrl = core->wrapper_base + WRAPPER_VCODEC0_MMCC_POWER_CONTROL;
stat = core->base + WRAPPER_VCODEC0_MMCC_POWER_STATUS; stat = core->wrapper_base + WRAPPER_VCODEC0_MMCC_POWER_STATUS;
} else { } else {
ctrl = core->base + WRAPPER_VCODEC1_MMCC_POWER_CONTROL; ctrl = core->wrapper_base + WRAPPER_VCODEC1_MMCC_POWER_CONTROL;
stat = core->base + WRAPPER_VCODEC1_MMCC_POWER_STATUS; stat = core->wrapper_base + WRAPPER_VCODEC1_MMCC_POWER_STATUS;
} }
if (enable) { if (enable) {
......
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