Skip to content

Commit

Permalink
kwbimage_v0: add support to detect and boot a mvebu v0 image
Browse files Browse the repository at this point in the history
The differences between v0 and v1 of the mvebu kwbimage are small enough
that the function to boot such an image can be shared between both
variants.

Signed-off-by: Uwe Kleine-König <[email protected]>
Signed-off-by: Sascha Hauer <[email protected]>
  • Loading branch information
Uwe Kleine-König authored and saschahauer committed Jun 4, 2018
1 parent b086bf3 commit bf8b6d4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
11 changes: 9 additions & 2 deletions arch/arm/mach-mvebu/kwbootimage.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <asm/unaligned.h>
#include <mach/common.h>

static int do_bootm_kwbimage_v1(struct image_data *data)
static int do_bootm_kwbimage_v0_v1(struct image_data *data)
{
int fd, ret;
loff_t offset;
Expand Down Expand Up @@ -69,14 +69,21 @@ static int do_bootm_kwbimage_v1(struct image_data *data)
return ret;
}

static struct image_handler image_handler_kwbimage_v0_handler = {
.name = "MVEBU kwbimage v0",
.bootm = do_bootm_kwbimage_v0_v1,
.filetype = filetype_kwbimage_v0,
};

static struct image_handler image_handler_kwbimage_v1_handler = {
.name = "MVEBU kwbimage v1",
.bootm = do_bootm_kwbimage_v1,
.bootm = do_bootm_kwbimage_v0_v1,
.filetype = filetype_kwbimage_v1,
};

static int mvebu_register_kwbimage_image_handler(void)
{
register_image_handler(&image_handler_kwbimage_v0_handler);
register_image_handler(&image_handler_kwbimage_v1_handler);

return 0;
Expand Down
22 changes: 17 additions & 5 deletions common/filetype.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ static const struct filetype_str filetype_str[] = {
[filetype_exe] = { "MS-DOS executable", "exe" },
[filetype_mxs_bootstream] = { "Freescale MXS bootstream", "mxsbs" },
[filetype_socfpga_xload] = { "SoCFPGA prebootloader image", "socfpga-xload" },
[filetype_kwbimage_v1] = { "MVEBU kwbimage (v1)", "kwb" },
[filetype_kwbimage_v0] = { "MVEBU kwbimage (v0)", "kwb0" },
[filetype_kwbimage_v1] = { "MVEBU kwbimage (v1)", "kwb1" },
[filetype_android_sparse] = { "Android sparse image", "sparse" },
[filetype_arm64_linux_image] = { "ARM aarch64 Linux image", "aarch64-linux" },
};
Expand Down Expand Up @@ -302,10 +303,21 @@ enum filetype file_detect_type(const void *_buf, size_t bufsize)
if ((buf8[0] == 0x5a || buf8[0] == 0x69 || buf8[0] == 0x78 ||
buf8[0] == 0x8b || buf8[0] == 0x9c) &&
buf8[0x1] == 0 && buf8[0x2] == 0 && buf8[0x3] == 0 &&
buf8[0x8] == 1 && buf8[0x18] == 0 && buf8[0x1b] == 0 &&
buf8[0x1c] == 0 && buf8[0x1d] == 0 &&
(buf8[0x1e] == 0 || buf8[0x1e] == 1))
return filetype_kwbimage_v1;
buf8[0x18] == 0 && buf8[0x1b] == 0 && buf8[0x1c] == 0) {
unsigned char sum = 0;
int i;

for (i = 0; i <= 0x1e; ++i)
sum += buf8[i];

if (sum == buf8[0x1f] && buf8[0x8] == 0)
return filetype_kwbimage_v0;

if (sum == buf8[0x1f] &&
buf8[0x8] == 1 && buf8[0x1d] == 0 &&
(buf8[0x1e] == 0 || buf8[0x1e] == 1))
return filetype_kwbimage_v1;
}

if (is_sparse_image(_buf))
return filetype_android_sparse;
Expand Down
1 change: 1 addition & 0 deletions include/filetype.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ enum filetype {
filetype_xz_compressed,
filetype_mxs_bootstream,
filetype_socfpga_xload,
filetype_kwbimage_v0,
filetype_kwbimage_v1,
filetype_android_sparse,
filetype_arm64_linux_image,
Expand Down

0 comments on commit bf8b6d4

Please sign in to comment.