mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 01:54:22 +00:00
feat(clk): add a minimal clock framework
This is mainly a clock interface with clk_ops callbacks. Those callbacks are: enable, disable, get_rate, set_parent, and is_enabled. This framework is compiled for STM32MP1. Change-Id: I5119a2aeaf103ceaae7a60d9e423caf0c148d794 Signed-off-by: Ludovic Barre <ludovic.barre@st.com> Signed-off-by: Gabriel Fernandez <gabriel.fernandez@st.com>
This commit is contained in:
parent
47833abd77
commit
847c6bc8e6
3 changed files with 94 additions and 0 deletions
65
drivers/clk/clk.c
Normal file
65
drivers/clk/clk.c
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, STMicroelectronics - All Rights Reserved
|
||||||
|
* Author(s): Ludovic Barre, <ludovic.barre@st.com> for STMicroelectronics.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <drivers/clk.h>
|
||||||
|
|
||||||
|
static const struct clk_ops *ops;
|
||||||
|
|
||||||
|
int clk_enable(unsigned long id)
|
||||||
|
{
|
||||||
|
assert((ops != NULL) && (ops->enable != NULL));
|
||||||
|
|
||||||
|
return ops->enable(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clk_disable(unsigned long id)
|
||||||
|
{
|
||||||
|
assert((ops != NULL) && (ops->disable != NULL));
|
||||||
|
|
||||||
|
ops->disable(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long clk_get_rate(unsigned long id)
|
||||||
|
{
|
||||||
|
assert((ops != NULL) && (ops->get_rate != NULL));
|
||||||
|
|
||||||
|
return ops->get_rate(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
int clk_get_parent(unsigned long id)
|
||||||
|
{
|
||||||
|
assert((ops != NULL) && (ops->get_parent != NULL));
|
||||||
|
|
||||||
|
return ops->get_parent(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool clk_is_enabled(unsigned long id)
|
||||||
|
{
|
||||||
|
assert((ops != NULL) && (ops->is_enabled != NULL));
|
||||||
|
|
||||||
|
return ops->is_enabled(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the clk. The fields in the provided clk
|
||||||
|
* ops pointer must be valid.
|
||||||
|
*/
|
||||||
|
void clk_register(const struct clk_ops *ops_ptr)
|
||||||
|
{
|
||||||
|
assert((ops_ptr != NULL) &&
|
||||||
|
(ops_ptr->enable != NULL) &&
|
||||||
|
(ops_ptr->disable != NULL) &&
|
||||||
|
(ops_ptr->get_rate != NULL) &&
|
||||||
|
(ops_ptr->get_parent != NULL) &&
|
||||||
|
(ops_ptr->is_enabled != NULL));
|
||||||
|
|
||||||
|
ops = ops_ptr;
|
||||||
|
}
|
28
include/drivers/clk.h
Normal file
28
include/drivers/clk.h
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021, STMicroelectronics - All Rights Reserved
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CLK_H
|
||||||
|
#define CLK_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
struct clk_ops {
|
||||||
|
int (*enable)(unsigned long id);
|
||||||
|
void (*disable)(unsigned long id);
|
||||||
|
unsigned long (*get_rate)(unsigned long id);
|
||||||
|
int (*get_parent)(unsigned long id);
|
||||||
|
bool (*is_enabled)(unsigned long id);
|
||||||
|
};
|
||||||
|
|
||||||
|
int clk_enable(unsigned long id);
|
||||||
|
void clk_disable(unsigned long id);
|
||||||
|
unsigned long clk_get_rate(unsigned long id);
|
||||||
|
bool clk_is_enabled(unsigned long id);
|
||||||
|
int clk_get_parent(unsigned long id);
|
||||||
|
|
||||||
|
void clk_register(const struct clk_ops *ops);
|
||||||
|
|
||||||
|
#endif /* CLK_H */
|
|
@ -189,6 +189,7 @@ PLAT_BL_COMMON_SOURCES += ${XLAT_TABLES_LIB_SRCS}
|
||||||
PLAT_BL_COMMON_SOURCES += lib/cpus/aarch32/cortex_a7.S
|
PLAT_BL_COMMON_SOURCES += lib/cpus/aarch32/cortex_a7.S
|
||||||
|
|
||||||
PLAT_BL_COMMON_SOURCES += drivers/arm/tzc/tzc400.c \
|
PLAT_BL_COMMON_SOURCES += drivers/arm/tzc/tzc400.c \
|
||||||
|
drivers/clk/clk.c \
|
||||||
drivers/delay_timer/delay_timer.c \
|
drivers/delay_timer/delay_timer.c \
|
||||||
drivers/delay_timer/generic_delay_timer.c \
|
drivers/delay_timer/generic_delay_timer.c \
|
||||||
drivers/st/bsec/bsec.c \
|
drivers/st/bsec/bsec.c \
|
||||||
|
|
Loading…
Add table
Reference in a new issue