imx: imx_clock: uart: Add UART clock API
authorBryan O'Donoghue <[email protected]>
Wed, 30 May 2018 18:56:54 +0000 (19:56 +0100)
committerBryan O'Donoghue <[email protected]>
Tue, 4 Sep 2018 12:36:22 +0000 (13:36 +0100)
This patch adds an API to configure up the base UART clocks, taking a
bit-mask of silicon specific bits as an input from a higher layer in order
to direct the necessary clock source.

Signed-off-by: Bryan O'Donoghue <[email protected]>
plat/imx/common/imx_clock.c
plat/imx/common/include/imx_clock.h

index 929cf8d3ba6c5e2fccce88982f871bbfa55868f4..8fb42e3e0c830f0442c7bdd7e49cf7cb4d354f1c 100644 (file)
@@ -50,3 +50,35 @@ void imx_clock_gate_enable(unsigned int id, bool enable)
 
        mmio_write_32(addr, CCM_CCGR_SETTING0_DOM_CLK_ALWAYS);
 }
+
+void imx_clock_enable_uart(unsigned int uart_id, uint32_t uart_clk_en_bits)
+{
+       unsigned int ccm_trgt_id = CCM_TRT_ID_UART1_CLK_ROOT + uart_id;
+       unsigned int ccm_ccgr_id = CCM_CCGR_ID_UART1 + uart_id;
+
+       /* Check for error */
+       if (uart_id > MXC_MAX_UART_NUM)
+               return;
+
+       /* Set target register values */
+       imx_clock_target_set(ccm_trgt_id, uart_clk_en_bits);
+
+       /* Enable the clock gate */
+       imx_clock_gate_enable(ccm_ccgr_id, true);
+}
+
+void imx_clock_disable_uart(unsigned int uart_id)
+{
+       unsigned int ccm_trgt_id = CCM_TRT_ID_UART1_CLK_ROOT + uart_id;
+       unsigned int ccm_ccgr_id = CCM_CCGR_ID_UART1 + uart_id;
+
+       /* Check for error */
+       if (uart_id > MXC_MAX_UART_NUM)
+               return;
+
+       /* Disable the clock gate */
+       imx_clock_gate_enable(ccm_ccgr_id, false);
+
+       /* Clear the target */
+       imx_clock_target_clr(ccm_trgt_id, 0xFFFFFFFF);
+}
index f685a14365176802636522f2db6af85f121e1344..f1d1912dd81ae91fee8a10bb323a49d1f815fd6a 100644 (file)
@@ -989,4 +989,7 @@ void imx_clock_gate_enable(unsigned int id, bool enable);
 
 void imx_clock_init(void);
 
+void imx_clock_enable_uart(unsigned int uart_id, uint32_t uart_clk_en_bits);
+void imx_clock_disable_uart(unsigned int uart_id);
+
 #endif /* __IMX_CLOCK_H__ */