aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c')
-rw-r--r--sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c b/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c
index 74e9e2292623..b91daefb45d4 100644
--- a/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c
+++ b/sys/dev/qat/qat_hw/qat_c3xxx/adf_drv.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause */
-/* Copyright(c) 2007-2022 Intel Corporation */
+/* Copyright(c) 2007-2025 Intel Corporation */
#include "qat_freebsd.h"
#include "adf_cfg.h"
#include "adf_common_drv.h"
@@ -7,13 +7,12 @@
#include "adf_c3xxx_hw_data.h"
#include "adf_fw_counters.h"
#include "adf_cfg_device.h"
+#include "adf_dbgfs.h"
#include <sys/types.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <machine/bus_dma.h>
#include <dev/pci/pcireg.h>
-#include "adf_heartbeat_dbg.h"
-#include "adf_cnvnr_freq_counters.h"
static MALLOC_DEFINE(M_QAT_C3XXX, "qat_c3xxx", "qat_c3xxx");
@@ -73,6 +72,7 @@ adf_cleanup_accel(struct adf_accel_dev *accel_dev)
free(accel_dev->hw_device, M_QAT_C3XXX);
accel_dev->hw_device = NULL;
}
+ adf_dbgfs_exit(accel_dev);
adf_cfg_dev_remove(accel_dev);
adf_devmgr_rm_dev(accel_dev, NULL);
}
@@ -84,7 +84,7 @@ adf_attach(device_t dev)
struct adf_accel_pci *accel_pci_dev;
struct adf_hw_device_data *hw_data;
unsigned int i, bar_nr;
- int ret, rid;
+ int ret = 0, rid;
struct adf_cfg_device *cfg_dev = NULL;
/* Set pci MaxPayLoad to 256. Implemented to avoid the issue of
@@ -95,6 +95,7 @@ adf_attach(device_t dev)
accel_dev = device_get_softc(dev);
+ mutex_init(&accel_dev->lock);
INIT_LIST_HEAD(&accel_dev->crypto_list);
accel_pci_dev = &accel_dev->accel_pci_dev;
accel_pci_dev->pci_dev = dev;
@@ -106,9 +107,10 @@ adf_attach(device_t dev)
/* Add accel device to accel table.
* This should be called before adf_cleanup_accel is called */
- if (adf_devmgr_add_dev(accel_dev, NULL)) {
+ ret = adf_devmgr_add_dev(accel_dev, NULL);
+ if (ret) {
device_printf(dev, "Failed to add new accelerator device.\n");
- return ENXIO;
+ goto out_err_lock;
}
/* Allocate and configure device configuration structure */
@@ -202,16 +204,20 @@ adf_attach(device_t dev)
bar->base_addr = rman_get_start(bar->virt_addr);
bar->size = rman_get_size(bar->virt_addr);
}
- pci_enable_busmaster(dev);
+ ret = pci_enable_busmaster(dev);
+ if (ret)
+ goto out_err;
+
+ adf_dbgfs_init(accel_dev);
if (!accel_dev->hw_device->config_device) {
ret = EFAULT;
- goto out_err;
+ goto out_err_disable;
}
ret = accel_dev->hw_device->config_device(accel_dev);
if (ret)
- goto out_err;
+ goto out_err_disable;
ret = adf_dev_init(accel_dev);
if (ret)
@@ -230,8 +236,13 @@ out_dev_stop:
adf_dev_stop(accel_dev);
out_dev_shutdown:
adf_dev_shutdown(accel_dev);
+out_err_disable:
+ pci_disable_busmaster(dev);
out_err:
adf_cleanup_accel(accel_dev);
+out_err_lock:
+ mutex_destroy(&accel_dev->lock);
+
return ret;
}
@@ -247,7 +258,9 @@ adf_detach(device_t dev)
adf_dev_shutdown(accel_dev);
+ pci_disable_busmaster(dev);
adf_cleanup_accel(accel_dev);
+ mutex_destroy(&accel_dev->lock);
return 0;
}