Revert "util/spd_tools: output binaries instead of hexdumps"

This reverts commit f23794cf04.

Reason for revert: This change breaks compatibility if the changes
in CB:44775 are not also included. CB:44775 is still under discussion,
so revert this change to make spd_tools usable again.

Signed-off-by: Rob Barnes <robbarnes@google.com>
Change-Id: I5840a1b895dcbc8b91c76d8b60df2f95b93a4370
Reviewed-on: https://review.coreboot.org/c/coreboot/+/44999
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Michael Niewöhner <foss@mniewoehner.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Rob Barnes 2020-10-02 14:51:46 +00:00 committed by Michael Niewöhner
parent 2871e0e78c
commit 34cf7ccebc
5 changed files with 47 additions and 39 deletions

View File

@ -171,7 +171,7 @@ string like "9 10 11 12 14".
This tool generates the following files using the global list of This tool generates the following files using the global list of
memory parts in JSON format as described above: memory parts in JSON format as described above:
* De-duplicated SPDs required for the different memory parts. These * De-duplicated SPDs required for the different memory parts. These
SPD files are named (ddr4-spd-1.bin, ddr4-spd-2.bin, and so on) SPD files are named (ddr4-spd-1.hex, ddr4-spd-2.hex, and so on)
and placed in the directory provided as an input to the tool. and placed in the directory provided as an input to the tool.
* CSV file representing which of the deduplicated SPD files is used * CSV file representing which of the deduplicated SPD files is used
by which memory part. This file is named as by which memory part. This file is named as
@ -179,11 +179,11 @@ memory parts in JSON format as described above:
as an input to the tool along with the generated SPD as an input to the tool along with the generated SPD
files. Example CSV file: files. Example CSV file:
``` ```
MEMORY_PART_A, ddr4-spd-1.bin MEMORY_PART_A, ddr4-spd-1.hex
MEMORY_PART_B, ddr4-spd-2.bin MEMORY_PART_B, ddr4-spd-2.hex
MEMORY_PART_C, ddr4-spd-3.bin MEMORY_PART_C, ddr4-spd-3.hex
MEMORY_PART_D, ddr4-spd-2.bin MEMORY_PART_D, ddr4-spd-2.hex
MEMORY_PART_E, ddr4-spd-2.bin MEMORY_PART_E, ddr4-spd-2.hex
``` ```
## Tool 2 - gen_part_id.go ## Tool 2 - gen_part_id.go
@ -242,10 +242,10 @@ Sample Makefile.inc:
## This is an auto-generated file. Do not edit!! ## This is an auto-generated file. Do not edit!!
SPD_SOURCES = SPD_SOURCES =
SPD_SOURCES += ddr4-spd-1.bin # ID = 0(0b0000) Parts = MEMORY_PART_A SPD_SOURCES += ddr4-spd-1.hex # ID = 0(0b0000) Parts = MEMORY_PART_A
SPD_SOURCES += ddr4-spd-2.bin # ID = 1(0b0001) Parts = MEMORY_PART_B, MEMORY_PART_D SPD_SOURCES += ddr4-spd-2.hex # ID = 1(0b0001) Parts = MEMORY_PART_B, MEMORY_PART_D
SPD_SOURCES += ddr4-spd-empty.bin # ID = 2(0b0010) SPD_SOURCES += ddr4-spd-empty.hex # ID = 2(0b0010)
SPD_SOURCES += ddr4-spd-3.bin # ID = 2(0b0010) Parts = MEMORY_PART_C SPD_SOURCES += ddr4-spd-3.hex # ID = 2(0b0010) Parts = MEMORY_PART_C
``` ```
NOTE: Empty entries may be required if there is a gap created by a memory part NOTE: Empty entries may be required if there is a gap created by a memory part
with a fixed id. with a fixed id.

View File

@ -266,7 +266,7 @@ func genMakefile(partIdList []partIds, makefileDirName string) error {
for i := 0; i < len(partIdList); i++ { for i := 0; i < len(partIdList); i++ {
if partIdList[i].SPDFileName == "" { if partIdList[i].SPDFileName == "" {
s += fmt.Sprintf("SPD_SOURCES += %s ", "ddr4-spd-empty.bin") s += fmt.Sprintf("SPD_SOURCES += %s ", "ddr4-spd-empty.hex")
s += fmt.Sprintf(" # ID = %d(0b%04b)\n", i, int64(i)) s += fmt.Sprintf(" # ID = %d(0b%04b)\n", i, int64(i))
} else { } else {
s += fmt.Sprintf("SPD_SOURCES += %s ", partIdList[i].SPDFileName) s += fmt.Sprintf("SPD_SOURCES += %s ", partIdList[i].SPDFileName)

View File

@ -3,7 +3,6 @@
package main package main
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
@ -969,8 +968,8 @@ func getSPDByte(index int, memAttribs *memAttributes) byte {
return e.constVal return e.constVal
} }
func createSPD(memAttribs *memAttributes) bytes.Buffer { func createSPD(memAttribs *memAttributes) string {
var spd bytes.Buffer var s string
for i := 0; i < 512; i++ { for i := 0; i < 512; i++ {
var b byte = 0 var b byte = 0
@ -978,10 +977,14 @@ func createSPD(memAttribs *memAttributes) bytes.Buffer {
b = getSPDByte(i, memAttribs) b = getSPDByte(i, memAttribs)
} }
spd.WriteByte(b) if (i + 1) % 16 == 0 {
s += fmt.Sprintf("%02X\n", b)
} else {
s += fmt.Sprintf("%02X ", b)
}
} }
return spd return s
} }
func dedupeMemoryPart(dedupedParts []*memPart, memPart *memPart) bool { func dedupeMemoryPart(dedupedParts []*memPart, memPart *memPart) bool {
@ -996,16 +999,16 @@ func dedupeMemoryPart(dedupedParts []*memPart, memPart *memPart) bool {
} }
func generateSPD(memPart *memPart, SPDId int, SPDDirName string) { func generateSPD(memPart *memPart, SPDId int, SPDDirName string) {
spd := createSPD(&memPart.Attribs) s := createSPD(&memPart.Attribs)
memPart.SPDFileName = fmt.Sprintf("ddr4-spd-%d.bin", SPDId) memPart.SPDFileName = fmt.Sprintf("ddr4-spd-%d.hex", SPDId)
ioutil.WriteFile(filepath.Join(SPDDirName, memPart.SPDFileName), spd.Bytes(), 0644) ioutil.WriteFile(filepath.Join(SPDDirName, memPart.SPDFileName), []byte(s), 0644)
} }
func generateEmptySPD(SPDDirName string) { func generateEmptySPD(SPDDirName string) {
spd := createSPD(nil) s := createSPD(nil)
SPDFileName := "ddr4-spd-empty.bin" SPDFileName := "ddr4-spd-empty.hex"
ioutil.WriteFile(filepath.Join(SPDDirName, SPDFileName), spd.Bytes(), 0644) ioutil.WriteFile(filepath.Join(SPDDirName, SPDFileName), []byte(s), 0644)
} }
func readMemoryParts(memParts *memParts, memPartsFileName string) error { func readMemoryParts(memParts *memParts, memPartsFileName string) error {

View File

@ -168,7 +168,7 @@ Input JSON file requires the following two fields for every memory part:
This tool generates the following files using the global list of This tool generates the following files using the global list of
memory parts in JSON format as described above: memory parts in JSON format as described above:
* De-duplicated SPDs required for the different memory parts. These * De-duplicated SPDs required for the different memory parts. These
SPD files are named (spd_1.bin, spd_2.bin, spd_3.bin and so on) SPD files are named (spd_1.hex, spd_2.hex, spd_3.hex and so on)
and placed in the directory provided as an input to the tool. and placed in the directory provided as an input to the tool.
* CSV file representing which of the deduplicated SPD files is used * CSV file representing which of the deduplicated SPD files is used
by which memory part. This file is named as by which memory part. This file is named as
@ -176,11 +176,11 @@ memory parts in JSON format as described above:
as an input to the tool along with the generated SPD as an input to the tool along with the generated SPD
files. Example CSV file: files. Example CSV file:
``` ```
MEMORY_PART_A, spd_1.bin MEMORY_PART_A, spd_1.hex
MEMORY_PART_B, spd_2.bin MEMORY_PART_B, spd_2.hex
MEMORY_PART_C, spd_3.bin MEMORY_PART_C, spd_3.hex
MEMORY_PART_D, spd_2.bin MEMORY_PART_D, spd_2.hex
MEMORY_PART_E, spd_2.bin MEMORY_PART_E, spd_2.hex
``` ```
## Tool 2 - gen_part_id.go ## Tool 2 - gen_part_id.go
@ -222,9 +222,9 @@ Sample Makefile.inc:
## This is an auto-generated file. Do not edit!! ## This is an auto-generated file. Do not edit!!
SPD_SOURCES = SPD_SOURCES =
SPD_SOURCES += spd_1.bin # ID = 0(0b0000) Parts = MEMORY_PART_A SPD_SOURCES += spd_1.hex # ID = 0(0b0000) Parts = MEMORY_PART_A
SPD_SOURCES += spd_2.bin # ID = 1(0b0001) Parts = MEMORY_PART_B, MEMORY_PART_D SPD_SOURCES += spd_2.hex # ID = 1(0b0001) Parts = MEMORY_PART_B, MEMORY_PART_D
SPD_SOURCES += spd_3.bin # ID = 2(0b0010) Parts = MEMORY_PART_C SPD_SOURCES += spd_3.hex # ID = 2(0b0010) Parts = MEMORY_PART_C
``` ```
### Note of caution ### Note of caution

View File

@ -3,7 +3,6 @@
package main package main
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
@ -638,14 +637,20 @@ func getSPDByte(index int, memAttribs *memAttributes) byte {
return e.constVal return e.constVal
} }
func createSPD(memAttribs *memAttributes) bytes.Buffer { func createSPD(memAttribs *memAttributes) string {
var spd bytes.Buffer var s string
for i := 0; i < 512; i++ { for i := 0; i < 512; i++ {
spd.WriteByte(getSPDByte(i, memAttribs)) b := getSPDByte(i, memAttribs)
if (i + 1) % 16 == 0 {
s += fmt.Sprintf("%02X\n", b)
} else {
s += fmt.Sprintf("%02X ", b)
}
} }
return spd return s
} }
func dedupeMemoryPart(dedupedParts []*memPart, memPart *memPart) bool { func dedupeMemoryPart(dedupedParts []*memPart, memPart *memPart) bool {
@ -660,9 +665,9 @@ func dedupeMemoryPart(dedupedParts []*memPart, memPart *memPart) bool {
} }
func generateSPD(memPart *memPart, SPDId int, SPDDirName string) { func generateSPD(memPart *memPart, SPDId int, SPDDirName string) {
spd := createSPD(&memPart.Attribs) s := createSPD(&memPart.Attribs)
memPart.SPDFileName = fmt.Sprintf("lp4x-spd-%d.bin", SPDId) memPart.SPDFileName = fmt.Sprintf("lp4x-spd-%d.hex", SPDId)
ioutil.WriteFile(filepath.Join(SPDDirName, memPart.SPDFileName), spd.Bytes(), 0644) ioutil.WriteFile(filepath.Join(SPDDirName, memPart.SPDFileName), []byte(s), 0644)
} }
func readMemoryParts(memParts *memParts, memPartsFileName string) error { func readMemoryParts(memParts *memParts, memPartsFileName string) error {