summaryrefslogtreecommitdiffstats
path: root/hw
diff options
context:
space:
mode:
authorPaulo Alcantara <pcacjr@gmail.com>2015-06-28 14:58:58 -0300
committerMichael S. Tsirkin <mst@redhat.com>2015-07-08 10:09:55 +0300
commit5add35bec1e249bb5345a47008c8f298d4760be4 (patch)
treefc4186d1a21bd7bc5868b175860507201e70a539 /hw
parent45dcdb9da632b5a5e7639707e12b1b17029c5a1e (diff)
downloadhqemu-5add35bec1e249bb5345a47008c8f298d4760be4.zip
hqemu-5add35bec1e249bb5345a47008c8f298d4760be4.tar.gz
ich9: implement strap SPKR pin logic
If the signal is sampled high, this indicates that the system is strapped to the "No Reboot" mode (ICH9 will disable the TCO Timer system reboot feature). The status of this strap is readable via the NO_REBOOT bit (CC: offset 0x3410:bit 5). The NO_REBOOT bit is set when SPKR pin on ICH9 is sampled high. This bit may be set or cleared by software if the strap is sampled low but may not override the strap when it indicates "No Reboot". This patch implements the logic where hardware has ability to set SPKR pin through a property named "noreboot" and it's sampled high by default. Signed-off-by: Paulo Alcantara <pcacjr@zytor.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/acpi/tco.c2
-rw-r--r--hw/isa/lpc_ich9.c6
2 files changed, 7 insertions, 1 deletions
diff --git a/hw/acpi/tco.c b/hw/acpi/tco.c
index 1794a54..7a026c2 100644
--- a/hw/acpi/tco.c
+++ b/hw/acpi/tco.c
@@ -64,7 +64,7 @@ static void tco_timer_expired(void *opaque)
tr->tco.sts2 |= TCO_BOOT_STS;
tr->timeouts_no = 0;
- if (!(gcs & ICH9_CC_GCS_NO_REBOOT)) {
+ if (!lpc->pin_strap.spkr_hi && !(gcs & ICH9_CC_GCS_NO_REBOOT)) {
watchdog_perform_action();
tco_timer_stop(tr);
return;
diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
index 7af24fa..360699f 100644
--- a/hw/isa/lpc_ich9.c
+++ b/hw/isa/lpc_ich9.c
@@ -692,6 +692,11 @@ static const VMStateDescription vmstate_ich9_lpc = {
}
};
+static Property ich9_lpc_properties[] = {
+ DEFINE_PROP_BOOL("noreboot", ICH9LPCState, pin_strap.spkr_hi, true),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
static void ich9_lpc_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -703,6 +708,7 @@ static void ich9_lpc_class_init(ObjectClass *klass, void *data)
dc->reset = ich9_lpc_reset;
k->init = ich9_lpc_init;
dc->vmsd = &vmstate_ich9_lpc;
+ dc->props = ich9_lpc_properties;
k->config_write = ich9_lpc_config_write;
dc->desc = "ICH9 LPC bridge";
k->vendor_id = PCI_VENDOR_ID_INTEL;
OpenPOWER on IntegriCloud