mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 02:34:01 +08:00
crypto: qat - split transport CSR access logic
Abstract access to transport CSRs and move generation specific code into adf_gen2_hw_data.c in preparation for the introduction of the qat_4xxx driver. Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Fiona Trahe <fiona.trahe@intel.com> Reviewed-by: Wojciech Ziemba <wojciech.ziemba@intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
c4e8428673
commit
f9c697c4bf
@ -217,6 +217,7 @@ void adf_init_hw_data_c3xxx(struct adf_hw_device_data *hw_data)
|
||||
hw_data->enable_vf2pf_comms = adf_pf_enable_vf2pf_comms;
|
||||
hw_data->reset_device = adf_reset_flr;
|
||||
hw_data->min_iov_compat_ver = ADF_PFVF_COMPATIBILITY_VERSION;
|
||||
adf_gen2_init_hw_csr_ops(&hw_data->csr_ops);
|
||||
}
|
||||
|
||||
void adf_clean_hw_data_c3xxx(struct adf_hw_device_data *hw_data)
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <adf_accel_devices.h>
|
||||
#include <adf_pf2vf_msg.h>
|
||||
#include <adf_common_drv.h>
|
||||
#include <adf_gen2_hw_data.h>
|
||||
#include "adf_c3xxxvf_hw_data.h"
|
||||
|
||||
static struct adf_hw_device_class c3xxxiov_class = {
|
||||
@ -98,6 +99,7 @@ void adf_init_hw_data_c3xxxiov(struct adf_hw_device_data *hw_data)
|
||||
hw_data->min_iov_compat_ver = ADF_PFVF_COMPATIBILITY_VERSION;
|
||||
hw_data->dev_class->instances++;
|
||||
adf_devmgr_update_class_index(hw_data);
|
||||
adf_gen2_init_hw_csr_ops(&hw_data->csr_ops);
|
||||
}
|
||||
|
||||
void adf_clean_hw_data_c3xxxiov(struct adf_hw_device_data *hw_data)
|
||||
|
@ -227,6 +227,7 @@ void adf_init_hw_data_c62x(struct adf_hw_device_data *hw_data)
|
||||
hw_data->enable_vf2pf_comms = adf_pf_enable_vf2pf_comms;
|
||||
hw_data->reset_device = adf_reset_flr;
|
||||
hw_data->min_iov_compat_ver = ADF_PFVF_COMPATIBILITY_VERSION;
|
||||
adf_gen2_init_hw_csr_ops(&hw_data->csr_ops);
|
||||
}
|
||||
|
||||
void adf_clean_hw_data_c62x(struct adf_hw_device_data *hw_data)
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <adf_accel_devices.h>
|
||||
#include <adf_pf2vf_msg.h>
|
||||
#include <adf_common_drv.h>
|
||||
#include <adf_gen2_hw_data.h>
|
||||
#include "adf_c62xvf_hw_data.h"
|
||||
|
||||
static struct adf_hw_device_class c62xiov_class = {
|
||||
@ -98,6 +99,7 @@ void adf_init_hw_data_c62xiov(struct adf_hw_device_data *hw_data)
|
||||
hw_data->min_iov_compat_ver = ADF_PFVF_COMPATIBILITY_VERSION;
|
||||
hw_data->dev_class->instances++;
|
||||
adf_devmgr_update_class_index(hw_data);
|
||||
adf_gen2_init_hw_csr_ops(&hw_data->csr_ops);
|
||||
}
|
||||
|
||||
void adf_clean_hw_data_c62xiov(struct adf_hw_device_data *hw_data)
|
||||
|
@ -97,6 +97,31 @@ struct adf_hw_device_class {
|
||||
u32 instances;
|
||||
} __packed;
|
||||
|
||||
struct adf_hw_csr_ops {
|
||||
u32 (*read_csr_ring_head)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring);
|
||||
void (*write_csr_ring_head)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring, u32 value);
|
||||
u32 (*read_csr_ring_tail)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring);
|
||||
void (*write_csr_ring_tail)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring, u32 value);
|
||||
u32 (*read_csr_e_stat)(void __iomem *csr_base_addr, u32 bank);
|
||||
void (*write_csr_ring_config)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring, u32 value);
|
||||
void (*write_csr_ring_base)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring, dma_addr_t addr);
|
||||
void (*write_csr_int_flag)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 value);
|
||||
void (*write_csr_int_srcsel)(void __iomem *csr_base_addr, u32 bank);
|
||||
void (*write_csr_int_col_en)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 value);
|
||||
void (*write_csr_int_col_ctl)(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 value);
|
||||
void (*write_csr_int_flag_and_col)(void __iomem *csr_base_addr,
|
||||
u32 bank, u32 value);
|
||||
};
|
||||
|
||||
struct adf_cfg_device_data;
|
||||
struct adf_accel_dev;
|
||||
struct adf_etr_data;
|
||||
@ -130,6 +155,7 @@ struct adf_hw_device_data {
|
||||
void (*enable_ints)(struct adf_accel_dev *accel_dev);
|
||||
int (*enable_vf2pf_comms)(struct adf_accel_dev *accel_dev);
|
||||
void (*reset_device)(struct adf_accel_dev *accel_dev);
|
||||
struct adf_hw_csr_ops csr_ops;
|
||||
const char *fw_name;
|
||||
const char *fw_mmp_name;
|
||||
u32 fuses;
|
||||
@ -162,6 +188,7 @@ struct adf_hw_device_data {
|
||||
#define GET_NUM_RINGS_PER_BANK(accel_dev) \
|
||||
GET_HW_DATA(accel_dev)->num_rings_per_bank
|
||||
#define GET_MAX_ACCELENGINES(accel_dev) (GET_HW_DATA(accel_dev)->num_engines)
|
||||
#define GET_CSR_OPS(accel_dev) (&(accel_dev)->hw_device->csr_ops)
|
||||
#define accel_to_pci_dev(accel_ptr) accel_ptr->accel_pci_dev.pci_dev
|
||||
|
||||
struct adf_admin_comms;
|
||||
|
@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
|
||||
/* Copyright(c) 2020 Intel Corporation */
|
||||
#include "adf_gen2_hw_data.h"
|
||||
#include "adf_transport_access_macros.h"
|
||||
|
||||
void adf_gen2_cfg_iov_thds(struct adf_accel_dev *accel_dev, bool enable,
|
||||
int num_a_regs, int num_b_regs)
|
||||
@ -36,3 +37,87 @@ void adf_gen2_cfg_iov_thds(struct adf_accel_dev *accel_dev, bool enable,
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(adf_gen2_cfg_iov_thds);
|
||||
|
||||
static u32 read_csr_ring_head(void __iomem *csr_base_addr, u32 bank, u32 ring)
|
||||
{
|
||||
return READ_CSR_RING_HEAD(csr_base_addr, bank, ring);
|
||||
}
|
||||
|
||||
static void write_csr_ring_head(void __iomem *csr_base_addr, u32 bank, u32 ring,
|
||||
u32 value)
|
||||
{
|
||||
WRITE_CSR_RING_HEAD(csr_base_addr, bank, ring, value);
|
||||
}
|
||||
|
||||
static u32 read_csr_ring_tail(void __iomem *csr_base_addr, u32 bank, u32 ring)
|
||||
{
|
||||
return READ_CSR_RING_TAIL(csr_base_addr, bank, ring);
|
||||
}
|
||||
|
||||
static void write_csr_ring_tail(void __iomem *csr_base_addr, u32 bank, u32 ring,
|
||||
u32 value)
|
||||
{
|
||||
WRITE_CSR_RING_TAIL(csr_base_addr, bank, ring, value);
|
||||
}
|
||||
|
||||
static u32 read_csr_e_stat(void __iomem *csr_base_addr, u32 bank)
|
||||
{
|
||||
return READ_CSR_E_STAT(csr_base_addr, bank);
|
||||
}
|
||||
|
||||
static void write_csr_ring_config(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 ring, u32 value)
|
||||
{
|
||||
WRITE_CSR_RING_CONFIG(csr_base_addr, bank, ring, value);
|
||||
}
|
||||
|
||||
static void write_csr_ring_base(void __iomem *csr_base_addr, u32 bank, u32 ring,
|
||||
dma_addr_t addr)
|
||||
{
|
||||
WRITE_CSR_RING_BASE(csr_base_addr, bank, ring, addr);
|
||||
}
|
||||
|
||||
static void write_csr_int_flag(void __iomem *csr_base_addr, u32 bank, u32 value)
|
||||
{
|
||||
WRITE_CSR_INT_FLAG(csr_base_addr, bank, value);
|
||||
}
|
||||
|
||||
static void write_csr_int_srcsel(void __iomem *csr_base_addr, u32 bank)
|
||||
{
|
||||
WRITE_CSR_INT_SRCSEL(csr_base_addr, bank);
|
||||
}
|
||||
|
||||
static void write_csr_int_col_en(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 value)
|
||||
{
|
||||
WRITE_CSR_INT_COL_EN(csr_base_addr, bank, value);
|
||||
}
|
||||
|
||||
static void write_csr_int_col_ctl(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 value)
|
||||
{
|
||||
WRITE_CSR_INT_COL_CTL(csr_base_addr, bank, value);
|
||||
}
|
||||
|
||||
static void write_csr_int_flag_and_col(void __iomem *csr_base_addr, u32 bank,
|
||||
u32 value)
|
||||
{
|
||||
WRITE_CSR_INT_FLAG_AND_COL(csr_base_addr, bank, value);
|
||||
}
|
||||
|
||||
void adf_gen2_init_hw_csr_ops(struct adf_hw_csr_ops *csr_ops)
|
||||
{
|
||||
csr_ops->read_csr_ring_head = read_csr_ring_head;
|
||||
csr_ops->write_csr_ring_head = write_csr_ring_head;
|
||||
csr_ops->read_csr_ring_tail = read_csr_ring_tail;
|
||||
csr_ops->write_csr_ring_tail = write_csr_ring_tail;
|
||||
csr_ops->read_csr_e_stat = read_csr_e_stat;
|
||||
csr_ops->write_csr_ring_config = write_csr_ring_config;
|
||||
csr_ops->write_csr_ring_base = write_csr_ring_base;
|
||||
csr_ops->write_csr_int_flag = write_csr_int_flag;
|
||||
csr_ops->write_csr_int_srcsel = write_csr_int_srcsel;
|
||||
csr_ops->write_csr_int_col_en = write_csr_int_col_en;
|
||||
csr_ops->write_csr_int_col_ctl = write_csr_int_col_ctl;
|
||||
csr_ops->write_csr_int_flag_and_col = write_csr_int_flag_and_col;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(adf_gen2_init_hw_csr_ops);
|
||||
|
@ -26,5 +26,6 @@
|
||||
|
||||
void adf_gen2_cfg_iov_thds(struct adf_accel_dev *accel_dev, bool enable,
|
||||
int num_a_regs, int num_b_regs);
|
||||
void adf_gen2_init_hw_csr_ops(struct adf_hw_csr_ops *csr_ops);
|
||||
|
||||
#endif
|
||||
|
@ -50,8 +50,10 @@ static void adf_disable_msix(struct adf_accel_pci *pci_dev_info)
|
||||
static irqreturn_t adf_msix_isr_bundle(int irq, void *bank_ptr)
|
||||
{
|
||||
struct adf_etr_bank_data *bank = bank_ptr;
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
|
||||
WRITE_CSR_INT_FLAG_AND_COL(bank->csr_addr, bank->bank_number, 0);
|
||||
csr_ops->write_csr_int_flag_and_col(bank->csr_addr, bank->bank_number,
|
||||
0);
|
||||
tasklet_hi_schedule(&bank->resp_handler);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -54,24 +54,32 @@ static void adf_unreserve_ring(struct adf_etr_bank_data *bank, u32 ring)
|
||||
|
||||
static void adf_enable_ring_irq(struct adf_etr_bank_data *bank, u32 ring)
|
||||
{
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
|
||||
spin_lock_bh(&bank->lock);
|
||||
bank->irq_mask |= (1 << ring);
|
||||
spin_unlock_bh(&bank->lock);
|
||||
WRITE_CSR_INT_COL_EN(bank->csr_addr, bank->bank_number, bank->irq_mask);
|
||||
WRITE_CSR_INT_COL_CTL(bank->csr_addr, bank->bank_number,
|
||||
bank->irq_coalesc_timer);
|
||||
csr_ops->write_csr_int_col_en(bank->csr_addr, bank->bank_number,
|
||||
bank->irq_mask);
|
||||
csr_ops->write_csr_int_col_ctl(bank->csr_addr, bank->bank_number,
|
||||
bank->irq_coalesc_timer);
|
||||
}
|
||||
|
||||
static void adf_disable_ring_irq(struct adf_etr_bank_data *bank, u32 ring)
|
||||
{
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
|
||||
spin_lock_bh(&bank->lock);
|
||||
bank->irq_mask &= ~(1 << ring);
|
||||
spin_unlock_bh(&bank->lock);
|
||||
WRITE_CSR_INT_COL_EN(bank->csr_addr, bank->bank_number, bank->irq_mask);
|
||||
csr_ops->write_csr_int_col_en(bank->csr_addr, bank->bank_number,
|
||||
bank->irq_mask);
|
||||
}
|
||||
|
||||
int adf_send_message(struct adf_etr_ring_data *ring, u32 *msg)
|
||||
{
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev);
|
||||
|
||||
if (atomic_add_return(1, ring->inflights) >
|
||||
ADF_MAX_INFLIGHTS(ring->ring_size, ring->msg_size)) {
|
||||
atomic_dec(ring->inflights);
|
||||
@ -84,14 +92,17 @@ int adf_send_message(struct adf_etr_ring_data *ring, u32 *msg)
|
||||
ring->tail = adf_modulo(ring->tail +
|
||||
ADF_MSG_SIZE_TO_BYTES(ring->msg_size),
|
||||
ADF_RING_SIZE_MODULO(ring->ring_size));
|
||||
WRITE_CSR_RING_TAIL(ring->bank->csr_addr, ring->bank->bank_number,
|
||||
ring->ring_number, ring->tail);
|
||||
csr_ops->write_csr_ring_tail(ring->bank->csr_addr,
|
||||
ring->bank->bank_number, ring->ring_number,
|
||||
ring->tail);
|
||||
spin_unlock_bh(&ring->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adf_handle_response(struct adf_etr_ring_data *ring)
|
||||
{
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev);
|
||||
u32 msg_counter = 0;
|
||||
u32 *msg = (u32 *)((uintptr_t)ring->base_addr + ring->head);
|
||||
|
||||
@ -105,30 +116,36 @@ static int adf_handle_response(struct adf_etr_ring_data *ring)
|
||||
msg_counter++;
|
||||
msg = (u32 *)((uintptr_t)ring->base_addr + ring->head);
|
||||
}
|
||||
if (msg_counter > 0)
|
||||
WRITE_CSR_RING_HEAD(ring->bank->csr_addr,
|
||||
ring->bank->bank_number,
|
||||
ring->ring_number, ring->head);
|
||||
if (msg_counter > 0) {
|
||||
csr_ops->write_csr_ring_head(ring->bank->csr_addr,
|
||||
ring->bank->bank_number,
|
||||
ring->ring_number, ring->head);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void adf_configure_tx_ring(struct adf_etr_ring_data *ring)
|
||||
{
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev);
|
||||
u32 ring_config = BUILD_RING_CONFIG(ring->ring_size);
|
||||
|
||||
WRITE_CSR_RING_CONFIG(ring->bank->csr_addr, ring->bank->bank_number,
|
||||
ring->ring_number, ring_config);
|
||||
csr_ops->write_csr_ring_config(ring->bank->csr_addr,
|
||||
ring->bank->bank_number,
|
||||
ring->ring_number, ring_config);
|
||||
|
||||
}
|
||||
|
||||
static void adf_configure_rx_ring(struct adf_etr_ring_data *ring)
|
||||
{
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(ring->bank->accel_dev);
|
||||
u32 ring_config =
|
||||
BUILD_RESP_RING_CONFIG(ring->ring_size,
|
||||
ADF_RING_NEAR_WATERMARK_512,
|
||||
ADF_RING_NEAR_WATERMARK_0);
|
||||
|
||||
WRITE_CSR_RING_CONFIG(ring->bank->csr_addr, ring->bank->bank_number,
|
||||
ring->ring_number, ring_config);
|
||||
csr_ops->write_csr_ring_config(ring->bank->csr_addr,
|
||||
ring->bank->bank_number,
|
||||
ring->ring_number, ring_config);
|
||||
}
|
||||
|
||||
static int adf_init_ring(struct adf_etr_ring_data *ring)
|
||||
@ -136,6 +153,7 @@ static int adf_init_ring(struct adf_etr_ring_data *ring)
|
||||
struct adf_etr_bank_data *bank = ring->bank;
|
||||
struct adf_accel_dev *accel_dev = bank->accel_dev;
|
||||
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(accel_dev);
|
||||
u64 ring_base;
|
||||
u32 ring_size_bytes =
|
||||
ADF_SIZE_TO_RING_SIZE_IN_BYTES(ring->ring_size);
|
||||
@ -163,8 +181,9 @@ static int adf_init_ring(struct adf_etr_ring_data *ring)
|
||||
adf_configure_rx_ring(ring);
|
||||
|
||||
ring_base = BUILD_RING_BASE_ADDR(ring->dma_addr, ring->ring_size);
|
||||
WRITE_CSR_RING_BASE(ring->bank->csr_addr, ring->bank->bank_number,
|
||||
ring->ring_number, ring_base);
|
||||
csr_ops->write_csr_ring_base(ring->bank->csr_addr,
|
||||
ring->bank->bank_number, ring->ring_number,
|
||||
ring_base);
|
||||
spin_lock_init(&ring->lock);
|
||||
return 0;
|
||||
}
|
||||
@ -269,15 +288,17 @@ err:
|
||||
void adf_remove_ring(struct adf_etr_ring_data *ring)
|
||||
{
|
||||
struct adf_etr_bank_data *bank = ring->bank;
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
|
||||
/* Disable interrupts for the given ring */
|
||||
adf_disable_ring_irq(bank, ring->ring_number);
|
||||
|
||||
/* Clear PCI config space */
|
||||
WRITE_CSR_RING_CONFIG(bank->csr_addr, bank->bank_number,
|
||||
ring->ring_number, 0);
|
||||
WRITE_CSR_RING_BASE(bank->csr_addr, bank->bank_number,
|
||||
ring->ring_number, 0);
|
||||
|
||||
csr_ops->write_csr_ring_config(bank->csr_addr, bank->bank_number,
|
||||
ring->ring_number, 0);
|
||||
csr_ops->write_csr_ring_base(bank->csr_addr, bank->bank_number,
|
||||
ring->ring_number, 0);
|
||||
adf_ring_debugfs_rm(ring);
|
||||
adf_unreserve_ring(bank, ring->ring_number);
|
||||
/* Disable HW arbitration for the given ring */
|
||||
@ -287,11 +308,14 @@ void adf_remove_ring(struct adf_etr_ring_data *ring)
|
||||
|
||||
static void adf_ring_response_handler(struct adf_etr_bank_data *bank)
|
||||
{
|
||||
u8 num_rings_per_bank = GET_NUM_RINGS_PER_BANK(bank->accel_dev);
|
||||
struct adf_accel_dev *accel_dev = bank->accel_dev;
|
||||
u8 num_rings_per_bank = GET_NUM_RINGS_PER_BANK(accel_dev);
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(accel_dev);
|
||||
unsigned long empty_rings;
|
||||
int i;
|
||||
|
||||
empty_rings = READ_CSR_E_STAT(bank->csr_addr, bank->bank_number);
|
||||
empty_rings = csr_ops->read_csr_e_stat(bank->csr_addr,
|
||||
bank->bank_number);
|
||||
empty_rings = ~empty_rings & bank->irq_mask;
|
||||
|
||||
for_each_set_bit(i, &empty_rings, num_rings_per_bank)
|
||||
@ -301,11 +325,13 @@ static void adf_ring_response_handler(struct adf_etr_bank_data *bank)
|
||||
void adf_response_handler(uintptr_t bank_addr)
|
||||
{
|
||||
struct adf_etr_bank_data *bank = (void *)bank_addr;
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
|
||||
/* Handle all the responses and reenable IRQs */
|
||||
adf_ring_response_handler(bank);
|
||||
WRITE_CSR_INT_FLAG_AND_COL(bank->csr_addr, bank->bank_number,
|
||||
bank->irq_mask);
|
||||
|
||||
csr_ops->write_csr_int_flag_and_col(bank->csr_addr, bank->bank_number,
|
||||
bank->irq_mask);
|
||||
}
|
||||
|
||||
static inline int adf_get_cfg_int(struct adf_accel_dev *accel_dev,
|
||||
@ -345,6 +371,7 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev,
|
||||
{
|
||||
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
||||
u8 num_rings_per_bank = hw_data->num_rings_per_bank;
|
||||
struct adf_hw_csr_ops *csr_ops = &hw_data->csr_ops;
|
||||
struct adf_etr_ring_data *ring;
|
||||
struct adf_etr_ring_data *tx_ring;
|
||||
u32 i, coalesc_enabled = 0;
|
||||
@ -375,8 +402,9 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev,
|
||||
bank->irq_coalesc_timer = ADF_COALESCING_MIN_TIME;
|
||||
|
||||
for (i = 0; i < num_rings_per_bank; i++) {
|
||||
WRITE_CSR_RING_CONFIG(csr_addr, bank_num, i, 0);
|
||||
WRITE_CSR_RING_BASE(csr_addr, bank_num, i, 0);
|
||||
csr_ops->write_csr_ring_config(csr_addr, bank_num, i, 0);
|
||||
csr_ops->write_csr_ring_base(csr_addr, bank_num, i, 0);
|
||||
|
||||
ring = &bank->rings[i];
|
||||
if (hw_data->tx_rings_mask & (1 << i)) {
|
||||
ring->inflights =
|
||||
@ -401,8 +429,10 @@ static int adf_init_bank(struct adf_accel_dev *accel_dev,
|
||||
goto err;
|
||||
}
|
||||
|
||||
WRITE_CSR_INT_FLAG(csr_addr, bank_num, ADF_BANK_INT_FLAG_CLEAR_MASK);
|
||||
WRITE_CSR_INT_SRCSEL(csr_addr, bank_num);
|
||||
csr_ops->write_csr_int_flag(csr_addr, bank_num,
|
||||
ADF_BANK_INT_FLAG_CLEAR_MASK);
|
||||
csr_ops->write_csr_int_srcsel(csr_addr, bank_num);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
ring_mask = hw_data->tx_rings_mask;
|
||||
|
@ -42,16 +42,17 @@ static int adf_ring_show(struct seq_file *sfile, void *v)
|
||||
{
|
||||
struct adf_etr_ring_data *ring = sfile->private;
|
||||
struct adf_etr_bank_data *bank = ring->bank;
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
void __iomem *csr = ring->bank->csr_addr;
|
||||
|
||||
if (v == SEQ_START_TOKEN) {
|
||||
int head, tail, empty;
|
||||
|
||||
head = READ_CSR_RING_HEAD(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
tail = READ_CSR_RING_TAIL(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
empty = READ_CSR_E_STAT(csr, bank->bank_number);
|
||||
head = csr_ops->read_csr_ring_head(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
tail = csr_ops->read_csr_ring_tail(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
empty = csr_ops->read_csr_e_stat(csr, bank->bank_number);
|
||||
|
||||
seq_puts(sfile, "------- Ring configuration -------\n");
|
||||
seq_printf(sfile, "ring name: %s\n",
|
||||
@ -144,6 +145,7 @@ static void *adf_bank_next(struct seq_file *sfile, void *v, loff_t *pos)
|
||||
static int adf_bank_show(struct seq_file *sfile, void *v)
|
||||
{
|
||||
struct adf_etr_bank_data *bank = sfile->private;
|
||||
struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(bank->accel_dev);
|
||||
|
||||
if (v == SEQ_START_TOKEN) {
|
||||
seq_printf(sfile, "------- Bank %d configuration -------\n",
|
||||
@ -157,11 +159,11 @@ static int adf_bank_show(struct seq_file *sfile, void *v)
|
||||
if (!(bank->ring_mask & 1 << ring_id))
|
||||
return 0;
|
||||
|
||||
head = READ_CSR_RING_HEAD(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
tail = READ_CSR_RING_TAIL(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
empty = READ_CSR_E_STAT(csr, bank->bank_number);
|
||||
head = csr_ops->read_csr_ring_head(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
tail = csr_ops->read_csr_ring_tail(csr, bank->bank_number,
|
||||
ring->ring_number);
|
||||
empty = csr_ops->read_csr_e_stat(csr, bank->bank_number);
|
||||
|
||||
seq_printf(sfile,
|
||||
"ring num %02d, head %04x, tail %04x, empty: %d\n",
|
||||
|
@ -156,6 +156,7 @@ static irqreturn_t adf_isr(int irq, void *privdata)
|
||||
{
|
||||
struct adf_accel_dev *accel_dev = privdata;
|
||||
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
||||
struct adf_hw_csr_ops *csr_ops = &hw_data->csr_ops;
|
||||
struct adf_bar *pmisc =
|
||||
&GET_BARS(accel_dev)[hw_data->get_misc_bar_id(hw_data)];
|
||||
void __iomem *pmisc_bar_addr = pmisc->virt_addr;
|
||||
@ -180,8 +181,8 @@ static irqreturn_t adf_isr(int irq, void *privdata)
|
||||
struct adf_etr_bank_data *bank = &etr_data->banks[0];
|
||||
|
||||
/* Disable Flag and Coalesce Ring Interrupts */
|
||||
WRITE_CSR_INT_FLAG_AND_COL(bank->csr_addr, bank->bank_number,
|
||||
0);
|
||||
csr_ops->write_csr_int_flag_and_col(bank->csr_addr,
|
||||
bank->bank_number, 0);
|
||||
tasklet_hi_schedule(&bank->resp_handler);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -226,6 +226,7 @@ void adf_init_hw_data_dh895xcc(struct adf_hw_device_data *hw_data)
|
||||
hw_data->enable_vf2pf_comms = adf_pf_enable_vf2pf_comms;
|
||||
hw_data->reset_device = adf_reset_sbr;
|
||||
hw_data->min_iov_compat_ver = ADF_PFVF_COMPATIBILITY_VERSION;
|
||||
adf_gen2_init_hw_csr_ops(&hw_data->csr_ops);
|
||||
}
|
||||
|
||||
void adf_clean_hw_data_dh895xcc(struct adf_hw_device_data *hw_data)
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <adf_accel_devices.h>
|
||||
#include <adf_pf2vf_msg.h>
|
||||
#include <adf_common_drv.h>
|
||||
#include <adf_gen2_hw_data.h>
|
||||
#include "adf_dh895xccvf_hw_data.h"
|
||||
|
||||
static struct adf_hw_device_class dh895xcciov_class = {
|
||||
@ -98,6 +99,7 @@ void adf_init_hw_data_dh895xcciov(struct adf_hw_device_data *hw_data)
|
||||
hw_data->min_iov_compat_ver = ADF_PFVF_COMPATIBILITY_VERSION;
|
||||
hw_data->dev_class->instances++;
|
||||
adf_devmgr_update_class_index(hw_data);
|
||||
adf_gen2_init_hw_csr_ops(&hw_data->csr_ops);
|
||||
}
|
||||
|
||||
void adf_clean_hw_data_dh895xcciov(struct adf_hw_device_data *hw_data)
|
||||
|
Loading…
Reference in New Issue
Block a user