3425|1

854

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

S5PV210 uboot fastboot_shutdown 干什么用的? [复制链接]

在S5PV210 fastboot 的代码里面有

/* Cleans up the board specific fastboot */
void fastboot_shutdown(void)
{
        DBG0("\n");
        /* when operation is done, usbd must be stopped */
        fboot_usb_stop();
}


int fboot_usb_stop (void)
{
        DBG0("\n");
        /* dont used in usb high speed, but used in common file cmd_usbd.c  */
        fboot_usb_core_soft_reset();
        fboot_usb_phy_off();
        return 0;
}
void fboot_usb_core_soft_reset(void)
{
        u32 tmp;
        DBG0("\n");

        writel(CORE_SOFT_RESET, S5P_OTG_GRSTCTL);

        do
        {
                tmp = readl(S5P_OTG_GRSTCTL);
        }while(!(tmp & AHB_MASTER_IDLE));

}

/* OTG PHY Power Off */
void fboot_usb_phy_off(void) {
#if defined(CONFIG_S5PC110)
        writel(readl(S5P_OTG_PHYPWR)|(0x18), S5P_OTG_PHYPWR);
        writel(readl(USB_PHY_CONTROL)&~(1<<0), USB_PHY_CONTROL);
#elif defined(CONFIG_S5PC100)
        writel(readl(S5P_OTG_PHYPWR)|(0x3<<3), S5P_OTG_PHYPWR);
        OTHERS_REG &= ~(1<<16);
#else
#error "* CFG_ERROR : you have to select C100 or C110 for Android Fastboot"
#endif
}


  1. int do_fastboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  2. {
  3.         int ret = 1;
  4.         int check_timeout = 0;
  5.         uint64_t timeout_endtime = 0;
  6.         uint64_t timeout_ticks = 0;
  7.         long timeout_seconds = -1;
  8.         int continue_from_disconnect = 0;

  9.         if (set_partition_table())
  10.                 return 1;


  11.         /* Time out */
  12.         if (2 == argc)
  13.         {
  14.                 long try_seconds;
  15.                 char *try_seconds_end;
  16.                 /* Check for timeout */
  17.                 try_seconds = simple_strtol(argv[1], &try_seconds_end, 10);
  18.                 if ((try_seconds_end != argv[1]) && (try_seconds >= 0))
  19.                 {
  20.                         check_timeout = 1;
  21.                         timeout_seconds = try_seconds;
  22.                         printf("Fastboot inactivity timeout %ld seconds\n", timeout_seconds);
  23.                 }
  24.         }

  25.         if (1 == check_timeout)
  26.         {
  27.                 timeout_ticks = (uint64_t) (timeout_seconds * get_tbclk());
  28.         }


  29.         do
  30.         {
  31.                 continue_from_disconnect = 0;

  32.                 /* Initialize the board specific support */
  33.                 if (0 == fastboot_init(&interface))
  34.                 {
  35.                         int poll_status;

  36.                         /* If we got this far, we are a success */
  37.                         ret = 0;

  38.                         timeout_endtime = get_ticks();
  39.                         timeout_endtime += timeout_ticks;

  40.                         LCD_turnon();

  41.                         while (1)
  42.                         {
  43.                                 uint64_t current_time = 0;
  44.                                 poll_status = fastboot_poll();

  45.                                 if (1 == check_timeout)
  46.                                         current_time = get_ticks();

  47.                                 /* Check if the user wanted to terminate with ^C */
  48.                                 if ((poll_status != FASTBOOT_OK) && (ctrlc()))
  49.                                 {
  50.                                         printf("Fastboot ended by user\n");
  51.                                         continue_from_disconnect = 0;
  52.                                         break;
  53.                                 }

  54.                                 if (FASTBOOT_ERROR == poll_status)
  55.                                 {
  56.                                         /* Error */
  57.                                         printf("Fastboot error \n");
  58.                                         break;
  59.                                 }
  60.                                 else if (FASTBOOT_DISCONNECT == poll_status)
  61.                                 {
  62.                                         /* break, cleanup and re-init */
  63.                                         printf("Fastboot disconnect detected\n");
  64.                                         continue_from_disconnect = 1;
  65.                                         break;
  66.                                 }
  67.                                 else if ((1 == check_timeout) &&
  68.                                            (FASTBOOT_INACTIVE == poll_status))
  69.                                 {
  70.                                         /* No activity */
  71.                                         if (current_time >= timeout_endtime)
  72.                                         {
  73.                                                 printf("Fastboot inactivity detected\n");
  74.                                                 break;
  75.                                         }
  76.                                 }
  77.                                 else
  78.                                 {
  79.                                         /* Something happened */
  80.                                         /* Actual works of parsing are done by rx_handler */
  81.                                         if (1 == check_timeout)
  82.                                         {
  83.                                                 /* Update the timeout endtime */
  84.                                                 timeout_endtime = current_time;
  85.                                                 timeout_endtime += timeout_ticks;
  86.                                         }
  87.                                 }
  88.                         } /* while (1) */
  89.                 }

  90. <b><font color="#ff8c00">                /* Reset the board specific support */
  91.                 fastboot_shutdown();</font></b>

  92.                 LCD_setfgcolor(0x000010);
  93.                 LCD_setleftcolor(0x000010);
  94.                 LCD_setprogress(100);

  95.                 /* restart the loop if a disconnect was detected */
  96.         } while (continue_from_disconnect);

  97.         return ret;
  98. }
复制代码
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

854

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
这个相当于复位一下,fastboot 完成以后,仅此而已!
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表