boot_mode.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  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 <platform/plat_dbg_info.h>
  36. #include <platform/mt_emi_mpu.h>
  37. #include <mblock.h>
  38. #include <verified_boot_common.h>
  39. /******************************************************************************
  40. * FORBIDEN MODE
  41. ******************************************************************************/
  42. typedef enum {
  43. F_FACTORY_MODE = 0x0001,
  44. } FORBIDDEN_MODE;
  45. /******************************************************************************
  46. * LIMITATION
  47. ******************************************************************************/
  48. #define SEC_LIMIT_MAGIC 0x4C4C4C4C // LLLL
  49. typedef struct {
  50. unsigned int magic_num;
  51. FORBIDDEN_MODE forbid_mode;
  52. } SEC_LIMIT;
  53. /* boot type definitions */
  54. typedef enum {
  55. NORMAL_BOOT = 0,
  56. META_BOOT = 1,
  57. RECOVERY_BOOT = 2,
  58. SW_REBOOT = 3,
  59. FACTORY_BOOT = 4,
  60. ADVMETA_BOOT = 5,
  61. ATE_FACTORY_BOOT = 6,
  62. ALARM_BOOT = 7,
  63. #if defined (MTK_KERNEL_POWER_OFF_CHARGING)
  64. KERNEL_POWER_OFF_CHARGING_BOOT = 8,
  65. LOW_POWER_OFF_CHARGING_BOOT = 9,
  66. #endif
  67. FASTBOOT = 99,
  68. DOWNLOAD_BOOT = 100,
  69. UNKNOWN_BOOT
  70. } BOOTMODE;
  71. typedef enum {
  72. BR_POWER_KEY = 0,
  73. BR_USB,
  74. BR_RTC,
  75. BR_WDT,
  76. BR_WDT_BY_PASS_PWK,
  77. BR_TOOL_BY_PASS_PWK,
  78. BR_2SEC_REBOOT,
  79. BR_UNKNOWN,
  80. BR_KERNEL_PANIC,
  81. BR_WDT_SW,
  82. BR_WDT_HW,
  83. BR_POWER_EXC = 30,
  84. BR_LONG_POWKEY,
  85. BR_POWER_LOSS
  86. } boot_reason_t;
  87. /*META COM port type*/
  88. typedef enum {
  89. META_UNKNOWN_COM = 0,
  90. META_UART_COM,
  91. META_USB_COM
  92. } META_COM_TYPE;
  93. typedef struct {
  94. u32 addr; /* Download Agent address */
  95. u32 arg1; /* Download Agent arg 1*/
  96. u32 arg2; /* Download Agent arg 2*/
  97. u32 len; /* length of da */
  98. u32 sig_len; /* signature length of da */
  99. } da_info_t;
  100. typedef struct {
  101. u32 pll_setting_num;
  102. u32 freq_setting_num;
  103. u32 low_freq_pll_setting_addr;
  104. u32 low_freq_cha_setting_addr;
  105. u32 low_freq_chb_setting_addr;
  106. u32 high_freq_pll_setting_addr;
  107. u32 high_freq_cha_setting_addr;
  108. u32 high_freq_chb_setting_addr;
  109. } vcore_dvfs_info_t;
  110. typedef struct {
  111. u32 first_volt;
  112. u32 second_volt;
  113. u32 third_volt;
  114. u32 have_550;
  115. } ptp_info_t;
  116. typedef struct {
  117. u32 maggic_number;
  118. BOOTMODE boot_mode;
  119. u32 e_flag;
  120. u32 log_port;
  121. u32 log_baudrate;
  122. u8 log_enable;
  123. u32 log_dynamic_switch;
  124. u8 part_num;
  125. u8 reserved[2];
  126. u32 dram_rank_num;
  127. u64 dram_rank_size[4];
  128. mblock_info_t mblock_info;
  129. dram_info_t orig_dram_info;
  130. mem_desc_t lca_reserved_mem;
  131. mem_desc_t tee_reserved_mem;
  132. u32 boot_reason;
  133. META_COM_TYPE meta_com_type;
  134. u32 meta_com_id;
  135. u32 boot_time;
  136. da_info_t da_info;
  137. SEC_LIMIT sec_limit;
  138. part_hdr_t *part_info;
  139. u8 md_type[4];
  140. u32 ddr_reserve_enable;
  141. u32 ddr_reserve_success;
  142. u32 ddr_reserve_ready;
  143. ptp_info_t ptp_volt_info;
  144. u32 dram_buf_size;
  145. emi_info_t emi_info;
  146. u32 meta_uart_port;
  147. u32 smc_boot_opt;
  148. u32 lk_boot_opt;
  149. u32 kernel_boot_opt;
  150. u32 non_secure_sram_addr;
  151. u32 non_secure_sram_size;
  152. u32 plat_dbg_info_max;
  153. dbg_info_in_bootargs plat_dbg_info[INFO_TYPE_MAX];
  154. char pl_version[8];
  155. u32 pl_imgver_status;
  156. u8 socid[SOC_ID_LEN];
  157. u32 max_cpus;
  158. u32 charger_type;
  159. u32 boot_voltage;
  160. u32 shutdown_time;
  161. u32 ram_console_sram_addr;
  162. u32 ram_console_sram_size;
  163. u32 ram_console_def_type;
  164. u32 ram_console_memory_info_offset;
  165. u32 meta_log_disable;
  166. u32 fast_meta_gpio;
  167. #if WITH_GZ_MD_SHAREMEM
  168. u64 gz_md_shm_pa;
  169. u32 gz_md_shm_sz;
  170. #endif
  171. } BOOT_ARGUMENT;
  172. typedef enum {
  173. BOOT_OPT_64S3 = 0,
  174. BOOT_OPT_64S1,
  175. BOOT_OPT_32S3,
  176. BOOT_OPT_32S1,
  177. BOOT_OPT_64N2,
  178. BOOT_OPT_64N1,
  179. BOOT_OPT_32N2,
  180. BOOT_OPT_32N1,
  181. BOOT_OPT_UNKNOWN
  182. } boot_option_t;
  183. typedef enum {
  184. CHIP_SW_VER_01 = 0x0000,
  185. CHIP_SW_VER_02 = 0x0001
  186. } CHIP_SW_VER;
  187. typedef enum {
  188. CHIP_HW_VER_01 = 0xCA00,
  189. CHIP_HW_VER_02 = 0xCA01
  190. } CHIP_HW_VER;
  191. typedef struct { /* RAM configuration */
  192. #ifndef MTK_LM_MODE
  193. unsigned long start;
  194. unsigned long size;
  195. #else
  196. unsigned long long start;
  197. unsigned long long size;
  198. #endif
  199. } BI_DRAM;
  200. /* ====== Preloader to LK Tags START ===== */
  201. /* boot reason */
  202. #define BOOT_TAG_BOOT_REASON 0x88610001
  203. struct boot_tag_boot_reason {
  204. u32 boot_reason;
  205. };
  206. /* boot mode */
  207. #define BOOT_TAG_BOOT_MODE 0x88610002
  208. struct boot_tag_boot_mode {
  209. u32 boot_mode;
  210. };
  211. /* META com port information */
  212. #define BOOT_TAG_META_COM 0x88610003
  213. struct boot_tag_meta_com {
  214. u32 meta_com_type;
  215. u32 meta_com_id;
  216. u32 meta_uart_port;
  217. u32 meta_log_disable;
  218. u32 fast_meta_gpio;
  219. };
  220. /* log com port information */
  221. #define BOOT_TAG_LOG_COM 0x88610004
  222. struct boot_tag_log_com {
  223. u32 log_port;
  224. u32 log_baudrate;
  225. u32 log_enable;
  226. u32 log_dynamic_switch;
  227. };
  228. /* memory information */
  229. #define BOOT_TAG_MEM 0x88610005
  230. struct boot_tag_mem {
  231. u32 dram_rank_num;
  232. u64 dram_rank_size[4];
  233. mblock_info_t mblock_info;
  234. dram_info_t orig_dram_info;
  235. mem_desc_t lca_reserved_mem;
  236. mem_desc_t tee_reserved_mem;
  237. };
  238. /* MD information */
  239. #define BOOT_TAG_MD_INFO 0x88610006
  240. struct boot_tag_md_info {
  241. u32 md_type[4];
  242. };
  243. /* boot time */
  244. #define BOOT_TAG_BOOT_TIME 0x88610007
  245. struct boot_tag_boot_time {
  246. u32 boot_time;
  247. };
  248. /* DA information */
  249. #define BOOT_TAG_DA_INFO 0x88610008
  250. struct boot_tag_da_info {
  251. da_info_t da_info;
  252. };
  253. /* security limitation information */
  254. #define BOOT_TAG_SEC_INFO 0x88610009
  255. struct boot_tag_sec_info {
  256. SEC_LIMIT sec_limit;
  257. };
  258. /* (for dummy AP) partition number */
  259. #define BOOT_TAG_PART_NUM 0x8861000A
  260. struct boot_tag_part_num {
  261. u32 part_num;
  262. };
  263. /* (for dummy AP) partition info */
  264. #define BOOT_TAG_PART_INFO 0x8861000B
  265. struct boot_tag_part_info {
  266. part_hdr_t *part_info;
  267. };
  268. /* eflag */
  269. #define BOOT_TAG_EFLAG 0x8861000C
  270. struct boot_tag_eflag {
  271. u32 e_flag;
  272. };
  273. /* DDR reserve */
  274. #define BOOT_TAG_DDR_RESERVE 0x8861000D
  275. struct boot_tag_ddr_reserve {
  276. u32 ddr_reserve_enable;
  277. u32 ddr_reserve_success;
  278. u32 ddr_reserve_ready;
  279. };
  280. /* DRAM BUFF */
  281. #define BOOT_TAG_DRAM_BUF 0x8861000E
  282. struct boot_tag_dram_buf {
  283. u32 dram_buf_size;
  284. };
  285. /* VCORE DVFS */
  286. #define BOOT_TAG_VCORE_DVFS 0x8861000F
  287. struct boot_tag_vcore_dvfs {
  288. vcore_dvfs_info_t vcore_dvfs_info;
  289. };
  290. /* PTP */
  291. #define BOOT_TAG_PTP 0x88610010
  292. struct boot_tag_ptp {
  293. ptp_info_t ptp_volt_info;
  294. };
  295. #define BOOT_TAG_BOOT_OPT 0x88610011
  296. struct boot_tag_boot_opt {
  297. u32 smc_boot_opt;
  298. u32 lk_boot_opt;
  299. u32 kernel_boot_opt;
  300. };
  301. #define BOOT_TAG_SRAM_INFO 0x88610012
  302. struct boot_tag_sram_info {
  303. u32 non_secure_sram_addr;
  304. u32 non_secure_sram_size;
  305. };
  306. #define BOOT_TAG_PLAT_DBG_INFO 0x88610013
  307. struct boot_tag_plat_dbg_info {
  308. u32 info_max;
  309. dbg_info_in_bootargs info[INFO_TYPE_MAX];
  310. };
  311. #define BOOT_TAG_IMGVER_INFO 0x88610015
  312. struct boot_tag_imgver_info {
  313. u32 pl_imgver_status;
  314. };
  315. /* max cpus */
  316. #define BOOT_TAG_MAX_CPUS 0x88610016
  317. struct boot_tag_max_cpus {
  318. u32 max_cpus;
  319. };
  320. /* charger type info */
  321. #define BOOT_TAG_CHR_INFO 0x88610018
  322. struct boot_tag_chr_info {
  323. u32 charger_type;
  324. };
  325. /* charger type info */
  326. #define BOOT_TAG_BAT_INFO 0x88610019
  327. struct boot_tag_bat_info {
  328. u32 boot_voltage;
  329. u32 shutdown_time;
  330. };
  331. #define BOOT_TAG_RAM_CONSOLE_INFO 0x8861001C
  332. struct boot_tag_ram_console_info {
  333. u32 sram_addr;
  334. u32 sram_size;
  335. u32 def_type;
  336. u32 memory_info_offset;
  337. };
  338. /* emi info */
  339. #define BOOT_TAG_EMI_INFO 0x88610020
  340. struct boot_tag_emi_info {
  341. u32 dram_type;
  342. u32 ch_num;
  343. u32 rk_num;
  344. u64 rank_size[MAX_RK];
  345. };
  346. #define BOOT_TAG_SOC_ID 0x88610021
  347. struct boot_tag_soc_id {
  348. u8 id[SOC_ID_LEN];
  349. };
  350. #if WITH_GZ_MD_SHAREMEM
  351. #define BOOT_TAG_GZ_PARAM 0x88610024
  352. struct boot_tag_gz_param {
  353. u8 opaque1[16];
  354. u64 modemMteeShareMemPA;
  355. u32 modemMteeShareMemSize;
  356. u8 opaque2[32];
  357. };
  358. #endif
  359. struct boot_tag_header {
  360. u32 size;
  361. u32 tag;
  362. };
  363. struct boot_tag {
  364. struct boot_tag_header hdr;
  365. union {
  366. struct boot_tag_boot_reason boot_reason;
  367. struct boot_tag_boot_mode boot_mode;
  368. struct boot_tag_meta_com meta_com;
  369. struct boot_tag_log_com log_com;
  370. struct boot_tag_mem mem;
  371. struct boot_tag_md_info md_info;
  372. struct boot_tag_boot_time boot_time;
  373. struct boot_tag_da_info da_info;
  374. struct boot_tag_sec_info sec_info;
  375. struct boot_tag_part_num part_num;
  376. struct boot_tag_part_info part_info;
  377. struct boot_tag_eflag eflag;
  378. struct boot_tag_ddr_reserve ddr_reserve;
  379. struct boot_tag_dram_buf dram_buf;
  380. struct boot_tag_emi_info emi_info;
  381. struct boot_tag_vcore_dvfs vcore_dvfs;
  382. struct boot_tag_boot_opt boot_opt;
  383. struct boot_tag_sram_info sram_info;
  384. struct boot_tag_plat_dbg_info plat_dbg_info;
  385. struct boot_tag_ptp ptp_volt;
  386. struct boot_tag_imgver_info imgver_info;
  387. struct boot_tag_max_cpus max_cpus;
  388. struct boot_tag_bat_info bat_info;
  389. struct boot_tag_chr_info chr_info;
  390. struct boot_tag_soc_id socid;
  391. struct boot_tag_ram_console_info ram_console_info;
  392. #if WITH_GZ_MD_SHAREMEM
  393. struct boot_tag_gz_param gz_param;
  394. #endif
  395. } u;
  396. };
  397. #define boot_tag_next(t) ((struct boot_tag *)((u32 *)(t) + (t)->hdr.size))
  398. /* ====== Preloader to LK Tags END ===== */
  399. #define BOOT_ARGUMENT_MAGIC 0x504c504c
  400. extern unsigned int BOOT_ARGUMENT_LOCATION;
  401. extern void boot_mode_select(void);
  402. extern BOOTMODE g_boot_mode;
  403. extern CHIP_HW_VER mt_get_chip_hw_ver(void);
  404. extern CHIP_SW_VER mt_get_chip_sw_ver(void);
  405. extern int g_is_64bit_kernel;
  406. extern void platform_k64_check(void);
  407. extern BOOT_ARGUMENT *g_boot_arg;
  408. /*FIXME: NAND/eMMC boot. Needo to specifiy by MTK build system. TEMP define here*/
  409. //#define CFG_NAND_BOOT
  410. //#define CFG_MMC_BOOT
  411. #endif