summaryrefslogtreecommitdiffstats
path: root/src
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 /src
parentf2573bd23727db672b22f3840ce91d08ec3aea5d (diff)
downloadcoreboot-51eafdeae621f1b04db51c3b4a690fa993aa48a0.tar.gz
coreboot-51eafdeae621f1b04db51c3b4a690fa993aa48a0.tar.bz2
coreboot-51eafdeae621f1b04db51c3b4a690fa993aa48a0.zip
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
Diffstat (limited to 'src')
-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 690a1d486401..a61efe1a8e70 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 db1112826d31..ca0d74d45dee 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 e1b94e9011ab..834e08589c83 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 3dc214f00d63..b265eeb103aa 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 beda2bd5b246..a06650cc0f01 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 52669294f70e..846000ccad58 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 a082b1fe01cd..444023b2bdc4 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 a6f512663391..e393609c88b4 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 027988f95965..9b20aa07597f 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 018f353fd021..b7314bf06f7c 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 482f571e8da5..7b45d36ea1dd 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 44326d193f14..4e29742b81d8 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 7526d1ecb437..f273d6cf56c2 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 b10095c90272..0a016a54f56f 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 bb54d1cad118..264f5d9e9770 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 aa5f7a0fc40e..10ab27d6627e 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 1c85149671d4..dd6c8dd9fae6 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 1ec56929d50d..4f367f1fab5c 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 75b533571748..dae8cdb2a2a9 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 d36173cee15f..a77760d6ef73 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 452e530f41a4..047c1a21a09f 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.