On Wed 12 Apr 14:15 PDT 2017, Jordan Crouse wrote: > diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c > index 6c55d24..0e2b00a 100644 > --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c > +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c > @@ -470,6 +470,55 @@ static int a5xx_ucode_init(struct msm_gpu *gpu) > return 0; > } > > +static int a5xx_zap_shader_resume(struct msm_gpu *gpu) > +{ > + int ret; > + > + ret = qcom_scm_set_remote_state(0, 13); Is 13 here the PAS_ID, or just a coincidence? And what is state 0? Can we have a define for this? > + if (ret) > + DRM_ERROR("%s: zap-shader resume failed: %d\n", > + gpu->name, ret); > + > + return ret; > +} > + > +static int a5xx_zap_shader_init(struct msm_gpu *gpu) > +{ > + static bool loaded; > + struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); > + struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu); > + struct platform_device *pdev = a5xx_gpu->pdev; > + struct device_node *node; > + int ret; > + > + /* > + * If the zap shader is already loaded into memory we just need to kick > + * the remote processor to reinitialize it > + */ > + if (loaded) > + return a5xx_zap_shader_resume(gpu); > + > + /* Populate the sub-nodes if they haven't already been done */ > + of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); As this is new code, there's little (no) value in doing this stepwise, just squash this with the later commits replacing this. > + > + /* Find the sub-node for the zap shader */ > + node = of_find_node_by_name(pdev->dev.of_node, "qcom,zap-shader"); > + if (!node) { > + DRM_ERROR("%s: qcom,zap-shader not found in device tree\n", > + gpu->name); > + return -ENODEV; > + } > + > + ret = _pil_tz_load_image(of_find_device_by_node(node)); > + if (ret) > + DRM_ERROR("%s: Unable to load the zap shader\n", > + gpu->name); > + > + loaded = !ret; > + > + return ret; > +} > + Regards, Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html