Lines Matching +full:meson +full:- +full:rng

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
26 int (*read)(struct hwrng *rng, void *buf, size_t max, bool wait);
31 struct hwrng rng; member
35 static int meson_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) in meson_rng_read() argument
38 container_of(rng, struct meson_rng_data, rng); in meson_rng_read()
40 *(u32 *)buf = readl_relaxed(data->base + RNG_DATA); in meson_rng_read()
54 return -EBUSY; in meson_rng_wait_status()
59 static int meson_s4_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) in meson_s4_rng_read() argument
62 container_of(rng, struct meson_rng_data, rng); in meson_s4_rng_read()
64 void __iomem *cfg_addr = data->base + RNG_S4_CFG; in meson_s4_rng_read()
71 dev_err(data->dev, "Seed isn't ready, try again\n"); in meson_s4_rng_read()
77 dev_err(data->dev, "Can't get random number, try again\n"); in meson_s4_rng_read()
81 *(u32 *)buf = readl_relaxed(data->base + RNG_S4_DATA); in meson_s4_rng_read()
88 struct device *dev = &pdev->dev; in meson_rng_probe()
95 return -ENOMEM; in meson_rng_probe()
97 priv = device_get_match_data(&pdev->dev); in meson_rng_probe()
99 return -ENODEV; in meson_rng_probe()
101 data->base = devm_platform_ioremap_resource(pdev, 0); in meson_rng_probe()
102 if (IS_ERR(data->base)) in meson_rng_probe()
103 return PTR_ERR(data->base); in meson_rng_probe()
110 data->rng.name = pdev->name; in meson_rng_probe()
111 data->rng.read = priv->read; in meson_rng_probe()
113 data->dev = &pdev->dev; in meson_rng_probe()
115 return devm_hwrng_register(dev, &data->rng); in meson_rng_probe()
128 .compatible = "amlogic,meson-rng",
132 .compatible = "amlogic,meson-s4-rng",
142 .name = "meson-rng",
149 MODULE_DESCRIPTION("Meson H/W Random Number Generator driver");