|
|
|
@ -76,6 +76,8 @@ struct flash_layout {
|
|
|
|
|
uint32_t rootfs_ofs;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define FLAG_LE_KERNEL_LA_EP 0x00000001 /* Little-endian used for kernel load address & entry point */
|
|
|
|
|
|
|
|
|
|
struct board_info {
|
|
|
|
|
char *id;
|
|
|
|
|
uint32_t hw_id;
|
|
|
|
@ -83,7 +85,7 @@ struct board_info {
|
|
|
|
|
uint32_t hw_ver_add;
|
|
|
|
|
char *layout_id;
|
|
|
|
|
uint32_t hdr_ver;
|
|
|
|
|
bool endian_swap;
|
|
|
|
|
uint32_t flags;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
@ -184,7 +186,7 @@ static struct board_info boards[] = {
|
|
|
|
|
.hw_rev = 58,
|
|
|
|
|
.layout_id = "8Mmtk",
|
|
|
|
|
.hdr_ver = 3,
|
|
|
|
|
.endian_swap = true,
|
|
|
|
|
.flags = FLAG_LE_KERNEL_LA_EP,
|
|
|
|
|
}, {
|
|
|
|
|
.id = "ArcherVR200V",
|
|
|
|
|
.hw_id = 0x73b70801,
|
|
|
|
@ -197,14 +199,14 @@ static struct board_info boards[] = {
|
|
|
|
|
.hw_rev = 69,
|
|
|
|
|
.layout_id = "8Mmtk",
|
|
|
|
|
.hdr_ver = 3,
|
|
|
|
|
.endian_swap = true,
|
|
|
|
|
.flags = FLAG_LE_KERNEL_LA_EP,
|
|
|
|
|
}, {
|
|
|
|
|
.id = "ArcherMR200",
|
|
|
|
|
.hw_id = 0xd7500001,
|
|
|
|
|
.hw_rev = 0x4a,
|
|
|
|
|
.layout_id = "8MLmtk",
|
|
|
|
|
.hdr_ver = 3,
|
|
|
|
|
.endian_swap = true,
|
|
|
|
|
.flags = FLAG_LE_KERNEL_LA_EP,
|
|
|
|
|
}, {
|
|
|
|
|
.id = "TL-WR840NV4",
|
|
|
|
|
.hw_id = 0x08400004,
|
|
|
|
@ -212,7 +214,7 @@ static struct board_info boards[] = {
|
|
|
|
|
.hw_ver_add = 0x4,
|
|
|
|
|
.layout_id = "8Mmtk",
|
|
|
|
|
.hdr_ver = 3,
|
|
|
|
|
.endian_swap = true,
|
|
|
|
|
.flags = FLAG_LE_KERNEL_LA_EP,
|
|
|
|
|
}, {
|
|
|
|
|
.id = "TL-WR841NV13",
|
|
|
|
|
.hw_id = 0x08410013,
|
|
|
|
@ -220,7 +222,7 @@ static struct board_info boards[] = {
|
|
|
|
|
.hw_ver_add = 0x13,
|
|
|
|
|
.layout_id = "8Mmtk",
|
|
|
|
|
.hdr_ver = 3,
|
|
|
|
|
.endian_swap = true,
|
|
|
|
|
.flags = FLAG_LE_KERNEL_LA_EP,
|
|
|
|
|
}, {
|
|
|
|
|
/* terminating entry */
|
|
|
|
|
}
|
|
|
|
@ -574,7 +576,7 @@ static void fill_header(char *buf, int len)
|
|
|
|
|
hdr->ver_mid = fw_ver_mid;
|
|
|
|
|
hdr->ver_lo = fw_ver_lo;
|
|
|
|
|
|
|
|
|
|
if (board->endian_swap) {
|
|
|
|
|
if (board->flags & FLAG_LE_KERNEL_LA_EP) {
|
|
|
|
|
hdr->kernel_la = bswap_32(hdr->kernel_la);
|
|
|
|
|
hdr->kernel_ep = bswap_32(hdr->kernel_ep);
|
|
|
|
|
}
|
|
|
|
@ -1018,7 +1020,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
hdr_ver = atoi(optarg);
|
|
|
|
|
break;
|
|
|
|
|
case 'e':
|
|
|
|
|
custom_board.endian_swap = true;
|
|
|
|
|
custom_board.flags = FLAG_LE_KERNEL_LA_EP;
|
|
|
|
|
break;
|
|
|
|
|
case 'h':
|
|
|
|
|
usage(EXIT_SUCCESS);
|
|
|
|
|