Skip to content
Snippets Groups Projects
Commit 5cd1f6bd authored by Lokesh Vutla's avatar Lokesh Vutla Committed by Tom Rini
Browse files

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: default avatarLokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: default avatarNishanth Menon <nm@ti.com>
Reviewed-by: default avatarTom Rini <trini@konsulko.com>
parent f2a8279e
No related branches found
No related tags found
No related merge requests found
...@@ -228,14 +228,14 @@ void init_plls(void) ...@@ -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; int speed;
/* Left most setbit gives the speed */ /* Left most setbit gives the speed */
for (speed = DEVSPEED_NUMSPDS; speed >= 0; speed--) { for (speed = DEVSPEED_NUMSPDS; speed >= 0; speed--) {
if ((val & BIT(speed)) & speed_supported) if ((val & BIT(speed)) & speed_supported)
return speeds[speed]; return spds[speed];
} }
/* If no bit is set, use SPD800 */ /* If no bit is set, use SPD800 */
...@@ -250,24 +250,24 @@ static inline u32 read_efuse_bootrom(void) ...@@ -250,24 +250,24 @@ static inline u32 read_efuse_bootrom(void)
return __raw_readl(KS2_EFUSE_BOOTROM); return __raw_readl(KS2_EFUSE_BOOTROM);
} }
int get_max_arm_speed(void) int get_max_arm_speed(int *spds)
{ {
u32 armspeed = read_efuse_bootrom(); u32 armspeed = read_efuse_bootrom();
armspeed = (armspeed & DEVSPEED_ARMSPEED_MASK) >> armspeed = (armspeed & DEVSPEED_ARMSPEED_MASK) >>
DEVSPEED_ARMSPEED_SHIFT; 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(); u32 devspeed = read_efuse_bootrom();
devspeed = (devspeed & DEVSPEED_DEVSPEED_MASK) >> devspeed = (devspeed & DEVSPEED_DEVSPEED_MASK) >>
DEVSPEED_DEVSPEED_SHIFT; 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); ...@@ -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_get_rate(unsigned int clk);
unsigned long clk_round_rate(unsigned int clk, unsigned long hz); unsigned long clk_round_rate(unsigned int clk, unsigned long hz);
int clk_set_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_dev_speed(int *spds);
int get_max_arm_speed(void); int get_max_arm_speed(int *spds);
void pll_pa_clk_sel(void); void pll_pa_clk_sel(void);
#endif #endif
......
...@@ -61,7 +61,7 @@ struct pll_init_data *get_pll_init_data(int pll) ...@@ -61,7 +61,7 @@ struct pll_init_data *get_pll_init_data(int pll)
switch (pll) { switch (pll) {
case MAIN_PLL: case MAIN_PLL:
speed = get_max_dev_speed(); speed = get_max_dev_speed(speeds);
data = &core_pll_config[speed]; data = &core_pll_config[speed];
break; break;
case PASS_PLL: case PASS_PLL:
......
...@@ -51,11 +51,11 @@ struct pll_init_data *get_pll_init_data(int pll) ...@@ -51,11 +51,11 @@ struct pll_init_data *get_pll_init_data(int pll)
switch (pll) { switch (pll) {
case MAIN_PLL: case MAIN_PLL:
speed = get_max_dev_speed(); speed = get_max_dev_speed(speeds);
data = &core_pll_config[speed]; data = &core_pll_config[speed];
break; break;
case TETRIS_PLL: case TETRIS_PLL:
speed = get_max_arm_speed(); speed = get_max_arm_speed(speeds);
data = &tetris_pll_config[speed]; data = &tetris_pll_config[speed];
break; break;
case PASS_PLL: case PASS_PLL:
......
...@@ -50,11 +50,11 @@ struct pll_init_data *get_pll_init_data(int pll) ...@@ -50,11 +50,11 @@ struct pll_init_data *get_pll_init_data(int pll)
switch (pll) { switch (pll) {
case MAIN_PLL: case MAIN_PLL:
speed = get_max_dev_speed(); speed = get_max_dev_speed(speeds);
data = &core_pll_config[speed]; data = &core_pll_config[speed];
break; break;
case TETRIS_PLL: case TETRIS_PLL:
speed = get_max_arm_speed(); speed = get_max_arm_speed(speeds);
data = &tetris_pll_config[speed]; data = &tetris_pll_config[speed];
break; break;
case PASS_PLL: case PASS_PLL:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment