xref: /openbmc/phosphor-bmc-code-mgmt/i2c-vr/i2cvr_device.cpp (revision bd5081f0b99a27dde8101576524b2c02a4a580b6)
1 #include "i2cvr_device.hpp"
2 
3 #include <phosphor-logging/lg2.hpp>
4 #include <sdbusplus/async.hpp>
5 #include <sdbusplus/async/context.hpp>
6 
7 namespace phosphor::software::i2c_vr::device
8 {
9 
10 sdbusplus::async::task<bool> I2CVRDevice::updateDevice(const uint8_t* image,
11                                                        size_t imageSize)
12 {
13     bool ret = false;
14     setUpdateProgress(20);
15 
16     // NOLINTBEGIN(clang-analyzer-core.uninitialized.Branch)
17     ret = co_await vrInterface->verifyImage(image, imageSize);
18     //  NOLINTEND(clang-analyzer-core.uninitialized.Branch)
19     if (!ret)
20     {
21         co_return false;
22     }
23 
24     setUpdateProgress(50);
25 
26     // NOLINTBEGIN(clang-analyzer-core.uninitialized.Branch)
27     ret = co_await vrInterface->updateFirmware(false);
28     //  NOLINTEND(clang-analyzer-core.uninitialized.Branch)
29     if (!ret)
30     {
31         co_return false;
32     }
33 
34     setUpdateProgress(80);
35 
36     // NOLINTBEGIN(clang-analyzer-core.uninitialized.Branch)
37     ret = co_await vrInterface->reset();
38     //  NOLINTEND(clang-analyzer-core.uninitialized.Branch)
39     if (!ret)
40     {
41         co_return false;
42     }
43 
44     setUpdateProgress(100);
45 
46     lg2::info("Successfully updated VR {NAME}", "NAME", config.configName);
47 
48     co_return true;
49 }
50 
51 sdbusplus::async::task<bool> I2CVRDevice::getVersion(uint32_t* sum) const
52 {
53     // NOLINTBEGIN(clang-analyzer-core.uninitialized.Branch)
54     if (!(co_await this->vrInterface->getCRC(sum)))
55     //  NOLINTEND(clang-analyzer-core.uninitialized.Branch)
56     {
57         co_return false;
58     }
59     co_return true;
60 }
61 
62 } // namespace phosphor::software::i2c_vr::device
63