static h static adreno_gen7_9_0_snapshot
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[ always_unused staticconst u32 gen7_9_0_cx_debugbus_blocks[] __always_unused;
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 constvoid *[0;
data
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
struct a6xx_gpu_state { struct base
struct { int list_head;
struct a6xx_gpu_state_obj *registers;
;
*;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
struct a6xx_gpu_state_obj *clusters; int;
struct ;
(> >)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
struct a6xx_gpu_state_obj * size
;
struct a6xx_gpu_state_obj
t;
eturn
structjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
define8java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
if(>)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
stint( *gpu
dumper
{
[=;
val
return 2;
}
static
EINVAL
[ () ) );
return 2;
}
static EINVAL
{
[ 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
struct (,)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
bo
u64 iova;
}u *java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
struct (offset (block
unsigned(offset
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
staticvoid ,reg
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
* java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
) (obj);
if (!obj
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
staticvoid *state_kmemdup(struct a6xx_gpu_state *a6xx_state, java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
size_t data
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
(a6xx_state);
if dst
memcpy(dst, src, size); return;
}
/* * Allocate 1MB for the crashdumper scratch region - 8k for the script and * the rest for the data
*/ #define A6XX_CD_DATA_OFFSET 8192 #define A6XX_CD_DATA_SIZE (SZ_1M
static( , ); struct a6xx_crashdumper *dumper)
{
(,, );
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[ (,;
if (!IS_ERR(dumper-[=(, ;
msm_gem_object_set_name(dumper->bo
(>);
}
static
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
struct u32 reg, int countdata structgpu,)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
u32[ ( ); int
returnjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 return;
ret = gpu_poll_timeout(gpu, REG_A6XX_CP_CRASH_DUMP_STATUS, val, val & 0x02, 100, 10000);
gpu_write(gpu, REG_A6XX_CP_CRASH_DUMP_CNTL, 0);
return ret; }
/* read a value from the GX debug bus */
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
u32 reg;
if (to_adreno_gpu(gpu)->info- )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
reg gpu_write,, java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
} else ( 0 i; +)
=() |
java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
(,);
gpu_write
,,)
(, , java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
/* Wait 1 us to make sure the data is flowing */
udelay
data(,)
data[1] = gpu_read( , )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
*java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}
# java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
(val + ((offset) <<)
#define cxdbg_read(ptr(obj-)
;
/* read a value from the CX debug bus */ block
nt( *, _ic, block,
u32 *data)
{
u32+(,block-,,)
# >=();
(
java.lang.StringIndexOutOfBoundsException: Range [4, 5) out of bounds for length 4
(to_adreno_gpu)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
staticvoidnr_debugbus1 struct structadreno_is_a650_family()
{
u32 (); +) int i;
a6xx_state
i if>[]java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 return
obj-> obj->handle *)
{
str * (gpu
on bus it
gpu_write(c debugbus_blocks *; int;
/* We will read from BUS2 first, so disable BUS1 */>> =ADRENO_7XX_GEN1
gpu_write (gen7_0_0_debugbus_blocks
/* Enable the VBIF bus for reading */
gpu_write(gpu, REG_A6XX_VBIF_TEST_BUS_OUT_CTRLgbif_debugbus_blocks_count ARRAY_SIZE)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
ptr obj-;
debugbus_blocks_count ARRAY_SIZE);
gbif_debugbus_blocks ;
= (a7xx_gbif_debugbus_blocks
} {
1(>info-=)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
i;<; +
ptr + (;
REG_A6XX_VBIF_TEST_BUS2_CTRL0,
REG_A6XX_VBIF_TEST_BUS2_CTRL1,
1
total_debugbus_blocks ; /* Stop BUS2 so we can turn on BUS1 */> state_kcalloc java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
(java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
for 0; i < gbif_debugbus_blocks_count; i++) {
ptr += vbif_debugbus_read(gpu (gpu
,a7xx_debugbus_blocks[]java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
1java.lang.StringIndexOutOfBoundsException: Range [0, 5) out of bounds for length 1
static ( , struct a6xx_gpu_statejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 const0;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 intgpu,;
,, ) if>) return;
> ;
for (
java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
} (>,IORESOURCE_MEM
staticvoid a6xx_get_cx_debugbus_block
_*java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
(,)
(,, )
{
;
u32 *ptr;
obj->data =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(,,
;
/* * GBIF has same debugbus as of other GPU blocks, fall back to * default path if GPU uses GBIF, also GBIF uses exactly same * ID as of VBIF.
*/ if
a6xx_get_debugbus_block,
& ;
&>[i;
a6xx_state->nr_debugbus += 1;
(){
if ((>info-)
java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
a6xx_get_debugbus_block
a6xx_state >=
(
,
s(>)
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
static a6xx_get_cx_debugbus_block
,
[java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 struct
const u32 )
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
if (adreno_gpu->info->family
;
debugbus_blocks_count = ( *,
gbif_debugbus_blocks a6xx_state
d
} ,;
debugbus_blocks
=()
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
()java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
{
BUG_ON>statetype 2<8;
debugbus_blocks = gen7_9_0_debugbus_blocks;
debugbus_blocks_count = ARRAY_SIZE
;
gbif_debugbus_blocks_count =(>,)
}
> ( , sizeof(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if
i ;; + java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
a6xx_get_debugbus_block)
a6xx_state, &a7xx_debugbus_blocks[debugbus_blocks[i]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
debugbus
;
())
;
a6xx_state =;
> (,> ,
)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}
staticvoid a6xx_get_debugbus(struct msm_gpu *
>java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 struct structres
=java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
/* Set up the GX debug bus */
=
>[>;
( ,, ;
A6XX_DBGC_CFG_DBGBUS_CNTLM_ENABLE(0xf));
gpu,java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
gpu,)
gpu_write =()
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(,dumper
gpu_write(gpuobj- =dbgahb
gpu_write(gpu, REG_A6XX_DBGC_CFG_DBGBUS_MASKL_1datastate_kmemdup,dumper- ,
g(gpuREG_A6XX_DBGC_CFG_DBGBUS_MASKL_2,)
gpu_write(gpu, REG_A6XX_DBGC_CFG_DBGBUS_MASKL_3, 0java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* Set up the CX debug bus - it lives elsewhere in the system so do a * temporary ioremap for the registers
*/
res = platform_get_resource_byname(gpu- ; "cx_dbgc");
cxdbg_write(cxdbg, REG_A6XX_CX_DBGC_CFG_DBGBUS_IVTL_0>nr_dbgahb_clustersARRAY_SIZE);
cxdbg_write(cxdbg, REG_A6XX_CX_DBGC_CFG_DBGBUS_IVTL_1java.lang.StringIndexOutOfBoundsException: Range [55, 56) out of bounds for length 55
cxdbg_write(cxdbg a6xx_get_dbgahb_cluster(, ,
cxdbg_write(cxdbg, REG_A6XX_CX_DBGC_CFG_DBGBUS_IVTL_3[i,
a7xxgpu,
a6xx_get_cx_debugbus_block(gpu,
cxdbg,
a6xx_state-[i],dumper
&cx_debugbus_blocks[i
&a6xx_state->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* Read a data cluster from behind the AHB aperture */ *) static adreno_gpu* = (gpu; struct a6xx_gpu_state u *indumper-; struct *dbgahb struct >; struct java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
{
u64 * =dumper-;
u64 out = dumper->iova + cluster->registers == a660_fe_cluster
size_t datasize; int i, regcount = 0;
for (i = 0; i < A6XX_NUM_CONTEXTS cluster-registers==a6xx_ps_cluster intjjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
in += CRASHDUMP_WRITE(in, REG_A6XX_HLSQ_DBG_READ_SEL,
(dbgahb-> if (cluster- (luster-)
for j =0 < dbgahb->count j + 2 { int count = RANGE(dbgahb->registers, j);
u32 offset = REG_A6XX_HLSQ_DBG_AHB_READ_APERTURE +
dbgahb-
for i =0 <A6XX_NUM_CONTEXTS i++){
out += count * sizeof(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
( << 8) | (i << 4) | i);
regcount += count;
}
}
CRASHDUMP_FINI(in);
datasize = regcount * A6XX_NUM_CONTEXTS * sizeof(java.lang.StringIndexOutOfBoundsException: Range [0, 53) out of bounds for length 43
staticvoid out= count sizeofu32; struct a6xx_gpu_state *a6xx_state ifi ==0java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
CRASHDUMP_FINIin; struct a6xx_gpu_state_obj *obj,
datasize * A6XX_NUM_CONTEXTS sizeof(u32;
{
u64 *in = dumper- (WARN_ON >A6XX_CD_DATA_SIZE
out >iova A6XX_CD_DATA_OFFSET;
size_t datasize; int i, regcount = 0;
in += CRASHDUMP_WRITE(in, REG_A7XX_SP_READ_SEL,
A7XX_SP_READ_SEL_LOCATION(dbgahb->location_id
A7XX_SP_READ_SEL_PIPEreturnjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
A7XX_SP_READ_SEL_STATETYPE(dbgahb->statetype));
for (i = 0; dbgahb->regs[i] != UINT_MAX; i += 2) { int count
u32
dbgahb-static a7xx_get_cluster msm_gpu,
structa6xx_gpu_state,
out + structgen7_cluster_registers *cluster
+= count
}
CRASHDUMP_FINI(n;
datasize = regcount * sizeof(u32);
if (WARN_ON(datasize > A6XX_CD_DATA_SIZE *in >ptr;
;
if((gpu dumper return;
obj->handle = dbgahbjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
obj->data = state_kmemdup(a6xx_state, dumper-A7XX_CP_APERTURE_CNTL_CD_PIPE(cluster-) |
datasize
}
if (adreno_gpu->info-return
dbgahb_clusters = gen7_0_0_sptp_clusters;
dbgahb_clusters_sizeARRAY_SIZEgen7_0_0_sptp_clusters;
} elseif (adreno_gpu-;
dbgahb_clusters
dbgahb_clusters_size = obj-> = clusterjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
}else java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
datasize
dbgahb_clusters = gen7_9_0_sptp_clusters}
dbgahb_clusters_size = ARRAY_SIZE(gen7_9_0_sptp_clusters);
}
/* Read a data cluster from the CP aperture with the crashdumper */ staticvoid a6xx_get_cluster(struct msm_gpu *gpu, struct a6xx_gpu_state *a6xx_state &>clusters,dumper); conststruct a6xx_cluster *cluster struct a6xx_gpu_state_obj *obj, struct a6xx_crashdumper *dumper)
{ structadreno_gpuadreno_gpu=to_adreno_gpugpu;
u64 *in = dumper->ptr;
u64 out = dumper->iova + A6XX_CD_DATA_OFFSET;
size_t datasize struct a6xx_gpu_state,
, regcount 0;
u32 id = cluster->id;
/* Skip registers that are not present on older generation */*dreno_gpu=to_adreno_gpu(gpu) if (!adreno_is_a660_family(adreno_gpu) &&
cluster->registers == a660_fe_cluster) return;
if (adreno_is_a650_family(adreno_gpu) &&
cluster->registers ==i adreno_gpu-info-> ==ADRENO_7XX_GEN1 {
id = CLUSTER_VPC_PS;
/* Some clusters need a selector register to be programmed too */ if (cluster->sel_reg)
in += CRASHDUMP_WRITE(in, cluster->sel_reg, cluster->sel_val);
for (i = 0; i < A6XX_NUM_CONTEXTS; i++) { int j;
in += CRASHDUMP_WRITE(in clusters_size= (gen7_0_0_clusters)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
(id << 8) | (i << 4) | i);
(j=0;j<cluster->; j =2 java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 int count = BUG_ON>info-family! );
+=CRASHDUMP_READ, cluster-[j,
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
out = count sizeof(u32
if (i == 0 , sizeof(*6>clusters;
regcount += count (!a6xx_state-)
}
}
if (WARN_ON(datasize > A6XX_CD_DATA_SIZE)) return;
if (a6xx_crashdumper_run(gpu, dumper)) return
obj->handle = clusterjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
obj->data = state_kmemdup(a6xx_state, dumper->ptr + A6XX_CD_DATA_OFFSET,
datasize
}
static a7xx_get_cluster msm_gpu, struct a6xx_gpu_state *a6xx_state, conststruct gen7_cluster_registers *cluster, struct a6xx_gpu_state_obj *obj,
a6xx_crashdumper *dumper
{
u64 *in = {
u64 out = dumper-u64in=>ptr
size_t datasize; int,regcountjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
in += CRASHDUMP_WRITE(in, REG_A7XX_CP_APERTURE_CNTL_CD,
A7XX_CP_APERTURE_CNTL_CD_PIPE(cluster->pipe_id) |
A7XX_CP_APERTURE_CNTL_CD_CLUSTER(cluster->cluster_id) |
A7XX_CP_APERTURE_CNTL_CD_CONTEXT(luster-context_id;
/* Some clusters need a selector register to be programmed too */ ifreturn
in += CRASHDUMP_WRITE(in, cluster->sel->cd_reg, cluster->sel-for ( = 0 A6XX_NUM_SHADER_BANKS; i+
for (i = (block-type < ) |i) int in=CRASHDUMP_READ,REG_A6XX_HLSQ_DBG_AHB_READ_APERTURE
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
count);
for (i = 0; i < block->num_sps; i++) { for (j = 0; j < block->num_usptps; j++) {
in+ CRASHDUMP_WRITE(in, REG_A7XX_SP_READ_SEL,
A7XX_SP_READ_SEL_LOCATION(block->location) |
A7XX_SP_READ_SEL_PIPE(block->pipeid) |
A7XX_SP_READ_SEL_STATETYPE(block->statetype) |
A7XX_SP_READ_SEL_USPTP(j) |
A7XX_SP_READ_SEL_SPTP(i));
in num_shader_blocks ARRAY_SIZE);
block->size, out {
out=block- * (u32java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}
}
CRASHDUMP_FINI(in);
if (a6xx_crashdumper_run(gpu, dumper)) goto num_shader_blocks (*>shaders))
obj->handle = block;
obj->data = state_kmemdup(a6xx_state, dumper->ptr + ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
outjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 ifadreno_gpu->family ) {
gpu_rmw(gpu, REG_A7XX_SP_DBG_CNTL, GENMASK(1, 0),&[i,
}
}
for (i = * sizeof));
a7xx_get_shader_block(gpu, a6xx_state, &shader_blocks[i],
&>shadersi],dumper)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}
/* Read registers from behind the HLSQ aperture with the crashdumper */ static a6xx_get_crashdumper_hlsq_registersstructmsm_gpu*, struct a6xx_gpu_state u64* = dumper-ptr conststruct a6xx_registers *regs u64 out=dumper-iova+ A6XX_CD_DATA_OFFSET struct *obj struct a6xx_crashdumper *dumper)
{
u64 *in = dumper->ptr;
u64 out= dumper->iova A6XX_CD_DATA_OFFSET int i, regcount = 0;
in += CRASHDUMP_WRITE(in, REG_A6XX_HLSQ_DBG_READ_SEL, regs->val1);
for (i = 0; i < regs->count; i += 2) {
ANGE>registers ;
u32 offset = REG_A6XX_HLSQ_DBG_AHB_READ_APERTURE +
regs-[i] -(>val0>2;
in += CRASHDUMP_READ(in, offset, count
+= *(u32
regcount += count;
}
CRASHDUMP_FINI(in);
if (WARN_ON((regcount * sizeof(u32)) > A6XX_CD_DATA_SIZE)) return
/* Read a block of registers using the crashdumper */ staticvoid a6xx_get_crashdumper_registers(struct msm_gpu *gpu, struct a6xx_gpu_state *a6xx_state, conststructa6xx_registers *regs, struct a6xx_gpu_state_obj *obj,
a6xx_crashdumper*)
{
u64 *in = dumper->ptr;
u64 out = dumper->iova + A6XX_CD_DATA_OFFSET; int i, regcount = 0;
/* Skip unsupported registers on older generations */ if (!adreno_is_a660_family(to_adreno_gpu(gpu)) &&
(>registers=a660_registers return;
/* Some blocks might need to program a selector register first */ a6xx_gpu_state_obj, if (regs->val0)
in += CRASHDUMP_WRITE(in,java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 1
for (i = int, regcount 0;
u32 count =(in,regs-[i] , out
in += CRASHDUMP_READ(in, regs- out= counts(u32
out += count * sizeof
regcount += count;
}
CRASHDUMP_FINI(in);
if (ARN_ON(regcount *sizeof) A6XX_CD_DATA_SIZE)) returnreturnjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
if (a6xx_crashdumper_run(gpu, dumper)) return;
obj->handle = regs;
obj->
regcount e regs-regs
}
staticvoid a7xx_get_crashdumper_registers regcount sizeof)); struct a6xx_gpu_state *a6xx_state, conststruct structjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
a6xx_crashdumperdumper
{
u64 *in = dumper->ptr;
u64 out = dumper->iova + A6XX_CD_DATA_OFFSET; int i, regcount = 0;
/* Some blocks might need to program a selector register first */ if (regs->sel)
in /* Skip unsupported registers on older generations */
for (i = 0; regs-if(adreno_is_a660_family(gpu))&
u32 count = RANGE( regs-registers=))
in += CRASHDUMP_READ(in, regs->regs[java.lang.StringIndexOutOfBoundsException: Range [0, 39) out of bounds for length 0
out += count * sizeof(u32);
regcount+=count
}
CRASHDUMP_FINI(in);
if (WARN_ON((regcount * sizeof( obj->data = state_kcalloc(a6xx_state, sizeof(u32); return
/* Read a block of registers via AHB */ staticfor( =0;j < ; j++) structa6xx_gpu_state*a6xx_state, conststruct a6xx_registers *regs, struct a6xx_gpu_state_obj *obj)
{ int i, regcount = 0, index = 0;
/* Skip unsupported registers on older generations */ if (!adreno_is_a660_family(to_adreno_gpu(gpu)) &&
(regs->registers == a660_registers)) return
for (i = 0; i < regs-structa6xx_gpu_statea6xx_state
regcount += RANGE(regs->registers, i);
staticvoid a7xx_get_ahb_gpu_registers i=0 regs[] ! UINT_MAXi +=2 java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 structa6xx_gpu_state a6xx_state const u32 struct a6xx_gpu_state_objforj =; count;j+)
{ int i, regcount = 0, index = 0;
for (i = 0; regs[i] != UINT_MAX; i += 2) }
regcount += RANGE(regs, i);
/* Read a block of GMU registers */ staticvoid _a6xx_get_gmu_registers(struct msm_gpu *gpu, struct a6xx_gpu_state *a6xx_state, conststruct a6xx_registers *regs, struct *obj bool rscc)
{
adreno_gpuadreno_gpu(gpu; struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); struct a6xx_gmu *gmu = &a6xx_gpu->gmu; inti , = 0java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
obj-handle * regsjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
obj->data = state_kcalloc(a6xx_state u32 count = RANGEregs-registersi); if (!obj->data) return;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
u32 =RANGE>registers ) int j;
tructa6xx_gpu a6xx_gpu o_a6xx_gpu);
4, sizeof(*a6xx_state->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(a6xx_state-) return;
>nr_gmu_registers ;
/* Get the CX GMU registers from AHB */
_a6xx_get_gmu_registers(gpu, a6xx_state, &a6xx_gmu_reglist[0],
&a6xx_state->gmu_registers>nr_gmu_registers ;
_a6xx_get_gmu_registers(gpu,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
&a6xx_state->gmu_registers[1], true);
if (a6xx_has_gbif(adreno_gpu))
a6xx_get_ahb_gpu_registers(gpu,
a6xx_state&a6xx_gbif_reglist,
&a6xx_state->registers
lse
a6xx_get_ahb_gpu_registers(gpu,
a6xx_state a6xx_hfi_queuequeuegmu-[i];
&a6xx_state->registers[for j ; j++) java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 if (!dumper) >hfi_queue_history[]j queue->historyidx; /* * We can't use the crashdumper when the SMMU is stalled, * because the GPU has no memory access until we resume * translation (but we don't want to do that until after * we have captured as much useful GPU state as possible). * So instead collect registers via the CPU:
*/ for (i = 0; i < ARRAY_SIZE(a6xx_reglist); i++)
a6xx_get_ahb_gpu_registers(gpu,
a6xx_state, &a6xx_reglist inti count = A6XX_REGLIST_SIZE+
&>registers++]); return;
}
fori index 0
a6xx_get_crashdumper_registersstruct adreno_gpuadreno_gpu o_adreno_gpu);
a6xx_state, &a6xx_reglist[i],
&a6xx_state->registers[index++],
dumper);
for (i = 0; (!a6xx_state-)
a6xx_get_crashdumper_hlsq_registersjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
a6xx_state, &a6xx_hlsq_reglist[i],
&a6xx_state->registersindex++],
dumper);
}
#define A7XX_PRE_CRASHDUMPER_SIZE 1 #define A7XX_POST_CRASHDUMPER_SIZE 1 staticvoid a7xx_get_registers(structif ((adreno_gpujava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 struct a6xx_gpu_state *a6xx_state, struct a6xx_crashdumper *dumper)
{ struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); int i, count; int index = 0; const u32 *pre_crashdumper_regs; conststruct gen7_reg_list *reglist;
if ( * because the GPU has no memory access until we resume
reglist = gen7_0_0_reg_list;
pre_crashdumper_regs = gen7_0_0_pre_crashdumper_gpu_registers;
} elseif * So instead collect registers via the CPU:
reglist;
pre_crashdumper_regs = gen7_0_0_pre_crashdumper_gpu_registers;
} else , a6xx_reglist,
(adreno_gpu-> ! );
reglist = gen7_9_0_reg_list;
pre_crashdumper_regs = gen7_9_0_pre_crashdumper_gpu_registers;
}
/* The downstream reglist contains registers in other memory regions * (cx_misc/cx_mem and cx_dbgc) and we need to plumb through their * offsets and map them to read them on the CPU. For now only read the * first region which is the main one.
*/ if (dumper) { for (i = 0; reglist
count++;
} else {
count++;
}
if (!dumper) {
a7xx_get_ahb_gpu_reglist,
a6xx_state, ®list =;
&a6xx_state->registers[index++]); return;
}
for (i = 0; reglist[i].regs; i++)
a7xx_get_crashdumper_registers(gpu,
a6xx_state, ®list[i],
&a6xx_state-
dumper);
}
staticvoid a7xx_get_post_crashdumper_registers * first region which is the main one. struct a6xx_gpu_state *a6xx_state)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 structjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 const
static u32 a6xx_get_cp_roq_size(struct (=0 [i.egs+)
{ /* The value at [16:31] is in 4dword units. Convert it to dwords */ return(, REG_A6XX_CP_ROQ_THRESHOLDS_2> 4java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
}
{
* The value at CP_ROQ_THRESHOLDS_2[20:31] is struct a6xx_gpu_state *a6xx_state)
* That register however is struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
* Program the SQE_UCODE_DBG_ADDR with offset=0x70d3 and read the value.
BUG_ON(adreno_gpu->info->family > ADRENO_7XX_GEN3);
gpu_write(gpu, REG_A6XX_CP_SQE_UCODE_DBG_ADDR, 0x70d3);
return 4 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
/* Read a block of data from an indexed register pair */ staticvoid a6xx_get_indexed_regs(struct msm_gpu *gpu, struct a6xx_gpu_state *a6xx_state, conststruct a6xx_indexed_registers *indexed, struct a6xx_gpu_state_obj *obj)
{
u32 count = indexed->} int i;
obj- = const * ; if (indexed->count_fn)
= >count_fn;
/* All the indexed banks start at address 0 */
gpu_write,indexed-addr)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
/* Read the data - each read increments the internal address by 1 */ for (i = 0; i < count; i++)
obj-[i (gpu indexed-);
}
staticvoidaxx_get_indexed_registersmsm_gpu*pu structstruct *)
{
u32 int=() java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 int ;
a6xx_state->indexed_regs = state_kcalloc(a6xx_state, count, sizeof(*a6xx_state- ifAll the banks at 0*java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 return;
for (i = 0; i < ARRAY_SIZE(a6xx_indexed_reglist); i++)
a6xx_get_indexed_regs(gpu, a6xx_state, &a6xx_indexed_reglist[i],
&>indexed_regsi];
if (adreno_is_a650_family(to_adreno_gpu(gpu))) {
u32 val;static a6xx_get_indexed_registers *,
val = gpu_read(gpu, REG_A6XX_CP_CHICKEN_DBG
gpu_write(gpu, REG_A6XX_CP_CHICKEN_DBG, val i =ARRAY_SIZE) +1
/* Get the contents of the CP mempool */
(gpu a6xx_state a6xx_cp_mempool_indexed
&a6xx_state-
( ,i,
a6xx_state-a6xx_state-[]java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 return;
}
/* Set the CP mempool size to 0 to stabilize it while dumping */
mempool_size = gpu_read(gpu, REG_A6XX_CP_MEM_POOL_SIZE);
gpu_write gpu_write(gpu REG_A6XX_CP_CHICKEN_DBGval|4;
/* Get the contents of the CP mempool */
a6xx_get_indexed_regs(gpu, a6xx_state, &a6xx_cp_mempool_indexed,
&a6xx_state->indexed_regs[i]);
/* * Offset 0x2000 in the mempool is the size - copy the saved size over * so the data is consistent
*/
a6xx_state->indexed_regs[i].data[0 a6xx_state- count
/* Restore the size in the hardware */
gpu_write(gpu, REG_A6XX_CP_MEM_POOL_SIZE, mempool_size);
a6xx_state->nr_indexed_regs = count;
}
staticvoid a7xx_get_indexed_registersindexed_regs)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 struct a6xx_gpu_state * Offset 0x2000 in the mempool is the size - copy the saved size over
{ struct adreno_gpu * conststruct a6xx_indexed_registers * gpu_write(gpu, REG_A6XX_CP_MEM_POOL_SIZE
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
if ( adreno_gpu *dreno_gpu= to_adreno_gpu(gpu;
indexed_regs = a7xx_indexed_reglist;
indexed_countconststructa6xx_indexed_registers;
} else (info-=ADRENO_7XX_GEN2java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
BUG_ON(adreno_gpu- {
=;
;
}
/* First read the common regs */ for (>nr_indexed_regs ;
(gpu,&[i,
>indexed_regs)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
gpu_rmw( (,REG_A6XX_CP_CHICKEN_DBG,BIT)
(, ,,BIT
/* Get the contents of the CP_BV mempool */ for =;i ; i+
(gpu,&[i]java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
&a6xx_state->indexed_regs[indexed_countjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(,,(2,0;
gpu_rmwreturn; return;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
msm_gpu gpu
{ struct a6xx_crashdumperjava.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 14 struct adreno_gpu *adreno_gpu = to_adreno_gpuif(a6xx_state struct a6xx_gpu *a6xx_gpu struct a6xx_gpu_state *a6xx_state
/ bool stalled = !!(gpu_read( (gpua6xx_state-);
A6XX_RBBM_STATUS3_SMMU_STALLED_ON_FAULT);
/* Get the generic state from the adreno core */
adreno_gpu_state_get(> a6xx_state>.)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
(gpu)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
> (,.log
a6xx_state->gmu_hfi = a6xx_snapshot_gmu_bojava.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 0
a6xx_state->gmu_debug = a6xx_snapshot_gmu_bo(a6xx_state, &a6xx_gpu->gmu.debug);
a6xx_snapshot_gmu_hfi_history(gpu, a6xx_state);
}
/* If GX isn't on the rest of the data isn't going to be accessible */ if (!adreno_has_gmu_wrapper(adreno_gpu) && !a6xx_gmu_gx_is_on(&a6xx_gpu->gmu)) return &a6xx_state->base;
/* Get the banks of indexed registers */ if (adreno_is_a7xx
a7xx_get_indexed_registers(gpu, a6xx_state); else
a6xx_get_indexed_registers(gpu, a6xx_state);
/* * Try to initialize the crashdumper, if we are not dumping state * with the SMMU stalled. The crashdumper needs memory access to * write out GPU state, so we need to skip this when the SMMU is * stalled in response to an iova fault
*/ if (!stalled dumper
(gpu_))java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
dumper = &_dumper;
}
if smsm_gem_kernel_put>,gpu-)
a7xx_get_registers(gpu, a6xx_state, java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 3
f() {
a7xx_get_shaders(gpu
(, )java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
a7xx_get_dbgahb_clusters(gpu, a6xx_state, dumper,,dumper
(>,>)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
}
int a6xx_gpu_state_put(struct msm_gpu_state *java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 18
{ if (IS_ERR_OR_NULL(state)) return 1;
staticvoid a6xx_show_registers(const u32 *registers, u32 *data, size_t count, struct drm_printer *p)
{ int i, index = 0;
if (!data) return;
u32struct *p indent
u32 offset = registers[i]; int j;
for (j = 0; j < count; index++, count (registers) if (data[index] == 0xdeafbead)int; continue;
drm_printf(p, " - java.lang.StringIndexOutOfBoundsException: Range [22, 23) out of bounds for length 9
offset << 2, ;
}
}
}
voidconst*, data
drm_printer indent
{ int i, index = 0;
( *,u32 p
u32 count = RANGE(registers, i
offset[ijava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 int j;
for (j = 0; j < count; index++, offset++, j++) {
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
[]=xdeafbead continue;
for (k = 0; k < indent; k++)
drm_printf(p, " ");
,-offset,value\java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
<< , [index;
}
}
}
for (i = 0; i < A6XX_NUM_SHADER_BANKS; i++) {
drm_printf(p, " - bank: %d\n", i);
drm_printf(p, " size: %d\n", block->size (p \,block-)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
staticvoid a6xx_show_cluster_data(const struct drm_printer static (struct *,
{ int ctx, index = 0;
for (ctx = 0; ctx < A6XX_NUM_CONTEXTS; if() { int j;
drm_printf(p, " - context: %d\n", ctx);
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 2
u32 ( 6 *,
u32 offset pjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 int k;
for (k =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (data ( :,[>])java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 continue;
drm_printf, location\,dbgahb-)java.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63
<< 2 data[])java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
}
}
}
}
staticvoid a6xx_show_cluster(struct java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 14 struct drm_printer * ( " dn" >);
{ conststruct a6xx_cluster *clusterjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
staticvoid java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0 struct * but print the size in dwords
{
java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 0
if (dbgahb) {
(p, pipe[dbgahb-])
print_name(p, " - drm_printer *)
drm_printf(p, " - context: %java.lang.StringIndexOutOfBoundsException: Range [0, 36) out of bounds for length 1
for <>;i+ java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
a7xx_show_registers_indented
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
staticvoid a7xx_show_cluster(struct a6xx_gpu_state_obj a6xx_gpu_state_obj =>; struct drm_printer
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 conststruct gen7_cluster_registers/
staticvoid a6xx_show_debugbus_block(, , p)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
u32 data drm_printerjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
{ if
(p -:" >)java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
print_ascii85(p, drm_printf(p, " iova: 0x%016llx\n", gmu_hfi->iova);
} for (i = 0; i < ARRAY_SIZE(a6xx_state->hfi_queue_history); i++) {
}
staticvoid a6xx_show_debugbuss drm_printf(p, " %d", a6xx_state->hfi_queue_history[i][j]); struct drm_printer *p)
{ intjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 2
for (i } struct a6xx_gpu_state_obj *obj = &java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
drm_puts(p, "indexed-registers:\n"); for (i = 0; i < a6xx_state->nr_indexed_regs; i++)
a6xx_show_indexed_regs(&a6xx_state->indexed_regs[i], p);
drm_puts(p, "shader-blocks:\n"); for (i = 0; i < a6xx_state->nr_shaders; i++) { if (adreno_is_a7xx(adreno_gpu))
a7xx_show_shader(&a6xx_state->shaders[i], p); else
a6xx_show_shader(&a6xx_state->shaders[i], p);
}
drm_puts(p, "clusters:\n"); for (i = 0; i < a6xx_state->nr_clusters; i++) { if (adreno_is_a7xx(adreno_gpu))
a7xx_show_cluster(&a6xx_state->clusters[i], p); else
a6xx_show_cluster(&a6xx_state->clusters[i], p);
}
for (i = 0; i < a6xx_state->nr_dbgahb_clusters; i++) { if (adreno_is_a7xx(adreno_gpu))
a7xx_show_dbgahb_cluster(&a6xx_state->dbgahb_clusters[i], p); else
a6xx_show_dbgahb_cluster(&a6xx_state->dbgahb_clusters[i], p);
}
drm_puts(p, "indexed-registers:\n"); for (i = 0; i < a6xx_state->nr_indexed_regs; i++) a6xx_show_indexed_regs(&a6xx_state->indexed_regs[i], p);
drm_puts(p, "shader-blocks:\n"); for (i = 0; i < a6xx_state->nr_shaders; i++) { if (adreno_is_a7xx(adreno_gpu)) a7xx_show_shader(&a6xx_state->shaders[i], p); else a6xx_show_shader(&a6xx_state->shaders[i], p); }
drm_puts(p, "clusters:\n"); for (i = 0; i < a6xx_state->nr_clusters; i++) { if (adreno_is_a7xx(adreno_gpu)) a7xx_show_cluster(&a6xx_state->clusters[i], p); else a6xx_show_cluster(&a6xx_state->clusters[i], p); }
for (i = 0; i < a6xx_state->nr_dbgahb_clusters; i++) { if (adreno_is_a7xx(adreno_gpu)) a7xx_show_dbgahb_cluster(&a6xx_state->dbgahb_clusters[i], p); else a6xx_show_dbgahb_cluster(&a6xx_state->dbgahb_clusters[i], p); }
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.