coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
sm.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <amdblocks/acpimmio.h>
4 #include <device/device.h>
5 #include <device/pci.h>
6 #include <device/pci_ids.h>
7 #include <device/smbus.h>
8 #include <device/smbus_host.h>
9 
10 static u32 get_sm_mmio(struct device *dev)
11 {
12  /*
13  * Since SMBus and ASF controller are behind the same PCIe device, we don't know behind
14  * which controller a device is. We assume here that the devices are behind the SMBus
15  * controller. The proper solution would be to handle those as MMIO devices instead of
16  * PCI ones.
17  */
18  return (uintptr_t)acpimmio_smbus;
19 }
20 
21 static int lsmbus_recv_byte(struct device *dev)
22 {
23  u8 device;
24 
25  device = dev->path.i2c.device;
27 }
28 
29 static int lsmbus_send_byte(struct device *dev, u8 val)
30 {
31  u8 device;
32 
33  device = dev->path.i2c.device;
35 }
36 
37 static int lsmbus_read_byte(struct device *dev, u8 address)
38 {
39  u8 device;
40 
41  device = dev->path.i2c.device;
43 }
44 
45 static int lsmbus_write_byte(struct device *dev, u8 address, u8 val)
46 {
47  u8 device;
48 
49  device = dev->path.i2c.device;
51 }
52 
53 static struct smbus_bus_operations lops_smbus_bus = {
55  .send_byte = lsmbus_send_byte,
56  .read_byte = lsmbus_read_byte,
57  .write_byte = lsmbus_write_byte,
58 };
59 
60 #if CONFIG(HAVE_ACPI_TABLES)
61 static const char *smbus_acpi_name(const struct device *dev)
62 {
63  return "SBUS";
64 }
65 #endif
66 
67 static struct device_operations smbus_ops = {
69  .set_resources = noop_set_resources,
70  .enable_resources = pci_dev_enable_resources,
71  .scan_bus = scan_smbus,
72  .ops_pci = &pci_dev_ops_pci,
73  .ops_smbus_bus = &lops_smbus_bus,
74 #if CONFIG(HAVE_ACPI_TABLES)
75  .acpi_name = smbus_acpi_name,
76 #endif
77 };
78 
79 static const struct pci_driver smbus_driver __pci_driver = {
80  .ops = &smbus_ops,
81  .vendor = PCI_VID_AMD,
82  /* PCI device ID is used on all integrated FCHs except Family 16h Models 00h-3Fh */
83  .device = PCI_DID_AMD_CZ_SMBUS,
84 };
uint8_t *MAYBE_CONST acpimmio_smbus
enum fch_io_device device
Definition: fch.c:74
uint64_t address
Definition: fw_cfg_if.h:0
static void noop_read_resources(struct device *dev)
Standard device operations function pointers shims.
Definition: device.h:73
static void noop_set_resources(struct device *dev)
Definition: device.h:74
void pci_dev_enable_resources(struct device *dev)
Definition: pci_device.c:721
struct pci_operations pci_dev_ops_pci
Default device operation for PCI devices.
Definition: pci_device.c:911
#define PCI_VID_AMD
Definition: pci_ids.h:496
#define PCI_DID_AMD_CZ_SMBUS
Definition: pci_ids.h:584
void scan_smbus(struct device *bus)
Definition: root_device.c:74
int do_smbus_send_byte(uintptr_t base, u8 device, u8 val)
Definition: smbus.c:96
int do_smbus_recv_byte(uintptr_t base, u8 device)
Definition: smbus.c:71
int do_smbus_read_byte(uintptr_t base, u8 device, u8 address)
Definition: smbus.c:121
int do_smbus_write_byte(uintptr_t base, u8 device, u8 address, u8 data)
Definition: smbus.c:149
static int lsmbus_recv_byte(struct device *dev)
Definition: sm.c:21
static int lsmbus_write_byte(struct device *dev, u8 address, u8 val)
Definition: sm.c:45
static struct smbus_bus_operations lops_smbus_bus
Definition: sm.c:53
static u32 get_sm_mmio(struct device *dev)
Definition: sm.c:10
static const struct pci_driver smbus_driver __pci_driver
Definition: sm.c:79
static struct device_operations smbus_ops
Definition: sm.c:67
static int lsmbus_send_byte(struct device *dev, u8 val)
Definition: sm.c:29
static int lsmbus_read_byte(struct device *dev, u8 address)
Definition: sm.c:37
static const char * smbus_acpi_name(const struct device *dev)
Definition: smbus.c:27
uint32_t u32
Definition: stdint.h:51
unsigned long uintptr_t
Definition: stdint.h:21
uint8_t u8
Definition: stdint.h:45
void(* read_resources)(struct device *dev)
Definition: device.h:39
struct i2c_path i2c
Definition: path.h:118
Definition: device.h:107
struct device_path path
Definition: device.h:115
unsigned int device
Definition: path.h:63
int(* recv_byte)(struct device *dev)
Definition: smbus.h:10
u8 val
Definition: sys.c:300