Commit 8cfc7fdd authored by Pankaj Dubey's avatar Pankaj Dubey Committed by Kukjin Kim

ARM: EXYNOS: move restart code into pmu driver

Let's register restart handler from PMU driver for restart
functionality. So that we can remove restart hooks from
machine specific file, and thus moving ahead when PMU moved
to driver folder, this functionality can be reused for ARM64
based Exynos SoC's.
Signed-off-by: default avatarPankaj Dubey <pankaj.dubey@samsung.com>
Acked-by: default avatarGuenter Roeck <linux@roeck-us.net>
Tested-by: default avatarVivek Gautam <gautam.vivek@samsung.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 5e6473f4
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H #ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H
#define __ARCH_ARM_MACH_EXYNOS_COMMON_H #define __ARCH_ARM_MACH_EXYNOS_COMMON_H
#include <linux/reboot.h>
#include <linux/of.h> #include <linux/of.h>
#define EXYNOS3250_SOC_ID 0xE3472000 #define EXYNOS3250_SOC_ID 0xE3472000
......
...@@ -137,11 +137,6 @@ static struct map_desc exynos5_iodesc[] __initdata = { ...@@ -137,11 +137,6 @@ static struct map_desc exynos5_iodesc[] __initdata = {
}, },
}; };
static void exynos_restart(enum reboot_mode mode, const char *cmd)
{
__raw_writel(0x1, pmu_base_addr + EXYNOS_SWRESET);
}
static struct platform_device exynos_cpuidle = { static struct platform_device exynos_cpuidle = {
.name = "exynos_cpuidle", .name = "exynos_cpuidle",
#ifdef CONFIG_ARM_EXYNOS_CPUIDLE #ifdef CONFIG_ARM_EXYNOS_CPUIDLE
...@@ -366,7 +361,6 @@ DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)") ...@@ -366,7 +361,6 @@ DT_MACHINE_START(EXYNOS_DT, "SAMSUNG EXYNOS (Flattened Device Tree)")
.init_machine = exynos_dt_machine_init, .init_machine = exynos_dt_machine_init,
.init_late = exynos_init_late, .init_late = exynos_init_late,
.dt_compat = exynos_dt_compat, .dt_compat = exynos_dt_compat,
.restart = exynos_restart,
.reserve = exynos_reserve, .reserve = exynos_reserve,
.dt_fixup = exynos_dt_fixup, .dt_fixup = exynos_dt_fixup,
MACHINE_END MACHINE_END
...@@ -11,8 +11,11 @@ ...@@ -11,8 +11,11 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/notifier.h>
#include <linux/reboot.h>
#include "exynos-pmu.h" #include "exynos-pmu.h"
...@@ -874,6 +877,13 @@ static void exynos5420_pmu_init(void) ...@@ -874,6 +877,13 @@ static void exynos5420_pmu_init(void)
pr_info("EXYNOS5420 PMU initialized\n"); pr_info("EXYNOS5420 PMU initialized\n");
} }
static int pmu_restart_notify(struct notifier_block *this,
unsigned long code, void *unused)
{
pmu_raw_writel(0x1, EXYNOS_SWRESET);
return NOTIFY_DONE;
}
static const struct exynos_pmu_data exynos3250_pmu_data = { static const struct exynos_pmu_data exynos3250_pmu_data = {
.pmu_config = exynos3250_pmu_config, .pmu_config = exynos3250_pmu_config,
...@@ -932,11 +942,20 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = { ...@@ -932,11 +942,20 @@ static const struct of_device_id exynos_pmu_of_device_ids[] = {
{ /*sentinel*/ }, { /*sentinel*/ },
}; };
/*
* Exynos PMU restart notifier, handles restart functionality
*/
static struct notifier_block pmu_restart_handler = {
.notifier_call = pmu_restart_notify,
.priority = 128,
};
static int exynos_pmu_probe(struct platform_device *pdev) static int exynos_pmu_probe(struct platform_device *pdev)
{ {
const struct of_device_id *match; const struct of_device_id *match;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *res; struct resource *res;
int ret;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
pmu_base_addr = devm_ioremap_resource(dev, res); pmu_base_addr = devm_ioremap_resource(dev, res);
...@@ -961,6 +980,10 @@ static int exynos_pmu_probe(struct platform_device *pdev) ...@@ -961,6 +980,10 @@ static int exynos_pmu_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, pmu_context); platform_set_drvdata(pdev, pmu_context);
ret = register_restart_handler(&pmu_restart_handler);
if (ret)
dev_warn(dev, "can't register restart handler err=%d\n", ret);
dev_dbg(dev, "Exynos PMU Driver probe done\n"); dev_dbg(dev, "Exynos PMU Driver probe done\n");
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment