diff target-utils/loadagent/amdflash.c @ 659:761e8b0c65b0

loadagent: first step in implementation of binary flash programming
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 03 Mar 2020 17:55:20 +0000
parents 0da2cf5a999c
children b34384991094
line wrap: on
line diff
--- a/target-utils/loadagent/amdflash.c	Tue Mar 03 06:06:17 2020 +0000
+++ b/target-utils/loadagent/amdflash.c	Tue Mar 03 17:55:20 2020 +0000
@@ -88,3 +88,39 @@
 		}
 	}
 }
+
+amdflash_binary_prog(offset, nwords, data)
+	u32 offset;
+	unsigned nwords;
+	u16 *data;
+{
+	volatile u16 *flashptr;
+	int i;
+
+	flashptr = (volatile u16 *)(base_addr + offset);
+	while (nwords) {
+		if (*flashptr != 0xFFFF) {
+			serial_out(0x15);	/* NAK */
+			printf("ERROR: flash not blank at %08X\n",
+				(u_long) flashptr);
+			return(-1);
+		}
+		*(volatile u16 *)(base_addr + 0xAAA) = 0xAA;
+		*(volatile u16 *)(base_addr + 0x554) = 0x55;
+		*(volatile u16 *)(base_addr + 0xAAA) = 0xA0;
+		*flashptr = *data;
+		for (i = 10000; i; i--)
+			if (*flashptr == *data)
+				break;
+		if (!i) {
+			serial_out(0x15);	/* NAK */
+			printf("ERROR: flash write timeout at %08X\n",
+				(u_long) flashptr);
+			return(-1);
+		}
+		flashptr++;
+		data++;
+		nwords--;
+	}
+	return(0);
+}