On some Freescale reference boards for SOCs with Fman devices, the Fman microcode is located at address 0xEF000000 in NOR flash. Unfortunately, this address is in the "middle of nowhere" and makes it difficult to partition flash space for other images.
So we change the expected address to 0xEFF40000, which is the flash sector adjacent to the environment. To support older boards, we use macro CONFIG_SYS_QE_FMAN_FW_ADDR_OLD to look for the microcode in the old location if it cannot be found in the new one. The code which uploads the microcode checks the new default location, and if the microcode is not found, then it checks the old location. This allows newer U-Boots to work on older boards. However, during boot, the error messages are a bit confusing: Net: Fman1: Data at eff40000 is not a firmware Fman1: Uploading microcode version 101.8.0 Fman2: Data at eff40000 is not a firmware Fman2: Uploading microcode version 101.8.0 Signed-off-by: Timur Tabi <ti...@freescale.com> --- drivers/net/fm/fm.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c index 0b8c33f..f148608 100644 --- a/drivers/net/fm/fm.c +++ b/drivers/net/fm/fm.c @@ -412,6 +412,13 @@ int fm_init_common(int index, struct ccsr_fman *reg) /* Upload the Fman microcode if it's present */ rc = fman_upload_firmware(index, ®->fm_imem, addr); +#ifdef CONFIG_SYS_QE_FMAN_FW_ADDR_OLD + /* Check the old location in NOR flash */ + if (rc) { + addr = (void *)CONFIG_SYS_QE_FMAN_FW_ADDR_OLD; + rc = fman_upload_firmware(index, ®->fm_imem, addr); + } +#endif if (rc) return rc; sprintf(env_addr, "0x%lx", (long unsigned int)addr); -- 1.7.3.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot