[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:
Lefucjusz
2023-09-07 14:27:00 +02:00
committed by Marcin Łyda
parent 321f56e774
commit 3cbbeff551
36 changed files with 404 additions and 322 deletions

View File

@@ -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 {