linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] crypto: hisilicon - add vfs_num module param for zip
@ 2019-11-07  3:48 Hao Fang
  2019-11-14 13:40 ` fanghao (A)
  2019-11-15  6:06 ` Herbert Xu
  0 siblings, 2 replies; 3+ messages in thread
From: Hao Fang @ 2019-11-07  3:48 UTC (permalink / raw)
  To: herbert, davem; +Cc: linux-crypto, linuxarm

Currently the VF can be enabled only through sysfs interface
after module loaded, but this also needs to be done when the
module loaded in some scenarios.

This patch adds module param vfs_num, adds hisi_zip_sriov_enable()
in probe, and also adjusts the position of probe.

Signed-off-by: Hao Fang <fanghao11@huawei.com>
Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
---
 drivers/crypto/hisilicon/zip/zip_main.c | 182 +++++++++++++++++---------------
 1 file changed, 98 insertions(+), 84 deletions(-)

diff --git a/drivers/crypto/hisilicon/zip/zip_main.c b/drivers/crypto/hisilicon/zip/zip_main.c
index 255b63c..e42c3a84 100644
--- a/drivers/crypto/hisilicon/zip/zip_main.c
+++ b/drivers/crypto/hisilicon/zip/zip_main.c
@@ -301,6 +301,10 @@ MODULE_PARM_DESC(pf_q_num, "Number of queues in PF(v1 1-4096, v2 1-1024)");
 static int uacce_mode;
 module_param(uacce_mode, int, 0);
 
+static u32 vfs_num;
+module_param(vfs_num, uint, 0444);
+MODULE_PARM_DESC(vfs_num, "Number of VFs to enable(1-63)");
+
 static const struct pci_device_id hisi_zip_dev_ids[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_ZIP_PF) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_ZIP_VF) },
@@ -685,90 +689,6 @@ static int hisi_zip_pf_probe_init(struct hisi_zip *hisi_zip)
 	return 0;
 }
 
-static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-{
-	struct hisi_zip *hisi_zip;
-	enum qm_hw_ver rev_id;
-	struct hisi_qm *qm;
-	int ret;
-
-	rev_id = hisi_qm_get_hw_version(pdev);
-	if (rev_id == QM_HW_UNKNOWN)
-		return -EINVAL;
-
-	hisi_zip = devm_kzalloc(&pdev->dev, sizeof(*hisi_zip), GFP_KERNEL);
-	if (!hisi_zip)
-		return -ENOMEM;
-	pci_set_drvdata(pdev, hisi_zip);
-
-	qm = &hisi_zip->qm;
-	qm->pdev = pdev;
-	qm->ver = rev_id;
-
-	qm->sqe_size = HZIP_SQE_SIZE;
-	qm->dev_name = hisi_zip_name;
-	qm->fun_type = (pdev->device == PCI_DEVICE_ID_ZIP_PF) ? QM_HW_PF :
-								QM_HW_VF;
-	switch (uacce_mode) {
-	case 0:
-		qm->use_dma_api = true;
-		break;
-	case 1:
-		qm->use_dma_api = false;
-		break;
-	case 2:
-		qm->use_dma_api = true;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	ret = hisi_qm_init(qm);
-	if (ret) {
-		dev_err(&pdev->dev, "Failed to init qm!\n");
-		return ret;
-	}
-
-	if (qm->fun_type == QM_HW_PF) {
-		ret = hisi_zip_pf_probe_init(hisi_zip);
-		if (ret)
-			return ret;
-
-		qm->qp_base = HZIP_PF_DEF_Q_BASE;
-		qm->qp_num = pf_q_num;
-	} else if (qm->fun_type == QM_HW_VF) {
-		/*
-		 * have no way to get qm configure in VM in v1 hardware,
-		 * so currently force PF to uses HZIP_PF_DEF_Q_NUM, and force
-		 * to trigger only one VF in v1 hardware.
-		 *
-		 * v2 hardware has no such problem.
-		 */
-		if (qm->ver == QM_HW_V1) {
-			qm->qp_base = HZIP_PF_DEF_Q_NUM;
-			qm->qp_num = HZIP_QUEUE_NUM_V1 - HZIP_PF_DEF_Q_NUM;
-		} else if (qm->ver == QM_HW_V2)
-			/* v2 starts to support get vft by mailbox */
-			hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
-	}
-
-	ret = hisi_qm_start(qm);
-	if (ret)
-		goto err_qm_uninit;
-
-	ret = hisi_zip_debugfs_init(hisi_zip);
-	if (ret)
-		dev_err(&pdev->dev, "Failed to init debugfs (%d)!\n", ret);
-
-	hisi_zip_add_to_list(hisi_zip);
-
-	return 0;
-
-err_qm_uninit:
-	hisi_qm_uninit(qm);
-	return ret;
-}
-
 /* Currently we only support equal assignment */
 static int hisi_zip_vf_q_assign(struct hisi_zip *hisi_zip, int num_vfs)
 {
@@ -865,6 +785,100 @@ static int hisi_zip_sriov_disable(struct pci_dev *pdev)
 	return hisi_zip_clear_vft_config(hisi_zip);
 }
 
+static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+{
+	struct hisi_zip *hisi_zip;
+	enum qm_hw_ver rev_id;
+	struct hisi_qm *qm;
+	int ret;
+
+	rev_id = hisi_qm_get_hw_version(pdev);
+	if (rev_id == QM_HW_UNKNOWN)
+		return -EINVAL;
+
+	hisi_zip = devm_kzalloc(&pdev->dev, sizeof(*hisi_zip), GFP_KERNEL);
+	if (!hisi_zip)
+		return -ENOMEM;
+	pci_set_drvdata(pdev, hisi_zip);
+
+	qm = &hisi_zip->qm;
+	qm->pdev = pdev;
+	qm->ver = rev_id;
+
+	qm->sqe_size = HZIP_SQE_SIZE;
+	qm->dev_name = hisi_zip_name;
+	qm->fun_type = (pdev->device == PCI_DEVICE_ID_ZIP_PF) ? QM_HW_PF :
+								QM_HW_VF;
+	switch (uacce_mode) {
+	case 0:
+		qm->use_dma_api = true;
+		break;
+	case 1:
+		qm->use_dma_api = false;
+		break;
+	case 2:
+		qm->use_dma_api = true;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	ret = hisi_qm_init(qm);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to init qm!\n");
+		return ret;
+	}
+
+	if (qm->fun_type == QM_HW_PF) {
+		ret = hisi_zip_pf_probe_init(hisi_zip);
+		if (ret)
+			return ret;
+
+		qm->qp_base = HZIP_PF_DEF_Q_BASE;
+		qm->qp_num = pf_q_num;
+	} else if (qm->fun_type == QM_HW_VF) {
+		/*
+		 * have no way to get qm configure in VM in v1 hardware,
+		 * so currently force PF to uses HZIP_PF_DEF_Q_NUM, and force
+		 * to trigger only one VF in v1 hardware.
+		 *
+		 * v2 hardware has no such problem.
+		 */
+		if (qm->ver == QM_HW_V1) {
+			qm->qp_base = HZIP_PF_DEF_Q_NUM;
+			qm->qp_num = HZIP_QUEUE_NUM_V1 - HZIP_PF_DEF_Q_NUM;
+		} else if (qm->ver == QM_HW_V2)
+			/* v2 starts to support get vft by mailbox */
+			hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
+	}
+
+	ret = hisi_qm_start(qm);
+	if (ret)
+		goto err_qm_uninit;
+
+	ret = hisi_zip_debugfs_init(hisi_zip);
+	if (ret)
+		dev_err(&pdev->dev, "Failed to init debugfs (%d)!\n", ret);
+
+	hisi_zip_add_to_list(hisi_zip);
+
+	if (qm->fun_type == QM_HW_PF && vfs_num > 0) {
+		ret = hisi_zip_sriov_enable(pdev, vfs_num);
+		if (ret < 0)
+			goto err_remove_from_list;
+	}
+
+	return 0;
+
+err_remove_from_list:
+	hisi_zip_remove_from_list(hisi_zip);
+	hisi_zip_debugfs_exit(hisi_zip);
+	hisi_qm_stop(qm);
+err_qm_uninit:
+	hisi_qm_uninit(qm);
+	return ret;
+}
+
 static int hisi_zip_sriov_configure(struct pci_dev *pdev, int num_vfs)
 {
 	if (num_vfs == 0)
-- 
2.8.1


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

* Re: [PATCH] crypto: hisilicon - add vfs_num module param for zip
  2019-11-07  3:48 [PATCH] crypto: hisilicon - add vfs_num module param for zip Hao Fang
@ 2019-11-14 13:40 ` fanghao (A)
  2019-11-15  6:06 ` Herbert Xu
  1 sibling, 0 replies; 3+ messages in thread
From: fanghao (A) @ 2019-11-14 13:40 UTC (permalink / raw)
  To: herbert, davem; +Cc: linux-crypto, linuxarm

在 2019/11/7 11:48, Hao Fang 写道:
> Currently the VF can be enabled only through sysfs interface
> after module loaded, but this also needs to be done when the
> module loaded in some scenarios.
> 
> This patch adds module param vfs_num, adds hisi_zip_sriov_enable()
> in probe, and also adjusts the position of probe.
> 
> Signed-off-by: Hao Fang <fanghao11@huawei.com>
> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
> ---
>   drivers/crypto/hisilicon/zip/zip_main.c | 182 +++++++++++++++++---------------
>   1 file changed, 98 insertions(+), 84 deletions(-)
> 
> diff --git a/drivers/crypto/hisilicon/zip/zip_main.c b/drivers/crypto/hisilicon/zip/zip_main.c
> index 255b63c..e42c3a84 100644
> --- a/drivers/crypto/hisilicon/zip/zip_main.c
> +++ b/drivers/crypto/hisilicon/zip/zip_main.c
> @@ -301,6 +301,10 @@ MODULE_PARM_DESC(pf_q_num, "Number of queues in PF(v1 1-4096, v2 1-1024)");
>   static int uacce_mode;
>   module_param(uacce_mode, int, 0);
>   
> +static u32 vfs_num;
> +module_param(vfs_num, uint, 0444);
> +MODULE_PARM_DESC(vfs_num, "Number of VFs to enable(1-63)");
> +
>   static const struct pci_device_id hisi_zip_dev_ids[] = {
>   	{ PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_ZIP_PF) },
>   	{ PCI_DEVICE(PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_ZIP_VF) },
> @@ -685,90 +689,6 @@ static int hisi_zip_pf_probe_init(struct hisi_zip *hisi_zip)
>   	return 0;
>   }
>   
> -static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> -{
> -	struct hisi_zip *hisi_zip;
> -	enum qm_hw_ver rev_id;
> -	struct hisi_qm *qm;
> -	int ret;
> -
> -	rev_id = hisi_qm_get_hw_version(pdev);
> -	if (rev_id == QM_HW_UNKNOWN)
> -		return -EINVAL;
> -
> -	hisi_zip = devm_kzalloc(&pdev->dev, sizeof(*hisi_zip), GFP_KERNEL);
> -	if (!hisi_zip)
> -		return -ENOMEM;
> -	pci_set_drvdata(pdev, hisi_zip);
> -
> -	qm = &hisi_zip->qm;
> -	qm->pdev = pdev;
> -	qm->ver = rev_id;
> -
> -	qm->sqe_size = HZIP_SQE_SIZE;
> -	qm->dev_name = hisi_zip_name;
> -	qm->fun_type = (pdev->device == PCI_DEVICE_ID_ZIP_PF) ? QM_HW_PF :
> -								QM_HW_VF;
> -	switch (uacce_mode) {
> -	case 0:
> -		qm->use_dma_api = true;
> -		break;
> -	case 1:
> -		qm->use_dma_api = false;
> -		break;
> -	case 2:
> -		qm->use_dma_api = true;
> -		break;
> -	default:
> -		return -EINVAL;
> -	}
> -
> -	ret = hisi_qm_init(qm);
> -	if (ret) {
> -		dev_err(&pdev->dev, "Failed to init qm!\n");
> -		return ret;
> -	}
> -
> -	if (qm->fun_type == QM_HW_PF) {
> -		ret = hisi_zip_pf_probe_init(hisi_zip);
> -		if (ret)
> -			return ret;
> -
> -		qm->qp_base = HZIP_PF_DEF_Q_BASE;
> -		qm->qp_num = pf_q_num;
> -	} else if (qm->fun_type == QM_HW_VF) {
> -		/*
> -		 * have no way to get qm configure in VM in v1 hardware,
> -		 * so currently force PF to uses HZIP_PF_DEF_Q_NUM, and force
> -		 * to trigger only one VF in v1 hardware.
> -		 *
> -		 * v2 hardware has no such problem.
> -		 */
> -		if (qm->ver == QM_HW_V1) {
> -			qm->qp_base = HZIP_PF_DEF_Q_NUM;
> -			qm->qp_num = HZIP_QUEUE_NUM_V1 - HZIP_PF_DEF_Q_NUM;
> -		} else if (qm->ver == QM_HW_V2)
> -			/* v2 starts to support get vft by mailbox */
> -			hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
> -	}
> -
> -	ret = hisi_qm_start(qm);
> -	if (ret)
> -		goto err_qm_uninit;
> -
> -	ret = hisi_zip_debugfs_init(hisi_zip);
> -	if (ret)
> -		dev_err(&pdev->dev, "Failed to init debugfs (%d)!\n", ret);
> -
> -	hisi_zip_add_to_list(hisi_zip);
> -
> -	return 0;
> -
> -err_qm_uninit:
> -	hisi_qm_uninit(qm);
> -	return ret;
> -}
> -
>   /* Currently we only support equal assignment */
>   static int hisi_zip_vf_q_assign(struct hisi_zip *hisi_zip, int num_vfs)
>   {
> @@ -865,6 +785,100 @@ static int hisi_zip_sriov_disable(struct pci_dev *pdev)
>   	return hisi_zip_clear_vft_config(hisi_zip);
>   }
>   
> +static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> +{
> +	struct hisi_zip *hisi_zip;
> +	enum qm_hw_ver rev_id;
> +	struct hisi_qm *qm;
> +	int ret;
> +
> +	rev_id = hisi_qm_get_hw_version(pdev);
> +	if (rev_id == QM_HW_UNKNOWN)
> +		return -EINVAL;
> +
> +	hisi_zip = devm_kzalloc(&pdev->dev, sizeof(*hisi_zip), GFP_KERNEL);
> +	if (!hisi_zip)
> +		return -ENOMEM;
> +	pci_set_drvdata(pdev, hisi_zip);
> +
> +	qm = &hisi_zip->qm;
> +	qm->pdev = pdev;
> +	qm->ver = rev_id;
> +
> +	qm->sqe_size = HZIP_SQE_SIZE;
> +	qm->dev_name = hisi_zip_name;
> +	qm->fun_type = (pdev->device == PCI_DEVICE_ID_ZIP_PF) ? QM_HW_PF :
> +								QM_HW_VF;
> +	switch (uacce_mode) {
> +	case 0:
> +		qm->use_dma_api = true;
> +		break;
> +	case 1:
> +		qm->use_dma_api = false;
> +		break;
> +	case 2:
> +		qm->use_dma_api = true;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	ret = hisi_qm_init(qm);
> +	if (ret) {
> +		dev_err(&pdev->dev, "Failed to init qm!\n");
> +		return ret;
> +	}
> +
> +	if (qm->fun_type == QM_HW_PF) {
> +		ret = hisi_zip_pf_probe_init(hisi_zip);
> +		if (ret)
> +			return ret;
> +
> +		qm->qp_base = HZIP_PF_DEF_Q_BASE;
> +		qm->qp_num = pf_q_num;
> +	} else if (qm->fun_type == QM_HW_VF) {
> +		/*
> +		 * have no way to get qm configure in VM in v1 hardware,
> +		 * so currently force PF to uses HZIP_PF_DEF_Q_NUM, and force
> +		 * to trigger only one VF in v1 hardware.
> +		 *
> +		 * v2 hardware has no such problem.
> +		 */
> +		if (qm->ver == QM_HW_V1) {
> +			qm->qp_base = HZIP_PF_DEF_Q_NUM;
> +			qm->qp_num = HZIP_QUEUE_NUM_V1 - HZIP_PF_DEF_Q_NUM;
> +		} else if (qm->ver == QM_HW_V2)
> +			/* v2 starts to support get vft by mailbox */
> +			hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
> +	}
> +
> +	ret = hisi_qm_start(qm);
> +	if (ret)
> +		goto err_qm_uninit;
> +
> +	ret = hisi_zip_debugfs_init(hisi_zip);
> +	if (ret)
> +		dev_err(&pdev->dev, "Failed to init debugfs (%d)!\n", ret);
> +
> +	hisi_zip_add_to_list(hisi_zip);
> +
> +	if (qm->fun_type == QM_HW_PF && vfs_num > 0) {
> +		ret = hisi_zip_sriov_enable(pdev, vfs_num);
> +		if (ret < 0)
> +			goto err_remove_from_list;
> +	}
> +
> +	return 0;
> +
> +err_remove_from_list:
> +	hisi_zip_remove_from_list(hisi_zip);
> +	hisi_zip_debugfs_exit(hisi_zip);
> +	hisi_qm_stop(qm);
> +err_qm_uninit:
> +	hisi_qm_uninit(qm);
> +	return ret;
> +}
> +
>   static int hisi_zip_sriov_configure(struct pci_dev *pdev, int num_vfs)
>   {
>   	if (num_vfs == 0)
> 

Any comments for this patch?

Best,
Hao



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

* Re: [PATCH] crypto: hisilicon - add vfs_num module param for zip
  2019-11-07  3:48 [PATCH] crypto: hisilicon - add vfs_num module param for zip Hao Fang
  2019-11-14 13:40 ` fanghao (A)
@ 2019-11-15  6:06 ` Herbert Xu
  1 sibling, 0 replies; 3+ messages in thread
From: Herbert Xu @ 2019-11-15  6:06 UTC (permalink / raw)
  To: Hao Fang; +Cc: davem, linux-crypto, linuxarm

On Thu, Nov 07, 2019 at 11:48:29AM +0800, Hao Fang wrote:
> Currently the VF can be enabled only through sysfs interface
> after module loaded, but this also needs to be done when the
> module loaded in some scenarios.
> 
> This patch adds module param vfs_num, adds hisi_zip_sriov_enable()
> in probe, and also adjusts the position of probe.
> 
> Signed-off-by: Hao Fang <fanghao11@huawei.com>
> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com>
> ---
>  drivers/crypto/hisilicon/zip/zip_main.c | 182 +++++++++++++++++---------------
>  1 file changed, 98 insertions(+), 84 deletions(-)

Patch applied.  Thanks.
-- 
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] 3+ messages in thread

end of thread, other threads:[~2019-11-15  6:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-07  3:48 [PATCH] crypto: hisilicon - add vfs_num module param for zip Hao Fang
2019-11-14 13:40 ` fanghao (A)
2019-11-15  6:06 ` Herbert Xu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).