Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
50712ea
iommu: Add new iommu op to create domains owned by userspace
yiliu1765 Sep 28, 2023
5427d2f
iommufd: Use the domain_alloc_user() op for domain allocation
yiliu1765 Sep 28, 2023
e9aa5c6
iommufd: Flow user flags for domain allocation to domain_alloc_user()
yiliu1765 Sep 28, 2023
7385260
iommufd: Support allocating nested parent domain
yiliu1765 Sep 28, 2023
98404ab
iommufd/selftest: Iterate idev_ids in mock_domain's alloc_hwpt test
nicolinc Sep 19, 2023
4b614d6
iommufd/selftest: Add domain_alloc_user() support in iommu mock
yiliu1765 Sep 28, 2023
bf748fd
iommu/vt-d: Add domain_alloc_user op
yiliu1765 Sep 28, 2023
c39514d
iommufd/selftest: Rework TEST_LENGTH to test min_size explicitly
nicolinc Oct 15, 2023
4244d5b
vfio/iova_bitmap: Export more API symbols
jpemartins Oct 24, 2023
9d83b6d
vfio: Move iova_bitmap into iommufd
jpemartins Oct 24, 2023
897f2d6
iommufd/iova_bitmap: Move symbols to IOMMUFD namespace
jpemartins Oct 24, 2023
9829a04
iommu: Add iommu_domain ops for dirty tracking
jpemartins Oct 24, 2023
d85977d
iommufd: Correct IOMMU_HWPT_ALLOC_NEST_PARENT description
nicolinc Oct 17, 2023
4e56d1c
iommufd: Add a flag to enforce dirty tracking on attach
jpemartins Oct 24, 2023
d051222
iommufd: Add IOMMU_HWPT_SET_DIRTY_TRACKING
jpemartins Oct 24, 2023
efd9d82
iommufd: Add IOMMU_HWPT_GET_DIRTY_BITMAP
jpemartins Oct 24, 2023
3afe6e3
iommufd: Add capabilities to IOMMU_GET_HW_INFO
jpemartins Oct 24, 2023
6dd312f
iommufd: Add a flag to skip clearing of IOPTE dirty
jpemartins Oct 24, 2023
29c2653
iommu/amd: Add domain_alloc_user based domain allocation
jpemartins Oct 24, 2023
7d288a9
iommu/amd: Access/Dirty bit support in IOPTEs
jpemartins Oct 24, 2023
7dbf2e4
iommu/vt-d: Access/Dirty bit support for SS domains
jpemartins Oct 24, 2023
6987874
iommufd/selftest: Expand mock_domain with dev_flags
jpemartins Oct 24, 2023
3a83f5f
iommufd/selftest: Test IOMMU_HWPT_ALLOC_DIRTY_TRACKING
jpemartins Oct 24, 2023
c09774f
iommufd/selftest: Test IOMMU_HWPT_SET_DIRTY_TRACKING
jpemartins Oct 24, 2023
fcd305e
iommufd/selftest: Test IOMMU_HWPT_GET_DIRTY_BITMAP
jpemartins Oct 24, 2023
82546ed
iommufd/selftest: Test out_capabilities in IOMMU_GET_HW_INFO
jpemartins Oct 24, 2023
135c1c7
iommufd/selftest: Test IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR flag
jpemartins Oct 24, 2023
7d5d627
iommu/vt-d: Enhance capability check for nested parent domain allocation
yiliu1765 Oct 24, 2023
99aacd6
iommufd/selftest: Fix page-size check in iommufd_test_dirty()
jpemartins Oct 30, 2023
f487661
iommufd/selftest: Fix _test_mock_dirty_bitmaps()
rmurphy-arm Nov 16, 2023
b33c9a8
iommu/vt-d: Set variable intel_dirty_ops to static
KunWuChan Nov 22, 2023
364bc80
crypto: qat - adf_get_etr_base() helper
gcabiddu Mar 6, 2024
1fa10da
crypto: qat - relocate and rename 4xxx PF2VM definitions
XinIZeng Mar 6, 2024
1a133a2
crypto: qat - move PFVF compat checker to a function
XinIZeng Mar 6, 2024
6377343
crypto: qat - relocate CSR access code
gcabiddu Mar 6, 2024
78e737c
crypto: qat - rename get_sla_arr_of_type()
simingwa Mar 6, 2024
e89b1e9
crypto: qat - expand CSR operations for QAT GEN4 devices
simingwa Mar 6, 2024
70b92af
crypto: qat - add bank save and restore flows
simingwa Mar 6, 2024
5480810
crypto: qat - add interface for live migration
XinIZeng Mar 6, 2024
e51d642
crypto: qat - implement interface for live migration
XinIZeng Mar 6, 2024
3cfe45c
vfio/qat: Add vfio_pci driver for Intel QAT SR-IOV VF devices
XinIZeng Apr 26, 2024
0807eb9
crypto: qat - Avoid -Wflex-array-member-not-at-end warnings
GustavoARSilva Mar 25, 2024
59b95f7
crypto: qat - Fix spelling mistake "Invalide" -> "Invalid"
ColinIanKing Apr 2, 2024
44dba6b
crypto: qat - implement dh fallback for primes > 4K
dmuszyns Apr 11, 2024
719bc60
crypto: qat - improve error message in adf_get_arbiter_mapping()
aguerinIntel Apr 12, 2024
f70c1cc
crypto: qat - improve error logging to be consistent across features
aguerinIntel Apr 12, 2024
8cb10f1
crypto: qat - validate slices count returned by FW
pilotAlpal Apr 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -22742,6 +22742,14 @@ L: kvm@vger.kernel.org
S: Maintained
F: drivers/vfio/platform/

VFIO QAT PCI DRIVER
M: Xin Zeng <xin.zeng@intel.com>
M: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
L: kvm@vger.kernel.org
L: qat-linux@intel.com
S: Supported
F: drivers/vfio/pci/qat/

VGA_SWITCHEROO
R: Lukas Wunner <lukas@wunner.de>
S: Maintained
Expand Down
5 changes: 4 additions & 1 deletion drivers/crypto/intel/qat/qat_420xx/adf_420xx_hw_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
#include <adf_fw_config.h>
#include <adf_gen4_config.h>
#include <adf_gen4_dc.h>
#include <adf_gen4_hw_csr_data.h>
#include <adf_gen4_hw_data.h>
#include <adf_gen4_pfvf.h>
#include <adf_gen4_pm.h>
#include <adf_gen4_ras.h>
#include <adf_gen4_timer.h>
#include <adf_gen4_tl.h>
#include <adf_gen4_vf_mig.h>
#include "adf_420xx_hw_data.h"
#include "icp_qat_hw.h"

Expand Down Expand Up @@ -296,7 +298,7 @@ static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
{
if (adf_gen4_init_thd2arb_map(accel_dev))
dev_warn(&GET_DEV(accel_dev),
"Generate of the thread to arbiter map failed");
"Failed to generate thread to arbiter mapping");

return GET_HW_DATA(accel_dev)->thd_to_arb_map;
}
Expand Down Expand Up @@ -487,6 +489,7 @@ void adf_init_hw_data_420xx(struct adf_hw_device_data *hw_data, u32 dev_id)
adf_gen4_init_dc_ops(&hw_data->dc_ops);
adf_gen4_init_ras_ops(&hw_data->ras_ops);
adf_gen4_init_tl_data(&hw_data->tl_data);
adf_gen4_init_vf_mig_ops(&hw_data->vfmig_ops);
adf_init_rl_data(&hw_data->rl_data);
}

Expand Down
7 changes: 6 additions & 1 deletion drivers/crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
#include <adf_fw_config.h>
#include <adf_gen4_config.h>
#include <adf_gen4_dc.h>
#include <adf_gen4_hw_csr_data.h>
#include <adf_gen4_hw_data.h>
#include <adf_gen4_pfvf.h>
#include <adf_gen4_pm.h>
#include "adf_gen4_ras.h"
#include <adf_gen4_timer.h>
#include <adf_gen4_tl.h>
#include <adf_gen4_vf_mig.h>
#include "adf_4xxx_hw_data.h"
#include "icp_qat_hw.h"

Expand Down Expand Up @@ -208,7 +210,7 @@ static const u32 *adf_get_arbiter_mapping(struct adf_accel_dev *accel_dev)
{
if (adf_gen4_init_thd2arb_map(accel_dev))
dev_warn(&GET_DEV(accel_dev),
"Generate of the thread to arbiter map failed");
"Failed to generate thread to arbiter mapping");

return GET_HW_DATA(accel_dev)->thd_to_arb_map;
}
Expand Down Expand Up @@ -454,6 +456,8 @@ void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data, u32 dev_id)
hw_data->get_ring_to_svc_map = adf_gen4_get_ring_to_svc_map;
hw_data->disable_iov = adf_disable_sriov;
hw_data->ring_pair_reset = adf_gen4_ring_pair_reset;
hw_data->bank_state_save = adf_gen4_bank_state_save;
hw_data->bank_state_restore = adf_gen4_bank_state_restore;
hw_data->enable_pm = adf_gen4_enable_pm;
hw_data->handle_pm_interrupt = adf_gen4_handle_pm_interrupt;
hw_data->dev_config = adf_gen4_dev_config;
Expand All @@ -469,6 +473,7 @@ void adf_init_hw_data_4xxx(struct adf_hw_device_data *hw_data, u32 dev_id)
adf_gen4_init_dc_ops(&hw_data->dc_ops);
adf_gen4_init_ras_ops(&hw_data->ras_ops);
adf_gen4_init_tl_data(&hw_data->tl_data);
adf_gen4_init_vf_mig_ops(&hw_data->vfmig_ops);
adf_init_rl_data(&hw_data->rl_data);
}

Expand Down
1 change: 1 addition & 0 deletions drivers/crypto/intel/qat/qat_c3xxx/adf_c3xxx_hw_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <adf_common_drv.h>
#include <adf_gen2_config.h>
#include <adf_gen2_dc.h>
#include <adf_gen2_hw_csr_data.h>
#include <adf_gen2_hw_data.h>
#include <adf_gen2_pfvf.h>
#include "adf_c3xxx_hw_data.h"
Expand Down
1 change: 1 addition & 0 deletions drivers/crypto/intel/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <adf_common_drv.h>
#include <adf_gen2_config.h>
#include <adf_gen2_dc.h>
#include <adf_gen2_hw_csr_data.h>
#include <adf_gen2_hw_data.h>
#include <adf_gen2_pfvf.h>
#include <adf_pfvf_vf_msg.h>
Expand Down
1 change: 1 addition & 0 deletions drivers/crypto/intel/qat/qat_c62x/adf_c62x_hw_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <adf_common_drv.h>
#include <adf_gen2_config.h>
#include <adf_gen2_dc.h>
#include <adf_gen2_hw_csr_data.h>
#include <adf_gen2_hw_data.h>
#include <adf_gen2_pfvf.h>
#include "adf_c62x_hw_data.h"
Expand Down
1 change: 1 addition & 0 deletions drivers/crypto/intel/qat/qat_c62xvf/adf_c62xvf_hw_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <adf_common_drv.h>
#include <adf_gen2_config.h>
#include <adf_gen2_dc.h>
#include <adf_gen2_hw_csr_data.h>
#include <adf_gen2_hw_data.h>
#include <adf_gen2_pfvf.h>
#include <adf_pfvf_vf_msg.h>
Expand Down
6 changes: 5 additions & 1 deletion drivers/crypto/intel/qat/qat_common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,20 @@ intel_qat-objs := adf_cfg.o \
adf_hw_arbiter.o \
adf_sysfs.o \
adf_sysfs_ras_counters.o \
adf_gen2_hw_csr_data.o \
adf_gen2_hw_data.o \
adf_gen2_config.o \
adf_gen4_config.o \
adf_gen4_hw_csr_data.o \
adf_gen4_hw_data.o \
adf_gen4_vf_mig.o \
adf_gen4_pm.o \
adf_gen2_dc.o \
adf_gen4_dc.o \
adf_gen4_ras.o \
adf_gen4_timer.o \
adf_clock.o \
adf_mstate_mgr.o \
qat_crypto.o \
qat_compression.o \
qat_comp_algs.o \
Expand Down Expand Up @@ -52,6 +56,6 @@ intel_qat-$(CONFIG_DEBUG_FS) += adf_transport_debug.o \
intel_qat-$(CONFIG_PCI_IOV) += adf_sriov.o adf_vf_isr.o adf_pfvf_utils.o \
adf_pfvf_pf_msg.o adf_pfvf_pf_proto.o \
adf_pfvf_vf_msg.o adf_pfvf_vf_proto.o \
adf_gen2_pfvf.o adf_gen4_pfvf.o
adf_gen2_pfvf.o adf_gen4_pfvf.o qat_mig_dev.o

intel_qat-$(CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION) += adf_heartbeat_inject.o
88 changes: 88 additions & 0 deletions drivers/crypto/intel/qat/qat_common/adf_accel_devices.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <linux/pci.h>
#include <linux/ratelimit.h>
#include <linux/types.h>
#include <linux/qat/qat_mig_dev.h>
#include "adf_cfg_common.h"
#include "adf_rl.h"
#include "adf_telemetry.h"
Expand Down Expand Up @@ -140,6 +141,40 @@ struct admin_info {
u32 mailbox_offset;
};

struct ring_config {
u64 base;
u32 config;
u32 head;
u32 tail;
u32 reserved0;
};

struct bank_state {
u32 ringstat0;
u32 ringstat1;
u32 ringuostat;
u32 ringestat;
u32 ringnestat;
u32 ringnfstat;
u32 ringfstat;
u32 ringcstat0;
u32 ringcstat1;
u32 ringcstat2;
u32 ringcstat3;
u32 iaintflagen;
u32 iaintflagreg;
u32 iaintflagsrcsel0;
u32 iaintflagsrcsel1;
u32 iaintcolen;
u32 iaintcolctl;
u32 iaintflagandcolen;
u32 ringexpstat;
u32 ringexpintenable;
u32 ringsrvarben;
u32 reserved0;
struct ring_config rings[ADF_ETR_MAX_RINGS_PER_BANK];
};

struct adf_hw_csr_ops {
u64 (*build_csr_ring_base_addr)(dma_addr_t addr, u32 size);
u32 (*read_csr_ring_head)(void __iomem *csr_base_addr, u32 bank,
Expand All @@ -150,22 +185,49 @@ struct adf_hw_csr_ops {
u32 ring);
void (*write_csr_ring_tail)(void __iomem *csr_base_addr, u32 bank,
u32 ring, u32 value);
u32 (*read_csr_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_uo_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_e_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_ne_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_nf_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_f_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_c_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_exp_stat)(void __iomem *csr_base_addr, u32 bank);
u32 (*read_csr_exp_int_en)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_exp_int_en)(void __iomem *csr_base_addr, u32 bank,
u32 value);
u32 (*read_csr_ring_config)(void __iomem *csr_base_addr, u32 bank,
u32 ring);
void (*write_csr_ring_config)(void __iomem *csr_base_addr, u32 bank,
u32 ring, u32 value);
dma_addr_t (*read_csr_ring_base)(void __iomem *csr_base_addr, u32 bank,
u32 ring);
void (*write_csr_ring_base)(void __iomem *csr_base_addr, u32 bank,
u32 ring, dma_addr_t addr);
u32 (*read_csr_int_en)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_int_en)(void __iomem *csr_base_addr, u32 bank,
u32 value);
u32 (*read_csr_int_flag)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_int_flag)(void __iomem *csr_base_addr, u32 bank,
u32 value);
u32 (*read_csr_int_srcsel)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_int_srcsel)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_int_srcsel_w_val)(void __iomem *csr_base_addr,
u32 bank, u32 value);
u32 (*read_csr_int_col_en)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_int_col_en)(void __iomem *csr_base_addr, u32 bank,
u32 value);
u32 (*read_csr_int_col_ctl)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_int_col_ctl)(void __iomem *csr_base_addr, u32 bank,
u32 value);
u32 (*read_csr_int_flag_and_col)(void __iomem *csr_base_addr,
u32 bank);
void (*write_csr_int_flag_and_col)(void __iomem *csr_base_addr,
u32 bank, u32 value);
u32 (*read_csr_ring_srv_arb_en)(void __iomem *csr_base_addr, u32 bank);
void (*write_csr_ring_srv_arb_en)(void __iomem *csr_base_addr, u32 bank,
u32 value);
u32 (*get_int_col_ctl_enable_mask)(void);
};

struct adf_cfg_device_data;
Expand Down Expand Up @@ -197,6 +259,20 @@ struct adf_dc_ops {
void (*build_deflate_ctx)(void *ctx);
};

struct qat_migdev_ops {
int (*init)(struct qat_mig_dev *mdev);
void (*cleanup)(struct qat_mig_dev *mdev);
void (*reset)(struct qat_mig_dev *mdev);
int (*open)(struct qat_mig_dev *mdev);
void (*close)(struct qat_mig_dev *mdev);
int (*suspend)(struct qat_mig_dev *mdev);
int (*resume)(struct qat_mig_dev *mdev);
int (*save_state)(struct qat_mig_dev *mdev);
int (*save_setup)(struct qat_mig_dev *mdev);
int (*load_state)(struct qat_mig_dev *mdev);
int (*load_setup)(struct qat_mig_dev *mdev, int size);
};

struct adf_dev_err_mask {
u32 cppagentcmdpar_mask;
u32 parerr_ath_cph_mask;
Expand Down Expand Up @@ -244,6 +320,10 @@ struct adf_hw_device_data {
void (*enable_ints)(struct adf_accel_dev *accel_dev);
void (*set_ssm_wdtimer)(struct adf_accel_dev *accel_dev);
int (*ring_pair_reset)(struct adf_accel_dev *accel_dev, u32 bank_nr);
int (*bank_state_save)(struct adf_accel_dev *accel_dev, u32 bank_number,
struct bank_state *state);
int (*bank_state_restore)(struct adf_accel_dev *accel_dev,
u32 bank_number, struct bank_state *state);
void (*reset_device)(struct adf_accel_dev *accel_dev);
void (*set_msix_rttable)(struct adf_accel_dev *accel_dev);
const char *(*uof_get_name)(struct adf_accel_dev *accel_dev, u32 obj_num);
Expand All @@ -260,6 +340,7 @@ struct adf_hw_device_data {
struct adf_dev_err_mask dev_err_mask;
struct adf_rl_hw_data rl_data;
struct adf_tl_hw_data tl_data;
struct qat_migdev_ops vfmig_ops;
const char *fw_name;
const char *fw_mmp_name;
u32 fuses;
Expand Down Expand Up @@ -316,6 +397,7 @@ struct adf_hw_device_data {
#define GET_CSR_OPS(accel_dev) (&(accel_dev)->hw_device->csr_ops)
#define GET_PFVF_OPS(accel_dev) (&(accel_dev)->hw_device->pfvf_ops)
#define GET_DC_OPS(accel_dev) (&(accel_dev)->hw_device->dc_ops)
#define GET_VFMIG_OPS(accel_dev) (&(accel_dev)->hw_device->vfmig_ops)
#define GET_TL_DATA(accel_dev) GET_HW_DATA(accel_dev)->tl_data
#define accel_to_pci_dev(accel_ptr) accel_ptr->accel_pci_dev.pci_dev

Expand All @@ -330,11 +412,17 @@ struct adf_fw_loader_data {
struct adf_accel_vf_info {
struct adf_accel_dev *accel_dev;
struct mutex pf2vf_lock; /* protect CSR access for PF2VF messages */
struct mutex pfvf_mig_lock; /* protects PFVF state for migration */
struct ratelimit_state vf2pf_ratelimit;
u32 vf_nr;
bool init;
bool restarting;
u8 vf_compat_ver;
/*
* Private area used for device migration.
* Memory allocation and free is managed by migration driver.
*/
void *mig_priv;
};

struct adf_dc_data {
Expand Down
10 changes: 10 additions & 0 deletions drivers/crypto/intel/qat/qat_common/adf_common_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,16 @@ static inline void __iomem *adf_get_pmisc_base(struct adf_accel_dev *accel_dev)
return pmisc->virt_addr;
}

static inline void __iomem *adf_get_etr_base(struct adf_accel_dev *accel_dev)
{
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
struct adf_bar *etr;

etr = &GET_BARS(accel_dev)[hw_data->get_etr_bar_id(hw_data)];

return etr->virt_addr;
}

static inline void __iomem *adf_get_aram_base(struct adf_accel_dev *accel_dev)
{
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
Expand Down
Loading
Loading