Browse Source

drm/i915: add relative ring register macros

Documentation explicitly mentions that the ring registers are
designed to have the same offsets relative to a base registers.

Use this to fight the code beaurocratic in intel_ringbuffer.c.

No code changes in this patch, just the new definitions.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Daniel Vetter 15 năm trước cách đây
mục cha
commit
333e9fe94d

+ 8 - 0
drivers/gpu/drm/i915/i915_reg.h

@@ -288,6 +288,14 @@
 #define PRB0_HEAD	0x02034
 #define PRB0_HEAD	0x02034
 #define PRB0_START	0x02038
 #define PRB0_START	0x02038
 #define PRB0_CTL	0x0203c
 #define PRB0_CTL	0x0203c
+#define RENDER_RING_BASE	0x02000
+#define BSD_RING_BASE		0x04000
+#define GEN6_BSD_RING_BASE	0x12000
+#define RING_TAIL(base)		(base)+0x30
+#define RING_HEAD(base)		(base)+0x34
+#define RING_START(base)	(base)+0x38
+#define RING_CTL(base)		(base)+0x3c
+#define RING_HWS_PGA(base)	(base)+0x80
 #define   TAIL_ADDR		0x001FFFF8
 #define   TAIL_ADDR		0x001FFFF8
 #define   HEAD_WRAP_COUNT	0xFFE00000
 #define   HEAD_WRAP_COUNT	0xFFE00000
 #define   HEAD_WRAP_ONE		0x00200000
 #define   HEAD_WRAP_ONE		0x00200000

+ 3 - 0
drivers/gpu/drm/i915/intel_ringbuffer.c

@@ -801,6 +801,7 @@ static const struct intel_ring_buffer render_ring = {
 		.tail = PRB0_TAIL,
 		.tail = PRB0_TAIL,
 		.start = PRB0_START
 		.start = PRB0_START
 	},
 	},
+	.mmio_base		= RENDER_RING_BASE,
 	.size			= 32 * PAGE_SIZE,
 	.size			= 32 * PAGE_SIZE,
 	.alignment		= PAGE_SIZE,
 	.alignment		= PAGE_SIZE,
 	.virtual_start		= NULL,
 	.virtual_start		= NULL,
@@ -839,6 +840,7 @@ static const struct intel_ring_buffer bsd_ring = {
 		.tail = BSD_RING_TAIL,
 		.tail = BSD_RING_TAIL,
 		.start = BSD_RING_START
 		.start = BSD_RING_START
 	},
 	},
+	.mmio_base		= BSD_RING_BASE,
 	.size			= 32 * PAGE_SIZE,
 	.size			= 32 * PAGE_SIZE,
 	.alignment		= PAGE_SIZE,
 	.alignment		= PAGE_SIZE,
 	.virtual_start		= NULL,
 	.virtual_start		= NULL,
@@ -957,6 +959,7 @@ static const struct intel_ring_buffer gen6_bsd_ring = {
                .tail   = GEN6_BSD_RING_TAIL,
                .tail   = GEN6_BSD_RING_TAIL,
                .start  = GEN6_BSD_RING_START
                .start  = GEN6_BSD_RING_START
        },
        },
+       .mmio_base		= GEN6_BSD_RING_BASE,
        .size			= 32 * PAGE_SIZE,
        .size			= 32 * PAGE_SIZE,
        .alignment		= PAGE_SIZE,
        .alignment		= PAGE_SIZE,
        .virtual_start		= NULL,
        .virtual_start		= NULL,

+ 1 - 0
drivers/gpu/drm/i915/intel_ringbuffer.h

@@ -20,6 +20,7 @@ struct  intel_ring_buffer {
 			u32 tail;
 			u32 tail;
 			u32 start;
 			u32 start;
 	} regs;
 	} regs;
+	u32		mmio_base;
 	unsigned long	size;
 	unsigned long	size;
 	unsigned int	alignment;
 	unsigned int	alignment;
 	void		*virtual_start;
 	void		*virtual_start;