/* Copyright Statement: * * This software/firmware and related documentation ("MediaTek Software") are * protected under relevant copyright laws. The information contained herein * is confidential and proprietary to MediaTek Inc. and/or its licensors. * Without the prior written permission of MediaTek inc. and/or its licensors, * any reproduction, modification, use or disclosure of MediaTek Software, * and information contained herein, in whole or in part, shall be strictly prohibited. */ /* MediaTek Inc. (C) 2015. All rights reserved. * * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER 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 RECEIVER AGREES TO LOOK ONLY TO SUCH * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR * STANDARD OR OPEN FORUM. RECEIVER'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 RECEIVER TO * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. */ /* Note: Pleae enable DUMMY_AP option at rule.mk if hope to use this function */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //===================================================================== // Feature option switch part //===================================================================== #define THIS_IS_EVB #define BOTH_MD_ON //#define DEFAULT_META //#define ENABLE_MD_RESET_SPM //#define ENABLE_MD_RESET_RGU #define IGNORE_MD_WDT //#define IGNORE_MD1_WDT //#define IGNORE_MD2_WDT //#define ALWAYS_META #define AP_MD_SAME_UART #ifdef ENABLE_MD_RESET_SPM #include #endif enum { MD_SYS1 = 0, MD_SYS2, MD_SYS3, MD_SYS4, }; //------- IRQ ID part --------------------------------------- #define GIC_PRIVATE_SIGNALS (32) #define MT_MD_WDT1_IRQ_ID (223+GIC_PRIVATE_SIGNALS) #define MT_MD_WDT2_IRQ_ID (220+GIC_PRIVATE_SIGNALS) // C2K_CONFIG (0x10001360) #define AP_C2K_CONFIG (0x10001360) // AP RGU #define TOP_RGU_WDT_MODE (TOPRGU_BASE+0x0) #define TOP_RGU_WDT_SWRST (TOPRGU_BASE+0x14) #define TOP_RGU_WDT_SWSYSRST (TOPRGU_BASE+0x18) #define TOP_RGU_WDT_NONRST_REG (TOPRGU_BASE+0x20) // MD RGU PCore #define MD_WDT_BASE (0x200F0000) // P Core 0x55000000 #define MD_WDT_STA (MD_WDT_BASE+0x0C) // MD RGU L1 Core #define MD_L1WDT_BASE (0x26010000) //2200//L Core #define PLL_TYPE (volatile unsigned int *) #define MD_CLKSW_BASE (0x20150000) #define MD_GLOBAL_CON_DCM_BASE (0x20130000) #define PSMCU_MISC_BASE (0x20200000) #define MD_PERI_MISC_BASE (0x20060000) #define MDL1A0_BASE (0x260F0000) #define BASE_ADDR_MDTOP_PLLMIXED (0x20140000) #define BASE_ADDR_MDSYS_CLKCTL (0x20120000) #define L1_BASE_MADDR_MDL1_CONF (0x260F0000) #define R_CLKSEL_CTL (PLL_TYPE(MD_CLKSW_BASE+0x0024)) #define R_FLEXCKGEN_SEL0 (PLL_TYPE(MD_CLKSW_BASE+0x0028)) #define R_FLEXCKGEN_SEL1 (PLL_TYPE(MD_CLKSW_BASE+0x002C)) #define R_FLEXCKGEN_SEL2 (PLL_TYPE(MD_CLKSW_BASE+0x0044)) #define R_PLL_STS (PLL_TYPE(MD_CLKSW_BASE+0x0040)) #define R_FLEXCKGEN_STS0 (PLL_TYPE(MD_CLKSW_BASE+0x0030)) #define R_FLEXCKGEN_STS1 (PLL_TYPE(MD_CLKSW_BASE+0x0034)) #define R_FLEXCKGEN_STS2 (PLL_TYPE(MD_CLKSW_BASE+0x0048)) /*PSMCU DCM*/ #define R_PSMCU_DCM_CTL0 (PLL_TYPE(MD_GLOBAL_CON_DCM_BASE+0x0010)) #define R_PSMCU_DCM_CTL1 (PLL_TYPE(MD_GLOBAL_CON_DCM_BASE+0x0014)) #define R_ARM7_DCM_CTL0 (PLL_TYPE(MD_GLOBAL_CON_DCM_BASE+0x0020)) #define R_ARM7_DCM_CTL1 (PLL_TYPE(MD_GLOBAL_CON_DCM_BASE+0x0024)) #define MD_GLOBAL_CON_DUMMY (PLL_TYPE(MD_GLOBAL_CON_DCM_BASE+0x1000)) #define MD_PLL_MAGIC_NUM (0x67550000) #define R_DCM_SHR_SET_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0004)) #define R_LTEL2_BUS_DCM_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0010)) #define R_MDDMA_BUS_DCM_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0014)) #define R_MDREG_BUS_DCM_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0018)) #define R_MODULE_BUS2X_DCM_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x001C)) #define R_MODULE_BUS1X_DCM_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0020)) #define R_MDINFRA_CKEN (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0044)) #define R_MDPERI_CKEN (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0048)) #define R_MDPERI_DCM_MASK (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x0064)) #define R_PSMCU_AO_CLK_CTL (PLL_TYPE(BASE_ADDR_MDSYS_CLKCTL+0x00C0)) #define R_L1_PMS (PLL_TYPE(MD_PERI_MISC_BASE+0x00C4)) #define REG_DCM_PLLCK_SEL (PLL_TYPE(MDL1A0_BASE+0x0188)) #define R_L1MCU_PWR_AWARE (PLL_TYPE(MDL1A0_BASE+0x0190)) #define R_L1AO_PWR_AWARE (PLL_TYPE(MDL1A0_BASE+0x0194)) #define R_BUSL2DCM_CON3 (PLL_TYPE(MDL1A0_BASE+0x0198)) #define R_L1MCU_DCM_CON2 (PLL_TYPE(MDL1A0_BASE+0x0184)) #define R_L1MCU_DCM_CON (PLL_TYPE(MDL1A0_BASE+0x0180)) // C2K boot #define UINT32P (volatile unsigned int *) #define SLEEP_BASE (0x10006000) #define APMIXED_BASE (0x1000C000) #define TOPRGU_BASE (0x10007000) #define INFRACFG_AO_BASE (0x10001000) #define C2KSYS_BASE (0x38000000) #define C2K_CGBR1 (UINT32P (C2KSYS_BASE+0x0200B004)) #define WDT_SWSYSRST (UINT32P (TOPRGU_BASE+0x018)) #define INFRA_TOPAXI_PROTECTEN_1 (UINT32P (INFRACFG_AO_BASE+0x250)) #define C2K_SPM_CTRL (UINT32P (INFRACFG_AO_BASE+0x368)) #define C2K_STATUS (UINT32P (INFRACFG_AO_BASE+0x364)) #define POWERON_CONFIG_EN (UINT32P (SLEEP_BASE+0x000)) #define C2K_PWR_CON (UINT32P (SLEEP_BASE+0x328)) #define PWR_STATUS (UINT32P (SLEEP_BASE+0x180)) #define PWR_STATUS_2ND (UINT32P (SLEEP_BASE+0x184)) #define INFRA_MISC2 (UINT32P (INFRACFG_AO_BASE+0xF0C)) #define AP_PLL_CON0 (UINT32P (APMIXED_BASE+0x0)) #define PWR_RST_B 0 #define PWR_ISO 1 #define PWR_ON 2 #define PWR_ON_2ND 3 #define PWR_CLK_DIS 4 #define C2K 28 #define C2K_MAGIC_NUM 0xC275 #define INFRACFG_AO_BASE (0x10001000) #define UINT16P volatile unsigned short * #define UINT32P (volatile unsigned int *) #define C2KSYS_BASE (0x38000000) #define C2K_SBC_KEY0 (UINT32P(INFRACFG_AO_BASE+0x8B0)) #define C2K_SBC_KEY1 (UINT32P(INFRACFG_AO_BASE+0x8B4)) #define C2K_SBC_KEY2 (UINT32P(INFRACFG_AO_BASE+0x8B8)) #define C2K_SBC_KEY3 (UINT32P(INFRACFG_AO_BASE+0x8BC)) #define C2K_SBC_KEY4 (UINT32P(INFRACFG_AO_BASE+0x8C0)) #define C2K_SBC_KEY5 (UINT32P(INFRACFG_AO_BASE+0x8C4)) #define C2K_SBC_KEY6 (UINT32P(INFRACFG_AO_BASE+0x8C8)) #define C2K_SBC_KEY7 (UINT32P(INFRACFG_AO_BASE+0x8CC)) #define C2K_SBC_KEY_LOCK (UINT32P(INFRACFG_AO_BASE+0x8D0)) #define C2K_CONFIG (UINT32P(INFRACFG_AO_BASE+0x360)) #define C2K_C2K_PLL_CON3 (UINT32P(C2KSYS_BASE+0x02013008)) #define C2K_C2K_PLL_CON2 (UINT32P(C2KSYS_BASE+0x02013004)) #define C2K_C2K_PLLTD_CON0 (UINT32P(C2KSYS_BASE+0x02013074)) #define C2K_CLK_CTRL9 (UINT32P(C2KSYS_BASE+0x0200029C)) #define C2K_CLK_CTRL4 (UINT32P(C2KSYS_BASE+0x02000010)) #define C2K_CG_ARM_AMBA_CLKSEL (UINT32P(C2KSYS_BASE+0x02000234)) #define C2K_C2K_C2KPLL1_CON0 (UINT32P(C2KSYS_BASE+0x02013018)) #define C2K_C2K_CPPLL_CON0 (UINT32P(C2KSYS_BASE+0x02013040)) #define C2K_C2K_DSPPLL_CON0 (UINT32P(C2KSYS_BASE+0x02013050)) #define C2K 28 #define MDPLL1_CON0 (UINT32P (APMIXED_BASE+0x02C8)) // SIM GPIO setcion // -- SIM1 #define SIM1_SIO_GPIO_ID (41) #define SIM1_SRST_GPIO_ID (40) #define SIM1_SCLK_GPIO_ID (39) #define SIM1_HOT_PLUG_GPIO_ID (46) // -- SIM2 #define SIM2_SIO_GPIO_ID (36) #define SIM2_SRST_GPIO_ID (37) #define SIM2_SCLK_GPIO_ID (38) #define SIM2_HOT_PLUG_GPIO_ID (45) // -- Connection extern BOOT_ARGUMENT *g_boot_arg; static unsigned int img_load_flag = 0; void pmic_init_sequence(void); void md_uart_config(int md_id, int boot_mode); void md1_pll_init(void); void md1_pmic_setting(void); static int meta_detection(void) { int boot_mode; #ifdef DEFAULT_META boot_mode = 1; return boot_mode; #endif boot_mode = 0; if (g_boot_arg->boot_mode != NORMAL_BOOT) boot_mode = 1; dprintf(ALWAYS, "Meta mode: %d, boot_mode: %d\n", boot_mode, g_boot_arg->boot_mode); return boot_mode; } static void md_gpio_get(GPIO_PIN pin, char *tag) { dprintf(ALWAYS, "GPIO(%X)(%s): mode=%d,dir=%d,in=%d,out=%d,pull_en=%d,pull_sel=%d,smt=%d\n", pin, tag, mt_get_gpio_mode(pin), mt_get_gpio_dir(pin), mt_get_gpio_in(pin), mt_get_gpio_out(pin), mt_get_gpio_pull_enable(pin), mt_get_gpio_pull_select(pin), mt_get_gpio_smt(pin)); } static void md_gpio_set(GPIO_PIN pin, GPIO_MODE mode, GPIO_DIR dir, GPIO_OUT out, GPIO_PULL_EN pull_en, GPIO_PULL pull, GPIO_SMT smt) { mt_set_gpio_mode(pin, mode); if (dir != GPIO_DIR_UNSUPPORTED) mt_set_gpio_dir(pin, dir); if (dir == GPIO_DIR_OUT) { mt_set_gpio_out(pin, out); } if (dir == GPIO_DIR_IN) { mt_set_gpio_smt(pin, smt); } if (pull_en != GPIO_PULL_EN_UNSUPPORTED) { mt_set_gpio_pull_enable(pin, pull_en); mt_set_gpio_pull_select(pin, pull); } md_gpio_get(pin, "-"); } static void md_gpio_config(unsigned int boot_mode_case) { // init sim1 mt_set_gpio_dir(SIM1_SCLK_GPIO_ID, GPIO_DIR_OUT); mt_set_gpio_dir(SIM1_SRST_GPIO_ID, GPIO_DIR_OUT); mt_set_gpio_pull_enable(SIM1_SIO_GPIO_ID, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(SIM1_SIO_GPIO_ID, GPIO_PULL_UP); mt_set_gpio_dir(SIM1_SIO_GPIO_ID, GPIO_DIR_IN); mt_set_gpio_pull_enable(SIM1_HOT_PLUG_GPIO_ID, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(SIM1_HOT_PLUG_GPIO_ID, GPIO_PULL_UP); mt_set_gpio_dir(SIM1_HOT_PLUG_GPIO_ID, GPIO_DIR_IN); // init sim2 mt_set_gpio_dir(SIM2_SCLK_GPIO_ID, GPIO_DIR_OUT); mt_set_gpio_dir(SIM2_SRST_GPIO_ID, GPIO_DIR_OUT); mt_set_gpio_pull_enable(SIM2_SIO_GPIO_ID, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(SIM2_SIO_GPIO_ID, GPIO_PULL_UP); mt_set_gpio_dir(SIM2_SIO_GPIO_ID, GPIO_DIR_IN); mt_set_gpio_pull_enable(SIM2_HOT_PLUG_GPIO_ID, GPIO_PULL_ENABLE); mt_set_gpio_pull_select(SIM2_HOT_PLUG_GPIO_ID, GPIO_PULL_UP); mt_set_gpio_dir(SIM2_HOT_PLUG_GPIO_ID, GPIO_DIR_IN); // md_gpio_set(GPIO96, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO39, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO40, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO41, GPIO_MODE_05, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO38, GPIO_MODE_06, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO37, GPIO_MODE_06, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO36, GPIO_MODE_06, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO46, GPIO_MODE_01, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO45, GPIO_MODE_01, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO13, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO14, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO15, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO16, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO27, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO28, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO34, GPIO_MODE_06, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO30, GPIO_MODE_06, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO33, GPIO_MODE_06, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO32, GPIO_MODE_06, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO35, GPIO_MODE_06, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO31, GPIO_MODE_06, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO110, GPIO_MODE_05, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO108, GPIO_MODE_05, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO111, GPIO_MODE_05, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO107, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO8, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO18, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ONE, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO17, GPIO_MODE_05, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO25, GPIO_MODE_05, GPIO_DIR_OUT, GPIO_OUT_ONE, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO26, GPIO_MODE_05, GPIO_DIR_IN, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_UP, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO116, GPIO_MODE_00, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_ENABLE, GPIO_PULL_DOWN, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO82, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO81, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO80, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO79, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO62, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO61, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO60, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO59, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO58, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO57, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO56, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO55, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO54, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO53, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO52, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO51, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO90, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO89, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO88, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO87, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO86, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO85, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO84, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO83, GPIO_MODE_02, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO159, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO160, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO69, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO68, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO67, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO66, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO65, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO64, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO63, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO78, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO77, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO76, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); md_gpio_set(GPIO75, GPIO_MODE_01, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO51, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO52, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO53, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO54, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO107, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO108, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO161, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO109, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO110, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO111, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO42, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO43, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO157, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO44, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO158, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO17, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO18, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO19, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO20, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO21, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO22, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO23, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO24, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); // md_gpio_set(GPIO25, GPIO_MODE_07, GPIO_DIR_OUT, GPIO_OUT_ZERO, GPIO_PULL_EN_UNSUPPORTED, GPIO_PULL_UNSUPPORTED, GPIO_SMT_UNSUPPORTED); switch (boot_mode_case) { case 0: //SIM1=> MD1 SIM1IF mt_set_gpio_mode(SIM1_SCLK_GPIO_ID, 1); mt_set_gpio_mode(SIM1_SRST_GPIO_ID, 1); mt_set_gpio_mode(SIM1_SIO_GPIO_ID, 1); mt_set_gpio_mode(SIM1_HOT_PLUG_GPIO_ID, 1); //SIM2=> MD1 SIM2IF mt_set_gpio_mode(SIM2_SCLK_GPIO_ID, 1); mt_set_gpio_mode(SIM2_SRST_GPIO_ID, 1); mt_set_gpio_mode(SIM2_SIO_GPIO_ID, 1); mt_set_gpio_mode(SIM2_HOT_PLUG_GPIO_ID, 1); break; case 1: //SIM1=> MD2 UIM0IF mt_set_gpio_mode(SIM1_SCLK_GPIO_ID, 5); mt_set_gpio_mode(SIM1_SRST_GPIO_ID, 5); mt_set_gpio_mode(SIM1_SIO_GPIO_ID, 5); mt_set_gpio_mode(SIM1_HOT_PLUG_GPIO_ID, 1); //SIM2=> MD2 UIM1IF mt_set_gpio_mode(SIM2_SCLK_GPIO_ID, 6); mt_set_gpio_mode(SIM2_SRST_GPIO_ID, 6); mt_set_gpio_mode(SIM2_SIO_GPIO_ID, 6); mt_set_gpio_mode(SIM2_HOT_PLUG_GPIO_ID, 1); break; case 2: //SIM1=> MD1 SIM1IF mt_set_gpio_mode(SIM1_SCLK_GPIO_ID, 1); mt_set_gpio_mode(SIM1_SRST_GPIO_ID, 1); mt_set_gpio_mode(SIM1_SIO_GPIO_ID, 1); mt_set_gpio_mode(SIM1_HOT_PLUG_GPIO_ID, 1); //SIM2=> MD2 UIM0IF mt_set_gpio_mode(SIM2_SCLK_GPIO_ID, 5); mt_set_gpio_mode(SIM2_SRST_GPIO_ID, 5); mt_set_gpio_mode(SIM2_SIO_GPIO_ID, 5); mt_set_gpio_mode(SIM2_HOT_PLUG_GPIO_ID, 1); break; default: break; } md_gpio_get(SIM1_SCLK_GPIO_ID, "sclk"); md_gpio_get(SIM1_SRST_GPIO_ID, "srst"); md_gpio_get(SIM1_SIO_GPIO_ID, "sio"); md_gpio_get(SIM1_HOT_PLUG_GPIO_ID, "hp"); md_gpio_get(SIM2_SCLK_GPIO_ID, "sclk2"); md_gpio_get(SIM2_SRST_GPIO_ID, "srst2"); md_gpio_get(SIM2_SIO_GPIO_ID, "sio2"); md_gpio_get(SIM2_HOT_PLUG_GPIO_ID, "hp2"); } static void md_power_up_mtcmos(unsigned int boot_md_id) { #ifdef ENABLE_MD_RESET_SPM switch (boot_md_id) { case MD_SYS1: spm_mtcmos_ctrl_mdsys1(STA_POWER_ON); break; case MD_SYS3 spm_mtcmos_ctrl_mdsys2(STA_POWER_ON); break; default: break; } #endif } static void c2k_boot(int boot_mode); void md_uart_config(int type_id, int boot_mode) { switch (type_id) { case -1: // for AP only dprintf(ALWAYS, "md_uart_config:%d, UART1->[AP], UART2->AP, UART3->XXX, UART4->C2K\n", type_id); mt_set_gpio_mode(105, 1); //URXD0 / MD_URXD0 mt_set_gpio_mode(106, 1); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(19, 2); //URXD1 mt_set_gpio_mode(20, 2); //UTXD1 //mt_set_gpio_mode(13, 4); //C2K_URXD0 //mt_set_gpio_mode(14, 4); //C2K_UTXD0 //mt_set_gpio_mode(17, 5); //C2K_URXD0 //mt_set_gpio_mode(18, 5); //C2K_UTXD0 break; case 0: // for AP & MD1 case 1: // for AP & MD2201 if (boot_mode==0) { // Normal boot dprintf(ALWAYS, "[Normal]md_uart_config:%d, UART1->[MD1], UART2->AP, UART3->XXX, UART4->C2K\n", type_id); #ifdef AP_MD_SAME_UART mt_set_gpio_mode(105, 1);//3); //URXD0 / MD_URXD0 mt_set_gpio_mode(106, 1);//3); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(13, 0); //URXD0 / MD_URXD0 mt_set_gpio_mode(14, 0); //UTXD0 / MD_UTXD0 #else mt_set_gpio_mode(105, 1); //URXD0 / MD_URXD0 mt_set_gpio_mode(106, 1); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(13, 4); //URXD0 / MD_URXD0 mt_set_gpio_mode(14, 4); //UTXD0 / MD_UTXD0 #endif //mt_set_gpio_mode(105, 1); //URXD0 / MD_URXD0 //mt_set_gpio_mode(106, 1); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(19, 2); //URXD1 mt_set_gpio_mode(20, 2); //UTXD1 //mt_set_gpio_mode(13, 4); //C2K_URXD0 //mt_set_gpio_mode(14, 4); //C2K_UTXD0 //mt_set_gpio_mode(17, 5); //C2K_URXD0 //mt_set_gpio_mode(18, 5); //C2K_UTXD0 } else { dprintf(ALWAYS, "[Meta]md_uart_config:%d, UART1->[MD1], UART2->AP, UART3->XXX, UART4->C2K\n", type_id); mt_set_gpio_mode(105, 3); //URXD0 / MD_URXD0 mt_set_gpio_mode(106, 3); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(13, 0); //URXD0 / MD_URXD0 mt_set_gpio_mode(14, 0); //UTXD0 / MD_UTXD0 //mt_set_gpio_mode(105, 1); //URXD0 / MD_URXD0 //mt_set_gpio_mode(106, 1); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(19, 2); //URXD1 mt_set_gpio_mode(20, 2); //UTXD1 //mt_set_gpio_mode(13, 4); //C2K_URXD0 //mt_set_gpio_mode(14, 4); //C2K_UTXD0 //mt_set_gpio_mode(17, 5); //C2K_URXD0 //mt_set_gpio_mode(18, 5); //C2K_UTXD0 } break; case 2: // for both MD1 and MD2 dprintf(ALWAYS, "md_uart_config:%d, UART1->[MD1], UART2->AP, UART3->XXX, UART4->C2K\n", type_id); mt_set_gpio_mode(105, 3); //URXD0 / MD_URXD0 mt_set_gpio_mode(106, 3); //UTXD0 / MD_UTXD0 mt_set_gpio_mode(13, 0); //MD_URXD0 ==> MD1 mt_set_gpio_mode(14, 0); //MD_UTXD0 ==> MD1 mt_set_gpio_mode(19, 2); //URXD1 mt_set_gpio_mode(20, 2); //UTXD1 //mt_set_gpio_mode(13, 4); //C2K_URXD0 //mt_set_gpio_mode(14, 4); //C2K_UTXD0 //mt_set_gpio_mode(17, 5); //C2K_URXD0 //mt_set_gpio_mode(18, 5); //C2K_UTXD0 default: break; } } static void let_md_go(int md_id) { unsigned int reg_val; switch (md_id) { case MD_SYS1: // Trigger MD run DRV_WriteReg32(0x20000024, 1); break; case MD_SYS3: DRV_WriteReg32(AP_C2K_CONFIG, DRV_Reg32(AP_C2K_CONFIG)|(1<<3)); /* AP release C2K ARM core to let C2K go */ reg_val = DRV_Reg32(C2K_CONFIG); reg_val &= ~(0x1 << 1); DRV_WriteReg32(C2K_CONFIG, reg_val); break; default: break; } } int md_common_setting(int boot_md_comb) { unsigned int reg_value; // step 3: MD srcclkena setting if ((boot_md_comb&((1<> 1) & 0x1) == 0); dprintf(ALWAYS, "done\n"); *C2K_SPM_CTRL &= ~(0x1 << 1); *INFRA_TOPAXI_PROTECTEN_1 &= 0xFE3FFFFF; /* Waiting for C2KSYS Bus ready for operation */ dprintf(ALWAYS, "Waiting for C2KSYS Bus ready for operation\n"); do { reg_value = *C2K_CGBR1; } while (reg_value != 0xFE8); dprintf(ALWAYS, "Done\n"); /* C2K PLL init */ *(UINT16P)C2K_C2K_PLL_CON3 = 0x8805; // CPPLL/DSPPLL ISO_EN -> hw mode *(UINT16P)C2K_C2K_PLL_CON3 = 0x0005; // CPPLL/DSPPLL PWR_ON -> hw mode *(UINT16P)C2K_C2K_PLL_CON3 = 0x0001; // MDPLL1 EN -> hw mode *(UINT16P)C2K_C2K_PLL_CON2 = 0x0000; // CPPLL/DSPPLL/C2KPLL_SUBPLL1/2 EN -> hw mode *(UINT16P)C2K_C2K_PLLTD_CON0 = 0x0010;// bp_pll_dly -> 0 *(UINT16P)C2K_C2K_CPPLL_CON0 |= 1 << 15; *(UINT16P)C2K_C2K_DSPPLL_CON0 |= 1 << 15; *(UINT16P)C2K_C2K_C2KPLL1_CON0 |= 1 << 15; /* Wait 20us */ udelay(20); *(UINT16P)C2K_CG_ARM_AMBA_CLKSEL = 0xC124; *(UINT16P)C2K_CLK_CTRL4 = 0x8e43; *(UINT16P)C2K_CLK_CTRL9 = 0xA207; }