From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754936AbcGFNky (ORCPT ); Wed, 6 Jul 2016 09:40:54 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:25346 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754905AbcGFNkw (ORCPT ); Wed, 6 Jul 2016 09:40:52 -0400 X-AuditID: cbfec7f4-f796c6d000001486-62-577d0a603e68 Subject: Re: [PATCH v10 2/4] power: reset: add reboot mode driver To: Andy Yan , sre@kernel.org, robh+dt@kernel.org, heiko@sntech.de, john.stultz@linaro.org References: <1467811081-20700-1-git-send-email-andy.yan@rock-chips.com> <1467811646-20823-1-git-send-email-andy.yan@rock-chips.com> Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, jun.nie@linaro.org, matthias.bgg@gmail.com, moritz.fischer@ettus.com From: Krzysztof Kozlowski Message-id: <577D0A5F.8060907@samsung.com> Date: Wed, 06 Jul 2016 15:40:47 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-version: 1.0 In-reply-to: <1467811646-20823-1-git-send-email-andy.yan@rock-chips.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBLMWRmVeSWpSXmKPExsVy+t/xq7oJXLXhBtM3yVv0n7/JaDH/yDlW i/+PXrNanPmta7HkyUN2i9cvDC0u75rDZtHUYmxxpiHConXvEXaL07tLHLg9Zp7awu6xc9Zd do9NqzrZPO5c28Pm8XfWfhaPvi2rGD22X5vH7PF5k1wARxSXTUpqTmZZapG+XQJXxu/1/UwF 06Qq9h04xdrAuF20i5GTQ0LAROL5mYesELaYxIV769m6GLk4hASWMkpcbl3MBOE8Y5T493QS YxcjB4ewgKPE5tt5IA0iAqUSH352sEDUtDJKPDhwC6yBWaCFUeLvjKWMIFVsAsYSm5cvYQOx eQW0JHbMPM0EMohFQFVixjFrkLCoQITErO0/mCBKBCV+TL7HAmJzCnhI9La+ZgUpZxbQk7h/ UQskzCwgL7F5zVvmCYwCs5B0zEKomoWkagEj8ypG0dTS5ILipPRcQ73ixNzi0rx0veT83E2M kPj4soNx8TGrQ4wCHIxKPLwTnleHC7EmlhVX5h5ilOBgVhLh3cNRGy7Em5JYWZValB9fVJqT WnyIUZqDRUmcd+6u9yFCAumJJanZqakFqUUwWSYOTqkGRtvbASVnWC4F6PmvUr+1fI/q4Wmm d9g+dOp8klH+5/SyPorhzg+f9JU8it1ni2SvHPQM4OH8oDmlaf2Uu8sfzmZ80J/u7WCzfM3v wPe+/dE8J8TPnJTS188P3hS7Mr71D2fStff193Y8OJXLzulSKznH4c7O2LRG+VNCcj/W5ile 6vAv7xI9psRSnJFoqMVcVJwIAHor646LAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/06/2016 03:27 PM, Andy Yan wrote: > 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 some place like special register or sram, which can > be read by the bootloader after system reboot, then the bootloader > can take different action according to the mode stored. > > This is commonly used on Android based devices, in order to > reboot the device into fastboot or recovery mode. > > Reviewed-by: Matthias Brugger > Reviewed-by: Moritz Fischer > Tested-by: John Stultz > Acked-by: John Stultz > Signed-off-by: Andy Yan Argh, I responded to old email so again here: One minor whitespace issue at the end but beside that: Reviewed-by: Krzysztof Kozlowski (...) > diff --git a/drivers/power/reset/syscon-reboot-mode.c b/drivers/power/reset/syscon-reboot-mode.c > new file mode 100644 > index 0000000..22e0685 > --- /dev/null > +++ b/drivers/power/reset/syscon-reboot-mode.c > @@ -0,0 +1,100 @@ > +/* > + * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include "reboot-mode.h" > + > +struct syscon_reboot_mode { > + struct regmap *map; > + struct reboot_mode_driver reboot; > + u32 offset; > + u32 mask; > +}; > + > +static int syscon_reboot_mode_write(struct reboot_mode_driver *reboot, > + unsigned int magic) > +{ > + struct syscon_reboot_mode *syscon_rbm; > + int ret; > + > + syscon_rbm = container_of(reboot, struct syscon_reboot_mode, reboot); > + > + ret = regmap_update_bits(syscon_rbm->map, syscon_rbm->offset, > + syscon_rbm->mask, magic); > + if (ret < 0) > + dev_err(reboot->dev, "update reboot mode bits failed\n"); > + > + return ret; > +} > + > +static int syscon_reboot_mode_probe(struct platform_device *pdev) > +{ > + int ret; > + struct syscon_reboot_mode *syscon_rbm; > + > + syscon_rbm = devm_kzalloc(&pdev->dev, sizeof(*syscon_rbm), GFP_KERNEL); > + if (!syscon_rbm) > + return -ENOMEM; > + > + syscon_rbm->reboot.dev = &pdev->dev; > + syscon_rbm->reboot.write = syscon_reboot_mode_write; > + syscon_rbm->mask = 0xffffffff; > + > + dev_set_drvdata(&pdev->dev, syscon_rbm); > + > + syscon_rbm->map = syscon_node_to_regmap(pdev->dev.parent->of_node); > + if (IS_ERR(syscon_rbm->map)) > + return PTR_ERR(syscon_rbm->map); > + > + if (of_property_read_u32(pdev->dev.of_node, "offset", > + &syscon_rbm->offset)) > + return -EINVAL; > + > + of_property_read_u32(pdev->dev.of_node, "mask", &syscon_rbm->mask); > + > + Just one new line. Best regards, Krzysztof