coreboot/src/include/device/path.h
Jeremy Compostella 55bf4ea07e cpu/x86/topology: Add tile and die ID CPU topology fields
This commit makes the tile and die ID CPU topology parameters
information available to support the implementation of
EFI_MP_SERVICES_PROTOCOL.GetProcessorInfo() in accordance with the
Platform Initialization Specification 1.7.

TEST=Instrumentation shows that the tile_id and die_id apic_path fields
     are properly populated.

Change-Id: If4d473901c8de02b3d6cef44f5481a1864f14d64
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/89461
Reviewed-by: Shuo Liu <shuo.liu@intel.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2025-10-13 17:09:18 +00:00

168 lines
3 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef DEVICE_PATH_H
#define DEVICE_PATH_H
#include <stdint.h>
enum device_path_type {
DEVICE_PATH_NONE = 0,
DEVICE_PATH_ROOT,
DEVICE_PATH_PCI,
DEVICE_PATH_PNP,
DEVICE_PATH_I2C,
DEVICE_PATH_APIC,
DEVICE_PATH_DOMAIN,
DEVICE_PATH_CPU_CLUSTER,
DEVICE_PATH_CPU,
DEVICE_PATH_CPU_BUS,
DEVICE_PATH_IOAPIC,
DEVICE_PATH_GENERIC,
DEVICE_PATH_SPI,
DEVICE_PATH_USB,
DEVICE_PATH_MMIO,
DEVICE_PATH_GPIO,
DEVICE_PATH_MDIO,
DEVICE_PATH_GICC_V3,
/*
* When adding path types to this table, please also update the
* DEVICE_PATH_NAMES macro below.
*/
};
#define DEVICE_PATH_NAMES { \
"DEVICE_PATH_NONE", \
"DEVICE_PATH_ROOT", \
"DEVICE_PATH_PCI", \
"DEVICE_PATH_PNP", \
"DEVICE_PATH_I2C", \
"DEVICE_PATH_APIC", \
"DEVICE_PATH_DOMAIN", \
"DEVICE_PATH_CPU_CLUSTER", \
"DEVICE_PATH_CPU", \
"DEVICE_PATH_CPU_BUS", \
"DEVICE_PATH_IOAPIC", \
"DEVICE_PATH_GENERIC", \
"DEVICE_PATH_SPI", \
"DEVICE_PATH_USB", \
"DEVICE_PATH_MMIO", \
"DEVICE_PATH_GPIO", \
"DEVICE_PATH_MDIO", \
"DEVICE_PATH_GICC_V3", \
}
struct domain_path {
unsigned int domain_id;
};
struct pci_path {
unsigned int devfn;
};
struct pnp_path {
unsigned int port;
unsigned int device;
};
struct i2c_path {
unsigned int device;
unsigned int mode_10bit;
};
struct spi_path {
unsigned int cs;
};
struct apic_path {
unsigned int initial_lapicid;
unsigned int apic_id;
unsigned int package_id;
unsigned int node_id;
unsigned int core_id;
unsigned int thread_id;
unsigned int module_id;
unsigned int tile_id;
unsigned int die_id;
/*
* Core identifier within the package, including the die group, die, tile, module, and
* specific core.
*/
unsigned int core_id_within_package;
unsigned char core_type;
};
struct ioapic_path {
uintptr_t addr;
unsigned int ioapic_id;
unsigned int gsi_base;
};
struct cpu_cluster_path {
unsigned int cluster;
};
struct cpu_path {
unsigned int id;
};
struct cpu_bus_path {
unsigned int id;
};
struct generic_path {
unsigned int id;
unsigned int subid;
};
struct usb_path {
unsigned int port_type;
unsigned int port_id;
};
struct mmio_path {
uintptr_t addr;
};
struct gpio_path {
unsigned int id;
};
struct mdio_path {
unsigned int addr;
};
struct gicc_v3_path {
unsigned long long mpidr;
unsigned int vgic_mi;
unsigned int pi_gsiv;
};
struct device_path {
enum device_path_type type;
union {
struct pci_path pci;
struct pnp_path pnp;
struct i2c_path i2c;
struct apic_path apic;
struct ioapic_path ioapic;
struct domain_path domain;
struct cpu_cluster_path cpu_cluster;
struct cpu_path cpu;
struct cpu_bus_path cpu_bus;
struct generic_path generic;
struct spi_path spi;
struct usb_path usb;
struct mmio_path mmio;
struct gpio_path gpio;
struct mdio_path mdio;
struct gicc_v3_path gicc_v3;
};
};
#define DEVICE_PATH_MAX 40
#define BUS_PATH_MAX (DEVICE_PATH_MAX+10)
extern const char *dev_path_name(enum device_path_type type);
#endif /* DEVICE_PATH_H */