From 4e2a14cac075f0d6f81b50269f324a47baffae7f Mon Sep 17 00:00:00 2001 From: chenzhen Date: Mon, 29 Dec 2014 17:42:50 +0800 Subject: [PATCH] mali_760_driver : handle crash when accessing gpu nodes under /sys in cts test; upgrade rk_ko_ver to 12. --- .../gpu/arm/midgard/mali_kbase_core_linux.c | 2 +- .../gpu/arm/midgard/platform/rk/custom_log.h | 222 ++++++++++++++++++ .../midgard/platform/rk/mali_kbase_platform.c | 14 ++ 3 files changed, 237 insertions(+), 1 deletion(-) create mode 100755 drivers/gpu/arm/midgard/platform/rk/custom_log.h diff --git a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c index ad44d4566ffd..d916644b0b81 100755 --- a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c +++ b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c @@ -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 index 000000000000..8cd6bd37b451 --- /dev/null +++ b/drivers/gpu/arm/midgard/platform/rk/custom_log.h @@ -0,0 +1,222 @@ +/* -------------------------------------------------------------------------------------------------------- + * File: custom_log.h + * + * Desc: ChenZhen Æ«ºÃµÄ log Êä³öµÄ¶¨ÖÆÊµÏÖ. + * + * ----------------------------------------------------------------------------------- + * < ϰÓï ºÍ ËõÂÔÓï > : + * + * ----------------------------------------------------------------------------------- + * Usage: + * + * Note: + * + * Author: ChenZhen + * + * -------------------------------------------------------------------------------------------------------- + * Version: + * v1.0 + * -------------------------------------------------------------------------------------------------------- + * Log: + ----Fri Nov 19 15:20:28 2010 v1.0 + * + * -------------------------------------------------------------------------------------------------------- + */ + + +#ifndef __CUSTOM_LOG_H__ +#define __CUSTOM_LOG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* --------------------------------------------------------------------------------------------------------- + * Include Files + * --------------------------------------------------------------------------------------------------------- + */ +#include + + +/* --------------------------------------------------------------------------------------------------------- + * Macros Definition + * --------------------------------------------------------------------------------------------------------- + */ + +/** ÈôÏÂÁÐ macro Óб»¶¨Òå, ²Å ʹÄÜ log Êä³ö. */ +// #define ENABLE_DEBUG_LOG + +/** .! : ÈôÐèҪȫ¾ÖµØ¹Ø±Õ D log, ¿ÉÒÔʹÄÜÏÂÃæµÄ´úÂë. */ +/* +#undef ENABLE_DEBUG_LOG +#warning "custom debug log is disabled globally!" +*/ + +#define LOGD(fmt, args...) \ + printk(KERN_DEBUG fmt "\n", ## args) + +/*---------------------------------------------------------------------------*/ + +#ifdef ENABLE_VERBOSE_LOG +/** Verbose log. */ +#define V(fmt, args...) \ + { printk(KERN_DEBUG "V : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); } +#else +#define V(...) ((void)0) +#endif + + +#ifdef ENABLE_DEBUG_LOG +/** Debug log. */ +#define D(fmt, args...) \ + { printk(KERN_DEBUG "D : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); } +#else +#define D(...) ((void)0) +#endif + +#define I(fmt, args...) \ + { printk(KERN_INFO "I : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); } + +#define W(fmt, args...) \ + { printk(KERN_WARNING "W : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); } + +#define E(fmt, args...) \ + { printk(KERN_ERR "E : [File] : %s; [Line] : %d; [Func] : %s(); " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); } + +/*-------------------------------------------------------*/ + +/** ʹÓà D(), ÒÔÊ®½øÖƵÄÐÎʽ´òÓ¡±äÁ¿ 'var' µÄ value. */ +#define D_DEC(var) D(#var " = %d.", var); + +#define E_DEC(var) E(#var " = %d.", var); + +/** ʹÓà D(), ÒÔÊ®Áù½øÖƵÄÐÎʽ´òÓ¡±äÁ¿ 'var' µÄ value. */ +#define D_HEX(var) D(#var " = 0x%x.", var); + +#define E_HEX(var) E(#var " = 0x%x.", var); + +/** ʹÓà D(), ÒÔÊ®Áù½øÖƵÄÐÎʽ ´òÓ¡Ö¸ÕëÀàÐͱäÁ¿ 'ptr' µÄ value. */ +#define D_PTR(ptr) D(#ptr " = %p.", ptr); + +#define E_PTR(ptr) E(#ptr " = %p.", ptr); + +/** ʹÓà D(), ´òÓ¡ char ×Ö´®. */ +#define D_STR(pStr) \ +{\ + if ( NULL == pStr )\ + {\ + D(#pStr" = NULL.");\ + }\ + else\ + {\ + D(#pStr" = '%s'.", pStr);\ + }\ +} + +#define E_STR(pStr) \ +{\ + if ( NULL == pStr )\ + {\ + E(#pStr" = NULL.");\ + }\ + else\ + {\ + E(#pStr" = '%s'.", pStr);\ + }\ +} + +#ifdef ENABLE_DEBUG_LOG +/** + * log ´Ó 'pStart' µØÖ·¿ªÊ¼µÄ 'len' ¸ö×Ö½ÚµÄÊý¾Ý. + */ +#define D_MEM(pStart, len) \ + {\ + int i = 0;\ + char* p = (char*)pStart;\ + D("dump memory from addr of '" #pStart "', from %p, length %d' : ", pStart, len); \ + printk("\t\t");\ + for ( i = 0; i < len ; i++ )\ + {\ + printk("0x%02x, ", p[i] );\ + }\ + printk("\n");\ + } +#else +#define D_MEM(...) ((void)0) +#endif + +/*-------------------------------------------------------*/ + +#define EXIT_FOR_DEBUG \ +{\ + E("To exit for debug.");\ + return 1;\ +} + +/*-------------------------------------------------------*/ + +/** + * µ÷Óú¯Êý, ²¢¼ì²é·µ»ØÖµ, ¸ù¾Ý·µ»ØÖµ¾ö¶¨ÊÇ·ñÌø×ªµ½Ö¸¶¨µÄ´íÎó´¦Àí´úÂë. + * @param functionCall + * ¶ÔÌØ¶¨º¯ÊýµÄµ÷ÓÃ, ¸Ãº¯ÊýµÄ·µ»ØÖµ±ØÐëÊÇ ±íÕ÷ ³É¹¦ or err µÄ ÕûÐÍÊý. + * ÕâÀï, ±»µ÷Óú¯Êý "±ØÐë" ÊDZ»¶¨ÒåΪ "·µ»Ø 0 ±íʾ²Ù×÷³É¹¦". + * @param result + * ÓÃÓڼǼº¯Êý·µ»ØµÄ error code µÄ ÕûÐͱäÁ¿, ͨ³£ÊÇ "ret" or "result" µÈ. + * @param label + * Èôº¯Êý·µ»Ø´íÎó, ³ÌÐò½«ÒªÌø×ªµ½µÄ ´íÎó´¦Àí´¦µÄ ±êºÅ, ͨ³£¾ÍÊÇ "EXIT". + */ +#define CHECK_FUNC_CALL(functionCall, result, label) \ +{\ + if ( 0 != ( (result) = (functionCall) ) )\ + {\ + E("Function call returned error : " #result " = %d.", result);\ + goto label;\ + }\ +} + +/** + * ÔÚÌØ¶¨Ìõ¼þÏÂ, Åж¨ error ·¢Éú, ¶Ô±äÁ¿ 'retVar' ÉèÖà 'errCode', + * Log Êä³ö¶ÔÓ¦µÄ Error Caution, È»ºóÌø×ª 'label' Ö¸¶¨µÄ´úÂë´¦Ö´ÐÐ. + * @param msg + * ´¿×Ö´®ÐÎʽµÄÌáʾÐÅÏ¢. + * @param retVar + * ±êʶº¯ÊýÖ´ÐÐ״̬»òÕß½á¹ûµÄ±äÁ¿, ½«±»ÉèÖþßÌåµÄ Error Code. + * ͨ³£ÊÇ 'ret' or 'result'. + * @param errCode + * ±íÕ÷ÌØ¶¨ error µÄ³£Êý±êʶ, ͨ³£ÊÇ ºêµÄÐÎ̬. + * @param label + * ³ÌÐò½«ÒªÌø×ªµ½µÄ´íÎó´¦Àí´úÂëµÄ±êºÅ, ͨ³£¾ÍÊÇ 'EXIT'. + * @param args... + * ¶ÔÓ¦ 'msgFmt' ʵ²ÎÖÐ '%s', '%d', ... µÈ ת»»ËµÃ÷·û µÄ¾ßÌå¿É±ä³¤Êµ²Î. + */ +#define SET_ERROR_AND_JUMP(msgFmt, retVar, errCode, label, args...) \ +{\ + E("To set '" #retVar "' to %d('" #errCode "'), because : " msgFmt, (errCode), ## args);\ + (retVar) = (errCode);\ + goto label;\ +} + + +/* --------------------------------------------------------------------------------------------------------- + * Types and Structures Definition + * --------------------------------------------------------------------------------------------------------- + */ + + +/* --------------------------------------------------------------------------------------------------------- + * Global Functions' Prototype + * --------------------------------------------------------------------------------------------------------- + */ + + +/* --------------------------------------------------------------------------------------------------------- + * Inline Functions Implementation + * --------------------------------------------------------------------------------------------------------- + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CUSTOM_LOG_H__ */ + diff --git a/drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.c b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.c index 7b8d83c1475a..340f376332c4 100755 --- a/drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.c +++ b/drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.c @@ -43,6 +43,10 @@ #include +#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"); -- 2.34.1