xref: /openbmc/phosphor-bmc-code-mgmt/i2c-vr/mps/mp994x.hpp (revision 3638c243ec185766e2db2498e9593a0c1649fde7)
1 #pragma once
2 
3 #include "common/include/pmbus.hpp"
4 #include "mps.hpp"
5 
6 namespace phosphor::software::VR
7 {
8 
9 enum class MP994XCmd : uint8_t;
10 
11 class MP994X : public MPSVoltageRegulator
12 {
13   public:
MP994X(sdbusplus::async::context & ctx,uint16_t bus,uint16_t address)14     MP994X(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address) :
15         MPSVoltageRegulator(ctx, bus, address)
16     {}
17 
18     sdbusplus::async::task<bool> verifyImage(const uint8_t* image,
19                                              size_t imageSize) final;
20     sdbusplus::async::task<bool> updateFirmware(bool force) final;
21     sdbusplus::async::task<bool> getCRC(uint32_t* checksum) final;
22     sdbusplus::async::task<bool> parseDeviceConfiguration() final;
23     bool forcedUpdateAllowed() final;
24 
25   private:
26     sdbusplus::async::task<bool> checkId(MP994XCmd idCmd, uint32_t expected);
27     sdbusplus::async::task<bool> unlockWriteProtect();
28     sdbusplus::async::task<bool> disableStoreFaultTriggering();
29     sdbusplus::async::task<bool> setMultiConfigAddress(uint8_t config);
30     sdbusplus::async::task<bool> programConfigData(
31         const std::vector<MPSData>& gdata);
32     sdbusplus::async::task<bool> programAllRegisters();
33     sdbusplus::async::task<bool> storeDataIntoMTP();
34     sdbusplus::async::task<bool> restoreDataFromNVM();
35     sdbusplus::async::task<bool> checkMTPCRC();
36 };
37 
38 } // namespace phosphor::software::VR
39