vc/amd/opensil: introduce common mpio/chip.h header file

The chip drivers in the devicetree use the path where the corresponding
chip.h file resides both to include this chip.h file in the static.c
generated by util/sconfig from the devicetree and also for the names of
the chip config and chip ops struct. To be able to build a SoC using
either the MPIO chip driver from the openSIL stub or from the actual
openSIL glue code without needing different devicetree files for the
different cases, introduce a common MPIO chip.h file that then includes
the correct MPIO header file. The chip config and ops structures also
need to be renamed to take this change into account.

Thanks to Matt for pointing out how to make the path to the actual MPIO
chip.h file configurable via a Kconfig setting. This allows overriding
this path from site-local without the need to have any reference to
site-local in the upstream code.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Iead97d1727569ec0d23a2b9c4fd96daff4bebcf6
Reviewed-on: https://review.coreboot.org/c/coreboot/+/82262
Reviewed-by: Varshit Pandya <pandyavarshit@gmail.com>
Reviewed-by: Martin L Roth <gaumless@gmail.com>
Reviewed-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Felix Held
2024-05-08 21:44:46 +02:00
committed by Martin L Roth
parent 444edcba5d
commit 0fc69141e5
8 changed files with 115 additions and 98 deletions

View File

@ -23,4 +23,13 @@ config AMD_OPENSIL_PATH
Set to the path of the openSIL directory containing meson.build.
example
config AMD_OPENSIL_MPIO_CHIP_H_FILE
string "Location of specific MPIO chip.h implementation"
default "../../genoa_poc/mpio/chip.h" if SOC_AMD_OPENSIL_GENOA_POC
default "../../stub/mpio/chip.h"
help
Set to the location of the MPIO chip.h in the selected openSIL
implementation, so that the common MPIO chip.h file can include the
specific one.
endif

View File

@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef OPENSIL_MPIO_CHIP_H
#define OPENSIL_MPIO_CHIP_H
#include CONFIG_AMD_OPENSIL_MPIO_CHIP_H_FILE
#endif /* OPENSIL_MPIO_CHIP_H */

View File

@ -9,7 +9,7 @@
#include "chip.h"
#include "../opensil.h"
struct chip_operations vendorcode_amd_opensil_genoa_poc_mpio_ops = {
struct chip_operations vendorcode_amd_opensil_chip_mpio_ops = {
.name = "AMD GENOA MPIO",
};
@ -130,7 +130,7 @@ static void per_device_config(MPIOCLASS_INPUT_BLK *mpio_data, struct device *dev
static uint32_t slot_num;
const uint32_t domain = dev->upstream->dev->path.domain.domain;
const uint32_t devfn = dev->path.pci.devfn;
const struct vendorcode_amd_opensil_genoa_poc_mpio_config *const config = dev->chip_info;
const struct vendorcode_amd_opensil_chip_mpio_config *const config = dev->chip_info;
printk(BIOS_DEBUG, "Setting MPIO port for domain 0x%x, PCI %d:%d\n",
domain, PCI_SLOT(devfn), PCI_FUNC(devfn));
@ -199,7 +199,7 @@ void configure_mpio(void)
/* Find all devices with this chip that are directly below the chip */
for (struct device *dev = &dev_root; dev; dev = dev->next)
if (dev->chip_ops == &vendorcode_amd_opensil_genoa_poc_mpio_ops &&
if (dev->chip_ops == &vendorcode_amd_opensil_chip_mpio_ops &&
dev->chip_info != dev->upstream->dev->chip_info)
per_device_config(mpio_data, dev);
}

View File

@ -54,7 +54,7 @@ enum pcie_aspm {
L0sL1,
};
struct vendorcode_amd_opensil_genoa_poc_mpio_config {
struct vendorcode_amd_opensil_chip_mpio_config {
enum mpio_type type;
uint8_t start_lane;
uint8_t end_lane;

View File

@ -3,6 +3,6 @@
#include <device/device.h>
#include "chip.h"
struct chip_operations vendorcode_amd_opensil_stub_mpio_ops = {
struct chip_operations vendorcode_amd_opensil_chip_mpio_ops = {
.name = "AMD openSIL stub MPIO",
};

View File

@ -60,7 +60,7 @@ enum pcie_slot_power_limit_scale {
SLOT_POWER_LIMIT_DIVISOR_1000 = 3, /* Scale factor 0.001 */
};
struct vendorcode_amd_opensil_stub_mpio_config {
struct vendorcode_amd_opensil_chip_mpio_config {
enum mpio_engine_type type;
uint8_t start_lane;
uint8_t end_lane;