coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
scom.h File Reference
#include <arch/byteorder.h>
#include <types.h>
#include <arch/io.h>
#include <cpu/power/spr.h>
Include dependency graph for scom.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define XSCOM_ADDR_IND_FLAG   PPC_BIT(0)
 
#define XSCOM_ADDR_IND_ADDR   PPC_BITMASK(11, 31)
 
#define XSCOM_ADDR_IND_DATA   PPC_BITMASK(48, 63)
 

Enumerations

enum  chiplet_id_t {
  PIB_CHIPLET_ID = 0x00 , PERV_CHIPLET_ID = 0x01 , N0_CHIPLET_ID = 0x02 , N1_CHIPLET_ID = 0x03 ,
  N2_CHIPLET_ID = 0x04 , N3_CHIPLET_ID = 0x05 , XB_CHIPLET_ID = 0x06 , MC01_CHIPLET_ID = 0x07 ,
  MC23_CHIPLET_ID = 0x08 , OB0_CHIPLET_ID = 0x09 , OB1_CHIPLET_ID = 0x0A , OB2_CHIPLET_ID = 0x0B ,
  OB3_CHIPLET_ID = 0x0C , PCI0_CHIPLET_ID = 0x0D , PCI1_CHIPLET_ID = 0x0E , PCI2_CHIPLET_ID = 0x0F ,
  EP00_CHIPLET_ID = 0x10 , EP01_CHIPLET_ID = 0x11 , EP02_CHIPLET_ID = 0x12 , EP03_CHIPLET_ID = 0x13 ,
  EP04_CHIPLET_ID = 0x14 , EP05_CHIPLET_ID = 0x15 , EC00_CHIPLET_ID = 0x20 , EC01_CHIPLET_ID = 0x21 ,
  EC02_CHIPLET_ID = 0x22 , EC03_CHIPLET_ID = 0x23 , EC04_CHIPLET_ID = 0x24 , EC05_CHIPLET_ID = 0x25 ,
  EC06_CHIPLET_ID = 0x26 , EC07_CHIPLET_ID = 0x27 , EC08_CHIPLET_ID = 0x28 , EC09_CHIPLET_ID = 0x29 ,
  EC10_CHIPLET_ID = 0x2A , EC11_CHIPLET_ID = 0x2B , EC12_CHIPLET_ID = 0x2C , EC13_CHIPLET_ID = 0x2D ,
  EC14_CHIPLET_ID = 0x2E , EC15_CHIPLET_ID = 0x2F , EC16_CHIPLET_ID = 0x30 , EC17_CHIPLET_ID = 0x31 ,
  EC18_CHIPLET_ID = 0x32 , EC19_CHIPLET_ID = 0x33 , EC20_CHIPLET_ID = 0x34 , EC21_CHIPLET_ID = 0x35 ,
  EC22_CHIPLET_ID = 0x36 , EC23_CHIPLET_ID = 0x37
}
 

Functions

void reset_scom_engine (void)
 
uint64_t read_scom_direct (uint64_t reg_address)
 
void write_scom_direct (uint64_t reg_address, uint64_t data)
 
uint64_t read_scom_indirect (uint64_t reg_address)
 
void write_scom_indirect (uint64_t reg_address, uint64_t data)
 
static void write_scom (uint64_t addr, uint64_t data)
 
static uint64_t read_scom (uint64_t addr)
 
static void scom_and_or (uint64_t addr, uint64_t and, uint64_t or)
 
static void scom_and (uint64_t addr, uint64_t and)
 
static void scom_or (uint64_t addr, uint64_t or)
 
static void write_scom_for_chiplet (chiplet_id_t chiplet, uint64_t addr, uint64_t data)
 
static uint64_t read_scom_for_chiplet (chiplet_id_t chiplet, uint64_t addr)
 
static void scom_and_or_for_chiplet (chiplet_id_t chiplet, uint64_t addr, uint64_t and, uint64_t or)
 
static void scom_and_for_chiplet (chiplet_id_t chiplet, uint64_t addr, uint64_t and)
 
static void scom_or_for_chiplet (chiplet_id_t chiplet, uint64_t addr, uint64_t or)
 

Macro Definition Documentation

◆ XSCOM_ADDR_IND_ADDR

#define XSCOM_ADDR_IND_ADDR   PPC_BITMASK(11, 31)

Definition at line 31 of file scom.h.

◆ XSCOM_ADDR_IND_DATA

#define XSCOM_ADDR_IND_DATA   PPC_BITMASK(48, 63)

Definition at line 32 of file scom.h.

◆ XSCOM_ADDR_IND_FLAG

#define XSCOM_ADDR_IND_FLAG   PPC_BIT(0)

Definition at line 30 of file scom.h.

Enumeration Type Documentation

◆ chiplet_id_t

Enumerator
PIB_CHIPLET_ID 

PIB chiplet.

PERV_CHIPLET_ID 

TP chiplet.

N0_CHIPLET_ID 

Nest0 (North) chiplet.

N1_CHIPLET_ID 

Nest1 (East) chiplet.

N2_CHIPLET_ID 

Nest2 (South) chiplet.

N3_CHIPLET_ID 

Nest3 (West) chiplet.

XB_CHIPLET_ID 

XBus chiplet.

MC01_CHIPLET_ID 

MC01 (West) chiplet.

MC23_CHIPLET_ID 

MC23 (East) chiplet.

OB0_CHIPLET_ID 

OBus0 chiplet.

OB1_CHIPLET_ID 

OBus1 chiplet (Cumulus only)

OB2_CHIPLET_ID 

OBus2 chiplet (Cumulus only)

OB3_CHIPLET_ID 

OBus3 chiplet.

PCI0_CHIPLET_ID 

PCIe0 chiplet.

PCI1_CHIPLET_ID 

PCIe1 chiplet.

PCI2_CHIPLET_ID 

PCIe2 chiplet.

EP00_CHIPLET_ID 

Quad0 chiplet (EX0/1)

EP01_CHIPLET_ID 

Quad1 chiplet (EX2/3)

EP02_CHIPLET_ID 

Quad2 chiplet (EX4/5)

EP03_CHIPLET_ID 

Quad3 chiplet (EX6/7)

EP04_CHIPLET_ID 

Quad4 chiplet (EX8/9)

EP05_CHIPLET_ID 

Quad5 chiplet (EX10/11)

EC00_CHIPLET_ID 

Core0 chiplet (Quad0, EX0, C0)

EC01_CHIPLET_ID 

Core1 chiplet (Quad0, EX0, C1)

EC02_CHIPLET_ID 

Core2 chiplet (Quad0, EX1, C0)

EC03_CHIPLET_ID 

Core3 chiplet (Quad0, EX1, C1)

EC04_CHIPLET_ID 

Core4 chiplet (Quad1, EX2, C0)

EC05_CHIPLET_ID 

Core5 chiplet (Quad1, EX2, C1)

EC06_CHIPLET_ID 

Core6 chiplet (Quad1, EX3, C0)

EC07_CHIPLET_ID 

Core7 chiplet (Quad1, EX3, C1)

EC08_CHIPLET_ID 

Core8 chiplet (Quad2, EX4, C0)

EC09_CHIPLET_ID 

Core9 chiplet (Quad2, EX4, C1)

EC10_CHIPLET_ID 

Core10 chiplet (Quad2, EX5, C0)

EC11_CHIPLET_ID 

Core11 chiplet (Quad2, EX5, C1)

EC12_CHIPLET_ID 

Core12 chiplet (Quad3, EX6, C0)

EC13_CHIPLET_ID 

Core13 chiplet (Quad3, EX6, C1)

EC14_CHIPLET_ID 

Core14 chiplet (Quad3, EX7, C0)

EC15_CHIPLET_ID 

Core15 chiplet (Quad3, EX7, C1)

EC16_CHIPLET_ID 

Core16 chiplet (Quad4, EX8, C0)

EC17_CHIPLET_ID 

Core17 chiplet (Quad4, EX8, C1)

EC18_CHIPLET_ID 

Core18 chiplet (Quad4, EX9, C0)

EC19_CHIPLET_ID 

Core19 chiplet (Quad4, EX9, C1)

EC20_CHIPLET_ID 

Core20 chiplet (Quad5, EX10, C0)

EC21_CHIPLET_ID 

Core21 chiplet (Quad5, EX10, C1)

EC22_CHIPLET_ID 

Core22 chiplet (Quad5, EX11, C0)

EC23_CHIPLET_ID 

Core23 chiplet (Quad5, EX11, C1)

Definition at line 40 of file scom.h.

Function Documentation

◆ read_scom()

static uint64_t read_scom ( uint64_t  addr)
inlinestatic

Definition at line 105 of file scom.h.

References addr, read_scom_direct(), read_scom_indirect(), and XSCOM_ADDR_IND_FLAG.

Referenced by read_scom_for_chiplet(), and scom_and_or().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_scom_direct()

uint64_t read_scom_direct ( uint64_t  reg_address)

Definition at line 18 of file scom.c.

References clear_hmer(), eieio(), MMIO_GROUP0_CHIP0_SCOM_BASE_ADDR, read_hmer(), reset_scom_engine(), SPR_HMER_XSCOM_OCCUPIED, SPR_HMER_XSCOM_STATUS, and val.

Referenced by read_scom(), read_scom_indirect(), and write_scom_indirect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_scom_for_chiplet()

static uint64_t read_scom_for_chiplet ( chiplet_id_t  chiplet,
uint64_t  addr 
)
inlinestatic

Definition at line 136 of file scom.h.

References addr, PPC_BITMASK, and read_scom().

Referenced by scom_and_or_for_chiplet().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_scom_indirect()

uint64_t read_scom_indirect ( uint64_t  reg_address)

Definition at line 98 of file scom.c.

References addr, BIOS_EMERG, printk, read_scom_direct(), write_scom_direct(), XSCOM_ADDR_IND_ADDR, XSCOM_DATA_IND_COMPLETE, XSCOM_DATA_IND_DATA, XSCOM_DATA_IND_ERR, XSCOM_DATA_IND_READ, and XSCOM_IND_MAX_RETRIES.

Referenced by read_scom().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ reset_scom_engine()

void reset_scom_engine ( void  )

Definition at line 122 of file scom.c.

References clear_hmer(), eieio(), write_scom_direct(), XSCOM_ERR_REG, XSCOM_LOG_REG, and XSCOM_RCVED_STAT_REG.

Referenced by read_scom_direct(), and write_scom_direct().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ scom_and()

static void scom_and ( uint64_t  addr,
uint64_t  and 
)
inlinestatic

Definition at line 119 of file scom.h.

References addr, and scom_and_or().

Here is the call graph for this function:

◆ scom_and_for_chiplet()

static void scom_and_for_chiplet ( chiplet_id_t  chiplet,
uint64_t  addr,
uint64_t  and 
)
inlinestatic

Definition at line 150 of file scom.h.

References addr, and scom_and_or_for_chiplet().

Here is the call graph for this function:

◆ scom_and_or()

static void scom_and_or ( uint64_t  addr,
uint64_t  and,
uint64_t  or 
)
inlinestatic

Definition at line 113 of file scom.h.

References addr, read_scom(), and write_scom().

Referenced by scom_and(), and scom_or().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ scom_and_or_for_chiplet()

static void scom_and_or_for_chiplet ( chiplet_id_t  chiplet,
uint64_t  addr,
uint64_t  and,
uint64_t  or 
)
inlinestatic

Definition at line 143 of file scom.h.

References addr, read_scom_for_chiplet(), and write_scom_for_chiplet().

Referenced by scom_and_for_chiplet(), and scom_or_for_chiplet().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ scom_or()

static void scom_or ( uint64_t  addr,
uint64_t  or 
)
inlinestatic

Definition at line 124 of file scom.h.

References addr, and scom_and_or().

Here is the call graph for this function:

◆ scom_or_for_chiplet()

static void scom_or_for_chiplet ( chiplet_id_t  chiplet,
uint64_t  addr,
uint64_t  or 
)
inlinestatic

Definition at line 155 of file scom.h.

References addr, and scom_and_or_for_chiplet().

Here is the call graph for this function:

◆ write_scom()

static void write_scom ( uint64_t  addr,
uint64_t  data 
)
inlinestatic

Definition at line 97 of file scom.h.

References addr, write_scom_direct(), write_scom_indirect(), and XSCOM_ADDR_IND_FLAG.

Referenced by scom_and_or(), and write_scom_for_chiplet().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_scom_direct()

void write_scom_direct ( uint64_t  reg_address,
uint64_t  data 
)

Definition at line 54 of file scom.c.

References clear_hmer(), eieio(), MMIO_GROUP0_CHIP0_SCOM_BASE_ADDR, read_hmer(), reset_scom_engine(), SPR_HMER_XSCOM_OCCUPIED, and SPR_HMER_XSCOM_STATUS.

Referenced by read_scom_indirect(), reset_scom_engine(), write_scom(), and write_scom_indirect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_scom_for_chiplet()

static void write_scom_for_chiplet ( chiplet_id_t  chiplet,
uint64_t  addr,
uint64_t  data 
)
inlinestatic

Definition at line 129 of file scom.h.

References addr, PPC_BITMASK, and write_scom().

Referenced by scom_and_or_for_chiplet().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_scom_indirect()

void write_scom_indirect ( uint64_t  reg_address,
uint64_t  data 
)

Definition at line 76 of file scom.c.

References addr, BIOS_EMERG, printk, read_scom_direct(), value, write_scom_direct(), XSCOM_ADDR_IND_ADDR, XSCOM_ADDR_IND_DATA, XSCOM_DATA_IND_COMPLETE, XSCOM_DATA_IND_ERR, and XSCOM_IND_MAX_RETRIES.

Referenced by write_scom().

Here is the call graph for this function:
Here is the caller graph for this function: