aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Gmeiner <[email protected]>2020-08-23 21:09:22 +0200
committerLucas Stach <[email protected]>2020-08-24 17:20:39 +0200
commit2c5bf028ef34745e7b3fe768f9c9355ecc7df101 (patch)
tree84f2adc2ca49afb4cc65b9f51772a03b68da8478
parent9123e3a74ec7b934a4a099e98af6a61c2f80bbf5 (diff)
drm/etnaviv: fix external abort seen on GC600 rev 0x19
It looks like that this GPU core triggers an abort when reading VIVS_HI_CHIP_PRODUCT_ID and/or VIVS_HI_CHIP_ECO_ID. I looked at different versions of Vivante's kernel driver and did not found anything about this issue or what feature flag can be used. So go the simplest route and do not read these two registers on the affected GPU core. Signed-off-by: Christian Gmeiner <[email protected]> Reported-by: Josua Mayer <[email protected]> Fixes: 815e45bbd4d3 ("drm/etnaviv: determine product, customer and eco id") Cc: [email protected] Tested-by: Josua Mayer <[email protected]> Signed-off-by: Lucas Stach <[email protected]>
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gpu.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index d5a4cd85a0f6..c6404b8d067f 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -337,9 +337,16 @@ static void etnaviv_hw_identify(struct etnaviv_gpu *gpu)
gpu->identity.model = gpu_read(gpu, VIVS_HI_CHIP_MODEL);
gpu->identity.revision = gpu_read(gpu, VIVS_HI_CHIP_REV);
- gpu->identity.product_id = gpu_read(gpu, VIVS_HI_CHIP_PRODUCT_ID);
gpu->identity.customer_id = gpu_read(gpu, VIVS_HI_CHIP_CUSTOMER_ID);
- gpu->identity.eco_id = gpu_read(gpu, VIVS_HI_CHIP_ECO_ID);
+
+ /*
+ * Reading these two registers on GC600 rev 0x19 result in a
+ * unhandled fault: external abort on non-linefetch
+ */
+ if (!etnaviv_is_model_rev(gpu, GC600, 0x19)) {
+ gpu->identity.product_id = gpu_read(gpu, VIVS_HI_CHIP_PRODUCT_ID);
+ gpu->identity.eco_id = gpu_read(gpu, VIVS_HI_CHIP_ECO_ID);
+ }
/*
* !!!! HACK ALERT !!!!