[Skiboot] [PATCH 29/36] sparse: fix endian conversion for MDST table

Stewart Smith stewart at linux.vnet.ibm.com
Tue Nov 10 15:18:23 AEDT 2015


hdata/spira.c:94:25: warning: incorrect type in initializer (different base types)
hdata/spira.c:94:25:    expected unsigned long long [unsigned] [usertype] addr
hdata/spira.c:94:25:    got restricted beint64_t [usertype] <noident>
hdata/spira.c:95:25: warning: incorrect type in initializer (different base types)
hdata/spira.c:95:25:    expected unsigned int [unsigned] [usertype] type
hdata/spira.c:95:25:    got restricted beint32_t [usertype] <noident>
hdata/spira.c:96:25: warning: incorrect type in initializer (different base types)
hdata/spira.c:96:25:    expected unsigned int [unsigned] [usertype] size
hdata/spira.c:96:25:    got restricted beint32_t [usertype] <noident>
hdata/spira.c:99:25: warning: incorrect type in initializer (different base types)
hdata/spira.c:99:25:    expected unsigned long long [unsigned] [usertype] addr
hdata/spira.c:99:25:    got restricted beint64_t [usertype] <noident>
hdata/spira.c:100:25: warning: incorrect type in initializer (different base types)
hdata/spira.c:100:25:    expected unsigned int [unsigned] [usertype] type
hdata/spira.c:100:25:    got restricted beint32_t [usertype] <noident>
hdata/spira.c:101:25: warning: incorrect type in initializer (different base types)
hdata/spira.c:101:25:    expected unsigned int [unsigned] [usertype] size
hdata/spira.c:101:25:    got restricted beint32_t [usertype] <noident>

This also means we use proper conversions in fsp-mdst-table.c

This means no actual change for skiboot as it's BE.

Signed-off-by: Stewart Smith <stewart at linux.vnet.ibm.com>
---
 hw/fsp/fsp-mdst-table.c  | 23 ++++++++++++-----------
 include/fsp-mdst-table.h |  6 +++---
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/hw/fsp/fsp-mdst-table.c b/hw/fsp/fsp-mdst-table.c
index 9c71cda0208e..e6018aad5bfa 100644
--- a/hw/fsp/fsp-mdst-table.c
+++ b/hw/fsp/fsp-mdst-table.c
@@ -103,9 +103,9 @@ static int dump_region_tce_map(void)
 
 	for (i = 0; i < cur_mdst_entry; i++) {
 
-		addr = dump_mem_region[i].addr & ~TCE_MASK;
-		size = get_dump_region_map_size(dump_mem_region[i].addr,
-						dump_mem_region[i].size);
+		addr = be64_to_cpu(dump_mem_region[i].addr) & ~TCE_MASK;
+		size = get_dump_region_map_size(be64_to_cpu(dump_mem_region[i].addr),
+						be32_to_cpu(dump_mem_region[i].size));
 
 		if (t_size + size > max_dump_size)
 			break;
@@ -116,10 +116,11 @@ static int dump_region_tce_map(void)
 		/* Add entry to MDST table */
 		mdst_table[i].type = dump_mem_region[i].type;
 		mdst_table[i].size = dump_mem_region[i].size;
-		mdst_table[i].addr = PSI_DMA_HYP_DUMP + t_size;
+		mdst_table[i].addr = cpu_to_be64(PSI_DMA_HYP_DUMP + t_size);
 
 		/* TCE alignment adjustment */
-		mdst_table[i].addr += dump_mem_region[i].addr & 0xfff;
+		mdst_table[i].addr = cpu_to_be64(be64_to_cpu(mdst_table[i].addr) +
+						 (be64_to_cpu(dump_mem_region[i].addr) & 0xfff));
 
 		t_size += size;
 	}
@@ -193,7 +194,7 @@ static int dump_region_del_entry(uint32_t id)
 	lock(&mdst_lock);
 
 	for (i = 0; i < cur_mdst_entry; i++) {
-		if (dump_mem_region[i].type != id)
+		if (be32_to_cpu(dump_mem_region[i].type) != id)
 			continue;
 
 		found = true;
@@ -206,8 +207,8 @@ static int dump_region_del_entry(uint32_t id)
 	}
 
 	/* Adjust current dump size */
-	size = get_dump_region_map_size(dump_mem_region[i].addr,
-					dump_mem_region[i].size);
+	size = get_dump_region_map_size(be64_to_cpu(dump_mem_region[i].addr),
+					be32_to_cpu(dump_mem_region[i].size));
 	cur_dump_size -= size;
 
 	for ( ; i < cur_mdst_entry - 1; i++)
@@ -250,9 +251,9 @@ static int __dump_region_add_entry(uint32_t id, uint64_t addr, uint32_t size)
 	}
 
 	/* Add entry to dump memory region table */
-	dump_mem_region[cur_mdst_entry].type = id;
-	dump_mem_region[cur_mdst_entry].addr = addr;
-	dump_mem_region[cur_mdst_entry].size = size;
+	dump_mem_region[cur_mdst_entry].type = cpu_to_be32(id);
+	dump_mem_region[cur_mdst_entry].addr = cpu_to_be64(addr);
+	dump_mem_region[cur_mdst_entry].size = cpu_to_be32(size);
 
 	/* Update dump region count and dump size */
 	cur_mdst_entry++;
diff --git a/include/fsp-mdst-table.h b/include/fsp-mdst-table.h
index 21cb88c9fa0c..5989cdb73c88 100644
--- a/include/fsp-mdst-table.h
+++ b/include/fsp-mdst-table.h
@@ -40,9 +40,9 @@
  * defined in HDAT spec.
  */
 struct dump_mdst_table {
-	uint64_t	addr;
-	uint32_t	type; /* DUMP_SECTION_* */
-	uint32_t	size;
+	__be64	addr;
+	__be32	type; /* DUMP_SECTION_* */
+	__be32	size;
 };
 
 #endif	/* __FSPMDST_H */
-- 
2.1.4



More information about the Skiboot mailing list