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.c b/drivers/gpu/msm/adreno.c
index 6b9adf8..70e196e 100644
--- a/drivers/gpu/msm/adreno.c
+++ b/drivers/gpu/msm/adreno.c
@@ -33,10 +33,6 @@
 #define DRIVER_VERSION_MAJOR   3
 #define DRIVER_VERSION_MINOR   1
 
-#define KGSL_RBBM_INT_MASK \
-	 (RBBM_INT_CNTL__RDERR_INT_MASK |  \
-	  RBBM_INT_CNTL__DISPLAY_UPDATE_INT_MASK)
-
 /* Adreno MH arbiter config*/
 #define ADRENO_CFG_MHARB \
 	(0x10 \
@@ -152,66 +148,13 @@
 	return 0;
 }
 
-static void adreno_rbbm_intrcallback(struct kgsl_device *device)
-{
-	unsigned int status = 0;
-	unsigned int rderr = 0;
-
-	adreno_regread(device, REG_RBBM_INT_STATUS, &status);
-
-	if (status & RBBM_INT_CNTL__RDERR_INT_MASK) {
-		union rbbm_read_error_u rerr;
-		adreno_regread(device, REG_RBBM_READ_ERROR, &rderr);
-		rerr.val = rderr;
-		if (rerr.f.read_address == REG_CP_INT_STATUS &&
-			rerr.f.read_error &&
-			rerr.f.read_requester)
-			KGSL_DRV_WARN(device,
-				"rbbm read error interrupt: %08x\n", rderr);
-		else
-			KGSL_DRV_CRIT(device,
-				"rbbm read error interrupt: %08x\n", rderr);
-	} else if (status & RBBM_INT_CNTL__DISPLAY_UPDATE_INT_MASK) {
-		KGSL_DRV_INFO(device, "rbbm display update interrupt\n");
-	} else if (status & RBBM_INT_CNTL__GUI_IDLE_INT_MASK) {
-		KGSL_DRV_INFO(device, "rbbm gui idle interrupt\n");
-	} else {
-		KGSL_CMD_WARN(device,
-			"bad bits in REG_CP_INT_STATUS %08x\n", status);
-	}
-
-	status &= KGSL_RBBM_INT_MASK;
-	adreno_regwrite(device, REG_RBBM_INT_ACK, status);
-}
-
 irqreturn_t adreno_isr(int irq, void *data)
 {
-	irqreturn_t result = IRQ_NONE;
-	struct kgsl_device *device;
-	unsigned int status;
+	irqreturn_t result;
+	struct kgsl_device *device = data;
+	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
 
-	device = (struct kgsl_device *) data;
-
-	BUG_ON(device == NULL);
-	BUG_ON(device->regspace.sizebytes == 0);
-	BUG_ON(device->regspace.mmio_virt_base == 0);
-
-	adreno_regread(device, REG_MASTER_INT_SIGNAL, &status);
-
-	if (status & MASTER_INT_SIGNAL__MH_INT_STAT) {
-		kgsl_mh_intrcallback(device);
-		result = IRQ_HANDLED;
-	}
-
-	if (status & MASTER_INT_SIGNAL__CP_INT_STAT) {
-		kgsl_cp_intrcallback(device);
-		result = IRQ_HANDLED;
-	}
-
-	if (status & MASTER_INT_SIGNAL__RBBM_INT_STAT) {
-		adreno_rbbm_intrcallback(device);
-		result = IRQ_HANDLED;
-	}
+	result = adreno_dev->gpudev->irq_handler(adreno_dev);
 
 	if (device->requested_state == KGSL_STATE_NONE) {
 		if (device->pwrctrl.nap_allowed == true) {
@@ -464,6 +407,7 @@
 	}
 
 	adreno_dev->gpurev = gpurev;
+	adreno_dev->gpudev = &adreno_a2xx_gpudev;
 }
 
 static int __devinit
@@ -1254,17 +1198,8 @@
 
 void adreno_irqctrl(struct kgsl_device *device, int state)
 {
-	/* Enable GPU and GPUMMU interrupts */
-
-	if (state) {
-		adreno_regwrite(device, REG_RBBM_INT_CNTL, KGSL_RBBM_INT_MASK);
-		adreno_regwrite(device, REG_CP_INT_CNTL, KGSL_CP_INT_MASK);
-		adreno_regwrite(device, MH_INTERRUPT_MASK, KGSL_MMU_INT_MASK);
-	} else {
-		adreno_regwrite(device, REG_RBBM_INT_CNTL, 0);
-		adreno_regwrite(device, REG_CP_INT_CNTL, 0);
-		adreno_regwrite(device, MH_INTERRUPT_MASK, 0);
-	}
+	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
+	adreno_dev->gpudev->irq_control(adreno_dev, state);
 }
 
 static const struct kgsl_functable adreno_functable = {