[U-Boot] [PATCH 03/09] board/freescale/common:Add support of QTAG register

Poonam Aggrwal poonam.aggrwal at freescale.com
Mon Dec 24 06:24:47 CET 2012


From: Prabhakar Kushwaha <prabhakar at freescale.com>

QIXIS FPGA's QIXIS Tag Access register (QTAG) defines TAG, VER, DATE, IMAGE
fields. These fields have FPGA build version, image name and build date
information.

Add support to parse these fields to have complete FPGA image information.

Signed-off-by: York Sun <yorksun at freescale.com>
Signed-off-by: Prabhakar Kushwaha <prabhakar at freescale.com>
Signed-off-by: Poonam Aggrwal <poonam.aggrwal at freescale.com>
---
 board/freescale/common/qixis.c |   46 ++++++++++++++++++++++++++++++++++++++++
 board/freescale/common/qixis.h |    3 ++
 2 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/board/freescale/common/qixis.c b/board/freescale/common/qixis.c
index c92902a..2cf393b 100644
--- a/board/freescale/common/qixis.c
+++ b/board/freescale/common/qixis.c
@@ -14,6 +14,7 @@
 #include <common.h>
 #include <command.h>
 #include <asm/io.h>
+#include <linux/time.h>
 #include "qixis.h"
 
 u8 qixis_read(unsigned int reg)
@@ -30,6 +31,51 @@ void qixis_write(unsigned int reg, u8 value)
 	out_8(p + reg, value);
 }
 
+u16 qixis_read_minor(void)
+{
+	u16 minor;
+
+	/* this data is in little endian */
+	QIXIS_WRITE(tagdata, 5);
+	minor = QIXIS_READ(tagdata);
+	QIXIS_WRITE(tagdata, 6);
+	minor += QIXIS_READ(tagdata) << 8;
+
+	return minor;
+}
+
+char *qixis_read_time(char *result)
+{
+	time_t time = 0;
+	int i;
+
+	/* timestamp is in 32-bit big endian */
+	for (i = 8; i <= 11; i++) {
+		QIXIS_WRITE(tagdata, i);
+		time =  (time << 8) + QIXIS_READ(tagdata);
+	}
+
+	return ctime_r(&time, result);
+}
+
+char *qixis_read_tag(char *buf)
+{
+	int i;
+	char tag, *ptr = buf;
+
+	for (i = 16; i <= 63; i++) {
+		QIXIS_WRITE(tagdata, i);
+		tag = QIXIS_READ(tagdata);
+		*(ptr++) = tag;
+		if (!tag)
+			break;
+	}
+	if (i > 63)
+		*ptr = '\0';
+
+	return buf;
+}
+
 void qixis_reset(void)
 {
 	QIXIS_WRITE(rst_ctl, QIXIS_RST_CTL_RESET);
diff --git a/board/freescale/common/qixis.h b/board/freescale/common/qixis.h
index b98b180..4d73461 100644
--- a/board/freescale/common/qixis.h
+++ b/board/freescale/common/qixis.h
@@ -88,6 +88,9 @@ struct qixis {
 
 u8 qixis_read(unsigned int reg);
 void qixis_write(unsigned int reg, u8 value);
+u16 qixis_read_minor(void);
+char *qixis_read_time(char *result);
+char *qixis_read_tag(char *buf);
 
 #define QIXIS_READ(reg) qixis_read(offsetof(struct qixis, reg))
 #define QIXIS_WRITE(reg, value) qixis_write(offsetof(struct qixis, reg), value)
-- 
1.6.5.6




More information about the U-Boot mailing list