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