1*f6470b5eSDaniel Hsu #include "cpld.hpp" 2*f6470b5eSDaniel Hsu 3*f6470b5eSDaniel Hsu namespace phosphor::software::cpld 4*f6470b5eSDaniel Hsu { 5*f6470b5eSDaniel Hsu updateDevice(const uint8_t * image,size_t image_size)6*f6470b5eSDaniel Hsusdbusplus::async::task<bool> CPLDDevice::updateDevice(const uint8_t* image, 7*f6470b5eSDaniel Hsu size_t image_size) 8*f6470b5eSDaniel Hsu { 9*f6470b5eSDaniel Hsu if (cpldInterface == nullptr) 10*f6470b5eSDaniel Hsu { 11*f6470b5eSDaniel Hsu lg2::error("CPLD interface is not initialized"); 12*f6470b5eSDaniel Hsu co_return false; 13*f6470b5eSDaniel Hsu } 14*f6470b5eSDaniel Hsu else 15*f6470b5eSDaniel Hsu { 16*f6470b5eSDaniel Hsu setUpdateProgress(1); 17*f6470b5eSDaniel Hsu if (!(co_await cpldInterface->updateFirmware( 18*f6470b5eSDaniel Hsu false, image, image_size, [this](int percent) -> bool { 19*f6470b5eSDaniel Hsu return this->setUpdateProgress(percent); 20*f6470b5eSDaniel Hsu }))) 21*f6470b5eSDaniel Hsu { 22*f6470b5eSDaniel Hsu lg2::error("Failed to update CPLD firmware"); 23*f6470b5eSDaniel Hsu co_return false; 24*f6470b5eSDaniel Hsu } 25*f6470b5eSDaniel Hsu 26*f6470b5eSDaniel Hsu setUpdateProgress(100); 27*f6470b5eSDaniel Hsu lg2::info("Successfully updated CPLD"); 28*f6470b5eSDaniel Hsu co_return true; 29*f6470b5eSDaniel Hsu } 30*f6470b5eSDaniel Hsu } 31*f6470b5eSDaniel Hsu getVersion(std::string & version)32*f6470b5eSDaniel Hsusdbusplus::async::task<bool> CPLDDevice::getVersion(std::string& version) 33*f6470b5eSDaniel Hsu { 34*f6470b5eSDaniel Hsu if (cpldInterface == nullptr) 35*f6470b5eSDaniel Hsu { 36*f6470b5eSDaniel Hsu lg2::error("CPLD interface is not initialized"); 37*f6470b5eSDaniel Hsu co_return false; 38*f6470b5eSDaniel Hsu } 39*f6470b5eSDaniel Hsu else 40*f6470b5eSDaniel Hsu { 41*f6470b5eSDaniel Hsu if (!(co_await cpldInterface->getVersion(version))) 42*f6470b5eSDaniel Hsu { 43*f6470b5eSDaniel Hsu lg2::error("Failed to get CPLD version"); 44*f6470b5eSDaniel Hsu co_return false; 45*f6470b5eSDaniel Hsu } 46*f6470b5eSDaniel Hsu 47*f6470b5eSDaniel Hsu lg2::info("CPLD version: {VERSION}", "VERSION", version); 48*f6470b5eSDaniel Hsu co_return true; 49*f6470b5eSDaniel Hsu } 50*f6470b5eSDaniel Hsu } 51*f6470b5eSDaniel Hsu 52*f6470b5eSDaniel Hsu } // namespace phosphor::software::cpld 53