Skip to content

Commit d65076d

Browse files
GuEe-GUIRbb666
authored andcommitted
[bsp][rockchip] support RK3528
1. CLK for RK3528 2. Pinctrl for RK3528 3. hwrng for RK-RNG 4. OTP for RK3528 5. TSADC for RK3528 Signed-off-by: GuEe-GUI <2991707448@qq.com>
1 parent e41c7cc commit d65076d

File tree

15 files changed

+2332
-30
lines changed

15 files changed

+2332
-30
lines changed

bsp/rockchip/dm/adc/adc-rockchip_saradc.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,23 @@ static const struct rockchip_saradc_soc_data rk3399_saradc_data =
223223
.power_down = rockchip_saradc_power_down_v1,
224224
};
225225

226+
static const struct saradc_channel rockchip_rk3528_channels[] =
227+
{
228+
SARADC_CHANNEL(0, "adc0", 10),
229+
SARADC_CHANNEL(1, "adc1", 10),
230+
SARADC_CHANNEL(2, "adc2", 10),
231+
SARADC_CHANNEL(3, "adc3", 10),
232+
};
233+
234+
static const struct rockchip_saradc_soc_data rk3528_saradc_data =
235+
{
236+
.channels = rockchip_rk3528_channels,
237+
.num_channels = RT_ARRAY_SIZE(rockchip_rk3528_channels),
238+
.clk_rate = 1000000,
239+
.start = rockchip_saradc_start_v2,
240+
.read = rockchip_saradc_read_v2,
241+
};
242+
226243
static const struct saradc_channel rk3568_saradc_channels[] =
227244
{
228245
SARADC_CHANNEL(0, "adc0", 10),
@@ -503,6 +520,7 @@ static const struct rt_ofw_node_id rockchip_saradc_ofw_ids[] =
503520
{ .compatible = "rockchip,saradc", .data = &saradc_data },
504521
{ .compatible = "rockchip,rk3066-tsadc", .data = &rk3066_tsadc_data },
505522
{ .compatible = "rockchip,rk3399-saradc", .data = &rk3399_saradc_data },
523+
{ .compatible = "rockchip,rk3528-saradc", .data = &rk3528_saradc_data, },
506524
{ .compatible = "rockchip,rk3568-saradc", .data = &rk3568_saradc_data },
507525
{ .compatible = "rockchip,rk3588-saradc", .data = &rk3588_saradc_data, },
508526
{ /* sentinel */ }

bsp/rockchip/dm/clk/Kconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ config RT_CLK_ROCKCHIP_RK3308
2020
depends on RT_CLK_ROCKCHIP
2121
default n
2222

23+
config RT_CLK_ROCKCHIP_RK3528
24+
bool "Rockchip RK3528 clock controller support"
25+
depends on RT_CLK_ROCKCHIP
26+
default n
27+
2328
config RT_CLK_ROCKCHIP_RK3568
2429
bool "Rockchip RK3568 clock controller support"
2530
depends on RT_CLK_ROCKCHIP

bsp/rockchip/dm/clk/SConscript

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ if GetDepend(['RT_CLK_ROCKCHIP']):
1919
if GetDepend(['RT_CLK_ROCKCHIP_RK3308']):
2020
src += ['clk-rk3308.c']
2121

22+
if GetDepend(['RT_CLK_ROCKCHIP_RK3528']):
23+
src += ['clk-rk3528.c']
24+
2225
if GetDepend(['RT_CLK_ROCKCHIP_RK3568']):
2326
src += ['clk-rk3568.c']
2427

bsp/rockchip/dm/clk/clk-rk3528.c

Lines changed: 1131 additions & 0 deletions
Large diffs are not rendered by default.

bsp/rockchip/dm/hwcrypto/hw-rng-rockchip.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,25 @@
8686
#define TRNG_v1_VERSION_CODE 0x46bc
8787
/* end of TRNG_V1 register define */
8888

89+
/* start of RKRNG register define */
90+
#define RKRNG_CTRL 0x0010
91+
#define RKRNG_CTRL_INST_REQ RT_BIT(0)
92+
#define RKRNG_CTRL_RESEED_REQ RT_BIT(1)
93+
#define RKRNG_CTRL_TEST_REQ RT_BIT(2)
94+
#define RKRNG_CTRL_SW_DRNG_REQ RT_BIT(3)
95+
#define RKRNG_CTRL_SW_TRNG_REQ RT_BIT(4)
96+
97+
#define RKRNG_STATE 0x0014
98+
#define RKRNG_STATE_INST_ACK RT_BIT(0)
99+
#define RKRNG_STATE_RESEED_ACK RT_BIT(1)
100+
#define RKRNG_STATE_TEST_ACK RT_BIT(2)
101+
#define RKRNG_STATE_SW_DRNG_ACK RT_BIT(3)
102+
#define RKRNG_STATE_SW_TRNG_ACK RT_BIT(4)
103+
104+
/* DRNG_DATA_0 ~ DNG_DATA_7 */
105+
#define RKRNG_DRNG_DATA_0 0x0070
106+
#define RKRNG_DRNG_DATA_7 0x008C
107+
89108
struct rockchip_rng;
90109

91110
struct rockchip_rng_soc_data
@@ -319,6 +338,49 @@ static rt_uint32_t rockchip_trng_v1_read(struct rockchip_rng *rk_rng, void *buf,
319338
return res;
320339
}
321340

341+
static rt_err_t rkrng_init(struct rockchip_rng *rk_rng)
342+
{
343+
rt_uint32_t reg;
344+
345+
rockchip_rng_writel(rk_rng, HIWORD_UPDATE(0, 0xffff, 0), RKRNG_CTRL);
346+
reg = rockchip_rng_readl(rk_rng, RKRNG_STATE);
347+
rockchip_rng_writel(rk_rng, reg, RKRNG_STATE);
348+
349+
return 0;
350+
}
351+
352+
static rt_uint32_t rkrng_read(struct rockchip_rng *rk_rng, void *buf,
353+
rt_size_t max, rt_bool_t wait)
354+
{
355+
rt_err_t err;
356+
rt_uint32_t reg_ctrl = RKRNG_CTRL_SW_DRNG_REQ;
357+
358+
rockchip_rng_writel(rk_rng, HIWORD_UPDATE(reg_ctrl, 0xffff, 0), RKRNG_CTRL);
359+
360+
err = readl_poll_timeout(rk_rng->regs + RKRNG_STATE, reg_ctrl,
361+
(reg_ctrl & RKRNG_STATE_SW_DRNG_ACK),
362+
ROCKCHIP_POLL_PERIOD_US,
363+
ROCKCHIP_POLL_TIMEOUT_US);
364+
365+
if (err)
366+
{
367+
goto _exit;
368+
}
369+
370+
371+
rockchip_rng_writel(rk_rng, reg_ctrl, RKRNG_STATE);
372+
373+
err = rt_min_t(rt_size_t, max, RK_MAX_RNG_BYTE);
374+
375+
rockchip_rng_read_regs(rk_rng, RKRNG_DRNG_DATA_0, buf, err);
376+
377+
_exit:
378+
/* Close TRNG */
379+
rockchip_rng_writel(rk_rng, HIWORD_UPDATE(0, 0xffff, 0), RKRNG_CTRL);
380+
381+
return err;
382+
}
383+
322384
static rt_uint32_t rockchip_rng_read(struct rockchip_rng *rk_rng, void *buf,
323385
rt_size_t max, rt_bool_t wait)
324386
{
@@ -546,11 +608,19 @@ static const struct rockchip_rng_soc_data rk_trng_v1_soc_data =
546608
.read = rockchip_trng_v1_read,
547609
};
548610

611+
static const struct rockchip_rng_soc_data rkrng_soc_data =
612+
{
613+
.default_offset = 0,
614+
.init = rkrng_init,
615+
.read = rkrng_read,
616+
};
617+
549618
static const struct rt_ofw_node_id rockchip_rng_ofw_ids[] =
550619
{
551620
{ .compatible = "rockchip,cryptov1-rng", .data = &rk_crypto_v1_soc_data, },
552621
{ .compatible = "rockchip,cryptov2-rng", .data = &rk_crypto_v2_soc_data, },
553622
{ .compatible = "rockchip,trngv1", .data = &rk_trng_v1_soc_data, },
623+
{ .compatible = "rockchip,rkrng", .data = &rkrng_soc_data, },
554624
{ /* sentinel */ }
555625
};
556626

0 commit comments

Comments
 (0)