struct xe_reg {
union {
struct {
- /** @reg: address */
- u32 reg:22;
+ /** @addr: address */
+ u32 addr:22;
/**
* @masked: register is "masked", with upper 16bits used
* to identify the bits that are updated on the lower
* object of the right type. However when initializing static const storage,
* where a compound statement is not allowed, this can be used instead.
*/
-#define XE_REG_INITIALIZER(r_, ...) { .reg = r_, __VA_ARGS__ }
+#define XE_REG_INITIALIZER(r_, ...) { .addr = r_, __VA_ARGS__ }
/**
xe_rtp_process(param->entries, reg_sr, &xe->gt[0], NULL);
xa_for_each(®_sr->xa, idx, sre) {
- if (idx == param->expected_reg.reg)
+ if (idx == param->expected_reg.addr)
sr_entry = sre;
count++;
for (tmp__ = (mask__); tmp__; tmp__ &= ~BIT(ffs(tmp__) - 1)) \
for_each_if((domain__ = ((fw__)->domains + \
(ffs(tmp__) - 1))) && \
- domain__->reg_ctl.reg)
+ domain__->reg_ctl.addr)
int xe_force_wake_get(struct xe_force_wake *fw,
enum xe_force_wake_domains domains)
*/
drm_WARN(>_to_xe(gt)->drm, true,
"Did not find MCR register %#x in any MCR steering table\n",
- reg.reg);
+ reg.addr);
*group = 0;
*instance = 0;
response_buf[0] = header;
for (i = 1; i < VF_SW_FLAG_COUNT; i++) {
- reply_reg.reg += i * sizeof(u32);
+ reply_reg.addr += i * sizeof(u32);
response_buf[i] = xe_mmio_read32(gt, reply_reg);
}
}
unsigned int n_entry)
{
struct guc_mmio_reg entry = {
- .offset = reg.reg,
+ .offset = reg.addr,
.flags = reg.masked ? GUC_REGSET_MASKED : 0,
};
static void hw_engine_mmio_write32(struct xe_hw_engine *hwe, struct xe_reg reg,
u32 val)
{
- XE_BUG_ON(reg.reg & hwe->mmio_base);
+ XE_BUG_ON(reg.addr & hwe->mmio_base);
xe_force_wake_assert_held(gt_to_fw(hwe->gt), hwe->domain);
- reg.reg += hwe->mmio_base;
+ reg.addr += hwe->mmio_base;
xe_mmio_write32(hwe->gt, reg, val);
}
static u32 hw_engine_mmio_read32(struct xe_hw_engine *hwe, struct xe_reg reg)
{
- XE_BUG_ON(reg.reg & hwe->mmio_base);
+ XE_BUG_ON(reg.addr & hwe->mmio_base);
xe_force_wake_assert_held(gt_to_fw(hwe->gt), hwe->domain);
- reg.reg += hwe->mmio_base;
+ reg.addr += hwe->mmio_base;
return xe_mmio_read32(hwe->gt, reg);
}
drm_WARN(>_to_xe(gt)->drm, 1,
"Interrupt register 0x%x is not zero: 0x%08x\n",
- reg.reg, val);
+ reg.addr, val);
xe_mmio_write32(gt, reg, 0xffffffff);
xe_mmio_read32(gt, reg);
xe_mmio_write32(gt, reg, 0xffffffff);
unsigned int i;
for (i = 0; i < ARRAY_SIZE(mmio_read_whitelist); i++) {
- if (mmio_read_whitelist[i].reg == args->addr) {
+ if (mmio_read_whitelist[i].addr == args->addr) {
allowed = true;
break;
}
static inline u8 xe_mmio_read8(struct xe_gt *gt, struct xe_reg reg)
{
- if (reg.reg < gt->mmio.adj_limit)
- reg.reg += gt->mmio.adj_offset;
+ if (reg.addr < gt->mmio.adj_limit)
+ reg.addr += gt->mmio.adj_offset;
- return readb(gt->mmio.regs + reg.reg);
+ return readb(gt->mmio.regs + reg.addr);
}
static inline void xe_mmio_write32(struct xe_gt *gt,
struct xe_reg reg, u32 val)
{
- if (reg.reg < gt->mmio.adj_limit)
- reg.reg += gt->mmio.adj_offset;
+ if (reg.addr < gt->mmio.adj_limit)
+ reg.addr += gt->mmio.adj_offset;
- writel(val, gt->mmio.regs + reg.reg);
+ writel(val, gt->mmio.regs + reg.addr);
}
static inline u32 xe_mmio_read32(struct xe_gt *gt, struct xe_reg reg)
{
- if (reg.reg < gt->mmio.adj_limit)
- reg.reg += gt->mmio.adj_offset;
+ if (reg.addr < gt->mmio.adj_limit)
+ reg.addr += gt->mmio.adj_offset;
- return readl(gt->mmio.regs + reg.reg);
+ return readl(gt->mmio.regs + reg.addr);
}
static inline u32 xe_mmio_rmw32(struct xe_gt *gt, struct xe_reg reg, u32 clr,
static inline void xe_mmio_write64(struct xe_gt *gt,
struct xe_reg reg, u64 val)
{
- if (reg.reg < gt->mmio.adj_limit)
- reg.reg += gt->mmio.adj_offset;
+ if (reg.addr < gt->mmio.adj_limit)
+ reg.addr += gt->mmio.adj_offset;
- writeq(val, gt->mmio.regs + reg.reg);
+ writeq(val, gt->mmio.regs + reg.addr);
}
static inline u64 xe_mmio_read64(struct xe_gt *gt, struct xe_reg reg)
{
- if (reg.reg < gt->mmio.adj_limit)
- reg.reg += gt->mmio.adj_offset;
+ if (reg.addr < gt->mmio.adj_limit)
+ reg.addr += gt->mmio.adj_offset;
- return readq(gt->mmio.regs + reg.reg);
+ return readq(gt->mmio.regs + reg.addr);
}
static inline int xe_mmio_write32_and_verify(struct xe_gt *gt,
static inline bool xe_mmio_in_range(const struct xe_mmio_range *range,
struct xe_reg reg)
{
- return range && reg.reg >= range->start && reg.reg <= range->end;
+ return range && reg.addr >= range->start && reg.addr <= range->end;
}
int xe_mmio_probe_vram(struct xe_device *xe);
i++) {
struct xe_reg reg = XE_REG(addr + i * 4);
- mocs_dbg(>->xe->drm, "%d 0x%x 0x%x\n", i, reg.reg, mocs);
+ mocs_dbg(>->xe->drm, "%d 0x%x 0x%x\n", i, reg.addr, mocs);
xe_mmio_write32(gt, reg, mocs);
}
}
(l3cc = l3cc_combine(get_entry_l3cc(info, 2 * i),
get_entry_l3cc(info, 2 * i + 1))), 1 : 0;
i++) {
- mocs_dbg(>->xe->drm, "%d 0x%x 0x%x\n", i, LNCFCMOCS(i).reg,
+ mocs_dbg(>->xe->drm, "%d 0x%x 0x%x\n", i, LNCFCMOCS(i).addr,
l3cc);
xe_mmio_write32(gt, LNCFCMOCS(i), l3cc);
}
mocs_dbg(>->xe->drm, "flag:0x%x\n", flags);
if (flags & HAS_GLOBAL_MOCS)
- __init_mocs_table(gt, &table, GLOBAL_MOCS(0).reg);
+ __init_mocs_table(gt, &table, GLOBAL_MOCS(0).addr);
/*
* Initialize the L3CC table as part of mocs initalization to make
{
u32 ver;
- ver = peek_gmdid(xe, GMD_ID.reg);
+ ver = peek_gmdid(xe, GMD_ID.addr);
for (int i = 0; i < ARRAY_SIZE(graphics_ip_map); i++) {
if (ver == graphics_ip_map[i].ver) {
xe->info.graphics_verx100 = ver;
ver / 100, ver % 100);
}
- ver = peek_gmdid(xe, GMD_ID.reg + 0x380000);
+ ver = peek_gmdid(xe, GMD_ID.addr + 0x380000);
for (int i = 0; i < ARRAY_SIZE(media_ip_map); i++) {
if (ver == media_ip_map[i].ver) {
xe->info.media_verx100 = ver;
int xe_reg_sr_add(struct xe_reg_sr *sr,
const struct xe_reg_sr_entry *e)
{
- unsigned long idx = e->reg.reg;
+ unsigned long idx = e->reg.addr;
struct xe_reg_sr_entry *pentry = xa_load(&sr->xa, idx);
int ret;
*/
val |= entry->set_bits;
- drm_dbg(&xe->drm, "REG[0x%x] = 0x%08x", reg.reg, val);
+ drm_dbg(&xe->drm, "REG[0x%x] = 0x%08x", reg.addr, val);
if (entry->reg.mcr)
xe_gt_mcr_multicast_write(gt, reg_mcr, val);
/* And clear the rest just in case of garbage */
for (; slot < RING_MAX_NONPRIV_SLOTS; slot++) {
- u32 addr = RING_NOPID(mmio_base).reg;
+ u32 addr = RING_NOPID(mmio_base).addr;
xe_mmio_write32(gt, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
}
u32 *dw, int i)
{
dw[i++] = MI_LOAD_REGISTER_IMM(1) | MI_LRI_MMIO_REMAP_EN;
- dw[i++] = reg.reg + gt->mmio.adj_offset;
+ dw[i++] = reg.addr + gt->mmio.adj_offset;
dw[i++] = AUX_INV;
dw[i++] = MI_NOOP;
.read_mask = action->read_mask,
};
- sr_entry.reg.reg += mmio_base;
+ sr_entry.reg.addr += mmio_base;
xe_reg_sr_add(sr, &sr_entry);
}
err_out:
drm_notice(&xe->drm, "Failed to init uC WOPCM registers!\n");
drm_notice(&xe->drm, "%s(%#x)=%#x\n", "DMA_GUC_WOPCM_OFFSET",
- DMA_GUC_WOPCM_OFFSET.reg,
+ DMA_GUC_WOPCM_OFFSET.addr,
xe_mmio_read32(gt, DMA_GUC_WOPCM_OFFSET));
drm_notice(&xe->drm, "%s(%#x)=%#x\n", "GUC_WOPCM_SIZE",
- GUC_WOPCM_SIZE.reg,
+ GUC_WOPCM_SIZE.addr,
xe_mmio_read32(gt, GUC_WOPCM_SIZE));
return err;