-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
uboot-mediaktek: add support for PSTORE and check it on boot
Add support for pstore/ramoops now that DRAM content is preserved over reboot on MT7622. On each boot, check pstore and boot to recovery image in case there are records stored in it. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
- Loading branch information
Showing
5 changed files
with
131 additions
and
15 deletions.
There are no files selected for viewing
33 changes: 33 additions & 0 deletions
33
package/boot/uboot-mediatek/patches/050-mt7622-enable-pstore.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
--- a/arch/arm/dts/mt7622.dtsi | ||
+++ b/arch/arm/dts/mt7622.dtsi | ||
@@ -37,6 +37,30 @@ | ||
}; | ||
}; | ||
|
||
+ psci { | ||
+ compatible = "arm,psci-1.0"; | ||
+ method = "smc"; | ||
+ }; | ||
+ | ||
+ reserved-memory { | ||
+ #address-cells = <2>; | ||
+ #size-cells = <2>; | ||
+ ranges; | ||
+ | ||
+ /* 64 KiB reserved for ramoops/pstore */ | ||
+ ramoops@0x42ff0000 { | ||
+ compatible = "ramoops"; | ||
+ reg = <0 0x42ff0000 0 0x10000>; | ||
+ record-size = <0x1000>; | ||
+ }; | ||
+ | ||
+ /* 192 KiB reserved for ARM Trusted Firmware (BL31) */ | ||
+ secmon_reserved: secmon@43000000 { | ||
+ reg = <0 0x43000000 0 0x30000>; | ||
+ no-map; | ||
+ }; | ||
+ }; | ||
+ | ||
snfi: snfi@1100d000 { | ||
compatible = "mediatek,mtk-snfi-spi"; | ||
reg = <0x1100d000 0x2000>; |
78 changes: 78 additions & 0 deletions
78
package/boot/uboot-mediatek/patches/230-cmd-add-pstore-check.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters