Enable or disable the power button in Kconfig
Some mainboards need to disable the power button to avoid turning off right after being turned on, while other boards ship with a jumper over the power button and should allow the user to configure the behavior. This adds infrastructure in the form of four mutually exclusive options which can be selected in a mainboard Kconfig (power button forced on/off, and user-controllable with default on/off) and one result bool which source code can test. (Enable the button or not.) The options have been implemented in CS5536 code and for all mainboards which select SOUTHBRIDGE_AMD_CS5536, but should be used also by other chipsets where applicable. Note that if chipset code uses the result bool ENABLE_POWER_BUTTON, then every board using that chipset must select one out of the four control options in order to build. All touched boards should have unchanged behavior, except pcengines/alix1c, traverse/geos and lippert/hurricane-lx where the power button can now be configured by the user. Build tested for alix1c, alix2d, hurricane-lx and wyse-s50. Confirmed to work as advertised on alix1c both with button enabled and disabled. Includes additional traverse/geos changes from Nathan and lippert/hurricane-lx changes from Jens to correctly use the new feature on those boards. Signed-off-by: Peter Stuge <peter@stuge.se> Acked-by: Aurelien Guillaume <aurelien@iwi.me> Acked-by: Nils Jacobs <njacobs8@hetnet.nl> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5948 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
f2573bd237
commit
51eafdeae6
39
src/Kconfig
39
src/Kconfig
|
@ -736,4 +736,43 @@ config ID_SECTION_OFFSET
|
|||
hex
|
||||
default 0x10
|
||||
|
||||
# The four POWER_BUTTON_DEFAULT_ENABLE, POWER_BUTTON_DEFAULT_DISABLE,
|
||||
# POWER_BUTTON_FORCE_ENABLE and POWER_BUTTON_FORCE_DISABLE options are
|
||||
# mutually exclusive. One of these options must be selected in the
|
||||
# mainboard Kconfig if the chipset supports enabling and disabling of
|
||||
# the power button. Chipset code uses the ENABLE_POWER_BUTTON option set
|
||||
# in mainboard/Kconfig to know if the button should be enabled or not.
|
||||
|
||||
config POWER_BUTTON_DEFAULT_ENABLE
|
||||
def_bool n
|
||||
help
|
||||
Select when the board has a power button which can optionally be
|
||||
disabled by the user.
|
||||
|
||||
config POWER_BUTTON_DEFAULT_DISABLE
|
||||
def_bool n
|
||||
help
|
||||
Select when the board has a power button which can optionally be
|
||||
enabled by the user, e.g. when the board ships with a jumper over
|
||||
the power switch contacts.
|
||||
|
||||
config POWER_BUTTON_FORCE_ENABLE
|
||||
def_bool n
|
||||
help
|
||||
Select when the board requires that the power button is always
|
||||
enabled.
|
||||
|
||||
config POWER_BUTTON_FORCE_DISABLE
|
||||
def_bool n
|
||||
help
|
||||
Select when the board requires that the power button is always
|
||||
disabled, e.g. when it has been hardwired to ground.
|
||||
|
||||
config POWER_BUTTON_IS_OPTIONAL
|
||||
bool
|
||||
default y if POWER_BUTTON_DEFAULT_ENABLE || POWER_BUTTON_DEFAULT_DISABLE
|
||||
default n if !(POWER_BUTTON_DEFAULT_ENABLE || POWER_BUTTON_DEFAULT_DISABLE)
|
||||
help
|
||||
Internal option that controls ENABLE_POWER_BUTTON visibility.
|
||||
|
||||
source src/Kconfig.deprecated_options
|
||||
|
|
|
@ -247,4 +247,22 @@ config ROM_SIZE
|
|||
default 0x200000 if COREBOOT_ROMSIZE_KB_2048
|
||||
default 0x400000 if COREBOOT_ROMSIZE_KB_4096
|
||||
|
||||
config ENABLE_POWER_BUTTON
|
||||
bool "Enable the power button" if POWER_BUTTON_IS_OPTIONAL
|
||||
default y if POWER_BUTTON_DEFAULT_ENABLE
|
||||
default n if POWER_BUTTON_DEFAULT_DISABLE
|
||||
help
|
||||
The selected mainboard can optionally have the power button tied
|
||||
to ground with a jumper so that the button appears to be
|
||||
constantly depressed. If this option is enabled and the jumper is
|
||||
installed then the board will turn on, but turn off again after a
|
||||
short timeout, usually 4 seconds.
|
||||
|
||||
Select Y here if you have removed the jumper and want to use an
|
||||
actual power button. Select N if you have the jumper installed.
|
||||
|
||||
config ENABLE_POWER_BUTTON
|
||||
def_bool y if !POWER_BUTTON_IS_OPTIONAL && POWER_BUTTON_FORCE_ENABLE
|
||||
def_bool n if !POWER_BUTTON_IS_OPTIONAL && POWER_BUTTON_FORCE_DISABLE
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -10,6 +10,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -27,6 +27,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select UDELAY_TSC
|
||||
select HAVE_PIRQ_TABLE
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -10,6 +10,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_DISABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -10,6 +10,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select HAVE_PIRQ_TABLE
|
||||
select PIRQ_ROUTE
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -29,11 +29,20 @@ config IRQ_SLOT_COUNT
|
|||
config BOARD_OLD_REVISION
|
||||
bool "Board is old pre-3.0 revision"
|
||||
default n
|
||||
select POWER_BUTTON_DEFAULT_DISABLE
|
||||
help
|
||||
Look on the bottom side for a number like 406-0001-30. The last 2
|
||||
digits state the PCB revision (3.0 in this example). For 2.0 or older
|
||||
boards choose Y, for 3.0 and newer say N.
|
||||
|
||||
Old revision boards need a jumper shorting the power button to
|
||||
power on automatically. You may enable the button only after this
|
||||
jumper has been removed. New revision boards are not restricted
|
||||
in this way, and always have the power button enabled.
|
||||
|
||||
config POWER_BUTTON_FORCE_ENABLE
|
||||
def_bool y if !BOARD_OLD_REVISION
|
||||
|
||||
config ONBOARD_UARTS_RS485
|
||||
bool "Switch on-board serial ports to RS485"
|
||||
default n
|
||||
|
|
|
@ -147,14 +147,7 @@ void main(unsigned long bist)
|
|||
|
||||
cpuRegInit(0, DIMM0, DIMM1, DRAM_TERMINATED);
|
||||
|
||||
#if CONFIG_BOARD_OLD_REVISION
|
||||
/*
|
||||
* Old revision boards need a jumper shorting the power button to power
|
||||
* on automatically. So we must disable the button's fail-safe function,
|
||||
* or the board will shut down after 4 s.
|
||||
*/
|
||||
outl(0, PMS_IO_BASE + PM_FSD); // Fail-Save Delay register
|
||||
#else
|
||||
#if !CONFIG_BOARD_OLD_REVISION
|
||||
int err;
|
||||
/* bit0 = Spread Spectrum */
|
||||
if ((err = smc_send_config(SMC_CONFIG))) {
|
||||
|
|
|
@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
# Board is equipped with a 1 MB SPI flash, however, due to limitations
|
||||
# of the IT8712F Super I/O, only the top 512 KB are directly mapped.
|
||||
select BOARD_ROMSIZE_KB_512
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -13,6 +13,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
# Standard chip is a 512 KB FWH. Replacing it with a 1 MB
|
||||
# SST 49LF008A is possible.
|
||||
select BOARD_ROMSIZE_KB_512
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
# Board is equipped with a 1 MB SPI flash, however, due to limitations
|
||||
# of the IT8712F Super I/O, only the top 512 KB are directly mapped.
|
||||
select BOARD_ROMSIZE_KB_512
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_512
|
||||
select POWER_BUTTON_DEFAULT_DISABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -10,6 +10,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_512
|
||||
select POWER_BUTTON_FORCE_DISABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -119,12 +119,6 @@ static u8 spd_read_byte(u8 device, u8 address)
|
|||
/** Early mainboard specific GPIO setup. */
|
||||
static void mb_gpio_init(void)
|
||||
{
|
||||
/*
|
||||
* Disable power button, since it is hardwired to ground on this board,
|
||||
* and the power would be cut off atfer a 4-second delay otherwise.
|
||||
*/
|
||||
outl(0x00020000, PMS_IO_BASE + 0x40);
|
||||
|
||||
/*
|
||||
* Enable LEDs GPIO outputs to light up the leds
|
||||
* This is how the original tinyBIOS sets them after boot.
|
||||
|
|
|
@ -10,6 +10,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_1024
|
||||
select POWER_BUTTON_DEFAULT_DISABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select PIRQ_ROUTE
|
||||
select UDELAY_TSC
|
||||
select BOARD_ROMSIZE_KB_512
|
||||
select POWER_BUTTON_FORCE_ENABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -28,6 +28,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
|
|||
select HAVE_PIRQ_TABLE
|
||||
select PIRQ_ROUTE
|
||||
select BOARD_ROMSIZE_KB_256
|
||||
select POWER_BUTTON_FORCE_DISABLE
|
||||
|
||||
config MAINBOARD_DIR
|
||||
string
|
||||
|
|
|
@ -134,9 +134,6 @@ void main(unsigned long bist)
|
|||
|
||||
cs5536_early_setup();
|
||||
|
||||
/* disable the power button */
|
||||
outl(0x00, PMS_IO_BASE + 0x40);
|
||||
|
||||
/* cs5536_disable_internal_uart disable them. Set them up now... */
|
||||
cs5536_setup_onchipuart(1);
|
||||
|
||||
|
|
|
@ -92,8 +92,9 @@ static void cs5536_setup_iobase(void)
|
|||
|
||||
static void cs5536_setup_power_button(void)
|
||||
{
|
||||
/* Power Button Setup */
|
||||
#if CONFIG_ENABLE_POWER_BUTTON
|
||||
outl(0x40020000, PMS_IO_BASE + 0x40);
|
||||
#endif
|
||||
|
||||
/* setup WORK_AUX/GPIO24, it is the external signal for 5536
|
||||
* vsb_work_aux controls all voltage rails except Vstandby & Vmem.
|
||||
|
|
Loading…
Reference in New Issue