diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-07 22:44:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-07 22:44:40 -0400 |
commit | 639b4ac691c6f6e48921dc576379c176f82f3250 (patch) | |
tree | 6cf521ae7d46ca8dfa139ca67dd32545de8d2a75 /drivers/char | |
parent | 9d2cd01b15d0782adb81e40094b67904d77b03df (diff) | |
parent | 5208ed2ca16526cdbec25abe594a3cc3aea210f4 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6 into next
Pull crypto updates from Herbert Xu:
"Here is the crypto update for 3.16:
- Added test vectors for SHA/AES-CCM/DES-CBC/3DES-CBC.
- Fixed a number of error-path memory leaks in tcrypt.
- Fixed error-path memory leak in caam.
- Removed unnecessary global mutex from mxs-dcp.
- Added ahash walk interface that can actually be asynchronous.
- Cleaned up caam error reporting.
- Allow crypto_user get operation to be used by non-root users.
- Add support for SSS module on Exynos.
- Misc fixes"
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6: (60 commits)
crypto: testmgr - add aead cbc des, des3_ede tests
crypto: testmgr - Fix DMA-API warning
crypto: cesa - tfm->__crt_alg->cra_type directly
crypto: sahara - tfm->__crt_alg->cra_name directly
crypto: padlock - tfm->__crt_alg->cra_name directly
crypto: n2 - tfm->__crt_alg->cra_name directly
crypto: dcp - tfm->__crt_alg->cra_name directly
crypto: cesa - tfm->__crt_alg->cra_name directly
crypto: ccp - tfm->__crt_alg->cra_name directly
crypto: geode - Don't use tfm->__crt_alg->cra_name directly
crypto: geode - Weed out printk() from probe()
crypto: geode - Consistently use AES_KEYSIZE_128
crypto: geode - Kill AES_IV_LENGTH
crypto: geode - Kill AES_MIN_BLOCK_SIZE
crypto: mxs-dcp - Remove global mutex
crypto: hash - Add real ahash walk interface
hwrng: n2-drv - Introduce the use of the managed version of kzalloc
crypto: caam - reinitialize keys_fit_inline for decrypt and givencrypt
crypto: s5p-sss - fix multiplatform build
hwrng: timeriomem - remove unnecessary OOM messages
...
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/hw_random/Kconfig | 101 | ||||
-rw-r--r-- | drivers/char/hw_random/Makefile | 1 | ||||
-rw-r--r-- | drivers/char/hw_random/n2-drv.c | 24 | ||||
-rw-r--r-- | drivers/char/hw_random/omap-rng.c | 4 | ||||
-rw-r--r-- | drivers/char/hw_random/picoxcell-rng.c | 181 | ||||
-rw-r--r-- | drivers/char/hw_random/timeriomem-rng.c | 4 |
6 files changed, 58 insertions, 257 deletions
diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 244759bbd7b7..836b061ced35 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig | |||
@@ -2,7 +2,7 @@ | |||
2 | # Hardware Random Number Generator (RNG) configuration | 2 | # Hardware Random Number Generator (RNG) configuration |
3 | # | 3 | # |
4 | 4 | ||
5 | config HW_RANDOM | 5 | menuconfig HW_RANDOM |
6 | tristate "Hardware Random Number Generator Core support" | 6 | tristate "Hardware Random Number Generator Core support" |
7 | default m | 7 | default m |
8 | ---help--- | 8 | ---help--- |
@@ -20,9 +20,11 @@ config HW_RANDOM | |||
20 | 20 | ||
21 | If unsure, say Y. | 21 | If unsure, say Y. |
22 | 22 | ||
23 | if HW_RANDOM | ||
24 | |||
23 | config HW_RANDOM_TIMERIOMEM | 25 | config HW_RANDOM_TIMERIOMEM |
24 | tristate "Timer IOMEM HW Random Number Generator support" | 26 | tristate "Timer IOMEM HW Random Number Generator support" |
25 | depends on HW_RANDOM && HAS_IOMEM | 27 | depends on HAS_IOMEM |
26 | ---help--- | 28 | ---help--- |
27 | This driver provides kernel-side support for a generic Random | 29 | This driver provides kernel-side support for a generic Random |
28 | Number Generator used by reading a 'dumb' iomem address that | 30 | Number Generator used by reading a 'dumb' iomem address that |
@@ -36,7 +38,7 @@ config HW_RANDOM_TIMERIOMEM | |||
36 | 38 | ||
37 | config HW_RANDOM_INTEL | 39 | config HW_RANDOM_INTEL |
38 | tristate "Intel HW Random Number Generator support" | 40 | tristate "Intel HW Random Number Generator support" |
39 | depends on HW_RANDOM && (X86 || IA64) && PCI | 41 | depends on (X86 || IA64) && PCI |
40 | default HW_RANDOM | 42 | default HW_RANDOM |
41 | ---help--- | 43 | ---help--- |
42 | This driver provides kernel-side support for the Random Number | 44 | This driver provides kernel-side support for the Random Number |
@@ -49,7 +51,7 @@ config HW_RANDOM_INTEL | |||
49 | 51 | ||
50 | config HW_RANDOM_AMD | 52 | config HW_RANDOM_AMD |
51 | tristate "AMD HW Random Number Generator support" | 53 | tristate "AMD HW Random Number Generator support" |
52 | depends on HW_RANDOM && (X86 || PPC_MAPLE) && PCI | 54 | depends on (X86 || PPC_MAPLE) && PCI |
53 | default HW_RANDOM | 55 | default HW_RANDOM |
54 | ---help--- | 56 | ---help--- |
55 | This driver provides kernel-side support for the Random Number | 57 | This driver provides kernel-side support for the Random Number |
@@ -62,8 +64,8 @@ config HW_RANDOM_AMD | |||
62 | 64 | ||
63 | config HW_RANDOM_ATMEL | 65 | config HW_RANDOM_ATMEL |
64 | tristate "Atmel Random Number Generator support" | 66 | tristate "Atmel Random Number Generator support" |
65 | depends on HW_RANDOM && HAVE_CLK | 67 | depends on ARCH_AT91 && HAVE_CLK |
66 | default (HW_RANDOM && ARCH_AT91) | 68 | default HW_RANDOM |
67 | ---help--- | 69 | ---help--- |
68 | This driver provides kernel-side support for the Random Number | 70 | This driver provides kernel-side support for the Random Number |
69 | Generator hardware found on Atmel AT91 devices. | 71 | Generator hardware found on Atmel AT91 devices. |
@@ -75,7 +77,7 @@ config HW_RANDOM_ATMEL | |||
75 | 77 | ||
76 | config HW_RANDOM_BCM63XX | 78 | config HW_RANDOM_BCM63XX |
77 | tristate "Broadcom BCM63xx Random Number Generator support" | 79 | tristate "Broadcom BCM63xx Random Number Generator support" |
78 | depends on HW_RANDOM && BCM63XX | 80 | depends on BCM63XX |
79 | default HW_RANDOM | 81 | default HW_RANDOM |
80 | ---help--- | 82 | ---help--- |
81 | This driver provides kernel-side support for the Random Number | 83 | This driver provides kernel-side support for the Random Number |
@@ -88,7 +90,7 @@ config HW_RANDOM_BCM63XX | |||
88 | 90 | ||
89 | config HW_RANDOM_BCM2835 | 91 | config HW_RANDOM_BCM2835 |
90 | tristate "Broadcom BCM2835 Random Number Generator support" | 92 | tristate "Broadcom BCM2835 Random Number Generator support" |
91 | depends on HW_RANDOM && ARCH_BCM2835 | 93 | depends on ARCH_BCM2835 |
92 | default HW_RANDOM | 94 | default HW_RANDOM |
93 | ---help--- | 95 | ---help--- |
94 | This driver provides kernel-side support for the Random Number | 96 | This driver provides kernel-side support for the Random Number |
@@ -101,7 +103,7 @@ config HW_RANDOM_BCM2835 | |||
101 | 103 | ||
102 | config HW_RANDOM_GEODE | 104 | config HW_RANDOM_GEODE |
103 | tristate "AMD Geode HW Random Number Generator support" | 105 | tristate "AMD Geode HW Random Number Generator support" |
104 | depends on HW_RANDOM && X86_32 && PCI | 106 | depends on X86_32 && PCI |
105 | default HW_RANDOM | 107 | default HW_RANDOM |
106 | ---help--- | 108 | ---help--- |
107 | This driver provides kernel-side support for the Random Number | 109 | This driver provides kernel-side support for the Random Number |
@@ -114,7 +116,7 @@ config HW_RANDOM_GEODE | |||
114 | 116 | ||
115 | config HW_RANDOM_N2RNG | 117 | config HW_RANDOM_N2RNG |
116 | tristate "Niagara2 Random Number Generator support" | 118 | tristate "Niagara2 Random Number Generator support" |
117 | depends on HW_RANDOM && SPARC64 | 119 | depends on SPARC64 |
118 | default HW_RANDOM | 120 | default HW_RANDOM |
119 | ---help--- | 121 | ---help--- |
120 | This driver provides kernel-side support for the Random Number | 122 | This driver provides kernel-side support for the Random Number |
@@ -127,7 +129,7 @@ config HW_RANDOM_N2RNG | |||
127 | 129 | ||
128 | config HW_RANDOM_VIA | 130 | config HW_RANDOM_VIA |
129 | tristate "VIA HW Random Number Generator support" | 131 | tristate "VIA HW Random Number Generator support" |
130 | depends on HW_RANDOM && X86 | 132 | depends on X86 |
131 | default HW_RANDOM | 133 | default HW_RANDOM |
132 | ---help--- | 134 | ---help--- |
133 | This driver provides kernel-side support for the Random Number | 135 | This driver provides kernel-side support for the Random Number |
@@ -140,7 +142,7 @@ config HW_RANDOM_VIA | |||
140 | 142 | ||
141 | config HW_RANDOM_IXP4XX | 143 | config HW_RANDOM_IXP4XX |
142 | tristate "Intel IXP4xx NPU HW Pseudo-Random Number Generator support" | 144 | tristate "Intel IXP4xx NPU HW Pseudo-Random Number Generator support" |
143 | depends on HW_RANDOM && ARCH_IXP4XX | 145 | depends on ARCH_IXP4XX |
144 | default HW_RANDOM | 146 | default HW_RANDOM |
145 | ---help--- | 147 | ---help--- |
146 | This driver provides kernel-side support for the Pseudo-Random | 148 | This driver provides kernel-side support for the Pseudo-Random |
@@ -153,7 +155,7 @@ config HW_RANDOM_IXP4XX | |||
153 | 155 | ||
154 | config HW_RANDOM_OMAP | 156 | config HW_RANDOM_OMAP |
155 | tristate "OMAP Random Number Generator support" | 157 | tristate "OMAP Random Number Generator support" |
156 | depends on HW_RANDOM && (ARCH_OMAP16XX || ARCH_OMAP2PLUS) | 158 | depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS |
157 | default HW_RANDOM | 159 | default HW_RANDOM |
158 | ---help--- | 160 | ---help--- |
159 | This driver provides kernel-side support for the Random Number | 161 | This driver provides kernel-side support for the Random Number |
@@ -167,7 +169,7 @@ config HW_RANDOM_OMAP | |||
167 | 169 | ||
168 | config HW_RANDOM_OMAP3_ROM | 170 | config HW_RANDOM_OMAP3_ROM |
169 | tristate "OMAP3 ROM Random Number Generator support" | 171 | tristate "OMAP3 ROM Random Number Generator support" |
170 | depends on HW_RANDOM && ARCH_OMAP3 | 172 | depends on ARCH_OMAP3 |
171 | default HW_RANDOM | 173 | default HW_RANDOM |
172 | ---help--- | 174 | ---help--- |
173 | This driver provides kernel-side support for the Random Number | 175 | This driver provides kernel-side support for the Random Number |
@@ -180,7 +182,7 @@ config HW_RANDOM_OMAP3_ROM | |||
180 | 182 | ||
181 | config HW_RANDOM_OCTEON | 183 | config HW_RANDOM_OCTEON |
182 | tristate "Octeon Random Number Generator support" | 184 | tristate "Octeon Random Number Generator support" |
183 | depends on HW_RANDOM && CAVIUM_OCTEON_SOC | 185 | depends on CAVIUM_OCTEON_SOC |
184 | default HW_RANDOM | 186 | default HW_RANDOM |
185 | ---help--- | 187 | ---help--- |
186 | This driver provides kernel-side support for the Random Number | 188 | This driver provides kernel-side support for the Random Number |
@@ -193,7 +195,7 @@ config HW_RANDOM_OCTEON | |||
193 | 195 | ||
194 | config HW_RANDOM_PASEMI | 196 | config HW_RANDOM_PASEMI |
195 | tristate "PA Semi HW Random Number Generator support" | 197 | tristate "PA Semi HW Random Number Generator support" |
196 | depends on HW_RANDOM && PPC_PASEMI | 198 | depends on PPC_PASEMI |
197 | default HW_RANDOM | 199 | default HW_RANDOM |
198 | ---help--- | 200 | ---help--- |
199 | This driver provides kernel-side support for the Random Number | 201 | This driver provides kernel-side support for the Random Number |
@@ -206,7 +208,7 @@ config HW_RANDOM_PASEMI | |||
206 | 208 | ||
207 | config HW_RANDOM_VIRTIO | 209 | config HW_RANDOM_VIRTIO |
208 | tristate "VirtIO Random Number Generator support" | 210 | tristate "VirtIO Random Number Generator support" |
209 | depends on HW_RANDOM && VIRTIO | 211 | depends on VIRTIO |
210 | ---help--- | 212 | ---help--- |
211 | This driver provides kernel-side support for the virtual Random Number | 213 | This driver provides kernel-side support for the virtual Random Number |
212 | Generator hardware. | 214 | Generator hardware. |
@@ -216,7 +218,7 @@ config HW_RANDOM_VIRTIO | |||
216 | 218 | ||
217 | config HW_RANDOM_TX4939 | 219 | config HW_RANDOM_TX4939 |
218 | tristate "TX4939 Random Number Generator support" | 220 | tristate "TX4939 Random Number Generator support" |
219 | depends on HW_RANDOM && SOC_TX4939 | 221 | depends on SOC_TX4939 |
220 | default HW_RANDOM | 222 | default HW_RANDOM |
221 | ---help--- | 223 | ---help--- |
222 | This driver provides kernel-side support for the Random Number | 224 | This driver provides kernel-side support for the Random Number |
@@ -229,7 +231,8 @@ config HW_RANDOM_TX4939 | |||
229 | 231 | ||
230 | config HW_RANDOM_MXC_RNGA | 232 | config HW_RANDOM_MXC_RNGA |
231 | tristate "Freescale i.MX RNGA Random Number Generator" | 233 | tristate "Freescale i.MX RNGA Random Number Generator" |
232 | depends on HW_RANDOM && ARCH_HAS_RNGA | 234 | depends on ARCH_HAS_RNGA |
235 | default HW_RANDOM | ||
233 | ---help--- | 236 | ---help--- |
234 | This driver provides kernel-side support for the Random Number | 237 | This driver provides kernel-side support for the Random Number |
235 | Generator hardware found on Freescale i.MX processors. | 238 | Generator hardware found on Freescale i.MX processors. |
@@ -241,7 +244,8 @@ config HW_RANDOM_MXC_RNGA | |||
241 | 244 | ||
242 | config HW_RANDOM_NOMADIK | 245 | config HW_RANDOM_NOMADIK |
243 | tristate "ST-Ericsson Nomadik Random Number Generator support" | 246 | tristate "ST-Ericsson Nomadik Random Number Generator support" |
244 | depends on HW_RANDOM && ARCH_NOMADIK | 247 | depends on ARCH_NOMADIK |
248 | default HW_RANDOM | ||
245 | ---help--- | 249 | ---help--- |
246 | This driver provides kernel-side support for the Random Number | 250 | This driver provides kernel-side support for the Random Number |
247 | Generator hardware found on ST-Ericsson SoCs (8815 and 8500). | 251 | Generator hardware found on ST-Ericsson SoCs (8815 and 8500). |
@@ -251,21 +255,10 @@ config HW_RANDOM_NOMADIK | |||
251 | 255 | ||
252 | If unsure, say Y. | 256 | If unsure, say Y. |
253 | 257 | ||
254 | config HW_RANDOM_PICOXCELL | ||
255 | tristate "Picochip picoXcell true random number generator support" | ||
256 | depends on HW_RANDOM && ARCH_PICOXCELL && PICOXCELL_PC3X3 | ||
257 | ---help--- | ||
258 | This driver provides kernel-side support for the Random Number | ||
259 | Generator hardware found on Picochip PC3x3 and later devices. | ||
260 | |||
261 | To compile this driver as a module, choose M here: the | ||
262 | module will be called picoxcell-rng. | ||
263 | |||
264 | If unsure, say Y. | ||
265 | |||
266 | config HW_RANDOM_PPC4XX | 258 | config HW_RANDOM_PPC4XX |
267 | tristate "PowerPC 4xx generic true random number generator support" | 259 | tristate "PowerPC 4xx generic true random number generator support" |
268 | depends on HW_RANDOM && PPC && 4xx | 260 | depends on PPC && 4xx |
261 | default HW_RANDOM | ||
269 | ---help--- | 262 | ---help--- |
270 | This driver provides the kernel-side support for the TRNG hardware | 263 | This driver provides the kernel-side support for the TRNG hardware |
271 | found in the security function of some PowerPC 4xx SoCs. | 264 | found in the security function of some PowerPC 4xx SoCs. |
@@ -275,24 +268,9 @@ config HW_RANDOM_PPC4XX | |||
275 | 268 | ||
276 | If unsure, say N. | 269 | If unsure, say N. |
277 | 270 | ||
278 | config UML_RANDOM | ||
279 | depends on UML | ||
280 | tristate "Hardware random number generator" | ||
281 | help | ||
282 | This option enables UML's "hardware" random number generator. It | ||
283 | attaches itself to the host's /dev/random, supplying as much entropy | ||
284 | as the host has, rather than the small amount the UML gets from its | ||
285 | own drivers. It registers itself as a standard hardware random number | ||
286 | generator, major 10, minor 183, and the canonical device name is | ||
287 | /dev/hwrng. | ||
288 | The way to make use of this is to install the rng-tools package | ||
289 | (check your distro, or download from | ||
290 | http://sourceforge.net/projects/gkernel/). rngd periodically reads | ||
291 | /dev/hwrng and injects the entropy into /dev/random. | ||
292 | |||
293 | config HW_RANDOM_PSERIES | 271 | config HW_RANDOM_PSERIES |
294 | tristate "pSeries HW Random Number Generator support" | 272 | tristate "pSeries HW Random Number Generator support" |
295 | depends on HW_RANDOM && PPC64 && IBMVIO | 273 | depends on PPC64 && IBMVIO |
296 | default HW_RANDOM | 274 | default HW_RANDOM |
297 | ---help--- | 275 | ---help--- |
298 | This driver provides kernel-side support for the Random Number | 276 | This driver provides kernel-side support for the Random Number |
@@ -305,7 +283,7 @@ config HW_RANDOM_PSERIES | |||
305 | 283 | ||
306 | config HW_RANDOM_POWERNV | 284 | config HW_RANDOM_POWERNV |
307 | tristate "PowerNV Random Number Generator support" | 285 | tristate "PowerNV Random Number Generator support" |
308 | depends on HW_RANDOM && PPC_POWERNV | 286 | depends on PPC_POWERNV |
309 | default HW_RANDOM | 287 | default HW_RANDOM |
310 | ---help--- | 288 | ---help--- |
311 | This is the driver for Random Number Generator hardware found | 289 | This is the driver for Random Number Generator hardware found |
@@ -318,7 +296,8 @@ config HW_RANDOM_POWERNV | |||
318 | 296 | ||
319 | config HW_RANDOM_EXYNOS | 297 | config HW_RANDOM_EXYNOS |
320 | tristate "EXYNOS HW random number generator support" | 298 | tristate "EXYNOS HW random number generator support" |
321 | depends on HW_RANDOM && HAS_IOMEM && HAVE_CLK | 299 | depends on ARCH_EXYNOS |
300 | default HW_RANDOM | ||
322 | ---help--- | 301 | ---help--- |
323 | This driver provides kernel-side support for the Random Number | 302 | This driver provides kernel-side support for the Random Number |
324 | Generator hardware found on EXYNOS SOCs. | 303 | Generator hardware found on EXYNOS SOCs. |
@@ -330,7 +309,7 @@ config HW_RANDOM_EXYNOS | |||
330 | 309 | ||
331 | config HW_RANDOM_TPM | 310 | config HW_RANDOM_TPM |
332 | tristate "TPM HW Random Number Generator support" | 311 | tristate "TPM HW Random Number Generator support" |
333 | depends on HW_RANDOM && TCG_TPM | 312 | depends on TCG_TPM |
334 | default HW_RANDOM | 313 | default HW_RANDOM |
335 | ---help--- | 314 | ---help--- |
336 | This driver provides kernel-side support for the Random Number | 315 | This driver provides kernel-side support for the Random Number |
@@ -344,6 +323,7 @@ config HW_RANDOM_TPM | |||
344 | config HW_RANDOM_MSM | 323 | config HW_RANDOM_MSM |
345 | tristate "Qualcomm SoCs Random Number Generator support" | 324 | tristate "Qualcomm SoCs Random Number Generator support" |
346 | depends on HW_RANDOM && ARCH_QCOM | 325 | depends on HW_RANDOM && ARCH_QCOM |
326 | default HW_RANDOM | ||
347 | ---help--- | 327 | ---help--- |
348 | This driver provides kernel-side support for the Random Number | 328 | This driver provides kernel-side support for the Random Number |
349 | Generator hardware found on Qualcomm SoCs. | 329 | Generator hardware found on Qualcomm SoCs. |
@@ -352,3 +332,20 @@ config HW_RANDOM_MSM | |||
352 | module will be called msm-rng. | 332 | module will be called msm-rng. |
353 | 333 | ||
354 | If unsure, say Y. | 334 | If unsure, say Y. |
335 | |||
336 | endif # HW_RANDOM | ||
337 | |||
338 | config UML_RANDOM | ||
339 | depends on UML | ||
340 | tristate "Hardware random number generator" | ||
341 | help | ||
342 | This option enables UML's "hardware" random number generator. It | ||
343 | attaches itself to the host's /dev/random, supplying as much entropy | ||
344 | as the host has, rather than the small amount the UML gets from its | ||
345 | own drivers. It registers itself as a standard hardware random number | ||
346 | generator, major 10, minor 183, and the canonical device name is | ||
347 | /dev/hwrng. | ||
348 | The way to make use of this is to install the rng-tools package | ||
349 | (check your distro, or download from | ||
350 | http://sourceforge.net/projects/gkernel/). rngd periodically reads | ||
351 | /dev/hwrng and injects the entropy into /dev/random. | ||
diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index 3ae7755a52e7..199ed283e149 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile | |||
@@ -22,7 +22,6 @@ obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o | |||
22 | obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o | 22 | obj-$(CONFIG_HW_RANDOM_MXC_RNGA) += mxc-rnga.o |
23 | obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o | 23 | obj-$(CONFIG_HW_RANDOM_OCTEON) += octeon-rng.o |
24 | obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o | 24 | obj-$(CONFIG_HW_RANDOM_NOMADIK) += nomadik-rng.o |
25 | obj-$(CONFIG_HW_RANDOM_PICOXCELL) += picoxcell-rng.o | ||
26 | obj-$(CONFIG_HW_RANDOM_PPC4XX) += ppc4xx-rng.o | 25 | obj-$(CONFIG_HW_RANDOM_PPC4XX) += ppc4xx-rng.o |
27 | obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o | 26 | obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o |
28 | obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o | 27 | obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o |
diff --git a/drivers/char/hw_random/n2-drv.c b/drivers/char/hw_random/n2-drv.c index 432232eefe05..292a5889f675 100644 --- a/drivers/char/hw_random/n2-drv.c +++ b/drivers/char/hw_random/n2-drv.c | |||
@@ -632,7 +632,7 @@ static int n2rng_probe(struct platform_device *op) | |||
632 | multi_capable = (match->data != NULL); | 632 | multi_capable = (match->data != NULL); |
633 | 633 | ||
634 | n2rng_driver_version(); | 634 | n2rng_driver_version(); |
635 | np = kzalloc(sizeof(*np), GFP_KERNEL); | 635 | np = devm_kzalloc(&op->dev, sizeof(*np), GFP_KERNEL); |
636 | if (!np) | 636 | if (!np) |
637 | goto out; | 637 | goto out; |
638 | np->op = op; | 638 | np->op = op; |
@@ -653,7 +653,7 @@ static int n2rng_probe(struct platform_device *op) | |||
653 | &np->hvapi_minor)) { | 653 | &np->hvapi_minor)) { |
654 | dev_err(&op->dev, "Cannot register suitable " | 654 | dev_err(&op->dev, "Cannot register suitable " |
655 | "HVAPI version.\n"); | 655 | "HVAPI version.\n"); |
656 | goto out_free; | 656 | goto out; |
657 | } | 657 | } |
658 | } | 658 | } |
659 | 659 | ||
@@ -676,15 +676,16 @@ static int n2rng_probe(struct platform_device *op) | |||
676 | dev_info(&op->dev, "Registered RNG HVAPI major %lu minor %lu\n", | 676 | dev_info(&op->dev, "Registered RNG HVAPI major %lu minor %lu\n", |
677 | np->hvapi_major, np->hvapi_minor); | 677 | np->hvapi_major, np->hvapi_minor); |
678 | 678 | ||
679 | np->units = kzalloc(sizeof(struct n2rng_unit) * np->num_units, | 679 | np->units = devm_kzalloc(&op->dev, |
680 | GFP_KERNEL); | 680 | sizeof(struct n2rng_unit) * np->num_units, |
681 | GFP_KERNEL); | ||
681 | err = -ENOMEM; | 682 | err = -ENOMEM; |
682 | if (!np->units) | 683 | if (!np->units) |
683 | goto out_hvapi_unregister; | 684 | goto out_hvapi_unregister; |
684 | 685 | ||
685 | err = n2rng_init_control(np); | 686 | err = n2rng_init_control(np); |
686 | if (err) | 687 | if (err) |
687 | goto out_free_units; | 688 | goto out_hvapi_unregister; |
688 | 689 | ||
689 | dev_info(&op->dev, "Found %s RNG, units: %d\n", | 690 | dev_info(&op->dev, "Found %s RNG, units: %d\n", |
690 | ((np->flags & N2RNG_FLAG_MULTI) ? | 691 | ((np->flags & N2RNG_FLAG_MULTI) ? |
@@ -697,7 +698,7 @@ static int n2rng_probe(struct platform_device *op) | |||
697 | 698 | ||
698 | err = hwrng_register(&np->hwrng); | 699 | err = hwrng_register(&np->hwrng); |
699 | if (err) | 700 | if (err) |
700 | goto out_free_units; | 701 | goto out_hvapi_unregister; |
701 | 702 | ||
702 | platform_set_drvdata(op, np); | 703 | platform_set_drvdata(op, np); |
703 | 704 | ||
@@ -705,15 +706,9 @@ static int n2rng_probe(struct platform_device *op) | |||
705 | 706 | ||
706 | return 0; | 707 | return 0; |
707 | 708 | ||
708 | out_free_units: | ||
709 | kfree(np->units); | ||
710 | np->units = NULL; | ||
711 | |||
712 | out_hvapi_unregister: | 709 | out_hvapi_unregister: |
713 | sun4v_hvapi_unregister(HV_GRP_RNG); | 710 | sun4v_hvapi_unregister(HV_GRP_RNG); |
714 | 711 | ||
715 | out_free: | ||
716 | kfree(np); | ||
717 | out: | 712 | out: |
718 | return err; | 713 | return err; |
719 | } | 714 | } |
@@ -730,11 +725,6 @@ static int n2rng_remove(struct platform_device *op) | |||
730 | 725 | ||
731 | sun4v_hvapi_unregister(HV_GRP_RNG); | 726 | sun4v_hvapi_unregister(HV_GRP_RNG); |
732 | 727 | ||
733 | kfree(np->units); | ||
734 | np->units = NULL; | ||
735 | |||
736 | kfree(np); | ||
737 | |||
738 | return 0; | 728 | return 0; |
739 | } | 729 | } |
740 | 730 | ||
diff --git a/drivers/char/hw_random/omap-rng.c b/drivers/char/hw_random/omap-rng.c index 9b89ff4881de..f66ea258382f 100644 --- a/drivers/char/hw_random/omap-rng.c +++ b/drivers/char/hw_random/omap-rng.c | |||
@@ -369,10 +369,8 @@ static int omap_rng_probe(struct platform_device *pdev) | |||
369 | int ret; | 369 | int ret; |
370 | 370 | ||
371 | priv = devm_kzalloc(dev, sizeof(struct omap_rng_dev), GFP_KERNEL); | 371 | priv = devm_kzalloc(dev, sizeof(struct omap_rng_dev), GFP_KERNEL); |
372 | if (!priv) { | 372 | if (!priv) |
373 | dev_err(&pdev->dev, "could not allocate memory\n"); | ||
374 | return -ENOMEM; | 373 | return -ENOMEM; |
375 | }; | ||
376 | 374 | ||
377 | omap_rng_ops.priv = (unsigned long)priv; | 375 | omap_rng_ops.priv = (unsigned long)priv; |
378 | platform_set_drvdata(pdev, priv); | 376 | platform_set_drvdata(pdev, priv); |
diff --git a/drivers/char/hw_random/picoxcell-rng.c b/drivers/char/hw_random/picoxcell-rng.c deleted file mode 100644 index eab5448ad56f..000000000000 --- a/drivers/char/hw_random/picoxcell-rng.c +++ /dev/null | |||
@@ -1,181 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2010-2011 Picochip Ltd., Jamie Iles | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | * All enquiries to support@picochip.com | ||
9 | */ | ||
10 | #include <linux/clk.h> | ||
11 | #include <linux/delay.h> | ||
12 | #include <linux/err.h> | ||
13 | #include <linux/hw_random.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/module.h> | ||
17 | #include <linux/platform_device.h> | ||
18 | |||
19 | #define DATA_REG_OFFSET 0x0200 | ||
20 | #define CSR_REG_OFFSET 0x0278 | ||
21 | #define CSR_OUT_EMPTY_MASK (1 << 24) | ||
22 | #define CSR_FAULT_MASK (1 << 1) | ||
23 | #define TRNG_BLOCK_RESET_MASK (1 << 0) | ||
24 | #define TAI_REG_OFFSET 0x0380 | ||
25 | |||
26 | /* | ||
27 | * The maximum amount of time in microseconds to spend waiting for data if the | ||
28 | * core wants us to wait. The TRNG should generate 32 bits every 320ns so a | ||
29 | * timeout of 20us seems reasonable. The TRNG does builtin tests of the data | ||
30 | * for randomness so we can't always assume there is data present. | ||
31 | */ | ||
32 | #define PICO_TRNG_TIMEOUT 20 | ||
33 | |||
34 | static void __iomem *rng_base; | ||
35 | static struct clk *rng_clk; | ||
36 | static struct device *rng_dev; | ||
37 | |||
38 | static inline u32 picoxcell_trng_read_csr(void) | ||
39 | { | ||
40 | return __raw_readl(rng_base + CSR_REG_OFFSET); | ||
41 | } | ||
42 | |||
43 | static inline bool picoxcell_trng_is_empty(void) | ||
44 | { | ||
45 | return picoxcell_trng_read_csr() & CSR_OUT_EMPTY_MASK; | ||
46 | } | ||
47 | |||
48 | /* | ||
49 | * Take the random number generator out of reset and make sure the interrupts | ||
50 | * are masked. We shouldn't need to get large amounts of random bytes so just | ||
51 | * poll the status register. The hardware generates 32 bits every 320ns so we | ||
52 | * shouldn't have to wait long enough to warrant waiting for an IRQ. | ||
53 | */ | ||
54 | static void picoxcell_trng_start(void) | ||
55 | { | ||
56 | __raw_writel(0, rng_base + TAI_REG_OFFSET); | ||
57 | __raw_writel(0, rng_base + CSR_REG_OFFSET); | ||
58 | } | ||
59 | |||
60 | static void picoxcell_trng_reset(void) | ||
61 | { | ||
62 | __raw_writel(TRNG_BLOCK_RESET_MASK, rng_base + CSR_REG_OFFSET); | ||
63 | __raw_writel(TRNG_BLOCK_RESET_MASK, rng_base + TAI_REG_OFFSET); | ||
64 | picoxcell_trng_start(); | ||
65 | } | ||
66 | |||
67 | /* | ||
68 | * Get some random data from the random number generator. The hw_random core | ||
69 | * layer provides us with locking. | ||
70 | */ | ||
71 | static int picoxcell_trng_read(struct hwrng *rng, void *buf, size_t max, | ||
72 | bool wait) | ||
73 | { | ||
74 | int i; | ||
75 | |||
76 | /* Wait for some data to become available. */ | ||
77 | for (i = 0; i < PICO_TRNG_TIMEOUT && picoxcell_trng_is_empty(); ++i) { | ||
78 | if (!wait) | ||
79 | return 0; | ||
80 | |||
81 | udelay(1); | ||
82 | } | ||
83 | |||
84 | if (picoxcell_trng_read_csr() & CSR_FAULT_MASK) { | ||
85 | dev_err(rng_dev, "fault detected, resetting TRNG\n"); | ||
86 | picoxcell_trng_reset(); | ||
87 | return -EIO; | ||
88 | } | ||
89 | |||
90 | if (i == PICO_TRNG_TIMEOUT) | ||
91 | return 0; | ||
92 | |||
93 | *(u32 *)buf = __raw_readl(rng_base + DATA_REG_OFFSET); | ||
94 | return sizeof(u32); | ||
95 | } | ||
96 | |||
97 | static struct hwrng picoxcell_trng = { | ||
98 | .name = "picoxcell", | ||
99 | .read = picoxcell_trng_read, | ||
100 | }; | ||
101 | |||
102 | static int picoxcell_trng_probe(struct platform_device *pdev) | ||
103 | { | ||
104 | int ret; | ||
105 | struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
106 | |||
107 | rng_base = devm_ioremap_resource(&pdev->dev, mem); | ||
108 | if (IS_ERR(rng_base)) | ||
109 | return PTR_ERR(rng_base); | ||
110 | |||
111 | rng_clk = devm_clk_get(&pdev->dev, NULL); | ||
112 | if (IS_ERR(rng_clk)) { | ||
113 | dev_warn(&pdev->dev, "no clk\n"); | ||
114 | return PTR_ERR(rng_clk); | ||
115 | } | ||
116 | |||
117 | ret = clk_enable(rng_clk); | ||
118 | if (ret) { | ||
119 | dev_warn(&pdev->dev, "unable to enable clk\n"); | ||
120 | return ret; | ||
121 | } | ||
122 | |||
123 | picoxcell_trng_start(); | ||
124 | ret = hwrng_register(&picoxcell_trng); | ||
125 | if (ret) | ||
126 | goto err_register; | ||
127 | |||
128 | rng_dev = &pdev->dev; | ||
129 | dev_info(&pdev->dev, "pixoxcell random number generator active\n"); | ||
130 | |||
131 | return 0; | ||
132 | |||
133 | err_register: | ||
134 | clk_disable(rng_clk); | ||
135 | return ret; | ||
136 | } | ||
137 | |||
138 | static int picoxcell_trng_remove(struct platform_device *pdev) | ||
139 | { | ||
140 | hwrng_unregister(&picoxcell_trng); | ||
141 | clk_disable(rng_clk); | ||
142 | |||
143 | return 0; | ||
144 | } | ||
145 | |||
146 | #ifdef CONFIG_PM | ||
147 | static int picoxcell_trng_suspend(struct device *dev) | ||
148 | { | ||
149 | clk_disable(rng_clk); | ||
150 | |||
151 | return 0; | ||
152 | } | ||
153 | |||
154 | static int picoxcell_trng_resume(struct device *dev) | ||
155 | { | ||
156 | return clk_enable(rng_clk); | ||
157 | } | ||
158 | |||
159 | static const struct dev_pm_ops picoxcell_trng_pm_ops = { | ||
160 | .suspend = picoxcell_trng_suspend, | ||
161 | .resume = picoxcell_trng_resume, | ||
162 | }; | ||
163 | #endif /* CONFIG_PM */ | ||
164 | |||
165 | static struct platform_driver picoxcell_trng_driver = { | ||
166 | .probe = picoxcell_trng_probe, | ||
167 | .remove = picoxcell_trng_remove, | ||
168 | .driver = { | ||
169 | .name = "picoxcell-trng", | ||
170 | .owner = THIS_MODULE, | ||
171 | #ifdef CONFIG_PM | ||
172 | .pm = &picoxcell_trng_pm_ops, | ||
173 | #endif /* CONFIG_PM */ | ||
174 | }, | ||
175 | }; | ||
176 | |||
177 | module_platform_driver(picoxcell_trng_driver); | ||
178 | |||
179 | MODULE_LICENSE("GPL"); | ||
180 | MODULE_AUTHOR("Jamie Iles"); | ||
181 | MODULE_DESCRIPTION("Picochip picoXcell TRNG driver"); | ||
diff --git a/drivers/char/hw_random/timeriomem-rng.c b/drivers/char/hw_random/timeriomem-rng.c index 439ff8b28c43..b6ab9ac3f34d 100644 --- a/drivers/char/hw_random/timeriomem-rng.c +++ b/drivers/char/hw_random/timeriomem-rng.c | |||
@@ -120,10 +120,8 @@ static int timeriomem_rng_probe(struct platform_device *pdev) | |||
120 | /* Allocate memory for the device structure (and zero it) */ | 120 | /* Allocate memory for the device structure (and zero it) */ |
121 | priv = devm_kzalloc(&pdev->dev, | 121 | priv = devm_kzalloc(&pdev->dev, |
122 | sizeof(struct timeriomem_rng_private_data), GFP_KERNEL); | 122 | sizeof(struct timeriomem_rng_private_data), GFP_KERNEL); |
123 | if (!priv) { | 123 | if (!priv) |
124 | dev_err(&pdev->dev, "failed to allocate device structure.\n"); | ||
125 | return -ENOMEM; | 124 | return -ENOMEM; |
126 | } | ||
127 | 125 | ||
128 | platform_set_drvdata(pdev, priv); | 126 | platform_set_drvdata(pdev, priv); |
129 | 127 | ||