mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-21 19:15:44 +08:00
bsps/arm/imxrt: Add FDT and FDT helper for QTMR
Makes it simpler to access the QTMR in an application via a FDT name or link in an application specific FDT entry.
This commit is contained in:
committed by
Christian Mauderer
parent
53bd5e3246
commit
65ab1cda10
+197
-141
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,9 @@
|
||||
#define _FSL_QTMR_H_
|
||||
|
||||
#include "fsl_common.h"
|
||||
#ifdef __rtems__
|
||||
#include <rtems.h>
|
||||
#endif /* __rtems__ */
|
||||
|
||||
/*!
|
||||
* @addtogroup qtmr
|
||||
@@ -177,6 +180,37 @@ extern "C" {
|
||||
* @name Initialization and deinitialization
|
||||
* @{
|
||||
*/
|
||||
#ifdef __rtems__
|
||||
/*!
|
||||
* @brief Return the timer base based on a FDT node.
|
||||
*
|
||||
* @param fdt Pointer to the fdt
|
||||
* @param node The FDT node
|
||||
*
|
||||
* @return Pointer to the timer. NULL on error (for example if node isn't
|
||||
* compatible).
|
||||
*/
|
||||
TMR_Type *QTMR_get_regs_from_fdt(const void *fdt, int node);
|
||||
|
||||
/*!
|
||||
* @brief Return the timer IRQ vector based on a FDT node.
|
||||
*
|
||||
* @param fdt Pointer to the fdt
|
||||
* @param node The FDT node
|
||||
*
|
||||
* @return IRQ vector number. BSP_INTERRUPT_VECTOR_INVALID on error.
|
||||
*/
|
||||
rtems_vector_number QTMR_get_IRQ_from_fdt(const void *fdt, int node);
|
||||
|
||||
/*!
|
||||
* @brief Return the clock source frequency of the quad timer.
|
||||
*
|
||||
* @param base Quad Timer peripheral base address.
|
||||
*
|
||||
* @return IRQ vector number. BSP_INTERRUPT_VECTOR_INVALID on error.
|
||||
*/
|
||||
uint32_t QTMR_get_src_clk(TMR_Type *base);
|
||||
#endif /* __rtems__ */
|
||||
|
||||
/*!
|
||||
* @brief Ungates the Quad Timer clock and configures the peripheral for basic operation.
|
||||
|
||||
@@ -101,6 +101,30 @@
|
||||
reg = <0x40100000 0x00100000>;
|
||||
ranges;
|
||||
|
||||
qtimer4: timer@401e8000 {
|
||||
compatible = "nxp,imxrt-qtimer";
|
||||
reg = <0x401e8000 0x4000>;
|
||||
interrupts = <136>;
|
||||
};
|
||||
|
||||
qtimer3: timer@401e4000 {
|
||||
compatible = "nxp,imxrt-qtimer";
|
||||
reg = <0x401e4000 0x4000>;
|
||||
interrupts = <135>;
|
||||
};
|
||||
|
||||
qtimer2: timer@401e0000 {
|
||||
compatible = "nxp,imxrt-qtimer";
|
||||
reg = <0x401e0000 0x4000>;
|
||||
interrupts = <134>;
|
||||
};
|
||||
|
||||
qtimer1: timer@401dc000 {
|
||||
compatible = "nxp,imxrt-qtimer";
|
||||
reg = <0x401dc000 0x4000>;
|
||||
interrupts = <133>;
|
||||
};
|
||||
|
||||
gpio4: gpio@401c4000 {
|
||||
compatible = "fsl,imxrt-gpio",
|
||||
"fsl,imx6ul-gpio", "fsl,imx35-gpio";
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
*/
|
||||
|
||||
#include "fsl_qtmr.h"
|
||||
#ifdef __rtems__
|
||||
#include <bsp.h>
|
||||
#include <bsp/irq.h>
|
||||
#include <libfdt.h>
|
||||
#endif /* __rtems__ */
|
||||
|
||||
/* Component ID definition, used by tools. */
|
||||
#ifndef FSL_COMPONENT_ID
|
||||
@@ -56,6 +61,41 @@ static uint32_t QTMR_GetInstance(TMR_Type *base)
|
||||
return instance;
|
||||
}
|
||||
|
||||
#ifdef __rtems__
|
||||
TMR_Type *QTMR_get_regs_from_fdt(const void *fdt, int node)
|
||||
{
|
||||
int rv;
|
||||
TMR_Type *regs;
|
||||
|
||||
rv = fdt_node_check_compatible(fdt, node, "nxp,imxrt-qtimer");
|
||||
if (rv != 0) {
|
||||
return NULL;
|
||||
}
|
||||
regs = imx_get_reg_of_node(fdt, node);
|
||||
return regs;
|
||||
}
|
||||
|
||||
rtems_vector_number QTMR_get_IRQ_from_fdt(const void *fdt, int node)
|
||||
{
|
||||
int rv;
|
||||
rtems_vector_number irq;
|
||||
|
||||
rv = fdt_node_check_compatible(fdt, node, "nxp,imxrt-qtimer");
|
||||
if (rv != 0) {
|
||||
return BSP_INTERRUPT_VECTOR_INVALID;
|
||||
}
|
||||
irq = imx_get_irq_of_node(fdt, node, 0);
|
||||
return irq;
|
||||
}
|
||||
|
||||
uint32_t QTMR_get_src_clk(TMR_Type *base)
|
||||
{
|
||||
(void) base;
|
||||
|
||||
return CLOCK_GetFreq(kCLOCK_IpgClk);
|
||||
}
|
||||
|
||||
#endif /* __rtems__ */
|
||||
/*!
|
||||
* brief Ungates the Quad Timer clock and configures the peripheral for basic operation.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user