# HJX9009 validated board profile This profile comes from the HJX-ADRV9009-X2 schematic and a PetaLinux 2018.1 hardware run. Reconfirm the PCB revision and live probes for every target; schematic constants do not replace target identity. Use [hjx9009-profile.json](hjx9009-profile.json), rather than this explanatory document, as the cache fingerprint's `--board-profile` input so editorial changes do not force a rebuild. ## Boot and QSPI - SoC: XC7Z100FF900. - Boot device straps are `MIO[5:4:3]`; `100` is QSPI and is the schematic default. The schematic implements resistor straps, not a user boot DIP. Boot mode is sampled at power-on reset. - `MIO2=0` selects cascaded dual-QSPI mode by default. - U5 and U6 are S25FL128S-family serial flashes. Validated U-Boot probe: `s25fl128s_64k`, 32 MiB total, 128 KiB erase, 512-byte reported page. Treat the live `sf probe` result as mandatory before erase. - A TF card does not alter the QSPI boot selection. The transition U-Boot bootcmd must contain only `sf probe`, QSPI `sf read`, documented board fixups, and `bootm`; no implicit `mmc` fallback. Validated transition layout: | Region | Offset | Size | |---|---:|---:| | boot | `0x00000000` | `0x00500000` | | bootenv | `0x00500000` | `0x00020000` | | kernel | `0x00520000` | `0x01800000` | | spare | `0x01D20000` | `0x002E0000` | The transition `BOOT.BIN` contains FSBL and U-Boot only. It deliberately excludes the PL bitstream and `image.ub`. The kernel region stores a FIT `image.ub.qspi` containing kernel, DTB and initramfs rootfs. Calculate the actual image read and erase lengths for each build; never copy an old length. ## J1 microSD/TF interface HJX9009 has no soldered eMMC. J1 is removable microSD through U12 MAX13035E: - SD0 CLK/CMD/DAT0..3: MIO40..45; - card detect `SDIO_SDDET`: MIO13; - card side is 3.3 V and PS side is 1.8 V; - no UHS 1.8 V card-side switching and no write-protect signal; - MIO46..53 are occupied by Ethernet/UART/MDIO functions, so SD1 must remain disabled. Required SD device-tree intent: ```dts &sdhci0 { status = "okay"; u-boot,dm-pre-reloc; bus-width = <4>; max-frequency = <50000000>; xlnx,has-cd = <1>; xlnx,has-power = <0>; xlnx,has-wp = <0>; no-1-8-v; disable-wp; }; &sdhci1 { status = "disabled"; }; ``` Do not add `non-removable`. On the validated Linux 4.14 native SDHCI path, card presence is read directly from the SDHCI Present State register; `cd-inverted` does not correct native detection and must not be used as a substitute for the proper CD selector. ## SD0 card-detect selector The validated HDF enabled SD0 on MIO40..45 but left `PCW_SD0_GRP_CD_ENABLE=0`, so generated FSBL selected EMIO 56 instead of schematic MIO13. Inspect the new HDF and generated `ps7_init.c` every time: - if generation selects MIO13 correctly, do not apply a workaround; - otherwise prefer correcting the Vivado PS7 configuration/HDF and rebuilding FSBL; - the validated transition-only fallback, applied immediately before `bootm`, is: ```text sd0_cd_fix=mw.l 0xF8000008 0x0000DF0D; mw.l 0xF8000830 0x000D0037; mw.l 0xF8000004 0x0000767B ``` Verify `0xF8000830=0x000D0037` in Linux. With no card inserted, the validated SDHCI Present State at `0xE0100024` was `0x01FA0000` (Card Present bit clear). Absence of `/dev/mmcblk0` is expected only when the operator confirms no card is inserted. ## Network and boot details - GEM0 uses an Atheros 8031 PHY at MDIO address 0 with `rgmii-id`. - Discover MAC and IP values from the target/project; do not reuse a prior board address. - The prior validated build needed a documented PHY register fix before networking. Re-evaluate it against the supplied HDF/U-Boot rather than applying it blindly. - The initramfs may need `CONFIG_SYS_BOOTM_LEN=0x0F000000`; confirm against the generated FIT and available DDR. ## Acceptance markers Cold-boot evidence must show, in order: U-Boot banner, `SF: Detected s25fl128s_64k`, exact `device 0 offset 0x520000, size `, FIT loading, and the transition Linux login. In Linux require rootfs type `rootfs`, the four expected MTD regions, `mmc0` on `e0100000.sdhci`, live network/TFTP, and storage tools. If no TF card is present, finish at `WAITING_FOR_MEDIA` and power off. After insertion, prove QSPI boot again, then identify `/dev/mmcblk0` and do read-only media checks before any partition or format operation.