Skip to content

Commit

Permalink
reset: starfive: Add StarFive JH7110 reset driver
Browse files Browse the repository at this point in the history
Add auxiliary driver to support StarFive JH7110 system
and always-on resets.

Signed-off-by: Hal Feng <hal.feng@starfivetech.com>
  • Loading branch information
hal-feng authored and intel-lab-lkp committed Dec 20, 2022
1 parent e307056 commit 01106ff
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/reset/starfive/Kconfig
Expand Up @@ -10,3 +10,11 @@ config RESET_STARFIVE_JH7100
default SOC_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 CLK_STARFIVE_JH7110_SYS
help
This enables the reset controller driver for the StarFive JH7110 SoC.
1 change: 1 addition & 0 deletions drivers/reset/starfive/Makefile
Expand Up @@ -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
64 changes: 64 additions & 0 deletions drivers/reset/starfive/reset-starfive-jh7110.c
@@ -0,0 +1,64 @@
// 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>

static int jh7110_reset_probe(struct auxiliary_device *adev,
const struct auxiliary_device_id *id)
{
struct reset_info *info = (struct reset_info *)(id->driver_data);
void __iomem *base = 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 reset_info jh7110_sys_info = {
.nr_resets = JH7110_SYSRST_END,
.assert_offset = 0x2F8,
.status_offset = 0x308,
};

static const struct reset_info jh7110_aon_info = {
.nr_resets = JH7110_AONRST_END,
.assert_offset = 0x38,
.status_offset = 0x3C,
};

static const struct auxiliary_device_id jh7110_reset_ids[] = {
{
.name = "clk_starfive_jh71x0.reset-sys",
.driver_data = (kernel_ulong_t)&jh7110_sys_info,
},
{
.name = "clk_starfive_jh71x0.reset-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 <hal.feng@starfivetech.com>");
MODULE_DESCRIPTION("StarFive JH7110 reset driver");
MODULE_LICENSE("GPL");
6 changes: 6 additions & 0 deletions drivers/reset/starfive/reset-starfive-jh71x0.h
Expand Up @@ -6,6 +6,12 @@
#ifndef __RESET_STARFIVE_JH71X0_H
#define __RESET_STARFIVE_JH71X0_H

struct reset_info {
unsigned int nr_resets;
unsigned int assert_offset;
unsigned int status_offset;
};

int reset_starfive_jh71x0_register(struct device *dev, struct device_node *of_node,
void __iomem *assert, void __iomem *status,
const u32 *asserted, unsigned int nr_resets,
Expand Down

0 comments on commit 01106ff

Please sign in to comment.