diff options
author | Joel Stanley <joel@jms.id.au> | 2022-06-23 14:40:37 +0930 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-07-06 14:30:51 -0400 |
commit | 0a8bd97f883c554a4137b4f3a88d0d638c4d1b31 (patch) | |
tree | fc32a1e14a9a0c1f437ec9b075b522a2fa02a7b0 /drivers/reset/reset-ast2500.c | |
parent | b45768ebfe11109b995adc65ea7b5dc7228b7ed4 (diff) |
reset/aspeed: Implement status callback
The I2C driver shares a reset line between buses, so allow it to test
the state of the reset line before resetting it.
Signed-off-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Ryan Chen <ryan_chen@aspeedtech.com>
Diffstat (limited to 'drivers/reset/reset-ast2500.c')
-rw-r--r-- | drivers/reset/reset-ast2500.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/reset/reset-ast2500.c b/drivers/reset/reset-ast2500.c index 0a1dd236aff..d9cecf3a72e 100644 --- a/drivers/reset/reset-ast2500.c +++ b/drivers/reset/reset-ast2500.c @@ -48,6 +48,24 @@ static int ast2500_reset_deassert(struct reset_ctl *reset_ctl) return 0; } +static int ast2500_reset_status(struct reset_ctl *reset_ctl) +{ + struct ast2500_reset_priv *priv = dev_get_priv(reset_ctl->dev); + struct ast2500_scu *scu = priv->scu; + int status; + + debug("%s: reset_ctl->id: %lu\n", __func__, reset_ctl->id); + + if (reset_ctl->id < 32) + status = BIT(reset_ctl->id) & readl(&scu->sysreset_ctrl1); + else + status = BIT(reset_ctl->id - 32) & readl(&scu->sysreset_ctrl2); + + return !!status; +} + + + static int ast2500_reset_probe(struct udevice *dev) { int rc; @@ -79,6 +97,7 @@ static const struct udevice_id ast2500_reset_ids[] = { struct reset_ops ast2500_reset_ops = { .rst_assert = ast2500_reset_assert, .rst_deassert = ast2500_reset_deassert, + .rst_status = ast2500_reset_status, }; U_BOOT_DRIVER(ast2500_reset) = { |