mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-01 00:23:29 +08:00
board: fsl: lx2160a: implement board_fix_fdt
lx2160a rev1 and rev2 SoC has different pcie controller. The pcie controller device tree node fields "compatible" and registers names needs to be updated accordingly This change in device tree is handled as part of fdt fixups. These changes would only be applied if the soc revision is not rev1. Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com> Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
parent
2f2a19757b
commit
5d535aa40b
@ -20,6 +20,8 @@
|
||||
#include <efi_loader.h>
|
||||
#include <asm/arch/mmu.h>
|
||||
#include <hwconfig.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/config.h>
|
||||
#include <asm/arch/fsl_serdes.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#include "../common/qixis.h"
|
||||
@ -116,6 +118,72 @@ int board_early_init_f(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF_BOARD_FIXUP
|
||||
int board_fix_fdt(void *fdt)
|
||||
{
|
||||
char *reg_names, *reg_name;
|
||||
int names_len, old_name_len, new_name_len, remaining_names_len;
|
||||
struct str_map {
|
||||
char *old_str;
|
||||
char *new_str;
|
||||
} reg_names_map[] = {
|
||||
{ "ccsr", "dip" },
|
||||
{ "pf_ctrl", "ctrl" }
|
||||
};
|
||||
int off = -1, i;
|
||||
|
||||
if (IS_SVR_REV(get_svr(), 1, 0))
|
||||
return 0;
|
||||
|
||||
off = fdt_node_offset_by_compatible(fdt, -1, "fsl,lx2160a-pcie");
|
||||
while (off != -FDT_ERR_NOTFOUND) {
|
||||
fdt_setprop(fdt, off, "compatible", "fsl,ls-pcie",
|
||||
strlen("fsl,ls-pcie") + 1);
|
||||
|
||||
reg_names = (char *)fdt_getprop(fdt, off, "reg-names",
|
||||
&names_len);
|
||||
if (!reg_names)
|
||||
continue;
|
||||
|
||||
reg_name = reg_names;
|
||||
remaining_names_len = names_len - (reg_name - reg_names);
|
||||
for (i = 0; (i < ARRAY_SIZE(reg_names_map)) && names_len; i++) {
|
||||
old_name_len = strlen(reg_names_map[i].old_str);
|
||||
new_name_len = strlen(reg_names_map[i].new_str);
|
||||
if (memcmp(reg_name, reg_names_map[i].old_str,
|
||||
old_name_len) == 0) {
|
||||
/* first only leave required bytes for new_str
|
||||
* and copy rest of the string after it
|
||||
*/
|
||||
memcpy(reg_name + new_name_len,
|
||||
reg_name + old_name_len,
|
||||
remaining_names_len - old_name_len);
|
||||
/* Now copy new_str */
|
||||
memcpy(reg_name, reg_names_map[i].new_str,
|
||||
new_name_len);
|
||||
names_len -= old_name_len;
|
||||
names_len += new_name_len;
|
||||
}
|
||||
|
||||
reg_name = memchr(reg_name, '\0', remaining_names_len);
|
||||
if (!reg_name)
|
||||
break;
|
||||
|
||||
reg_name += 1;
|
||||
|
||||
remaining_names_len = names_len -
|
||||
(reg_name - reg_names);
|
||||
}
|
||||
|
||||
fdt_setprop(fdt, off, "reg-names", reg_names, names_len);
|
||||
off = fdt_node_offset_by_compatible(fdt, off,
|
||||
"fsl,lx2160a-pcie");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TARGET_LX2160AQDS)
|
||||
void esdhc_dspi_status_fixup(void *blob)
|
||||
{
|
||||
|
@ -9,6 +9,7 @@ CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
|
||||
CONFIG_AHCI=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_OF_BOARD_FIXUP=y
|
||||
CONFIG_OF_STDOUT_VIA_ALIAS=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
|
@ -10,6 +10,7 @@ CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
|
||||
CONFIG_AHCI=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_OF_BOARD_FIXUP=y
|
||||
CONFIG_OF_STDOUT_VIA_ALIAS=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
|
Loading…
Reference in New Issue
Block a user