Skip to content

Commit d9701f8

Browse files
Weili Qianherbertx
authored andcommitted
crypto: hisilicon - unify initial value assignment into QM
Some initial value assignment of struct hisi_qm could put into QM. Signed-off-by: Weili Qian <[email protected]> Signed-off-by: Shukun Tan <[email protected]> Reviewed-by: Zhou Wang <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent b977e03 commit d9701f8

File tree

4 files changed

+81
-72
lines changed

4 files changed

+81
-72
lines changed

drivers/crypto/hisilicon/hpre/hpre_main.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -672,12 +672,13 @@ static int hpre_qm_init(struct hisi_qm *qm, struct pci_dev *pdev)
672672
qm->ver = rev_id;
673673
qm->sqe_size = HPRE_SQE_SIZE;
674674
qm->dev_name = hpre_name;
675-
qm->fun_type = (pdev->device == HPRE_PCI_DEVICE_ID) ?
676-
QM_HW_PF : QM_HW_VF;
677675

678-
if (pdev->is_physfn) {
676+
qm->fun_type = (pdev->device == HPRE_PCI_DEVICE_ID) ?
677+
QM_HW_PF : QM_HW_VF;
678+
if (qm->fun_type == QM_HW_PF) {
679679
qm->qp_base = HPRE_PF_DEF_Q_BASE;
680680
qm->qp_num = pf_q_num;
681+
qm->qm_list = &hpre_devices;
681682
}
682683

683684
return hisi_qm_init(qm);
@@ -748,7 +749,6 @@ static int hpre_pf_probe_init(struct hpre *hpre)
748749
if (ret)
749750
return ret;
750751

751-
qm->qm_list = &hpre_devices;
752752
qm->err_ini = &hpre_err_ini;
753753
hisi_qm_dev_err_init(qm);
754754

@@ -758,15 +758,15 @@ static int hpre_pf_probe_init(struct hpre *hpre)
758758
static int hpre_probe_init(struct hpre *hpre)
759759
{
760760
struct hisi_qm *qm = &hpre->qm;
761-
int ret = -ENODEV;
761+
int ret;
762762

763-
if (qm->fun_type == QM_HW_PF)
763+
if (qm->fun_type == QM_HW_PF) {
764764
ret = hpre_pf_probe_init(hpre);
765-
else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V2)
766-
/* v2 starts to support get vft by mailbox */
767-
ret = hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
765+
if (ret)
766+
return ret;
767+
}
768768

769-
return ret;
769+
return 0;
770770
}
771771

772772
static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id)
@@ -779,8 +779,6 @@ static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id)
779779
if (!hpre)
780780
return -ENOMEM;
781781

782-
pci_set_drvdata(pdev, hpre);
783-
784782
qm = &hpre->qm;
785783
ret = hpre_qm_init(qm, pdev);
786784
if (ret) {

drivers/crypto/hisilicon/qm.c

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1916,6 +1916,27 @@ int hisi_qm_get_free_qp_num(struct hisi_qm *qm)
19161916
}
19171917
EXPORT_SYMBOL_GPL(hisi_qm_get_free_qp_num);
19181918

1919+
static void hisi_qm_pre_init(struct hisi_qm *qm)
1920+
{
1921+
struct pci_dev *pdev = qm->pdev;
1922+
1923+
switch (qm->ver) {
1924+
case QM_HW_V1:
1925+
qm->ops = &qm_hw_ops_v1;
1926+
break;
1927+
case QM_HW_V2:
1928+
qm->ops = &qm_hw_ops_v2;
1929+
break;
1930+
default:
1931+
return;
1932+
}
1933+
1934+
pci_set_drvdata(pdev, qm);
1935+
mutex_init(&qm->mailbox_lock);
1936+
init_rwsem(&qm->qps_lock);
1937+
qm->qp_in_used = 0;
1938+
}
1939+
19191940
/**
19201941
* hisi_qm_init() - Initialize configures about qm.
19211942
* @qm: The qm needing init.
@@ -1929,16 +1950,7 @@ int hisi_qm_init(struct hisi_qm *qm)
19291950
unsigned int num_vec;
19301951
int ret;
19311952

1932-
switch (qm->ver) {
1933-
case QM_HW_V1:
1934-
qm->ops = &qm_hw_ops_v1;
1935-
break;
1936-
case QM_HW_V2:
1937-
qm->ops = &qm_hw_ops_v2;
1938-
break;
1939-
default:
1940-
return -EINVAL;
1941-
}
1953+
hisi_qm_pre_init(qm);
19421954

19431955
ret = qm_alloc_uacce(qm);
19441956
if (ret < 0)
@@ -1984,15 +1996,21 @@ int hisi_qm_init(struct hisi_qm *qm)
19841996
if (ret)
19851997
goto err_free_irq_vectors;
19861998

1987-
qm->qp_in_used = 0;
1988-
mutex_init(&qm->mailbox_lock);
1989-
init_rwsem(&qm->qps_lock);
1999+
if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V2) {
2000+
/* v2 starts to support get vft by mailbox */
2001+
ret = hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
2002+
if (ret)
2003+
goto err_irq_unregister;
2004+
}
2005+
19902006
INIT_WORK(&qm->work, qm_work_process);
19912007

19922008
atomic_set(&qm->status.flags, QM_INIT);
19932009

19942010
return 0;
19952011

2012+
err_irq_unregister:
2013+
qm_irq_unregister(qm);
19962014
err_free_irq_vectors:
19972015
pci_free_irq_vectors(pdev);
19982016
err_iounmap:

drivers/crypto/hisilicon/sec2/sec_main.c

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -722,16 +722,17 @@ static int sec_pf_probe_init(struct sec_dev *sec)
722722
static int sec_qm_init(struct hisi_qm *qm, struct pci_dev *pdev)
723723
{
724724
enum qm_hw_ver rev_id;
725+
int ret;
725726

726727
rev_id = hisi_qm_get_hw_version(pdev);
727728
if (rev_id == QM_HW_UNKNOWN)
728729
return -ENODEV;
729730

730731
qm->pdev = pdev;
731732
qm->ver = rev_id;
732-
733733
qm->sqe_size = SEC_SQE_SIZE;
734734
qm->dev_name = sec_name;
735+
735736
qm->fun_type = (pdev->device == SEC_PF_PCI_DEVICE_ID) ?
736737
QM_HW_PF : QM_HW_VF;
737738
if (qm->fun_type == QM_HW_PF) {
@@ -750,7 +751,25 @@ static int sec_qm_init(struct hisi_qm *qm, struct pci_dev *pdev)
750751
qm->qp_num = SEC_QUEUE_NUM_V1 - SEC_PF_DEF_Q_NUM;
751752
}
752753

753-
return hisi_qm_init(qm);
754+
/*
755+
* WQ_HIGHPRI: SEC request must be low delayed,
756+
* so need a high priority workqueue.
757+
* WQ_UNBOUND: SEC task is likely with long
758+
* running CPU intensive workloads.
759+
*/
760+
qm->wq = alloc_workqueue("%s", WQ_HIGHPRI | WQ_MEM_RECLAIM |
761+
WQ_UNBOUND, num_online_cpus(),
762+
pci_name(qm->pdev));
763+
if (!qm->wq) {
764+
pci_err(qm->pdev, "fail to alloc workqueue\n");
765+
return -ENOMEM;
766+
}
767+
768+
ret = hisi_qm_init(qm);
769+
if (ret)
770+
destroy_workqueue(qm->wq);
771+
772+
return ret;
754773
}
755774

756775
static void sec_qm_uninit(struct hisi_qm *qm)
@@ -763,29 +782,10 @@ static int sec_probe_init(struct sec_dev *sec)
763782
struct hisi_qm *qm = &sec->qm;
764783
int ret;
765784

766-
/*
767-
* WQ_HIGHPRI: SEC request must be low delayed,
768-
* so need a high priority workqueue.
769-
* WQ_UNBOUND: SEC task is likely with long
770-
* running CPU intensive workloads.
771-
*/
772-
qm->wq = alloc_workqueue("%s", WQ_HIGHPRI |
773-
WQ_MEM_RECLAIM | WQ_UNBOUND, num_online_cpus(),
774-
pci_name(qm->pdev));
775-
if (!qm->wq) {
776-
pci_err(qm->pdev, "fail to alloc workqueue\n");
777-
return -ENOMEM;
778-
}
779-
780-
if (qm->fun_type == QM_HW_PF)
785+
if (qm->fun_type == QM_HW_PF) {
781786
ret = sec_pf_probe_init(sec);
782-
else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V2)
783-
/* v2 starts to support get vft by mailbox */
784-
ret = hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
785-
786-
if (ret) {
787-
destroy_workqueue(qm->wq);
788-
return ret;
787+
if (ret)
788+
return ret;
789789
}
790790

791791
return 0;
@@ -825,8 +825,6 @@ static int sec_probe(struct pci_dev *pdev, const struct pci_device_id *id)
825825
if (!sec)
826826
return -ENOMEM;
827827

828-
pci_set_drvdata(pdev, sec);
829-
830828
qm = &sec->qm;
831829
ret = sec_qm_init(qm, pdev);
832830
if (ret) {

drivers/crypto/hisilicon/zip/zip_main.c

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -694,12 +694,27 @@ static int hisi_zip_qm_init(struct hisi_qm *qm, struct pci_dev *pdev)
694694

695695
qm->pdev = pdev;
696696
qm->ver = rev_id;
697-
698697
qm->algs = "zlib\ngzip";
699698
qm->sqe_size = HZIP_SQE_SIZE;
700699
qm->dev_name = hisi_zip_name;
700+
701701
qm->fun_type = (pdev->device == PCI_DEVICE_ID_ZIP_PF) ?
702702
QM_HW_PF : QM_HW_VF;
703+
if (qm->fun_type == QM_HW_PF) {
704+
qm->qp_base = HZIP_PF_DEF_Q_BASE;
705+
qm->qp_num = pf_q_num;
706+
qm->qm_list = &zip_devices;
707+
} else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V1) {
708+
/*
709+
* have no way to get qm configure in VM in v1 hardware,
710+
* so currently force PF to uses HZIP_PF_DEF_Q_NUM, and force
711+
* to trigger only one VF in v1 hardware.
712+
*
713+
* v2 hardware has no such problem.
714+
*/
715+
qm->qp_base = HZIP_PF_DEF_Q_NUM;
716+
qm->qp_num = HZIP_QUEUE_NUM_V1 - HZIP_PF_DEF_Q_NUM;
717+
}
703718

704719
return hisi_qm_init(qm);
705720
}
@@ -713,24 +728,6 @@ static int hisi_zip_probe_init(struct hisi_zip *hisi_zip)
713728
ret = hisi_zip_pf_probe_init(hisi_zip);
714729
if (ret)
715730
return ret;
716-
717-
qm->qp_base = HZIP_PF_DEF_Q_BASE;
718-
qm->qp_num = pf_q_num;
719-
qm->qm_list = &zip_devices;
720-
} else if (qm->fun_type == QM_HW_VF) {
721-
/*
722-
* have no way to get qm configure in VM in v1 hardware,
723-
* so currently force PF to uses HZIP_PF_DEF_Q_NUM, and force
724-
* to trigger only one VF in v1 hardware.
725-
*
726-
* v2 hardware has no such problem.
727-
*/
728-
if (qm->ver == QM_HW_V1) {
729-
qm->qp_base = HZIP_PF_DEF_Q_NUM;
730-
qm->qp_num = HZIP_QUEUE_NUM_V1 - HZIP_PF_DEF_Q_NUM;
731-
} else if (qm->ver == QM_HW_V2)
732-
/* v2 starts to support get vft by mailbox */
733-
return hisi_qm_get_vft(qm, &qm->qp_base, &qm->qp_num);
734731
}
735732

736733
return 0;
@@ -746,8 +743,6 @@ static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id)
746743
if (!hisi_zip)
747744
return -ENOMEM;
748745

749-
pci_set_drvdata(pdev, hisi_zip);
750-
751746
qm = &hisi_zip->qm;
752747

753748
ret = hisi_zip_qm_init(qm, pdev);

0 commit comments

Comments
 (0)