mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 01:24:27 +00:00
feat(allwinner): allow to skip PMIC regulator setup
For somewhat historical reasons we are doing some initial PMIC regulator setup in BL31, as U-Boot does not (yet) have a PMIC driver. This worked fine so far, but there is at least one board (OrangePi 3) that gets upset, because the Ethernet PHY needs some *coordinated* bringup of *two* regulators. To avoid custom hacks, let's introduce a build option to keep doing the regulator setup in TF-A. Defining SUNXI_SETUP_REGULATORS to 0 will break support for some devices on some boards in U-Boot (Ethernet and HDMI), but will allow to bring up the OrangePi 3 in Linux correctly. We keep the default at 1 to not change the behaviour for all other boards. After U-Boot gained proper PMIC support at some point in the future, we will probably change the default to 0, to get rid of the less optimal PMIC code in TF-A. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Change-Id: Ie8e2583d0396f6eeaae8ffe6b6190f27db63e2a7
This commit is contained in:
parent
c8076a0e69
commit
67412e4d7a
5 changed files with 17 additions and 0 deletions
|
@ -9,6 +9,7 @@
|
|||
const uint8_t axp_chip_id = AXP803_CHIP_ID;
|
||||
const char *const axp_compatible = "x-powers,axp803";
|
||||
|
||||
#if SUNXI_SETUP_REGULATORS == 1
|
||||
const struct axp_regulator axp_regulators[] = {
|
||||
{"dcdc1", 1600, 3400, 100, NA, 0x20, 0x10, 0},
|
||||
{"dcdc5", 800, 1840, 10, 32, 0x24, 0x10, 4},
|
||||
|
@ -20,3 +21,4 @@ const struct axp_regulator axp_regulators[] = {
|
|||
{"fldo1", 700, 1450, 50, NA, 0x1c, 0x13, 2},
|
||||
{}
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
const uint8_t axp_chip_id = AXP805_CHIP_ID;
|
||||
const char *const axp_compatible = "x-powers,axp805";
|
||||
|
||||
#if SUNXI_SETUP_REGULATORS == 1
|
||||
/*
|
||||
* The "dcdcd" split changes the step size by a factor of 5, not 2;
|
||||
* disallow values above the split to maintain accuracy.
|
||||
|
@ -31,3 +32,4 @@ const struct axp_regulator axp_regulators[] = {
|
|||
{"cldo3", 700, 3300, 100, NA, 0x26, 0x11, 6},
|
||||
{}
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -48,6 +48,7 @@ void axp_power_off(void)
|
|||
axp_setbits(0x32, BIT(7));
|
||||
}
|
||||
|
||||
#if SUNXI_SETUP_REGULATORS == 1
|
||||
/*
|
||||
* Retrieve the voltage from a given regulator DTB node.
|
||||
* Both the regulator-{min,max}-microvolt properties must be present and
|
||||
|
@ -208,3 +209,4 @@ void axp_setup_regulators(const void *fdt)
|
|||
axp_setbits(0x11, BIT(7));
|
||||
}
|
||||
}
|
||||
#endif /* SUNXI_SETUP_REGULATORS */
|
||||
|
|
|
@ -47,6 +47,13 @@ int axp_clrsetbits(uint8_t reg, uint8_t clr_mask, uint8_t set_mask);
|
|||
|
||||
int axp_check_id(void);
|
||||
void axp_power_off(void);
|
||||
|
||||
#if SUNXI_SETUP_REGULATORS == 1
|
||||
void axp_setup_regulators(const void *fdt);
|
||||
#else
|
||||
static inline void axp_setup_regulators(const void *fdt)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* AXP_H */
|
||||
|
|
|
@ -61,6 +61,10 @@ BL31_SOURCES += drivers/allwinner/sunxi_msgbox.c \
|
|||
${AW_PLAT}/common/sunxi_scpi_pm.c
|
||||
endif
|
||||
|
||||
SUNXI_SETUP_REGULATORS ?= 1
|
||||
$(eval $(call assert_boolean,SUNXI_SETUP_REGULATORS))
|
||||
$(eval $(call add_define,SUNXI_SETUP_REGULATORS))
|
||||
|
||||
# The bootloader is guaranteed to only run on CPU 0 by the boot ROM.
|
||||
COLD_BOOT_SINGLE_CPU := 1
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue