#ifndef _SYS_AMDZEN_DF_H
#define _SYS_AMDZEN_DF_H
#include <sys/bitext.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum df_rev {
DF_REV_UNKNOWN = 0,
DF_REV_2 = 1 << 0,
DF_REV_3 = 1 << 1,
DF_REV_3P5 = 1 << 2,
DF_REV_4 = 1 << 3,
DF_REV_4D2 = 1 << 4
} df_rev_t;
#define DF_REV_ALL_3 (DF_REV_3 | DF_REV_3P5)
#define DF_REV_ALL_23 (DF_REV_2 | DF_REV_ALL_3)
#define DF_REV_ALL_4 (DF_REV_4 | DF_REV_4D2)
#define DF_REV_ALL (DF_REV_ALL_23 | DF_REV_ALL_4)
typedef struct df_reg_def {
df_rev_t drd_gens;
uint8_t drd_func;
uint16_t drd_reg;
} df_reg_def_t;
#define DF_FBICNT (df_reg_def_t){ .drd_gens = DF_REV_ALL, \
.drd_func = 0, .drd_reg = 0x40 }
#define DF_FBICNT_V4_GET_MAJOR(r) bitx32(r, 27, 24)
#define DF_FBICNT_V4_GET_MINOR(r) bitx32(r, 23, 16)
#define DF_FBICNT_GET_COUNT(r) bitx32(r, 7, 0)
#define DF_FBIINFO0 (df_reg_def_t){ .drd_gens = DF_REV_ALL, \
.drd_func = 0, .drd_reg = 0x44 }
#define DF_FBIINFO0_GET_SUBTYPE(r) bitx32(r, 26, 24)
#define DF_SUBTYPE_NONE 0
typedef enum {
DF_CAKE_SUBTYPE_GMI = 1,
DF_CAKE_SUBTYPE_xGMI = 2
} df_cake_subtype_t;
typedef enum {
DF_IOM_SUBTYPE_IOHUB = 1,
} df_iom_subtype_t;
typedef enum {
DF_CS_SUBTYPE_UMC = 1,
DF_CS_SUBTYPE_CCIX = 2,
DF_CS_SUBTYPE_CMP = 2
} df_cs_subtype_t;
typedef enum {
DF_CCM_SUBTYPE_CPU_V2 = 0,
DF_CCM_SUBTYPE_ACM_V4 = 1,
DF_CCM_SUBTYPE_CPU_V4P1 = 1
} df_ccm_subtype_v4_t;
typedef enum {
DF_NCM_SUBTYPE_MMHUB = 1,
DF_NCM_SUBTYPE_DCE = 2,
DF_NCM_SUBTYPE_IOMMU = 4
} df_ncm_subtype_t;
#define DF_FBIINFO0_GET_HAS_MCA(r) bitx32(r, 23, 23)
#define DF_FBIINFO0_GET_FTI_DCNT(r) bitx32(r, 21, 20)
#define DF_FBIINFO0_GET_FTI_PCNT(r) bitx32(r, 18, 16)
#define DF_FBIINFO0_GET_SDP_RESPCNT(r) bitx32(r, 14, 14)
#define DF_FBIINFO0_GET_SDP_PCNT(r) bitx32(r, 13, 12)
#define DF_FBIINFO0_GET_FTI_WIDTH(r) bitx32(r, 9, 8)
typedef enum {
DF_FTI_W_64 = 0,
DF_FTI_W_128,
DF_FTI_W_256,
DF_FTI_W_512
} df_fti_width_t;
#define DF_FBIINFO0_V3_GET_ENABLED(r) bitx32(r, 6, 6)
#define DF_FBIINFO0_GET_SDP_WIDTH(r) bitx32(r, 5, 4)
typedef enum {
DF_SDP_W_64 = 0,
DF_SDP_W_128,
DF_SDP_W_256,
DF_SDP_W_512
} df_sdp_width_t;
#define DF_FBIINFO0_GET_TYPE(r) bitx32(r, 3, 0)
typedef enum {
DF_TYPE_CCM = 0,
DF_TYPE_GCM,
DF_TYPE_NCM,
DF_TYPE_IOMS,
DF_TYPE_CS,
DF_TYPE_NCS,
DF_TYPE_TCDX,
DF_TYPE_PIE,
DF_TYPE_SPF,
DF_TYPE_LLC,
DF_TYPE_CAKE,
DF_TYPE_ICNG,
DF_TYPE_PFX,
DF_TYPE_CNLI
} df_type_t;
#define DF_FBIINFO1 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23 | \
DF_REV_4, .drd_func = 0, .drd_reg = 0x48 }
#define DF_FBINFO1_GET_FTI3_NINSTID(r) bitx32(r, 31, 24)
#define DF_FBINFO1_GET_FTI2_NINSTID(r) bitx32(r, 23, 16)
#define DF_FBINFO1_GET_FTI1_NINSTID(r) bitx32(r, 15, 8)
#define DF_FBINFO1_GET_FTI0_NINSTID(r) bitx32(r, 7, 0)
#define DF_FBIINFO2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23 | \
DF_REV_4, .drd_func = 0, .drd_reg = 0x4c }
#define DF_FBINFO2_GET_FTI5_NINSTID(r) bitx32(r, 15, 8)
#define DF_FBINFO2_GET_FTI4_NINSTID(r) bitx32(r, 7, 0)
#define DF_FBIINFO3 (df_reg_def_t){ .drd_gens = DF_REV_ALL, \
.drd_func = 0, .drd_reg = 0x50 }
#define DF_FBIINFO3_V2_GET_BLOCKID(r) bitx32(r, 15, 8)
#define DF_FBIINFO3_V3_GET_BLOCKID(r) bitx32(r, 13, 8)
#define DF_FBIINFO3_V3P5_GET_BLOCKID(r) bitx32(r, 11, 8)
#define DF_FBIINFO3_V4_GET_BLOCKID(r) bitx32(r, 19, 8)
#define DF_FBIINFO3_GET_INSTID(r) bitx32(r, 7, 0)
#define DF_CAPAB (df_reg_def_t){ .drd_gens = DF_REV_ALL, \
.drd_func = 0, .drd_reg = 0x90 }
#define DF_CAPAB_GET_EXTCSREMAP(r) bitx32(r, 2, 2)
#define DF_CAPAB_GET_SPF(r) bitx32(r, 1, 1)
#define DF_CAPAB_GET_POISON(r) bitx32(r, 0, 0)
#define DF_CS_REMAP_GET_CSX(r, x) bitx32(r, (3 + (4 * (x))), (4 * ((x))))
#define DF_SKT0_CS_REMAP0_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 0, .drd_reg = 0x60 }
#define DF_SKT1_CS_REMAP0_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 0, .drd_reg = 0x68 }
#define DF_SKT0_CS_REMAP1_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 0, .drd_reg = 0x64 }
#define DF_SKT1_CS_REMAP1_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 0, .drd_reg = 0x6c }
#define DF_CS_REMAP0A_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x180 }
#define DF_CS_REMAP0B_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x184 }
#define DF_CS_REMAP1A_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x188 }
#define DF_CS_REMAP1B_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x18c }
#define DF_CS_REMAP2A_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x190 }
#define DF_CS_REMAP2B_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x194 }
#define DF_CS_REMAP3A_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x198 }
#define DF_CS_REMAP3B_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, .drd_reg = 0x19c }
#define DF_CS_REMAP_GET_CSX_V4B(r, x) bitx32(r, (4 + (5 * (x))), (5 * ((x))))
#define DF_CS_REMAP0A_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x180 }
#define DF_CS_REMAP0B_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x184 }
#define DF_CS_REMAP0C_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x188 }
#define DF_CS_REMAP1A_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x198 }
#define DF_CS_REMAP1B_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x19c }
#define DF_CS_REMAP1C_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1a0 }
#define DF_CS_REMAP2A_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1b0 }
#define DF_CS_REMAP2B_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1b4 }
#define DF_CS_REMAP2C_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1b8 }
#define DF_CS_REMAP3A_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1c8 }
#define DF_CS_REMAP3B_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1cc }
#define DF_CS_REMAP3C_V4D2 (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, .drd_reg = 0x1d0 }
#define DF_CFG_ADDR_CTL_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x84 }
#define DF_CFG_ADDR_CTL_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc04 }
#define DF_CFG_ADDR_CTL_GET_BUS_NUM(r) bitx32(r, 7, 0)
#define DF_CFGMAP_V2(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0xa0 + ((x) * 4) }
#define DF_MAX_CFGMAP 8
#define DF_MAX_CFGMAP_TURIN 16
#define DF_CFGMAP_V2_GET_BUS_LIMIT(r) bitx32(r, 31, 24)
#define DF_CFGMAP_V2_GET_BUS_BASE(r) bitx32(r, 23, 16)
#define DF_CFGMAP_V2_GET_DEST_ID(r) bitx32(r, 11, 4)
#define DF_CFGMAP_V3_GET_DEST_ID(r) bitx32(r, 13, 4)
#define DF_CFGMAP_V3P5_GET_DEST_ID(r) bitx32(r, 7, 4)
#define DF_CFGMAP_V2_GET_WE(r) bitx32(r, 1, 1)
#define DF_CFGMAP_V2_GET_RE(r) bitx32(r, 0, 0)
#define DF_CFGMAP_BASE_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc80 + ((x) * 8) }
#define DF_CFGMAP_LIMIT_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc84 + ((x) * 8) }
#define DF_CFGMAP_BASE_V4_GET_BASE(r) bitx32(r, 23, 16)
#define DF_CFGMAP_BASE_V4_GET_SEG(r) bitx32(r, 15, 8)
#define DF_CFGMAP_BASE_V4_GET_WE(r) bitx32(r, 1, 1)
#define DF_CFGMAP_BASE_V4_GET_RE(r) bitx32(r, 0, 0)
#define DF_CFGMAP_LIMIT_V4_GET_LIMIT(r) bitx32(r, 23, 16)
#define DF_CFGMAP_LIMIT_V4_GET_DEST_ID(r) bitx32(r, 11, 0)
#define DF_CFGMAP_LIMIT_V4D2_GET_DEST_ID(r) bitx32(r, 7, 0)
#define DF_IO_BASE_V2(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0xc0 + ((x) * 8) }
#define DF_IO_BASE_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xd00 + ((x) * 8) }
#define DF_MAX_IO_RULES 8
#define DF_MAX_IO_RULES_TURIN 16
#define DF_IO_BASE_SHIFT 12
#define DF_IO_BASE_V2_GET_BASE(r) bitx32(r, 24, 12)
#define DF_IO_BASE_V2_GET_IE(r) bitx32(r, 5, 5)
#define DF_IO_BASE_V2_GET_WE(r) bitx32(r, 1, 1)
#define DF_IO_BASE_V2_GET_RE(r) bitx32(r, 0, 0)
#define DF_IO_BASE_V2_SET_BASE(r, v) bitset32(r, 24, 12, v)
#define DF_IO_BASE_V2_SET_IE(r, v) bitset32(r, 5, 5, v)
#define DF_IO_BASE_V2_SET_WE(r, v) bitset32(r, 1, 1, v)
#define DF_IO_BASE_V2_SET_RE(r, v) bitset32(r, 0, 0, v)
#define DF_IO_BASE_V4_GET_BASE(r) bitx32(r, 28, 16)
#define DF_IO_BASE_V4_GET_IE(r) bitx32(r, 5, 5)
#define DF_IO_BASE_V4_GET_WE(r) bitx32(r, 1, 1)
#define DF_IO_BASE_V4_GET_RE(r) bitx32(r, 0, 0)
#define DF_IO_BASE_V4_SET_BASE(r, v) bitset32(r, 28, 16, v)
#define DF_IO_BASE_V4_SET_IE(r, v) bitset32(r, 5, 5, v)
#define DF_IO_BASE_V4_SET_WE(r, v) bitset32(r, 1, 1, v)
#define DF_IO_BASE_V4_SET_RE(r, v) bitset32(r, 0, 0, v)
#define DF_IO_LIMIT_V2(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0xc4 + ((x) * 8) }
#define DF_IO_LIMIT_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xd04 + ((x) * 8) }
#define DF_MAX_IO_LIMIT ((1 << 24) - 1)
#define DF_IO_LIMIT_SHIFT 12
#define DF_IO_LIMIT_EXCL (1 << DF_IO_LIMIT_SHIFT)
#define DF_IO_LIMIT_V2_GET_LIMIT(r) bitx32(r, 24, 12)
#define DF_IO_LIMIT_V2_GET_DEST_ID(r) bitx32(r, 7, 0)
#define DF_IO_LIMIT_V3_GET_DEST_ID(r) bitx32(r, 9, 0)
#define DF_IO_LIMIT_V3P5_GET_DEST_ID(r) bitx32(r, 3, 0)
#define DF_IO_LIMIT_V2_SET_LIMIT(r, v) bitset32(r, 24, 12, v)
#define DF_IO_LIMIT_V2_SET_DEST_ID(r, v) bitset32(r, 7, 0, v)
#define DF_IO_LIMIT_V3_SET_DEST_ID(r, v) bitset32(r, 9, 0, v)
#define DF_IO_LIMIT_V3P5_SET_DEST_ID(r, v) bitset32(r, 3, 0, v)
#define DF_IO_LIMIT_V4_GET_LIMIT(r) bitx32(r, 28, 16)
#define DF_IO_LIMIT_V4_GET_DEST_ID(r) bitx32(r, 11, 0)
#define DF_IO_LIMIT_V4D2_GET_DEST_ID(r) bitx32(r, 7, 0)
#define DF_IO_LIMIT_V4_SET_LIMIT(r, v) bitset32(r, 28, 16, v)
#define DF_IO_LIMIT_V4_SET_DEST_ID(r, v) bitset32(r, 11, 0, v)
#define DF_IO_LIMIT_V4D2_SET_DEST_ID(r, v) bitset32(r, 7, 0, v)
#define DF_DRAM_HOLE_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x104 }
#define DF_DRAM_HOLE_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 7, \
.drd_reg = 0x104 }
#define DF_DRAM_HOLE_GET_BASE(r) bitx32(r, 31, 24)
#define DF_DRAM_HOLE_BASE_SHIFT 24
#define DF_DRAM_HOLE_GET_VALID(r) bitx32(r, 0, 0)
#define DF_DRAM_BASE_V2(r) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x110 + ((r) * 8) }
#define DF_DRAM_BASE_V2_GET_BASE(r) bitx32(r, 31, 12)
#define DF_DRAM_BASE_V2_BASE_SHIFT 28
#define DF_DRAM_BASE_V2_GET_ILV_ADDR(r) bitx32(r, 10, 8)
#define DF_DRAM_BASE_V2_GET_ILV_CHAN(r) bitx32(r, 7, 4)
#define DF_DRAM_BASE_V2_ILV_CHAN_1 0x0
#define DF_DRAM_BASE_V2_ILV_CHAN_2 0x1
#define DF_DRAM_BASE_V2_ILV_CHAN_4 0x3
#define DF_DRAM_BASE_V2_ILV_CHAN_8 0x5
#define DF_DRAM_BASE_V2_ILV_CHAN_6 0x6
#define DF_DRAM_BASE_V2_ILV_CHAN_COD4_2 0xc
#define DF_DRAM_BASE_V2_ILV_CHAN_COD2_4 0xd
#define DF_DRAM_BASE_V2_ILV_CHAN_COD1_8 0xe
#define DF_DRAM_BASE_V2_GET_HOLE_EN(r) bitx32(r, 1, 1)
#define DF_DRAM_BASE_V2_GET_VALID(r) bitx32(r, 0, 0)
#define DF_DRAM_BASE_V3_GET_ILV_ADDR(r) bitx32(r, 11, 9)
#define DF_DRAM_BASE_V3_GET_ILV_SOCK(r) bitx32(r, 8, 8)
#define DF_DRAM_BASE_V3_GET_ILV_DIE(r) bitx32(r, 7, 6)
#define DF_DRAM_BASE_V3_GET_ILV_CHAN(r) bitx32(r, 5, 2)
#define DF_DRAM_BASE_V3P5_GET_ILV_ADDR(r) bitx32(r, 11, 9)
#define DF_DRAM_BASE_V3P5_GET_ILV_SOCK(r) bitx32(r, 8, 8)
#define DF_DRAM_BASE_V3P5_GET_ILV_DIE(r) bitx32(r, 7, 7)
#define DF_DRAM_BASE_V3P5_GET_ILV_CHAN(r) bitx32(r, 6, 2)
#define DF_DRAM_ILV_ADDR_8 0
#define DF_DRAM_ILV_ADDR_9 1
#define DF_DRAM_ILV_ADDR_10 2
#define DF_DRAM_ILV_ADDR_11 3
#define DF_DRAM_ILV_ADDR_12 4
#define DF_DRAM_ILV_ADDR_BASE 8
#define DF_DRAM_LIMIT_V2(r) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x114 + ((r) * 8) }
#define DF_DRAM_LIMIT_V2_GET_LIMIT(r) bitx32(r, 31, 12)
#define DF_DRAM_LIMIT_V2_LIMIT_SHIFT 28
#define DF_DRAM_LIMIT_V2_LIMIT_EXCL (1 << 28)
#define DF_DRAM_LIMIT_V2_GET_ILV_DIE(r) bitx32(r, 11, 10)
#define DF_DRAM_LIMIT_V2_GET_ILV_SOCK(r) bitx32(r, 8, 8)
#define DF_DRAM_LIMIT_V2_GET_DEST_ID(r) bitx32(r, 7, 0)
#define DF_DRAM_LIMIT_V3_GET_BUS_BREAK(r) bitx32(r, 10, 10)
#define DF_DRAM_LIMIT_V3_GET_DEST_ID(r) bitx32(r, 9, 0)
#define DF_DRAM_LIMIT_V3P5_GET_DEST_ID(r) bitx32(r, 3, 0)
#define DF_DRAM_BASE_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, \
.drd_reg = 0xe00 + ((x) * 0x10) }
#define DF_DRAM_BASE_V4D2(x) (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, \
.drd_reg = 0x200 + ((x) * 0x10) }
#define DF_DRAM_BASE_V4_GET_ADDR(r) bitx32(r, 27, 0)
#define DF_DRAM_BASE_V4_BASE_SHIFT 28
#define DF_DRAM_LIMIT_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, \
.drd_reg = 0xe04 + ((x) * 0x10) }
#define DF_DRAM_LIMIT_V4D2(x) (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, \
.drd_reg = 0x204 + ((x) * 0x10) }
#define DF_DRAM_LIMIT_V4_GET_ADDR(r) bitx32(r, 27, 0)
#define DF_DRAM_LIMIT_V4_LIMIT_SHIFT 28
#define DF_DRAM_LIMIT_V4_LIMIT_EXCL (1 << 28)
#define DF_DRAM_CTL_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, \
.drd_reg = 0xe08 + ((x) * 0x10) }
#define DF_DRAM_CTL_V4D2(x) (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, \
.drd_reg = 0x208 + ((x) * 0x10) }
#define DF_DRAM_CTL_V4_GET_DEST_ID(r) bitx32(r, 27, 16)
#define DF_DRAM_CTL_V4D2_GET_DEST_ID(r) bitx32(r, 23, 16)
#define DF_DRAM_CTL_V4D2_GET_HASH_1T(r) bitx32(r, 15, 15)
#define DF_DRAM_CTL_V4_GET_COL_SWIZ(r) bitx32(r, 11, 11)
#define DF_DRAM_CTL_V4_GET_HASH_1G(r) bitx32(r, 10, 10)
#define DF_DRAM_CTL_V4_GET_HASH_2M(r) bitx32(r, 9, 9)
#define DF_DRAM_CTL_V4_GET_HASH_64K(r) bitx32(r, 8, 8)
#define DF_DRAM_CTL_V4D2_GET_HASH_4K(r) bitx32(r, 7, 7)
#define DF_DRAM_CTL_V4_GET_REMAP_SEL(r) bitx32(r, 7, 5)
#define DF_DRAM_CTL_V4D2_GET_REMAP_SEL(r) bitx32(r, 6, 5)
#define DF_DRAM_CTL_V4_GET_REMAP_EN(r) bitx32(r, 4, 4)
#define DF_DRAM_CTL_V4_GET_SCM(r) bitx32(r, 2, 2)
#define DF_DRAM_CTL_V4_GET_HOLE_EN(r) bitx32(r, 1, 1)
#define DF_DRAM_CTL_V4_GET_VALID(r) bitx32(r, 0, 0)
#define DF_DRAM_ILV_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 7, \
.drd_reg = 0xe0c + ((x) * 0x10) }
#define DF_DRAM_ILV_V4D2(x) (df_reg_def_t){ .drd_gens = DF_REV_4D2, \
.drd_func = 7, \
.drd_reg = 0x20c + ((x) * 0x10) }
#define DF_DRAM_ILV_V4_GET_SOCK(r) bitx32(r, 18, 18)
#define DF_DRAM_ILV_V4_GET_DIE(r) bitx32(r, 13, 12)
#define DF_DRAM_ILV_V4D2_GET_CHAN(r) bitx32(r, 9, 4)
#define DF_DRAM_ILV_V4D2_CHAN_1 0x0
#define DF_DRAM_ILV_V4D2_CHAN_2 0x1
#define DF_DRAM_ILV_V4D2_CHAN_4 0x3
#define DF_DRAM_ILV_V4D2_CHAN_8 0x5
#define DF_DRAM_ILV_V4D2_CHAN_16 0x7
#define DF_DRAM_ILV_V4D2_CHAN_32 0x8
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_16S8CH_1K 0xc
#define DF_DRAM_ILV_V4D2_CHAN_NPS0_24CH_1K 0xe
#define DF_DRAM_ILV_V4D2_CHAN_NPS4_2CH_1K 0x10
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_4CH_1K 0x11
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_8S4CH_1K 0x12
#define DF_DRAM_ILV_V4D2_CHAN_NPS4_3CH_1K 0x13
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_6CH_1K 0x14
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_12CH_1K 0x15
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_5CH_1K 0x16
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_10CH_1K 0x17
#define DF_DRAM_ILV_V4D2_CHAN_MI3H_8CH 0x18
#define DF_DRAM_ILV_V4D2_CHAN_MI3H_16CH 0x19
#define DF_DRAM_ILV_V4D2_CHAN_MI3H_32CH 0x1a
#define DF_DRAM_ILV_V4D2_CHAN_NPS4_2CH_2K 0x20
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_4CH_2K 0x21
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_8S4CH_2K 0x22
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_16S8CH_2K 0x23
#define DF_DRAM_ILV_V4D2_CHAN_NPS4_3CH_2K 0x24
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_6CH_2K 0x25
#define DF_DRAM_ILV_V4D2_CHAN_NPS1_12CH_2K 0x26
#define DF_DRAM_ILV_V4D2_CHAN_NPS0_24CH_2K 0x27
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_5CH_2K 0x28
#define DF_DRAM_ILV_V4D2_CHAN_NPS2_10CH_2K 0x29
#define DF_DRAM_ILV_V4_GET_CHAN(r) bitx32(r, 8, 4)
#define DF_DRAM_ILV_V4_CHAN_1 0x0
#define DF_DRAM_ILV_V4_CHAN_2 0x1
#define DF_DRAM_ILV_V4_CHAN_4 0x3
#define DF_DRAM_ILV_V4_CHAN_8 0x5
#define DF_DRAM_ILV_V4_CHAN_16 0x7
#define DF_DRAM_ILV_V4_CHAN_32 0x8
#define DF_DRAM_ILV_V4_CHAN_NPS4_2CH 0x10
#define DF_DRAM_ILV_V4_CHAN_NPS2_4CH 0x11
#define DF_DRAM_ILV_V4_CHAN_NPS1_8CH 0x12
#define DF_DRAM_ILV_V4_CHAN_NPS4_3CH 0x13
#define DF_DRAM_ILV_V4_CHAN_NPS2_6CH 0x14
#define DF_DRAM_ILV_V4_CHAN_NPS1_12CH 0x15
#define DF_DRAM_ILV_V4_CHAN_NPS2_5CH 0x16
#define DF_DRAM_ILV_V4_CHAN_NPS1_10CH 0x17
#define DF_DRAM_ILV_V4_GET_ADDR(r) bitx32(r, 2, 0)
#define DF_DRAM_OFFSET_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x1b4 }
#define DF_DRAM_OFFSET_V4(r) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 7, \
.drd_reg = 0x140 + ((r) * 4) }
#define DF_DRAM_OFFSET_V2_GET_OFFSET(r) bitx32(r, 31, 20)
#define DF_DRAM_OFFSET_V3_GET_OFFSET(r) bitx32(r, 31, 12)
#define DF_DRAM_OFFSET_V4_GET_OFFSET(r) bitx32(r, 24, 1)
#define DF_DRAM_OFFSET_SHIFT 28
#define DF_DRAM_OFFSET_GET_EN(r) bitx32(r, 0, 0)
#define DF_VGA_EN_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x80 }
#define DF_VGA_EN_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc08 }
#define DF_VGA_EN_GET_FABID(r) bitx32(r, 15, 4)
#define DF_VGA_EN_GET_CPUDIS(r) bitx32(r, 2, 2)
#define DF_VGA_EN_GET_NP(r) bitx32(r, 1, 1)
#define DF_VGA_EN_GET_EN(r) bitx32(r, 0, 0)
#define DF_ECAM_BASE_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc10 }
#define DF_ECAM_BASE_EXT_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc14 }
#define DF_ECAM_LIMIT_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc18 }
#define DF_ECAM_LIMIT_EXT_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xc1c }
#define DF_ECAM_V4_GET_ADDR(r) bitx32(r, 31, 20)
#define DF_ECAM_V4_SET_ADDR(r, v) bitset32(r, 31, 20, v)
#define DF_ECAM_V4_ADDR_SHIFT 20
#define DF_ECAM_LIMIT_EXCL (1 << DF_ECAM_V4_ADDR_SHIFT)
#define DF_ECAM_BASE_V4_GET_EN(r) bitx32(r, 0, 0)
#define DF_ECAM_BASE_V4_SET_EN(r, v) bitset32(r, 0, 0, v)
#define DF_ECAM_EXT_V4_GET_ADDR(r) bitx32(r, 23, 0)
#define DF_ECAM_EXT_V4_SET_ADDR(r, v) bitset32(r, 23, 0, v)
#define DF_ECAM_EXT_V4_ADDR_SHIFT 32
#define DF_MMIO_BASE_V2(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x200 + ((x) * 0x10) }
#define DF_MMIO_LIMIT_V2(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x204 + ((x) * 0x10) }
#define DF_MMIO_BASE_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xd80 + ((x) * 0x10) }
#define DF_MMIO_LIMIT_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xd84 + ((x) * 0x10) }
#define DF_MMIO_SHIFT 16
#define DF_MMIO_LIMIT_EXCL (1 << DF_MMIO_SHIFT)
#define DF_MAX_MMIO_RULES 16
#define DF_MAX_MMIO_RULES_TURIN 32
#define DF_MMIO_CTL_V2(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 0, \
.drd_reg = 0x208 + ((x) * 0x10) }
#define DF_MMIO_CTL_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xd88 + ((x) * 0x10) }
#define DF_MMIO_CTL_V2_GET_NP(r) bitx32(r, 12, 12)
#define DF_MMIO_CTL_V2_GET_DEST_ID(r) bitx32(r, 11, 4)
#define DF_MMIO_CTL_V2_SET_NP(r, v) bitset32(r, 12, 12, v)
#define DF_MMIO_CTL_V2_SET_DEST_ID(r, v) bitset32(r, 11, 4, v)
#define DF_MMIO_CTL_V3_GET_NP(r) bitx32(r, 16, 16)
#define DF_MMIO_CTL_V3_GET_DEST_ID(r) bitx32(r, 13, 4)
#define DF_MMIO_CTL_V3P5_GET_DEST_ID(r) bitx32(r, 7, 4)
#define DF_MMIO_CTL_V3_SET_NP(r, v) bitset32(r, 16, 16, v)
#define DF_MMIO_CTL_V3_SET_DEST_ID(r, v) bitset32(r, 13, 4, v)
#define DF_MMIO_CTL_V3P5_SET_DEST_ID(r, v) bitset32(r, 7, 4, v)
#define DF_MMIO_CTL_V4_GET_DEST_ID(r) bitx32(r, 27, 16)
#define DF_MMIO_CTL_V4D2_GET_DEST_ID(r) bitx32(r, 23, 16)
#define DF_MMIO_CTL_V4_GET_NP(r) bitx32(r, 3, 3)
#define DF_MMIO_CTL_V4_SET_DEST_ID(r, v) bitset32(r, 27, 16, v)
#define DF_MMIO_CTL_V4D2_SET_DEST_ID(r, v) bitset32(r, 23, 16, v)
#define DF_MMIO_CTL_V4_SET_NP(r, v) bitset32(r, 3, 3, v)
#define DF_MMIO_CTL_GET_CPU_DIS(r) bitx32(r, 2, 2)
#define DF_MMIO_CTL_GET_WE(r) bitx32(r, 1, 1)
#define DF_MMIO_CTL_GET_RE(r) bitx32(r, 0, 0)
#define DF_MMIO_CTL_SET_CPU_DIS(r, v) bitset32(r, 2, 2, v)
#define DF_MMIO_CTL_SET_WE(r, v) bitset32(r, 1, 1, v)
#define DF_MMIO_CTL_SET_RE(r, v) bitset32(r, 0, 0, v)
#define DF_MMIO_EXT_V4(x) (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 0, \
.drd_reg = 0xd8c + ((x) * 0x10) }
#define DF_MMIO_EXT_V4_GET_LIMIT(r) bitx32(r, 23, 16)
#define DF_MMIO_EXT_V4_GET_BASE(r) bitx32(r, 7, 0)
#define DF_MMIO_EXT_V4_SET_LIMIT(r, v) bitset32(r, 23, 16, v)
#define DF_MMIO_EXT_V4_SET_BASE(r, v) bitset32(r, 7, 0, v)
#define DF_MMIO_EXT_SHIFT 48
#define DF_GLOB_CTL_V3 (df_reg_def_t){ .drd_gens = DF_REV_ALL_3, \
.drd_func = 0, \
.drd_reg = 0x3F8 }
#define DF_GLOB_CTL_V3_GET_HASH_1G(r) bitx32(r, 22, 22)
#define DF_GLOB_CTL_V3_GET_HASH_2M(r) bitx32(r, 21, 21)
#define DF_GLOB_CTL_V3_GET_HASH_64K(r) bitx32(r, 20, 20)
typedef enum {
DF_DIE_TYPE_CPU = 0,
DF_DIE_TYPE_APU,
DF_DIE_TYPE_dGPU
} df_die_type_t;
#define DF_SYSCFG_V2 (df_reg_def_t){ .drd_gens = DF_REV_2, \
.drd_func = 1, \
.drd_reg = 0x200 }
#define DF_SYSCFG_V2_GET_SOCK_ID(r) bitx32(r, 27, 27)
#define DF_SYSCFG_V2_GET_DIE_ID(r) bitx32(r, 25, 24)
#define DF_SYSCFG_V2_GET_MY_TYPE(r) bitx32(r, 22, 21)
#define DF_SYSCFG_V2_GET_LOCAL_IS_ME(r) bitx32(r, 19, 16)
#define DF_SYSCFG_V2_GET_LOCAL_TYPE3(r) bitx32(r, 13, 12)
#define DF_SYSCFG_V2_GET_LOCAL_TYPE2(r) bitx32(r, 11, 10)
#define DF_SYSCFG_V2_GET_LOCAL_TYPE1(r) bitx32(r, 9, 8)
#define DF_SYSCFG_V2_GET_LOCAL_TYPE0(r) bitx32(r, 7, 6)
#define DF_SYSCFG_V2_GET_OTHER_SOCK(r) bitx32(r, 5, 5)
#define DF_SYSCFG_V2_GET_DIE_PRESENT(r) bitx32(r, 4, 0)
#define DF_SYSCFG_V2_DIE_PRESENT(x) bitx32(r, 3, 0)
#define DF_SYSCFG_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 1, \
.drd_reg = 0x200 }
#define DF_SYSCFG_V3_GET_NODE_ID(r) bitx32(r, 30, 28)
#define DF_SYSCFG_V3_GET_OTHER_SOCK(r) bitx32(r, 27, 27)
#define DF_SYSCFG_V3_GET_OTHER_TYPE(r) bitx32(r, 26, 25)
#define DF_SYSCFG_V3_GET_MY_TYPE(r) bitx32(r, 24, 23)
#define DF_SYSCFG_V3_GET_DIE_TYPE(r) bitx32(r, 18, 11)
#define DF_SYSCFG_V3_GET_DIE_PRESENT(r) bitx32(r, 7, 0)
#define DF_SYSCFG_V3P5 (df_reg_def_t){ .drd_gens = DF_REV_3P5, \
.drd_func = 1, \
.drd_reg = 0x140 }
#define DF_SYSCFG_V3P5_GET_NODE_ID(r) bitx32(r, 19, 16)
#define DF_SYSCFG_V3P5_GET_OTHER_SOCK(r) bitx32(r, 8, 8)
#define DF_SYSCFG_V3P5_GET_NODE_MAP(r) bitx32(r, 4, 4)
#define DF_SYSCFG_V3P5_GET_OTHER_TYPE(r) bitx32(r, 3, 2)
#define DF_SYSCFG_V3P5_GET_MY_TYPE(r) bitx32(r, 1, 0)
#define DF_SYSCFG_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x180 }
#define DF_SYSCFG_V4_GET_NODE_ID(r) bitx32(r, 27, 16)
#define DF_SYSCFG_V4_GET_OTHER_SOCK(r) bitx32(r, 8, 8)
#define DF_SYSCFG_V4_GET_NODE_MAP(r) bitx32(r, 4, 4)
#define DF_SYSCFG_V4_GET_OTHER_TYPE(r) bitx32(r, 3, 2)
#define DF_SYSCFG_V4_GET_MY_TYPE(r) bitx32(r, 1, 0)
#define DF_COMPCNT_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 1, \
.drd_reg = 0x204 }
#define DF_COMPCNT_V2_GET_IOMS(r) bitx32(r, 23, 16)
#define DF_COMPCNT_V2_GET_GCM(r) bitx32(r, 15, 8)
#define DF_COMPCNT_V2_GET_PIE(r) bitx32(r, 7, 0)
#define DF_COMPCNT_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x184 }
#define DF_COMPCNT_V4_GET_IOS(r) bitx32(r, 31, 26)
#define DF_COMPCNT_V4_GET_GCM(r) bitx32(r, 25, 16)
#define DF_COMPCNT_V4_GET_IOM(r) bitx32(r, 15, 8)
#define DF_COMPCNT_V4_GET_PIE(r) bitx32(r, 7, 0)
#define DF_FIDMASK_V2 (df_reg_def_t){ .drd_gens = DF_REV_2, \
.drd_func = 1, \
.drd_reg = 0x208 }
#define DF_FIDMASK_V2_GET_SOCK_SHIFT(r) bitx32(r, 31, 28)
#define DF_FIDMASK_V2_GET_DIE_SHIFT(r) bitx32(r, 27, 24)
#define DF_FIDMASK_V2_GET_SOCK_MASK(r) bitx32(r, 23, 16)
#define DF_FIDMASK_V2_GET_DIE_MASK(r) bitx32(r, 15, 8)
#define DF_FIDMASK0_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 1, \
.drd_reg = 0x208 }
#define DF_FIDMASK0_V3_GET_NODE_MASK(r) bitx32(r, 25, 16)
#define DF_FIDMASK0_V3_GET_COMP_MASK(r) bitx32(r, 9, 0)
#define DF_FIDMASK1_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 1, \
.drd_reg = 0x20c }
#define DF_FIDMASK1_V3_GET_SOCK_MASK(r) bitx32(r, 26, 24)
#define DF_FIDMASK1_V3_GET_DIE_MASK(r) bitx32(r, 18, 16)
#define DF_FIDMASK1_V3_GET_SOCK_SHIFT(r) bitx32(r, 9, 8)
#define DF_FIDMASK1_V3_GET_NODE_SHIFT(r) bitx32(r, 3, 0)
#define DF_FIDMASK0_V3P5 (df_reg_def_t){ .drd_gens = DF_REV_3P5, \
.drd_func = 1, \
.drd_reg = 0x150 }
#define DF_FIDMASK0_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x1b0 }
#define DF_FIDMASK0_V3P5_GET_NODE_MASK(r) bitx32(r, 31, 16)
#define DF_FIDMASK0_V3P5_GET_COMP_MASK(r) bitx32(r, 15, 0)
#define DF_FIDMASK1_V3P5 (df_reg_def_t){ .drd_gens = DF_REV_3P5, \
.drd_func = 1, \
.drd_reg = 0x154 }
#define DF_FIDMASK1_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x1b4 }
#define DF_FIDMASK1_V3P5_GET_SOCK_SHIFT(r) bitx32(r, 11, 8)
#define DF_FIDMASK1_V3P5_GET_NODE_SHIFT(r) bitx32(r, 3, 0)
#define DF_FIDMASK2_V3P5 (df_reg_def_t){ .drd_gens = DF_REV_3P5, \
.drd_func = 1, \
.drd_reg = 0x158 }
#define DF_FIDMASK2_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x1b8 }
#define DF_FIDMASK2_V3P5_GET_SOCK_MASK(r) bitx32(r, 31, 16)
#define DF_FIDMASK2_V3P5_GET_DIE_MASK(r) bitx32(r, 15, 0)
#define DF_DIEMASK_CPU_V2 (df_reg_def_t){ .drd_gens = DF_REV_2, \
.drd_func = 1, \
.drd_reg = 0x22c }
#define DF_DIEMASK_APU_V2 (df_reg_def_t){ .drd_gens = DF_REV_2, \
.drd_func = 1, \
.drd_reg = 0x24c }
#define DF_DIEMASK_V2_GET_SOCK_SHIFT(r) bitx32(r, 31, 28)
#define DF_DIEMASK_V2_GET_DIE_SHIFT(r) bitx32(r, 27, 24)
#define DF_DIEMASK_V2_GET_SOCK_MASK(r) bitx32(r, 23, 16)
#define DF_DIEMASK_V2_GET_DIE_MASK(r) bitx32(r, 15, 8)
#define DF_DIEMASK_V2_GET_COMP_MASK(r) bitx32(r, 7, 0)
#define DF_MAX_CCDS_PER_CCM 2
#define DF_CCD_EN_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x104 }
#define DF_CCD_EN_V4D2_GET_WIDE_EN(r) bitx32(r, 31, 31)
#define DF_CCD_EN_V4_GET_CCX_EN(r) bitx32(r, 17, 16)
#define DF_CCD_EN_V4_GET_CCD_EN(r) bitx32(r, 1, 0)
#define DF_PHYS_CORE_EN0_V3 (df_reg_def_t){ .drd_gens = DF_REV_ALL_3, \
.drd_func = 1, \
.drd_reg = 0x300 }
#define DF_PHYS_CORE_EN1_V3 (df_reg_def_t){ .drd_gens = DF_REV_ALL_3, \
.drd_func = 1, \
.drd_reg = 0x304 }
#define DF_PHYS_CORE_EN0_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x140 }
#define DF_PHYS_CORE_EN1_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x144 }
#define DF_PHYS_CORE_EN2_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x148 }
#define DF_PHYS_CORE_EN3_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x14c }
#define DF_PHYS_CORE_EN4_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x150 }
#define DF_PHYS_CORE_EN5_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 1, \
.drd_reg = 0x154 }
#define DF_NP2_CONFIG_V3 (df_reg_def_t){ .drd_gens = DF_REV_3, \
.drd_func = 2, \
.drd_reg = 0x90 }
#define DF_NP2_CONFIG_V3_GET_SPACE1(r) bitx32(r, 13, 8)
#define DF_NP2_CONFIG_V3_GET_SPACE0(r) bitx32(r, 5, 0)
#define DF_CCMCFG4_V4 (df_reg_def_t){ .drd_gens = DF_REV_4, \
.drd_func = 3, \
.drd_reg = 0x510 }
#define DF_CCMCFG4_V4_GET_WIDE_EN(r) bitx32(r, 26, 26)
#define DF_FICAA_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 4, \
.drd_reg = 0x5c }
#define DF_FICAA_V2_REG_MASK 0x7fc
#define DF_FICAA_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x8c }
#define DF_FICAA_V4_REG_MASK 0xffc
#define DF_FICAA_REG_SHIFT 2
#define DF_FICAA_V2_SET_INST(r, v) bitset32(r, 23, 16, v)
#define DF_FICAA_V2_SET_64B(r, v) bitset32(r, 14, 14, v)
#define DF_FICAA_V2_SET_FUNC(r, v) bitset32(r, 13, 11, v)
#define DF_FICAA_V2_SET_REG(r, v) bitset32(r, 10, 2, v)
#define DF_FICAA_V2_SET_TARG_INST(r, v) bitset32(r, 0, 0, v)
#define DF_FICAA_V4_SET_REG(r, v) bitset32(r, 10, 1, v)
#define DF_FICAD_LO_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 4, \
.drd_reg = 0x98}
#define DF_FICAD_HI_V2 (df_reg_def_t){ .drd_gens = DF_REV_ALL_23, \
.drd_func = 4, \
.drd_reg = 0x9c}
#define DF_FICAD_LO_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0xb8}
#define DF_FICAD_HI_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0xbc}
static inline boolean_t
df_reg_valid(const df_rev_t rev, const df_reg_def_t def)
{
uint16_t mask;
switch (rev) {
case DF_REV_2:
case DF_REV_3:
case DF_REV_3P5:
mask = DF_FICAA_V2_REG_MASK;
break;
case DF_REV_4:
case DF_REV_4D2:
mask = DF_FICAA_V4_REG_MASK;
break;
default:
return (B_FALSE);
}
return ((def.drd_gens & rev) == rev && (def.drd_reg & ~mask) == 0);
}
#define DF_SYS_FUN_FID1_V3 (df_reg_def_t){ .drd_gens = DF_REV_ALL_3, \
.drd_func = 1, \
.drd_reg = 0x60 }
#define DF_SYS_FUN_FID1_V3_GET_MSTR_PIE_FID(r) bitx32(r, 21, 16)
#define DF_SYS_FUN_FID1_V3_GET_LCL_PIE_FID(r) bitx32(r, 5, 0)
#define DF_SYS_FUN_FID1_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x190 }
#define DF_SYS_FUN_FID1_V4_GET_MSTR_PIE_FID(r) bitx32(r, 27, 16)
#define DF_SYS_FUN_FID1_V4D2_GET_MSTR_PIE_FID(r) bitx32(r, 23, 16)
#define DF_SYS_FUN_FID1_V4_GET_LCL_PIE_FID(r) bitx32(r, 11, 0)
#define DF_SYS_FUN_FID1_V4D2_GET_LCL_PIE_FID(r) bitx32(r, 7, 0)
#define DF_SYS_FUN_FID2_V3 (df_reg_def_t){ .drd_gens = DF_REV_ALL_3, \
.drd_func = 1, \
.drd_reg = 0x64 }
#define DF_SYS_FUN_FID2_V3_GET_FCH_IOMS_FID(r) bitx32(r, 21, 16)
#define DF_SYS_FUN_FID2_V3_GET_LCL_IOMS_FID(r) bitx32(r, 5, 0)
#define DF_SYS_FUN_FID2_V4 (df_reg_def_t){ .drd_gens = DF_REV_ALL_4, \
.drd_func = 4, \
.drd_reg = 0x194 }
#define DF_SYS_FUN_FID2_V4_GET_FCH_IOS_FID(r) bitx32(r, 27, 16)
#define DF_SYS_FUN_FID2_V4D2_GET_FCH_IOS_FID(r) bitx32(r, 23, 16)
#ifdef __cplusplus
}
#endif
#endif