/* SPDX-License-Identifier: GPL-2.0-only */
/*
* OMAP L3 Interconnect error handling driver header
*
* Copyright ( C ) 2011 - 2015 Texas Instruments Incorporated - http : //www.ti.com/
* Santosh Shilimkar < santosh . shilimkar @ ti . com >
* sricharan < r . sricharan @ ti . com >
*/
#ifndef __OMAP_L3_NOC_H
#define __OMAP_L3_NOC_H
#define MAX_L3_MODULES 3
#define MAX_CLKDM_TARGETS 31
#define CLEAR_STDERR_LOG (1 << 31 )
#define CUSTOM_ERROR 0 x2
#define STANDARD_ERROR 0 x0
#define INBAND_ERROR 0 x0
#define L3_APPLICATION_ERROR 0 x0
#define L3_DEBUG_ERROR 0 x1
/* L3 TARG register offsets */
#define L3_TARG_STDERRLOG_MAIN 0 x48
#define L3_TARG_STDERRLOG_HDR 0 x4c
#define L3_TARG_STDERRLOG_MSTADDR 0 x50
#define L3_TARG_STDERRLOG_INFO 0 x58
#define L3_TARG_STDERRLOG_SLVOFSLSB 0 x5c
#define L3_TARG_STDERRLOG_CINFO_INFO 0 x64
#define L3_TARG_STDERRLOG_CINFO_MSTADDR 0 x68
#define L3_TARG_STDERRLOG_CINFO_OPCODE 0 x6c
#define L3_FLAGMUX_REGERR0 0 xc
#define L3_FLAGMUX_MASK0 0 x8
#define L3_TARGET_NOT_SUPPORTED NULL
#define L3_BASE_IS_SUBMODULE ((void __iomem *)(1 << 0 ))
static const char * const l3_transaction_type[] = {
/* 0 0 0 */ "Idle",
/* 0 0 1 */ "Write",
/* 0 1 0 */ "Read",
/* 0 1 1 */ "ReadEx",
/* 1 0 0 */ "Read Link",
/* 1 0 1 */ "Write Non-Posted",
/* 1 1 0 */ "Write Conditional",
/* 1 1 1 */ "Write Broadcast",
};
/**
* struct l3_masters_data - L3 Master information
* @ id : ID of the L3 Master
* @ name : master name
*/
struct l3_masters_data {
u32 id;
char *name;
};
/**
* struct l3_target_data - L3 Target information
* @ offset : Offset from base for L3 Target
* @ name : Target name
*
* Target information is organized indexed by bit field definitions .
*/
struct l3_target_data {
u32 offset;
char *name;
};
/**
* struct l3_flagmux_data - Flag Mux information
* @ offset : offset from base for flagmux register
* @ l3_targ : array indexed by flagmux index ( bit offset ) pointing to the
* target data . unsupported ones are marked with
* L3_TARGET_NOT_SUPPORTED
* @ num_targ_data : number of entries in target data
* @ mask_app_bits : ignore these from raw application irq status
* @ mask_dbg_bits : ignore these from raw debug irq status
*/
struct l3_flagmux_data {
u32 offset;
struct l3_target_data *l3_targ;
u8 num_targ_data;
u32 mask_app_bits;
u32 mask_dbg_bits;
};
/**
* struct omap_l3 - Description of data relevant for L3 bus .
* @ dev : device representing the bus ( populated runtime )
* @ l3_base : base addresses of modules ( populated runtime if 0 )
* if set to L3_BASE_IS_SUBMODULE , then uses previous
* module index as the base address
* @ l3_flag_mux : array containing flag mux data per module
* offset from corresponding module base indexed per
* module .
* @ num_modules : number of clock domains / modules .
* @ l3_masters : array pointing to master data containing name and register
* offset for the master .
* @ num_master : number of masters
* @ mst_addr_mask : Mask representing MSTADDR information of NTTP packet
* @ debug_irq : irq number of the debug interrupt ( populated runtime )
* @ app_irq : irq number of the application interrupt ( populated runtime )
*/
struct omap_l3 {
struct device *dev;
void __iomem *l3_base[MAX_L3_MODULES];
struct l3_flagmux_data **l3_flagmux;
int num_modules;
struct l3_masters_data *l3_masters;
int num_masters;
u32 mst_addr_mask;
int debug_irq;
int app_irq;
};
static struct l3_target_data omap_l3_target_data_clk1[] = {
{0 x100, "DMM1" ,},
{0 x200, "DMM2" ,},
{0 x300, "ABE" ,},
{0 x400, "L4CFG" ,},
{0 x600, "CLK2PWRDISC" ,},
{0 x0, "HOSTCLK1" ,},
{0 x900, "L4WAKEUP" ,},
};
static struct l3_flagmux_data omap_l3_flagmux_clk1 = {
.offset = 0 x500,
.l3_targ = omap_l3_target_data_clk1,
.num_targ_data = ARRAY_SIZE(omap_l3_target_data_clk1),
};
static struct l3_target_data omap_l3_target_data_clk2[] = {
{0 x500, "CORTEXM3" ,},
{0 x300, "DSS" ,},
{0 x100, "GPMC" ,},
{0 x400, "ISS" ,},
{0 x700, "IVAHD" ,},
{0 xD00, "AES1" ,},
{0 x900, "L4PER0" ,},
{0 x200, "OCMRAM" ,},
{0 x100, "GPMCsERROR" ,},
{0 x600, "SGX" ,},
{0 x800, "SL2" ,},
{0 x1600, "C2C" ,},
{0 x1100, "PWRDISCCLK1" ,},
{0 xF00, "SHA1" ,},
{0 xE00, "AES2" ,},
{0 xC00, "L4PER3" ,},
{0 xA00, "L4PER1" ,},
{0 xB00, "L4PER2" ,},
{0 x0, "HOSTCLK2" ,},
{0 x1800, "CAL" ,},
{0 x1700, "LLI" ,},
};
static struct l3_flagmux_data omap_l3_flagmux_clk2 = {
.offset = 0 x1000,
.l3_targ = omap_l3_target_data_clk2,
.num_targ_data = ARRAY_SIZE(omap_l3_target_data_clk2),
};
static struct l3_target_data omap4_l3_target_data_clk3[] = {
{0 x0100, "DEBUGSS" ,},
};
static struct l3_flagmux_data omap4_l3_flagmux_clk3 = {
.offset = 0 x0200,
.l3_targ = omap4_l3_target_data_clk3,
.num_targ_data = ARRAY_SIZE(omap4_l3_target_data_clk3),
};
static struct l3_masters_data omap_l3_masters[] = {
{ 0 x00, "MPU" },
{ 0 x04, "CS_ADP" },
{ 0 x05, "xxx" },
{ 0 x08, "DSP" },
{ 0 x0C, "IVAHD" },
{ 0 x10, "ISS" },
{ 0 x11, "DucatiM3" },
{ 0 x12, "FaceDetect" },
{ 0 x14, "SDMA_Rd" },
{ 0 x15, "SDMA_Wr" },
{ 0 x16, "xxx" },
{ 0 x17, "xxx" },
{ 0 x18, "SGX" },
{ 0 x1C, "DSS" },
{ 0 x20, "C2C" },
{ 0 x22, "xxx" },
{ 0 x23, "xxx" },
{ 0 x24, "HSI" },
{ 0 x28, "MMC1" },
{ 0 x29, "MMC2" },
{ 0 x2A, "MMC6" },
{ 0 x2C, "UNIPRO1" },
{ 0 x30, "USBHOSTHS" },
{ 0 x31, "USBOTGHS" },
{ 0 x32, "USBHOSTFS" }
};
static struct l3_flagmux_data *omap4_l3_flagmux[] = {
&omap_l3_flagmux_clk1,
&omap_l3_flagmux_clk2,
&omap4_l3_flagmux_clk3,
};
static const struct omap_l3 omap4_l3_data = {
.l3_flagmux = omap4_l3_flagmux,
.num_modules = ARRAY_SIZE(omap4_l3_flagmux),
.l3_masters = omap_l3_masters,
.num_masters = ARRAY_SIZE(omap_l3_masters),
/* The 6 MSBs of register field used to distinguish initiator */
.mst_addr_mask = 0 xFC,
};
/* OMAP5 data */
static struct l3_target_data omap5_l3_target_data_clk3[] = {
{0 x0100, "L3INSTR" ,},
{0 x0300, "DEBUGSS" ,},
{0 x0, "HOSTCLK3" ,},
};
static struct l3_flagmux_data omap5_l3_flagmux_clk3 = {
.offset = 0 x0200,
.l3_targ = omap5_l3_target_data_clk3,
.num_targ_data = ARRAY_SIZE(omap5_l3_target_data_clk3),
};
static struct l3_flagmux_data *omap5_l3_flagmux[] = {
&omap_l3_flagmux_clk1,
&omap_l3_flagmux_clk2,
&omap5_l3_flagmux_clk3,
};
static const struct omap_l3 omap5_l3_data = {
.l3_flagmux = omap5_l3_flagmux,
.num_modules = ARRAY_SIZE(omap5_l3_flagmux),
.l3_masters = omap_l3_masters,
.num_masters = ARRAY_SIZE(omap_l3_masters),
/* The 6 MSBs of register field used to distinguish initiator */
.mst_addr_mask = 0 x7E0,
};
/* DRA7 data */
static struct l3_target_data dra_l3_target_data_clk1[] = {
{0 x2a00, "AES1" ,},
{0 x0200, "DMM_P1" ,},
{0 x0600, "DSP2_SDMA" ,},
{0 x0b00, "EVE2" ,},
{0 x1300, "DMM_P2" ,},
{0 x2c00, "AES2" ,},
{0 x0300, "DSP1_SDMA" ,},
{0 x0a00, "EVE1" ,},
{0 x0c00, "EVE3" ,},
{0 x0d00, "EVE4" ,},
{0 x2900, "DSS" ,},
{0 x0100, "GPMC" ,},
{0 x3700, "PCIE1" ,},
{0 x1600, "IVA_CONFIG" ,},
{0 x1800, "IVA_SL2IF" ,},
{0 x0500, "L4_CFG" ,},
{0 x1d00, "L4_WKUP" ,},
{0 x3800, "PCIE2" ,},
{0 x3300, "SHA2_1" ,},
{0 x1200, "GPU" ,},
{0 x1000, "IPU1" ,},
{0 x1100, "IPU2" ,},
{0 x2000, "TPCC_EDMA" ,},
{0 x2e00, "TPTC1_EDMA" ,},
{0 x2b00, "TPTC2_EDMA" ,},
{0 x0700, "VCP1" ,},
{0 x2500, "L4_PER2_P3" ,},
{0 x0e00, "L4_PER3_P3" ,},
{0 x2200, "MMU1" ,},
{0 x1400, "PRUSS1" ,},
{0 x1500, "PRUSS2" },
{0 x0800, "VCP1" ,},
};
static struct l3_flagmux_data dra_l3_flagmux_clk1 = {
.offset = 0 x803500,
.l3_targ = dra_l3_target_data_clk1,
.num_targ_data = ARRAY_SIZE(dra_l3_target_data_clk1),
};
static struct l3_target_data dra_l3_target_data_clk2[] = {
{0 x0, "HOST CLK1" ,},
{0 x800000, "HOST CLK2" ,},
{0 xdead, L3_TARGET_NOT_SUPPORTED,},
{0 x3400, "SHA2_2" ,},
{0 x0900, "BB2D" ,},
{0 xdead, L3_TARGET_NOT_SUPPORTED,},
{0 x2100, "L4_PER1_P3" ,},
{0 x1c00, "L4_PER1_P1" ,},
{0 x1f00, "L4_PER1_P2" ,},
{0 x2300, "L4_PER2_P1" ,},
{0 x2400, "L4_PER2_P2" ,},
{0 x2600, "L4_PER3_P1" ,},
{0 x2700, "L4_PER3_P2" ,},
{0 x2f00, "MCASP1" ,},
{0 x3000, "MCASP2" ,},
{0 x3100, "MCASP3" ,},
{0 x2800, "MMU2" ,},
{0 x0f00, "OCMC_RAM1" ,},
{0 x1700, "OCMC_RAM2" ,},
{0 x1900, "OCMC_RAM3" ,},
{0 x1e00, "OCMC_ROM" ,},
{0 x3900, "QSPI" ,},
};
static struct l3_flagmux_data dra_l3_flagmux_clk2 = {
.offset = 0 x803600,
.l3_targ = dra_l3_target_data_clk2,
.num_targ_data = ARRAY_SIZE(dra_l3_target_data_clk2),
};
static struct l3_target_data dra_l3_target_data_clk3[] = {
{0 x0100, "L3_INSTR" },
{0 x0300, "DEBUGSS_CT_TBR" },
{0 x0, "HOST CLK3" },
};
static struct l3_flagmux_data dra_l3_flagmux_clk3 = {
.offset = 0 x200,
.l3_targ = dra_l3_target_data_clk3,
.num_targ_data = ARRAY_SIZE(dra_l3_target_data_clk3),
};
static struct l3_masters_data dra_l3_masters[] = {
{ 0 x0, "MPU" },
{ 0 x4, "CS_DAP" },
{ 0 x5, "IEEE1500_2_OCP" },
{ 0 x8, "DSP1_MDMA" },
{ 0 x9, "DSP1_CFG" },
{ 0 xA, "DSP1_DMA" },
{ 0 xB, "DSP2_MDMA" },
{ 0 xC, "DSP2_CFG" },
{ 0 xD, "DSP2_DMA" },
{ 0 xE, "IVA" },
{ 0 x10, "EVE1_P1" },
{ 0 x11, "EVE2_P1" },
{ 0 x12, "EVE3_P1" },
{ 0 x13, "EVE4_P1" },
{ 0 x14, "PRUSS1 PRU1" },
{ 0 x15, "PRUSS1 PRU2" },
{ 0 x16, "PRUSS2 PRU1" },
{ 0 x17, "PRUSS2 PRU2" },
{ 0 x18, "IPU1" },
{ 0 x19, "IPU2" },
{ 0 x1A, "SDMA" },
{ 0 x1B, "CDMA" },
{ 0 x1C, "TC1_EDMA" },
{ 0 x1D, "TC2_EDMA" },
{ 0 x20, "DSS" },
{ 0 x21, "MMU1" },
{ 0 x22, "PCIE1" },
{ 0 x23, "MMU2" },
{ 0 x24, "VIP1" },
{ 0 x25, "VIP2" },
{ 0 x26, "VIP3" },
{ 0 x27, "VPE" },
{ 0 x28, "GPU_P1" },
{ 0 x29, "BB2D" },
{ 0 x29, "GPU_P2" },
{ 0 x2B, "GMAC_SW" },
{ 0 x2C, "USB3" },
{ 0 x2D, "USB2_SS" },
{ 0 x2E, "USB2_ULPI_SS1" },
{ 0 x2F, "USB2_ULPI_SS2" },
{ 0 x30, "CSI2_1" },
{ 0 x31, "CSI2_2" },
{ 0 x33, "SATA" },
{ 0 x34, "EVE1_P2" },
{ 0 x35, "EVE2_P2" },
{ 0 x36, "EVE3_P2" },
{ 0 x37, "EVE4_P2" }
};
static struct l3_flagmux_data *dra_l3_flagmux[] = {
&dra_l3_flagmux_clk1,
&dra_l3_flagmux_clk2,
&dra_l3_flagmux_clk3,
};
static const struct omap_l3 dra_l3_data = {
.l3_base = { [1 ] = L3_BASE_IS_SUBMODULE },
.l3_flagmux = dra_l3_flagmux,
.num_modules = ARRAY_SIZE(dra_l3_flagmux),
.l3_masters = dra_l3_masters,
.num_masters = ARRAY_SIZE(dra_l3_masters),
/* The 6 MSBs of register field used to distinguish initiator */
.mst_addr_mask = 0 xFC,
};
/* AM4372 data */
static struct l3_target_data am4372_l3_target_data_200f[] = {
{0 xf00, "EMIF" ,},
{0 x1200, "DES" ,},
{0 x400, "OCMCRAM" ,},
{0 x700, "TPTC0" ,},
{0 x800, "TPTC1" ,},
{0 x900, "TPTC2" },
{0 xb00, "TPCC" ,},
{0 xd00, "DEBUGSS" ,},
{0 xdead, L3_TARGET_NOT_SUPPORTED,},
{0 x200, "SHA" ,},
{0 xc00, "SGX530" ,},
{0 x500, "AES0" ,},
{0 xa00, "L4_FAST" ,},
{0 x300, "MPUSS_L2_RAM" ,},
{0 x100, "ICSS" ,},
};
static struct l3_flagmux_data am4372_l3_flagmux_200f = {
.offset = 0 x1000,
.l3_targ = am4372_l3_target_data_200f,
.num_targ_data = ARRAY_SIZE(am4372_l3_target_data_200f),
};
static struct l3_target_data am4372_l3_target_data_100s[] = {
{0 x100, "L4_PER_0" ,},
{0 x200, "L4_PER_1" ,},
{0 x300, "L4_PER_2" ,},
{0 x400, "L4_PER_3" ,},
{0 x800, "McASP0" ,},
{0 x900, "McASP1" ,},
{0 xC00, "MMCHS2" ,},
{0 x700, "GPMC" ,},
{0 xD00, "L4_FW" ,},
{0 xdead, L3_TARGET_NOT_SUPPORTED,},
{0 x500, "ADCTSC" ,},
{0 xE00, "L4_WKUP" ,},
{0 xA00, "MAG_CARD" ,},
};
static struct l3_flagmux_data am4372_l3_flagmux_100s = {
.offset = 0 x600,
.l3_targ = am4372_l3_target_data_100s,
.num_targ_data = ARRAY_SIZE(am4372_l3_target_data_100s),
};
static struct l3_masters_data am4372_l3_masters[] = {
{ 0 x0, "M1 (128-bit)" },
{ 0 x1, "M2 (64-bit)" },
{ 0 x4, "DAP" },
{ 0 x5, "P1500" },
{ 0 xC, "ICSS0" },
{ 0 xD, "ICSS1" },
{ 0 x14, "Wakeup Processor" },
{ 0 x18, "TPTC0 Read" },
{ 0 x19, "TPTC0 Write" },
{ 0 x1A, "TPTC1 Read" },
{ 0 x1B, "TPTC1 Write" },
{ 0 x1C, "TPTC2 Read" },
{ 0 x1D, "TPTC2 Write" },
{ 0 x20, "SGX530" },
{ 0 x21, "OCP WP Traffic Probe" },
{ 0 x22, "OCP WP DMA Profiling" },
{ 0 x23, "OCP WP Event Trace" },
{ 0 x25, "DSS" },
{ 0 x28, "Crypto DMA RD" },
{ 0 x29, "Crypto DMA WR" },
{ 0 x2C, "VPFE0" },
{ 0 x2D, "VPFE1" },
{ 0 x30, "GEMAC" },
{ 0 x34, "USB0 RD" },
{ 0 x35, "USB0 WR" },
{ 0 x36, "USB1 RD" },
{ 0 x37, "USB1 WR" },
};
static struct l3_flagmux_data *am4372_l3_flagmux[] = {
&am4372_l3_flagmux_200f,
&am4372_l3_flagmux_100s,
};
static const struct omap_l3 am4372_l3_data = {
.l3_flagmux = am4372_l3_flagmux,
.num_modules = ARRAY_SIZE(am4372_l3_flagmux),
.l3_masters = am4372_l3_masters,
.num_masters = ARRAY_SIZE(am4372_l3_masters),
/* All 6 bits of register field used to distinguish initiator */
.mst_addr_mask = 0 x3F,
};
#endif /* __OMAP_L3_NOC_H */
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland