summaryrefslogtreecommitdiff
path: root/drivers/net/fm/fm.c
diff options
context:
space:
mode:
authorHou Zhiqiang <B48286@freescale.com>2015-10-26 19:47:43 +0800
committerYork Sun <yorksun@freescale.com>2015-10-29 10:33:59 -0700
commit648bde6d70ac94685ed454cb938e44454190f19a (patch)
tree7de372e460189ec144fe9616bfdde3fca0601394 /drivers/net/fm/fm.c
parent435acd83b2b4f31699732f090d28d66cabb05912 (diff)
downloadu-boot-imx-648bde6d70ac94685ed454cb938e44454190f19a.zip
u-boot-imx-648bde6d70ac94685ed454cb938e44454190f19a.tar.gz
u-boot-imx-648bde6d70ac94685ed454cb938e44454190f19a.tar.bz2
net/fm: Fix the endian issue to support both endianness platforms
The Frame Manager(FMan) is a big-endian peripheral, so the registers, internal MURAM and BDs, which are allocated in main memory and used to communication between core and FMan, should be accessed in big-endian. The big-endian platforms can access them directly as the code implemented so far, while for the little-endian platforms it need to swap the byte-order. Signed-off-by: Hou Zhiqiang <B48286@freescale.com> Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com> Signed-off-by: Mingkai Hu <Mingkai.Hu@freescale.com> Signed-off-by: Gong Qianyu <Qianyu.Gong@freescale.com> Reviewed-by: York Sun <yorksun@freescale.com>
Diffstat (limited to 'drivers/net/fm/fm.c')
-rw-r--r--drivers/net/fm/fm.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
index 400e9dd..eb0eb3d 100644
--- a/drivers/net/fm/fm.c
+++ b/drivers/net/fm/fm.c
@@ -80,11 +80,11 @@ static void fm_upload_ucode(int fm_idx, struct fm_imem *imem,
out_be32(&imem->iadd, IRAM_IADD_AIE);
/* write microcode to IRAM */
for (i = 0; i < size / 4; i++)
- out_be32(&imem->idata, ucode[i]);
+ out_be32(&imem->idata, (be32_to_cpu(ucode[i])));
/* verify if the writing is over */
out_be32(&imem->iadd, 0);
- while ((in_be32(&imem->idata) != ucode[0]) && --timeout)
+ while ((in_be32(&imem->idata) != be32_to_cpu(ucode[0])) && --timeout)
;
if (!timeout)
printf("Fman%u: microcode upload timeout\n", fm_idx + 1);
@@ -177,14 +177,15 @@ static int fman_upload_firmware(int fm_idx,
const struct qe_microcode *ucode = &firmware->microcode[i];
/* Upload a microcode if it's present */
- if (ucode->code_offset) {
+ if (be32_to_cpu(ucode->code_offset)) {
u32 ucode_size;
u32 *code;
printf("Fman%u: Uploading microcode version %u.%u.%u\n",
fm_idx + 1, ucode->major, ucode->minor,
ucode->revision);
- code = (void *)firmware + ucode->code_offset;
- ucode_size = sizeof(u32) * ucode->count;
+ code = (void *)firmware +
+ be32_to_cpu(ucode->code_offset);
+ ucode_size = sizeof(u32) * be32_to_cpu(ucode->count);
fm_upload_ucode(fm_idx, fm_imem, code, ucode_size);
}
}