hwrng: timeriomem - relax check on memory resource size
authorDaniel Mack <daniel@zonque.org>
Sat, 31 Aug 2019 11:55:55 +0000 (13:55 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 5 Sep 2019 04:37:30 +0000 (14:37 +1000)
The timeriomem_rng driver only accesses the first 4 bytes of the given
memory area and currently, it also forces that memory resource to be
exactly 4 bytes in size.

This, however, is problematic when used with device-trees that are
generated from things like FPGA toolchains, where the minimum size
of an exposed memory block may be something like 4k.

Hence, let's only check for what's needed for the driver to operate
properly; namely that we have enough memory available to read the
random data from.

Signed-off-by: Daniel Mack <daniel@zonque.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Documentation/devicetree/bindings/rng/timeriomem_rng.txt
drivers/char/hw_random/timeriomem-rng.c

index 214940093b550cc9c756fc72c0201921a3f1b31f..fb4846160047804b8a1943077d47b799fb0e447b 100644 (file)
@@ -12,7 +12,7 @@ Optional properties:
             which disables using this rng to automatically fill the kernel's
             entropy pool.
 
-N.B. currently 'reg' must be four bytes wide and aligned
+N.B. currently 'reg' must be at least four bytes wide and 32-bit aligned
 
 Example:
 
index ccd1f6e0696bfd777aea5ae87b26e7ddd4a941c5..e262445fed5f5353460e8dd0a3f7553f7d7bfafe 100644 (file)
@@ -117,9 +117,9 @@ static int timeriomem_rng_probe(struct platform_device *pdev)
        if (!res)
                return -ENXIO;
 
-       if (res->start % 4 != 0 || resource_size(res) != 4) {
+       if (res->start % 4 != 0 || resource_size(res) < 4) {
                dev_err(&pdev->dev,
-                       "address must be four bytes wide and aligned\n");
+                       "address must be at least four bytes wide and 32-bit aligned\n");
                return -EINVAL;
        }