fix(rcar): add mandatory fields in 'reserved-memory' node

On the R-Car Gen3 boards, u-boot will apply this reserved-memory node
directly on the Linux device-tree.

The linux kernel requires that the ranges, #address-cells
and #size-cells values must be set in the reserved-memory node.

Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
Change-Id: Ic9b9bd3f2177a224d0931f6a4f4818a87904a493
This commit is contained in:
Detlev Casanova 2022-12-01 17:57:31 -05:00
parent c41b8e90f7
commit f945498faa

View file

@ -236,6 +236,56 @@ static void bl2_lossy_setting(uint32_t no, uint64_t start_addr,
mmio_read_32(AXI_DCMPAREACRA0 + 0x8 * no),
mmio_read_32(AXI_DCMPAREACRB0 + 0x8 * no));
}
static int bl2_create_reserved_memory(void)
{
int ret;
int fcnlnode = fdt_add_subnode(fdt, 0, "reserved-memory");
if (fcnlnode < 0) {
NOTICE("BL2: Cannot create reserved mem node (ret=%i)\n",
fcnlnode);
panic();
}
ret = fdt_setprop(fdt, fcnlnode, "ranges", NULL, 0);
if (ret < 0) {
NOTICE("BL2: Cannot add FCNL ranges prop (ret=%i)\n", ret);
panic();
}
ret = fdt_setprop_u32(fdt, fcnlnode, "#address-cells", 2);
if (ret < 0) {
NOTICE("BL2: Cannot add FCNL #address-cells prop (ret=%i)\n", ret);
panic();
}
ret = fdt_setprop_u32(fdt, fcnlnode, "#size-cells", 2);
if (ret < 0) {
NOTICE("BL2: Cannot add FCNL #size-cells prop (ret=%i)\n", ret);
panic();
}
return fcnlnode;
}
static void bl2_create_fcnl_reserved_memory(void)
{
int fcnlnode;
NOTICE("BL2: Lossy Decomp areas\n");
fcnlnode = bl2_create_reserved_memory();
bl2_lossy_setting(0, LOSSY_ST_ADDR0, LOSSY_END_ADDR0,
LOSSY_FMT0, LOSSY_ENA_DIS0, fcnlnode);
bl2_lossy_setting(1, LOSSY_ST_ADDR1, LOSSY_END_ADDR1,
LOSSY_FMT1, LOSSY_ENA_DIS1, fcnlnode);
bl2_lossy_setting(2, LOSSY_ST_ADDR2, LOSSY_END_ADDR2,
LOSSY_FMT2, LOSSY_ENA_DIS2, fcnlnode);
}
#else
static void bl2_create_fcnl_reserved_memory(void) {}
#endif
void bl2_plat_flush_bl31_params(void)
@ -820,9 +870,6 @@ void bl2_el3_early_platform_setup(u_register_t arg1, u_register_t arg2,
#else
const char *boot_hyper160 = "HyperFlash(160MHz)";
#endif
#if (RCAR_LOSSY_ENABLE == 1)
int fcnlnode;
#endif
bl2_init_generic_timer();
@ -1099,23 +1146,8 @@ lcm_state:
reg &= ~((uint32_t) 1 << 12);
mmio_write_32(CPG_PLL0CR, reg);
}
#if (RCAR_LOSSY_ENABLE == 1)
NOTICE("BL2: Lossy Decomp areas\n");
fcnlnode = fdt_add_subnode(fdt, 0, "reserved-memory");
if (fcnlnode < 0) {
NOTICE("BL2: Cannot create reserved mem node (ret=%i)\n",
fcnlnode);
panic();
}
bl2_lossy_setting(0, LOSSY_ST_ADDR0, LOSSY_END_ADDR0,
LOSSY_FMT0, LOSSY_ENA_DIS0, fcnlnode);
bl2_lossy_setting(1, LOSSY_ST_ADDR1, LOSSY_END_ADDR1,
LOSSY_FMT1, LOSSY_ENA_DIS1, fcnlnode);
bl2_lossy_setting(2, LOSSY_ST_ADDR2, LOSSY_END_ADDR2,
LOSSY_FMT2, LOSSY_ENA_DIS2, fcnlnode);
#endif
bl2_create_fcnl_reserved_memory();
fdt_pack(fdt);
NOTICE("BL2: FDT at %p\n", fdt);