qcacmn: Add history for register write failure
Maintain a history of the register writes which have failed. The failure of register write is determined by reading back the register after writing a value to that register. If the read value does not match the value which was written then it is termed as a failed register write. Change-Id: Ic3423c2cbd74bf498c0d3dd8ee7ce4231054541a CRs-Fixed: 2624475
This commit is contained in:
@@ -47,6 +47,39 @@ void hal_qca6750_attach(struct hal_soc *hal);
|
||||
bool is_hal_verbose_debug_enabled;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_HAL_REG_WR_HISTORY
|
||||
struct hal_reg_write_fail_history hal_reg_wr_hist;
|
||||
|
||||
void hal_reg_wr_fail_history_add(struct hal_soc *hal_soc,
|
||||
uint32_t offset,
|
||||
uint32_t wr_val, uint32_t rd_val)
|
||||
{
|
||||
struct hal_reg_write_fail_entry *record;
|
||||
int idx;
|
||||
|
||||
idx = hal_history_get_next_index(&hal_soc->reg_wr_fail_hist->index,
|
||||
HAL_REG_WRITE_HIST_SIZE);
|
||||
|
||||
record = &hal_soc->reg_wr_fail_hist->record[idx];
|
||||
|
||||
record->timestamp = qdf_get_log_timestamp();
|
||||
record->reg_offset = offset;
|
||||
record->write_val = wr_val;
|
||||
record->read_val = rd_val;
|
||||
}
|
||||
|
||||
static void hal_reg_write_fail_history_init(struct hal_soc *hal)
|
||||
{
|
||||
hal->reg_wr_fail_hist = &hal_reg_wr_hist;
|
||||
|
||||
qdf_atomic_set(&hal->reg_wr_fail_hist->index, -1);
|
||||
}
|
||||
#else
|
||||
static void hal_reg_write_fail_history_init(struct hal_soc *hal)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hal_get_srng_ring_id() - get the ring id of a descriped ring
|
||||
* @hal: hal_soc data structure
|
||||
@@ -370,6 +403,7 @@ void *hal_attach(struct hif_opaque_softc *hif_handle, qdf_device_t qdf_dev)
|
||||
hal->target_type = hal_get_target_type(hal_soc_to_hal_soc_handle(hal));
|
||||
|
||||
hal_target_based_configure(hal);
|
||||
hal_reg_write_fail_history_init(hal);
|
||||
/**
|
||||
* Indicate Initialization of srngs to avoid force wake
|
||||
* as umac power collapse is not enabled yet
|
||||
|
Reference in New Issue
Block a user