blob: 723ab68ae9102d5e4aaa7dd24f32ca144dfc5c9c [file] [log] [blame]
Christopher Meisf00ce802025-04-08 08:07:31 +02001#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
10namespace phosphor::software::VR
11{
12
13class ISL69269 : public VoltageRegulator
14{
15 public:
cchoux86a2fd02025-08-20 16:22:12 +080016 enum class Gen
17 {
18 Gen2,
Leo Yangb5938702025-09-30 15:51:54 +080019 Gen3,
20 Gen3p5
cchoux86a2fd02025-08-20 16:22:12 +080021 };
22
23 ISL69269(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address,
24 Gen gen = Gen::Gen3);
Christopher Meisf00ce802025-04-08 08:07:31 +020025
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;
Christopher Meisf00ce802025-04-08 08:07:31 +020031
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;
cchoux86a2fd02025-08-20 16:22:12 +080068 Gen generation;
Christopher Meisf00ce802025-04-08 08:07:31 +020069 uint8_t mode;
70
71 struct Configuration configuration;
72};
73} // namespace phosphor::software::VR