MALI: rockchip: upgrade midgard DDK to r11p0-00rel0
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / arm / midgard / mali_kbase_hw.c
index f2f93de9d2e81ff403d29b500287969c41e7a8fd..de2461fb8de422d0751f04ee694f7faad1a6f594 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *
- * (C) COPYRIGHT 2012-2015 ARM Limited. All rights reserved.
+ * (C) COPYRIGHT 2012-2016 ARM Limited. All rights reserved.
  *
  * This program is free software and is provided to you under the terms of the
  * GNU General Public License version 2 as published by the Free Software
@@ -37,6 +37,16 @@ void kbase_hw_set_features_mask(struct kbase_device *kbdev)
        product_id = gpu_id & GPU_ID_VERSION_PRODUCT_ID;
        product_id >>= GPU_ID_VERSION_PRODUCT_ID_SHIFT;
 
+       if (GPU_ID_IS_NEW_FORMAT(product_id)) {
+               switch (gpu_id & GPU_ID2_PRODUCT_MODEL) {
+               case GPU_ID2_PRODUCT_TMIX:
+                       features = base_hw_features_tMIx;
+                       break;
+               default:
+                       features = base_hw_features_generic;
+                       break;
+               }
+       } else {
                switch (product_id) {
                case GPU_ID_PI_TFRX:
                        /* FALLTHROUGH */
@@ -65,7 +75,7 @@ void kbase_hw_set_features_mask(struct kbase_device *kbdev)
                        features = base_hw_features_generic;
                        break;
                }
-
+       }
 
        for (; *features != BASE_HW_FEATURE_END; features++)
                set_bit(*features, &kbdev->hw_features_mask[0]);
@@ -84,6 +94,25 @@ int kbase_hw_set_issues_mask(struct kbase_device *kbdev)
        impl_tech = kbdev->gpu_props.props.thread_props.impl_tech;
 
        if (impl_tech != IMPLEMENTATION_MODEL) {
+               if (GPU_ID_IS_NEW_FORMAT(product_id)) {
+                       switch (gpu_id) {
+                       case GPU_ID2_MAKE(6, 0, 10, 0, 0, 0, 1):
+                               issues = base_hw_issues_tMIx_r0p0_05dev0;
+                               break;
+                       case GPU_ID2_MAKE(6, 0, 10, 0, 0, 0, 2):
+                               issues = base_hw_issues_tMIx_r0p0;
+                               break;
+                       default:
+                               if ((gpu_id & GPU_ID2_PRODUCT_MODEL) ==
+                                                       GPU_ID2_PRODUCT_TMIX) {
+                                       issues = base_hw_issues_tMIx_r0p0;
+                               } else {
+                                       dev_err(kbdev->dev,
+                                               "Unknown GPU ID %x", gpu_id);
+                                       return -EINVAL;
+                               }
+                       }
+               } else {
                        switch (gpu_id) {
                        case GPU_ID_MAKE(GPU_ID_PI_T60X, 0, 0, GPU_ID_S_15DEV0):
                                issues = base_hw_issues_t60x_r0p0_15dev0;
@@ -174,11 +203,24 @@ int kbase_hw_set_issues_mask(struct kbase_device *kbdev)
                                issues = base_hw_issues_t82x_r1p0;
                                break;
                        default:
-                               dev_err(kbdev->dev, "Unknown GPU ID %x", gpu_id);
+                               dev_err(kbdev->dev,
+                                       "Unknown GPU ID %x", gpu_id);
                                return -EINVAL;
                        }
+               }
        } else {
                /* Software model */
+               if (GPU_ID_IS_NEW_FORMAT(product_id)) {
+                       switch (gpu_id & GPU_ID2_PRODUCT_MODEL) {
+                       case GPU_ID2_PRODUCT_TMIX:
+                               issues = base_hw_issues_model_tMIx;
+                               break;
+                       default:
+                               dev_err(kbdev->dev,
+                                       "Unknown GPU ID %x", gpu_id);
+                               return -EINVAL;
+                       }
+               } else {
                        switch (product_id) {
                        case GPU_ID_PI_T60X:
                                issues = base_hw_issues_model_t60x;
@@ -209,6 +251,7 @@ int kbase_hw_set_issues_mask(struct kbase_device *kbdev)
                                        gpu_id);
                                return -EINVAL;
                        }
+               }
        }
 
        dev_info(kbdev->dev, "GPU identified as 0x%04x r%dp%d status %d", (gpu_id & GPU_ID_VERSION_PRODUCT_ID) >> GPU_ID_VERSION_PRODUCT_ID_SHIFT, (gpu_id & GPU_ID_VERSION_MAJOR) >> GPU_ID_VERSION_MAJOR_SHIFT, (gpu_id & GPU_ID_VERSION_MINOR) >> GPU_ID_VERSION_MINOR_SHIFT, (gpu_id & GPU_ID_VERSION_STATUS) >> GPU_ID_VERSION_STATUS_SHIFT);