Add Makefile and Kconfig for SPAcc driver.
Acked-by: Ruud Derwig <Ruud.Derwig@synopsys.com>
Signed-off-by: Pavitrakumar Managutte <pavitrakumarm@vayavyalabs.com>
---
drivers/crypto/Kconfig | 1 +
drivers/crypto/Makefile | 1 +
drivers/crypto/dwc-spacc/Kconfig | 88 +++++++++++++++++++++++++++++++
drivers/crypto/dwc-spacc/Makefile | 8 +++
4 files changed, 98 insertions(+)
create mode 100644 drivers/crypto/dwc-spacc/Kconfig
create mode 100644 drivers/crypto/dwc-spacc/Makefile
diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
index 8d3b5d2890f8b..b644f80ed40d4 100644
--- a/drivers/crypto/Kconfig
+++ b/drivers/crypto/Kconfig
@@ -781,6 +781,7 @@ config CRYPTO_DEV_BCM_SPU
ahash, and aead algorithms with the kernel cryptographic API.
source "drivers/crypto/stm32/Kconfig"
+source "drivers/crypto/dwc-spacc/Kconfig"
config CRYPTO_DEV_SAFEXCEL
tristate "Inside Secure's SafeXcel cryptographic engine driver"
diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
index 322ae8854e3ea..89f54b3faeb56 100644
--- a/drivers/crypto/Makefile
+++ b/drivers/crypto/Makefile
@@ -43,6 +43,7 @@ obj-$(CONFIG_CRYPTO_DEV_BCM_SPU) += bcm/
obj-y += inside-secure/
obj-$(CONFIG_CRYPTO_DEV_ARTPEC6) += axis/
obj-y += xilinx/
+obj-y += dwc-spacc/
obj-y += hisilicon/
obj-y += loongson/
obj-$(CONFIG_CRYPTO_DEV_AMLOGIC_GXL) += amlogic/
diff --git a/drivers/crypto/dwc-spacc/Kconfig b/drivers/crypto/dwc-spacc/Kconfig
new file mode 100644
index 0000000000000..f9752e6f664b8
--- /dev/null
+++ b/drivers/crypto/dwc-spacc/Kconfig
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config CRYPTO_DEV_SPACC
+ tristate "Support for dwc_spacc Security Protocol Accelerator"
+ depends on HAS_DMA
+ select CRYPTO_ENGINE
+ default n
+
+ help
+ This enables support for SPAcc Hardware Accelerator.
+
+config CRYPTO_DEV_SPACC_HASH
+ bool "Enable HASH functionality"
+ depends on CRYPTO_DEV_SPACC
+ default y
+ select CRYPTO_HASH
+ select CRYPTO_SHA1
+ select CRYPTO_MD5
+ select CRYPTO_SHA256
+ select CRYPTO_SHA512
+ select CRYPTO_HMAC
+ select CRYPTO_SM3
+ select CRYPTO_CMAC
+ select CRYPTO_MICHAEL_MIC
+ select CRYPTO_XCBC
+ select CRYPTO_AES
+ select CRYPTO_SM4_GENERIC
+
+ help
+ Say y to enable Hash functionality of SPAcc.
+
+config CRYPTO_DEV_SPACC_AUTODETECT
+ bool "Enable Autodetect functionality"
+ depends on CRYPTO_DEV_SPACC
+ default y
+ help
+ Say y to enable Autodetect functionality of SPAcc.
+
+config CRYPTO_DEV_SPACC_DEBUG_TRACE_IO
+ bool "Enable Trace MMIO reads/writes stats"
+ depends on CRYPTO_DEV_SPACC
+ default n
+ help
+ Say y to enable Trace MMIO reads/writes stats.
+ To Debug and trace IO register read/write oprations.
+
+config CRYPTO_DEV_SPACC_DEBUG_TRACE_DDT
+ bool "Enable Trace DDT entries stats"
+ default n
+ depends on CRYPTO_DEV_SPACC
+ help
+ Say y to enable Enable DDT entry stats.
+ To Debug and trace DDT opration
+
+config CRYPTO_DEV_SPACC_SECURE_MODE
+ bool "Enable Spacc secure mode stats"
+ default n
+ depends on CRYPTO_DEV_SPACC
+ help
+ Say y to enable SPAcc secure modes stats.
+
+config CRYPTO_DEV_SPACC_PRIORITY
+ int "VSPACC priority value"
+ depends on CRYPTO_DEV_SPACC
+ range 0 15
+ default 1
+ help
+ Default arbitration priority weight for this Virtual SPAcc instance.
+ Hardware resets this to 1. Higher values means higher priority.
+
+config CRYPTO_DEV_SPACC_INTERNAL_COUNTER
+ int "SPAcc internal counter value"
+ depends on CRYPTO_DEV_SPACC
+ range 100000 1048575
+ default 100000
+ help
+ This value configures a hardware watchdog counter in the SPAcc engine.
+ The counter starts ticking when a completed cryptographic job is
+ sitting in the STATUS FIFO. If the job remains unprocessed for the
+ configured duration, an interrupt is triggered to ensure it is serviced.
+
+config CRYPTO_DEV_SPACC_CONFIG_DEBUG
+ bool "Enable SPAcc debug logs"
+ default n
+ depends on CRYPTO_DEV_SPACC
+ help
+ Say y to enable additional debug prints and diagnostics in the
+ SPAcc driver. Disable this for production builds.
diff --git a/drivers/crypto/dwc-spacc/Makefile b/drivers/crypto/dwc-spacc/Makefile
new file mode 100644
index 0000000000000..45d0166dfc8f7
--- /dev/null
+++ b/drivers/crypto/dwc-spacc/Makefile
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-$(CONFIG_CRYPTO_DEV_SPACC) += snps-spacc.o
+snps-spacc-objs = spacc_hal.o spacc_core.o \
+spacc_manager.o spacc_interrupt.o spacc_device.o
+
+ifeq ($(CONFIG_CRYPTO_DEV_SPACC_HASH),y)
+snps-spacc-objs += spacc_ahash.o
+endif
--
2.25.1
Hi Pavitrakumar,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 0ce90934c0a6baac053029ad28566536ae50d604]
url: https://github.com/intel-lab-lkp/linux/commits/Pavitrakumar-Managutte/dt-bindings-crypto-Document-support-for-SPAcc/20260218-210308
base: 0ce90934c0a6baac053029ad28566536ae50d604
patch link: https://lore.kernel.org/r/20260218125805.615525-5-pavitrakumarm%40vayavyalabs.com
patch subject: [PATCH v9 4/4] crypto: spacc - Add SPAcc Kconfig and Makefile
config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20260219/202602190145.feNzO6kD-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260219/202602190145.feNzO6kD-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602190145.feNzO6kD-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/crypto/dwc-spacc/spacc_device.c: In function 'spacc_init_device':
>> drivers/crypto/dwc-spacc/spacc_device.c:35:13: warning: variable 'oldmode' set but not used [-Wunused-but-set-variable]
35 | int oldmode;
| ^~~~~~~
vim +/oldmode +35 drivers/crypto/dwc-spacc/spacc_device.c
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 27
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 28 static int spacc_init_device(struct platform_device *pdev)
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 29 {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 30 void __iomem *baseaddr;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 31 struct pdu_info info;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 32 struct spacc_priv *priv;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 33 int err = 0;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 34 int ret = 0;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 @35 int oldmode;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 36 int irq_num;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 37 int irq_ret;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 38 const u64 oldtimer = SPACC_OLD_TIMER;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 39
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 40 /* initialize DDT DMA pools based on this device's resources */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 41 if (pdu_mem_init(&pdev->dev)) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 42 dev_err(&pdev->dev, "Could not initialize DMA pools\n");
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 43 return -ENOMEM;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 44 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 45
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 46 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 47 if (!priv) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 48 err = -ENOMEM;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 49 goto free_ddt_mem_pool;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 50 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 51
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 52 /* default to little-endian */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 53 priv->spacc.config.big_endian = false;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 54 priv->spacc.config.little_endian = true;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 55
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 56 priv->spacc.config.oldtimer = oldtimer;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 57
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 58 /* Set the SPAcc internal counter value from kernel config */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 59 priv->spacc.config.timer = (u64)CONFIG_CRYPTO_DEV_SPACC_INTERNAL_COUNTER;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 60 dev_dbg(&pdev->dev, "SPAcc internal counter set to: %llu\n",
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 61 priv->spacc.config.timer);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 62
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 63 baseaddr = devm_platform_ioremap_resource(pdev, 0);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 64 if (IS_ERR(baseaddr)) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 65 dev_err(&pdev->dev, "Unable to map iomem\n");
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 66 err = PTR_ERR(baseaddr);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 67 goto free_ddt_mem_pool;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 68 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 69
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 70 pdu_get_version(baseaddr, &info);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 71
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 72 ret = spacc_init(baseaddr, &priv->spacc, &info);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 73 if (ret < 0) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 74 dev_err(&pdev->dev, "Failed to initialize SPAcc device\n");
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 75 err = ret;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 76 goto free_ddt_mem_pool;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 77 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 78
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 79 /* Set the priority from kernel config */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 80 priv->spacc.config.priority = CONFIG_CRYPTO_DEV_SPACC_PRIORITY;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 81 dev_dbg(&pdev->dev, "VSPACC priority set from config: %u\n",
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 82 priv->spacc.config.priority);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 83
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 84 /* Set the priority for this virtual SPAcc instance */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 85 spacc_set_priority(&priv->spacc, priv->spacc.config.priority);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 86
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 87 /* Initialize crypto engine */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 88 priv->engine = crypto_engine_alloc_init(&pdev->dev, true);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 89 if (!priv->engine) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 90 dev_err(&pdev->dev, "Could not allocate crypto engine\n");
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 91 err = -ENOMEM;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 92 goto free_spacc_ctx;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 93 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 94
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 95 err = crypto_engine_start(priv->engine);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 96 if (err) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 97 dev_err(&pdev->dev, "Could not start crypto engine\n");
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 98 goto free_engine;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 99 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 100
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 101 priv->spacc_wq = alloc_workqueue("spacc_workqueue", WQ_UNBOUND, 0);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 102 if (!priv->spacc_wq) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 103 err = -ENOMEM;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 104 goto free_engine;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 105 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 106
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 107 INIT_WORK(&priv->pop_jobs, spacc_pop_jobs);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 108 spacc_irq_glbl_disable(&priv->spacc);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 109
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 110 priv->spacc.dptr = &pdev->dev;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 111 platform_set_drvdata(pdev, priv);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 112
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 113 irq_num = platform_get_irq(pdev, 0);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 114 if (irq_num < 0) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 115 err = irq_num;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 116 goto free_spacc_workq;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 117 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 118
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 119 /* determine configured maximum message length */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 120 priv->max_msg_len = priv->spacc.config.max_msg_size;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 121
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 122 irq_ret = devm_request_irq(&pdev->dev, irq_num, spacc_irq_handler,
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 123 IRQF_SHARED, dev_name(&pdev->dev),
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 124 &pdev->dev);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 125 if (irq_ret) {
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 126 dev_err(&pdev->dev, "Failed to request IRQ : %d\n", irq_ret);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 127 err = irq_ret;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 128 goto free_spacc_workq;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 129 }
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 130
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 131 priv->spacc.irq_cb_stat = spacc_stat_process;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 132 priv->spacc.irq_cb_cmdx = spacc_cmd_process;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 133 oldmode = priv->spacc.op_mode;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 134 priv->spacc.op_mode = SPACC_OP_MODE_IRQ;
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 135
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 136 /* Enable STAT and CMD interrupts */
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 137 SPACC_IRQ_STAT_CLEAR_STAT(&priv->spacc); //added to clear the fifo
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 138 spacc_irq_stat_enable(&priv->spacc, 1);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 139 spacc_irq_cmdx_enable(&priv->spacc, 0, 1);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 140 spacc_irq_stat_wd_disable(&priv->spacc);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 141 spacc_irq_glbl_enable(&priv->spacc);
80e3d20d74a76e Pavitrakumar Managutte 2026-02-18 142
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.