From: Alexander Kurz <akurz@blala.de>
To: barebox@lists.infradead.org
Cc: Alexander Kurz <akurz@blala.de>
Subject: [PATCH 2/2] scripts: imx-usb-loader: structured DCD v1 element access
Date: Sun, 21 Aug 2016 22:18:37 +0200 [thread overview]
Message-ID: <1471810717-1371-2-git-send-email-akurz@blala.de> (raw)
In-Reply-To: <1471810717-1371-1-git-send-email-akurz@blala.de>
DCD v1 elements are encoded little endian.
Signed-off-by: Alexander Kurz <akurz@blala.de>
---
scripts/imx/imx-usb-loader.c | 19 +++++++++++--------
scripts/imx/imx.h | 6 ++++++
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/scripts/imx/imx-usb-loader.c b/scripts/imx/imx-usb-loader.c
index 9f25ca6..db74910 100644
--- a/scripts/imx/imx-usb-loader.c
+++ b/scripts/imx/imx-usb-loader.c
@@ -32,6 +32,7 @@
#include <stdlib.h>
#include <libusb.h>
#include <getopt.h>
+#include <endian.h>
#include <arpa/inet.h>
#include <linux/kernel.h>
@@ -872,7 +873,6 @@ static int get_dcd_range_old(const struct imx_flash_header *hdr,
static int write_dcd_table_old(const struct imx_flash_header *hdr,
const unsigned char *file_start, unsigned cnt)
{
- unsigned val;
unsigned char *dcd_end;
unsigned char* dcd;
int err = get_dcd_range_old(hdr, file_start, cnt, &dcd, &dcd_end);
@@ -882,23 +882,26 @@ static int write_dcd_table_old(const struct imx_flash_header *hdr,
printf("writing DCD table...\n");
while (dcd < dcd_end) {
- unsigned type = (dcd[0] << 0) | (dcd[1] << 8) | (dcd[2] << 16) | (dcd[3] << 24);
- unsigned addr = (dcd[4] << 0) | (dcd[5] << 8) | (dcd[6] << 16) | (dcd[7] << 24);
- val = (dcd[8] << 0) | (dcd[9] << 8) | (dcd[10] << 16) | (dcd[11] << 24);
- dcd += 12;
+ struct imx_dcd_rec_v1 *rec = (struct imx_dcd_rec_v1 *) dcd;
+ unsigned type = le32toh(rec->type);
+ dcd += sizeof *rec;
switch (type) {
case 1:
case 2:
case 4:
if (verbose > 1)
- printf("type=%08x *0x%08x = 0x%08x\n", type, addr, val);
- err = write_memory(addr, val, type);
+ printf("type=%08x *0x%08x = 0x%08x\n", type,
+ le32toh(rec->addr),
+ le32toh(rec->val));
+ err = write_memory(le32toh(rec->addr),
+ le32toh(rec->val), type);
if (err < 0)
return err;
break;
default:
- printf("!!!unknown type=%08x *0x%08x = 0x%08x\n", type, addr, val);
+ printf("WARNING: unknown DCD type=%08x ignored\n",
+ type);
}
}
diff --git a/scripts/imx/imx.h b/scripts/imx/imx.h
index 8db7e7b..64ebdce 100644
--- a/scripts/imx/imx.h
+++ b/scripts/imx/imx.h
@@ -26,6 +26,12 @@ struct imx_boot_data {
uint32_t plugin;
} __attribute__((packed));
+struct imx_dcd_rec_v1 {
+ uint32_t type;
+ uint32_t addr;
+ uint32_t val;
+} __attribute__((packed));
+
#define TAG_IVT_HEADER 0xd1
#define IVT_VERSION 0x40
#define TAG_DCD_HEADER 0xd2
--
2.1.4
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2016-08-21 20:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-21 20:18 [PATCH 1/2] scripts: imx-usb-loader: enable DCD 16-bit write for hdr v1 Alexander Kurz
2016-08-21 20:18 ` Alexander Kurz [this message]
2016-08-22 6:02 ` Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1471810717-1371-2-git-send-email-akurz@blala.de \
--to=akurz@blala.de \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox