coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
early_smbus.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <stdint.h>
4 #include <device/pci_ops.h>
5 #include <device/pci.h>
6 #include <device/pci_ids.h>
7 #include <device/pci_def.h>
8 #include <device/smbus_host.h>
9 #include "i82371eb.h"
10 
12 {
13  enable_smbus();
14  enable_pm();
15 }
16 
18 {
19  return SMBUS_IO_BASE;
20 }
21 
23 {
24  u8 reg8;
25  u16 reg16;
26 
27  /* Get the SMBus/PM device of the 82371AB/EB/MB. */
30 
31  /* Set the SMBus I/O base. */
32  pci_write_config32(dev, SMBBA, base | 1);
33 
34  /* Enable the SMBus controller host interface. */
35  reg8 = pci_read_config8(dev, SMBHSTCFG);
36  reg8 |= SMB_HST_EN;
37  pci_write_config8(dev, SMBHSTCFG, reg8);
38 
39  /* Enable access to the SMBus I/O space. */
40  reg16 = pci_read_config16(dev, PCI_COMMAND);
41  reg16 |= PCI_COMMAND_IO;
42  pci_write_config16(dev, PCI_COMMAND, reg16);
43 
44  return 0;
45 }
int smbus_enable_iobar(uintptr_t base)
Definition: early_smbus.c:14
uintptr_t smbus_base(void)
Definition: early_smbus.c:9
void enable_pm(void)
Definition: early_pm.c:10
void i82371eb_early_init(void)
Definition: early_smbus.c:11
#define SMBBA
Definition: i82371eb.h:38
#define SMBHSTCFG
Definition: i82371eb.h:40
#define SMB_HST_EN
Definition: i82371eb.h:110
static __always_inline void pci_write_config32(const struct device *dev, u16 reg, u32 val)
Definition: pci_ops.h:76
static __always_inline u16 pci_read_config16(const struct device *dev, u16 reg)
Definition: pci_ops.h:52
static __always_inline u8 pci_read_config8(const struct device *dev, u16 reg)
Definition: pci_ops.h:46
static __always_inline void pci_write_config16(const struct device *dev, u16 reg, u16 val)
Definition: pci_ops.h:70
static __always_inline void pci_write_config8(const struct device *dev, u16 reg, u8 val)
Definition: pci_ops.h:64
#define PCI_COMMAND_IO
Definition: pci_def.h:11
#define PCI_COMMAND
Definition: pci_def.h:10
pci_devfn_t pci_locate_device(unsigned int pci_id, pci_devfn_t dev)
Definition: pci_early.c:110
#define PCI_DID_INTEL_82371AB_SMB_ACPI
Definition: pci_ids.h:2206
#define PCI_VID_INTEL
Definition: pci_ids.h:2157
u32 pci_devfn_t
Definition: pci_type.h:8
static void enable_smbus(void)
Definition: smbus_host.h:34
#define SMBUS_IO_BASE
Definition: smbuslib.h:7
uintptr_t base
Definition: uart.c:17
#define PCI_ID(VENDOR_ID, DEVICE_ID)
Definition: bootblock.c:10
unsigned long uintptr_t
Definition: stdint.h:21
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45