123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- From ea2f40c943f4a6d39a2f3ea4660266250d37c95a Mon Sep 17 00:00:00 2001
- From: Hal Feng <[email protected]>
- Date: Sat, 1 Apr 2023 19:19:27 +0800
- Subject: [PATCH 015/122] reset: starfive: Add StarFive JH7110 reset driver
- Add auxiliary driver to support StarFive JH7110 system
- and always-on resets.
- Tested-by: Tommaso Merciai <[email protected]>
- Reviewed-by: Emil Renner Berthing <[email protected]>
- Signed-off-by: Hal Feng <[email protected]>
- Signed-off-by: Conor Dooley <[email protected]>
- ---
- drivers/reset/starfive/Kconfig | 8 +++
- drivers/reset/starfive/Makefile | 1 +
- .../reset/starfive/reset-starfive-jh7110.c | 70 +++++++++++++++++++
- 3 files changed, 79 insertions(+)
- create mode 100644 drivers/reset/starfive/reset-starfive-jh7110.c
- --- a/drivers/reset/starfive/Kconfig
- +++ b/drivers/reset/starfive/Kconfig
- @@ -10,3 +10,11 @@ config RESET_STARFIVE_JH7100
- default ARCH_STARFIVE
- help
- This enables the reset controller driver for the StarFive JH7100 SoC.
- +
- +config RESET_STARFIVE_JH7110
- + bool "StarFive JH7110 Reset Driver"
- + depends on AUXILIARY_BUS && CLK_STARFIVE_JH7110_SYS
- + select RESET_STARFIVE_JH71X0
- + default ARCH_STARFIVE
- + help
- + This enables the reset controller driver for the StarFive JH7110 SoC.
- --- a/drivers/reset/starfive/Makefile
- +++ b/drivers/reset/starfive/Makefile
- @@ -2,3 +2,4 @@
- obj-$(CONFIG_RESET_STARFIVE_JH71X0) += reset-starfive-jh71x0.o
-
- obj-$(CONFIG_RESET_STARFIVE_JH7100) += reset-starfive-jh7100.o
- +obj-$(CONFIG_RESET_STARFIVE_JH7110) += reset-starfive-jh7110.o
- --- /dev/null
- +++ b/drivers/reset/starfive/reset-starfive-jh7110.c
- @@ -0,0 +1,70 @@
- +// SPDX-License-Identifier: GPL-2.0-or-later
- +/*
- + * Reset driver for the StarFive JH7110 SoC
- + *
- + * Copyright (C) 2022 StarFive Technology Co., Ltd.
- + */
- +
- +#include <linux/auxiliary_bus.h>
- +
- +#include "reset-starfive-jh71x0.h"
- +
- +#include <dt-bindings/reset/starfive,jh7110-crg.h>
- +
- +struct jh7110_reset_info {
- + unsigned int nr_resets;
- + unsigned int assert_offset;
- + unsigned int status_offset;
- +};
- +
- +static const struct jh7110_reset_info jh7110_sys_info = {
- + .nr_resets = JH7110_SYSRST_END,
- + .assert_offset = 0x2F8,
- + .status_offset = 0x308,
- +};
- +
- +static const struct jh7110_reset_info jh7110_aon_info = {
- + .nr_resets = JH7110_AONRST_END,
- + .assert_offset = 0x38,
- + .status_offset = 0x3C,
- +};
- +
- +static int jh7110_reset_probe(struct auxiliary_device *adev,
- + const struct auxiliary_device_id *id)
- +{
- + struct jh7110_reset_info *info = (struct jh7110_reset_info *)(id->driver_data);
- + void __iomem **base = (void __iomem **)dev_get_drvdata(adev->dev.parent);
- +
- + if (!info || !base)
- + return -ENODEV;
- +
- + return reset_starfive_jh71x0_register(&adev->dev, adev->dev.parent->of_node,
- + *base + info->assert_offset,
- + *base + info->status_offset,
- + NULL,
- + info->nr_resets,
- + NULL);
- +}
- +
- +static const struct auxiliary_device_id jh7110_reset_ids[] = {
- + {
- + .name = "clk_starfive_jh7110_sys.rst-sys",
- + .driver_data = (kernel_ulong_t)&jh7110_sys_info,
- + },
- + {
- + .name = "clk_starfive_jh7110_sys.rst-aon",
- + .driver_data = (kernel_ulong_t)&jh7110_aon_info,
- + },
- + { /* sentinel */ }
- +};
- +MODULE_DEVICE_TABLE(auxiliary, jh7110_reset_ids);
- +
- +static struct auxiliary_driver jh7110_reset_driver = {
- + .probe = jh7110_reset_probe,
- + .id_table = jh7110_reset_ids,
- +};
- +module_auxiliary_driver(jh7110_reset_driver);
- +
- +MODULE_AUTHOR("Hal Feng <[email protected]>");
- +MODULE_DESCRIPTION("StarFive JH7110 reset driver");
- +MODULE_LICENSE("GPL");
|