Skip to main content
Visitor II
October 30, 2020
Question

Cannot enable SPI_STM32 in Kernel using menuconfig (conflicting information in WikiI)

  • October 30, 2020
  • 4 replies
  • 2816 views

I would like to understand why I cannot find and enable STM32 SPI support in the Linux kernel and resolve conflicting information in the Wiki articles I am using.

When I use menuconfig, I cannot locate STM32 SPI support in the menu. If I use the search option (/) I can see the reasons are that SPI_STM32 depends on ARCH_STM32 which is set to [N]. In addition, ARCH_STM32 depends on ARM_SINGLE_ARMV7M which is also set to [N].

Are there any other parameters I should be adding to the invocation of 'make menuconfig'?

Any ideas why these variables are not set correctly and how to resolve the issue?

I suspected something about my environment. I am using the Developer Package and running the following to setup the terminal environment:

source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

I have applied the patches and fragments and not had an issue building or running the kernel or adding a device tree change from the Cube code generator.

Now, on to the Wiki conflicts.

In section 2 of the Wiki article at https://wiki.st.com/stm32mpu/wiki/Menuconfig_or_how_to_configure_kernel

it states that the CROSS_COMPILE environment should be 'arm-openstlinux_weston-linux-gnueabi-'

In section 5.1.1 of the Wiki article at https://wiki.st.com/stm32mpu/wiki/STM32MP1_Developer_Package

is states that the CROSS_COMPILE environment should be 'arm-ostl-linux-gnueabi-'.

I am getting 'arm-ostl-linux-gnueabi-'. Which article is correct?

    This topic has been closed for replies.

    4 replies

    Technical Moderator
    November 5, 2020

    Hi @Community member​ ,

    Once fragment and patch are properly applied you should have correct state :

     SPI_STM32 and ARCH_STM32 are both =y

    Please double check using README.HOWTO.txt describing procedure.

    For wiki "arm-ostl-linux-gnueabi" you have is the right one.

    We will correct page containing 'arm-openstlinux_weston-linux-gnueabi-'

    Olivier

    AStev.2Author
    Visitor II
    November 5, 2020

    Hi Olivier,

    I had already checked the README.HOWTO.txt procedure. For your reference, this is how I prepared the kernel.

    I have consulted the following Wiki articles but despite following the advice have not been able to activate it (no such issues getting SPI4 working on the M4):

    https://wiki.st.com/stm32mpu/wiki/SPI_device_tree_configuration

    https://wiki.st.com/stm32mpu/wiki/Menuconfig_or_how_to_configure_kernel

    https://wiki.st.com/stm32mpu/wiki/STM32MP1_Developer_Package

    https://wiki.st.com/stm32mpu/wiki/SPI_overview

    I understand from the above articles I should see an 'STMicroelectronics STM32 SPI controller' listed in the 'Device Drivers->SPI Support' section of the Linux kernel configuration. This is not appearing when I invoke the config system with 'make ARCH=arm menuconfig'. Why not?

    Additionally, when I boot the kernel on the target I see no SPI support:

    'ls /dev' on the target shows no spidevX devices.

    'ls /sys/class' on the target shows 'spi_master' and 'spidev' but no devices listed within.

    My process to build the kernel was to:

    1) Add SPI5 in the STM32CubeIDE and configure the PF9 for SPI5_MOSI and PF7 for SPI_SCK

    2) Confirmed the appropriate device tree content was added to 'stm32mp157c-angelina-mx.dts' (see below for extracts from this file)

    3) Opened a terminal and sourced the environment with:

       source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

    4) Extracted the kernel source code

    5) Copied my 'stm32mp157c-angelina-mx.dts' to 'linux-5.4.31/arch/arm/boot/dts'

    6) Modified dts Makefile to add 'stm32mp157c-angelina-mx.dtb'

    7) Applied all ST patches 1 through 23:

    patch -p1 < ../0001-ARM-stm32mp1-r1-MACHINE.patch

    patch -p1 < ../0002-ARM-stm32mp1-r1-CPUFREQ.patch

    patch -p1 < ../0003-ARM-stm32mp1-r1-CRYPTO.patch

    patch -p1 < ../0004-ARM-stm32mp1-r1-RNG-DEBUG-NVMEM.patch

    patch -p1 < ../0005-ARM-stm32mp1-r1-CLOCK.patch

    patch -p1 < ../0006-ARM-stm32mp1-r1-DMA.patch

    patch -p1 < ../0007-ARM-stm32mp1-r1-DRM.patch

    patch -p1 < ../0008-ARM-stm32mp1-r1-HWSPINLOCK.patch

    patch -p1 < ../0009-ARM-stm32mp1-r1-I2C-IIO-IRQCHIP.patch

    patch -p1 < ../0010-ARM-stm32mp1-r1-MAILBOX-REMOTEPROC-RPMSG.patch

    patch -p1 < ../0011-ARM-stm32mp1-r1-RESET-RTC-WATCHDOG.patch

    patch -p1 < ../0012-ARM-stm32mp1-r1-MEDIA-SOC-THERMAL.patch

    patch -p1 < ../0013-ARM-stm32mp1-r1-MFD.patch

    patch -p1 < ../0014-ARM-stm32mp1-r1-MMC-NAND.patch

    patch -p1 < ../0015-ARM-stm32mp1-r1-NET-TTY.patch

    patch -p1 < ../0016-ARM-stm32mp1-r1-PHY-USB.patch

    patch -p1 < ../0017-ARM-stm32mp1-r1-PINCTRL-REGULATOR-SPI-PWM.patch

    patch -p1 < ../0018-ARM-stm32mp1-r1-SOUND.patch

    patch -p1 < ../0019-ARM-stm32mp1-r1-MISC.patch

    patch -p1 < ../0020-ARM-stm32mp1-r1-DEVICETREE.patch

    patch -p1 < ../0021-ARM-stm32mp1-r1-CONFIG.patch

    patch -p1 < ../0022-ARM-stm32mp1-r1-POWER.patch

    patch -p1 < ../0023-ARM-stm32mp1-r1-PERF.patch

    8) make ARCH=arm O="$PWD/../build" multi_v7_defconfig fragment*.config

    9) Applied fragments 03 ot 06 with:

    scripts/kconfig/merge_config.sh -m -r -O $PWD/../build $PWD/../build/.config ../fragment-03-systemd.config

    scripts/kconfig/merge_config.sh -m -r -O $PWD/../build $PWD/../build/.config ../fragment-04-optee.config

    scripts/kconfig/merge_config.sh -m -r -O $PWD/../build $PWD/../build/.config ../fragment-05-modules.config

    scripts/kconfig/merge_config.sh -m -r -O $PWD/../build $PWD/../build/.config ../fragment-06-signature.config

    10) Make ARCH=arm oldconfig O="$PWD/../build"

      I accepted all default answers

    11) Build kernel:

    make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040 O="$PWD/../build"

    12) Confirmed that stm32mp157c-angelina-mx.dtb was made by the build

    13) Build kernel modules:

     make ARCH=arm modules O="$PWD/../build"

    14) Install kernel modules:

     make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install O="$PWD/../build"

    mkdir -p $PWD/../build/install_artifact/boot/

    cp $PWD/../build/arch/arm/boot/uImage $PWD/../build/install_artifact/boot/

    cp $PWD/../build/arch/arm/boot/dts/st*.dtb $PWD/../build/install_artifact/boot/

    I have consulted the kernel boot logs and confirmed that the kernel I built is being loaded.

    I now enclose extracts relevant to SPI5 from the DTS file generated by the STM32CubeIDE:

    spi5_pins_mx: spi5_mx-0 {

    pins {

    pinmux = <STM32_PINMUX('F', 7, AF5)>, /* SPI5_SCK */

    <STM32_PINMUX('F', 9, AF5)>; /* SPI5_MOSI */

    bias-disable;

    drive-push-pull;

    slew-rate = <1>;

    };

    };

    spi5_sleep_pins_mx: spi5_sleep_mx-0 {

    pins {

    pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* SPI5_SCK */

    <STM32_PINMUX('F', 9, ANALOG)>; /* SPI5_MOSI */

    };

    };

    &spi5{

    pinctrl-names = "default", "sleep";

    pinctrl-0 = <&spi5_pins_mx>;

    pinctrl-1 = <&spi5_sleep_pins_mx>;

    status = "okay";

    /* USER CODE BEGIN spi5 */

    /* USER CODE END spi5 */

    };

    Do I need to add anything to the above definitions to activate SPI5? I assumed that whatever I configure in the IDE is sufficient.

    Visitor II
    April 22, 2021

    I have this same exact problem. Why has no one from ST answered this?

    In my case the boot log shows the following.

    [ OK ] Started Update UTMP about System Boot/Shutdown.

    [ OK ] Started udev Coldplug all Devices.

    [  13.683932] spi_stm32 4000b000.spi: clk rate = 0

    [  13.706859] spi_stm32: probe of 4000b000.spi failed with error -22

    [  13.762465] spi_stm32 44005000.spi: clk rate = 0

    [  13.778909] spi_stm32: probe of 44005000.spi failed with error -22

    [ OK ] Started Network Time Synchronization.

    [ OK ] Reached target System Initialization.

    ST Employee
    May 24, 2021

    Hi @Community member​ 

    If you didn't resolved your pb yet, Check the clocks spi.