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 <device/device.h>
4 #include <device/pci.h>
5 #include <device/pci_ids.h>
6 #include <device/smbus.h>
7 #include <arch/ioapic.h>
8 
9 #include "hudson.h"
10 #include "smbus.c"
11 
12 #define NMI_OFF 0
13 
14 #define MAINBOARD_POWER_OFF 0
15 #define MAINBOARD_POWER_ON 1
16 
17 /*
18 * HUDSON enables all USB controllers by default in SMBUS Control.
19 * HUDSON enables SATA by default in SMBUS Control.
20 */
21 
22 static void sm_init(struct device *dev)
23 {
24  setup_ioapic(VIO_APIC_VADDR, CONFIG_MAX_CPUS);
25 }
26 
27 static int lsmbus_recv_byte(struct device *dev)
28 {
29  u32 device;
30  struct resource *res;
31  struct bus *pbus;
32 
34  pbus = get_pbus_smbus(dev);
35 
36  res = find_resource(pbus->dev, 0x90);
37 
38  return do_smbus_recv_byte(res->base, device);
39 }
40 
41 static int lsmbus_send_byte(struct device *dev, u8 val)
42 {
43  u32 device;
44  struct resource *res;
45  struct bus *pbus;
46 
48  pbus = get_pbus_smbus(dev);
49 
50  res = find_resource(pbus->dev, 0x90);
51 
52  return do_smbus_send_byte(res->base, device, val);
53 }
54 
55 static int lsmbus_read_byte(struct device *dev, u8 address)
56 {
57  u32 device;
58  struct resource *res;
59  struct bus *pbus;
60 
62  pbus = get_pbus_smbus(dev);
63 
64  res = find_resource(pbus->dev, 0x90);
65 
66  return do_smbus_read_byte(res->base, device, address);
67 }
68 
69 static int lsmbus_write_byte(struct device *dev, u8 address, u8 val)
70 {
71  u32 device;
72  struct resource *res;
73  struct bus *pbus;
74 
76  pbus = get_pbus_smbus(dev);
77 
78  res = find_resource(pbus->dev, 0x90);
79 
80  return do_smbus_write_byte(res->base, device, address, val);
81 }
82 static struct smbus_bus_operations lops_smbus_bus = {
84  .send_byte = lsmbus_send_byte,
85  .read_byte = lsmbus_read_byte,
86  .write_byte = lsmbus_write_byte,
87 };
88 
89 static void hudson_sm_read_resources(struct device *dev)
90 {
91 }
92 
93 static void hudson_sm_set_resources(struct device *dev)
94 {
95 }
96 
97 static struct device_operations smbus_ops = {
99  .set_resources = hudson_sm_set_resources,
100  .enable_resources = pci_dev_enable_resources,
101  .init = sm_init,
102  .scan_bus = scan_smbus,
103  .ops_pci = &pci_dev_ops_pci,
104  .ops_smbus_bus = &lops_smbus_bus,
105 };
106 static const struct pci_driver smbus_driver __pci_driver = {
107  .ops = &smbus_ops,
108  .vendor = PCI_VID_AMD,
109  .device = PCI_DID_AMD_SB900_SM,
110 };
#define VIO_APIC_VADDR
Definition: ioapic.h:7
void setup_ioapic(void *ioapic_base, u8 ioapic_id)
Definition: ioapic.c:160
enum fch_io_device device
Definition: fch.c:74
struct bus * get_pbus_smbus(struct device *dev)
Definition: smbus_ops.c:8
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
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_SB900_SM
Definition: pci_ids.h:530
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 void hudson_sm_read_resources(struct device *dev)
Definition: sm.c:89
static int lsmbus_recv_byte(struct device *dev)
Definition: sm.c:27
static void sm_init(struct device *dev)
Definition: sm.c:22
static int lsmbus_write_byte(struct device *dev, u8 address, u8 val)
Definition: sm.c:69
static void hudson_sm_set_resources(struct device *dev)
Definition: sm.c:93
static struct smbus_bus_operations lops_smbus_bus
Definition: sm.c:82
static const struct pci_driver smbus_driver __pci_driver
Definition: sm.c:106
static struct device_operations smbus_ops
Definition: sm.c:97
static int lsmbus_send_byte(struct device *dev, u8 val)
Definition: sm.c:41
static int lsmbus_read_byte(struct device *dev, u8 address)
Definition: sm.c:55
uint32_t u32
Definition: stdint.h:51
uint8_t u8
Definition: stdint.h:45
Definition: device.h:76
DEVTREE_CONST struct device * dev
Definition: device.h:78
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
resource_t base
Definition: resource.h:45
int(* recv_byte)(struct device *dev)
Definition: smbus.h:10
u8 val
Definition: sys.c:300