mx6qsabreauto: Fix the EIM clock for the mx6qp variant
PATCH 1/1 mx6qsabreauto: Fix the EIM clock for the mx6qp variant
From: Fabio Estevam <[email protected]>
On the MX6Q the aclk_eim_slow_podf field is '1' after POR, while on the MX6DQP it is '3'.
This makes the EIM clock to be only 66MHz on the mx6qp variant, instead of 132 MHz.
Instead of relying on the POR values for the CSMR1 register, make sure to manually configure the clk_eim_slow_sel field as '00' so that EIM clock is derived from AXI clock and the aclk_eim_slow_podf field as '1' so that EIM clock can be AXI clock divided by 2.
This way a consistent EIM clock frequency is configured for all the mx6 variants.
--- board/freescale/mx6qsabreauto/mx6qsabreauto.c | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
board/freescale/mx6qsabreauto/mx6qsabreauto.c +28 -0
@@ -231,6 +231,33 @@ static void eimnor_cs_setup(void)set_chipselect_size (CS0_128 ); } +static void eim_clk_setup (void ) +{ +struct mxc_ccm_reg *imx_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR ; +int cscmr1, ccgr6; + + +/* Turn off EIM clock */ + ccgr6 =readl (&imx_ccm->CCGR6); + ccgr6 &= ~(0x3 <<10 ); +writel (ccgr6, &imx_ccm->CCGR6); + +/* +* Configure clk_eim_slow_sel = 00 --> derive clock from AXI clk root +* and aclk_eim_slow_podf = 01 --> divide by 2 +* so that we can have EIM at the maximum clock of 132MHz +*/ + cscmr1 =readl (&imx_ccm->cscmr1); + cscmr1 &= ~(MXC_CCM_CSCMR1_ACLK_EMI_SLOW_MASK | +MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_MASK ); + cscmr1 |= (1 <<MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_OFFSET ); +writel (cscmr1, &imx_ccm->cscmr1); + +/* Turn on EIM clock */ + ccgr6 |= (0x3 <<10 ); +writel (ccgr6, &imx_ccm->CCGR6); +} +static void setup_iomux_eimnor (void ) {imx_iomux_v3_setup_multiple_pads (eimnor_pads,ARRAY_SIZE (eimnor_pads));
@@ -519,6 +546,7 @@ int board_early_init_f(void)#ifdef CONFIG_NAND_MXS setup_gpmi_nand ();#endif +eim_clk_setup ();return 0 ; }
Signature · 1 line
2.7.4
PATCH 1/1 mx6qsabreauto: Fix the EIM clock for the mx6qp variant
Quoted 18 lines
-----Original Message-----
From: Fabio Estevam [mailto:festevam at gmail.com]
Sent: Tuesday, December 27, 2016 9:05 AM
To: sbabic at denx.de
Cc: Peng Fan <[email protected]>; u-boot at lists.denx.de; Fabio Estevam <[email protected]>
Subject: [PATCH] mx6qsabreauto: Fix the EIM clock for the mx6qp variantFrom: Fabio Estevam <[email protected]>
On the MX6Q the
aclk_eim_slow_podffield is '1' after POR, while on the MX6DQP it is '3'.This makes the EIM clock to be only 66MHz on the mx6qp variant, instead of 132 MHz.
Quoted 8 lines
Instead of relying on the POR values for the CSMR1 register, make sure to manually configure the
clk_eim_slow_selfield as '00' so that EIM clock is derived from AXI clock and theaclk_eim_slow_podffield as '1' so that EIM clock can be AXI clock divided by 2.This way a consistent EIM clock frequency is configured for all the mx6 variants.
Signed-off-by Fabio Estevam <[email protected]>
PATCH 1/1 mx6qsabreauto: Fix the EIM clock for the mx6qp variant
In reply to Fabio EstevamQuoted 61 lines · Fabio Estevam
From: Fabio Estevam <[email protected]>
On the MX6Q the
aclk_eim_slow_podffield is '1' after POR, while on the MX6DQP it is '3'.This makes the EIM clock to be only 66MHz on the mx6qp variant, instead of 132 MHz.
Instead of relying on the POR values for the CSMR1 register, make sure to manually configure the
clk_eim_slow_selfield as '00' so that EIM clock is derived from AXI clock and theaclk_eim_slow_podffield as '1' so that EIM clock can be AXI clock divided by 2.This way a consistent EIM clock frequency is configured for all the mx6 variants.
Signed-off-by Fabio Estevam <[email protected]>--- board/freescale/mx6qsabreauto/mx6qsabreauto.c | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)board/freescale/mx6qsabreauto/mx6qsabreauto.c +27
-0@@ -231,6 +231,33 @@ static void eimnor_cs_setup(void)set_chipselect_size (CS0_128 ); } +static void eim_clk_setup (void ) +{ +struct mxc_ccm_reg *imx_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR ; +int cscmr1, ccgr6; + + +/* Turn off EIM clock */ + ccgr6 =readl (&imx_ccm->CCGR6); + ccgr6 &= ~(0x3 <<10 ); +writel (ccgr6, &imx_ccm->CCGR6); + +/* +* Configure clk_eim_slow_sel = 00 --> derive clock from AXI clk root +* and aclk_eim_slow_podf = 01 --> divide by 2 +* so that we can have EIM at the maximum clock of 132MHz +*/ + cscmr1 =readl (&imx_ccm->cscmr1); + cscmr1 &= ~(MXC_CCM_CSCMR1_ACLK_EMI_SLOW_MASK | +MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_MASK ); + cscmr1 |= (1 <<MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_OFFSET ); +writel (cscmr1, &imx_ccm->cscmr1); + +/* Turn on EIM clock */ + ccgr6 |= (0x3 <<10 ); +writel (ccgr6, &imx_ccm->CCGR6); +} +static void setup_iomux_eimnor (void ) {imx_iomux_v3_setup_multiple_pads (eimnor_pads,ARRAY_SIZE (eimnor_pads));
board/freescale/mx6qsabreauto/mx6qsabreauto.c int board_early_init_f(void) · line 552
Quoted 7 lines
board/freescale/mx6qsabreauto/mx6qsabreauto.c +1
-0@@ -519,6 +546,7 @@ int board_early_init_f(void)#ifdef CONFIG_NAND_MXS setup_gpmi_nand ();#endif +eim_clk_setup ();return 0 ; }
Applied to u-boot-imx, -master, thanks !
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================