dt-bindings: clk: qcom: Add support for GPU GX GDSCR
PATCH 1/2 dt-bindings: clk: qcom: Add support for GPU GX GDSCR
In the cases where the GPU SW requires to use the GX GDSCR add support for the same.
--- include/dt-bindings/clock/qcom,gpucc-sc7180.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/dt-bindings/clock/qcom,gpucc-sc7180.h +2 -1
@@ -15,7 +15,8 @@#define GPU_CC_CXO_CLK 6#define GPU_CC_GMU_CLK_SRC 7 -/* CAM_CC GDSCRs */ +/* GPU_CC GDSCRs */ #define CX_GDSC 0 +#define GX_GDSC 1#endif
--
Qualcomm INDIA, on behalf of Qualcomm Innovation Center, Inc.is a member of the Code Aurora Forum, hosted by the Linux Foundation.
PATCH 2/2 clk: qcom: gpucc: Add support for GX GDSC for SC7180
Most of the time the CPU should not be touching the GX domain on the GPU
except for a very special use case when the CPU needs to force the GX headswitch off. Add a dummy enable function for the GX gdsc to simulate success so that the pm_runtime reference counting is correct.
--- drivers/clk/qcom/gpucc-sc7180.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+)
drivers/clk/qcom/gpucc-sc7180.c +37 -0
@@ -172,8 +172,45 @@ static struct gdsc cx_gdsc = { .flags = VOTABLE, }; +/* +* On SC7180 the GPU GX domain is *almost* entirely controlled by the GMU +* running in the CX domain so the CPU doesn't need to know anything about the +* GX domain EXCEPT.... +* +* Hardware constraints dictate that the GX be powered down before the CX. If +* the GMU crashes it could leave the GX on. In order to successfully bring back +* the device the CPU needs to disable the GX headswitch. There being no sane +* way to reach in and touch that register from deep inside the GPU driver we +* need to set up the infrastructure to be able to ensure that the GPU can +* ensure that the GX is off during this super special case. We do this by +* defining a GX gdsc with a dummy enable function and a "default" disable +* function. +* +* This allows us to attach with genpd_dev_pm_attach_by_name() in the GPU +* driver. During power up, nothing will happen from the CPU (and the GMU will +* power up normally but during power down this will ensure that the GX domain +* is *really* off - this gives us a semi standard way of doing what we need. +*/ +static int gx_gdsc_enable (struct generic_pm_domain *domain) +{ +/* Do nothing but give genpd the impression that we were successful */ +return 0 ; +} + +static struct gdsc gx_gdsc = { + .gdscr =0x100c , + .clamp_io_ctrl =0x1508 , + .pd = { + .name ="gpu_gx_gdsc" , + .power_on = gx_gdsc_enable, + }, + .pwrsts =PWRSTS_OFF_ON , + .flags =CLAMP_IO , +}; +static struct gdsc *gpu_cc_sc7180_gdscs[] = { [CX_GDSC ] = &cx_gdsc, + [GX_GDSC ] = &gx_gdsc, };static struct clk_regmap *gpu_cc_sc7180_clocks[] = {
--
Qualcomm INDIA, on behalf of Qualcomm Innovation Center, Inc.is a member of the Code Aurora Forum, hosted by the Linux Foundation.