blob: b2734cef3bc507f73741347e9484c9067b2a3a97 [file] [log] [blame]
#include "interface.hpp"
#include "lattice.hpp"
#include <phosphor-logging/lg2.hpp>
namespace phosphor::software::cpld
{
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, info] : supportedDeviceMap)
{
auto typeStr = std::string(type);
CPLDFactory::instance().registerCPLD(
type, [info](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, info.chipName, bus,
address);
});
}
return true;
}();
} // namespace