tizen: bootmode: enable uart console with home key
[profile/mobile/platform/kernel/u-boot-tm1.git] / property / normal_mode.c
index 2bd31af..1d02412 100644 (file)
@@ -22,10 +22,10 @@ DECLARE_GLOBAL_DATA_PTR;
 #define FACTORY_PART "prodnv"
 #define CMDLINE_BUF_SIZE       (1024)
 
-unsigned spl_data_buf[0x2000] __attribute__ ((align(4))) = {
+unsigned spl_data_buf[0x2000] __attribute__ ((aligned(4))) = {
 0};
 
-unsigned harsh_data_buf[8] __attribute__ ((align(4))) = {
+unsigned harsh_data_buf[8] __attribute__ ((aligned(4))) = {
 0};
 
 void *spl_data = spl_data_buf;
@@ -33,9 +33,41 @@ void *harsh_data = harsh_data_buf;
 unsigned char raw_header[8192];
 const int SP09_MAX_PHASE_BUFF_SIZE = sizeof(SP09_PHASE_CHECK_T);
 unsigned int g_charger_mode = 0;
+unsigned int g_recovery_mode = 0;
 char serial_number_to_transfer[SP09_MAX_SN_LEN];
 
+void sipc_addr_reset(void);
 extern int charger_connected(void);
+extern void power_down_devices(unsigned pd_cmd);
+#if (defined CONFIG_SC8810) || (defined CONFIG_SC8825) || (defined CONFIG_SC8830) || (defined CONFIG_SC9630)
+extern void MMU_DisableIDCM(void);
+#endif
+extern uint32_t load_lcd_id_to_kernel(void);
+extern int get_dram_cs_number(void);
+extern int get_dram_cs0_size(void);
+extern bool is_calibration_by_uart(void);
+extern unsigned int get_fgu_vol(void);
+extern unsigned int get_fgu_cur(void);
+extern void modem_entry(void);
+#ifdef CONFIG_EMMC_BOOT
+extern void Emmc_DisSdClk(void);
+#endif
+extern int fdt_fixup_adc_calibration_data(void *fdt);
+extern int fdt_fixup_boot_ram_log(void *fdt);
+extern int fdt_fixup_chosen_bootargs_board_private(void *fdt, const char *boot_mode);
+extern int do_fs_file_read(char *mpart, char *filenm, void *buf, int len);
+extern int do_raw_data_read(char *part, u32 size, u32 off, char *buf);
+#ifdef CONFIG_TIZEN
+extern uint8_t *load_mtp_offset_to_kernel(void);
+extern uint8_t load_elvss_offset_to_kernel(void);
+extern uint8_t *load_hbm_offset_to_kernel(void);
+extern void sprdchg_start_charge(void);
+extern int thor_save_env(char *str);
+extern void tizen_get_emmc_serial_number(unsigned int *uid);
+extern int load_nvitem(void);
+extern int load_modem_data(void);
+extern int load_dsp_data(void);
+#endif
 
 extern void *lcd_base;
 #ifdef CONFIG_OF_LIBFDT
@@ -107,7 +139,7 @@ unsigned char _chkNVEcc(uint8_t * buf, uint32_t size, uint32_t checksum)
        uint16_t crc;
 
        crc = calc_checksum(buf, size);
-       debugf("_chkNVEcc calcout 0x%lx, org 0x%llx\n", crc, checksum);
+       debugf("_chkNVEcc calcout 0x%x, org 0x%x\n", crc, checksum);
        return (crc == (uint16_t) checksum);
 }
 
@@ -167,23 +199,28 @@ int fdt_fixup_for_tizen(void *fdt)
        char *ptr = buf;
        char *s;
        unsigned int val;
-       struct mmc *mmc;
 
        /* Tizen default cmdline: mem */
-       ptr += sprintf(ptr, CMDLINE_DEFAULT_TIZEN);
+       ptr += sprintf(ptr, CMDLINE_DEFAULT_TIZEN " ");
 
+#ifdef CONFIG_RAMDISK_BOOT
+       if (g_recovery_mode)
+                       ptr += sprintf(ptr, " bootmode=recovery");
+
+       ptr += sprintf(ptr, " root=/dev/ram0 rw initrd=0x%x,%dM",
+                               RAMDISK_ADR, RAMDISK_SIZE_MB);
+#else
        val = tizen_get_part_num(PARTS_ROOTFS);
        ptr += sprintf(ptr, " root=/dev/mmcblk0p%d ro rootfstype=ext4 rootwait", val);
+       ptr += sprintf(ptr, " initrd=0x%x,0x%x", RAMDISK_ADR, 0);
+#endif
 
        ptr += sprintf(ptr, " lcd_id=ID%06x", load_lcd_id_to_kernel());
        ptr += sprintf(ptr, " lcd_base=%x", CONFIG_FB_RAM_BASE);
 
-       /* check ramdisk_size */
-       ptr += sprintf(ptr, " initrd=0x%x,0x%x", RAMDISK_ADR, 0);
-
-       ptr += sprintf(ptr, " mtp_offset=%s", load_mtp_offset_to_kernel());
+       ptr += sprintf(ptr, " mtp_offset=%s", (char *)load_mtp_offset_to_kernel());
        ptr += sprintf(ptr, " elvss_offset=0x%x", load_elvss_offset_to_kernel());
-       ptr += sprintf(ptr, " hbm_offset=%s", load_hbm_offset_to_kernel());
+       ptr += sprintf(ptr, " hbm_offset=%s", (char *)load_hbm_offset_to_kernel());
 
        ptr += sprintf(ptr, " wfixnv=0x%x,0x%x", WFIXNV_ADR, FIXNV_SIZE);
        ptr += sprintf(ptr, " wruntimenv=0x%x,0x%x", WRUNTIMENV_ADR, RUNTIMENV_SIZE);
@@ -197,7 +234,13 @@ int fdt_fixup_for_tizen(void *fdt)
                break;
        case PM_STATE_NORMAL:
        default:
-               ptr += sprintf(ptr, " bootmode=normal");
+               if (!g_recovery_mode) {
+#ifdef CONFIG_RAMDISK_BOOT
+                       ptr += sprintf(ptr, " bootmode=ramdisk");
+#else
+                       ptr += sprintf(ptr, " bootmode=normal");
+#endif
+               }
        }
        thor_save_env("normal");
 
@@ -230,7 +273,7 @@ int fdt_fixup_for_tizen(void *fdt)
                ptr += sprintf(ptr, " sec_debug.enable_user=0");
        }
 
-       if (tizen_get_jig_state() == 2) {
+       if (tizen_get_jig_state() == 2 || tizen_board_key_scan() == 0x81) {
                s = getenv("console");
                if (s && (*s == 'o'))
                        ptr += sprintf(ptr, " console=ttyS1,115200n8 loglevel=7");
@@ -242,7 +285,8 @@ int fdt_fixup_for_tizen(void *fdt)
 
        s = getenv("sec_log");
        if (s && (*s == 'o')) {
-               if (s = getenv("sec_log_addr")) {
+               s = getenv("sec_log_addr");
+               if (s) {
                        val = (u32) simple_strtoul(s, NULL, 16);
                        ptr += sprintf(ptr, " sec_log=0x%x@0x%x", SEC_LOG_LENGTH, val);
                }
@@ -292,15 +336,12 @@ int fdt_fixup_for_tizen(void *fdt)
 /*FDT_ADD_SIZE used to describe the size of the new bootargs items*/
 /*include lcd id, lcd base, etc*/
 #define FDT_ADD_SIZE (1024)
-static int start_linux()
+static int start_linux(void)
 {
        void (*theKernel) (int zero, int arch, u32 params);
-       u32 exec_at = (u32) - 1;
-       u32 parm_at = (u32) - 1;
        u32 machine_type;
        u8 *fdt_blob;
        u32 fdt_size;
-       boot_img_hdr *hdr = raw_header;
        int err;
 
        machine_type = machine_arch_type;       /* get machine type */
@@ -341,8 +382,6 @@ static int start_linux()
        while (1);
 #endif /* CONFIG_TIZEN */
 
-//#else
-//     fdt_initrd_norsvmem(fdt_blob, RAMDISK_ADR, RAMDISK_ADR + hdr->ramdisk_size, 1);
        fdt_fixup_lcdid(fdt_blob);
        fdt_fixup_lcdbase(fdt_blob);
        fdt_fixup_calibration_parameter(fdt_blob);
@@ -382,9 +421,13 @@ static int start_linux()
        return 0;
 }
 
+void set_recovery_mode(unsigned int recovery_mode)
+{
+       g_recovery_mode = recovery_mode;
+}
+
 void lcd_display_logo(int backlight_set, ulong bmp_img, size_t size)
 {
-#define mdelay(t)     ({unsigned long msec=(t); while (msec--) { udelay(1000);}})      //LiWei add
 #ifdef CONFIG_SPLASH_SCREEN
        extern int lcd_display_bitmap(ulong bmp_image, int x, int y);
        extern void lcd_display(void);
@@ -403,7 +446,7 @@ void lcd_display_logo(int backlight_set, ulong bmp_img, size_t size)
                mdelay(50);
                set_backlight(255);
        } else {
-               memset((unsigned int)lcd_base, 0, size);
+               memset(lcd_base, 0, size);
 #if defined(CONFIG_SC8810) || defined(CONFIG_SC8825) || defined(CONFIG_SC8830) || defined(CONFIG_SC9630)
                Dcache_CleanRegion((unsigned int)(lcd_base), size << 1);        //Size is to large.
 #endif
@@ -412,7 +455,7 @@ void lcd_display_logo(int backlight_set, ulong bmp_img, size_t size)
 #endif
 }
 
-int is_factorymode()
+int is_factorymode(void)
 {
        char factorymode_falg[8] = { 0 };
        int ret = 0;
@@ -629,25 +672,25 @@ void cmdline_set_cp_cmdline(char *buf, int str_len)
        nv_info = (char *)(((volatile u32 *)CALIBRATION_FLAG));
        sprintf(nv_info, buf);
        nv_info[str_len] = '\0';
-       debugf("nv_info:[%08x]%s \n", nv_info, nv_info);
+       debugf("nv_info:[%08lx]%s \n", (unsigned long)nv_info, nv_info);
 #endif
 #ifdef CONFIG_SUPPORT_W
        nv_info = (char *)((volatile u32 *)CALIBRATION_FLAG_WCDMA);
        sprintf(nv_info, buf);
        nv_info[str_len] = '\0';
-       debugf("nv_info:[%08x]%s \n", nv_info, nv_info);
+       debugf("nv_info:[%08lx]%s \n", (unsigned long)nv_info, nv_info);
 #endif
 #ifdef CONFIG_SC9630
 #ifdef  CONFIG_CP0_ARM0_BOOT
        nv_info = (char *)(((volatile u32 *)CALIBRATION_FLAG_CP0));
        sprintf(nv_info, buf);
        nv_info[str_len] = '\0';
-       debugf("nv_info:[%08x]%s \n", nv_info, nv_info);
+       debugf("nv_info:[%08lx]%s \n", (unsigned long)nv_info, nv_info);
 #endif
        nv_info = (char *)(((volatile u32 *)CALIBRATION_FLAG_CP1));
        sprintf(nv_info, buf);
        nv_info[str_len] = '\0';
-       debugf("nv_info:[%08x]%s \n", nv_info, nv_info);
+       debugf("nv_info:[%08lx]%s \n", (unsigned long)nv_info, nv_info);
 #endif
 }
 
@@ -655,7 +698,6 @@ int creat_cmdline(char *cmdline, boot_img_hdr * hdr)
 {
        char *buf;
        int offset = 0;
-       int ret = 0;
 
        if (cmdline == NULL) {
                return -1;
@@ -742,7 +784,7 @@ void vlx_entry()
        /*down the device if charger disconnect during calibration detect. */
        if (g_charger_mode && !charger_connected()) {
                g_charger_mode = 0;
-               power_down_devices();
+               power_down_devices(0);
                while (1) ;
        }
 #if !(defined CONFIG_SC8810 || defined CONFIG_TIGER || defined CONFIG_SC8830) || (defined CONFIG_SC9630)
@@ -865,7 +907,7 @@ void panic_reboot_mode(void)
 
 #if BOOT_NATIVE_LINUX_MODEM
 
-void sipc_addr_reset()
+void sipc_addr_reset(void)
 {
 #ifdef CONFIG_SC8825
        memset((void *)SIPC_APCP_START_ADDR, 0x0, SIPC_APCP_RESET_ADDR_SIZE);