xref: /openbmc/phosphor-bmc-code-mgmt/cpld/lattice/lattice_xo5_cpld.hpp (revision a3902c83e3b65c3612e419cc1e616c56be65ff41)
1*a3902c83SDaniel Hsu #include "lattice_base_cpld.hpp"
2*a3902c83SDaniel Hsu 
3*a3902c83SDaniel Hsu namespace phosphor::software::cpld
4*a3902c83SDaniel Hsu {
5*a3902c83SDaniel Hsu 
6*a3902c83SDaniel Hsu class LatticeXO5CPLD : public LatticeBaseCPLD
7*a3902c83SDaniel Hsu {
8*a3902c83SDaniel Hsu   public:
LatticeXO5CPLD(sdbusplus::async::context & ctx,const uint16_t bus,const uint8_t address,const std::string & chip,const std::string & target,const bool debugMode)9*a3902c83SDaniel Hsu     LatticeXO5CPLD(sdbusplus::async::context& ctx, const uint16_t bus,
10*a3902c83SDaniel Hsu                    const uint8_t address, const std::string& chip,
11*a3902c83SDaniel Hsu                    const std::string& target, const bool debugMode) :
12*a3902c83SDaniel Hsu         LatticeBaseCPLD(ctx, bus, address, chip, target, debugMode)
13*a3902c83SDaniel Hsu     {}
14*a3902c83SDaniel Hsu     ~LatticeXO5CPLD() override = default;
15*a3902c83SDaniel Hsu     LatticeXO5CPLD(const LatticeXO5CPLD&) = delete;
16*a3902c83SDaniel Hsu     LatticeXO5CPLD& operator=(const LatticeXO5CPLD&) = delete;
17*a3902c83SDaniel Hsu     LatticeXO5CPLD(LatticeXO5CPLD&&) noexcept = delete;
18*a3902c83SDaniel Hsu     LatticeXO5CPLD& operator=(LatticeXO5CPLD&&) noexcept = delete;
19*a3902c83SDaniel Hsu 
20*a3902c83SDaniel Hsu   protected:
21*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> prepareUpdate(const uint8_t* image,
22*a3902c83SDaniel Hsu                                                size_t imageSize) override;
23*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> doUpdate() override;
24*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> finishUpdate() override;
25*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> readUserCode(uint32_t& userCode) override;
26*a3902c83SDaniel Hsu 
27*a3902c83SDaniel Hsu   private:
28*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> waitUntilReady(
29*a3902c83SDaniel Hsu         std::chrono::milliseconds timeout);
30*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> eraseCfg();
31*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> programCfg();
32*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> programPage(uint8_t block, uint8_t page,
33*a3902c83SDaniel Hsu                                              const std::vector<uint8_t>& data);
34*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> verifyCfg();
35*a3902c83SDaniel Hsu     sdbusplus::async::task<bool> readPage(uint8_t block, uint8_t page,
36*a3902c83SDaniel Hsu                                           std::vector<uint8_t>& data);
37*a3902c83SDaniel Hsu };
38*a3902c83SDaniel Hsu 
39*a3902c83SDaniel Hsu } // namespace phosphor::software::cpld
40