Re: [PATCH 4/4] power: reset: syscon-reboot-mode: Add regmap dts-property support

From: Sebastian Reichel
Date: Fri Mar 06 2020 - 14:57:51 EST


Hi,

On Fri, Mar 06, 2020 at 04:03:41PM +0300, Sergey.Semin@xxxxxxxxxxxxxxxxxxxx wrote:
> From: Serge Semin <Sergey.Semin@xxxxxxxxxxxxxxxxxxxx>
>
> 'Reboot-mode'-type of devices are supposed to work in conjunction with
> 'reboot'-type devices. In particular Baikal-T1 SoC provides a special
> CCU_WDT_RCR register, which is preserved during any type of the CPU
> reset (standard and caused by a watchdog one). Since both of them are
> responsible for the system-wide operation and related with each other
> it would be better to place them at the same place in the dt hierarchy.
> In particular the best location would be the dt root node. Currently
> 'syscon-reboot' device node can be placed anywhere in a dtb as long as
> the corresponding device is created at the system boot-up procedure.
> While according to the corresponding bindings file 'system-boot-mode'
> should be represented as a sub-node of a "syscon", "simple-mfd" node.
> This isn't always suitable especially when the reboot-preserved
> register is provided by some device, which we don't want to declared
> as MFD. In this case it would be good to have the 'syscon-reboot-mode'
> node accepting the 'regmap' property with a phandle reference to the
> 'syscon' dt-node, in the same way the 'syscon-reboot' driver does.
> This is what this patch provides - it makes the driver to handle the
> optional 'regmap' property. In case if one isn't provided the
> previously implemented scheme is expected to be found in dtb.
>
> Moreover seeing current dt-interface implementation of the
> 'syscon-reboot', 'syscon-poweroff' and 'syscon-reboot-mode' drivers,
> they look more or less similar. All of them handle 'offset' and
> 'mask' dt-properties. While 'value' property is only acceptable
> by the 'syscon-reboot' and 'syscon-poweroff' driver, the 'mode-*'
> properties of 'syscon-reboot-mode' serve to the similar purpose.
> The only strong difference between them is the ability to get the
> syscon regmap from the 'regmap' property. By having this patch merged
> we'll have that difference eliminated, so the interfaces would look
> unified.
>
> Signed-off-by: Serge Semin <Sergey.Semin@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Alexey Malahov <Alexey.Malahov@xxxxxxxxxxxxxxxxxxxx>
> Cc: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> Cc: Paul Burton <paulburton@xxxxxxxxxx>
> Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx>
> ---

Acked-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>

-- Sebastian

> drivers/power/reset/syscon-reboot-mode.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/power/reset/syscon-reboot-mode.c b/drivers/power/reset/syscon-reboot-mode.c
> index e0772c9f70f7..f8f8218ae3ee 100644
> --- a/drivers/power/reset/syscon-reboot-mode.c
> +++ b/drivers/power/reset/syscon-reboot-mode.c
> @@ -40,6 +40,7 @@ static int syscon_reboot_mode_probe(struct platform_device *pdev)
> {
> int ret;
> struct syscon_reboot_mode *syscon_rbm;
> + struct regmap *map;
>
> syscon_rbm = devm_kzalloc(&pdev->dev, sizeof(*syscon_rbm), GFP_KERNEL);
> if (!syscon_rbm)
> @@ -49,9 +50,13 @@ static int syscon_reboot_mode_probe(struct platform_device *pdev)
> syscon_rbm->reboot.write = syscon_reboot_mode_write;
> syscon_rbm->mask = 0xffffffff;
>
> - syscon_rbm->map = syscon_node_to_regmap(pdev->dev.parent->of_node);
> - if (IS_ERR(syscon_rbm->map))
> - return PTR_ERR(syscon_rbm->map);
> + map = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "regmap");
> + if (IS_ERR(map)) {
> + map = syscon_node_to_regmap(pdev->dev.parent->of_node);
> + if (IS_ERR(map))
> + return PTR_ERR(map);
> + }
> + syscon_rbm->map = map;
>
> if (of_property_read_u32(pdev->dev.of_node, "offset",
> &syscon_rbm->offset))
> --
> 2.25.1
>

Attachment: signature.asc
Description: PGP signature