xref: /openbmc/phosphor-bmc-code-mgmt/cpld/lattice/lattice_xo3_cpld.hpp (revision b602aad5026847e2a4895598c6b5b7b08a377282)
1 #include "lattice_base_cpld.hpp"
2 
3 namespace phosphor::software::cpld
4 {
5 
6 class LatticeXO3CPLD : public LatticeBaseCPLD
7 {
8   public:
LatticeXO3CPLD(sdbusplus::async::context & ctx,const uint16_t bus,const uint8_t address,const std::string & chip,const std::string & target,const bool debugMode)9     LatticeXO3CPLD(sdbusplus::async::context& ctx, const uint16_t bus,
10                    const uint8_t address, const std::string& chip,
11                    const std::string& target, const bool debugMode) :
12         LatticeBaseCPLD(ctx, bus, address, chip, target, debugMode)
13     {}
14     ~LatticeXO3CPLD() override = default;
15     LatticeXO3CPLD(const LatticeXO3CPLD&) = delete;
16     LatticeXO3CPLD& operator=(const LatticeXO3CPLD&) = delete;
17     LatticeXO3CPLD(LatticeXO3CPLD&&) noexcept = delete;
18     LatticeXO3CPLD& operator=(LatticeXO3CPLD&&) noexcept = delete;
19 
20   protected:
21     sdbusplus::async::task<bool> prepareUpdate(const uint8_t* image,
22                                                size_t imageSize) override;
23     sdbusplus::async::task<bool> doUpdate() override;
24     sdbusplus::async::task<bool> finishUpdate() override;
25 
26   private:
27     sdbusplus::async::task<bool> readUserCode(uint32_t& userCode) override;
28     sdbusplus::async::task<bool> readDeviceId();
29     sdbusplus::async::task<bool> eraseFlash();
30     sdbusplus::async::task<bool> writeProgramPage();
31     sdbusplus::async::task<bool> programUserCode();
32     sdbusplus::async::task<bool> programSinglePage(
33         uint16_t pageOffset, std::span<const uint8_t> pageData);
34     sdbusplus::async::task<bool> verifySinglePage(
35         uint16_t pageOffset, std::span<const uint8_t> pageData);
36 };
37 
38 } // namespace phosphor::software::cpld
39