aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2021-10-03 11:22:10 +1000
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2021-10-19 12:08:19 +0530
commitc496563de915cb00c6e99586568743ea890af2f2 (patch)
treeec647c7c88427df3952bf57565dda646ab6ec853
parent4abe8137c82af48a565be3823d0f6006b4b00163 (diff)
downloadskiboot-c496563de915cb00c6e99586568743ea890af2f2.zip
skiboot-c496563de915cb00c6e99586568743ea890af2f2.tar.gz
skiboot-c496563de915cb00c6e99586568743ea890af2f2.tar.bz2
flash: AST BMC endian fixes
Fix endian for the 4-byte LPC copy similarly to other flash drivers. This allows flash to be detected on POWER8 AST BMC systems with a LE skiboot. Fix incorrect comments in those other drivers while we're here. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
-rw-r--r--hw/ast-bmc/ast-sf-ctrl.c14
-rw-r--r--libflash/ipmi-hiomap.c2
-rw-r--r--libflash/mbox-flash.c2
3 files changed, 13 insertions, 5 deletions
diff --git a/hw/ast-bmc/ast-sf-ctrl.c b/hw/ast-bmc/ast-sf-ctrl.c
index 03cc443..c3a3213 100644
--- a/hw/ast-bmc/ast-sf-ctrl.c
+++ b/hw/ast-bmc/ast-sf-ctrl.c
@@ -77,8 +77,11 @@ static int ast_copy_to_ahb(uint32_t reg, const void *src, uint32_t len)
while(len) {
/* Chose access size */
if (len > 3 && !(off & 3)) {
+ /* endian swap: see ast_copy_from_ahb */
+ uint32_t dat = be32_to_cpu(*(__be32 *)src);
+
rc = lpc_write(OPAL_LPC_FW, off,
- *(uint32_t *)src, 4);
+ dat, 4);
chunk = 4;
} else {
rc = lpc_write(OPAL_LPC_FW, off,
@@ -119,8 +122,13 @@ static int ast_copy_from_ahb(void *dst, uint32_t reg, uint32_t len)
/* Chose access size */
if (len > 3 && !(off & 3)) {
rc = lpc_read(OPAL_LPC_FW, off, &dat, 4);
- if (!rc)
- *(uint32_t *)dst = dat;
+ if (!rc) {
+ /*
+ * lpc_read swaps to CPU endian but it's not
+ * really a 32-bit value, so convert back.
+ */
+ *(__be32 *)dst = cpu_to_be32(dat);
+ }
chunk = 4;
} else {
rc = lpc_read(OPAL_LPC_FW, off, &dat, 1);
diff --git a/libflash/ipmi-hiomap.c b/libflash/ipmi-hiomap.c
index c889d63..29355d6 100644
--- a/libflash/ipmi-hiomap.c
+++ b/libflash/ipmi-hiomap.c
@@ -620,7 +620,7 @@ static int lpc_window_write(struct ipmi_hiomap *ctx, uint32_t pos,
uint32_t chunk;
if (len > 3 && !(off & 3)) {
- /* endian swap: see lpc_window_write */
+ /* endian swap: see lpc_window_read */
uint32_t dat = be32_to_cpu(*(__be32 *)buf);
rc = lpc_write(OPAL_LPC_FW, off, dat, 4);
diff --git a/libflash/mbox-flash.c b/libflash/mbox-flash.c
index 6da77d7..4c20f15 100644
--- a/libflash/mbox-flash.c
+++ b/libflash/mbox-flash.c
@@ -199,7 +199,7 @@ static int lpc_window_write(struct mbox_flash_data *mbox_flash, uint32_t pos,
uint32_t chunk;
if (len > 3 && !(off & 3)) {
- /* endian swap: see lpc_window_write */
+ /* endian swap: see lpc_window_read */
uint32_t dat = be32_to_cpu(*(__be32 *)buf);
rc = lpc_write(OPAL_LPC_FW, off, dat, 4);