summaryrefslogtreecommitdiffstats
path: root/scripts/kwboot.c
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2016-09-28 20:50:16 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-10-04 21:14:20 +0200
commit481274a9353ef62b64cbaf9e5b25cae47235b7f2 (patch)
tree02707764d88f1f8be3c6fdde52ebe250a487413f /scripts/kwboot.c
parent90184dbc3691fd0ba188682fdc55d82a2af230ed (diff)
downloadbarebox-481274a9353ef62b64cbaf9e5b25cae47235b7f2.tar.gz
barebox-481274a9353ef62b64cbaf9e5b25cae47235b7f2.tar.xz
scripts: kwboot: set boot source to UART before sending
Sending an image that specifies one of the alternative boot sources doesn't make sense. So change the boot source to UART on the fly. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'scripts/kwboot.c')
-rw-r--r--scripts/kwboot.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/scripts/kwboot.c b/scripts/kwboot.c
index 1fcb49b7ac..9e4181e539 100644
--- a/scripts/kwboot.c
+++ b/scripts/kwboot.c
@@ -600,7 +600,7 @@ out:
}
static int
-kwboot_check_image(const unsigned char *img, size_t size)
+kwboot_check_image(unsigned char *img, size_t size)
{
size_t i;
size_t header_size, image_size;
@@ -613,12 +613,20 @@ kwboot_check_image(const unsigned char *img, size_t size)
}
switch (img[0x0]) {
- case 0x5a: /* SPI/NOR */
case 0x69: /* UART0 */
+ break;
+
+ case 0x5a: /* SPI/NOR */
case 0x78: /* SATA */
case 0x8b: /* NAND */
case 0x9c: /* PCIe */
+ /* change boot source to UART and fix checksum */
+ img[0x1f] -= img[0x0];
+ img[0x1f] += 0x69;
+ img[0x0] = 0x69;
+
break;
+
default:
fprintf(stderr,
"Unknown boot source: 0x%hhx\n", img[0x0]);
@@ -674,7 +682,7 @@ kwboot_mmap_image(const char *path, size_t *size)
if (rc)
goto out;
- img = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ img = mmap(NULL, st.st_size, PROT_WRITE, MAP_PRIVATE, fd, 0);
if (img == MAP_FAILED) {
img = NULL;
goto out;