2014-10-02 18:24:15

by Feng Kan

[permalink] [raw]
Subject: [PATCH 1/1] power: reset: corrections for simple syscon reboot driver

This patch is to fix some bugs in reboot driver. Which includes auto selection
of the MFD_SYSCON for the driver, use of container to locate restart handler,
correction of the count down failure timer and ordering of the header file.

Signed-off-by: Feng Kan <[email protected]>
---
drivers/power/reset/Kconfig | 3 ++-
drivers/power/reset/syscon-reboot.c | 25 ++++++++++---------------
2 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
index addb26a..3b451e1 100644
--- a/drivers/power/reset/Kconfig
+++ b/drivers/power/reset/Kconfig
@@ -120,6 +120,7 @@ config POWER_RESET_KEYSTONE

config POWER_RESET_SYSCON
bool "Generic SYSCON regmap reset driver"
- depends on POWER_RESET && MFD_SYSCON && OF
+ depends on POWER_RESET && OF
+ select MFD_SYSCON
help
Reboot support for generic SYSCON mapped register reset.
diff --git a/drivers/power/reset/syscon-reboot.c b/drivers/power/reset/syscon-reboot.c
index 948e0ee..90dfdbf 100644
--- a/drivers/power/reset/syscon-reboot.c
+++ b/drivers/power/reset/syscon-reboot.c
@@ -14,14 +14,15 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
+#include <linux/delay.h>
#include <linux/io.h>
-#include <linux/of_device.h>
-#include <linux/of_address.h>
-#include <linux/platform_device.h>
#include <linux/notifier.h>
#include <linux/mfd/syscon.h>
-#include <linux/regmap.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
#include <linux/reboot.h>
+#include <linux/regmap.h>

struct syscon_reboot_context {
struct regmap *map;
@@ -30,21 +31,17 @@ struct syscon_reboot_context {
struct notifier_block restart_handler;
};

-static struct syscon_reboot_context *syscon_reboot_ctx;
-
static int syscon_restart_handle(struct notifier_block *this,
unsigned long mode, void *cmd)
{
- struct syscon_reboot_context *ctx = syscon_reboot_ctx;
- unsigned long timeout;
+ struct syscon_reboot_context *ctx =
+ container_of(this, struct syscon_reboot_context,
+ restart_handler);

/* Issue the reboot */
- if (ctx->map)
- regmap_write(ctx->map, ctx->offset, ctx->mask);
+ regmap_write(ctx->map, ctx->offset, ctx->mask);

- timeout = jiffies + HZ;
- while (time_before(jiffies, timeout))
- cpu_relax();
+ mdelay(1000);

pr_emerg("Unable to restart system\n");
return NOTIFY_DONE;
@@ -76,8 +73,6 @@ static int syscon_reboot_probe(struct platform_device *pdev)
if (err)
dev_err(dev, "can't register restart notifier (err=%d)\n", err);

- syscon_reboot_ctx = ctx;
-
return 0;
}

--
1.9.1


2014-10-02 18:35:04

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH 1/1] power: reset: corrections for simple syscon reboot driver

On Thu, Oct 02, 2014 at 11:24:15AM -0700, Feng Kan wrote:
> This patch is to fix some bugs in reboot driver. Which includes auto selection
> of the MFD_SYSCON for the driver, use of container to locate restart handler,
> correction of the count down failure timer and ordering of the header file.
>
> Signed-off-by: Feng Kan <[email protected]>
> ---
> drivers/power/reset/Kconfig | 3 ++-
> drivers/power/reset/syscon-reboot.c | 25 ++++++++++---------------
> 2 files changed, 12 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
> index addb26a..3b451e1 100644
> --- a/drivers/power/reset/Kconfig
> +++ b/drivers/power/reset/Kconfig
> @@ -120,6 +120,7 @@ config POWER_RESET_KEYSTONE
>
> config POWER_RESET_SYSCON
> bool "Generic SYSCON regmap reset driver"
> - depends on POWER_RESET && MFD_SYSCON && OF
> + depends on POWER_RESET && OF
> + select MFD_SYSCON
> help
> Reboot support for generic SYSCON mapped register reset.
> diff --git a/drivers/power/reset/syscon-reboot.c b/drivers/power/reset/syscon-reboot.c
> index 948e0ee..90dfdbf 100644
> --- a/drivers/power/reset/syscon-reboot.c
> +++ b/drivers/power/reset/syscon-reboot.c
> @@ -14,14 +14,15 @@
> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> * GNU General Public License for more details.
> */
> +#include <linux/delay.h>
> #include <linux/io.h>
> -#include <linux/of_device.h>
> -#include <linux/of_address.h>
> -#include <linux/platform_device.h>
> #include <linux/notifier.h>
> #include <linux/mfd/syscon.h>
> -#include <linux/regmap.h>
> +#include <linux/of_address.h>
> +#include <linux/of_device.h>
> +#include <linux/platform_device.h>
> #include <linux/reboot.h>
> +#include <linux/regmap.h>
>
> struct syscon_reboot_context {
> struct regmap *map;
> @@ -30,21 +31,17 @@ struct syscon_reboot_context {
> struct notifier_block restart_handler;
> };
>
> -static struct syscon_reboot_context *syscon_reboot_ctx;
> -
> static int syscon_restart_handle(struct notifier_block *this,
> unsigned long mode, void *cmd)
> {
> - struct syscon_reboot_context *ctx = syscon_reboot_ctx;
> - unsigned long timeout;
> + struct syscon_reboot_context *ctx =
> + container_of(this, struct syscon_reboot_context,
> + restart_handler);
>
> /* Issue the reboot */
> - if (ctx->map)
> - regmap_write(ctx->map, ctx->offset, ctx->mask);
> + regmap_write(ctx->map, ctx->offset, ctx->mask);
>
> - timeout = jiffies + HZ;
> - while (time_before(jiffies, timeout))
> - cpu_relax();
> + mdelay(1000);
>
> pr_emerg("Unable to restart system\n");
> return NOTIFY_DONE;
> @@ -76,8 +73,6 @@ static int syscon_reboot_probe(struct platform_device *pdev)
> if (err)
> dev_err(dev, "can't register restart notifier (err=%d)\n", err);
>
> - syscon_reboot_ctx = ctx;
> -
> return 0;

Since the driver doesn't really do anything if the restart notifier registration
call fails, you might as well return err here.

Nitpick, really, especially since the function in reality never returns an error.

Reviewed-by: Guenter Roeck <[email protected]>

Thanks,
Guenter

2014-10-03 02:36:54

by Sebastian Reichel

[permalink] [raw]
Subject: Re: [PATCH 1/1] power: reset: corrections for simple syscon reboot driver

Hi,

On Thu, Oct 02, 2014 at 11:24:15AM -0700, Feng Kan wrote:
> This patch is to fix some bugs in reboot driver. Which includes auto selection
> of the MFD_SYSCON for the driver, use of container to locate restart handler,
> correction of the count down failure timer and ordering of the header file.
>
> Signed-off-by: Feng Kan <[email protected]>

Thanks, applied (incl. Guenter's latest suggestion):

http://git.infradead.org/battery-2.6.git/commit/afaebbdbd48ada5ead707d6a90ce4b604e1d77d4

-- Sebastian


Attachments:
(No filename) (504.00 B)
signature.asc (819.00 B)
Digital signature
Download all attachments