From 35db70b9b7366d87b53162745555d4b5d1a3c103 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Tue, 14 Dec 2021 03:06:14 +0100 Subject: [PATCH 1/2] WIP intelana Signed-off-by: Daniel Maslowski --- cmds/intelana/main.go | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 cmds/intelana/main.go diff --git a/cmds/intelana/main.go b/cmds/intelana/main.go new file mode 100644 index 00000000..45b4c2b7 --- /dev/null +++ b/cmds/intelana/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "log" + + fit "github.com/linuxboot/fiano/pkg/intel/metadata/fit" + "github.com/linuxboot/fiano/pkg/uefi" +) + +func main() { + flag.Parse() + args := flag.Args() + + if len(args) > 0 { + path := args[0] + data, err := ioutil.ReadFile(path) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("\n== IFD ==\n") + regions := [...]uefi.FlashRegionType{ + uefi.RegionTypeBIOS, + uefi.RegionTypeME, + uefi.RegionTypeGBE, + uefi.RegionTypePTT, + uefi.RegionTypeEC, + uefi.RegionTypeMicrocode, + } + + fi, err := uefi.NewFlashImage(data) + if fi != nil { + for _, r := range regions { + if fi.IFD.Region.FlashRegions[r].Valid() { + offset := fi.IFD.Region.FlashRegions[r].BaseOffset() + size := fi.IFD.Region.FlashRegions[r].EndOffset() - offset + fmt.Printf("%-9s offset %x size %x\n", r, offset, size) + } else { + fmt.Printf("%-9s region not found/invalid\n", r) + } + } + } + + fmt.Printf("\n== FIT ==\n") + table, err := fit.GetTable(data) + doJson := false + if doJson { + j, err := json.MarshalIndent(table, "", " ") + if err != nil { + log.Fatal(err) + } + fmt.Printf(string(j)) + } else { + fmt.Printf("\n%s", table) + } + } +} From 4838954dc6fc7894e1f817271aa24326a6bff7ff Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Tue, 14 Dec 2021 03:06:46 +0100 Subject: [PATCH 2/2] WIP amdana Signed-off-by: Daniel Maslowski --- cmds/amdana/main.go | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 cmds/amdana/main.go diff --git a/cmds/amdana/main.go b/cmds/amdana/main.go new file mode 100644 index 00000000..4562c313 --- /dev/null +++ b/cmds/amdana/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "log" + + amd "github.com/linuxboot/fiano/pkg/amd/manifest" +) + +const ( + // This needed a look at the image; how can we fully automate it? + mapping = 0xff000000 +) + +// this is only for Go - would be 5 lines inline in JS, thanks... +type image []byte + +func (f image) ImageBytes() []byte { + return []byte(f) +} + +func (f image) PhysAddrToOffset(physAddr uint64) uint64 { + return physAddr - mapping +} + +func (f image) OffsetToPhysAddr(offset uint64) uint64 { + return offset + mapping +} + +func main() { + flag.Parse() + args := flag.Args() + + var path string + + if len(args) > 0 { + path = args[0] + data, err := ioutil.ReadFile(path) + if err != nil { + log.Fatal(err) + } + // We could also use this, but its mapping wouldn't work with some images + // FIXME: figure out those mappings + // var amdfw amd.FirmwareImage = data + var amdfw image = data + fw, err := amd.NewAMDFirmware(amdfw) + if err != nil { + log.Fatal(err) + } + a := fw.PSPFirmware() + j, err := json.MarshalIndent(a, "", " ") + if err != nil { + log.Fatal(err) + } + fmt.Printf(string(j)) + } +}