summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stuge <peter@stuge.se>2010-10-13 06:23:02 +0000
committerPeter Stuge <peter@stuge.se>2010-10-13 06:23:02 +0000
commit51eafdeae621f1b04db51c3b4a690fa993aa48a0 (patch)
treee36ad669d05eecf00ce5826f8fb3fad8409ebec7
parentf2573bd23727db672b22f3840ce91d08ec3aea5d (diff)
downloadcoreboot-51eafdeae621f1b04db51c3b4a690fa993aa48a0.tar.xz
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
-rw-r--r--src/Kconfig39
-rw-r--r--src/mainboard/Kconfig18
-rw-r--r--src/mainboard/amd/db800/Kconfig1
-rw-r--r--src/mainboard/amd/norwich/Kconfig1
-rw-r--r--src/mainboard/amd/rumba/Kconfig1
-rw-r--r--src/mainboard/artecgroup/dbe61/Kconfig1
-rw-r--r--src/mainboard/digitallogic/msm800sev/Kconfig1
-rw-r--r--src/mainboard/iei/pcisa-lx-800-r10/Kconfig1
-rw-r--r--src/mainboard/lippert/hurricane-lx/Kconfig9
-rw-r--r--src/mainboard/lippert/hurricane-lx/romstage.c9
-rw-r--r--src/mainboard/lippert/literunner-lx/Kconfig1
-rw-r--r--src/mainboard/lippert/roadrunner-lx/Kconfig1
-rw-r--r--src/mainboard/lippert/spacerunner-lx/Kconfig1
-rw-r--r--src/mainboard/pcengines/alix1c/Kconfig1
-rw-r--r--src/mainboard/pcengines/alix2d/Kconfig1
-rw-r--r--src/mainboard/pcengines/alix2d/romstage.c6
-rw-r--r--src/mainboard/traverse/geos/Kconfig1
-rw-r--r--src/mainboard/winent/pl6064/Kconfig1
-rw-r--r--src/mainboard/wyse/s50/Kconfig1
-rw-r--r--src/mainboard/wyse/s50/romstage.c3
-rw-r--r--src/southbridge/amd/cs5536/cs5536_early_setup.c3
21 files changed, 83 insertions, 18 deletions
diff --git a/src/Kconfig b/src/Kconfig
index 690a1d4864..a61efe1a8e 100644
--- a/src/Kconfig
+++ b/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
diff --git a/src/mainboard/Kconfig b/src/mainboard/Kconfig
index db1112826d..ca0d74d45d 100644
--- a/src/mainboard/Kconfig
+++ b/src/mainboard/Kconfig
@@ -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
diff --git a/src/mainboard/amd/db800/Kconfig b/src/mainboard/amd/db800/Kconfig
index e1b94e9011..834e08589c 100644
--- a/src/mainboard/amd/db800/Kconfig
+++ b/src/mainboard/amd/db800/Kconfig
@@ -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
diff --git a/src/mainboard/amd/norwich/Kconfig b/src/mainboard/amd/norwich/Kconfig
index 3dc214f00d..b265eeb103 100644
--- a/src/mainboard/amd/norwich/Kconfig
+++ b/src/mainboard/amd/norwich/Kconfig
@@ -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
diff --git a/src/mainboard/amd/rumba/Kconfig b/src/mainboard/amd/rumba/Kconfig
index beda2bd5b2..a06650cc0f 100644
--- a/src/mainboard/amd/rumba/Kconfig
+++ b/src/mainboard/amd/rumba/Kconfig
@@ -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
diff --git a/src/mainboard/artecgroup/dbe61/Kconfig b/src/mainboard/artecgroup/dbe61/Kconfig
index 52669294f7..846000ccad 100644
--- a/src/mainboard/artecgroup/dbe61/Kconfig
+++ b/src/mainboard/artecgroup/dbe61/Kconfig
@@ -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
diff --git a/src/mainboard/digitallogic/msm800sev/Kconfig b/src/mainboard/digitallogic/msm800sev/Kconfig
index a082b1fe01..444023b2bd 100644
--- a/src/mainboard/digitallogic/msm800sev/Kconfig
+++ b/src/mainboard/digitallogic/msm800sev/Kconfig
@@ -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
diff --git a/src/mainboard/iei/pcisa-lx-800-r10/Kconfig b/src/mainboard/iei/pcisa-lx-800-r10/Kconfig
index a6f5126633..e393609c88 100644
--- a/src/mainboard/iei/pcisa-lx-800-r10/Kconfig
+++ b/src/mainboard/iei/pcisa-lx-800-r10/Kconfig
@@ -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
diff --git a/src/mainboard/lippert/hurricane-lx/Kconfig b/src/mainboard/lippert/hurricane-lx/Kconfig
index 027988f959..9b20aa0759 100644
--- a/src/mainboard/lippert/hurricane-lx/Kconfig
+++ b/src/mainboard/lippert/hurricane-lx/Kconfig
@@ -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
diff --git a/src/mainboard/lippert/hurricane-lx/romstage.c b/src/mainboard/lippert/hurricane-lx/romstage.c
index 018f353fd0..b7314bf06f 100644
--- a/src/mainboard/lippert/hurricane-lx/romstage.c
+++ b/src/mainboard/lippert/hurricane-lx/romstage.c
@@ -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))) {
diff --git a/src/mainboard/lippert/literunner-lx/Kconfig b/src/mainboard/lippert/literunner-lx/Kconfig
index 482f571e8d..7b45d36ea1 100644
--- a/src/mainboard/lippert/literunner-lx/Kconfig
+++ b/src/mainboard/lippert/literunner-lx/Kconfig
@@ -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
diff --git a/src/mainboard/lippert/roadrunner-lx/Kconfig b/src/mainboard/lippert/roadrunner-lx/Kconfig
index 44326d193f..4e29742b81 100644
--- a/src/mainboard/lippert/roadrunner-lx/Kconfig
+++ b/src/mainboard/lippert/roadrunner-lx/Kconfig
@@ -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
diff --git a/src/mainboard/lippert/spacerunner-lx/Kconfig b/src/mainboard/lippert/spacerunner-lx/Kconfig
index 7526d1ecb4..f273d6cf56 100644
--- a/src/mainboard/lippert/spacerunner-lx/Kconfig
+++ b/src/mainboard/lippert/spacerunner-lx/Kconfig
@@ -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
diff --git a/src/mainboard/pcengines/alix1c/Kconfig b/src/mainboard/pcengines/alix1c/Kconfig
index b10095c902..0a016a54f5 100644
--- a/src/mainboard/pcengines/alix1c/Kconfig
+++ b/src/mainboard/pcengines/alix1c/Kconfig
@@ -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
diff --git a/src/mainboard/pcengines/alix2d/Kconfig b/src/mainboard/pcengines/alix2d/Kconfig
index bb54d1cad1..264f5d9e97 100644
--- a/src/mainboard/pcengines/alix2d/Kconfig
+++ b/src/mainboard/pcengines/alix2d/Kconfig
@@ -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
diff --git a/src/mainboard/pcengines/alix2d/romstage.c b/src/mainboard/pcengines/alix2d/romstage.c
index aa5f7a0fc4..10ab27d662 100644
--- a/src/mainboard/pcengines/alix2d/romstage.c
+++ b/src/mainboard/pcengines/alix2d/romstage.c
@@ -120,12 +120,6 @@ static u8 spd_read_byte(u8 device, u8 address)
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
diff --git a/src/mainboard/traverse/geos/Kconfig b/src/mainboard/traverse/geos/Kconfig
index 1c85149671..dd6c8dd9fa 100644
--- a/src/mainboard/traverse/geos/Kconfig
+++ b/src/mainboard/traverse/geos/Kconfig
@@ -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
diff --git a/src/mainboard/winent/pl6064/Kconfig b/src/mainboard/winent/pl6064/Kconfig
index 1ec56929d5..4f367f1fab 100644
--- a/src/mainboard/winent/pl6064/Kconfig
+++ b/src/mainboard/winent/pl6064/Kconfig
@@ -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
diff --git a/src/mainboard/wyse/s50/Kconfig b/src/mainboard/wyse/s50/Kconfig
index 75b5335717..dae8cdb2a2 100644
--- a/src/mainboard/wyse/s50/Kconfig
+++ b/src/mainboard/wyse/s50/Kconfig
@@ -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
diff --git a/src/mainboard/wyse/s50/romstage.c b/src/mainboard/wyse/s50/romstage.c
index d36173cee1..a77760d6ef 100644
--- a/src/mainboard/wyse/s50/romstage.c
+++ b/src/mainboard/wyse/s50/romstage.c
@@ -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);
diff --git a/src/southbridge/amd/cs5536/cs5536_early_setup.c b/src/southbridge/amd/cs5536/cs5536_early_setup.c
index 452e530f41..047c1a21a0 100644
--- a/src/southbridge/amd/cs5536/cs5536_early_setup.c
+++ b/src/southbridge/amd/cs5536/cs5536_early_setup.c
@@ -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.