xref: /openbmc/phosphor-bmc-code-mgmt/i2c-vr/mps/mp297x.hpp (revision 3f2f3e6a61777c16094c94c22734659a8d84bdad)
1*3f2f3e6aSKevin Tung #pragma once
2*3f2f3e6aSKevin Tung 
3*3f2f3e6aSKevin Tung #include "common/include/pmbus.hpp"
4*3f2f3e6aSKevin Tung #include "mps.hpp"
5*3f2f3e6aSKevin Tung 
6*3f2f3e6aSKevin Tung namespace phosphor::software::VR
7*3f2f3e6aSKevin Tung {
8*3f2f3e6aSKevin Tung 
9*3f2f3e6aSKevin Tung class MP297X : public MPSVoltageRegulator
10*3f2f3e6aSKevin Tung {
11*3f2f3e6aSKevin Tung   public:
MP297X(sdbusplus::async::context & ctx,uint16_t bus,uint16_t address)12*3f2f3e6aSKevin Tung     MP297X(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address) :
13*3f2f3e6aSKevin Tung         MPSVoltageRegulator(ctx, bus, address)
14*3f2f3e6aSKevin Tung     {}
15*3f2f3e6aSKevin Tung 
16*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> verifyImage(const uint8_t* image,
17*3f2f3e6aSKevin Tung                                              size_t imageSize) final;
18*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> updateFirmware(bool force) final;
19*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> getCRC(uint32_t* checksum) final;
20*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> parseDeviceConfiguration() final;
21*3f2f3e6aSKevin Tung     bool forcedUpdateAllowed() final;
22*3f2f3e6aSKevin Tung 
23*3f2f3e6aSKevin Tung   private:
24*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> checkId(PMBusCmd pmBusCmd, uint32_t expected);
25*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> isPasswordUnlock();
26*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> unlockWriteProtect();
27*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> storeDataIntoMTP();
28*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> enableMTPPageWriteRead();
29*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> enableMultiConfigCRC();
30*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> checkMTPCRC();
31*3f2f3e6aSKevin Tung     sdbusplus::async::task<bool> programPageRegisters(
32*3f2f3e6aSKevin Tung         MPSPage page,
33*3f2f3e6aSKevin Tung         const std::map<uint8_t, std::vector<MPSData>>& groupedData);
34*3f2f3e6aSKevin Tung };
35*3f2f3e6aSKevin Tung 
36*3f2f3e6aSKevin Tung } // namespace phosphor::software::VR
37