coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
i23c_pad_ctrl.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <amdblocks/acpimmio.h>
4 #include <amdblocks/i2c.h>
5 #include <console/console.h>
6 #include <types.h>
7 #include "i23c_pad_def.h"
8 
9 void fch_i23c_pad_init(unsigned int bus,
10  enum i2c_speed speed,
11  const struct i2c_pad_control *ctrl)
12 {
13  uint32_t pad_ctrl;
14 
15  pad_ctrl = misc_read32(MISC_I23C_PAD_CTRL(bus));
16 
18  pad_ctrl |= I23C_PAD_CTRL_MODE_I2C;
19 
20  switch (ctrl->rx_level) {
22  /* Default is enabled and thresholds for 1.8V operation */
23  break;
24  case I2C_PAD_RX_OFF:
25  pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
26  pad_ctrl |= I23C_PAD_CTRL_RX_SEL_OFF;
28  pad_ctrl |= I23C_PAD_CTRL_MODE_1_8V;
29  break;
30  case I2C_PAD_RX_1_8V:
31  pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
32  pad_ctrl |= I23C_PAD_CTRL_RX_SEL_ON;
34  pad_ctrl |= I23C_PAD_CTRL_MODE_1_8V;
35  break;
36  case I2C_PAD_RX_1_1V:
37  pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
38  pad_ctrl |= I23C_PAD_CTRL_RX_SEL_ON;
40  pad_ctrl |= I23C_PAD_CTRL_MODE_1_1V;
41  break;
42  default:
43  printk(BIOS_WARNING, "Invalid I2C/I3C pad RX level for bus %u\n", bus);
44  break;
45  }
46 
48 }
static uint32_t misc_read32(uint8_t reg)
Definition: acpimmio.h:266
static void misc_write32(uint8_t reg, uint32_t value)
Definition: acpimmio.h:281
#define printk(level,...)
Definition: stdlib.h:16
void fch_i23c_pad_init(unsigned int bus, enum i2c_speed speed, const struct i2c_pad_control *ctrl)
Definition: i23c_pad_ctrl.c:9
#define MISC_I23C_PAD_CTRL(bus)
Definition: i23c_pad_def.h:11
#define I23C_PAD_CTRL_RX_SEL_MASK
Definition: i23c_pad_def.h:15
#define I23C_PAD_CTRL_MODE_1_8V_1_1V_MASK
Definition: i23c_pad_def.h:55
#define I23C_PAD_CTRL_RX_SEL_ON
Definition: i23c_pad_def.h:18
#define I23C_PAD_CTRL_MODE_1_8V
Definition: i23c_pad_def.h:58
#define I23C_PAD_CTRL_MODE_I2C
Definition: i23c_pad_def.h:53
#define I23C_PAD_CTRL_RX_SEL_OFF
Definition: i23c_pad_def.h:17
#define I23C_PAD_CTRL_MODE_I3C_I2C_MASK
Definition: i23c_pad_def.h:51
#define I23C_PAD_CTRL_MODE_1_1V
Definition: i23c_pad_def.h:57
i2c_speed
Definition: i2c.h:43
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
Definition: loglevel.h:86
@ I2C_PAD_RX_NO_CHANGE
Definition: i2c.h:60
@ I2C_PAD_RX_1_1V
Definition: i2c.h:64
@ I2C_PAD_RX_OFF
Definition: i2c.h:61
@ I2C_PAD_RX_1_8V
Definition: i2c.h:63
unsigned int uint32_t
Definition: stdint.h:14
Definition: device.h:76
enum i2c_pad_rx_level rx_level
Definition: i2c.h:68