msm: kgsl: make cffdump work with the MMU enabled
The tools that process cff dumps expect a linear memory region, but the start address of that region can be configured. As long as there is only a single pagetable (so that there aren't duplicate virtual addresses in the dump), dumps captured with the mmu on are easier to deal with than reconfiguring to turn the mmu off.
This commit is contained in:
parent
a19d2698cc
commit
b4c5202bec
@ -269,10 +269,13 @@ static void adreno_setstate(struct kgsl_device *device,
|
||||
int sizedwords = 0;
|
||||
unsigned int mh_mmu_invalidate = 0x00000003; /*invalidate all and tc */
|
||||
|
||||
/* If possible, then set the state via the command stream to avoid
|
||||
a CPU idle. Otherwise, use the default setstate which uses register
|
||||
writes */
|
||||
if (adreno_dev->drawctxt_active) {
|
||||
/*
|
||||
* If possible, then set the state via the command stream to avoid
|
||||
* a CPU idle. Otherwise, use the default setstate which uses register
|
||||
* writes For CFF dump we must idle and use the registers so that it is
|
||||
* easier to filter out the mmu accesses from the dump
|
||||
*/
|
||||
if (!kgsl_cff_dump_enable && adreno_dev->drawctxt_active) {
|
||||
if (flags & KGSL_MMUFLAGS_PTUPDATE) {
|
||||
/* wait for graphics pipe to be idle */
|
||||
*cmds++ = cp_type3_packet(CP_WAIT_FOR_IDLE, 1);
|
||||
|
@ -231,8 +231,6 @@ static void cffdump_printline(int id, uint opcode, uint op1, uint op2,
|
||||
|
||||
spin_lock(&cffdump_lock);
|
||||
if (opcode == CFF_OP_WRITE_MEM) {
|
||||
if (op1 < 0x40000000 || op1 >= 0x60000000)
|
||||
KGSL_CORE_ERR("addr out-of-range: op1=%08x", op1);
|
||||
if ((cff_op_write_membuf.addr != op1 &&
|
||||
cff_op_write_membuf.count)
|
||||
|| (cff_op_write_membuf.count == MEMBUF_SIZE))
|
||||
@ -360,15 +358,7 @@ void kgsl_cffdump_destroy()
|
||||
|
||||
void kgsl_cffdump_open(enum kgsl_deviceid device_id)
|
||||
{
|
||||
/*TODO: move this to where we can report correct gmemsize*/
|
||||
unsigned int va_base;
|
||||
|
||||
if (cpu_is_msm8x60() || cpu_is_msm8960() || cpu_is_msm8930())
|
||||
va_base = 0x40000000;
|
||||
else
|
||||
va_base = 0x20000000;
|
||||
|
||||
kgsl_cffdump_memory_base(device_id, va_base,
|
||||
kgsl_cffdump_memory_base(device_id, KGSL_PAGETABLE_BASE,
|
||||
CONFIG_MSM_KGSL_PAGE_TABLE_SIZE, SZ_256K);
|
||||
}
|
||||
|
||||
|
1
drivers/gpu/msm/kgsl_mmu.c
Normal file → Executable file
1
drivers/gpu/msm/kgsl_mmu.c
Normal file → Executable file
@ -23,6 +23,7 @@
|
||||
#include "kgsl_mmu.h"
|
||||
#include "kgsl_device.h"
|
||||
#include "kgsl_sharedmem.h"
|
||||
#include "adreno_postmortem.h"
|
||||
|
||||
#define KGSL_MMU_ALIGN_SHIFT 13
|
||||
#define KGSL_MMU_ALIGN_MASK (~((1 << KGSL_MMU_ALIGN_SHIFT) - 1))
|
||||
|
@ -665,7 +665,7 @@ kgsl_sharedmem_writel(const struct kgsl_memdesc *memdesc,
|
||||
BUG_ON(memdesc == NULL || memdesc->hostptr == NULL);
|
||||
BUG_ON(offsetbytes + sizeof(unsigned int) > memdesc->size);
|
||||
|
||||
kgsl_cffdump_setmem(memdesc->physaddr + offsetbytes,
|
||||
kgsl_cffdump_setmem(memdesc->gpuaddr + offsetbytes,
|
||||
src, sizeof(uint));
|
||||
writel_relaxed(src, memdesc->hostptr + offsetbytes);
|
||||
return 0;
|
||||
@ -679,7 +679,7 @@ kgsl_sharedmem_set(const struct kgsl_memdesc *memdesc, unsigned int offsetbytes,
|
||||
BUG_ON(memdesc == NULL || memdesc->hostptr == NULL);
|
||||
BUG_ON(offsetbytes + sizebytes > memdesc->size);
|
||||
|
||||
kgsl_cffdump_setmem(memdesc->physaddr + offsetbytes, value,
|
||||
kgsl_cffdump_setmem(memdesc->gpuaddr + offsetbytes, value,
|
||||
sizebytes);
|
||||
memset(memdesc->hostptr + offsetbytes, value, sizebytes);
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user