[PATCH v3 04/12] reset: Add generic reset driver
Bin Meng
bmeng.cn at gmail.com
Tue Feb 4 12:06:03 CET 2020
Hi Sean,
On Mon, Feb 3, 2020 at 4:01 AM Sean Anderson <seanga2 at gmail.com> wrote:
>
> This patch adds a generic reset driver. It is designed to be useful when one has
> a register in a regmap which contains bits that reset other devices. I thought
> this seemed like a very generic use, so here is a generic driver. The overall
> structure has been modeled on the syscon-reboot driver.
>
> Signed-off-by: Sean Anderson <seanga2 at gmail.com>
> ---
> Changes for v3:
> - New
>
> .../reset/syscon-reset.txt | 36 +++++++++
> drivers/reset/Kconfig | 6 +-
> drivers/reset/Makefile | 1 +
> drivers/reset/reset-syscon.c | 79 +++++++++++++++++++
> 4 files changed, 121 insertions(+), 1 deletion(-)
> create mode 100644 doc/device-tree-bindings/reset/syscon-reset.txt
> create mode 100644 drivers/reset/reset-syscon.c
>
> diff --git a/doc/device-tree-bindings/reset/syscon-reset.txt b/doc/device-tree-bindings/reset/syscon-reset.txt
> new file mode 100644
> index 0000000000..47c1226567
> --- /dev/null
> +++ b/doc/device-tree-bindings/reset/syscon-reset.txt
> @@ -0,0 +1,36 @@
> +Generic SYSCON mapped register reset driver
> +
> +This is a generic reset driver using syscon to map the reset register.
> +The reset is generally performed with a write to the reset register
> +defined by the register map pointed by syscon reference plus the offset and
> +shifted by the reset specifier/
> +
> +To assert a reset on some device, the equivalent of the following operation is
> +performed, where reset_id is the reset specifier from the device's resets
> +property.
> +
> + if (BIT(reset_id) & mask)
> + regmap[offset][reset_id] = assert-high;
> +
> +Required properties:
> +- compatible: should contain "syscon-reset"
Shouldn't we follow the same generic "syscon-reboot" device bindings
defined in the Linux kernel?
See Documentation/devicetree/bindings/power/reset/syscon-reboot.yaml
> +- #reset-cells: must be 1
> +- regmap: this is phandle to the register map node
> +- offset: offset in the register map for the reboot register (in bytes)
> +
> +Optional properties:
> +- mask: accept only the reset specifiers defined by the mask (32 bit)
> +- assert-high: Bit to write when asserting a reset. Defaults to 1.
> +
> +Default will be little endian mode, 32 bit access only.
> +
> +Example:
> +
> + reset-controller {
> + compatible = "syscon-reset";
> + #reset-cells = <1>;
> + regmap = <&sysctl>;
> + offset = <0x20>;
> + mask = <0x27FFFFFF>;
> + assert-high = <0>;
> + };
> diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
> index 75ccd65799..759d659c82 100644
> --- a/drivers/reset/Kconfig
> +++ b/drivers/reset/Kconfig
> @@ -147,5 +147,9 @@ config RESET_IMX7
> default y
> help
> Support for reset controller on i.MX7/8 SoCs.
> -
nits: this line should not be deleted.
> +config RESET_SYSCON
> + bool "Enable generic syscon reset driver support"
> + depends on DM_RESET
> + help
> + Support generic syscon mapped register reset devices.
> endmenu
> diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
> index 0a044d5d8c..433f1eca54 100644
> --- a/drivers/reset/Makefile
> +++ b/drivers/reset/Makefile
> @@ -23,3 +23,4 @@ obj-$(CONFIG_RESET_MTMIPS) += reset-mtmips.o
> obj-$(CONFIG_RESET_SUNXI) += reset-sunxi.o
> obj-$(CONFIG_RESET_HISILICON) += reset-hisilicon.o
> obj-$(CONFIG_RESET_IMX7) += reset-imx7.o
> +obj-$(CONFIG_RESET_SYSCON) += reset-syscon.o
[snip]
Regards,
Bin
More information about the U-Boot
mailing list