| /linux/drivers/char/hw_random/ |
| H A D | airoha-trng.c | 53 static int airoha_trng_irq_mask(struct airoha_trng *trng) in airoha_trng_irq_mask() argument 57 val = readl(trng->base + TRNG_INTR_EN); in airoha_trng_irq_mask() 59 writel(val, trng->base + TRNG_INTR_EN); in airoha_trng_irq_mask() 64 static int airoha_trng_irq_unmask(struct airoha_trng *trng) in airoha_trng_irq_unmask() argument 68 val = readl(trng->base + TRNG_INTR_EN); in airoha_trng_irq_unmask() 70 writel(val, trng->base + TRNG_INTR_EN); in airoha_trng_irq_unmask() 77 struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng); in airoha_trng_init() local 81 val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_init() 83 writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN); in airoha_trng_init() 86 airoha_trng_irq_unmask(trng); in airoha_trng_init() [all …]
|
| H A D | atmel-rng.c | 43 static bool atmel_trng_wait_ready(struct atmel_trng *trng, bool wait) in atmel_trng_wait_ready() argument 47 ready = readl(trng->base + TRNG_ISR) & TRNG_ISR_DATRDY; in atmel_trng_wait_ready() 49 readl_poll_timeout(trng->base + TRNG_ISR, ready, in atmel_trng_wait_ready() 58 struct atmel_trng *trng = container_of(rng, struct atmel_trng, rng); in atmel_trng_read() local 62 ret = pm_runtime_get_sync(trng->dev); in atmel_trng_read() 64 pm_runtime_put_sync(trng->dev); in atmel_trng_read() 68 ret = atmel_trng_wait_ready(trng, wait); in atmel_trng_read() 72 *data = readl(trng->base + TRNG_ODATA); in atmel_trng_read() 78 readl(trng->base + TRNG_ISR); in atmel_trng_read() 82 pm_runtime_put_sync_autosuspend(trng->dev); in atmel_trng_read() [all …]
|
| H A D | xiphera-trng.c | 23 /* trng statuses */ 36 struct xiphera_trng *trng = container_of(rng, struct xiphera_trng, rng); in xiphera_trng_read() local 41 if (readl(trng->mem + STATUS_REG) == TRNG_NEW_RAND_AVAILABLE) { in xiphera_trng_read() 42 *(u32 *)buf = readl(trng->mem + RAND_REG); in xiphera_trng_read() 44 * Inform the trng of the read in xiphera_trng_read() 47 writel(HOST_TO_TRNG_READ, trng->mem + CONTROL_REG); in xiphera_trng_read() 48 writel(HOST_TO_TRNG_ENABLE, trng->mem + CONTROL_REG); in xiphera_trng_read() 62 struct xiphera_trng *trng; in xiphera_trng_probe() local 65 trng = devm_kzalloc(dev, sizeof(*trng), GFP_KERNEL); in xiphera_trng_probe() 66 if (!trng) in xiphera_trng_probe() [all …]
|
| H A D | exynos-trng.c | 84 struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv; in exynos_trng_do_read_reg() local 88 writel_relaxed(max * 8, trng->mem + EXYNOS_TRNG_FIFO_CTRL); in exynos_trng_do_read_reg() 89 val = readl_poll_timeout(trng->mem + EXYNOS_TRNG_FIFO_CTRL, val, in exynos_trng_do_read_reg() 94 memcpy_fromio(data, trng->mem + EXYNOS_TRNG_FIFO_0, max); in exynos_trng_do_read_reg() 134 struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv; in exynos_trng_init_reg() local 138 sss_rate = clk_get_rate(trng->clk); in exynos_trng_init_reg() 141 * For most TRNG circuits the clock frequency of under 500 kHz in exynos_trng_init_reg() 146 dev_err(trng->dev, "clock divider too large: %d\n", val); in exynos_trng_init_reg() 150 writel_relaxed(val, trng->mem + EXYNOS_TRNG_CLKDIV); in exynos_trng_init_reg() 154 writel_relaxed(val, trng->mem + EXYNOS_TRNG_CTRL); in exynos_trng_init_reg() [all …]
|
| H A D | ingenic-trng.c | 36 struct ingenic_trng *trng = container_of(rng, struct ingenic_trng, rng); in ingenic_trng_init() local 39 ctrl = readl(trng->base + TRNG_REG_CFG_OFFSET); in ingenic_trng_init() 41 writel(ctrl, trng->base + TRNG_REG_CFG_OFFSET); in ingenic_trng_init() 48 struct ingenic_trng *trng = container_of(rng, struct ingenic_trng, rng); in ingenic_trng_cleanup() local 51 ctrl = readl(trng->base + TRNG_REG_CFG_OFFSET); in ingenic_trng_cleanup() 53 writel(ctrl, trng->base + TRNG_REG_CFG_OFFSET); in ingenic_trng_cleanup() 58 struct ingenic_trng *trng = container_of(rng, struct ingenic_trng, rng); in ingenic_trng_read() local 63 ret = readl_poll_timeout(trng->base + TRNG_REG_STATUS_OFFSET, status, in ingenic_trng_read() 70 *data = readl(trng->base + TRNG_REG_RANDOMNUM_OFFSET); in ingenic_trng_read() 77 struct ingenic_trng *trng; in ingenic_trng_probe() local [all …]
|
| H A D | xilinx-trng.c | 19 /* TRNG Registers Offsets */ 54 struct hwrng trng; member 101 /* TRNG core generate data in 16 bytes. Read twice to complete 32 bytes read */ in xtrng_readblock32() 192 /* Collect some output from the TRNG. */ in xtrng_reseed_internal() 198 /* Extract entropy from the TRNG output using HKDF-SHA512-Extract. */ in xtrng_reseed_internal() 255 rng = container_of(hwrng, struct xilinx_rng, trng); in xtrng_hwrng_trng_read() 270 static int xtrng_hwrng_register(struct hwrng *trng) in xtrng_hwrng_register() argument 274 trng->name = "Xilinx Versal Crypto Engine TRNG"; in xtrng_hwrng_register() 275 trng->read = xtrng_hwrng_trng_read; in xtrng_hwrng_register() 277 ret = hwrng_register(trng); in xtrng_hwrng_register() [all …]
|
| H A D | arm_smccc_trng.c | 3 * Randomness driver for the ARM SMCCC TRNG Firmware Interface 8 * The ARM TRNG firmware interface specifies a protocol to read entropy 99 struct hwrng *trng; in smccc_trng_probe() local 101 trng = devm_kzalloc(&pdev->dev, sizeof(*trng), GFP_KERNEL); in smccc_trng_probe() 102 if (!trng) in smccc_trng_probe() 105 trng->name = "smccc_trng"; in smccc_trng_probe() 106 trng->read = smccc_trng_read; in smccc_trng_probe() 108 return devm_hwrng_register(&pdev->dev, trng); in smccc_trng_probe() 121 MODULE_DESCRIPTION("Arm SMCCC TRNG firmware interface support");
|
| H A D | pic32-rng.c | 33 * The TRNG can generate up to 24Mbps. This is a timeout that should be safe 34 * enough given the instructions in the loop and that the TRNG may not always 43 /* enable TRNG in enhanced mode */ in pic32_rng_init() 59 /* TRNG value comes through the seed registers */ in pic32_rng_read()
|
| H A D | ba431-rng.c | 195 dev_info(&pdev->dev, "BA431 TRNG registered\n"); in ba431_trng_probe() 217 MODULE_DESCRIPTION("TRNG driver for Silex Insight BA431");
|
| /linux/drivers/crypto/amcc/ |
| H A D | crypto4xx_trng.c | 74 struct device_node *trng = NULL; in ppc4xx_trng_probe() local 78 /* Find the TRNG device node and map it */ in ppc4xx_trng_probe() 79 trng = of_find_matching_node(NULL, ppc4xx_trng_match); in ppc4xx_trng_probe() 80 if (!trng || !of_device_is_available(trng)) { in ppc4xx_trng_probe() 81 of_node_put(trng); in ppc4xx_trng_probe() 85 dev->trng_base = of_iomap(trng, 0); in ppc4xx_trng_probe() 86 of_node_put(trng); in ppc4xx_trng_probe() 98 core_dev->trng = rng; in ppc4xx_trng_probe() 101 err = devm_hwrng_register(core_dev->device, core_dev->trng); in ppc4xx_trng_probe() 114 core_dev->trng = NULL; in ppc4xx_trng_probe() [all …]
|
| /linux/drivers/platform/cznic/ |
| H A D | turris-omnia-mcu-trng.c | 3 * CZ.NIC's Turris Omnia MCU TRNG driver 34 struct omnia_mcu *mcu = container_of(rng, struct omnia_mcu, trng); in omnia_trng_read() 69 * If someone else cleared the TRNG interrupt but did not read the in omnia_mcu_register_trng() 82 "turris-omnia-mcu-trng"); in omnia_mcu_register_trng() 84 return dev_err_probe(dev, err, "Cannot request TRNG IRQ\n"); in omnia_mcu_register_trng() 86 mcu->trng.name = "turris-omnia-mcu-trng"; in omnia_mcu_register_trng() 87 mcu->trng.read = omnia_trng_read; in omnia_mcu_register_trng() 89 err = devm_hwrng_register(dev, &mcu->trng); in omnia_mcu_register_trng() 91 return dev_err_probe(dev, err, "Cannot register TRNG\n"); in omnia_mcu_register_trng()
|
| H A D | turris-omnia-mcu.h | 62 * @trng: RNG driver structure 100 struct hwrng trng; member
|
| H A D | Makefile | 8 turris-omnia-mcu-$(CONFIG_TURRIS_OMNIA_MCU_TRNG) += turris-omnia-mcu-trng.o
|
| /linux/Documentation/devicetree/bindings/rng/ |
| H A D | arm-cctrng.yaml | 7 title: Arm TrustZone CryptoCell TRNG engine 13 Arm TrustZone CryptoCell TRNG (True Random Number Generator) engine. 18 - arm,cryptocell-713-trng 19 - arm,cryptocell-703-trng 29 Arm TrustZone CryptoCell TRNG engine has 4 ring oscillators. 48 compatible = "arm,cryptocell-713-trng";
|
| H A D | starfive,jh7110-trng.yaml | 4 $id: http://devicetree.org/schemas/rng/starfive,jh7110-trng.yaml# 7 title: StarFive SoC TRNG Module 16 - const: starfive,jh8100-trng 17 - const: starfive,jh7110-trng 18 - const: starfive,jh7110-trng 52 compatible = "starfive,jh7110-trng";
|
| H A D | xiphera,xip8001b-trng.yaml | 4 $id: http://devicetree.org/schemas/rng/xiphera,xip8001b-trng.yaml# 7 title: Xiphera XIP8001B-trng 17 const: xiphera,xip8001b-trng 31 compatible = "xiphera,xip8001b-trng";
|
| H A D | rockchip,rk3568-rng.yaml | 7 title: Rockchip RK3568 TRNG 25 - description: TRNG clock 26 - description: TRNG AHB clock
|
| H A D | ingenic,trng.yaml | 4 $id: http://devicetree.org/schemas/rng/ingenic,trng.yaml# 37 dtrng: trng@10072000 {
|
| /linux/drivers/crypto/gemini/ |
| H A D | sl3516-ce-rng.c | 20 ce = container_of(rng, struct sl3516_ce_dev, trng); in sl3516_ce_rng_read() 48 ce->trng.name = "SL3516 Crypto Engine RNG"; in sl3516_ce_rng_register() 49 ce->trng.read = sl3516_ce_rng_read; in sl3516_ce_rng_register() 50 ce->trng.quality = 700; in sl3516_ce_rng_register() 52 ret = hwrng_register(&ce->trng); in sl3516_ce_rng_register() 60 hwrng_unregister(&ce->trng); in sl3516_ce_rng_unregister()
|
| H A D | sl3516-ce.h | 216 * @trng hw_random structure for RNG 243 struct hwrng trng; member
|
| /linux/Documentation/devicetree/bindings/crypto/ |
| H A D | allwinner,sun8i-ce.yaml | 34 - description: TRNG clock (RC oscillator) 42 - const: trng
|
| H A D | samsung-sss.yaml | 24 -- True Random Number Generator (TRNG)
|
| /linux/Documentation/devicetree/bindings/soc/imx/ |
| H A D | fsl,imx8mp-hdmi-blk-ctrl.yaml | 40 - const: trng 95 power-domain-names = "bus", "irqsteer", "lcdif", "pai", "pvi", "trng",
|
| /linux/arch/arm/boot/dts/samsung/ |
| H A D | exynos5.dtsi | 218 trng: rng@10830600 { label 219 compatible = "samsung,exynos5250-trng";
|
| /linux/Documentation/devicetree/bindings/firmware/ |
| H A D | cznic,turris-omnia-mcu.yaml | 44 13 TRNG entropy ready
|