crypto: hisilicon/qm: Set the VF QM state register

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>
This commit is contained in:
Longfang Liu 2022-03-08 18:49:00 +00:00 committed by Alex Williamson
parent 442fbc099b
commit 1e459b2508
2 changed files with 14 additions and 0 deletions

View file

@ -3492,6 +3492,12 @@ static void hisi_qm_pci_uninit(struct hisi_qm *qm)
pci_disable_device(pdev); 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. * hisi_qm_uninit() - Uninitialize qm.
* @qm: The qm needed uninit. * @qm: The qm needed uninit.
@ -3520,6 +3526,7 @@ void hisi_qm_uninit(struct hisi_qm *qm)
dma_free_coherent(dev, qm->qdma.size, dma_free_coherent(dev, qm->qdma.size,
qm->qdma.va, qm->qdma.dma); qm->qdma.va, qm->qdma.dma);
} }
hisi_qm_set_state(qm, QM_NOT_READY);
up_write(&qm->qps_lock); up_write(&qm->qps_lock);
qm_irq_unregister(qm); qm_irq_unregister(qm);
@ -3745,6 +3752,7 @@ int hisi_qm_start(struct hisi_qm *qm)
if (!ret) if (!ret)
atomic_set(&qm->status.flags, QM_START); atomic_set(&qm->status.flags, QM_START);
hisi_qm_set_state(qm, QM_READY);
err_unlock: err_unlock:
up_write(&qm->qps_lock); up_write(&qm->qps_lock);
return ret; return ret;

View file

@ -67,6 +67,7 @@
#define QM_DB_RAND_SHIFT_V2 16 #define QM_DB_RAND_SHIFT_V2 16
#define QM_DB_INDEX_SHIFT_V2 32 #define QM_DB_INDEX_SHIFT_V2 32
#define QM_DB_PRIORITY_SHIFT_V2 48 #define QM_DB_PRIORITY_SHIFT_V2 48
#define QM_VF_STATE 0x60
/* qm cache */ /* qm cache */
#define QM_CACHE_CTL 0x100050 #define QM_CACHE_CTL 0x100050
@ -162,6 +163,11 @@ enum qm_debug_file {
DEBUG_FILE_NUM, DEBUG_FILE_NUM,
}; };
enum qm_vf_state {
QM_READY = 0,
QM_NOT_READY,
};
struct qm_dfx { struct qm_dfx {
atomic64_t err_irq_cnt; atomic64_t err_irq_cnt;
atomic64_t aeq_irq_cnt; atomic64_t aeq_irq_cnt;