Lines Matching full:trng

54 static int airoha_trng_irq_mask(struct airoha_trng *trng)  in airoha_trng_irq_mask()  argument
58 val = readl(trng->base + TRNG_INTR_EN); in airoha_trng_irq_mask()
60 writel(val, trng->base + TRNG_INTR_EN); in airoha_trng_irq_mask()
65 static int airoha_trng_irq_unmask(struct airoha_trng *trng) in airoha_trng_irq_unmask() argument
69 val = readl(trng->base + TRNG_INTR_EN); in airoha_trng_irq_unmask()
71 writel(val, trng->base + TRNG_INTR_EN); in airoha_trng_irq_unmask()
78 struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng); in airoha_trng_init() local
82 val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_init()
84 writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_init()
87 airoha_trng_irq_unmask(trng); in airoha_trng_init()
88 writel(0, trng->base + TRNG_HEALTH_TEST_SW_RST); in airoha_trng_init()
90 ret = wait_for_completion_timeout(&trng->rng_op_done, BUSY_LOOP_TIMEOUT); in airoha_trng_init()
92 dev_err(trng->dev, "Timeout waiting for Health Check\n"); in airoha_trng_init()
93 airoha_trng_irq_mask(trng); in airoha_trng_init()
98 val = readl(trng->base + TRNG_HEALTH_TEST_STATUS); in airoha_trng_init()
100 dev_err(trng->dev, "Health Check fail: %s test fail\n", in airoha_trng_init()
106 ret = readl_poll_timeout(trng->base + TRNG_IP_RDY, val, in airoha_trng_init()
109 dev_err(trng->dev, "Timeout waiting for IP ready"); in airoha_trng_init()
114 ret = readl_poll_timeout(trng->base + TRNG_IP_RDY, val, in airoha_trng_init()
118 dev_err(trng->dev, "Timeout waiting for IP ready"); in airoha_trng_init()
127 struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng); in airoha_trng_cleanup() local
130 val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_cleanup()
132 writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_cleanup()
135 writel(SW_RST, trng->base + TRNG_HEALTH_TEST_SW_RST); in airoha_trng_cleanup()
140 struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng); in airoha_trng_read() local
145 ret = readl_poll_timeout(trng->base + TRNG_HEALTH_TEST_STATUS, status, in airoha_trng_read()
148 dev_err(trng->dev, "Timeout waiting for TRNG RAW Data valid\n"); in airoha_trng_read()
152 *data = readl(trng->base + TRNG_RAW_DATA_OUT); in airoha_trng_read()
159 struct airoha_trng *trng = (struct airoha_trng *)priv; in airoha_trng_irq() local
161 airoha_trng_irq_mask(trng); in airoha_trng_irq()
163 complete(&trng->rng_op_done); in airoha_trng_irq()
171 struct airoha_trng *trng; in airoha_trng_probe() local
175 trng = devm_kzalloc(dev, sizeof(*trng), GFP_KERNEL); in airoha_trng_probe()
176 if (!trng) in airoha_trng_probe()
179 trng->base = devm_platform_ioremap_resource(pdev, 0); in airoha_trng_probe()
180 if (IS_ERR(trng->base)) in airoha_trng_probe()
181 return PTR_ERR(trng->base); in airoha_trng_probe()
187 airoha_trng_irq_mask(trng); in airoha_trng_probe()
189 pdev->name, (void *)trng); in airoha_trng_probe()
195 init_completion(&trng->rng_op_done); in airoha_trng_probe()
198 val = readl(trng->base + TRNG_INTR_EN); in airoha_trng_probe()
200 writel(val, trng->base + TRNG_INTR_EN); in airoha_trng_probe()
203 val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_probe()
205 writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_probe()
208 writel(SW_RST, trng->base + TRNG_HEALTH_TEST_SW_RST); in airoha_trng_probe()
210 trng->dev = dev; in airoha_trng_probe()
211 trng->rng.name = pdev->name; in airoha_trng_probe()
212 trng->rng.init = airoha_trng_init; in airoha_trng_probe()
213 trng->rng.cleanup = airoha_trng_cleanup; in airoha_trng_probe()
214 trng->rng.read = airoha_trng_read; in airoha_trng_probe()
216 ret = devm_hwrng_register(dev, &trng->rng); in airoha_trng_probe()
226 { .compatible = "airoha,en7581-trng", },
233 .name = "airoha-trng",