aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJie Zhou <b30303@freescale.com>2010-07-29 17:04:43 +0800
committerJie Zhou <b30303@freescale.com>2010-07-30 15:53:02 +0800
commitfa1e059caedc746ee4d9d6d236452d4e47d3d264 (patch)
tree56c2c321a5a6581ac408cdd0836421586f6695a1
parente8ad323e64eef602ce1cfb0eb654aeac06f060c3 (diff)
ENGR00125729-2 GPU: merge hal for MX35/MX50 and MX51/MX53
Add MX508 support, and adapt the gpu driver to one image Signed-off-by: Jie Zhou <b30303@freescale.com>
-rw-r--r--drivers/mxc/amd-gpu/Kconfig2
-rw-r--r--drivers/mxc/amd-gpu/Makefile20
-rw-r--r--drivers/mxc/amd-gpu/common/gsl_device.c12
-rw-r--r--drivers/mxc/amd-gpu/common/gsl_driver.c2
-rw-r--r--drivers/mxc/amd-gpu/include/gsl_buildconfig.h (renamed from drivers/mxc/amd-gpu/platform/hal/MX51/gsl_buildconfig.h)22
-rw-r--r--drivers/mxc/amd-gpu/include/gsl_config.h221
-rw-r--r--drivers/mxc/amd-gpu/include/gsl_hal.h1
-rwxr-xr-x[-rw-r--r--]drivers/mxc/amd-gpu/include/gsl_halconfig.h (renamed from drivers/mxc/amd-gpu/platform/hal/MX35/gsl_buildconfig.h)45
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX35/gsl_config.h195
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX35/gsl_halconfig.h63
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX35/linux/gsl_hal.c524
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.c31
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.h41
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX51/gsl_config.h222
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX51/gsl_halconfig.h58
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX51/linux/gsl_hal.c598
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.c31
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.h40
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c570
-rw-r--r--drivers/mxc/amd-gpu/platform/hal/linux/gsl_kmod.c38
20 files changed, 839 insertions, 1897 deletions
diff --git a/drivers/mxc/amd-gpu/Kconfig b/drivers/mxc/amd-gpu/Kconfig
index f4f442787de..629d8cbbc98 100644
--- a/drivers/mxc/amd-gpu/Kconfig
+++ b/drivers/mxc/amd-gpu/Kconfig
@@ -6,7 +6,7 @@ menu "MXC GPU support"
config MXC_AMD_GPU
tristate "MXC GPU support"
- depends on ARCH_MX35 || ARCH_MX51 || ARCH_MX53
+ depends on ARCH_MX35 || ARCH_MX51 || ARCH_MX53 || ARCH_MX50
---help---
Say Y to get the GPU driver support.
diff --git a/drivers/mxc/amd-gpu/Makefile b/drivers/mxc/amd-gpu/Makefile
index a661de4d6a7..84cf02e5b3a 100644
--- a/drivers/mxc/amd-gpu/Makefile
+++ b/drivers/mxc/amd-gpu/Makefile
@@ -25,25 +25,7 @@ gpu-objs += common/gsl_cmdstream.o \
common/gsl_yamato.o \
platform/hal/linux/gsl_linux_map.o \
platform/hal/linux/gsl_kmod.o \
+ platform/hal/linux/gsl_hal.o \
platform/hal/linux/gsl_kmod_cleanup.o \
platform/hal/linux/misc.o \
os/kernel/src/linux/kos_lib.o
-ifeq ($(CONFIG_ARCH_MX5),y)
-EXTRA_CFLAGS += -DMX51=1 \
- -I$(obj)/platform/hal/MX51 \
- -I$(obj)/platform/hal/MX51/linux \
- -I$(obj)/platform/hal/MX51/memcfg
-
-gpu-objs += platform/hal/MX51/linux/gsl_hal.o \
- platform/hal/MX51/memcfg/gsl_memcfg.o
-endif
-
-ifeq ($(CONFIG_ARCH_MX35),y)
-EXTRA_CFLAGS += -DMX35=1 \
- -I$(obj)/platform/hal/MX35 \
- -I$(obj)/platform/hal/MX35/linux \
- -I$(obj)/platform/hal/MX35/memcfg
-
-gpu-objs += platform/hal/MX35/linux/gsl_hal.o \
- platform/hal/MX35/memcfg/gsl_memcfg.o
-endif
diff --git a/drivers/mxc/amd-gpu/common/gsl_device.c b/drivers/mxc/amd-gpu/common/gsl_device.c
index bcb557e69d6..0aedf1154be 100644
--- a/drivers/mxc/amd-gpu/common/gsl_device.c
+++ b/drivers/mxc/amd-gpu/common/gsl_device.c
@@ -161,6 +161,10 @@ kgsl_device_close(gsl_device_t *device)
kgsl_log_write( KGSL_LOG_GROUP_DEVICE | KGSL_LOG_LEVEL_TRACE,
"--> int kgsl_device_close(gsl_device_t *device=0x%08x )\n", device );
+ if (!(device->flags & GSL_FLAGS_INITIALIZED)) {
+ return status;
+ }
+
/* make sure the device is stopped before close
kgsl_device_close is only called for last running caller process
*/
@@ -174,12 +178,8 @@ kgsl_device_close(gsl_device_t *device)
status = kgsl_cmdstream_close(device);
if( status != GSL_SUCCESS ) return status;
- if (device->flags & GSL_FLAGS_INITIALIZED)
- {
- if (device->ftbl.device_close)
- {
- status = device->ftbl.device_close(device);
- }
+ if (device->ftbl.device_close) {
+ status = device->ftbl.device_close(device);
}
// DumpX allocates memstore from MMU aperture
diff --git a/drivers/mxc/amd-gpu/common/gsl_driver.c b/drivers/mxc/amd-gpu/common/gsl_driver.c
index fd4bcc0df96..1d1564022b1 100644
--- a/drivers/mxc/amd-gpu/common/gsl_driver.c
+++ b/drivers/mxc/amd-gpu/common/gsl_driver.c
@@ -203,7 +203,7 @@ kgsl_driver_entry(gsl_flags_t flags)
status = kgsl_device_init(&gsl_driver.device[i], (gsl_deviceid_t)(i + 1));
if (status != GSL_SUCCESS)
{
- break;
+ continue;
}
}
}
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_buildconfig.h b/drivers/mxc/amd-gpu/include/gsl_buildconfig.h
index 82824f511d5..cda8dae511f 100644
--- a/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_buildconfig.h
+++ b/drivers/mxc/amd-gpu/include/gsl_buildconfig.h
@@ -26,6 +26,10 @@
*
*/
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
#ifndef __GSL__BUILDCONFIG_H
#define __GSL__BUILDCONFIG_H
@@ -41,22 +45,12 @@
#define GSL_RB_USE_MEM_RPTR
#define GSL_RB_USE_MEM_TIMESTAMP
#define GSL_RB_TIMESTAMP_INTERUPT
-//#define GSL_RB_USE_WPTR_POLLING
+/* #define GSL_RB_USE_WPTR_POLLING */
-#if defined(_WIN32_WCE) && (_WIN32_WCE >= 600)
-#define GSL_DEVICE_SHADOW_MEMSTORE_TO_USER
-#endif
-
-//#define GSL_MMU_TRANSLATION_ENABLED
-//#define GSL_MMU_PAGETABLE_PERPROCESS
+/* #define GSL_MMU_TRANSLATION_ENABLED */
+/* #define GSL_MMU_PAGETABLE_PERPROCESS */
#define GSL_CALLER_PROCESS_MAX 10
#define GSL_SHMEM_MAX_APERTURES 3
-#ifdef _WIN32
-#ifndef _CRT_SECURE_NO_DEPRECATE
-#define _CRT_SECURE_NO_DEPRECATE
-#endif
-#endif // _WIN32
-
-#endif // __GSL__BUILDCONFIG_H
+#endif /* __GSL__BUILDCONFIG_H */
diff --git a/drivers/mxc/amd-gpu/include/gsl_config.h b/drivers/mxc/amd-gpu/include/gsl_config.h
new file mode 100644
index 00000000000..aa911b4096a
--- /dev/null
+++ b/drivers/mxc/amd-gpu/include/gsl_config.h
@@ -0,0 +1,221 @@
+/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Advanced Micro Devices nor
+ * the names of its contributors may be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+#ifndef __GSL__CONFIG_H
+#define __GSL__CONFIG_H
+
+/* ------------------------
+ * Yamato ringbuffer config
+ * ------------------------ */
+static const unsigned int gsl_cfg_rb_sizelog2quadwords = GSL_RB_SIZE_32K;
+static const unsigned int gsl_cfg_rb_blksizequadwords = GSL_RB_SIZE_16;
+
+/* ------------------------
+ * Yamato MH arbiter config
+ * ------------------------ */
+static const mh_arbiter_config_t gsl_cfg_yamato_mharb = {
+ 0x10, /* same_page_limit */
+ 0, /* same_page_granularity */
+ 1, /* l1_arb_enable */
+ 1, /* l1_arb_hold_enable */
+ 0, /* l2_arb_control */
+ 1, /* page_size */
+ 1, /* tc_reorder_enable */
+ 1, /* tc_arb_hold_enable */
+ 1, /* in_flight_limit_enable */
+ 0x8, /* in_flight_limit */
+ 1, /* cp_clnt_enable */
+ 1, /* vgt_clnt_enable */
+ 1, /* tc_clnt_enable */
+ 1, /* rb_clnt_enable */
+ 1, /* pa_clnt_enable */
+};
+
+/* ---------------------
+ * G12 MH arbiter config
+ * --------------------- */
+static const REG_MH_ARBITER_CONFIG gsl_cfg_g12_mharb = {
+ 0x10, /* SAME_PAGE_LIMIT */
+ 0, /* SAME_PAGE_GRANULARITY */
+ 1, /* L1_ARB_ENABLE */
+ 1, /* L1_ARB_HOLD_ENABLE */
+ 0, /* L2_ARB_CONTROL */
+ 1, /* PAGE_SIZE */
+ 1, /* TC_REORDER_ENABLE */
+ 1, /* TC_ARB_HOLD_ENABLE */
+ 0, /* IN_FLIGHT_LIMIT_ENABLE */
+ 0x8, /* IN_FLIGHT_LIMIT */
+ 1, /* CP_CLNT_ENABLE */
+ 1, /* VGT_CLNT_ENABLE */
+ 1, /* TC_CLNT_ENABLE */
+ 1, /* RB_CLNT_ENABLE */
+ 1, /* PA_CLNT_ENABLE */
+};
+
+/* -----------------------------
+ * interrupt block register data
+ * ----------------------------- */
+static const gsl_intrblock_reg_t gsl_cfg_intrblock_reg[GSL_INTR_BLOCK_COUNT] = {
+ { /* Yamato MH */
+ GSL_INTR_BLOCK_YDX_MH,
+ GSL_INTR_YDX_MH_AXI_READ_ERROR,
+ GSL_INTR_YDX_MH_MMU_PAGE_FAULT,
+ mmMH_INTERRUPT_STATUS,
+ mmMH_INTERRUPT_CLEAR,
+ mmMH_INTERRUPT_MASK
+ },
+ { /* Yamato CP */
+ GSL_INTR_BLOCK_YDX_CP,
+ GSL_INTR_YDX_CP_SW_INT,
+ GSL_INTR_YDX_CP_RING_BUFFER,
+ mmCP_INT_STATUS,
+ mmCP_INT_ACK,
+ mmCP_INT_CNTL
+ },
+ { /* Yamato RBBM */
+ GSL_INTR_BLOCK_YDX_RBBM,
+ GSL_INTR_YDX_RBBM_READ_ERROR,
+ GSL_INTR_YDX_RBBM_GUI_IDLE,
+ mmRBBM_INT_STATUS,
+ mmRBBM_INT_ACK,
+ mmRBBM_INT_CNTL
+ },
+ { /* Yamato SQ */
+ GSL_INTR_BLOCK_YDX_SQ,
+ GSL_INTR_YDX_SQ_PS_WATCHDOG,
+ GSL_INTR_YDX_SQ_VS_WATCHDOG,
+ mmSQ_INT_STATUS,
+ mmSQ_INT_ACK,
+ mmSQ_INT_CNTL
+ },
+ { /* G12 */
+ GSL_INTR_BLOCK_G12,
+ GSL_INTR_G12_MH,
+#ifndef _Z180
+ GSL_INTR_G12_FBC,
+#else
+ GSL_INTR_G12_FIFO,
+#endif /* _Z180 */
+ (ADDR_VGC_IRQSTATUS >> 2),
+ (ADDR_VGC_IRQSTATUS >> 2),
+ (ADDR_VGC_IRQENABLE >> 2)
+ },
+ { /* G12 MH */
+ GSL_INTR_BLOCK_G12_MH,
+ GSL_INTR_G12_MH_AXI_READ_ERROR,
+ GSL_INTR_G12_MH_MMU_PAGE_FAULT,
+ ADDR_MH_INTERRUPT_STATUS, /* G12 MH offsets are considered to be dword based, therefore no down shift */
+ ADDR_MH_INTERRUPT_CLEAR,
+ ADDR_MH_INTERRUPT_MASK
+ },
+};
+
+/* -----------------------
+ * interrupt mask bit data
+ * ----------------------- */
+static const int gsl_cfg_intr_mask[GSL_INTR_COUNT] = {
+ MH_INTERRUPT_MASK__AXI_READ_ERROR,
+ MH_INTERRUPT_MASK__AXI_WRITE_ERROR,
+ MH_INTERRUPT_MASK__MMU_PAGE_FAULT,
+
+ CP_INT_CNTL__SW_INT_MASK,
+ CP_INT_CNTL__T0_PACKET_IN_IB_MASK,
+ CP_INT_CNTL__OPCODE_ERROR_MASK,
+ CP_INT_CNTL__PROTECTED_MODE_ERROR_MASK,
+ CP_INT_CNTL__RESERVED_BIT_ERROR_MASK,
+ CP_INT_CNTL__IB_ERROR_MASK,
+ CP_INT_CNTL__IB2_INT_MASK,
+ CP_INT_CNTL__IB1_INT_MASK,
+ CP_INT_CNTL__RB_INT_MASK,
+
+ RBBM_INT_CNTL__RDERR_INT_MASK,
+ RBBM_INT_CNTL__DISPLAY_UPDATE_INT_MASK,
+ RBBM_INT_CNTL__GUI_IDLE_INT_MASK,
+
+ SQ_INT_CNTL__PS_WATCHDOG_MASK,
+ SQ_INT_CNTL__VS_WATCHDOG_MASK,
+
+ (1 << VGC_IRQENABLE_MH_FSHIFT),
+ (1 << VGC_IRQENABLE_G2D_FSHIFT),
+ (1 << VGC_IRQENABLE_FIFO_FSHIFT),
+#ifndef _Z180
+ (1 << VGC_IRQENABLE_FBC_FSHIFT),
+#endif
+ (1 << MH_INTERRUPT_MASK_AXI_READ_ERROR_FSHIFT),
+ (1 << MH_INTERRUPT_MASK_AXI_WRITE_ERROR_FSHIFT),
+ (1 << MH_INTERRUPT_MASK_MMU_PAGE_FAULT_FSHIFT),
+};
+
+/* -----------------
+ * mmu register data
+ * ----------------- */
+static const gsl_mmu_reg_t gsl_cfg_mmu_reg[GSL_DEVICE_MAX] = {
+ { /* Yamato */
+ mmMH_MMU_CONFIG,
+ mmMH_MMU_MPU_BASE,
+ mmMH_MMU_MPU_END,
+ mmMH_MMU_VA_RANGE,
+ mmMH_MMU_PT_BASE,
+ mmMH_MMU_PAGE_FAULT,
+ mmMH_MMU_TRAN_ERROR,
+ mmMH_MMU_INVALIDATE,
+ },
+ { /* G12 - MH offsets are considered to be dword based, therefore no down shift */
+ ADDR_MH_MMU_CONFIG,
+ ADDR_MH_MMU_MPU_BASE,
+ ADDR_MH_MMU_MPU_END,
+ ADDR_MH_MMU_VA_RANGE,
+ ADDR_MH_MMU_PT_BASE,
+ ADDR_MH_MMU_PAGE_FAULT,
+ ADDR_MH_MMU_TRAN_ERROR,
+ ADDR_MH_MMU_INVALIDATE,
+ },
+};
+
+/* -----------------
+ * mh interrupt data
+ * ----------------- */
+static const gsl_mh_intr_t gsl_cfg_mh_intr[GSL_DEVICE_MAX] =
+{
+ { /* Yamato */
+ GSL_INTR_YDX_MH_AXI_READ_ERROR,
+ GSL_INTR_YDX_MH_AXI_WRITE_ERROR,
+ GSL_INTR_YDX_MH_MMU_PAGE_FAULT,
+ },
+ { /* G12 */
+ GSL_INTR_G12_MH_AXI_READ_ERROR,
+ GSL_INTR_G12_MH_AXI_WRITE_ERROR,
+ GSL_INTR_G12_MH_MMU_PAGE_FAULT,
+ }
+};
+
+#endif /* __GSL__CONFIG_H */
diff --git a/drivers/mxc/amd-gpu/include/gsl_hal.h b/drivers/mxc/amd-gpu/include/gsl_hal.h
index 8a8a10cfb86..fa26b1f2311 100644
--- a/drivers/mxc/amd-gpu/include/gsl_hal.h
+++ b/drivers/mxc/amd-gpu/include/gsl_hal.h
@@ -132,7 +132,6 @@ KGSLHAL_API int kgsl_hal_getshmemconfig(gsl_shmemconfig_t *config);
KGSLHAL_API int kgsl_hal_getdevconfig(gsl_deviceid_t device_id, gsl_devconfig_t *config);
KGSLHAL_API int kgsl_hal_setpowerstate(gsl_deviceid_t device_id, int state, unsigned int value);
KGSLHAL_API gsl_chipid_t kgsl_hal_getchipid(gsl_deviceid_t device_id);
-KGSLHAL_API int kgsl_hal_getplatformtype(char *platform);
KGSLHAL_API int kgsl_hal_allocphysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[]);
KGSLHAL_API int kgsl_hal_freephysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[]);
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_buildconfig.h b/drivers/mxc/amd-gpu/include/gsl_halconfig.h
index 9cfe9fe5b3b..64f48e9d068 100644..100755
--- a/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_buildconfig.h
+++ b/drivers/mxc/amd-gpu/include/gsl_halconfig.h
@@ -26,37 +26,26 @@
*
*/
-#ifndef __GSL__BUILDCONFIG_H
-#define __GSL__BUILDCONFIG_H
-
-#define GSL_BLD_G12
-
-#define GSL_LOCKING_COURSEGRAIN
-#define GSL_MMU_TRANSLATION_ENABLED
-//#define GSL_MMU_PAGETABLE_PERPROCESS
-
-#if defined(_WIN32_WCE) && (_WIN32_WCE >= 600)
-#define GSL_DEVICE_SHADOW_MEMSTORE_TO_USER
-#endif
-
-//#define GSL_LOG
-
-#define GSL_STATS_MEM
-#define GSL_STATS_RINGBUFFER
-#define GSL_STATS_MMU
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
-#define GSL_RB_USE_MEM_RPTR
-#define GSL_RB_USE_MEM_TIMESTAMP
-//#define GSL_RB_USE_WPTR_POLLING
+#ifndef __GSL_HALCONFIG_H
+#define __GSL_HALCONFIG_H
+#define GSL_HAL_GPUBASE_REG_YDX 0x30000000
+#define GSL_HAL_SIZE_REG_YDX 0x00020000 /* 128KB */
-#define GSL_CALLER_PROCESS_MAX 10
-#define GSL_SHMEM_MAX_APERTURES 3
+#define GSL_HAL_SIZE_REG_G12 0x00001000 /* 4KB */
-#ifdef _WIN32
-#ifndef _CRT_SECURE_NO_DEPRECATE
-#define _CRT_SECURE_NO_DEPRECATE
+#if defined(GSL_MMU_TRANSLATION_ENABLED)
+#define GSL_HAL_SHMEM_SIZE_EMEM1 0x01800000 /* 24MB */
+#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00400000 /* 4MB */
+#define GSL_HAL_SHMEM_SIZE_PHYS 0x00400000 /* 4MB */
+#else
+#define GSL_HAL_SHMEM_SIZE_EMEM1 0x00D00000 /* 13MB */
+#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00200000 /* 2MB */
+#define GSL_HAL_SHMEM_SIZE_PHYS 0x00100000 /* 1MB */
#endif
-#endif // _WIN32
-#endif // __GSL__BUILDCONFIG_H
+#endif /* __GSL_HALCONFIG_H */
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_config.h b/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_config.h
deleted file mode 100644
index 58a38c608de..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_config.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __GSL__CONFIG_H
-#define __GSL__CONFIG_H
-
-
-// ---------------------
-// G12 MH arbiter config
-// ---------------------
-static const REG_MH_ARBITER_CONFIG gsl_cfg_g12_mharb =
-{
- 0x10, // SAME_PAGE_LIMIT
- 0, // SAME_PAGE_GRANULARITY
- 1, // L1_ARB_ENABLE
- 1, // L1_ARB_HOLD_ENABLE
- 0, // L2_ARB_CONTROL
- 1, // PAGE_SIZE
- 1, // TC_REORDER_ENABLE
- 1, // TC_ARB_HOLD_ENABLE
- 0, // IN_FLIGHT_LIMIT_ENABLE
- 0x8, // IN_FLIGHT_LIMIT
- 1, // CP_CLNT_ENABLE
- 1, // VGT_CLNT_ENABLE
- 1, // TC_CLNT_ENABLE
- 1, // RB_CLNT_ENABLE
- 1, // PA_CLNT_ENABLE
-};
-
-// -----------------------------
-// interrupt block register data
-// -----------------------------
-static const gsl_intrblock_reg_t gsl_cfg_intrblock_reg[GSL_INTR_BLOCK_COUNT] =
-{
- { // Yamato MH
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- },
- { // Yamato CP
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- },
- { // Yamato RBBM
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- },
- { // Yamato SQ
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- },
- { // G12
- GSL_INTR_BLOCK_G12,
- GSL_INTR_G12_MH,
-#ifndef _Z180
- GSL_INTR_G12_FBC,
-#else
- GSL_INTR_G12_FIFO,
-#endif //_Z180
- (ADDR_VGC_IRQSTATUS >> 2),
- (ADDR_VGC_IRQSTATUS >> 2),
- (ADDR_VGC_IRQENABLE >> 2)
- },
- { // G12 MH
- GSL_INTR_BLOCK_G12_MH,
- GSL_INTR_G12_MH_AXI_READ_ERROR,
- GSL_INTR_G12_MH_MMU_PAGE_FAULT,
- ADDR_MH_INTERRUPT_STATUS, // G12 MH offsets are considered to be dword based, therefore no down shift
- ADDR_MH_INTERRUPT_CLEAR,
- ADDR_MH_INTERRUPT_MASK
- },
-};
-
-// -----------------------
-// interrupt mask bit data
-// -----------------------
-static const int gsl_cfg_intr_mask[GSL_INTR_COUNT] =
-{
- 0,
- 0,
- 0,
-
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-
- 0,
- 0,
- 0,
-
- 0,
- 0,
-
- (1 << VGC_IRQENABLE_MH_FSHIFT),
- (1 << VGC_IRQENABLE_G2D_FSHIFT),
- (1 << VGC_IRQENABLE_FIFO_FSHIFT),
-#ifndef _Z180
- (1 << VGC_IRQENABLE_FBC_FSHIFT),
-#endif
- 0,
- 0,
- 0,
-};
-
-// -----------------
-// mmu register data
-// -----------------
-static const gsl_mmu_reg_t gsl_cfg_mmu_reg[GSL_DEVICE_MAX] =
-{
- { // Yamato
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- },
- { // G12 - MH offsets are considered to be dword based, therefore no down shift
- ADDR_MH_MMU_CONFIG,
- ADDR_MH_MMU_MPU_BASE,
- ADDR_MH_MMU_MPU_END,
- ADDR_MH_MMU_VA_RANGE,
- ADDR_MH_MMU_PT_BASE,
- ADDR_MH_MMU_PAGE_FAULT,
- ADDR_MH_MMU_TRAN_ERROR,
- ADDR_MH_MMU_INVALIDATE,
- }
-};
-
-// -----------------
-// mh interrupt data
-// -----------------
-static const gsl_mh_intr_t gsl_cfg_mh_intr[GSL_DEVICE_MAX] =
-{
- { // Yamato
- 0,
- 0,
- 0,
- },
- { // G12
- GSL_INTR_G12_MH_AXI_READ_ERROR,
- GSL_INTR_G12_MH_AXI_WRITE_ERROR,
- GSL_INTR_G12_MH_MMU_PAGE_FAULT,
- }
-};
-
-#endif // __GSL__CONFIG_H
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_halconfig.h b/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_halconfig.h
deleted file mode 100644
index 01104123601..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX35/gsl_halconfig.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __GSL_HALCONFIG_H
-#define __GSL_HALCONFIG_H
-
-
-
-#define GSL_HAL_PLATFORM "i.MX35G"
-
-
-#define GSL_HAL_GPUBASE_GMEM 0x00100000 // 1MB
-#define GSL_HAL_GPUBASE_GMEM_PHYS 0x20000000 // 1MB
-
-#define GSL_HAL_GPUBASE_REG_YDX 0x30000000
-#define GSL_HAL_GPUBASE_REG_G12 0x20000000
-
-#define GSL_HAL_SIZE_REG_YDX 0x00020000 // 128KB
-#define GSL_HAL_SIZE_REG_G12 0x00001000 // 4KB
-#define GSL_HAL_SIZE_GMEM 0x00040000 // 256KB - 0 to 384KB in 128KB increments
-
-#if defined(_LINUX) && defined(GSL_MMU_TRANSLATION_ENABLED)
-#define GSL_HAL_SHMEM_SIZE_EMEM1 0x02400000 // 36MB
-#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00400000 // 4MB
-#define GSL_HAL_SHMEM_SIZE_PHYS 0x00400000 // 4MB
-#elif defined(_LINUX) //MX35 Linux can able to allocate only 4MB
-#define GSL_HAL_SHMEM_SIZE_EMEM1 0x00400000 // 4MB
-#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00200000 // 2MB
-#define GSL_HAL_SHMEM_SIZE_PHYS 0x00200000 // 2MB
-#else //Not possible to allocate 24 MB on WinCE
-#define GSL_HAL_SHMEM_SIZE_EMEM1 0x00D00000 // 13MB
-#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00200000 // 2MB
-#define GSL_HAL_SHMEM_SIZE_PHYS 0x00100000 // 1MB
-#endif
-
-#define MX35_G12_INTERRUPT 16
-
-#endif // __GSL_HALCONFIG_H
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX35/linux/gsl_hal.c b/drivers/mxc/amd-gpu/platform/hal/MX35/linux/gsl_hal.c
deleted file mode 100644
index 294cd9eb5af..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX35/linux/gsl_hal.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- */
-
-#include "gsl_hal.h"
-#include "gsl_halconfig.h"
-#include "gsl_linux_map.h"
-
-#include <linux/clk.h>
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/vmalloc.h>
-
-#include <asm/atomic.h>
-#include <asm/uaccess.h>
-#include <asm/tlbflush.h>
-#include <asm/cacheflush.h>
-
-//////////////////////////////////////////////////////////////////////////////
-// constants
-//////////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////////////////////////
-// defines
-//////////////////////////////////////////////////////////////////////////////
-
-#define GSL_HAL_MEM1 0
-#define GSL_HAL_MEM2 1
-#define GSL_HAL_MEM3 2
-
-//#define GSL_HAL_DEBUG
-//////////////////////////////////////////////////////////////////////////////
-// types
-//////////////////////////////////////////////////////////////////////////////
-
-typedef struct _gsl_hal_t {
- gsl_memregion_t z160_regspace;
-#if 0
- gsl_memregion_t z430_regspace;
-#endif
- gsl_memregion_t memchunk;
- gsl_memregion_t memspace[GSL_SHMEM_MAX_APERTURES];
-} gsl_hal_t;
-
-//////////////////////////////////////////////////////////////////////////////
-// functions
-//////////////////////////////////////////////////////////////////////////////
-
-KGSLHAL_API int
-kgsl_hal_allocphysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[])
-{
- //
- // allocate physically contiguous memory
- //
-
- int i;
- void *va;
-
- va = (void*)gsl_linux_map_alloc(virtaddr, numpages*PAGE_SIZE);
-
- if (!va)
- return (GSL_FAILURE_OUTOFMEM);
-
- for(i = 0; i < numpages; i++)
- {
- scattergatterlist[i] = page_to_phys(vmalloc_to_page(va));
- va += PAGE_SIZE;
- }
-
- return (GSL_SUCCESS);
-}
-
-// ---------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_freephysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[])
-{
- //
- // free physical memory
- //
-
- gsl_linux_map_free(virtaddr);
-
- return(GSL_SUCCESS);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_init(void)
-{
- gsl_hal_t *hal;
- unsigned long totalsize, mem1size;
- unsigned int va, pa;
-
- if (gsl_driver.hal)
- {
- return (GSL_FAILURE_ALREADYINITIALIZED);
- }
-
- gsl_driver.hal = (void *)kos_malloc(sizeof(gsl_hal_t));
-
- if (!gsl_driver.hal)
- {
- return (GSL_FAILURE_OUTOFMEM);
- }
-
- kos_memset(gsl_driver.hal, 0, sizeof(gsl_hal_t));
-
-
- // overlay structure on hal memory
- hal = (gsl_hal_t *) gsl_driver.hal;
-
-#if 0
- // setup register space
- hal->z430_regspace.mmio_phys_base = GSL_HAL_GPUBASE_REG_YDX;
- hal->z430_regspace.sizebytes = GSL_HAL_SIZE_REG_YDX;
- hal->z430_regspace.mmio_virt_base = (unsigned char*)ioremap(hal->z430_regspace.mmio_phys_base, hal->z430_regspace.sizebytes);
-
- if (hal->z430_regspace.mmio_virt_base == NULL)
- {
- return (GSL_FAILURE_SYSTEMERROR);
- }
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->z430_regspace.mmio_phys_base = 0x%p\n", __func__, (void*)hal->z430_regspace.mmio_phys_base);
- printk(KERN_INFO "%s: hal->z430_regspace.mmio_virt_base = 0x%p\n", __func__, (void*)hal->z430_regspace.mmio_virt_base);
- printk(KERN_INFO "%s: hal->z430_regspace.sizebytes = 0x%08x\n", __func__, hal->z430_regspace.sizebytes);
-#endif
-#endif
-
- hal->z160_regspace.mmio_phys_base = GSL_HAL_GPUBASE_REG_G12;
- hal->z160_regspace.sizebytes = GSL_HAL_SIZE_REG_G12;
- hal->z160_regspace.mmio_virt_base = (unsigned char*)ioremap(hal->z160_regspace.mmio_phys_base, hal->z160_regspace.sizebytes);
-
- if (hal->z160_regspace.mmio_virt_base == NULL)
- {
- return (GSL_FAILURE_SYSTEMERROR);
- }
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->z160_regspace.mmio_phys_base = 0x%p\n", __func__, (void*)hal->z160_regspace.mmio_phys_base);
- printk(KERN_INFO "%s: hal->z160_regspace.mmio_virt_base = 0x%p\n", __func__, (void*)hal->z160_regspace.mmio_virt_base);
- printk(KERN_INFO "%s: hal->z160_regspace.sizebytes = 0x%08x\n", __func__, hal->z160_regspace.sizebytes);
-#endif
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- totalsize = GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS;
- mem1size = GSL_HAL_SHMEM_SIZE_EMEM1;
-#else
- totalsize = GSL_HAL_SHMEM_SIZE_EMEM1 + GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS;
- mem1size = GSL_HAL_SHMEM_SIZE_EMEM1;
-#endif
-
- // allocate a single chunk of physical memory
- va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL);
-
- if (va)
- {
- kos_memset((void *)va, 0, totalsize);
-
- hal->memchunk.mmio_virt_base = (void *)va;
- hal->memchunk.mmio_phys_base = pa;
- hal->memchunk.sizebytes = totalsize;
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memchunk.mmio_phys_base = 0x%p\n", __func__, (void*)hal->memchunk.mmio_phys_base);
- printk(KERN_INFO "%s: hal->memchunk.mmio_virt_base = 0x%p\n", __func__, (void*)hal->memchunk.mmio_virt_base);
- printk(KERN_INFO "%s: hal->memchunk.sizebytes = 0x%08x\n", __func__, hal->memchunk.sizebytes);
-#endif
-
- hal->memspace[GSL_HAL_MEM2].mmio_virt_base = (void *) va;
- hal->memspace[GSL_HAL_MEM2].gpu_base = pa;
- hal->memspace[GSL_HAL_MEM2].sizebytes = GSL_HAL_SHMEM_SIZE_EMEM2;
- va += GSL_HAL_SHMEM_SIZE_EMEM2;
- pa += GSL_HAL_SHMEM_SIZE_EMEM2;
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].gpu_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM2].gpu_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].mmio_virt_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM2].mmio_virt_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM2].sizebytes);
-#endif
-
- hal->memspace[GSL_HAL_MEM3].mmio_virt_base = (void *) va;
- hal->memspace[GSL_HAL_MEM3].gpu_base = pa;
- hal->memspace[GSL_HAL_MEM3].sizebytes = GSL_HAL_SHMEM_SIZE_PHYS;
- va += GSL_HAL_SHMEM_SIZE_PHYS;
- pa += GSL_HAL_SHMEM_SIZE_PHYS;
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].gpu_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM3].gpu_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].mmio_virt_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM3].mmio_virt_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM3].sizebytes);
-#endif
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- gsl_linux_map_init();
- hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *)GSL_LINUX_MAP_RANGE_START;
- hal->memspace[GSL_HAL_MEM1].gpu_base = GSL_LINUX_MAP_RANGE_START;
- hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size;
-#else
- hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *) va;
- hal->memspace[GSL_HAL_MEM1].gpu_base = pa;
- hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size;
-#endif
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].gpu_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM1].gpu_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].mmio_virt_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM1].mmio_virt_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM1].sizebytes);
-#endif
- }
- else
- {
- kgsl_hal_close();
- return (GSL_FAILURE_SYSTEMERROR);
- }
-
- return GSL_SUCCESS;
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_close(void)
-{
- gsl_hal_t *hal;
-
- if (gsl_driver.hal)
- {
- // overlay structure on hal memory
- hal = (gsl_hal_t *) gsl_driver.hal;
-
- // unmap registers
-#if 0
- if (hal->z430_regspace.mmio_virt_base)
- {
- iounmap(hal->z430_regspace.mmio_virt_base);
- }
-#endif
- if (hal->z160_regspace.mmio_virt_base)
- {
- iounmap(hal->z160_regspace.mmio_virt_base);
- }
-
- // free physical block
- if (hal->memchunk.mmio_virt_base)
- {
- dma_free_coherent(0, hal->memchunk.sizebytes, hal->memchunk.mmio_virt_base, hal->memchunk.mmio_phys_base);
- }
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- gsl_linux_map_destroy();
-#endif
-
- // release hal struct
- kos_memset(hal, 0, sizeof(gsl_hal_t));
- kos_free(gsl_driver.hal);
- gsl_driver.hal = NULL;
- }
-
- return (GSL_SUCCESS);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_getshmemconfig(gsl_shmemconfig_t *config)
-{
- int status = GSL_FAILURE_DEVICEERROR;
- gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
-
- kos_memset(config, 0, sizeof(gsl_shmemconfig_t));
-
- if (hal)
- {
- config->numapertures = GSL_SHMEM_MAX_APERTURES;
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- config->apertures[0].id = GSL_APERTURE_MMU;
-#else
- config->apertures[0].id = GSL_APERTURE_EMEM;
-#endif
- config->apertures[0].channel = GSL_CHANNEL_1;
- config->apertures[0].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM1].mmio_virt_base;
- config->apertures[0].gpubase = hal->memspace[GSL_HAL_MEM1].gpu_base;
- config->apertures[0].sizebytes = hal->memspace[GSL_HAL_MEM1].sizebytes;
-
- config->apertures[1].id = GSL_APERTURE_EMEM;
- config->apertures[1].channel = GSL_CHANNEL_2;
- config->apertures[1].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM2].mmio_virt_base;
- config->apertures[1].gpubase = hal->memspace[GSL_HAL_MEM2].gpu_base;
- config->apertures[1].sizebytes = hal->memspace[GSL_HAL_MEM2].sizebytes;
-
- config->apertures[2].id = GSL_APERTURE_PHYS;
- config->apertures[2].channel = GSL_CHANNEL_1;
- config->apertures[2].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM3].mmio_virt_base;
- config->apertures[2].gpubase = hal->memspace[GSL_HAL_MEM3].gpu_base;
- config->apertures[2].sizebytes = hal->memspace[GSL_HAL_MEM3].sizebytes;
-
- status = GSL_SUCCESS;
- }
-
- return (status);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_getdevconfig(gsl_deviceid_t device_id, gsl_devconfig_t *config)
-{
- int status = GSL_FAILURE_DEVICEERROR;
- gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
-
- kos_memset(config, 0, sizeof(gsl_devconfig_t));
-
- if (hal)
- {
- switch (device_id)
- {
- case GSL_DEVICE_YAMATO:
- {
-#if 0
- mh_mmu_config_u mmu_config = {0};
-
- config->gmemspace.gpu_base = 0;
- config->gmemspace.mmio_virt_base = 0;
- config->gmemspace.mmio_phys_base = 0;
- config->gmemspace.sizebytes = GSL_HAL_SIZE_GMEM;
-
- config->regspace.gpu_base = 0;
- config->regspace.mmio_virt_base = (unsigned char *)hal->z430_regspace.mmio_virt_base;
- config->regspace.mmio_phys_base = (unsigned int) hal->z430_regspace.mmio_phys_base;
- config->regspace.sizebytes = GSL_HAL_SIZE_REG_YDX;
-
- mmu_config.f.mmu_enable = 1;
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- mmu_config.f.split_mode_enable = 0;
- mmu_config.f.rb_w_clnt_behavior = 1;
- mmu_config.f.cp_w_clnt_behavior = 1;
- mmu_config.f.cp_r0_clnt_behavior = 1;
- mmu_config.f.cp_r1_clnt_behavior = 1;
- mmu_config.f.cp_r2_clnt_behavior = 1;
- mmu_config.f.cp_r3_clnt_behavior = 1;
- mmu_config.f.cp_r4_clnt_behavior = 1;
- mmu_config.f.vgt_r0_clnt_behavior = 1;
- mmu_config.f.vgt_r1_clnt_behavior = 1;
- mmu_config.f.tc_r_clnt_behavior = 1;
- mmu_config.f.pa_w_clnt_behavior = 1;
-#endif // GSL_MMU_TRANSLATION_ENABLED
-
- config->mmu_config = mmu_config.val;
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- config->va_base = hal->memspace[GSL_HAL_MEM1].gpu_base;
- config->va_range = hal->memspace[GSL_HAL_MEM1].sizebytes;
-#else
- config->va_base = 0x00000000;
- config->va_range = 0x00000000;
-#endif // GSL_MMU_TRANSLATION_ENABLED
-
- // turn off memory protection unit by setting acceptable physical address range to include all pages
- config->mpu_base = 0x00000000; // hal->memchunk.mmio_virt_base;
- config->mpu_range = 0xFFFFF000; // hal->memchunk.sizebytes;
-
- status = GSL_SUCCESS;
-#endif
- break;
- }
-
- case GSL_DEVICE_G12:
- {
-#ifndef GSL_MMU_TRANSLATION_ENABLED
- unsigned int mmu_config = {0};
-#endif
- config->regspace.gpu_base = 0;
- config->regspace.mmio_virt_base = (unsigned char *)hal->z160_regspace.mmio_virt_base;
- config->regspace.mmio_phys_base = (unsigned int) hal->z160_regspace.mmio_phys_base;
- config->regspace.sizebytes = GSL_HAL_SIZE_REG_G12;
-
-
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- config->mmu_config = 0x00555551;
- config->va_base = hal->memspace[GSL_HAL_MEM1].gpu_base;
- config->va_range = hal->memspace[GSL_HAL_MEM1].sizebytes;
-#else
- config->mmu_config = mmu_config;
- config->va_base = 0x00000000;
- config->va_range = 0x00000000;
-#endif // GSL_MMU_TRANSLATION_ENABLED
-
- config->mpu_base = 0x00000000; //(unsigned int) hal->memchunk.mmio_virt_base;
- config->mpu_range = 0xFFFFF000; //hal->memchunk.sizebytes;
-
- status = GSL_SUCCESS;
- break;
- }
-
- default:
-
- break;
- }
- }
-
- return (status);
-}
-
-//----------------------------------------------------------------------------
-//
-// kgsl_hal_getchipid
-//
-// The proper platform method, build from RBBM_PERIPHIDx and RBBM_PATCH_RELEASE
-//
-KGSLHAL_API gsl_chipid_t
-kgsl_hal_getchipid(gsl_deviceid_t device_id)
-{
- return (0);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_getplatformtype(char *platform)
-{
- if (gsl_driver.hal)
- {
- kos_strcpy(platform, GSL_HAL_PLATFORM);
- return (GSL_SUCCESS);
- }
- else
- {
- return (GSL_FAILURE_NOTINITIALIZED);
- }
-}
-
-//---------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_setpowerstate(gsl_deviceid_t device_id, int state, unsigned int value)
-{
- gsl_device_t *device = &gsl_driver.device[device_id-1]; // device_id is 1 based
- struct clk *gpu_clk = 0;
-
- // unreferenced formal parameters
- (void) value;
-
- switch (device_id)
- {
- case GSL_DEVICE_G12:
- gpu_clk = clk_get(0, "gpu2d_clk");
- break;
- default:
- return (GSL_FAILURE_DEVICEERROR);
- }
-
- if (!gpu_clk)
- return (GSL_FAILURE_DEVICEERROR);
-
- switch (state)
- {
- case GSL_PWRFLAGS_CLK_ON:
- break;
- case GSL_PWRFLAGS_POWER_ON:
- clk_enable(gpu_clk);
- kgsl_device_autogate_init(&gsl_driver.device[device_id-1]);
- break;
- case GSL_PWRFLAGS_CLK_OFF:
- break;
- case GSL_PWRFLAGS_POWER_OFF:
- if (device->ftbl.device_idle(device, GSL_TIMEOUT_DEFAULT) != GSL_SUCCESS)
- {
- return (GSL_FAILURE_DEVICEERROR);
- }
- kgsl_device_autogate_exit(&gsl_driver.device[device_id-1]);
- clk_disable(gpu_clk);
- break;
- default:
- break;
- }
-
- return (GSL_SUCCESS);
-}
-
-KGSLHAL_API int kgsl_clock(gsl_deviceid_t dev, int enable)
-{
- struct clk *gpu_clk = 0;
-
- switch (dev)
- {
- case GSL_DEVICE_G12:
- gpu_clk = clk_get(0, "gpu2d_clk");
- break;
- default:
- printk(KERN_ERR "GPU device %d is invalid!\n", dev);
- return (GSL_FAILURE_DEVICEERROR);
- }
-
- if (IS_ERR(gpu_clk)) {
- printk(KERN_ERR "%s: GPU clock get failed!\n", __func__);
- return (GSL_FAILURE_DEVICEERROR);
- }
-
- if (enable)
- clk_enable(gpu_clk);
- else
- clk_disable(gpu_clk);
-
- return (GSL_SUCCESS);
-}
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.c b/drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.c
deleted file mode 100644
index f3ca6191d7c..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- */
-
-#include "kos_libapi.h"
-
-//
-// Return the maximum amount of memory that can be allocated to the Z160. This number
-// will be constrained to 2MB as a minimum and the original hardcoded value for the caller
-// as a maximum. If the return value is outside of this range, then the original value in
-// the caller will be used. For this reason, returning 0 is used to signify to use the
-// original value as the default.
-//
-KOS_DLLEXPORT unsigned long kgsl_get_z160_memory_amount(void)
-{
- return(0);
-}
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.h b/drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.h
deleted file mode 100644
index 164a17c925c..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX35/memcfg/gsl_memcfg.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GSL_MEMCFG_H
-#define GSL_MEMCFG_H
-
-//
-// Return the maximum amount of memory that can be allocated to the Z430. This number
-// will be constrained to 2MB as a minimum and the original hardcoded value for the caller
-// as a maximum. If the return value is outside of this range, then the original value in
-// the caller will be used. For this reason, returning 0 is used to signify to use the
-// original value as the default.
-//
-KOS_DLLEXPORT unsigned long kgsl_get_z160_memory_amount(void);
-
-#endif
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_config.h b/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_config.h
deleted file mode 100644
index 6fad1d01277..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_config.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __GSL__CONFIG_H
-#define __GSL__CONFIG_H
-
-// ------------------------
-// Yamato ringbuffer config
-// ------------------------
-static const unsigned int gsl_cfg_rb_sizelog2quadwords = GSL_RB_SIZE_32K;
-static const unsigned int gsl_cfg_rb_blksizequadwords = GSL_RB_SIZE_16;
-
-// ------------------------
-// Yamato MH arbiter config
-// ------------------------
-static const mh_arbiter_config_t gsl_cfg_yamato_mharb =
-{
- 0x10, // same_page_limit
- 0, // same_page_granularity
- 1, // l1_arb_enable
- 1, // l1_arb_hold_enable
- 0, // l2_arb_control
- 1, // page_size
- 1, // tc_reorder_enable
- 1, // tc_arb_hold_enable
- 1, // in_flight_limit_enable
- 0x8, // in_flight_limit
- 1, // cp_clnt_enable
- 1, // vgt_clnt_enable
- 1, // tc_clnt_enable
- 1, // rb_clnt_enable
- 1, // pa_clnt_enable
-};
-
-// ---------------------
-// G12 MH arbiter config
-// ---------------------
-static const REG_MH_ARBITER_CONFIG gsl_cfg_g12_mharb =
-{
- 0x10, // SAME_PAGE_LIMIT
- 0, // SAME_PAGE_GRANULARITY
- 1, // L1_ARB_ENABLE
- 1, // L1_ARB_HOLD_ENABLE
- 0, // L2_ARB_CONTROL
- 1, // PAGE_SIZE
- 1, // TC_REORDER_ENABLE
- 1, // TC_ARB_HOLD_ENABLE
- 0, // IN_FLIGHT_LIMIT_ENABLE
- 0x8, // IN_FLIGHT_LIMIT
- 1, // CP_CLNT_ENABLE
- 1, // VGT_CLNT_ENABLE
- 1, // TC_CLNT_ENABLE
- 1, // RB_CLNT_ENABLE
- 1, // PA_CLNT_ENABLE
-};
-
-// -----------------------------
-// interrupt block register data
-// -----------------------------
-static const gsl_intrblock_reg_t gsl_cfg_intrblock_reg[GSL_INTR_BLOCK_COUNT] =
-{
- { // Yamato MH
- GSL_INTR_BLOCK_YDX_MH,
- GSL_INTR_YDX_MH_AXI_READ_ERROR,
- GSL_INTR_YDX_MH_MMU_PAGE_FAULT,
- mmMH_INTERRUPT_STATUS,
- mmMH_INTERRUPT_CLEAR,
- mmMH_INTERRUPT_MASK
- },
- { // Yamato CP
- GSL_INTR_BLOCK_YDX_CP,
- GSL_INTR_YDX_CP_SW_INT,
- GSL_INTR_YDX_CP_RING_BUFFER,
- mmCP_INT_STATUS,
- mmCP_INT_ACK,
- mmCP_INT_CNTL
- },
- { // Yamato RBBM
- GSL_INTR_BLOCK_YDX_RBBM,
- GSL_INTR_YDX_RBBM_READ_ERROR,
- GSL_INTR_YDX_RBBM_GUI_IDLE,
- mmRBBM_INT_STATUS,
- mmRBBM_INT_ACK,
- mmRBBM_INT_CNTL
- },
- { // Yamato SQ
- GSL_INTR_BLOCK_YDX_SQ,
- GSL_INTR_YDX_SQ_PS_WATCHDOG,
- GSL_INTR_YDX_SQ_VS_WATCHDOG,
- mmSQ_INT_STATUS,
- mmSQ_INT_ACK,
- mmSQ_INT_CNTL
- },
- { // G12
- GSL_INTR_BLOCK_G12,
- GSL_INTR_G12_MH,
-#ifndef _Z180
- GSL_INTR_G12_FBC,
-#else
- GSL_INTR_G12_FIFO,
-#endif //_Z180
- (ADDR_VGC_IRQSTATUS >> 2),
- (ADDR_VGC_IRQSTATUS >> 2),
- (ADDR_VGC_IRQENABLE >> 2)
- },
- { // G12 MH
- GSL_INTR_BLOCK_G12_MH,
- GSL_INTR_G12_MH_AXI_READ_ERROR,
- GSL_INTR_G12_MH_MMU_PAGE_FAULT,
- ADDR_MH_INTERRUPT_STATUS, // G12 MH offsets are considered to be dword based, therefore no down shift
- ADDR_MH_INTERRUPT_CLEAR,
- ADDR_MH_INTERRUPT_MASK
- },
-};
-
-// -----------------------
-// interrupt mask bit data
-// -----------------------
-static const int gsl_cfg_intr_mask[GSL_INTR_COUNT] =
-{
- MH_INTERRUPT_MASK__AXI_READ_ERROR,
- MH_INTERRUPT_MASK__AXI_WRITE_ERROR,
- MH_INTERRUPT_MASK__MMU_PAGE_FAULT,
-
- CP_INT_CNTL__SW_INT_MASK,
- CP_INT_CNTL__T0_PACKET_IN_IB_MASK,
- CP_INT_CNTL__OPCODE_ERROR_MASK,
- CP_INT_CNTL__PROTECTED_MODE_ERROR_MASK,
- CP_INT_CNTL__RESERVED_BIT_ERROR_MASK,
- CP_INT_CNTL__IB_ERROR_MASK,
- CP_INT_CNTL__IB2_INT_MASK,
- CP_INT_CNTL__IB1_INT_MASK,
- CP_INT_CNTL__RB_INT_MASK,
-
- RBBM_INT_CNTL__RDERR_INT_MASK,
- RBBM_INT_CNTL__DISPLAY_UPDATE_INT_MASK,
- RBBM_INT_CNTL__GUI_IDLE_INT_MASK,
-
- SQ_INT_CNTL__PS_WATCHDOG_MASK,
- SQ_INT_CNTL__VS_WATCHDOG_MASK,
-
- (1 << VGC_IRQENABLE_MH_FSHIFT),
- (1 << VGC_IRQENABLE_G2D_FSHIFT),
- (1 << VGC_IRQENABLE_FIFO_FSHIFT),
-#ifndef _Z180
- (1 << VGC_IRQENABLE_FBC_FSHIFT),
-#endif
- (1 << MH_INTERRUPT_MASK_AXI_READ_ERROR_FSHIFT),
- (1 << MH_INTERRUPT_MASK_AXI_WRITE_ERROR_FSHIFT),
- (1 << MH_INTERRUPT_MASK_MMU_PAGE_FAULT_FSHIFT),
-};
-
-// -----------------
-// mmu register data
-// -----------------
-static const gsl_mmu_reg_t gsl_cfg_mmu_reg[GSL_DEVICE_MAX] =
-{
- { // Yamato
- mmMH_MMU_CONFIG,
- mmMH_MMU_MPU_BASE,
- mmMH_MMU_MPU_END,
- mmMH_MMU_VA_RANGE,
- mmMH_MMU_PT_BASE,
- mmMH_MMU_PAGE_FAULT,
- mmMH_MMU_TRAN_ERROR,
- mmMH_MMU_INVALIDATE,
- },
- { // G12 - MH offsets are considered to be dword based, therefore no down shift
- ADDR_MH_MMU_CONFIG,
- ADDR_MH_MMU_MPU_BASE,
- ADDR_MH_MMU_MPU_END,
- ADDR_MH_MMU_VA_RANGE,
- ADDR_MH_MMU_PT_BASE,
- ADDR_MH_MMU_PAGE_FAULT,
- ADDR_MH_MMU_TRAN_ERROR,
- ADDR_MH_MMU_INVALIDATE,
- }
-};
-
-// -----------------
-// mh interrupt data
-// -----------------
-static const gsl_mh_intr_t gsl_cfg_mh_intr[GSL_DEVICE_MAX] =
-{
- { // Yamato
- GSL_INTR_YDX_MH_AXI_READ_ERROR,
- GSL_INTR_YDX_MH_AXI_WRITE_ERROR,
- GSL_INTR_YDX_MH_MMU_PAGE_FAULT,
- },
- { // G12
- GSL_INTR_G12_MH_AXI_READ_ERROR,
- GSL_INTR_G12_MH_AXI_WRITE_ERROR,
- GSL_INTR_G12_MH_MMU_PAGE_FAULT,
- }
-};
-
-#endif // __GSL__CONFIG_H
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_halconfig.h b/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_halconfig.h
deleted file mode 100644
index 589c56fa9bf..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX51/gsl_halconfig.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __GSL_HALCONFIG_H
-#define __GSL_HALCONFIG_H
-
-
-#define GSL_HAL_PLATFORM "i.MX51"
-
-#define GSL_HAL_GPUBASE_GMEM 0x00100000 // 1MB
-#define GSL_HAL_GPUBASE_GMEM_PHYS 0x20000000 // 1MB
-
-#define GSL_HAL_GPUBASE_REG_YDX 0x30000000
-#define GSL_HAL_GPUBASE_REG_G12 0xD0000000
-
-#define GSL_HAL_SIZE_REG_YDX 0x00020000 // 128KB
-#define GSL_HAL_SIZE_REG_G12 0x00001000 // 4KB
-#define GSL_HAL_SIZE_GMEM 0x00020000 // 128KB - 0 to 384KB in 128KB increments
-
-#if defined(GSL_MMU_TRANSLATION_ENABLED)
-#define GSL_HAL_SHMEM_SIZE_EMEM1 0x02400000 // 36MB
-#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00400000 // 4MB
-#define GSL_HAL_SHMEM_SIZE_PHYS 0x00400000 // 4MB
-#else
-#define GSL_HAL_SHMEM_SIZE_EMEM1 0x00D00000 // 13MB
-#define GSL_HAL_SHMEM_SIZE_EMEM2 0x00200000 // 2MB
-#define GSL_HAL_SHMEM_SIZE_PHYS 0x00100000 // 1MB
-#endif
-
-#define MX51_G12_INTERRUPT 84 // Interrupt line taken from Reference Manual
-#define MX51_YDX_INTERRUPT 12 // Interrupt line taken from Reference Manual
-
-#endif // __GSL_HALCONFIG_H
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX51/linux/gsl_hal.c b/drivers/mxc/amd-gpu/platform/hal/MX51/linux/gsl_hal.c
deleted file mode 100644
index 965416b59ec..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX51/linux/gsl_hal.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- */
-
-#include "gsl_hal.h"
-#include "gsl_halconfig.h"
-#include "gsl_memcfg.h"
-#include "gsl_linux_map.h"
-
-#include <linux/clk.h>
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/vmalloc.h>
-
-#include <asm/atomic.h>
-#include <asm/uaccess.h>
-#include <asm/tlbflush.h>
-#include <asm/cacheflush.h>
-
-//////////////////////////////////////////////////////////////////////////////
-// constants
-//////////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////////////////////////
-// defines
-//////////////////////////////////////////////////////////////////////////////
-
-#define GSL_HAL_MEM1 0
-#define GSL_HAL_MEM2 1
-#define GSL_HAL_MEM3 2
-
-//#define GSL_HAL_DEBUG
-
-//////////////////////////////////////////////////////////////////////////////
-// types
-//////////////////////////////////////////////////////////////////////////////
-
-typedef struct _gsl_hal_t {
- gsl_memregion_t z160_regspace;
- gsl_memregion_t z430_regspace;
- gsl_memregion_t memchunk;
- gsl_memregion_t memspace[GSL_SHMEM_MAX_APERTURES];
-} gsl_hal_t;
-
-extern phys_addr_t gpu_2d_regbase;
-extern int gpu_2d_regsize;
-extern phys_addr_t gpu_3d_regbase;
-extern int gpu_3d_regsize;
-extern int gmem_size;
-extern phys_addr_t gpu_reserved_mem;
-extern int gpu_reserved_mem_size;
-
-//////////////////////////////////////////////////////////////////////////////
-// functions
-//////////////////////////////////////////////////////////////////////////////
-
-KGSLHAL_API int
-kgsl_hal_allocphysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[])
-{
- //
- // allocate physically contiguous memory
- //
-
- int i;
- void *va;
-
- va = gsl_linux_map_alloc(virtaddr, numpages*PAGE_SIZE);
-
- if (!va)
- return (GSL_FAILURE_OUTOFMEM);
-
- for(i = 0; i < numpages; i++)
- {
- scattergatterlist[i] = page_to_phys(vmalloc_to_page(va));
- va += PAGE_SIZE;
- }
-
- return (GSL_SUCCESS);
-}
-
-// ---------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_freephysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[])
-{
- //
- // free physical memory
- //
-
- gsl_linux_map_free(virtaddr);
-
- return(GSL_SUCCESS);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_init(void)
-{
- gsl_hal_t *hal;
- unsigned long totalsize, mem1size;
- unsigned int va, pa;
-
- if (gsl_driver.hal)
- {
- return (GSL_FAILURE_ALREADYINITIALIZED);
- }
-
- gsl_driver.hal = (void *)kos_malloc(sizeof(gsl_hal_t));
-
- if (!gsl_driver.hal)
- {
- return (GSL_FAILURE_OUTOFMEM);
- }
-
- kos_memset(gsl_driver.hal, 0, sizeof(gsl_hal_t));
-
-
- // overlay structure on hal memory
- hal = (gsl_hal_t *) gsl_driver.hal;
-
- // setup register space
- if(gpu_3d_regbase && gpu_3d_regsize){
- hal->z430_regspace.mmio_phys_base = gpu_3d_regbase;
- hal->z430_regspace.sizebytes = gpu_3d_regsize;
- }else{
- hal->z430_regspace.mmio_phys_base = GSL_HAL_GPUBASE_REG_YDX;
- hal->z430_regspace.sizebytes = GSL_HAL_SIZE_REG_YDX;
- }
- hal->z430_regspace.mmio_virt_base = (unsigned char*)ioremap(hal->z430_regspace.mmio_phys_base, hal->z430_regspace.sizebytes);
-
- if (hal->z430_regspace.mmio_virt_base == NULL)
- {
- return (GSL_FAILURE_SYSTEMERROR);
- }
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->z430_regspace.mmio_phys_base = 0x%p\n", __func__, (void*)hal->z430_regspace.mmio_phys_base);
- printk(KERN_INFO "%s: hal->z430_regspace.mmio_virt_base = 0x%p\n", __func__, (void*)hal->z430_regspace.mmio_virt_base);
- printk(KERN_INFO "%s: hal->z430_regspace.sizebytes = 0x%08x\n", __func__, hal->z430_regspace.sizebytes);
-#endif
-
- if(gpu_2d_regbase && gpu_2d_regsize){
- hal->z160_regspace.mmio_phys_base = gpu_2d_regbase;
- hal->z160_regspace.sizebytes = gpu_2d_regsize;
- }else{
- hal->z160_regspace.mmio_phys_base = GSL_HAL_GPUBASE_REG_G12;
- hal->z160_regspace.sizebytes = GSL_HAL_SIZE_REG_G12;
- }
- hal->z160_regspace.mmio_virt_base = (unsigned char*)ioremap(hal->z160_regspace.mmio_phys_base, hal->z160_regspace.sizebytes);
-
- if (hal->z160_regspace.mmio_virt_base == NULL)
- {
- return (GSL_FAILURE_SYSTEMERROR);
- }
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->z160_regspace.mmio_phys_base = 0x%p\n", __func__, (void*)hal->z160_regspace.mmio_phys_base);
- printk(KERN_INFO "%s: hal->z160_regspace.mmio_virt_base = 0x%p\n", __func__, (void*)hal->z160_regspace.mmio_virt_base);
- printk(KERN_INFO "%s: hal->z160_regspace.sizebytes = 0x%08x\n", __func__, hal->z160_regspace.sizebytes);
-#endif
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- totalsize = GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS;
- mem1size = GSL_HAL_SHMEM_SIZE_EMEM1;
- if (gpu_reserved_mem && gpu_reserved_mem_size >= totalsize)
- {
- pa = gpu_reserved_mem;
- va = (unsigned int)ioremap(gpu_reserved_mem, totalsize);
- }
- else
- {
- va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL);
- }
-#else
- if(gpu_reserved_mem && gpu_reserved_mem_size >= SZ_8M){
- totalsize = gpu_reserved_mem_size;
- pa = gpu_reserved_mem;
- va = (unsigned int)ioremap(gpu_reserved_mem, gpu_reserved_mem_size);
- }else{
- gpu_reserved_mem = 0;
- totalsize = GSL_HAL_SHMEM_SIZE_EMEM1 + GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS;
- va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL);
- }
- mem1size = totalsize - (GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS);
-#endif
-
- if (va)
- {
- kos_memset((void *)va, 0, totalsize);
-
- hal->memchunk.mmio_virt_base = (void *)va;
- hal->memchunk.mmio_phys_base = pa;
- hal->memchunk.sizebytes = totalsize;
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memchunk.mmio_phys_base = 0x%p\n", __func__, (void*)hal->memchunk.mmio_phys_base);
- printk(KERN_INFO "%s: hal->memchunk.mmio_virt_base = 0x%p\n", __func__, (void*)hal->memchunk.mmio_virt_base);
- printk(KERN_INFO "%s: hal->memchunk.sizebytes = 0x%08x\n", __func__, hal->memchunk.sizebytes);
-#endif
-
- hal->memspace[GSL_HAL_MEM2].mmio_virt_base = (void *) va;
- hal->memspace[GSL_HAL_MEM2].gpu_base = pa;
- hal->memspace[GSL_HAL_MEM2].sizebytes = GSL_HAL_SHMEM_SIZE_EMEM2;
- va += GSL_HAL_SHMEM_SIZE_EMEM2;
- pa += GSL_HAL_SHMEM_SIZE_EMEM2;
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].gpu_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM2].gpu_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].mmio_virt_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM2].mmio_virt_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM2].sizebytes);
-#endif
-
- hal->memspace[GSL_HAL_MEM3].mmio_virt_base = (void *) va;
- hal->memspace[GSL_HAL_MEM3].gpu_base = pa;
- hal->memspace[GSL_HAL_MEM3].sizebytes = GSL_HAL_SHMEM_SIZE_PHYS;
- va += GSL_HAL_SHMEM_SIZE_PHYS;
- pa += GSL_HAL_SHMEM_SIZE_PHYS;
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].gpu_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM3].gpu_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].mmio_virt_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM3].mmio_virt_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM3].sizebytes);
-#endif
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- gsl_linux_map_init();
- hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *)GSL_LINUX_MAP_RANGE_START;
- hal->memspace[GSL_HAL_MEM1].gpu_base = GSL_LINUX_MAP_RANGE_START;
- hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size;
-#else
- hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *) va;
- hal->memspace[GSL_HAL_MEM1].gpu_base = pa;
- hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size;
-#endif
-
-#ifdef GSL_HAL_DEBUG
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].gpu_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM1].gpu_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].mmio_virt_base = 0x%p\n", __func__, (void*)hal->memspace[GSL_HAL_MEM1].mmio_virt_base);
- printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM1].sizebytes);
-#endif
- }
- else
- {
- kgsl_hal_close();
- return (GSL_FAILURE_SYSTEMERROR);
- }
-
- return GSL_SUCCESS;
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_close(void)
-{
- gsl_hal_t *hal;
-
- if (gsl_driver.hal)
- {
- // overlay structure on hal memory
- hal = (gsl_hal_t *) gsl_driver.hal;
-
- // unmap registers
- if (hal->z430_regspace.mmio_virt_base)
- {
- iounmap(hal->z430_regspace.mmio_virt_base);
- }
- if (hal->z160_regspace.mmio_virt_base)
- {
- iounmap(hal->z160_regspace.mmio_virt_base);
- }
-
- // free physical block
- if (hal->memchunk.mmio_virt_base && gpu_reserved_mem)
- {
- iounmap(hal->memchunk.mmio_virt_base);
- }
- else
- {
- dma_free_coherent(0, hal->memchunk.sizebytes, hal->memchunk.mmio_virt_base, hal->memchunk.mmio_phys_base);
- }
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- gsl_linux_map_destroy();
-#endif
-
- // release hal struct
- kos_memset(hal, 0, sizeof(gsl_hal_t));
- kos_free(gsl_driver.hal);
- gsl_driver.hal = NULL;
- }
-
- return (GSL_SUCCESS);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_getshmemconfig(gsl_shmemconfig_t *config)
-{
- int status = GSL_FAILURE_DEVICEERROR;
- gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
-
- kos_memset(config, 0, sizeof(gsl_shmemconfig_t));
-
- if (hal)
- {
- config->numapertures = GSL_SHMEM_MAX_APERTURES;
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- config->apertures[0].id = GSL_APERTURE_MMU;
-#else
- config->apertures[0].id = GSL_APERTURE_EMEM;
-#endif
- config->apertures[0].channel = GSL_CHANNEL_1;
- config->apertures[0].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM1].mmio_virt_base;
- config->apertures[0].gpubase = hal->memspace[GSL_HAL_MEM1].gpu_base;
- config->apertures[0].sizebytes = hal->memspace[GSL_HAL_MEM1].sizebytes;
-
- config->apertures[1].id = GSL_APERTURE_EMEM;
- config->apertures[1].channel = GSL_CHANNEL_2;
- config->apertures[1].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM2].mmio_virt_base;
- config->apertures[1].gpubase = hal->memspace[GSL_HAL_MEM2].gpu_base;
- config->apertures[1].sizebytes = hal->memspace[GSL_HAL_MEM2].sizebytes;
-
- config->apertures[2].id = GSL_APERTURE_PHYS;
- config->apertures[2].channel = GSL_CHANNEL_1;
- config->apertures[2].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM3].mmio_virt_base;
- config->apertures[2].gpubase = hal->memspace[GSL_HAL_MEM3].gpu_base;
- config->apertures[2].sizebytes = hal->memspace[GSL_HAL_MEM3].sizebytes;
-
- status = GSL_SUCCESS;
- }
-
- return (status);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_getdevconfig(gsl_deviceid_t device_id, gsl_devconfig_t *config)
-{
- int status = GSL_FAILURE_DEVICEERROR;
- gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
-
- kos_memset(config, 0, sizeof(gsl_devconfig_t));
-
- if (hal)
- {
- switch (device_id)
- {
- case GSL_DEVICE_YAMATO:
- {
- mh_mmu_config_u mmu_config = {0};
-
- config->gmemspace.gpu_base = 0;
- config->gmemspace.mmio_virt_base = 0;
- config->gmemspace.mmio_phys_base = 0;
- if(gmem_size){
- config->gmemspace.sizebytes = gmem_size;
- }else{
- config->gmemspace.sizebytes = GSL_HAL_SIZE_GMEM;
- }
-
- config->regspace.gpu_base = 0;
- config->regspace.mmio_virt_base = (unsigned char *)hal->z430_regspace.mmio_virt_base;
- config->regspace.mmio_phys_base = (unsigned int) hal->z430_regspace.mmio_phys_base;
- config->regspace.sizebytes = GSL_HAL_SIZE_REG_YDX;
-
- mmu_config.f.mmu_enable = 1;
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- mmu_config.f.split_mode_enable = 0;
- mmu_config.f.rb_w_clnt_behavior = 1;
- mmu_config.f.cp_w_clnt_behavior = 1;
- mmu_config.f.cp_r0_clnt_behavior = 1;
- mmu_config.f.cp_r1_clnt_behavior = 1;
- mmu_config.f.cp_r2_clnt_behavior = 1;
- mmu_config.f.cp_r3_clnt_behavior = 1;
- mmu_config.f.cp_r4_clnt_behavior = 1;
- mmu_config.f.vgt_r0_clnt_behavior = 1;
- mmu_config.f.vgt_r1_clnt_behavior = 1;
- mmu_config.f.tc_r_clnt_behavior = 1;
- mmu_config.f.pa_w_clnt_behavior = 1;
-#endif // GSL_MMU_TRANSLATION_ENABLED
-
- config->mmu_config = mmu_config.val;
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- config->va_base = hal->memspace[GSL_HAL_MEM1].gpu_base;
- config->va_range = hal->memspace[GSL_HAL_MEM1].sizebytes;
-#else
- config->va_base = 0x00000000;
- config->va_range = 0x00000000;
-#endif // GSL_MMU_TRANSLATION_ENABLED
-
- // turn off memory protection unit by setting acceptable physical address range to include all pages
- config->mpu_base = 0x00000000; // hal->memchunk.mmio_virt_base;
- config->mpu_range = 0xFFFFF000; // hal->memchunk.sizebytes;
-
- status = GSL_SUCCESS;
- break;
- }
-
- case GSL_DEVICE_G12:
- {
- mh_mmu_config_u mmu_config = {0};
-
- config->regspace.gpu_base = 0;
- config->regspace.mmio_virt_base = (unsigned char *)hal->z160_regspace.mmio_virt_base;
- config->regspace.mmio_phys_base = (unsigned int) hal->z160_regspace.mmio_phys_base;
- config->regspace.sizebytes = GSL_HAL_SIZE_REG_G12;
-
- mmu_config.f.mmu_enable = 1;
-
-#ifdef GSL_MMU_TRANSLATION_ENABLED
- config->mmu_config = 0x00555551;
- config->va_base = hal->memspace[GSL_HAL_MEM1].gpu_base;
- config->va_range = hal->memspace[GSL_HAL_MEM1].sizebytes;
-#else
- config->mmu_config = mmu_config.val;
- config->va_base = 0x00000000;
- config->va_range = 0x00000000;
-#endif // GSL_MMU_TRANSLATION_ENABLED
-
- config->mpu_base = 0x00000000; //(unsigned int) hal->memchunk.mmio_virt_base;
- config->mpu_range = 0xFFFFF000; //hal->memchunk.sizebytes;
-
- status = GSL_SUCCESS;
- break;
- }
-
- default:
-
- break;
- }
- }
-
- return (status);
-}
-
-//----------------------------------------------------------------------------
-//
-// kgsl_hal_getchipid
-//
-// The proper platform method, build from RBBM_PERIPHIDx and RBBM_PATCH_RELEASE
-//
-KGSLHAL_API gsl_chipid_t
-kgsl_hal_getchipid(gsl_deviceid_t device_id)
-{
- gsl_device_t *device = &gsl_driver.device[device_id-1];
- gsl_chipid_t chipid;
- unsigned int coreid, majorid, minorid, patchid, revid;
-
- // YDX
- device->ftbl.device_regread(device, mmRBBM_PERIPHID1, &coreid);
- coreid &= 0xF;
-
- // 2.
- device->ftbl.device_regread(device, mmRBBM_PERIPHID2, &majorid);
- majorid = (majorid >> 4) & 0xF;
-
- device->ftbl.device_regread(device, mmRBBM_PATCH_RELEASE, &revid);
-
- // 2.
- minorid = ((revid >> 0) & 0xFF); // this is a 16bit field, but extremely unlikely it would ever get this high
-
- // 1
- patchid = ((revid >> 16) & 0xFF);
-
- chipid = ((coreid << 24) | (majorid << 16) | (minorid << 8) | (patchid << 0));
-
- return (chipid);
-}
-
-//----------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_getplatformtype(char *platform)
-{
- if (gsl_driver.hal)
- {
- kos_strcpy(platform, GSL_HAL_PLATFORM);
- return (GSL_SUCCESS);
- }
- else
- {
- return (GSL_FAILURE_NOTINITIALIZED);
- }
-}
-
-//---------------------------------------------------------------------------
-
-KGSLHAL_API int
-kgsl_hal_setpowerstate(gsl_deviceid_t device_id, int state, unsigned int value)
-{
- gsl_device_t *device = &gsl_driver.device[device_id-1];
- struct clk *gpu_clk = 0;
- struct clk *garb_clk = clk_get(0, "garb_clk");
- struct clk *emi_garb_clk = clk_get(0, "emi_garb_clk");
-
- // unreferenced formal parameters
- (void) value;
-
- switch (device_id)
- {
- case GSL_DEVICE_G12:
- gpu_clk = clk_get(0, "gpu2d_clk");
- break;
- case GSL_DEVICE_YAMATO:
- gpu_clk = clk_get(0, "gpu3d_clk");
- break;
- default:
- return (GSL_FAILURE_DEVICEERROR);
- }
-
- if (!gpu_clk)
- return (GSL_FAILURE_DEVICEERROR);
-
- switch (state)
- {
- case GSL_PWRFLAGS_CLK_ON:
- break;
- case GSL_PWRFLAGS_POWER_ON:
- clk_enable(gpu_clk);
- clk_enable(garb_clk);
- clk_enable(emi_garb_clk);
- kgsl_device_autogate_init(&gsl_driver.device[device_id-1]);
- break;
- case GSL_PWRFLAGS_CLK_OFF:
- break;
- case GSL_PWRFLAGS_POWER_OFF:
- if (device->ftbl.device_idle(device, GSL_TIMEOUT_DEFAULT) != GSL_SUCCESS)
- {
- return (GSL_FAILURE_DEVICEERROR);
- }
- kgsl_device_autogate_exit(&gsl_driver.device[device_id-1]);
- clk_disable(gpu_clk);
- clk_disable(garb_clk);
- clk_disable(emi_garb_clk);
- break;
- default:
- break;
- }
-
- return (GSL_SUCCESS);
-}
-
-KGSLHAL_API int kgsl_clock(gsl_deviceid_t dev, int enable)
-{
- struct clk *gpu_clk;
- struct clk *garb_clk = clk_get(0, "garb_clk");
- struct clk *emi_garb_clk = clk_get(0, "emi_garb_clk");
-
- switch (dev)
- {
- case GSL_DEVICE_G12:
- gpu_clk = clk_get(0, "gpu2d_clk");
- break;
- case GSL_DEVICE_YAMATO:
- gpu_clk = clk_get(0, "gpu3d_clk");
- break;
- default:
- printk(KERN_ERR "GPU device %d is invalid!\n", dev);
- return (GSL_FAILURE_DEVICEERROR);
- }
-
- if (IS_ERR(gpu_clk)) {
- printk(KERN_ERR "%s: GPU clock get failed!\n", __func__);
- return (GSL_FAILURE_DEVICEERROR);
- }
-
- if (enable) {
- clk_enable(gpu_clk);
- clk_enable(garb_clk);
- clk_enable(emi_garb_clk);
- } else {
- clk_disable(gpu_clk);
- clk_disable(garb_clk);
- clk_disable(emi_garb_clk);
- }
-
- return (GSL_SUCCESS);
-}
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.c b/drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.c
deleted file mode 100644
index 93fab327a83..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- */
-
-#include "kos_libapi.h"
-
-//
-// Return the maximum amount of memory that can be allocated to the Z430. This number
-// will be constrained to 2MB as a minimum and the original hardcoded value for the caller
-// as a maximum. If the return value is outside of this range, then the original value in
-// the caller will be used. For this reason, returning 0 is used to signify to use the
-// original value as the default.
-//
-KOS_DLLEXPORT unsigned long kgsl_get_z430_memory_amount(void)
-{
- return(0);
-}
diff --git a/drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.h b/drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.h
deleted file mode 100644
index e68387f1609..00000000000
--- a/drivers/mxc/amd-gpu/platform/hal/MX51/memcfg/gsl_memcfg.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices nor
- * the names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GSL_MEMCFG_H
-#define GSL_MEMCFG_H
-
-//
-// Return the maximum amount of memory that can be allocated to the Z430. This number
-// will be constrained to 2MB as a minimum and the original hardcoded value for the caller
-// as a maximum. If the return value is outside of this range, then the original value in
-// the caller will be used. For this reason, returning 0 is used to signify to use the
-// original value as the default.
-//
-KOS_DLLEXPORT unsigned long kgsl_get_z430_memory_amount(void);
-#endif
diff --git a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c
new file mode 100644
index 00000000000..45632d8f868
--- /dev/null
+++ b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_hal.c
@@ -0,0 +1,570 @@
+/* Copyright (c) 2008-2010, Advanced Micro Devices. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ *
+ */
+
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+#include "gsl_hal.h"
+#include "gsl_halconfig.h"
+#include "gsl_linux_map.h"
+
+#include <linux/clk.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/vmalloc.h>
+
+#include <asm/atomic.h>
+#include <linux/uaccess.h>
+#include <asm/tlbflush.h>
+#include <asm/cacheflush.h>
+
+#define GSL_HAL_MEM1 0
+#define GSL_HAL_MEM2 1
+#define GSL_HAL_MEM3 2
+
+/* #define GSL_HAL_DEBUG */
+
+typedef struct _gsl_hal_t {
+ gsl_memregion_t z160_regspace;
+ gsl_memregion_t z430_regspace;
+ gsl_memregion_t memchunk;
+ gsl_memregion_t memspace[GSL_SHMEM_MAX_APERTURES];
+ unsigned int has_z160;
+ unsigned int has_z430;
+} gsl_hal_t;
+
+extern phys_addr_t gpu_2d_regbase;
+extern int gpu_2d_regsize;
+extern phys_addr_t gpu_3d_regbase;
+extern int gpu_3d_regsize;
+extern int gmem_size;
+extern phys_addr_t gpu_reserved_mem;
+extern int gpu_reserved_mem_size;
+
+
+KGSLHAL_API int
+kgsl_hal_allocphysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[])
+{
+ /* allocate physically contiguous memory */
+
+ int i;
+ void *va;
+
+ va = gsl_linux_map_alloc(virtaddr, numpages*PAGE_SIZE);
+
+ if (!va)
+ return GSL_FAILURE_OUTOFMEM;
+
+ for (i = 0; i < numpages; i++) {
+ scattergatterlist[i] = page_to_phys(vmalloc_to_page(va));
+ va += PAGE_SIZE;
+ }
+
+ return GSL_SUCCESS;
+}
+
+/* --------------------------------------------------------------------------- */
+
+KGSLHAL_API int
+kgsl_hal_freephysical(unsigned int virtaddr, unsigned int numpages, unsigned int scattergatterlist[])
+{
+ /* free physical memory */
+
+ gsl_linux_map_free(virtaddr);
+
+ return GSL_SUCCESS;
+}
+
+/* ---------------------------------------------------------------------------- */
+
+KGSLHAL_API int
+kgsl_hal_init(void)
+{
+ gsl_hal_t *hal;
+ unsigned long totalsize, mem1size;
+ unsigned int va, pa;
+
+ if (gsl_driver.hal) {
+ return GSL_FAILURE_ALREADYINITIALIZED;
+ }
+
+ gsl_driver.hal = (void *)kos_malloc(sizeof(gsl_hal_t));
+
+ if (!gsl_driver.hal) {
+ return GSL_FAILURE_OUTOFMEM;
+ }
+
+ kos_memset(gsl_driver.hal, 0, sizeof(gsl_hal_t));
+
+
+ /* overlay structure on hal memory */
+ hal = (gsl_hal_t *) gsl_driver.hal;
+
+ if (gpu_3d_regbase && gpu_3d_regsize) {
+ hal->has_z430 = 1;
+ } else {
+ hal->has_z430 = 0;
+ }
+
+ if (gpu_2d_regbase && gpu_2d_regsize) {
+ hal->has_z160 = 1;
+ } else {
+ hal->has_z160 = 0;
+ }
+
+ /* setup register space */
+ if (hal->has_z430) {
+ hal->z430_regspace.mmio_phys_base = gpu_3d_regbase;
+ hal->z430_regspace.sizebytes = gpu_3d_regsize;
+ hal->z430_regspace.mmio_virt_base = (unsigned char *)ioremap(hal->z430_regspace.mmio_phys_base, hal->z430_regspace.sizebytes);
+
+ if (hal->z430_regspace.mmio_virt_base == NULL) {
+ return GSL_FAILURE_SYSTEMERROR;
+ }
+
+#ifdef GSL_HAL_DEBUG
+ printk(KERN_INFO "%s: hal->z430_regspace.mmio_phys_base = 0x%p\n", __func__, (void *)hal->z430_regspace.mmio_phys_base);
+ printk(KERN_INFO "%s: hal->z430_regspace.mmio_virt_base = 0x%p\n", __func__, (void *)hal->z430_regspace.mmio_virt_base);
+ printk(KERN_INFO "%s: hal->z430_regspace.sizebytes = 0x%08x\n", __func__, hal->z430_regspace.sizebytes);
+#endif
+ }
+
+ if (hal->has_z160) {
+ hal->z160_regspace.mmio_phys_base = gpu_2d_regbase;
+ hal->z160_regspace.sizebytes = gpu_2d_regsize;
+ hal->z160_regspace.mmio_virt_base = (unsigned char *)ioremap(hal->z160_regspace.mmio_phys_base, hal->z160_regspace.sizebytes);
+
+ if (hal->z160_regspace.mmio_virt_base == NULL) {
+ return GSL_FAILURE_SYSTEMERROR;
+ }
+
+#ifdef GSL_HAL_DEBUG
+ printk(KERN_INFO "%s: hal->z160_regspace.mmio_phys_base = 0x%p\n", __func__, (void *)hal->z160_regspace.mmio_phys_base);
+ printk(KERN_INFO "%s: hal->z160_regspace.mmio_virt_base = 0x%p\n", __func__, (void *)hal->z160_regspace.mmio_virt_base);
+ printk(KERN_INFO "%s: hal->z160_regspace.sizebytes = 0x%08x\n", __func__, hal->z160_regspace.sizebytes);
+#endif
+ }
+
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ totalsize = GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS;
+ mem1size = GSL_HAL_SHMEM_SIZE_EMEM1;
+ if (gpu_reserved_mem && gpu_reserved_mem_size >= totalsize) {
+ pa = gpu_reserved_mem;
+ va = (unsigned int)ioremap(gpu_reserved_mem, totalsize);
+ } else {
+ va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL);
+ }
+#else
+ if (gpu_reserved_mem && gpu_reserved_mem_size >= SZ_8M) {
+ totalsize = gpu_reserved_mem_size;
+ pa = gpu_reserved_mem;
+ va = (unsigned int)ioremap(gpu_reserved_mem, gpu_reserved_mem_size);
+ } else {
+ gpu_reserved_mem = 0;
+ totalsize = GSL_HAL_SHMEM_SIZE_EMEM1 + GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS;
+ va = (unsigned int)dma_alloc_coherent(0, totalsize, (dma_addr_t *)&pa, GFP_DMA | GFP_KERNEL);
+ }
+ mem1size = totalsize - (GSL_HAL_SHMEM_SIZE_EMEM2 + GSL_HAL_SHMEM_SIZE_PHYS);
+#endif
+
+ if (va) {
+ kos_memset((void *)va, 0, totalsize);
+
+ hal->memchunk.mmio_virt_base = (void *)va;
+ hal->memchunk.mmio_phys_base = pa;
+ hal->memchunk.sizebytes = totalsize;
+
+#ifdef GSL_HAL_DEBUG
+ printk(KERN_INFO "%s: hal->memchunk.mmio_phys_base = 0x%p\n", __func__, (void *)hal->memchunk.mmio_phys_base);
+ printk(KERN_INFO "%s: hal->memchunk.mmio_virt_base = 0x%p\n", __func__, (void *)hal->memchunk.mmio_virt_base);
+ printk(KERN_INFO "%s: hal->memchunk.sizebytes = 0x%08x\n", __func__, hal->memchunk.sizebytes);
+#endif
+
+ hal->memspace[GSL_HAL_MEM2].mmio_virt_base = (void *) va;
+ hal->memspace[GSL_HAL_MEM2].gpu_base = pa;
+ hal->memspace[GSL_HAL_MEM2].sizebytes = GSL_HAL_SHMEM_SIZE_EMEM2;
+ va += GSL_HAL_SHMEM_SIZE_EMEM2;
+ pa += GSL_HAL_SHMEM_SIZE_EMEM2;
+
+#ifdef GSL_HAL_DEBUG
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].gpu_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM2].gpu_base);
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].mmio_virt_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM2].mmio_virt_base);
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM2].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM2].sizebytes);
+#endif
+
+ hal->memspace[GSL_HAL_MEM3].mmio_virt_base = (void *) va;
+ hal->memspace[GSL_HAL_MEM3].gpu_base = pa;
+ hal->memspace[GSL_HAL_MEM3].sizebytes = GSL_HAL_SHMEM_SIZE_PHYS;
+ va += GSL_HAL_SHMEM_SIZE_PHYS;
+ pa += GSL_HAL_SHMEM_SIZE_PHYS;
+
+#ifdef GSL_HAL_DEBUG
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].gpu_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM3].gpu_base);
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].mmio_virt_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM3].mmio_virt_base);
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM3].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM3].sizebytes);
+#endif
+
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ gsl_linux_map_init();
+ hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *)GSL_LINUX_MAP_RANGE_START;
+ hal->memspace[GSL_HAL_MEM1].gpu_base = GSL_LINUX_MAP_RANGE_START;
+ hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size;
+#else
+ hal->memspace[GSL_HAL_MEM1].mmio_virt_base = (void *) va;
+ hal->memspace[GSL_HAL_MEM1].gpu_base = pa;
+ hal->memspace[GSL_HAL_MEM1].sizebytes = mem1size;
+#endif
+
+#ifdef GSL_HAL_DEBUG
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].gpu_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM1].gpu_base);
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].mmio_virt_base = 0x%p\n", __func__, (void *)hal->memspace[GSL_HAL_MEM1].mmio_virt_base);
+ printk(KERN_INFO "%s: hal->memspace[GSL_HAL_MEM1].sizebytes = 0x%08x\n", __func__, hal->memspace[GSL_HAL_MEM1].sizebytes);
+#endif
+ } else {
+ kgsl_hal_close();
+ return GSL_FAILURE_SYSTEMERROR;
+ }
+
+ return GSL_SUCCESS;
+}
+
+/* ---------------------------------------------------------------------------- */
+
+KGSLHAL_API int
+kgsl_hal_close(void)
+{
+ gsl_hal_t *hal;
+
+ if (gsl_driver.hal) {
+ /* overlay structure on hal memory */
+ hal = (gsl_hal_t *) gsl_driver.hal;
+
+ /* unmap registers */
+ if (hal->has_z430 && hal->z430_regspace.mmio_virt_base) {
+ iounmap(hal->z430_regspace.mmio_virt_base);
+ }
+
+ if (hal->has_z160 && hal->z160_regspace.mmio_virt_base) {
+ iounmap(hal->z160_regspace.mmio_virt_base);
+ }
+
+ /* free physical block */
+ if (hal->memchunk.mmio_virt_base && gpu_reserved_mem) {
+ iounmap(hal->memchunk.mmio_virt_base);
+ } else {
+ dma_free_coherent(0, hal->memchunk.sizebytes, hal->memchunk.mmio_virt_base, hal->memchunk.mmio_phys_base);
+ }
+
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ gsl_linux_map_destroy();
+#endif
+
+ /* release hal struct */
+ kos_memset(hal, 0, sizeof(gsl_hal_t));
+ kos_free(gsl_driver.hal);
+ gsl_driver.hal = NULL;
+ }
+
+ return GSL_SUCCESS;
+}
+
+/* ---------------------------------------------------------------------------- */
+
+KGSLHAL_API int
+kgsl_hal_getshmemconfig(gsl_shmemconfig_t *config)
+{
+ int status = GSL_FAILURE_DEVICEERROR;
+ gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
+
+ kos_memset(config, 0, sizeof(gsl_shmemconfig_t));
+
+ if (hal) {
+ config->numapertures = GSL_SHMEM_MAX_APERTURES;
+
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ config->apertures[0].id = GSL_APERTURE_MMU;
+#else
+ config->apertures[0].id = GSL_APERTURE_EMEM;
+#endif
+ config->apertures[0].channel = GSL_CHANNEL_1;
+ config->apertures[0].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM1].mmio_virt_base;
+ config->apertures[0].gpubase = hal->memspace[GSL_HAL_MEM1].gpu_base;
+ config->apertures[0].sizebytes = hal->memspace[GSL_HAL_MEM1].sizebytes;
+
+ config->apertures[1].id = GSL_APERTURE_EMEM;
+ config->apertures[1].channel = GSL_CHANNEL_2;
+ config->apertures[1].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM2].mmio_virt_base;
+ config->apertures[1].gpubase = hal->memspace[GSL_HAL_MEM2].gpu_base;
+ config->apertures[1].sizebytes = hal->memspace[GSL_HAL_MEM2].sizebytes;
+
+ config->apertures[2].id = GSL_APERTURE_PHYS;
+ config->apertures[2].channel = GSL_CHANNEL_1;
+ config->apertures[2].hostbase = (unsigned int)hal->memspace[GSL_HAL_MEM3].mmio_virt_base;
+ config->apertures[2].gpubase = hal->memspace[GSL_HAL_MEM3].gpu_base;
+ config->apertures[2].sizebytes = hal->memspace[GSL_HAL_MEM3].sizebytes;
+
+ status = GSL_SUCCESS;
+ }
+
+ return status;
+}
+
+/* ---------------------------------------------------------------------------- */
+
+KGSLHAL_API int
+kgsl_hal_getdevconfig(gsl_deviceid_t device_id, gsl_devconfig_t *config)
+{
+ int status = GSL_FAILURE_DEVICEERROR;
+ gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
+
+ kos_memset(config, 0, sizeof(gsl_devconfig_t));
+
+ if (hal) {
+ switch (device_id) {
+ case GSL_DEVICE_YAMATO:
+ {
+ if (hal->has_z430) {
+ mh_mmu_config_u mmu_config = {0};
+
+ config->gmemspace.gpu_base = 0;
+ config->gmemspace.mmio_virt_base = 0;
+ config->gmemspace.mmio_phys_base = 0;
+ if (gmem_size) {
+ config->gmemspace.sizebytes = gmem_size;
+ } else {
+ config->gmemspace.sizebytes = 0;
+ }
+
+ config->regspace.gpu_base = 0;
+ config->regspace.mmio_virt_base = (unsigned char *)hal->z430_regspace.mmio_virt_base;
+ config->regspace.mmio_phys_base = (unsigned int) hal->z430_regspace.mmio_phys_base;
+ config->regspace.sizebytes = GSL_HAL_SIZE_REG_YDX;
+
+ mmu_config.f.mmu_enable = 1;
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ mmu_config.f.split_mode_enable = 0;
+ mmu_config.f.rb_w_clnt_behavior = 1;
+ mmu_config.f.cp_w_clnt_behavior = 1;
+ mmu_config.f.cp_r0_clnt_behavior = 1;
+ mmu_config.f.cp_r1_clnt_behavior = 1;
+ mmu_config.f.cp_r2_clnt_behavior = 1;
+ mmu_config.f.cp_r3_clnt_behavior = 1;
+ mmu_config.f.cp_r4_clnt_behavior = 1;
+ mmu_config.f.vgt_r0_clnt_behavior = 1;
+ mmu_config.f.vgt_r1_clnt_behavior = 1;
+ mmu_config.f.tc_r_clnt_behavior = 1;
+ mmu_config.f.pa_w_clnt_behavior = 1;
+#endif /* GSL_MMU_TRANSLATION_ENABLED */
+
+ config->mmu_config = mmu_config.val;
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ config->va_base = hal->memspace[GSL_HAL_MEM1].gpu_base;
+ config->va_range = hal->memspace[GSL_HAL_MEM1].sizebytes;
+#else
+ config->va_base = 0x00000000;
+ config->va_range = 0x00000000;
+#endif /* GSL_MMU_TRANSLATION_ENABLED */
+
+ /* turn off memory protection unit by setting acceptable physical address range to include all pages */
+ config->mpu_base = 0x00000000; /* hal->memchunk.mmio_virt_base; */
+ config->mpu_range = 0xFFFFF000; /* hal->memchunk.sizebytes; */
+ status = GSL_SUCCESS;
+ }
+ break;
+ }
+
+ case GSL_DEVICE_G12:
+ {
+ mh_mmu_config_u mmu_config = {0};
+
+ config->regspace.gpu_base = 0;
+ config->regspace.mmio_virt_base = (unsigned char *)hal->z160_regspace.mmio_virt_base;
+ config->regspace.mmio_phys_base = (unsigned int) hal->z160_regspace.mmio_phys_base;
+ config->regspace.sizebytes = GSL_HAL_SIZE_REG_G12;
+
+ mmu_config.f.mmu_enable = 1;
+
+#ifdef GSL_MMU_TRANSLATION_ENABLED
+ config->mmu_config = 0x00555551;
+ config->va_base = hal->memspace[GSL_HAL_MEM1].gpu_base;
+ config->va_range = hal->memspace[GSL_HAL_MEM1].sizebytes;
+#else
+ config->mmu_config = mmu_config.val;
+ config->va_base = 0x00000000;
+ config->va_range = 0x00000000;
+#endif /* GSL_MMU_TRANSLATION_ENABLED */
+
+ config->mpu_base = 0x00000000; /* (unsigned int) hal->memchunk.mmio_virt_base; */
+ config->mpu_range = 0xFFFFF000; /* hal->memchunk.sizebytes; */
+
+ status = GSL_SUCCESS;
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ return status;
+}
+
+/*----------------------------------------------------------------------------
+ * kgsl_hal_getchipid
+ *
+ * The proper platform method, build from RBBM_PERIPHIDx and RBBM_PATCH_RELEASE
+ *----------------------------------------------------------------------------
+ */
+KGSLHAL_API gsl_chipid_t
+kgsl_hal_getchipid(gsl_deviceid_t device_id)
+{
+ gsl_hal_t *hal = (gsl_hal_t *) gsl_driver.hal;
+ gsl_device_t *device = &gsl_driver.device[device_id-1];
+ gsl_chipid_t chipid = 0;
+ unsigned int coreid, majorid, minorid, patchid, revid;
+
+ if (hal->has_z430 && (device_id == GSL_DEVICE_YAMATO)) {
+ device->ftbl.device_regread(device, mmRBBM_PERIPHID1, &coreid);
+ coreid &= 0xF;
+
+ device->ftbl.device_regread(device, mmRBBM_PERIPHID2, &majorid);
+ majorid = (majorid >> 4) & 0xF;
+
+ device->ftbl.device_regread(device, mmRBBM_PATCH_RELEASE, &revid);
+
+ minorid = ((revid >> 0) & 0xFF); /* this is a 16bit field, but extremely unlikely it would ever get this high */
+
+ patchid = ((revid >> 16) & 0xFF);
+
+ chipid = ((coreid << 24) | (majorid << 16) | (minorid << 8) | (patchid << 0));
+ }
+
+ return chipid;
+}
+
+/* --------------------------------------------------------------------------- */
+
+KGSLHAL_API int
+kgsl_hal_setpowerstate(gsl_deviceid_t device_id, int state, unsigned int value)
+{
+ gsl_device_t *device = &gsl_driver.device[device_id-1];
+ struct clk *gpu_clk = NULL;
+ struct clk *garb_clk = NULL;
+ struct clk *emi_garb_clk = NULL;
+
+ /* unreferenced formal parameters */
+ (void) value;
+
+ switch (device_id) {
+ case GSL_DEVICE_G12:
+ gpu_clk = clk_get(0, "gpu2d_clk");
+ break;
+ case GSL_DEVICE_YAMATO:
+ gpu_clk = clk_get(0, "gpu3d_clk");
+ garb_clk = clk_get(0, "garb_clk");
+ emi_garb_clk = clk_get(0, "emi_garb_clk");
+ break;
+ default:
+ return GSL_FAILURE_DEVICEERROR;
+ }
+
+ if (!gpu_clk) {
+ return GSL_FAILURE_DEVICEERROR;
+ }
+
+ switch (state) {
+ case GSL_PWRFLAGS_CLK_ON:
+ break;
+ case GSL_PWRFLAGS_POWER_ON:
+ clk_enable(gpu_clk);
+ if (garb_clk) {
+ clk_enable(garb_clk);
+ }
+ if (emi_garb_clk) {
+ clk_enable(emi_garb_clk);
+ }
+ kgsl_device_autogate_init(&gsl_driver.device[device_id-1]);
+ break;
+ case GSL_PWRFLAGS_CLK_OFF:
+ break;
+ case GSL_PWRFLAGS_POWER_OFF:
+ if (device->ftbl.device_idle(device, GSL_TIMEOUT_DEFAULT) != GSL_SUCCESS) {
+ return GSL_FAILURE_DEVICEERROR;
+ }
+ kgsl_device_autogate_exit(&gsl_driver.device[device_id-1]);
+ clk_disable(gpu_clk);
+ if (garb_clk) {
+ clk_disable(garb_clk);
+ }
+ if (emi_garb_clk) {
+ clk_disable(emi_garb_clk);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return GSL_SUCCESS;
+}
+
+KGSLHAL_API int kgsl_clock(gsl_deviceid_t dev, int enable)
+{
+ struct clk *gpu_clk = NULL;
+ struct clk *garb_clk = NULL;
+ struct clk *emi_garb_clk = NULL;
+
+ switch (dev) {
+ case GSL_DEVICE_G12:
+ gpu_clk = clk_get(0, "gpu2d_clk");
+ break;
+ case GSL_DEVICE_YAMATO:
+ gpu_clk = clk_get(0, "gpu3d_clk");
+ garb_clk = clk_get(0, "garb_clk");
+ emi_garb_clk = clk_get(0, "emi_garb_clk");
+ break;
+ default:
+ printk(KERN_ERR "GPU device %d is invalid!\n", dev);
+ return GSL_FAILURE_DEVICEERROR;
+ }
+
+ if (IS_ERR(gpu_clk)) {
+ printk(KERN_ERR "%s: GPU clock get failed!\n", __func__);
+ return GSL_FAILURE_DEVICEERROR;
+ }
+
+ if (enable) {
+ clk_enable(gpu_clk);
+ if (garb_clk) {
+ clk_enable(garb_clk);
+ }
+ if (emi_garb_clk) {
+ clk_enable(emi_garb_clk);
+ }
+ } else {
+ clk_disable(gpu_clk);
+ if (garb_clk) {
+ clk_disable(garb_clk);
+ }
+ if (emi_garb_clk) {
+ clk_disable(emi_garb_clk);
+ }
+ }
+
+ return GSL_SUCCESS;
+}
diff --git a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_kmod.c b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_kmod.c
index 30f783e1cf1..6aaaa745a84 100644
--- a/drivers/mxc/amd-gpu/platform/hal/linux/gsl_kmod.c
+++ b/drivers/mxc/amd-gpu/platform/hal/linux/gsl_kmod.c
@@ -57,9 +57,7 @@ static int gsl_kmod_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
static int gsl_kmod_open(struct inode *inode, struct file *fd);
static int gsl_kmod_release(struct inode *inode, struct file *fd);
static irqreturn_t z160_irq_handler(int irq, void *dev_id);
-#if defined(MX51)
static irqreturn_t z430_irq_handler(int irq, void *dev_id);
-#endif
static int gsl_kmod_major;
static struct class *gsl_kmod_class;
@@ -753,13 +751,11 @@ static irqreturn_t z160_irq_handler(int irq, void *dev_id)
return IRQ_HANDLED;
}
-#if defined(MX51)
static irqreturn_t z430_irq_handler(int irq, void *dev_id)
{
kgsl_intr_isr();
return IRQ_HANDLED;
}
-#endif
static int gpu_probe(struct platform_device *pdev)
{
@@ -817,18 +813,21 @@ static int gpu_probe(struct platform_device *pdev)
goto kgsl_driver_init_error;
}
-#if defined(MX51)
- if (request_irq(gpu_3d_irq, z430_irq_handler, 0, "ydx", NULL) < 0)
+ if (gpu_3d_irq > 0)
{
- printk(KERN_ERR "%s: request_irq error\n", __func__);
- goto request_irq_error;
+ if (request_irq(gpu_3d_irq, z430_irq_handler, 0, "ydx", NULL) < 0) {
+ printk(KERN_ERR "%s: request_irq error\n", __func__);
+ gpu_3d_irq = 0;
+ goto request_irq_error;
+ }
}
-#endif
- if (request_irq(gpu_2d_irq, z160_irq_handler, 0, "g12", NULL) < 0)
+ if (gpu_2d_irq > 0)
{
- printk(KERN_ERR "2D Acceleration Enabled, OpenVG Disabled!\n");
- gpu_2d_irq = 0;
+ if (request_irq(gpu_2d_irq, z160_irq_handler, 0, "g12", NULL) < 0) {
+ printk(KERN_ERR "2D Acceleration Enabled, OpenVG Disabled!\n");
+ gpu_2d_irq = 0;
+ }
}
gsl_kmod_major = register_chrdev(0, "gsl_kmod", &gsl_kmod_fops);
@@ -879,7 +878,7 @@ static int gpu_remove(struct platform_device *pdev)
device_destroy(gsl_kmod_class, MKDEV(gsl_kmod_major, 0));
class_destroy(gsl_kmod_class);
unregister_chrdev(gsl_kmod_major, "gsl_kmod");
-#if defined(MX51)
+
if (gpu_3d_irq)
{
free_irq(gpu_3d_irq, NULL);
@@ -889,12 +888,7 @@ static int gpu_remove(struct platform_device *pdev)
{
free_irq(gpu_2d_irq, NULL);
}
-#elif defined(MX35)
- if (gpu_2d_irq)
- {
- free_irq(gpu_2d_irq, NULL);
- }
-#endif
+
kgsl_driver_close();
return 0;
}
@@ -965,9 +959,5 @@ static void __exit gsl_kmod_exit(void)
module_init(gsl_kmod_init);
module_exit(gsl_kmod_exit);
MODULE_AUTHOR("Advanced Micro Devices");
-#if defined(MX51)
-MODULE_DESCRIPTION("AMD 2D/3D graphics core driver for i.MX51");
-#elif defined(MX35)
-MODULE_DESCRIPTION("AMD 2D graphics core driver for i.MX35");
-#endif
+MODULE_DESCRIPTION("AMD graphics core driver for i.MX");
MODULE_LICENSE("GPL v2");