drm/etnaviv: fix workaround for GC500
authorLucas Stach <l.stach@pengutronix.de>
Wed, 6 Jan 2016 13:36:40 +0000 (14:36 +0100)
committerLucas Stach <l.stach@pengutronix.de>
Thu, 7 Jan 2016 10:57:57 +0000 (11:57 +0100)
The hardware description macros define the mask and shifts the wrong
way around for the intended use, leading to the condition never being
true and the chip revision ending up with the wrong value.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Christian Gmeiner <christian.gmeiner@gmail.com>
drivers/gpu/drm/etnaviv/etnaviv_gpu.c

index d39093dc37e6aa74f8e25855406bb71c7c7830d3..056a72e6ed26273146269ee0258784e8a714d36a 100644 (file)
@@ -251,9 +251,12 @@ static void etnaviv_hw_identify(struct etnaviv_gpu *gpu)
        chipIdentity = gpu_read(gpu, VIVS_HI_CHIP_IDENTITY);
 
        /* Special case for older graphic cores. */
-       if (VIVS_HI_CHIP_IDENTITY_FAMILY(chipIdentity) ==  0x01) {
+       if (((chipIdentity & VIVS_HI_CHIP_IDENTITY_FAMILY__MASK)
+            >> VIVS_HI_CHIP_IDENTITY_FAMILY__SHIFT) ==  0x01) {
                gpu->identity.model    = 0x500; /* gc500 */
-               gpu->identity.revision = VIVS_HI_CHIP_IDENTITY_REVISION(chipIdentity);
+               gpu->identity.revision =
+                       (chipIdentity & VIVS_HI_CHIP_IDENTITY_REVISION__MASK)
+                       >> VIVS_HI_CHIP_IDENTITY_REVISION__SHIFT;
        } else {
 
                gpu->identity.model = gpu_read(gpu, VIVS_HI_CHIP_MODEL);