mem_region = mt7996_coredump_get_mem_layout(dev, &num); if (!mem_region) return 0;
for (i = 0; i < num; i++) {
size += mem_region->len;
mem_region++;
}
/* reserve space for the headers */
size += num * sizeof(struct mt7996_mem_hdr); /* make sure it is aligned 4 bytes for debug message print out */
size = ALIGN(size, 4);
/* normal mode: driver can manually trigger assert for detail info */ if (!count)
strscpy(dump->fw_state, "normal", sizeof(dump->fw_state)); else
strscpy(dump->fw_state, "exception", sizeof(dump->fw_state));
/* 0: WM PC log output */
mt76_wr(dev, MT_CONN_DBG_CTL_OUT_SEL, 0); /* choose 33th PC log buffer to read current PC index */
mt76_wr(dev, MT_CONN_DBG_CTL_PC_LOG_SEL, 0x3f);
/* read current PC */
dump->pc_stack[0] = mt76_rr(dev, MT_CONN_DBG_CTL_PC_LOG);
/* stop call stack record */ if (!exception) {
mt76_clear(dev, MT_MCU_WM_EXCP_PC_CTRL, BIT(0));
mt76_clear(dev, MT_MCU_WM_EXCP_LR_CTRL, BIT(0));
}
oldest = (u32)mt76_get_field(dev, MT_MCU_WM_EXCP_PC_CTRL,
GENMASK(20, 16)) + 2; for (i = 0; i < 16; i++) {
idx = ((oldest + 2 * i + 1) % 32);
dump->pc_stack[i + 1] =
mt76_rr(dev, MT_MCU_WM_EXCP_PC_LOG + idx * 4);
}
oldest = (u32)mt76_get_field(dev, MT_MCU_WM_EXCP_LR_CTRL,
GENMASK(20, 16)) + 2; for (i = 0; i < 16; i++) {
idx = ((oldest + 2 * i + 1) % 32);
dump->lr_stack[i] =
mt76_rr(dev, MT_MCU_WM_EXCP_LR_LOG + idx * 4);
}
/* start call stack record */ if (!exception) {
mt76_set(dev, MT_MCU_WM_EXCP_PC_CTRL, BIT(0));
mt76_set(dev, MT_MCU_WM_EXCP_LR_CTRL, BIT(0));
}
}
int mt7996_coredump_register(struct mt7996_dev *dev)
{ struct mt7996_crash_data *crash_data;
crash_data = vzalloc(sizeof(*dev->coredump.crash_data)); if (!crash_data) return -ENOMEM;
dev->coredump.crash_data = crash_data;
if (coredump_memdump) {
crash_data->memdump_buf_len = mt7996_coredump_get_mem_size(dev); if (!crash_data->memdump_buf_len) /* no memory content */ return 0;
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.