From a527d13080bc7a7f606ae3a37e2ef35dc63df763 Mon Sep 17 00:00:00 2001 From: Felix Held Date: Fri, 11 Apr 2025 15:00:24 +0200 Subject: [PATCH] soc/amd: report I3C controller MMIO to resource allocator Add minimal common AMD I3C controller code that reports the MMIO region used by the different I3C controllers to the resource allocator. For this to work, select the introduced SOC_AMD_COMMON_BLOCK_I3C Kconfig option and add the 'soc_amd_i3c_mmio_ops' device operations to the I3C device devicetree entries on all SoCs that include I3C controllers. Change-Id: Iebf709d2548f2535b2a2a03a4f6da9531559c238 Signed-off-by: Felix Held Reviewed-on: https://review.coreboot.org/c/coreboot/+/87277 Tested-by: build bot (Jenkins) Reviewed-by: Maximilian Brune --- src/soc/amd/common/block/i2c/Kconfig | 5 +++++ src/soc/amd/common/block/i2c/Makefile.mk | 1 + src/soc/amd/common/block/i2c/i3c.c | 13 +++++++++++++ src/soc/amd/genoa_poc/Kconfig | 1 + src/soc/amd/genoa_poc/chipset.cb | 8 ++++---- src/soc/amd/glinda/Kconfig | 1 + src/soc/amd/glinda/chipset.cb | 8 ++++---- src/soc/amd/mendocino/Kconfig | 1 + src/soc/amd/mendocino/chipset_mendocino.cb | 8 ++++---- src/soc/amd/mendocino/chipset_rembrandt.cb | 8 ++++---- src/soc/amd/phoenix/Kconfig | 1 + src/soc/amd/phoenix/chipset_fsp.cb | 8 ++++---- src/soc/amd/phoenix/chipset_opensil.cb | 8 ++++---- 13 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 src/soc/amd/common/block/i2c/i3c.c diff --git a/src/soc/amd/common/block/i2c/Kconfig b/src/soc/amd/common/block/i2c/Kconfig index 9cdf8f517f..91f69078c8 100644 --- a/src/soc/amd/common/block/i2c/Kconfig +++ b/src/soc/amd/common/block/i2c/Kconfig @@ -27,3 +27,8 @@ config SOC_AMD_COMMON_BLOCK_I2C3_TPM_SHARED_WITH_PSP connected, which is shared between x86 and PSP. This is necessary to ensure proper communication with I2C peripherals connected to such bus. + +config SOC_AMD_COMMON_BLOCK_I3C + bool + help + Select this option to add FCH I3C controller functions to the build. diff --git a/src/soc/amd/common/block/i2c/Makefile.mk b/src/soc/amd/common/block/i2c/Makefile.mk index 2812fb311d..793016dd7e 100644 --- a/src/soc/amd/common/block/i2c/Makefile.mk +++ b/src/soc/amd/common/block/i2c/Makefile.mk @@ -2,3 +2,4 @@ all-$(CONFIG_SOC_AMD_COMMON_BLOCK_I2C) += i2c.c all-$(CONFIG_SOC_AMD_COMMON_BLOCK_I2C_PAD_CTRL) += i2c_pad_ctrl.c all-$(CONFIG_SOC_AMD_COMMON_BLOCK_I23C_PAD_CTRL) += i23c_pad_ctrl.c +all_x86-$(CONFIG_SOC_AMD_COMMON_BLOCK_I3C) += i3c.c diff --git a/src/soc/amd/common/block/i2c/i3c.c b/src/soc/amd/common/block/i2c/i3c.c new file mode 100644 index 0000000000..9fb75d9e10 --- /dev/null +++ b/src/soc/amd/common/block/i2c/i3c.c @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include + +static void i3c_read_resources(struct device *dev) +{ + mmio_range(dev, 0, dev->path.mmio.addr, 4 * KiB); +} + +struct device_operations soc_amd_i3c_mmio_ops = { + .read_resources = i3c_read_resources, + .set_resources = noop_set_resources, +}; diff --git a/src/soc/amd/genoa_poc/Kconfig b/src/soc/amd/genoa_poc/Kconfig index 3e7246b679..503b9fd999 100644 --- a/src/soc/amd/genoa_poc/Kconfig +++ b/src/soc/amd/genoa_poc/Kconfig @@ -29,6 +29,7 @@ config SOC_SPECIFIC_OPTIONS select SOC_AMD_COMMON_BLOCK_DATA_FABRIC_EXTENDED_MMIO select SOC_AMD_COMMON_BLOCK_HAS_ESPI select SOC_AMD_COMMON_BLOCK_I2C + select SOC_AMD_COMMON_BLOCK_I3C select SOC_AMD_COMMON_BLOCK_IOMMU select SOC_AMD_COMMON_BLOCK_LPC select SOC_AMD_COMMON_BLOCK_MCAX diff --git a/src/soc/amd/genoa_poc/chipset.cb b/src/soc/amd/genoa_poc/chipset.cb index 60eea56b2c..b22c1869ac 100644 --- a/src/soc/amd/genoa_poc/chipset.cb +++ b/src/soc/amd/genoa_poc/chipset.cb @@ -386,9 +386,9 @@ chip soc/amd/genoa_poc device mmio 0xfedc9000 alias uart_0 off ops amd_uart_mmio_ops end device mmio 0xfedca000 alias uart_1 off ops amd_uart_mmio_ops end device mmio 0xfedce000 alias uart_2 off ops amd_uart_mmio_ops end - device mmio 0xfedd2000 alias i3c_0 off end - device mmio 0xfedd3000 alias i3c_1 off end - device mmio 0xfedd4000 alias i3c_2 off end - device mmio 0xfedd6000 alias i3c_3 off end + device mmio 0xfedd2000 alias i3c_0 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd3000 alias i3c_1 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd4000 alias i3c_2 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd6000 alias i3c_3 off ops soc_amd_i3c_mmio_ops end end diff --git a/src/soc/amd/glinda/Kconfig b/src/soc/amd/glinda/Kconfig index a02492cb8c..17b349f071 100644 --- a/src/soc/amd/glinda/Kconfig +++ b/src/soc/amd/glinda/Kconfig @@ -53,6 +53,7 @@ config SOC_AMD_GLINDA select SOC_AMD_COMMON_BLOCK_HAS_ESPI_ALERT_ENABLE # TODO: Check if this is still correct select SOC_AMD_COMMON_BLOCK_I2C # TODO: Check if this is still correct select SOC_AMD_COMMON_BLOCK_I23C_PAD_CTRL # TODO: Check if this is still correct + select SOC_AMD_COMMON_BLOCK_I3C select SOC_AMD_COMMON_BLOCK_IOMMU # TODO: Check if this is still correct select SOC_AMD_COMMON_BLOCK_LPC # TODO: Check if this is still correct select SOC_AMD_COMMON_BLOCK_MCAX # TODO: Check if this is still correct diff --git a/src/soc/amd/glinda/chipset.cb b/src/soc/amd/glinda/chipset.cb index 321ecb75af..853e05250f 100644 --- a/src/soc/amd/glinda/chipset.cb +++ b/src/soc/amd/glinda/chipset.cb @@ -148,8 +148,8 @@ chip soc/amd/glinda device mmio 0xfedce000 alias uart_2 off ops amd_uart_mmio_ops end device mmio 0xfedcf000 alias uart_3 off ops amd_uart_mmio_ops end device mmio 0xfedd1000 alias uart_4 off ops amd_uart_mmio_ops end - device mmio 0xfedd2000 alias i3c_0 off end - device mmio 0xfedd3000 alias i3c_1 off end - device mmio 0xfedd4000 alias i3c_2 off end - device mmio 0xfedd6000 alias i3c_3 off end + device mmio 0xfedd2000 alias i3c_0 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd3000 alias i3c_1 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd4000 alias i3c_2 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd6000 alias i3c_3 off ops soc_amd_i3c_mmio_ops end end diff --git a/src/soc/amd/mendocino/Kconfig b/src/soc/amd/mendocino/Kconfig index f67ecb27ef..b51e9e9f54 100644 --- a/src/soc/amd/mendocino/Kconfig +++ b/src/soc/amd/mendocino/Kconfig @@ -53,6 +53,7 @@ config SOC_AMD_REMBRANDT_BASE select SOC_AMD_COMMON_BLOCK_HAS_ESPI_ALERT_ENABLE select SOC_AMD_COMMON_BLOCK_I2C select SOC_AMD_COMMON_BLOCK_I23C_PAD_CTRL + select SOC_AMD_COMMON_BLOCK_I3C select SOC_AMD_COMMON_BLOCK_IOMMU select SOC_AMD_COMMON_BLOCK_LPC select SOC_AMD_COMMON_BLOCK_LPC_SPI_DMA diff --git a/src/soc/amd/mendocino/chipset_mendocino.cb b/src/soc/amd/mendocino/chipset_mendocino.cb index 81a7932e4a..5ab6a9cd88 100644 --- a/src/soc/amd/mendocino/chipset_mendocino.cb +++ b/src/soc/amd/mendocino/chipset_mendocino.cb @@ -93,8 +93,8 @@ chip soc/amd/mendocino device mmio 0xfedce000 alias uart_2 off ops amd_uart_mmio_ops end device mmio 0xfedcf000 alias uart_3 off ops amd_uart_mmio_ops end device mmio 0xfedd1000 alias uart_4 off ops amd_uart_mmio_ops end - device mmio 0xfedd2000 alias i3c_0 off end - device mmio 0xfedd3000 alias i3c_1 off end - device mmio 0xfedd4000 alias i3c_2 off end - device mmio 0xfedd6000 alias i3c_3 off end + device mmio 0xfedd2000 alias i3c_0 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd3000 alias i3c_1 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd4000 alias i3c_2 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd6000 alias i3c_3 off ops soc_amd_i3c_mmio_ops end end diff --git a/src/soc/amd/mendocino/chipset_rembrandt.cb b/src/soc/amd/mendocino/chipset_rembrandt.cb index cb549cf03a..0783b2ff7a 100644 --- a/src/soc/amd/mendocino/chipset_rembrandt.cb +++ b/src/soc/amd/mendocino/chipset_rembrandt.cb @@ -96,8 +96,8 @@ chip soc/amd/mendocino device mmio 0xfedce000 alias uart_2 off ops amd_uart_mmio_ops end device mmio 0xfedcf000 alias uart_3 off ops amd_uart_mmio_ops end device mmio 0xfedd1000 alias uart_4 off ops amd_uart_mmio_ops end - device mmio 0xfedd2000 alias i3c_0 off end - device mmio 0xfedd3000 alias i3c_1 off end - device mmio 0xfedd4000 alias i3c_2 off end - device mmio 0xfedd6000 alias i3c_3 off end + device mmio 0xfedd2000 alias i3c_0 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd3000 alias i3c_1 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd4000 alias i3c_2 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd6000 alias i3c_3 off ops soc_amd_i3c_mmio_ops end end diff --git a/src/soc/amd/phoenix/Kconfig b/src/soc/amd/phoenix/Kconfig index b15c12d44d..07b1bc0b83 100644 --- a/src/soc/amd/phoenix/Kconfig +++ b/src/soc/amd/phoenix/Kconfig @@ -49,6 +49,7 @@ config SOC_AMD_PHOENIX_BASE select SOC_AMD_COMMON_BLOCK_HAS_ESPI_ALERT_ENABLE select SOC_AMD_COMMON_BLOCK_I2C select SOC_AMD_COMMON_BLOCK_I23C_PAD_CTRL + select SOC_AMD_COMMON_BLOCK_I3C select SOC_AMD_COMMON_BLOCK_IOMMU select SOC_AMD_COMMON_BLOCK_LPC select SOC_AMD_COMMON_BLOCK_MCAX diff --git a/src/soc/amd/phoenix/chipset_fsp.cb b/src/soc/amd/phoenix/chipset_fsp.cb index de05cbf794..dcd51f55c8 100644 --- a/src/soc/amd/phoenix/chipset_fsp.cb +++ b/src/soc/amd/phoenix/chipset_fsp.cb @@ -145,8 +145,8 @@ chip soc/amd/phoenix device mmio 0xfedce000 alias uart_2 off ops amd_uart_mmio_ops end device mmio 0xfedcf000 alias uart_3 off ops amd_uart_mmio_ops end device mmio 0xfedd1000 alias uart_4 off ops amd_uart_mmio_ops end - device mmio 0xfedd2000 alias i3c_0 off end - device mmio 0xfedd3000 alias i3c_1 off end - device mmio 0xfedd4000 alias i3c_2 off end - device mmio 0xfedd6000 alias i3c_3 off end + device mmio 0xfedd2000 alias i3c_0 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd3000 alias i3c_1 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd4000 alias i3c_2 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd6000 alias i3c_3 off ops soc_amd_i3c_mmio_ops end end diff --git a/src/soc/amd/phoenix/chipset_opensil.cb b/src/soc/amd/phoenix/chipset_opensil.cb index c2ea6c0680..157daf7f9d 100644 --- a/src/soc/amd/phoenix/chipset_opensil.cb +++ b/src/soc/amd/phoenix/chipset_opensil.cb @@ -165,8 +165,8 @@ chip soc/amd/phoenix device mmio 0xfedce000 alias uart_2 off ops amd_uart_mmio_ops end device mmio 0xfedcf000 alias uart_3 off ops amd_uart_mmio_ops end device mmio 0xfedd1000 alias uart_4 off ops amd_uart_mmio_ops end - device mmio 0xfedd2000 alias i3c_0 off end - device mmio 0xfedd3000 alias i3c_1 off end - device mmio 0xfedd4000 alias i3c_2 off end - device mmio 0xfedd6000 alias i3c_3 off end + device mmio 0xfedd2000 alias i3c_0 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd3000 alias i3c_1 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd4000 alias i3c_2 off ops soc_amd_i3c_mmio_ops end + device mmio 0xfedd6000 alias i3c_3 off ops soc_amd_i3c_mmio_ops end end