xref: /openbmc/phosphor-bmc-code-mgmt/i2c-vr/isl69269/isl69269.hpp (revision c1b36628298d7799677680e70d455f85acf83650)
1 #pragma once
2 
3 #include "common/include/i2c/i2c.hpp"
4 #include "i2c-vr/vr.hpp"
5 
6 #include <sdbusplus/async.hpp>
7 
8 #include <cstdint>
9 
10 namespace phosphor::software::VR
11 {
12 
13 class ISL69269 : public VoltageRegulator
14 {
15   public:
16     enum class Gen
17     {
18         Gen2,
19         Gen3,
20         Gen3p5
21     };
22 
23     ISL69269(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address,
24              Gen gen = Gen::Gen3);
25 
26     sdbusplus::async::task<bool> verifyImage(const uint8_t* image,
27                                              size_t imageSize) final;
28 
29     sdbusplus::async::task<bool> updateFirmware(bool force) final;
30     sdbusplus::async::task<bool> getCRC(uint32_t* checksum) final;
31 
32     bool forcedUpdateAllowed() final;
33 
34   private:
35     struct Data
36     {
37         uint8_t len;
38         uint8_t pec;
39         uint8_t addr;
40         uint8_t cmd;
41         uint8_t data[30];
42     };
43 
44     struct Configuration
45     {
46         uint8_t addr;
47         uint8_t mode;
48         uint8_t cfgId;
49         uint16_t wrCnt;
50         uint32_t devIdExp;
51         uint32_t devRevExp;
52         uint32_t crcExp;
53         struct Data pData[1024];
54     };
55     sdbusplus::async::task<bool> dmaReadWrite(uint8_t* reg, uint8_t* resp);
56     sdbusplus::async::task<bool> getRemainingWrites(uint8_t* remain);
57     sdbusplus::async::task<bool> getHexMode(uint8_t* mode);
58     sdbusplus::async::task<bool> getDeviceId(uint32_t* deviceId);
59     sdbusplus::async::task<bool> getDeviceRevision(uint32_t* revision);
60     sdbusplus::async::task<bool> program();
61     sdbusplus::async::task<bool> getProgStatus();
62     sdbusplus::async::task<bool> restoreCfg();
63 
64     bool parseImage(const uint8_t* image, size_t imageSize);
65     bool checkImage();
66 
67     phosphor::i2c::I2C i2cInterface;
68     Gen generation;
69     uint8_t mode;
70 
71     struct Configuration configuration;
72 };
73 } // namespace phosphor::software::VR
74