mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-01 00:23:29 +08:00
board: am335x: Introduce scale_vcores
Update voltages before programming plls. Reviewed-by: Tom Rini <trini@konsulko.com> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
This commit is contained in:
parent
59041a5084
commit
0650798824
@ -264,16 +264,21 @@ const struct dpll_params dpll_ddr_evm_sk = {
|
||||
const struct dpll_params dpll_ddr_bone_black = {
|
||||
400, OSC-1, 1, -1, -1, -1, -1};
|
||||
|
||||
void am33xx_spl_board_init(void)
|
||||
const struct dpll_params *get_dpll_ddr_params(void)
|
||||
{
|
||||
int mpu_vdd;
|
||||
if (board_is_evm_sk())
|
||||
return &dpll_ddr_evm_sk;
|
||||
else if (board_is_bone_lt() || board_is_icev2())
|
||||
return &dpll_ddr_bone_black;
|
||||
else if (board_is_evm_15_or_later())
|
||||
return &dpll_ddr_evm_sk;
|
||||
else
|
||||
return &dpll_ddr;
|
||||
}
|
||||
|
||||
/* Get the frequency */
|
||||
dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev);
|
||||
|
||||
if (board_is_bone() || board_is_bone_lt()) {
|
||||
/* BeagleBone PMIC Code */
|
||||
int usb_cur_lim;
|
||||
static void scale_vcores_bone(int freq)
|
||||
{
|
||||
int usb_cur_lim, mpu_vdd;
|
||||
|
||||
/*
|
||||
* Only perform PMIC configurations if board rev > A1
|
||||
@ -295,8 +300,8 @@ void am33xx_spl_board_init(void)
|
||||
&pmic_status_reg))
|
||||
return;
|
||||
if (!(pmic_status_reg & TPS65217_PWR_SRC_AC_BITMASK)) {
|
||||
puts("No AC power, disabling frequency switch\n");
|
||||
return;
|
||||
puts("No AC power, switching to default OPP\n");
|
||||
freq = MPUPLL_M_600;
|
||||
}
|
||||
}
|
||||
|
||||
@ -305,13 +310,9 @@ void am33xx_spl_board_init(void)
|
||||
* a Beaglebone Black it supports 1GHz.
|
||||
*/
|
||||
if (board_is_bone_lt())
|
||||
dpll_mpu_opp100.m = MPUPLL_M_1000;
|
||||
freq = MPUPLL_M_1000;
|
||||
|
||||
/*
|
||||
* Increase USB current limit to 1300mA or 1800mA and set
|
||||
* the MPU voltage controller as needed.
|
||||
*/
|
||||
if (dpll_mpu_opp100.m == MPUPLL_M_1000) {
|
||||
if (freq == MPUPLL_M_1000) {
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1800MA;
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1325MV;
|
||||
} else {
|
||||
@ -319,22 +320,40 @@ void am33xx_spl_board_init(void)
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1275MV;
|
||||
}
|
||||
|
||||
switch (freq) {
|
||||
case MPUPLL_M_1000:
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1325MV;
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1800MA;
|
||||
break;
|
||||
case MPUPLL_M_800:
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1275MV;
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1800MA;
|
||||
break;
|
||||
case MPUPLL_M_720:
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1200MV;
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1800MA;
|
||||
break;
|
||||
case MPUPLL_M_600:
|
||||
case MPUPLL_M_500:
|
||||
case MPUPLL_M_300:
|
||||
mpu_vdd = TPS65217_DCDC_VOLT_SEL_1100MV;
|
||||
usb_cur_lim = TPS65217_USB_INPUT_CUR_LIMIT_1300MA;
|
||||
break;
|
||||
}
|
||||
|
||||
if (tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
|
||||
TPS65217_POWER_PATH,
|
||||
usb_cur_lim,
|
||||
TPS65217_USB_INPUT_CUR_LIMIT_MASK))
|
||||
puts("tps65217_reg_write failure\n");
|
||||
|
||||
/* Set DCDC3 (CORE) voltage to 1.125V */
|
||||
/* Set DCDC3 (CORE) voltage to 1.10V */
|
||||
if (tps65217_voltage_update(TPS65217_DEFDCDC3,
|
||||
TPS65217_DCDC_VOLT_SEL_1125MV)) {
|
||||
TPS65217_DCDC_VOLT_SEL_1100MV)) {
|
||||
puts("tps65217_voltage_update failure\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set CORE Frequencies to OPP100 */
|
||||
do_setup_dpll(&dpll_core_regs, &dpll_core_opp100);
|
||||
|
||||
/* Set DCDC2 (MPU) voltage */
|
||||
if (tps65217_voltage_update(TPS65217_DEFDCDC2, mpu_vdd)) {
|
||||
puts("tps65217_voltage_update failure\n");
|
||||
@ -364,13 +383,16 @@ void am33xx_spl_board_init(void)
|
||||
TPS65217_LDO_VOLTAGE_OUT_3_3,
|
||||
TPS65217_LDO_MASK))
|
||||
puts("tps65217_reg_write failure\n");
|
||||
} else {
|
||||
int sil_rev;
|
||||
}
|
||||
|
||||
void scale_vcores_generic(int freq)
|
||||
{
|
||||
int sil_rev, mpu_vdd;
|
||||
|
||||
/*
|
||||
* The GP EVM, IDK and EVM SK use a TPS65910 PMIC. For all
|
||||
* MPU frequencies we support we use a CORE voltage of
|
||||
* 1.1375V. For MPU voltage we need to switch based on
|
||||
* 1.10V. For MPU voltage we need to switch based on
|
||||
* the frequency we are running at.
|
||||
*/
|
||||
if (i2c_probe(TPS65910_CTRL_I2C_ADDR))
|
||||
@ -381,8 +403,7 @@ void am33xx_spl_board_init(void)
|
||||
* VDD to drive at that speed.
|
||||
*/
|
||||
sil_rev = readl(&cdev->deviceid) >> 28;
|
||||
mpu_vdd = am335x_get_tps65910_mpu_vdd(sil_rev,
|
||||
dpll_mpu_opp100.m);
|
||||
mpu_vdd = am335x_get_tps65910_mpu_vdd(sil_rev, freq);
|
||||
|
||||
/* Tell the TPS65910 to use i2c */
|
||||
tps65910_set_i2c_control();
|
||||
@ -392,27 +413,35 @@ void am33xx_spl_board_init(void)
|
||||
return;
|
||||
|
||||
/* Second, update the CORE voltage. */
|
||||
if (tps65910_voltage_update(CORE, TPS65910_OP_REG_SEL_1_1_3))
|
||||
if (tps65910_voltage_update(CORE, TPS65910_OP_REG_SEL_1_1_0))
|
||||
return;
|
||||
|
||||
/* Set CORE Frequencies to OPP100 */
|
||||
do_setup_dpll(&dpll_core_regs, &dpll_core_opp100);
|
||||
}
|
||||
|
||||
/* Set MPU Frequency to what we detected now that voltages are set */
|
||||
do_setup_dpll(&dpll_mpu_regs, &dpll_mpu_opp100);
|
||||
}
|
||||
|
||||
const struct dpll_params *get_dpll_ddr_params(void)
|
||||
void gpi2c_init(void)
|
||||
{
|
||||
if (board_is_evm_sk())
|
||||
return &dpll_ddr_evm_sk;
|
||||
else if (board_is_bone_lt() || board_is_icev2())
|
||||
return &dpll_ddr_bone_black;
|
||||
else if (board_is_evm_15_or_later())
|
||||
return &dpll_ddr_evm_sk;
|
||||
/* When needed to be invoked prior to BSS initialization */
|
||||
static bool first_time = true;
|
||||
|
||||
if (first_time) {
|
||||
enable_i2c0_pin_mux();
|
||||
i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED,
|
||||
CONFIG_SYS_OMAP24_I2C_SLAVE);
|
||||
first_time = false;
|
||||
}
|
||||
}
|
||||
|
||||
void scale_vcores(void)
|
||||
{
|
||||
int freq;
|
||||
|
||||
gpi2c_init();
|
||||
freq = am335x_get_efuse_mpu_max_freq(cdev);
|
||||
|
||||
if (board_is_bone())
|
||||
scale_vcores_bone(freq);
|
||||
else
|
||||
return &dpll_ddr;
|
||||
scale_vcores_generic(freq);
|
||||
}
|
||||
|
||||
void set_uart_mux_conf(void)
|
||||
|
Loading…
Reference in New Issue
Block a user