drm/xe: add read/write support for MMIO extension space
authorKoby Elbaz <kelbaz@habana.ai>
Thu, 5 Oct 2023 15:06:15 +0000 (11:06 -0400)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:42:58 +0000 (11:42 -0500)
A distinction has to be made when addressing the MMIO space or
the additional MMIO extension space.

Signed-off-by: Koby Elbaz <kelbaz@habana.ai>
Reviewed-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Moti Haimovski <mhaimovski@habana.ai>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_mmio.h

index 9e0fd4a6fb29c42e4cf912c1e1342f6709cc464e..ae09f777d711dc04d01d81b63a54dd2650e07c3b 100644 (file)
@@ -29,7 +29,7 @@ static inline u8 xe_mmio_read8(struct xe_gt *gt, struct xe_reg reg)
        if (reg.addr < gt->mmio.adj_limit)
                reg.addr += gt->mmio.adj_offset;
 
-       return readb(tile->mmio.regs + reg.addr);
+       return readb((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + reg.addr);
 }
 
 static inline u16 xe_mmio_read16(struct xe_gt *gt, struct xe_reg reg)
@@ -39,7 +39,7 @@ static inline u16 xe_mmio_read16(struct xe_gt *gt, struct xe_reg reg)
        if (reg.addr < gt->mmio.adj_limit)
                reg.addr += gt->mmio.adj_offset;
 
-       return readw(tile->mmio.regs + reg.addr);
+       return readw((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + reg.addr);
 }
 
 static inline void xe_mmio_write32(struct xe_gt *gt,
@@ -50,7 +50,7 @@ static inline void xe_mmio_write32(struct xe_gt *gt,
        if (reg.addr < gt->mmio.adj_limit)
                reg.addr += gt->mmio.adj_offset;
 
-       writel(val, tile->mmio.regs + reg.addr);
+       writel(val, (reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + reg.addr);
 }
 
 static inline u32 xe_mmio_read32(struct xe_gt *gt, struct xe_reg reg)
@@ -60,7 +60,7 @@ static inline u32 xe_mmio_read32(struct xe_gt *gt, struct xe_reg reg)
        if (reg.addr < gt->mmio.adj_limit)
                reg.addr += gt->mmio.adj_offset;
 
-       return readl(tile->mmio.regs + reg.addr);
+       return readl((reg.ext ? tile->mmio_ext.regs : tile->mmio.regs) + reg.addr);
 }
 
 static inline u32 xe_mmio_rmw32(struct xe_gt *gt, struct xe_reg reg, u32 clr,