mali_760_driver :
authorchenzhen <chenzhen@rock-chips.com>
Mon, 29 Dec 2014 09:42:50 +0000 (17:42 +0800)
committerchenzhen <chenzhen@rock-chips.com>
Mon, 29 Dec 2014 09:45:06 +0000 (17:45 +0800)
    handle crash when accessing gpu nodes under /sys in cts test;
upgrade rk_ko_ver to 12.

drivers/gpu/arm/midgard/mali_kbase_core_linux.c
drivers/gpu/arm/midgard/platform/rk/custom_log.h [new file with mode: 0755]
drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.c

index ad44d4566ffd2ede8cec83aa9c1ac68078c5321d..d916644b0b8170fd99bd5cbc0c2b1f390b9c5e73 100755 (executable)
@@ -99,7 +99,7 @@ EXPORT_SYMBOL(shared_kernel_test_data);
 
 #define KBASE_DRV_NAME "mali"
 /** rk_ext : version of rk_ext on mali_ko, aka. rk_ko_ver. */
-#define ROCKCHIP_VERSION 0x0b
+#define ROCKCHIP_VERSION    (12)
 
 static const char kbase_drv_name[] = KBASE_DRV_NAME;
 
diff --git a/drivers/gpu/arm/midgard/platform/rk/custom_log.h b/drivers/gpu/arm/midgard/platform/rk/custom_log.h
new file mode 100755 (executable)
index 0000000..8cd6bd3
--- /dev/null
@@ -0,0 +1,222 @@
+/*  --------------------------------------------------------------------------------------------------------\r
+ *  File:   custom_log.h \r
+ *\r
+ *  Desc:   ChenZhen Æ«ºÃµÄ log Êä³öµÄ¶¨ÖÆÊµÏÖ. \r
+ *\r
+ *          -----------------------------------------------------------------------------------\r
+ *          < Ï°Ó͠ËõÂÔÓï > : \r
+ *\r
+ *          -----------------------------------------------------------------------------------\r
+ *  Usage:             \r
+ *\r
+ *  Note:\r
+ *\r
+ *  Author: ChenZhen\r
+ *\r
+ *  --------------------------------------------------------------------------------------------------------\r
+ *  Version:\r
+ *          v1.0\r
+ *  --------------------------------------------------------------------------------------------------------\r
+ *  Log:\r
+       ----Fri Nov 19 15:20:28 2010            v1.0\r
+ *        \r
+ *  --------------------------------------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+#ifndef __CUSTOM_LOG_H__\r
+#define __CUSTOM_LOG_H__\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/* ---------------------------------------------------------------------------------------------------------\r
+ *  Include Files\r
+ * ---------------------------------------------------------------------------------------------------------\r
+ */\r
+#include <linux/kernel.h>\r
+\r
+\r
+/* ---------------------------------------------------------------------------------------------------------\r
+ *  Macros Definition \r
+ * ---------------------------------------------------------------------------------------------------------\r
+ */\r
+    \r
+/** ÈôÏÂÁРmacro Óб»¶¨Òå, ²Å Ê¹ÄÜ log Êä³ö. */\r
+// #define ENABLE_DEBUG_LOG\r
+\r
+/** .! : ÈôÐèҪȫ¾ÖµØ¹Ø±Õ D log, ¿ÉÒÔʹÄÜÏÂÃæµÄ´úÂë. */\r
+/*\r
+#undef ENABLE_DEBUG_LOG\r
+#warning "custom debug log is disabled globally!"\r
+*/\r
+\r
+#define LOGD(fmt, args...) \\r
+    printk(KERN_DEBUG fmt "\n", ## args)\r
+\r
+/*---------------------------------------------------------------------------*/\r
+    \r
+#ifdef ENABLE_VERBOSE_LOG\r
+/** Verbose log. */\r
+#define V(fmt, args...) \\r
+    { printk(KERN_DEBUG "V : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); }\r
+#else\r
+#define  V(...)  ((void)0)\r
+#endif\r
+\r
+\r
+#ifdef ENABLE_DEBUG_LOG\r
+/** Debug log. */\r
+#define D(fmt, args...) \\r
+    { printk(KERN_DEBUG "D : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); }\r
+#else\r
+#define  D(...)  ((void)0)\r
+#endif\r
+\r
+#define I(fmt, args...) \\r
+    { printk(KERN_INFO "I : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); }\r
+\r
+#define W(fmt, args...) \\r
+    { printk(KERN_WARNING "W : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); }\r
+\r
+#define E(fmt, args...) \\r
+    { printk(KERN_ERR "E : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); }\r
+\r
+/*-------------------------------------------------------*/\r
+\r
+/** Ê¹ÓàD(), ÒÔÊ®½øÖƵÄÐÎʽ´òÓ¡±äÁ¿ 'var' µÄ value. */\r
+#define D_DEC(var)  D(#var " = %d.", var);\r
+\r
+#define E_DEC(var)  E(#var " = %d.", var);\r
+\r
+/** Ê¹ÓàD(), ÒÔÊ®Áù½øÖƵÄÐÎʽ´òÓ¡±äÁ¿ 'var' µÄ value. */\r
+#define D_HEX(var)  D(#var " = 0x%x.", var);\r
+\r
+#define E_HEX(var)  E(#var " = 0x%x.", var);\r
+\r
+/** Ê¹ÓàD(), ÒÔÊ®Áù½øÖƵÄÐÎʽ ´òÓ¡Ö¸ÕëÀàÐͱäÁ¿ 'ptr' µÄ value. */\r
+#define D_PTR(ptr)  D(#ptr " = %p.", ptr);\r
+\r
+#define E_PTR(ptr)  E(#ptr " = %p.", ptr);\r
+\r
+/** Ê¹ÓàD(), ´òÓ¡ char ×Ö´®. */\r
+#define D_STR(pStr) \\r
+{\\r
+    if ( NULL == pStr )\\r
+    {\\r
+        D(#pStr" = NULL.");\\r
+    }\\r
+    else\\r
+    {\\r
+        D(#pStr" = '%s'.", pStr);\\r
+    }\\r
+}\r
+\r
+#define E_STR(pStr) \\r
+{\\r
+    if ( NULL == pStr )\\r
+    {\\r
+        E(#pStr" = NULL.");\\r
+    }\\r
+    else\\r
+    {\\r
+        E(#pStr" = '%s'.", pStr);\\r
+    }\\r
+}\r
+\r
+#ifdef ENABLE_DEBUG_LOG\r
+/**\r
+ * log ´Ó 'pStart' µØÖ·¿ªÊ¼µÄ 'len' ¸ö×Ö½ÚµÄÊý¾Ý. \r
+ */\r
+#define D_MEM(pStart, len) \\r
+    {\\r
+        int i = 0;\\r
+        char* p = (char*)pStart;\\r
+        D("dump memory from addr of '" #pStart "', from %p, length %d' : ", pStart, len); \\r
+        printk("\t\t");\\r
+        for ( i = 0; i < len ; i++ )\\r
+        {\\r
+            printk("0x%02x, ", p[i] );\\r
+        }\\r
+        printk("\n");\\r
+    }\r
+#else\r
+#define  D_MEM(...)  ((void)0)\r
+#endif\r
+\r
+/*-------------------------------------------------------*/\r
+\r
+#define EXIT_FOR_DEBUG \\r
+{\\r
+    E("To exit for debug.");\\r
+    return 1;\\r
+}\r
+\r
+/*-------------------------------------------------------*/\r
+\r
+/**\r
+ * µ÷Óú¯Êý, ²¢¼ì²é·µ»ØÖµ, ¸ù¾Ý·µ»ØÖµ¾ö¶¨ÊÇ·ñÌø×ªµ½Ö¸¶¨µÄ´íÎó´¦Àí´úÂë. \r
+ * @param functionCall\r
+ *          ¶ÔÌØ¶¨º¯ÊýµÄµ÷ÓÃ, ¸Ãº¯ÊýµÄ·µ»ØÖµ±ØÐëÊÇ ±íÕ÷ ³É¹¦ or err µÄ ÕûÐÍÊý. \r
+ *          ÕâÀï, ±»µ÷Óú¯Êý "±ØÐë" ÊDZ»¶¨ÒåΪ "·µ»Ø 0 ±íʾ²Ù×÷³É¹¦". \r
+ * @param result\r
+ *                 ÓÃÓڼǼº¯Êý·µ»ØµÄ error code µÄ ÕûÐͱäÁ¿, Í¨³£ÊÇ "ret" or "result" µÈ.\r
+ * @param label\r
+ *                 Èôº¯Êý·µ»Ø´íÎó, ³ÌÐò½«ÒªÌø×ªµ½µÄ ´íÎó´¦Àí´¦µÄ ±êºÅ, Í¨³£¾ÍÊÇ "EXIT". \r
+ */\r
+#define CHECK_FUNC_CALL(functionCall, result, label) \\r
+{\\r
+       if ( 0 != ( (result) = (functionCall) ) )\\r
+       {\\r
+               E("Function call returned error : " #result " = %d.", result);\\r
+               goto label;\\r
+       }\\r
+}\r
+\r
+/**\r
+ * ÔÚÌØ¶¨Ìõ¼þÏÂ, Åж¨ error ·¢Éú, ¶Ô±äÁ¿ 'retVar' ÉèÖà'errCode', \r
+ * Log Êä³ö¶ÔÓ¦µÄ Error Caution, È»ºóÌø×ª 'label' Ö¸¶¨µÄ´úÂë´¦Ö´ÐÐ. \r
+ * @param msg\r
+ *          ´¿×Ö´®ÐÎʽµÄÌáʾÐÅÏ¢. \r
+ * @param retVar\r
+ *                 ±êʶº¯ÊýÖ´ÐÐ״̬»òÕß½á¹ûµÄ±äÁ¿, ½«±»ÉèÖþßÌåµÄ Error Code. \r
+ *                 Í¨³£ÊÇ 'ret' or 'result'. \r
+ * @param errCode\r
+ *          ±íÕ÷ÌØ¶¨ error µÄ³£Êý±êʶ, Í¨³£ÊÇ ºêµÄÐÎ̬. \r
+ * @param label\r
+ *          ³ÌÐò½«ÒªÌø×ªµ½µÄ´íÎó´¦Àí´úÂëµÄ±êºÅ, Í¨³£¾ÍÊÇ 'EXIT'. \r
+ * @param args...\r
+ *          ¶ÔÓ¦ 'msgFmt' Êµ²ÎÖР'%s', '%d', ... µÈ ×ª»»ËµÃ÷·û µÄ¾ßÌå¿É±ä³¤Êµ²Î. \r
+ */\r
+#define SET_ERROR_AND_JUMP(msgFmt, retVar, errCode, label, args...) \\r
+{\\r
+    E("To set '" #retVar "' to %d('" #errCode "'), because : " msgFmt, (errCode), ## args);\\r
+       (retVar) = (errCode);\\r
+       goto label;\\r
+}\r
+\r
+\r
+/* ---------------------------------------------------------------------------------------------------------\r
+ *  Types and Structures Definition\r
+ * ---------------------------------------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/* ---------------------------------------------------------------------------------------------------------\r
+ *  Global Functions' Prototype\r
+ * ---------------------------------------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/* ---------------------------------------------------------------------------------------------------------\r
+ *  Inline Functions Implementation \r
+ * ---------------------------------------------------------------------------------------------------------\r
+ */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* __CUSTOM_LOG_H__ */\r
+\r
index 7b8d83c1475a7b8e372ab092a2494ec58d672666..340f376332c416302089b2b2e5baf76bd84435a6 100755 (executable)
 
 #include <linux/rockchip/dvfs.h> 
 
+#include "custom_log.h"
+
+/* ############################################################################################# */
+
 #define MALI_T7XX_DEFAULT_CLOCK 100000
 
 
@@ -266,6 +270,14 @@ static ssize_t error_count_show(struct device *dev,struct device_attribute *attr
        struct kbase_device *kbdev = dev_get_drvdata(dev);
        ssize_t ret;
 
+    D_PTR(dev);
+    if ( NULL == kbdev )
+    {
+        E("fail to get kbase_device instance.");
+        return 0;
+    }
+
+    D_DEC(kbdev->kbase_group_error);
        ret = scnprintf(buf, PAGE_SIZE, "%d\n", kbdev->kbase_group_error);
        return ret;
 }
@@ -837,10 +849,12 @@ int kbase_platform_create_sysfs_file(struct device *dev)
                goto out;
        }
 
+    /*  rk_ext : device will crash after "cat /sys/devices/ffa30000.gpu/dtlb".
        if (device_create_file(dev, &dev_attr_dtlb)) {
                dev_err(dev, "Couldn't create sysfs file [dtlb]\n");
                goto out;
        }
+    */
 
        if (device_create_file(dev, &dev_attr_dvfs)) {
                dev_err(dev, "Couldn't create sysfs file [dvfs]\n");