blob: 36b9525f13f7253bea4555eb0c55401dc55cfa1c [file] [log] [blame]
Angel Pons182dbde2020-04-02 23:49:05 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauer8e073822012-04-04 00:07:22 +02002
3#include <console/console.h>
Stefan Reinauer8e073822012-04-04 00:07:22 +02004#include <device/device.h>
5#include <device/pci.h>
Elyes HAOUAS551a7592019-05-01 16:56:36 +02006#include <device/pci_ops.h>
Patrick Rudolph48b24252018-07-27 18:58:06 +02007#include <southbridge/intel/common/pmbase.h>
Elyes HAOUAS551a7592019-05-01 16:56:36 +02008#include <southbridge/intel/common/tco.h>
Stefan Reinauer8e073822012-04-04 00:07:22 +02009#include <watchdog.h>
10
Patrick Rudolph48b24252018-07-27 18:58:06 +020011/*
Elyes HAOUAS551a7592019-05-01 16:56:36 +020012 * Disable ICH-NM10-PCH watchdog timer
Patrick Rudolph48b24252018-07-27 18:58:06 +020013 */
Stefan Reinauer8e073822012-04-04 00:07:22 +020014void watchdog_off(void)
15{
Patrick Rudolph48b24252018-07-27 18:58:06 +020016 unsigned int value;
Elyes HAOUAS4aec3402018-05-25 08:29:27 +020017 struct device *dev;
Stefan Reinauer8e073822012-04-04 00:07:22 +020018
Patrick Rudolph48b24252018-07-27 18:58:06 +020019 /* Get LPC device. */
Kyösti Mälkkic70eed12018-05-22 02:18:00 +030020 dev = pcidev_on_root(0x1f, 0);
Stefan Reinauer8e073822012-04-04 00:07:22 +020021
Patrick Rudolph48b24252018-07-27 18:58:06 +020022 value = pci_read_config16(dev, PCI_COMMAND);
Elyes HAOUAS551a7592019-05-01 16:56:36 +020023
Arthur Heymansc2c634a2019-11-19 18:37:28 +010024 /* Disable interrupt. */
25 value |= PCI_COMMAND_INT_DISABLE;
Patrick Rudolph48b24252018-07-27 18:58:06 +020026 pci_write_config16(dev, PCI_COMMAND, value);
Stefan Reinauer8e073822012-04-04 00:07:22 +020027
28 /* Disable the watchdog timer. */
Elyes HAOUAS551a7592019-05-01 16:56:36 +020029 value = read_pmbase16(PMBASE_TCO_OFFSET + TCO1_CNT);
Marek Maslanka06798cd2024-01-17 14:57:36 +000030 value |= TCO1_TMR_HLT;
Elyes HAOUAS551a7592019-05-01 16:56:36 +020031 write_pmbase16(PMBASE_TCO_OFFSET + TCO1_CNT, value);
Stefan Reinauer8e073822012-04-04 00:07:22 +020032
33 /* Clear TCO timeout status. */
Marek Maslanka06798cd2024-01-17 14:57:36 +000034 write_pmbase16(PMBASE_TCO_OFFSET + TCO1_STS, TCO1_STS_TIMEOUT);
Kyösti Mälkki307320c2022-11-21 17:27:07 +020035 write_pmbase16(PMBASE_TCO_OFFSET + TCO2_STS, TCO2_STS_SECOND_TO);
Stefan Reinauer8e073822012-04-04 00:07:22 +020036
Elyes HAOUAS551a7592019-05-01 16:56:36 +020037 printk(BIOS_DEBUG, "ICH-NM10-PCH: watchdog disabled\n");
Stefan Reinauer8e073822012-04-04 00:07:22 +020038}