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