summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGary King <gking@nvidia.com>2010-03-04 17:13:36 -0800
committerBrint E. Kriebel <github@bekit.net>2010-11-14 22:27:14 -0700
commit4f7c126f4b6a20272d99cedf123a1bccd591e712 (patch)
tree088ccca818fd87857ed6f7959b0b8ca30d7a5f26
parentbcee4ac25210c8dea1e94eec9e1b77cefe17b35d (diff)
downloadframeworks_base-4f7c126f4b6a20272d99cedf123a1bccd591e712.zip
frameworks_base-4f7c126f4b6a20272d99cedf123a1bccd591e712.tar.gz
frameworks_base-4f7c126f4b6a20272d99cedf123a1bccd591e712.tar.bz2
[opengl] implement work around for tegra errata 657451
copy the tegra errata work around compile flags from bionic, to pick up the correct __get_tls implementation Change-Id: Idf131ad536b3f6bce643a83bb99e007a9b45c3bb
-rw-r--r--opengl/libagl/Android.mk3
-rw-r--r--opengl/libs/Android.mk18
-rw-r--r--opengl/libs/GLES2/gl2.cpp11
-rw-r--r--opengl/libs/GLES_CM/gl.cpp11
4 files changed, 41 insertions, 2 deletions
diff --git a/opengl/libagl/Android.mk b/opengl/libagl/Android.mk
index 6cb146c..517b5b8 100644
--- a/opengl/libagl/Android.mk
+++ b/opengl/libagl/Android.mk
@@ -44,6 +44,9 @@ ifneq ($(TARGET_SIMULATOR),true)
ifeq ($(TARGET_ARCH)-$(ARCH_ARM_HAVE_TLS_REGISTER),arm-true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+ ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+ endif
LOCAL_C_INCLUDES += bionic/libc/private
endif
diff --git a/opengl/libs/Android.mk b/opengl/libs/Android.mk
index 6b7020f..06aac2d 100644
--- a/opengl/libs/Android.mk
+++ b/opengl/libs/Android.mk
@@ -26,6 +26,9 @@ else
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
# we need to access the private Bionic header <bionic_tls.h>
+ ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+ endif
LOCAL_C_INCLUDES += bionic/libc/private
endif
@@ -40,6 +43,9 @@ endif
ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+endif
include $(BUILD_SHARED_LIBRARY)
installed_libEGL := $(LOCAL_INSTALLED_MODULE)
@@ -83,6 +89,9 @@ else
ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+ ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+ endif
LOCAL_C_INCLUDES += bionic/libc/private
endif
@@ -93,6 +102,9 @@ LOCAL_CFLAGS += -fvisibility=hidden
ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+endif
include $(BUILD_SHARED_LIBRARY)
@@ -119,6 +131,9 @@ else
ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+ ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+ endif
LOCAL_C_INCLUDES += bionic/libc/private
endif
@@ -129,6 +144,9 @@ LOCAL_CFLAGS += -fvisibility=hidden
ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
+ LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
+endif
include $(BUILD_SHARED_LIBRARY)
diff --git a/opengl/libs/GLES2/gl2.cpp b/opengl/libs/GLES2/gl2.cpp
index 924737e..a1667ec 100644
--- a/opengl/libs/GLES2/gl2.cpp
+++ b/opengl/libs/GLES2/gl2.cpp
@@ -41,9 +41,18 @@ using namespace android;
#if USE_FAST_TLS_KEY
+ #ifdef HAVE_TEGRA_ERRATA_657451
+ #define MUNGE_TLS(_tls) \
+ "bfi " #_tls ", " #_tls ", #20, #1 \n" \
+ "bic " #_tls ", " #_tls ", #1 \n"
+ #else
+ #define MUNGE_TLS(_tls) "\n"
+ #endif
+
#ifdef HAVE_ARM_TLS_REGISTER
#define GET_TLS(reg) \
- "mrc p15, 0, " #reg ", c13, c0, 3 \n"
+ "mrc p15, 0, " #reg ", c13, c0, 3 \n" \
+ MUNGE_TLS(reg)
#else
#define GET_TLS(reg) \
"mov " #reg ", #0xFFFF0FFF \n" \
diff --git a/opengl/libs/GLES_CM/gl.cpp b/opengl/libs/GLES_CM/gl.cpp
index d71ff76..c6f5013 100644
--- a/opengl/libs/GLES_CM/gl.cpp
+++ b/opengl/libs/GLES_CM/gl.cpp
@@ -97,9 +97,18 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
#if USE_FAST_TLS_KEY && !CHECK_FOR_GL_ERRORS
+ #ifdef HAVE_TEGRA_ERRATA_657451
+ #define MUNGE_TLS(_tls) \
+ "bfi " #_tls ", " #_tls ", #20, #1 \n" \
+ "bic " #_tls ", " #_tls ", #1 \n"
+ #else
+ #define MUNGE_TLS(_tls) "\n"
+ #endif
+
#ifdef HAVE_ARM_TLS_REGISTER
#define GET_TLS(reg) \
- "mrc p15, 0, " #reg ", c13, c0, 3 \n"
+ "mrc p15, 0, " #reg ", c13, c0, 3 \n" \
+ MUNGE_TLS(reg)
#else
#define GET_TLS(reg) \
"mov " #reg ", #0xFFFF0FFF \n" \