mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
feat(nxp-clk): dynamic map of the clock modules
Add all clock modules as entries in MMU using dynamic regions. Change-Id: I56f724ced4bd024554c7b38afd14ea420de80cc6 Signed-off-by: Ghennadi Procopciuc <ghennadi.procopciuc@nxp.com>
This commit is contained in:
parent
008925861f
commit
514c738045
3 changed files with 47 additions and 3 deletions
|
@ -7,6 +7,7 @@
|
|||
#include <common/debug.h>
|
||||
#include <drivers/clk.h>
|
||||
#include <lib/mmio.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
#include <s32cc-clk-ids.h>
|
||||
#include <s32cc-clk-modules.h>
|
||||
#include <s32cc-clk-regs.h>
|
||||
|
@ -1464,7 +1465,39 @@ static int s32cc_clk_set_parent(unsigned long id, unsigned long parent_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void s32cc_clk_register_drv(void)
|
||||
static int s32cc_clk_mmap_regs(const struct s32cc_clk_drv *drv)
|
||||
{
|
||||
const uintptr_t base_addrs[11] = {
|
||||
drv->fxosc_base,
|
||||
drv->armpll_base,
|
||||
drv->periphpll_base,
|
||||
drv->armdfs_base,
|
||||
drv->cgm0_base,
|
||||
drv->cgm1_base,
|
||||
drv->cgm5_base,
|
||||
drv->ddrpll_base,
|
||||
drv->mc_me,
|
||||
drv->mc_rgm,
|
||||
drv->rdc,
|
||||
};
|
||||
size_t i;
|
||||
int ret;
|
||||
|
||||
for (i = 0U; i < ARRAY_SIZE(base_addrs); i++) {
|
||||
ret = mmap_add_dynamic_region(base_addrs[i], base_addrs[i],
|
||||
PAGE_SIZE,
|
||||
MT_DEVICE | MT_RW | MT_SECURE);
|
||||
if (ret != 0) {
|
||||
ERROR("Failed to map clock module 0x%" PRIuPTR "\n",
|
||||
base_addrs[i]);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int s32cc_clk_register_drv(void)
|
||||
{
|
||||
static const struct clk_ops s32cc_clk_ops = {
|
||||
.enable = s32cc_clk_enable,
|
||||
|
@ -1475,7 +1508,15 @@ void s32cc_clk_register_drv(void)
|
|||
.get_parent = s32cc_clk_get_parent,
|
||||
.set_parent = s32cc_clk_set_parent,
|
||||
};
|
||||
const struct s32cc_clk_drv *drv;
|
||||
|
||||
clk_register(&s32cc_clk_ops);
|
||||
|
||||
drv = get_drv();
|
||||
if (drv == NULL) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return s32cc_clk_mmap_regs(drv);
|
||||
}
|
||||
|
||||
|
|
|
@ -184,7 +184,10 @@ int s32cc_init_early_clks(void)
|
|||
{
|
||||
int ret;
|
||||
|
||||
s32cc_clk_register_drv();
|
||||
ret = s32cc_clk_register_drv();
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = setup_fxosc();
|
||||
if (ret != 0) {
|
||||
|
|
|
@ -18,6 +18,6 @@ int s32cc_get_id_from_table(const struct s32cc_clk_array *const *clk_arr,
|
|||
struct s32cc_clk *s32cc_get_arch_clk(unsigned long id);
|
||||
int s32cc_get_clk_id(const struct s32cc_clk *clk, unsigned long *id);
|
||||
|
||||
void s32cc_clk_register_drv(void);
|
||||
int s32cc_clk_register_drv(void);
|
||||
|
||||
#endif /* S32CC_CLK_UTILS_H */
|
||||
|
|
Loading…
Add table
Reference in a new issue