iwlwifi: dbg_ini: add registers addresses in fifo dump
Add to the fifo dump the registers addresses. Signed-off-by: Shahar S Matityahu <shahar.s.matityahu@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
186e6c871b
commit
60eeaf572f
@ -1224,10 +1224,11 @@ static int iwl_dump_ini_txf_iter(struct iwl_fw_runtime *fwrt,
|
|||||||
{
|
{
|
||||||
struct iwl_fw_ini_fifo_error_dump_range *range = range_ptr;
|
struct iwl_fw_ini_fifo_error_dump_range *range = range_ptr;
|
||||||
struct iwl_ini_txf_iter_data *iter;
|
struct iwl_ini_txf_iter_data *iter;
|
||||||
|
struct iwl_fw_ini_error_dump_register *reg_dump = (void *)range->data;
|
||||||
u32 offs = le32_to_cpu(reg->offset), addr;
|
u32 offs = le32_to_cpu(reg->offset), addr;
|
||||||
u32 registers_size =
|
u32 registers_size =
|
||||||
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(__le32);
|
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(*reg_dump);
|
||||||
__le32 *val = range->data;
|
__le32 *data;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1245,11 +1246,18 @@ static int iwl_dump_ini_txf_iter(struct iwl_fw_runtime *fwrt,
|
|||||||
|
|
||||||
iwl_write_prph_no_grab(fwrt->trans, TXF_LARC_NUM + offs, iter->fifo);
|
iwl_write_prph_no_grab(fwrt->trans, TXF_LARC_NUM + offs, iter->fifo);
|
||||||
|
|
||||||
/* read txf registers */
|
/*
|
||||||
|
* read txf registers. for each register, write to the dump the
|
||||||
|
* register address and its value
|
||||||
|
*/
|
||||||
for (i = 0; i < le32_to_cpu(reg->fifos.num_of_registers); i++) {
|
for (i = 0; i < le32_to_cpu(reg->fifos.num_of_registers); i++) {
|
||||||
addr = le32_to_cpu(reg->start_addr[i]) + offs;
|
addr = le32_to_cpu(reg->start_addr[i]) + offs;
|
||||||
|
|
||||||
*val++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr));
|
reg_dump->addr = cpu_to_le32(addr);
|
||||||
|
reg_dump->data = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans,
|
||||||
|
addr));
|
||||||
|
|
||||||
|
reg_dump++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg->fifos.header_only) {
|
if (reg->fifos.header_only) {
|
||||||
@ -1266,8 +1274,9 @@ static int iwl_dump_ini_txf_iter(struct iwl_fw_runtime *fwrt,
|
|||||||
|
|
||||||
/* Read FIFO */
|
/* Read FIFO */
|
||||||
addr = TXF_READ_MODIFY_DATA + offs;
|
addr = TXF_READ_MODIFY_DATA + offs;
|
||||||
for (i = 0; i < iter->fifo_size; i += sizeof(__le32))
|
data = (void *)reg_dump;
|
||||||
*val++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr));
|
for (i = 0; i < iter->fifo_size; i += sizeof(*data))
|
||||||
|
*data++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
iwl_trans_release_nic_access(fwrt->trans, &flags);
|
iwl_trans_release_nic_access(fwrt->trans, &flags);
|
||||||
@ -1323,10 +1332,11 @@ static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt,
|
|||||||
{
|
{
|
||||||
struct iwl_fw_ini_fifo_error_dump_range *range = range_ptr;
|
struct iwl_fw_ini_fifo_error_dump_range *range = range_ptr;
|
||||||
struct iwl_ini_rxf_data rxf_data;
|
struct iwl_ini_rxf_data rxf_data;
|
||||||
|
struct iwl_fw_ini_error_dump_register *reg_dump = (void *)range->data;
|
||||||
u32 offs = le32_to_cpu(reg->offset), addr;
|
u32 offs = le32_to_cpu(reg->offset), addr;
|
||||||
u32 registers_size =
|
u32 registers_size =
|
||||||
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(__le32);
|
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(*reg_dump);
|
||||||
__le32 *val = range->data;
|
__le32 *data;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1343,11 +1353,18 @@ static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt,
|
|||||||
range->num_of_registers = reg->fifos.num_of_registers;
|
range->num_of_registers = reg->fifos.num_of_registers;
|
||||||
range->range_data_size = cpu_to_le32(rxf_data.size + registers_size);
|
range->range_data_size = cpu_to_le32(rxf_data.size + registers_size);
|
||||||
|
|
||||||
/* read rxf registers */
|
/*
|
||||||
|
* read rxf registers. for each register, write to the dump the
|
||||||
|
* register address and its value
|
||||||
|
*/
|
||||||
for (i = 0; i < le32_to_cpu(reg->fifos.num_of_registers); i++) {
|
for (i = 0; i < le32_to_cpu(reg->fifos.num_of_registers); i++) {
|
||||||
addr = le32_to_cpu(reg->start_addr[i]) + offs;
|
addr = le32_to_cpu(reg->start_addr[i]) + offs;
|
||||||
|
|
||||||
*val++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr));
|
reg_dump->addr = cpu_to_le32(addr);
|
||||||
|
reg_dump->data = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans,
|
||||||
|
addr));
|
||||||
|
|
||||||
|
reg_dump++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg->fifos.header_only) {
|
if (reg->fifos.header_only) {
|
||||||
@ -1365,8 +1382,9 @@ static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt,
|
|||||||
|
|
||||||
/* Read FIFO */
|
/* Read FIFO */
|
||||||
addr = RXF_FIFO_RD_FENCE_INC + offs;
|
addr = RXF_FIFO_RD_FENCE_INC + offs;
|
||||||
for (i = 0; i < rxf_data.size; i += sizeof(__le32))
|
data = (void *)reg_dump;
|
||||||
*val++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr));
|
for (i = 0; i < rxf_data.size; i += sizeof(*data))
|
||||||
|
*data++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
iwl_trans_release_nic_access(fwrt->trans, &flags);
|
iwl_trans_release_nic_access(fwrt->trans, &flags);
|
||||||
@ -1525,7 +1543,7 @@ static u32 iwl_dump_ini_txf_get_size(struct iwl_fw_runtime *fwrt,
|
|||||||
void *fifo_iter = fwrt->dump.fifo_iter;
|
void *fifo_iter = fwrt->dump.fifo_iter;
|
||||||
u32 size = 0;
|
u32 size = 0;
|
||||||
u32 fifo_hdr = sizeof(struct iwl_fw_ini_fifo_error_dump_range) +
|
u32 fifo_hdr = sizeof(struct iwl_fw_ini_fifo_error_dump_range) +
|
||||||
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(__le32);
|
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(__le32) * 2;
|
||||||
|
|
||||||
fwrt->dump.fifo_iter = &iter;
|
fwrt->dump.fifo_iter = &iter;
|
||||||
while (iwl_ini_txf_iter(fwrt, reg)) {
|
while (iwl_ini_txf_iter(fwrt, reg)) {
|
||||||
@ -1548,7 +1566,7 @@ static u32 iwl_dump_ini_rxf_get_size(struct iwl_fw_runtime *fwrt,
|
|||||||
struct iwl_ini_rxf_data rx_data;
|
struct iwl_ini_rxf_data rx_data;
|
||||||
u32 size = sizeof(struct iwl_fw_ini_fifo_error_dump) +
|
u32 size = sizeof(struct iwl_fw_ini_fifo_error_dump) +
|
||||||
sizeof(struct iwl_fw_ini_fifo_error_dump_range) +
|
sizeof(struct iwl_fw_ini_fifo_error_dump_range) +
|
||||||
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(__le32);
|
le32_to_cpu(reg->fifos.num_of_registers) * sizeof(__le32) * 2;
|
||||||
|
|
||||||
if (reg->fifos.header_only)
|
if (reg->fifos.header_only)
|
||||||
return size;
|
return size;
|
||||||
|
@ -323,13 +323,24 @@ struct iwl_fw_ini_error_dump {
|
|||||||
/* This bit is used to differentiate between lmac and umac rxf */
|
/* This bit is used to differentiate between lmac and umac rxf */
|
||||||
#define IWL_RXF_UMAC_BIT BIT(31)
|
#define IWL_RXF_UMAC_BIT BIT(31)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct iwl_fw_ini_error_dump_register - ini register dump
|
||||||
|
* @addr: address of the register
|
||||||
|
* @data: data of the register
|
||||||
|
*/
|
||||||
|
struct iwl_fw_ini_error_dump_register {
|
||||||
|
__le32 addr;
|
||||||
|
__le32 data;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_fw_ini_fifo_error_dump_range - ini fifo range dump
|
* struct iwl_fw_ini_fifo_error_dump_range - ini fifo range dump
|
||||||
* @fifo_num: the fifo num. In case of rxf and umac rxf, set BIT(31) to
|
* @fifo_num: the fifo num. In case of rxf and umac rxf, set BIT(31) to
|
||||||
* distinguish between lmac and umac
|
* distinguish between lmac and umac
|
||||||
* @num_of_registers: num of registers to dump, dword size each
|
* @num_of_registers: num of registers to dump, dword size each
|
||||||
* @range_data_size: the size of the registers and fifo data
|
* @range_data_size: the size of the data
|
||||||
* @data: fifo data
|
* @data: consist of
|
||||||
|
* num_of_registers * (register address + register value) + fifo data
|
||||||
*/
|
*/
|
||||||
struct iwl_fw_ini_fifo_error_dump_range {
|
struct iwl_fw_ini_fifo_error_dump_range {
|
||||||
__le32 fifo_num;
|
__le32 fifo_num;
|
||||||
|
Loading…
Reference in New Issue
Block a user