1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright 2020 Broadcom. 4 * 5 */ 6 7 #ifndef __BCM_NS3_H 8 #define __BCM_NS3_H 9 10 #include <linux/sizes.h> 11 12 #define CONFIG_HOSTNAME "NS3" 13 14 /* Physical Memory Map */ 15 #define V2M_BASE 0x80000000 16 #define PHYS_SDRAM_1 V2M_BASE 17 18 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 19 #define CONFIG_SYS_LOAD_ADDR (PHYS_SDRAM_1 + 0x80000) 20 21 /* 22 * Initial SP before reloaction is placed at end of first DRAM bank, 23 * which is 0x1_0000_0000. 24 * Just before re-loaction, new SP is updated and re-location happens. 25 * So pointing the initial SP to end of 2GB DDR is not a problem 26 */ 27 #define CONFIG_SYS_INIT_SP_ADDR (PHYS_SDRAM_1 + 0x80000000) 28 /* 12MB Malloc size */ 29 #define CONFIG_SYS_MALLOC_LEN (SZ_8M + SZ_4M) 30 31 /* console configuration */ 32 #define CONFIG_SYS_NS16550_CLK 25000000 33 34 #define CONFIG_SYS_CBSIZE SZ_1K 35 #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ 36 sizeof(CONFIG_SYS_PROMPT) + 16) 37 #define CONFIG_SYS_MAXARGS 64 38 #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE 39 40 /* 41 * Increase max uncompressed/gunzip size, keeping size same as EMMC linux 42 * partition. 43 */ 44 #define CONFIG_SYS_BOOTM_LEN 0x01800000 45 46 /* Access eMMC Boot_1 and Boot_2 partitions */ 47 #define CONFIG_SUPPORT_EMMC_BOOT 48 49 /* enable 64-bit PCI resources */ 50 #define CONFIG_SYS_PCI_64BIT 1 51 52 #define CONSOLE_ARGS "console_args=console=ttyS0,115200n8\0" 53 #define MAX_CPUS "max_cpus=maxcpus=8\0" 54 #define OS_LOG_LEVEL "log_level=loglevel=7\0" 55 #define EXTRA_ARGS "extra_args=earlycon=uart8250,mmio32,0x68A10000 " \ 56 "earlyelog=" __stringify(ELOG_AP_UART_LOG_BASE) ",0x10000 " \ 57 "crashkernel=512M reboot=w\0" 58 59 #define PCIE_ARGS "pcie_args=pci=pcie_bus_safe pcie_ports=native vfio_pci.disable_idle_d3=1\0" 60 61 #ifdef CONFIG_BCM_SF2_ETH 62 #define ETH_ADDR "ethaddr=00:0A:F7:95:65:A4\0" 63 #define NET_ARGS "bgmac_platform.ethaddr=${ethaddr} " \ 64 "ip=${ipaddr}::${gatewayip}:${netmask}::${ethif}:off" 65 #else 66 #define ETH_ADDR 67 #define NET_ARGS 68 #endif 69 70 #define RESERVED_MEM "reserved_mem=memmap=0xff000000$0x1000000\0" 71 72 #define BASE_ARGS "${console_args} ${extra_args} ${pcie_args}" \ 73 " ${max_cpus} ${log_level} ${reserved_mem}" 74 #define SETBOOTARGS "setbootargs=setenv bootargs " BASE_ARGS " " NET_ARGS "\0" 75 76 #define UPDATEME_FLASH_PARAMS "bcm_compat_level=4\0" \ 77 "bcm_need_recovery_rootfs=0\0" \ 78 "bcm_bl_flash_pending_rfs_imgs=0\0" 79 80 #define KERNEL_LOADADDR_CFG \ 81 "fit_image_loadaddr=0x90000000\0" \ 82 "dtb_loadaddr=0x82000000\0" 83 84 #define INITRD_ARGS "initrd_args=root=/dev/ram rw\0" 85 #define INITRD_LOADADDR "initrd_loadaddr=0x92000000\0" 86 #define INITRD_IMAGE "initrd_image=rootfs-lake-bcm958742t.cpio.gz\0" 87 #define MMC_DEV "sd_device_number=0\0" 88 #define EXEC_STATE "exec_state=normal\0" 89 90 #define EXT4RD_ARGS "ext4rd_args="\ 91 "root=/dev/mmcblk${sd_device_number}p${gpt_partition_entry} rw rootwait\0" 92 93 #define WDT_CNTRL "wdt_enable=1\0" \ 94 "wdt_timeout_sec=0\0" 95 96 #define ELOG_SETUP \ 97 "mbox0_addr=0x66424024\0"\ 98 "elog_setup="\ 99 "if logsetup -s ${mbox0_addr}; then "\ 100 "else "\ 101 "echo ELOG is not supported by this version of the MCU patch.;"\ 102 "exit;"\ 103 "fi;"\ 104 "if logsetup -c ${mbox0_addr}; then "\ 105 "echo ELOG is ready;"\ 106 "else "\ 107 "echo ELOG is supported, but is not set up.;"\ 108 "echo Getting setup file from the server ${serverip}...;"\ 109 "if tftp ${tftp_dir}elog_src.txt; then "\ 110 "echo Setting up ELOG. Please wait...;"\ 111 "if logsetup ${loadaddr} ${mbox0_addr} ${filesize}; "\ 112 "then "\ 113 "else "\ 114 "echo [logsetup] ERROR.;"\ 115 "fi;"\ 116 "if logsetup -c ${mbox0_addr}; then "\ 117 "echo ELOG is READY.;"\ 118 "else "\ 119 "echo ELOG is NOT SET UP.;"\ 120 "fi;"\ 121 "else "\ 122 "echo ELOG setup file is not available on the server.;"\ 123 "fi;"\ 124 "fi \0" 125 126 /* eMMC partition for FIT images */ 127 #define FIT_MMC_PARTITION \ 128 "fit_partitions=" \ 129 "uuid_disk=${uuid_gpt_disk};" \ 130 "name=env,size=512K,uuid=${uuid_gpt_env};" \ 131 "name=Image_rsa.img,size=24MiB,uuid=${uuid_gpt_linux};" \ 132 "name=Image1_rsa.img,size=24MiB,uuid=${uuid_gpt_linux1};" \ 133 "name=Image2_rsa.img,size=24MiB,uuid=${uuid_gpt_linux2};" \ 134 "name=nitro,size=8MiB,uuid=${uuid_gpt_nitro};" \ 135 "name=recovery,size=940MiB,uuid=${uuid_gpt_recovery};" \ 136 "name=rootfs,size=-,uuid=${uuid_gpt_prootfs}\0" 137 138 #define QSPI_FLASH_NITRO_PARAMS \ 139 "spi_nitro_img_bin_start=0x400000\0" \ 140 "spi_nitro_img_bin_mirror_start=0x580000\0" \ 141 "spi_nitro_bspd_cfg_start=0x700000\0" \ 142 "spi_nitro_bspd_mirror_cfg_start=0x710000\0" \ 143 144 #define QSPI_ACCESS_ENABLE \ 145 "qspi_access_en=" \ 146 "mw 0x68a403e8 1;" \ 147 "mw 0x68a403ec 1;" \ 148 "mw 0x68a403f0 1;" \ 149 "mw 0x68a403f4 1;" \ 150 "mw 0x68a403f8 1;" \ 151 "mw 0x68a403fc 1 \0" 152 153 #define FUNC_QSPI_PROBE \ 154 "func_qspi_probe="\ 155 "if run qspi_access_en; then "\ 156 "else "\ 157 "echo ${errstr} run qspi_access_en ** FAILED **;"\ 158 "exit;"\ 159 "fi;"\ 160 "if sf probe 0; then "\ 161 "else "\ 162 "echo echo ${errstr} sf probe command ** FAILED **;"\ 163 "exit;"\ 164 "fi \0" 165 166 #define NITRO_FW_IMAGES \ 167 "nitro_bin=nitro.img\0" \ 168 "nitro_bspd_cfg=nitro_fb_bspd_config.bin\0" 169 170 #define FASTBOOT_NITRO_SETUP \ 171 "nitro_fastboot_type=1\0" \ 172 "nitro_fastboot_secure=1\0" \ 173 "nitro_fastboot_img_buffer=0\0" \ 174 "nitro_fit_img_loc=0x90000000\0" 175 176 #define FASTBOOT_SETUP \ 177 "fastboot_nitro_setup=" \ 178 "setenv errstr fastboot_setup;" \ 179 "run func_qspi_probe;" \ 180 /* first load header only */ \ 181 "if sf read ${nitro_fit_img_loc} "\ 182 "${spi_nitro_img_bin_start} 0x18; then "\ 183 "else "\ 184 "echo [fastboot_nitro_setup] sf read "\ 185 "${spi_nitro_img_bin_start} ** FAILED **;"\ 186 "exit;"\ 187 "fi;"\ 188 "if spi_nitro_images_addr ${nitro_fit_img_loc} "\ 189 "${spi_nitro_img_bin_start}; then "\ 190 "else "\ 191 "echo [fastboot_nitro_setup] spi_nitro_images_addr "\ 192 "** FAILED **;"\ 193 "exit;"\ 194 "fi \0" 195 196 #define CHECK_CHIMP_HS\ 197 "check_chimp_hs=chimp_hs"\ 198 "\0" 199 200 #define FASTBOOT_NITRO "fastboot_nitro=chimp_ld_secure\0" 201 202 #define FIT_IMAGE "fit_image=Image_rsa.img\0" 203 #define BOOTCMD_MMC_FIT \ 204 "bootcmd_mmc_fit="\ 205 "mmc dev ${sd_device_number};"\ 206 "if test $exec_state = normal; then " \ 207 "setenv use_rootfs rootfs;"\ 208 "else " \ 209 "setenv use_rootfs recovery;"\ 210 "fi;" \ 211 "echo used filesystem :${use_rootfs};"\ 212 "gpt setenv mmc ${sd_device_number} ${use_rootfs};"\ 213 "setenv bootargs_fs ${setbootargs} ${ext4rd_args}; run bootargs_fs;"\ 214 "gpt setenv mmc ${sd_device_number} ${fit_image};"\ 215 "mmc read ${fit_image_loadaddr} ${gpt_partition_addr} "\ 216 "${gpt_partition_size};"\ 217 "bootm ${fit_image_loadaddr}\0" 218 219 #define BOOTCMD_MMC_FITS \ 220 "bootcmd_mmc_fits="\ 221 "setenv mmc_fit0 " \ 222 "'setenv fit_image Image_rsa.img; run bootcmd_mmc_fit';"\ 223 "setenv mmc_fit1 " \ 224 "'setenv fit_image Image1_rsa.img; run bootcmd_mmc_fit';"\ 225 "setenv mmc_fit2 " \ 226 "'setenv fit_image Image2_rsa.img; run bootcmd_mmc_fit';"\ 227 "run mmc_fit0 || run mmc_fit1 || run mmc_fit2\0" 228 229 #define USBDEV "usbdev=0\0" 230 #define BOOTCMD_USB\ 231 "bootcmd_usb="\ 232 "setenv usb_image_loadaddr 90000000;"\ 233 "setenv fit_image Image_rsa.img;"\ 234 "setenv bootargs_fs ${setbootargs} ${initrd_args}; run bootargs_fs;"\ 235 "if usb dev ${usbdev}; && usb start; then "\ 236 "echo Booting from USB...;"\ 237 "fatload usb ${usbdev} ${usb_image_loadaddr} ${fit_image};"\ 238 "fatload usb ${usbdev} ${initrd_loadaddr} ${initrd_image};"\ 239 "bootm ${usb_image_loadaddr} ${initrd_loadaddr}:${filesize};"\ 240 "fi;"\ 241 "\0" 242 243 #define START_PCI\ 244 "start_pci=pci e "\ 245 "\0" 246 247 #define BNXT_LOAD\ 248 "bnxt_load=bnxt 0 probe "\ 249 "\0" 250 251 #define BOOTCMD_PXE\ 252 "bootcmd_pxe="\ 253 "run check_chimp_hs && "\ 254 "run start_pci && "\ 255 "run bnxt_load;"\ 256 "setenv ethact bnxt_eth0;"\ 257 "setenv autoload no;"\ 258 "setenv bootargs_fs ${setbootargs} ${initrd_args}; run bootargs_fs;"\ 259 "if dhcp; then "\ 260 "setenv pxefile_addr_r ${loadaddr};"\ 261 "if pxe get; then "\ 262 "setenv ramdisk_addr_r ${initrd_loadaddr};"\ 263 "setenv kernel_addr_r ${fit_image_loadaddr};"\ 264 "pxe boot; "\ 265 "fi;"\ 266 "fi;"\ 267 "\0" 268 269 #define FLASH_PENDING_RFS_IMGS \ 270 "flash_pending_rfs_imgs=" \ 271 "if test $bcm_bl_flash_pending_rfs_imgs = 1; then " \ 272 "if test $bl_flash_pending_rfs_imgs = rootfs; then " \ 273 "dhcp;" \ 274 "run mmc_flash_rootfs;" \ 275 "fi;" \ 276 "if test $bl_flash_pending_rfs_imgs = recovery; then " \ 277 "dhcp;" \ 278 "run mmc_flash_recovery;" \ 279 "fi;" \ 280 "setenv bl_flash_pending_rfs_imgs;" \ 281 "fi; \0" 282 283 #define CONFIG_BOOTCOMMAND "run flash_pending_rfs_imgs;" \ 284 "run fastboot_nitro && "\ 285 "run bootcmd_mmc_fits || "\ 286 "run bootcmd_usb || "\ 287 "run bootcmd_pxe" 288 289 /* Flashing commands */ 290 #define TFTP_QSPI_PARAM \ 291 "fip_qspi_addr=0x0\0"\ 292 "fip_qspi_mirror_addr=0x200000\0"\ 293 "loadaddr=0x90000000\0"\ 294 "tftpblocksize=1468\0"\ 295 "qspi_flash_fip=fip\0"\ 296 297 /* Flash fit_GPT partition to eMMC */ 298 #define MMC_FLASH_FIT_GPT \ 299 "mmc_flash_gpt="\ 300 "if mmc dev ${sd_device_number}; then "\ 301 "else "\ 302 "echo [mmc_flash_gpt] mmc dev ${sd_device_number} "\ 303 "** FAILED **;"\ 304 "exit;"\ 305 "fi;"\ 306 "if gpt write mmc ${sd_device_number} ${fit_partitions}; then "\ 307 "else "\ 308 "echo [mmc_flash_gpt] gpt write ${fit_partitions} "\ 309 "** FAILED **;"\ 310 "exit;"\ 311 "fi \0" 312 313 #define MMC_FLASH_IMAGE_RSA \ 314 "mmc_flash_image_rsa="\ 315 "if mmc dev ${sd_device_number}; then "\ 316 "else "\ 317 "echo [mmc_flash_image_rsa] mmc dev ${sd_device_number} "\ 318 "** FAILED **;"\ 319 "exit;"\ 320 "fi;"\ 321 "if gpt setenv mmc ${sd_device_number} ${fit_image}; then "\ 322 "else "\ 323 "echo [mmc_flash_image_rsa] gpt setenv ${fit_image} "\ 324 "** FAILED **;"\ 325 "exit;"\ 326 "fi;"\ 327 "if tftp ${loadaddr} ${tftp_dir}${fit_image}; then "\ 328 "if test ${fit_image} = Image_rsa.img; then "\ 329 "if setenv tftp_fit_image yes; then "\ 330 "else "\ 331 "echo [mmc_flash_image_rsa] "\ 332 "setenv tftp_fit_image to yes"\ 333 "** FAILED **;"\ 334 "exit;"\ 335 "fi;"\ 336 "fi;"\ 337 "else "\ 338 "if test ${fit_image} = Image_rsa.img; then "\ 339 "echo [mmc_flash_image_rsa] tftp "\ 340 "${tftp_dir}${fit_image} ** FAILED **;"\ 341 "else "\ 342 "if test ${tftp_fit_image} = yes; then "\ 343 "if mmc write ${loadaddr} "\ 344 "${gpt_partition_addr} "\ 345 "${fileblocks}; then "\ 346 "else "\ 347 "echo "\ 348 "[mmc_flash_image_rsa] "\ 349 "mmc write "\ 350 "${gpt_partition_addr} "\ 351 "** FAILED **;"\ 352 "exit;"\ 353 "fi;"\ 354 "else "\ 355 "echo [mmc_flash_image_rsa] tftp "\ 356 "${tftp_dir}${fit_image} "\ 357 "** FAILED **;"\ 358 "fi;"\ 359 "fi;"\ 360 "exit;"\ 361 "fi;"\ 362 "if math add filesize filesize 1FF; then "\ 363 "else "\ 364 "echo [mmc_flash_image_rsa] math add command ** FAILED **;"\ 365 "exit;"\ 366 "fi;"\ 367 "if math div fileblocks filesize 200; then "\ 368 "else "\ 369 "echo [mmc_flash_image_rsa] math div command ** FAILED **;"\ 370 "exit;"\ 371 "fi;"\ 372 "if mmc write ${loadaddr} ${gpt_partition_addr} ${fileblocks}; then "\ 373 "else "\ 374 "echo [mmc_flash_image_rsa] mmc write ${gpt_partition_addr} "\ 375 "** FAILED **;"\ 376 "exit;"\ 377 "fi;"\ 378 "if setenv image_sz_blk_cnt ${fileblocks}; then "\ 379 "else "\ 380 "echo [mmc_flash_image_rsa] setenv image_sz_blk_cnt ** "\ 381 "FAILED **;"\ 382 "exit;"\ 383 "fi;"\ 384 "if saveenv; then "\ 385 "else "\ 386 "echo [mmc_flash_image_rsa] saveenv command ** FAILED **;"\ 387 "exit;"\ 388 "fi \0" 389 390 #define MMC_FLASH_RECOVERY \ 391 "mmc_flash_recovery="\ 392 "if mmc dev ${sd_device_number}; then "\ 393 "else "\ 394 "echo [mmc_flash_recovery] mmc dev ${sd_device_number} "\ 395 "** FAILED **;"\ 396 "exit;"\ 397 "fi;"\ 398 "if gpt setenv mmc ${sd_device_number} recovery; then "\ 399 "else "\ 400 "echo [mmc_flash_recovery] gpt setenv recovery ** FAILED **;"\ 401 "exit;"\ 402 "fi;"\ 403 "setenv index 1;"\ 404 "while tftp ${loadaddr} "\ 405 "${tftp_dir}${gpt_partition_name}/chunk_00${index}; do "\ 406 "if math add filesize filesize 1FF; then "\ 407 "else "\ 408 "echo [mmc_flash_recovery] math add command "\ 409 "** FAILED **;"\ 410 "exit;"\ 411 "fi;"\ 412 "if math div fileblocks filesize 200; then "\ 413 "else "\ 414 "echo [mmc_flash_recovery] math div command "\ 415 "** FAILED **;"\ 416 "exit;"\ 417 "fi;"\ 418 "if mmc write ${loadaddr} ${gpt_partition_addr} "\ 419 "${fileblocks}; then "\ 420 "else "\ 421 "echo [mmc_flash_recovery] mmc write "\ 422 "${gpt_partition_addr} ** FAILED **;"\ 423 "exit;"\ 424 "fi;"\ 425 "if math add index index 1; then "\ 426 "else "\ 427 "echo [mmc_flash_recovery] math add command "\ 428 "** FAILED **;"\ 429 "exit;"\ 430 "fi;"\ 431 "if math add gpt_partition_addr gpt_partition_addr"\ 432 " ${fileblocks}; then "\ 433 "else "\ 434 "echo [mmc_flash_recovery] math add command"\ 435 " ** FAILED **;"\ 436 "exit;"\ 437 "fi;"\ 438 "done;"\ 439 "if itest ${index} -ne 1; then "\ 440 "else "\ 441 "echo [mmc_flash_recovery] "\ 442 "${tftp_dir}${gpt_partition_name}/chunk_00${index} file "\ 443 "not found ** FAILED **;"\ 444 "exit;"\ 445 "fi \0" 446 447 #define MMC_FLASH_ROOTFS \ 448 "mmc_flash_rootfs="\ 449 "if mmc dev ${sd_device_number}; then "\ 450 "else "\ 451 "echo [mmc_flash_rootfs] mmc dev ${sd_device_number} "\ 452 "** FAILED **;"\ 453 "exit;"\ 454 "fi;"\ 455 "if gpt setenv mmc ${sd_device_number} rootfs; then "\ 456 "else "\ 457 "echo [mmc_flash_rootfs] gpt setenv rootfs ** FAILED **;"\ 458 "exit;"\ 459 "fi;"\ 460 "setenv index 1;"\ 461 "while tftp ${loadaddr} "\ 462 "${tftp_dir}${gpt_partition_name}/chunk_00${index}; do "\ 463 "if math add filesize filesize 1FF; then "\ 464 "else "\ 465 "echo [mmc_flash_rootfs] math add command "\ 466 "** FAILED **;"\ 467 "exit;"\ 468 "fi;"\ 469 "if math div fileblocks filesize 200; then "\ 470 "else "\ 471 "echo [mmc_flash_rootfs] math div command "\ 472 "** FAILED **;"\ 473 "exit;"\ 474 "fi;"\ 475 "if mmc write ${loadaddr} ${gpt_partition_addr} "\ 476 "${fileblocks}; then "\ 477 "else "\ 478 "echo [mmc_flash_rootfs] mmc write "\ 479 "${gpt_partition_addr} ** FAILED **;"\ 480 "exit;"\ 481 "fi;"\ 482 "if math add index index 1; then "\ 483 "else "\ 484 "echo [mmc_flash_rootfs] math add command "\ 485 "** FAILED **;"\ 486 "exit;"\ 487 "fi;"\ 488 "if math add gpt_partition_addr gpt_partition_addr"\ 489 " ${fileblocks}; then "\ 490 "else "\ 491 "echo [mmc_flash_rootfs] math add command"\ 492 " ** FAILED **;"\ 493 "exit;"\ 494 "fi;"\ 495 "done;"\ 496 "if itest ${index} -ne 1; then "\ 497 "else "\ 498 "echo [mmc_flash_rootfs] "\ 499 "${tftp_dir}${gpt_partition_name}/chunk_00${index} file "\ 500 "not found ** FAILED **;"\ 501 "exit;"\ 502 "fi \0" 503 504 /* 505 * For individual flash commands like mmc_flash_gpt, it is not 506 * necessary to check for errors. 507 * If any of its intermediate commands fails, then next commands 508 * will not execute. Script will exit from the failure command. 509 * For uniformity, checking for mmc_flash_gpt, mmc_flash_image_rsa 510 * mmc_flash_nitro and mmc_flash_rootfs 511 */ 512 #define MMC_FLASH \ 513 "flash_mmc="\ 514 "if run mmc_flash_gpt; then "\ 515 "else "\ 516 "echo [flash_mmc] run mmc_flash_gpt ** FAILED **;"\ 517 "exit;"\ 518 "fi;"\ 519 "if setenv tftp_fit_image no; then "\ 520 "else "\ 521 "echo [flash_mmc] setenv tftp_fit_image to no "\ 522 "** FAILED **;"\ 523 "exit;"\ 524 "fi;"\ 525 "if setenv fit_image Image_rsa.img; then "\ 526 "else "\ 527 "echo [flash_mmc] setenv fit_image to Image_rsa.img "\ 528 "** FAILED **;"\ 529 "exit;"\ 530 "fi;"\ 531 "if run mmc_flash_image_rsa; then "\ 532 "else "\ 533 "echo [flash_mmc] run mmc_flash_image_rsa ** FAILED **;"\ 534 "exit;"\ 535 "fi;"\ 536 "if setenv fit_image Image1_rsa.img; then "\ 537 "else "\ 538 "echo [flash_mmc] setenv fit_image to Image1_rsa.img "\ 539 "** FAILED **;"\ 540 "exit;"\ 541 "fi;"\ 542 "if run mmc_flash_image_rsa; then "\ 543 "else "\ 544 "echo [flash_mmc] run mmc_flash_image_rsa "\ 545 "for Image1_rsa.img ** FAILED **;"\ 546 "exit;"\ 547 "fi;"\ 548 "if setenv fit_image Image2_rsa.img; then "\ 549 "else "\ 550 "echo [flash_mmc] setenv fit_image to Image2_rsa.img "\ 551 "** FAILED **;"\ 552 "exit;"\ 553 "fi;"\ 554 "if run mmc_flash_image_rsa; then "\ 555 "else "\ 556 "echo [flash_mmc] run mmc_flash_image_rsa "\ 557 "for Image2_rsa.img ** FAILED **;"\ 558 "exit;"\ 559 "fi;"\ 560 "if run mmc_flash_recovery; then "\ 561 "else "\ 562 "echo [flash_mmc] run mmc_flash_recovery ** FAILED **;"\ 563 "exit;"\ 564 "fi;"\ 565 "if run mmc_flash_rootfs; then "\ 566 "else "\ 567 "echo [flash_mmc] run mmc_flash_rootfs ** FAILED **;"\ 568 "exit;"\ 569 "fi \0" 570 571 #define FUNC_ALIGN_QSPI_ERASE_BLOCK_SIZE \ 572 "align_erase_blk_size=" \ 573 "setenv fl_write_size 0;" \ 574 "if math add fl_write_size filesize FFFF; then "\ 575 "else "\ 576 "echo ${errstr} math add command ** FAILED **;"\ 577 "exit;"\ 578 "fi;"\ 579 "if math div fl_write_size fl_write_size 10000; then "\ 580 "else "\ 581 "echo ${errstr} math div command ** FAILED **;"\ 582 "exit;"\ 583 "fi;"\ 584 "if math mul fl_write_size fl_write_size 10000; then "\ 585 "else "\ 586 "echo ${errstr} math mul command ** FAILED **;"\ 587 "exit;"\ 588 "fi \0" 589 590 #define QSPI_FLASH_FIP \ 591 "flash_fip="\ 592 "if run qspi_access_en; then "\ 593 "else "\ 594 "echo [flash_fip] run qspi_access_en ** FAILED **;"\ 595 "exit;"\ 596 "fi;"\ 597 "if tftp ${loadaddr} ${tftp_dir}fip.bin; then "\ 598 "else "\ 599 "echo [flash_fip] tftp ${tftp_dir}fip.bin "\ 600 "** FAILED **;"\ 601 "exit;"\ 602 "fi;"\ 603 "if math add tmpsize filesize FFFF; then "\ 604 "else "\ 605 "echo [flash_fip] math add command ** FAILED **;"\ 606 "exit;"\ 607 "fi;"\ 608 "if math div tmpsize tmpsize 10000; then "\ 609 "else "\ 610 "echo [flash_fip] math div command ** FAILED **;"\ 611 "exit;"\ 612 "fi;"\ 613 "if math mul tmpsize tmpsize 10000; then "\ 614 "else "\ 615 "echo [flash_fip] math mul command ** FAILED **;"\ 616 "exit;"\ 617 "fi;"\ 618 "if sf probe 0; then "\ 619 "else "\ 620 "echo [flash_fip] sf probe command ** FAILED **;"\ 621 "exit;"\ 622 "fi;"\ 623 "if sf erase ${fip_qspi_addr} ${tmpsize}; then "\ 624 "else "\ 625 "echo [flash_fip] sf erase ${fip_qspi_addr} ** FAILED **;"\ 626 "exit;"\ 627 "fi;"\ 628 "if sf write ${loadaddr} ${fip_qspi_addr} ${filesize}; then "\ 629 "else "\ 630 "echo [flash_fip] sf write ${fip_qspi_addr} ** FAILED **;"\ 631 "exit;"\ 632 "fi;"\ 633 /* Flash mirror FIP image */ \ 634 "if sf erase ${fip_qspi_mirror_addr} ${tmpsize}; then "\ 635 "else "\ 636 "echo [flash_fip] sf erase ${fip_qspi_mirror_addr} "\ 637 "** FAILED **;"\ 638 "exit;"\ 639 "fi;"\ 640 "if sf write ${loadaddr} ${fip_qspi_mirror_addr} ${filesize}; then "\ 641 "else "\ 642 "echo [flash_fip] sf write ${fip_qspi_mirror_addr} "\ 643 "** FAILED **;"\ 644 "exit;"\ 645 "fi \0" 646 647 #define QSPI_FLASH_NITRO \ 648 "flash_nitro="\ 649 "run func_qspi_probe; "\ 650 "if tftp ${loadaddr} ${tftp_dir}${nitro_bin}; then "\ 651 "else "\ 652 "echo [flash_nitro] tftp ${tftp_dir}${nitro_bin} "\ 653 "** FAILED **;"\ 654 "exit;"\ 655 "fi;"\ 656 "setenv errstr flash_nitro;" \ 657 "run align_erase_blk_size;" \ 658 /* Flash Nitro fw fit + configuration */ \ 659 "if sf erase ${spi_nitro_img_bin_start} ${fl_write_size}; then "\ 660 "else "\ 661 "echo [flash_nitro] sf erase ${spi_nitro_img_bin_start} "\ 662 "** FAILED **;"\ 663 "exit;"\ 664 "fi;"\ 665 "if sf write ${loadaddr} ${spi_nitro_img_bin_start}" \ 666 " ${fl_write_size}; then "\ 667 "else "\ 668 "echo [flash_nitro] sf write ${spi_nitro_bin_start} "\ 669 "** FAILED **;"\ 670 "exit;"\ 671 "fi;"\ 672 /* Mirror of Flash Nitro fw fit + configuration */ \ 673 "if sf erase ${spi_nitro_img_bin_mirror_start} ${fl_write_size}; then "\ 674 "else "\ 675 "echo [flash_nitro] sf erase "\ 676 "${spi_nitro_img_bin_mirror_start} "\ 677 "** FAILED **;"\ 678 "exit;"\ 679 "fi;"\ 680 "if sf write ${loadaddr} ${spi_nitro_img_bin_mirror_start}" \ 681 " ${fl_write_size}; then "\ 682 "else "\ 683 "echo [flash_nitro] sf write "\ 684 "${spi_nitro_img_bin_mirror_start} "\ 685 "** FAILED **;"\ 686 "exit;"\ 687 "fi \0" 688 689 #define QSPI_FLASH_NITRO_BSPD_CONFIG \ 690 "flash_nitro_bspd_config="\ 691 "run func_qspi_probe; "\ 692 /* Flash BSPD configuration */ \ 693 "if tftp ${loadaddr} ${tftp_dir}${nitro_bspd_cfg}; then "\ 694 "setenv bspd_cfg_avialable 1; "\ 695 "setenv errstr flash_nitro_bspd_config; "\ 696 "run align_erase_blk_size;" \ 697 "if sf erase ${spi_nitro_bspd_cfg_start} "\ 698 "${fl_write_size}; then "\ 699 "else "\ 700 "echo [flash_nitro] sf erase "\ 701 "${spi_nitro_bspd_cfg_start} "\ 702 "** FAILED **;"\ 703 "exit;"\ 704 "fi;"\ 705 "if sf write ${loadaddr} ${spi_nitro_bspd_cfg_start} "\ 706 "${fl_write_size}; then "\ 707 "else "\ 708 "echo [flash_nitro] sf write "\ 709 "${spi_nitro_bspd_cfg_start} "\ 710 "** FAILED **;"\ 711 "exit;"\ 712 "fi;" \ 713 /* Flash BSPD mirror configuration */ \ 714 "if sf erase ${spi_nitro_bspd_mirror_cfg_start} "\ 715 "${fl_write_size}; then "\ 716 "else "\ 717 "echo [flash_nitro] sf erase "\ 718 "${spi_nitro_bspd_mirror_cfg_start} "\ 719 "** FAILED **;"\ 720 "exit;"\ 721 "fi;"\ 722 "if sf write ${loadaddr} ${spi_nitro_bspd_mirror_cfg_start} "\ 723 "${fl_write_size}; then "\ 724 "else "\ 725 "echo [flash_nitro] sf write "\ 726 "${spi_nitro_bspd_mirror_cfg_start} "\ 727 "** FAILED **;"\ 728 "exit;"\ 729 "fi;" \ 730 "else "\ 731 "echo [flash_nitro] tftp ${tftp_dir}${nitro_bspd_cfg} "\ 732 "** Skip flashing bspd config file **;"\ 733 "fi \0" 734 735 #define QSPI_FLASH \ 736 "flash_qspi="\ 737 "if run qspi_access_en; then "\ 738 "else "\ 739 "echo [flash_qspi] run qspi_access_en ** FAILED **;"\ 740 "exit;"\ 741 "fi;"\ 742 "if run flash_fip; then "\ 743 "else "\ 744 "echo [flash_qspi] run flash_fip ** FAILED **;"\ 745 "exit;"\ 746 "fi;"\ 747 "if run flash_nitro; then "\ 748 "else "\ 749 "echo [flash_qspi] run flash_nitro ** FAILED **;"\ 750 "exit;"\ 751 "fi \0" 752 753 #define FLASH_IMAGES \ 754 "flash_images=" \ 755 "if run flash_qspi; then "\ 756 "else "\ 757 "echo [flash_images] run flash_qspi ** FAILED **;"\ 758 "exit;"\ 759 "fi;"\ 760 "if run flash_mmc; then "\ 761 "else "\ 762 "echo [flash_images] run flash_mmc ** FAILED **;"\ 763 "exit;"\ 764 "fi \0" 765 766 #define ARCH_ENV_SETTINGS \ 767 CONSOLE_ARGS \ 768 MAX_CPUS \ 769 OS_LOG_LEVEL \ 770 EXTRA_ARGS \ 771 PCIE_ARGS \ 772 ETH_ADDR \ 773 RESERVED_MEM \ 774 SETBOOTARGS \ 775 UPDATEME_FLASH_PARAMS \ 776 KERNEL_LOADADDR_CFG\ 777 INITRD_ARGS \ 778 INITRD_LOADADDR \ 779 INITRD_IMAGE \ 780 MMC_DEV \ 781 EXEC_STATE \ 782 EXT4RD_ARGS \ 783 WDT_CNTRL \ 784 ELOG_SETUP \ 785 FIT_MMC_PARTITION \ 786 QSPI_FLASH_NITRO_PARAMS \ 787 QSPI_ACCESS_ENABLE \ 788 FUNC_QSPI_PROBE \ 789 NITRO_FW_IMAGES \ 790 FASTBOOT_NITRO_SETUP \ 791 FASTBOOT_SETUP \ 792 CHECK_CHIMP_HS \ 793 FASTBOOT_NITRO \ 794 FIT_IMAGE \ 795 BOOTCMD_MMC_FIT \ 796 BOOTCMD_MMC_FITS \ 797 USBDEV \ 798 BOOTCMD_USB \ 799 START_PCI \ 800 BNXT_LOAD \ 801 BOOTCMD_PXE \ 802 FLASH_PENDING_RFS_IMGS \ 803 TFTP_QSPI_PARAM \ 804 MMC_FLASH_FIT_GPT \ 805 MMC_FLASH_IMAGE_RSA \ 806 MMC_FLASH_RECOVERY \ 807 MMC_FLASH_ROOTFS \ 808 MMC_FLASH \ 809 FUNC_ALIGN_QSPI_ERASE_BLOCK_SIZE \ 810 QSPI_FLASH_FIP \ 811 QSPI_FLASH_NITRO \ 812 QSPI_FLASH_NITRO_BSPD_CONFIG \ 813 QSPI_FLASH \ 814 FLASH_IMAGES 815 816 #define CONFIG_EXTRA_ENV_SETTINGS \ 817 ARCH_ENV_SETTINGS 818 819 #endif /* __BCM_NS3_H */ 820