coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
i2c_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 "i2c_pad_def.h"
8 
9 void fch_i2c_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_I2C_PAD_CTRL(bus));
16 
17  pad_ctrl &= ~I2C_PAD_CTRL_NG_MASK;
18  pad_ctrl |= I2C_PAD_CTRL_NG_NORMAL;
19 
20  switch (ctrl->rx_level) {
22  break;
23  case I2C_PAD_RX_OFF:
24  pad_ctrl &= ~I2C_PAD_CTRL_RX_SEL_MASK;
25  pad_ctrl |= I2C_PAD_CTRL_RX_SEL_OFF;
26  break;
27  case I2C_PAD_RX_3_3V:
28  pad_ctrl &= ~I2C_PAD_CTRL_RX_SEL_MASK;
29  pad_ctrl |= I2C_PAD_CTRL_RX_SEL_3_3V;
30  break;
31  case I2C_PAD_RX_1_8V:
32  pad_ctrl &= ~I2C_PAD_CTRL_RX_SEL_MASK;
33  pad_ctrl |= I2C_PAD_CTRL_RX_SEL_1_8V;
34  break;
35  default:
36  printk(BIOS_WARNING, "Invalid I2C pad RX level for bus %u\n", bus);
37  break;
38  }
39 
40  pad_ctrl &= ~I2C_PAD_CTRL_FALLSLEW_MASK;
41  pad_ctrl |= speed == I2C_SPEED_STANDARD ?
43  pad_ctrl |= I2C_PAD_CTRL_FALLSLEW_EN;
45 }
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_i2c_pad_init(unsigned int bus, enum i2c_speed speed, const struct i2c_pad_control *ctrl)
Definition: i2c_pad_ctrl.c:9
#define I2C_PAD_CTRL_FALLSLEW_EN
Definition: i2c_pad_def.h:25
#define I2C_PAD_CTRL_RX_SEL_3_3V
Definition: i2c_pad_def.h:18
#define MISC_I2C_PAD_CTRL(bus)
Definition: i2c_pad_def.h:11
#define I2C_PAD_CTRL_NG_MASK
Definition: i2c_pad_def.h:13
#define I2C_PAD_CTRL_FALLSLEW_LOW
Definition: i2c_pad_def.h:24
#define I2C_PAD_CTRL_RX_SEL_MASK
Definition: i2c_pad_def.h:15
#define I2C_PAD_CTRL_FALLSLEW_STD
Definition: i2c_pad_def.h:23
#define I2C_PAD_CTRL_RX_SEL_OFF
Definition: i2c_pad_def.h:17
#define I2C_PAD_CTRL_RX_SEL_1_8V
Definition: i2c_pad_def.h:19
#define I2C_PAD_CTRL_FALLSLEW_MASK
Definition: i2c_pad_def.h:21
#define I2C_PAD_CTRL_NG_NORMAL
Definition: i2c_pad_def.h:14
i2c_speed
Definition: i2c.h:43
@ I2C_SPEED_STANDARD
Definition: i2c.h:44
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
Definition: loglevel.h:86
@ I2C_PAD_RX_3_3V
Definition: i2c.h:62
@ I2C_PAD_RX_NO_CHANGE
Definition: i2c.h:60
@ 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