Lines Matching full:trng

61 	struct hisi_trng *trng;
67 static void hisi_trng_set_seed(struct hisi_trng *trng, const u8 *seed)
79 writel(val, trng->base + SW_DRBG_SEED(seed_reg));
87 struct hisi_trng *trng = ctx->trng;
92 pr_err("slen(%u) is not matched with trng(%d)\n", slen,
97 writel(0x0, trng->base + SW_DRBG_BLOCKS);
98 hisi_trng_set_seed(trng, seed);
101 trng->base + SW_DRBG_BLOCKS);
102 writel(0x1, trng->base + SW_DRBG_INIT);
104 ret = readl_relaxed_poll_timeout(trng->base + SW_DRBG_STATUS,
107 pr_err("fail to init trng(%d)\n", ret);
116 struct hisi_trng *trng = ctx->trng;
130 ret = readl_relaxed_poll_timeout(trng->base + SW_DRBG_STATUS,
138 data[i] = readl(trng->base + SW_DRBG_DATA(i));
148 writel(0x1, trng->base + SW_DRBG_GEN);
157 struct hisi_trng *trng;
161 list_for_each_entry(trng, &trng_devices.list, list) {
162 if (!trng->is_used) {
163 trng->is_used = true;
164 ctx->trng = trng;
179 ctx->trng->is_used = false;
185 struct hisi_trng *trng;
190 trng = container_of(rng, struct hisi_trng, rng);
193 ret = readl_poll_timeout(trng->base + HISI_TRNG_REG, val,
229 static void hisi_trng_add_to_list(struct hisi_trng *trng)
232 list_add_tail(&trng->list, &trng_devices.list);
236 static int hisi_trng_del_from_list(struct hisi_trng *trng)
241 if (!trng->is_used) {
242 list_del(&trng->list);
252 struct hisi_trng *trng;
255 trng = devm_kzalloc(&pdev->dev, sizeof(*trng), GFP_KERNEL);
256 if (!trng)
259 platform_set_drvdata(pdev, trng);
261 trng->base = devm_platform_ioremap_resource(pdev, 0);
262 if (IS_ERR(trng->base))
263 return PTR_ERR(trng->base);
265 trng->is_used = false;
266 trng->ver = readl(trng->base + HISI_TRNG_VERSION);
273 hisi_trng_add_to_list(trng);
274 if (trng->ver != HISI_TRNG_VER_V1 &&
285 trng->rng.name = pdev->name;
286 trng->rng.read = hisi_trng_read;
287 trng->rng.quality = HISI_TRNG_QUALITY;
288 ret = devm_hwrng_register(&pdev->dev, &trng->rng);
297 if (trng->ver != HISI_TRNG_VER_V1 &&
302 hisi_trng_del_from_list(trng);
308 struct hisi_trng *trng = platform_get_drvdata(pdev);
311 while (hisi_trng_del_from_list(trng))
314 if (trng->ver != HISI_TRNG_VER_V1 &&
329 .name = "hisi-trng-v2",