mbox series

[v1,0/4] Support MTK reboot mode driver

Message ID 1574746490-625-1-git-send-email-freddy.hsin@mediatek.com
Headers show
Series Support MTK reboot mode driver | expand

Message

Freddy.Hsin Nov. 26, 2019, 5:34 a.m. UTC
This driver parses the reboot commands like "reboot bootloader"
 and "reboot recovery" to get a boot mode described in the
 device tree , then call the write interfae to store the boot
 mode in mtk RGU (reset generation unit) non-volatile register,
 which can be read by the bootloader after system reboot, then
 the bootloader can take different action according to the mode
 stored.
 
 Freddy Hsin (4):
  power: reset: add reboot mode driver
  watchdog: populate reboot mode node in toprgu node of MTK RGU (Reset
    Generation Unit)
  soc: mediatek: add reboot-mode header
  dt-binding: power: reset: Add documentation for MTK RGU (Reset
    Gernation Unit) reboot driver

 .../devicetree/bindings/power/reset/mtk-reboot.txt |   30 +++++
 drivers/power/reset/Kconfig                        |   11 ++
 drivers/power/reset/Makefile                       |    1 +
 drivers/power/reset/mtk-reboot.c                   |  116 ++++++++++++++++++++
 drivers/watchdog/mtk_wdt.c                         |    3 +
 include/dt-bindings/soc/mediatek,boot-mode.h       |   17 +++
 6 files changed, 178 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/power/reset/mtk-reboot.txt
 create mode 100644 drivers/power/reset/mtk-reboot.c
 create mode 100644 include/dt-bindings/soc/mediatek,boot-mode.h

Comments

Guenter Roeck Nov. 26, 2019, 12:18 p.m. UTC | #1
On 11/25/19 9:34 PM, freddy.hsin@mediatek.com wrote:
> From: Freddy Hsin <freddy.hsin@mediatek.com>
> 
> of_platform_population should be added in the probe function of
> toprgu driver, or the reboot mode driver will not be probed
> 
> Signed-off-by: Freddy Hsin <freddy.hsin@mediatek.com>
> ---
>   drivers/watchdog/mtk_wdt.c |    3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
> index 9c3d003..2fb2614 100644
> --- a/drivers/watchdog/mtk_wdt.c
> +++ b/drivers/watchdog/mtk_wdt.c
> @@ -20,6 +20,7 @@
>   #include <linux/types.h>
>   #include <linux/watchdog.h>
>   #include <linux/delay.h>
> +#include <linux/of_platform.h>
>   
>   #define WDT_MAX_TIMEOUT		31
>   #define WDT_MIN_TIMEOUT		1
> @@ -167,6 +168,8 @@ static int mtk_wdt_probe(struct platform_device *pdev)
>   	if (IS_ERR(mtk_wdt->wdt_base))
>   		return PTR_ERR(mtk_wdt->wdt_base);
>   
> +	of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
> +

This seems just wrong. Such a driver should not be a child of the watchdog driver.

Guenter

>   	mtk_wdt->wdt_dev.info = &mtk_wdt_info;
>   	mtk_wdt->wdt_dev.ops = &mtk_wdt_ops;
>   	mtk_wdt->wdt_dev.timeout = WDT_MAX_TIMEOUT;
>