diff options
author | Sidath Senanayake <sidaths@google.com> | 2020-06-18 09:26:13 +0200 |
---|---|---|
committer | Sidath Senanayake <sidaths@google.com> | 2020-06-18 09:26:13 +0200 |
commit | bc3c01e61c8ce9783a8ab091053905effcae12de (patch) | |
tree | 43f9f48736f7259d8cc996b11eed003dc80d5bef /mali_kbase/mali_kbase_dummy_job_wa.c | |
parent | b64f568f943e567534694cc993270adca96dcd06 (diff) | |
download | gpu-bc3c01e61c8ce9783a8ab091053905effcae12de.tar.gz |
Mali Valhall DDK r25p0 KMD
Provenance:
395644cb0 (collaborate/EAC/v_r25p0)
VX504X08X-BU-00000-r25p0-01eac0 - Android DDK
VX504X08X-BU-60000-r25p0-01eac0 - Android Document Bundle
Signed-off-by: Sidath Senanayake <sidaths@google.com>
Change-Id: I2cffddb42a554696d45b7f65c7bae8827a71341f
Diffstat (limited to 'mali_kbase/mali_kbase_dummy_job_wa.c')
-rw-r--r-- | mali_kbase/mali_kbase_dummy_job_wa.c | 102 |
1 files changed, 15 insertions, 87 deletions
diff --git a/mali_kbase/mali_kbase_dummy_job_wa.c b/mali_kbase/mali_kbase_dummy_job_wa.c index 5830e8e..188e53b 100644 --- a/mali_kbase/mali_kbase_dummy_job_wa.c +++ b/mali_kbase/mali_kbase_dummy_job_wa.c @@ -257,74 +257,15 @@ static ssize_t show_dummy_job_wa_info(struct device * const dev, static DEVICE_ATTR(dummy_job_wa_info, 0444, show_dummy_job_wa_info, NULL); -#define FAIL_PROBE 1 -#define SKIP_WA 2 -#define LOAD_WA 3 - -static int check_wa_validity(struct kbase_device *kbdev, - bool wa_blob_present) +static bool wa_blob_load_needed(struct kbase_device *kbdev) { - struct base_gpu_props *gpu_props = &kbdev->gpu_props.props; - const u32 major_revision = gpu_props->core_props.major_revision; - const u32 minor_revision = gpu_props->core_props.minor_revision; - const u32 gpu_id = gpu_props->raw_props.gpu_id; - const u32 product_id = (gpu_id & GPU_ID_VERSION_PRODUCT_ID) >> - GPU_ID_VERSION_PRODUCT_ID_SHIFT; - int ret = FAIL_PROBE; - - if (IS_ENABLED(CONFIG_ARCH_VEXPRESS)) - return SKIP_WA; - - switch (GPU_ID2_MODEL_MATCH_VALUE(product_id)) { - case GPU_ID2_PRODUCT_TTRX: - /* WA needed for r0p0, r0p1 only */ - if (major_revision == 0) { - if ((minor_revision <= 1) && wa_blob_present) - ret = LOAD_WA; - else if ((minor_revision > 1) && !wa_blob_present) - ret = SKIP_WA; - } else if ((major_revision > 0) && !wa_blob_present) - ret = SKIP_WA; - break; - case GPU_ID2_PRODUCT_TNAX: - /* WA needed for r0p0 only */ - if (major_revision == 0) { - if ((minor_revision == 0) && wa_blob_present) - ret = LOAD_WA; - else if ((minor_revision > 0) && !wa_blob_present) - ret = SKIP_WA; - } else if ((major_revision > 0) && !wa_blob_present) - ret = SKIP_WA; - break; - case GPU_ID2_PRODUCT_TBEX: - /* WA needed for r0p0 only */ - if ((major_revision == 0) && (minor_revision == 0)) { - if (!wa_blob_present) { - dev_warn(kbdev->dev, "Dummy job WA not applied, susceptible to GPU hang. Contact support-mali@arm.com"); - ret = SKIP_WA; - } else - ret = LOAD_WA; - } else if (!wa_blob_present) - ret = SKIP_WA; - break; - case GPU_ID2_PRODUCT_LBEX: - /* WA needed for r1p0 only */ - if ((major_revision == 1) && (minor_revision == 0)) { - if (!wa_blob_present) { - dev_warn(kbdev->dev, "Dummy job WA not applied, susceptible to GPU hang. Contact support-mali@arm.com"); - ret = SKIP_WA; - } else - ret = LOAD_WA; - } else if (!wa_blob_present) - ret = SKIP_WA; - break; - default: - if (!wa_blob_present) - ret = SKIP_WA; - break; - } + if (of_machine_is_compatible("arm,juno")) + return false; + + if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_TTRX_3485)) + return true; - return ret; + return false; } int kbase_dummy_job_wa_load(struct kbase_device *kbdev) @@ -339,31 +280,17 @@ int kbase_dummy_job_wa_load(struct kbase_device *kbdev) const struct wa_v2_info *v2_info; u32 blob_offset; int err; - int ret; struct kbase_context *kctx; + if (!wa_blob_load_needed(kbdev)) + return 0; + /* load the wa */ -#if KERNEL_VERSION(4, 18, 0) <= LINUX_VERSION_CODE - err = firmware_request_nowarn(&firmware, wa_name, kbdev->dev); -#else err = request_firmware(&firmware, wa_name, kbdev->dev); -#endif - ret = check_wa_validity(kbdev, err == 0); - - if (ret == SKIP_WA) { - if (err == 0) - release_firmware(firmware); - return 0; - } else if (ret == FAIL_PROBE) { - if (err == 0) { - dev_err(kbdev->dev, "WA blob unexpectedly present. Please refer to the Arm Mali DDK Bifrost/Valhall Release Notes, " - "Part number DC-06002 or contact support-mali@arm.com - driver probe will be failed"); - release_firmware(firmware); - } else { - dev_err(kbdev->dev, "WA blob missing. Please refer to the Arm Mali DDK Valhall Release Notes, " - "Part number DC-06002 or contact support-mali@arm.com - driver probe will be failed"); - } + if (err) { + dev_err(kbdev->dev, "WA blob missing. Please refer to the Arm Mali DDK Valhall Release Notes, " + "Part number DC-06002 or contact support-mali@arm.com - driver probe will be failed"); return -ENODEV; } @@ -504,8 +431,9 @@ void kbase_dummy_job_wa_cleanup(struct kbase_device *kbdev) sysfs_remove_file(&kbdev->dev->kobj, &dev_attr_dummy_job_wa_info.attr); wa_ctx = READ_ONCE(kbdev->dummy_job_wa.ctx); + WRITE_ONCE(kbdev->dummy_job_wa.ctx, NULL); /* make this write visible before we tear down the ctx */ - smp_store_mb(kbdev->dummy_job_wa.ctx, NULL); + smp_mb(); if (wa_ctx) { kbasep_js_release_privileged_ctx(kbdev, wa_ctx); |