boot_mode.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2015. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #ifndef _MT_BOOT_MODE_H_
  32. #define _MT_BOOT_MODE_H_
  33. #include <platform/mt_typedefs.h>
  34. #include <platform/partition.h>
  35. #include <mblock.h>
  36. /******************************************************************************
  37. * FORBIDEN MODE
  38. ******************************************************************************/
  39. typedef enum {
  40. F_FACTORY_MODE = 0x0001,
  41. } FORBIDDEN_MODE;
  42. /******************************************************************************
  43. * LIMITATION
  44. ******************************************************************************/
  45. #define SEC_LIMIT_MAGIC 0x4C4C4C4C // LLLL
  46. typedef struct {
  47. unsigned int magic_num;
  48. FORBIDDEN_MODE forbid_mode;
  49. } SEC_LIMIT;
  50. /* boot type definitions */
  51. typedef enum {
  52. NORMAL_BOOT = 0,
  53. META_BOOT = 1,
  54. RECOVERY_BOOT = 2,
  55. SW_REBOOT = 3,
  56. FACTORY_BOOT = 4,
  57. ADVMETA_BOOT = 5,
  58. ATE_FACTORY_BOOT = 6,
  59. ALARM_BOOT = 7,
  60. #if defined (MTK_KERNEL_POWER_OFF_CHARGING)
  61. KERNEL_POWER_OFF_CHARGING_BOOT = 8,
  62. LOW_POWER_OFF_CHARGING_BOOT = 9,
  63. #endif
  64. FASTBOOT = 99,
  65. DOWNLOAD_BOOT = 100,
  66. UNKNOWN_BOOT
  67. } BOOTMODE;
  68. typedef enum {
  69. BR_POWER_KEY = 0,
  70. BR_USB,
  71. BR_RTC,
  72. BR_WDT,
  73. BR_WDT_BY_PASS_PWK,
  74. BR_TOOL_BY_PASS_PWK,
  75. BR_2SEC_REBOOT,
  76. BR_UNKNOWN,
  77. BR_KERNEL_PANIC,
  78. BR_WDT_SW,
  79. BR_WDT_HW,
  80. BR_POWER_EXC = 30,
  81. BR_LONG_POWKEY,
  82. BR_POWER_LOSS
  83. } boot_reason_t;
  84. /*META COM port type*/
  85. typedef enum {
  86. META_UNKNOWN_COM = 0,
  87. META_UART_COM,
  88. META_USB_COM
  89. } META_COM_TYPE;
  90. typedef struct {
  91. u32 addr; /* Download Agent address */
  92. u32 arg1; /* Download Agent arg 1*/
  93. u32 arg2; /* Download Agent arg 2*/
  94. u32 len; /* length of da */
  95. u32 sig_len; /* signature length of da */
  96. } da_info_t;
  97. typedef struct {
  98. u32 pll_setting_num;
  99. u32 freq_setting_num;
  100. u32 low_freq_pll_setting_addr;
  101. u32 low_freq_cha_setting_addr;
  102. u32 low_freq_chb_setting_addr;
  103. u32 high_freq_pll_setting_addr;
  104. u32 high_freq_cha_setting_addr;
  105. u32 high_freq_chb_setting_addr;
  106. } vcore_dvfs_info_t;
  107. typedef struct {
  108. u32 maggic_number;
  109. BOOTMODE boot_mode;
  110. u32 e_flag;
  111. u32 log_port;
  112. u32 log_baudrate;
  113. u8 log_enable;
  114. u32 log_dynamic_switch;
  115. u8 part_num;
  116. u8 reserved[2];
  117. u32 dram_rank_num;
  118. u32 dram_rank_size[4];
  119. mblock_info_t mblock_info; /* number of mblock should be max rank number + 1 */
  120. dram_info_t orig_dram_info;
  121. mem_desc_t lca_reserved_mem;
  122. mem_desc_t tee_reserved_mem;
  123. u32 boot_reason;
  124. META_COM_TYPE meta_com_type;
  125. u32 meta_com_id;
  126. u32 boot_time;
  127. da_info_t da_info;
  128. SEC_LIMIT sec_limit;
  129. part_hdr_t *part_info;
  130. u8 md_type[4];
  131. u32 ddr_reserve_enable;
  132. u32 ddr_reserve_success;
  133. u32 ddr_reserve_ready;
  134. u32 dram_buf_size;
  135. u32 meta_uart_port;
  136. u32 smc_boot_opt;
  137. u32 lk_boot_opt;
  138. u32 kernel_boot_opt;
  139. u32 non_secure_sram_addr;
  140. u32 non_secure_sram_size;
  141. char pl_version[8];
  142. u32 ram_console_sram_addr;
  143. u32 ram_console_sram_size;
  144. u32 ram_console_def_type;
  145. u32 ram_console_memory_info_offset;
  146. } BOOT_ARGUMENT;
  147. typedef enum {
  148. BOOT_OPT_64S3 = 0,
  149. BOOT_OPT_64S1,
  150. BOOT_OPT_32S3,
  151. BOOT_OPT_32S1,
  152. BOOT_OPT_64N2,
  153. BOOT_OPT_64N1,
  154. BOOT_OPT_32N2,
  155. BOOT_OPT_32N1,
  156. BOOT_OPT_UNKNOWN
  157. } boot_option_t;
  158. typedef enum {
  159. CHIP_SW_VER_01 = 0x0000,
  160. CHIP_SW_VER_02 = 0x0001
  161. } CHIP_SW_VER;
  162. typedef struct { /* RAM configuration */
  163. #ifndef MTK_LM_MODE
  164. unsigned long start;
  165. unsigned long size;
  166. #else
  167. unsigned long long start;
  168. unsigned long long size;
  169. #endif
  170. } BI_DRAM;
  171. /* ====== Preloader to LK Tags START ===== */
  172. /* boot reason */
  173. #define BOOT_TAG_BOOT_REASON 0x88610001
  174. struct boot_tag_boot_reason {
  175. u32 boot_reason;
  176. };
  177. /* boot mode */
  178. #define BOOT_TAG_BOOT_MODE 0x88610002
  179. struct boot_tag_boot_mode {
  180. u32 boot_mode;
  181. };
  182. /* META com port information */
  183. #define BOOT_TAG_META_COM 0x88610003
  184. struct boot_tag_meta_com {
  185. u32 meta_com_type;
  186. u32 meta_com_id;
  187. u32 meta_uart_port;
  188. };
  189. /* log com port information */
  190. #define BOOT_TAG_LOG_COM 0x88610004
  191. struct boot_tag_log_com {
  192. u32 log_port;
  193. u32 log_baudrate;
  194. u32 log_enable;
  195. };
  196. /* memory information */
  197. #define BOOT_TAG_MEM 0x88610005
  198. struct boot_tag_mem {
  199. u32 dram_rank_num;
  200. u32 dram_rank_size[4];
  201. mblock_info_t mblock_info;
  202. dram_info_t orig_dram_info;
  203. mem_desc_t lca_reserved_mem;
  204. mem_desc_t tee_reserved_mem;
  205. };
  206. /* MD information */
  207. #define BOOT_TAG_MD_INFO 0x88610006
  208. struct boot_tag_md_info {
  209. u32 md_type[4];
  210. };
  211. /* boot time */
  212. #define BOOT_TAG_BOOT_TIME 0x88610007
  213. struct boot_tag_boot_time {
  214. u32 boot_time;
  215. };
  216. /* DA information */
  217. #define BOOT_TAG_DA_INFO 0x88610008
  218. struct boot_tag_da_info {
  219. da_info_t da_info;
  220. };
  221. /* security limitation information */
  222. #define BOOT_TAG_SEC_INFO 0x88610009
  223. struct boot_tag_sec_info {
  224. SEC_LIMIT sec_limit;
  225. };
  226. /* (for dummy AP) partition number */
  227. #define BOOT_TAG_PART_NUM 0x8861000A
  228. struct boot_tag_part_num {
  229. u32 part_num;
  230. };
  231. /* (for dummy AP) partition info */
  232. #define BOOT_TAG_PART_INFO 0x8861000B
  233. struct boot_tag_part_info {
  234. part_hdr_t *part_info;
  235. };
  236. /* eflag */
  237. #define BOOT_TAG_EFLAG 0x8861000C
  238. struct boot_tag_eflag {
  239. u32 e_flag;
  240. };
  241. /* DDR reserve */
  242. #define BOOT_TAG_DDR_RESERVE 0x8861000D
  243. struct boot_tag_ddr_reserve {
  244. u32 ddr_reserve_enable;
  245. u32 ddr_reserve_success;
  246. u32 ddr_reserve_ready;
  247. };
  248. /* DRAM BUFF */
  249. #define BOOT_TAG_DRAM_BUF 0x8861000E
  250. struct boot_tag_dram_buf {
  251. u32 dram_buf_size;
  252. };
  253. /* VCORE DVFS */
  254. #define BOOT_TAG_VCORE_DVFS 0x8861000F
  255. struct boot_tag_vcore_dvfs {
  256. vcore_dvfs_info_t vcore_dvfs_info;
  257. };
  258. #define BOOT_TAG_BOOT_OPT 0x88610011
  259. struct boot_tag_boot_opt {
  260. u32 smc_boot_opt;
  261. u32 lk_boot_opt;
  262. u32 kernel_boot_opt;
  263. };
  264. #define BOOT_TAG_SRAM_INFO 0x88610012
  265. struct boot_tag_sram_info {
  266. u32 non_secure_sram_addr;
  267. u32 non_secure_sram_size;
  268. };
  269. #define BOOT_TAG_PL_VERSION 0x88610014
  270. struct boot_tag_pl_version {
  271. char pl_version[8];
  272. };
  273. #define BOOT_TAG_RAM_CONSOLE_INFO 0x8861001C
  274. struct boot_tag_ram_console_info {
  275. u32 sram_addr;
  276. u32 sram_size;
  277. u32 def_type;
  278. u32 memory_info_offset;
  279. };
  280. struct boot_tag_header {
  281. u32 size;
  282. u32 tag;
  283. };
  284. struct boot_tag {
  285. struct boot_tag_header hdr;
  286. union {
  287. struct boot_tag_boot_reason boot_reason;
  288. struct boot_tag_boot_mode boot_mode;
  289. struct boot_tag_meta_com meta_com;
  290. struct boot_tag_log_com log_com;
  291. struct boot_tag_mem mem;
  292. struct boot_tag_md_info md_info;
  293. struct boot_tag_boot_time boot_time;
  294. struct boot_tag_da_info da_info;
  295. struct boot_tag_sec_info sec_info;
  296. struct boot_tag_part_num part_num;
  297. struct boot_tag_part_info part_info;
  298. struct boot_tag_eflag eflag;
  299. struct boot_tag_ddr_reserve ddr_reserve;
  300. struct boot_tag_dram_buf dram_buf;
  301. struct boot_tag_vcore_dvfs vcore_dvfs;
  302. struct boot_tag_boot_opt boot_opt;
  303. struct boot_tag_sram_info sram_info;
  304. struct boot_tag_pl_version pl_version;
  305. struct boot_tag_ram_console_info ram_console_info;
  306. } u;
  307. };
  308. #define boot_tag_next(t) ((struct boot_tag *)((u32 *)(t) + (t)->hdr.size))
  309. #define boot_tag_size(type) ((sizeof(struct boot_tag_header) + sizeof(struct type)) >> 2)
  310. /* ====== Preloader to LK Tags END ===== */
  311. #define BOOT_ARGUMENT_MAGIC 0x504c504c
  312. extern unsigned int BOOT_ARGUMENT_LOCATION;
  313. extern void boot_mode_select(void);
  314. extern BOOTMODE g_boot_mode;
  315. extern CHIP_SW_VER mt_get_chip_sw_ver(void);
  316. unsigned int mt_get_chip_hw_code(void);
  317. extern int g_is_64bit_kernel;
  318. extern void platform_k64_check(void);
  319. extern BOOT_ARGUMENT *g_boot_arg;
  320. /*FIXME: NAND/eMMC boot. Needo to specifiy by MTK build system. TEMP define here*/
  321. //#define CFG_NAND_BOOT
  322. //#define CFG_MMC_BOOT
  323. #define mt_get_chip_hw_ver mt_get_chip_hw_code
  324. #endif