This PR introduces some major features while also changing the project structure to be more flexible for multiple platforms (e.g. host tooling). It also includes a lot of bugfixes, renamings for consistency purposes and dependency updates. Added features: 1. Pure Rust FSBL for the Zedboard. This first variant is simplistic. It is currently only capable of QSPI boot. It searches for a bitstream and ELF file inside the boot binary, flashes them and jumps to them. 2. QSPI flasher for the Zedboard. 3. DDR, QSPI, DEVC, private CPU timer and PLL configuration modules 3. Tooling to auto-generate board specific DDR and DDRIOB config parameters from the vendor provided ps7init.tcl file Changed project structure: 1. All target specific project are inside a dedicated workspace inside the `zynq` folder now. 2. All tool intended to be run on a host are inside a `tools` workspace 3. All other common projects are at the project root Major bugfixes: 1. SPI module: CPOL was not configured properly 2. Logger flush implementation was empty, implemented properly now.
Zynq7000 PS7 Init Extractor
AMD provides tooling to auto-generate some of the hardware initialization for the external DDR as native Rust code.
The AMD tooling generates these files as ps7init.tcl, ps7init.c, ps7init.h files but not as
Rust files. The specific parameters required for different DDR chips are proprietary, so that
portion is required for Rust programs as well. Do avoid the need of compiling the PS7 initialization
scripts with a C compiler, this tool extracts all required configuration parameters for DDR and
DDRIOB initialization and configuration and exports them as native Rust constants.
The generates files can be placed in individual projects or board support packages to initialize the DDR in conjunction with the Zynq7000 HAL library.
Right now, the script expects the ps7init.tcl file to be passed as a command line argument
for -p or --path. It then generates the configuration as a ddrc_config_autogen.rs and
ddrc_config_autogen.rs file.
For example, assuming that there is a ps7init.tcl script in the current directory, you can use
cargo run -- --path ./ps7init.tcl
to generate the configuration files.