From 5c3ea29e437a0b35aea82c668252d761adff2d7f Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Fri, 27 Jan 2023 00:38:50 +0100 Subject: [PATCH] cmd: fix mtest on 64 bit systems * Use 16 digits on 64 bit systems. * Use 64 bit patterns on 64 bit systems. * Expect the sign bit in bit 63 on 64 bit systems. * Adjust the formatting of a constant. * Always print result on new line Signed-off-by: Heinrich Schuchardt Reviewed-by: Stefan Roese --- cmd/mem.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/cmd/mem.c b/cmd/mem.c index 1e39348195..66c2d36a14 100644 --- a/cmd/mem.c +++ b/cmd/mem.c @@ -818,8 +818,8 @@ static ulong mem_test_alt(vu_long *buf, ulong start_addr, ulong end_addr, * * Returns: 0 if the test succeeds, 1 if the test fails. */ - pattern = (vu_long) 0xaaaaaaaa; - anti_pattern = (vu_long) 0x55555555; + pattern = (vu_long)0xaaaaaaaaaaaaaaaa; + anti_pattern = (vu_long)0x5555555555555555; debug("%s:%d: length = 0x%.8lx\n", __func__, __LINE__, num_words); /* @@ -970,7 +970,7 @@ static ulong test_bitflip_comparison(volatile unsigned long *bufa, max = sizeof(unsigned long) * 8; for (k = 0; k < max; k++) { - q = 0x00000001L << k; + q = 1UL << k; for (j = 0; j < 8; j++) { schedule(); q = ~q; @@ -1009,6 +1009,7 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr, ulong errs = 0; ulong incr, length; ulong val, readback; + const int plen = 2 * sizeof(ulong); /* Alternate the pattern */ incr = 1; @@ -1020,17 +1021,17 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr, * the "negative" patterns and increment the "positive" * patterns to preserve this feature. */ - if (pattern & 0x80000000) + if (pattern > (ulong)LONG_MAX) pattern = -pattern; /* complement & increment */ else pattern = ~pattern; } length = (end_addr - start_addr) / sizeof(ulong); end = buf + length; - printf("\rPattern %08lX Writing..." + printf("\rPattern %0*lX Writing..." "%12s" "\b\b\b\b\b\b\b\b\b\b", - pattern, ""); + plen, pattern, ""); for (addr = buf, val = pattern; addr < end; addr++) { schedule(); @@ -1046,10 +1047,9 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr, if (readback != val) { ulong offset = addr - buf; - printf("\nMem error @ 0x%08X: " - "found %08lX, expected %08lX\n", - (uint)(uintptr_t)(start_addr + offset*sizeof(vu_long)), - readback, val); + printf("\nMem error @ 0x%0*lX: found %0*lX, expected %0*lX\n", + plen, start_addr + offset * sizeof(vu_long), + plen, readback, plen, val); errs++; if (ctrlc()) return -1; @@ -1135,11 +1135,7 @@ static int do_mem_mtest(struct cmd_tbl *cmdtp, int flag, int argc, unmap_sysmem((void *)buf); - if (errs == -1UL) { - /* Memory test was aborted - write a newline to finish off */ - putc('\n'); - } - printf("Tested %d iteration(s) with %lu errors.\n", iteration, count); + printf("\nTested %d iteration(s) with %lu errors.\n", iteration, count); return errs != 0; }