Lines Matching refs:a6xx_gpu

8 #include "a6xx_gpu.h"
21 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
24 if (!adreno_has_gmu_wrapper(adreno_gpu) && !a6xx_gmu_isidle(&a6xx_gpu->gmu))
58 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
61 if (a6xx_gpu->has_whereami && !adreno_gpu->base.hw_apriv) {
63 OUT_RING(ring, lower_32_bits(shadowptr(a6xx_gpu, ring)));
64 OUT_RING(ring, upper_32_bits(shadowptr(a6xx_gpu, ring)));
102 static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
105 bool sysprof = refcount_read(&a6xx_gpu->base.base.sysprof_active) > 1;
106 struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
111 if (ctx->seqno == a6xx_gpu->base.base.cur_ctx_seqno)
152 if (adreno_is_a7xx(&a6xx_gpu->base)) {
191 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
195 a6xx_set_pagetable(a6xx_gpu, ring, submit->queue->ctx);
274 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
285 a6xx_set_pagetable(a6xx_gpu, ring, submit->queue->ctx);
1017 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
1018 struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
1038 gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL,
1040 gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL,
1042 gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL,
1534 static bool a6xx_ucode_check_version(struct a6xx_gpu *a6xx_gpu,
1537 struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
1573 a6xx_gpu->has_whereami = true;
1604 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
1606 if (!a6xx_gpu->sqe_bo) {
1607 a6xx_gpu->sqe_bo = adreno_fw_create_bo(gpu,
1608 adreno_gpu->fw[ADRENO_FW_SQE], &a6xx_gpu->sqe_iova);
1610 if (IS_ERR(a6xx_gpu->sqe_bo)) {
1611 int ret = PTR_ERR(a6xx_gpu->sqe_bo);
1613 a6xx_gpu->sqe_bo = NULL;
1620 msm_gem_object_set_name(a6xx_gpu->sqe_bo, "sqefw");
1621 if (!a6xx_ucode_check_version(a6xx_gpu, a6xx_gpu->sqe_bo)) {
1622 msm_gem_unpin_iova(a6xx_gpu->sqe_bo, gpu->aspace);
1623 drm_gem_object_put(a6xx_gpu->sqe_bo);
1625 a6xx_gpu->sqe_bo = NULL;
1634 if ((adreno_gpu->base.hw_apriv || a6xx_gpu->has_whereami) &&
1635 !a6xx_gpu->shadow_bo) {
1636 a6xx_gpu->shadow = msm_gem_kernel_new(gpu->dev,
1639 gpu->aspace, &a6xx_gpu->shadow_bo,
1640 &a6xx_gpu->shadow_iova);
1642 if (IS_ERR(a6xx_gpu->shadow))
1643 return PTR_ERR(a6xx_gpu->shadow);
1645 msm_gem_object_set_name(a6xx_gpu->shadow_bo, "shadow");
1703 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
1704 struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
1710 ret = a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET);
1869 gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_CX_GMU_POWER_COUNTER_SELECT_1,
1962 gpu_write64(gpu, REG_A6XX_CP_SQE_INSTR_BASE, a6xx_gpu->sqe_iova);
1978 if (a6xx_gpu->shadow_bo) {
1980 shadowptr(a6xx_gpu, gpu->rb[0]));
1990 a6xx_gpu->cur_ring = gpu->rb[0];
2038 a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET);
2040 if (a6xx_gpu->gmu.legacy) {
2042 a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_BOOT_SLUMBER);
2051 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2054 mutex_lock(&a6xx_gpu->gmu.lock);
2056 mutex_unlock(&a6xx_gpu->gmu.lock);
2071 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2072 struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
2088 a6xx_gpu->hung = true;
2141 a6xx_gpu->hung = false;
2323 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2340 gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE, 1);
2393 static void a6xx_llc_deactivate(struct a6xx_gpu *a6xx_gpu)
2395 llcc_slice_deactivate(a6xx_gpu->llc_slice);
2396 llcc_slice_deactivate(a6xx_gpu->htw_llc_slice);
2399 static void a6xx_llc_activate(struct a6xx_gpu *a6xx_gpu)
2401 struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
2405 if (IS_ERR(a6xx_gpu->llc_mmio))
2408 if (!llcc_slice_activate(a6xx_gpu->llc_slice)) {
2409 u32 gpu_scid = llcc_get_slice_id(a6xx_gpu->llc_slice);
2427 if (!llcc_slice_activate(a6xx_gpu->htw_llc_slice)) {
2428 if (!a6xx_gpu->have_mmu500) {
2429 u32 gpuhtw_scid = llcc_get_slice_id(a6xx_gpu->htw_llc_slice);
2443 if (!a6xx_gpu->have_mmu500) {
2444 a6xx_llc_write(a6xx_gpu,
2451 a6xx_llc_rmw(a6xx_gpu,
2459 static void a7xx_llc_activate(struct a6xx_gpu *a6xx_gpu)
2461 struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
2464 if (IS_ERR(a6xx_gpu->llc_mmio))
2467 if (!llcc_slice_activate(a6xx_gpu->llc_slice)) {
2468 u32 gpu_scid = llcc_get_slice_id(a6xx_gpu->llc_slice);
2485 llcc_slice_activate(a6xx_gpu->htw_llc_slice);
2488 static void a6xx_llc_slices_destroy(struct a6xx_gpu *a6xx_gpu)
2491 if (adreno_has_gmu_wrapper(&a6xx_gpu->base))
2494 llcc_slice_putd(a6xx_gpu->llc_slice);
2495 llcc_slice_putd(a6xx_gpu->htw_llc_slice);
2499 struct a6xx_gpu *a6xx_gpu, bool is_a7xx)
2504 if (adreno_has_gmu_wrapper(&a6xx_gpu->base))
2512 a6xx_gpu->have_mmu500 = (phandle &&
2516 if (is_a7xx || !a6xx_gpu->have_mmu500)
2517 a6xx_gpu->llc_mmio = msm_ioremap(pdev, "cx_mem");
2519 a6xx_gpu->llc_mmio = NULL;
2521 a6xx_gpu->llc_slice = llcc_slice_getd(LLCC_GPU);
2522 a6xx_gpu->htw_llc_slice = llcc_slice_getd(LLCC_GPUHTW);
2524 if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice))
2525 a6xx_gpu->llc_mmio = ERR_PTR(-EINVAL);
2590 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2597 mutex_lock(&a6xx_gpu->gmu.lock);
2598 ret = a6xx_gmu_resume(a6xx_gpu);
2599 mutex_unlock(&a6xx_gpu->gmu.lock);
2605 adreno_is_a7xx(adreno_gpu) ? a7xx_llc_activate(a6xx_gpu) : a6xx_llc_activate(a6xx_gpu);
2613 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2614 struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
2623 mutex_lock(&a6xx_gpu->gmu.lock);
2653 mutex_unlock(&a6xx_gpu->gmu.lock);
2664 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2669 a6xx_llc_deactivate(a6xx_gpu);
2673 mutex_lock(&a6xx_gpu->gmu.lock);
2674 ret = a6xx_gmu_stop(a6xx_gpu);
2675 mutex_unlock(&a6xx_gpu->gmu.lock);
2679 if (a6xx_gpu->shadow_bo)
2681 a6xx_gpu->shadow[i] = 0;
2691 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2692 struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
2699 mutex_lock(&a6xx_gpu->gmu.lock);
2713 mutex_unlock(&a6xx_gpu->gmu.lock);
2715 if (a6xx_gpu->shadow_bo)
2717 a6xx_gpu->shadow[i] = 0;
2727 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2729 mutex_lock(&a6xx_gpu->gmu.lock);
2732 a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET);
2736 a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET);
2738 mutex_unlock(&a6xx_gpu->gmu.lock);
2752 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2754 return a6xx_gpu->cur_ring;
2760 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2762 if (a6xx_gpu->sqe_bo) {
2763 msm_gem_unpin_iova(a6xx_gpu->sqe_bo, gpu->aspace);
2764 drm_gem_object_put(a6xx_gpu->sqe_bo);
2767 if (a6xx_gpu->shadow_bo) {
2768 msm_gem_unpin_iova(a6xx_gpu->shadow_bo, gpu->aspace);
2769 drm_gem_object_put(a6xx_gpu->shadow_bo);
2772 a6xx_llc_slices_destroy(a6xx_gpu);
2774 a6xx_gmu_remove(a6xx_gpu);
2778 kfree(a6xx_gpu);
2784 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2790 busy_cycles = gmu_read64(&a6xx_gpu->gmu,
2801 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2803 mutex_lock(&a6xx_gpu->gmu.lock);
2805 mutex_unlock(&a6xx_gpu->gmu.lock);
2812 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2819 if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice) &&
2844 struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
2846 if (adreno_gpu->base.hw_apriv || a6xx_gpu->has_whereami)
2847 return a6xx_gpu->shadow[ring->id];
3029 struct a6xx_gpu *a6xx_gpu;
3035 a6xx_gpu = kzalloc(sizeof(*a6xx_gpu), GFP_KERNEL);
3036 if (!a6xx_gpu)
3039 adreno_gpu = &a6xx_gpu->base;
3042 mutex_init(&a6xx_gpu->gmu.lock);
3061 a6xx_llc_slices_init(pdev, a6xx_gpu, is_a7xx);
3065 a6xx_llc_slices_destroy(a6xx_gpu);
3066 kfree(a6xx_gpu);
3077 a6xx_destroy(&(a6xx_gpu->base.base));
3089 ret = a6xx_gmu_wrapper_init(a6xx_gpu, node);
3091 ret = a6xx_gmu_init(a6xx_gpu, node);
3094 a6xx_destroy(&(a6xx_gpu->base.base));