Skip to content

Commit 037bb01

Browse files
RtkFPcaiyi_zhong
authored andcommitted
drivers: reset: add reset driver for RTS5817
Add reset driver for RTS5817 Signed-off-by: Darcy Lu <darcy_lu@realsil.com.cn>
1 parent 6ded4c1 commit 037bb01

File tree

7 files changed

+239
-0
lines changed

7 files changed

+239
-0
lines changed

drivers/reset/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ zephyr_library_sources_ifdef(CONFIG_RESET_NPCX reset_npcx.c)
1313
zephyr_library_sources_ifdef(CONFIG_RESET_NXP_SYSCON reset_lpc_syscon.c)
1414
zephyr_library_sources_ifdef(CONFIG_RESET_NXP_RSTCTL reset_nxp_rstctl.c)
1515
zephyr_library_sources_ifdef(CONFIG_RESET_MMIO reset_mmio.c)
16+
zephyr_library_sources_ifdef(CONFIG_RESET_RTS5817 reset_rts5817.c)

drivers/reset/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,6 @@ rsource "Kconfig.npcx"
3737
rsource "Kconfig.lpc_syscon"
3838
rsource "Kconfig.nxp_rstctl"
3939
rsource "Kconfig.mmio"
40+
rsource "Kconfig.rts5817"
4041

4142
endif # RESET

drivers/reset/Kconfig.rts5817

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Copyright (c) 2024 Realtek Semiconductor, Inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
config RESET_RTS5817
5+
bool "RTS5817 Reset Controller Driver"
6+
default y
7+
depends on DT_HAS_REALTEK_RTS5817_RESET_ENABLED
8+
help
9+
This option enables the reset controller driver for RTS5817.

drivers/reset/reset_rts5817.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright (c) 2024 Realtek Semiconductor, Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#define DT_DRV_COMPAT realtek_rts5817_reset
8+
9+
#include <zephyr/arch/cpu.h>
10+
#include <zephyr/device.h>
11+
#include <zephyr/devicetree.h>
12+
#include <zephyr/drivers/reset.h>
13+
#include "reset_rts5817.h"
14+
15+
struct reset_rts5817_config {
16+
uintptr_t base;
17+
};
18+
19+
static int reset_rts5817_status(const struct device *dev, uint32_t id, uint8_t *status)
20+
{
21+
const struct reset_rts5817_config *config = dev->config;
22+
23+
*status = !!sys_test_bit(config->base + R_SYS_FORCE_RST, id);
24+
25+
return 0;
26+
}
27+
28+
static int reset_rts5817_line_assert(const struct device *dev, uint32_t id)
29+
{
30+
const struct reset_rts5817_config *config = dev->config;
31+
32+
sys_set_bit(config->base + R_SYS_FORCE_RST, id);
33+
34+
return 0;
35+
}
36+
37+
static int reset_rts5817_line_deassert(const struct device *dev, uint32_t id)
38+
{
39+
const struct reset_rts5817_config *config = dev->config;
40+
41+
sys_clear_bit(config->base + R_SYS_FORCE_RST, id);
42+
43+
return 0;
44+
}
45+
46+
static int reset_rts5817_line_toggle(const struct device *dev, uint32_t id)
47+
{
48+
reset_rts5817_line_assert(dev, id);
49+
reset_rts5817_line_deassert(dev, id);
50+
51+
return 0;
52+
}
53+
54+
static const struct reset_driver_api reset_rts5817_driver_api = {
55+
.status = reset_rts5817_status,
56+
.line_assert = reset_rts5817_line_assert,
57+
.line_deassert = reset_rts5817_line_deassert,
58+
.line_toggle = reset_rts5817_line_toggle,
59+
};
60+
61+
static const struct reset_rts5817_config reset_rts5817_config = {
62+
.base = DT_INST_REG_ADDR(0),
63+
};
64+
65+
DEVICE_DT_INST_DEFINE(0, NULL, NULL, NULL, &reset_rts5817_config, PRE_KERNEL_1,
66+
CONFIG_RESET_INIT_PRIORITY, &reset_rts5817_driver_api);

drivers/reset/reset_rts5817.h

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
/*
2+
* Copyright (c) 2024 Realtek Semiconductor, Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef ZEPHYR_DRIVERS_RESET_RESET_RTS5817_REG_H_
8+
#define ZEPHYR_DRIVERS_RESET_RESET_RTS5817_REG_H_
9+
10+
#define SYSRST_BASE_ADDR 0x0
11+
#define R_SYS_FORCE_RST (SYSRST_BASE_ADDR + 0X0000)
12+
13+
/* Bits of R_SYS_FORCE_RST (0X0200) */
14+
15+
#define SYS_FORCE_RESET_BUS_OFFSET 0
16+
#define SYS_FORCE_RESET_BUS_BITS 1
17+
#define SYS_FORCE_RESET_BUS_MASK (((1 << 1) - 1) << 0)
18+
#define SYS_FORCE_RESET_BUS (SYS_FORCE_RESET_BUS_MASK)
19+
20+
#define SYS_FORCE_RESET_AES_OFFSET 1
21+
#define SYS_FORCE_RESET_AES_BITS 1
22+
#define SYS_FORCE_RESET_AES_MASK (((1 << 1) - 1) << 1)
23+
#define SYS_FORCE_RESET_AES (SYS_FORCE_RESET_AES_MASK)
24+
25+
#define SYS_FORCE_RESET_GE_OFFSET 2
26+
#define SYS_FORCE_RESET_GE_BITS 1
27+
#define SYS_FORCE_RESET_GE_MASK (((1 << 1) - 1) << 2)
28+
#define SYS_FORCE_RESET_GE (SYS_FORCE_RESET_GE_MASK)
29+
30+
#define SYS_FORCE_RESET_SHA_OFFSET 3
31+
#define SYS_FORCE_RESET_SHA_BITS 1
32+
#define SYS_FORCE_RESET_SHA_MASK (((1 << 1) - 1) << 3)
33+
#define SYS_FORCE_RESET_SHA (SYS_FORCE_RESET_SHA_MASK)
34+
35+
#define SYS_FORCE_RESET_SPI_CACHE_OFFSET 4
36+
#define SYS_FORCE_RESET_SPI_CACHE_BITS 1
37+
#define SYS_FORCE_RESET_SPI_CACHE_MASK (((1 << 1) - 1) << 4)
38+
#define SYS_FORCE_RESET_SPI_CACHE (SYS_FORCE_RESET_SPI_CACHE_MASK)
39+
40+
#define SYS_FORCE_RESET_SPI_SENSOR_OFFSET 5
41+
#define SYS_FORCE_RESET_SPI_SENSOR_BITS 1
42+
#define SYS_FORCE_RESET_SPI_SENSOR_MASK (((1 << 1) - 1) << 5)
43+
#define SYS_FORCE_RESET_SPI_SENSOR (SYS_FORCE_RESET_SPI_SENSOR_MASK)
44+
45+
#define SYS_FORCE_RESET_SPI_SSI_M_OFFSET 6
46+
#define SYS_FORCE_RESET_SPI_SSI_M_BITS 1
47+
#define SYS_FORCE_RESET_SPI_SSI_M_MASK (((1 << 1) - 1) << 6)
48+
#define SYS_FORCE_RESET_SPI_SSI_M (SYS_FORCE_RESET_SPI_SSI_M_MASK)
49+
50+
#define SYS_FORCE_RESET_SPI_SSI_S_OFFSET 7
51+
#define SYS_FORCE_RESET_SPI_SSI_S_BITS 1
52+
#define SYS_FORCE_RESET_SPI_SSI_S_MASK (((1 << 1) - 1) << 7)
53+
#define SYS_FORCE_RESET_SPI_SSI_S (SYS_FORCE_RESET_SPI_SSI_S_MASK)
54+
55+
#define SYS_FORCE_RESET_PKE_OFFSET 8
56+
#define SYS_FORCE_RESET_PKE_BITS 1
57+
#define SYS_FORCE_RESET_PKE_MASK (((1 << 1) - 1) << 8)
58+
#define SYS_FORCE_RESET_PKE (SYS_FORCE_RESET_PKE_MASK)
59+
60+
#define SYS_FORCE_RESET_I2C_OFFSET 9
61+
#define SYS_FORCE_RESET_I2C_BITS 1
62+
#define SYS_FORCE_RESET_I2C_MASK (((1 << 1) - 1) << 9)
63+
#define SYS_FORCE_RESET_I2C (SYS_FORCE_RESET_I2C_MASK)
64+
65+
#define SYS_FORCE_RESET_I2C0_OFFSET 10
66+
#define SYS_FORCE_RESET_I2C0_BITS 1
67+
#define SYS_FORCE_RESET_I2C0_MASK (((1 << 1) - 1) << 10)
68+
#define SYS_FORCE_RESET_I2C0 (SYS_FORCE_RESET_I2C0_MASK)
69+
70+
#define SYS_FORCE_RESET_I2C1_OFFSET 11
71+
#define SYS_FORCE_RESET_I2C1_BITS 1
72+
#define SYS_FORCE_RESET_I2C1_MASK (((1 << 1) - 1) << 11)
73+
#define SYS_FORCE_RESET_I2C1 (SYS_FORCE_RESET_I2C1_MASK)
74+
75+
#define SYS_FORCE_RESET_TRNG_OFFSET 12
76+
#define SYS_FORCE_RESET_TRNG_BITS 1
77+
#define SYS_FORCE_RESET_TRNG_MASK (((1 << 1) - 1) << 12)
78+
#define SYS_FORCE_RESET_TRNG (SYS_FORCE_RESET_TRNG_MASK)
79+
80+
#define SYS_FORCE_RESET_I2C_S_OFFSET 13
81+
#define SYS_FORCE_RESET_I2C_S_BITS 1
82+
#define SYS_FORCE_RESET_I2C_S_MASK (((1 << 1) - 1) << 13)
83+
#define SYS_FORCE_RESET_I2C_S (SYS_FORCE_RESET_I2C_S_MASK)
84+
85+
#define SYS_FORCE_RESET_UART0_OFFSET 14
86+
#define SYS_FORCE_RESET_UART0_BITS 1
87+
#define SYS_FORCE_RESET_UART0_MASK (((1 << 1) - 1) << 14)
88+
#define SYS_FORCE_RESET_UART0 (SYS_FORCE_RESET_UART0_MASK)
89+
90+
#define SYS_FORCE_RESET_UART1_OFFSET 15
91+
#define SYS_FORCE_RESET_UART1_BITS 1
92+
#define SYS_FORCE_RESET_UART1_MASK (((1 << 1) - 1) << 15)
93+
#define SYS_FORCE_RESET_UART1 (SYS_FORCE_RESET_UART1_MASK)
94+
95+
#define SYS_FORCE_RESET_PUF_OFFSET 16
96+
#define SYS_FORCE_RESET_PUF_BITS 1
97+
#define SYS_FORCE_RESET_PUF_MASK (((1 << 1) - 1) << 16)
98+
#define SYS_FORCE_RESET_PUF (SYS_FORCE_RESET_PUF_MASK)
99+
100+
#define SYS_FORCE_RESET_USB2_OFFSET 17
101+
#define SYS_FORCE_RESET_USB2_BITS 1
102+
#define SYS_FORCE_RESET_USB2_MASK (((1 << 1) - 1) << 17)
103+
#define SYS_FORCE_RESET_USB2 (SYS_FORCE_RESET_USB2_MASK)
104+
105+
#define SYS_FORCE_RESET_CK30M_OFFSET 18
106+
#define SYS_FORCE_RESET_CK30M_BITS 1
107+
#define SYS_FORCE_RESET_CK30M_MASK (((1 << 1) - 1) << 18)
108+
#define SYS_FORCE_RESET_CK30M (SYS_FORCE_RESET_CK30M_MASK)
109+
110+
#define SYS_FORCE_RESET_CK60M_OFFSET 19
111+
#define SYS_FORCE_RESET_CK60M_BITS 1
112+
#define SYS_FORCE_RESET_CK60M_MASK (((1 << 1) - 1) << 19)
113+
#define SYS_FORCE_RESET_CK60M (SYS_FORCE_RESET_CK60M_MASK)
114+
115+
#define SYS_FORCE_RESET_CK120M_OFFSET 20
116+
#define SYS_FORCE_RESET_CK120M_BITS 1
117+
#define SYS_FORCE_RESET_CK120M_MASK (((1 << 1) - 1) << 20)
118+
#define SYS_FORCE_RESET_CK120M (SYS_FORCE_RESET_CK120M_MASK)
119+
120+
#define USB2_PHY_FORCE_RESET_OFFSET 21
121+
#define USB2_PHY_FORCE_RESET_BITS 1
122+
#define USB2_PHY_FORCE_RESET_MASK (((1 << 1) - 1) << 21)
123+
#define USB2_PHY_FORCE_RESET (USB2_PHY_FORCE_RESET_MASK)
124+
125+
#define SYS_FORCE_RESET_SYS_OFFSET 22
126+
#define SYS_FORCE_RESET_SYS_BITS 1
127+
#define SYS_FORCE_RESET_SYS_MASK (((1 << 1) - 1) << 22)
128+
#define SYS_FORCE_RESET_SYS (SYS_FORCE_RESET_SYS_MASK)
129+
130+
#define SYS_FORCE_RESET_DPHY_OFFSET 23
131+
#define SYS_FORCE_RESET_DPHY_BITS 1
132+
#define SYS_FORCE_RESET_DPHY_MASK (((1 << 1) - 1) << 23)
133+
#define SYS_FORCE_RESET_DPHY (SYS_FORCE_RESET_DPHY_MASK)
134+
135+
#define SYS_FORCE_RESET_SPI_SSISLV_BUS_OFFSET 24
136+
#define SYS_FORCE_RESET_SPI_SSISLV_BUS_BITS 1
137+
#define SYS_FORCE_RESET_SPI_SSISLV_BUS_MASK (((1 << 1) - 1) << 24)
138+
#define SYS_FORCE_RESET_SPI_SSISLV_BUS (SYS_FORCE_RESET_SPI_SSISLV_BUS_MASK)
139+
140+
#endif /* ZEPHYR_DRIVERS_RESET_RESET_RTS5817_REG_H_ */

dts/arm/realtek/fingerprint/rts5817/rts5817_base.dtsi

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@
4848
#clock-cells = <1>;
4949
status = "disabled";
5050
};
51+
52+
reset: reset@40100200 {
53+
compatible = "realtek,rts5817-reset";
54+
reg = <0x40100200 0x100>;
55+
#reset-cells = <1>;
56+
status = "disabled";
57+
};
5158
};
5259
};
5360

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Copyright (c) 2024 Realtek Semiconductor, Inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
description: Realtek RTS5817 Peripheral reset controller
5+
6+
compatible: "realtek,rts5817-reset"
7+
8+
include: [reset-controller.yaml, base.yaml]
9+
10+
properties:
11+
"#reset-cells":
12+
const: 1
13+
14+
reset-cells:
15+
- id

0 commit comments

Comments
 (0)