diff --git a/drivers/st/clk/stm32mp1_clk.c b/drivers/st/clk/stm32mp1_clk.c index 0cc87cc..a16f36d 100644 --- a/drivers/st/clk/stm32mp1_clk.c +++ b/drivers/st/clk/stm32mp1_clk.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -1600,20 +1601,25 @@ bool pll4_preserve = false; bool pll4_bootrom = false; const fdt32_t *pkcs_cell; + void *fdt; + + if (fdt_get_address(&fdt) == 0) { + return false; + } /* Check status field to disable security */ if (!fdt_get_rcc_secure_status()) { mmio_write_32(rcc_base + RCC_TZCR, 0); } - ret = fdt_rcc_read_uint32_array("st,clksrc", clksrc, - (uint32_t)CLKSRC_NB); + ret = fdt_rcc_read_uint32_array("st,clksrc", (uint32_t)CLKSRC_NB, + clksrc); if (ret < 0) { return -FDT_ERR_NOTFOUND; } - ret = fdt_rcc_read_uint32_array("st,clkdiv", clkdiv, - (uint32_t)CLKDIV_NB); + ret = fdt_rcc_read_uint32_array("st,clkdiv", (uint32_t)CLKDIV_NB, + clkdiv); if (ret < 0) { return -FDT_ERR_NOTFOUND; } @@ -1628,8 +1634,8 @@ continue; } - ret = fdt_read_uint32_array(plloff[i], "cfg", - pllcfg[i], (int)PLLCFG_NB); + ret = fdt_read_uint32_array(fdt, plloff[i], "cfg", + (int)PLLCFG_NB, pllcfg[i]); if (ret < 0) { return -FDT_ERR_NOTFOUND; } @@ -1800,8 +1806,8 @@ if (ret != 0) { return ret; } - ret = fdt_read_uint32_array(plloff[i], "csg", csg, - (uint32_t)PLLCSG_NB); + ret = fdt_read_uint32_array(fdt, plloff[i], "csg", + (uint32_t)PLLCSG_NB, csg); if (ret == 0) { stm32mp1_pll_csg(i, csg); } else if (ret != -FDT_ERR_NOTFOUND) { diff --git a/drivers/st/clk/stm32mp_clkfunc.c b/drivers/st/clk/stm32mp_clkfunc.c index 87c8e2b..6404d99 100644 --- a/drivers/st/clk/stm32mp_clkfunc.c +++ b/drivers/st/clk/stm32mp_clkfunc.c @@ -10,6 +10,7 @@ #include +#include #include #include @@ -200,8 +201,8 @@ * @param count: number of parameters to be read * @return: 0 on succes or a negative value on error */ -int fdt_rcc_read_uint32_array(const char *prop_name, - uint32_t *array, uint32_t count) +int fdt_rcc_read_uint32_array(const char *prop_name, uint32_t count, + uint32_t *array) { int node; void *fdt; @@ -215,7 +216,7 @@ return -FDT_ERR_NOTFOUND; } - return fdt_read_uint32_array(node, prop_name, array, count); + return fdt_read_uint32_array(fdt, node, prop_name, count, array); } /* diff --git a/drivers/st/ddr/stm32mp1_ram.c b/drivers/st/ddr/stm32mp1_ram.c index 40cd455..273dec0 100644 --- a/drivers/st/ddr/stm32mp1_ram.c +++ b/drivers/st/ddr/stm32mp1_ram.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -223,10 +224,10 @@ INFO("RAM: %s\n", config.info.name); for (idx = 0; idx < ARRAY_SIZE(param); idx++) { - ret = fdt_read_uint32_array(node, param[idx].name, + ret = fdt_read_uint32_array(fdt, node, param[idx].name, + param[idx].size, (void *)((uintptr_t)&config + - param[idx].offset), - param[idx].size); + param[idx].offset)); VERBOSE("%s: %s[0x%x] = %d\n", __func__, param[idx].name, param[idx].size, ret); diff --git a/include/drivers/st/stm32mp_clkfunc.h b/include/drivers/st/stm32mp_clkfunc.h index 0769167..0902f44 100644 --- a/include/drivers/st/stm32mp_clkfunc.h +++ b/include/drivers/st/stm32mp_clkfunc.h @@ -21,8 +21,8 @@ int fdt_get_rcc_node(void *fdt); uint32_t fdt_rcc_read_addr(void); -int fdt_rcc_read_uint32_array(const char *prop_name, - uint32_t *array, uint32_t count); +int fdt_rcc_read_uint32_array(const char *prop_name, uint32_t count, + uint32_t *array); int fdt_rcc_subnode_offset(const char *name); const fdt32_t *fdt_rcc_read_prop(const char *prop_name, int *lenp); bool fdt_get_rcc_secure_status(void); diff --git a/plat/st/common/include/stm32mp_dt.h b/plat/st/common/include/stm32mp_dt.h index a29d914..92f3d65 100644 --- a/plat/st/common/include/stm32mp_dt.h +++ b/plat/st/common/include/stm32mp_dt.h @@ -30,8 +30,6 @@ uint8_t fdt_get_status(int node); uint32_t fdt_read_uint32_default(int node, const char *prop_name, uint32_t dflt_value); -int fdt_read_uint32_array(int node, const char *prop_name, - uint32_t *array, uint32_t count); int fdt_get_reg_props_by_name(int node, const char *name, uintptr_t *base, size_t *size); int dt_set_stdout_pinctrl(void); diff --git a/plat/st/common/stm32mp_dt.c b/plat/st/common/stm32mp_dt.c index acb323c..6b76424 100644 --- a/plat/st/common/stm32mp_dt.c +++ b/plat/st/common/stm32mp_dt.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -155,39 +156,6 @@ } /******************************************************************************* - * This function reads a series of parameters in a node property - * (generic use of fdt library). - * It reads the values inside the device tree, from property name and node. - * The number of parameters is also indicated as entry parameter. - * Returns 0 on success and a negative FDT error code on failure. - * If success, values are stored at the third parameter address. - ******************************************************************************/ -int fdt_read_uint32_array(int node, const char *prop_name, uint32_t *array, - uint32_t count) -{ - const fdt32_t *cuint; - int len; - uint32_t i; - - cuint = fdt_getprop(fdt, node, prop_name, &len); - if (cuint == NULL) { - return -FDT_ERR_NOTFOUND; - } - - if ((uint32_t)len != (count * sizeof(uint32_t))) { - return -FDT_ERR_BADLAYOUT; - } - - for (i = 0; i < ((uint32_t)len / sizeof(uint32_t)); i++) { - *array = fdt32_to_cpu(*cuint); - array++; - cuint++; - } - - return 0; -} - -/******************************************************************************* * This function fills reg node info (base & size) with an index found by * checking the reg-names node. * Returns 0 on success and a negative FDT error code on failure. @@ -396,7 +364,7 @@ assert((fdt_get_node_parent_address_cells(node) == 1) && (fdt_get_node_parent_size_cells(node) == 1)); - if (fdt_read_uint32_array(node, "reg", array, 4) < 0) { + if (fdt_read_uint32_array(fdt, node, "reg", 4, array) < 0) { return 0; } @@ -421,7 +389,7 @@ assert((fdt_get_node_parent_address_cells(node) == 1) && (fdt_get_node_parent_size_cells(node) == 1)); - if (fdt_read_uint32_array(node, "reg", array, 4) < 0) { + if (fdt_read_uint32_array(fdt, node, "reg", 4, array) < 0) { return 0; } diff --git a/plat/st/stm32mp1/platform.mk b/plat/st/stm32mp1/platform.mk index 5ce7a9c..b0ba82a 100644 --- a/plat/st/stm32mp1/platform.mk +++ b/plat/st/stm32mp1/platform.mk @@ -62,7 +62,8 @@ include lib/libfdt/libfdt.mk -PLAT_BL_COMMON_SOURCES := plat/st/common/stm32mp_common.c \ +PLAT_BL_COMMON_SOURCES := common/fdt_wrappers.c \ + plat/st/common/stm32mp_common.c \ plat/st/stm32mp1/stm32mp1_private.c PLAT_BL_COMMON_SOURCES += drivers/st/uart/aarch32/stm32_console.S