clear-pkgs-linux-iot-lts2018/1017-media-intel-ipu4-Fix-I...

91 lines
3.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Meng Wei <wei.meng@intel.com>
Date: Mon, 11 Feb 2019 10:04:24 +0800
Subject: [PATCH] media: intel-ipu4: Fix IPC timeout in ipu buttress
authentication
IRQ for boot_load was not waited as require_resp is not set, causing
the next command failed to be received.
This patch add the response setting to make sure IPC procedure is
completed before sending new command.
Change-Id: I7bcac0ae2d984fc3a1609a5b64ea7eec3081cbf9
Tracked-On: PKT-1760
Tracked-On: OAM-73567
Signed-off-by: khaiwenn <khai.wen.ng@intel.com>
Signed-off-by: jinchung <jin.chung.teng@intel.com>
Signed-off-by: Meng Wei <wei.meng@intel.com>
---
drivers/media/pci/intel/ipu-buttress.c | 14 ++++++++++----
.../pci/intel/ipu4/ipu-platform-buttress-regs.h | 9 +++++++--
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/drivers/media/pci/intel/ipu-buttress.c b/drivers/media/pci/intel/ipu-buttress.c
index d19e965543c4..33a644924b43 100644
--- a/drivers/media/pci/intel/ipu-buttress.c
+++ b/drivers/media/pci/intel/ipu-buttress.c
@@ -368,11 +368,14 @@ EXPORT_SYMBOL_GPL(ipu_buttress_ipc_send_bulk);
static int
ipu_buttress_ipc_send(struct ipu_device *isp,
enum ipu_buttress_ipc_domain ipc_domain,
- u32 ipc_msg, u32 size)
+ u32 ipc_msg, u32 size, bool require_resp,
+ u32 expected_resp)
{
struct ipu_ipc_buttress_bulk_msg msg = {
.cmd = ipc_msg,
.cmd_size = size,
+ .require_resp = require_resp,
+ .expected_resp = expected_resp,
};
return ipu_buttress_ipc_send_bulk(isp, ipc_domain, &msg, 1);
@@ -875,7 +878,9 @@ int ipu_buttress_authenticate(struct ipu_device *isp)
*/
dev_info(&isp->pdev->dev, "Sending BOOT_LOAD to CSE\n");
rval = ipu_buttress_ipc_send(isp, IPU_BUTTRESS_IPC_CSE,
- BUTTRESS_IU2CSEDATA0_IPC_BOOT_LOAD, 1);
+ BUTTRESS_IU2CSEDATA0_IPC_BOOT_LOAD,
+ 1, 1,
+ BUTTRESS_CSE2IUDATA0_IPC_BOOT_LOAD_DONE);
if (rval) {
dev_err(&isp->pdev->dev, "CSE boot_load failed\n");
goto iunit_power_off;
@@ -930,8 +935,9 @@ int ipu_buttress_authenticate(struct ipu_device *isp)
*/
dev_info(&isp->pdev->dev, "Sending AUTHENTICATE_RUN to CSE\n");
rval = ipu_buttress_ipc_send(isp, IPU_BUTTRESS_IPC_CSE,
- BUTTRESS_IU2CSEDATA0_IPC_AUTHENTICATE_RUN,
- 1);
+ BUTTRESS_IU2CSEDATA0_IPC_AUTH_RUN,
+ 1, 1,
+ BUTTRESS_CSE2IUDATA0_IPC_AUTH_RUN_DONE);
if (rval) {
dev_err(&isp->pdev->dev, "CSE authenticate_run failed\n");
goto iunit_power_off;
diff --git a/drivers/media/pci/intel/ipu4/ipu-platform-buttress-regs.h b/drivers/media/pci/intel/ipu4/ipu-platform-buttress-regs.h
index ffd770c88198..34f2f7855089 100644
--- a/drivers/media/pci/intel/ipu4/ipu-platform-buttress-regs.h
+++ b/drivers/media/pci/intel/ipu4/ipu-platform-buttress-regs.h
@@ -212,10 +212,15 @@ enum {
#define BUTTRESS_REG_IU2CSEDATA0 0x104
#define BUTTRESS_IU2CSEDATA0_IPC_BOOT_LOAD 1
-#define BUTTRESS_IU2CSEDATA0_IPC_AUTHENTICATE_RUN 2
-#define BUTTRESS_IU2CSEDATA0_IPC_AUTHENTICATE_REPLACE 3
+#define BUTTRESS_IU2CSEDATA0_IPC_AUTH_RUN 2
+#define BUTTRESS_IU2CSEDATA0_IPC_AUTH_REPLACE 3
#define BUTTRESS_IU2CSEDATA0_IPC_UPDATE_SECURE_TOUCH 16
+#define BUTTRESS_CSE2IUDATA0_IPC_BOOT_LOAD_DONE 1
+#define BUTTRESS_CSE2IUDATA0_IPC_AUTH_RUN_DONE 2
+#define BUTTRESS_CSE2IUDATA0_IPC_AUTH_REPLACE_DONE 4
+#define BUTTRESS_CSE2IUDATA0_IPC_UPDATE_SECURE_TOUCH_DONE 16
+
#define BUTTRESS_REG_IU2CSECSR 0x108
#define BUTTRESS_IU2CSECSR_IPC_PEER_COMP_ACTIONS_RST_PHASE1 BIT(0)
--
https://clearlinux.org