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