diff options
author | Corentin Labbe <clabbe@baylibre.com> | 2022-03-04 07:36:48 +0000 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2022-03-09 15:12:31 +1200 |
commit | 7a70d9a1cf112c0bdb42800d264d48f34089e3e8 (patch) | |
tree | b0310066678caae62e0f5c063a86e196323bcfa5 /drivers/crypto/xilinx | |
parent | ee6584bf3c680e20464e20bf28066d1ce685f7d3 (diff) | |
download | lwn-7a70d9a1cf112c0bdb42800d264d48f34089e3e8.tar.gz lwn-7a70d9a1cf112c0bdb42800d264d48f34089e3e8.zip |
crypto: xilinx: prevent probing on non-xilinx hardware
The zynqmp-sha driver is always loaded and register its algorithm even on
platform which do not have the proper hardware.
This lead to a stacktrace due to zynqmp-sha3-384 failing its crypto
self tests.
So check if hardware is present via the firmware API call get_version.
While at it, simplify the platform_driver by using module_platform_driver()
Furthermore the driver should depend on ZYNQMP_FIRMWARE since it cannot
work without it.
Fixes: 7ecc3e34474b ("crypto: xilinx - Add Xilinx SHA3 driver")
Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/xilinx')
-rw-r--r-- | drivers/crypto/xilinx/zynqmp-sha.c | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/drivers/crypto/xilinx/zynqmp-sha.c b/drivers/crypto/xilinx/zynqmp-sha.c index 89549f4788ba..43ff170ff1c2 100644 --- a/drivers/crypto/xilinx/zynqmp-sha.c +++ b/drivers/crypto/xilinx/zynqmp-sha.c @@ -193,6 +193,13 @@ static int zynqmp_sha_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; int err; + u32 v; + + /* Verify the hardware is present */ + err = zynqmp_pm_get_api_version(&v); + if (err) + return err; + err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(ZYNQMP_DMA_BIT_MASK)); if (err < 0) { @@ -251,33 +258,7 @@ static struct platform_driver zynqmp_sha_driver = { }, }; -static int __init sha_driver_init(void) -{ - struct platform_device *pdev; - int ret; - - ret = platform_driver_register(&zynqmp_sha_driver); - if (ret) - return ret; - - pdev = platform_device_register_simple(zynqmp_sha_driver.driver.name, - 0, NULL, 0); - if (IS_ERR(pdev)) { - ret = PTR_ERR(pdev); - platform_driver_unregister(&zynqmp_sha_driver); - pr_info("Failed to register ZynqMP SHA3 dvixe %d\n", ret); - } - - return ret; -} - -device_initcall(sha_driver_init); - -static void __exit sha_driver_exit(void) -{ - platform_driver_unregister(&zynqmp_sha_driver); -} - +module_platform_driver(zynqmp_sha_driver); MODULE_DESCRIPTION("ZynqMP SHA3 hardware acceleration support."); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Harsha <harsha.harsha@xilinx.com>"); |