| // SPDX-License-Identifier: GPL-2.0-or-later OR MIT |
| /* |
| * Copyright (c) 2024-2026 TQ-Systems GmbH <u-boot@ew.tq-group.com>, |
| * D-82229 Seefeld, Germany. |
| * Author: Max Merchel |
| * |
| * shared mmc environment for TQ boards |
| */ |
| |
| addmmc= |
| setenv bootargs "${bootargs}" |
| root=/dev/mmcblk"${mmcblkdev}"p"${mmcrootpart}" "${rootfsmode}" rootwait; |
| |
| get_blockcount= |
| setexpr blkc "${filesize}" + 0x1ff; |
| setexpr blkc "${blkc}" / 0x200; |
| |
| load_mmc= |
| mmc dev "${mmcdev}"; mmc rescan; |
| load mmc "${mmcdev}":"${mmcpart}" "${kernel_addr_r}" /boot/"${image}"; |
| load mmc "${mmcdev}":"${mmcpart}" "${fdt_addr_r}" /boot/"${fdtfile}"; |
| fdt address "${fdt_addr_r}"; |
| fdt resize 0x100000; |
| for overlay in "${fdt_overlays}"; do |
| load mmc "${mmcdev}":"${mmcpart}" "${fdtoverlay_addr_r}" |
| /boot/"${overlay}" && fdt apply "${fdtoverlay_addr_r}"; |
| done; |
| |
| mmcargs=run addtty addmmc |
| |
| mmcboot= |
| echo "Booting from mmc ..."; |
| setenv bootargs && run mmcargs && |
| if run load_mmc; then |
| run boot_os; |
| else |
| echo "ERROR: loading from mmc"; |
| fi; |
| |
| mmcpart=2 |
| |
| mmc_finish_update_uboot= |
| mmc write "${loadaddr}" "${update_start_blk}" "${blkc}"; |
| mmc dev "${mmcdev}" 0; |
| setenv update_part; |
| setenv update_start_blk; |
| setenv blkc; |
| |
| mmc_prepare_update_uboot= |
| echo "Write U-Boot to mmc "${mmcdev}" ..."; |
| mmc dev "${mmcdev}"; mmc rescan; |
| run get_blockcount; |
| setenv update_start_blk "${uboot_mmc_start}"; |
| setenv update_part 0; |
| |
| mmc_switch_part= |
| mmc partconf "${mmcdev}" update_part; |
| mmc dev "${mmcdev}" "${update_part}"; |
| |
| mmcrootpart=2 |
| |
| update_uboot_mmc= |
| run check_ipaddr; |
| if tftp "${uboot}"; then |
| run mmc_prepare_update_uboot; |
| if itest "${blkc}" >= "${uboot_mmc_size}"; then |
| echo "ERROR: size to large ..."; |
| exit; |
| fi; |
| if itest "${mmcdev}" == "${emmc_dev}"; then |
| run mmc_switch_part; |
| if itest "${update_part}" > 0 ; then |
| if env exists emmc_bootp_start; then |
| setenv update_start_blk "${emmc_bootp_start}"; |
| else |
| echo "ERROR: eMMC boot partition block unset"; |
| exit; |
| fi; |
| fi; |
| fi; |
| run mmc_finish_update_uboot; |
| fi; |