/* Set DRV_ACTIVE bit to power up the device */
ADF_CSR_WR(addr, ADF_GEN4_PM_INTERRUPT, ADF_GEN4_PM_DRV_ACTIVE);
/* Poll status register to make sure the device is powered up */
ret = read_poll_timeout(ADF_CSR_RD, status,
status & ADF_GEN4_PM_INIT_STATE,
ADF_GEN4_PM_POLL_DELAY_US,
ADF_GEN4_PM_POLL_TIMEOUT_US, true, addr,
ADF_GEN4_PM_STATUS); if (ret)
dev_err(&GET_DEV(accel_dev), "Failed to power up the device\n");
/* * The vector routing table is used to select the MSI-X entry to use for each * interrupt source. * The first ADF_GEN4_ETR_MAX_BANKS entries correspond to ring interrupts. * The final entry corresponds to VF2PF or error interrupts. * This vector table could be used to configure one MSI-X entry to be shared * between multiple interrupt sources. * * The default routing is set to have a one to one correspondence between the * interrupt source and the MSI-X entry used.
*/ void adf_gen4_set_msix_default_rttable(struct adf_accel_dev *accel_dev)
{ void __iomem *csr; int i;
csr = (&GET_BARS(accel_dev)[ADF_GEN4_PMISC_BAR])->virt_addr; for (i = 0; i <= ADF_GEN4_ETR_MAX_BANKS; i++)
ADF_CSR_WR(csr, ADF_GEN4_MSIX_RTTABLE_OFFSET(i), i);
}
EXPORT_SYMBOL_GPL(adf_gen4_set_msix_default_rttable);
int adf_pfvf_comms_disabled(struct adf_accel_dev *accel_dev)
{ return 0;
}
EXPORT_SYMBOL_GPL(adf_pfvf_comms_disabled);
/* Write rpresetctl register BIT(0) as 1 * Since rpresetctl registers have no RW fields, no need to preserve * values for other bits. Just write directly.
*/
ADF_CSR_WR(csr, ADF_WQM_CSR_RPRESETCTL(bank_number),
ADF_WQM_CSR_RPRESETCTL_RESET);
/* Read rpresetsts register and wait for rp reset to complete */
ret = read_poll_timeout(ADF_CSR_RD, status,
status & ADF_WQM_CSR_RPRESETSTS_STATUS,
ADF_RPRESET_POLL_DELAY_US,
ADF_RPRESET_POLL_TIMEOUT_US, true,
csr, ADF_WQM_CSR_RPRESETSTS(bank_number)); if (!ret) { /* When rp reset is done, clear rpresetsts */
ADF_CSR_WR(csr, ADF_WQM_CSR_RPRESETSTS(bank_number),
ADF_WQM_CSR_RPRESETSTS_STATUS);
}
return ret;
}
int adf_gen4_ring_pair_reset(struct adf_accel_dev *accel_dev, u32 bank_number)
{ struct adf_hw_device_data *hw_data = accel_dev->hw_device; void __iomem *csr = adf_get_etr_base(accel_dev); int ret;
if (bank_number >= hw_data->num_banks) return -EINVAL;
dev_dbg(&GET_DEV(accel_dev), "ring pair reset for bank:%d\n", bank_number);
ret = reset_ring_pair(csr, bank_number); if (ret)
dev_err(&GET_DEV(accel_dev), "ring pair reset failed (timeout)\n"); else
dev_dbg(&GET_DEV(accel_dev), "ring pair reset successful\n");
if (!hw_data->get_rp_group || !hw_data->uof_get_ae_mask ||
!hw_data->uof_get_obj_type || !hw_data->uof_get_num_objs) return 0;
/* If dcc, all rings handle compression requests */ if (adf_get_service_enabled(accel_dev) == SVC_DCC) { for (i = 0; i < RP_GROUP_COUNT; i++)
rps[i] = COMP; goto set_mask;
}
/* * adf_gen4_bank_quiesce_coal_timer() - quiesce bank coalesced interrupt timer * @accel_dev: Pointer to the device structure * @bank_idx: Offset to the bank within this device * @timeout_ms: Timeout in milliseconds for the operation * * This function tries to quiesce the coalesced interrupt timer of a bank if * it has been enabled and triggered. * * Returns 0 on success, error code otherwise *
*/ int adf_gen4_bank_quiesce_coal_timer(struct adf_accel_dev *accel_dev,
u32 bank_idx, int timeout_ms)
{ struct adf_hw_device_data *hw_data = GET_HW_DATA(accel_dev); struct adf_hw_csr_ops *csr_ops = GET_CSR_OPS(accel_dev); void __iomem *csr_misc = adf_get_pmisc_base(accel_dev); void __iomem *csr_etr = adf_get_etr_base(accel_dev);
u32 int_col_ctl, int_col_mask, int_col_en;
u32 e_stat, intsrc;
u64 wait_us; int ret;
for (i = 0; i < SVC_BASE_COUNT; i++)
device_data->svc_ae_mask[i] = ae_cnt - 1;
/* * The decompression service is not supported on QAT GEN4 devices. * Therefore, set svc_ae_mask to 0.
*/
device_data->svc_ae_mask[SVC_DECOMP] = 0;
}
EXPORT_SYMBOL_GPL(adf_gen4_init_num_svc_aes);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.