soc/amd/common/i23c_pad_ctrl: add I3C pad config options
Before, the I2C/I3C pads could only be configured to I2C mode. To be able to use the I3C controller, add the corresponding options and implementation for the I3C pad mode with all possible voltages. Change-Id: I1cc2e830019101cfef96b9474477717a8a75111c Signed-off-by: Felix Held <felix-coreboot@felixheld.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/87435 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com>
This commit is contained in:
parent
4b58ec5ac2
commit
5b1a8b53b6
2 changed files with 31 additions and 3 deletions
|
|
@ -14,26 +14,51 @@ void fch_i23c_pad_init(unsigned int bus,
|
|||
|
||||
pad_ctrl = misc_read32(MISC_I23C_PAD_CTRL(bus));
|
||||
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I2C;
|
||||
|
||||
switch (ctrl->rx_level) {
|
||||
case I2C_PAD_RX_NO_CHANGE:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I2C;
|
||||
/* Default is enabled and thresholds for 1.8V operation */
|
||||
break;
|
||||
case I2C_PAD_RX_OFF:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I2C;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_RX_SEL_OFF;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_1_8V_1_1V_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_1_8V;
|
||||
break;
|
||||
case I2C_PAD_RX_1_8V:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I2C;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_RX_SEL_ON;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_1_8V_1_1V_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_1_8V;
|
||||
break;
|
||||
case I2C_PAD_RX_1_1V:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I2C;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_RX_SEL_ON;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_1_8V_1_1V_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_1_1V;
|
||||
break;
|
||||
case I3C_PAD_RX_NO_CHANGE:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I3C;
|
||||
break;
|
||||
case I3C_PAD_RX_1_8V:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I3C;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_RX_SEL_ON;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_1_8V_1_1V_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_1_8V;
|
||||
break;
|
||||
case I3C_PAD_RX_1_1V:
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_I3C_I2C_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_MODE_I3C;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_RX_SEL_MASK;
|
||||
pad_ctrl |= I23C_PAD_CTRL_RX_SEL_ON;
|
||||
pad_ctrl &= ~I23C_PAD_CTRL_MODE_1_8V_1_1V_MASK;
|
||||
|
|
|
|||
|
|
@ -62,6 +62,9 @@ enum i2c_pad_rx_level {
|
|||
I2C_PAD_RX_3_3V,
|
||||
I2C_PAD_RX_1_8V,
|
||||
I2C_PAD_RX_1_1V,
|
||||
I3C_PAD_RX_NO_CHANGE,
|
||||
I3C_PAD_RX_1_8V,
|
||||
I3C_PAD_RX_1_1V,
|
||||
};
|
||||
|
||||
struct i2c_pad_control {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue