hwrng: rockchip: modify trng v2 to rkrng
The name "trng v2" is inaccurate and misleading, modify name to "rkrng". Use "rockchip,rkrng" instead of "rockchip,trngv2" as compatible. Change-Id: Ife35d1526777fee4b9f2158b30f48adce51e44a3 Signed-off-by: Lin Jinhan <troy.lin@rock-chips.com>
This commit is contained in:
@ -87,26 +87,26 @@
|
||||
#define TRNG_v1_VERSION_CODE 0x46bc
|
||||
/* end of TRNG_V1 register define */
|
||||
|
||||
/* start of TRNG V2 register define */
|
||||
#define TRNG_V2_CTRL 0x0010
|
||||
#define TRNG_V2_CTRL_INST_REQ BIT(0)
|
||||
#define TRNG_V2_CTRL_RESEED_REQ BIT(1)
|
||||
#define TRNG_V2_CTRL_TEST_REQ BIT(2)
|
||||
#define TRNG_V2_CTRL_SW_DRNG_REQ BIT(3)
|
||||
#define TRNG_V2_CTRL_SW_TRNG_REQ BIT(4)
|
||||
/* start of RKRNG register define */
|
||||
#define RKRNG_CTRL 0x0010
|
||||
#define RKRNG_CTRL_INST_REQ BIT(0)
|
||||
#define RKRNG_CTRL_RESEED_REQ BIT(1)
|
||||
#define RKRNG_CTRL_TEST_REQ BIT(2)
|
||||
#define RKRNG_CTRL_SW_DRNG_REQ BIT(3)
|
||||
#define RKRNG_CTRL_SW_TRNG_REQ BIT(4)
|
||||
|
||||
#define TRNG_V2_STATE 0x0014
|
||||
#define TRNG_V2_STATE_INST_ACK BIT(0)
|
||||
#define TRNG_V2_STATE_RESEED_ACK BIT(1)
|
||||
#define TRNG_V2_STATE_TEST_ACK BIT(2)
|
||||
#define TRNG_V2_STATE_SW_DRNG_ACK BIT(3)
|
||||
#define TRNG_V2_STATE_SW_TRNG_ACK BIT(4)
|
||||
#define RKRNG_STATE 0x0014
|
||||
#define RKRNG_STATE_INST_ACK BIT(0)
|
||||
#define RKRNG_STATE_RESEED_ACK BIT(1)
|
||||
#define RKRNG_STATE_TEST_ACK BIT(2)
|
||||
#define RKRNG_STATE_SW_DRNG_ACK BIT(3)
|
||||
#define RKRNG_STATE_SW_TRNG_ACK BIT(4)
|
||||
|
||||
/* DRNG_DATA_0 ~ DNG_DATA_7 */
|
||||
#define TRNG_V2_DRNG_DATA_0 0x0070
|
||||
#define TRNG_V2_DRNG_DATA_7 0x008C
|
||||
#define RKRNG_DRNG_DATA_0 0x0070
|
||||
#define RKRNG_DRNG_DATA_7 0x008C
|
||||
|
||||
/* end of TRNG V2 register define */
|
||||
/* end of RKRNG register define */
|
||||
|
||||
struct rk_rng_soc_data {
|
||||
u32 default_offset;
|
||||
@ -199,7 +199,7 @@ static void rk_rng_read_regs(struct rk_rng *rng, u32 offset, void *buf,
|
||||
*(u32 *)(buf + i) = be32_to_cpu(rk_rng_readl(rng, offset + i));
|
||||
}
|
||||
|
||||
static int rk_crypto_v1_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
static int crypto_v1_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 reg_ctrl = 0;
|
||||
@ -232,7 +232,7 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rk_crypto_v2_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
static int crypto_v2_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 reg_ctrl = 0;
|
||||
@ -267,7 +267,7 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rk_trng_v1_init(struct hwrng *rng)
|
||||
static int trng_v1_init(struct hwrng *rng)
|
||||
{
|
||||
int ret;
|
||||
uint32_t auto_reseed_cnt = 1000;
|
||||
@ -315,7 +315,7 @@ exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rk_trng_v1_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
static int trng_v1_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 reg_ctrl = 0;
|
||||
@ -358,92 +358,92 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rk_trng_v2_init(struct hwrng *rng)
|
||||
static int rkrng_init(struct hwrng *rng)
|
||||
{
|
||||
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
u32 reg = 0;
|
||||
|
||||
rk_rng_writel(rk_rng, HIWORD_UPDATE(0, 0xffff, 0), TRNG_V2_CTRL);
|
||||
rk_rng_writel(rk_rng, HIWORD_UPDATE(0, 0xffff, 0), RKRNG_CTRL);
|
||||
|
||||
reg = rk_rng_readl(rk_rng, TRNG_V2_STATE);
|
||||
rk_rng_writel(rk_rng, reg, TRNG_V2_STATE);
|
||||
reg = rk_rng_readl(rk_rng, RKRNG_STATE);
|
||||
rk_rng_writel(rk_rng, reg, RKRNG_STATE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rk_trng_v2_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
static int rkrng_read(struct hwrng *rng, void *buf, size_t max, bool wait)
|
||||
{
|
||||
struct rk_rng *rk_rng = container_of(rng, struct rk_rng, rng);
|
||||
u32 reg_ctrl = 0;
|
||||
int ret;
|
||||
|
||||
reg_ctrl = TRNG_V2_CTRL_SW_DRNG_REQ;
|
||||
reg_ctrl = RKRNG_CTRL_SW_DRNG_REQ;
|
||||
|
||||
rk_rng_writel(rk_rng, HIWORD_UPDATE(reg_ctrl, 0xffff, 0), TRNG_V2_CTRL);
|
||||
rk_rng_writel(rk_rng, HIWORD_UPDATE(reg_ctrl, 0xffff, 0), RKRNG_CTRL);
|
||||
|
||||
ret = readl_poll_timeout(rk_rng->mem + TRNG_V2_STATE, reg_ctrl,
|
||||
(reg_ctrl & TRNG_V2_STATE_SW_DRNG_ACK),
|
||||
ret = readl_poll_timeout(rk_rng->mem + RKRNG_STATE, reg_ctrl,
|
||||
(reg_ctrl & RKRNG_STATE_SW_DRNG_ACK),
|
||||
ROCKCHIP_POLL_PERIOD_US,
|
||||
ROCKCHIP_POLL_TIMEOUT_US);
|
||||
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
rk_rng_writel(rk_rng, reg_ctrl, TRNG_V2_STATE);
|
||||
rk_rng_writel(rk_rng, reg_ctrl, RKRNG_STATE);
|
||||
|
||||
ret = min_t(size_t, max, RK_MAX_RNG_BYTE);
|
||||
|
||||
rk_rng_read_regs(rk_rng, TRNG_V2_DRNG_DATA_0, buf, ret);
|
||||
rk_rng_read_regs(rk_rng, RKRNG_DRNG_DATA_0, buf, ret);
|
||||
|
||||
exit:
|
||||
/* close TRNG */
|
||||
rk_rng_writel(rk_rng, HIWORD_UPDATE(0, 0xffff, 0), TRNG_V2_CTRL);
|
||||
rk_rng_writel(rk_rng, HIWORD_UPDATE(0, 0xffff, 0), RKRNG_CTRL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct rk_rng_soc_data rk_crypto_v1_soc_data = {
|
||||
static const struct rk_rng_soc_data crypto_v1_soc_data = {
|
||||
.default_offset = 0,
|
||||
|
||||
.rk_rng_read = rk_crypto_v1_read,
|
||||
.rk_rng_read = crypto_v1_read,
|
||||
};
|
||||
|
||||
static const struct rk_rng_soc_data rk_crypto_v2_soc_data = {
|
||||
static const struct rk_rng_soc_data crypto_v2_soc_data = {
|
||||
.default_offset = CRYPTO_V2_RNG_DEFAULT_OFFSET,
|
||||
|
||||
.rk_rng_read = rk_crypto_v2_read,
|
||||
.rk_rng_read = crypto_v2_read,
|
||||
};
|
||||
|
||||
static const struct rk_rng_soc_data rk_trng_v1_soc_data = {
|
||||
static const struct rk_rng_soc_data trng_v1_soc_data = {
|
||||
.default_offset = 0,
|
||||
|
||||
.rk_rng_init = rk_trng_v1_init,
|
||||
.rk_rng_read = rk_trng_v1_read,
|
||||
.rk_rng_init = trng_v1_init,
|
||||
.rk_rng_read = trng_v1_read,
|
||||
};
|
||||
|
||||
static const struct rk_rng_soc_data rk_trng_v2_soc_data = {
|
||||
static const struct rk_rng_soc_data rkrng_soc_data = {
|
||||
.default_offset = 0,
|
||||
|
||||
.rk_rng_init = rk_trng_v2_init,
|
||||
.rk_rng_read = rk_trng_v2_read,
|
||||
.rk_rng_init = rkrng_init,
|
||||
.rk_rng_read = rkrng_read,
|
||||
};
|
||||
|
||||
static const struct of_device_id rk_rng_dt_match[] = {
|
||||
{
|
||||
.compatible = "rockchip,cryptov1-rng",
|
||||
.data = (void *)&rk_crypto_v1_soc_data,
|
||||
.data = (void *)&crypto_v1_soc_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,cryptov2-rng",
|
||||
.data = (void *)&rk_crypto_v2_soc_data,
|
||||
.data = (void *)&crypto_v2_soc_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,trngv1",
|
||||
.data = (void *)&rk_trng_v1_soc_data,
|
||||
.data = (void *)&trng_v1_soc_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,trngv2",
|
||||
.data = (void *)&rk_trng_v2_soc_data,
|
||||
.compatible = "rockchip,rkrng",
|
||||
.data = (void *)&rkrng_soc_data,
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user