Re: [PATCH v2] clk: qcom: mmcc-msm8998: fix venus clock issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/10/2024 5:13 AM, Marc Gonzalez wrote:
Video decoder (venus) was broken on msm8998.

PH found crude work-around:
Drop venus_sys_set_power_control() call.

Bryan suggested proper fix:
Set required register offsets in venus GDSC structs.
Set HW_CTRL flag.

GDSC = Globally Distributed Switch Controller

Use same code as mmcc-msm8996 with:
s/venus_gdsc/video_top_gdsc/
s/venus_core0_gdsc/video_subcore0_gdsc/
s/venus_core1_gdsc/video_subcore1_gdsc/

https://git.codelinaro.org/clo/la/kernel/msm-4.4/-/blob/caf_migration/kernel.lnx.4.4.r38-rel/include/dt-bindings/clock/msm-clocks-hwio-8996.h
https://git.codelinaro.org/clo/la/kernel/msm-4.4/-/blob/caf_migration/kernel.lnx.4.4.r38-rel/include/dt-bindings/clock/msm-clocks-hwio-8998.h

0x1024 = MMSS_VIDEO GDSCR (undocumented)
0x1028 = MMSS_VIDEO_CORE_CBCR
0x1030 = MMSS_VIDEO_AHB_CBCR
0x1034 = MMSS_VIDEO_AXI_CBCR
0x1038 = MMSS_VIDEO_MAXI_CBCR
0x1040 = MMSS_VIDEO_SUBCORE0 GDSCR (undocumented)
0x1044 = MMSS_VIDEO_SUBCORE1 GDSCR (undocumented)
0x1048 = MMSS_VIDEO_SUBCORE0_CBCR
0x104c = MMSS_VIDEO_SUBCORE1_CBCR

Reviewed the documentation, this is all correct.


Suggested-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
Signed-off-by: Marc Gonzalez <mgonzalez@xxxxxxxxxx>
---
  drivers/clk/qcom/mmcc-msm8998.c | 8 ++++++++
  1 file changed, 8 insertions(+)

diff --git a/drivers/clk/qcom/mmcc-msm8998.c b/drivers/clk/qcom/mmcc-msm8998.c
index 1180e48c687ac..275fb3b71ede4 100644
--- a/drivers/clk/qcom/mmcc-msm8998.c
+++ b/drivers/clk/qcom/mmcc-msm8998.c
@@ -2535,6 +2535,8 @@ static struct clk_branch vmem_ahb_clk = {
static struct gdsc video_top_gdsc = {
  	.gdscr = 0x1024,
+	.cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 },

Checked that these (and the ones below) have the proper bits in the documentation to support this. Sadly, the documentation does not mention using them, so I can't really tell if this is required or not.

+	.cxc_count = 3,
  	.pd = {
  		.name = "video_top",
  	},
@@ -2543,20 +2545,26 @@ static struct gdsc video_top_gdsc = {
static struct gdsc video_subcore0_gdsc = {
  	.gdscr = 0x1040,
+	.cxcs = (unsigned int []){ 0x1048 },
+	.cxc_count = 1,
  	.pd = {
  		.name = "video_subcore0",
  	},
  	.parent = &video_top_gdsc.pd,
  	.pwrsts = PWRSTS_OFF_ON,
+	.flags = HW_CTRL,
  };
static struct gdsc video_subcore1_gdsc = {
  	.gdscr = 0x1044,
+	.cxcs = (unsigned int []){ 0x104c },
+	.cxc_count = 1,
  	.pd = {
  		.name = "video_subcore1",
  	},
  	.parent = &video_top_gdsc.pd,
  	.pwrsts = PWRSTS_OFF_ON,
+	.flags = HW_CTRL,
  };
static struct gdsc mdss_gdsc = {

Overall, seems ok to me, but I did see Bjorn asking for some commit text edits which I agree with.




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux