arm: socfpga: arria10: Add qts-filter for Arria10 socfpga

Add a script to process HPS handoff data and generate a header
for inclusion in u-boot specific devicetree addons. The header
should be included in the top level of u-boot.dtsi.

Signed-off-by: Dalon Westergreen <dalon.westergreen@intel.com>
Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com>
This commit is contained in:
Dalon Westergreen 2019-09-27 18:43:24 -07:00 committed by Ley Foon Tan
parent 5bbeaaefec
commit 5c0adb0a71
2 changed files with 174 additions and 4 deletions

View File

@ -0,0 +1,141 @@
#!/bin/bash
#
# helper function to convert from DOS to Unix, if necessary, and handle
# lines ending in '\'.
#
fix_newlines_in_macros() {
sed -n ':next;s/\r$//;/[^\\]\\$/ {N;s/\\\n//;b next};p' $1
}
#filter out only what we need from a10 hps.xml
grep_a10_hps_config() {
egrep "clk_hz|i_clk_mgr|i_io48_pin_mux|AXI_SLAVE|AXI_MASTER"
}
#
# Process hps.xml
# $1: hps.xml
# $2: Output File
#
process_a10_hps_config() {
hps_xml="$1"
outfile="$2"
(cat << EOF
// SPDX-License-Identifier: BSD-3-Clause
/*
* Intel Arria 10 SoCFPGA configuration
*/
#ifndef __SOCFPGA_ARRIA10_CONFIG_H__
#define __SOCFPGA_ARRIA10_CONFIG_H__
EOF
echo "/* Clocks */"
fix_newlines_in_macros \
${hps_xml} | egrep "clk_hz" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/\.[0-9]//' |
sed 's/I_CLK_MGR_//' |
sort
fix_newlines_in_macros \
${hps_xml} | egrep "i_clk_mgr_mainpll" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/\.[0-9]//' |
sed 's/I_CLK_MGR_//' |
sort
fix_newlines_in_macros \
${hps_xml} | egrep "i_clk_mgr_perpll" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/\.[0-9]//' |
sed 's/I_CLK_MGR_//' |
sort
fix_newlines_in_macros \
${hps_xml} | egrep "i_clk_mgr_clkmgr" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/\.[0-9]//' |
sed 's/I_CLK_MGR_//' |
sort
fix_newlines_in_macros \
${hps_xml} | egrep "i_clk_mgr_alteragrp" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/\.[0-9]//' |
sed 's/I_CLK_MGR_//' |
sort
echo "#define ALTERAGRP_MPUCLK ((ALTERAGRP_MPUCLK_PERICNT << 16) | \\"
echo " (ALTERAGRP_MPUCLK_MAINCNT))"
echo "#define ALTERAGRP_NOCCLK ((ALTERAGRP_NOCCLK_PERICNT << 16) | \\"
echo " (ALTERAGRP_NOCCLK_MAINCNT))"
echo
echo "/* Pin Mux Configuration */"
fix_newlines_in_macros \
${hps_xml} | egrep "i_io48_pin_mux" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/I_IO48_PIN_MUX_//' |
sed 's/SHARED_3V_IO_GRP_//' |
sed 's/FPGA_INTERFACE_GRP_//' |
sed 's/DEDICATED_IO_GRP_//' |
sed 's/CONFIGURATION_DEDICATED/CONFIG/' |
sort
echo
echo "/* Bridge Configuration */"
fix_newlines_in_macros \
${hps_xml} | egrep "AXI_SLAVE|AXI_MASTER" |
awk -F"'" '{ gsub("\\.","_",$2) ; \
print "#define" " " toupper($2) " " $4}' |
sed 's/true/1/' |
sed 's/false/0/' |
sort
echo
echo "/* Voltage Select for Config IO */"
echo "#define CONFIG_IO_BANK_VSEL \\"
echo " (((CONFIG_IO_BANK_VOLTAGE_SEL_CLKRST_IO & 0x3) << 8) | \\"
echo " (CONFIG_IO_BANK_VOLTAGE_SEL_PERI_IO & 0x3))"
echo
echo "/* Macro for Config IO bit mapping */"
echo -n "#define CONFIG_IO_MACRO(NAME) "
echo "(((NAME ## _RTRIM & 0xff) << 19) | \\"
echo " ((NAME ## _INPUT_BUF_EN & 0x3) << 17) | \\"
echo " ((NAME ## _WK_PU_EN & 0x1) << 16) | \\"
echo " ((NAME ## _PU_SLW_RT & 0x1) << 13) | \\"
echo " ((NAME ## _PU_DRV_STRG & 0xf) << 8) | \\"
echo " ((NAME ## _PD_SLW_RT & 0x1) << 5) | \\"
echo " (NAME ## _PD_DRV_STRG & 0x1f))"
cat << EOF
#endif /* __SOCFPGA_ARRIA10_CONFIG_H__ */
EOF
) > "${outfile}"
}
usage() {
echo "$0 [hps_xml] [output_file]"
echo "Process QTS-generated hps.xml into devicetree header."
echo ""
echo " hps_xml - hps.xml file from hps_isw_handoff"
echo " output_file - Output header file for dtsi include"
echo ""
}
hps_xml="$1"
outfile="$2"
if [ "$#" -ne 2 ] ; then
usage
exit 1
fi
process_a10_hps_config "${hps_xml}" "${outfile}"

View File

@ -16,9 +16,9 @@ controller support within SOCFPGA
#define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 #define CONFIG_SYS_MMC_MAX_BLK_COUNT 256
-> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM -> Using smaller max blk cnt to avoid flooding the limited stack in OCRAM
-------------------------------------------------- ---------------------------------------------------------------------
Generating the handoff header files for U-Boot SPL Cyclone 5 / Arria 5 generating the handoff header files for U-Boot SPL
-------------------------------------------------- ---------------------------------------------------------------------
This text is assuming quartus 16.1, but newer versions will probably work just fine too; This text is assuming quartus 16.1, but newer versions will probably work just fine too;
verified with DE1_SOC_Linux_FB demo project (https://github.com/VCTLabs/DE1_SOC_Linux_FB). verified with DE1_SOC_Linux_FB demo project (https://github.com/VCTLabs/DE1_SOC_Linux_FB).
@ -32,7 +32,7 @@ Rebuilding your Quartus project
Choose one of the follwing methods, either command line or GUI. Choose one of the follwing methods, either command line or GUI.
Using the comaand line Using the command line
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
First run the embedded command shell, using your path to the Quartus install: First run the embedded command shell, using your path to the Quartus install:
@ -147,3 +147,32 @@ Note: file sizes will differ slightly depending on the selected board.
Now your board is ready for full mainline support including U-Boot SPL. Now your board is ready for full mainline support including U-Boot SPL.
The Preloader will not be needed any more. The Preloader will not be needed any more.
----------------------------------------------------------
Arria 10 generating the handoff header files for U-Boot SPL
----------------------------------------------------------
A header file for inclusion in a devicetree for Arria10 can be generated
by the qts-filter-a10.sh script directly from the hps_isw_handoff/hps.xml
file generated during the FPGA project compilation. The header contains
all PLL, clock, pinmux, and bridge configurations required.
Please look at the socfpga_arria10_socdk_sdmmc-u-boot.dtsi for an example
that includes use of the generated handoff header.
Devicetree header generation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The qts-filter-a10.sh script can process the compile time genetated hps.xml
to create the appropriate devicetree header.
$ ./arch/arm/mach-socfpga/qts-filter-a10.sh \
<hps_xml> \
<output_file>
hps_xml - hps_isw_handoff/hps.xml from Quartus project
output_file - Output filename and location for header file
The script generates a single header file names <output_file> that should
be placed in arch/arm/dts.