coreboot-kgpe-d16/util/scripts/decode_spd.sh
Martin Roth 0ad5fbd48d util: Update all shebangs to use /usr/bin/env
Instead of hardcoding paths to the executables, use the version in the
path.  This allows the scripts to work on more systems, and allows the
binary version to be changed more easily if needed.

Signed-off-by: Martin Roth <martin@coreboot.org>
Change-Id: Ifcc56aa21092cd3866eacb6a02d198110ec6051d
Reviewed-on: https://review.coreboot.org/c/coreboot/+/48904
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
2021-01-25 08:57:40 +00:00

67 lines
1.7 KiB
Bash
Executable file

#!/usr/bin/env bash
#
#
# SPDX-License-Identifier: GPL-2.0-only
# Parses spd hex files and outputs the contents in various formats
#
#
# Outputs csv, set, and json in same folder as SPD_HEX_FILE
#
# Example:
# decode_spd.sh ../../src/mainboard/google/zork/spd/micron-MT40A512M16TB-062E-J.spd.hex
#
# Outputs ../../src/mainboard/google/zork/spd/micron-MT40A512M16TB-062E-J.spd.{json|csv|set}
#
# TODO: This script assumes bincfg binary is at ../bincfg/bincfg (which is the
# result of running the bincfg make), and the specs are at
# ../bincfg/*.spec. This dependency should be made more resilliant and
# configurable.
set -e
function read8 () {
echo $(( 16#$(xxd -s "${2}" -l 1 -p "${1}") ))
}
for file in "$@"
do
bintmp=$(mktemp)
outfile="${file%.hex}.set"
echo "Decoding ${file}, outputting to ${outfile}"
grep -v '^#' "${file}" | xxd -r -p - "${bintmp}"
dram_type=$(read8 "${bintmp}" 2)
if [ ! "${dram_type}" -eq 12 ]
then
#TODO: Handle other dram types
printf "Error: Expecting dram4 (12), got %d\n" "${dram_type}"
continue
fi
revision=$(read8 "${bintmp}" 1)
if [ ! "${revision}" -eq $((0x13)) ]
then
printf "Warning: Expecting revision 0x13, got 0x%x.\n" "${revision}"
fi
module_type=$(read8 "${bintmp}" 3)
case "${module_type}" in
1) # RDIMM
spec="../bincfg/ddr4_registered_spd_512.spec"
;;
2 | 3) #UDIMM | SO-DIMM
spec="../bincfg/ddr4_unbuffered_spd_512.spec"
;;
* )
printf "Error: Unhandled module type %d.\n" "${module_type}"
;;
esac
../bincfg/bincfg -d "${spec}" "${bintmp}" "${outfile}"
grep -v '^#' "${outfile}" | sed -e 's/ = \([^,]\+\)/: "\1"/g' \
> "${file%.hex}.json"
grep -v -e '^#' -e '^{' -e '^}' "${outfile}" | sed -e 's/=/,/g' \
> "${file%.hex}.csv"
done