Hello Joonyoung, On 01/13/2015 06:24 AM, Joonyoung Shim wrote: >> >> Yes, I was not able to trigger that by running modetest but by turning off >> my HDMI monitor and then turning it on again. When the monitor is turned >> on then I see a "Power domain power-domain disable failed" and the imprecise >> external abort error. >> >> I had to disable CONFIG_DRM_EXYNOS_DP in order to trigger though and that >> is why I was not able to reproduce it before. >> >> I think though that this is a separate issue of the HDMI not working since >> power domains should be able to have many consumers devices and I see that >> other power domains are used that way. >> > > OK, we need more investigation. > I dug further on this issue and found that the cause is that the exynos_mixer driver needs some clocks (CLK_HDMI and CLK_SCLK_HDMI) grabbed by exynos_hdmi to be kept enabled after hdmi_poweroff (drivers/gpu/drm/exynos/exynos_hdmi.c). Otherwise, any access to mixer device registers leads to an imprecise external abort error. The following change [0] to the Exynos DRM HDMI driver makes the issue to not happen and I can successfully execute: # echo 1 > /sys/devices/platform/exynos-drm/graphics/fb0/blank # echo 0 > /sys/devices/platform/exynos-drm/graphics/fb0/blank Only not disabling the hdmi clock [1]: is enough but doing so makes sometimes the DISP1 power domain disabling fails. It doesn't seem to have side effect though since I also see the signal in the HDMI display to go standby and then on again. # echo 0 > /sys/devices/platform/exynos-drm/graphics/fb0/blank # echo 1 > /sys/devices/platform/exynos-drm/graphics/fb0/blank [ 63.089080] Power domain disp1-power-domain disable failed # echo 0 > /sys/devices/platform/exynos-drm/graphics/fb0/blank # That error message when both clocks are not disabled on hdmi_poweroff() though. I tried different things like set parent of mixer clock to hdmi clock instead of aclk200_disp1 or make the Exynos DRM mixer driver to grab the hdmi clock from DT and prepare_enable from mixer_poweron() but in all cases the same imprecise external abort error was triggered by mixer_poweron() trying to access the mixer registers. Any ideas? Thanks a lot and best regards, Javier [0]: diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 5765a161abdd..0887911cfdd5 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -2084,8 +2084,8 @@ static void hdmi_poweroff(struct exynos_drm_display *display) cancel_delayed_work(&hdata->hotplug_work); - clk_disable_unprepare(res->sclk_hdmi); - clk_disable_unprepare(res->hdmi); /* reset pmu hdmiphy control bit to disable hdmiphy */ regmap_update_bits(hdata->pmureg, PMU_HDMI_PHY_CONTROL, [1]: diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 5765a161abdd..628bff96d543 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -2085,7 +2085,7 @@ static void hdmi_poweroff(struct exynos_drm_display *display) cancel_delayed_work(&hdata->hotplug_work); clk_disable_unprepare(res->sclk_hdmi); - clk_disable_unprepare(res->hdmi); /* reset pmu hdmiphy control bit to disable hdmiphy */ regmap_update_bits(hdata->pmureg, PMU_HDMI_PHY_CONTROL, -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html