static int check_boot_flag(void) { printf("bootmode = %d\n" ,owl_get_boot_mode()); if ( owl_get_boot_mode() != BOOT_MODE_PRODUCE ) { if(owl_get_boot_dev() == OWL_BOOTDEV_NAND) { setenv("bootcmd", "run nandboot"); setenv("devif", "nand"); printf("nand boot\n"); } else if(owl_get_boot_dev() == OWL_BOOTDEV_SD2){ setenv("bootcmd", "run emmcboot"); setenv("devif", "mmc"); printf("emmc boot\n"); } else { setenv("bootcmd", "run mmcboot"); setenv("devif", "mmc"); printf("sd boot\n"); } } else { setenv("bootcmd", "run ramboot"); setenv("bootdelay", "0"); printf("produce boot\n"); } return 0; }
__weak int power_init_board(void) { if(owl_get_boot_mode() != BOOT_MODE_PRODUCE){ printf("begin to check power!\n"); check_power(); } return 0; }
void owl_boot_fdt_setup(void *blob) { char buf[64], sn[32]; char *s; int index; int boot_dev = owl_get_boot_dev(); bool is_android_os = true; s = getenv("os_type"); if(s!=NULL && strcmp(s, "android")){ is_android_os = false; } printf("owl_boot_fdt_setup %s\n", s); if((gd->flags & GD_FLG_RECOVERY) || owl_get_boot_mode() == (int)BOOT_MODE_PRODUCE){ is_android_os = true; strcpy(buf, "earlyprintk"); boot_append_remove_args(buf, ENUM_TAIL); strcpy(buf, "clk_ignore_unused"); boot_append_remove_args(buf, ENUM_TAIL); strcpy(buf, "selinux=0"); boot_append_remove_args(buf, ENUM_TAIL); } if(owl_get_boot_mode() == (int)BOOT_MODE_PRODUCE){ is_android_os = false; strcpy(buf, "powersave"); boot_append_remove_args(buf, ENUM_TAIL); strcpy(buf, "androidboot.mode=upgrade"); boot_append_remove_args(buf, ENUM_TAIL); }else{ if(is_android_os) { boot_append_remove_args("androidboot.dvfslevel=0x705x", ENUM_TAIL); if(gd->flags & GD_FLG_CHARGER) { strcpy(buf, "androidboot.mode=charger"); printf("=======androidboot.mode:charger=========\n"); boot_append_remove_args(buf, ENUM_TAIL); } } } index = owl_afi_get_serial_number(); sprintf(buf, "console=ttyS%d", index); boot_append_remove_args(buf, ENUM_HEADER); /* strcpy(buf, "board_opt=0,0x1"); boot_append_remove_args(buf, NULL); */ if(is_android_os){ if(boot_dev == OWL_BOOTDEV_NAND){ strcpy(buf, "androidboot.bootdev=nand"); } else { strcpy(buf, "androidboot.bootdev=sd"); } boot_append_remove_args(buf, ENUM_TAIL); } switch(boot_dev){ case OWL_BOOTDEV_NAND: sprintf(buf, "boot_dev=%s", "nand"); break; case OWL_BOOTDEV_SD0: sprintf(buf, "boot_dev=%s", "sd0"); break; case OWL_BOOTDEV_SD1: sprintf(buf, "boot_dev=%s", "sd1"); break; case OWL_BOOTDEV_SD2: sprintf(buf, "boot_dev=%s", "sd2"); break; case OWL_BOOTDEV_SD02NAND: sprintf(buf, "boot_dev=%s", "sd02nand"); break; case OWL_BOOTDEV_SD02SD2: sprintf(buf, "boot_dev=%s", "sd02sd2"); break; case OWL_BOOTDEV_NOR: sprintf(buf, "boot_dev=%s", "nor"); break; } boot_append_remove_args(buf, ENUM_TAIL); if(owl_get_boot_mode() != (int)BOOT_MODE_PRODUCE){ memset(buf, 0, sizeof(buf)); memset(sn, 0, sizeof(sn)); strcpy(buf, "androidboot.serialno="); if(read_mi_item("SN", sn, sizeof(sn) - 1) < 0){ printf("read SN failed\n"); }else{ printf("read SN %s\n", sn); strcat(buf,sn); boot_append_remove_args(buf, ENUM_TAIL); } } printf("cmdline: %s\n", getenv("bootargs")); boot_fdt_setprop(blob); boot_append_bootargs_add(blob); }