Commit 607c191b authored by Weili Qian's avatar Weili Qian Committed by Herbert Xu

crypto: hisilicon - support runtime PM for accelerator device

Add runtime PM support for Kunpeng930 accelerator device.
Signed-off-by: default avatarWeili Qian <qianweili@huawei.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent d7ea5339
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm_runtime.h>
#include <linux/topology.h> #include <linux/topology.h>
#include <linux/uacce.h> #include <linux/uacce.h>
#include "hpre.h" #include "hpre.h"
...@@ -658,10 +659,15 @@ static ssize_t hpre_ctrl_debug_read(struct file *filp, char __user *buf, ...@@ -658,10 +659,15 @@ static ssize_t hpre_ctrl_debug_read(struct file *filp, char __user *buf,
size_t count, loff_t *pos) size_t count, loff_t *pos)
{ {
struct hpre_debugfs_file *file = filp->private_data; struct hpre_debugfs_file *file = filp->private_data;
struct hisi_qm *qm = hpre_file_to_qm(file);
char tbuf[HPRE_DBGFS_VAL_MAX_LEN]; char tbuf[HPRE_DBGFS_VAL_MAX_LEN];
u32 val; u32 val;
int ret; int ret;
ret = hisi_qm_get_dfx_access(qm);
if (ret)
return ret;
spin_lock_irq(&file->lock); spin_lock_irq(&file->lock);
switch (file->type) { switch (file->type) {
case HPRE_CLEAR_ENABLE: case HPRE_CLEAR_ENABLE:
...@@ -671,18 +677,25 @@ static ssize_t hpre_ctrl_debug_read(struct file *filp, char __user *buf, ...@@ -671,18 +677,25 @@ static ssize_t hpre_ctrl_debug_read(struct file *filp, char __user *buf,
val = hpre_cluster_inqry_read(file); val = hpre_cluster_inqry_read(file);
break; break;
default: default:
spin_unlock_irq(&file->lock); goto err_input;
return -EINVAL;
} }
spin_unlock_irq(&file->lock); spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
ret = snprintf(tbuf, HPRE_DBGFS_VAL_MAX_LEN, "%u\n", val); ret = snprintf(tbuf, HPRE_DBGFS_VAL_MAX_LEN, "%u\n", val);
return simple_read_from_buffer(buf, count, pos, tbuf, ret); return simple_read_from_buffer(buf, count, pos, tbuf, ret);
err_input:
spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
return -EINVAL;
} }
static ssize_t hpre_ctrl_debug_write(struct file *filp, const char __user *buf, static ssize_t hpre_ctrl_debug_write(struct file *filp, const char __user *buf,
size_t count, loff_t *pos) size_t count, loff_t *pos)
{ {
struct hpre_debugfs_file *file = filp->private_data; struct hpre_debugfs_file *file = filp->private_data;
struct hisi_qm *qm = hpre_file_to_qm(file);
char tbuf[HPRE_DBGFS_VAL_MAX_LEN]; char tbuf[HPRE_DBGFS_VAL_MAX_LEN];
unsigned long val; unsigned long val;
int len, ret; int len, ret;
...@@ -702,6 +715,10 @@ static ssize_t hpre_ctrl_debug_write(struct file *filp, const char __user *buf, ...@@ -702,6 +715,10 @@ static ssize_t hpre_ctrl_debug_write(struct file *filp, const char __user *buf,
if (kstrtoul(tbuf, 0, &val)) if (kstrtoul(tbuf, 0, &val))
return -EFAULT; return -EFAULT;
ret = hisi_qm_get_dfx_access(qm);
if (ret)
return ret;
spin_lock_irq(&file->lock); spin_lock_irq(&file->lock);
switch (file->type) { switch (file->type) {
case HPRE_CLEAR_ENABLE: case HPRE_CLEAR_ENABLE:
...@@ -718,12 +735,12 @@ static ssize_t hpre_ctrl_debug_write(struct file *filp, const char __user *buf, ...@@ -718,12 +735,12 @@ static ssize_t hpre_ctrl_debug_write(struct file *filp, const char __user *buf,
ret = -EINVAL; ret = -EINVAL;
goto err_input; goto err_input;
} }
spin_unlock_irq(&file->lock);
return count; ret = count;
err_input: err_input:
spin_unlock_irq(&file->lock); spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
return ret; return ret;
} }
...@@ -818,6 +835,7 @@ static int hpre_pf_comm_regs_debugfs_init(struct hisi_qm *qm) ...@@ -818,6 +835,7 @@ static int hpre_pf_comm_regs_debugfs_init(struct hisi_qm *qm)
regset->regs = hpre_com_dfx_regs; regset->regs = hpre_com_dfx_regs;
regset->nregs = ARRAY_SIZE(hpre_com_dfx_regs); regset->nregs = ARRAY_SIZE(hpre_com_dfx_regs);
regset->base = qm->io_base; regset->base = qm->io_base;
regset->dev = dev;
debugfs_create_file("regs", 0444, qm->debug.debug_root, debugfs_create_file("regs", 0444, qm->debug.debug_root,
regset, &hpre_com_regs_fops); regset, &hpre_com_regs_fops);
...@@ -847,6 +865,7 @@ static int hpre_cluster_debugfs_init(struct hisi_qm *qm) ...@@ -847,6 +865,7 @@ static int hpre_cluster_debugfs_init(struct hisi_qm *qm)
regset->regs = hpre_cluster_dfx_regs; regset->regs = hpre_cluster_dfx_regs;
regset->nregs = ARRAY_SIZE(hpre_cluster_dfx_regs); regset->nregs = ARRAY_SIZE(hpre_cluster_dfx_regs);
regset->base = qm->io_base + hpre_cluster_offsets[i]; regset->base = qm->io_base + hpre_cluster_offsets[i];
regset->dev = dev;
debugfs_create_file("regs", 0444, tmp_d, regset, debugfs_create_file("regs", 0444, tmp_d, regset,
&hpre_cluster_regs_fops); &hpre_cluster_regs_fops);
...@@ -1101,6 +1120,8 @@ static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -1101,6 +1120,8 @@ static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto err_with_alg_register; goto err_with_alg_register;
} }
hisi_qm_pm_init(qm);
return 0; return 0;
err_with_alg_register: err_with_alg_register:
...@@ -1124,6 +1145,7 @@ static void hpre_remove(struct pci_dev *pdev) ...@@ -1124,6 +1145,7 @@ static void hpre_remove(struct pci_dev *pdev)
struct hisi_qm *qm = pci_get_drvdata(pdev); struct hisi_qm *qm = pci_get_drvdata(pdev);
int ret; int ret;
hisi_qm_pm_uninit(qm);
hisi_qm_wait_task_finish(qm, &hpre_devices); hisi_qm_wait_task_finish(qm, &hpre_devices);
hisi_qm_alg_unregister(qm, &hpre_devices); hisi_qm_alg_unregister(qm, &hpre_devices);
if (qm->fun_type == QM_HW_PF && qm->vfs_num) { if (qm->fun_type == QM_HW_PF && qm->vfs_num) {
...@@ -1146,6 +1168,10 @@ static void hpre_remove(struct pci_dev *pdev) ...@@ -1146,6 +1168,10 @@ static void hpre_remove(struct pci_dev *pdev)
hisi_qm_uninit(qm); hisi_qm_uninit(qm);
} }
static const struct dev_pm_ops hpre_pm_ops = {
SET_RUNTIME_PM_OPS(hisi_qm_suspend, hisi_qm_resume, NULL)
};
static const struct pci_error_handlers hpre_err_handler = { static const struct pci_error_handlers hpre_err_handler = {
.error_detected = hisi_qm_dev_err_detected, .error_detected = hisi_qm_dev_err_detected,
.slot_reset = hisi_qm_dev_slot_reset, .slot_reset = hisi_qm_dev_slot_reset,
...@@ -1162,6 +1188,7 @@ static struct pci_driver hpre_pci_driver = { ...@@ -1162,6 +1188,7 @@ static struct pci_driver hpre_pci_driver = {
hisi_qm_sriov_configure : NULL, hisi_qm_sriov_configure : NULL,
.err_handler = &hpre_err_handler, .err_handler = &hpre_err_handler,
.shutdown = hisi_qm_dev_shutdown, .shutdown = hisi_qm_dev_shutdown,
.driver.pm = &hpre_pm_ops,
}; };
static void hpre_register_debugfs(void) static void hpre_register_debugfs(void)
......
This diff is collapsed.
...@@ -433,5 +433,9 @@ int hisi_qm_alg_register(struct hisi_qm *qm, struct hisi_qm_list *qm_list); ...@@ -433,5 +433,9 @@ int hisi_qm_alg_register(struct hisi_qm *qm, struct hisi_qm_list *qm_list);
void hisi_qm_alg_unregister(struct hisi_qm *qm, struct hisi_qm_list *qm_list); void hisi_qm_alg_unregister(struct hisi_qm *qm, struct hisi_qm_list *qm_list);
int hisi_qm_resume(struct device *dev); int hisi_qm_resume(struct device *dev);
int hisi_qm_suspend(struct device *dev); int hisi_qm_suspend(struct device *dev);
void hisi_qm_pm_uninit(struct hisi_qm *qm);
void hisi_qm_pm_init(struct hisi_qm *qm);
int hisi_qm_get_dfx_access(struct hisi_qm *qm);
void hisi_qm_put_dfx_access(struct hisi_qm *qm);
void hisi_qm_regs_dump(struct seq_file *s, struct debugfs_regset32 *regset); void hisi_qm_regs_dump(struct seq_file *s, struct debugfs_regset32 *regset);
#endif #endif
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm_runtime.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/topology.h> #include <linux/topology.h>
#include <linux/uacce.h> #include <linux/uacce.h>
...@@ -584,9 +585,14 @@ static ssize_t sec_debug_read(struct file *filp, char __user *buf, ...@@ -584,9 +585,14 @@ static ssize_t sec_debug_read(struct file *filp, char __user *buf,
{ {
struct sec_debug_file *file = filp->private_data; struct sec_debug_file *file = filp->private_data;
char tbuf[SEC_DBGFS_VAL_MAX_LEN]; char tbuf[SEC_DBGFS_VAL_MAX_LEN];
struct hisi_qm *qm = file->qm;
u32 val; u32 val;
int ret; int ret;
ret = hisi_qm_get_dfx_access(qm);
if (ret)
return ret;
spin_lock_irq(&file->lock); spin_lock_irq(&file->lock);
switch (file->index) { switch (file->index) {
...@@ -594,14 +600,19 @@ static ssize_t sec_debug_read(struct file *filp, char __user *buf, ...@@ -594,14 +600,19 @@ static ssize_t sec_debug_read(struct file *filp, char __user *buf,
val = sec_clear_enable_read(file); val = sec_clear_enable_read(file);
break; break;
default: default:
spin_unlock_irq(&file->lock); goto err_input;
return -EINVAL;
} }
spin_unlock_irq(&file->lock); spin_unlock_irq(&file->lock);
ret = snprintf(tbuf, SEC_DBGFS_VAL_MAX_LEN, "%u\n", val);
hisi_qm_put_dfx_access(qm);
ret = snprintf(tbuf, SEC_DBGFS_VAL_MAX_LEN, "%u\n", val);
return simple_read_from_buffer(buf, count, pos, tbuf, ret); return simple_read_from_buffer(buf, count, pos, tbuf, ret);
err_input:
spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
return -EINVAL;
} }
static ssize_t sec_debug_write(struct file *filp, const char __user *buf, static ssize_t sec_debug_write(struct file *filp, const char __user *buf,
...@@ -609,6 +620,7 @@ static ssize_t sec_debug_write(struct file *filp, const char __user *buf, ...@@ -609,6 +620,7 @@ static ssize_t sec_debug_write(struct file *filp, const char __user *buf,
{ {
struct sec_debug_file *file = filp->private_data; struct sec_debug_file *file = filp->private_data;
char tbuf[SEC_DBGFS_VAL_MAX_LEN]; char tbuf[SEC_DBGFS_VAL_MAX_LEN];
struct hisi_qm *qm = file->qm;
unsigned long val; unsigned long val;
int len, ret; int len, ret;
...@@ -627,6 +639,10 @@ static ssize_t sec_debug_write(struct file *filp, const char __user *buf, ...@@ -627,6 +639,10 @@ static ssize_t sec_debug_write(struct file *filp, const char __user *buf,
if (kstrtoul(tbuf, 0, &val)) if (kstrtoul(tbuf, 0, &val))
return -EFAULT; return -EFAULT;
ret = hisi_qm_get_dfx_access(qm);
if (ret)
return ret;
spin_lock_irq(&file->lock); spin_lock_irq(&file->lock);
switch (file->index) { switch (file->index) {
...@@ -640,12 +656,11 @@ static ssize_t sec_debug_write(struct file *filp, const char __user *buf, ...@@ -640,12 +656,11 @@ static ssize_t sec_debug_write(struct file *filp, const char __user *buf,
goto err_input; goto err_input;
} }
spin_unlock_irq(&file->lock); ret = count;
return count;
err_input: err_input:
spin_unlock_irq(&file->lock); spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
return ret; return ret;
} }
...@@ -703,6 +718,7 @@ static int sec_core_debug_init(struct hisi_qm *qm) ...@@ -703,6 +718,7 @@ static int sec_core_debug_init(struct hisi_qm *qm)
regset->regs = sec_dfx_regs; regset->regs = sec_dfx_regs;
regset->nregs = ARRAY_SIZE(sec_dfx_regs); regset->nregs = ARRAY_SIZE(sec_dfx_regs);
regset->base = qm->io_base; regset->base = qm->io_base;
regset->dev = dev;
if (qm->pdev->device == SEC_PF_PCI_DEVICE_ID) if (qm->pdev->device == SEC_PF_PCI_DEVICE_ID)
debugfs_create_file("regs", 0444, tmp_d, regset, &sec_regs_fops); debugfs_create_file("regs", 0444, tmp_d, regset, &sec_regs_fops);
...@@ -1013,6 +1029,8 @@ static int sec_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -1013,6 +1029,8 @@ static int sec_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto err_alg_unregister; goto err_alg_unregister;
} }
hisi_qm_pm_init(qm);
return 0; return 0;
err_alg_unregister: err_alg_unregister:
...@@ -1032,6 +1050,7 @@ static void sec_remove(struct pci_dev *pdev) ...@@ -1032,6 +1050,7 @@ static void sec_remove(struct pci_dev *pdev)
{ {
struct hisi_qm *qm = pci_get_drvdata(pdev); struct hisi_qm *qm = pci_get_drvdata(pdev);
hisi_qm_pm_uninit(qm);
hisi_qm_wait_task_finish(qm, &sec_devices); hisi_qm_wait_task_finish(qm, &sec_devices);
if (qm->qp_num >= ctx_q_num) if (qm->qp_num >= ctx_q_num)
hisi_qm_alg_unregister(qm, &sec_devices); hisi_qm_alg_unregister(qm, &sec_devices);
...@@ -1051,6 +1070,10 @@ static void sec_remove(struct pci_dev *pdev) ...@@ -1051,6 +1070,10 @@ static void sec_remove(struct pci_dev *pdev)
sec_qm_uninit(qm); sec_qm_uninit(qm);
} }
static const struct dev_pm_ops sec_pm_ops = {
SET_RUNTIME_PM_OPS(hisi_qm_suspend, hisi_qm_resume, NULL)
};
static const struct pci_error_handlers sec_err_handler = { static const struct pci_error_handlers sec_err_handler = {
.error_detected = hisi_qm_dev_err_detected, .error_detected = hisi_qm_dev_err_detected,
.slot_reset = hisi_qm_dev_slot_reset, .slot_reset = hisi_qm_dev_slot_reset,
...@@ -1066,6 +1089,7 @@ static struct pci_driver sec_pci_driver = { ...@@ -1066,6 +1089,7 @@ static struct pci_driver sec_pci_driver = {
.err_handler = &sec_err_handler, .err_handler = &sec_err_handler,
.sriov_configure = hisi_qm_sriov_configure, .sriov_configure = hisi_qm_sriov_configure,
.shutdown = hisi_qm_dev_shutdown, .shutdown = hisi_qm_dev_shutdown,
.driver.pm = &sec_pm_ops,
}; };
static void sec_register_debugfs(void) static void sec_register_debugfs(void)
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm_runtime.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/topology.h> #include <linux/topology.h>
#include <linux/uacce.h> #include <linux/uacce.h>
...@@ -476,22 +477,33 @@ static ssize_t hisi_zip_ctrl_debug_read(struct file *filp, char __user *buf, ...@@ -476,22 +477,33 @@ static ssize_t hisi_zip_ctrl_debug_read(struct file *filp, char __user *buf,
size_t count, loff_t *pos) size_t count, loff_t *pos)
{ {
struct ctrl_debug_file *file = filp->private_data; struct ctrl_debug_file *file = filp->private_data;
struct hisi_qm *qm = file_to_qm(file);
char tbuf[HZIP_BUF_SIZE]; char tbuf[HZIP_BUF_SIZE];
u32 val; u32 val;
int ret; int ret;
ret = hisi_qm_get_dfx_access(qm);
if (ret)
return ret;
spin_lock_irq(&file->lock); spin_lock_irq(&file->lock);
switch (file->index) { switch (file->index) {
case HZIP_CLEAR_ENABLE: case HZIP_CLEAR_ENABLE:
val = clear_enable_read(file); val = clear_enable_read(file);
break; break;
default: default:
spin_unlock_irq(&file->lock); goto err_input;
return -EINVAL;
} }
spin_unlock_irq(&file->lock); spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
ret = scnprintf(tbuf, sizeof(tbuf), "%u\n", val); ret = scnprintf(tbuf, sizeof(tbuf), "%u\n", val);
return simple_read_from_buffer(buf, count, pos, tbuf, ret); return simple_read_from_buffer(buf, count, pos, tbuf, ret);
err_input:
spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
return -EINVAL;
} }
static ssize_t hisi_zip_ctrl_debug_write(struct file *filp, static ssize_t hisi_zip_ctrl_debug_write(struct file *filp,
...@@ -499,6 +511,7 @@ static ssize_t hisi_zip_ctrl_debug_write(struct file *filp, ...@@ -499,6 +511,7 @@ static ssize_t hisi_zip_ctrl_debug_write(struct file *filp,
size_t count, loff_t *pos) size_t count, loff_t *pos)
{ {
struct ctrl_debug_file *file = filp->private_data; struct ctrl_debug_file *file = filp->private_data;
struct hisi_qm *qm = file_to_qm(file);
char tbuf[HZIP_BUF_SIZE]; char tbuf[HZIP_BUF_SIZE];
unsigned long val; unsigned long val;
int len, ret; int len, ret;
...@@ -517,6 +530,10 @@ static ssize_t hisi_zip_ctrl_debug_write(struct file *filp, ...@@ -517,6 +530,10 @@ static ssize_t hisi_zip_ctrl_debug_write(struct file *filp,
if (kstrtoul(tbuf, 0, &val)) if (kstrtoul(tbuf, 0, &val))
return -EFAULT; return -EFAULT;
ret = hisi_qm_get_dfx_access(qm);
if (ret)
return ret;
spin_lock_irq(&file->lock); spin_lock_irq(&file->lock);
switch (file->index) { switch (file->index) {
case HZIP_CLEAR_ENABLE: case HZIP_CLEAR_ENABLE:
...@@ -528,12 +545,12 @@ static ssize_t hisi_zip_ctrl_debug_write(struct file *filp, ...@@ -528,12 +545,12 @@ static ssize_t hisi_zip_ctrl_debug_write(struct file *filp,
ret = -EINVAL; ret = -EINVAL;
goto err_input; goto err_input;
} }
spin_unlock_irq(&file->lock);
return count; ret = count;
err_input: err_input:
spin_unlock_irq(&file->lock); spin_unlock_irq(&file->lock);
hisi_qm_put_dfx_access(qm);
return ret; return ret;
} }
...@@ -595,6 +612,7 @@ static int hisi_zip_core_debug_init(struct hisi_qm *qm) ...@@ -595,6 +612,7 @@ static int hisi_zip_core_debug_init(struct hisi_qm *qm)
regset->regs = hzip_dfx_regs; regset->regs = hzip_dfx_regs;
regset->nregs = ARRAY_SIZE(hzip_dfx_regs); regset->nregs = ARRAY_SIZE(hzip_dfx_regs);
regset->base = qm->io_base + core_offsets[i]; regset->base = qm->io_base + core_offsets[i];
regset->dev = dev;
tmp_d = debugfs_create_dir(buf, qm->debug.debug_root); tmp_d = debugfs_create_dir(buf, qm->debug.debug_root);
debugfs_create_file("regs", 0444, tmp_d, regset, debugfs_create_file("regs", 0444, tmp_d, regset,
...@@ -934,6 +952,8 @@ static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -934,6 +952,8 @@ static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto err_qm_alg_unregister; goto err_qm_alg_unregister;
} }
hisi_qm_pm_init(qm);
return 0; return 0;
err_qm_alg_unregister: err_qm_alg_unregister:
...@@ -956,6 +976,7 @@ static void hisi_zip_remove(struct pci_dev *pdev) ...@@ -956,6 +976,7 @@ static void hisi_zip_remove(struct pci_dev *pdev)
{ {
struct hisi_qm *qm = pci_get_drvdata(pdev); struct hisi_qm *qm = pci_get_drvdata(pdev);
hisi_qm_pm_uninit(qm);
hisi_qm_wait_task_finish(qm, &zip_devices); hisi_qm_wait_task_finish(qm, &zip_devices);
hisi_qm_alg_unregister(qm, &zip_devices); hisi_qm_alg_unregister(qm, &zip_devices);
...@@ -968,6 +989,10 @@ static void hisi_zip_remove(struct pci_dev *pdev) ...@@ -968,6 +989,10 @@ static void hisi_zip_remove(struct pci_dev *pdev)
hisi_zip_qm_uninit(qm); hisi_zip_qm_uninit(qm);
} }
static const struct dev_pm_ops hisi_zip_pm_ops = {
SET_RUNTIME_PM_OPS(hisi_qm_suspend, hisi_qm_resume, NULL)
};
static const struct pci_error_handlers hisi_zip_err_handler = { static const struct pci_error_handlers hisi_zip_err_handler = {
.error_detected = hisi_qm_dev_err_detected, .error_detected = hisi_qm_dev_err_detected,
.slot_reset = hisi_qm_dev_slot_reset, .slot_reset = hisi_qm_dev_slot_reset,
...@@ -984,6 +1009,7 @@ static struct pci_driver hisi_zip_pci_driver = { ...@@ -984,6 +1009,7 @@ static struct pci_driver hisi_zip_pci_driver = {
hisi_qm_sriov_configure : NULL, hisi_qm_sriov_configure : NULL,
.err_handler = &hisi_zip_err_handler, .err_handler = &hisi_zip_err_handler,
.shutdown = hisi_qm_dev_shutdown, .shutdown = hisi_qm_dev_shutdown,
.driver.pm = &hisi_zip_pm_ops,
}; };
static void hisi_zip_register_debugfs(void) static void hisi_zip_register_debugfs(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment