On Wed, Apr 10, 2024 at 01:13:17PM +0200, Marc Gonzalez wrote: > Video decoder (venus) was broken on msm8998. Could you please express something about in what way it was broken, or how this manifested itself etc? > > PH found crude work-around: Would be nice if these names are spelled out, if you'd like to give credit to the individuals. > 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 > Would you mind providing me a Fixes tag as well? Thanks, Bjorn > 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 }, > + .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 = { > -- > 2.34.1 >