diff mbox

[v3,00/19] Exynos SYSMMU (IOMMU) integration with DT and DMA-mapping subsystem

Message ID 54B5B5F6.3030607@collabora.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Javier Martinez Canillas Jan. 14, 2015, 12:19 a.m. UTC
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]:

Comments

Javier Martinez Canillas Jan. 14, 2015, 12:24 a.m. UTC | #1
On 01/14/2015 01:19 AM, Javier Martinez Canillas wrote:
> 
> 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.
> 

This should be: "That error message is not shown when both clocks are disabled".

Best regards,
Javier
Joonyoung Shim Jan. 20, 2015, 11:12 a.m. UTC | #2
Hi,

On 01/14/2015 09:24 AM, Javier Martinez Canillas wrote:
> On 01/14/2015 01:19 AM, Javier Martinez Canillas wrote:
>>
>> 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
>>

Did you execute this operation repeatedly? Still i get error when i
execute this more than twice with your change [0].

Thanks.

>> 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.
>>
> 
> This should be: "That error message is not shown when both clocks are disabled".
> 
> Best regards,
> Javier
>
Javier Martinez Canillas Jan. 20, 2015, 2:05 p.m. UTC | #3
Hello Joonyoung,

On 01/20/2015 12:12 PM, Joonyoung Shim wrote:
>>>
>>> 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
>>>
> 
> Did you execute this operation repeatedly? Still i get error when i
> execute this more than twice with your change [0].
>

You mean that you are seeing the "Power domain power-domain disable failed"
message but the system is not crashing or that you are still having the
system crash?

I've seen the former when running multiple times but I have not seen the
crash when the hdmi clock is not disabled on hdmi_poweroff().

> Thanks.
>

Best regards,
Javier
diff mbox

Patch

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,