Files
u-boot/drivers/reset/reset-dra7.c
Marek Vasut 1fe34ada73 reset: dra7: Staticize and constify driver ops
Set the ops structure as static const. The structure is not accessible
from outside of this driver and is not going to be modified at runtime.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
2026-05-18 16:56:07 -06:00

85 lines
1.8 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Texas Instruments DRA7 reset driver
*
* Copyright (C) 2019 Texas Instruments Incorporated - https://www.ti.com/
* Author: Keerthy <j-keerthy@ti.com>
*/
#include <asm/io.h>
#include <dm.h>
#include <reset-uclass.h>
#include <dm/device_compat.h>
struct dra7_reset_priv {
u32 rstctrl;
u32 rstst;
u8 nreset;
};
static inline void dra7_reset_rmw(u32 addr, u32 value, u32 mask)
{
writel(((readl(addr) & (~mask)) | (value & mask)), addr);
}
static int dra7_reset_deassert(struct reset_ctl *reset_ctl)
{
struct dra7_reset_priv *priv = dev_get_priv(reset_ctl->dev);
int mask = 1 << reset_ctl->id;
if (reset_ctl->id < 0 || reset_ctl->id >= priv->nreset)
return -EINVAL;
dra7_reset_rmw(priv->rstctrl, 0x0, mask);
while ((readl(priv->rstst) & mask) != mask)
;
return 0;
}
static int dra7_reset_assert(struct reset_ctl *reset_ctl)
{
struct dra7_reset_priv *priv = dev_get_priv(reset_ctl->dev);
int mask = 1 << reset_ctl->id;
if (reset_ctl->id < 0 || reset_ctl->id >= priv->nreset)
return -EINVAL;
dra7_reset_rmw(priv->rstctrl, mask, 0x0);
return 0;
}
static const struct reset_ops dra7_reset_ops = {
.rst_assert = dra7_reset_assert,
.rst_deassert = dra7_reset_deassert,
};
static const struct udevice_id dra7_reset_ids[] = {
{ .compatible = "ti,dra7-reset" },
{ }
};
static int dra7_reset_probe(struct udevice *dev)
{
struct dra7_reset_priv *priv = dev_get_priv(dev);
priv->rstctrl = dev_read_addr(dev);
priv->rstst = priv->rstctrl + 0x4;
priv->nreset = dev_read_u32_default(dev, "ti,nresets", 1);
dev_info(dev, "dra7-reset successfully probed %s\n", dev->name);
return 0;
}
U_BOOT_DRIVER(dra7_reset) = {
.name = "dra7_reset",
.id = UCLASS_RESET,
.of_match = dra7_reset_ids,
.probe = dra7_reset_probe,
.ops = &dra7_reset_ops,
.priv_auto = sizeof(struct dra7_reset_priv),
};