coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
smbus_ops.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/device.h>
4 #include <device/path.h>
5 #include <device/smbus.h>
6 #include <device/pci.h>
7 #include <device/pci_def.h>
8 #include <device/pci_ids.h>
9 #include <device/smbus_host.h>
11 
12 static int lsmbus_read_byte(struct device *dev, u8 address)
13 {
14  u16 device;
15  struct resource *res;
16  struct bus *pbus;
17 
19  pbus = get_pbus_smbus(dev);
20  res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);
21 
22  return do_smbus_read_byte(res->base, device, address);
23 }
24 
25 static int lsmbus_write_byte(struct device *dev, u8 address, u8 data)
26 {
27  u16 device;
28  struct resource *res;
29  struct bus *pbus;
30 
32  pbus = get_pbus_smbus(dev);
33  res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);
34  return do_smbus_write_byte(res->base, device, address, data);
35 }
36 
37 static int lsmbus_block_write(struct device *dev, u8 cmd, u8 bytes, const u8 *buf)
38 {
39  u16 device;
40  struct resource *res;
41  struct bus *pbus;
42 
44  pbus = get_pbus_smbus(dev);
45  res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);
46  return do_smbus_block_write(res->base, device, cmd, bytes, buf);
47 }
48 
49 static int lsmbus_block_read(struct device *dev, u8 cmd, u8 bytes, u8 *buf)
50 {
51  u16 device;
52  struct resource *res;
53  struct bus *pbus;
54 
56  pbus = get_pbus_smbus(dev);
57  res = find_resource(pbus->dev, PCI_BASE_ADDRESS_4);
58  return do_smbus_block_read(res->base, device, cmd, bytes, buf);
59 }
60 
63  .write_byte = lsmbus_write_byte,
64  .block_read = lsmbus_block_read,
65  .block_write = lsmbus_block_write,
66 };
67 
68 void smbus_read_resources(struct device *dev)
69 {
71 
72  struct resource *res = new_resource(dev, PCI_BASE_ADDRESS_4);
73  res->base = CONFIG_FIXED_SMBUS_IO_BASE;
74  res->size = 32;
75  res->limit = res->base + res->size - 1;
78 }
enum fch_io_device device
Definition: fch.c:74
struct bus * get_pbus_smbus(struct device *dev)
Definition: smbus_ops.c:8
struct resource * new_resource(struct device *dev, unsigned int index)
See if a resource structure already exists for a given index and if not allocate one.
Definition: device_util.c:346
struct resource * find_resource(const struct device *dev, unsigned int index)
Return an existing resource structure for a given index.
Definition: device_util.c:394
uint64_t address
Definition: fw_cfg_if.h:0
static uint8_t * buf
Definition: uart.c:7
#define PCI_BASE_ADDRESS_4
Definition: pci_def.h:67
void pci_dev_read_resources(struct device *dev)
Definition: pci_device.c:534
#define IORESOURCE_RESERVE
Definition: resource.h:30
#define IORESOURCE_STORED
Definition: resource.h:32
#define IORESOURCE_ASSIGNED
Definition: resource.h:34
#define IORESOURCE_IO
Definition: resource.h:9
#define IORESOURCE_FIXED
Definition: resource.h:36
int do_smbus_block_read(uintptr_t base, u8 device, u8 cmd, size_t max_bytes, u8 *buf)
Definition: smbus.c:368
int do_smbus_block_write(uintptr_t base, u8 device, u8 cmd, size_t bytes, const u8 *buf)
Definition: smbus.c:431
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_block_write(struct device *dev, u8 cmd, u8 bytes, const u8 *buf)
Definition: smbus_ops.c:37
void smbus_read_resources(struct device *dev)
Definition: smbus_ops.c:68
static int lsmbus_block_read(struct device *dev, u8 cmd, u8 bytes, u8 *buf)
Definition: smbus_ops.c:49
static int lsmbus_write_byte(struct device *dev, u8 address, u8 data)
Definition: smbus_ops.c:25
struct smbus_bus_operations lops_smbus_bus
Definition: smbus_ops.c:61
static int lsmbus_read_byte(struct device *dev, u8 address)
Definition: smbus_ops.c:12
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45
Definition: device.h:76
DEVTREE_CONST struct device * dev
Definition: device.h:78
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
unsigned long flags
Definition: resource.h:49
resource_t limit
Definition: resource.h:47
resource_t base
Definition: resource.h:45
resource_t size
Definition: resource.h:46
int(* read_byte)(struct device *dev, u8 addr)
Definition: smbus.h:12