mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-04-24 09:03:41 -04:00
[MOS-1011] Fix frequency switching stability
Multiple fixes of clock switching related stability issues: * added RC oscillator hysteresis as in NXP example; * changed DCDC converter config; * configure PLL2 to be able to run on any CPU frequency level; * added switching to 1.275V (overdrive) voltage when applying any clock change above 12MHz as well as LDO or bandgap switching, as done in Mbed OS' lpm.c for RT1050; * changed BMCR AXI queues weighs for SDRAM in JLink scripts to disable operations reordering, as it is known to cause data integrity issues; * extracted some code to separate files; * smaller or bigger code cleanups.
This commit is contained in:
@@ -592,21 +592,18 @@ namespace sys
|
||||
connect(typeid(sys::DeviceRegistrationMessage), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
auto msg = static_cast<sys::DeviceRegistrationMessage *>(message);
|
||||
deviceManager->RegisterNewDevice(msg->getDevice());
|
||||
|
||||
return sys::MessageNone{};
|
||||
});
|
||||
|
||||
connect(typeid(sys::SentinelRegistrationMessage), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
auto msg = static_cast<sys::SentinelRegistrationMessage *>(message);
|
||||
powerManager->RegisterNewSentinel(msg->getSentinel());
|
||||
|
||||
return sys::MessageNone{};
|
||||
});
|
||||
|
||||
connect(typeid(sys::SentinelRemovalMessage), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
auto msg = static_cast<sys::SentinelRemovalMessage *>(message);
|
||||
powerManager->RemoveSentinel(msg->getSentinelName());
|
||||
|
||||
return std::make_shared<sys::ResponseMessage>();
|
||||
});
|
||||
|
||||
@@ -622,22 +619,21 @@ namespace sys
|
||||
connect(typeid(sys::ReleaseCpuFrequencyMessage), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
auto msg = static_cast<sys::ReleaseCpuFrequencyMessage *>(message);
|
||||
powerManager->ResetCpuFrequencyRequest(msg->getName());
|
||||
|
||||
return sys::MessageNone{};
|
||||
});
|
||||
|
||||
connect(typeid(sys::IsCpuPernament), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
return std::make_shared<sys::IsCpuPernamentResponse>(powerManager->IsCpuPernamentFrequency());
|
||||
connect(typeid(sys::IsCpuPermanent), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
return std::make_shared<sys::IsCpuPermanentResponse>(powerManager->IsCpuPermanentFrequency());
|
||||
});
|
||||
|
||||
connect(typeid(sys::HoldCpuFrequencyPermanentlyMessage), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
auto msg = static_cast<sys::HoldCpuFrequencyPermanentlyMessage *>(message);
|
||||
powerManager->SetPernamentFrequency(msg->request);
|
||||
powerManager->SetPermanentFrequency(msg->request);
|
||||
return std::make_shared<sys::HoldCpuFrequencyPermanentlyResponse>();
|
||||
});
|
||||
|
||||
connect(typeid(sys::ReleaseCpuPermanentFrequencyMessage), [this](sys::Message *message) -> sys::MessagePointer {
|
||||
powerManager->ResetPernamentFrequency();
|
||||
powerManager->ResetPermanentFrequency();
|
||||
return std::make_shared<sys::HoldCpuFrequencyPermanentlyResponse>();
|
||||
});
|
||||
|
||||
@@ -754,7 +750,7 @@ namespace sys
|
||||
|
||||
void SystemManagerCommon::UpdateResourcesAfterCpuFrequencyChange(bsp::CpuFrequencyMHz newFrequency)
|
||||
{
|
||||
if (newFrequency <= bsp::CpuFrequencyMHz::Level_1) {
|
||||
if (newFrequency <= bsp::CpuFrequencyMHz::Level_2) {
|
||||
purefs::subsystem::disk_mgr()->pm_control(purefs::blkdev::pm_state::suspend);
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user