From d3664b063e03d9d3fa2f1bda12eaed417714e1e0 Mon Sep 17 00:00:00 2001 From: Erwan Gouriou Date: Mon, 9 Mar 2020 10:43:41 +0100 Subject: [PATCH] drivers/spi: stm32: Modify use of "st,stm32-spi-fifo" compatible On stm32 spi devices, there are 2 main IP variants, with and w/o fifo. Fifo is not really used today, but still there is some additional code handling fifo. Today this code is protected under Kconfig symbol SPI_STM32_HAS_FIFO. This code carries redundant information vs dedicated compatible "st,stm32-spi-fifo", which is provided as unique driver compatible for devices supporting this IP as opposed to use of "st,stm32-spi" when fifo is not supported. Having these 2 compatibles defined exclusively is not convenient for migration to DT_INST as DT_INST macros contain compatible string and hence it cannot be used to provide common compatible code for devices defining different compatibles. Based on these observations, review stm32 spi devices compatible declarations. Devices supporting fifo will now declare both compatibles, as proposed by dt spec: "[compatible] property value consists of a concatenated list of null terminated strings, from most specific to most general". Hence field will now be: "st,stm32-spi-fifo", "st,stm32-spi" This way, fifo enabled stm32 spi devices will generate both: DT_INST_STM32_SPI_FOO and DT_INST_STM32_SPI_FIFO_FOO As well as: DT_COMPAT_ST_STM32_SPI and DT_COMPAT_ST_STM32_SPI_FIFO So, DT_INST_STM32_SPI_FOO could be used for device initialization. Also DT_COMPAT_ST_STM32_SPI_FIFO could be used for FIFO handling code inside driver. Hence use it to replace Kconfig symbol SPI_STM32_HAS_FIFO. Signed-off-by: Erwan Gouriou --- drivers/spi/Kconfig.stm32 | 7 ------- drivers/spi/spi_ll_stm32.c | 6 +++--- drivers/spi/spi_ll_stm32.h | 2 +- dts/arm/st/f0/stm32f0.dtsi | 2 +- dts/arm/st/f0/stm32f030X8.dtsi | 2 +- dts/arm/st/f0/stm32f030Xc.dtsi | 2 +- dts/arm/st/f0/stm32f070.dtsi | 2 +- dts/arm/st/f0/stm32f072.dtsi | 2 +- dts/arm/st/f0/stm32f091.dtsi | 2 +- dts/arm/st/f3/stm32f3.dtsi | 2 +- dts/arm/st/f3/stm32f302.dtsi | 4 ++-- dts/arm/st/f3/stm32f303.dtsi | 2 +- dts/arm/st/f3/stm32f373.dtsi | 4 ++-- dts/arm/st/g4/stm32g4.dtsi | 6 +++--- dts/arm/st/l4/stm32l4.dtsi | 2 +- dts/arm/st/l4/stm32l433.dtsi | 2 +- dts/arm/st/l4/stm32l452.dtsi | 4 ++-- dts/arm/st/l4/stm32l471.dtsi | 4 ++-- dts/arm/st/l4/stm32l4r5.dtsi | 4 ++-- dts/arm/st/mp1/stm32mp157.dtsi | 10 +++++----- dts/arm/st/wb/stm32wb.dtsi | 4 ++-- 21 files changed, 34 insertions(+), 41 deletions(-) diff --git a/drivers/spi/Kconfig.stm32 b/drivers/spi/Kconfig.stm32 index be1b0928932..02f652ef6d5 100644 --- a/drivers/spi/Kconfig.stm32 +++ b/drivers/spi/Kconfig.stm32 @@ -12,13 +12,6 @@ menuconfig SPI_STM32 if SPI_STM32 -config SPI_STM32_HAS_FIFO - bool - depends on (SOC_SERIES_STM32L4X || SOC_SERIES_STM32F0X || \ - SOC_SERIES_STM32F3X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32MP1X || \ - SOC_SERIES_STM32WBX || SOC_SERIES_STM32G4X) - default y - config SPI_STM32_INTERRUPT bool "STM32 MCU SPI Interrupt Support" help diff --git a/drivers/spi/spi_ll_stm32.c b/drivers/spi/spi_ll_stm32.c index 268e3450666..5b16df8d5b6 100644 --- a/drivers/spi/spi_ll_stm32.c +++ b/drivers/spi/spi_ll_stm32.c @@ -195,7 +195,7 @@ static void spi_stm32_complete(struct spi_stm32_data *data, SPI_TypeDef *spi, spi_context_cs_control(&data->ctx, false); -#if defined(CONFIG_SPI_STM32_HAS_FIFO) +#if defined(DT_COMPAT_ST_STM32_SPI_FIFO) /* Flush RX buffer */ while (ll_func_rx_is_not_empty(spi)) { (void) LL_SPI_ReceiveData8(spi); @@ -342,7 +342,7 @@ static int spi_stm32_configure(struct device *dev, LL_SPI_SetDataWidth(spi, LL_SPI_DATAWIDTH_16BIT); } -#if defined(CONFIG_SPI_STM32_HAS_FIFO) +#if defined(DT_COMPAT_ST_STM32_SPI_FIFO) ll_func_set_fifo_threshold_8bit(spi); #endif @@ -407,7 +407,7 @@ static int transceive(struct device *dev, /* Set buffers info */ spi_context_buffers_setup(&data->ctx, tx_bufs, rx_bufs, 1); -#if defined(CONFIG_SPI_STM32_HAS_FIFO) +#if defined(DT_COMPAT_ST_STM32_SPI_FIFO) /* Flush RX buffer */ while (ll_func_rx_is_not_empty(spi)) { (void) LL_SPI_ReceiveData8(spi); diff --git a/drivers/spi/spi_ll_stm32.h b/drivers/spi/spi_ll_stm32.h index 38fa32588e3..acc7b2054c2 100644 --- a/drivers/spi/spi_ll_stm32.h +++ b/drivers/spi/spi_ll_stm32.h @@ -116,7 +116,7 @@ static inline u32_t ll_func_spi_is_busy(SPI_TypeDef *spi) /* Header is compiled first, this switch avoid the compiler to lookup for * non-existing LL FIFO functions for SoC without SPI FIFO */ -#ifdef CONFIG_SPI_STM32_HAS_FIFO +#ifdef DT_COMPAT_ST_STM32_SPI_FIFO static inline void ll_func_set_fifo_threshold_8bit(SPI_TypeDef *spi) { #ifdef CONFIG_SOC_SERIES_STM32MP1X diff --git a/dts/arm/st/f0/stm32f0.dtsi b/dts/arm/st/f0/stm32f0.dtsi index 1c06abee08a..451d680f53e 100644 --- a/dts/arm/st/f0/stm32f0.dtsi +++ b/dts/arm/st/f0/stm32f0.dtsi @@ -148,7 +148,7 @@ }; spi1: spi@40013000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40013000 0x400>; diff --git a/dts/arm/st/f0/stm32f030X8.dtsi b/dts/arm/st/f0/stm32f030X8.dtsi index 34a95ae010a..5de6e2678e6 100644 --- a/dts/arm/st/f0/stm32f030X8.dtsi +++ b/dts/arm/st/f0/stm32f030X8.dtsi @@ -19,7 +19,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/f0/stm32f030Xc.dtsi b/dts/arm/st/f0/stm32f030Xc.dtsi index 16ec45aeeaf..454f0819094 100644 --- a/dts/arm/st/f0/stm32f030Xc.dtsi +++ b/dts/arm/st/f0/stm32f030Xc.dtsi @@ -10,7 +10,7 @@ / { soc { spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/f0/stm32f070.dtsi b/dts/arm/st/f0/stm32f070.dtsi index 83d6d527480..497cc9caaed 100644 --- a/dts/arm/st/f0/stm32f070.dtsi +++ b/dts/arm/st/f0/stm32f070.dtsi @@ -15,7 +15,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/f0/stm32f072.dtsi b/dts/arm/st/f0/stm32f072.dtsi index f73ff78a68d..28371ef25c4 100644 --- a/dts/arm/st/f0/stm32f072.dtsi +++ b/dts/arm/st/f0/stm32f072.dtsi @@ -43,7 +43,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/f0/stm32f091.dtsi b/dts/arm/st/f0/stm32f091.dtsi index ed96dc9338c..919f861f2f9 100644 --- a/dts/arm/st/f0/stm32f091.dtsi +++ b/dts/arm/st/f0/stm32f091.dtsi @@ -31,7 +31,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/f3/stm32f3.dtsi b/dts/arm/st/f3/stm32f3.dtsi index 103df3b6550..a87f5807595 100644 --- a/dts/arm/st/f3/stm32f3.dtsi +++ b/dts/arm/st/f3/stm32f3.dtsi @@ -161,7 +161,7 @@ }; spi1: spi@40013000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40013000 0x400>; diff --git a/dts/arm/st/f3/stm32f302.dtsi b/dts/arm/st/f3/stm32f302.dtsi index 80ae0a1102f..9365d2bacea 100644 --- a/dts/arm/st/f3/stm32f302.dtsi +++ b/dts/arm/st/f3/stm32f302.dtsi @@ -40,7 +40,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; @@ -51,7 +51,7 @@ }; spi3: spi@40003c00 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0X40003c00 0x400>; diff --git a/dts/arm/st/f3/stm32f303.dtsi b/dts/arm/st/f3/stm32f303.dtsi index 5b825120e67..f26732c8fb0 100644 --- a/dts/arm/st/f3/stm32f303.dtsi +++ b/dts/arm/st/f3/stm32f303.dtsi @@ -27,7 +27,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/f3/stm32f373.dtsi b/dts/arm/st/f3/stm32f373.dtsi index cee21375ad6..c329d42317d 100644 --- a/dts/arm/st/f3/stm32f373.dtsi +++ b/dts/arm/st/f3/stm32f373.dtsi @@ -33,7 +33,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; @@ -44,7 +44,7 @@ }; spi3: spi@40003c00 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003c00 0x400>; diff --git a/dts/arm/st/g4/stm32g4.dtsi b/dts/arm/st/g4/stm32g4.dtsi index bf04c700805..921c1dd8a78 100644 --- a/dts/arm/st/g4/stm32g4.dtsi +++ b/dts/arm/st/g4/stm32g4.dtsi @@ -223,7 +223,7 @@ }; spi1: spi@40013000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40013000 0x400>; @@ -234,7 +234,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; @@ -245,7 +245,7 @@ }; spi3: spi@40003c00 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003c00 0x400>; diff --git a/dts/arm/st/l4/stm32l4.dtsi b/dts/arm/st/l4/stm32l4.dtsi index 422007f10a1..c871c41a0f9 100644 --- a/dts/arm/st/l4/stm32l4.dtsi +++ b/dts/arm/st/l4/stm32l4.dtsi @@ -166,7 +166,7 @@ }; spi1: spi@40013000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40013000 0x400>; diff --git a/dts/arm/st/l4/stm32l433.dtsi b/dts/arm/st/l4/stm32l433.dtsi index 1cf67b4903b..f9567a2bbe8 100644 --- a/dts/arm/st/l4/stm32l433.dtsi +++ b/dts/arm/st/l4/stm32l433.dtsi @@ -42,7 +42,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; diff --git a/dts/arm/st/l4/stm32l452.dtsi b/dts/arm/st/l4/stm32l452.dtsi index 127e6f52949..68ad9beb38f 100644 --- a/dts/arm/st/l4/stm32l452.dtsi +++ b/dts/arm/st/l4/stm32l452.dtsi @@ -68,7 +68,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; @@ -79,7 +79,7 @@ }; spi3: spi@40003c00 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003c00 0x400>; diff --git a/dts/arm/st/l4/stm32l471.dtsi b/dts/arm/st/l4/stm32l471.dtsi index f6fd79c129b..815f8b04978 100644 --- a/dts/arm/st/l4/stm32l471.dtsi +++ b/dts/arm/st/l4/stm32l471.dtsi @@ -88,7 +88,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; @@ -99,7 +99,7 @@ }; spi3: spi@40003c00 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003c00 0x400>; diff --git a/dts/arm/st/l4/stm32l4r5.dtsi b/dts/arm/st/l4/stm32l4r5.dtsi index a3029fd6207..dfb21398ecb 100644 --- a/dts/arm/st/l4/stm32l4r5.dtsi +++ b/dts/arm/st/l4/stm32l4r5.dtsi @@ -111,7 +111,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>; @@ -122,7 +122,7 @@ }; spi3: spi@40003c00 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003c00 0x400>; diff --git a/dts/arm/st/mp1/stm32mp157.dtsi b/dts/arm/st/mp1/stm32mp157.dtsi index 766b6013c8a..35b6890fceb 100644 --- a/dts/arm/st/mp1/stm32mp157.dtsi +++ b/dts/arm/st/mp1/stm32mp157.dtsi @@ -158,7 +158,7 @@ }; spi1: spi@44004000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; reg = <0x44004000 0x400>; #address-cells = <1>; #size-cells = <0>; @@ -168,7 +168,7 @@ }; spi2: spi@4400b000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; reg = <0x4400b000 0x400>; #address-cells = <1>; #size-cells = <0>; @@ -178,7 +178,7 @@ }; spi3: spi@4400c000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; reg = <0x4400c000 0x400>; #address-cells = <1>; #size-cells = <0>; @@ -188,7 +188,7 @@ }; spi4: spi@44005000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; reg = <0x44005000 0x400>; #address-cells = <1>; #size-cells = <0>; @@ -198,7 +198,7 @@ }; spi5: spi@44009000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; reg = <0x44009000 0x400>; #address-cells = <1>; #size-cells = <0>; diff --git a/dts/arm/st/wb/stm32wb.dtsi b/dts/arm/st/wb/stm32wb.dtsi index c78393076a7..96d5757c3bc 100644 --- a/dts/arm/st/wb/stm32wb.dtsi +++ b/dts/arm/st/wb/stm32wb.dtsi @@ -168,7 +168,7 @@ }; spi1: spi@40013000 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40013000 0x400>; @@ -179,7 +179,7 @@ }; spi2: spi@40003800 { - compatible = "st,stm32-spi-fifo"; + compatible = "st,stm32-spi-fifo", "st,stm32-spi"; #address-cells = <1>; #size-cells = <0>; reg = <0x40003800 0x400>;