diff options
Diffstat (limited to 'package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch')
-rw-r--r-- | package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch b/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch new file mode 100644 index 0000000000..587245d2ab --- /dev/null +++ b/package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch @@ -0,0 +1,78 @@ +--- a/cmd/pstore.c ++++ b/cmd/pstore.c +@@ -207,6 +207,58 @@ static int pstore_set(struct cmd_tbl *cm + } + + /** ++ * pstore_check() - Check for pstore records ++ * @cmdtp: Command data struct pointer ++ * @flag: Command flag ++ * @argc: Command-line argument count ++ * @argv: Array of command-line arguments ++ * ++ * Return: 0 if there are records in pstore, 1 otherwise ++ */ ++static int pstore_check(struct cmd_tbl *cmdtp, int flag, int argc, ++ char * const argv[]) ++{ ++ phys_addr_t ptr; ++ char *buffer; ++ u32 size; ++ int header_len = 0; ++ bool compressed; ++ ++ if (pstore_length == 0) { ++ printf("Please set PStore configuration\n"); ++ return CMD_RET_USAGE; ++ } ++ ++ if (buffer_size == 0) ++ pstore_init_buffer_size(); ++ ++ buffer = malloc_cache_aligned(buffer_size); ++ ++ ptr = pstore_addr; ++ phys_addr_t ptr_end = ptr + pstore_length - pstore_pmsg_size ++ - pstore_ftrace_size - pstore_console_size; ++ ++ while (ptr < ptr_end) { ++ size = pstore_get_buffer(PERSISTENT_RAM_SIG, ptr, ++ pstore_record_size, buffer); ++ ptr += pstore_record_size; ++ ++ if (size == 0) ++ continue; ++ ++ header_len = pstore_read_kmsg_hdr(buffer, &compressed); ++ if (header_len == 0) ++ continue; ++ ++ free(buffer); ++ return 0; ++ } ++ ++ free(buffer); ++ return 1; ++} ++ ++/** + * pstore_print_buffer() - Print buffer + * @type: buffer type + * @buffer: buffer to print +@@ -458,6 +510,7 @@ static int pstore_save(struct cmd_tbl *c + + static struct cmd_tbl cmd_pstore_sub[] = { + U_BOOT_CMD_MKENT(set, 8, 0, pstore_set, "", ""), ++ U_BOOT_CMD_MKENT(check, 1, 0, pstore_check, "", ""), + U_BOOT_CMD_MKENT(display, 3, 0, pstore_display, "", ""), + U_BOOT_CMD_MKENT(save, 4, 0, pstore_save, "", ""), + }; +@@ -531,6 +584,8 @@ U_BOOT_CMD(pstore, 10, 0, do_pstore, + " 'pmsg-size' is the size of the user space logs record.\n" + " 'ecc-size' enables/disables ECC support and specifies ECC buffer size in\n" + " bytes (0 disables it, 1 is a special value, means 16 bytes ECC).\n" ++ "pstore check\n" ++ "- Returns true if there are records in pstore.\n" + "pstore display [record-type] [nb]\n" + "- Display existing records in pstore reserved memory. A 'record-type' can\n" + " be given to only display records of this kind. 'record-type' can be one\n" |