Commit 8cc5491a authored by Longfang Liu's avatar Longfang Liu Committed by JiangShui
Browse files

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

mainline inclusion
from mainline-v5.18-rc1
commit 1e459b25
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8FI6W
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1e459b25081d4f939b8a1fb4c71dab0cec8f974a



----------------------------------------------------------------------

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: default avatarLongfang Liu <liulongfang@huawei.com>
Acked-by: default avatarZhou Wang <wangzhou1@hisilicon.com>
Signed-off-by: default avatarShameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Link: https://lore.kernel.org/r/20220308184902.2242-8-shameerali.kolothum.thodi@huawei.com


Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Signed-off-by: default avatarJiangShui <1175135535@qq.com>
parent 2ca2eccb
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -3053,6 +3053,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);
}

static void hisi_qm_unint_work(struct hisi_qm *qm)
{
	destroy_workqueue(qm->wq);
@@ -3100,9 +3106,10 @@ void hisi_qm_uninit(struct hisi_qm *qm)
		up_write(&qm->qps_lock);
		return;
	}
	up_write(&qm->qps_lock);

	hisi_qm_memory_uninit(qm);
	hisi_qm_set_state(qm, QM_NOT_READY);
	up_write(&qm->qps_lock);

	qm_remove_uacce(qm);
	qm_irqs_unregister(qm);
@@ -3287,6 +3294,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;
+6 −0
Original line number Diff line number Diff line
@@ -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
@@ -138,6 +139,11 @@ enum qm_debug_file {
	DEBUG_FILE_NUM,
};

enum qm_vf_state {
	QM_READY = 0,
	QM_NOT_READY,
};

enum qm_mist_ctl_bits {
	QM_DRIVER_DOWN = 0x0,
	QM_RST_SCHED,