From 39667e41bcd3e76e8aae61d142ebd5adf0fa7b58 Mon Sep 17 00:00:00 2001 From: CyberMind-FR Date: Mon, 6 Apr 2026 18:07:30 +0200 Subject: [PATCH] fix: ESPRESSObin v7 eMMC boot - DTB, root device, mv88e6xxx blacklist - Use armada-3720-espressobin-v7-emmc.dtb to enable both SDHCI controllers - Fix root device: /dev/mmcblk1p2 (eMMC is mmc1 with dual controller DTB) - Add modprobe.blacklist=mv88e6xxx,dsa_core to prevent DSA probe loop - Add sdhci.debug_quirks2=0x40 to fix xenon-sdhci DDR timing issues - Add initramfs hooks for sdhci-xenon and mv88e6xxx blacklist - Add systemd service to load mv88e6xxx after rootfs mount - Fix fstab tmpfs mount (remove non-existent user reference) Co-Authored-By: Claude Opus 4.5 --- board/espressobin-ultra/boot.cmd | 53 +++++ board/espressobin-ultra/boot.scr | Bin 0 -> 1964 bytes board/espressobin-v7/boot.cmd | 91 +++++++++ board/espressobin-v7/boot.scr | Bin 0 -> 2167 bytes board/espressobin-v7/config.mk | 4 +- board/mochabin/boot.cmd | 70 +++++++ board/mochabin/boot.scr | Bin 0 -> 2209 bytes image/build-image.sh | 199 ++++++++++++++++--- image/initramfs-hooks/mv88e6xxx-blacklist | 25 +++ image/initramfs-hooks/mv88e6xxx-load.service | 15 ++ image/initramfs-hooks/sdhci-xenon | 21 ++ 11 files changed, 446 insertions(+), 32 deletions(-) create mode 100644 board/espressobin-ultra/boot.cmd create mode 100644 board/espressobin-ultra/boot.scr create mode 100644 board/espressobin-v7/boot.cmd create mode 100644 board/espressobin-v7/boot.scr create mode 100644 board/mochabin/boot.cmd create mode 100644 board/mochabin/boot.scr create mode 100644 image/initramfs-hooks/mv88e6xxx-blacklist create mode 100644 image/initramfs-hooks/mv88e6xxx-load.service create mode 100755 image/initramfs-hooks/sdhci-xenon diff --git a/board/espressobin-ultra/boot.cmd b/board/espressobin-ultra/boot.cmd new file mode 100644 index 00000000..01024b19 --- /dev/null +++ b/board/espressobin-ultra/boot.cmd @@ -0,0 +1,53 @@ +# SecuBox U-Boot boot script for ESPRESSObin Ultra +# Marvell Armada 3720 with 88E6341 DSA switch + eMMC +# Compile with: mkimage -C none -A arm64 -T script -d boot.cmd boot.scr + +echo "============================================" +echo "SecuBox ESPRESSObin Ultra Boot" +echo "============================================" + +# Detect boot device +if test -n "${devtype}" -a -n "${devnum}"; then + echo "Boot device from env: ${devtype} ${devnum}" + setenv bootdev "${devnum}" +else + echo "Probing boot devices..." + # ESPRESSObin Ultra: U-Boot eMMC = mmc1, Linux eMMC = mmcblk0 + setenv bootdev 1 + echo "Using mmc 1 (eMMC in U-Boot)" +fi + +setenv bootpart "mmc ${bootdev}:1" +# IMPORTANT: Linux sees eMMC as mmcblk0 even though U-Boot sees it as mmc1 +setenv rootpart "/dev/mmcblk0p2" + +echo "Boot partition: ${bootpart}" +echo "Root partition: ${rootpart}" + +# Load kernel +echo "Loading kernel..." +load ${bootpart} ${kernel_addr_r} Image + +# Load DTB +echo "Loading device tree..." +# Try espressobin-ultra first, then v7-emmc as fallback +if load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin-ultra.dtb; then + echo "DTB: espressobin-ultra" +elif load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin-v7-emmc.dtb; then + echo "DTB: espressobin-v7-emmc (fallback)" +else + echo "DTB: trying espressobin-emmc..." + load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin-emmc.dtb +fi + +# Set boot args +# rootdelay=5: give storage time to settle +# mv88e6xxx.defer_ms=5000: delay DSA switch probe to prevent boot loop +setenv bootargs "root=${rootpart} rootfstype=ext4 rootwait rootdelay=5 console=ttyMV0,115200 net.ifnames=0 mv88e6xxx.defer_ms=5000" + +echo "Boot args: ${bootargs}" +echo "============================================" +echo "Booting SecuBox..." +echo "============================================" + +booti ${kernel_addr_r} - ${fdt_addr_r} diff --git a/board/espressobin-ultra/boot.scr b/board/espressobin-ultra/boot.scr new file mode 100644 index 0000000000000000000000000000000000000000..4a0c3d98907a9ee89824498c4c244bb8dc464d31 GIT binary patch literal 1964 zcmb_d&2G~`5bmWQ`HF<#HgYQgqE4OCmMX}H{vD7SsG5{(wXw&^sUdD8dJOJ)WO$e!lUu^`{>`Jvsd*zkYnQw)QYvtFF(tU)I(iKd4{- z@O+r?#|`LVJULP`xD1YzvM}JAiM1SCNR@`u-ucC8ulIf+3%Jaz7TyMQg`Q%T!J*DY zBH-2Qoe*xM9l^oD>He$THk|Yh!H^^#!Arny_n3^1RX&y(I>ip;*D@DFgy0woRnYSg zgwFSOA?Vl9gT#Sp#d&ogRGx?NNP!>S7vv2sm^b^=kG82 zhwu8G3WY&5B@|)UJ!1i!VnIb!li{dN!0AZ~rB=I+rpbF5ZJUB@R}RKI)YL{VSVLN= z3hn{}V!@&wmJ1TV4=S}+QX$M|N+fWNy1=Y*$`UR|DRd3USgGNh&gIuDktF&`FW@ax zW$EvvfAo{HvYlWxqVu=`eLV*>V~xge+k*)+7gDK>-EuPr)7JrVnW-wN$g+WmuX%2N z0VYlC5=mkQW;-wGzfFWC`Ugz^U?o_KR9D8Epm$brQ8lyw6uQdl?}FDQcwQHP#_=cC zIKWoVxn<21xpYhR{EwPBhg34h2VTn6MiF{wXpnfU63oOr+UvkjP7#b%nir^*Io%Wx zhirzVnokc7aDO(NwGvEGU*#s+3&XGj&c3;t$FvfhEzJqhriz#;HLf|r1J4M+X8_UW z?Q*;wqSWwWi*ROl-TRFonl+$8tO}ztjI5n^KZIND_TEkyLV>m=(?aBEqVRWkf21LU ls2RxTB?IrbuJ4G=4Xu6%u8;rnTk*I&a+R(Di5jHwz5@X_Yia-h literal 0 HcmV?d00001 diff --git a/board/espressobin-v7/boot.cmd b/board/espressobin-v7/boot.cmd new file mode 100644 index 00000000..339e342f --- /dev/null +++ b/board/espressobin-v7/boot.cmd @@ -0,0 +1,91 @@ +# SecuBox U-Boot boot script for ESPRESSObin v7 +# Marvell Armada 3720 with 88E6341 DSA switch + eMMC +# Compile with: mkimage -C none -A arm64 -T script -d boot.cmd boot.scr + +echo "============================================" +echo "SecuBox ESPRESSObin v7 Boot" +echo "============================================" + +# Detect boot device from U-Boot environment +# devtype/devnum set by distroboot; fallback to probing +if test -n "${devtype}" -a -n "${devnum}"; then + echo "Boot device from env: ${devtype} ${devnum}" + setenv bootdev "${devnum}" +else + echo "Probing boot devices..." + # ESPRESSObin v7: SD card = mmc0, eMMC = mmc1 + setenv bootdev 1 + echo "Using mmc 1 (eMMC)" +fi + +setenv bootpart "mmc ${bootdev}:1" + +# With the v7-emmc DTB, both SDHCI controllers are enabled: +# - mmc0 (d00d0000) = SD card slot → mmcblk0 (if card present) +# - mmc1 (d00d8000) = eMMC → mmcblk1 +# So eMMC rootfs is on mmcblk1p2 +setenv rootpart "/dev/mmcblk1p2" + +echo "Boot partition: ${bootpart}" +echo "Root partition: ${rootpart}" + +# Load kernel +echo "Loading kernel from ${bootpart}..." +if load ${bootpart} ${kernel_addr_r} Image; then + echo "Kernel loaded OK" +else + echo "ERROR: Failed to load kernel from ${bootpart}" + # Try alternate device + if test "${bootdev}" = "0"; then + setenv bootdev 1 + else + setenv bootdev 0 + fi + setenv bootpart "mmc ${bootdev}:1" + echo "Retrying with ${bootpart}..." + load ${bootpart} ${kernel_addr_r} Image +fi + +# Load DTB - try eMMC variant FIRST since we're booting from eMMC +# The v7-emmc DTB enables the second SDHCI controller (d00d8000) for eMMC +echo "Loading device tree..." +if load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin-v7-emmc.dtb; then + echo "DTB loaded: armada-3720-espressobin-v7-emmc.dtb (eMMC enabled)" +elif load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin-emmc.dtb; then + echo "DTB loaded: armada-3720-espressobin-emmc.dtb (fallback eMMC)" +elif load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin-v7.dtb; then + echo "DTB loaded: armada-3720-espressobin-v7.dtb (WARNING: no eMMC support)" +else + echo "ERROR: No compatible DTB found!" + echo "Trying generic espressobin DTB..." + load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-3720-espressobin.dtb +fi + +# Load initramfs (required for sdhci-xenon driver on eMMC) +echo "Loading initramfs..." +if load ${bootpart} ${ramdisk_addr_r} initrd.img; then + echo "Initramfs loaded OK" + setenv initrd_size ${filesize} + setenv use_initrd 1 +else + echo "WARNING: No initramfs found - eMMC may not be detected!" + setenv use_initrd 0 +fi + +# Set boot args +# rootdelay=5: give storage time to settle +# modprobe.blacklist: prevent mv88e6xxx DSA driver from loading during initramfs +# sdhci.debug_quirks2=0x40: fix xenon-sdhci DDR timing issues on eMMC +# mmc_core.use_spi_crc=0: disable CRC checks that can cause timeouts +setenv bootargs "root=${rootpart} rootfstype=ext4 rootwait rootdelay=5 console=ttyMV0,115200 net.ifnames=0 modprobe.blacklist=mv88e6xxx,dsa_core sdhci.debug_quirks2=0x40" + +echo "Boot args: ${bootargs}" +echo "============================================" +echo "Booting SecuBox..." +echo "============================================" + +if test "${use_initrd}" = "1"; then + booti ${kernel_addr_r} ${ramdisk_addr_r}:${initrd_size} ${fdt_addr_r} +else + booti ${kernel_addr_r} - ${fdt_addr_r} +fi diff --git a/board/espressobin-v7/boot.scr b/board/espressobin-v7/boot.scr new file mode 100644 index 0000000000000000000000000000000000000000..ce2efc1fe34c8bfaec1cf06e2022c3a6a2d5fc64 GIT binary patch literal 2167 zcmb7F+iu%95Y0;$g+5?`eH$nNwgFbQoaP1>!XmcGBnl+s*a-X? z{fm9yr~Qikh5eAukW#E%8Z>&)g*+UdIcGTf{nc+@#MgiSl>hzxac%AO-dc10^Y#C4 zuYUcd{e0&6y3dpAFvj%yP|e|Ubf}bt3ExbrWo;o>8cxQaMknL(*+f<_+Y8p=ROlHN z1sv#7WCGsqZN+dS?G*O+Pj=sK58!xw0ER}=DWQ*4S<3<)VhH7xEX5^4bOe>E=y?D_ zm%G~#ows{NnWNB4%jSi+1OcW~1!3}nD{R)Z>2>qqMBDingiOMKGCD?!X`@qyGnpdf zT9vJSSk0tXRf&})FahkM#y&l(>kbWpx?I94s0O zQ3c_~Z4+Y|LL^p06mA*513Sek0J^+F&cZG$qBDe54FBrZx>ZDo5KeJg)$Hb{u`t+) z{K<3k_2G9gy+X73gd3&arJf7r{&;{ykqhN!n;bwJ(%;xJoc^wYXyezhyF3zTR1|i z7c94HQ5}KrYWF9VcSY9td3=8Oz)Y_hSdI9Mqj_fU?9A-M^h@7M`_u%fmqy%6BQ$&{ z40nQPw$~%vBhzXBCmmlWn|(JK5|xF^SzTLjd+}Mz<-Bv6$aYp{87}tY=HzVXZ!oOJD<;c8Rn=j zN|WrwaXh3FrS+X3jq99lEhRalhT?ZDl&afP&lH#egiIjWxNXa5=@{jP`*ebHyY0Sj zgtT3%kgCe40uyT&r(fbf27{fgIED&sPv(^<(IoMY_}=d)OrmWi{C?L;UiK$ibtv|* Y`O7)u{LIUu1uTzz+;k!u>Np;J2ZME^+W-In literal 0 HcmV?d00001 diff --git a/board/espressobin-v7/config.mk b/board/espressobin-v7/config.mk index 197cc51f..3db3cb1a 100644 --- a/board/espressobin-v7/config.mk +++ b/board/espressobin-v7/config.mk @@ -11,7 +11,9 @@ CROSS_COMPILE=aarch64-linux-gnu- # Kernel KERNEL_VERSION=6.6 -KERNEL_DTS=armada-3720-espressobin-v7 +# Use eMMC variant DTB - enables second SDHCI controller (d00d8000) for eMMC +# Non-eMMC boards will still boot but won't have eMMC support +KERNEL_DTS=armada-3720-espressobin-v7-emmc KERNEL_IMAGE=Image KERNEL_DEFCONFIG=mvebu_v8_defconfig diff --git a/board/mochabin/boot.cmd b/board/mochabin/boot.cmd new file mode 100644 index 00000000..1190f1a9 --- /dev/null +++ b/board/mochabin/boot.cmd @@ -0,0 +1,70 @@ +# SecuBox U-Boot boot script for MOCHAbin +# Marvell Armada 7040 with Topaz 88E6141/6341 switch +# Compile with: mkimage -C none -A arm64 -T script -d boot.cmd boot.scr + +echo "============================================" +echo "SecuBox MOCHAbin Boot" +echo "============================================" + +# Detect boot device +if test -n "${devtype}" -a -n "${devnum}"; then + echo "Boot device from env: ${devtype} ${devnum}" + setenv bootdev "${devnum}" +else + echo "Probing boot devices..." + # MOCHAbin: eMMC=mmc0, SD=mmc1 (opposite of ESPRESSObin) + if test -e mmc 0:1 Image; then + setenv bootdev 0 + echo "Found boot on mmc 0 (eMMC)" + elif test -e mmc 1:1 Image; then + setenv bootdev 1 + echo "Found boot on mmc 1 (SD)" + else + echo "WARN: No Image found, trying mmc 0" + setenv bootdev 0 + fi +fi + +setenv bootpart "mmc ${bootdev}:1" +setenv rootpart "/dev/mmcblk${bootdev}p2" + +echo "Boot partition: ${bootpart}" +echo "Root partition: ${rootpart}" + +# Load kernel +echo "Loading kernel..." +if load ${bootpart} ${kernel_addr_r} Image; then + echo "Kernel loaded OK" +else + echo "ERROR: Failed to load kernel" + if test "${bootdev}" = "0"; then + setenv bootdev 1 + else + setenv bootdev 0 + fi + setenv bootpart "mmc ${bootdev}:1" + setenv rootpart "/dev/mmcblk${bootdev}p2" + echo "Retrying with ${bootpart}..." + load ${bootpart} ${kernel_addr_r} Image +fi + +# Load DTB +echo "Loading device tree..." +if load ${bootpart} ${fdt_addr_r} dtbs/marvell/armada-7040-mochabin.dtb; then + echo "DTB loaded OK" +else + echo "Trying alternate DTB path..." + load ${bootpart} ${fdt_addr_r} armada-7040-mochabin.dtb +fi + +# Set boot args +# rootdelay=5: give storage time to settle +# mv88e6xxx.defer_ms=5000: delay DSA switch probe +setenv bootargs "root=${rootpart} rootfstype=ext4 rootwait rootdelay=5 console=ttyMV0,115200 net.ifnames=0 mv88e6xxx.defer_ms=5000" + +echo "Boot args: ${bootargs}" +echo "============================================" +echo "Booting SecuBox..." +echo "============================================" + +booti ${kernel_addr_r} - ${fdt_addr_r} diff --git a/board/mochabin/boot.scr b/board/mochabin/boot.scr new file mode 100644 index 0000000000000000000000000000000000000000..826b3168a9c47c8241bed1243d41af93725e3b04 GIT binary patch literal 2209 zcmb7F&2G~`5bgz3`NRo{+sIS`q&l%nS}G$WrAZN}q(w<7;#6(zakHxJwd`$3TSdGJ zcOC?Z8*joBFuQ9fZc9sRMe%y~o8NC{_Su6c2Y(*DS?0gbe=IF6v!&|!`Rn_)2ag}t zpSQf1zo^5fFv9S3OHARDvn7OtBlTB?1>M^Xw>P|w*WP&9@t~xGa7;oyk>)%>4fG*B;VC;taC(r5jNV;fMY_=e zXTLV;MB0Z|m{tpN#~1@fakQ z5}XX|l?&RGXF1MnaM)riJ56WyYmj5iETG4PqZ4klKwO9vFq`qL-WT%5NF4RO=F>KwOY1@5R(I6gl8a0gic+UGW_3LeX#*}nYV`!6 z^8FxK1SeQzm{dyDj*87}>KdWcCkoflPiq4>WKmQc7PD)l8y9!9YAuct?Cp?WmkV=y zINTfh@Rrd`h(HQs$>=tjt%;{zsW~V&}@4$^LbM8n8Nx zVBbiRLYpKEv8oq692;4jci&RHan%64j|c$?-f zO>sv}aVHhwm{E(j2+?R{6AoFvh0uM|8Z41SJ)@za;5n1y+k$O6b(0@e@FT3IEh~;o zs$j)Lgb6zf)_pkU6NFNVLft8nr}QV(=#dE$G@Wd2;>L73ZABPkahR6Dy6d_=XnE+5 zy45uWIgLxK8&XxBG6uG?6|7v;`W+hqfBD GT7Lmw(xPer literal 0 HcmV?d00001 diff --git a/image/build-image.sh b/image/build-image.sh index 21ef10bf..50fc9039 100755 --- a/image/build-image.sh +++ b/image/build-image.sh @@ -240,7 +240,7 @@ if [[ $IS_X64 -eq 1 ]]; then LABEL=rootfs / ext4 defaults,noatime,commit=60 0 1 LABEL=data /data ext4 defaults,noatime 0 2 LABEL=ESP /boot/efi vfat umask=0077 0 0 -tmpfs /run/secubox tmpfs mode=0750,uid=1000,gid=1000 0 0 +tmpfs /run/secubox tmpfs mode=0755 0 0 EOF else cat > "${ROOTFS}/etc/fstab" < "${ROOTFS}/etc/initramfs-tools/hooks/sdhci-xenon" <<'HOOK' +#!/bin/sh +PREREQ="" +prereqs() { echo "$PREREQ"; } +case "$1" in prereqs) prereqs; exit 0;; esac +. /usr/share/initramfs-tools/hook-functions +# Armada 3720 eMMC support +manual_add_modules sdhci_xenon +manual_add_modules sdhci +manual_add_modules mmc_block +manual_add_modules mmc_core +manual_add_modules phy_mvebu_a3700_comphy +HOOK + chmod +x "${ROOTFS}/etc/initramfs-tools/hooks/sdhci-xenon" + + # Hook 2: Blacklist mv88e6xxx DSA switch driver during initramfs + # Prevents probe loop that causes boot failures on ESPRESSObin/MOCHAbin + cat > "${ROOTFS}/etc/initramfs-tools/hooks/mv88e6xxx-blacklist" <<'HOOK' +#!/bin/sh +PREREQ="" +prereqs() { echo "$PREREQ"; } +case "$1" in prereqs) prereqs; exit 0;; esac +. /usr/share/initramfs-tools/hook-functions +# Blacklist DSA switch driver during initramfs to prevent probe loop +mkdir -p "${DESTDIR}/etc/modprobe.d" +cat > "${DESTDIR}/etc/modprobe.d/mv88e6xxx-initramfs.conf" <<'MODPROBE' +# Blacklist DSA switch driver during initramfs +# Driver loads after rootfs mount via systemd-modules-load +blacklist mv88e6xxx +blacklist mv88e6085 +blacklist dsa_core +MODPROBE +HOOK + chmod +x "${ROOTFS}/etc/initramfs-tools/hooks/mv88e6xxx-blacklist" + + # Also create the modprobe.d config in rootfs for good measure + mkdir -p "${ROOTFS}/etc/modprobe.d" + cat > "${ROOTFS}/etc/modprobe.d/mv88e6xxx-delay.conf" <<'MODPROBE' +# Delay mv88e6xxx load to avoid probe loop during boot +# The driver is blacklisted in initramfs and loads after rootfs mount +softdep mv88e6xxx pre: mmc_block +softdep dsa_core pre: mmc_block +MODPROBE + + # SDHCI quirks for xenon-sdhci DDR timing issues on ESPRESSObin eMMC + cat > "${ROOTFS}/etc/modprobe.d/sdhci-xenon-fix.conf" <<'MODPROBE' +# Fix xenon-sdhci DDR timing issues on Armada 3720 eMMC +# SDHCI_QUIRK2_BROKEN_DDR50 = 0x40 +options sdhci debug_quirks2=0x40 +MODPROBE + + # Install systemd service to load mv88e6xxx after boot + cat > "${ROOTFS}/etc/systemd/system/mv88e6xxx-load.service" <<'SERVICE' +[Unit] +Description=Load Marvell DSA switch driver after boot +DefaultDependencies=no +After=local-fs.target systemd-modules-load.service +Before=network-pre.target +Wants=network-pre.target + +[Service] +Type=oneshot +ExecStart=/sbin/modprobe dsa_core +ExecStart=/sbin/modprobe mv88e6xxx +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +SERVICE + chroot "${ROOTFS}" systemctl enable mv88e6xxx-load.service 2>/dev/null || true + + # Regénérer initramfs avec les modules eMMC et blacklist + log "Regénération initramfs..." + chroot "${ROOTFS}" update-initramfs -u 2>/dev/null || warn "update-initramfs partiel" + ok "Hooks initramfs installés (sdhci-xenon + mv88e6xxx blacklist + delayed load service)" +fi + # ── Étape 4 : firstboot.sh ──────────────────────────────────────── log "4/7 Installation firstboot..." install -m 755 "${SCRIPT_DIR}/firstboot.sh" "${ROOTFS}/usr/bin/secubox-firstboot" @@ -514,6 +596,15 @@ else warn "Kernel vmlinuz non trouvé dans /boot" fi + # Copier l'initramfs (requis pour sdhci-xenon sur eMMC) + INITRD=$(ls "${MNT}/boot/initrd.img-"* 2>/dev/null | head -1) + if [[ -n "$INITRD" ]]; then + cp "$INITRD" "${MNT}/boot/initrd.img" + ok "Initramfs copié : $(basename $INITRD) → initrd.img" + else + warn "Initramfs non trouvé dans /boot" + fi + # Copier le DTB depuis /usr/lib/linux-image-*/ DTB_DIR=$(ls -d "${MNT}/usr/lib/linux-image-"*/ 2>/dev/null | head -1) if [[ -d "$DTB_DIR" ]]; then @@ -529,64 +620,110 @@ else # Créer extlinux.conf pour U-Boot distroboot mkdir -p "${MNT}/boot/extlinux" - KERNEL_DTS="${KERNEL_DTS:-armada-3720-espressobin-v7}" + # Default to eMMC variant DTB for boards with eMMC + KERNEL_DTS="${KERNEL_DTS:-armada-3720-espressobin-v7-emmc}" + + # Determine root device based on DTB variant + # With -emmc DTB: SD=mmc0/mmcblk0, eMMC=mmc1/mmcblk1 + # Without -emmc DTB: only SD or eMMC as mmcblk0 + if [[ "$KERNEL_DTS" == *"-emmc"* ]]; then + ROOT_DEV="/dev/mmcblk1p2" + else + ROOT_DEV="/dev/mmcblk0p2" + fi + cat > "${MNT}/boot/extlinux/extlinux.conf" < "${MNT}/boot/boot.cmd" <<'BOOTCMD' + # Utiliser le boot.cmd spécifique au board s'il existe + BOARD_BOOTCMD="${SCRIPT_DIR}/../board/${BOARD}/boot.cmd" + if [[ -f "$BOARD_BOOTCMD" ]]; then + log "Utilisation du boot.cmd spécifique au board ${BOARD}" + cp "$BOARD_BOOTCMD" "${MNT}/boot/boot.cmd" + else + # Fallback: générer un boot.cmd générique + cat > "${MNT}/boot/boot.cmd" <<'BOOTCMD' # SecuBox U-Boot boot script -# Auto-generated — do not edit +# Auto-generated fallback — board-specific boot.cmd recommended -echo "SecuBox boot script..." +echo "============================================" +echo "SecuBox Boot Script" +echo "============================================" -# Boot partition is partition 1 (mmc X:1) -# Files are at root level of boot partition, not in /boot/ -if test -n "${devnum}"; then - setenv bootpart "${devtype} ${devnum}:1" +# Detect boot device from U-Boot environment +if test -n "${devtype}" -a -n "${devnum}"; then + echo "Boot device from env: ${devtype} ${devnum}" + setenv bootdev "${devnum}" else - setenv bootpart "mmc 1:1" + setenv bootdev 0 + echo "Using mmc 0 as boot device" fi -# Rootfs is partition 2 (mmc X:2) -if test -n "${devnum}"; then - setenv rootpart "/dev/mmcblk${devnum}p2" -else - setenv rootpart "/dev/mmcblk1p2" -fi +setenv bootpart "mmc ${bootdev}:1" +# Linux eMMC is typically mmcblk0 regardless of U-Boot device number +setenv rootpart "/dev/mmcblk0p2" -# Load kernel from boot partition (files at root level) +echo "Boot partition: ${bootpart}" +echo "Root partition: ${rootpart}" + +# Load kernel echo "Loading kernel from ${bootpart}..." load ${bootpart} ${kernel_addr_r} Image +# Load initramfs (required for eMMC support) +echo "Loading initramfs..." +if load ${bootpart} ${ramdisk_addr_r} initrd.img; then + echo "Initramfs loaded OK" + setenv initrd_size ${filesize} + setenv use_initrd 1 +else + echo "WARNING: No initramfs found" + setenv use_initrd 0 +fi + # Load DTB echo "Loading device tree..." BOOTCMD - # Ajouter le DTB spécifique au board - cat >> "${MNT}/boot/boot.cmd" <> "${MNT}/boot/boot.cmd" <> "${MNT}/boot/boot.cmd" <<'BOOTCMD_END' + cat >> "${MNT}/boot/boot.cmd" <<'BOOTCMD_END' -# Set boot args - use device path since LABEL may not work in all U-Boot versions -setenv bootargs "root=${rootpart} rootfstype=ext4 rootwait console=ttyMV0,115200 net.ifnames=0" +# Set boot args +# modprobe.blacklist: prevent mv88e6xxx DSA driver from loading during initramfs +# sdhci.debug_quirks2=0x40: fix xenon-sdhci DDR timing issues +setenv bootargs "root=${rootpart} rootfstype=ext4 rootwait rootdelay=5 console=ttyMV0,115200 net.ifnames=0 modprobe.blacklist=mv88e6xxx,dsa_core sdhci.debug_quirks2=0x40" -# Boot +echo "Boot args: ${bootargs}" +echo "============================================" echo "Booting SecuBox..." -booti ${kernel_addr_r} - ${fdt_addr_r} +echo "============================================" + +if test "${use_initrd}" = "1"; then + booti ${kernel_addr_r} ${ramdisk_addr_r}:${initrd_size} ${fdt_addr_r} +else + booti ${kernel_addr_r} - ${fdt_addr_r} +fi BOOTCMD_END + fi # Compiler le bootscript si mkimage est disponible if command -v mkimage >/dev/null 2>&1; then diff --git a/image/initramfs-hooks/mv88e6xxx-blacklist b/image/initramfs-hooks/mv88e6xxx-blacklist new file mode 100644 index 00000000..b0d898ef --- /dev/null +++ b/image/initramfs-hooks/mv88e6xxx-blacklist @@ -0,0 +1,25 @@ +#!/bin/sh +# SecuBox initramfs hook - blacklist mv88e6xxx during boot +# Prevents DSA switch probe loop on ESPRESSObin/MOCHAbin +# The module loads normally after rootfs mount + +PREREQ="" +prereqs() { echo "$PREREQ"; } + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +. /usr/share/initramfs-tools/hook-functions + +# Create modprobe blacklist for initramfs +mkdir -p "${DESTDIR}/etc/modprobe.d" +cat > "${DESTDIR}/etc/modprobe.d/mv88e6xxx-initramfs.conf" <<'EOF' +# Blacklist DSA switch driver during initramfs to prevent probe loop +# Driver loads after rootfs mount via systemd-modules-load +blacklist mv88e6xxx +blacklist dsa_core +EOF diff --git a/image/initramfs-hooks/mv88e6xxx-load.service b/image/initramfs-hooks/mv88e6xxx-load.service new file mode 100644 index 00000000..464f7c2f --- /dev/null +++ b/image/initramfs-hooks/mv88e6xxx-load.service @@ -0,0 +1,15 @@ +[Unit] +Description=Load Marvell DSA switch driver after boot +DefaultDependencies=no +After=local-fs.target systemd-modules-load.service +Before=network-pre.target +Wants=network-pre.target + +[Service] +Type=oneshot +ExecStart=/sbin/modprobe mv88e6xxx +ExecStart=/sbin/modprobe dsa_core +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/image/initramfs-hooks/sdhci-xenon b/image/initramfs-hooks/sdhci-xenon new file mode 100755 index 00000000..f3b441c7 --- /dev/null +++ b/image/initramfs-hooks/sdhci-xenon @@ -0,0 +1,21 @@ +#!/bin/sh +# SecuBox initramfs hook - include sdhci-xenon for Armada 3720 eMMC +# Required for ESPRESSObin Ultra eMMC boot + +PREREQ="" +prereqs() { echo "$PREREQ"; } + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +. /usr/share/initramfs-tools/hook-functions + +# Force include sdhci-xenon and dependencies for eMMC +manual_add_modules sdhci_xenon +manual_add_modules sdhci +manual_add_modules mmc_block +manual_add_modules mmc_core