ARM: keystone2: Allow for board specific speed definitions
Its not compulsory that speed definition should be same on EFUSE_BOOTROM register for all keystone 2 devices. So, allow for board specific speed definitions. Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Signed-off-by: Nishanth Menon <nm@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
f2a8279e76
commit
5cd1f6bd7a
|
@ -228,14 +228,14 @@ void init_plls(void)
|
|||
}
|
||||
}
|
||||
|
||||
static int get_max_speed(u32 val, u32 speed_supported)
|
||||
static int get_max_speed(u32 val, u32 speed_supported, int *spds)
|
||||
{
|
||||
int speed;
|
||||
|
||||
/* Left most setbit gives the speed */
|
||||
for (speed = DEVSPEED_NUMSPDS; speed >= 0; speed--) {
|
||||
if ((val & BIT(speed)) & speed_supported)
|
||||
return speeds[speed];
|
||||
return spds[speed];
|
||||
}
|
||||
|
||||
/* If no bit is set, use SPD800 */
|
||||
|
@ -250,24 +250,24 @@ static inline u32 read_efuse_bootrom(void)
|
|||
return __raw_readl(KS2_EFUSE_BOOTROM);
|
||||
}
|
||||
|
||||
int get_max_arm_speed(void)
|
||||
int get_max_arm_speed(int *spds)
|
||||
{
|
||||
u32 armspeed = read_efuse_bootrom();
|
||||
|
||||
armspeed = (armspeed & DEVSPEED_ARMSPEED_MASK) >>
|
||||
DEVSPEED_ARMSPEED_SHIFT;
|
||||
|
||||
return get_max_speed(armspeed, ARM_SUPPORTED_SPEEDS);
|
||||
return get_max_speed(armspeed, ARM_SUPPORTED_SPEEDS, spds);
|
||||
}
|
||||
|
||||
int get_max_dev_speed(void)
|
||||
int get_max_dev_speed(int *spds)
|
||||
{
|
||||
u32 devspeed = read_efuse_bootrom();
|
||||
|
||||
devspeed = (devspeed & DEVSPEED_DEVSPEED_MASK) >>
|
||||
DEVSPEED_DEVSPEED_SHIFT;
|
||||
|
||||
return get_max_speed(devspeed, DEV_SUPPORTED_SPEEDS);
|
||||
return get_max_speed(devspeed, DEV_SUPPORTED_SPEEDS, spds);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -124,8 +124,8 @@ struct pll_init_data *get_pll_init_data(int pll);
|
|||
unsigned long clk_get_rate(unsigned int clk);
|
||||
unsigned long clk_round_rate(unsigned int clk, unsigned long hz);
|
||||
int clk_set_rate(unsigned int clk, unsigned long hz);
|
||||
int get_max_dev_speed(void);
|
||||
int get_max_arm_speed(void);
|
||||
int get_max_dev_speed(int *spds);
|
||||
int get_max_arm_speed(int *spds);
|
||||
void pll_pa_clk_sel(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -61,7 +61,7 @@ struct pll_init_data *get_pll_init_data(int pll)
|
|||
|
||||
switch (pll) {
|
||||
case MAIN_PLL:
|
||||
speed = get_max_dev_speed();
|
||||
speed = get_max_dev_speed(speeds);
|
||||
data = &core_pll_config[speed];
|
||||
break;
|
||||
case PASS_PLL:
|
||||
|
|
|
@ -51,11 +51,11 @@ struct pll_init_data *get_pll_init_data(int pll)
|
|||
|
||||
switch (pll) {
|
||||
case MAIN_PLL:
|
||||
speed = get_max_dev_speed();
|
||||
speed = get_max_dev_speed(speeds);
|
||||
data = &core_pll_config[speed];
|
||||
break;
|
||||
case TETRIS_PLL:
|
||||
speed = get_max_arm_speed();
|
||||
speed = get_max_arm_speed(speeds);
|
||||
data = &tetris_pll_config[speed];
|
||||
break;
|
||||
case PASS_PLL:
|
||||
|
|
|
@ -50,11 +50,11 @@ struct pll_init_data *get_pll_init_data(int pll)
|
|||
|
||||
switch (pll) {
|
||||
case MAIN_PLL:
|
||||
speed = get_max_dev_speed();
|
||||
speed = get_max_dev_speed(speeds);
|
||||
data = &core_pll_config[speed];
|
||||
break;
|
||||
case TETRIS_PLL:
|
||||
speed = get_max_arm_speed();
|
||||
speed = get_max_arm_speed(speeds);
|
||||
data = &tetris_pll_config[speed];
|
||||
break;
|
||||
case PASS_PLL:
|
||||
|
|
Loading…
Reference in a new issue