diff options
-rw-r--r-- | libpeci/peci_cmds.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libpeci/peci_cmds.c b/libpeci/peci_cmds.c index ec7dda9..ee23cca 100644 --- a/libpeci/peci_cmds.c +++ b/libpeci/peci_cmds.c @@ -64,6 +64,8 @@ void Usage(char* progname) "Endpoint PCI Config Write <Seg Bus Dev Func Reg Data>"); printf("\t%-28s%s\n", "RdEndpointConfigMMIO", "Endpoint MMIO Read <AType Bar Seg Bus Dev Func Reg>"); + printf("\t%-28s%s\n", "WrEndpointConfigMMIO", + "Endpoint MMIO Write <AType Bar Seg Bus Dev Func Reg Data>"); printf("\t%-28s%s\n", "raw", "Raw PECI command in bytes"); printf("\n"); } @@ -86,6 +88,7 @@ int main(int argc, char* argv[]) uint16_t u16PciReg = 0; uint64_t u64Offset = 0; uint32_t u32PciWriteVal = 0; + uint64_t u64MmioWriteVal = 0; uint8_t u8PkgIndex = 0; uint16_t u16PkgParam = 0; uint32_t u32PkgValue = 0; @@ -586,6 +589,45 @@ int main(int argc, char* argv[]) } printf(" cc:0x%02x 0x%0*x\n", cc, u8Size * 2, u32PciReadVal); } + else if (strcmp(cmd, "wrendpointconfigmmio") == 0) + { + index = argc; + switch (argc - optind) + { + case 8: + u64MmioWriteVal = strtoull(argv[--index], NULL, 0); + u64Offset = strtoull(argv[--index], NULL, 0); + u8PciFunc = (uint8_t)strtoul(argv[--index], NULL, 0); + u8PciDev = (uint8_t)strtoul(argv[--index], NULL, 0); + u8PciBus = (uint8_t)strtoul(argv[--index], NULL, 0); + u8Seg = (uint8_t)strtoul(argv[--index], NULL, 0); + u8Bar = (uint8_t)strtoul(argv[--index], NULL, 0); + u8AddrType = (uint8_t)strtoul(argv[--index], NULL, 0); + break; + + default: + printf( + "ERROR: Unsupported arguments for Endpoint MMIO Write\n"); + goto ErrorExit; + } + if (verbose) + { + printf("Endpoint MMIO Write of Seg:%02x %02x:%02x:%02x AType:%02x " + "Bar:%02x Offset:0x%" PRIx64 ": 0x%0*" PRIx64 "\n", + u8Seg, u8PciBus, u8PciDev, u8PciFunc, u8AddrType, u8Bar, + u64Offset, u8Size * 2, u64MmioWriteVal); + } + ret = peci_WrEndPointConfigMmio(address, u8Seg, u8PciBus, u8PciDev, + u8PciFunc, u8Bar, u8AddrType, u64Offset, + u8Size, u64MmioWriteVal, &cc); + if (0 != ret) + { + printf("ERROR %d: command failed\n", ret); + printf(" cc:0x%02x\n", cc); + return 1; + } + printf(" cc:0x%02x\n", cc); + } else if (strcmp(cmd, "raw") == 0) { if ((argc - optind) < 3) |