Commit 6159c49e authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6

Pull crypto updates from Herbert Xu:
 "Algorithms:

   - Fix rmmod crash with x86/curve25519

   - Add ECDH NIST P384

   - Generate assembly files at build-time with perl scripts on arm

   - Switch to HMAC SHA512 DRBG as default DRBG

  Drivers:

   - Add sl3516 crypto engine

   - Add ECDH NIST P384 support in hisilicon/hpre

   - Add {ofb,cfb,ctr} over {aes,sm4} in hisilicon/sec

   - Add {ccm,gcm} over {aes,sm4} in hisilicon/sec

   - Enable omap hwrng driver for TI K3 family

   - Add support for AEAD algorithms in qce"

* 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (142 commits)
  crypto: sl3516 - depends on HAS_IOMEM
  crypto: hisilicon/qm - implement for querying hardware tasks status.
  crypto: sl3516 - Fix build warning without CONFIG_PM
  MAINTAINERS: update caam crypto driver maintainers list
  crypto: nx - Fix numerous sparse byte-order warnings
  crypto: nx - Fix RCU warning in nx842_OF_upd_status
  crypto: api - Move crypto attr definitions out of crypto.h
  crypto: nx - Fix memcpy() over-reading in nonce
  crypto: hisilicon/sec - Fix spelling mistake "fallbcak" -> "fallback"
  crypto: sa2ul - Remove unused auth_len variable
  crypto: sl3516 - fix duplicated inclusion
  crypto: hisilicon/zip - adds the max shaper type rate
  crypto: hisilicon/hpre - adds the max shaper type rate
  crypto: hisilicon/sec - adds the max shaper type rate
  crypto: hisilicon/qm - supports to inquiry each function's QoS
  crypto: hisilicon/qm - add pf ping single vf function
  crypto: hisilicon/qm - merges the work initialization process into a single function
  crypto: hisilicon/qm - add the "alg_qos" file node
  crypto: hisilicon/qm - supports writing QoS int the host
  crypto: api - remove CRYPTOA_U32 and related functions
  ...
parents 31e798fd 9f38b678
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/crypto/cortina,sl3516-crypto.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: SL3516 cryptographic offloader driver
maintainers:
- Corentin Labbe <clabbe@baylibre.com>
properties:
compatible:
enum:
- cortina,sl3516-crypto
reg:
maxItems: 1
interrupts:
maxItems: 1
clocks:
maxItems: 1
resets:
maxItems: 1
required:
- compatible
- reg
- interrupts
- clocks
- resets
additionalProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/clock/cortina,gemini-clock.h>
#include <dt-bindings/reset/cortina,gemini-reset.h>
crypto@62000000 {
compatible = "cortina,sl3516-crypto";
reg = <0x62000000 0x10000>;
interrupts = <7 IRQ_TYPE_EDGE_RISING>;
resets = <&syscon GEMINI_RESET_SECURITY>;
clocks = <&syscon GEMINI_CLK_GATE_SECURITY>;
};
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
# Copyright 2018 Linaro Ltd.
%YAML 1.2
---
$id: "http://devicetree.org/schemas/crypto/intel,ixp4xx-crypto.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
title: Intel IXP4xx cryptographic engine
maintainers:
- Linus Walleij <linus.walleij@linaro.org>
description: |
The Intel IXP4xx cryptographic engine makes use of the IXP4xx NPE
(Network Processing Engine). Since it is not a device on its own
it is defined as a subnode of the NPE, if crypto support is
available on the platform.
properties:
compatible:
const: intel,ixp4xx-crypto
intel,npe-handle:
$ref: '/schemas/types.yaml#/definitions/phandle-array'
maxItems: 1
description: phandle to the NPE this crypto engine is using, the cell
describing the NPE instance to be used.
queue-rx:
$ref: /schemas/types.yaml#/definitions/phandle-array
maxItems: 1
description: phandle to the RX queue on the NPE, the cell describing
the queue instance to be used.
queue-txready:
$ref: /schemas/types.yaml#/definitions/phandle-array
maxItems: 1
description: phandle to the TX READY queue on the NPE, the cell describing
the queue instance to be used.
required:
- compatible
- intel,npe-handle
- queue-rx
- queue-txready
additionalProperties: false
...@@ -26,9 +26,16 @@ properties: ...@@ -26,9 +26,16 @@ properties:
reg: reg:
items: items:
- description: NPE0 register range - description: NPE0 (NPE-A) register range
- description: NPE1 register range - description: NPE1 (NPE-B) register range
- description: NPE2 register range - description: NPE2 (NPE-C) register range
crypto:
$ref: /schemas/crypto/intel,ixp4xx-crypto.yaml#
type: object
description: Optional node for the embedded crypto engine, the node
should be named with the instance number of the NPE engine used for
the crypto engine.
required: required:
- compatible - compatible
...@@ -38,8 +45,15 @@ additionalProperties: false ...@@ -38,8 +45,15 @@ additionalProperties: false
examples: examples:
- | - |
npe@c8006000 { npe: npe@c8006000 {
compatible = "intel,ixp4xx-network-processing-engine"; compatible = "intel,ixp4xx-network-processing-engine";
reg = <0xc8006000 0x1000>, <0xc8007000 0x1000>, <0xc8008000 0x1000>; reg = <0xc8006000 0x1000>, <0xc8007000 0x1000>, <0xc8008000 0x1000>;
crypto {
compatible = "intel,ixp4xx-crypto";
intel,npe-handle = <&npe 2>;
queue-rx = <&qmgr 30>;
queue-txready = <&qmgr 29>;
};
}; };
... ...
...@@ -1811,6 +1811,7 @@ F: Documentation/devicetree/bindings/net/cortina,gemini-ethernet.txt ...@@ -1811,6 +1811,7 @@ F: Documentation/devicetree/bindings/net/cortina,gemini-ethernet.txt
F: Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt F: Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt
F: Documentation/devicetree/bindings/rtc/faraday,ftrtc010.txt F: Documentation/devicetree/bindings/rtc/faraday,ftrtc010.txt
F: arch/arm/mach-gemini/ F: arch/arm/mach-gemini/
F: drivers/crypto/gemini/
F: drivers/net/ethernet/cortina/ F: drivers/net/ethernet/cortina/
F: drivers/pinctrl/pinctrl-gemini.c F: drivers/pinctrl/pinctrl-gemini.c
F: drivers/rtc/rtc-ftrtc010.c F: drivers/rtc/rtc-ftrtc010.c
...@@ -1972,6 +1973,7 @@ F: Documentation/devicetree/bindings/interrupt-controller/intel,ixp4xx-interrupt ...@@ -1972,6 +1973,7 @@ F: Documentation/devicetree/bindings/interrupt-controller/intel,ixp4xx-interrupt
F: Documentation/devicetree/bindings/timer/intel,ixp4xx-timer.yaml F: Documentation/devicetree/bindings/timer/intel,ixp4xx-timer.yaml
F: arch/arm/mach-ixp4xx/ F: arch/arm/mach-ixp4xx/
F: drivers/clocksource/timer-ixp4xx.c F: drivers/clocksource/timer-ixp4xx.c
F: drivers/crypto/ixp4xx_crypto.c
F: drivers/gpio/gpio-ixp4xx.c F: drivers/gpio/gpio-ixp4xx.c
F: drivers/irqchip/irq-ixp4xx.c F: drivers/irqchip/irq-ixp4xx.c
F: include/linux/irqchip/irq-ixp4xx.h F: include/linux/irqchip/irq-ixp4xx.h
...@@ -7179,7 +7181,7 @@ F: include/video/ ...@@ -7179,7 +7181,7 @@ F: include/video/
FREESCALE CAAM (Cryptographic Acceleration and Assurance Module) DRIVER FREESCALE CAAM (Cryptographic Acceleration and Assurance Module) DRIVER
M: Horia Geantă <horia.geanta@nxp.com> M: Horia Geantă <horia.geanta@nxp.com>
M: Aymen Sghaier <aymen.sghaier@nxp.com> M: Pankaj Gupta <pankaj.gupta@nxp.com>
L: linux-crypto@vger.kernel.org L: linux-crypto@vger.kernel.org
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/crypto/fsl-sec4.txt F: Documentation/devicetree/bindings/crypto/fsl-sec4.txt
...@@ -7569,6 +7571,12 @@ M: Kieran Bingham <kbingham@kernel.org> ...@@ -7569,6 +7571,12 @@ M: Kieran Bingham <kbingham@kernel.org>
S: Supported S: Supported
F: scripts/gdb/ F: scripts/gdb/
GEMINI CRYPTO DRIVER
M: Corentin Labbe <clabbe@baylibre.com>
L: linux-crypto@vger.kernel.org
S: Maintained
F: drivers/crypto/gemini/
GEMTEK FM RADIO RECEIVER DRIVER GEMTEK FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
...@@ -9240,6 +9248,12 @@ F: Documentation/admin-guide/media/ipu3_rcb.svg ...@@ -9240,6 +9248,12 @@ F: Documentation/admin-guide/media/ipu3_rcb.svg
F: Documentation/userspace-api/media/v4l/pixfmt-meta-intel-ipu3.rst F: Documentation/userspace-api/media/v4l/pixfmt-meta-intel-ipu3.rst
F: drivers/staging/media/ipu3/ F: drivers/staging/media/ipu3/
INTEL IXP4XX CRYPTO SUPPORT
M: Corentin Labbe <clabbe@baylibre.com>
L: linux-crypto@vger.kernel.org
S: Maintained
F: drivers/crypto/ixp4xx_crypto.c
INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT
M: Krzysztof Halasa <khalasa@piap.pl> M: Krzysztof Halasa <khalasa@piap.pl>
S: Maintained S: Maintained
...@@ -15143,6 +15157,13 @@ S: Maintained ...@@ -15143,6 +15157,13 @@ S: Maintained
F: Documentation/devicetree/bindings/opp/qcom-nvmem-cpufreq.txt F: Documentation/devicetree/bindings/opp/qcom-nvmem-cpufreq.txt
F: drivers/cpufreq/qcom-cpufreq-nvmem.c F: drivers/cpufreq/qcom-cpufreq-nvmem.c
QUALCOMM CRYPTO DRIVERS
M: Thara Gopinath <thara.gopinath@linaro.org>
L: linux-crypto@vger.kernel.org
L: linux-arm-msm@vger.kernel.org
S: Maintained
F: drivers/crypto/qce/
QUALCOMM EMAC GIGABIT ETHERNET DRIVER QUALCOMM EMAC GIGABIT ETHERNET DRIVER
M: Timur Tabi <timur@kernel.org> M: Timur Tabi <timur@kernel.org>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
......
...@@ -45,20 +45,12 @@ poly1305-arm-y := poly1305-core.o poly1305-glue.o ...@@ -45,20 +45,12 @@ poly1305-arm-y := poly1305-core.o poly1305-glue.o
nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o
curve25519-neon-y := curve25519-core.o curve25519-glue.o curve25519-neon-y := curve25519-core.o curve25519-glue.o
ifdef REGENERATE_ARM_CRYPTO
quiet_cmd_perl = PERL $@ quiet_cmd_perl = PERL $@
cmd_perl = $(PERL) $(<) > $(@) cmd_perl = $(PERL) $(<) > $(@)
$(src)/poly1305-core.S_shipped: $(src)/poly1305-armv4.pl $(obj)/%-core.S: $(src)/%-armv4.pl
$(call cmd,perl) $(call cmd,perl)
$(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl
$(call cmd,perl)
$(src)/sha512-core.S_shipped: $(src)/sha512-armv4.pl
$(call cmd,perl)
endif
clean-files += poly1305-core.S sha256-core.S sha512-core.S clean-files += poly1305-core.S sha256-core.S sha512-core.S
# massage the perlasm code a bit so we only get the NEON routine if we need it # massage the perlasm code a bit so we only get the NEON routine if we need it
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -233,12 +233,38 @@ static struct platform_device *ixp46x_devices[] __initdata = { ...@@ -233,12 +233,38 @@ static struct platform_device *ixp46x_devices[] __initdata = {
unsigned long ixp4xx_exp_bus_size; unsigned long ixp4xx_exp_bus_size;
EXPORT_SYMBOL(ixp4xx_exp_bus_size); EXPORT_SYMBOL(ixp4xx_exp_bus_size);
static struct platform_device_info ixp_dev_info __initdata = {
.name = "ixp4xx_crypto",
.id = 0,
.dma_mask = DMA_BIT_MASK(32),
};
static int __init ixp_crypto_register(void)
{
struct platform_device *pdev;
if (!(~(*IXP4XX_EXP_CFG2) & (IXP4XX_FEATURE_HASH |
IXP4XX_FEATURE_AES | IXP4XX_FEATURE_DES))) {
printk(KERN_ERR "ixp_crypto: No HW crypto available\n");
return -ENODEV;
}
pdev = platform_device_register_full(&ixp_dev_info);
if (IS_ERR(pdev))
return PTR_ERR(pdev);
return 0;
}
void __init ixp4xx_sys_init(void) void __init ixp4xx_sys_init(void)
{ {
ixp4xx_exp_bus_size = SZ_16M; ixp4xx_exp_bus_size = SZ_16M;
platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices)); platform_add_devices(ixp4xx_devices, ARRAY_SIZE(ixp4xx_devices));
if (IS_ENABLED(CONFIG_CRYPTO_DEV_IXP4XX))
ixp_crypto_register();
if (cpu_is_ixp46x()) { if (cpu_is_ixp46x()) {
int region; int region;
......
...@@ -68,19 +68,13 @@ CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS ...@@ -68,19 +68,13 @@ CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
$(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE $(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE
$(call if_changed_rule,cc_o_c) $(call if_changed_rule,cc_o_c)
ifdef REGENERATE_ARM64_CRYPTO
quiet_cmd_perlasm = PERLASM $@ quiet_cmd_perlasm = PERLASM $@
cmd_perlasm = $(PERL) $(<) void $(@) cmd_perlasm = $(PERL) $(<) void $(@)
$(src)/poly1305-core.S_shipped: $(src)/poly1305-armv8.pl $(obj)/%-core.S: $(src)/%-armv8.pl
$(call cmd,perlasm) $(call cmd,perlasm)
$(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl $(obj)/sha256-core.S: $(src)/sha512-armv8.pl
$(call cmd,perlasm) $(call cmd,perlasm)
$(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl
$(call cmd,perlasm)
endif
clean-files += poly1305-core.S sha256-core.S sha512-core.S clean-files += poly1305-core.S sha256-core.S sha512-core.S
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -1500,7 +1500,7 @@ static int __init curve25519_mod_init(void) ...@@ -1500,7 +1500,7 @@ static int __init curve25519_mod_init(void)
static void __exit curve25519_mod_exit(void) static void __exit curve25519_mod_exit(void)
{ {
if (IS_REACHABLE(CONFIG_CRYPTO_KPP) && if (IS_REACHABLE(CONFIG_CRYPTO_KPP) &&
(boot_cpu_has(X86_FEATURE_BMI2) || boot_cpu_has(X86_FEATURE_ADX))) static_branch_likely(&curve25519_use_bmi2_adx))
crypto_unregister_kpp(&curve25519_alg); crypto_unregister_kpp(&curve25519_alg);
} }
......
...@@ -411,7 +411,7 @@ int af_alg_make_sg(struct af_alg_sgl *sgl, struct iov_iter *iter, int len) ...@@ -411,7 +411,7 @@ int af_alg_make_sg(struct af_alg_sgl *sgl, struct iov_iter *iter, int len)
if (n < 0) if (n < 0)
return n; return n;
npages = (off + n + PAGE_SIZE - 1) >> PAGE_SHIFT; npages = DIV_ROUND_UP(off + n, PAGE_SIZE);
if (WARN_ON(npages == 0)) if (WARN_ON(npages == 0))
return -EINVAL; return -EINVAL;
/* Add one extra for linking */ /* Add one extra for linking */
......
...@@ -868,24 +868,6 @@ const char *crypto_attr_alg_name(struct rtattr *rta) ...@@ -868,24 +868,6 @@ const char *crypto_attr_alg_name(struct rtattr *rta)
} }
EXPORT_SYMBOL_GPL(crypto_attr_alg_name); EXPORT_SYMBOL_GPL(crypto_attr_alg_name);
int crypto_attr_u32(struct rtattr *rta, u32 *num)
{
struct crypto_attr_u32 *nu32;
if (!rta)
return -ENOENT;
if (RTA_PAYLOAD(rta) < sizeof(*nu32))
return -EINVAL;
if (rta->rta_type != CRYPTOA_U32)
return -EINVAL;
nu32 = RTA_DATA(rta);
*num = nu32->num;
return 0;
}
EXPORT_SYMBOL_GPL(crypto_attr_u32);
int crypto_inst_setname(struct crypto_instance *inst, const char *name, int crypto_inst_setname(struct crypto_instance *inst, const char *name,
struct crypto_alg *alg) struct crypto_alg *alg)
{ {
......
...@@ -28,16 +28,9 @@ struct cryptomgr_param { ...@@ -28,16 +28,9 @@ struct cryptomgr_param {
struct crypto_attr_type data; struct crypto_attr_type data;
} type; } type;
union { struct {
struct rtattr attr; struct rtattr attr;
struct { struct crypto_attr_alg data;
struct rtattr attr;
struct crypto_attr_alg data;
} alg;
struct {
struct rtattr attr;
struct crypto_attr_u32 data;
} nu32;
} attrs[CRYPTO_MAX_ATTRS]; } attrs[CRYPTO_MAX_ATTRS];
char template[CRYPTO_MAX_ALG_NAME]; char template[CRYPTO_MAX_ALG_NAME];
...@@ -104,12 +97,10 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval) ...@@ -104,12 +97,10 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
i = 0; i = 0;
for (;;) { for (;;) {
int notnum = 0;
name = ++p; name = ++p;
for (; isalnum(*p) || *p == '-' || *p == '_'; p++) for (; isalnum(*p) || *p == '-' || *p == '_'; p++)
notnum |= !isdigit(*p); ;
if (*p == '(') { if (*p == '(') {
int recursion = 0; int recursion = 0;
...@@ -123,7 +114,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval) ...@@ -123,7 +114,6 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
break; break;
} }
notnum = 1;
p++; p++;
} }
...@@ -131,18 +121,9 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval) ...@@ -131,18 +121,9 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
if (!len) if (!len)
goto err_free_param; goto err_free_param;
if (notnum) { param->attrs[i].attr.rta_len = sizeof(param->attrs[i]);
param->attrs[i].alg.attr.rta_len = param->attrs[i].attr.rta_type = CRYPTOA_ALG;
sizeof(param->attrs[i].alg); memcpy(param->attrs[i].data.name, name, len);
param->attrs[i].alg.attr.rta_type = CRYPTOA_ALG;
memcpy(param->attrs[i].alg.data.name, name, len);
} else {
param->attrs[i].nu32.attr.rta_len =
sizeof(param->attrs[i].nu32);
param->attrs[i].nu32.attr.rta_type = CRYPTOA_U32;
param->attrs[i].nu32.data.num =
simple_strtol(name, NULL, 0);
}
param->tb[i + 1] = &param->attrs[i].attr; param->tb[i + 1] = &param->attrs[i].attr;
i++; i++;
......
...@@ -176,18 +176,18 @@ static const struct drbg_core drbg_cores[] = { ...@@ -176,18 +176,18 @@ static const struct drbg_core drbg_cores[] = {
.blocklen_bytes = 48, .blocklen_bytes = 48,
.cra_name = "hmac_sha384", .cra_name = "hmac_sha384",
.backend_cra_name = "hmac(sha384)", .backend_cra_name = "hmac(sha384)",
}, {
.flags = DRBG_HMAC | DRBG_STRENGTH256,
.statelen = 64, /* block length of cipher */
.blocklen_bytes = 64,
.cra_name = "hmac_sha512",
.backend_cra_name = "hmac(sha512)",
}, { }, {
.flags = DRBG_HMAC | DRBG_STRENGTH256, .flags = DRBG_HMAC | DRBG_STRENGTH256,
.statelen = 32, /* block length of cipher */ .statelen = 32, /* block length of cipher */
.blocklen_bytes = 32, .blocklen_bytes = 32,
.cra_name = "hmac_sha256", .cra_name = "hmac_sha256",
.backend_cra_name = "hmac(sha256)", .backend_cra_name = "hmac(sha256)",
}, {
.flags = DRBG_HMAC | DRBG_STRENGTH256,
.statelen = 64, /* block length of cipher */
.blocklen_bytes = 64,
.cra_name = "hmac_sha512",
.backend_cra_name = "hmac(sha512)",
}, },
#endif /* CONFIG_CRYPTO_DRBG_HMAC */ #endif /* CONFIG_CRYPTO_DRBG_HMAC */
}; };
......
...@@ -141,7 +141,7 @@ static struct kpp_alg ecdh_nist_p192 = { ...@@ -141,7 +141,7 @@ static struct kpp_alg ecdh_nist_p192 = {
.init = ecdh_nist_p192_init_tfm, .init = ecdh_nist_p192_init_tfm,
.base = { .base = {
.cra_name = "ecdh-nist-p192", .cra_name = "ecdh-nist-p192",
.cra_driver_name = "ecdh-generic", .cra_driver_name = "ecdh-nist-p192-generic",
.cra_priority = 100, .cra_priority = 100,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
.cra_ctxsize = sizeof(struct ecdh_ctx), .cra_ctxsize = sizeof(struct ecdh_ctx),
...@@ -166,7 +166,32 @@ static struct kpp_alg ecdh_nist_p256 = { ...@@ -166,7 +166,32 @@ static struct kpp_alg ecdh_nist_p256 = {
.init = ecdh_nist_p256_init_tfm, .init = ecdh_nist_p256_init_tfm,
.base = { .base = {
.cra_name = "ecdh-nist-p256", .cra_name = "ecdh-nist-p256",
.cra_driver_name = "ecdh-generic", .cra_driver_name = "ecdh-nist-p256-generic",
.cra_priority = 100,
.cra_module = THIS_MODULE,
.cra_ctxsize = sizeof(struct ecdh_ctx),
},
};
static int ecdh_nist_p384_init_tfm(struct crypto_kpp *tfm)
{
struct ecdh_ctx *ctx = ecdh_get_ctx(tfm);
ctx->curve_id = ECC_CURVE_NIST_P384;
ctx->ndigits = ECC_CURVE_NIST_P384_DIGITS;
return 0;
}
static struct kpp_alg ecdh_nist_p384 = {
.set_secret = ecdh_set_secret,
.generate_public_key = ecdh_compute_value,
.compute_shared_secret = ecdh_compute_value,
.max_size = ecdh_max_size,
.init = ecdh_nist_p384_init_tfm,
.base = {
.cra_name = "ecdh-nist-p384",
.cra_driver_name = "ecdh-nist-p384-generic",
.cra_priority = 100, .cra_priority = 100,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
.cra_ctxsize = sizeof(struct ecdh_ctx), .cra_ctxsize = sizeof(struct ecdh_ctx),
...@@ -179,10 +204,27 @@ static int ecdh_init(void) ...@@ -179,10 +204,27 @@ static int ecdh_init(void)
{ {
int ret; int ret;
/* NIST p192 will fail to register in FIPS mode */
ret = crypto_register_kpp(&ecdh_nist_p192); ret = crypto_register_kpp(&ecdh_nist_p192);
ecdh_nist_p192_registered = ret == 0; ecdh_nist_p192_registered = ret == 0;
return crypto_register_kpp(&ecdh_nist_p256); ret = crypto_register_kpp(&ecdh_nist_p256);
if (ret)
goto nist_p256_error;
ret = crypto_register_kpp(&ecdh_nist_p384);
if (ret)
goto nist_p384_error;
return 0;
nist_p384_error:
crypto_unregister_kpp(&ecdh_nist_p256);
nist_p256_error:
if (ecdh_nist_p192_registered)
crypto_unregister_kpp(&ecdh_nist_p192);
return ret;
} }
static void ecdh_exit(void) static void ecdh_exit(void)
...@@ -190,6 +232,7 @@ static void ecdh_exit(void) ...@@ -190,6 +232,7 @@ static void ecdh_exit(void)
if (ecdh_nist_p192_registered) if (ecdh_nist_p192_registered)
crypto_unregister_kpp(&ecdh_nist_p192); crypto_unregister_kpp(&ecdh_nist_p192);
crypto_unregister_kpp(&ecdh_nist_p256); crypto_unregister_kpp(&ecdh_nist_p256);
crypto_unregister_kpp(&ecdh_nist_p384);
} }
subsys_initcall(ecdh_init); subsys_initcall(ecdh_init);
......
...@@ -29,6 +29,18 @@ struct crypto_larval { ...@@ -29,6 +29,18 @@ struct crypto_larval {
u32 mask; u32 mask;
}; };
enum {
CRYPTOA_UNSPEC,
CRYPTOA_ALG,
CRYPTOA_TYPE,
__CRYPTOA_MAX,
};
#define CRYPTOA_MAX (__CRYPTOA_MAX - 1)
/* Maximum number of (rtattr) parameters for each template. */
#define CRYPTO_MAX_ATTRS 32
extern struct list_head crypto_alg_list; extern struct list_head crypto_alg_list;
extern struct rw_semaphore crypto_alg_sem; extern struct rw_semaphore crypto_alg_sem;
extern struct blocking_notifier_head crypto_chain; extern struct blocking_notifier_head crypto_chain;
......
...@@ -819,7 +819,7 @@ static void khazad_crypt(const u64 roundKey[KHAZAD_ROUNDS + 1], ...@@ -819,7 +819,7 @@ static void khazad_crypt(const u64 roundKey[KHAZAD_ROUNDS + 1],
T6[(int)(state >> 8) & 0xff] ^ T6[(int)(state >> 8) & 0xff] ^
T7[(int)(state ) & 0xff] ^ T7[(int)(state ) & 0xff] ^
roundKey[r]; roundKey[r];
} }
state = (T0[(int)(state >> 56) ] & 0xff00000000000000ULL) ^ state = (T0[(int)(state >> 56) ] & 0xff00000000000000ULL) ^
(T1[(int)(state >> 48) & 0xff] & 0x00ff000000000000ULL) ^ (T1[(int)(state >> 48) & 0xff] & 0x00ff000000000000ULL) ^
......
...@@ -20,12 +20,24 @@ ...@@ -20,12 +20,24 @@
static const struct crypto_type crypto_shash_type; static const struct crypto_type crypto_shash_type;
int shash_no_setkey(struct crypto_shash *tfm, const u8 *key, static int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
unsigned int keylen) unsigned int keylen)
{ {
return -ENOSYS; return -ENOSYS;
} }
EXPORT_SYMBOL_GPL(shash_no_setkey);
/*
* Check whether an shash algorithm has a setkey function.
*
* For CFI compatibility, this must not be an inline function. This is because
* when CFI is enabled, modules won't get the same address for shash_no_setkey
* (if it were exported, which inlining would require) as the core kernel will.
*/
bool crypto_shash_alg_has_setkey(struct shash_alg *alg)
{
return alg->setkey != shash_no_setkey;
}
EXPORT_SYMBOL_GPL(crypto_shash_alg_has_setkey);
static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key, static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
unsigned int keylen) unsigned int keylen)
......
...@@ -79,10 +79,17 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec) ...@@ -79,10 +79,17 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
goto free; goto free;
rc = -ENOMEM; rc = -ENOMEM;
ec->Q = mpi_point_new(0);
if (!ec->Q)
goto free;
/* mpi_ec_setup_elliptic_curve */ /* mpi_ec_setup_elliptic_curve */
ec->G = mpi_point_new(0); ec->G = mpi_point_new(0);
if (!ec->G) if (!ec->G) {
mpi_point_release(ec->Q);
goto free; goto free;
}
mpi_set(ec->G->x, x); mpi_set(ec->G->x, x);
mpi_set(ec->G->y, y); mpi_set(ec->G->y, y);
...@@ -91,6 +98,7 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec) ...@@ -91,6 +98,7 @@ static int sm2_ec_ctx_init(struct mpi_ec_ctx *ec)
rc = -EINVAL; rc = -EINVAL;
ec->n = mpi_scanval(ecp->n); ec->n = mpi_scanval(ecp->n);
if (!ec->n) { if (!ec->n) {
mpi_point_release(ec->Q);
mpi_point_release(ec->G); mpi_point_release(ec->G);
goto free; goto free;
} }
...@@ -386,27 +394,15 @@ static int sm2_set_pub_key(struct crypto_akcipher *tfm, ...@@ -386,27 +394,15 @@ static int sm2_set_pub_key(struct crypto_akcipher *tfm,
MPI a; MPI a;
int rc; int rc;
ec->Q = mpi_point_new(0);
if (!ec->Q)
return -ENOMEM;
/* include the uncompressed flag '0x04' */ /* include the uncompressed flag '0x04' */
rc = -ENOMEM;
a = mpi_read_raw_data(key, keylen); a = mpi_read_raw_data(key, keylen);
if (!a) if (!a)
goto error; return -ENOMEM;
mpi_normalize(a); mpi_normalize(a);
rc = sm2_ecc_os2ec(ec->Q, a); rc = sm2_ecc_os2ec(ec->Q, a);
mpi_free(a); mpi_free(a);
if (rc)
goto error;
return 0;
error:
mpi_point_release(ec->Q);
ec->Q = NULL;
return rc; return rc;
} }
......
...@@ -1847,10 +1847,22 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) ...@@ -1847,10 +1847,22 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
ret += tcrypt_test("cts(cbc(aes))"); ret += tcrypt_test("cts(cbc(aes))");
break; break;
case 39:
ret += tcrypt_test("xxhash64");
break;
case 40: case 40:
ret += tcrypt_test("rmd160"); ret += tcrypt_test("rmd160");
break; break;
case 41:
ret += tcrypt_test("blake2s-256");
break;
case 42:
ret += tcrypt_test("blake2b-512");
break;
case 43: case 43:
ret += tcrypt_test("ecb(seed)"); ret += tcrypt_test("ecb(seed)");
break; break;
...@@ -2356,10 +2368,22 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) ...@@ -2356,10 +2368,22 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
test_hash_speed("sha224", sec, generic_hash_speed_template); test_hash_speed("sha224", sec, generic_hash_speed_template);
if (mode > 300 && mode < 400) break; if (mode > 300 && mode < 400) break;
fallthrough; fallthrough;
case 314:
test_hash_speed("xxhash64", sec, generic_hash_speed_template);
if (mode > 300 && mode < 400) break;
fallthrough;
case 315: case 315:
test_hash_speed("rmd160", sec, generic_hash_speed_template); test_hash_speed("rmd160", sec, generic_hash_speed_template);
if (mode > 300 && mode < 400) break; if (mode > 300 && mode < 400) break;
fallthrough; fallthrough;
case 316:
test_hash_speed("blake2s-256", sec, generic_hash_speed_template);
if (mode > 300 && mode < 400) break;
fallthrough;
case 317:
test_hash_speed("blake2b-512", sec, generic_hash_speed_template);
if (mode > 300 && mode < 400) break;
fallthrough;
case 318: case 318:
klen = 16; klen = 16;
test_hash_speed("ghash", sec, generic_hash_speed_template); test_hash_speed("ghash", sec, generic_hash_speed_template);
...@@ -2456,10 +2480,22 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) ...@@ -2456,10 +2480,22 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
test_ahash_speed("sha224", sec, generic_hash_speed_template); test_ahash_speed("sha224", sec, generic_hash_speed_template);
if (mode > 400 && mode < 500) break; if (mode > 400 && mode < 500) break;
fallthrough; fallthrough;
case 414:
test_ahash_speed("xxhash64", sec, generic_hash_speed_template);
if (mode > 400 && mode < 500) break;
fallthrough;
case 415: case 415:
test_ahash_speed("rmd160", sec, generic_hash_speed_template); test_ahash_speed("rmd160", sec, generic_hash_speed_template);
if (mode > 400 && mode < 500) break; if (mode > 400 && mode < 500) break;
fallthrough; fallthrough;
case 416:
test_ahash_speed("blake2s-256", sec, generic_hash_speed_template);
if (mode > 400 && mode < 500) break;
fallthrough;
case 417:
test_ahash_speed("blake2b-512", sec, generic_hash_speed_template);
if (mode > 400 && mode < 500) break;
fallthrough;
case 418: case 418:
test_ahash_speed("sha3-224", sec, generic_hash_speed_template); test_ahash_speed("sha3-224", sec, generic_hash_speed_template);
if (mode > 400 && mode < 500) break; if (mode > 400 && mode < 500) break;
......
...@@ -4899,21 +4899,25 @@ static const struct alg_test_desc alg_test_descs[] = { ...@@ -4899,21 +4899,25 @@ static const struct alg_test_desc alg_test_descs[] = {
} }
}, { }, {
#endif #endif
#ifndef CONFIG_CRYPTO_FIPS
.alg = "ecdh-nist-p192", .alg = "ecdh-nist-p192",
.test = alg_test_kpp, .test = alg_test_kpp,
.fips_allowed = 1,
.suite = { .suite = {
.kpp = __VECS(ecdh_p192_tv_template) .kpp = __VECS(ecdh_p192_tv_template)
} }
}, { }, {
#endif
.alg = "ecdh-nist-p256", .alg = "ecdh-nist-p256",
.test = alg_test_kpp, .test = alg_test_kpp,
.fips_allowed = 1, .fips_allowed = 1,
.suite = { .suite = {
.kpp = __VECS(ecdh_p256_tv_template) .kpp = __VECS(ecdh_p256_tv_template)
} }
}, {
.alg = "ecdh-nist-p384",
.test = alg_test_kpp,
.fips_allowed = 1,
.suite = {
.kpp = __VECS(ecdh_p384_tv_template)
}
}, { }, {
.alg = "ecdsa-nist-p192", .alg = "ecdsa-nist-p192",
.test = alg_test_akcipher, .test = alg_test_akcipher,
......
...@@ -2685,7 +2685,6 @@ static const struct kpp_testvec curve25519_tv_template[] = { ...@@ -2685,7 +2685,6 @@ static const struct kpp_testvec curve25519_tv_template[] = {
} }
}; };
#ifndef CONFIG_CRYPTO_FIPS
static const struct kpp_testvec ecdh_p192_tv_template[] = { static const struct kpp_testvec ecdh_p192_tv_template[] = {
{ {
.secret = .secret =
...@@ -2719,13 +2718,12 @@ static const struct kpp_testvec ecdh_p192_tv_template[] = { ...@@ -2719,13 +2718,12 @@ static const struct kpp_testvec ecdh_p192_tv_template[] = {
"\xf4\x57\xcc\x4f\x1f\x4e\x31\xcc" "\xf4\x57\xcc\x4f\x1f\x4e\x31\xcc"
"\xe3\x40\x60\xc8\x06\x93\xc6\x2e" "\xe3\x40\x60\xc8\x06\x93\xc6\x2e"
"\x99\x80\x81\x28\xaf\xc5\x51\x74", "\x99\x80\x81\x28\xaf\xc5\x51\x74",
.secret_size = 32, .secret_size = 30,
.b_public_size = 48, .b_public_size = 48,
.expected_a_public_size = 48, .expected_a_public_size = 48,
.expected_ss_size = 24 .expected_ss_size = 24
} }
}; };
#endif
static const struct kpp_testvec ecdh_p256_tv_template[] = { static const struct kpp_testvec ecdh_p256_tv_template[] = {
{ {
...@@ -2766,7 +2764,7 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = { ...@@ -2766,7 +2764,7 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = {
"\x9f\x4a\x38\xcc\xc0\x2c\x49\x2f" "\x9f\x4a\x38\xcc\xc0\x2c\x49\x2f"
"\xb1\x32\xbb\xaf\x22\x61\xda\xcb" "\xb1\x32\xbb\xaf\x22\x61\xda\xcb"
"\x6f\xdb\xa9\xaa\xfc\x77\x81\xf3", "\x6f\xdb\xa9\xaa\xfc\x77\x81\xf3",
.secret_size = 40, .secret_size = 38,
.b_public_size = 64, .b_public_size = 64,
.expected_a_public_size = 64, .expected_a_public_size = 64,
.expected_ss_size = 32 .expected_ss_size = 32
...@@ -2804,8 +2802,8 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = { ...@@ -2804,8 +2802,8 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = {
"\x37\x08\xcc\x40\x5e\x7a\xfd\x6a" "\x37\x08\xcc\x40\x5e\x7a\xfd\x6a"
"\x6a\x02\x6e\x41\x87\x68\x38\x77" "\x6a\x02\x6e\x41\x87\x68\x38\x77"
"\xfa\xa9\x44\x43\x2d\xef\x09\xdf", "\xfa\xa9\x44\x43\x2d\xef\x09\xdf",
.secret_size = 8, .secret_size = 6,
.b_secret_size = 40, .b_secret_size = 38,
.b_public_size = 64, .b_public_size = 64,
.expected_a_public_size = 64, .expected_a_public_size = 64,
.expected_ss_size = 32, .expected_ss_size = 32,
...@@ -2813,6 +2811,67 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = { ...@@ -2813,6 +2811,67 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = {
} }
}; };
/*
* NIST P384 test vectors from RFC5903
*/
static const struct kpp_testvec ecdh_p384_tv_template[] = {
{
.secret =
#ifdef __LITTLE_ENDIAN
"\x02\x00" /* type */
"\x36\x00" /* len */
"\x30\x00" /* key_size */
#else
"\x00\x02" /* type */
"\x00\x36" /* len */
"\x00\x30" /* key_size */
#endif
"\x09\x9F\x3C\x70\x34\xD4\xA2\xC6"
"\x99\x88\x4D\x73\xA3\x75\xA6\x7F"
"\x76\x24\xEF\x7C\x6B\x3C\x0F\x16"
"\x06\x47\xB6\x74\x14\xDC\xE6\x55"
"\xE3\x5B\x53\x80\x41\xE6\x49\xEE"
"\x3F\xAE\xF8\x96\x78\x3A\xB1\x94",
.b_public =
"\xE5\x58\xDB\xEF\x53\xEE\xCD\xE3"
"\xD3\xFC\xCF\xC1\xAE\xA0\x8A\x89"
"\xA9\x87\x47\x5D\x12\xFD\x95\x0D"
"\x83\xCF\xA4\x17\x32\xBC\x50\x9D"
"\x0D\x1A\xC4\x3A\x03\x36\xDE\xF9"
"\x6F\xDA\x41\xD0\x77\x4A\x35\x71"
"\xDC\xFB\xEC\x7A\xAC\xF3\x19\x64"
"\x72\x16\x9E\x83\x84\x30\x36\x7F"
"\x66\xEE\xBE\x3C\x6E\x70\xC4\x16"
"\xDD\x5F\x0C\x68\x75\x9D\xD1\xFF"
"\xF8\x3F\xA4\x01\x42\x20\x9D\xFF"
"\x5E\xAA\xD9\x6D\xB9\xE6\x38\x6C",
.expected_a_public =
"\x66\x78\x42\xD7\xD1\x80\xAC\x2C"
"\xDE\x6F\x74\xF3\x75\x51\xF5\x57"
"\x55\xC7\x64\x5C\x20\xEF\x73\xE3"
"\x16\x34\xFE\x72\xB4\xC5\x5E\xE6"
"\xDE\x3A\xC8\x08\xAC\xB4\xBD\xB4"
"\xC8\x87\x32\xAE\xE9\x5F\x41\xAA"
"\x94\x82\xED\x1F\xC0\xEE\xB9\xCA"
"\xFC\x49\x84\x62\x5C\xCF\xC2\x3F"
"\x65\x03\x21\x49\xE0\xE1\x44\xAD"
"\xA0\x24\x18\x15\x35\xA0\xF3\x8E"
"\xEB\x9F\xCF\xF3\xC2\xC9\x47\xDA"
"\xE6\x9B\x4C\x63\x45\x73\xA8\x1C",
.expected_ss =
"\x11\x18\x73\x31\xC2\x79\x96\x2D"
"\x93\xD6\x04\x24\x3F\xD5\x92\xCB"
"\x9D\x0A\x92\x6F\x42\x2E\x47\x18"
"\x75\x21\x28\x7E\x71\x56\xC5\xC4"
"\xD6\x03\x13\x55\x69\xB9\xE9\xD0"
"\x9C\xF5\xD4\xA2\x70\xF5\x97\x46",
.secret_size = 54,
.b_public_size = 96,
.expected_a_public_size = 96,
.expected_ss_size = 48
}
};
/* /*
* MD4 test vectors from RFC1320 * MD4 test vectors from RFC1320
*/ */
...@@ -1066,33 +1066,31 @@ static int wp512_final(struct shash_desc *desc, u8 *out) ...@@ -1066,33 +1066,31 @@ static int wp512_final(struct shash_desc *desc, u8 *out)
{ {
struct wp512_ctx *wctx = shash_desc_ctx(desc); struct wp512_ctx *wctx = shash_desc_ctx(desc);
int i; int i;
u8 *buffer = wctx->buffer; u8 *buffer = wctx->buffer;
u8 *bitLength = wctx->bitLength; u8 *bitLength = wctx->bitLength;
int bufferBits = wctx->bufferBits; int bufferBits = wctx->bufferBits;
int bufferPos = wctx->bufferPos; int bufferPos = wctx->bufferPos;
__be64 *digest = (__be64 *)out; __be64 *digest = (__be64 *)out;
buffer[bufferPos] |= 0x80U >> (bufferBits & 7); buffer[bufferPos] |= 0x80U >> (bufferBits & 7);
bufferPos++; bufferPos++;
if (bufferPos > WP512_BLOCK_SIZE - WP512_LENGTHBYTES) { if (bufferPos > WP512_BLOCK_SIZE - WP512_LENGTHBYTES) {
if (bufferPos < WP512_BLOCK_SIZE) { if (bufferPos < WP512_BLOCK_SIZE)
memset(&buffer[bufferPos], 0, WP512_BLOCK_SIZE - bufferPos); memset(&buffer[bufferPos], 0, WP512_BLOCK_SIZE - bufferPos);
} wp512_process_buffer(wctx);
wp512_process_buffer(wctx); bufferPos = 0;
bufferPos = 0; }
} if (bufferPos < WP512_BLOCK_SIZE - WP512_LENGTHBYTES)
if (bufferPos < WP512_BLOCK_SIZE - WP512_LENGTHBYTES) { memset(&buffer[bufferPos], 0,
memset(&buffer[bufferPos], 0,
(WP512_BLOCK_SIZE - WP512_LENGTHBYTES) - bufferPos); (WP512_BLOCK_SIZE - WP512_LENGTHBYTES) - bufferPos);
} bufferPos = WP512_BLOCK_SIZE - WP512_LENGTHBYTES;
bufferPos = WP512_BLOCK_SIZE - WP512_LENGTHBYTES; memcpy(&buffer[WP512_BLOCK_SIZE - WP512_LENGTHBYTES],
memcpy(&buffer[WP512_BLOCK_SIZE - WP512_LENGTHBYTES],
bitLength, WP512_LENGTHBYTES); bitLength, WP512_LENGTHBYTES);
wp512_process_buffer(wctx); wp512_process_buffer(wctx);
for (i = 0; i < WP512_DIGEST_SIZE/8; i++) for (i = 0; i < WP512_DIGEST_SIZE/8; i++)
digest[i] = cpu_to_be64(wctx->hash[i]); digest[i] = cpu_to_be64(wctx->hash[i]);
wctx->bufferBits = bufferBits; wctx->bufferBits = bufferBits;
wctx->bufferPos = bufferPos; wctx->bufferPos = bufferPos;
return 0; return 0;
} }
......
...@@ -165,17 +165,17 @@ config HW_RANDOM_IXP4XX ...@@ -165,17 +165,17 @@ config HW_RANDOM_IXP4XX
config HW_RANDOM_OMAP config HW_RANDOM_OMAP
tristate "OMAP Random Number Generator support" tristate "OMAP Random Number Generator support"
depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS || ARCH_MVEBU depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS || ARCH_MVEBU || ARCH_K3
default HW_RANDOM default HW_RANDOM
help help
This driver provides kernel-side support for the Random Number This driver provides kernel-side support for the Random Number
Generator hardware found on OMAP16xx, OMAP2/3/4/5, AM33xx/AM43xx Generator hardware found on OMAP16xx, OMAP2/3/4/5, AM33xx/AM43xx
multimedia processors, and Marvell Armada 7k/8k SoCs. multimedia processors, and Marvell Armada 7k/8k SoCs.
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called omap-rng. module will be called omap-rng.
If unsure, say Y. If unsure, say Y.
config HW_RANDOM_OMAP3_ROM config HW_RANDOM_OMAP3_ROM
tristate "OMAP3 ROM Random Number Generator support" tristate "OMAP3 ROM Random Number Generator support"
...@@ -485,13 +485,13 @@ config HW_RANDOM_NPCM ...@@ -485,13 +485,13 @@ config HW_RANDOM_NPCM
depends on ARCH_NPCM || COMPILE_TEST depends on ARCH_NPCM || COMPILE_TEST
default HW_RANDOM default HW_RANDOM
help help
This driver provides support for the Random Number This driver provides support for the Random Number
Generator hardware available in Nuvoton NPCM SoCs. Generator hardware available in Nuvoton NPCM SoCs.
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called npcm-rng. module will be called npcm-rng.
If unsure, say Y. If unsure, say Y.
config HW_RANDOM_KEYSTONE config HW_RANDOM_KEYSTONE
depends on ARCH_KEYSTONE || COMPILE_TEST depends on ARCH_KEYSTONE || COMPILE_TEST
......
...@@ -126,7 +126,7 @@ static struct hwrng amd_rng = { ...@@ -126,7 +126,7 @@ static struct hwrng amd_rng = {
static int __init mod_init(void) static int __init mod_init(void)
{ {
int err = -ENODEV; int err;
struct pci_dev *pdev = NULL; struct pci_dev *pdev = NULL;
const struct pci_device_id *ent; const struct pci_device_id *ent;
u32 pmbase; u32 pmbase;
......
...@@ -319,11 +319,11 @@ static int enable_best_rng(void) ...@@ -319,11 +319,11 @@ static int enable_best_rng(void)
return ret; return ret;
} }
static ssize_t hwrng_attr_current_store(struct device *dev, static ssize_t rng_current_store(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
const char *buf, size_t len) const char *buf, size_t len)
{ {
int err = -ENODEV; int err;
struct hwrng *rng, *old_rng, *new_rng; struct hwrng *rng, *old_rng, *new_rng;
err = mutex_lock_interruptible(&rng_mutex); err = mutex_lock_interruptible(&rng_mutex);
...@@ -354,9 +354,9 @@ static ssize_t hwrng_attr_current_store(struct device *dev, ...@@ -354,9 +354,9 @@ static ssize_t hwrng_attr_current_store(struct device *dev,
return err ? : len; return err ? : len;
} }
static ssize_t hwrng_attr_current_show(struct device *dev, static ssize_t rng_current_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
ssize_t ret; ssize_t ret;
struct hwrng *rng; struct hwrng *rng;
...@@ -371,9 +371,9 @@ static ssize_t hwrng_attr_current_show(struct device *dev, ...@@ -371,9 +371,9 @@ static ssize_t hwrng_attr_current_show(struct device *dev,
return ret; return ret;
} }
static ssize_t hwrng_attr_available_show(struct device *dev, static ssize_t rng_available_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
int err; int err;
struct hwrng *rng; struct hwrng *rng;
...@@ -392,22 +392,16 @@ static ssize_t hwrng_attr_available_show(struct device *dev, ...@@ -392,22 +392,16 @@ static ssize_t hwrng_attr_available_show(struct device *dev,
return strlen(buf); return strlen(buf);
} }
static ssize_t hwrng_attr_selected_show(struct device *dev, static ssize_t rng_selected_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
return sysfs_emit(buf, "%d\n", cur_rng_set_by_user); return sysfs_emit(buf, "%d\n", cur_rng_set_by_user);
} }
static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR, static DEVICE_ATTR_RW(rng_current);
hwrng_attr_current_show, static DEVICE_ATTR_RO(rng_available);
hwrng_attr_current_store); static DEVICE_ATTR_RO(rng_selected);
static DEVICE_ATTR(rng_available, S_IRUGO,
hwrng_attr_available_show,
NULL);
static DEVICE_ATTR(rng_selected, S_IRUGO,
hwrng_attr_selected_show,
NULL);
static struct attribute *rng_dev_attrs[] = { static struct attribute *rng_dev_attrs[] = {
&dev_attr_rng_current.attr, &dev_attr_rng_current.attr,
......
...@@ -132,7 +132,7 @@ static int exynos_trng_probe(struct platform_device *pdev) ...@@ -132,7 +132,7 @@ static int exynos_trng_probe(struct platform_device *pdev)
return PTR_ERR(trng->mem); return PTR_ERR(trng->mem);
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
ret = pm_runtime_get_sync(&pdev->dev); ret = pm_runtime_resume_and_get(&pdev->dev);
if (ret < 0) { if (ret < 0) {
dev_err(&pdev->dev, "Could not get runtime PM.\n"); dev_err(&pdev->dev, "Could not get runtime PM.\n");
goto err_pm_get; goto err_pm_get;
...@@ -165,7 +165,7 @@ static int exynos_trng_probe(struct platform_device *pdev) ...@@ -165,7 +165,7 @@ static int exynos_trng_probe(struct platform_device *pdev)
clk_disable_unprepare(trng->clk); clk_disable_unprepare(trng->clk);
err_clock: err_clock:
pm_runtime_put_sync(&pdev->dev); pm_runtime_put_noidle(&pdev->dev);
err_pm_get: err_pm_get:
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
...@@ -196,10 +196,9 @@ static int __maybe_unused exynos_trng_resume(struct device *dev) ...@@ -196,10 +196,9 @@ static int __maybe_unused exynos_trng_resume(struct device *dev)
{ {
int ret; int ret;
ret = pm_runtime_get_sync(dev); ret = pm_runtime_resume_and_get(dev);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "Could not get runtime PM.\n"); dev_err(dev, "Could not get runtime PM.\n");
pm_runtime_put_noidle(dev);
return ret; return ret;
} }
......
...@@ -241,10 +241,9 @@ static int ks_sa_rng_probe(struct platform_device *pdev) ...@@ -241,10 +241,9 @@ static int ks_sa_rng_probe(struct platform_device *pdev)
} }
pm_runtime_enable(dev); pm_runtime_enable(dev);
ret = pm_runtime_get_sync(dev); ret = pm_runtime_resume_and_get(dev);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "Failed to enable SA power-domain\n"); dev_err(dev, "Failed to enable SA power-domain\n");
pm_runtime_put_noidle(dev);
pm_runtime_disable(dev); pm_runtime_disable(dev);
return ret; return ret;
} }
......
...@@ -454,10 +454,9 @@ static int omap_rng_probe(struct platform_device *pdev) ...@@ -454,10 +454,9 @@ static int omap_rng_probe(struct platform_device *pdev)
} }
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
ret = pm_runtime_get_sync(&pdev->dev); ret = pm_runtime_resume_and_get(&pdev->dev);
if (ret < 0) { if (ret < 0) {
dev_err(&pdev->dev, "Failed to runtime_get device: %d\n", ret); dev_err(&pdev->dev, "Failed to runtime_get device: %d\n", ret);
pm_runtime_put_noidle(&pdev->dev);
goto err_ioremap; goto err_ioremap;
} }
...@@ -543,10 +542,9 @@ static int __maybe_unused omap_rng_resume(struct device *dev) ...@@ -543,10 +542,9 @@ static int __maybe_unused omap_rng_resume(struct device *dev)
struct omap_rng_dev *priv = dev_get_drvdata(dev); struct omap_rng_dev *priv = dev_get_drvdata(dev);
int ret; int ret;
ret = pm_runtime_get_sync(dev); ret = pm_runtime_resume_and_get(dev);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "Failed to runtime_get device: %d\n", ret); dev_err(dev, "Failed to runtime_get device: %d\n", ret);
pm_runtime_put_noidle(dev);
return ret; return ret;
} }
......
This diff is collapsed.
...@@ -38,6 +38,7 @@ obj-$(CONFIG_CRYPTO_DEV_ROCKCHIP) += rockchip/ ...@@ -38,6 +38,7 @@ obj-$(CONFIG_CRYPTO_DEV_ROCKCHIP) += rockchip/
obj-$(CONFIG_CRYPTO_DEV_S5P) += s5p-sss.o obj-$(CONFIG_CRYPTO_DEV_S5P) += s5p-sss.o
obj-$(CONFIG_CRYPTO_DEV_SA2UL) += sa2ul.o obj-$(CONFIG_CRYPTO_DEV_SA2UL) += sa2ul.o
obj-$(CONFIG_CRYPTO_DEV_SAHARA) += sahara.o obj-$(CONFIG_CRYPTO_DEV_SAHARA) += sahara.o
obj-$(CONFIG_CRYPTO_DEV_SL3516) += gemini/
obj-$(CONFIG_ARCH_STM32) += stm32/ obj-$(CONFIG_ARCH_STM32) += stm32/
obj-$(CONFIG_CRYPTO_DEV_TALITOS) += talitos.o obj-$(CONFIG_CRYPTO_DEV_TALITOS) += talitos.o
obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/ obj-$(CONFIG_CRYPTO_DEV_UX500) += ux500/
......
...@@ -401,7 +401,7 @@ static void cpt_disable_all_cores(struct cpt_device *cpt) ...@@ -401,7 +401,7 @@ static void cpt_disable_all_cores(struct cpt_device *cpt)
cpt_write_csr64(cpt->reg_base, CPTX_PF_EXE_CTL(0), 0); cpt_write_csr64(cpt->reg_base, CPTX_PF_EXE_CTL(0), 0);
} }
/** /*
* Ensure all cores are disengaged from all groups by * Ensure all cores are disengaged from all groups by
* calling cpt_disable_all_cores() before calling this * calling cpt_disable_all_cores() before calling this
* function. * function.
......
...@@ -307,6 +307,10 @@ int nitrox_register_interrupts(struct nitrox_device *ndev) ...@@ -307,6 +307,10 @@ int nitrox_register_interrupts(struct nitrox_device *ndev)
* Entry 192: NPS_CORE_INT_ACTIVE * Entry 192: NPS_CORE_INT_ACTIVE
*/ */
nr_vecs = pci_msix_vec_count(pdev); nr_vecs = pci_msix_vec_count(pdev);
if (nr_vecs < 0) {
dev_err(DEV(ndev), "Error in getting vec count %d\n", nr_vecs);
return nr_vecs;
}
/* Enable MSI-X */ /* Enable MSI-X */
ret = pci_alloc_irq_vectors(pdev, nr_vecs, nr_vecs, PCI_IRQ_MSIX); ret = pci_alloc_irq_vectors(pdev, nr_vecs, nr_vecs, PCI_IRQ_MSIX);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
obj-$(CONFIG_CRYPTO_DEV_SL3516) += sl3516-ce.o
sl3516-ce-y += sl3516-ce-core.o sl3516-ce-cipher.o sl3516-ce-rng.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment