mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: giorgio.nicole@arcor.de
To: barebox@lists.infradead.org
Cc: Giorgio Dal Molin <giorgio.nicole@arcor.de>
Subject: [PATCH] imx-image: added support for the optional 'count' parameter of the 'check data' command in the DCD.
Date: Fri,  3 Jul 2020 18:20:17 +0200	[thread overview]
Message-ID: <20200703162017.8217-1-giorgio.nicole@arcor.de> (raw)

From: Giorgio Dal Molin <giorgio.nicole@arcor.de>

The command 'check data' can be used in the DCD table for an IMX soc
to test the content of memory addresses, typically registers of some
soc controller.
This command supports an optional 'count' parameter that, when given,
tells the ROM code how many times at most it's allowed to poll the
memory address to meet the given logical condition. If the 'count'
is not present in the command the ROM polls indefinitely.
(See the IMX7D Ref. Manual at §6.6.7.2.2).

With this patch it's possible to have the following command in the DCD:

 ...
 check 32 until_any_bit_set 0x307900c4 0x1 500
 ...


Signed-off-by: Giorgio Dal Molin <giorgio.nicole@arcor.de>
---
 arch/arm/mach-imx/include/mach/imx-header.h |  2 +-
 scripts/imx/imx-image.c                     |  4 +++-
 scripts/imx/imx.c                           | 10 +++++++---
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-imx/include/mach/imx-header.h b/arch/arm/mach-imx/include/mach/imx-header.h
index dc8e2eee2..57644067c 100644
--- a/arch/arm/mach-imx/include/mach/imx-header.h
+++ b/arch/arm/mach-imx/include/mach/imx-header.h
@@ -106,7 +106,7 @@ struct config_data {
 	uint32_t first_opcode;
 	int cpu_type;
 	int (*check)(const struct config_data *data, uint32_t cmd,
-		     uint32_t addr, uint32_t mask);
+			uint32_t addr, uint32_t mask, uint32_t count);
 	int (*write_mem)(const struct config_data *data, uint32_t addr,
 			 uint32_t val, int width, int set_bits, int clear_bits);
 	int (*nop)(const struct config_data *data);
diff --git a/scripts/imx/imx-image.c b/scripts/imx/imx-image.c
index ec7444a77..0cd970ea8 100644
--- a/scripts/imx/imx-image.c
+++ b/scripts/imx/imx-image.c
@@ -495,7 +495,7 @@ static void write_dcd(const char *outfile)
 }
 
 static int check(const struct config_data *data, uint32_t cmd, uint32_t addr,
-		 uint32_t mask)
+		 uint32_t mask, uint32_t count)
 {
 	if (data->header_version != 2) {
 		fprintf(stderr, "DCD check command is not available or "
@@ -512,6 +512,8 @@ static int check(const struct config_data *data, uint32_t cmd, uint32_t addr,
 	dcdtable[curdcd++] = htobe32(cmd);
 	dcdtable[curdcd++] = htobe32(addr);
 	dcdtable[curdcd++] = htobe32(mask);
+	if ( ((cmd & (0xffff<<8)) >> 8) > sizeof(uint32_t)*3 )
+		dcdtable[curdcd++] = htobe32(count);
 
 	return 0;
 }
diff --git a/scripts/imx/imx.c b/scripts/imx/imx.c
index ea576c22d..879bd897e 100644
--- a/scripts/imx/imx.c
+++ b/scripts/imx/imx.c
@@ -92,7 +92,7 @@ static void do_cmd_check_usage(void)
 
 static int do_cmd_check(struct config_data *data, int argc, char *argv[])
 {
-	uint32_t addr, mask, cmd;
+	uint32_t addr, mask, cmd, count=0, len=3;
 	int i, width;
 	const char *scmd;
 
@@ -108,6 +108,10 @@ static int do_cmd_check(struct config_data *data, int argc, char *argv[])
 	scmd = argv[2];
 	addr = strtoul(argv[3], NULL, 0);
 	mask = strtoul(argv[4], NULL, 0);
+	if (argc > 5) {
+		count = strtoul(argv[5], NULL, 0);
+		++len;
+	}
 
 	switch (width) {
 	case 1:
@@ -129,9 +133,9 @@ static int do_cmd_check(struct config_data *data, int argc, char *argv[])
 		return -EINVAL;
 	}
 
-	cmd = (TAG_CHECK << 24) | (i << 3) | width | ((sizeof(uint32_t) * 3) << 8);
+	cmd = (TAG_CHECK << 24) | (i << 3) | width | ((sizeof(uint32_t) * len) << 8);
 
-	return data->check(data, cmd, addr, mask);
+	return data->check(data, cmd, addr, mask, count);
 }
 
 static int do_cmd_nop(struct config_data *data, int argc, char *argv[])
-- 
2.27.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

             reply	other threads:[~2020-07-03 16:20 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-03 16:20 giorgio.nicole [this message]
2020-07-05 14:06 ` 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=20200703162017.8217-1-giorgio.nicole@arcor.de \
    --to=giorgio.nicole@arcor.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