indent: Standard input:27: Warning:old style assignment ambiguity in "=*".  Assuming "= *"

#ifdef ECC_TEST
static inline void ecc_off (void)
{
	*(volatile int *) (INTERNAL_REG_BASE_ADDR + 0x4b4) &= ~0x00200000;
}

static inline void ecc_on (void)
{
	*(volatile int *) (INTERNAL_REG_BASE_ADDR + 0x4b4) |= 0x00200000;
}

static int putshex (const char *buf, int len)
{
	int i;

	for (i = 0; i < len; i++) {
		printf ("%02x", buf[i]);
	}
	return 0;
}

static int char_memcpy (void *d, const void *s, int len)
{
	int i;
	char *cd = d;
	const char *cs = s;

	for (i = 0; i < len; i++) {
		*(cd++) = *(cs++);
	}
	return 0;
}

static int memory_test (char *buf)
{
	const char src[][16] = {
		{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
		{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
		 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
		{0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
		 0x02, 0x02, 0x02, 0x02, 0x02, 0x02},
		{0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
		 0x04, 0x04, 0x04, 0x04, 0x04, 0x04},
		{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
		 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
		{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
		 0x10, 0x10, 0x10, 0x10, 0x10, 0x10},
		{0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
		 0x20, 0x20, 0x20, 0x20, 0x20, 0x20},
		{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
		 0x40, 0x40, 0x40, 0x40, 0x40, 0x40},
		{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
		 0x80, 0x80, 0x80, 0x80, 0x80, 0x80},
		{0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
		 0x55, 0x55, 0x55, 0x55, 0x55, 0x55},
		{0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
		 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa},
		{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
	};
	const int foo[] = { 0 };
	int i, j, a;

	printf ("\ntest @ %d %p\n", foo[0], buf);
	for (i = 0; i < 12; i++) {
		for (a = 0; a < 8; a++) {
			const char *s = src[i] + a;
			int align = (unsigned) (s) & 0x7;

			/* ecc_off(); */
			memcpy (buf, s, 8);
			/* ecc_on(); */
			putshex (s, 8);
			if (memcmp (buf, s, 8)) {
				putc ('\n');
				putshex (buf, 8);
				printf (" [FAIL] (%p) align=%d\n", s, align);
				for (j = 0; j < 8; j++) {
					s[j] == buf[j] ? puts ("  ") :
						printf ("%02x",
							(s[j]) ^ (buf[j]));
				}
				putc ('\n');
			} else {
				printf (" [PASS] (%p) align=%d\n", s, align);
			}
			/* ecc_off(); */
			char_memcpy (buf, s, 8);
			/* ecc_on(); */
			putshex (s, 8);
			if (memcmp (buf, s, 8)) {
				putc ('\n');
				putshex (buf, 8);
				printf (" [FAIL] (%p) align=%d\n", s, align);
				for (j = 0; j < 8; j++) {
					s[j] == buf[j] ? puts ("  ") :
						printf ("%02x",
							(s[j]) ^ (buf[j]));
				}
				putc ('\n');
			} else {
				printf (" [PASS] (%p) align=%d\n", s, align);
			}
		}
	}

	return 0;
}
#endif
