msm: kgsl: fix format of the rbbm read error message
msm: kgsl: Assign a valid context only after one has been restored
This commit is contained in:
parent
d0bde07fa4
commit
4f50d63951
22
drivers/gpu/msm/a2xx_reg.h
Normal file → Executable file
22
drivers/gpu/msm/a2xx_reg.h
Normal file → Executable file
@ -140,24 +140,9 @@ union reg_rb_edram_info {
|
||||
struct rb_edram_info_t f;
|
||||
};
|
||||
|
||||
#define RBBM_READ_ERROR_UNUSED0_SIZE 2
|
||||
#define RBBM_READ_ERROR_READ_ADDRESS_SIZE 15
|
||||
#define RBBM_READ_ERROR_UNUSED1_SIZE 13
|
||||
#define RBBM_READ_ERROR_READ_REQUESTER_SIZE 1
|
||||
#define RBBM_READ_ERROR_READ_ERROR_SIZE 1
|
||||
|
||||
struct rbbm_read_error_t {
|
||||
unsigned int unused0:RBBM_READ_ERROR_UNUSED0_SIZE;
|
||||
unsigned int read_address:RBBM_READ_ERROR_READ_ADDRESS_SIZE;
|
||||
unsigned int unused1:RBBM_READ_ERROR_UNUSED1_SIZE;
|
||||
unsigned int read_requester:RBBM_READ_ERROR_READ_REQUESTER_SIZE;
|
||||
unsigned int read_error:RBBM_READ_ERROR_READ_ERROR_SIZE;
|
||||
};
|
||||
|
||||
union rbbm_read_error_u {
|
||||
unsigned int val:32;
|
||||
struct rbbm_read_error_t f;
|
||||
};
|
||||
#define RBBM_READ_ERROR_ADDRESS_MASK 0x0001fffc
|
||||
#define RBBM_READ_ERROR_REQUESTER (1<<30)
|
||||
#define RBBM_READ_ERROR_ERROR (1<<31)
|
||||
|
||||
#define CP_RB_CNTL_RB_BUFSZ_SIZE 6
|
||||
#define CP_RB_CNTL_UNUSED0_SIZE 2
|
||||
@ -278,6 +263,7 @@ union reg_cp_rb_cntl {
|
||||
#define REG_CP_ME_CNTL 0x01F6
|
||||
#define REG_CP_ME_RAM_DATA 0x01FA
|
||||
#define REG_CP_ME_RAM_WADDR 0x01F8
|
||||
#define REG_CP_ME_RAM_RADDR 0x01F9
|
||||
#define REG_CP_ME_STATUS 0x01F7
|
||||
#define REG_CP_PFP_UCODE_ADDR 0x00C0
|
||||
#define REG_CP_PFP_UCODE_DATA 0x00C1
|
||||
|
26
drivers/gpu/msm/adreno_a2xx.c
Normal file → Executable file
26
drivers/gpu/msm/adreno_a2xx.c
Normal file → Executable file
@ -1532,21 +1532,33 @@ static void a2xx_rbbm_intrcallback(struct kgsl_device *device)
|
||||
{
|
||||
unsigned int status = 0;
|
||||
unsigned int rderr = 0;
|
||||
unsigned int addr = 0;
|
||||
const char *source;
|
||||
|
||||
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)
|
||||
source = (rderr & RBBM_READ_ERROR_REQUESTER)
|
||||
? "host" : "cp";
|
||||
/* convert to dword address */
|
||||
addr = (rderr & RBBM_READ_ERROR_ADDRESS_MASK) >> 2;
|
||||
|
||||
/*
|
||||
* Log CP_INT_STATUS interrupts from the CP at a
|
||||
* lower level because they can happen frequently
|
||||
* and are worked around in a2xx_irq_handler.
|
||||
*/
|
||||
if (addr == REG_CP_INT_STATUS &&
|
||||
rderr & RBBM_READ_ERROR_ERROR &&
|
||||
rderr & RBBM_READ_ERROR_REQUESTER)
|
||||
KGSL_DRV_WARN(device,
|
||||
"rbbm read error interrupt: %08x\n", rderr);
|
||||
"rbbm read error interrupt: %s reg: %04X\n",
|
||||
source, addr);
|
||||
else
|
||||
KGSL_DRV_CRIT(device,
|
||||
"rbbm read error interrupt: %08x\n", rderr);
|
||||
"rbbm read error interrupt: %s reg: %04X\n",
|
||||
source, addr);
|
||||
}
|
||||
|
||||
status &= RBBM_INT_MASK;
|
||||
|
7
drivers/gpu/msm/adreno_drawctxt.c
Normal file → Executable file
7
drivers/gpu/msm/adreno_drawctxt.c
Normal file → Executable file
@ -179,11 +179,12 @@ void adreno_drawctxt_destroy(struct kgsl_device *device,
|
||||
struct kgsl_context *context)
|
||||
{
|
||||
struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
|
||||
struct adreno_context *drawctxt = context->devctxt;
|
||||
struct adreno_context *drawctxt;
|
||||
|
||||
if (drawctxt == NULL)
|
||||
if (context == NULL)
|
||||
return;
|
||||
|
||||
drawctxt = context->devctxt;
|
||||
/* deactivate context */
|
||||
if (adreno_dev->drawctxt_active == drawctxt) {
|
||||
/* no need to save GMEM or shader, the context is
|
||||
@ -261,6 +262,6 @@ void adreno_drawctxt_switch(struct adreno_device *adreno_dev,
|
||||
adreno_dev->gpudev->ctxt_save(adreno_dev, adreno_dev->drawctxt_active);
|
||||
|
||||
/* Set the new context */
|
||||
adreno_dev->drawctxt_active = drawctxt;
|
||||
adreno_dev->gpudev->ctxt_restore(adreno_dev, drawctxt);
|
||||
adreno_dev->drawctxt_active = drawctxt;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user