blob: 99da64c8cdfa09556b6902bba9b05dcea9df8c83 [file] [log] [blame]
Daniel Hsub602aad2025-08-14 10:44:38 +08001#include "lattice_base_cpld.hpp"
2
3namespace phosphor::software::cpld
4{
5
6class LatticeXO3CPLD : public LatticeBaseCPLD
7{
8 public:
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