mirror of
https://github.com/openbsd/src.git
synced 2026-06-18 15:23:33 +02:00
Add RK3576 support.
ok dlg@
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: rkclock.c,v 1.98 2026/05/04 08:00:27 kettenis Exp $ */
|
||||
/* $OpenBSD: rkclock.c,v 1.99 2026/05/05 10:23:27 kettenis Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2017, 2018 Mark Kettenis <kettenis@openbsd.org>
|
||||
*
|
||||
@@ -4494,6 +4494,10 @@ rk3576_reset(void *cookie, uint32_t *cells, int on)
|
||||
reg = RK3576_PHPTOPCRU_SOFTRST_CON(1);
|
||||
bit = 8;
|
||||
break;
|
||||
case RK3576_SRST_H_TRNG_NS:
|
||||
reg = RK3576_SECURECRU_SOFTRST_CON(0);
|
||||
bit = 4;
|
||||
break;
|
||||
case RK3576_SRST_P_OTPC_NS:
|
||||
reg = RK3576_SECURECRU_SOFTRST_CON(0);
|
||||
bit = 8;
|
||||
|
||||
@@ -494,6 +494,7 @@
|
||||
#define RK3576_SRST_P_PCIE2_COMBOPHY1 419
|
||||
#define RK3576_SRST_PCIE0_PIPE_PHY 421
|
||||
#define RK3576_SRST_PCIE1_PIPE_PHY 422
|
||||
#define RK3576_SRST_H_TRNG_NS 424
|
||||
#define RK3576_SRST_P_OTPC_NS 425
|
||||
#define RK3576_SRST_OTPC_NS 426
|
||||
|
||||
|
||||
+51
-3
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: rkrng.c,v 1.8 2025/10/09 19:25:37 kettenis Exp $ */
|
||||
/* $OpenBSD: rkrng.c,v 1.9 2026/05/05 10:23:27 kettenis Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org>
|
||||
*
|
||||
@@ -56,6 +56,14 @@
|
||||
#define TRNG_SAMPLE_CNT 0x0404
|
||||
#define TRNG_DOUT_BASE 0x0410
|
||||
|
||||
/* RK3576 TRNG */
|
||||
#define RKRNG_CFG 0x0000
|
||||
#define RKRNG_CTRL 0x0010
|
||||
#define RKRNG_CTRL_REQ_TRNG ((1U << 4) << 16 | (1U << 4))
|
||||
#define RKRNG_STATE 0x0014
|
||||
#define RKRNG_STATE_TRNG_RDY (1U << 4)
|
||||
#define RKRNG_TRNG_DATA0 0x0050
|
||||
|
||||
/* RK3588 TRNG */
|
||||
#define TRNG_V1_CTRL 0x0000
|
||||
#define TRNG_V1_CTRL_NOP 0x00
|
||||
@@ -135,13 +143,23 @@ static const struct rkrng_v rkrnv_v2 = {
|
||||
.dout = TRNG_DOUT_BASE,
|
||||
};
|
||||
|
||||
void rkrng_rk3576_start(struct rkrng_softc *);
|
||||
int rkrng_rk3576_starting(struct rkrng_softc *);
|
||||
void rkrng_rk3576_stop(struct rkrng_softc *);
|
||||
|
||||
static const struct rkrng_v rkrnv_rk3576 = {
|
||||
.start = rkrng_rk3576_start,
|
||||
.starting = rkrng_rk3576_starting,
|
||||
.stop = rkrng_rk3576_stop,
|
||||
.dout = RKRNG_TRNG_DATA0,
|
||||
};
|
||||
|
||||
int rkrng_rk3588_init(struct rkrng_softc *);
|
||||
void rkrng_rk3588_start(struct rkrng_softc *);
|
||||
int rkrng_rk3588_starting(struct rkrng_softc *);
|
||||
void rkrng_rk3588_stop(struct rkrng_softc *);
|
||||
|
||||
static const struct rkrng_v rkrnv_rk3588 = {
|
||||
.version = 3,
|
||||
.init = rkrng_rk3588_init,
|
||||
.start = rkrng_rk3588_start,
|
||||
.starting = rkrng_rk3588_starting,
|
||||
@@ -160,6 +178,7 @@ rkrng_match(struct device *parent, void *match, void *aux)
|
||||
OF_is_compatible(faa->fa_node, "rockchip,rk3399-crypto") ||
|
||||
OF_is_compatible(faa->fa_node, "rockchip,cryptov2-rng") ||
|
||||
OF_is_compatible(faa->fa_node, "rockchip,rk3568-rng") ||
|
||||
OF_is_compatible(faa->fa_node, "rockchip,rk3576-rng") ||
|
||||
OF_is_compatible(faa->fa_node, "rockchip,rk3588-rng");
|
||||
}
|
||||
|
||||
@@ -177,6 +196,8 @@ rkrng_attach(struct device *parent, struct device *self, void *aux)
|
||||
else if (OF_is_compatible(faa->fa_node, "rockchip,cryptov2-rng") ||
|
||||
OF_is_compatible(faa->fa_node, "rockchip,rk3568-rng"))
|
||||
sc->sc_v = &rkrnv_v2;
|
||||
else if (OF_is_compatible(faa->fa_node, "rockchip,rk3576-rng"))
|
||||
sc->sc_v = &rkrnv_rk3576;
|
||||
else if (OF_is_compatible(faa->fa_node, "rockchip,rk3588-rng"))
|
||||
sc->sc_v = &rkrnv_rk3588;
|
||||
else {
|
||||
@@ -196,7 +217,13 @@ rkrng_attach(struct device *parent, struct device *self, void *aux)
|
||||
return;
|
||||
}
|
||||
|
||||
printf(": ver %u\n", sc->sc_v->version);
|
||||
if (sc->sc_v->version > 0)
|
||||
printf(": ver %u", sc->sc_v->version);
|
||||
printf("\n");
|
||||
|
||||
reset_assert_all(faa->fa_node);
|
||||
delay(2);
|
||||
reset_deassert_all(faa->fa_node);
|
||||
|
||||
clock_set_assigned(faa->fa_node);
|
||||
clock_enable_all(faa->fa_node);
|
||||
@@ -256,6 +283,27 @@ rkrng_v2_stop(struct rkrng_softc *sc)
|
||||
HWRITE4(sc, TRNG_CTL, (ctl_m << 16) | 0);
|
||||
}
|
||||
|
||||
void
|
||||
rkrng_rk3576_start(struct rkrng_softc *sc)
|
||||
{
|
||||
HWRITE4(sc, RKRNG_CTRL, RKRNG_CTRL_REQ_TRNG);
|
||||
}
|
||||
|
||||
int
|
||||
rkrng_rk3576_starting(struct rkrng_softc *sc)
|
||||
{
|
||||
if ((HREAD4(sc, RKRNG_STATE) & RKRNG_STATE_TRNG_RDY) == 0)
|
||||
return 1;
|
||||
|
||||
HWRITE4(sc, RKRNG_STATE, RKRNG_STATE_TRNG_RDY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
rkrng_rk3576_stop(struct rkrng_softc *sc)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
rkrng_rk3588_init(struct rkrng_softc *sc)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user