[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/devdrv/asm/inc/asm_reg.h b/mcu/driver/devdrv/asm/inc/asm_reg.h
new file mode 100644
index 0000000..9849fab
--- /dev/null
+++ b/mcu/driver/devdrv/asm/inc/asm_reg.h
@@ -0,0 +1,78 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * asm_reg.h
+ *
+ * Project:
+ * --------
+ * UMOLY_Software
+ *
+ * Description:
+ * ------------
+ * This file defines ASM drivers register
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __ASM_REG_H__
+#define __ASM_REG_H__
+
+#if defined (__MD93__)
+ #include "asm_reg_93.h"
+#elif defined (__MD95__)
+ #include "asm_reg_95.h"
+#else
+ #include "asm_reg_97.h"
+#endif // if defined (__MD93__)
+
+
+
+#endif //__ASM_REG_H__
+
diff --git a/mcu/driver/devdrv/asm/inc/asm_reg_93.h b/mcu/driver/devdrv/asm/inc/asm_reg_93.h
new file mode 100644
index 0000000..821268c
--- /dev/null
+++ b/mcu/driver/devdrv/asm/inc/asm_reg_93.h
@@ -0,0 +1,848 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * asm_reg.h
+ *
+ * Project:
+ * --------
+ * UMOLY_Software
+ *
+ * Description:
+ * ------------
+ * This file defines ASM drivers register
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __ASM_REG_93_H__
+#define __ASM_REG_93_H__
+
+#include "kal_general_types.h"
+#include "reg_base.h"
+#include "intrCtrl.h"
+#include "boot.h"
+
+typedef enum
+{
+ ASM_AXI_MAX_BURST_LEN_4 = 0,
+ ASM_AXI_MAX_BURST_LEN_8,
+ ASM_AXI_MAX_BURST_LEN_16,
+
+}ASM_AXI_MAX_OSTD_NUMBER;
+
+
+typedef enum
+{
+ ASM_AXI_MAX_OSTD_NUMBER_0 = 0,
+ ASM_AXI_MAX_OSTD_NUMBER_1,
+ ASM_AXI_MAX_OSTD_NUMBER_2,
+ ASM_AXI_MAX_OSTD_NUMBER_3,
+
+}ASM_AXI_MAX_OSTD_LEN;
+
+
+typedef enum
+{
+ ASM_AXI_NON_POST_WRITE_LAST_TRANACTION = 0,
+ ASM_AXI_NON_POST_WRITE,
+ ASM_AXI_POST_WRITE,
+}ASM_AXI_POST_WRITE_CFG;
+
+
+
+
+//////////////////ASM Registers/////////////////////////////
+#define BASE_ADDR_ASM_GCR (GCR_CUSTOM_ADDR+0x8000)
+#define ASM_GCR_BASEADDR (BASE_ADDR_ASM_GCR)
+#define ASM_BASEADDR (BASE_MADDR_MDMCU_ABM)
+
+
+//CORE0 ASM ASM_BASEADDR+0x0000
+//CORE1 ASM ASM_BASEADDR+0x1000
+//CORE2 ASM ASM_BASEADDR+0x2000
+//CORE3 ASM ASM_BASEADDR+0x3000
+#define CORE_OFFSET_SHIFT_BIT (12)
+#define CORE_OFFSET (0x1000)
+
+
+//Register offset
+#define ASM_GEN_CONFIG (0x0000)
+#define ASM_MODE_CONFIG (0x0004)
+#define ASM_PROFILE_EN (0x0008)
+#define ASM_AXI_CONFIG (0x000C)
+#define ASM_SPM_CONFIG (0x0010)
+#define ASM_VERSION (0x0014)
+#define ASM_L2ISAR (0x0020)
+#define ASM_L2IMKR (0x0024)
+#define ASM_L2IMCR (0x0028)
+#define ASM_L2IMSR (0x002C)
+#define ASM_GCR_SWLA_TRIG (0x0030)
+#define ASM_GCR_TC0_CONTEXT_ID (0x0040)
+#define ASM_GCR_TC1_CONTEXT_ID (0x0044)
+#define ASM_GCR_TC2_CONTEXT_ID (0x0048)
+#define ASM_GCR_TC3_CONTEXT_ID (0x004C)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO0 (0x0050)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO1 (0x0054)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO2 (0x0058)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO3 (0x005C)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO0 (0x0060)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO1 (0x0064)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO2 (0x0068)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO3 (0x006C)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO0 (0x0070)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO1 (0x0074)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO2 (0x0078)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO3 (0x007C)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO0 (0x0080)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO1 (0x0084)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO2 (0x0088)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO3 (0x008C)
+#define ASM_TC0_TC_ID (0x0090)
+#define ASM_TC1_TC_ID (0x0094)
+#define ASM_TC2_TC_ID (0x0098)
+#define ASM_TC3_TC_ID (0x009C)
+#define ASM_CORE_ID (0x0100)
+#define ASM_MCU_PC (0x0104)
+#define ASM_TC0_MCU_PMC0 (0x0108)
+#define ASM_TC0_MCU_PMC1 (0x010C)
+#define ASM_TC1_MCU_PMC0 (0x0110)
+#define ASM_TC1_MCU_PMC1 (0x0114)
+#define ASM_TC2_MCU_PMC0 (0x0118)
+#define ASM_TC2_MCU_PMC1 (0x011C)
+#define ASM_TC3_MCU_PMC0 (0x0120)
+#define ASM_TC3_MCU_PMC1 (0x0124)
+#define ASM_MCU_ELM_CNT0 (0x0128)
+#define ASM_MCU_ELM_CNT1 (0x012C)
+#define ASM_MCU_ELM_CNT2 (0x0130)
+#define ASM_MCU_ELM_CNT3 (0x0134)
+#define ASM_TIME_STAMP (0x013C)
+#define ASM_PDI_HEADER (0x0144)
+#define ASM_PDI_CNT (0x0148)
+#define ASM_TRACER_SAMPLE_RATE (0x014C)
+#define ASM_LOG_BUF_BASEADDR (0x0150)
+#define ASM_LOG_BUF_SIZE (0x0154)
+#define ASM_WRAP_CNT (0x0158)
+#define ASM_BUF_RD_PTR (0x015C)
+#define ASM_BUF_WR_PTR (0x0160)
+#define ASM_BUF_ALT_THRESH (0x0164)
+#define ASM_SRAM_STATUS (0x0168)
+#define ASM_SRAM_MAX_BUF_SIZE (0x016C)
+#define ASM_REM_LOG_BUF_SIZE (0x0170)
+#define ASM_SRAM_DBG (0x0174)
+#define ASM_SRAM_DBG_ADDR (0x0178)
+#define ASM_SRAM_DBG_DATA (0x017C)
+#define ASM_SELF_TEST_EN (0x0180)
+#define ASM_SEL_TEST_KEY (0x0184)
+#define ASM_DBG1 (0x0190)
+#define ASM_DBG2 (0x0194)
+#define ASM_DBG3 (0x0198)
+#define ASM_DBG4 (0x019C)
+#define ASM_DBG5 (0x0200)
+#define ASM_DBG6 (0x0204)
+#define ASM_DBG7 (0x0208)
+#define ASM_DBG8 (0x020C)
+#define ASM_DBG9 (0x0210)
+#define ASM_DBG10 (0x0214)
+#define ASM_DBG11 (0x0218)
+#define ASM_DBG12 (0x021C)
+#define ASM_DUMMY (0x0220)
+#define ASM_TOP_INT_STATUS (0x2000)
+#define ASM_TOP_CORE_EN (0x2004)
+
+
+
+
+//MCU ASM APB Register Address
+#define ASM_GEN_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GEN_CONFIG )
+#define ASM_MODE_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MODE_CONFIG)
+#define ASM_PROFILE_EN_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PROFILE_EN )
+#define ASM_AXI_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_AXI_CONFIG )
+#define ASM_SPM_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SPM_CONFIG )
+#define ASM_VERSION_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_VERSION )
+#define ASM_L2ISAR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2ISAR )
+#define ASM_L2IMKR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMKR )
+#define ASM_L2IMCR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMCR )
+#define ASM_L2IMSR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMSR )
+#define ASM_SWLA_TRIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_SWLA_TRIG )
+#define ASM_TC0_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_CONTEXT_ID )
+#define ASM_TC1_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_CONTEXT_ID )
+#define ASM_TC2_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_CONTEXT_ID )
+#define ASM_TC3_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_CONTEXT_ID )
+#define ASM_TC0_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO0 )
+#define ASM_TC0_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO1 )
+#define ASM_TC0_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO2 )
+#define ASM_TC0_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO3 )
+#define ASM_TC1_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO0 )
+#define ASM_TC1_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO1 )
+#define ASM_TC1_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO2 )
+#define ASM_TC1_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO3 )
+#define ASM_TC2_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO0 )
+#define ASM_TC2_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO1 )
+#define ASM_TC2_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO2 )
+#define ASM_TC2_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO3 )
+#define ASM_TC3_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO0 )
+#define ASM_TC3_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO1 )
+#define ASM_TC3_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO2 )
+#define ASM_TC3_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO3 )
+#define ASM_TC0_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_TC_ID )
+#define ASM_TC1_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_TC_ID )
+#define ASM_TC2_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_TC_ID )
+#define ASM_TC3_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_TC_ID )
+#define ASM_CORE_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_CORE_ID )
+#define ASM_MCU_PC_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_PC )
+#define ASM_TC0_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_MCU_PMC0 )
+#define ASM_TC0_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_MCU_PMC1 )
+#define ASM_TC1_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_MCU_PMC0 )
+#define ASM_TC1_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_MCU_PMC1 )
+#define ASM_TC2_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_MCU_PMC0 )
+#define ASM_TC2_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_MCU_PMC1 )
+#define ASM_TC3_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_MCU_PMC0 )
+#define ASM_TC3_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_MCU_PMC1 )
+#define ASM_MCU_ELM_CNT0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT0 )
+#define ASM_MCU_ELM_CNT1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT1 )
+#define ASM_MCU_ELM_CNT2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT2 )
+#define ASM_MCU_ELM_CNT3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT3 )
+#define ASM_TIME_STAMP_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TIME_STAMP )
+#define ASM_PDI_HEADER_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PDI_HEADER )
+#define ASM_PDI_CNT_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PDI_CNT )
+#define ASM_TRACER_SAMPLE_RATE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TRACER_SAMPLE_RATE )
+#define ASM_LOG_BUF_BASEADDR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_LOG_BUF_BASEADDR )
+#define ASM_LOG_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_LOG_BUF_SIZE )
+#define ASM_WRAP_CNT_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_WRAP_CNT )
+#define ASM_BUF_RD_PTR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_RD_PTR )
+#define ASM_BUF_WR_PTR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_WR_PTR )
+#define ASM_BUF_ALT_THRESH_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_ALT_THRESH )
+#define ASM_SRAM_MAX_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_MAX_BUF_SIZE )
+#define ASM_SRAM_STATUS_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_STATUS )
+#define ASM_REM_LOG_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_REM_LOG_BUF_SIZE )
+#define ASM_SRAM_DBG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG )
+#define ASM_SRAM_DBG_ADDR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG_ADDR )
+#define ASM_SRAM_DBG_DATA_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG_DATA )
+#define ASM_SELF_TEST_EN_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SELF_TEST_EN )
+#define ASM_SEL_TEST_KEY_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SEL_TEST_KEY )
+#define ASM_DBG1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG1 )
+#define ASM_DBG2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG2 )
+#define ASM_DBG3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG3 )
+#define ASM_DBG4_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG4 )
+#define ASM_DBG5_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG5 )
+#define ASM_DBG6_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG6 )
+#define ASM_DBG7_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG7 )
+#define ASM_DBG8_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG8 )
+#define ASM_DBG9_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG9 )
+#define ASM_DBG10_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG10 )
+#define ASM_DBG11_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG11 )
+#define ASM_DBG12_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG12 )
+#define ASM_DUMMY_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DUMMY )
+#define ASM_TOP_INT_STATUS_TOP (ASM_BASEADDR+ASM_TOP_INT_STATUS)
+#define ASM_TOP_CORE_EN_TOP (ASM_BASEADDR+ASM_TOP_CORE_EN)
+
+
+
+//MCU ASM GCR Register Address
+#define ASM_GCR_SWLA_TRIG_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_SWLA_TRIG)
+#define ASM_GCR_TC0_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_CONTEXT_ID)
+#define ASM_GCR_TC1_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_CONTEXT_ID)
+#define ASM_GCR_TC2_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_CONTEXT_ID)
+#define ASM_GCR_TC3_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_CONTEXT_ID)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO3)
+
+
+
+
+
+//ASM MCU CORE register
+#define ASM_TC_CONTEXT_ID_(CORE,TC) (ASM_TC0_CONTEXT_ID_(CORE)+(TC*4))
+#define ASM_GCR_TC_CONTEXT_ID_(CORE,TC) (ASM_GCR_TC0_CONTEXT_ID_(CORE)+(TC*4))
+
+#define ASM_TC_ADDON_OFFSET (ASM_GCR_TC1_PROFILE_ADDON_INFO0-ASM_GCR_TC0_PROFILE_ADDON_INFO0)
+#define ASM_TC_PROFILE_ADDON_INFO_(CORE) (ASM_TC0_PROFILE_ADDON_INFO0_(CORE))
+#define ASM_PROFILE_ADDON_INFO_(CORE,TC) (ASM_TC0_PROFILE_ADDON_INFO0_(CORE)+(TC*ASM_TC_ADDON_OFFSET))
+#define ASM_GCR_TC_PROFILE_ADDON_INFO_(CORE) (ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE))
+#define ASM_GCR_PROFILE_ADDON_INFO_(CORE,TC) (ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE)+(TC*ASM_TC_ADDON_OFFSET))
+
+
+#define ASM_TC_ID_(CORE,TC) (ASM_TC0_TC_ID_(CORE)+(TC*4))
+#define ASM_TC_MCU_PMC0_(CORE,TC) (ASM_TC0_MCU_PMC0_(CORE)+(TC*8))
+#define ASM_TC_MCU_PMC1_(CORE,TC) (ASM_TC0_MCU_PMC1_(CORE)+(TC*8))
+#define ASM_MCU_ELM_CNT_(CORE,CNT) (ASM_MCU_ELM_CNT0_(CORE)+(CNT*4))
+#define ASM_DBG_(CORE,NUM) (ASM_DBG1_(CORE)+(NUM*4))
+
+
+
+//////////////////ASM Definition/////////////////////////////
+
+
+#define IRQ_ASM_CORE MD_IRQID_ADOE
+
+//#define ASM_NUM (6)
+#define ASM_TC_NUM (4)
+#define ASM_PMC_NUM (2)
+#define ASM_MCU_ELM_NUM (4)
+#define ASM_ADDON_NUM (4)
+
+#define WORDS_PER_1KB (1024 >> 2)
+#define ASM_VERSION_VAL (0x20160221)
+
+
+//ASM_GEN_CONFIG
+#define ASM_ENABLE_BIT (0)
+#define ASM_RESET_BIT (2)
+#define ASM_PDI_BIT (3)
+#define ASM_MCU_ELM_EN_BIT (4)
+#define ASM_PMC_REF_VALID_BIT (12)
+
+#define ASM_ENABLE_MASK (1 << ASM_ENABLE_BIT)
+#define ASM_RESET_MASK (1 << ASM_RESET_BIT)
+#define ASM_PDI_MASK (1 << ASM_PDI_BIT)
+#define ASM_MCU_ELM_EN_MASK (1 << ASM_MCU_ELM_EN_BIT)
+#define ASM_PMC_REF_VALID_MASK (1 << ASM_PMC_REF_VALID_BIT)
+
+#define ASM_TC_ID_CORE_ID_OPTION_MASK (1 << ASM_TC_ID_CORE_ID_EN)
+#define ASM_PC_OPTION_MASK (1 << ASM_PC_EN)
+#define ASM_PMC_OPTION_MASK ((1 << ASM_MCU_PMC0_EN)|(1 << ASM_MCU_PMC1_EN))
+#define ASM_MCU_ELM_OPTION_MASK ((1 << ASM_MCU_ELM_CNT0_EN)|(1 << ASM_MCU_ELM_CNT1_EN)|(1 << ASM_MCU_ELM_CNT2_EN)|\
+ (1 << ASM_MCU_ELM_CNT3_EN))
+
+
+#define ASM_ADDON_OPTION_MASK (0x00FF0000)
+
+#define ASM_OPTION_MASK ((1 << ASM_PROFILE_END)-1)
+
+//ASM_MODE_CONFIG
+#define ASM_MCG_BIT (0)
+#define ASM_TRACER_MODE_BIT (1)
+#define ASM_WRAP_MODE_EN_BIT (2)
+#define APB_WR_GCR_BIT (3)
+#define ABM_WORK_TC_REF_VALID_BIT (5)
+#define ABM_TRANS_IDLE_EN_BIT (7)
+
+
+#define ASM_MCG_EN (0 << ASM_MCG_BIT)
+#define ASM_SWLA_MODE_EN (0 << ASM_TRACER_MODE_BIT)
+#define ASM_TRACER_MODE_EN (1 << ASM_TRACER_MODE_BIT)
+#define ASM_WRAP_MODE_EN (1 << ASM_WRAP_MODE_EN_BIT)
+#define APB_WR_GCR_BIT_EN (1 << APB_WR_GCR_BIT)
+#define ABM_WORK_TC_REF_VALID_EN (1 << ABM_WORK_TC_REF_VALID_BIT)
+#define ABM_TRANS_IDLE_EN (1 << ABM_TRANS_IDLE_EN_BIT)
+
+#define ASM_HW_SWLA_STRAM_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+#define ASM_HW_SWLA_WRAP_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_WRAP_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+#define ASM_HW_SWTR_STRAM_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+#define ASM_HW_SWTR_WRAP_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_WRAP_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+
+//ASM_SPM_CONFIG
+#define ASM_SPM_REQ_BIT (0)
+#define ASM_SPM_GRANT_BIT (1)
+#define ASM_CTRL_IDLE_BIT (2)
+#define ASM_AXI_MST_SPM_GRANT_BIT (3)
+#define ASM_AXI_MST_IDLE_BIT (4)
+#define ASM_IDLE_BIT (8)
+
+#define ASM_SPM_REQ_MASK (1 << ASM_SPM_REQ_BIT)
+#define ASM_SPM_GRANT_MASK (1 << ASM_SPM_GRANT_BIT)
+#define ASM_CTRL_IDLE_MASK (1 << ASM_CTRL_IDLE_BIT)
+#define ASM_AXI_MST_SPM_GRANT_MASK (1 << ASM_AXI_MST_SPM_GRANT_BIT)
+#define ASM_AXI_MST_IDLE_MASK (1 << ASM_AXI_MST_IDLE_BIT)
+#define ASM_IDLE_MASK (1 << ASM_IDLE_BIT)
+
+
+//ASM_HEADER
+#define ASM_PDI_HEADER_VAL (0x4C4F5354)
+#define ASM_HW_SWTR_HEADER_VAL (0x53575452)
+#define ID_HEAD (0x4449 << 16)
+#define ASM_HEADER_SIZE (2)
+#define ASM_CORE_START_BIT (0)
+#define ASM_TC_START_BIT (8)
+#define ASM_QOS_START_BIT (16)
+#define ASM_QOS_BITS_PER_VPE (2)
+#define ASM_QOS_CLR_MASK (0x03)
+
+
+#define ASM_MAX_BUF_BIT_LEN (32)
+#define ASM_BUF_ALT_TH_VAL (4)
+
+/*SRAM*/
+#define ASM_SRAM_FULL_STATUS_BIT (28)
+#define ASM_SRAM_EMPTY_STATUS_BIT (27)
+#define ASM_SRAM_DBG_MODE_BIT (0)
+#define ASM_SRAM_DBG_MODE_RDY_BIT (1)
+#define ASM_SRAM_WR_BIT (0)
+#define ASM_SRAM_RD_BIT (8)
+#define ASM_SRAM_MAX_WATER_BIT (16)
+
+
+#define ASM_SRAM_WR_MASK (0x000000FF)
+#define ASM_SRAM_RD_MASK (0x0000FF00)
+#define ASM_SRAM_MAX_WATER_MASK (0x01FF0000)
+#define ASM_SRAM_FULL_STATUS_MASK (1 << ASM_SRAM_FULL_STATUS_BIT)
+#define ASM_SRAM_EMPTY_STATUS_MASK (1 << ASM_SRAM_EMPTY_STATUS_BIT)
+#define ASM_SRAM_DBG_MODE_MASK (1 << ASM_SRAM_DBG_MODE_BIT)
+#define ASM_SRAM_DBG_MODE_RDY_MASK (1 << ASM_SRAM_DBG_MODE_RDY_BIT)
+#define ASM_SRAM_DBG_ADDR_MASK (0x000000FF)
+
+
+#define ASM_TOP_INT_STATUS_BIT (0)
+#define ASM_TOP_ERROR_INT_STATUS_BIT (8)
+#define ASM_TOP_IDLE_STATUS_BIT (16)
+#define ASM_TOP_INT_MASK_STATUS_BIT (24)
+#define ASM_TOP_INT_STATUS_MASK (0x03)
+#define ASM_TOP_ERROR_INT_STATUS_MASK (0x0300)
+#define ASM_TOP_IDLE_STATUS_MASK (0x030000)
+#define ASM_TOP_INT_MASK_STATUS_MASK (0x03000000)
+
+#define ASM_AXI_MAX_BURST_LEN_BIT (0)
+#define ASM_AXI_MAX_OSTD_NUMBER_BIT (4)
+#define ASM_AXI_POST_WRITE_CFG_BIT (8)
+#define ASM_AXI_AWPROT_BIT (12)
+#define ASM_AXI_AWLOCK_BIT (16)
+#define ASM_AXI_WID_BIT (20)
+#define ASM_AXI_ULTRA_BIT (24)
+#define ASM_AXI_FLUSH_BIT (28)
+#define ASM_AXI_CONFIG_DEFAULT_VAL (0x00000002)
+#define ASM_SPM_CONFIG_DEFAULT_VAL (0x00000114)
+
+
+#define ASM_AXI_MAX_BURST_LEN_MASK (0x00000003)
+#define ASM_AXI_MAX_OSTD_NUMBER_MASK (0x00000030)
+#define ASM_AXI_POST_WRITE_CFG_MASK (0x00000300)
+#define ASM_AXI_AWPROT_MASK (0x00007000)
+#define ASM_AXI_AWLOCK_MASK (0x00030000)
+#define ASM_AXI_WID_MASK (0x00100000)
+#define ASM_AXI_ULTRA_MASK (0x03000000)
+#define ASM_AXI_FLUSH_MASK (0x30000000)
+
+// Interrupter ack
+
+#define ASM_THRESHOLD_INT_ACK (1 << ASM_THRESHOLD_INT)
+#define ASM_AGGRESSIVE_TRIG_INT_ACK (1 << ASM_AGGRESSIVE_TRIG_INT)
+#define ASM_APB_WR_GCR_ILLEGAL_INT_ACK (1 << ASM_APB_WR_GCR_ILLEGAL_INT)
+#define ASM_ILLEGAL_DISABLE_INT_ACK (1 << ASM_ILLEGAL_DISABLE_INT)
+#define ASM_PDI_INT_ACK (1 << ASM_PDI_INT)
+
+
+//////////////////ASM Data structure/////////////////////////////
+
+typedef struct _ASM_STRUCT {
+ kal_uint32 asm_mode;
+// kal_uint32 gen_config;
+ kal_uint32 mode_config;
+ kal_uint32 swtr_header;
+
+ kal_uint32 buf_base_address;
+ kal_uint32 buf_size;
+ kal_uint32 buf_read_ptr;
+ kal_uint32 buf_write_ptr;
+ kal_uint32 thresh_value;
+ kal_uint32 buf_remain_size;
+
+ kal_uint32 sram_status;
+ kal_uint32 sram_max_buf_size;
+ kal_uint32 water_level;
+
+ kal_uint32 profile_en;
+ kal_uint32 addon[ASM_TC_NUM][ASM_ADDON_NUM];
+// kal_uint32 context_id[ASM_TC_NUM];
+
+ kal_uint32 sample_rate;
+ kal_uint32 wrap_cnt;
+ kal_uint32 pdi_cnt;
+ kal_uint32 axi_config;
+// kal_uint32 trigger_cnt;
+
+ kal_uint32 int_en;
+ kal_uint32 int_status;
+ kal_uint32 asm_is_enabled;
+ kal_uint32 spm_set;
+ kal_uint32 start_time;
+ kal_uint32 stop_time;
+
+} ASM_STRUCT;
+
+extern kal_uint32 ASM_Dummy_Read;
+extern kal_uint32 PC_Val;
+
+//////////////////ASM Macro/////////////////////////////
+
+/*Mode and Config*/
+#define ASM_GET_GEN_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_GEN_CONFIG(CORE,VAL) do{*((volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE)));}while(0)
+
+#define ASM_GET_MODE_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_MODE_CONFIG(CORE,VAL) do{*((volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE)));}while(0)
+
+
+/*Interrupter*/
+#define ASM_GET_L2ISAR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2ISAR_(CORE)));}while(0)
+
+#define ASM_SET_L2ISAR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2ISAR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2ISAR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMKR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMKR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMCR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMCR_(CORE)));}while(0)
+
+#define ASM_SET_L2IMCR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2IMCR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2IMCR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMSR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMSR_(CORE)));}while(0)
+
+#define ASM_SET_L2IMSR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2IMSR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2IMSR_(CORE)));}while(0)
+
+
+/*Trigger*/
+#define ASM_GET_SWLA_TRIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_SET_SWLA_TRIG(CORE,TC) do{*((volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE))) = (1 << TC);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_GET_GCR_SWLA_TRIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_SET_GCR_SWLA_TRIG(CORE,TC) do{*((volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE))) = (1 << TC);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE))); }while(0)
+
+
+/*TC_CONTEXT_ID*/
+#define ASM_GET_TC_CONTEXT_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_TC_CONTEXT_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_GET_GCR_TC_CONTEXT_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_GCR_TC_CONTEXT_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+
+/*CORE/TC ID*/
+#define ASM_GET_CORE_ID(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_CORE_ID_(CORE)));}while(0)
+
+#define ASM_SET_CORE_ID(CORE,VAL) do{*((volatile kal_uint32*)(ASM_CORE_ID_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_CORE_ID_(CORE)));}while(0)
+
+#define ASM_GET_TC_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_TC_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_TC_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TC_ID_(CORE,TC)));}while(0)
+
+
+
+/*Option*/
+#define ASM_GET_PROFILE_EN(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PROFILE_EN_(CORE)));}while(0)
+
+#define ASM_SET_PROFILE_EN(CORE,VAL) do{*((volatile kal_uint32*)(ASM_PROFILE_EN_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PROFILE_EN_(CORE)));}while(0)
+
+#define ASM_GET_MCU_PC(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MCU_PC_(CORE)));}while(0)
+
+#define ASM_GET_TC_MCU_PMC0(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_MCU_PMC0_(CORE,TC)));}while(0)
+
+#define ASM_GET_TC_MCU_PMC1(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_MCU_PMC1_(CORE,TC)));}while(0)
+
+#define ASM_GET_MCU_ELM_CNT(CORE,CNT,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MCU_ELM_CNT_(CORE,CNT)));}while(0)
+
+#define ASM_GET_IOCU_ELM_CNT(CORE,CNT,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_IOCU_ELM_CNT_(CORE,CNT)));}while(0)
+
+
+#define ASM_GET_TIME_STAMP(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TIME_STAMP_(CORE)));}while(0)
+
+#define ASM_GET_VERSION(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_VERSION_(CORE)));}while(0)
+
+#define ASM_GET_TR_HEAD(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TR_HEAD_(CORE)));}while(0)
+
+#define ASM_SET_TR_HEAD(CORE,VAL) do{*(volatile kal_uint32*)(ASM_TR_HEAD_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TR_HEAD_(CORE)));}while(0)
+
+#define ASM_GET_TRACER_SAMPLE_RATE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)));}while(0)
+
+#define ASM_SET_TRACER_SAMPLE_RATE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)));}while(0)
+
+#define ASM_GET_PDI_HEADER(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)));}while(0)
+
+#define ASM_SET_PDI_HEADER(CORE,VAL) do{*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)));}while(0)
+
+#define ASM_GET_PDI_CNT(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)));}while(0)
+
+#define ASM_SET_PDI_CNT(CORE,VAL) do{*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)));}while(0)
+
+#define ASM_GET_WRAP_CNT(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)));}while(0)
+
+#define ASM_SET_WRAP_CNT(CORE,VAL) do{*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)));}while(0)
+
+#define ASM_GET_SPM_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_SPM_CONFIG(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_SPM_REQ(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)) = (VAL)&ASM_SPM_REQ_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_GET_SPM_REQ(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_SPM_REQ_MASK) >> ASM_SPM_REQ_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_GRANT(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_SPM_GRANT_MASK) >> ASM_SPM_GRANT_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_CTRL_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_CTRL_IDLE_MASK) >> ASM_CTRL_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_AXI_MST_SPM_GRANT(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_AXI_MST_SPM_GRANT_MASK) >> ASM_AXI_MST_SPM_GRANT_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_AXI_MST_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_AXI_MST_IDLE_MASK) >> ASM_AXI_MST_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_IDLE_MASK) >> ASM_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_INT_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_INT_STATUS_MASK) >> ASM_TOP_INT_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_ERROR_INT_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_ERROR_INT_STATUS_MASK) >> ASM_TOP_ERROR_INT_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_IDLE_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_IDLE_STATUS_MASK) >> ASM_TOP_IDLE_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_INT_MASK_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS))&ASM_TOP_INT_MASK_STATUS_MASK) >> ASM_TOP_INT_MASK_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_STATUS(VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP));}while(0)
+
+#define ASM_GET_DUMMY(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_DUMMY_(CORE)));}while(0)
+
+#define ASM_SET_DUMMY(CORE,VAL) do{*(volatile kal_uint32*)(ASM_DUMMY_(CORE)) = (VAL);}while(0)
+
+
+/*BUFFER*/
+#define ASM_GET_LOG_BUF_BASEADDR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)));}while(0)
+
+#define ASM_SET_LOG_BUF_BASEADDR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)));}while(0)
+
+#define ASM_GET_LOG_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_SET_LOG_BUF_SIZE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_GET_BUF_RD_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)));}while(0)
+
+#define ASM_SET_BUF_RD_PTR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)));}while(0)
+
+#define ASM_GET_BUF_WR_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)));}while(0)
+
+#define ASM_SET_BUF_WR_PTR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)));}while(0)
+
+#define ASM_GET_BUF_ALT_THRESH(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)));}while(0)
+
+#define ASM_SET_BUF_ALT_THRESH(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)));}while(0)
+
+#define ASM_GET_REM_LOG_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_REM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+
+/*SRAM*/
+#define ASM_GET_SRAM_MAX_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_SET_SRAM_MAX_BUF_SIZE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_STATUS(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)));}while(0)
+
+#define ASM_SET_SRAM_STATUS(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_WR_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_WR_MASK;}while(0)
+
+#define ASM_GET_SRAM_RD_PTR(CORE,VAL) do{VAL = ((*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_RD_MASK)>>ASM_SRAM_RD_BIT;}while(0)
+
+#define ASM_GET_SRAM_MAX_WATER(CORE,VAL) do{VAL = ((*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_MAX_WATER_MASK)>>ASM_SRAM_MAX_WATER_BIT;}while(0)
+
+#define ASM_GET_SRAM_FULL_STATUS(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_FULL_STATUS_MASK;}while(0)
+
+#define ASM_GET_SRAM_EMPTY_STATUS(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_EMPTY_STATUS_MASK;}while(0)
+
+#define ASM_GET_SRAM_DBG_MODE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)))&ASM_SRAM_DBG_MODE_MASK;}while(0)
+
+#define ASM_SET_SRAM_DBG_MODE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)) = (VAL)&ASM_SRAM_DBG_MODE_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_DBG_MODE_RDY(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)))&ASM_SRAM_DBG_MODE_RDY_MASK;}while(0)
+
+#define ASM_SET_SRAM_DBG_ADDR(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)) = (VAL)&ASM_SRAM_DBG_ADDR_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_DBG_ADDR(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)))&ASM_SRAM_DBG_ADDR_MASK;\
+ }while(0)
+
+#define ASM_GET_SRAM_DBG_DATA(CORE,VAL) do{(VAL) = *(volatile kal_uint32*)(ASM_SRAM_DBG_DATA_(CORE));\
+ }while(0)
+
+
+/*DEBUG REGISTER*/
+#define ASM_GET_DBG(CORE,NUM,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_DBG_(CORE,NUM)));}while(0)
+
+
+/*AXI_CONFIG*/
+#define ASM_SET_AXI_CONFIG(CORE,VAL) do{*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (VAL);\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+
+#define ASM_GET_AXI_MAX_BURST_LEN(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_MAX_BURST_LEN_MASK) >> ASM_AXI_MAX_BURST_LEN_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_MAX_BURST_LEN(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_MAX_BURST_LEN_MASK))\
+ |((VAL << ASM_AXI_MAX_BURST_LEN_BIT)&(ASM_AXI_MAX_BURST_LEN_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_MAX_OSTD_NUMBER(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_MAX_OSTD_NUMBER_MASK) >> ASM_AXI_MAX_OSTD_NUMBER_BIT;}while(0)
+
+#define ASM_SET_AXI_MAX_OSTD_NUMBER(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_MAX_OSTD_NUMBER_MASK))\
+ |((VAL << ASM_AXI_MAX_OSTD_NUMBER_BIT)&(ASM_AXI_MAX_OSTD_NUMBER_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_POST_WRITE_CF(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_POST_WRITE_CFG_MASK) >> ASM_AXI_POST_WRITE_CFG_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_POST_WRITE_CF(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_POST_WRITE_CFG_MASK))\
+ |((VAL << ASM_AXI_POST_WRITE_CFG_BIT)&(ASM_AXI_POST_WRITE_CFG_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_AXI_AWPROT(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_AWPROT_MASK) >> ASM_AXI_AWPROT_BIT;}while(0)
+
+#define ASM_SET_AXI_AWPROT(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_AWPROT_MASK))\
+ |((VAL << ASM_AXI_AWPROT_BIT)&(ASM_AXI_AWPROT_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_AWLOCK(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_AWLOCK_MASK) >> ASM_AXI_AWLOCK_BIT;}while(0)
+
+#define ASM_SET_AXI_AWLOCK(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_AWLOCK_MASK))\
+ |((VAL << ASM_AXI_AWLOCK_BIT)&(ASM_AXI_AWLOCK_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_WID(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_WID_MASK) >> ASM_AXI_WID_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_WID(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_WID_MASK))\
+ |((VAL << ASM_AXI_WID_BIT)&(ASM_AXI_WID_MASK)));\
+
+#define ASM_GET_AXI_ULTRA(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_ULTRA_MASK) >> ASM_AXI_ULTRA_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_ULTRA(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_ULTRA_MASK))\
+ |((VAL << ASM_AXI_ULTRA_BIT)&(ASM_AXI_ULTRA_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_FLUSH(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_FLUSH_MASK) >> ASM_AXI_FLUSH_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_FLUSH(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_FLUSH_MASK))\
+ |((VAL << ASM_AXI_FLUSH_BIT)&(ASM_AXI_FLUSH_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+
+#endif //__ASM_REG_93_H__
+
diff --git a/mcu/driver/devdrv/asm/inc/asm_reg_95.h b/mcu/driver/devdrv/asm/inc/asm_reg_95.h
new file mode 100644
index 0000000..abb5bb8
--- /dev/null
+++ b/mcu/driver/devdrv/asm/inc/asm_reg_95.h
@@ -0,0 +1,872 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * asm_reg.h
+ *
+ * Project:
+ * --------
+ * UMOLY_Software
+ *
+ * Description:
+ * ------------
+ * This file defines ASM drivers register
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __ASM_REG_95_H__
+#define __ASM_REG_95_H__
+
+#include "kal_general_types.h"
+#include "reg_base.h"
+#include "intrCtrl.h"
+#include "boot.h"
+
+typedef enum
+{
+ ASM_AXI_MAX_BURST_LEN_4 = 0,
+ ASM_AXI_MAX_BURST_LEN_8,
+ ASM_AXI_MAX_BURST_LEN_16,
+
+}ASM_AXI_MAX_OSTD_NUMBER;
+
+
+typedef enum
+{
+ ASM_AXI_MAX_OSTD_NUMBER_0 = 0,
+ ASM_AXI_MAX_OSTD_NUMBER_1,
+ ASM_AXI_MAX_OSTD_NUMBER_2,
+ ASM_AXI_MAX_OSTD_NUMBER_3,
+
+}ASM_AXI_MAX_OSTD_LEN;
+
+
+typedef enum
+{
+ ASM_AXI_NON_POST_WRITE_LAST_TRANACTION = 0,
+ ASM_AXI_NON_POST_WRITE,
+ ASM_AXI_POST_WRITE,
+}ASM_AXI_POST_WRITE_CFG;
+
+
+
+
+//////////////////ASM Registers/////////////////////////////
+#define BASE_ADDR_ASM_GCR (GCR_CUSTOM_ADDR+0x8000)
+#define ASM_GCR_BASEADDR (BASE_ADDR_ASM_GCR)
+#define ASM_BASEADDR (BASE_MADDR_MDMCU_ABM)
+
+
+//CORE0 ASM ASM_BASEADDR+0x0000
+//CORE1 ASM ASM_BASEADDR+0x1000
+//CORE2 ASM ASM_BASEADDR+0x2000
+//CORE3 ASM ASM_BASEADDR+0x3000
+#define CORE_OFFSET_SHIFT_BIT (12)
+#define CORE_OFFSET (0x1000)
+
+
+//Register offset
+#define ASM_GEN_CONFIG (0x0000)
+#define ASM_MODE_CONFIG (0x0004)
+#define ASM_PROFILE_EN (0x0008)
+#define ASM_AXI_CONFIG (0x000C)
+#define ASM_SPM_CONFIG (0x0010)
+#define ASM_VERSION (0x0014)
+#define ASM_L2ISAR (0x0020)
+#define ASM_L2IMKR (0x0024)
+#define ASM_L2IMCR (0x0028)
+#define ASM_L2IMSR (0x002C)
+#define ASM_GCR_SWLA_TRIG (0x0030)
+#define ASM_GCR_TC0_CONTEXT_ID (0x0040)
+#define ASM_GCR_TC1_CONTEXT_ID (0x0044)
+#define ASM_GCR_TC2_CONTEXT_ID (0x0048)
+#define ASM_GCR_TC3_CONTEXT_ID (0x004C)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO0 (0x0060)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO1 (0x0064)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO2 (0x0068)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO3 (0x006C)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO0 (0x0070)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO1 (0x0074)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO2 (0x0078)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO3 (0x007C)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO0 (0x0080)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO1 (0x0084)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO2 (0x0088)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO3 (0x008C)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO0 (0x0090)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO1 (0x0094)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO2 (0x0098)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO3 (0x009C)
+#define ASM_TC0_TC_ID (0x00E0)
+#define ASM_TC1_TC_ID (0x00E4)
+#define ASM_TC2_TC_ID (0x00E8)
+#define ASM_TC3_TC_ID (0x00EC)
+#define ASM_CORE_ID (0x0100)
+#define ASM_MCU_PC (0x0104)
+#define ASM_TC0_MCU_PMC0 (0x0108)
+#define ASM_TC0_MCU_PMC1 (0x010C)
+#define ASM_TC1_MCU_PMC0 (0x0110)
+#define ASM_TC1_MCU_PMC1 (0x0114)
+#define ASM_TC2_MCU_PMC0 (0x0118)
+#define ASM_TC2_MCU_PMC1 (0x011C)
+#define ASM_TC3_MCU_PMC0 (0x0120)
+#define ASM_TC3_MCU_PMC1 (0x0124)
+#define ASM_TC4_MCU_PMC0 (0x0128)
+#define ASM_TC4_MCU_PMC1 (0x012C)
+#define ASM_MCU_ELM_CNT0 (0x0150)
+#define ASM_MCU_ELM_CNT1 (0x0154)
+#define ASM_MCU_ELM_CNT2 (0x0158)
+#define ASM_MCU_ELM_CNT3 (0x015C)
+#define ASM_MCU_ELM_CNT4 (0x0160)
+#define ASM_MCU_ELM_CNT5 (0x0164)
+#define ASM_MCU_VPE_ULTRA_EN (0x0168)
+#define ASM_TIME_STAMP (0x016C)
+#define ASM_PDI_HEADER (0x0174)
+#define ASM_PDI_CNT (0x0178)
+#define ASM_TRACER_SAMPLE_RATE (0x017C)
+#define ASM_LOG_BUF_BASEADDR (0x0180)
+#define ASM_LOG_BUF_SIZE (0x0184)
+#define ASM_WRAP_CNT (0x0188)
+#define ASM_BUF_RD_PTR (0x018C)
+#define ASM_BUF_WR_PTR (0x0190)
+#define ASM_BUF_ALT_THRESH (0x0194)
+#define ASM_SRAM_STATUS (0x0198)
+#define ASM_SRAM_MAX_BUF_SIZE (0x019C)
+#define ASM_REM_LOG_BUF_SIZE (0x01A0)
+#define ASM_SRAM_DBG (0x01A4)
+#define ASM_SRAM_DBG_ADDR (0x01A8)
+#define ASM_SRAM_DBG_DATA (0x01AC)
+#define ASM_SELF_TEST_EN (0x01B0)
+#define ASM_SEL_TEST_KEY (0x01B4)
+#define ASM_DBG1 (0x01D0)
+#define ASM_DBG2 (0x01D4)
+#define ASM_DBG3 (0x01D8)
+#define ASM_DBG4 (0x01DC)
+#define ASM_DBG5 (0x01E0)
+#define ASM_DBG6 (0x01E4)
+#define ASM_DBG7 (0x01E8)
+#define ASM_DBG8 (0x01EC)
+#define ASM_DUMMY (0x0220)
+#define ASM_TOP_INT_STATUS (0x4000)
+#define ASM_TOP_CORE_EN (0x4004)
+
+
+
+
+//MCU ASM APB Register Address
+#define ASM_GEN_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GEN_CONFIG )
+#define ASM_MODE_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MODE_CONFIG)
+#define ASM_PROFILE_EN_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PROFILE_EN )
+#define ASM_AXI_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_AXI_CONFIG )
+#define ASM_SPM_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SPM_CONFIG )
+#define ASM_VERSION_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_VERSION )
+#define ASM_L2ISAR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2ISAR )
+#define ASM_L2IMKR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMKR )
+#define ASM_L2IMCR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMCR )
+#define ASM_L2IMSR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMSR )
+#define ASM_SWLA_TRIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_SWLA_TRIG )
+#define ASM_TC0_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_CONTEXT_ID )
+#define ASM_TC1_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_CONTEXT_ID )
+#define ASM_TC2_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_CONTEXT_ID )
+#define ASM_TC3_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_CONTEXT_ID )
+#define ASM_TC0_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO0 )
+#define ASM_TC0_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO1 )
+#define ASM_TC0_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO2 )
+#define ASM_TC0_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO3 )
+#define ASM_TC1_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO0 )
+#define ASM_TC1_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO1 )
+#define ASM_TC1_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO2 )
+#define ASM_TC1_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO3 )
+#define ASM_TC2_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO0 )
+#define ASM_TC2_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO1 )
+#define ASM_TC2_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO2 )
+#define ASM_TC2_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO3 )
+#define ASM_TC3_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO0 )
+#define ASM_TC3_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO1 )
+#define ASM_TC3_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO2 )
+#define ASM_TC3_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO3 )
+#define ASM_TC0_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_TC_ID )
+#define ASM_TC1_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_TC_ID )
+#define ASM_TC2_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_TC_ID )
+#define ASM_TC3_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_TC_ID )
+#define ASM_CORE_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_CORE_ID )
+#define ASM_MCU_PC_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_PC )
+#define ASM_TC0_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_MCU_PMC0 )
+#define ASM_TC0_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_MCU_PMC1 )
+#define ASM_TC1_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_MCU_PMC0 )
+#define ASM_TC1_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_MCU_PMC1 )
+#define ASM_TC2_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_MCU_PMC0 )
+#define ASM_TC2_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_MCU_PMC1 )
+#define ASM_TC3_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_MCU_PMC0 )
+#define ASM_TC3_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_MCU_PMC1 )
+#define ASM_MCU_ELM_CNT0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT0 )
+#define ASM_MCU_ELM_CNT1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT1 )
+#define ASM_MCU_ELM_CNT2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT2 )
+#define ASM_MCU_ELM_CNT3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT3 )
+#define ASM_MCU_ELM_CNT4_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT4 )
+#define ASM_MCU_ELM_CNT5_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT5 )
+#define ASM_TIME_STAMP_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TIME_STAMP )
+#define ASM_PDI_HEADER_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PDI_HEADER )
+#define ASM_PDI_CNT_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PDI_CNT )
+#define ASM_TRACER_SAMPLE_RATE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TRACER_SAMPLE_RATE )
+#define ASM_LOG_BUF_BASEADDR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_LOG_BUF_BASEADDR )
+#define ASM_LOG_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_LOG_BUF_SIZE )
+#define ASM_WRAP_CNT_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_WRAP_CNT )
+#define ASM_BUF_RD_PTR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_RD_PTR )
+#define ASM_BUF_WR_PTR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_WR_PTR )
+#define ASM_BUF_ALT_THRESH_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_ALT_THRESH )
+#define ASM_SRAM_MAX_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_MAX_BUF_SIZE )
+#define ASM_SRAM_STATUS_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_STATUS )
+#define ASM_REM_LOG_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_REM_LOG_BUF_SIZE )
+#define ASM_SRAM_DBG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG )
+#define ASM_SRAM_DBG_ADDR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG_ADDR )
+#define ASM_SRAM_DBG_DATA_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG_DATA )
+#define ASM_SELF_TEST_EN_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SELF_TEST_EN )
+#define ASM_SEL_TEST_KEY_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SEL_TEST_KEY )
+#define ASM_DBG1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG1 )
+#define ASM_DBG2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG2 )
+#define ASM_DBG3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG3 )
+#define ASM_DBG4_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG4 )
+#define ASM_DBG5_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG5 )
+#define ASM_DBG6_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG6 )
+#define ASM_DBG7_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG7 )
+#define ASM_DBG8_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG8 )
+#define ASM_DBG9_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG9 )
+#define ASM_DBG10_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG10 )
+#define ASM_DBG11_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG11 )
+#define ASM_DBG12_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG12 )
+#define ASM_DUMMY_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DUMMY )
+#define ASM_TOP_INT_STATUS_TOP (ASM_BASEADDR+ASM_TOP_INT_STATUS)
+#define ASM_TOP_CORE_EN_TOP (ASM_BASEADDR+ASM_TOP_CORE_EN)
+
+
+
+//MCU ASM GCR Register Address
+#define ASM_GCR_SWLA_TRIG_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_SWLA_TRIG)
+#define ASM_GCR_TC0_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_CONTEXT_ID)
+#define ASM_GCR_TC1_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_CONTEXT_ID)
+#define ASM_GCR_TC2_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_CONTEXT_ID)
+#define ASM_GCR_TC3_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_CONTEXT_ID)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO3)
+
+
+
+
+
+//ASM MCU CORE register
+#define ASM_TC_CONTEXT_ID_(CORE,TC) (ASM_TC0_CONTEXT_ID_(CORE)+(TC*4))
+#define ASM_GCR_TC_CONTEXT_ID_(CORE,TC) (ASM_GCR_TC0_CONTEXT_ID_(CORE)+(TC*4))
+
+#define ASM_TC_ADDON_OFFSET (ASM_GCR_TC1_PROFILE_ADDON_INFO0-ASM_GCR_TC0_PROFILE_ADDON_INFO0)
+#define ASM_TC_PROFILE_ADDON_INFO_(CORE) (ASM_TC0_PROFILE_ADDON_INFO0_(CORE))
+#define ASM_PROFILE_ADDON_INFO_(CORE,TC) (ASM_TC0_PROFILE_ADDON_INFO0_(CORE)+(TC*ASM_TC_ADDON_OFFSET))
+#define ASM_GCR_TC_PROFILE_ADDON_INFO_(CORE) (ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE))
+#define ASM_GCR_PROFILE_ADDON_INFO_(CORE,TC) (ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE)+(TC*ASM_TC_ADDON_OFFSET))
+
+
+#define ASM_TC_ID_(CORE,TC) (ASM_TC0_TC_ID_(CORE)+(TC*4))
+#define ASM_TC_MCU_PMC0_(CORE,TC) (ASM_TC0_MCU_PMC0_(CORE)+(TC*8))
+#define ASM_TC_MCU_PMC1_(CORE,TC) (ASM_TC0_MCU_PMC1_(CORE)+(TC*8))
+#define ASM_MCU_ELM_CNT_(CORE,CNT) (ASM_MCU_ELM_CNT0_(CORE)+(CNT*4))
+#define ASM_DBG_(CORE,NUM) (ASM_DBG1_(CORE)+(NUM*4))
+
+
+
+//////////////////ASM Definition/////////////////////////////
+
+
+#define IRQ_ASM_CORE MD_IRQID_ADOE
+
+#define ASM_TC_NUM (4)
+#define ASM_PMC_NUM (2)
+#define ASM_MCU_ELM_NUM (6)
+#define ASM_ADDON_NUM (4)
+
+#define WORDS_PER_1KB (1024 >> 2)
+#define ASM_VERSION_VAL (0x20160630)
+
+
+//ASM_GEN_CONFIG
+#define ASM_ENABLE_BIT (0)
+#define ASM_RESET_BIT (2)
+#define ASM_PDI_BIT (3)
+#define ASM_MCU_ELM_EN_BIT (4)
+#define ASM_PMC_REF_VALID_BIT (12)
+
+#define ASM_ENABLE_MASK (1 << ASM_ENABLE_BIT)
+#define ASM_RESET_MASK (1 << ASM_RESET_BIT)
+#define ASM_PDI_MASK (1 << ASM_PDI_BIT)
+#define ASM_MCU_ELM_EN_MASK (1 << ASM_MCU_ELM_EN_BIT)
+#define ASM_PMC_REF_VALID_MASK (1 << ASM_PMC_REF_VALID_BIT)
+
+#define ASM_TC_ID_CORE_ID_OPTION_MASK (1 << ASM_TC_ID_CORE_ID_EN)
+#define ASM_PC_OPTION_MASK (1 << ASM_PC_EN)
+#define ASM_PMC_OPTION_MASK ((1 << ASM_MCU_PMC0_EN)|(1 << ASM_MCU_PMC1_EN))
+#define ASM_MCU_ELM_OPTION_MASK ((1 << ASM_MCU_ELM_CNT0_EN)|(1 << ASM_MCU_ELM_CNT1_EN)|(1 << ASM_MCU_ELM_CNT2_EN)|\
+ (1 << ASM_MCU_ELM_CNT3_EN)|(1 << ASM_MCU_ELM_CNT4_EN)|(1 << ASM_MCU_ELM_CNT5_EN))
+
+
+#define ASM_ADDON_OPTION_MASK (0x00000F00)
+
+#define ASM_OPTION_MASK ((1 << ASM_PROFILE_END)-1)
+
+//ASM_MODE_CONFIG
+#define ASM_MCG_BIT (0)
+#define ASM_TRACER_MODE_BIT (1)
+#define ASM_WRAP_MODE_EN_BIT (2)
+#define APB_WR_GCR_BIT (3)
+#define ABM_WORK_TC_REF_VALID_BIT (5)
+#define ABM_TRANS_IDLE_EN_BIT (7)
+
+
+#define ASM_MCG_EN (0 << ASM_MCG_BIT)
+#define ASM_SWLA_MODE_EN (0 << ASM_TRACER_MODE_BIT)
+#define ASM_TRACER_MODE_EN (1 << ASM_TRACER_MODE_BIT)
+#define ASM_WRAP_MODE_EN (1 << ASM_WRAP_MODE_EN_BIT)
+#define APB_WR_GCR_BIT_EN (1 << APB_WR_GCR_BIT)
+#define ABM_WORK_TC_REF_VALID_EN (1 << ABM_WORK_TC_REF_VALID_BIT)
+#define ABM_TRANS_IDLE_EN (1 << ABM_TRANS_IDLE_EN_BIT)
+
+//#define ASM_HW_SWLA_STRAM_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+//#define ASM_HW_SWLA_WRAP_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_WRAP_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+//#define ASM_HW_SWTR_STRAM_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+//#define ASM_HW_SWTR_WRAP_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_WRAP_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+
+#define ASM_HW_SWLA_STRAM_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN)
+#define ASM_HW_SWLA_WRAP_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_WRAP_MODE_EN)
+#define ASM_HW_SWTR_STRAM_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN)
+#define ASM_HW_SWTR_WRAP_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_WRAP_MODE_EN)
+//ASM_SPM_CONFIG
+#define ASM_SPM_REQ_BIT (0)
+#define ASM_SPM_GRANT_BIT (1)
+#define ASM_ALL_IDLE_BIT (8)
+#define ASM_TRANS_IDLE_BIT (12)
+#define ASM_IDLE_BIT (16)
+#define ASM_CTRL_FSM_IDLE_BIT (24)
+#define ASM_CMDQ_IDLE_BIT (25)
+#define ASM_PERF_IDLE_BIT (26)
+#define ASM_CTRL_IDLE_BIT (27)
+#define ASM_SRAM_IF_IDLE_BIT (28)
+#define ASM_AXI_MASTER_IDLE_BIT (29)
+
+
+//#define ASM_CTRL_IDLE_BIT (2)
+//#define ASM_AXI_MST_SPM_GRANT_BIT (3)
+//#define ASM_AXI_MST_IDLE_BIT (4)
+//#define ASM_IDLE_BIT (8)
+
+#define ASM_SPM_REQ_MASK (1 << ASM_SPM_REQ_BIT)
+#define ASM_SPM_GRANT_MASK (1 << ASM_SPM_GRANT_BIT)
+#define ASM_ALL_IDLE_MASK (1 << ASM_ALL_IDLE_BIT)
+#define ASM_TRANS_IDLE_MASK (1 << ASM_TRANS_IDLE_BIT)
+#define ASM_IDLE_MASK (1 << ASM_IDLE_BIT)
+#define ASM_CTRL_FSM_IDLE_MASK (1 << ASM_CTRL_FSM_IDLE_BIT)
+#define ASM_CMDQ_IDLE_MASK (1 << ASM_CMDQ_IDLE_BIT)
+#define ASM_PERF_IDLE_MASK (1 << ASM_PERF_IDLE_BIT)
+#define ASM_CTRL_IDLE_MASK (1 << ASM_CTRL_IDLE_BIT)
+#define ASM_SRAM_IF_IDLE_MASK (1 << ASM_SRAM_IF_IDLE_BIT)
+#define ASM_AXI_MASTER_IDLE_MASK (1 << ASM_AXI_MASTER_IDLE_BIT)
+
+
+
+
+//#define ASM_CTRL_IDLE_MASK (1 << ASM_CTRL_IDLE_BIT)
+//#define ASM_AXI_MST_SPM_GRANT_MASK (1 << ASM_AXI_MST_SPM_GRANT_BIT)
+//#define ASM_AXI_MST_IDLE_MASK (1 << ASM_AXI_MST_IDLE_BIT)
+//#define ASM_IDLE_MASK (1 << ASM_IDLE_BIT)
+
+
+//ASM_HEADER
+#define ASM_PDI_HEADER_VAL (0x4C4F5354)
+//#define ASM_HW_SWTR_HEADER_VAL (0x53575452)
+#define ID_HEAD (0x4449 << 16)
+#define ASM_HEADER_SIZE (2)
+#define ASM_CORE_START_BIT (0)
+#define ASM_TC_START_BIT (8)
+#define ASM_QOS_START_BIT (16)
+#define ASM_QOS_BITS_PER_VPE (2)
+#define ASM_QOS_CLR_MASK (0x03)
+
+
+#define ASM_MAX_BUF_BIT_LEN (32)
+#define ASM_BUF_ALT_TH_VAL (4)
+
+/*ASM_SRAM_STATUS*/
+#define ASM_SRAM_WR_BIT (0)
+#define ASM_SRAM_RD_BIT (8)
+#define ASM_SRAM_MAX_WATER_BIT (16)
+#define ASM_SRAM_EMPTY_STATUS_BIT (27)
+#define ASM_SRAM_FULL_STATUS_BIT (28)
+#define ASM_SPM_RSM_PDI_VALID_BIT (29)
+#define ASM_TARGET_BUFFER_WRAP_BIT (30)
+#define ASM_BUF_WRAP_BIT (31)
+
+#define ASM_SRAM_WR_MASK (0x000000FF)
+#define ASM_SRAM_RD_MASK (0x0000FF00)
+#define ASM_SRAM_MAX_WATER_MASK (0x01FF0000)
+#define ASM_SRAM_EMPTY_STATUS_MASK (1 << ASM_SRAM_EMPTY_STATUS_BIT)
+#define ASM_SRAM_FULL_STATUS_MASK (1 << ASM_SRAM_FULL_STATUS_BIT)
+#define ASM_SPM_RSM_PDI_VALID_MASK (1 << ASM_SPM_RSM_PDI_VALID_BIT)
+#define ASM_TARGET_BUFFER_WRAP_MASK (1 << ASM_TARGET_BUFFER_WRAP_BIT)
+#define ASM_BUF_WRAP_MASK (1 << ASM_BUF_WRAP_BIT)
+
+
+/*ASM_SRAM_MAX_BUF_SIZE*/
+#define ASM_SRAM_DBG_MODE_BIT (0)
+#define ASM_SRAM_DBG_MODE_RDY_BIT (1)
+
+#define ASM_SRAM_DBG_MODE_MASK (1 << ASM_SRAM_DBG_MODE_BIT)
+#define ASM_SRAM_DBG_MODE_RDY_MASK (1 << ASM_SRAM_DBG_MODE_RDY_BIT)
+
+/*ASM_SRAM_DBG_ADDR*/
+#define ASM_SRAM_DBG_ADDR_MASK (0x000000FF)
+
+
+#define ASM_TOP_INT_STATUS_BIT (0)
+#define ASM_TOP_ERROR_INT_STATUS_BIT (8)
+#define ASM_TOP_IDLE_STATUS_BIT (16)
+#define ASM_TOP_INT_MASK_STATUS_BIT (24)
+#define ASM_TOP_INT_STATUS_MASK (((1 << ASM_NUM)-1) << ASM_TOP_INT_STATUS_BIT)
+#define ASM_TOP_ERROR_INT_STATUS_MASK (((1 << ASM_NUM)-1) << ASM_TOP_ERROR_INT_STATUS_BIT)
+#define ASM_TOP_IDLE_STATUS_MASK (((1 << ASM_NUM)-1) << ASM_TOP_IDLE_STATUS_BIT)
+#define ASM_TOP_INT_MASK_STATUS_MASK (((1 << ASM_NUM)-1) << ASM_TOP_INT_MASK_STATUS_BIT)
+
+#define ASM_AXI_MAX_BURST_LEN_BIT (0)
+#define ASM_AXI_MAX_OSTD_NUMBER_BIT (4)
+#define ASM_AXI_POST_WRITE_CFG_BIT (8)
+#define ASM_AXI_AWPROT_BIT (12)
+#define ASM_AXI_AWLOCK_BIT (16)
+#define ASM_AXI_WID_BIT (20)
+#define ASM_AXI_ULTRA_BIT (24)
+#define ASM_AXI_FLUSH_BIT (28)
+#define ASM_AXI_CONFIG_DEFAULT_VAL (0x00000002)
+#define ASM_SPM_CONFIG_DEFAULT_VAL (0x00000114)
+
+
+#define ASM_AXI_MAX_BURST_LEN_MASK (0x00000003)
+#define ASM_AXI_MAX_OSTD_NUMBER_MASK (0x00000030)
+#define ASM_AXI_POST_WRITE_CFG_MASK (0x00000300)
+#define ASM_AXI_AWPROT_MASK (0x00007000)
+#define ASM_AXI_AWLOCK_MASK (0x00030000)
+#define ASM_AXI_WID_MASK (0x00100000)
+#define ASM_AXI_ULTRA_MASK (0x03000000)
+#define ASM_AXI_FLUSH_MASK (0x30000000)
+
+// Interrupter ack
+
+#define ASM_THRESHOLD_INT_ACK (1 << ASM_THRESHOLD_INT)
+#define ASM_AGGRESSIVE_TRIG_INT_ACK (1 << ASM_AGGRESSIVE_TRIG_INT)
+#define ASM_APB_WR_GCR_ILLEGAL_INT_ACK (1 << ASM_APB_WR_GCR_ILLEGAL_INT)
+#define ASM_ILLEGAL_DISABLE_INT_ACK (1 << ASM_ILLEGAL_DISABLE_INT)
+#define ASM_PDI_INT_ACK (1 << ASM_PDI_INT)
+
+
+//////////////////ASM Data structure/////////////////////////////
+
+typedef struct _ASM_STRUCT {
+ kal_uint32 asm_mode;
+// kal_uint32 gen_config;
+ kal_uint32 mode_config;
+ kal_uint32 swtr_header;
+
+ kal_uint32 buf_base_address;
+ kal_uint32 buf_size;
+ kal_uint32 buf_read_ptr;
+ kal_uint32 buf_write_ptr;
+ kal_uint32 thresh_value;
+ kal_uint32 buf_remain_size;
+
+ kal_uint32 sram_status;
+ kal_uint32 sram_max_buf_size;
+ kal_uint32 water_level;
+
+ kal_uint32 profile_en;
+ kal_uint32 addon[ASM_TC_NUM][ASM_ADDON_NUM];
+// kal_uint32 context_id[ASM_TC_NUM];
+
+ kal_uint32 sample_rate;
+ kal_uint32 wrap_cnt;
+ kal_uint32 pdi_cnt;
+ kal_uint32 axi_config;
+// kal_uint32 trigger_cnt;
+
+ kal_uint32 int_en;
+ kal_uint32 int_status;
+ kal_uint32 asm_is_enabled;
+ kal_uint32 spm_set;
+ kal_uint32 start_time;
+ kal_uint32 stop_time;
+
+} ASM_STRUCT;
+
+extern kal_uint32 ASM_Dummy_Read;
+
+//////////////////ASM Macro/////////////////////////////
+
+/*Mode and Config*/
+#define ASM_GET_GEN_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_GEN_CONFIG(CORE,VAL) do{*((volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE)));}while(0)
+
+#define ASM_GET_MODE_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_MODE_CONFIG(CORE,VAL) do{*((volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE)));}while(0)
+
+
+/*Interrupter*/
+#define ASM_GET_L2ISAR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2ISAR_(CORE)));}while(0)
+
+#define ASM_SET_L2ISAR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2ISAR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2ISAR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMKR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMKR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMCR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMCR_(CORE)));}while(0)
+
+#define ASM_SET_L2IMCR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2IMCR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2IMCR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMSR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMSR_(CORE)));}while(0)
+
+#define ASM_SET_L2IMSR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2IMSR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2IMSR_(CORE)));}while(0)
+
+
+/*Trigger*/
+#define ASM_GET_SWLA_TRIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_SET_SWLA_TRIG(CORE,TC) do{*((volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE))) = (1 << TC);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_GET_GCR_SWLA_TRIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_SET_GCR_SWLA_TRIG(CORE,TC) do{*((volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE))) = (1 << TC);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE))); }while(0)
+
+
+/*TC_CONTEXT_ID*/
+#define ASM_GET_TC_CONTEXT_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_TC_CONTEXT_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_GET_GCR_TC_CONTEXT_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_GCR_TC_CONTEXT_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+
+/*CORE/TC ID*/
+#define ASM_GET_CORE_ID(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_CORE_ID_(CORE)));}while(0)
+
+#define ASM_SET_CORE_ID(CORE,VAL) do{*((volatile kal_uint32*)(ASM_CORE_ID_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_CORE_ID_(CORE)));}while(0)
+
+#define ASM_GET_TC_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_TC_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_TC_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TC_ID_(CORE,TC)));}while(0)
+
+
+
+/*Option*/
+#define ASM_GET_PROFILE_EN(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PROFILE_EN_(CORE)));}while(0)
+
+#define ASM_SET_PROFILE_EN(CORE,VAL) do{*((volatile kal_uint32*)(ASM_PROFILE_EN_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PROFILE_EN_(CORE)));}while(0)
+
+#define ASM_GET_MCU_PC(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MCU_PC_(CORE)));}while(0)
+
+#define ASM_GET_TC_MCU_PMC0(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_MCU_PMC0_(CORE,TC)));}while(0)
+
+#define ASM_GET_TC_MCU_PMC1(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_MCU_PMC1_(CORE,TC)));}while(0)
+
+#define ASM_GET_MCU_ELM_CNT(CORE,CNT,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MCU_ELM_CNT_(CORE,CNT)));}while(0)
+
+#define ASM_GET_IOCU_ELM_CNT(CORE,CNT,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_IOCU_ELM_CNT_(CORE,CNT)));}while(0)
+
+
+#define ASM_GET_TIME_STAMP(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TIME_STAMP_(CORE)));}while(0)
+
+#define ASM_GET_VERSION(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_VERSION_(CORE)));}while(0)
+
+
+#define ASM_GET_TRACER_SAMPLE_RATE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)));}while(0)
+
+#define ASM_SET_TRACER_SAMPLE_RATE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)));}while(0)
+
+#define ASM_GET_PDI_HEADER(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)));}while(0)
+
+#define ASM_SET_PDI_HEADER(CORE,VAL) do{*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)));}while(0)
+
+#define ASM_GET_PDI_CNT(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)));}while(0)
+
+#define ASM_SET_PDI_CNT(CORE,VAL) do{*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)));}while(0)
+
+#define ASM_GET_WRAP_CNT(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)));}while(0)
+
+#define ASM_SET_WRAP_CNT(CORE,VAL) do{*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)));}while(0)
+
+#define ASM_GET_SPM_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_SPM_CONFIG(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_SPM_REQ(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)) = (VAL)&ASM_SPM_REQ_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_GET_SPM_REQ(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_SPM_REQ_MASK) >> ASM_SPM_REQ_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_GRANT(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_SPM_GRANT_MASK) >> ASM_SPM_GRANT_BIT);\
+ }while(0)
+
+#define ASM_GET_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_IDLE_MASK) >> ASM_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_INT_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_INT_STATUS_MASK) >> ASM_TOP_INT_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_ERROR_INT_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_ERROR_INT_STATUS_MASK) >> ASM_TOP_ERROR_INT_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_IDLE_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_IDLE_STATUS_MASK) >> ASM_TOP_IDLE_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_INT_MASK_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS))&ASM_TOP_INT_MASK_STATUS_MASK) >> ASM_TOP_INT_MASK_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_STATUS(VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP));}while(0)
+
+#define ASM_GET_DUMMY(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_DUMMY_(CORE)));}while(0)
+
+#define ASM_SET_DUMMY(CORE,VAL) do{*(volatile kal_uint32*)(ASM_DUMMY_(CORE)) = (VAL);}while(0)
+
+
+/*BUFFER*/
+#define ASM_GET_LOG_BUF_BASEADDR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)));}while(0)
+
+#define ASM_SET_LOG_BUF_BASEADDR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)));}while(0)
+
+#define ASM_GET_LOG_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_SET_LOG_BUF_SIZE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_GET_BUF_RD_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)));}while(0)
+
+#define ASM_SET_BUF_RD_PTR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)));}while(0)
+
+#define ASM_GET_BUF_WR_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)));}while(0)
+
+#define ASM_SET_BUF_WR_PTR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)));}while(0)
+
+#define ASM_GET_BUF_ALT_THRESH(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)));}while(0)
+
+#define ASM_SET_BUF_ALT_THRESH(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)));}while(0)
+
+#define ASM_GET_REM_LOG_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_REM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+
+/*SRAM*/
+#define ASM_GET_SRAM_MAX_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_SET_SRAM_MAX_BUF_SIZE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_STATUS(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)));}while(0)
+
+#define ASM_SET_SRAM_STATUS(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_WR_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_WR_MASK;}while(0)
+
+#define ASM_GET_SRAM_RD_PTR(CORE,VAL) do{VAL = ((*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_RD_MASK)>>ASM_SRAM_RD_BIT;}while(0)
+
+#define ASM_GET_SRAM_MAX_WATER(CORE,VAL) do{VAL = ((*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_MAX_WATER_MASK)>>ASM_SRAM_MAX_WATER_BIT;}while(0)
+
+#define ASM_GET_SRAM_FULL_STATUS(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_FULL_STATUS_MASK;}while(0)
+
+#define ASM_GET_SRAM_EMPTY_STATUS(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_EMPTY_STATUS_MASK;}while(0)
+
+#define ASM_GET_SRAM_DBG_MODE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)))&ASM_SRAM_DBG_MODE_MASK;}while(0)
+
+#define ASM_SET_SRAM_DBG_MODE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)) = (VAL)&ASM_SRAM_DBG_MODE_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_DBG_MODE_RDY(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)))&ASM_SRAM_DBG_MODE_RDY_MASK;}while(0)
+
+#define ASM_SET_SRAM_DBG_ADDR(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)) = (VAL)&ASM_SRAM_DBG_ADDR_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_DBG_ADDR(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)))&ASM_SRAM_DBG_ADDR_MASK;\
+ }while(0)
+
+#define ASM_GET_SRAM_DBG_DATA(CORE,VAL) do{(VAL) = *(volatile kal_uint32*)(ASM_SRAM_DBG_DATA_(CORE));\
+ }while(0)
+
+
+/*DEBUG REGISTER*/
+#define ASM_GET_DBG(CORE,NUM,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_DBG_(CORE,NUM)));}while(0)
+
+
+/*AXI_CONFIG*/
+#define ASM_SET_AXI_CONFIG(CORE,VAL) do{*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (VAL);\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+
+#define ASM_GET_AXI_MAX_BURST_LEN(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_MAX_BURST_LEN_MASK) >> ASM_AXI_MAX_BURST_LEN_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_MAX_BURST_LEN(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_MAX_BURST_LEN_MASK))\
+ |((VAL << ASM_AXI_MAX_BURST_LEN_BIT)&(ASM_AXI_MAX_BURST_LEN_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_MAX_OSTD_NUMBER(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_MAX_OSTD_NUMBER_MASK) >> ASM_AXI_MAX_OSTD_NUMBER_BIT;}while(0)
+
+#define ASM_SET_AXI_MAX_OSTD_NUMBER(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_MAX_OSTD_NUMBER_MASK))\
+ |((VAL << ASM_AXI_MAX_OSTD_NUMBER_BIT)&(ASM_AXI_MAX_OSTD_NUMBER_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_POST_WRITE_CF(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_POST_WRITE_CFG_MASK) >> ASM_AXI_POST_WRITE_CFG_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_POST_WRITE_CF(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_POST_WRITE_CFG_MASK))\
+ |((VAL << ASM_AXI_POST_WRITE_CFG_BIT)&(ASM_AXI_POST_WRITE_CFG_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_AXI_AWPROT(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_AWPROT_MASK) >> ASM_AXI_AWPROT_BIT;}while(0)
+
+#define ASM_SET_AXI_AWPROT(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_AWPROT_MASK))\
+ |((VAL << ASM_AXI_AWPROT_BIT)&(ASM_AXI_AWPROT_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_AWLOCK(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_AWLOCK_MASK) >> ASM_AXI_AWLOCK_BIT;}while(0)
+
+#define ASM_SET_AXI_AWLOCK(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_AWLOCK_MASK))\
+ |((VAL << ASM_AXI_AWLOCK_BIT)&(ASM_AXI_AWLOCK_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_WID(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_WID_MASK) >> ASM_AXI_WID_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_WID(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_WID_MASK))\
+ |((VAL << ASM_AXI_WID_BIT)&(ASM_AXI_WID_MASK)));\
+
+#define ASM_GET_AXI_ULTRA(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_ULTRA_MASK) >> ASM_AXI_ULTRA_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_ULTRA(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_ULTRA_MASK))\
+ |((VAL << ASM_AXI_ULTRA_BIT)&(ASM_AXI_ULTRA_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_FLUSH(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_FLUSH_MASK) >> ASM_AXI_FLUSH_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_FLUSH(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_FLUSH_MASK))\
+ |((VAL << ASM_AXI_FLUSH_BIT)&(ASM_AXI_FLUSH_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+
+#endif //__ASM_REG_95_H__
+
diff --git a/mcu/driver/devdrv/asm/inc/asm_reg_97.h b/mcu/driver/devdrv/asm/inc/asm_reg_97.h
new file mode 100644
index 0000000..934ffb9
--- /dev/null
+++ b/mcu/driver/devdrv/asm/inc/asm_reg_97.h
@@ -0,0 +1,853 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * asm_reg.h
+ *
+ * Project:
+ * --------
+ * UMOLY_Software
+ *
+ * Description:
+ * ------------
+ * This file defines ASM drivers register
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __ASM_REG_97_H__
+#define __ASM_REG_97_H__
+
+#include "kal_general_types.h"
+#include "reg_base.h"
+#include "intrCtrl.h"
+#include "boot.h"
+
+typedef enum
+{
+ ASM_AXI_MAX_BURST_LEN_4 = 0,
+ ASM_AXI_MAX_BURST_LEN_8,
+ ASM_AXI_MAX_BURST_LEN_16,
+
+}ASM_AXI_MAX_OSTD_NUMBER;
+
+
+typedef enum
+{
+ ASM_AXI_MAX_OSTD_NUMBER_0 = 0,
+ ASM_AXI_MAX_OSTD_NUMBER_1,
+ ASM_AXI_MAX_OSTD_NUMBER_2,
+ ASM_AXI_MAX_OSTD_NUMBER_3,
+
+}ASM_AXI_MAX_OSTD_LEN;
+
+
+typedef enum
+{
+ ASM_AXI_NON_POST_WRITE_LAST_TRANACTION = 0,
+ ASM_AXI_NON_POST_WRITE,
+ ASM_AXI_POST_WRITE,
+}ASM_AXI_POST_WRITE_CFG;
+
+
+
+
+//////////////////ASM Registers/////////////////////////////
+#define BASE_ADDR_ASM_GCR (GCR_CUSTOM_ADDR+0x8000)
+#define ASM_GCR_BASEADDR (BASE_ADDR_ASM_GCR)
+
+#ifndef BASE_MADDR_MDMCU_SHAOLIN__MDMCU_ABM
+#define BASE_MADDR_MDMCU_SHAOLIN__MDMCU_ABM (0xA0200000)
+#endif // ifndef(BASE_MADDR_MDMCU_SHAOLIN__MDMCU_ABM)
+
+#define ASM_BASEADDR (BASE_MADDR_MDMCU_SHAOLIN__MDMCU_ABM)
+
+
+//CORE0 ASM ASM_BASEADDR+0x0000
+//CORE1 ASM ASM_BASEADDR+0x1000
+//CORE2 ASM ASM_BASEADDR+0x2000
+//CORE3 ASM ASM_BASEADDR+0x3000
+#define CORE_OFFSET_SHIFT_BIT (12)
+#define CORE_OFFSET (0x1000)
+
+
+//Register offset
+#define ASM_GEN_CONFIG (0x0000)
+#define ASM_MODE_CONFIG (0x0004)
+#define ASM_PROFILE_EN (0x0008)
+#define ASM_AXI_CONFIG (0x000C)
+#define ASM_SPM_CONFIG (0x0010)
+#define ASM_VERSION (0x0014)
+#define ASM_L2ISAR (0x0020)
+#define ASM_L2IMKR (0x0024)
+#define ASM_L2IMCR (0x0028)
+#define ASM_L2IMSR (0x002C)
+#define ASM_GCR_SWLA_TRIG (0x0030)
+#define ASM_GCR_TC0_CONTEXT_ID (0x0040)
+#define ASM_GCR_TC1_CONTEXT_ID (0x0044)
+#define ASM_GCR_TC2_CONTEXT_ID (0x0048)
+#define ASM_GCR_TC3_CONTEXT_ID (0x004C)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO0 (0x0050)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO1 (0x0054)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO2 (0x0058)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO3 (0x005C)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO0 (0x0060)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO1 (0x0064)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO2 (0x0068)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO3 (0x006C)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO0 (0x0070)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO1 (0x0074)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO2 (0x0078)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO3 (0x007C)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO0 (0x0080)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO1 (0x0084)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO2 (0x0088)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO3 (0x008C)
+#define ASM_TC0_TC_ID (0x0090)
+#define ASM_TC1_TC_ID (0x0094)
+#define ASM_TC2_TC_ID (0x0098)
+#define ASM_TC3_TC_ID (0x009C)
+#define ASM_CORE_ID (0x0100)
+#define ASM_MCU_PC (0x0104)
+#define ASM_TC0_MCU_PMC0 (0x0108)
+#define ASM_TC0_MCU_PMC1 (0x010C)
+#define ASM_TC1_MCU_PMC0 (0x0110)
+#define ASM_TC1_MCU_PMC1 (0x0114)
+#define ASM_TC2_MCU_PMC0 (0x0118)
+#define ASM_TC2_MCU_PMC1 (0x011C)
+#define ASM_TC3_MCU_PMC0 (0x0120)
+#define ASM_TC3_MCU_PMC1 (0x0124)
+#define ASM_MCU_ELM_CNT0 (0x0128)
+#define ASM_MCU_ELM_CNT1 (0x012C)
+#define ASM_MCU_ELM_CNT2 (0x0130)
+#define ASM_MCU_ELM_CNT3 (0x0134)
+#define ASM_TIME_STAMP (0x013C)
+#define ASM_PDI_HEADER (0x0144)
+#define ASM_PDI_CNT (0x0148)
+#define ASM_TRACER_SAMPLE_RATE (0x014C)
+#define ASM_LOG_BUF_BASEADDR (0x0150)
+#define ASM_LOG_BUF_SIZE (0x0154)
+#define ASM_WRAP_CNT (0x0158)
+#define ASM_BUF_RD_PTR (0x015C)
+#define ASM_BUF_WR_PTR (0x0160)
+#define ASM_BUF_ALT_THRESH (0x0164)
+#define ASM_SRAM_STATUS (0x0168)
+#define ASM_SRAM_MAX_BUF_SIZE (0x016C)
+#define ASM_REM_LOG_BUF_SIZE (0x0170)
+#define ASM_SRAM_DBG (0x0174)
+#define ASM_SRAM_DBG_ADDR (0x0178)
+#define ASM_SRAM_DBG_DATA (0x017C)
+#define ASM_SELF_TEST_EN (0x0180)
+#define ASM_SEL_TEST_KEY (0x0184)
+#define ASM_DBG1 (0x0190)
+#define ASM_DBG2 (0x0194)
+#define ASM_DBG3 (0x0198)
+#define ASM_DBG4 (0x019C)
+#define ASM_DBG5 (0x0200)
+#define ASM_DBG6 (0x0204)
+#define ASM_DBG7 (0x0208)
+#define ASM_DBG8 (0x020C)
+#define ASM_DBG9 (0x0210)
+#define ASM_DBG10 (0x0214)
+#define ASM_DBG11 (0x0218)
+#define ASM_DBG12 (0x021C)
+#define ASM_DUMMY (0x0220)
+#define ASM_TOP_INT_STATUS (0x2000)
+#define ASM_TOP_CORE_EN (0x2004)
+
+
+
+
+//MCU ASM APB Register Address
+#define ASM_GEN_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GEN_CONFIG )
+#define ASM_MODE_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MODE_CONFIG)
+#define ASM_PROFILE_EN_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PROFILE_EN )
+#define ASM_AXI_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_AXI_CONFIG )
+#define ASM_SPM_CONFIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SPM_CONFIG )
+#define ASM_VERSION_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_VERSION )
+#define ASM_L2ISAR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2ISAR )
+#define ASM_L2IMKR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMKR )
+#define ASM_L2IMCR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMCR )
+#define ASM_L2IMSR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_L2IMSR )
+#define ASM_SWLA_TRIG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_SWLA_TRIG )
+#define ASM_TC0_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_CONTEXT_ID )
+#define ASM_TC1_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_CONTEXT_ID )
+#define ASM_TC2_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_CONTEXT_ID )
+#define ASM_TC3_CONTEXT_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_CONTEXT_ID )
+#define ASM_TC0_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO0 )
+#define ASM_TC0_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO1 )
+#define ASM_TC0_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO2 )
+#define ASM_TC0_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO3 )
+#define ASM_TC1_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO0 )
+#define ASM_TC1_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO1 )
+#define ASM_TC1_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO2 )
+#define ASM_TC1_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO3 )
+#define ASM_TC2_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO0 )
+#define ASM_TC2_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO1 )
+#define ASM_TC2_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO2 )
+#define ASM_TC2_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO3 )
+#define ASM_TC3_PROFILE_ADDON_INFO0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO0 )
+#define ASM_TC3_PROFILE_ADDON_INFO1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO1 )
+#define ASM_TC3_PROFILE_ADDON_INFO2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO2 )
+#define ASM_TC3_PROFILE_ADDON_INFO3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO3 )
+#define ASM_TC0_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_TC_ID )
+#define ASM_TC1_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_TC_ID )
+#define ASM_TC2_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_TC_ID )
+#define ASM_TC3_TC_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_TC_ID )
+#define ASM_CORE_ID_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_CORE_ID )
+#define ASM_MCU_PC_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_PC )
+#define ASM_TC0_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_MCU_PMC0 )
+#define ASM_TC0_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC0_MCU_PMC1 )
+#define ASM_TC1_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_MCU_PMC0 )
+#define ASM_TC1_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC1_MCU_PMC1 )
+#define ASM_TC2_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_MCU_PMC0 )
+#define ASM_TC2_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC2_MCU_PMC1 )
+#define ASM_TC3_MCU_PMC0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_MCU_PMC0 )
+#define ASM_TC3_MCU_PMC1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TC3_MCU_PMC1 )
+#define ASM_MCU_ELM_CNT0_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT0 )
+#define ASM_MCU_ELM_CNT1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT1 )
+#define ASM_MCU_ELM_CNT2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT2 )
+#define ASM_MCU_ELM_CNT3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_MCU_ELM_CNT3 )
+#define ASM_TIME_STAMP_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TIME_STAMP )
+#define ASM_PDI_HEADER_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PDI_HEADER )
+#define ASM_PDI_CNT_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_PDI_CNT )
+#define ASM_TRACER_SAMPLE_RATE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_TRACER_SAMPLE_RATE )
+#define ASM_LOG_BUF_BASEADDR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_LOG_BUF_BASEADDR )
+#define ASM_LOG_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_LOG_BUF_SIZE )
+#define ASM_WRAP_CNT_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_WRAP_CNT )
+#define ASM_BUF_RD_PTR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_RD_PTR )
+#define ASM_BUF_WR_PTR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_WR_PTR )
+#define ASM_BUF_ALT_THRESH_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_BUF_ALT_THRESH )
+#define ASM_SRAM_MAX_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_MAX_BUF_SIZE )
+#define ASM_SRAM_STATUS_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_STATUS )
+#define ASM_REM_LOG_BUF_SIZE_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_REM_LOG_BUF_SIZE )
+#define ASM_SRAM_DBG_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG )
+#define ASM_SRAM_DBG_ADDR_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG_ADDR )
+#define ASM_SRAM_DBG_DATA_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SRAM_DBG_DATA )
+#define ASM_SELF_TEST_EN_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SELF_TEST_EN )
+#define ASM_SEL_TEST_KEY_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_SEL_TEST_KEY )
+#define ASM_DBG1_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG1 )
+#define ASM_DBG2_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG2 )
+#define ASM_DBG3_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG3 )
+#define ASM_DBG4_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG4 )
+#define ASM_DBG5_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG5 )
+#define ASM_DBG6_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG6 )
+#define ASM_DBG7_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG7 )
+#define ASM_DBG8_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG8 )
+#define ASM_DBG9_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG9 )
+#define ASM_DBG10_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG10 )
+#define ASM_DBG11_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG11 )
+#define ASM_DBG12_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DBG12 )
+#define ASM_DUMMY_(CORE) (ASM_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_DUMMY )
+#define ASM_TOP_INT_STATUS_TOP (ASM_BASEADDR+ASM_TOP_INT_STATUS)
+#define ASM_TOP_CORE_EN_TOP (ASM_BASEADDR+ASM_TOP_CORE_EN)
+
+
+
+//MCU ASM GCR Register Address
+#define ASM_GCR_SWLA_TRIG_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_SWLA_TRIG)
+#define ASM_GCR_TC0_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_CONTEXT_ID)
+#define ASM_GCR_TC1_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_CONTEXT_ID)
+#define ASM_GCR_TC2_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_CONTEXT_ID)
+#define ASM_GCR_TC3_CONTEXT_ID_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_CONTEXT_ID)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC0_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC0_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC1_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC1_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC2_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC2_PROFILE_ADDON_INFO3)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO0_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO0)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO1_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO1)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO2_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO2)
+#define ASM_GCR_TC3_PROFILE_ADDON_INFO3_(CORE) (ASM_GCR_BASEADDR+(CORE << CORE_OFFSET_SHIFT_BIT)+ASM_GCR_TC3_PROFILE_ADDON_INFO3)
+
+
+
+
+
+//ASM MCU CORE register
+#define ASM_TC_CONTEXT_ID_(CORE,TC) (ASM_TC0_CONTEXT_ID_(CORE)+(TC*4))
+#define ASM_GCR_TC_CONTEXT_ID_(CORE,TC) (ASM_GCR_TC0_CONTEXT_ID_(CORE)+(TC*4))
+
+#define ASM_TC_ADDON_OFFSET (ASM_GCR_TC1_PROFILE_ADDON_INFO0-ASM_GCR_TC0_PROFILE_ADDON_INFO0)
+#define ASM_TC_PROFILE_ADDON_INFO_(CORE) (ASM_TC0_PROFILE_ADDON_INFO0_(CORE))
+#define ASM_PROFILE_ADDON_INFO_(CORE,TC) (ASM_TC0_PROFILE_ADDON_INFO0_(CORE)+(TC*ASM_TC_ADDON_OFFSET))
+#define ASM_GCR_TC_PROFILE_ADDON_INFO_(CORE) (ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE))
+#define ASM_GCR_PROFILE_ADDON_INFO_(CORE,TC) (ASM_GCR_TC0_PROFILE_ADDON_INFO0_(CORE)+(TC*ASM_TC_ADDON_OFFSET))
+
+
+#define ASM_TC_ID_(CORE,TC) (ASM_TC0_TC_ID_(CORE)+(TC*4))
+#define ASM_TC_MCU_PMC0_(CORE,TC) (ASM_TC0_MCU_PMC0_(CORE)+(TC*8))
+#define ASM_TC_MCU_PMC1_(CORE,TC) (ASM_TC0_MCU_PMC1_(CORE)+(TC*8))
+#define ASM_MCU_ELM_CNT_(CORE,CNT) (ASM_MCU_ELM_CNT0_(CORE)+(CNT*4))
+#define ASM_DBG_(CORE,NUM) (ASM_DBG1_(CORE)+(NUM*4))
+
+
+
+//////////////////ASM Definition/////////////////////////////
+
+
+#define IRQ_ASM_CORE MD_IRQID_ADOE
+
+//#define ASM_NUM (6)
+#define ASM_TC_NUM (7)
+#define ASM_PMC_NUM (2)
+#define ASM_MCU_ELM_NUM (6)
+#define ASM_ADDON_NUM (6)
+
+#define WORDS_PER_1KB (1024 >> 2)
+#define ASM_VERSION_VAL (0x20160221)
+
+
+//ASM_GEN_CONFIG
+#define ASM_ENABLE_BIT (0)
+#define ASM_RESET_BIT (2)
+#define ASM_PDI_BIT (3)
+#define ASM_MCU_ELM_EN_BIT (4)
+#define ASM_PMC_REF_VALID_BIT (12)
+
+#define ASM_ENABLE_MASK (1 << ASM_ENABLE_BIT)
+#define ASM_RESET_MASK (1 << ASM_RESET_BIT)
+#define ASM_PDI_MASK (1 << ASM_PDI_BIT)
+#define ASM_MCU_ELM_EN_MASK (1 << ASM_MCU_ELM_EN_BIT)
+#define ASM_PMC_REF_VALID_MASK (1 << ASM_PMC_REF_VALID_BIT)
+
+#define ASM_TC_ID_CORE_ID_OPTION_MASK (1 << ASM_TC_ID_CORE_ID_EN)
+#define ASM_PC_OPTION_MASK (1 << ASM_PC_EN)
+#define ASM_PMC_OPTION_MASK ((1 << ASM_MCU_PMC0_EN)|(1 << ASM_MCU_PMC1_EN))
+#define ASM_MCU_ELM_OPTION_MASK ((1 << ASM_MCU_ELM_CNT0_EN)|(1 << ASM_MCU_ELM_CNT1_EN)|(1 << ASM_MCU_ELM_CNT2_EN)|\
+ (1 << ASM_MCU_ELM_CNT3_EN))
+
+
+#define ASM_ADDON_OPTION_MASK (0x00FF0000)
+
+#define ASM_OPTION_MASK ((1 << ASM_PROFILE_END)-1)
+
+//ASM_MODE_CONFIG
+#define ASM_MCG_BIT (0)
+#define ASM_TRACER_MODE_BIT (1)
+#define ASM_WRAP_MODE_EN_BIT (2)
+#define APB_WR_GCR_BIT (3)
+#define ABM_WORK_TC_REF_VALID_BIT (5)
+#define ABM_TRANS_IDLE_EN_BIT (7)
+
+
+#define ASM_MCG_EN (0 << ASM_MCG_BIT)
+#define ASM_SWLA_MODE_EN (0 << ASM_TRACER_MODE_BIT)
+#define ASM_TRACER_MODE_EN (1 << ASM_TRACER_MODE_BIT)
+#define ASM_WRAP_MODE_EN (1 << ASM_WRAP_MODE_EN_BIT)
+#define APB_WR_GCR_BIT_EN (1 << APB_WR_GCR_BIT)
+#define ABM_WORK_TC_REF_VALID_EN (1 << ABM_WORK_TC_REF_VALID_BIT)
+#define ABM_TRANS_IDLE_EN (1 << ABM_TRANS_IDLE_EN_BIT)
+
+#define ASM_HW_SWLA_STRAM_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+#define ASM_HW_SWLA_WRAP_MODE_CONFIG_VAL (ASM_SWLA_MODE_EN|ASM_WRAP_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+#define ASM_HW_SWTR_STRAM_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+#define ASM_HW_SWTR_WRAP_MODE_CONFIG_VAL (ASM_TRACER_MODE_EN|ASM_WRAP_MODE_EN|ASM_MCG_EN|ABM_TRANS_IDLE_EN)
+
+//ASM_SPM_CONFIG
+#define ASM_SPM_REQ_BIT (0)
+#define ASM_SPM_GRANT_BIT (1)
+#define ASM_CTRL_IDLE_BIT (2)
+#define ASM_AXI_MST_SPM_GRANT_BIT (3)
+#define ASM_AXI_MST_IDLE_BIT (4)
+#define ASM_IDLE_BIT (8)
+
+#define ASM_SPM_REQ_MASK (1 << ASM_SPM_REQ_BIT)
+#define ASM_SPM_GRANT_MASK (1 << ASM_SPM_GRANT_BIT)
+#define ASM_CTRL_IDLE_MASK (1 << ASM_CTRL_IDLE_BIT)
+#define ASM_AXI_MST_SPM_GRANT_MASK (1 << ASM_AXI_MST_SPM_GRANT_BIT)
+#define ASM_AXI_MST_IDLE_MASK (1 << ASM_AXI_MST_IDLE_BIT)
+#define ASM_IDLE_MASK (1 << ASM_IDLE_BIT)
+
+
+//ASM_HEADER
+#define ASM_PDI_HEADER_VAL (0x4C4F5354)
+#define ASM_HW_SWTR_HEADER_VAL (0x53575452)
+#define ID_HEAD (0x4449 << 16)
+#define ASM_HEADER_SIZE (2)
+#define ASM_CORE_START_BIT (0)
+#define ASM_TC_START_BIT (8)
+#define ASM_QOS_START_BIT (16)
+#define ASM_QOS_BITS_PER_VPE (2)
+#define ASM_QOS_CLR_MASK (0x03)
+
+
+#define ASM_MAX_BUF_BIT_LEN (32)
+#define ASM_BUF_ALT_TH_VAL (4)
+
+/*SRAM*/
+#define ASM_SRAM_FULL_STATUS_BIT (28)
+#define ASM_SRAM_EMPTY_STATUS_BIT (27)
+#define ASM_SRAM_DBG_MODE_BIT (0)
+#define ASM_SRAM_DBG_MODE_RDY_BIT (1)
+#define ASM_SRAM_WR_BIT (0)
+#define ASM_SRAM_RD_BIT (8)
+#define ASM_SRAM_MAX_WATER_BIT (16)
+
+
+#define ASM_SRAM_WR_MASK (0x000000FF)
+#define ASM_SRAM_RD_MASK (0x0000FF00)
+#define ASM_SRAM_MAX_WATER_MASK (0x01FF0000)
+#define ASM_SRAM_FULL_STATUS_MASK (1 << ASM_SRAM_FULL_STATUS_BIT)
+#define ASM_SRAM_EMPTY_STATUS_MASK (1 << ASM_SRAM_EMPTY_STATUS_BIT)
+#define ASM_SRAM_DBG_MODE_MASK (1 << ASM_SRAM_DBG_MODE_BIT)
+#define ASM_SRAM_DBG_MODE_RDY_MASK (1 << ASM_SRAM_DBG_MODE_RDY_BIT)
+#define ASM_SRAM_DBG_ADDR_MASK (0x000000FF)
+
+
+#define ASM_TOP_INT_STATUS_BIT (0)
+#define ASM_TOP_ERROR_INT_STATUS_BIT (8)
+#define ASM_TOP_IDLE_STATUS_BIT (16)
+#define ASM_TOP_INT_MASK_STATUS_BIT (24)
+#define ASM_TOP_INT_STATUS_MASK (0x03)
+#define ASM_TOP_ERROR_INT_STATUS_MASK (0x0300)
+#define ASM_TOP_IDLE_STATUS_MASK (0x030000)
+#define ASM_TOP_INT_MASK_STATUS_MASK (0x03000000)
+
+#define ASM_AXI_MAX_BURST_LEN_BIT (0)
+#define ASM_AXI_MAX_OSTD_NUMBER_BIT (4)
+#define ASM_AXI_POST_WRITE_CFG_BIT (8)
+#define ASM_AXI_AWPROT_BIT (12)
+#define ASM_AXI_AWLOCK_BIT (16)
+#define ASM_AXI_WID_BIT (20)
+#define ASM_AXI_ULTRA_BIT (24)
+#define ASM_AXI_FLUSH_BIT (28)
+#define ASM_AXI_CONFIG_DEFAULT_VAL (0x00000002)
+#define ASM_SPM_CONFIG_DEFAULT_VAL (0x00000114)
+
+
+#define ASM_AXI_MAX_BURST_LEN_MASK (0x00000003)
+#define ASM_AXI_MAX_OSTD_NUMBER_MASK (0x00000030)
+#define ASM_AXI_POST_WRITE_CFG_MASK (0x00000300)
+#define ASM_AXI_AWPROT_MASK (0x00007000)
+#define ASM_AXI_AWLOCK_MASK (0x00030000)
+#define ASM_AXI_WID_MASK (0x00100000)
+#define ASM_AXI_ULTRA_MASK (0x03000000)
+#define ASM_AXI_FLUSH_MASK (0x30000000)
+
+// Interrupter ack
+
+#define ASM_THRESHOLD_INT_ACK (1 << ASM_THRESHOLD_INT)
+#define ASM_AGGRESSIVE_TRIG_INT_ACK (1 << ASM_AGGRESSIVE_TRIG_INT)
+#define ASM_APB_WR_GCR_ILLEGAL_INT_ACK (1 << ASM_APB_WR_GCR_ILLEGAL_INT)
+#define ASM_ILLEGAL_DISABLE_INT_ACK (1 << ASM_ILLEGAL_DISABLE_INT)
+#define ASM_PDI_INT_ACK (1 << ASM_PDI_INT)
+
+
+//////////////////ASM Data structure/////////////////////////////
+
+typedef struct _ASM_STRUCT {
+ kal_uint32 asm_mode;
+// kal_uint32 gen_config;
+ kal_uint32 mode_config;
+ kal_uint32 swtr_header;
+
+ kal_uint32 buf_base_address;
+ kal_uint32 buf_size;
+ kal_uint32 buf_read_ptr;
+ kal_uint32 buf_write_ptr;
+ kal_uint32 thresh_value;
+ kal_uint32 buf_remain_size;
+
+ kal_uint32 sram_status;
+ kal_uint32 sram_max_buf_size;
+ kal_uint32 water_level;
+
+ kal_uint32 profile_en;
+ kal_uint32 addon[ASM_TC_NUM][ASM_ADDON_NUM];
+// kal_uint32 context_id[ASM_TC_NUM];
+
+ kal_uint32 sample_rate;
+ kal_uint32 wrap_cnt;
+ kal_uint32 pdi_cnt;
+ kal_uint32 axi_config;
+// kal_uint32 trigger_cnt;
+
+ kal_uint32 int_en;
+ kal_uint32 int_status;
+ kal_uint32 asm_is_enabled;
+ kal_uint32 spm_set;
+ kal_uint32 start_time;
+ kal_uint32 stop_time;
+
+} ASM_STRUCT;
+
+extern kal_uint32 ASM_Dummy_Read;
+extern kal_uint32 PC_Val;
+
+//////////////////ASM Macro/////////////////////////////
+
+/*Mode and Config*/
+#define ASM_GET_GEN_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_GEN_CONFIG(CORE,VAL) do{*((volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GEN_CONFIG_(CORE)));}while(0)
+
+#define ASM_GET_MODE_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_MODE_CONFIG(CORE,VAL) do{*((volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_MODE_CONFIG_(CORE)));}while(0)
+
+
+/*Interrupter*/
+#define ASM_GET_L2ISAR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2ISAR_(CORE)));}while(0)
+
+#define ASM_SET_L2ISAR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2ISAR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2ISAR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMKR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMKR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMCR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMCR_(CORE)));}while(0)
+
+#define ASM_SET_L2IMCR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2IMCR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2IMCR_(CORE)));}while(0)
+
+#define ASM_GET_L2IMSR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_L2IMSR_(CORE)));}while(0)
+
+#define ASM_SET_L2IMSR(CORE,VAL) do{*((volatile kal_uint32*)(ASM_L2IMSR_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_L2IMSR_(CORE)));}while(0)
+
+
+/*Trigger*/
+#define ASM_GET_SWLA_TRIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_SET_SWLA_TRIG(CORE,TC) do{*((volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE))) = (1 << TC);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_GET_GCR_SWLA_TRIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE)));}while(0)
+
+#define ASM_SET_GCR_SWLA_TRIG(CORE,TC) do{*((volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE))) = (1 << TC);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GCR_SWLA_TRIG_(CORE))); }while(0)
+
+
+/*TC_CONTEXT_ID*/
+#define ASM_GET_TC_CONTEXT_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_TC_CONTEXT_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_GET_GCR_TC_CONTEXT_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_GCR_TC_CONTEXT_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_GCR_TC_CONTEXT_ID_(CORE,TC)));}while(0)
+
+
+/*CORE/TC ID*/
+#define ASM_GET_CORE_ID(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_CORE_ID_(CORE)));}while(0)
+
+#define ASM_SET_CORE_ID(CORE,VAL) do{*((volatile kal_uint32*)(ASM_CORE_ID_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_CORE_ID_(CORE)));}while(0)
+
+#define ASM_GET_TC_ID(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_ID_(CORE,TC)));}while(0)
+
+#define ASM_SET_TC_ID(CORE,TC,VAL) do{*((volatile kal_uint32*)(ASM_TC_ID_(CORE,TC))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TC_ID_(CORE,TC)));}while(0)
+
+
+
+/*Option*/
+#define ASM_GET_PROFILE_EN(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PROFILE_EN_(CORE)));}while(0)
+
+#define ASM_SET_PROFILE_EN(CORE,VAL) do{*((volatile kal_uint32*)(ASM_PROFILE_EN_(CORE))) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PROFILE_EN_(CORE)));}while(0)
+
+#define ASM_GET_MCU_PC(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MCU_PC_(CORE)));}while(0)
+
+#define ASM_GET_TC_MCU_PMC0(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_MCU_PMC0_(CORE,TC)));}while(0)
+
+#define ASM_GET_TC_MCU_PMC1(CORE,TC,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TC_MCU_PMC1_(CORE,TC)));}while(0)
+
+#define ASM_GET_MCU_ELM_CNT(CORE,CNT,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_MCU_ELM_CNT_(CORE,CNT)));}while(0)
+
+#define ASM_GET_IOCU_ELM_CNT(CORE,CNT,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_IOCU_ELM_CNT_(CORE,CNT)));}while(0)
+
+
+#define ASM_GET_TIME_STAMP(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TIME_STAMP_(CORE)));}while(0)
+
+#define ASM_GET_VERSION(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_VERSION_(CORE)));}while(0)
+
+#define ASM_GET_TR_HEAD(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TR_HEAD_(CORE)));}while(0)
+
+#define ASM_SET_TR_HEAD(CORE,VAL) do{*(volatile kal_uint32*)(ASM_TR_HEAD_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TR_HEAD_(CORE)));}while(0)
+
+#define ASM_GET_TRACER_SAMPLE_RATE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)));}while(0)
+
+#define ASM_SET_TRACER_SAMPLE_RATE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_TRACER_SAMPLE_RATE_(CORE)));}while(0)
+
+#define ASM_GET_PDI_HEADER(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)));}while(0)
+
+#define ASM_SET_PDI_HEADER(CORE,VAL) do{*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PDI_HEADER_(CORE)));}while(0)
+
+#define ASM_GET_PDI_CNT(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)));}while(0)
+
+#define ASM_SET_PDI_CNT(CORE,VAL) do{*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_PDI_CNT_(CORE)));}while(0)
+
+#define ASM_GET_WRAP_CNT(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)));}while(0)
+
+#define ASM_SET_WRAP_CNT(CORE,VAL) do{*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_WRAP_CNT_(CORE)));}while(0)
+
+#define ASM_GET_SPM_CONFIG(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_SPM_CONFIG(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_SET_SPM_REQ(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)) = (VAL)&ASM_SPM_REQ_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)));}while(0)
+
+#define ASM_GET_SPM_REQ(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_SPM_REQ_MASK) >> ASM_SPM_REQ_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_GRANT(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_SPM_GRANT_MASK) >> ASM_SPM_GRANT_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_CTRL_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_CTRL_IDLE_MASK) >> ASM_CTRL_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_AXI_MST_SPM_GRANT(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_AXI_MST_SPM_GRANT_MASK) >> ASM_AXI_MST_SPM_GRANT_BIT);\
+ }while(0)
+
+#define ASM_GET_SPM_AXI_MST_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_AXI_MST_IDLE_MASK) >> ASM_AXI_MST_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_IDLE(CORE,VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_SPM_CONFIG_(CORE)))&ASM_IDLE_MASK) >> ASM_IDLE_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_INT_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_INT_STATUS_MASK) >> ASM_TOP_INT_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_ERROR_INT_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_ERROR_INT_STATUS_MASK) >> ASM_TOP_ERROR_INT_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_IDLE_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP))&ASM_TOP_IDLE_STATUS_MASK) >> ASM_TOP_IDLE_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_INT_MASK_STATUS(VAL) do{\
+ VAL = (((*(volatile kal_uint32*)(ASM_TOP_INT_STATUS))&ASM_TOP_INT_MASK_STATUS_MASK) >> ASM_TOP_INT_MASK_STATUS_BIT);\
+ }while(0)
+
+#define ASM_GET_TOP_STATUS(VAL) do{VAL = (*(volatile kal_uint32*)(ASM_TOP_INT_STATUS_TOP));}while(0)
+
+#define ASM_GET_DUMMY(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_DUMMY_(CORE)));}while(0)
+
+#define ASM_SET_DUMMY(CORE,VAL) do{*(volatile kal_uint32*)(ASM_DUMMY_(CORE)) = (VAL);}while(0)
+
+
+/*BUFFER*/
+#define ASM_GET_LOG_BUF_BASEADDR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)));}while(0)
+
+#define ASM_SET_LOG_BUF_BASEADDR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_LOG_BUF_BASEADDR_(CORE)));}while(0)
+
+#define ASM_GET_LOG_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_SET_LOG_BUF_SIZE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_GET_BUF_RD_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)));}while(0)
+
+#define ASM_SET_BUF_RD_PTR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_RD_PTR_(CORE)));}while(0)
+
+#define ASM_GET_BUF_WR_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)));}while(0)
+
+#define ASM_SET_BUF_WR_PTR(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_WR_PTR_(CORE)));}while(0)
+
+#define ASM_GET_BUF_ALT_THRESH(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)));}while(0)
+
+#define ASM_SET_BUF_ALT_THRESH(CORE,VAL) do{*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_BUF_ALT_THRESH_(CORE)));}while(0)
+
+#define ASM_GET_REM_LOG_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_REM_LOG_BUF_SIZE_(CORE)));}while(0)
+
+
+/*SRAM*/
+#define ASM_GET_SRAM_MAX_BUF_SIZE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_SET_SRAM_MAX_BUF_SIZE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_MAX_BUF_SIZE_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_STATUS(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)));}while(0)
+
+#define ASM_SET_SRAM_STATUS(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)) = (VAL);\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_WR_PTR(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_WR_MASK;}while(0)
+
+#define ASM_GET_SRAM_RD_PTR(CORE,VAL) do{VAL = ((*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_RD_MASK)>>ASM_SRAM_RD_BIT;}while(0)
+
+#define ASM_GET_SRAM_MAX_WATER(CORE,VAL) do{VAL = ((*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_MAX_WATER_MASK)>>ASM_SRAM_MAX_WATER_BIT;}while(0)
+
+#define ASM_GET_SRAM_FULL_STATUS(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_FULL_STATUS_MASK;}while(0)
+
+#define ASM_GET_SRAM_EMPTY_STATUS(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_STATUS_(CORE)))&ASM_SRAM_EMPTY_STATUS_MASK;}while(0)
+
+#define ASM_GET_SRAM_DBG_MODE(CORE,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)))&ASM_SRAM_DBG_MODE_MASK;}while(0)
+
+#define ASM_SET_SRAM_DBG_MODE(CORE,VAL) do{*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)) = (VAL)&ASM_SRAM_DBG_MODE_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_DBG_MODE_RDY(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_(CORE)))&ASM_SRAM_DBG_MODE_RDY_MASK;}while(0)
+
+#define ASM_SET_SRAM_DBG_ADDR(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)) = (VAL)&ASM_SRAM_DBG_ADDR_MASK;\
+ ASM_Dummy_Read = (*(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)));}while(0)
+
+#define ASM_GET_SRAM_DBG_ADDR(CORE,VAL) do{\
+ VAL = (*(volatile kal_uint32*)(ASM_SRAM_DBG_ADDR_(CORE)))&ASM_SRAM_DBG_ADDR_MASK;\
+ }while(0)
+
+#define ASM_GET_SRAM_DBG_DATA(CORE,VAL) do{(VAL) = *(volatile kal_uint32*)(ASM_SRAM_DBG_DATA_(CORE));\
+ }while(0)
+
+
+/*DEBUG REGISTER*/
+#define ASM_GET_DBG(CORE,NUM,VAL) do{VAL = (*(volatile kal_uint32*)(ASM_DBG_(CORE,NUM)));}while(0)
+
+
+/*AXI_CONFIG*/
+#define ASM_SET_AXI_CONFIG(CORE,VAL) do{*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (VAL);\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+
+#define ASM_GET_AXI_MAX_BURST_LEN(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_MAX_BURST_LEN_MASK) >> ASM_AXI_MAX_BURST_LEN_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_MAX_BURST_LEN(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_MAX_BURST_LEN_MASK))\
+ |((VAL << ASM_AXI_MAX_BURST_LEN_BIT)&(ASM_AXI_MAX_BURST_LEN_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_MAX_OSTD_NUMBER(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_MAX_OSTD_NUMBER_MASK) >> ASM_AXI_MAX_OSTD_NUMBER_BIT;}while(0)
+
+#define ASM_SET_AXI_MAX_OSTD_NUMBER(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_MAX_OSTD_NUMBER_MASK))\
+ |((VAL << ASM_AXI_MAX_OSTD_NUMBER_BIT)&(ASM_AXI_MAX_OSTD_NUMBER_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_POST_WRITE_CF(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_POST_WRITE_CFG_MASK) >> ASM_AXI_POST_WRITE_CFG_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_POST_WRITE_CF(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_POST_WRITE_CFG_MASK))\
+ |((VAL << ASM_AXI_POST_WRITE_CFG_BIT)&(ASM_AXI_POST_WRITE_CFG_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_AXI_AWPROT(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_AWPROT_MASK) >> ASM_AXI_AWPROT_BIT;}while(0)
+
+#define ASM_SET_AXI_AWPROT(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_AWPROT_MASK))\
+ |((VAL << ASM_AXI_AWPROT_BIT)&(ASM_AXI_AWPROT_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_AWLOCK(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_AWLOCK_MASK) >> ASM_AXI_AWLOCK_BIT;}while(0)
+
+#define ASM_SET_AXI_AWLOCK(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_AWLOCK_MASK))\
+ |((VAL << ASM_AXI_AWLOCK_BIT)&(ASM_AXI_AWLOCK_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_WID(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_WID_MASK) >> ASM_AXI_WID_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_WID(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_WID_MASK))\
+ |((VAL << ASM_AXI_WID_BIT)&(ASM_AXI_WID_MASK)));\
+
+#define ASM_GET_AXI_ULTRA(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_ULTRA_MASK) >> ASM_AXI_ULTRA_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_ULTRA(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_ULTRA_MASK))\
+ |((VAL << ASM_AXI_ULTRA_BIT)&(ASM_AXI_ULTRA_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+#define ASM_GET_AXI_FLUSH(CORE,VAL) do{\
+ VAL = ((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&ASM_AXI_FLUSH_MASK) >> ASM_AXI_FLUSH_BIT;\
+ }while(0)
+
+#define ASM_SET_AXI_FLUSH(CORE,VAL) do{\
+ *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)) = (((*(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE)))&~(ASM_AXI_FLUSH_MASK))\
+ |((VAL << ASM_AXI_FLUSH_BIT)&(ASM_AXI_FLUSH_MASK)));\
+ ASM_Dummy_Read = *(volatile kal_uint32*)(ASM_AXI_CONFIG_(CORE));}while(0)
+
+
+#endif //__ASM_REG_97_H__
+
diff --git a/mcu/driver/devdrv/asm/src/drv_asm.c b/mcu/driver/devdrv/asm/src/drv_asm.c
new file mode 100644
index 0000000..8b15d6b
--- /dev/null
+++ b/mcu/driver/devdrv/asm/src/drv_asm.c
@@ -0,0 +1,2239 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * drv_asm.c
+ *
+ * Project:
+ * --------
+ * UMOLY_Software
+ *
+ * Description:
+ * ------------
+ * This file implements ASM drivers
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "asm_reg.h"
+#include "drv_asm.h"
+#include "intrCtrl.h"
+#include "kal_iram_section_defs.h"
+#include "us_timer.h"
+#include "ex_public.h"
+
+ASM_STRUCT Asm_Infor[ASM_NUM];
+
+kal_uint32 Asm_Infor_gen_config[ASM_NUM];
+kal_uint32 Asm_Infor_context_id[ASM_NUM][ASM_TC_NUM];
+kal_uint32 Asm_Infor_trigger_cnt[ASM_NUM];
+
+
+kal_uint32 ASM_Dummy_Read;
+//kal_uint32 PC_Val[ASM_NUM];
+
+
+EX_BBREG_DUMP Asm_Dump;
+
+kal_uint32 Asm_Dump_Regions[ASM_NUM][3];
+
+//#define ASM_DORMANT_BUFFER_LENGTH (256) //1KB
+//#define ASM_DORMANT_BUFFER_SIZE (ASM_DORMANT_BUFFER_LENGTH*4/1024) //1KB
+
+
+//__attribute__((section("NONCACHEDZI"))) __attribute__ ((aligned ( 32 ))) kal_uint32 g_ASM_DORMAT_BUFFER[ASM_DORMANT_BUFFER_LENGTH];
+
+
+
+/*****************************************************************************
+ * Internal Function *
+ *****************************************************************************/
+void ASM_AckAllIntStatus(kal_uint32 core);
+void ASM_SetSPMAndWaitSMPGrant(kal_uint32 core);
+
+
+/*****************************************************************************
+ * Public Function *
+ *****************************************************************************/
+#define CP0_TraceControl_read(val)\
+ do { \
+ __asm__ __volatile__ ( \
+ "mfc0 %0, $23, 1\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ : "=r"(val)\
+ : "0"(val)\
+ ); \
+ } while(0)
+
+
+#define CP0_TraceControl_write(val) \
+ do { \
+ __asm__ __volatile__ ( \
+ "mtc0 %0, $23, 1\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ "nop\n\t" \
+ : \
+ : "r"(val)\
+ ); \
+ } while(0)
+
+/*************************************************************************
+* FUNCTION
+* Asm_PowerOffPDTrace
+*
+* DESCRIPTION
+* Power off PDTrace
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*************************************************************************/
+void Asm_PowerOffPDTrace(void)
+{
+// kal_uint32 val;
+
+// CP0_TraceControl_read(val);
+ CP0_TraceControl_write(0x80000000);
+
+}
+/*************************************************************************
+* FUNCTION
+* Asm_InitInforAllCore
+*
+* DESCRIPTION
+* Init Asm Infor
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*************************************************************************/
+void Asm_InitInforAllCore(void)
+{
+
+ memset((kal_uint8*)Asm_Infor, 0x00, sizeof(Asm_Infor));
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_EnableMcuELM
+*
+* DESCRIPTION
+* Enable Mcu ELM feature
+*
+* PARAMETERS
+*
+* core: core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_EnableMcuELM(kal_uint32 core)
+{
+ Asm_Infor_gen_config[core] |= ASM_MCU_ELM_EN_MASK;
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+
+
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_DisableMcuELM
+*
+* DESCRIPTION
+* Disable Mcu ELM feature
+*
+* PARAMETERS
+*
+* core: core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_DisableMcuELM(kal_uint32 core)
+{
+
+ Asm_Infor_gen_config[core] &= (~ASM_MCU_ELM_EN_MASK);
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetAddon
+*
+* DESCRIPTION
+* Set ASM addon information
+*
+* PARAMETERS
+* kal_uint32 core : core number
+* kal_uint32 tc : tc number
+* kal_uint32* addon_infor : addon information(max is 8 words)
+* kal_uint32* size : addon information size
+* kal_uint32 start_index : addon start index
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+
+ASM_ERROR_CODE ASM_SetAddon(kal_uint32 core,kal_uint32 tc,kal_uint32* addon_infor,kal_uint32 size,kal_uint32 start_index )
+{
+ kal_uint32 i;
+ volatile kal_uint32 *extra_addon_info_base_addr;
+
+#if defined(MT6763) || defined(MT6739)
+//For ASM GCR is overlapped with CIRQ
+ if((ASM_CORE0 == core) && (tc == 3))
+ {
+ return ASM_ERROR_CODE_NO_ERROR;
+ }
+#endif //#if defined(MT6763)
+
+//Remove read status check to speed up write addon
+// if(Asm_Infor[core].mode_config&APB_WR_GCR_BIT_EN)
+// extra_addon_info_base_addr = (kal_uint32 *)ASM_PROFILE_ADDON_INFO_(core,tc);
+// else
+ extra_addon_info_base_addr = (kal_uint32 *)ASM_GCR_PROFILE_ADDON_INFO_(core,tc);
+
+ if(start_index < ASM_PROFILE_END && start_index >= ASM_ADDON_INFO0_EN)
+ {
+ start_index -= ASM_ADDON_INFO0_EN;
+ if( (start_index + size) > ASM_ADDON_NUM)
+ {
+ //ASSERT(0);
+ return ASM_ERROR_CODE_OVER_ADDON_INDEX;
+ }
+ }
+ else
+ {
+ //ASSERT(0);
+ return ASM_ERROR_CODE_OVER_ADDON_SIZE;
+ }
+
+ for( i = 0 ; i < size ; ++i )
+ {
+ Asm_Infor[core].addon[tc][start_index+i]= addon_infor[i];
+ *(extra_addon_info_base_addr+start_index+i) = addon_infor[i];
+ }
+
+ return ASM_ERROR_CODE_NO_ERROR;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetProfilingOption
+*
+* DESCRIPTION
+* Get profile options and addon setting
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 : profile option
+*
+*************************************************************************/
+kal_uint32 ASM_GetProfilingOption(kal_uint32 core)
+{
+ return Asm_Infor[core].profile_en;
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_EnablePDI
+*
+* DESCRIPTION
+* Enable PDI options to ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_EnablePDI(kal_uint32 core)
+{
+ Asm_Infor_gen_config[core] |= ASM_PDI_MASK;
+
+ ASM_SET_GEN_CONFIG(core, Asm_Infor_gen_config[core]);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_DisablePDI
+*
+* DESCRIPTION
+* Disable PDI options to ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_DisablePDI(kal_uint32 core)
+{
+ Asm_Infor_gen_config[core] &= (~ASM_PDI_MASK);
+
+ ASM_SET_GEN_CONFIG(core, Asm_Infor_gen_config[core]);
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_EnableApbWrite
+*
+* DESCRIPTION
+* Enable APB write options to ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_EnableApbWrite(kal_uint32 core)
+{
+ Asm_Infor[core].mode_config |= APB_WR_GCR_BIT_EN;
+
+ ASM_SET_MODE_CONFIG(core, Asm_Infor[core].mode_config);
+
+}
+/*************************************************************************
+* FUNCTION
+* ASM_DisableApbWrite
+*
+* DESCRIPTION
+* Disable APB write options to ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_DisableApbWrite(kal_uint32 core)
+{
+ Asm_Infor[core].mode_config &= (~APB_WR_GCR_BIT_EN);
+
+ ASM_SET_MODE_CONFIG(core, Asm_Infor[core].mode_config);
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetMode
+*
+* DESCRIPTION
+* Get ASM setting Mode
+*
+* PARAMETERS
+* kal_uint32 mode : ASM Mode
+*
+* RETURNS
+*
+* kal_uint32 : ASM Mode
+*
+*************************************************************************/
+kal_uint32 ASM_GetMode(kal_uint32 core)
+{
+ return Asm_Infor[core].asm_mode;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetMode
+*
+* DESCRIPTION
+* Set ASM Mode config
+*
+* PARAMETERS
+* kal_uint32 core : core number
+* kal_uint32 mode : ASM Mode
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_SetMode(kal_uint32 core,kal_uint32 mode)
+{
+ kal_uint32 mode_config[ASM_MODE_END] = {0,
+ 0,
+ ASM_HW_SWLA_STRAM_MODE_CONFIG_VAL,
+ ASM_HW_SWLA_WRAP_MODE_CONFIG_VAL,
+ ASM_HW_SWTR_STRAM_MODE_CONFIG_VAL,
+ ASM_HW_SWTR_WRAP_MODE_CONFIG_VAL
+ };
+ if(mode < ASM_MODE_END)
+ {
+ Asm_Infor[core].asm_mode = mode;
+ Asm_Infor[core].mode_config = mode_config[mode];
+
+ ASM_SET_MODE_CONFIG(core,Asm_Infor[core].mode_config);
+ }
+ else
+ {
+// MSG(MSG_ERR,"Set Mode error. Mode: %d\r\n",mode );
+// ASSERT(0);
+ return ASM_ERROR_CODE_WRONG_MODE;
+ }
+ return ASM_ERROR_CODE_NO_ERROR;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_WaitIdle
+*
+* DESCRIPTION
+* Wait for ASM idle
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_WaitIdle(kal_uint32 core)
+{
+ kal_uint32 idle_state;
+ kal_uint32 wait_cnt = 0;
+ kal_uint32 wait_limit = 10000;
+
+ do
+ {
+ ASM_GET_IDLE(core,idle_state);
+ wait_cnt++;
+ }while((idle_state == 0) && (wait_cnt < wait_limit));
+ //MSG(MSG_INFO,"Wait for idle cnt %d!\r\n",wait_cnt);
+
+ if(wait_cnt == wait_limit)
+ {
+// MSG(MSG_ERR,"Wait for idle fail!\r\n");
+// ASSERT(0);
+ return ASM_ERROR_CODE_WAIT_IDLE_FAIL;
+ }
+
+ return ASM_ERROR_CODE_NO_ERROR;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_Start
+*
+* DESCRIPTION
+* Start ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_Start(kal_uint32 core)
+{
+// Asm_PowerOffPDTrace();
+ Asm_Infor_gen_config[core] |= ASM_ENABLE_MASK;
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+ return ASM_ERROR_CODE_NO_ERROR;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_Stop
+*
+* DESCRIPTION
+* Stop ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_Stop(kal_uint32 core)
+{
+ ASM_ERROR_CODE error_code = ASM_ERROR_CODE_NO_ERROR;
+
+ Asm_Infor[core].stop_time = ust_get_current_time();
+
+ if(Asm_Infor_gen_config[core]&ASM_ENABLE_MASK)
+ {
+ Asm_Infor_gen_config[core] &= (~ASM_ENABLE_MASK);
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+
+ error_code = ASM_WaitIdle(core);
+
+ // read ASM config before dump for debug
+ ASM_GET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+ ASM_GET_BUF_WR_PTR(core,Asm_Infor[core].buf_write_ptr);
+ ASM_GET_REM_LOG_BUF_SIZE(core,Asm_Infor[core].buf_remain_size);
+ ASM_GET_WRAP_CNT(core,Asm_Infor[core].wrap_cnt);
+ ASM_GET_SRAM_MAX_WATER(core,Asm_Infor[core].water_level);
+
+
+ }
+ return error_code;
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_Stop
+*
+* DESCRIPTION
+* Disable ASM then write to disable register without wait for idle
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_StopWithoutWaitIdle(kal_uint32 core)
+{
+ if(Asm_Infor_gen_config[core]&ASM_ENABLE_MASK)
+ {
+ Asm_Infor_gen_config[core] &= (~ASM_ENABLE_MASK);
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+ }
+
+}
+/*************************************************************************
+* FUNCTION
+* ASM_Reset
+*
+* DESCRIPTION
+* Reset ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_Reset(kal_uint32 core)
+{
+ Asm_Infor_gen_config[core] &= (~ASM_ENABLE_MASK);
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core] | ASM_RESET_MASK);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_SPM_Reset
+*
+* DESCRIPTION
+* Reset ASM without update Asm_Infor enable setting for SPM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_SPM_Reset(kal_uint32 core)
+{
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core] | ASM_RESET_MASK);
+}
+
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_CheckBufferSize
+*
+* DESCRIPTION
+* Get buffer size after aligned
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32: buffer size
+*
+*************************************************************************/
+
+kal_uint32 ASM_CheckBufferSize(kal_uint32 buffer_size)
+{
+
+ //64bytes aligned
+ return (buffer_size&0xFFFFFFE0);
+
+
+}
+/*************************************************************************
+* FUNCTION
+* ASM_InitBuffer
+*
+* DESCRIPTION
+* Set ASM EMI buffer to ASM
+*
+* PARAMETERS
+* kal_uint32 core : core number
+* kal_uint32 addr : ASM EMI buffer
+* kal_uint32 size : ASM EMI buffer size
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_InitBuffer(kal_uint32 core,kal_uint32 addr,kal_uint32 size)
+{
+ kal_uint32 size_64bytes_aligned;
+
+
+ size_64bytes_aligned = ASM_CheckBufferSize(size);
+
+ if(size_64bytes_aligned == 0)
+ {
+ return ASM_ERROR_CODE_BUFFER_TOO_SMALL;
+ }
+
+ //Set logging buffer
+ Asm_Infor[core].buf_base_address = addr;
+ Asm_Infor[core].thresh_value = size_64bytes_aligned / ASM_BUF_ALT_TH_VAL;
+
+ //uint:Byte
+ Asm_Infor[core].buf_size = size_64bytes_aligned;
+ Asm_Infor[core].buf_read_ptr = addr;
+ Asm_Infor[core].buf_write_ptr = addr;
+
+ ASM_SET_LOG_BUF_BASEADDR(core, Asm_Infor[core].buf_base_address);
+ ASM_SET_LOG_BUF_SIZE(core, Asm_Infor[core].buf_size);
+ ASM_SET_BUF_ALT_THRESH(core,Asm_Infor[core].thresh_value);
+ ASM_SET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+ ASM_SET_BUF_WR_PTR(core,Asm_Infor[core].buf_write_ptr);
+
+
+ return ASM_ERROR_CODE_NO_ERROR;
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufferSettingSize
+*
+* DESCRIPTION
+* Get ASM EMI buffer setting size
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 : buffer setting size
+*
+*************************************************************************/
+kal_uint32 ASM_GetBufferSettingSize(kal_uint32 core)
+{
+ return (Asm_Infor[core].buf_size);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufferWrapCnt
+*
+* DESCRIPTION
+* Get ASM EMI buffer wrap count
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 : ASM wrap count
+*
+*************************************************************************/
+kal_uint32 ASM_GetBufferWrapCnt(kal_uint32 core)
+{
+ ASM_GET_WRAP_CNT(core,Asm_Infor[core].wrap_cnt);
+
+ return (Asm_Infor[core].wrap_cnt);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetSRAMWaterLevel
+*
+* DESCRIPTION
+* Get ASM SRAM water level
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 : ASM water level
+*
+*************************************************************************/
+kal_uint32 ASM_GetSRAMWaterLevel(kal_uint32 core)
+{
+ ASM_GET_SRAM_MAX_WATER(core,Asm_Infor[core].water_level);
+
+ return (Asm_Infor[core].water_level);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_ClearBufferData
+*
+* DESCRIPTION
+* Set EMI buffer initial value 0xFFFFFFFF
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_ClearBufferData(kal_uint32 core)
+{
+
+ kal_uint8* ptr;
+ ptr = (kal_uint8*)Asm_Infor[core].buf_base_address;
+ memset(ptr,0xFF,Asm_Infor[core].buf_size);
+
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufBaseAddr
+*
+* DESCRIPTION
+* Get EMI buffer base address
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* Buffer Base address
+*
+*************************************************************************/
+kal_uint32 ASM_GetBufBaseAddr(kal_uint32 core)
+{
+ return Asm_Infor[core].buf_base_address;
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_Address2Offset
+*
+* DESCRIPTION
+* Tramsfer reasd/write Address to Offset
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_Address2Offset(kal_uint32 core,kal_uint32* addr_ptr)
+{
+ kal_uint32 base_addr;
+ base_addr = ASM_GetBufBaseAddr(core);
+
+ *addr_ptr = (*addr_ptr - base_addr)/4;
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_Offset2Address
+*
+* DESCRIPTION
+* Tramsfer reasd/write Offset to Address
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_Offset2Address(kal_uint32 core,kal_uint32* addr_ptr)
+{
+ kal_uint32 base_addr;
+ base_addr = ASM_GetBufBaseAddr(core);
+
+ *addr_ptr = base_addr+((*addr_ptr)*4);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufReadWritePtr
+*
+* DESCRIPTION
+* Get EMI buffer read/write pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32* rd_ptr : buffer read pointer
+* kal_uint32* wr_ptr : buffer write pointer
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_GetBufReadWritePtr(kal_uint32 core,kal_uint32* rd_ptr, kal_uint32* wr_ptr)
+{
+ ASM_GET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+ ASM_GET_BUF_WR_PTR(core,Asm_Infor[core].buf_write_ptr);
+
+ *rd_ptr = Asm_Infor[core].buf_read_ptr;
+ *wr_ptr = Asm_Infor[core].buf_write_ptr;
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufReadWriteAddress
+*
+* DESCRIPTION
+* Get EMI buffer read/write pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32* rd_ptr : buffer read address (unit: byte)
+* kal_uint32* wr_ptr : buffer write pointer (unit:byte)
+* kal_uint32* remain_size : buffer remain_size (unit:byte)
+*
+* RETURNS
+*
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_GetBufReadWriteAddress(kal_uint32 core,kal_uint32* rd_addr, kal_uint32* wr_addr,kal_uint32* remain_size)
+{
+ kal_uint32 rd_ptr;
+ kal_uint32 wr_ptr;
+ kal_uint32 remain_ptr;
+
+
+
+ ASM_GET_BUF_RD_PTR(core,rd_ptr);
+ ASM_GET_BUF_WR_PTR(core,wr_ptr);
+ ASM_GET_REM_LOG_BUF_SIZE(core,remain_ptr);
+
+
+ if((Asm_Infor[core].buf_base_address <= rd_ptr) && (rd_ptr != 0))
+ {
+ *rd_addr = (rd_ptr - Asm_Infor[core].buf_base_address);
+ Asm_Infor[core].buf_read_ptr = rd_ptr;
+ }
+ else
+ {
+ *rd_addr = 0;
+ return ASM_ERROR_CODE_INVALID_RW_POINTER;
+ }
+
+ if((Asm_Infor[core].buf_base_address <= wr_ptr) && (wr_ptr != 0))
+ {
+ *wr_addr = (wr_ptr - Asm_Infor[core].buf_base_address);
+ Asm_Infor[core].buf_write_ptr = wr_ptr;
+
+ *remain_size = (remain_ptr*4);
+ Asm_Infor[core].buf_remain_size = remain_ptr;
+ }
+ else
+ {
+ *wr_addr = 0;
+ *remain_size = 0;
+ return ASM_ERROR_CODE_INVALID_RW_POINTER;
+ }
+
+ return ASM_ERROR_CODE_NO_ERROR;
+
+}
+/*************************************************************************
+* FUNCTION
+* ASM_GetOutputDataSize
+*
+* DESCRIPTION
+* Get EMI buffer read/write pointer then return data size
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* kal_uint32 : data size(words)
+*
+*************************************************************************/
+kal_uint32 ASM_GetOutputDataSize(kal_uint32 core)
+{
+ ASM_GET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+ ASM_GET_BUF_WR_PTR(core,Asm_Infor[core].buf_write_ptr);
+
+ if(Asm_Infor[core].buf_read_ptr > Asm_Infor[core].buf_write_ptr)
+ {
+ return(Asm_Infor[core].buf_size -(Asm_Infor[core].buf_read_ptr- Asm_Infor[core].buf_write_ptr));
+ }
+ else
+ {
+ return(Asm_Infor[core].buf_write_ptr - Asm_Infor[core].buf_read_ptr);
+ }
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufReadPtr
+*
+* DESCRIPTION
+* Get EMI buffer read pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* read pointer
+*
+*************************************************************************/
+kal_uint32 ASM_GetBufReadPtr(kal_uint32 core)
+{
+ ASM_GET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+ kal_uint32 addr = Asm_Infor[core].buf_read_ptr;
+ ASM_Address2Offset(core,&addr);
+ return addr;
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufWritePtr
+*
+* DESCRIPTION
+* Get EMI buffer write pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* write pointer
+*
+*************************************************************************/
+kal_uint32 ASM_GetBufWritePtr(kal_uint32 core)
+{
+ ASM_GET_BUF_WR_PTR(core,Asm_Infor[core].buf_write_ptr);
+ kal_uint32 addr = Asm_Infor[core].buf_write_ptr;
+ ASM_Address2Offset(core,&addr);
+
+ return addr;
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetPDICnt
+*
+* DESCRIPTION
+* Get PDI count
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 : PDI count
+*
+*************************************************************************/
+kal_uint32 ASM_GetPDICnt(kal_uint32 core)
+{
+ ASM_GET_PDI_CNT(core,Asm_Infor[core].pdi_cnt);
+ return Asm_Infor[core].pdi_cnt;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_UpdateBufReadPtr
+*
+* DESCRIPTION
+* Update EMI buffer read pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 rd_ptr : read pointer to update(unit: word)
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_UpdateBufReadPtr(kal_uint32 core,kal_uint32 rd_ptr)
+{
+ ASM_Offset2Address(core,&rd_ptr);
+
+ Asm_Infor[core].buf_read_ptr = rd_ptr;
+
+ ASM_SET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_UpdateBufReadAddress
+*
+* DESCRIPTION
+* Update EMI buffer read address
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 addr : read address to update(unit:byte)
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_UpdateBufReadAddress(kal_uint32 core,kal_uint32 addr)
+{
+ addr += Asm_Infor[core].buf_base_address;
+
+ Asm_Infor[core].buf_read_ptr = addr;
+
+ ASM_SET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufferInfor
+*
+* DESCRIPTION
+* Update EMI buffer read pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 addr : ASM EMI base address (unit:byte)
+* kal_uint32 size : ASM EMI buffer size(unit:byte)
+* kal_uint32 read_addr : read address (unit:byte)
+* kal_uint32 write_addr : write address (unit:byte)
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_GetBufferInfor(kal_uint32 core,kal_uint32* addr, kal_uint32* size, kal_uint32* read_addr, kal_uint32* write_addr)
+{
+ kal_uint32 remain_size;
+ ASM_GetBufReadWriteAddress(core,read_addr,write_addr,&remain_size);
+ *size = Asm_Infor[core].buf_size;
+ *addr = Asm_Infor[core].buf_base_address;
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreBufferSetting
+*
+* DESCRIPTION
+* Restore ASM EMI buffer setting to ASM register
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_RestoreBufferSetting(kal_uint32 core)
+{
+ ASM_SET_BUF_ALT_THRESH(core,Asm_Infor[core].thresh_value);
+ ASM_SET_LOG_BUF_BASEADDR(core,Asm_Infor[core].buf_base_address);
+ ASM_SET_LOG_BUF_SIZE(core,Asm_Infor[core].buf_size);
+ ASM_SET_BUF_RD_PTR(core,Asm_Infor[core].buf_read_ptr);
+ ASM_SET_BUF_WR_PTR(core,Asm_Infor[core].buf_write_ptr);
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SaveBufferSetting
+*
+* DESCRIPTION
+* Get then save buffer setting
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_SaveBufferSetting(kal_uint32 core)
+{
+//only need to get latest read/write pointer
+ ASM_GetBufReadPtr(core);
+ ASM_GetBufWritePtr(core);
+ ASM_GET_REM_LOG_BUF_SIZE(core,Asm_Infor[core].buf_remain_size);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_SaveSramSetting
+*
+* DESCRIPTION
+* Get and save sram setting
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SaveSramSetting(kal_uint32 core)
+{
+ ASM_GET_SRAM_STATUS(core,Asm_Infor[core].sram_status);
+ ASM_GET_SRAM_MAX_BUF_SIZE(core,Asm_Infor[core].sram_max_buf_size);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreSramSetting
+*
+* DESCRIPTION
+* Set ASM sram read pointer
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_RestoreSramSetting(kal_uint32 core)
+{
+ ASM_SET_SRAM_STATUS(core,Asm_Infor[core].sram_status);
+ ASM_SET_SRAM_MAX_BUF_SIZE(core,Asm_Infor[core].sram_max_buf_size);
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreAddon
+*
+* DESCRIPTION
+* Restore Addon setting to ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_RestoreAddon(kal_uint32 core)
+{
+ kal_uint32 index,tc, tc_num;
+ volatile kal_uint32 *extra_addon_info_base_addr;
+
+ tc_num = ASM_TC_NUM;
+#if defined(MT6763) || defined(MT6739)
+ //For ASM GCR is overlapped with CIRQ
+ if(ASM_CORE0 == core)
+ {
+ tc_num = 3;
+ }
+#endif //#if defined(MT6763)
+
+ for( tc = 0 ; tc < tc_num ; tc++ )
+ {
+ extra_addon_info_base_addr = (kal_uint32 *)ASM_GCR_PROFILE_ADDON_INFO_(core,tc);
+
+ for( index = 0 ; index < ASM_ADDON_NUM ; index++ )
+ {
+ if(Asm_Infor[core].profile_en&(1 << (index+ASM_ADDON_INFO0_EN)))
+ *(extra_addon_info_base_addr+index) = Asm_Infor[core].addon[tc][index];
+ }
+ }
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SaveContextID
+*
+* DESCRIPTION
+* Save TC context ID
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SaveContextID(kal_uint32 core)
+{
+ kal_uint32 tc_index;
+
+ for( tc_index = 0 ; tc_index < ASM_TC_NUM ; tc_index++ )
+ {
+ ASM_GET_TC_CONTEXT_ID(core,tc_index,Asm_Infor_context_id[core][tc_index]);
+ }
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreContextID
+*
+* DESCRIPTION
+* Restore TC context ID to ASM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_RestoreContextID(kal_uint32 core)
+{
+ kal_uint32 tc;
+
+
+ for( tc = 0 ; tc < ASM_TC_NUM ; tc++ )
+ {
+ ASM_SET_GCR_TC_CONTEXT_ID(core,tc,Asm_Infor_context_id[core][tc]);
+ }
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetBufferThresholdValue
+*
+* DESCRIPTION
+* Set ASM buffer threshold value
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 val : threhold value
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SetBufferThresholdValue(kal_uint32 core,kal_uint32 val)
+{
+ Asm_Infor[core].thresh_value = val;
+
+ ASM_SET_BUF_ALT_THRESH(core,Asm_Infor[core].thresh_value);
+
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetBufferThresholdValue
+*
+* DESCRIPTION
+* Get ASM buffer threshold value
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 val : threhold value
+*
+*************************************************************************/
+kal_uint32 ASM_GetBufferThresholdValue(kal_uint32 core)
+{
+ ASM_GET_BUF_ALT_THRESH(core,Asm_Infor[core].thresh_value);
+ return Asm_Infor[core].thresh_value;
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SaveConfigForSPM
+*
+* DESCRIPTION
+* Save register for SPM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_SaveConfigForSPM(kal_uint32 core)
+{
+ Asm_Infor[core].spm_set++;
+
+ if(Asm_Infor_gen_config[core]&ASM_ENABLE_MASK)
+ {
+ Asm_Infor[core].asm_is_enabled = 1;
+
+ ASM_SetSPMAndWaitSMPGrant(core);
+
+ ASM_SaveBufferSetting(core);
+ ASM_SaveSramSetting(core);
+ //ASM_SaveContextID(core);
+
+ ASM_GET_WRAP_CNT(core,Asm_Infor[core].wrap_cnt);
+ ASM_GET_PDI_CNT(core,Asm_Infor[core].pdi_cnt);
+
+ //to avoid ASM is not power down, that will cause ASM be lock
+ ASM_SPM_Reset(core);
+
+
+ }
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SaveCoreConfigForSPM
+*
+* DESCRIPTION
+* Save register for SPM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_SaveCoreConfigForSPM(void)
+{
+
+ kal_uint32 core = kal_get_current_core_id();
+
+ ASM_SaveConfigForSPM(core);
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SaveConfigForSPM_AllCore
+*
+* DESCRIPTION
+* Save all ASM for SPM
+*
+* PARAMETERS
+*
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_SaveConfigForSPM_AllCore(void)
+{
+ kal_uint32 core;
+
+ for(core = 0; core < ASM_NUM; core++)
+ ASM_SaveConfigForSPM(core);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_WaitSMPGrant
+*
+* DESCRIPTION
+* Wait ASM SPM Grant
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* read address
+*
+*************************************************************************/
+void ASM_SetSPMAndWaitSMPGrant(kal_uint32 core)
+{
+ kal_uint32 grant = 0;
+ kal_uint32 wait_cnt = 0;
+
+ ASM_SET_SPM_REQ(core,1);
+
+ do
+ {
+ ASM_GET_SPM_GRANT(core,grant);
+ wait_cnt++;
+ }while((grant == 0) &&(wait_cnt < 10));
+
+// if(wait_cnt > 1)
+// MSG(MSG_ERR,"[core %d]Wait for Grant fail count %d\r\n",core,wait_cnt);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreConfigforSPM
+*
+* DESCRIPTION
+* Restore ASM after SPM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* read address
+*
+*************************************************************************/
+void ASM_RestoreConfigforSPM(kal_uint32 core)
+{
+ if(Asm_Infor_gen_config[core]&ASM_ENABLE_MASK)
+ {
+ ASM_SET_PROFILE_EN(core,Asm_Infor[core].profile_en);
+
+ ASM_RestoreBufferSetting(core);
+ ASM_RestoreSramSetting(core);
+
+ if(Asm_Infor[core].asm_mode > ASM_HW_SWLA_WRAP_MODE)
+ {
+ ASM_SET_TRACER_SAMPLE_RATE(core,Asm_Infor[core].sample_rate);
+// if(Asm_Infor[core].swtr_header != ASM_HW_SWTR_HEADER_VAL)
+// {
+// ASM_SET_TR_HEAD(core,Asm_Infor[core].swtr_header);
+// }
+ }
+
+ if(Asm_Infor[core].pdi_cnt)
+ {
+ ASM_SET_PDI_CNT(core,Asm_Infor[core].pdi_cnt);
+ }
+
+ if(Asm_Infor[core].wrap_cnt)
+ {
+ ASM_SET_WRAP_CNT(core,Asm_Infor[core].wrap_cnt);
+ }
+
+ if(Asm_Infor[core].axi_config != ASM_AXI_CONFIG_DEFAULT_VAL)
+ {
+ ASM_SET_AXI_CONFIG(core,Asm_Infor[core].axi_config);
+ }
+
+ ASM_SET_MODE_CONFIG(core,Asm_Infor[core].mode_config);
+ ASM_SET_L2IMCR(core,Asm_Infor[core].int_en);
+
+ ASM_RestoreAddon(core);
+ ASM_RestoreContextID(core);
+
+ //clear SPM REQ
+ ASM_SET_SPM_REQ(core,0);
+
+ ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+
+ Asm_Infor[core].asm_is_enabled = 0;
+
+
+ }
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreCoreConfigforSPM
+*
+* DESCRIPTION
+* Restore ASM after SPM
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+* read address
+*
+*************************************************************************/
+void ASM_RestoreCoreConfigforSPM(void)
+{
+
+ kal_uint32 core = kal_get_current_core_id();
+
+ ASM_RestoreConfigforSPM(core);
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_RestoreConfigforSPM_AllCore
+*
+* DESCRIPTION
+* Save all ASM for SPM
+*
+* PARAMETERS
+*
+*
+* RETURNS
+*
+*************************************************************************/
+void ASM_RestoreConfigforSPM_AllCore(void)
+{
+ kal_uint32 core;
+
+ for(core = 0; core < ASM_NUM; core++)
+ ASM_RestoreConfigforSPM(core);
+}
+/*************************************************************************
+* FUNCTION
+* ASM_SetProfileFilter
+*
+* DESCRIPTION
+* Set profile option
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 option : enable profile option
+*
+* RETURNS
+*
+*
+*************************************************************************/
+
+void ASM_SetProfileFilter(kal_uint32 core,kal_uint32 option )
+{
+ Asm_Infor[core].profile_en = option;
+
+//ELM can not pause now, and this enable bit will keep ELM running
+// if(option & ASM_MCU_ELM_OPTION_MASK)
+// {
+// Asm_Infor[core].gen_config |= ASM_MCU_ELM_EN_MASK;
+// }
+
+
+ ASM_SET_PROFILE_EN(core,Asm_Infor[core].profile_en);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SWTRSetSampleRate
+*
+* DESCRIPTION
+* Set SWTR mode sampling rate
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 sample_rate : sampling rate
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+
+ASM_ERROR_CODE ASM_SWTRSetSampleRate(kal_uint32 core,kal_uint32 sample_rate)
+{
+ if(sample_rate == 0)
+ return ASM_ERROR_CODE_INVALID_SAMPLE_RATE;
+
+ Asm_Infor[core].sample_rate = sample_rate;
+
+ ASM_SET_TRACER_SAMPLE_RATE(core,sample_rate);
+
+ return ASM_ERROR_CODE_NO_ERROR;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_InitSetting
+*
+* DESCRIPTION
+* Set ASM Mode Config
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 mode : ASM mode
+* kal_uint32* buffer : Buffer pointer
+* kal_uint32 buffer_size : Buffer size
+* kal_uint32 option_en : option enabled
+* kal_uint32 sampling_rate : SWTR sample rate
+*
+* RETURNS
+*
+* ASM_ERROR_CODE
+*
+*************************************************************************/
+ASM_ERROR_CODE ASM_InitSetting(kal_uint32 core,kal_uint32 mode, kal_uint32 *buffer,kal_uint32 buffer_size,kal_uint32 option_en,kal_uint32 sampling_rate)
+{
+ ASM_ERROR_CODE error_code = ASM_ERROR_CODE_NO_ERROR;
+
+ Asm_Infor[core].start_time = ust_get_current_time();
+
+ ASM_Reset(core);
+
+ error_code = ASM_InitBuffer(core,(kal_uint32)buffer,buffer_size);
+ if(error_code != ASM_ERROR_CODE_NO_ERROR)
+ return error_code;
+
+ error_code = ASM_SetMode(core,mode);
+ if(error_code != ASM_ERROR_CODE_NO_ERROR)
+ return error_code;
+
+ if(Asm_Infor[core].asm_mode > ASM_HW_SWLA_WRAP_MODE)
+ {
+ error_code = ASM_SWTRSetSampleRate(core,sampling_rate);
+ if(error_code != ASM_ERROR_CODE_NO_ERROR)
+ return error_code;
+
+ }
+
+ ASM_SetProfileFilter(core,option_en);
+
+ ASM_EnablePDI(core);
+
+ ASM_DisableApbWrite(core);
+
+// ASM_SET_GEN_CONFIG(core,Asm_Infor_gen_config[core]);
+
+ Asm_Infor_trigger_cnt[core] = 0;
+
+ ASM_AckAllIntStatus(core);
+
+ if(ASM_WRAP_MODE_EN&Asm_Infor[core].mode_config)
+ {
+ ASM_McuCoreIntIRQMask(core);
+ }
+ else
+ {
+ ASM_McuCoreIntIRQUnMask(core);
+ }
+
+ Asm_Infor[core].axi_config = ASM_AXI_CONFIG_DEFAULT_VAL;
+
+ return error_code;
+
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetTCContextID
+*
+* DESCRIPTION
+* ASM context ID by core and TC
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 tc : tc number
+* kal_uint32 id : context id
+*
+* RETURNS
+*
+*************************************************************************/
+
+void ASM_SetTCContextID(kal_uint32 core, kal_uint32 tc,kal_uint32 id)
+{
+ Asm_Infor_context_id[core][tc] = id;
+ ASM_SET_GCR_TC_CONTEXT_ID(core,tc,Asm_Infor_context_id[core][tc]);
+
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_BufferIsWrap
+*
+* DESCRIPTION
+* Check buffer Wrap
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*************************************************************************/
+
+kal_bool ASM_BufferIsWrap(kal_uint32 core)
+{
+ ASM_GetBufferWrapCnt(core);
+
+ if(Asm_Infor[core].wrap_cnt)
+ {
+ return KAL_TRUE;
+ }
+ else
+ {
+ return KAL_FALSE;
+ }
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetIntEnable
+*
+* DESCRIPTION
+* Set ASM Imterrupter enable
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* ASM_INT_TYPE : asm interrupter id
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SetIntEnable(kal_uint32 core,ASM_INT_TYPE int_id)
+{
+ Asm_Infor[core].int_en |= (1 << int_id);
+
+ ASM_SET_L2IMCR(core,(1 << int_id));
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetIntDisable
+*
+* DESCRIPTION
+* Set ASM Imterrupter disable
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* ASM_INT_TYPE : asm interrupter id
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SetIntDisable(kal_uint32 core,ASM_INT_TYPE int_id)
+{
+ Asm_Infor[core].int_en &= (~(1 << int_id));
+
+ ASM_SET_L2IMSR(core,(1 << int_id));
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuCoreIQRMask
+*
+* DESCRIPTION
+* Set ASM Mcu core interrupter Mask
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* ASM_INT_TYPE irq : irq index
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuCoreIQRMask(kal_uint32 core,ASM_INT_TYPE irq)
+{
+ ASM_SetIntDisable(core,irq);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuCoreIntIRQMask
+*
+* DESCRIPTION
+* Set ASM Mcu core Int Mask
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuCoreIntIRQMask(kal_uint32 core)
+{
+ ASM_McuCoreIQRMask(core,ASM_THRESHOLD_INT);
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuCoreIntUnMask
+*
+* DESCRIPTION
+* Set ASM Mcu core interrupter UmMask
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* ASM_INT_TYPE irq : irq index
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuCoreIRQUnMask(kal_uint32 core,ASM_INT_TYPE irq)
+{
+ ASM_SetIntEnable(core,irq);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuCoreIntAck
+*
+* DESCRIPTION
+* Set ASM Mcu core interrupter ack
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* ASM_INT_TYPE irq : irq index
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuCoreIRQAck(kal_uint32 core,ASM_INT_TYPE irq)
+{
+ ASM_SET_L2ISAR(core,(1 << irq));
+}
+
+
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuCoreIntIRQUnMask
+*
+* DESCRIPTION
+* Set ASM Mcu core Int UmMask
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuCoreIntIRQUnMask(kal_uint32 core)
+{
+ ASM_McuCoreIRQUnMask(core,ASM_THRESHOLD_INT);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuCoreIntIRQAck
+*
+* DESCRIPTION
+* Set ASM Mcu core Int ack
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuCoreIntIRQAck(kal_uint32 core)
+{
+ ASM_McuCoreIRQAck(core,ASM_THRESHOLD_INT);
+
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuIntIRQMask
+*
+* DESCRIPTION
+* Set ASM Mcu int IRQ Mask
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuIntIRQMask(void)
+{
+ IRQMask(MD_IRQID_ABM_INT);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuIntIRQUnMask
+*
+* DESCRIPTION
+* Set ASM Mcu int IRQUnMask
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuIntIRQUnMask(void)
+{
+ IRQUnmask(MD_IRQID_ABM_INT);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuErrorIRQMask
+*
+* DESCRIPTION
+* Set ASM Mcu error IRQ Mask
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuErrorIRQMask(void)
+{
+ IRQMask(MD_IRQID_ABM_ERROR_INT);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuErrorUnMask
+*
+* DESCRIPTION
+* Set ASM Mcu error IRQUnMask
+*
+* PARAMETERS
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuErrorIRQUnMask(void)
+{
+ IRQUnmask(MD_IRQID_ABM_ERROR_INT);
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuIntRegsterLISR
+*
+* DESCRIPTION
+* reigster ASM mcu int IRQ LISR
+*
+* PARAMETERS
+*
+* void* reg_lisr : LISR callback
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuIntRegsterLISR(void* reg_lisr)
+{
+ //IRQ_Register_LISR(MD_IRQID_ABM_INT, reg_lisr, "ASM MCU int lisr");
+ //IRQSensitivity(MD_IRQID_ABM_INT, KAL_FALSE);
+ IRQUnmask(MD_IRQID_ABM_INT);
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_McuErrorRegsterLISR
+*
+* DESCRIPTION
+* reigster ASM mcu error IRQ LISR
+*
+* PARAMETERS
+*
+* void* reg_lisr : LISR callback
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_McuErrorRegsterLISR(void* reg_lisr)
+{
+ //IRQ_Register_LISR(MD_IRQID_ABM_ERROR_INT, reg_lisr, "ASM MCU error lisr");
+ //IRQSensitivity(MD_IRQID_ABM_ERROR_INT, KAL_FALSE);
+ IRQUnmask(MD_IRQID_ABM_ERROR_INT);
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetIntStatus
+*
+* DESCRIPTION
+* Get ASM int status
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+* kal_uint32 : interrupter status value
+*
+*************************************************************************/
+kal_uint32 ASM_GetIntStatus(kal_uint32 core)
+{
+ ASM_GET_L2ISAR(core,Asm_Infor[core].int_status);
+
+ return Asm_Infor[core].int_status;
+}
+
+/*************************************************************************
+* FUNCTION
+* ASM_AckAllIntStatus
+*
+* DESCRIPTION
+* Ack ASM all interrupter
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_AckAllIntStatus(kal_uint32 core)
+{
+ ASM_SET_L2ISAR(core,0x1F);
+ ASM_GetIntStatus(core);
+
+}
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SendTrigger
+*
+* DESCRIPTION
+* Send ASM trigger command
+*
+* PARAMETERS
+*
+* kal_uint32 core : core number
+* kal_uint32 tc : tc number
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SendTrigger(kal_uint32 core,kal_uint32 tc)
+{
+ if(Asm_Infor_gen_config[core]&ASM_ENABLE_MASK)
+ {
+ ASM_SET_GCR_SWLA_TRIG(core,tc);
+
+ Asm_Infor_trigger_cnt[core]++;
+ }
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetMcuIntStatusAndMask
+*
+* DESCRIPTION
+* Get Top mcu int and mask status
+*
+* PARAMETERS
+*
+* kal_uint32* status: mcu interrupter status
+* kal_uint32* mask: mcu interrupter mask status
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_GetMcuIntStatusAndMask(kal_uint32* status,kal_uint32* mask)
+{
+ kal_uint32 val;
+ ASM_GET_TOP_STATUS(val);
+
+ *status = (val&ASM_TOP_INT_STATUS_MASK) >> ASM_TOP_INT_STATUS_BIT;
+ *mask = (val&ASM_TOP_INT_MASK_STATUS_MASK) >> ASM_TOP_INT_MASK_STATUS_BIT;
+}
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_GetTcContextId
+*
+* DESCRIPTION
+* Get tc context id
+*
+* PARAMETERS
+*
+* kal_uint32 core: core id
+* kal_uint32 tc: tc id
+*
+* RETURNS
+*
+* kal_uint32 : context id
+*
+*************************************************************************/
+kal_uint32 ASM_GetTcContextId(kal_uint32 core,kal_uint32 tc)
+{
+ kal_uint32 val;
+ ASM_GET_TC_CONTEXT_ID(core,tc,val);
+ return val;
+}
+
+
+
+
+/*************************************************************************
+* FUNCTION
+* ASM_SetDumpRegion
+*
+* DESCRIPTION
+* Set ASM dump region
+*
+* PARAMETERS
+*
+*
+* RETURNS
+*
+*
+*************************************************************************/
+void ASM_SetDumpRegion(void)
+{
+ /* bbreg dump setting */
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+}
+
+
+