[PATCH v9 4/4] crypto: spacc - Add SPAcc Kconfig and Makefile

Pavitrakumar Managutte posted 4 patches 1 month, 1 week ago
There is a newer version of this series
[PATCH v9 4/4] crypto: spacc - Add SPAcc Kconfig and Makefile
Posted by Pavitrakumar Managutte 1 month, 1 week ago
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
Re: [PATCH v9 4/4] crypto: spacc - Add SPAcc Kconfig and Makefile
Posted by kernel test robot 1 month, 1 week ago
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