Commit efc7efbf authored by Henrik Nordstrom's avatar Henrik Nordstrom
Browse files

bootinfo: Add BROM header decoding

parent c818efd1
...@@ -47,6 +47,16 @@ typedef struct boot_file_head ...@@ -47,6 +47,16 @@ typedef struct boot_file_head
u8 platform[8]; // platform information u8 platform[8]; // platform information
} boot_file_head_t; } boot_file_head_t;
typedef struct brom_file_head
{
u32 jump_instruction; // one intruction jumping to real code
u8 magic[8]; // ="eGON.BRM", not C-style string.
u32 length; // generated by PC
u8 Boot_vsn[4]; // Boot version
u8 eGON_vsn[4]; // eGON version
u8 platform[8]; // platform information
} brom_file_head_t;
typedef struct _boot_dram_para_t { typedef struct _boot_dram_para_t {
__u32 dram_baseaddr; __u32 dram_baseaddr;
__u32 dram_clk; __u32 dram_clk;
...@@ -137,6 +147,7 @@ typedef struct _boot_sdcard_info_t { ...@@ -137,6 +147,7 @@ typedef struct _boot_sdcard_info_t {
__s32 line_count[4]; __s32 line_count[4];
} boot_sdcard_info_t; } boot_sdcard_info_t;
#define BROM_MAGIC "eGON.BRM"
#define BOOT0_MAGIC "eGON.BT0" #define BOOT0_MAGIC "eGON.BT0"
#define BOOT1_MAGIC "eGON.BT1" #define BOOT1_MAGIC "eGON.BT1"
...@@ -145,6 +156,15 @@ void fail(char *msg) { ...@@ -145,6 +156,15 @@ void fail(char *msg) {
exit(1); exit(1);
} }
void print_brom_file_head(brom_file_head_t *hdr)
{
printf("Magic : %.8s\n", hdr->magic);
printf("Length : %u\n", hdr->length);
printf("BOOT ver : %.4s\n", hdr->Boot_vsn);
printf("eGON ver : %.4s\n", hdr->eGON_vsn);
printf("Chip? : %.8s\n", hdr->platform);
}
void print_boot_file_head(boot_file_head_t *hdr) void print_boot_file_head(boot_file_head_t *hdr)
{ {
printf("Magic : %.8s\n", hdr->magic); printf("Magic : %.8s\n", hdr->magic);
...@@ -283,6 +303,7 @@ int main(int argc, char * argv[]) ...@@ -283,6 +303,7 @@ int main(int argc, char * argv[])
boot_file_head_t boot; boot_file_head_t boot;
boot0_file_head_t boot0; boot0_file_head_t boot0;
boot1_file_head_t boot1; boot1_file_head_t boot1;
brom_file_head_t brom;
} hdr; } hdr;
int len; int len;
...@@ -293,6 +314,8 @@ int main(int argc, char * argv[]) ...@@ -293,6 +314,8 @@ int main(int argc, char * argv[])
print_boot0_file_head(&hdr.boot0); print_boot0_file_head(&hdr.boot0);
} else if (strncmp((char *)hdr.boot.magic, BOOT1_MAGIC, strlen(BOOT1_MAGIC)) == 0) { } else if (strncmp((char *)hdr.boot.magic, BOOT1_MAGIC, strlen(BOOT1_MAGIC)) == 0) {
print_boot1_file_head(&hdr.boot1); print_boot1_file_head(&hdr.boot1);
} else if (strncmp((char *)hdr.boot.magic, BROM_MAGIC, strlen(BROM_MAGIC)) == 0) {
print_brom_file_head(&hdr.brom);
} else { } else {
fail("Invalid magic\n"); fail("Invalid magic\n");
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment