mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-13 17:44:38 +02:00
rtc_clk: fix potential "division by zero" in rtc_clk_cpu_freq_mhz_to_config (found by coverity scan)
This commit is contained in:
@@ -667,7 +667,7 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t* ou
|
|||||||
uint32_t real_freq_mhz;
|
uint32_t real_freq_mhz;
|
||||||
|
|
||||||
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
||||||
if (freq_mhz <= xtal_freq) {
|
if (freq_mhz <= xtal_freq && freq_mhz != 0) {
|
||||||
divider = xtal_freq / freq_mhz;
|
divider = xtal_freq / freq_mhz;
|
||||||
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
||||||
if (real_freq_mhz != freq_mhz) {
|
if (real_freq_mhz != freq_mhz) {
|
||||||
|
@@ -178,7 +178,7 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
|
|||||||
uint32_t real_freq_mhz;
|
uint32_t real_freq_mhz;
|
||||||
|
|
||||||
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
||||||
if (freq_mhz <= xtal_freq) {
|
if (freq_mhz <= xtal_freq && freq_mhz != 0) {
|
||||||
divider = xtal_freq / freq_mhz;
|
divider = xtal_freq / freq_mhz;
|
||||||
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
||||||
if (real_freq_mhz != freq_mhz) {
|
if (real_freq_mhz != freq_mhz) {
|
||||||
|
@@ -294,7 +294,7 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
|
|||||||
uint32_t real_freq_mhz;
|
uint32_t real_freq_mhz;
|
||||||
|
|
||||||
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
||||||
if (freq_mhz <= xtal_freq) {
|
if (freq_mhz <= xtal_freq && freq_mhz != 0) {
|
||||||
divider = xtal_freq / freq_mhz;
|
divider = xtal_freq / freq_mhz;
|
||||||
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
||||||
if (real_freq_mhz != freq_mhz) {
|
if (real_freq_mhz != freq_mhz) {
|
||||||
|
@@ -212,11 +212,14 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
|
|||||||
source_freq_mhz = RTC_PLL_FREQ_96M;
|
source_freq_mhz = RTC_PLL_FREQ_96M;
|
||||||
divider = RTC_PLL_FREQ_96M / freq_mhz;
|
divider = RTC_PLL_FREQ_96M / freq_mhz;
|
||||||
rtc_clk_ahb_freq_set(2);
|
rtc_clk_ahb_freq_set(2);
|
||||||
} else {
|
} else if (freq_mhz != 0) {
|
||||||
source = root_clk_get();
|
source = root_clk_get();
|
||||||
source_freq_mhz = root_clk_slt(source);
|
source_freq_mhz = root_clk_slt(source);
|
||||||
divider = source_freq_mhz / freq_mhz;
|
divider = source_freq_mhz / freq_mhz;
|
||||||
rtc_clk_ahb_freq_set(1);
|
rtc_clk_ahb_freq_set(1);
|
||||||
|
} else {
|
||||||
|
// unsupported frequency
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
*out_config = (rtc_cpu_freq_config_t) {
|
*out_config = (rtc_cpu_freq_config_t) {
|
||||||
.source = source,
|
.source = source,
|
||||||
|
@@ -357,7 +357,7 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t* ou
|
|||||||
uint32_t real_freq_mhz;
|
uint32_t real_freq_mhz;
|
||||||
|
|
||||||
uint32_t xtal_freq = RTC_XTAL_FREQ;
|
uint32_t xtal_freq = RTC_XTAL_FREQ;
|
||||||
if (freq_mhz <= xtal_freq) {
|
if (freq_mhz <= xtal_freq && freq_mhz != 0) {
|
||||||
divider = xtal_freq / freq_mhz;
|
divider = xtal_freq / freq_mhz;
|
||||||
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
||||||
if (real_freq_mhz != freq_mhz) {
|
if (real_freq_mhz != freq_mhz) {
|
||||||
|
@@ -326,7 +326,7 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
|
|||||||
uint32_t real_freq_mhz;
|
uint32_t real_freq_mhz;
|
||||||
|
|
||||||
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
uint32_t xtal_freq = (uint32_t) rtc_clk_xtal_freq_get();
|
||||||
if (freq_mhz <= xtal_freq) {
|
if (freq_mhz <= xtal_freq && freq_mhz != 0) {
|
||||||
divider = xtal_freq / freq_mhz;
|
divider = xtal_freq / freq_mhz;
|
||||||
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
real_freq_mhz = (xtal_freq + divider / 2) / divider; /* round */
|
||||||
if (real_freq_mhz != freq_mhz) {
|
if (real_freq_mhz != freq_mhz) {
|
||||||
|
Reference in New Issue
Block a user