tizen: add recovery boot mode
[profile/mobile/platform/kernel/u-boot-tm1.git] / property / normal_mode.c
index 2bd31af..0e4cd49 100644 (file)
@@ -33,6 +33,7 @@ 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];
 
 extern int charger_connected(void);
@@ -172,15 +173,21 @@ int fdt_fixup_for_tizen(void *fdt)
        /* Tizen default cmdline: mem */
        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, " elvss_offset=0x%x", load_elvss_offset_to_kernel());
        ptr += sprintf(ptr, " hbm_offset=%s", load_hbm_offset_to_kernel());
@@ -197,7 +204,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");
 
@@ -382,6 +395,11 @@ 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