mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-04-04 06:46:11 +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
arch/arm
cpu/armv8/fsl-layerscape
include/asm/arch-fsl-layerscape
|
@ -22,10 +22,12 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
void get_sys_info(struct sys_info *sys_info)
|
void get_sys_info(struct sys_info *sys_info)
|
||||||
{
|
{
|
||||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
|
||||||
#if (defined(CONFIG_FSL_ESDHC) &&\
|
/* rcw_tmp is needed to get FMAN clock, or to get cluster group A
|
||||||
defined(CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK)) ||\
|
* mux 2 clock for LS1043A/LS1046A.
|
||||||
defined(CONFIG_SYS_DPAA_FMAN)
|
*/
|
||||||
|
#if defined(CONFIG_SYS_DPAA_FMAN) || \
|
||||||
|
defined(CONFIG_TARGET_LS1046ARDB) || \
|
||||||
|
defined(CONFIG_TARGET_LS1043ARDB)
|
||||||
u32 rcw_tmp;
|
u32 rcw_tmp;
|
||||||
#endif
|
#endif
|
||||||
struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_CLK_ADDR);
|
struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_CLK_ADDR);
|
||||||
|
@ -122,32 +124,32 @@ void get_sys_info(struct sys_info *sys_info)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FSL_ESDHC
|
||||||
#define HWA_CGA_M2_CLK_SEL 0x00000007
|
#define HWA_CGA_M2_CLK_SEL 0x00000007
|
||||||
#define HWA_CGA_M2_CLK_SHIFT 0
|
#define HWA_CGA_M2_CLK_SHIFT 0
|
||||||
#ifdef CONFIG_FSL_ESDHC
|
#if defined(CONFIG_TARGET_LS1046ARDB) || defined(CONFIG_TARGET_LS1043ARDB)
|
||||||
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
|
|
||||||
rcw_tmp = in_be32(&gur->rcwsr[15]);
|
rcw_tmp = in_be32(&gur->rcwsr[15]);
|
||||||
switch ((rcw_tmp & HWA_CGA_M2_CLK_SEL) >> HWA_CGA_M2_CLK_SHIFT) {
|
switch ((rcw_tmp & HWA_CGA_M2_CLK_SEL) >> HWA_CGA_M2_CLK_SHIFT) {
|
||||||
case 1:
|
case 1:
|
||||||
sys_info->freq_sdhc = freq_c_pll[1];
|
sys_info->freq_cga_m2 = freq_c_pll[1];
|
||||||
break;
|
break;
|
||||||
|
#if defined(CONFIG_TARGET_LS1046ARDB)
|
||||||
case 2:
|
case 2:
|
||||||
sys_info->freq_sdhc = freq_c_pll[1] / 2;
|
sys_info->freq_cga_m2 = freq_c_pll[1] / 2;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case 3:
|
case 3:
|
||||||
sys_info->freq_sdhc = freq_c_pll[1] / 3;
|
sys_info->freq_cga_m2 = freq_c_pll[1] / 3;
|
||||||
break;
|
break;
|
||||||
|
#if defined(CONFIG_TARGET_LS1046ARDB)
|
||||||
case 6:
|
case 6:
|
||||||
sys_info->freq_sdhc = freq_c_pll[0] / 2;
|
sys_info->freq_cga_m2 = freq_c_pll[0] / 2;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
printf("Error: Unknown ESDHC clock select!\n");
|
printf("Error: Unknown peripheral clock select!\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
sys_info->freq_sdhc = (sys_info->freq_systembus /
|
|
||||||
CONFIG_SYS_FSL_PCLK_DIV) /
|
|
||||||
CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -183,9 +185,22 @@ int get_clocks(void)
|
||||||
gd->mem_clk = sys_info.freq_ddrbus;
|
gd->mem_clk = sys_info.freq_ddrbus;
|
||||||
|
|
||||||
#ifdef CONFIG_FSL_ESDHC
|
#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
|
#endif
|
||||||
|
|
||||||
if (gd->cpu_clk != 0)
|
if (gd->cpu_clk != 0)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
|
|
|
@ -64,6 +64,9 @@ void get_sys_info(struct sys_info *sys_info)
|
||||||
};
|
};
|
||||||
|
|
||||||
uint i, cluster;
|
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 freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||||
uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS];
|
||||||
unsigned long sysclk = CONFIG_SYS_CLK_FREQ;
|
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 /
|
sys_info->freq_localbus = sys_info->freq_systembus /
|
||||||
CONFIG_SYS_FSL_IFC_CLK_DIV;
|
CONFIG_SYS_FSL_IFC_CLK_DIV;
|
||||||
#endif
|
#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)
|
int get_clocks(void)
|
||||||
{
|
{
|
||||||
|
@ -141,7 +175,16 @@ int get_clocks(void)
|
||||||
gd->arch.mem2_clk = sys_info.freq_ddrbus2;
|
gd->arch.mem2_clk = sys_info.freq_ddrbus2;
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_FSL_ESDHC)
|
#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;
|
gd->arch.sdhc_clk = gd->bus_clk / CONFIG_SYS_FSL_SDHC_CLK_DIV;
|
||||||
|
#endif
|
||||||
#endif /* defined(CONFIG_FSL_ESDHC) */
|
#endif /* defined(CONFIG_FSL_ESDHC) */
|
||||||
|
|
||||||
if (gd->cpu_clk != 0)
|
if (gd->cpu_clk != 0)
|
||||||
|
|
|
@ -180,7 +180,7 @@ struct sys_info {
|
||||||
unsigned long freq_systembus;
|
unsigned long freq_systembus;
|
||||||
unsigned long freq_ddrbus;
|
unsigned long freq_ddrbus;
|
||||||
unsigned long freq_localbus;
|
unsigned long freq_localbus;
|
||||||
unsigned long freq_sdhc;
|
unsigned long freq_cga_m2;
|
||||||
#ifdef CONFIG_SYS_DPAA_FMAN
|
#ifdef CONFIG_SYS_DPAA_FMAN
|
||||||
unsigned long freq_fman[CONFIG_SYS_NUM_FMAN];
|
unsigned long freq_fman[CONFIG_SYS_NUM_FMAN];
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -278,6 +278,7 @@ struct sys_info {
|
||||||
/* frequency of platform PLL */
|
/* frequency of platform PLL */
|
||||||
unsigned long freq_systembus;
|
unsigned long freq_systembus;
|
||||||
unsigned long freq_ddrbus;
|
unsigned long freq_ddrbus;
|
||||||
|
unsigned long freq_cga_m2;
|
||||||
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR
|
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR
|
||||||
unsigned long freq_ddrbus2;
|
unsigned long freq_ddrbus2;
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue