From 9062e97a45e8a85b97e27c74098692553feefc2b Mon Sep 17 00:00:00 2001 From: Erwan Gouriou Date: Fri, 7 Dec 2018 11:09:28 +0100 Subject: [PATCH] drivers: stm32: check clock_control_on return value Check clock_control_on return value now that it is checking appropriate bus is used in the request. Signed-off-by: Erwan Gouriou --- drivers/dma/dma_stm32f4x.c | 6 +++++- drivers/entropy/entropy_stm32.c | 4 +++- drivers/ethernet/eth_stm32_hal.c | 14 ++++++++++---- drivers/flash/flash_stm32.c | 4 +++- drivers/gpio/gpio_stm32.c | 5 ++++- drivers/i2c/i2c_ll_stm32.c | 6 +++++- drivers/i2s/i2s_ll_stm32.c | 1 + drivers/pwm/pwm_stm32.c | 6 ++++-- drivers/rtc/rtc_ll_stm32.c | 5 ++++- drivers/serial/uart_stm32.c | 6 ++++-- drivers/spi/spi_ll_stm32.c | 7 +++++-- drivers/usb/device/usb_dc_stm32.c | 5 ++++- 12 files changed, 52 insertions(+), 17 deletions(-) diff --git a/drivers/dma/dma_stm32f4x.c b/drivers/dma/dma_stm32f4x.c index d9cdcc2bea9..499a969f10c 100644 --- a/drivers/dma/dma_stm32f4x.c +++ b/drivers/dma/dma_stm32f4x.c @@ -499,7 +499,11 @@ static int dma_stm32_init(struct device *dev) __ASSERT_NO_MSG(ddata->clk); - clock_control_on(ddata->clk, (clock_control_subsys_t *) &cdata->pclken); + if (clock_control_on(ddata->clk, + (clock_control_subsys_t *) &cdata->pclken) != 0) { + LOG_ERR("Could not enable DMA clock\n"); + return -EIO; + } /* Set controller specific configuration */ cdata->config(ddata); diff --git a/drivers/entropy/entropy_stm32.c b/drivers/entropy/entropy_stm32.c index c879e79b17f..fc5d134234c 100644 --- a/drivers/entropy/entropy_stm32.c +++ b/drivers/entropy/entropy_stm32.c @@ -151,6 +151,7 @@ static int entropy_stm32_rng_init(struct device *dev) { struct entropy_stm32_rng_dev_data *dev_data; struct entropy_stm32_rng_dev_cfg *dev_cfg; + int res; __ASSERT_NO_MSG(dev != NULL); @@ -186,8 +187,9 @@ static int entropy_stm32_rng_init(struct device *dev) dev_data->clock = device_get_binding(STM32_CLOCK_CONTROL_NAME); __ASSERT_NO_MSG(dev_data->clock != NULL); - clock_control_on(dev_data->clock, + res = clock_control_on(dev_data->clock, (clock_control_subsys_t *)&dev_cfg->pclken); + __ASSERT_NO_MSG(res); LL_RNG_Enable(dev_data->rng); diff --git a/drivers/ethernet/eth_stm32_hal.c b/drivers/ethernet/eth_stm32_hal.c index 331095bc0a0..113c135aff8 100644 --- a/drivers/ethernet/eth_stm32_hal.c +++ b/drivers/ethernet/eth_stm32_hal.c @@ -263,6 +263,7 @@ static int eth_initialize(struct device *dev) { struct eth_stm32_hal_dev_data *dev_data; struct eth_stm32_hal_dev_cfg *cfg; + int ret = 0; __ASSERT_NO_MSG(dev != NULL); @@ -276,15 +277,20 @@ static int eth_initialize(struct device *dev) __ASSERT_NO_MSG(dev_data->clock != NULL); /* enable clock */ - clock_control_on(dev_data->clock, + ret = clock_control_on(dev_data->clock, (clock_control_subsys_t *)&cfg->pclken); - clock_control_on(dev_data->clock, + ret |= clock_control_on(dev_data->clock, (clock_control_subsys_t *)&cfg->pclken_tx); - clock_control_on(dev_data->clock, + ret |= clock_control_on(dev_data->clock, (clock_control_subsys_t *)&cfg->pclken_rx); - clock_control_on(dev_data->clock, + ret |= clock_control_on(dev_data->clock, (clock_control_subsys_t *)&cfg->pclken_ptp); + if (ret) { + LOG_ERR("Failed to enable ethernet clock"); + return -EIO; + } + __ASSERT_NO_MSG(cfg->config_func != NULL); cfg->config_func(); diff --git a/drivers/flash/flash_stm32.c b/drivers/flash/flash_stm32.c index b58c0e799e8..b3c577ab199 100644 --- a/drivers/flash/flash_stm32.c +++ b/drivers/flash/flash_stm32.c @@ -252,7 +252,9 @@ static int stm32_flash_init(struct device *dev) #endif /* enable clock */ - clock_control_on(clk, (clock_control_subsys_t *)&p->pclken); + if (clock_control_on(clk, (clock_control_subsys_t *)&p->pclken) != 0) { + return -EIO; + } #endif k_sem_init(&p->sem, 1, 1); diff --git a/drivers/gpio/gpio_stm32.c b/drivers/gpio/gpio_stm32.c index 0410e00753d..2cebe565317 100644 --- a/drivers/gpio/gpio_stm32.c +++ b/drivers/gpio/gpio_stm32.c @@ -192,7 +192,10 @@ static int gpio_stm32_init(struct device *device) struct device *clk = device_get_binding(STM32_CLOCK_CONTROL_NAME); - clock_control_on(clk, (clock_control_subsys_t *) &cfg->pclken); + if (clock_control_on(clk, + (clock_control_subsys_t *) &cfg->pclken) != 0) { + return -EIO; + } return 0; } diff --git a/drivers/i2c/i2c_ll_stm32.c b/drivers/i2c/i2c_ll_stm32.c index 7806692635f..cbf202086da 100644 --- a/drivers/i2c/i2c_ll_stm32.c +++ b/drivers/i2c/i2c_ll_stm32.c @@ -170,7 +170,11 @@ static int i2c_stm32_init(struct device *dev) #endif __ASSERT_NO_MSG(clock); - clock_control_on(clock, (clock_control_subsys_t *) &cfg->pclken); + if (clock_control_on(clock, + (clock_control_subsys_t *) &cfg->pclken) != 0) { + LOG_ERR("i2c: failure enabling clock"); + return -EIO; + } #if defined(CONFIG_SOC_SERIES_STM32F3X) || defined(CONFIG_SOC_SERIES_STM32F0X) /* diff --git a/drivers/i2s/i2s_ll_stm32.c b/drivers/i2s/i2s_ll_stm32.c index a8b6cb7db03..a4f15388c4f 100644 --- a/drivers/i2s/i2s_ll_stm32.c +++ b/drivers/i2s/i2s_ll_stm32.c @@ -99,6 +99,7 @@ static int i2s_stm32_enable_clock(struct device *dev) ret = clock_control_on(clk, (clock_control_subsys_t *) &cfg->pclken); if (ret != 0) { + LOG_ERR("Could not enable I2S clock"); return -EIO; } diff --git a/drivers/pwm/pwm_stm32.c b/drivers/pwm/pwm_stm32.c index 487a193addc..f440efcf762 100644 --- a/drivers/pwm/pwm_stm32.c +++ b/drivers/pwm/pwm_stm32.c @@ -196,8 +196,10 @@ static int pwm_stm32_init(struct device *dev) __pwm_stm32_get_clock(dev); /* enable clock */ - clock_control_on(data->clock, - (clock_control_subsys_t *)&config->pclken); + if (clock_control_on(data->clock, + (clock_control_subsys_t *)&config->pclken) != 0) { + return -EIO; + } return 0; } diff --git a/drivers/rtc/rtc_ll_stm32.c b/drivers/rtc/rtc_ll_stm32.c index 5591cf01ec0..8de528d5959 100644 --- a/drivers/rtc/rtc_ll_stm32.c +++ b/drivers/rtc/rtc_ll_stm32.c @@ -214,7 +214,10 @@ static int rtc_stm32_init(struct device *dev) k_sem_init(DEV_SEM(dev), 1, UINT_MAX); DEV_DATA(dev)->cb_fn = NULL; - clock_control_on(clk, (clock_control_subsys_t *) &cfg->pclken); + if (clock_control_on(clk, + (clock_control_subsys_t *) &cfg->pclken) != 0) { + return -EIO; + } LL_PWR_EnableBkUpAccess(); LL_RCC_ForceBackupDomainReset(); diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c index e29aec20019..92c8d50744a 100644 --- a/drivers/serial/uart_stm32.c +++ b/drivers/serial/uart_stm32.c @@ -311,8 +311,10 @@ static int uart_stm32_init(struct device *dev) __uart_stm32_get_clock(dev); /* enable clock */ - clock_control_on(data->clock, - (clock_control_subsys_t *)&config->pclken); + if (clock_control_on(data->clock, + (clock_control_subsys_t *)&config->pclken) != 0) { + return -EIO; + } LL_USART_Disable(UartInstance); diff --git a/drivers/spi/spi_ll_stm32.c b/drivers/spi/spi_ll_stm32.c index 3d70d4391d6..103d53084ef 100644 --- a/drivers/spi/spi_ll_stm32.c +++ b/drivers/spi/spi_ll_stm32.c @@ -465,8 +465,11 @@ static int spi_stm32_init(struct device *dev) __ASSERT_NO_MSG(device_get_binding(STM32_CLOCK_CONTROL_NAME)); - clock_control_on(device_get_binding(STM32_CLOCK_CONTROL_NAME), - (clock_control_subsys_t) &cfg->pclken); + if (clock_control_on(device_get_binding(STM32_CLOCK_CONTROL_NAME), + (clock_control_subsys_t) &cfg->pclken) != 0) { + LOG_ERR("Could not enable SPI clock"); + return -EIO; + } #ifdef CONFIG_SPI_STM32_INTERRUPT cfg->irq_config(dev); diff --git a/drivers/usb/device/usb_dc_stm32.c b/drivers/usb/device/usb_dc_stm32.c index e641ada2230..0732f10a6c7 100644 --- a/drivers/usb/device/usb_dc_stm32.c +++ b/drivers/usb/device/usb_dc_stm32.c @@ -253,7 +253,10 @@ static int usb_dc_stm32_clock_enable(void) } #endif /* RCC_HSI48_SUPPORT / LL_RCC_USB_CLKSOURCE_NONE */ - clock_control_on(clk, (clock_control_subsys_t *)&pclken); + if (clock_control_on(clk, (clock_control_subsys_t *)&pclken) != 0) { + LOG_ERR("Unable to enable USB clock"); + return -EIO; + } #ifdef DT_USB_HS_BASE_ADDRESS