Merge "cnss2: Add meta into as a segment to firmware RAM dump"

This commit is contained in:
qctecmdr 2020-03-04 14:59:36 -08:00 • committed by Gerrit - the friendly Code Review server
commit d21d525eb4
2 changed files with 41 additions and 3 deletions

View file

@ -25,6 +25,8 @@
#define CNSS_RDDM_TIMEOUT_MS 20000
#define RECOVERY_TIMEOUT 60000
#define TIME_CLOCK_FREQ_HZ 19200000
#define CNSS_RAMDUMP_MAGIC 0x574C414E
#define CNSS_RAMDUMP_VERSION 0
#define CNSS_EVENT_SYNC BIT(0)
#define CNSS_EVENT_UNINTERRUPTIBLE BIT(1)
@ -173,6 +175,21 @@ enum cnss_fw_dump_type {
CNSS_FW_IMAGE,
CNSS_FW_RDDM,
CNSS_FW_REMOTE_HEAP,
CNSS_FW_DUMP_TYPE_MAX,
};
struct cnss_dump_entry {
u32 type;
u32 entry_start;
u32 entry_num;
};
struct cnss_dump_meta_info {
u32 magic;
u32 version;
u32 chipset;
u32 total_entries;
struct cnss_dump_entry entry[CNSS_FW_DUMP_TYPE_MAX];
};
enum cnss_driver_event_type {

View file

@ -1888,20 +1888,33 @@ static int cnss_qca6290_ramdump(struct cnss_pci_data *pci_priv)
struct cnss_dump_data *dump_data = &info_v2->dump_data;
struct cnss_dump_seg *dump_seg = info_v2->dump_data_vaddr;
struct ramdump_segment *ramdump_segs, *s;
struct cnss_dump_meta_info meta_info = {0};
int i, ret = 0;
if (!info_v2->dump_data_valid ||
dump_data->nentries == 0)
return 0;
ramdump_segs = kcalloc(dump_data->nentries,
ramdump_segs = kcalloc(dump_data->nentries + 1,
sizeof(*ramdump_segs),
GFP_KERNEL);
if (!ramdump_segs)
return -ENOMEM;
s = ramdump_segs;
s = ramdump_segs + 1;
for (i = 0; i < dump_data->nentries; i++) {
if (dump_seg->type >= CNSS_FW_DUMP_TYPE_MAX) {
cnss_pr_err("Unsupported dump type: %d",
dump_seg->type);
continue;
}
if (meta_info.entry[dump_seg->type].entry_start == 0) {
meta_info.entry[dump_seg->type].type = dump_seg->type;
meta_info.entry[dump_seg->type].entry_start = i + 1;
}
meta_info.entry[dump_seg->type].entry_num++;
s->address = dump_seg->address;
s->v_address = dump_seg->v_address;
s->size = dump_seg->size;
@ -1909,8 +1922,16 @@ static int cnss_qca6290_ramdump(struct cnss_pci_data *pci_priv)
dump_seg++;
}
meta_info.magic = CNSS_RAMDUMP_MAGIC;
meta_info.version = CNSS_RAMDUMP_VERSION;
meta_info.chipset = pci_priv->device_id;
meta_info.total_entries = CNSS_FW_DUMP_TYPE_MAX;
ramdump_segs->v_address = &meta_info;
ramdump_segs->size = sizeof(meta_info);
ret = do_elf_ramdump(info_v2->ramdump_dev, ramdump_segs,
dump_data->nentries);
dump_data->nentries + 1);
kfree(ramdump_segs);
cnss_pci_clear_dump_info(pci_priv);