From: Vikash Garodia <vgarodia@codeaurora.org>
To: hverkuil@xs4all.nl, mchehab@kernel.org, robh@kernel.org,
mark.rutland@arm.com, andy.gross@linaro.org,
bjorn.andersson@linaro.org, stanimir.varbanov@linaro.org
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org,
devicetree@vger.kernel.org, vgarodia@codeaurora.org,
acourbot@chromium.org
Subject: [PATCH v2 2/5] media: venus: add a routine to set venus state
Date: Sat, 2 Jun 2018 01:56:05 +0530 [thread overview]
Message-ID: <1527884768-22392-3-git-send-email-vgarodia@codeaurora.org> (raw)
In-Reply-To: <1527884768-22392-1-git-send-email-vgarodia@codeaurora.org>
Add a new routine which abstracts the TZ call to
set the video hardware state.
Signed-off-by: Vikash Garodia <vgarodia@codeaurora.org>
---
drivers/media/platform/qcom/venus/core.h | 5 +++++
drivers/media/platform/qcom/venus/firmware.c | 28 +++++++++++++++++++++++++++
drivers/media/platform/qcom/venus/firmware.h | 1 +
drivers/media/platform/qcom/venus/hfi_venus.c | 13 ++++---------
4 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 85e66e2..e7bfb63 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -35,6 +35,11 @@ struct reg_val {
u32 value;
};
+enum tzbsp_video_state {
+ TZBSP_VIDEO_SUSPEND = 0,
+ TZBSP_VIDEO_RESUME
+};
+
struct venus_resources {
u64 dma_mask;
const struct freq_tbl *freq_tbl;
diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c
index 7d89b5a..b4664ed 100644
--- a/drivers/media/platform/qcom/venus/firmware.c
+++ b/drivers/media/platform/qcom/venus/firmware.c
@@ -53,6 +53,34 @@ static void venus_reset_hw(struct venus_core *core)
/* Bring Arm9 out of reset */
writel_relaxed(0, reg_base + WRAPPER_A9SS_SW_RESET);
}
+
+int venus_set_hw_state(enum tzbsp_video_state state, struct venus_core *core)
+{
+ int ret;
+ struct device *dev = core->dev;
+ void __iomem *reg_base = core->base;
+
+ switch (state) {
+ case TZBSP_VIDEO_SUSPEND:
+ if (qcom_scm_is_available())
+ ret = qcom_scm_set_remote_state(TZBSP_VIDEO_SUSPEND, 0);
+ else
+ writel_relaxed(1, reg_base + WRAPPER_A9SS_SW_RESET);
+ break;
+ case TZBSP_VIDEO_RESUME:
+ if (qcom_scm_is_available())
+ ret = qcom_scm_set_remote_state(TZBSP_VIDEO_RESUME, 0);
+ else
+ venus_reset_hw(core);
+ break;
+ default:
+ dev_err(dev, "invalid state\n");
+ break;
+ }
+ return ret;
+}
+EXPORT_SYMBOL_GPL(venus_set_hw_state);
+
int venus_boot(struct device *dev, const char *fwname)
{
const struct firmware *mdt;
diff --git a/drivers/media/platform/qcom/venus/firmware.h b/drivers/media/platform/qcom/venus/firmware.h
index 428efb5..1336729 100644
--- a/drivers/media/platform/qcom/venus/firmware.h
+++ b/drivers/media/platform/qcom/venus/firmware.h
@@ -18,5 +18,6 @@
int venus_boot(struct device *dev, const char *fwname);
int venus_shutdown(struct device *dev);
+int venus_set_hw_state(enum tzbsp_video_state, struct venus_core *core);
#endif
diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index f61d34b..797a9f5 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -19,7 +19,6 @@
#include <linux/interrupt.h>
#include <linux/iopoll.h>
#include <linux/kernel.h>
-#include <linux/qcom_scm.h>
#include <linux/slab.h>
#include "core.h"
@@ -27,6 +26,7 @@
#include "hfi_msgs.h"
#include "hfi_venus.h"
#include "hfi_venus_io.h"
+#include "firmware.h"
#define HFI_MASK_QHDR_TX_TYPE 0xff000000
#define HFI_MASK_QHDR_RX_TYPE 0x00ff0000
@@ -55,11 +55,6 @@
#define IFACEQ_VAR_LARGE_PKT_SIZE 512
#define IFACEQ_VAR_HUGE_PKT_SIZE (1024 * 12)
-enum tzbsp_video_state {
- TZBSP_VIDEO_STATE_SUSPEND = 0,
- TZBSP_VIDEO_STATE_RESUME
-};
-
struct hfi_queue_table_header {
u32 version;
u32 size;
@@ -574,7 +569,7 @@ static int venus_power_off(struct venus_hfi_device *hdev)
if (!hdev->power_enabled)
return 0;
- ret = qcom_scm_set_remote_state(TZBSP_VIDEO_STATE_SUSPEND, 0);
+ ret = venus_set_hw_state(TZBSP_VIDEO_SUSPEND, hdev->core);
if (ret)
return ret;
@@ -594,7 +589,7 @@ static int venus_power_on(struct venus_hfi_device *hdev)
if (hdev->power_enabled)
return 0;
- ret = qcom_scm_set_remote_state(TZBSP_VIDEO_STATE_RESUME, 0);
+ ret = venus_set_hw_state(TZBSP_VIDEO_RESUME, hdev->core);
if (ret)
goto err;
@@ -607,7 +602,7 @@ static int venus_power_on(struct venus_hfi_device *hdev)
return 0;
err_suspend:
- qcom_scm_set_remote_state(TZBSP_VIDEO_STATE_SUSPEND, 0);
+ venus_set_hw_state(TZBSP_VIDEO_SUSPEND, hdev->core);
err:
hdev->power_enabled = false;
return ret;
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2018-06-01 20:26 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-01 20:26 [PATCH v2 0/5] Venus updates - PIL Vikash Garodia
2018-06-01 20:26 ` [PATCH v2 1/5] media: venus: add a routine to reset ARM9 Vikash Garodia
2018-06-01 22:15 ` Stanimir Varbanov
2018-06-05 10:57 ` Vinod
2018-06-06 1:34 ` Alexandre Courbot
2018-07-04 8:35 ` Vikash Garodia
2018-06-22 23:15 ` Bjorn Andersson
2018-06-01 20:26 ` Vikash Garodia [this message]
2018-06-01 21:21 ` [PATCH v2 2/5] media: venus: add a routine to set venus state Jordan Crouse
2018-06-04 12:54 ` Tomasz Figa
2018-07-04 7:59 ` Vikash Garodia
2018-07-04 9:00 ` Tomasz Figa
2018-07-04 9:41 ` Vikash Garodia
2018-07-04 10:08 ` Tomasz Figa
2018-06-04 13:50 ` Stanimir Varbanov
2018-07-04 8:08 ` Vikash Garodia
2018-06-05 11:03 ` Vinod
2018-06-01 20:26 ` [PATCH v2 3/5] venus: add check to make scm calls Vikash Garodia
2018-06-01 21:22 ` Jordan Crouse
2018-06-04 12:58 ` Tomasz Figa
2018-06-22 23:19 ` Bjorn Andersson
2018-06-01 20:26 ` [PATCH v2 4/5] media: venus: add no TZ boot and shutdown routine Vikash Garodia
2018-06-01 21:30 ` Jordan Crouse
2018-06-04 13:09 ` Tomasz Figa
2018-06-01 20:26 ` [PATCH v2 5/5] venus: register separate driver for firmware device Vikash Garodia
2018-06-01 21:32 ` Jordan Crouse
2018-06-04 13:18 ` Tomasz Figa
2018-06-04 13:56 ` Stanimir Varbanov
2018-06-05 4:08 ` Tomasz Figa
2018-06-05 8:45 ` Stanimir Varbanov
2018-06-06 5:41 ` Tomasz Figa
2018-06-06 16:46 ` Bjorn Andersson
2018-06-05 21:07 ` Rob Herring
2018-06-06 4:46 ` Tomasz Figa
2018-06-06 12:53 ` Rob Herring
2018-06-06 13:03 ` Vikash Garodia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1527884768-22392-3-git-send-email-vgarodia@codeaurora.org \
--to=vgarodia@codeaurora.org \
--cc=acourbot@chromium.org \
--cc=andy.gross@linaro.org \
--cc=bjorn.andersson@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=hverkuil@xs4all.nl \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-soc@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mchehab@kernel.org \
--cc=robh@kernel.org \
--cc=stanimir.varbanov@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).