coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
reg_access.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #define __SIMPLE_DEVICE__
4 
5 #include <assert.h>
6 #include <console/console.h>
7 #include <device/i2c_simple.h>
8 #include <soc/pci_devs.h>
9 #include <soc/reg_access.h>
10 #include "reg_access.h"
11 
13 {
14  int ret_code;
15  const struct reg_script *step;
16  uint8_t value = 0;
17 
18  step = ctx->step;
19  switch (step->id) {
20  default:
21  printk(BIOS_ERR, "Unknown register set (0x%08x)!\n",
22  step->id);
24  break;
25 
28  case GEN2_I2C_GPIO_EXP0:
29  case GEN2_I2C_GPIO_EXP1:
30  case GEN2_I2C_GPIO_EXP2:
31  case GEN2_I2C_LED_PWM:
32  if (ctx->display_features)
33  printk(BIOS_INFO, "I2C chip 0x%02x: ", step->id);
34  ret_code = i2c_readb(0, step->id, (uint8_t)step->reg, &value);
35  ASSERT(ret_code == 2);
36  break;
37  }
38  return value;
39 }
40 
41 static void reg_write(struct reg_script_context *ctx)
42 {
43  int ret_code;
44  const struct reg_script *step;
45  uint8_t value;
46 
47  step = ctx->step;
48  switch (step->id) {
49  default:
50  printk(BIOS_ERR, "Unknown register set (0x%08x)!\n",
51  step->id);
53  break;
54 
57  case GEN2_I2C_GPIO_EXP0:
58  case GEN2_I2C_GPIO_EXP1:
59  case GEN2_I2C_GPIO_EXP2:
60  case GEN2_I2C_LED_PWM:
61  case RMU_TEMP_REGS:
62  if (ctx->display_features)
63  printk(BIOS_INFO, "I2C chip 0x%02x: ", step->id);
64  value = (uint8_t)step->value;
65  ret_code = i2c_writeb(0, step->id, (uint8_t)step->reg, value);
66  ASSERT(ret_code == 2);
67  break;
68  }
69 }
70 
73 };
74 
pte_t value
Definition: mmu.c:91
#define ASSERT(x)
Definition: assert.h:44
#define printk(level,...)
Definition: stdlib.h:16
static int i2c_writeb(unsigned int bus, uint8_t slave, uint8_t reg, uint8_t data)
Write a byte with one segment in one frame.
Definition: i2c_simple.h:131
static int i2c_readb(unsigned int bus, uint8_t slave, uint8_t reg, uint8_t *data)
Read a byte with two segments in one frame.
Definition: i2c_simple.h:109
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
Definition: loglevel.h:72
static uint64_t reg_read(struct reg_script_context *ctx)
Definition: reg_access.c:12
REG_SCRIPT_BUS_ENTRY(mainboard_reg_script_bus_table)
static void reg_write(struct reg_script_context *ctx)
Definition: reg_access.c:41
const struct reg_script_bus_entry mainboard_reg_script_bus_table
Definition: reg_access.c:71
@ GEN2_I2C_GPIO_EXP1
Definition: reg_access.h:22
@ GEN1_I2C_GPIO_EXP_0x20
Definition: reg_access.h:18
@ GEN2_I2C_GPIO_EXP2
Definition: reg_access.h:23
@ GEN1_I2C_GPIO_EXP_0x21
Definition: reg_access.h:19
@ GEN2_I2C_GPIO_EXP0
Definition: reg_access.h:21
@ GEN2_I2C_LED_PWM
Definition: reg_access.h:24
@ MAINBOARD_TYPE
Definition: reg_access.h:13
#define REG_SCRIPT_DISPLAY_NOTHING
Definition: reg_script.h:139
@ RMU_TEMP_REGS
Definition: reg_access.h:16
unsigned long long uint64_t
Definition: stdint.h:17
unsigned char uint8_t
Definition: stdint.h:8
Definition: reg_script.h:97
const struct reg_script * step
Definition: reg_script.h:91
uint8_t display_features
Definition: reg_script.h:93
uint64_t value
Definition: reg_script.h:70
uint32_t reg
Definition: reg_script.h:68
uint32_t id
Definition: reg_script.h:73