// SPDX-License-Identifier: GPL-2.0-or-later /* * RNG driver for Freescale RNGA * * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved. * Author: Alan Carvalho de Assis <acassis@gmail.com>
*/
/* * * This driver is based on other RNG drivers.
*/
staticint mxc_rnga_data_present(struct hwrng *rng, int wait)
{ int i; struct mxc_rng *mxc_rng = container_of(rng, struct mxc_rng, rng);
for (i = 0; i < 20; i++) { /* how many random numbers are in FIFO? [0-16] */ int level = (__raw_readl(mxc_rng->mem + RNGA_STATUS) &
RNGA_STATUS_LEVEL_MASK) >> 8; if (level || !wait) return !!level;
udelay(10);
} return 0;
}
/* wake up */
ctrl = __raw_readl(mxc_rng->mem + RNGA_CONTROL);
__raw_writel(ctrl & ~RNGA_CONTROL_SLEEP, mxc_rng->mem + RNGA_CONTROL);
/* verify if oscillator is working */
osc = __raw_readl(mxc_rng->mem + RNGA_STATUS); if (osc & RNGA_STATUS_OSC_DEAD) {
dev_err(mxc_rng->dev, "RNGA Oscillator is dead!\n"); return -ENODEV;
}
mxc_rng->clk = devm_clk_get_enabled(&pdev->dev, NULL); if (IS_ERR(mxc_rng->clk)) {
dev_err(&pdev->dev, "Could not get rng_clk!\n"); return PTR_ERR(mxc_rng->clk);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.