blob: 21663f0a134dfd02ab59626b61ed5a68dc1322b8 [file] [log] [blame]
#include "interface.hpp"
#include "lattice.hpp"
#include <phosphor-logging/lg2.hpp>
namespace phosphor::software::cpld
{
const std::vector<std::string> supportedTypes = {
"LatticeXO2Firmware",
"LatticeXO3Firmware",
};
sdbusplus::async::task<bool> LatticeCPLD::updateFirmware(
bool /*force*/, const uint8_t* image, size_t imageSize,
std::function<bool(int)> progressCallBack)
{
lg2::info("Updating Lattice CPLD firmware");
std::replace(chipname.begin(), chipname.end(), '_', '-');
auto cpldManager = std::make_unique<CpldLatticeManager>(
ctx, bus, address, image, imageSize, chipname, "CFG0", false);
co_return co_await cpldManager->updateFirmware(progressCallBack);
}
sdbusplus::async::task<bool> LatticeCPLD::getVersion(std::string& version)
{
lg2::info("Getting Lattice CPLD version");
std::replace(chipname.begin(), chipname.end(), '_', '-');
auto cpldManager = std::make_unique<CpldLatticeManager>(
ctx, bus, address, nullptr, 0, chipname, "CFG0", false);
co_return co_await cpldManager->getVersion(version);
}
} // namespace phosphor::software::cpld
// Factory function to create lattice CPLD device
namespace
{
using namespace phosphor::software::cpld;
// Register all the CPLD type with the CPLD factory
const bool vendorRegistered = [] {
for (const auto& type : supportedTypes)
{
CPLDFactory::instance().registerCPLD(
type,
[](sdbusplus::async::context& ctx, const std::string& chipname,
uint16_t bus, uint8_t address) {
// Create and return a LatticeCPLD instance
// Pass the parameters to the constructor
return std::make_unique<LatticeCPLD>(ctx, chipname, bus,
address);
});
}
return true;
}();
} // namespace