[PATCH v2 2/3] reset: tenstorrent: Add reset controller for Atlantis

Philipp Zabel p.zabel at pengutronix.de
Fri Jan 23 05:00:31 PST 2026


On Do, 2026-01-22 at 16:36 -0600, Anirudh Srinivasan wrote:
> Adds Atlantis Reset Controller and auxiliary device definitions for
> reset to share same regmap interface as clock controller.
> 
> This version of the reset controller driver covers resets from the RCPU
> syscon.
> 
> Signed-off-by: Anirudh Srinivasan <asrinivasan at oss.tenstorrent.com>
> ---
>  MAINTAINERS                                |   2 +
>  drivers/reset/Kconfig                      |  11 ++
>  drivers/reset/Makefile                     |   1 +
>  drivers/reset/reset-tenstorrent-atlantis.c | 158 +++++++++++++++++++++++++++++
>  include/soc/tenstorrent/atlantis-syscon.h  |  26 +++++
>  5 files changed, 198 insertions(+)
> 
[...]
> diff --git a/drivers/reset/reset-tenstorrent-atlantis.c b/drivers/reset/reset-tenstorrent-atlantis.c
> new file mode 100644
> index 000000000000..2e7f09409f79
> --- /dev/null
> +++ b/drivers/reset/reset-tenstorrent-atlantis.c
> @@ -0,0 +1,158 @@
[...]
> +static int atlantis_reset_update(struct reset_controller_dev *rcdev,
> +				 unsigned long id, bool assert)
> +{
> +	unsigned int val;
> +	struct atlantis_reset_controller *rst =
> +		to_atlantis_reset_controller(rcdev);
> +	const struct atlantis_reset_data *data = &rst->data->reset_data[id];
> +	unsigned int mask = BIT(data->bit);
> +	struct regmap *regmap = rst->regmap;
> +
> +	if (data->active_low ^ assert)
> +		val = mask;
> +	else
> +		val = ~mask;

		val = 0;

The ~mask bits will be ignored anyway.

[...]
> diff --git a/include/soc/tenstorrent/atlantis-syscon.h b/include/soc/tenstorrent/atlantis-syscon.h
> new file mode 100644
> index 000000000000..2c6387e5c21a
> --- /dev/null
> +++ b/include/soc/tenstorrent/atlantis-syscon.h
> @@ -0,0 +1,26 @@
> +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
> +/*
> + * Copyright (c) 2026 Tenstorrent
> + */
> +#ifndef __SOC_ATLANTIS_SYSCON_H__
> +#define __SOC_ATLANTIS_SYSCON_H__
> +
> +#include <linux/bits.h>
> +#include <linux/types.h>

#include <linux/auxiliary_bus.h>

struct regmap;

> +
> +struct atlantis_ccu_adev {
> +	struct auxiliary_device adev;
> +	struct regmap *regmap;
> +};
> +
> +#define to_atlantis_ccu_adev(_adev) \
> +	container_of((_adev), struct atlantis_ccu_adev, adev)

Please use an inline function instead of a macro.

> +
> +/* RCPU Reset Register Offsets */
> +#define RCPU_BLK_RST_REG	0x001c
> +#define LSIO_BLK_RST_REG	0x0020
> +#define HSIO_BLK_RST_REG	0x000c
> +#define PCIE_SUBS_RST_REG	0x0000
> +#define MM_RSTN_REG		0x0014

Why not move these into reset-tenstorrent-atlantis.c, they are not part
of the interface between clock and reset drivers.

regards
Philipp



More information about the linux-riscv mailing list