From ee86015f25945065a190de6bf8a00ed974ad8db8 Mon Sep 17 00:00:00 2001 From: Wengang Wu Date: Fri, 28 Feb 2014 15:53:58 -0600 Subject: IKXCLOCK-343 Initial TI SGX Android OpenGL support Added Makefile/Kconfig for kernel build-in driver Added OMAP3630 support for TI SGX DDK Fixed issue about newer kernel 3.10 Change-Id: I8b415bacb784e9dfb1967f669476d6d63898f331 --- drivers/gpu/Makefile | 2 +- drivers/gpu/pvr/Kconfig | 32 + drivers/gpu/pvr/Makefile | 152 +++ .../3rdparty/dc_omapfb3_linux/omaplfb_linux.c | 42 + drivers/gpu/pvr/services4/srvkm/common/ra.c | 2 + .../gpu/pvr/services4/srvkm/devices/sgx/sgxinit.c | 4 + drivers/gpu/pvr/services4/srvkm/env/linux/mm.h | 2 +- drivers/gpu/pvr/services4/srvkm/env/linux/mmap.c | 4 + drivers/gpu/pvr/services4/srvkm/env/linux/osfunc.c | 8 +- drivers/gpu/pvr/services4/srvkm/env/linux/proc.c | 108 ++ drivers/gpu/pvr/services4/srvkm/env/linux/proc.h | 8 + .../gpu/pvr/services4/system/omap3630/oemfuncs.h | 80 ++ .../gpu/pvr/services4/system/omap3630/sgxfreq.c | 590 +++++++++ .../gpu/pvr/services4/system/omap3630/sgxfreq.h | 97 ++ .../services4/system/omap3630/sgxfreq_activeidle.c | 181 +++ .../pvr/services4/system/omap3630/sgxfreq_cool.c | 104 ++ .../services4/system/omap3630/sgxfreq_on3demand.c | 324 +++++ .../pvr/services4/system/omap3630/sgxfreq_onoff.c | 180 +++ .../services4/system/omap3630/sgxfreq_userspace.c | 180 +++ .../gpu/pvr/services4/system/omap3630/sysconfig.c | 1329 ++++++++++++++++++++ .../gpu/pvr/services4/system/omap3630/sysconfig.h | 110 ++ .../gpu/pvr/services4/system/omap3630/sysinfo.h | 64 + .../gpu/pvr/services4/system/omap3630/syslocal.h | 267 ++++ .../gpu/pvr/services4/system/omap3630/sysutils.c | 59 + .../pvr/services4/system/omap3630/sysutils_linux.c | 747 +++++++++++ 25 files changed, 4672 insertions(+), 4 deletions(-) create mode 100644 drivers/gpu/pvr/Kconfig create mode 100644 drivers/gpu/pvr/Makefile create mode 100644 drivers/gpu/pvr/services4/system/omap3630/oemfuncs.h create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq.h create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq_activeidle.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq_cool.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq_on3demand.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq_onoff.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sgxfreq_userspace.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sysconfig.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sysconfig.h create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sysinfo.h create mode 100644 drivers/gpu/pvr/services4/system/omap3630/syslocal.h create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sysutils.c create mode 100644 drivers/gpu/pvr/services4/system/omap3630/sysutils_linux.c (limited to 'drivers/gpu') diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile index d8a22c2a579..93f444de174 100644 --- a/drivers/gpu/Makefile +++ b/drivers/gpu/Makefile @@ -1,2 +1,2 @@ -obj-y += drm/ vga/ +obj-y += drm/ vga/ pvr/ obj-$(CONFIG_TEGRA_HOST1X) += host1x/ diff --git a/drivers/gpu/pvr/Kconfig b/drivers/gpu/pvr/Kconfig new file mode 100644 index 00000000000..34a122f2f7f --- /dev/null +++ b/drivers/gpu/pvr/Kconfig @@ -0,0 +1,32 @@ +config SGX_OMAP3630 + tristate "PowerVR SGX for OMAP3630" + depends on ARCH_OMAP3 + help + Support for the PowerVR SGX 3D core with OMAP 3630. + +choice + prompt "PowerVR build type" + default SGX_BUILD_RELEASE + +config SGX_BUILD_RELEASE + depends on SGX_OMAP3630 + bool "SGX RELEASE" + help + SGX Release Build. + +config SGX_BUILD_DEBUG + depends on SGX_OMAP3630 + bool "SGX DEBUG" + help + SGX Debug Build. + +endchoice + +config SGX_PDUMP + depends on SGX_OMAP3630 + bool "PowerVR SGX Parameter Dump" + default n + help + This option enables the PDump (Parameter Dump) build to debug + the SGX driver. The user side of the driver must be built with + this option enabled as well. diff --git a/drivers/gpu/pvr/Makefile b/drivers/gpu/pvr/Makefile new file mode 100644 index 00000000000..a848a8c79ec --- /dev/null +++ b/drivers/gpu/pvr/Makefile @@ -0,0 +1,152 @@ +# +ccflags-y = -Idrivers/video/omap2 \ + -Idrivers/gpu/pvr/include4\ + -Idrivers/gpu/pvr/services4/include \ + -Idrivers/gpu/pvr/services4/srvkm/hwdefs \ + -Idrivers/gpu/pvr/services4/srvkm/include \ + -Idrivers/gpu/pvr/services4/srvkm/bridged \ + -Idrivers/gpu/pvr/services4/srvkm/bridged/sgx \ + -Idrivers/gpu/pvr/services4/srvkm/devices/sgx \ + -Idrivers/gpu/pvr/services4/srvkm/env/linux \ + -Idrivers/gpu/pvr/services4/system/include \ + -DLINUX -D__linux__ \ + -DANDROID \ + -DPVR_BUILD_DIR="\"omap3630_android\"" \ + -DSUPPORT_SGX \ + -DTRANSFER_QUEUE \ + -DPVR_SECURE_HANDLES \ + -DDISPLAY_CONTROLLER=omaplfb \ + -DPVR_LINUX_MEM_AREA_POOL_MAX_PAGES=10800 \ + -DPVR_LINUX_MEM_AREA_USE_VMAP \ + -DPVR_LINUX_MEM_AREA_POOL_ALLOW_SHRINK \ + -DSUPPORT_PERCONTEXT_PB \ + -DSUPPORT_HW_RECOVERY \ + -DSUPPORT_ACTIVE_POWER_MANAGEMENT \ + -DSUPPORT_SGX_HWPERF \ + -DSUPPORT_SGX_LOW_LATENCY_SCHEDULING \ + -DSUPPORT_MEMINFO_IDS \ + -DSUPPORT_SGX_NEW_STATUS_VALS \ + -DSUPPORT_DBGDRV_EVENT_OBJECTS \ + -DPVRSRV_USSE_EDM_STATUS_DEBUG \ + -DSGX_DISABLE_VISTEST_SUPPORT \ + -DSYS_USING_INTERRUPTS \ + -DPVRSRV_NEW_PVR_DPF \ + -DSUPPORT_NV12_FROM_2_HWADDRS \ + -DSUPPORT_LINUX_X86_WRITECOMBINE \ + -DSUPPORT_LINUX_X86_PAT \ + -DSGX_DYNAMIC_TIMING_INFO \ + -DSYS_CUSTOM_POWERLOCK_WRAP \ + -DPVR_LINUX_USING_WORKQUEUES \ + -DPVR_LINUX_MISR_USING_PRIVATE_WORKQUEUE \ + -DPVR_LINUX_TIMERS_USING_WORKQUEUES \ + -DLDM_PLATFORM \ + -DPVRSRV_DUMP_MK_TRACE \ + -DSUPPORT_LARGE_GENERAL_HEAP \ + -DPVR_NO_OMAP_TIMER \ + -DSUPPORT_DC_CMDCOMPLETE_WHEN_NO_LONGER_DISPLAYED \ + -DPVR_LDM_DRIVER_REGISTRATION_NAME="\"pvrsrvkm\"" \ + -DPVRSRV_MODNAME="\"pvrsrvkm\"" + +#ccflags-y += -Wno-unused-function -Wno-unused-variable + +ccflags-$(CONFIG_SGX_OMAP3630) += \ + -Idrivers/gpu/pvr/services4/system/omap3630 \ + -DSGX530 -DSUPPORT_SGX530 -DSGXCORE=530 \ + -DSGX_CORE_REV=125 + +ccflags-$(CONFIG_SGX_BUILD_RELEASE) += \ + -DPVR_BUILD_TYPE="\"release\"" \ + -DRELEASE + +ccflags-$(CONFIG_SGX_BUILD_DEBUG) += \ + -DPVR_BUILD_TYPE="\"debug\"" \ + -DDEBUG \ + -DDEBUG_LINUX_MEMORY_ALLOCATIONS \ + -DDEBUG_LINUX_MEM_AREAS \ + -DDEBUG_LINUX_MMAP_AREAS \ + -DDEBUG_BRIDGE_KM \ + -DDEBUG_BRIDGE_KM_DISPATCH_TABLE \ + -DDEBUG_TRACE_BRIDGE_KM \ + -DIGNORE_SGX_INIT_COMPATIBILITY_CHECK + +ccflags-$(CONFIG_SGX_PDUMP) += \ + -Idrivers/gpu/pvr/tools/intern/debug/client \ + -DPDUMP + +pvr_bridged-y := \ + services4/srvkm/bridged/bridged_pvr_bridge.o \ + services4/srvkm/bridged/bridged_support.o \ + services4/srvkm/bridged/sgx/bridged_sgx_bridge.o + +pvr_common-y := \ + services4/srvkm/common/buffer_manager.o \ + services4/srvkm/common/deviceclass.o \ + services4/srvkm/common/devicemem.o \ + services4/srvkm/common/handle.o \ + services4/srvkm/common/hash.o \ + services4/srvkm/common/lists.o \ + services4/srvkm/common/mem.o \ + services4/srvkm/common/mem_debug.o \ + services4/srvkm/common/metrics.o \ + services4/srvkm/common/osfunc_common.o \ + services4/srvkm/common/pdump_common.o \ + services4/srvkm/common/perproc.o \ + services4/srvkm/common/power.o \ + services4/srvkm/common/pvrsrv.o \ + services4/srvkm/common/queue.o \ + services4/srvkm/common/ra.o \ + services4/srvkm/common/refcount.o \ + services4/srvkm/common/resman.o \ + services4/srvkm/common/ttrace.o + +pvr_devices-y := \ + services4/srvkm/devices/sgx/mmu.o \ + services4/srvkm/devices/sgx/pb.o \ + services4/srvkm/devices/sgx/sgxinit.o \ + services4/srvkm/devices/sgx/sgxkick.o \ + services4/srvkm/devices/sgx/sgxpower.o \ + services4/srvkm/devices/sgx/sgxreset.o \ + services4/srvkm/devices/sgx/sgxtransfer.o \ + services4/srvkm/devices/sgx/sgxutils.o + +pvr_env-y := \ + services4/srvkm/env/linux/event.o \ + services4/srvkm/env/linux/mmap.o \ + services4/srvkm/env/linux/mm.o \ + services4/srvkm/env/linux/module.o \ + services4/srvkm/env/linux/mutex.o \ + services4/srvkm/env/linux/mutils.o \ + services4/srvkm/env/linux/osfunc.o \ + services4/srvkm/env/linux/osperproc.o \ + services4/srvkm/env/linux/pdump.o \ + services4/srvkm/env/linux/proc.o \ + services4/srvkm/env/linux/pvr_bridge_k.o \ + services4/srvkm/env/linux/pvr_debug.o \ + services4/srvkm/env/linux/sysfs.o + +pvr_omaplfb-y := \ + services4/3rdparty/dc_omapfb3_linux/omaplfb_displayclass.o \ + services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.o + +pvr_omap3630-$(CONFIG_SGX_OMAP3630) := \ + services4/system/omap3630/sysconfig.o \ + services4/system/omap3630/sysutils.o + +dbgdriv-$(CONFIG_SGX_PDUMP) := \ + tools/intern/debug/dbgdriv/common/dbgdriv.o \ + tools/intern/debug/dbgdriv/common/handle.o \ + tools/intern/debug/dbgdriv/common/hotkey.o \ + tools/intern/debug/dbgdriv/common/ioctl.o \ + tools/intern/debug/dbgdriv/linux/hostfunc.o \ + tools/intern/debug/dbgdriv/linux/main.o + +obj-$(CONFIG_SGX_OMAP3630) := \ + pvr_bridged.o \ + pvr_common.o \ + pvr_devices.o \ + pvr_env.o \ + pvr_omaplfb.o \ + pvr_omap3630.o + +obj-$(CONFIG_SGX_PDUMP) += dbgdriv.o +# diff --git a/drivers/gpu/pvr/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c b/drivers/gpu/pvr/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c index 82c7fcec920..9525688ab40 100644 --- a/drivers/gpu/pvr/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c +++ b/drivers/gpu/pvr/services4/3rdparty/dc_omapfb3_linux/omaplfb_linux.c @@ -107,8 +107,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #endif #if defined(PVR_OMAPFB3_NEEDS_PLAT_VRFB_H) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) #include #else +#include