PM / devfreq: exynos-bus: Suspend all devices on system shutdown
diff mbox series

Message ID 20190321090110.26506-1-m.szyprowski@samsung.com
State Not Applicable
Headers show
Series
  • PM / devfreq: exynos-bus: Suspend all devices on system shutdown
Related show

Commit Message

Marek Szyprowski March 21, 2019, 9:01 a.m. UTC
Force all Exynos buses to safe operation points before doing the system
reboot operation. There are board on which some aggressive power saving
operation points are behind the capabilities of the bootloader to properly
reset the hardware and boot the board. This way one can avoid board crash
early after reboot.

This fixes reboot issue on OdroidU3 board both with eMMC and SD boot.

Reported-by: Markus Reichl <m.reichl@fivetechno.de>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
This is an alternative to https://patchwork.kernel.org/patch/10781433/
limited only to Exynos-bus driver.
---
 drivers/devfreq/exynos-bus.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Chanwoo Choi March 21, 2019, 9:19 a.m. UTC | #1
Hi Marek,

On 19. 3. 21. 오후 6:01, Marek Szyprowski wrote:
> Force all Exynos buses to safe operation points before doing the system
> reboot operation. There are board on which some aggressive power saving
> operation points are behind the capabilities of the bootloader to properly
> reset the hardware and boot the board. This way one can avoid board crash
> early after reboot.
> 
> This fixes reboot issue on OdroidU3 board both with eMMC and SD boot.
> 
> Reported-by: Markus Reichl <m.reichl@fivetechno.de>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> This is an alternative to https://patchwork.kernel.org/patch/10781433/
> limited only to Exynos-bus driver.
> ---
>  drivers/devfreq/exynos-bus.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c
> index c25658b26598..486cc5b422f1 100644
> --- a/drivers/devfreq/exynos-bus.c
> +++ b/drivers/devfreq/exynos-bus.c
> @@ -514,6 +514,13 @@ static int exynos_bus_probe(struct platform_device *pdev)
>  	return ret;
>  }
>  
> +static void exynos_bus_shutdown(struct platform_device *pdev)
> +{
> +	struct exynos_bus *bus = dev_get_drvdata(&pdev->dev);
> +
> +	devfreq_suspend_device(bus->devfreq);
> +}
> +
>  #ifdef CONFIG_PM_SLEEP
>  static int exynos_bus_resume(struct device *dev)
>  {
> @@ -556,6 +563,7 @@ MODULE_DEVICE_TABLE(of, exynos_bus_of_match);
>  
>  static struct platform_driver exynos_bus_platdrv = {
>  	.probe		= exynos_bus_probe,
> +	.shutdown	= exynos_bus_shutdown,
>  	.driver = {
>  		.name	= "exynos-bus",
>  		.pm	= &exynos_bus_pm,
> 

Actually, I already agreed the previous patch.
Also, it looks good to me.

Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
Marek Szyprowski March 21, 2019, 9:29 a.m. UTC | #2
Hi Chanwoo,

On 2019-03-21 10:19, Chanwoo Choi wrote:
> On 19. 3. 21. 오후 6:01, Marek Szyprowski wrote:
>> Force all Exynos buses to safe operation points before doing the system
>> reboot operation. There are board on which some aggressive power saving
>> operation points are behind the capabilities of the bootloader to properly
>> reset the hardware and boot the board. This way one can avoid board crash
>> early after reboot.
>>
>> This fixes reboot issue on OdroidU3 board both with eMMC and SD boot.
>>
>> Reported-by: Markus Reichl <m.reichl@fivetechno.de>
>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
>> ---
>> This is an alternative to https://patchwork.kernel.org/patch/10781433/
>> limited only to Exynos-bus driver.
>> ---
>>   drivers/devfreq/exynos-bus.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c
>> index c25658b26598..486cc5b422f1 100644
>> --- a/drivers/devfreq/exynos-bus.c
>> +++ b/drivers/devfreq/exynos-bus.c
>> @@ -514,6 +514,13 @@ static int exynos_bus_probe(struct platform_device *pdev)
>>   	return ret;
>>   }
>>   
>> +static void exynos_bus_shutdown(struct platform_device *pdev)
>> +{
>> +	struct exynos_bus *bus = dev_get_drvdata(&pdev->dev);
>> +
>> +	devfreq_suspend_device(bus->devfreq);
>> +}
>> +
>>   #ifdef CONFIG_PM_SLEEP
>>   static int exynos_bus_resume(struct device *dev)
>>   {
>> @@ -556,6 +563,7 @@ MODULE_DEVICE_TABLE(of, exynos_bus_of_match);
>>   
>>   static struct platform_driver exynos_bus_platdrv = {
>>   	.probe		= exynos_bus_probe,
>> +	.shutdown	= exynos_bus_shutdown,
>>   	.driver = {
>>   		.name	= "exynos-bus",
>>   		.pm	= &exynos_bus_pm,
>>
> Actually, I already agreed the previous patch.
> Also, it looks good to me.

Yes, I know, but MyungJoo had some objections, that's why I prepared 
alternative version.

> Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
>
Best regards
MyungJoo Ham March 25, 2019, 4:38 a.m. UTC | #3
>Hi Chanwoo,
>
>On 2019-03-21 10:19, Chanwoo Choi wrote:
>> On 19. 3. 21. 오후 6:01, Marek Szyprowski wrote:
>>> Force all Exynos buses to safe operation points before doing the system
>>> reboot operation. There are board on which some aggressive power saving
>>> operation points are behind the capabilities of the bootloader to properly
>>> reset the hardware and boot the board. This way one can avoid board crash
>>> early after reboot.
>>>
>>> This fixes reboot issue on OdroidU3 board both with eMMC and SD boot.
>>>
>>> Reported-by: Markus Reichl <m.reichl@fivetechno.de>
>>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
>>> ---
>>> This is an alternative to https://patchwork.kernel.org/patch/10781433/
>>> limited only to Exynos-bus driver.
>>> ---
>>>   drivers/devfreq/exynos-bus.c | 8 ++++++++
>>>   1 file changed, 8 insertions(+)
>>>
>>> diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c
>>> index c25658b26598..486cc5b422f1 100644
>>> --- a/drivers/devfreq/exynos-bus.c
>>> +++ b/drivers/devfreq/exynos-bus.c
>>> @@ -514,6 +514,13 @@ static int exynos_bus_probe(struct platform_device *pdev)
>>>   	return ret;
>>>   }
>>>   
>>> +static void exynos_bus_shutdown(struct platform_device *pdev)
>>> +{
>>> +	struct exynos_bus *bus = dev_get_drvdata(&pdev->dev);
>>> +
>>> +	devfreq_suspend_device(bus->devfreq);
>>> +}
>>> +
>>>   #ifdef CONFIG_PM_SLEEP
>>>   static int exynos_bus_resume(struct device *dev)
>>>   {
>>> @@ -556,6 +563,7 @@ MODULE_DEVICE_TABLE(of, exynos_bus_of_match);
>>>   
>>>   static struct platform_driver exynos_bus_platdrv = {
>>>   	.probe		= exynos_bus_probe,
>>> +	.shutdown	= exynos_bus_shutdown,
>>>   	.driver = {
>>>   		.name	= "exynos-bus",
>>>   		.pm	= &exynos_bus_pm,
>>>
>> Actually, I already agreed the previous patch.
>> Also, it looks good to me.
>
>Yes, I know, but MyungJoo had some objections, that's why I prepared 
>alternative version.
>
>> Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
>>

This has become looking good now :)


Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>


Cheers,
MyungJoo

Patch
diff mbox series

diff --git a/drivers/devfreq/exynos-bus.c b/drivers/devfreq/exynos-bus.c
index c25658b26598..486cc5b422f1 100644
--- a/drivers/devfreq/exynos-bus.c
+++ b/drivers/devfreq/exynos-bus.c
@@ -514,6 +514,13 @@  static int exynos_bus_probe(struct platform_device *pdev)
 	return ret;
 }
 
+static void exynos_bus_shutdown(struct platform_device *pdev)
+{
+	struct exynos_bus *bus = dev_get_drvdata(&pdev->dev);
+
+	devfreq_suspend_device(bus->devfreq);
+}
+
 #ifdef CONFIG_PM_SLEEP
 static int exynos_bus_resume(struct device *dev)
 {
@@ -556,6 +563,7 @@  MODULE_DEVICE_TABLE(of, exynos_bus_of_match);
 
 static struct platform_driver exynos_bus_platdrv = {
 	.probe		= exynos_bus_probe,
+	.shutdown	= exynos_bus_shutdown,
 	.driver = {
 		.name	= "exynos-bus",
 		.pm	= &exynos_bus_pm,