cubieboard: Configure system voltages from devicetree
Change-Id: I93bac9bf94f5bafcd3ff0c3d5763b31d3ee9959b Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Reviewed-on: http://review.coreboot.org/4640 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
@@ -5,6 +5,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||||||
select ARCH_ARMV7
|
select ARCH_ARMV7
|
||||||
select CPU_ALLWINNER_A10
|
select CPU_ALLWINNER_A10
|
||||||
select BOARD_ROMSIZE_KB_4096
|
select BOARD_ROMSIZE_KB_4096
|
||||||
|
select DRIVER_XPOWERS_AXP209
|
||||||
|
|
||||||
config MAINBOARD_DIR
|
config MAINBOARD_DIR
|
||||||
string
|
string
|
||||||
|
@@ -1,3 +1,12 @@
|
|||||||
chip cpu/allwinner/a10
|
chip cpu/allwinner/a10
|
||||||
device cpu_cluster 0 on end
|
device cpu_cluster 0 on end
|
||||||
|
|
||||||
|
chip drivers/xpowers/axp209 # AXP209 is on I²C 0
|
||||||
|
device i2c 0x34 on end
|
||||||
|
register "dcdc2_voltage_mv" = "1400" # Vcore
|
||||||
|
register "dcdc3_voltage_mv" = "1250" # DLL Vdd
|
||||||
|
register "ldo2_voltage_mv" = "3000" # AVCC
|
||||||
|
register "ldo3_voltage_mv" = "2800" # NC?
|
||||||
|
register "ldo4_voltage_mv" = "2800" # CSI1-IO-2V8
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@@ -6,9 +6,67 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
|
#include <cpu/allwinner/a10/clock.h>
|
||||||
|
#include <cpu/allwinner/a10/gpio.h>
|
||||||
|
#include <cpu/allwinner/a10/twi.h>
|
||||||
|
#define __SIMPLE_DEVICE__
|
||||||
|
#include <device/device.h>
|
||||||
|
#include <drivers/xpowers/axp209/axp209.h>
|
||||||
|
#include <drivers/xpowers/axp209/chip.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define GPB_TWI0_FUNC 2
|
||||||
|
#define GPB_TWI0_PINS ((1 << 0) | (1 << 1))
|
||||||
|
|
||||||
|
#define AXP209_BUS 0
|
||||||
|
|
||||||
|
static enum cb_err cubieboard_setup_power(void)
|
||||||
|
{
|
||||||
|
enum cb_err err;
|
||||||
|
const struct device * pmu;
|
||||||
|
const struct drivers_xpowers_axp209_config *cfg;
|
||||||
|
|
||||||
|
/* Find the AXP209 in devicetree */
|
||||||
|
pmu = dev_find_slot_on_smbus(AXP209_BUS, AXP209_I2C_ADDR);
|
||||||
|
if (!pmu) {
|
||||||
|
printk(BIOS_ERR, "AXP209 not found in devicetree.cb\n");
|
||||||
|
return CB_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg = pmu->chip_info;
|
||||||
|
|
||||||
|
/* Mux TWI0 pins */
|
||||||
|
gpio_set_multipin_func(GPB, GPB_TWI0_PINS, GPB_TWI0_FUNC);
|
||||||
|
/* Enable TWI0 */
|
||||||
|
a1x_periph_clock_enable(A1X_CLKEN_TWI0);
|
||||||
|
a1x_twi_init(AXP209_BUS, 400000);
|
||||||
|
|
||||||
|
if ((err = axp209_init(AXP209_BUS)) != CB_SUCCESS) {
|
||||||
|
printk(BIOS_ERR, "PMU initialization failed\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((err = axp209_set_voltages(AXP209_BUS, cfg)) != CB_SUCCESS) {
|
||||||
|
printk(BIOS_WARNING, "Power setup incomplete: "
|
||||||
|
"CPU may hang when increasing clock\n");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
printk(BIOS_SPEW, "VDD CPU (DCDC2): %imv\n", cfg->dcdc2_voltage_mv);
|
||||||
|
printk(BIOS_SPEW, "VDD DLL (DCDC3): %imv\n", cfg->dcdc3_voltage_mv);
|
||||||
|
printk(BIOS_SPEW, "AVCC (LDO2) : %imv\n", cfg->ldo2_voltage_mv);
|
||||||
|
printk(BIOS_SPEW, "CSI1-IO (LDO4) : %imv\n", cfg->ldo4_voltage_mv);
|
||||||
|
printk(BIOS_SPEW, "(LDO3) : %imv\n", cfg->ldo3_voltage_mv);
|
||||||
|
|
||||||
|
return CB_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
console_init();
|
console_init();
|
||||||
printk(BIOS_INFO, "You have managed to succesfully load romstage.\n");
|
printk(BIOS_INFO, "You have managed to succesfully load romstage.\n");
|
||||||
|
|
||||||
|
/* Configure power rails */
|
||||||
|
cubieboard_setup_power();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user