msm: kgsl: Introduce GPU specific functions
Add the infrastructure for specific functions based
on the type of 3D GPU core attached to the system.
Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h
index 597c6b8..9d84e87 100644
--- a/drivers/gpu/msm/adreno.h
+++ b/drivers/gpu/msm/adreno.h
@@ -38,17 +38,6 @@
#define ADRENO_DEFAULT_PWRSCALE_POLICY NULL
#endif
-#define KGSL_CP_INT_MASK \
- (CP_INT_CNTL__SW_INT_MASK | \
- CP_INT_CNTL__T0_PACKET_IN_IB_MASK | \
- CP_INT_CNTL__OPCODE_ERROR_MASK | \
- CP_INT_CNTL__PROTECTED_MODE_ERROR_MASK | \
- CP_INT_CNTL__RESERVED_BIT_ERROR_MASK | \
- CP_INT_CNTL__IB_ERROR_MASK | \
- CP_INT_CNTL__IB2_INT_MASK | \
- CP_INT_CNTL__IB1_INT_MASK | \
- CP_INT_CNTL__RB_INT_MASK)
-
enum adreno_gpurev {
ADRENO_REV_UNKNOWN = 0,
ADRENO_REV_A200 = 200,
@@ -57,6 +46,8 @@
ADRENO_REV_A225 = 225,
};
+struct adreno_gpudev;
+
struct adreno_device {
struct kgsl_device dev; /* Must be first field in this struct */
unsigned int chip_id;
@@ -70,8 +61,22 @@
size_t pm4_fw_size;
struct adreno_ringbuffer ringbuffer;
unsigned int mharb;
+ struct adreno_gpudev *gpudev;
};
+struct adreno_gpudev {
+ int (*ctxt_gpustate_shadow)(struct adreno_device *,
+ struct adreno_context *);
+ int (*ctxt_gmem_shadow)(struct adreno_device *,
+ struct adreno_context *);
+ void (*ctxt_save)(struct adreno_device *, struct adreno_context *);
+ void (*ctxt_restore)(struct adreno_device *, struct adreno_context *);
+ irqreturn_t (*irq_handler)(struct adreno_device *);
+ void (*irq_control)(struct adreno_device *, int);
+};
+
+extern struct adreno_gpudev adreno_a2xx_gpudev;
+
int adreno_idle(struct kgsl_device *device, unsigned int timeout);
void adreno_regread(struct kgsl_device *device, unsigned int offsetwords,
unsigned int *value);