|
|
@@ -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"
|