mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
fsl-layerscape: Add fsl_esdhc peripheral clock support
Add esdhc peripheral clock support for NXP layerscape platforms: LS1046ARDB, LS1043ARDB, LS1012ARDB, LS1028ARDB, LS1088ARDB, LX2160ARDB Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com> Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
parent
001c8ea94a
commit
24cb6f2295
4 changed files with 78 additions and 19 deletions
|
@ -22,10 +22,12 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
void get_sys_info(struct sys_info *sys_info)
|
||||
{
|
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||
#if (defined(CONFIG_FSL_ESDHC) &&\
|
||||
defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)) ||\
|
||||
defined(CONFIG_SYS_DPAA_FMAN)
|
||||
|
||||
/* rcw_tmp is needed to get FMAN clock, or to get cluster group A
|
||||
* mux 2 clock for LS1043A/LS1046A.
|
||||
*/
|
||||
#if defined(CONFIG_SYS_DPAA_FMAN) || \
|
||||
defined(CONFIG_TARGET_LS1046ARDB) || \
|
||||
defined(CONFIG_TARGET_LS1043ARDB)
|
||||
u32 rcw_tmp;
|
||||
#endif
|
||||
struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_CLK_ADDR);
|
||||
|
@ -122,32 +124,32 @@ void get_sys_info(struct sys_info *sys_info)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
#define HWA_CGA_M2_CLK_SEL 0x00000007
|
||||
#define HWA_CGA_M2_CLK_SHIFT 0
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
||||
#if defined(CONFIG_TARGET_LS1046ARDB) || defined(CONFIG_TARGET_LS1043ARDB)
|
||||
rcw_tmp = in_be32(&gur->rcwsr[15]);
|
||||
switch ((rcw_tmp & HWA_CGA_M2_CLK_SEL) >> HWA_CGA_M2_CLK_SHIFT) {
|
||||
case 1:
|
||||
sys_info->freq_sdhc = freq_c_pll[1];
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1];
|
||||
break;
|
||||
#if defined(CONFIG_TARGET_LS1046ARDB)
|
||||
case 2:
|
||||
sys_info->freq_sdhc = freq_c_pll[1] / 2;
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1] / 2;
|
||||
break;
|
||||
#endif
|
||||
case 3:
|
||||
sys_info->freq_sdhc = freq_c_pll[1] / 3;
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1] / 3;
|
||||
break;
|
||||
#if defined(CONFIG_TARGET_LS1046ARDB)
|
||||
case 6:
|
||||
sys_info->freq_sdhc = freq_c_pll[0] / 2;
|
||||
sys_info->freq_cga_m2 = freq_c_pll[0] / 2;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
printf("Error: Unknown ESDHC clock select!\n");
|
||||
printf("Error: Unknown peripheral clock select!\n");
|
||||
break;
|
||||
}
|
||||
#else
|
||||
sys_info->freq_sdhc = (sys_info->freq_systembus /
|
||||
CONFIG_SYS_FSL_PCLK_DIV) /
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -183,9 +185,22 @@ int get_clocks(void)
|
|||
gd->mem_clk = sys_info.freq_ddrbus;
|
||||
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
gd->arch.sdhc_clk = sys_info.freq_sdhc;
|
||||
#if defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)
|
||||
#if defined(CONFIG_TARGET_LS1046ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2 / 2;
|
||||
#endif
|
||||
#if defined(CONFIG_TARGET_LS1043ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2;
|
||||
#endif
|
||||
#if defined(CONFIG_TARGET_LS1012ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_systembus;
|
||||
#endif
|
||||
#else
|
||||
gd->arch.sdhc_clk = (sys_info.freq_systembus /
|
||||
CONFIG_SYS_FSL_PCLK_DIV) /
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (gd->cpu_clk != 0)
|
||||
return 0;
|
||||
else
|
||||
|
|
|
@ -64,6 +64,9 @@ void get_sys_info(struct sys_info *sys_info)
|
|||
};
|
||||
|
||||
uint i, cluster;
|
||||
#if defined(CONFIG_TARGET_LS1028ARDB) || defined(CONFIG_TARGET_LS1088ARDB)
|
||||
uint rcw_tmp;
|
||||
#endif
|
||||
uint freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||
uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||
unsigned long sysclk = CONFIG_SYS_CLK_FREQ;
|
||||
|
@ -127,8 +130,39 @@ void get_sys_info(struct sys_info *sys_info)
|
|||
sys_info->freq_localbus = sys_info->freq_systembus /
|
||||
CONFIG_SYS_FSL_IFC_CLK_DIV;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(CONFIG_TARGET_LS1028ARDB) || defined(CONFIG_TARGET_LS1088ARDB)
|
||||
#define HWA_CGA_M2_CLK_SEL 0x00380000
|
||||
#define HWA_CGA_M2_CLK_SHIFT 19
|
||||
rcw_tmp = in_le32(&gur->rcwsr[5]);
|
||||
switch ((rcw_tmp & HWA_CGA_M2_CLK_SEL) >> HWA_CGA_M2_CLK_SHIFT) {
|
||||
case 1:
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1];
|
||||
break;
|
||||
case 2:
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1] / 2;
|
||||
break;
|
||||
case 3:
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1] / 3;
|
||||
break;
|
||||
case 4:
|
||||
sys_info->freq_cga_m2 = freq_c_pll[1] / 4;
|
||||
break;
|
||||
case 6:
|
||||
sys_info->freq_cga_m2 = freq_c_pll[0] / 2;
|
||||
break;
|
||||
case 7:
|
||||
sys_info->freq_cga_m2 = freq_c_pll[0] / 3;
|
||||
break;
|
||||
default:
|
||||
printf("Error: Unknown peripheral clock select!\n");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if defined(CONFIG_TARGET_LX2160ARDB) || defined(CONFIG_TARGET_LS2080ARDB)
|
||||
sys_info->freq_cga_m2 = sys_info->freq_systembus;
|
||||
#endif
|
||||
}
|
||||
|
||||
int get_clocks(void)
|
||||
{
|
||||
|
@ -141,7 +175,16 @@ int get_clocks(void)
|
|||
gd->arch.mem2_clk = sys_info.freq_ddrbus2;
|
||||
#endif
|
||||
#if defined(CONFIG_FSL_ESDHC)
|
||||
#if defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)
|
||||
#if defined(CONFIG_TARGET_LS1028ARDB) || defined(CONFIG_TARGET_LX2160ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2 / 2;
|
||||
#endif
|
||||
#if defined(CONFIG_TARGET_LS2080ARDB) || defined(CONFIG_TARGET_LS1088ARDB)
|
||||
gd->arch.sdhc_clk = sys_info.freq_cga_m2;
|
||||
#endif
|
||||
#else
|
||||
gd->arch.sdhc_clk = gd->bus_clk / CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||
#endif
|
||||
#endif /* defined(CONFIG_FSL_ESDHC) */
|
||||
|
||||
if (gd->cpu_clk != 0)
|
||||
|
|
|
@ -180,7 +180,7 @@ struct sys_info {
|
|||
unsigned long freq_systembus;
|
||||
unsigned long freq_ddrbus;
|
||||
unsigned long freq_localbus;
|
||||
unsigned long freq_sdhc;
|
||||
unsigned long freq_cga_m2;
|
||||
#ifdef CONFIG_SYS_DPAA_FMAN
|
||||
unsigned long freq_fman[CONFIG_SYS_NUM_FMAN];
|
||||
#endif
|
||||
|
|
|
@ -278,6 +278,7 @@ struct sys_info {
|
|||
/* frequency of platform PLL */
|
||||
unsigned long freq_systembus;
|
||||
unsigned long freq_ddrbus;
|
||||
unsigned long freq_cga_m2;
|
||||
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR
|
||||
unsigned long freq_ddrbus2;
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue