diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c
index e77d8c1..1b62c52 100644
--- a/drivers/char/tpm/tpm_eventlog.c
+++ b/drivers/char/tpm/tpm_eventlog.c
@@ -28,6 +28,11 @@
 #include "tpm.h"
 #include "tpm_eventlog.h"
 
+#ifdef CONFIG_PPC64
+#define convert_to_host_format(x) be32_to_cpu(x)
+#else
+#define convert_to_host_format(x) x
+#endif
 
 static const char* tcpa_event_type_strings[] = {
 	"PREBOOT",
@@ -82,9 +87,11 @@ static void *tpm_bios_measurements_start(struct seq_file *m, loff_t *pos)
 		event = addr;
 
 		if ((addr + sizeof(struct tcpa_event)) < limit) {
-			if (event->event_type == 0 && event->event_size == 0)
+			if ((convert_to_host_format(event->event_type) == 0) &&
+			    (convert_to_host_format(event->event_size) == 0))
 				return NULL;
-			addr += sizeof(struct tcpa_event) + event->event_size;
+			addr += (sizeof(struct tcpa_event) +
+				 convert_to_host_format(event->event_size));
 		}
 	}
 
@@ -94,8 +101,11 @@ static void *tpm_bios_measurements_start(struct seq_file *m, loff_t *pos)
 
 	event = addr;
 
-	if ((event->event_type == 0 && event->event_size == 0) ||
-	    ((addr + sizeof(struct tcpa_event) + event->event_size) >= limit))
+	if (((convert_to_host_format(event->event_type) == 0) &&
+	     (convert_to_host_format(event->event_size) == 0))
+	    ||
+	    ((addr + sizeof(struct tcpa_event) +
+	      convert_to_host_format(event->event_size)) >= limit))
 		return NULL;
 
 	return addr;
@@ -108,7 +118,8 @@ static void *tpm_bios_measurements_next(struct seq_file *m, void *v,
 	struct tpm_bios_log *log = m->private;
 	void *limit = log->bios_event_log_end;
 
-	v += sizeof(struct tcpa_event) + event->event_size;
+	v += (sizeof(struct tcpa_event) +
+	      convert_to_host_format(event->event_size));
 
 	/* now check if current entry is valid */
 	if ((v + sizeof(struct tcpa_event)) >= limit)
@@ -116,8 +127,11 @@ static void *tpm_bios_measurements_next(struct seq_file *m, void *v,
 
 	event = v;
 
-	if ((event->event_type == 0 && event->event_size == 0) ||
-	    ((v + sizeof(struct tcpa_event) + event->event_size) > limit))
+	if (((convert_to_host_format(event->event_type) == 0) &&
+	     (convert_to_host_format(event->event_size) == 0))
+	    ||
+	    ((v + sizeof(struct tcpa_event) +
+	      convert_to_host_format(event->event_size)) > limit))
 		return NULL;
 
 	(*pos)++;
@@ -137,7 +151,7 @@ static int get_event_name(char *dest, struct tcpa_event *event,
 	int i, n_len = 0, d_len = 0;
 	struct tcpa_pc_event *pc_event;
 
-	switch(event->event_type) {
+	switch(convert_to_host_format(event->event_type)) {
 	case PREBOOT:
 	case POST_CODE:
 	case UNUSED:
@@ -153,14 +167,17 @@ static int get_event_name(char *dest, struct tcpa_event *event,
 	case NONHOST_CODE:
 	case NONHOST_CONFIG:
 	case NONHOST_INFO:
-		name = tcpa_event_type_strings[event->event_type];
+		name =
+		    tcpa_event_type_strings[convert_to_host_format
+					    (event->event_type)];
 		n_len = strlen(name);
 		break;
 	case SEPARATOR:
 	case ACTION:
-		if (MAX_TEXT_EVENT > event->event_size) {
+		if (MAX_TEXT_EVENT >
+		    convert_to_host_format(event->event_size)) {
 			name = event_entry;
-			n_len = event->event_size;
+			n_len = convert_to_host_format(event->event_size);
 		}
 		break;
 	case EVENT_TAG:
@@ -168,7 +185,7 @@ static int get_event_name(char *dest, struct tcpa_event *event,
 
 		/* ToDo Row data -> Base64 */
 
-		switch (pc_event->event_id) {
+		switch(convert_to_host_format(pc_event->event_id)) {
 		case SMBIOS:
 		case BIS_CERT:
 		case CMOS:
@@ -176,7 +193,9 @@ static int get_event_name(char *dest, struct tcpa_event *event,
 		case OPTION_ROM_EXEC:
 		case OPTION_ROM_CONFIG:
 		case S_CRTM_VERSION:
-			name = tcpa_pc_event_id_strings[pc_event->event_id];
+			name =
+			    tcpa_pc_event_id_strings[convert_to_host_format
+						     (pc_event->event_id)];
 			n_len = strlen(name);
 			break;
 		/* hash data */
@@ -185,7 +204,9 @@ static int get_event_name(char *dest, struct tcpa_event *event,
 		case OPTION_ROM_MICROCODE:
 		case S_CRTM_CONTENTS:
 		case POST_CONTENTS:
-			name = tcpa_pc_event_id_strings[pc_event->event_id];
+			name =
+			    tcpa_pc_event_id_strings[convert_to_host_format
+						     (pc_event->event_id)];
 			n_len = strlen(name);
 			for (i = 0; i < 20; i++)
 				d_len += sprintf(&data[2*i], "%02x",
@@ -208,11 +229,43 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v)
 	struct tcpa_event *event = v;
 	char *data = v;
 	int i;
-
-	for (i = 0; i < sizeof(struct tcpa_event) + event->event_size; i++)
+	u32 x;
+	char tmp[4];
+
+	/* PCR */
+	x = convert_to_host_format(event->pcr_index);
+	memcpy(tmp, &x, 4);
+	for (i = 0; i < 4; i++)
+		seq_putc(m, tmp[i]);
+	data += 4;
+
+	/* Event Type */
+	x = convert_to_host_format(event->event_type);
+	memcpy(tmp, &x, 4);
+	for (i = 0; i < 4; i++)
+		seq_putc(m, tmp[i]);
+	data += 4;
+
+	/* HASH */
+	for (i = 0; i < 20; i++)
 		seq_putc(m, data[i]);
+	data += 20;
+
+	/* Size */
+	x = convert_to_host_format(event->event_size);
+	memcpy(tmp, &x, 4);
+	for (i = 0; i < 4; i++)
+		seq_putc(m, tmp[i]);
+	data += 4;
+
+	/* Data */
+	if (convert_to_host_format(event->event_size)) {
+		for (i = 0; i < convert_to_host_format(event->event_size); i++)
+			seq_putc(m, data[i]);
+	}
 
 	return 0;
+
 }
 
 static int tpm_bios_measurements_release(struct inode *inode,
@@ -235,7 +288,7 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v)
 	char *eventname;
 	struct tcpa_event *event = v;
 	unsigned char *event_entry =
-	    (unsigned char *) (v + sizeof(struct tcpa_event));
+	    (unsigned char *)(v + sizeof(struct tcpa_event));
 
 	eventname = kmalloc(MAX_TEXT_EVENT, GFP_KERNEL);
 	if (!eventname) {
@@ -244,13 +297,14 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v)
 		return -EFAULT;
 	}
 
-	seq_printf(m, "%2d ", event->pcr_index);
+	/* 1st: PCR */
+	seq_printf(m, "%2d ", convert_to_host_format(event->pcr_index));
 
 	/* 2nd: SHA1 */
 	seq_printf(m, "%20phN", event->pcr_value);
 
 	/* 3rd: event type identifier */
-	seq_printf(m, " %02x", event->event_type);
+	seq_printf(m, " %02x", convert_to_host_format(event->event_type));
 
 	len += get_event_name(eventname, event, event_entry);
 
