aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/emgd/emgd/video/topaz/topaz_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/emgd/emgd/video/topaz/topaz_init.c')
-rw-r--r--drivers/gpu/drm/emgd/emgd/video/topaz/topaz_init.c1093
1 files changed, 0 insertions, 1093 deletions
diff --git a/drivers/gpu/drm/emgd/emgd/video/topaz/topaz_init.c b/drivers/gpu/drm/emgd/emgd/video/topaz/topaz_init.c
deleted file mode 100644
index 1a1435424a7b..000000000000
--- a/drivers/gpu/drm/emgd/emgd/video/topaz/topaz_init.c
+++ /dev/null
@@ -1,1093 +0,0 @@
-/* -*- pse-c -*-
- *-----------------------------------------------------------------------------
- * Filename: topaz_init.c
- * $Revision: 1.19 $
- *-----------------------------------------------------------------------------
- * Copyright © 2002-2010, Intel Corporation.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
- *
- *-----------------------------------------------------------------------------
- * Description:
- *
- *-----------------------------------------------------------------------------
- */
-
-#include <io.h>
-#include <pci.h>
-#include <memmap.h>
-#include <sched.h>
-
-#include <igd.h>
-#include <igd_errno.h>
-#include <igd_init.h>
-
-#include <context.h>
-#include <intelpci.h>
-#include <general.h>
-#include <utils.h>
-#include <topaz.h>
-
-#include <plb/regs.h>
-#include <plb/context.h>
-
-#include "topaz_hdr.h"
-
-//#include <interrupt.h>
-//#include <os/interrupt.h>
-
-#include <drm/drm.h>
-#include <drm_emgd_private.h>
-
-/* DDK specific DRM device */
-extern struct drm_device *gpDrmDevice;
-
-unsigned char *base_firmware_address;
-
-extern int process_encode_mtx_messages(igd_context_t *context,
- unsigned long *mtx_buf,
- unsigned long size);
-
-static int reg_ready_tnc(igd_context_t *,
- unsigned long ,
- unsigned long ,
- unsigned long );
-
-static int write_firmware(igd_context_t *,
- unsigned long ,
- unsigned long ,
- unsigned long *,
- unsigned long );
-
-static int upload_firmware(igd_context_t *, enc_fw_info_t *);
-
-void topaz_write_core_reg(igd_context_t *,
- unsigned long,
- unsigned long);
-
-void topaz_read_core_reg(igd_context_t *,
- unsigned long,
- unsigned long*);
-
-void get_mtx_control_from_dash(igd_context_t *context);
-
-void release_mtx_control_from_dash(igd_context_t *context);
-
-/* According to UMG code this define is important */
-#define RAM_SIZE (1024 * 24)
-
-/* register default values */
-static unsigned long topaz_def_regs[184][3] = {
- {MVEA_BASE, 0x00000000, 0x00000000},
- {MVEA_BASE, 0x00000004, 0x00000400},
- {MVEA_BASE, 0x00000008, 0x00000000},
- {MVEA_BASE, 0x0000000C, 0x00000000},
- {MVEA_BASE, 0x00000010, 0x00000000},
- {MVEA_BASE, 0x00000014, 0x00000000},
- {MVEA_BASE, 0x00000018, 0x00000000},
- {MVEA_BASE, 0x0000001C, 0x00000000},
- {MVEA_BASE, 0x00000020, 0x00000120},
- {MVEA_BASE, 0x00000024, 0x00000000},
- {MVEA_BASE, 0x00000028, 0x00000000},
- {MVEA_BASE, 0x00000100, 0x00000000},
- {MVEA_BASE, 0x00000104, 0x00000000},
- {MVEA_BASE, 0x00000108, 0x00000000},
- {MVEA_BASE, 0x0000010C, 0x00000000},
- {MVEA_BASE, 0x0000011C, 0x00000001},
- {MVEA_BASE, 0x0000012C, 0x00000000},
- {MVEA_BASE, 0x00000180, 0x00000000},
- {MVEA_BASE, 0x00000184, 0x00000000},
- {MVEA_BASE, 0x00000188, 0x00000000},
- {MVEA_BASE, 0x0000018C, 0x00000000},
- {MVEA_BASE, 0x00000190, 0x00000000},
- {MVEA_BASE, 0x00000194, 0x00000000},
- {MVEA_BASE, 0x00000198, 0x00000000},
- {MVEA_BASE, 0x0000019C, 0x00000000},
- {MVEA_BASE, 0x000001A0, 0x00000000},
- {MVEA_BASE, 0x000001A4, 0x00000000},
- {MVEA_BASE, 0x000001A8, 0x00000000},
- {MVEA_BASE, 0x000001AC, 0x00000000},
- {MVEA_BASE, 0x000001B0, 0x00000000},
- {MVEA_BASE, 0x000001B4, 0x00000000},
- {MVEA_BASE, 0x000001B8, 0x00000000},
- {MVEA_BASE, 0x000001BC, 0x00000000},
- {MVEA_BASE, 0x000001F8, 0x00000000},
- {MVEA_BASE, 0x000001FC, 0x00000000},
- {MVEA_BASE, 0x00000200, 0x00000000},
- {MVEA_BASE, 0x00000204, 0x00000000},
- {MVEA_BASE, 0x00000208, 0x00000000},
- {MVEA_BASE, 0x0000020C, 0x00000000},
- {MVEA_BASE, 0x00000210, 0x00000000},
- {MVEA_BASE, 0x00000220, 0x00000001},
- {MVEA_BASE, 0x00000224, 0x0000001F},
- {MVEA_BASE, 0x00000228, 0x00000100},
- {MVEA_BASE, 0x0000022C, 0x00001F00},
- {MVEA_BASE, 0x00000230, 0x00000101},
- {MVEA_BASE, 0x00000234, 0x00001F1F},
- {MVEA_BASE, 0x00000238, 0x00001F01},
- {MVEA_BASE, 0x0000023C, 0x0000011F},
- {MVEA_BASE, 0x00000240, 0x00000200},
- {MVEA_BASE, 0x00000244, 0x00001E00},
- {MVEA_BASE, 0x00000248, 0x00000002},
- {MVEA_BASE, 0x0000024C, 0x0000001E},
- {MVEA_BASE, 0x00000250, 0x00000003},
- {MVEA_BASE, 0x00000254, 0x0000001D},
- {MVEA_BASE, 0x00000258, 0x00001F02},
- {MVEA_BASE, 0x0000025C, 0x00000102},
- {MVEA_BASE, 0x00000260, 0x0000011E},
- {MVEA_BASE, 0x00000264, 0x00000000},
- {MVEA_BASE, 0x00000268, 0x00000000},
- {MVEA_BASE, 0x0000026C, 0x00000000},
- {MVEA_BASE, 0x00000270, 0x00000000},
- {MVEA_BASE, 0x00000274, 0x00000000},
- {MVEA_BASE, 0x00000278, 0x00000000},
- {MVEA_BASE, 0x00000280, 0x00008000},
- {MVEA_BASE, 0x00000284, 0x00000000},
- {MVEA_BASE, 0x00000288, 0x00000000},
- {MVEA_BASE, 0x0000028C, 0x00000000},
- {MVEA_BASE, 0x00000314, 0x00000000},
- {MVEA_BASE, 0x00000318, 0x00000000},
- {MVEA_BASE, 0x0000031C, 0x00000000},
- {MVEA_BASE, 0x00000320, 0x00000000},
- {MVEA_BASE, 0x00000324, 0x00000000},
- {MVEA_BASE, 0x00000348, 0x00000000},
- {MVEA_BASE, 0x00000380, 0x00000000},
- {MVEA_BASE, 0x00000384, 0x00000000},
- {MVEA_BASE, 0x00000388, 0x00000000},
- {MVEA_BASE, 0x0000038C, 0x00000000},
- {MVEA_BASE, 0x00000390, 0x00000000},
- {MVEA_BASE, 0x00000394, 0x00000000},
- {MVEA_BASE, 0x00000398, 0x00000000},
- {MVEA_BASE, 0x0000039C, 0x00000000},
- {MVEA_BASE, 0x000003A0, 0x00000000},
- {MVEA_BASE, 0x000003A4, 0x00000000},
- {MVEA_BASE, 0x000003A8, 0x00000000},
- {MVEA_BASE, 0x000003B0, 0x00000000},
- {MVEA_BASE, 0x000003B4, 0x00000000},
- {MVEA_BASE, 0x000003B8, 0x00000000},
- {MVEA_BASE, 0x000003BC, 0x00000000},
- {MVEA_BASE, 0x000003D4, 0x00000000},
- {MVEA_BASE, 0x000003D8, 0x00000000},
- {MVEA_BASE, 0x000003DC, 0x00000000},
- {MVEA_BASE, 0x000003E0, 0x00000000},
- {MVEA_BASE, 0x000003E4, 0x00000000},
- {MVEA_BASE, 0x000003EC, 0x00000000},
- {MVEA_BASE, 0x000002D0, 0x00000000},
- {MVEA_BASE, 0x000002D4, 0x00000000},
- {MVEA_BASE, 0x000002D8, 0x00000000},
- {MVEA_BASE, 0x000002DC, 0x00000000},
- {MVEA_BASE, 0x000002E0, 0x00000000},
- {MVEA_BASE, 0x000002E4, 0x00000000},
- {MVEA_BASE, 0x000002E8, 0x00000000},
- {MVEA_BASE, 0x000002EC, 0x00000000},
- {MVEA_BASE, 0x000002F0, 0x00000000},
- {MVEA_BASE, 0x000002F4, 0x00000000},
- {MVEA_BASE, 0x000002F8, 0x00000000},
- {MVEA_BASE, 0x000002FC, 0x00000000},
- {MVEA_BASE, 0x00000300, 0x00000000},
- {MVEA_BASE, 0x00000304, 0x00000000},
- {MVEA_BASE, 0x00000308, 0x00000000},
- {MVEA_BASE, 0x0000030C, 0x00000000},
- {MVEA_BASE, 0x00000290, 0x00000000},
- {MVEA_BASE, 0x00000294, 0x00000000},
- {MVEA_BASE, 0x00000298, 0x00000000},
- {MVEA_BASE, 0x0000029C, 0x00000000},
- {MVEA_BASE, 0x000002A0, 0x00000000},
- {MVEA_BASE, 0x000002A4, 0x00000000},
- {MVEA_BASE, 0x000002A8, 0x00000000},
- {MVEA_BASE, 0x000002AC, 0x00000000},
- {MVEA_BASE, 0x000002B0, 0x00000000},
- {MVEA_BASE, 0x000002B4, 0x00000000},
- {MVEA_BASE, 0x000002B8, 0x00000000},
- {MVEA_BASE, 0x000002BC, 0x00000000},
- {MVEA_BASE, 0x000002C0, 0x00000000},
- {MVEA_BASE, 0x000002C4, 0x00000000},
- {MVEA_BASE, 0x000002C8, 0x00000000},
- {MVEA_BASE, 0x000002CC, 0x00000000},
- {MVEA_BASE, 0x00000080, 0x00000000},
- {MVEA_BASE, 0x00000084, 0x80705700},
- {MVEA_BASE, 0x00000088, 0x00000000},
- {MVEA_BASE, 0x0000008C, 0x00000000},
- {MVEA_BASE, 0x00000090, 0x00000000},
- {MVEA_BASE, 0x00000094, 0x00000000},
- {MVEA_BASE, 0x00000098, 0x00000000},
- {MVEA_BASE, 0x0000009C, 0x00000000},
- {MVEA_BASE, 0x000000A0, 0x00000000},
- {MVEA_BASE, 0x000000A4, 0x00000000},
- {MVEA_BASE, 0x000000A8, 0x00000000},
- {MVEA_BASE, 0x000000AC, 0x00000000},
- {MVEA_BASE, 0x000000B0, 0x00000000},
- {MVEA_BASE, 0x000000B4, 0x00000000},
- {MVEA_BASE, 0x000000B8, 0x00000000},
- {MVEA_BASE, 0x000000BC, 0x00000000},
- {MVEA_BASE, 0x000000C0, 0x00000000},
- {MVEA_BASE, 0x000000C4, 0x00000000},
- {MVEA_BASE, 0x000000C8, 0x00000000},
- {MVEA_BASE, 0x000000CC, 0x00000000},
- {MVEA_BASE, 0x000000D0, 0x00000000},
- {MVEA_BASE, 0x000000D4, 0x00000000},
- {MVEA_BASE, 0x000000D8, 0x00000000},
- {MVEA_BASE, 0x000000DC, 0x00000000},
- {MVEA_BASE, 0x000000E0, 0x00000000},
- {MVEA_BASE, 0x000000E4, 0x00000000},
- {MVEA_BASE, 0x000000E8, 0x00000000},
- {MVEA_BASE, 0x000000EC, 0x00000000},
- {MVEA_BASE, 0x000000F0, 0x00000000},
- {MVEA_BASE, 0x000000F4, 0x00000000},
- {MVEA_BASE, 0x000000F8, 0x00000000},
- {MVEA_BASE, 0x000000FC, 0x00000000},
- {VLC_BASE, 0x00000000, 0x00000000},
- {VLC_BASE, 0x00000004, 0x00000000},
- {VLC_BASE, 0x00000008, 0x00000000},
- {VLC_BASE, 0x0000000C, 0x00000000},
- {VLC_BASE, 0x00000010, 0x00000000},
- {VLC_BASE, 0x00000014, 0x00000000},
- {VLC_BASE, 0x0000001C, 0x00000000},
- {VLC_BASE, 0x00000020, 0x00000000},
- {VLC_BASE, 0x00000024, 0x00000000},
- {VLC_BASE, 0x0000002C, 0x00000000},
- {VLC_BASE, 0x00000034, 0x00000000},
- {VLC_BASE, 0x00000038, 0x00000000},
- {VLC_BASE, 0x0000003C, 0x00000000},
- {VLC_BASE, 0x00000040, 0x00000000},
- {VLC_BASE, 0x00000044, 0x00000000},
- {VLC_BASE, 0x00000048, 0x00000000},
- {VLC_BASE, 0x0000004C, 0x00000000},
- {VLC_BASE, 0x00000050, 0x00000000},
- {VLC_BASE, 0x00000054, 0x00000000},
- {VLC_BASE, 0x00000058, 0x00000000},
- {VLC_BASE, 0x0000005C, 0x00000000},
- {VLC_BASE, 0x00000060, 0x00000000},
- {VLC_BASE, 0x00000064, 0x00000000},
- {VLC_BASE, 0x00000068, 0x00000000},
- {VLC_BASE, 0x0000006C, 0x00000000},
- {0xffffffff, 0xffffffff, 0xffffffff}
-};
-
-unsigned long ui32H264_MTXTOPAZFWTextSize = 3478;
-unsigned long ui32H264_MTXTOPAZFWDataSize = 4704;
-unsigned long ui32H264_MTXTOPAZFWDataLocation = 0x82883680;
-
-unsigned long ui32H264VBR_MTXTOPAZFWTextSize = 4730;
-unsigned long ui32H264VBR_MTXTOPAZFWDataSize = 3456;
-unsigned long ui32H264VBR_MTXTOPAZFWDataLocation = 0x82884a00;
-
-unsigned long ui32H264CBR_MTXTOPAZFWTextSize = 5084;
-unsigned long ui32H264CBR_MTXTOPAZFWDataSize = 3104;
-unsigned long ui32H264CBR_MTXTOPAZFWDataLocation = 0x82884f80;
-
-unsigned long ui32H263CBR_MTXTOPAZFWTextSize = 4383;
-unsigned long ui32H263CBR_MTXTOPAZFWDataSize = 3808;
-unsigned long ui32H263CBR_MTXTOPAZFWDataLocation = 0x82884480;
-
-unsigned long ui32H263VBR_MTXTOPAZFWTextSize = 4498;
-unsigned long ui32H263VBR_MTXTOPAZFWDataSize = 3680;
-unsigned long ui32H263VBR_MTXTOPAZFWDataLocation = 0x82884680;
-
-unsigned long ui32H263_MTXTOPAZFWTextSize = 3202;
-unsigned long ui32H263_MTXTOPAZFWDataSize = 4976;
-unsigned long ui32H263_MTXTOPAZFWDataLocation = 0x82883240;
-
-unsigned long ui32MPG4CBR_MTXTOPAZFWTextSize = 4403;
-unsigned long ui32MPG4CBR_MTXTOPAZFWDataSize = 3776;
-unsigned long ui32MPG4CBR_MTXTOPAZFWDataLocation = 0x82884500;
-
-unsigned long ui32MPG4VBR_MTXTOPAZFWTextSize = 4519;
-unsigned long ui32MPG4VBR_MTXTOPAZFWDataSize = 3664;
-unsigned long ui32MPG4VBR_MTXTOPAZFWDataLocation = 0x828846c0;
-
-unsigned long ui32MPG4_MTXTOPAZFWTextSize = 3223;
-unsigned long ui32MPG4_MTXTOPAZFWDataSize = 4960;
-unsigned long ui32MPG4_MTXTOPAZFWDataLocation = 0x82883280;
-
-static enc_fw_info_t firmware[10] = {
- { 0,0,0,0,0,0},
- {
- FW_H264_NO_RC,
- &ui32H264_MTXTOPAZFWTextSize,
- &ui32H264_MTXTOPAZFWDataSize,
- &ui32H264_MTXTOPAZFWDataLocation,
- NULL, /*aui32H264_MTXTOPAZFWText,*/
- NULL /*aui32H264_MTXTOPAZFWData*/
- },
- {
- FW_H264_VBR,
- &ui32H264VBR_MTXTOPAZFWTextSize,
- &ui32H264VBR_MTXTOPAZFWDataSize,
- &ui32H264VBR_MTXTOPAZFWDataLocation,
- NULL, /*aui32H264VBR_MTXTOPAZFWText,*/
- NULL /*aui32H264VBR_MTXTOPAZFWData */
- },
- {
- FW_H264_CBR,
- &ui32H264CBR_MTXTOPAZFWTextSize,
- &ui32H264CBR_MTXTOPAZFWDataSize,
- &ui32H264CBR_MTXTOPAZFWDataLocation,
- NULL, /*aui32H264CBR_MTXTOPAZFWText,*/
- NULL /*aui32H264CBR_MTXTOPAZFWData */
- },
- {
- FW_H263_NO_RC,
- &ui32H263_MTXTOPAZFWTextSize,
- &ui32H263_MTXTOPAZFWDataSize,
- &ui32H263_MTXTOPAZFWDataLocation,
- NULL, /*aui32H263_MTXTOPAZFWText,*/
- NULL /*aui32H263_MTXTOPAZFWData*/
- },
- {
- FW_H263_VBR,
- &ui32H263VBR_MTXTOPAZFWTextSize,
- &ui32H263VBR_MTXTOPAZFWDataSize,
- &ui32H263VBR_MTXTOPAZFWDataLocation,
- NULL, /*aui32H263VBR_MTXTOPAZFWText,*/
- NULL /*aui32H263VBR_MTXTOPAZFWData*/
- },
- {
- FW_H263_CBR,
- &ui32H263CBR_MTXTOPAZFWTextSize,
- &ui32H263CBR_MTXTOPAZFWDataSize,
- &ui32H263CBR_MTXTOPAZFWDataLocation,
- NULL, /*aui32H263CBR_MTXTOPAZFWText,*/
- NULL /*aui32H263CBR_MTXTOPAZFWData*/
- },
- {
- FW_MPEG4_NO_RC,
- &ui32MPG4_MTXTOPAZFWTextSize,
- &ui32MPG4_MTXTOPAZFWDataSize,
- &ui32MPG4_MTXTOPAZFWDataLocation,
- NULL, /*aui32MPG4_MTXTOPAZFWText,*/
- NULL /*aui32MPG4_MTXTOPAZFWData*/
- },
- {
- FW_MPEG4_VBR,
- &ui32MPG4VBR_MTXTOPAZFWTextSize,
- &ui32MPG4VBR_MTXTOPAZFWDataSize,
- &ui32MPG4VBR_MTXTOPAZFWDataLocation,
- NULL, /*aui32MPG4VBR_MTXTOPAZFWText,*/
- NULL /*aui32MPG4VBR_MTXTOPAZFWData*/
- },
- {
- FW_MPEG4_CBR,
- &ui32MPG4CBR_MTXTOPAZFWTextSize,
- &ui32MPG4CBR_MTXTOPAZFWDataSize,
- &ui32MPG4CBR_MTXTOPAZFWDataLocation,
- NULL, /*aui32MPG4CBR_MTXTOPAZFWText,*/
- NULL /*aui32MPG4CBR_MTXTOPAZFWData*/
- }
-};
-
-
-int topaz_init_tnc(unsigned long wb_offset, void *wb_addr, void *firmware_addr)
-{
- drm_emgd_private *priv;
- igd_context_t *context;
- unsigned char *mmio;
- unsigned long size;
- int i;
- platform_context_tnc_t *platform = NULL;
- tnc_topaz_priv_t *topaz_priv;
- unsigned long *km_firm_addr = NULL;
- unsigned long *firm_offset_values = NULL;
-
- priv = gpDrmDevice->dev_private;
- context = priv->context;
- mmio = context->device_context.virt_mmadr;
-
- /* Only support Atom E6xx */
- if ((PCI_DEVICE_ID_VGA_TNC != context->device_context.did)||
- (context->device_context.bid == PCI_DEVICE_ID_BRIDGE_TNC_ULP)) {
- return -1;
- }
-
- platform = (platform_context_tnc_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
-
- topaz_priv->topaz_busy = 0;
- topaz_priv->topaz_cmd_seq = 0;
- topaz_priv->topaz_fw_loaded = 0;
- topaz_priv->topaz_cur_codec = 0;
- topaz_priv->cur_mtx_data_size = 0;
-
- size = WRITEBACK_MEM_SIZE;
-
- GMM_SET_DEBUG_NAME("TOPAZ Writeback Memory");
-
- topaz_priv->topaz_wb_offset = wb_offset;
- topaz_priv->topaz_ccb_wb = (unsigned char *)wb_addr;
-
- /* Sync location will be half of the writeback memory. */
- topaz_priv->topaz_sync_addr = (unsigned long *)(topaz_priv->topaz_ccb_wb + 2048);
- topaz_priv->topaz_sync_offset = topaz_priv->topaz_wb_offset + 2048;
- /*
- printk(KERN_INFO "Topaz write back memory = %p", topaz_priv->topaz_ccb_wb);
- printk(KERN_INFO "Topaz write back offset = %lx", topaz_priv->topaz_wb_offset);
- printk(KERN_INFO "Topaz write back sync memory = %p", topaz_priv->topaz_sync_addr);
- printk(KERN_INFO "Topaz write back sync offset = %lx", topaz_priv->topaz_sync_offset);
- */
-
- *(topaz_priv->topaz_sync_addr) = ~0; /*reset sync seq */
-
- /* firmware part */
- /* allocate memory for all firmwares */
- /* to check, is allocate or not */
- if ( !firmware[1].text && firmware_addr) {
- base_firmware_address = kmalloc( 512 * 1024, GFP_KERNEL);
- if ( NULL == base_firmware_address){
- printk (KERN_INFO "Kernel memory allocation failed\n");
- printk (KERN_INFO "Kernel firmware is not loaded\n");
- return 1;
- }
- /* copy all firmware to kernel memory */
- km_firm_addr = (unsigned long *) base_firmware_address;
- firm_offset_values = km_firm_addr;
- memcpy(km_firm_addr, firmware_addr, 512*1024);
- /* printk(KERN_INFO "Topaz km_firm_addr = %p", km_firm_addr); */
- /* to set firmwares */
- /* NB! all offsets in bytes */
- for ( i = 1; i < 10; i++){
- firmware[i].text = km_firm_addr + (firm_offset_values[2*(i-1) + 0] >> 2) ;
- firmware[i].data = km_firm_addr + (firm_offset_values[2*(i-1) + 1] >> 2) ;
- }
- }
-
-#if 0
- /* DEBUG ONLY */
- /* load fw here to make sure firmware can be loaded. */
- topaz_setup_fw(context, FW_H264_NO_RC); /* just for test */
-
-#endif
-
- return 0;
-}
-
-int topaz_setup_fw(igd_context_t *context, enum tnc_topaz_encode_fw codec)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long address, ctrl, core_id, core_rev;
- //unsigned long reg=0;
- int i = 0;
- enc_fw_info_t *curr_fw;
- tnc_topaz_priv_t *topaz_priv;
- platform_context_tnc_t *platform;
-
- platform = (platform_context_tnc_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
-
- EMGD_WRITE32(0x00000000, mmio + TNC_TOPAZ_MMU_CONTROL0);
-
- /* Reset MVEA
- * MVEA_SPE_SOFT_RESET |
- * MVEA_IPE_SOFT_RESET |
- * MVEA_CMPRS_SOFT_RESET |
- * MVEA_JMCOMP_SOFT_RESET |
- * MVEA_CMC_SOFT_RESET |
- * MVEA_DCF_SOFT_RESET
- */
- EMGD_WRITE32(0x0000003f, mmio + TNC_TOPAZ_IMG_MVEA_SRST);
- EMGD_WRITE32(0x00, mmio + TNC_TOPAZ_IMG_MVEA_SRST);
-
- /* topaz_set_default_regs */
- /* Set default value for Video Encode resgister */
- while (topaz_def_regs[i][0] != 0xffffffff) {
- EMGD_WRITE32(topaz_def_regs[i][2],
- mmio + topaz_def_regs[i][0] + topaz_def_regs[i][1]);
- i++;
- }
-
- /* topaz_upload_fw */
- /* Point to request firmware */
- curr_fw = &firmware[codec];
-
- upload_firmware(context, curr_fw);
-
- /* topaz_write_core_reg */
- /* Start the firmware thread running */
- /*topaz_write_core_reg(context, TOPAZ_MTX_PC, PC_START_ADDRESS);*/
-
- /* topaz_read_core_reg */
- EMGD_WRITE32(PC_START_ADDRESS, mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_DATA);
- EMGD_WRITE32(TOPAZ_MTX_PC, mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST);
- reg_ready_tnc(context, TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST,
- 0x80000000, 0x80000000);
-
- /* Enable auto clock gate for TOPAZ and MVEA
- * TOPAZ_VLC_AUTO_CLK_GATE |
- * TOPAZ_DB_AUTO_CLK_GATE |
- *
- * MVEA_IPE_AUTO_CLK_GATE |
- * MVEA_SPE_AUTO_CLK_GATE |
- * MVEA_CMPRS_AUTO_CLK GATE |
- * MVEA_JMCOMP_AUTO_CLK_GATE |
- */
- EMGD_WRITE32(0x00000003, mmio + TNC_TOPAZ_IMG_TOPAZ_AUTO_CLK_GATE);
- EMGD_WRITE32(0x0000000f, mmio + TNC_TOPAZ_MVEA_AUTO_CLOCK_GATING);
-
- /* Clear the MTX interrupt */
- EMGD_WRITE32(0x00000002, mmio + TNC_TOPAZ_IMG_TOPAZ_INTCLEAR);
- /* Enable MTX */
- EMGD_WRITE32(0x00000001, mmio + TNC_TOPAZ_MTX_ENABLE);
- /* Once enable MTX fw should generate interrupt to indicate its reday */
- reg_ready_tnc(context, TNC_TOPAZ_IMG_TOPAZ_INTSTAT,
- 0x00000002, 0x00000002);
- /* Clear the MTX interrupt */
- EMGD_WRITE32(0x00000002, mmio + TNC_TOPAZ_IMG_TOPAZ_INTCLEAR);
-
- /* get ccb buffer addr - file hostutils.c */
- topaz_priv->topaz_ccb_buffer_addr = read_mtx_mem(
- context, MTX_DATA_BASE + RAM_SIZE - 4);
- topaz_priv->topaz_ccb_ctrl_addr = read_mtx_mem( context,
- MTX_DATA_BASE + RAM_SIZE - 8);
- topaz_priv->topaz_ccb_size = read_mtx_mem( context,
- topaz_priv->topaz_ccb_ctrl_addr + MTX_CCB_CTRL_CCB_SIZE);
- topaz_priv->topaz_cmd_windex = 0;
-
- /* write back the intial QP value */
- write_mtx_mem(context,
- topaz_priv->topaz_ccb_ctrl_addr + MTX_CCB_CTRL_INIT_QP,
- topaz_priv->stored_initial_qp);
- write_mtx_mem(context,
- MTX_DATA_BASE + RAM_SIZE - 12, topaz_priv->topaz_wb_offset);
-
- /*reg = EMGD_READ32(mmio+TNC_TOPAZ_IMG_TOPAZ_INTSTAT);
- printk( KERN_INFO "b4 first kick: TOPAZ_INTSTAT= 0x%08x ", reg);*/
-
- /* this kick is important to update the WB offset */
- *((unsigned long *)topaz_priv->topaz_ccb_wb) = 0x01020304;
- EMGD_WRITE32(1, mmio + TNC_TOPAZ_MTX_KICK);
- OS_SLEEP(1000);
- /* printk(KERN_INFO "Expected 0x12345678, wb return 0x%08lx",
- *((unsigned long *)topaz_priv->topaz_ccb_wb));
- reg = EMGD_READ32(mmio+TNC_TOPAZ_IMG_TOPAZ_INTSTAT);
- printk( KERN_INFO "after first kick: TOPAZ_INTSTAT= 0x%08x ", reg);
- reg = EMGD_READ32(mmio+TNC_TOPAZ_MMU_STATUS);
- printk( KERN_INFO "sync: TOPAZ_MMU_STATUS= 0x%08x ", reg);*/
-
- topaz_priv->topaz_busy = 0;
- topaz_priv->topaz_cmd_seq = 0;
-
- /* Enable MMU by pass when confguring MMU - TOPAZ_CR_MMU_BYPASS*/
- EMGD_WRITE32(0x00000800, mmio + TNC_TOPAZ_MMU_CONTROL0);
-
- /* Topaz MMU will point to the same PD as SGX. */
- address = EMGD_READ32(mmio + PSB_CR_BIF_DIR_LIST_BASE1);
- EMGD_WRITE32(address, mmio + TNC_TOPAZ_MMU_DIR_LIST_BASE0);
- EMGD_WRITE32(0, mmio + TNC_TOPAZ_MMU_TILE0);
-
- /*
- * MMU Page size = 12
- * MMU best count = 7
- * MMU ADT TTE = 0
- * MMU TTE threshold = 12
- */
- EMGD_WRITE32(0xc070000c, mmio + TNC_TOPAZ_MMU_CONTROL1);
- EMGD_WRITE32(0x00, mmio + TNC_TOPAZ_MMU_CONTROL0);
-
- /* Set index register, all pointing to directory bank 0, Flush the directory
- * cache and disable the MMU bypass */
- EMGD_WRITE32(0, mmio + TNC_TOPAZ_MMU_BANK_INDEX);
- ctrl = EMGD_READ32(mmio + TNC_TOPAZ_MMU_CONTROL0) | 0x0C; /* Flush */
- EMGD_WRITE32(ctrl, mmio + TNC_TOPAZ_MMU_CONTROL0);
- EMGD_WRITE32(0x00, mmio + TNC_TOPAZ_MMU_CONTROL0);
-
- core_id = EMGD_READ32(mmio + TNC_TOPAZ_IMG_TOPAZ_CORE_ID);
- core_rev = EMGD_READ32(mmio + TNC_TOPAZ_IMG_TOPAZ_CORE_REV);
-
- printk(KERN_INFO "Topaz Core Id (%lx)", core_id);
- printk(KERN_INFO "Topaz Core Revision (%lx)", core_rev);
-
- topaz_flush_tnc(context);
-
-#if 0
- unsigned long reg = EMGD_READ32(mmio+TNC_TOPAZ_IMG_TOPAZ_INTSTAT);
- printk( KERN_INFO "sync: TOPAZ_INTSTAT= 0x%08x ", reg);
- reg = EMGD_READ32(mmio+TNC_TOPAZ_MMU_STATUS);
- printk( KERN_INFO "sync: TOPAZ_MMU_STATUS= 0x%08x ", reg);
-#endif
-
-#if 0
-/* DEBUG ONLY */
-/* test sync command */
-{
- unsigned long value;
- unsigned long sync_cmd[3];
- unsigned long *sync_p = (unsigned long *)topaz_priv->topaz_sync_addr;
- int count = 1000, k=0, r=0;
-
- for(k=0;k<3;k++){
-
- /* insert a SYNC command here */
- topaz_priv->topaz_sync_cmd_seq = (1 << 15) |
- topaz_priv->topaz_cmd_seq++;
- sync_cmd[0] = (MTX_CMDID_SYNC << 1) | (3 << 8) |
- (topaz_priv->topaz_sync_cmd_seq << 16);
- sync_cmd[1] = topaz_priv->topaz_sync_offset;
- sync_cmd[2] = topaz_priv->topaz_sync_cmd_seq;
-
- printk(KERN_INFO "sync test: RI before sync =%ld", CCB_CTRL_RINDEX(context));
- TOPAZ_BEGIN_CCB(context);
- TOPAZ_OUT_CCB(context, sync_cmd[0]);
- TOPAZ_OUT_CCB(context, sync_cmd[1]);
- TOPAZ_OUT_CCB(context, sync_cmd[2]);
-
- reg = EMGD_READ32(mmio+TNC_TOPAZ_IMG_TOPAZ_INTSTAT);
- printk( KERN_INFO "sync: TOPAZ_INTSTAT= 0x%08x ", reg);
-
- TOPAZ_END_CCB(context, 1);
- /*
- for(count_reg=0; count_reg<352; count_reg+=4){
- value = EMGD_READ32(mmio+TOPAZ_BASE+count_reg);
- printk(KERN_INFO "MTX reg: ofs=0x%04x, value=0x%08x", count_reg, value);
- }
- */
-
-
-
- while (count && *sync_p != topaz_priv->topaz_sync_cmd_seq) {
- OS_SLEEP(1000);
- --count;
- }
- if ((count == 0) && (*sync_p != topaz_priv->topaz_sync_cmd_seq)) {
- printk(KERN_INFO "TOPAZ: wait sycn timeout (0x%08x),"
- "actual 0x%08x\n",
- topaz_priv->topaz_sync_cmd_seq, *sync_p);
- }else{
- printk(KERN_INFO "TOPAZ: SYNC done, seq=0x%08x\n", *sync_p);
- }
-
- printk(KERN_INFO "RI after sync =%ld", CCB_CTRL_RINDEX(context));
-
- reg = EMGD_READ32(mmio+TNC_TOPAZ_IMG_TOPAZ_INTSTAT);
- printk( KERN_INFO "sync: TOPAZ_INTSTAT= 0x%08x ", reg);
- reg = EMGD_READ32(mmio+TNC_TOPAZ_MMU_STATUS);
- printk( KERN_INFO "sync: TOPAZ_MMU_STATUS= 0x%08x ", reg);
- }
-
-/*
- for(r=0;r<100;r++){
- printk(KERN_INFO "syncp=0x%08x",*sync_p);
- sync_p++;
- }
-*/
-}
-#endif
-
- return 0;
-}
-
-
-static int upload_firmware(igd_context_t *context, enc_fw_info_t *fw)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long start_addr;
-
- EMGD_DEBUG("Encode Firmware version is %s", fw->fw_version);
- EMGD_DEBUG("Encode Firmware enum is %d", fw->idx);
-
- /* # refer HLD document */
- /* # MTX reset - MTX_SOFT_RESET_MTX_RESET_MASK */
- EMGD_WRITE32(1, mmio + TNC_TOPAZ_MTX_SOFT_RESET);
- OS_SLEEP(6000);
-
- /* topaz_mtx_upload_by_register */
- EMGD_DEBUG("Writing firmware text to core memory");
- start_addr = PC_START_ADDRESS - MTX_CODE_BASE;
- write_firmware(context, start_addr,
- *(fw->text_size), fw->text, MTX_CORE_CODE_MEM);
- /* topaz_mtx_upload_by_register */
- EMGD_DEBUG("Writing firmware data to core memory");
- start_addr = *(fw->data_offset) - MTX_DATA_BASE;
- write_firmware(context, start_addr,
- *(fw->data_size), fw->data, MTX_CORE_DATA_MEM);
- OS_SLEEP(6000);
- return 0;
-}
-
-/* topaz_mtx_upload_by_register() */
-static int write_firmware(igd_context_t *context,
- unsigned long address,
- unsigned long size,
- unsigned long *data,
- unsigned long mtx_mem)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long ram_bank;
- unsigned long bank_size;
- unsigned long current_bank;
- unsigned long ram_id;
- unsigned long ctrl;
- unsigned long i;
-
- get_mtx_control_from_dash(context);
-
- ram_bank = EMGD_READ32(mmio + TNC_TOPAZ_MTX_DEBUG);
- ram_bank = 0x0a0a0606;
- bank_size = (ram_bank & 0x000f0000) >> 16;
- bank_size = (1 << (bank_size + 2));
-
- /* Loop writing text/code to core memory */
- current_bank = ~0L;
-
- for (i = 0; i < size; i++) {
- /* Wait for MCMSTAT to become be idle 1 */
- if (reg_ready_tnc(context, TNC_TOPAZ_MTX_RAM_ACCESS_STATUS,
- 0x00000001, 0x00000001) == 0) {
- ram_id = mtx_mem + (address / bank_size);
- if (ram_id != current_bank) {
- /*
- * bits 20:27 - ram bank (CODE_BASE | DATA_BASE)
- * bits 2:19 - address
- * bit 1 - enable auto increment addressing mode
- */
- ctrl = (ram_id << 20) | (((address >> 2) & 0x000ffffc) << 2) |
- 0x02;
- EMGD_WRITE32(ctrl, mmio + TNC_TOPAZ_MTX_RAM_ACCESS_CONTROL);
-
- current_bank = ram_id;
- }
-
- address += 4;
- EMGD_WRITE32(data[i],
- mmio + TNC_TOPAZ_MTX_RAM_ACCESS_DATA_TRANSFER);
- } else {
- /* FIXME: Should we return something here */
- printk(KERN_ERR "Timeout waiting for MCMSTAT to be idle");
- }
- }
- release_mtx_control_from_dash(context);
- return 0;
-}
-
-static int reg_ready_tnc(igd_context_t *context,
- unsigned long reg,
- unsigned long mask,
- unsigned long value)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long status;
- int poll_cnt = 1000;
-
- while (poll_cnt) {
- status = EMGD_READ32(mmio + reg);
- if ((status & mask) == value) {
- return 0;
- }
- poll_cnt--;
- OS_SLEEP(100);
- }
-
- /* Timeout waiting for RAM ACCESS ready */
- EMGD_DEBUG(KERN_ERR "TIMEOUT: Got 0x%08lx while waiting for 0x%08lx", status, value);
- return 1;
-}
-
-unsigned long read_mtx_mem(igd_context_t *context, unsigned long addr)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long bank_size;
- unsigned long ram_size;
- unsigned long ram_id;
- unsigned long reg;
- unsigned long ctrl = 0;
- unsigned long val = 0;
-
- reg = EMGD_READ32(mmio + TNC_TOPAZ_MTX_DEBUG);
-
- reg = 0x0a0a0606;
- bank_size = (reg & 0xf0000) >> 16;
-
- ram_size = (unsigned long) (1 << (bank_size + 2));
- ram_id = (addr - MTX_DATA_BASE) / ram_size;
-
- /* cmd id */
- ctrl = ((0x18 + ram_id) << 20) & 0x0ff00000;
- /* Address to read */
- ctrl |= ((addr >> 2) << 2) & 0x000ffffc;
- ctrl |= 0x00000001;
-
- EMGD_WRITE32(ctrl, mmio + TNC_TOPAZ_MTX_RAM_ACCESS_CONTROL);
- reg_ready_tnc(context, TNC_TOPAZ_MTX_RAM_ACCESS_STATUS, 1, 1);
- val = EMGD_READ32(mmio + TNC_TOPAZ_MTX_RAM_ACCESS_DATA_TRANSFER);
-
- return val;
-}
-
-
-void write_mtx_mem(igd_context_t *context,
- unsigned long addr, unsigned long value)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long bank_size;
- unsigned long ram_size;
- unsigned long ram_id;
- unsigned long reg;
- unsigned long ctrl = 0;
-
- reg = EMGD_READ32(mmio + TNC_TOPAZ_MTX_DEBUG);
- /*printk(KERN_INFO "write_mtx_mem: MTX_DEBUG: 0x%08x", reg);*/
-
- reg = 0x0a0a0606;
- bank_size = (reg & 0xf0000) >> 16;
-
- ram_size = (unsigned long) (1 << (bank_size + 2));
- ram_id = (addr - MTX_DATA_BASE) / ram_size;
-
- /* cmd id */
- ctrl = ((0x18 + ram_id) << 20) & 0x0ff00000;
- /* Address to read */
- ctrl |= ((addr >> 2) << 2) & 0x000ffffc;
-
- /*printk(KERN_INFO "write_mtx_mem: ctrl=0x%08x, addr=0x%08x, value=0x%08x", ctrl, addr, value);*/
-
- EMGD_WRITE32(ctrl, mmio + TNC_TOPAZ_MTX_RAM_ACCESS_CONTROL);
- EMGD_WRITE32(value, mmio + TNC_TOPAZ_MTX_RAM_ACCESS_DATA_TRANSFER);
- reg_ready_tnc(context, TNC_TOPAZ_MTX_RAM_ACCESS_STATUS, 1, 1);
-
- return;
-}
-
-void topaz_write_core_reg(igd_context_t *context,
- unsigned long reg, unsigned long val)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long tmp;
-
- get_mtx_control_from_dash(context);
-
- /* put data into MTX_RW_DATA */
- EMGD_WRITE32(val, mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_DATA);
-
- /* request a write */
- tmp = reg &
- ~TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK;
- EMGD_WRITE32(tmp, mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST);
-
- /* wait for operation finished */
- reg_ready_tnc(context,
- TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST,
- TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK,
- TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK);
-
- release_mtx_control_from_dash(context);
-}
-
-void topaz_read_core_reg(igd_context_t *context,
- unsigned long reg, unsigned long *ret_val)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long tmp;
-
- get_mtx_control_from_dash(context);
-
- /* request a write */
- tmp = reg &
- ~TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK;
- EMGD_WRITE32(tmp | TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST_MTX_RNW_MASK,
- mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST);
-
- /* wait for operation finished */
- reg_ready_tnc(context,
- (unsigned long )(mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST),
- 0, TNC_TOPAZ_MTX_REGISTER_READ_WRITE_REQUEST_MTX_DREADY_MASK);
-
- /* read */
- *ret_val = EMGD_READ32(mmio + TNC_TOPAZ_MTX_REGISTER_READ_WRITE_DATA);
-
- release_mtx_control_from_dash(context);
-}
-
-void get_mtx_control_from_dash(igd_context_t *context)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- int debug_reg_slave_val;
- tnc_topaz_priv_t *topaz_priv;
- platform_context_tnc_t *platform;
- unsigned long reg;
-
- platform = (platform_context_tnc_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
-
- reg = EMGD_READ32(mmio + TNC_TOPAZ_MTX_DEBUG);
- reg &= 0xFFFFFFF0;
- reg |= 0x00000006;
-
- /*printk(KERN_INFO "get_mtx:debug value = 0x%08x", reg);*/
-
- /* Get MTX control from dash
- * TOPAZ_CR_MTX_DBG_IS_SLAVE |
- * TOPAZ_CR_MTX_DBG_GPIO_OUT
- */
- EMGD_WRITE32(reg, mmio + TNC_TOPAZ_MTX_DEBUG);
-
- do {
- debug_reg_slave_val = EMGD_READ32(mmio + TNC_TOPAZ_MTX_DEBUG);
- } while ((debug_reg_slave_val & 0x18) !=0 );
-
- topaz_priv->topaz_dash_access_ctrl = EMGD_READ32(mmio +
- TNC_TOPAZ_MTX_RAM_ACCESS_CONTROL);
-}
-
-void release_mtx_control_from_dash(igd_context_t *context)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- tnc_topaz_priv_t *topaz_priv;
- platform_context_tnc_t *platform;
- unsigned long reg;
-
- platform = (platform_context_tnc_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
-
- reg = EMGD_READ32(mmio + TNC_TOPAZ_MTX_DEBUG);
- reg &= 0xFFFFFFF0;
- reg |= 0x00000004;
-
- /*printk(KERN_INFO "release:debug value = 0x%08x", reg);*/
- /* restore access control */
- EMGD_WRITE32(topaz_priv->topaz_dash_access_ctrl,
- mmio + TNC_TOPAZ_MTX_RAM_ACCESS_CONTROL);
-
- /* release bus
- * TOPAZ_CR_MTX_DBG_IS_SLAVE
- */
- EMGD_WRITE32(reg, mmio + TNC_TOPAZ_MTX_DEBUG);
-}
-
-int process_video_encode_tnc(igd_context_t *context, unsigned long offset, void *virt_addr, unsigned long *fence_id)
-{
- unsigned long *mtx_buf;
- unsigned long size=0;
- int ret = 0;
- platform_context_plb_t *platform;
- tnc_topaz_priv_t *topaz_priv;
-
- EMGD_TRACE_ENTER;
-
- platform = (platform_context_plb_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
- mtx_buf = (unsigned long *) virt_addr;
-
- EMGD_DEBUG("process_video_encode_tnc where buf=%p, offset=%lx\n",
- mtx_buf, offset);
-
- platform->topaz_busy = 1;
- ret = process_encode_mtx_messages(context, mtx_buf, size);
- if (ret){
- printk(KERN_INFO "Invalid topaz encode cmd");
- ret = -EINVAL;
- }
-
- *fence_id = topaz_priv->topaz_sync_cmd_seq;
- platform->topaz_busy = 0;
- return ret;
-}
-
-int topaz_get_fence_id(igd_context_t *context, unsigned long *fence_id)
-{
- return 0;
-}
-
-int topaz_flush_tnc(igd_context_t *context)
-{
- unsigned char *mmio = context->device_context.virt_mmadr;
- unsigned long topaz_mmu;
-
- /* Only support Atom E6xx */
- if ((PCI_DEVICE_ID_VGA_TNC != context->device_context.did)||
- (context->device_context.bid == PCI_DEVICE_ID_BRIDGE_TNC_ULP)) {
- return -1;
- }
-
- topaz_mmu = EMGD_READ32(mmio + TNC_TOPAZ_MMU_CONTROL0);
- topaz_mmu &= ~0x800; /* turn off MMU bypass mode if is on*/
- topaz_mmu |= 0x0C; /* MMU_INVALDC + MMU_FLUSH */
- EMGD_WRITE32(topaz_mmu, mmio + TNC_TOPAZ_MMU_CONTROL0);
-
- topaz_mmu &= ~0x0C;
- EMGD_WRITE32(topaz_mmu, mmio + TNC_TOPAZ_MMU_CONTROL0);
-
-#if 0
- unsigned long reg;
-
- topaz_mmu = EMGD_READ32(mmio + TNC_TOPAZ_MMU_CONTROL0);
- printk(KERN_INFO "topaz_flush_tnc: CONTROL0=0x%08x", topaz_mmu);
- reg = EMGD_READ32(mmio+TNC_TOPAZ_IMG_TOPAZ_INTSTAT);
- printk( KERN_INFO "topaz_flush_tnc: TOPAZ_INTSTAT= 0x%08x ", reg);
- reg = EMGD_READ32(mmio+TNC_TOPAZ_MMU_STATUS);
- printk( KERN_INFO "topaz_flush_tnc: MMU_STATUS= 0x%08x ", reg);
-#endif
-
- return 0;
-}
-
-int topaz_get_frame_skip(igd_context_t *context, unsigned long *frame_skip)
-{
- tnc_topaz_priv_t *topaz_priv;
- platform_context_tnc_t *platform;
-
- platform = (platform_context_tnc_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
- *frame_skip = topaz_priv->topaz_frame_skip;
- /* printk(KERN_INFO "call frame skip with return %ld", *frame_skip);*/
-
- return 0;
-}
-
-int topaz_sync_surface(igd_context_t *context, unsigned long *sync_done, int *last_frame)
-{
- tnc_topaz_priv_t *topaz_priv;
- platform_context_tnc_t *platform;
- unsigned long *sync_p;
-
- platform = (platform_context_tnc_t *)context->platform_context;
- topaz_priv = &platform->tpz_private_data;
- sync_p = (unsigned long *)topaz_priv->topaz_sync_addr;
-
- if(*last_frame){
- if( CCB_CTRL_SEQ(context) == *sync_p ) {
- *sync_done = 1;
- } else {
- *sync_done = 0;
- }
- return 0;
- }
-
-
- /* For rate-control, will check the sync by matching the current CCB_CTRL_SEQ
- * with current frame sync value. */
- /* For NO rate-control, will check the sync by using topaz_sync_val which is the sync
- * value for the previous frame */
- if( (topaz_priv->topaz_cur_codec != FW_H264_NO_RC) &&
- (topaz_priv->topaz_cur_codec != FW_MPEG4_NO_RC) &&
- (topaz_priv->topaz_cur_codec != FW_H263_NO_RC) ){
- if( CCB_CTRL_SEQ(context) == topaz_priv->topaz_sync_cmd_seq ){
- *sync_done = 1;
- }else{
- *sync_done = 0;
- }
- }else{
- EMGD_DEBUG("\nctrl_c=0x%08lx, sync_p=0x%08lx, s_val=0x%08lx, s_seq=0x%08lx", CCB_CTRL_SEQ(context),
- *sync_p, topaz_priv->topaz_sync_val, topaz_priv->topaz_sync_cmd_seq);
- if( CCB_CTRL_SEQ(context) == topaz_priv->topaz_sync_val ){
- /* If currect CCB_CTRL_SEQ is sync_val, then the previou frame encode already done */
- *sync_done = 1;
- }else if( (CCB_CTRL_SEQ(context) & ~0x8000) > (topaz_priv->topaz_sync_val & ~0x8000) ){
- /* If the sync_val is smaller than the CTRL_SEQ, then the previous frame encode
- * already done */
- *sync_done = 1;
- }else{
- *sync_done = 0;
- }
- }
-
- return 0;
-}