xref: /rk3399_ARM-atf/plat/imx/common/imx7_clock.c (revision 36044baf08a9f816a8a062a8a50ede12a816a6dd)
173f432a4SBryan O'Donoghue /*
273f432a4SBryan O'Donoghue  * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
373f432a4SBryan O'Donoghue  *
473f432a4SBryan O'Donoghue  * SPDX-License-Identifier: BSD-3-Clause
573f432a4SBryan O'Donoghue  */
673f432a4SBryan O'Donoghue #include <imx_regs.h>
773f432a4SBryan O'Donoghue #include <imx_clock.h>
873f432a4SBryan O'Donoghue 
imx7_clock_uart_init(void)973f432a4SBryan O'Donoghue static void imx7_clock_uart_init(void)
1073f432a4SBryan O'Donoghue {
1173f432a4SBryan O'Donoghue 	unsigned int i;
1273f432a4SBryan O'Donoghue 
1373f432a4SBryan O'Donoghue 	for (i = 0; i < MXC_MAX_UART_NUM; i++)
1473f432a4SBryan O'Donoghue 		imx_clock_disable_uart(i);
1573f432a4SBryan O'Donoghue }
1673f432a4SBryan O'Donoghue 
imx7_clock_wdog_init(void)175ff1751dSBryan O'Donoghue static void imx7_clock_wdog_init(void)
185ff1751dSBryan O'Donoghue {
195ff1751dSBryan O'Donoghue 	unsigned int i;
205ff1751dSBryan O'Donoghue 
215ff1751dSBryan O'Donoghue 	for (i = 0; i < MXC_MAX_WDOG_NUM; i++)
225ff1751dSBryan O'Donoghue 		imx_clock_disable_wdog(i);
235ff1751dSBryan O'Donoghue }
245ff1751dSBryan O'Donoghue 
imx7_clock_usb_init(void)25*ddfb773fSBryan O'Donoghue static void imx7_clock_usb_init(void)
26*ddfb773fSBryan O'Donoghue {
27*ddfb773fSBryan O'Donoghue 	/* Disable the clock root */
28*ddfb773fSBryan O'Donoghue 	imx_clock_target_clr(CCM_TRT_ID_USB_HSIC_CLK_ROOT, 0xFFFFFFFF);
29*ddfb773fSBryan O'Donoghue }
30*ddfb773fSBryan O'Donoghue 
imx_clock_init(void)3173f432a4SBryan O'Donoghue void imx_clock_init(void)
3273f432a4SBryan O'Donoghue {
3373f432a4SBryan O'Donoghue 	/*
3473f432a4SBryan O'Donoghue 	 * The BootROM hands off to the next stage with the internal 24 MHz XTAL
3573f432a4SBryan O'Donoghue 	 * crystal already clocking the main PLL, which is very handy.
3673f432a4SBryan O'Donoghue 	 * Here we should enable whichever peripherals are required for ATF and
3773f432a4SBryan O'Donoghue 	 * OPTEE.
3873f432a4SBryan O'Donoghue 	 *
3973f432a4SBryan O'Donoghue 	 * Subsequent stages in the boot process such as u-boot and Linux
4073f432a4SBryan O'Donoghue 	 * already have a significant and mature code-base around clocks, so our
4173f432a4SBryan O'Donoghue 	 * objective should be to enable what we need for ATF/OPTEE without
4273f432a4SBryan O'Donoghue 	 * breaking any existing upstream code in Linux and u-boot.
4373f432a4SBryan O'Donoghue 	 */
4473f432a4SBryan O'Donoghue 
4573f432a4SBryan O'Donoghue 	/* Initialize UART clocks */
4673f432a4SBryan O'Donoghue 	imx7_clock_uart_init();
475ff1751dSBryan O'Donoghue 
485ff1751dSBryan O'Donoghue 	/* Watchdog clocks */
49*ddfb773fSBryan O'Donoghue 
505ff1751dSBryan O'Donoghue 	imx7_clock_wdog_init();
51*ddfb773fSBryan O'Donoghue 
52*ddfb773fSBryan O'Donoghue 	/* USB clocks */
53*ddfb773fSBryan O'Donoghue 	imx7_clock_usb_init();
54*ddfb773fSBryan O'Donoghue 
5573f432a4SBryan O'Donoghue }
56