"Das U-Boot" Source Tree
at master 1213 lines 37 kB view raw
1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * (C) Copyright 2012 4 * Texas Instruments, <www.ti.com> 5 */ 6#ifndef _SPL_H_ 7#define _SPL_H_ 8 9#include <binman_sym.h> 10#include <linker_lists.h> 11 12/* Platform-specific defines */ 13#include <linux/compiler.h> 14#include <asm/global_data.h> 15#include <asm/spl.h> 16#include <handoff.h> 17#include <image.h> 18#include <mmc.h> 19 20struct blk_desc; 21struct legacy_img_hdr; 22 23/* Value in r0 indicates we booted from U-Boot */ 24#define UBOOT_NOT_LOADED_FROM_SPL 0x13578642 25 26/* Boot type */ 27#define MMCSD_MODE_UNDEFINED 0 28#define MMCSD_MODE_RAW 1 29#define MMCSD_MODE_FS 2 30#define MMCSD_MODE_EMMCBOOT 3 31 32struct blk_desc; 33struct legacy_img_hdr; 34struct spl_boot_device; 35enum boot_device; 36 37/* 38 * xpl_is_first_phase() - check if this is the first U-Boot phase 39 * 40 * U-Boot has up to four phases: TPL, VPL, SPL and U-Boot proper. Depending on 41 * the build flags we can determine whether the current build is for the first 42 * phase of U-Boot or not. If there is no SPL, then this is U-Boot proper. If 43 * there is SPL but no TPL, the the first phase is SPL. If there is TPL, then 44 * it is the first phase, etc. 45 * 46 * Note that VPL can never be the first phase. If it exists, it is loaded from 47 * TPL 48 * 49 * Return: true if this is the first phase of U-Boot 50 */ 51static inline bool xpl_is_first_phase(void) 52{ 53 if (IS_ENABLED(CONFIG_TPL)) { 54 if (IS_ENABLED(CONFIG_TPL_BUILD)) 55 return true; 56 } else if (IS_ENABLED(CONFIG_SPL)) { 57 if (IS_ENABLED(CONFIG_XPL_BUILD)) 58 return true; 59 } else { 60 return true; 61 } 62 63 return false; 64} 65 66enum xpl_phase_t { 67 PHASE_NONE, /* Invalid phase, signifying before U-Boot */ 68 PHASE_TPL, /* Running in TPL */ 69 PHASE_VPL, /* Running in VPL */ 70 PHASE_SPL, /* Running in SPL */ 71 PHASE_BOARD_F, /* Running in U-Boot before relocation */ 72 PHASE_BOARD_R, /* Running in U-Boot after relocation */ 73 74 PHASE_COUNT, 75}; 76 77/** 78 * xpl_phase() - Find out the phase of U-Boot 79 * 80 * This can be used to avoid #ifdef logic and use if() instead. 81 * 82 * For example, to include code only in TPL, you might do: 83 * 84 * #ifdef CONFIG_TPL_BUILD 85 * ... 86 * #endif 87 * 88 * but with this you can use: 89 * 90 * if (xpl_phase() == PHASE_TPL) { 91 * ... 92 * } 93 * 94 * To include code only in SPL, you might do: 95 * 96 * #if defined(CONFIG_XPL_BUILD) && !defined(CONFIG_TPL_BUILD) 97 * ... 98 * #endif 99 * 100 * but with this you can use: 101 * 102 * if (xpl_phase() == PHASE_SPL) { 103 * ... 104 * } 105 * 106 * To include code only in U-Boot proper, you might do: 107 * 108 * #ifndef CONFIG_XPL_BUILD 109 * ... 110 * #endif 111 * 112 * but with this you can use: 113 * 114 * if (xpl_phase() == PHASE_BOARD_F) { 115 * ... 116 * } 117 * 118 * Return: U-Boot phase 119 */ 120static inline enum xpl_phase_t xpl_phase(void) 121{ 122#ifdef CONFIG_TPL_BUILD 123 return PHASE_TPL; 124#elif defined(CONFIG_VPL_BUILD) 125 return PHASE_VPL; 126#elif defined(CONFIG_XPL_BUILD) 127 return PHASE_SPL; 128#else 129 DECLARE_GLOBAL_DATA_PTR; 130 131 if (!(gd->flags & GD_FLG_RELOC)) 132 return PHASE_BOARD_F; 133 else 134 return PHASE_BOARD_R; 135#endif 136} 137 138/* returns true if in U-Boot proper, false if in xPL */ 139static inline bool not_xpl(void) 140{ 141#ifdef CONFIG_XPL_BUILD 142 return false; 143#endif 144 145 return true; 146} 147 148/* returns true if in xPL, false if in U-Boot proper */ 149static inline bool is_xpl(void) 150{ 151#ifdef CONFIG_XPL_BUILD 152 return true; 153#endif 154 155 return false; 156} 157 158/** 159 * xpl_prev_phase() - Figure out the previous U-Boot phase 160 * 161 * Return: the previous phase from this one, e.g. if called in SPL this returns 162 * PHASE_TPL, if TPL is enabled 163 */ 164static inline enum xpl_phase_t xpl_prev_phase(void) 165{ 166#ifdef CONFIG_TPL_BUILD 167 return PHASE_NONE; 168#elif defined(CONFIG_VPL_BUILD) 169 return PHASE_TPL; /* VPL requires TPL */ 170#elif defined(CONFIG_XPL_BUILD) 171 return IS_ENABLED(CONFIG_VPL) ? PHASE_VPL : 172 IS_ENABLED(CONFIG_TPL) ? PHASE_TPL : 173 PHASE_NONE; 174#else 175 return IS_ENABLED(CONFIG_SPL) ? PHASE_SPL : 176 PHASE_NONE; 177#endif 178} 179 180/** 181 * xpl_next_phase() - Figure out the next U-Boot phase 182 * 183 * Return: the next phase from this one, e.g. if called in TPL this returns 184 * PHASE_SPL 185 */ 186static inline enum xpl_phase_t xpl_next_phase(void) 187{ 188#ifdef CONFIG_TPL_BUILD 189 return IS_ENABLED(CONFIG_VPL) ? PHASE_VPL : PHASE_SPL; 190#elif defined(CONFIG_VPL_BUILD) 191 return PHASE_SPL; 192#else 193 return PHASE_BOARD_F; 194#endif 195} 196 197/** 198 * xpl_name() - Get the name of a phase 199 * 200 * Return: phase name 201 */ 202static inline const char *xpl_name(enum xpl_phase_t phase) 203{ 204 switch (phase) { 205 case PHASE_TPL: 206 return "TPL"; 207 case PHASE_VPL: 208 return "VPL"; 209 case PHASE_SPL: 210 return "SPL"; 211 case PHASE_BOARD_F: 212 case PHASE_BOARD_R: 213 return "U-Boot"; 214 default: 215 return "phase?"; 216 } 217} 218 219/** 220 * xpl_prefix() - Get the prefix of the current phase 221 * 222 * @phase: Phase to look up 223 * Return: phase prefix ("spl", "tpl", etc.) 224 */ 225static inline const char *xpl_prefix(enum xpl_phase_t phase) 226{ 227 switch (phase) { 228 case PHASE_TPL: 229 return "tpl"; 230 case PHASE_VPL: 231 return "vpl"; 232 case PHASE_SPL: 233 return "spl"; 234 case PHASE_BOARD_F: 235 case PHASE_BOARD_R: 236 return ""; 237 default: 238 return "phase?"; 239 } 240} 241 242/* A string name for SPL or TPL */ 243#ifdef CONFIG_XPL_BUILD 244# ifdef CONFIG_TPL_BUILD 245# define PHASE_NAME "TPL" 246# elif defined(CONFIG_VPL_BUILD) 247# define PHASE_NAME "VPL" 248# elif defined(CONFIG_SPL_BUILD) 249# define PHASE_NAME "SPL" 250# endif 251# define PHASE_PROMPT PHASE_NAME ": " 252#else 253# define PHASE_NAME "" 254# define PHASE_PROMPT "" 255#endif 256 257/** 258 * enum spl_sandbox_flags - flags for sandbox's use of spl_image_info->flags 259 * 260 * @SPL_SANDBOXF_ARG_IS_FNAME: arg is the filename to jump to (default) 261 * @SPL_SANDBOXF_ARG_IS_BUF: arg is the containing image to jump to, @offset is 262 * the start offset within the image, @size is the size of the image 263 */ 264enum spl_sandbox_flags { 265 SPL_SANDBOXF_ARG_IS_FNAME = 0, 266 SPL_SANDBOXF_ARG_IS_BUF, 267}; 268 269/** 270 * struct spl_image_info - Information about the SPL image being loaded 271 * 272 * @fdt_size: Size of the FDT for the image (0 if none) 273 * @buf: Buffer where the image should be loaded 274 * @fdt_buf: Buffer where the FDT will be copied by spl_reloc_jump(), only used 275 * if @fdt_size is non-zero 276 * @fdt_start: Pointer to the FDT to be copied (must be set up before calling 277 * spl_reloc_jump() 278 * @rcode_buf: Buffer to hold the relocating-jump code 279 * @stack_prot: Pointer to the stack-protection value, used to ensure the stack 280 * does not overflow 281 * @reloc_offset: offset between the relocating-jump code and its place in the 282 * currently running image 283 */ 284struct spl_image_info { 285 const char *name; 286 u8 os; 287 ulong load_addr; 288 ulong entry_point; 289#if CONFIG_IS_ENABLED(LOAD_FIT) || CONFIG_IS_ENABLED(LOAD_FIT_FULL) 290 void *fdt_addr; 291#endif 292 u32 boot_device; 293 u32 offset; 294 u32 size; 295 ulong fdt_size; 296 u32 flags; 297 void *arg; 298#ifdef CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK 299 ulong dcrc_data; 300 ulong dcrc_length; 301 ulong dcrc; 302#endif 303#if CONFIG_IS_ENABLED(RELOC_LOADER) 304 void *buf; 305 void *fdt_buf; 306 void *fdt_start; 307 void *rcode_buf; 308 uint *stack_prot; 309 ulong reloc_offset; 310#endif 311}; 312 313/* function to jump to an image from SPL */ 314typedef void __noreturn (*spl_jump_to_image_t)(struct spl_image_info *); 315 316static inline void *spl_image_fdt_addr(struct spl_image_info *info) 317{ 318#if CONFIG_IS_ENABLED(LOAD_FIT) || CONFIG_IS_ENABLED(LOAD_FIT_FULL) 319 return info->fdt_addr; 320#else 321 return 0; 322#endif 323} 324 325struct spl_load_info; 326 327/** 328 * spl_load_reader() - Read from device 329 * 330 * @load: Information about the load state 331 * @offset: Offset to read from in bytes. This must be a multiple of 332 * @load->bl_len. 333 * @count: Number of bytes to read. This must be a multiple of 334 * @load->bl_len. 335 * @buf: Buffer to read into 336 * @return number of bytes read, 0 on error 337 */ 338typedef ulong (*spl_load_reader)(struct spl_load_info *load, ulong sector, 339 ulong count, void *buf); 340 341/** 342 * Information required to load data from a device 343 * 344 * @read: Function to call to read from the device 345 * @priv: Private data for the device 346 * @bl_len: Block length for reading in bytes 347 * @phase: Image phase to load 348 * @no_fdt_update: true to update the FDT with any loadables that are loaded 349 */ 350struct spl_load_info { 351 spl_load_reader read; 352 void *priv; 353#if IS_ENABLED(CONFIG_SPL_LOAD_BLOCK) 354 u16 bl_len; 355#endif 356#if CONFIG_IS_ENABLED(BOOTMETH_VBE) 357 u8 phase; 358 u8 fdt_update; 359#endif 360}; 361 362static inline int spl_get_bl_len(struct spl_load_info *info) 363{ 364#if IS_ENABLED(CONFIG_SPL_LOAD_BLOCK) 365 return info->bl_len; 366#else 367 return 1; 368#endif 369} 370 371static inline void spl_set_bl_len(struct spl_load_info *info, int bl_len) 372{ 373#if IS_ENABLED(CONFIG_SPL_LOAD_BLOCK) 374 info->bl_len = bl_len; 375#else 376 if (bl_len != 1) 377 panic("CONFIG_SPL_LOAD_BLOCK not enabled"); 378#endif 379} 380 381static inline void xpl_set_phase(struct spl_load_info *info, 382 enum image_phase_t phase) 383{ 384#if CONFIG_IS_ENABLED(BOOTMETH_VBE) 385 info->phase = phase; 386#endif 387} 388 389static inline enum image_phase_t xpl_get_phase(struct spl_load_info *info) 390{ 391#if CONFIG_IS_ENABLED(BOOTMETH_VBE) 392 return info->phase; 393#else 394 return IH_PHASE_NONE; 395#endif 396} 397 398static inline void xpl_set_fdt_update(struct spl_load_info *info, 399 bool fdt_update) 400{ 401#if CONFIG_IS_ENABLED(BOOTMETH_VBE) 402 info->fdt_update = fdt_update; 403#endif 404} 405 406static inline enum image_phase_t xpl_get_fdt_update(struct spl_load_info *info) 407{ 408#if CONFIG_IS_ENABLED(BOOTMETH_VBE) 409 return info->fdt_update; 410#else 411 return true; 412#endif 413} 414 415/** 416 * spl_load_init() - Set up a new spl_load_info structure 417 */ 418static inline void spl_load_init(struct spl_load_info *load, 419 spl_load_reader h_read, void *priv, 420 uint bl_len) 421{ 422 load->read = h_read; 423 load->priv = priv; 424 spl_set_bl_len(load, bl_len); 425 xpl_set_phase(load, IH_PHASE_NONE); 426 xpl_set_fdt_update(load, true); 427} 428 429/* 430 * We need to know the position of U-Boot in memory so we can jump to it. We 431 * allow any U-Boot binary to be used (u-boot.bin, u-boot-nodtb.bin, 432 * u-boot.img), hence the '_any'. These is no checking here that the correct 433 * image is found. For example if u-boot.img is used we don't check that 434 * spl_parse_image_header() can parse a valid header. 435 * 436 * Similarly for SPL, so that TPL can jump to SPL. 437 */ 438binman_sym_extern(ulong, u_boot_any, image_pos); 439binman_sym_extern(ulong, u_boot_any, size); 440binman_sym_extern(ulong, u_boot_spl_any, image_pos); 441binman_sym_extern(ulong, u_boot_spl_any, size); 442binman_sym_extern(ulong, u_boot_vpl_any, image_pos); 443binman_sym_extern(ulong, u_boot_vpl_any, size); 444 445/** 446 * spl_get_image_pos() - get the image position of the next phase 447 * 448 * This returns the image position to use to load the next phase of U-Boot 449 */ 450ulong spl_get_image_pos(void); 451 452/** 453 * spl_get_image_size() - get the size of the next phase 454 * 455 * This returns the size to use to load the next phase of U-Boot 456 */ 457ulong spl_get_image_size(void); 458 459/** 460 * spl_get_image_text_base() - get the text base of the next phase 461 * 462 * This returns the address that the next stage is linked to run at, i.e. 463 * CONFIG_SPL_TEXT_BASE or CONFIG_TEXT_BASE 464 * 465 * Return: text-base address 466 */ 467ulong spl_get_image_text_base(void); 468 469/** 470 * spl_load_simple_fit_skip_processing() - Hook to allow skipping the FIT 471 * image processing during spl_load_simple_fit(). 472 * 473 * Return true to skip FIT processing, false to preserve the full code flow 474 * of spl_load_simple_fit(). 475 */ 476bool spl_load_simple_fit_skip_processing(void); 477 478/** 479 * spl_load_simple_fit_fix_load() - Hook to make fixes 480 * after fit image header is loaded 481 * 482 * Returns pointer to fit 483 */ 484void *spl_load_simple_fit_fix_load(const void *fit); 485 486/** 487 * spl_load_simple_fit() - Loads a fit image from a device. 488 * @spl_image: Image description to set up 489 * @info: Structure containing the information required to load data. 490 * @offset: Offset where FIT image is located in the device. Must be aligned 491 * to the device's bl_len. 492 * @fdt: Pointer to the copied FIT header. 493 * 494 * Reads the FIT image @sector in the device. Loads u-boot image to 495 * specified load address and copies the dtb to end of u-boot image. 496 * Returns 0 on success. 497 */ 498int spl_load_simple_fit(struct spl_image_info *spl_image, 499 struct spl_load_info *info, ulong offset, void *fdt); 500 501#define SPL_COPY_PAYLOAD_ONLY 1 502#define SPL_FIT_FOUND 2 503 504/** 505 * spl_load_legacy_lzma() - Load an LZMA-compressed legacy image 506 * @spl_image: Image description (already set up) 507 * @load: Structure containing the information required to load data. 508 * @offset: Pointer to image 509 * 510 * Load/decompress an LZMA-compressed legacy image from the device. 511 * 512 * Return: 0 on success, or a negative error on failure 513 */ 514int spl_load_legacy_lzma(struct spl_image_info *spl_image, 515 struct spl_load_info *load, ulong offset); 516 517/** 518 * spl_load_legacy_img() - Loads a legacy image from a device. 519 * @spl_image: Image description to set up 520 * @load: Structure containing the information required to load data. 521 * @offset: Pointer to image 522 * @hdr: Pointer to image header 523 * 524 * Reads an legacy image from the device. Loads u-boot image to 525 * specified load address. 526 * Returns 0 on success. 527 */ 528int spl_load_legacy_img(struct spl_image_info *spl_image, 529 struct spl_boot_device *bootdev, 530 struct spl_load_info *load, ulong offset, 531 struct legacy_img_hdr *hdr); 532 533/** 534 * spl_load_imx_container() - Loads a imx container image from a device. 535 * @spl_image: Image description to set up 536 * @info: Structure containing the information required to load data. 537 * @sector: Offset where container image is located in the device. Must be 538 * aligned to the device block size. 539 * 540 * Reads the container image @sector in the device. Loads u-boot image to 541 * specified load address. 542 */ 543int spl_load_imx_container(struct spl_image_info *spl_image, 544 struct spl_load_info *info, ulong offset); 545 546/* SPL common functions */ 547void preloader_console_init(void); 548u32 spl_boot_device(void); 549 550struct spi_flash; 551 552/** 553 * spl_spi_get_uboot_offs() - Lookup function for the SPI boot offset 554 * @flash: The spi flash to boot from 555 * 556 * Return: The offset of U-Boot within the SPI flash 557 */ 558unsigned int spl_spi_get_uboot_offs(struct spi_flash *flash); 559 560/** 561 * spl_spi_boot_bus() - Lookup function for the SPI boot bus source. 562 * 563 * This function returns the SF bus to load from. 564 * If not overridden, it is weakly defined in common/spl/spl_spi.c. 565 */ 566u32 spl_spi_boot_bus(void); 567 568/** 569 * spl_spi_boot_cs() - Lookup function for the SPI boot CS source. 570 * 571 * This function returns the SF CS to load from. 572 * If not overridden, it is weakly defined in common/spl/spl_spi.c. 573 */ 574u32 spl_spi_boot_cs(void); 575 576/** 577 * spl_mmc_boot_mode() - Lookup function for the mode of an MMC boot source. 578 * @boot_device: ID of the device which the MMC driver wants to read 579 * from. Common values are e.g. BOOT_DEVICE_MMC1, 580 * BOOT_DEVICE_MMC2, BOOT_DEVICE_MMC2_2. 581 * 582 * This function should return one of MMCSD_MODE_FS, MMCSD_MODE_EMMCBOOT, or 583 * MMCSD_MODE_RAW for each MMC boot source which is defined for the target. The 584 * boot_device parameter tells which device the MMC driver is interested in. 585 * 586 * If not overridden, it is weakly defined in common/spl/spl_mmc.c. 587 * 588 * Note: It is important to use the boot_device parameter instead of e.g. 589 * spl_boot_device() as U-Boot is not always loaded from the same device as SPL. 590 */ 591u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device); 592 593/** 594 * spl_mmc_boot_partition() - MMC partition to load U-Boot from. 595 * @boot_device: ID of the device which the MMC driver wants to load 596 * U-Boot from. 597 * 598 * This function should return the partition number which the SPL 599 * should load U-Boot from (on the given boot_device) when 600 * CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION is set. 601 * 602 * If not overridden, it is weakly defined in common/spl/spl_mmc.c. 603 */ 604int spl_mmc_boot_partition(const u32 boot_device); 605 606struct mmc; 607/** 608 * default_spl_mmc_emmc_boot_partition() - eMMC boot partition to load U-Boot from. 609 * mmc: Pointer for the mmc device structure 610 * 611 * This function should return the eMMC boot partition number which 612 * the SPL should load U-Boot from (on the given boot_device). 613 */ 614int default_spl_mmc_emmc_boot_partition(struct mmc *mmc); 615 616/** 617 * spl_mmc_emmc_boot_partition() - eMMC boot partition to load U-Boot from. 618 * mmc: Pointer for the mmc device structure 619 * 620 * This function should return the eMMC boot partition number which 621 * the SPL should load U-Boot from (on the given boot_device). 622 * 623 * If not overridden, it is weakly defined in common/spl/spl_mmc.c 624 * and calls default_spl_mmc_emmc_boot_partition(); 625 */ 626int spl_mmc_emmc_boot_partition(struct mmc *mmc); 627 628void spl_set_bd(void); 629 630/** 631 * spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot (architecture override) 632 * 633 * This is a weak function which by default will provide the raw sector that is 634 * where the start of the U-Boot image has been written to. 635 * 636 * @mmc: struct mmc that describes the devie where U-Boot resides 637 * @raw_sect: The raw sector number where U-Boot is by default. 638 * Return: The raw sector location that U-Boot resides at 639 */ 640unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc, 641 unsigned long raw_sect); 642 643/** 644 * spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot (board override) 645 * 646 * This is a weak function which by default will provide the raw sector that is 647 * where the start of the U-Boot image has been written to. 648 * 649 * @mmc: struct mmc that describes the devie where U-Boot resides 650 * @raw_sect: The raw sector number where U-Boot is by default. 651 * Return: The raw sector location that U-Boot resides at 652 */ 653unsigned long board_spl_mmc_get_uboot_raw_sector(struct mmc *mmc, 654 unsigned long raw_sect); 655 656/** 657 * spl_mmc_get_uboot_raw_sector() - Provide raw sector of the start of U-Boot 658 * 659 * This is a weak function which by default will provide the raw sector that is 660 * where the start of the U-Boot image has been written to. 661 * 662 * @mmc: struct mmc that describes the devie where U-Boot resides 663 * @raw_sect: The raw sector number where U-Boot is by default. 664 * Return: The raw sector location that U-Boot resides at 665 */ 666unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc, 667 unsigned long raw_sect); 668 669/** 670 * spl_set_header_raw_uboot() - Set up a standard SPL image structure 671 * 672 * This sets up the given spl_image which the standard values obtained from 673 * config options: CONFIG_SYS_MONITOR_LEN, CONFIG_SYS_UBOOT_START, 674 * CONFIG_TEXT_BASE. 675 * 676 * @spl_image: Image description to set up 677 */ 678void spl_set_header_raw_uboot(struct spl_image_info *spl_image); 679 680/** 681 * spl_parse_image_header() - parse the image header and set up info 682 * 683 * This parses the legacy image header information at @header and sets up 684 * @spl_image according to what is found. If no image header is found, then 685 * a raw image or bootz is assumed. If CONFIG_SPL_PANIC_ON_RAW_IMAGE is 686 * enabled, then this causes a panic. If CONFIG_SPL_RAW_IMAGE_SUPPORT is not 687 * enabled then U-Boot gives up. Otherwise U-Boot sets up the image using 688 * spl_set_header_raw_uboot(), or possibly the bootz header. 689 * 690 * @spl_image: Image description to set up 691 * @header image header to parse 692 * Return: 0 if a header was correctly parsed, -ve on error 693 */ 694int spl_parse_image_header(struct spl_image_info *spl_image, 695 const struct spl_boot_device *bootdev, 696 const struct legacy_img_hdr *header); 697 698void spl_board_prepare_for_linux(void); 699 700/** 701 * spl_board_prepare_for_optee() - Prepare board for an OPTEE payload 702 * 703 * Prepares the board for booting an OP-TEE payload. Initialization is platform 704 * specific, and may include configuring the TrustZone memory, and other 705 * initialization steps required by OP-TEE. 706 * Note that @fdt is not used directly by OP-TEE. OP-TEE passes this @fdt to 707 * its normal world target. This target is not guaranteed to be u-boot, so @fdt 708 * changes that would normally be done by u-boot should be done in this step. 709 * 710 * @fdt: Devicetree that will be passed on, or NULL 711 */ 712void spl_board_prepare_for_optee(void *fdt); 713void spl_board_prepare_for_boot(void); 714int spl_board_ubi_load_image(u32 boot_device); 715int spl_board_boot_device(enum boot_device boot_dev_spl); 716 717/** 718 * spl_board_loader_name() - Return a name for the loader 719 * 720 * This is a weak function which might be overridden by the board code. With 721 * that a board specific value for the device where the U-Boot will be loaded 722 * from can be set. By default it returns NULL. 723 * 724 * @boot_device: ID of the device which SPL wants to load U-Boot from. 725 */ 726const char *spl_board_loader_name(u32 boot_device); 727 728/** 729 * jump_to_image_linux() - Jump to a Linux kernel from SPL 730 * 731 * This jumps into a Linux kernel using the information in @spl_image. 732 * 733 * @spl_image: Image description to set up 734 */ 735void __noreturn jump_to_image_linux(struct spl_image_info *spl_image); 736 737/** 738 * jump_to_image_optee() - Jump to OP-TEE OS from SPL 739 * 740 * This jumps into OP-TEE OS using the information in @spl_image. 741 * 742 * @spl_image: Image description to set up 743 */ 744void __noreturn jump_to_image_optee(struct spl_image_info *spl_image); 745 746/** 747 * spl_start_uboot() - Check if SPL should start the kernel or U-Boot 748 * 749 * This is called by the various SPL loaders to determine whether the board 750 * wants to load the kernel or U-Boot. This function should be provided by 751 * the board. 752 * 753 * Return: 0 if SPL should start the kernel, 1 if U-Boot must be started 754 */ 755int spl_start_uboot(void); 756 757/** 758 * spl_display_print() - Display a board-specific message in SPL 759 * 760 * If CONFIG_SPL_DISPLAY_PRINT is enabled, U-Boot will call this function 761 * immediately after displaying the SPL console banner ("U-Boot SPL ..."). 762 * This function should be provided by the board. 763 */ 764void spl_display_print(void); 765 766/** 767 * struct spl_boot_device - Describes a boot device used by SPL 768 * 769 * @boot_device: A number indicating the BOOT_DEVICE type. There are various 770 * BOOT_DEVICE... #defines and enums in U-Boot and they are not consistently 771 * numbered. 772 * @boot_device_name: Named boot device, or NULL if none. 773 * 774 * Note: Additional fields can be added here, bearing in mind that SPL is 775 * size-sensitive and common fields will be present on all boards. This 776 * struct can also be used to return additional information about the load 777 * process if that becomes useful. 778 */ 779struct spl_boot_device { 780 uint boot_device; 781 const char *boot_device_name; 782}; 783 784/** 785 * Holds information about a way of loading an SPL image 786 * 787 * @name: User-friendly name for this method (e.g. "MMC") 788 * @boot_device: Boot device that this loader supports 789 * @load_image: Function to call to load image 790 */ 791struct spl_image_loader { 792#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT 793 const char *name; 794#endif 795 uint boot_device; 796 /** 797 * load_image() - Load an SPL image 798 * 799 * @spl_image: place to put image information 800 * @bootdev: describes the boot device to load from 801 */ 802 int (*load_image)(struct spl_image_info *spl_image, 803 struct spl_boot_device *bootdev); 804}; 805 806/* Helper function for accessing the name */ 807static inline const char *spl_loader_name(const struct spl_image_loader *loader) 808{ 809#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT 810 const char *name; 811 name = spl_board_loader_name(loader->boot_device); 812 return name ?: loader->name; 813#else 814 return NULL; 815#endif 816} 817 818/* Declare an SPL image loader */ 819#define SPL_LOAD_IMAGE(__name) \ 820 ll_entry_declare(struct spl_image_loader, __name, spl_image_loader) 821 822/* 823 * _priority is the priority of this method, 0 meaning it will be the top 824 * choice for this device, 9 meaning it is the bottom choice. 825 * _boot_device is the BOOT_DEVICE_... value 826 * _method is the load_image function to call 827 */ 828#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT 829#define SPL_LOAD_IMAGE_METHOD(_name, _priority, _boot_device, _method) \ 830 SPL_LOAD_IMAGE(_boot_device ## _priority ## _method) = { \ 831 .name = _name, \ 832 .boot_device = _boot_device, \ 833 .load_image = _method, \ 834 } 835#else 836#define SPL_LOAD_IMAGE_METHOD(_name, _priority, _boot_device, _method) \ 837 SPL_LOAD_IMAGE(_boot_device ## _priority ## _method) = { \ 838 .boot_device = _boot_device, \ 839 .load_image = _method, \ 840 } 841#endif 842 843#define SPL_LOAD_IMAGE_GET(_priority, _boot_device, _method) \ 844 ll_entry_get(struct spl_image_loader, \ 845 _boot_device ## _priority ## _method, spl_image_loader) 846 847/* SPL FAT image functions */ 848 849/** 850 * spl_fat_force_reregister() - Force reregistration of FAT block devices 851 * 852 * To avoid repeatedly looking up block devices, spl_load_image_fat keeps track 853 * of whether it has already registered a block device. This is fine for most 854 * cases, but when running unit tests all devices are removed and recreated 855 * in-between tests. This function will force re-registration of any block 856 * devices, ensuring that we don't try to use an invalid block device. 857 */ 858void spl_fat_force_reregister(void); 859 860int spl_load_image_fat(struct spl_image_info *spl_image, 861 struct spl_boot_device *bootdev, 862 struct blk_desc *block_dev, int partition, 863 const char *filename); 864int spl_load_image_fat_os(struct spl_image_info *spl_image, 865 struct spl_boot_device *bootdev, 866 struct blk_desc *block_dev, int partition); 867 868void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image); 869 870/* SPL EXT image functions */ 871int spl_load_image_ext(struct spl_image_info *spl_image, 872 struct spl_boot_device *bootdev, 873 struct blk_desc *block_dev, int partition, 874 const char *filename); 875int spl_load_image_ext_os(struct spl_image_info *spl_image, 876 struct spl_boot_device *bootdev, 877 struct blk_desc *block_dev, int partition); 878int spl_blk_load_image(struct spl_image_info *spl_image, 879 struct spl_boot_device *bootdev, 880 enum uclass_id uclass_id, int devnum, int partnum); 881 882/** 883 * spl_early_init() - Set up device tree and driver model in SPL if enabled 884 * 885 * Call this function in board_init_f() if you want to use device tree and 886 * driver model early, before board_init_r() is called. 887 * 888 * If this is not called, then driver model will be inactive in SPL's 889 * board_init_f(), and no device tree will be available. 890 */ 891int spl_early_init(void); 892 893/** 894 * spl_init() - Set up device tree and driver model in SPL if enabled 895 * 896 * You can optionally call spl_early_init(), then optionally call spl_init(). 897 * This function will be called from board_init_r() if not called earlier. 898 * 899 * Both spl_early_init() and spl_init() perform a similar function except that 900 * the latter will not set up the malloc() area if 901 * CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is enabled, since it is assumed to 902 * already be done by a calll to spl_relocate_stack_gd() before board_init_r() 903 * is reached. 904 * 905 * This function will be called from board_init_r() if not called earlier. 906 * 907 * If this is not called, then driver model will be inactive in SPL's 908 * board_init_f(), and no device tree will be available. 909 */ 910int spl_init(void); 911 912/* 913 * spl_soc_init() - Do architecture-specific init in SPL 914 * 915 * If SPL_SOC_INIT is enabled, this is called from board_init_r() before 916 * jumping to the next phase. 917 */ 918void spl_soc_init(void); 919 920/* 921 * spl_board_init() - Do board-specific init in SPL 922 * 923 * If xPL_BOARD_INIT is enabled, this is called from board_init_r() before 924 * jumping to the next phase. 925 */ 926void spl_board_init(void); 927 928/** 929 * spl_was_boot_source() - check if U-Boot booted from SPL 930 * 931 * This will normally be true, but if U-Boot jumps to second U-Boot, it will 932 * be false. This should be implemented by board-specific code. 933 * 934 * Return: true if U-Boot booted from SPL, else false 935 */ 936bool spl_was_boot_source(void); 937 938/** 939 * spl_dfu_cmd- run dfu command with chosen mmc device interface 940 * @param usb_index - usb controller number 941 * @param mmc_dev - mmc device nubmer 942 * 943 * Return: 0 on success, otherwise error code 944 */ 945int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr); 946 947/** 948 * spl_mmc_clear_cache() - Clear cached MMC devices 949 * 950 * To avoid reinitializing MMCs, spl_mmc_load caches the most-recently-used MMC 951 * device. This is fine for most cases, but when running unit tests all devices 952 * are removed and recreated in-between tests. This function will clear any 953 * cached state, ensuring that we don't try to use an invalid MMC. 954 */ 955void spl_mmc_clear_cache(void); 956 957int spl_mmc_load_image(struct spl_image_info *spl_image, 958 struct spl_boot_device *bootdev); 959 960/** 961 * spl_mmc_load() - Load an image file from MMC/SD media 962 * 963 * @param spl_image Image data filled in by loading process 964 * @param bootdev Describes which device to load from 965 * @param filename Name of file to load (in FS mode) 966 * @param raw_part Partition to load from (in RAW mode) 967 * @param raw_sect Sector to load from (in RAW mode) 968 * 969 * Return: 0 on success, otherwise error code 970 */ 971int spl_mmc_load(struct spl_image_info *spl_image, 972 struct spl_boot_device *bootdev, 973 const char *filename, 974 int raw_part, 975 unsigned long raw_sect); 976 977/** 978 * spl_usb_load() - Load an image file from USB mass storage 979 * 980 * @param spl_image Image data filled in by loading process 981 * @param bootdev Describes which device to load from 982 * @param raw_part Fat partition to load from 983 * @param filename Name of file to load 984 * 985 * Return: 0 on success, otherwise error code 986 */ 987int spl_usb_load(struct spl_image_info *spl_image, 988 struct spl_boot_device *bootdev, 989 int partition, const char *filename); 990 991int spl_ymodem_load_image(struct spl_image_info *spl_image, 992 struct spl_boot_device *bootdev); 993/** 994 * spl_reserve_video_from_ram_top() - Reserve framebuffer memory from end of RAM 995 * 996 * This enforces framebuffer reservation at SPL stage from end of RAM so that 997 * next stage can directly skip this pre-reserved area before carrying out 998 * further reservations. The allocation address is stored in struct video_uc_plat. 999 * 1000 * Return: 0 on success, otherwise error code 1001 */ 1002int spl_reserve_video_from_ram_top(void); 1003 1004/** 1005 * spl_invoke_atf - boot using an ARM trusted firmware image 1006 */ 1007void __noreturn spl_invoke_atf(struct spl_image_info *spl_image); 1008 1009/** 1010 * bl2_plat_get_bl31_params() - return params for bl31. 1011 * @bl32_entry: address of BL32 executable (secure) 1012 * @bl33_entry: address of BL33 executable (non secure) 1013 * @fdt_addr: address of Flat Device Tree 1014 * 1015 * This is a weak function which might be overridden by the board code. By 1016 * default it will just call bl2_plat_get_bl31_params_default(). 1017 * 1018 * If you just want to manipulate or add some parameters, you can override 1019 * this function, call bl2_plat_get_bl31_params_default and operate on the 1020 * returned bl31 params. 1021 * 1022 * Return: bl31 params structure pointer 1023 */ 1024struct bl31_params *bl2_plat_get_bl31_params(ulong bl32_entry, 1025 ulong bl33_entry, 1026 ulong fdt_addr); 1027 1028/** 1029 * bl2_plat_get_bl31_params_default() - prepare params for bl31. 1030 * @bl32_entry: address of BL32 executable (secure) 1031 * @bl33_entry: address of BL33 executable (non secure) 1032 * @fdt_addr: address of Flat Device Tree 1033 * 1034 * This is the default implementation of bl2_plat_get_bl31_params(). It assigns 1035 * a pointer to the memory that the platform has kept aside to pass platform 1036 * specific and trusted firmware related information to BL31. This memory is 1037 * allocated by allocating memory to bl2_to_bl31_params_mem structure which is 1038 * a superset of all the structure whose information is passed to BL31 1039 * 1040 * NOTE: The memory is statically allocated, thus this function should be 1041 * called only once. All subsequent calls will overwrite any changes. 1042 * 1043 * Return: bl31 params structure pointer 1044 */ 1045struct bl31_params *bl2_plat_get_bl31_params_default(ulong bl32_entry, 1046 ulong bl33_entry, 1047 ulong fdt_addr); 1048 1049/** 1050 * bl2_plat_get_bl31_params_v2() - return params for bl31 1051 * @bl32_entry: address of BL32 executable (secure) 1052 * @bl33_entry: address of BL33 executable (non secure) 1053 * @fdt_addr: address of Flat Device Tree 1054 * 1055 * This function does the same as bl2_plat_get_bl31_params() except that is is 1056 * used for the new LOAD_IMAGE_V2 option, which uses a slightly different 1057 * method to pass the parameters. 1058 * 1059 * Return: bl31 params structure pointer 1060 */ 1061struct bl_params *bl2_plat_get_bl31_params_v2(ulong bl32_entry, 1062 ulong bl33_entry, 1063 ulong fdt_addr); 1064 1065/** 1066 * bl2_plat_get_bl31_params_v2_default() - prepare params for bl31. 1067 * @bl32_entry: address of BL32 executable (secure) 1068 * @bl33_entry: address of BL33 executable (non secure) 1069 * @fdt_addr: address of Flat Device Tree 1070 * 1071 * This is the default implementation of bl2_plat_get_bl31_params_v2(). It 1072 * prepares the linked list of the bl31 params, populates the image types and 1073 * set the entry points for bl32 and bl33 (if available). 1074 * 1075 * NOTE: The memory is statically allocated, thus this function should be 1076 * called only once. All subsequent calls will overwrite any changes. 1077 * 1078 * Return: bl31 params structure pointer 1079 */ 1080struct bl_params *bl2_plat_get_bl31_params_v2_default(ulong bl32_entry, 1081 ulong bl33_entry, 1082 ulong fdt_addr); 1083/** 1084 * spl_optee_entry - entry function for optee 1085 * 1086 * args defind in op-tee project 1087 * https://github.com/OP-TEE/optee_os/ 1088 * core/arch/arm/kernel/generic_entry_a32.S 1089 * @arg0: pagestore 1090 * @arg1: (ARMv7 standard bootarg #1) 1091 * @arg2: device tree address, (ARMv7 standard bootarg #2) 1092 * @arg3: non-secure entry address (ARMv7 bootarg #0) 1093 */ 1094void __noreturn spl_optee_entry(void *arg0, void *arg1, void *arg2, void *arg3); 1095 1096/** 1097 * spl_invoke_opensbi - boot using a RISC-V OpenSBI image 1098 */ 1099void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image); 1100 1101/** 1102 * board_return_to_bootrom - allow for boards to continue with the boot ROM 1103 * 1104 * If a board (e.g. the Rockchip RK3368 boards) provide some 1105 * supporting functionality for SPL in their boot ROM and the SPL 1106 * stage wants to return to the ROM code to continue booting, boards 1107 * can implement 'board_return_to_bootrom'. 1108 */ 1109int board_return_to_bootrom(struct spl_image_info *spl_image, 1110 struct spl_boot_device *bootdev); 1111 1112/** 1113 * board_spl_fit_size_align - specific size align before processing payload 1114 * 1115 */ 1116ulong board_spl_fit_size_align(ulong size); 1117 1118/** 1119 * spl_perform_fixups() - arch/board-specific callback before processing 1120 * the boot-payload 1121 */ 1122void spl_perform_fixups(struct spl_image_info *spl_image); 1123 1124/* 1125 * spl_get_load_buffer() - get buffer for loading partial image data 1126 * 1127 * Returns memory area which can be populated by partial image data, 1128 * ie. uImage or fitImage header. 1129 */ 1130struct legacy_img_hdr *spl_get_load_buffer(ssize_t offset, size_t size); 1131 1132/** 1133 * board_spl_fit_append_fdt_skip(): test whether DTO application should be skipped 1134 * @name: DTO node name within fitImage images node 1135 * 1136 * A board-specific function used to indicate whether a DTO from fitImage 1137 * configuration node 'fdt' property DT and DTO list should be applied onto 1138 * the base DT or not applied. 1139 * 1140 * This is useful in case of DTOs which implement e.g. different board revision 1141 * details, where such DTO should be applied on one board revision, and should 1142 * not be applied on another board revision. 1143 * 1144 * Return: 0 to indicate DTO is not skipped, all else to indicate DTO is skipped. 1145 */ 1146int board_spl_fit_append_fdt_skip(const char *name); 1147 1148void board_boot_order(u32 *spl_boot_list); 1149void spl_save_restore_data(void); 1150 1151/** 1152 * spl_load_fit_image() - Fully parse and a FIT image in SPL 1153 * 1154 * @spl_image: SPL Image data to fill in 1155 * @header: Pointer to FIT image 1156 * Return 0 if OK, -ve on error 1157 */ 1158int spl_load_fit_image(struct spl_image_info *spl_image, 1159 const struct legacy_img_hdr *header); 1160 1161/* 1162 * spl_decompression_enabled() - check decompression support is enabled for SPL build 1163 * 1164 * Returns true if decompression support is enabled, else False 1165 */ 1166static inline bool spl_decompression_enabled(void) 1167{ 1168 return IS_ENABLED(CONFIG_SPL_GZIP) || IS_ENABLED(CONFIG_SPL_LZMA); 1169} 1170 1171/** 1172 * spl_write_upl_handoff() - Write a Universal Payload hand-off structure 1173 * 1174 * @spl_image: Information about the image being booted 1175 * Return: 0 if OK, -ve on error 1176 */ 1177int spl_write_upl_handoff(struct spl_image_info *spl_image); 1178 1179/** 1180 * spl_upl_init() - Get UPL ready for information to be added 1181 * 1182 * This must be called before upl_add_image(), etc. 1183 */ 1184void spl_upl_init(void); 1185 1186/** 1187 * spl_reloc_prepare() - Prepare the relocating loader ready for use 1188 * 1189 * Sets up the relocating loader ready for use. This must be called before 1190 * spl_reloc_jump() can be used. 1191 * 1192 * The memory layout is figured out, making use of the space between the top of 1193 * the current image and the top of memory. 1194 * 1195 * Once this is done, the relocating-jump code is copied into place at 1196 * image->rcode_buf 1197 * 1198 * @image: SPL image containing information. This is updated with various 1199 * necessary values. On entry, the size and fdt_size fields must be valid 1200 * @addrp: Returns the address to which the image should be loaded into memory 1201 * Return 0 if OK, -ENOSPC if there is not enough memory available 1202 */ 1203int spl_reloc_prepare(struct spl_image_info *image, ulong *addrp); 1204 1205/** 1206 * spl_reloc_jump() - Jump to an image, via a 'relocating-jump' region 1207 * 1208 * @image: SPL image to jump to 1209 * @func: Function to call in the final image 1210 */ 1211int spl_reloc_jump(struct spl_image_info *image, spl_jump_to_image_t func); 1212 1213#endif