]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
crypto: hisilicon/qm: Set the VF QM state register
authorLongfang Liu <liulongfang@huawei.com>
Tue, 8 Mar 2022 18:49:00 +0000 (18:49 +0000)
committerAlex Williamson <alex.williamson@redhat.com>
Tue, 15 Mar 2022 17:34:09 +0000 (11:34 -0600)
We use VF QM state register to record the status of the QM configuration
state. This will be used in the ACC migration driver to determine whether
we can safely save and restore the QM data.

Signed-off-by: Longfang Liu <liulongfang@huawei.com>
Acked-by: Zhou Wang <wangzhou1@hisilicon.com>
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Link: https://lore.kernel.org/r/20220308184902.2242-8-shameerali.kolothum.thodi@huawei.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/crypto/hisilicon/qm.c
include/linux/hisi_acc_qm.h

index c88e013371af3c6b02e83aa680335c75308e1922..6a8776db38b534061fd1a07ede726a73338ded11 100644 (file)
@@ -3492,6 +3492,12 @@ static void hisi_qm_pci_uninit(struct hisi_qm *qm)
        pci_disable_device(pdev);
 }
 
+static void hisi_qm_set_state(struct hisi_qm *qm, u8 state)
+{
+       if (qm->ver > QM_HW_V2 && qm->fun_type == QM_HW_VF)
+               writel(state, qm->io_base + QM_VF_STATE);
+}
+
 /**
  * hisi_qm_uninit() - Uninitialize qm.
  * @qm: The qm needed uninit.
@@ -3520,6 +3526,7 @@ void hisi_qm_uninit(struct hisi_qm *qm)
                dma_free_coherent(dev, qm->qdma.size,
                                  qm->qdma.va, qm->qdma.dma);
        }
+       hisi_qm_set_state(qm, QM_NOT_READY);
        up_write(&qm->qps_lock);
 
        qm_irq_unregister(qm);
@@ -3745,6 +3752,7 @@ int hisi_qm_start(struct hisi_qm *qm)
        if (!ret)
                atomic_set(&qm->status.flags, QM_START);
 
+       hisi_qm_set_state(qm, QM_READY);
 err_unlock:
        up_write(&qm->qps_lock);
        return ret;
index 00f2a4db872311778dfbf207787fae02626a242b..177f7b7cd4147a075fee782c496e3e22277d3f89 100644 (file)
@@ -67,6 +67,7 @@
 #define QM_DB_RAND_SHIFT_V2            16
 #define QM_DB_INDEX_SHIFT_V2           32
 #define QM_DB_PRIORITY_SHIFT_V2                48
+#define QM_VF_STATE                    0x60
 
 /* qm cache */
 #define QM_CACHE_CTL                   0x100050
@@ -162,6 +163,11 @@ enum qm_debug_file {
        DEBUG_FILE_NUM,
 };
 
+enum qm_vf_state {
+       QM_READY = 0,
+       QM_NOT_READY,
+};
+
 struct qm_dfx {
        atomic64_t err_irq_cnt;
        atomic64_t aeq_irq_cnt;