blob: 48d9d58accfdf446211d78f402f320b3eb680f4a [file] [log] [blame]
Angel Pons182dbde2020-04-02 23:49:05 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Stefan Reinauerdebb11f2008-10-29 04:46:52 +00002
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02003#include <device/pci_ops.h>
Patrick Georgid0835952010-10-05 09:07:10 +00004#include <device/pci_def.h>
Kyösti Mälkki1cae4542020-01-06 12:31:34 +02005#include <device/smbus_host.h>
Stefan Reinauerdebb11f2008-10-29 04:46:52 +00006#include "i82801gx.h"
Stefan Reinauerdebb11f2008-10-29 04:46:52 +00007
Kyösti Mälkkif555a582020-01-06 19:41:42 +02008uintptr_t smbus_base(void)
Stefan Reinauerdebb11f2008-10-29 04:46:52 +00009{
Kyösti Mälkkif555a582020-01-06 19:41:42 +020010 return SMBUS_IO_BASE;
11}
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000012
Kyösti Mälkkif555a582020-01-06 19:41:42 +020013int smbus_enable_iobar(uintptr_t base)
14{
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000015 /* Set the SMBus device statically. */
Elyes HAOUASeb00e872020-04-06 09:38:38 +020016 const pci_devfn_t dev = PCI_DEV(0x0, 0x1f, 0x3);
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000017
18 /* Check to make sure we've got the right device. */
Elyes HAOUASae22fe22020-05-21 09:04:16 +020019 if (pci_read_config16(dev, PCI_DEVICE_ID) != 0x27da)
Kyösti Mälkkif555a582020-01-06 19:41:42 +020020 return -1;
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000021
22 /* Set SMBus I/O base. */
Elyes HAOUAS92646ea2020-04-04 13:43:03 +020023 pci_write_config32(dev, SMB_BASE, base | PCI_BASE_ADDRESS_SPACE_IO);
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000024
25 /* Set SMBus enable. */
26 pci_write_config8(dev, HOSTC, HST_EN);
27
28 /* Set SMBus I/O space enable. */
29 pci_write_config16(dev, PCI_COMMAND, PCI_COMMAND_IO);
30
Kyösti Mälkkif555a582020-01-06 19:41:42 +020031 return 0;
Stefan Reinauerdebb11f2008-10-29 04:46:52 +000032}