How to configure SPI1 as a slave mode?

HW: Jetson AGX Orin devkit with custom carrier board.
BSP: # R34 (release), REVISION: 1.1, GCID: 30414990, BOARD: t186ref, EABI: aarch64, DATE: Tue May 17 04:18:13 UTC 2022

First, i made the tests for “SPI1(spi0: spi@3210000)” and “SPI2(spi1: spi@c260000)”.

  1. SPI1: master,
    connect: SPI1-MOSI<–>SPI1-MISO
    loopback test result: ok
    pinmux:
			spi1_sck_pz3 {
				nvidia,pins = "spi1_sck_pz3";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
				nvidia,tristate = <TEGRA_PIN_DISABLE>;
				nvidia,enable-input = <TEGRA_PIN_DISABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

			spi1_miso_pz4 {
				nvidia,pins = "spi1_miso_pz4";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_UP>;
				nvidia,tristate = <TEGRA_PIN_ENABLE>;
				nvidia,enable-input = <TEGRA_PIN_ENABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

			spi1_mosi_pz5 {
				nvidia,pins = "spi1_mosi_pz5";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
				nvidia,tristate = <TEGRA_PIN_DISABLE>;
				nvidia,enable-input = <TEGRA_PIN_DISABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

			spi1_cs0_pz6 {
				nvidia,pins = "spi1_cs0_pz6";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
				nvidia,tristate = <TEGRA_PIN_DISABLE>;
				nvidia,enable-input = <TEGRA_PIN_DISABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};
  1. SPI2: master,
    connect: SPI2-MOSI<–>SPI2-MISO
    loopback test result: ok
    pinmux: register value is consistent with SPI1
  2. SPI2: master; SPI1: slave
    connect: SPI1-CLK<–>SPI2-CLK, SPI1-CS<–>SPI2-CS, SPI1-MOSI<–>SPI2-MISO, SPI1-MISO<–SPI2-MOSI
    test result: ng, SPI1 receive nothing.
    dtsi:
    spi0: spi@3210000 {
    compatible = “nvidia,tegra186-spi-slave”;
    spi1: spi@c260000 {
    compatible = “nvidia,tegra186-spi”;
    pinmux:
    SPI2: same as above
    SPI1:
			spi1_sck_pz3 {
				nvidia,pins = "spi1_sck_pz3";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_UP>;
				nvidia,tristate = <TEGRA_PIN_ENABLE>;
				nvidia,enable-input = <TEGRA_PIN_ENABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

			spi1_miso_pz4 {
				nvidia,pins = "spi1_miso_pz4";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_UP>;
				nvidia,tristate = <TEGRA_PIN_ENABLE>;
				nvidia,enable-input = <TEGRA_PIN_ENABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

			spi1_mosi_pz5 {
				nvidia,pins = "spi1_mosi_pz5";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
				nvidia,tristate = <TEGRA_PIN_DISABLE>;
				nvidia,enable-input = <TEGRA_PIN_DISABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};

			spi1_cs0_pz6 {
				nvidia,pins = "spi1_cs0_pz6";
				nvidia,function = "spi1";
				nvidia,pull = <TEGRA_PIN_PULL_DOWN>;
				nvidia,tristate = <TEGRA_PIN_ENABLE>;
				nvidia,enable-input = <TEGRA_PIN_ENABLE>;
				nvidia,io-high-voltage = <TEGRA_PIN_DISABLE>;
				nvidia,lpdr = <TEGRA_PIN_DISABLE>;
			};
logs:
        $ sudo dmesg | grep spi
        [    2.417020] spi-tegra114 c260000.spi: Adding to iommu group 0
        [    2.433598] spi-tegra114 c260000.spi: can not get clock
        [    2.438812] tegra23x-qspi 3270000.spi: Adding to iommu group 1
        [   12.448784] spi_tegra114: module is already loaded
        [   12.498079] qspi_mtd spi6.0: MX25U51279G (65536 Kbytes)
        [   12.498087] qspi_mtd spi6.0: mtd .name = spi6.0, .size = 0x4000000 (64MiB) .erasesize = 0x00010000 (64KiB) .numeraseregions = 0
        [   12.628458] 1 fixed-partitions partitions found on MTD device spi6.0
        [   12.628666] Creating 1 MTD partitions on "spi6.0":
        [ 2142.759028] spi-tegra124-slave 3210000.spi: Adding to iommu group 0

My questions are as follows. I look forward to your reply. Thank you.

  1. Is my configuration correct according to the above? How to configure SPI1 as a slave mode?
  2. I found in other platform forums that SPI master < -->slave can be tested as follows, Can Orin provide this test program?
    sudo ./spidev_test -D /dev/spidev1.0 -s500000 -g512 -b32 -H -p0 -n1 -r &
    sleep 5
    sudo ./spidev_test -D /dev/spidev0.0 -s500000 -g512 -b32 -H -p0 -n1 -zzz -t
  3. In test 3, can I configure SPI2 with the following dtsi property so that clock always exists ?
    nvidia,clock-always-on;

Have reference to below topic to modify device tree to

spi@3230000 {
compatible = “nvidia,tegra186-spi-slave”;

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.