mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 23:24:22 -04:00
Merge "cnss2: Add meta into as a segment to firmware RAM dump"
This commit is contained in:
commit
d21d525eb4
2 changed files with 41 additions and 3 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue