Author: stuge Date: Wed Oct 13 08:23:02 2010 New Revision: 5948 URL: https://tracker.coreboot.org/trac/coreboot/changeset/5948
Log: 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
Modified: trunk/src/Kconfig trunk/src/mainboard/Kconfig trunk/src/mainboard/amd/db800/Kconfig trunk/src/mainboard/amd/norwich/Kconfig trunk/src/mainboard/amd/rumba/Kconfig trunk/src/mainboard/artecgroup/dbe61/Kconfig trunk/src/mainboard/digitallogic/msm800sev/Kconfig trunk/src/mainboard/iei/pcisa-lx-800-r10/Kconfig trunk/src/mainboard/lippert/hurricane-lx/Kconfig trunk/src/mainboard/lippert/hurricane-lx/romstage.c trunk/src/mainboard/lippert/literunner-lx/Kconfig trunk/src/mainboard/lippert/roadrunner-lx/Kconfig trunk/src/mainboard/lippert/spacerunner-lx/Kconfig trunk/src/mainboard/pcengines/alix1c/Kconfig trunk/src/mainboard/pcengines/alix2d/Kconfig trunk/src/mainboard/pcengines/alix2d/romstage.c trunk/src/mainboard/traverse/geos/Kconfig trunk/src/mainboard/winent/pl6064/Kconfig trunk/src/mainboard/wyse/s50/Kconfig trunk/src/mainboard/wyse/s50/romstage.c trunk/src/southbridge/amd/cs5536/cs5536_early_setup.c
Modified: trunk/src/Kconfig ============================================================================== --- trunk/src/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -736,4 +736,43 @@ 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
Modified: trunk/src/mainboard/Kconfig ============================================================================== --- trunk/src/mainboard/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -247,4 +247,22 @@ 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
Modified: trunk/src/mainboard/amd/db800/Kconfig ============================================================================== --- trunk/src/mainboard/amd/db800/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/amd/db800/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -11,6 +11,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_ENABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/amd/norwich/Kconfig ============================================================================== --- trunk/src/mainboard/amd/norwich/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/amd/norwich/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -10,6 +10,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_ENABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/amd/rumba/Kconfig ============================================================================== --- trunk/src/mainboard/amd/rumba/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/amd/rumba/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -27,6 +27,7 @@ select UDELAY_TSC select HAVE_PIRQ_TABLE select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_ENABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/artecgroup/dbe61/Kconfig ============================================================================== --- trunk/src/mainboard/artecgroup/dbe61/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/artecgroup/dbe61/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -10,6 +10,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_DISABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/digitallogic/msm800sev/Kconfig ============================================================================== --- trunk/src/mainboard/digitallogic/msm800sev/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/digitallogic/msm800sev/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -11,6 +11,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_ENABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/iei/pcisa-lx-800-r10/Kconfig ============================================================================== --- trunk/src/mainboard/iei/pcisa-lx-800-r10/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/iei/pcisa-lx-800-r10/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -10,6 +10,7 @@ select HAVE_PIRQ_TABLE select PIRQ_ROUTE select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_ENABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/lippert/hurricane-lx/Kconfig ============================================================================== --- trunk/src/mainboard/lippert/hurricane-lx/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/lippert/hurricane-lx/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -29,11 +29,20 @@ 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
Modified: trunk/src/mainboard/lippert/hurricane-lx/romstage.c ============================================================================== --- trunk/src/mainboard/lippert/hurricane-lx/romstage.c Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/lippert/hurricane-lx/romstage.c Wed Oct 13 08:23:02 2010 (r5948) @@ -147,14 +147,7 @@
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))) {
Modified: trunk/src/mainboard/lippert/literunner-lx/Kconfig ============================================================================== --- trunk/src/mainboard/lippert/literunner-lx/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/lippert/literunner-lx/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -14,6 +14,7 @@ # 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
Modified: trunk/src/mainboard/lippert/roadrunner-lx/Kconfig ============================================================================== --- trunk/src/mainboard/lippert/roadrunner-lx/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/lippert/roadrunner-lx/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -13,6 +13,7 @@ # 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
Modified: trunk/src/mainboard/lippert/spacerunner-lx/Kconfig ============================================================================== --- trunk/src/mainboard/lippert/spacerunner-lx/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/lippert/spacerunner-lx/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -14,6 +14,7 @@ # 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
Modified: trunk/src/mainboard/pcengines/alix1c/Kconfig ============================================================================== --- trunk/src/mainboard/pcengines/alix1c/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/pcengines/alix1c/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -11,6 +11,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_512 + select POWER_BUTTON_DEFAULT_DISABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/pcengines/alix2d/Kconfig ============================================================================== --- trunk/src/mainboard/pcengines/alix2d/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/pcengines/alix2d/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -10,6 +10,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_512 + select POWER_BUTTON_FORCE_DISABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/pcengines/alix2d/romstage.c ============================================================================== --- trunk/src/mainboard/pcengines/alix2d/romstage.c Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/pcengines/alix2d/romstage.c Wed Oct 13 08:23:02 2010 (r5948) @@ -120,12 +120,6 @@ 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. * Info: GPIO_IO_BASE, 0x6100, is only valid before PCI init, so it
Modified: trunk/src/mainboard/traverse/geos/Kconfig ============================================================================== --- trunk/src/mainboard/traverse/geos/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/traverse/geos/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -10,6 +10,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_1024 + select POWER_BUTTON_DEFAULT_DISABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/winent/pl6064/Kconfig ============================================================================== --- trunk/src/mainboard/winent/pl6064/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/winent/pl6064/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -11,6 +11,7 @@ select PIRQ_ROUTE select UDELAY_TSC select BOARD_ROMSIZE_KB_512 + select POWER_BUTTON_FORCE_ENABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/wyse/s50/Kconfig ============================================================================== --- trunk/src/mainboard/wyse/s50/Kconfig Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/wyse/s50/Kconfig Wed Oct 13 08:23:02 2010 (r5948) @@ -28,6 +28,7 @@ select HAVE_PIRQ_TABLE select PIRQ_ROUTE select BOARD_ROMSIZE_KB_256 + select POWER_BUTTON_FORCE_DISABLE
config MAINBOARD_DIR string
Modified: trunk/src/mainboard/wyse/s50/romstage.c ============================================================================== --- trunk/src/mainboard/wyse/s50/romstage.c Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/mainboard/wyse/s50/romstage.c Wed Oct 13 08:23:02 2010 (r5948) @@ -134,9 +134,6 @@
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);
Modified: trunk/src/southbridge/amd/cs5536/cs5536_early_setup.c ============================================================================== --- trunk/src/southbridge/amd/cs5536/cs5536_early_setup.c Wed Oct 13 07:16:48 2010 (r5947) +++ trunk/src/southbridge/amd/cs5536/cs5536_early_setup.c Wed Oct 13 08:23:02 2010 (r5948) @@ -92,8 +92,9 @@
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.