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