mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/2] crypto: hisilicon - adjust vf configuration sequence and optimize zip reg offset
@ 2024-05-06 11:59 Chenghai Huang
  2024-05-06 11:59 ` [PATCH 1/2] crypto: hisilicon/qm - adjust the internal processing sequence of the vf enable and disable Chenghai Huang
  2024-05-06 11:59 ` [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function Chenghai Huang
  0 siblings, 2 replies; 5+ messages in thread
From: Chenghai Huang @ 2024-05-06 11:59 UTC (permalink / raw)
  To: herbert, davem
  Cc: linux-kernel, linux-crypto, shenyang39, liulongfang, qianweili

The VF enabling and disabling issues are fixed, and the ZIP address
offset calculation is optimized.

Chenghai Huang (2):
  crypto: hisilicon/qm - adjust the internal processing sequence of the
    vf enable and disable
  crypto: hisilicon/zip - optimize the address offset of the reg query
    function

 drivers/crypto/hisilicon/qm.c           | 11 ++----
 drivers/crypto/hisilicon/zip/zip_main.c | 48 +++++++++++--------------
 2 files changed, 23 insertions(+), 36 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] crypto: hisilicon/qm - adjust the internal processing sequence of the vf enable and disable
  2024-05-06 11:59 [PATCH 0/2] crypto: hisilicon - adjust vf configuration sequence and optimize zip reg offset Chenghai Huang
@ 2024-05-06 11:59 ` Chenghai Huang
  2024-05-06 11:59 ` [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function Chenghai Huang
  1 sibling, 0 replies; 5+ messages in thread
From: Chenghai Huang @ 2024-05-06 11:59 UTC (permalink / raw)
  To: herbert, davem
  Cc: linux-kernel, linux-crypto, shenyang39, liulongfang, qianweili

When the vf is enabled, the value of vfs_num must be assigned
after the VF configuration is complete. Otherwise, the device
may be accessed before the virtual configuration is complete,
causing an error.

When the vf is disabled, clear vfs_num and execute
qm_pm_put_sync before hisi_qm_sriov_disable is return.
Otherwise, if qm_clear_vft_config fails, users may access the
device when the PCI virtualization is disabled, resulting in an
error.

Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
---
 drivers/crypto/hisilicon/qm.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c
index 3dac8d8e8568..f614fd228b56 100644
--- a/drivers/crypto/hisilicon/qm.c
+++ b/drivers/crypto/hisilicon/qm.c
@@ -3793,14 +3793,13 @@ int hisi_qm_sriov_enable(struct pci_dev *pdev, int max_vfs)
 		goto err_put_sync;
 	}
 
-	qm->vfs_num = num_vfs;
-
 	ret = pci_enable_sriov(pdev, num_vfs);
 	if (ret) {
 		pci_err(pdev, "Can't enable VF!\n");
 		qm_clear_vft_config(qm);
 		goto err_put_sync;
 	}
+	qm->vfs_num = num_vfs;
 
 	pci_info(pdev, "VF enabled, vfs_num(=%d)!\n", num_vfs);
 
@@ -3822,7 +3821,6 @@ EXPORT_SYMBOL_GPL(hisi_qm_sriov_enable);
 int hisi_qm_sriov_disable(struct pci_dev *pdev, bool is_frozen)
 {
 	struct hisi_qm *qm = pci_get_drvdata(pdev);
-	int ret;
 
 	if (pci_vfs_assigned(pdev)) {
 		pci_err(pdev, "Failed to disable VFs as VFs are assigned!\n");
@@ -3837,13 +3835,10 @@ int hisi_qm_sriov_disable(struct pci_dev *pdev, bool is_frozen)
 
 	pci_disable_sriov(pdev);
 
-	ret = qm_clear_vft_config(qm);
-	if (ret)
-		return ret;
-
+	qm->vfs_num = 0;
 	qm_pm_put_sync(qm);
 
-	return 0;
+	return qm_clear_vft_config(qm);
 }
 EXPORT_SYMBOL_GPL(hisi_qm_sriov_disable);
 
-- 
2.33.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function
  2024-05-06 11:59 [PATCH 0/2] crypto: hisilicon - adjust vf configuration sequence and optimize zip reg offset Chenghai Huang
  2024-05-06 11:59 ` [PATCH 1/2] crypto: hisilicon/qm - adjust the internal processing sequence of the vf enable and disable Chenghai Huang
@ 2024-05-06 11:59 ` Chenghai Huang
  2024-05-31  9:33   ` Herbert Xu
  1 sibling, 1 reply; 5+ messages in thread
From: Chenghai Huang @ 2024-05-06 11:59 UTC (permalink / raw)
  To: herbert, davem
  Cc: linux-kernel, linux-crypto, shenyang39, liulongfang, qianweili

Currently, the reg is queried based on the fixed address offset
array. When the number of accelerator cores changes, the system
can not flexibly respond to the change.

Therefore, the reg to be queried is calculated based on the
comp or decomp core base address.

Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
---
 drivers/crypto/hisilicon/zip/zip_main.c | 48 +++++++++++--------------
 1 file changed, 20 insertions(+), 28 deletions(-)

diff --git a/drivers/crypto/hisilicon/zip/zip_main.c b/drivers/crypto/hisilicon/zip/zip_main.c
index 399b681ee423..63d6b88dd592 100644
--- a/drivers/crypto/hisilicon/zip/zip_main.c
+++ b/drivers/crypto/hisilicon/zip/zip_main.c
@@ -37,7 +37,7 @@
 #define HZIP_QM_IDEL_STATUS		0x3040e4
 
 #define HZIP_CORE_DFX_BASE		0x301000
-#define HZIP_CLOCK_GATED_CONTL		0X301004
+#define HZIP_CORE_DFX_DECOMP_BASE	0x304000
 #define HZIP_CORE_DFX_COMP_0		0x302000
 #define HZIP_CORE_DFX_COMP_1		0x303000
 #define HZIP_CORE_DFX_DECOMP_0		0x304000
@@ -48,6 +48,7 @@
 #define HZIP_CORE_DFX_DECOMP_5		0x309000
 #define HZIP_CORE_REGS_BASE_LEN		0xB0
 #define HZIP_CORE_REGS_DFX_LEN		0x28
+#define HZIP_CORE_ADDR_INTRVL		0x1000
 
 #define HZIP_CORE_INT_SOURCE		0x3010A0
 #define HZIP_CORE_INT_MASK_REG		0x3010A4
@@ -269,28 +270,6 @@ static const u32 zip_pre_store_caps[] = {
 	ZIP_DEV_ALG_BITMAP,
 };
 
-enum {
-	HZIP_COMP_CORE0,
-	HZIP_COMP_CORE1,
-	HZIP_DECOMP_CORE0,
-	HZIP_DECOMP_CORE1,
-	HZIP_DECOMP_CORE2,
-	HZIP_DECOMP_CORE3,
-	HZIP_DECOMP_CORE4,
-	HZIP_DECOMP_CORE5,
-};
-
-static const u64 core_offsets[] = {
-	[HZIP_COMP_CORE0]   = 0x302000,
-	[HZIP_COMP_CORE1]   = 0x303000,
-	[HZIP_DECOMP_CORE0] = 0x304000,
-	[HZIP_DECOMP_CORE1] = 0x305000,
-	[HZIP_DECOMP_CORE2] = 0x306000,
-	[HZIP_DECOMP_CORE3] = 0x307000,
-	[HZIP_DECOMP_CORE4] = 0x308000,
-	[HZIP_DECOMP_CORE5] = 0x309000,
-};
-
 static const struct debugfs_reg32 hzip_dfx_regs[] = {
 	{"HZIP_GET_BD_NUM                ",  0x00},
 	{"HZIP_GET_RIGHT_BD              ",  0x04},
@@ -807,6 +786,18 @@ static int hisi_zip_regs_show(struct seq_file *s, void *unused)
 
 DEFINE_SHOW_ATTRIBUTE(hisi_zip_regs);
 
+static void __iomem *get_zip_core_addr(struct hisi_qm *qm, int core_num)
+{
+	u32 zip_comp_core_num = qm->cap_tables.dev_cap_table[ZIP_CLUSTER_COMP_NUM_CAP_IDX].cap_val;
+
+	if (core_num < zip_comp_core_num)
+		return qm->io_base + HZIP_CORE_DFX_BASE +
+			(core_num + 1) * HZIP_CORE_ADDR_INTRVL;
+
+	qm->io_base + HZIP_CORE_DFX_DECOMP_BASE +
+		(core_num - zip_comp_core_num) * HZIP_CORE_ADDR_INTRVL;
+}
+
 static int hisi_zip_core_debug_init(struct hisi_qm *qm)
 {
 	u32 zip_core_num, zip_comp_core_num, i;
@@ -831,7 +822,7 @@ static int hisi_zip_core_debug_init(struct hisi_qm *qm)
 
 		regset->regs = hzip_dfx_regs;
 		regset->nregs = ARRAY_SIZE(hzip_dfx_regs);
-		regset->base = qm->io_base + core_offsets[i];
+		regset->base = get_zip_core_addr(qm, i);
 		regset->dev = dev;
 
 		tmp_d = debugfs_create_dir(buf, qm->debug.debug_root);
@@ -920,13 +911,14 @@ static int hisi_zip_debugfs_init(struct hisi_qm *qm)
 /* hisi_zip_debug_regs_clear() - clear the zip debug regs */
 static void hisi_zip_debug_regs_clear(struct hisi_qm *qm)
 {
+	u32 zip_core_num = qm->cap_tables.dev_cap_table[ZIP_CORE_NUM_CAP_IDX].cap_val;
 	size_t i, j;
 
 	/* enable register read_clear bit */
 	writel(HZIP_RD_CNT_CLR_CE_EN, qm->io_base + HZIP_SOFT_CTRL_CNT_CLR_CE);
-	for (i = 0; i < ARRAY_SIZE(core_offsets); i++)
+	for (i = 0; i < zip_core_num; i++)
 		for (j = 0; j < ARRAY_SIZE(hzip_dfx_regs); j++)
-			readl(qm->io_base + core_offsets[i] +
+			readl(get_zip_core_addr(qm, i) +
 			      hzip_dfx_regs[j].offset);
 
 	/* disable register read_clear bit */
@@ -968,7 +960,7 @@ static int hisi_zip_show_last_regs_init(struct hisi_qm *qm)
 	}
 
 	for (i = 0; i < zip_core_num; i++) {
-		io_base = qm->io_base + core_offsets[i];
+		io_base = get_zip_core_addr(qm, i);
 		for (j = 0; j < core_dfx_regs_num; j++) {
 			idx = com_dfx_regs_num + i * core_dfx_regs_num + j;
 			debug->last_words[idx] = readl_relaxed(
@@ -1019,7 +1011,7 @@ static void hisi_zip_show_last_dfx_regs(struct hisi_qm *qm)
 		else
 			scnprintf(buf, sizeof(buf), "Decomp_core-%u",
 				  i - zip_comp_core_num);
-		base = qm->io_base + core_offsets[i];
+		base = get_zip_core_addr(qm, i);
 
 		pci_info(qm->pdev, "==>%s:\n", buf);
 		/* dump last word for dfx regs during control resetting */
-- 
2.33.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function
  2024-05-06 11:59 ` [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function Chenghai Huang
@ 2024-05-31  9:33   ` Herbert Xu
  2024-05-31 10:09     ` huangchenghai
  0 siblings, 1 reply; 5+ messages in thread
From: Herbert Xu @ 2024-05-31  9:33 UTC (permalink / raw)
  To: Chenghai Huang
  Cc: davem, linux-kernel, linux-crypto, shenyang39, liulongfang, qianweili

On Mon, May 06, 2024 at 07:59:53PM +0800, Chenghai Huang wrote:
>
> @@ -807,6 +786,18 @@ static int hisi_zip_regs_show(struct seq_file *s, void *unused)
>  
>  DEFINE_SHOW_ATTRIBUTE(hisi_zip_regs);
>  
> +static void __iomem *get_zip_core_addr(struct hisi_qm *qm, int core_num)
> +{
> +	u32 zip_comp_core_num = qm->cap_tables.dev_cap_table[ZIP_CLUSTER_COMP_NUM_CAP_IDX].cap_val;
> +
> +	if (core_num < zip_comp_core_num)
> +		return qm->io_base + HZIP_CORE_DFX_BASE +
> +			(core_num + 1) * HZIP_CORE_ADDR_INTRVL;
> +
> +	qm->io_base + HZIP_CORE_DFX_DECOMP_BASE +
> +		(core_num - zip_comp_core_num) * HZIP_CORE_ADDR_INTRVL;
> +}
> +

This doesn't even build.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function
  2024-05-31  9:33   ` Herbert Xu
@ 2024-05-31 10:09     ` huangchenghai
  0 siblings, 0 replies; 5+ messages in thread
From: huangchenghai @ 2024-05-31 10:09 UTC (permalink / raw)
  To: Herbert Xu
  Cc: davem, linux-kernel, linux-crypto, shenyang39, liulongfang, qianweili


在 2024/5/31 17:33, Herbert Xu 写道:
> On Mon, May 06, 2024 at 07:59:53PM +0800, Chenghai Huang wrote:
>> @@ -807,6 +786,18 @@ static int hisi_zip_regs_show(struct seq_file *s, void *unused)
>>   
>>   DEFINE_SHOW_ATTRIBUTE(hisi_zip_regs);
>>   
>> +static void __iomem *get_zip_core_addr(struct hisi_qm *qm, int core_num)
>> +{
>> +	u32 zip_comp_core_num = qm->cap_tables.dev_cap_table[ZIP_CLUSTER_COMP_NUM_CAP_IDX].cap_val;
>> +
>> +	if (core_num < zip_comp_core_num)
>> +		return qm->io_base + HZIP_CORE_DFX_BASE +
>> +			(core_num + 1) * HZIP_CORE_ADDR_INTRVL;
>> +
>> +	qm->io_base + HZIP_CORE_DFX_DECOMP_BASE +
>> +		(core_num - zip_comp_core_num) * HZIP_CORE_ADDR_INTRVL;
>> +}
>> +
> This doesn't even build.

I'm so sorry, I forgot to build it. I'll build and verify it carefully next time.

The second version will be corrected and send soon.

Thanks,
ChengHai


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-05-31 10:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-06 11:59 [PATCH 0/2] crypto: hisilicon - adjust vf configuration sequence and optimize zip reg offset Chenghai Huang
2024-05-06 11:59 ` [PATCH 1/2] crypto: hisilicon/qm - adjust the internal processing sequence of the vf enable and disable Chenghai Huang
2024-05-06 11:59 ` [PATCH 2/2] crypto: hisilicon/zip - optimize the address offset of the reg query function Chenghai Huang
2024-05-31  9:33   ` Herbert Xu
2024-05-31 10:09     ` huangchenghai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®