|
@@ -532,6 +532,24 @@ static int venus_halt_axi(struct venus_hfi_device *hdev)
|
|
|
u32 val;
|
|
|
int ret;
|
|
|
|
|
|
+ if (IS_V4(hdev->core)) {
|
|
|
+ val = venus_readl(hdev, WRAPPER_CPU_AXI_HALT);
|
|
|
+ val |= WRAPPER_CPU_AXI_HALT_HALT;
|
|
|
+ venus_writel(hdev, WRAPPER_CPU_AXI_HALT, val);
|
|
|
+
|
|
|
+ ret = readl_poll_timeout(base + WRAPPER_CPU_AXI_HALT_STATUS,
|
|
|
+ val,
|
|
|
+ val & WRAPPER_CPU_AXI_HALT_STATUS_IDLE,
|
|
|
+ POLL_INTERVAL_US,
|
|
|
+ VBIF_AXI_HALT_ACK_TIMEOUT_US);
|
|
|
+ if (ret) {
|
|
|
+ dev_err(dev, "AXI bus port halt timeout\n");
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
/* Halt AXI and AXI IMEM VBIF Access */
|
|
|
val = venus_readl(hdev, VBIF_AXI_HALT_CTRL0);
|
|
|
val |= VBIF_AXI_HALT_CTRL0_HALT_REQ;
|