HI:
I use imx6ul ,linux kenerl version branch imx_4.1.15_1.0.0_ga, I refrence branch imx_4.14.98_2.0.0_ga add spi slave mode to imx_4.1.15_1.0.0_ga, and spi slave mode is proper functioning, but it affects ecspi flash and other pad ,such as PAD_GPIO1_IO00,details are as follows:
1 . ecspi flash problem:
my ecspi flash config
   &ecspi1 {
    fsl,spi-num-chipselects = <1>;
    cs-gpios = <&gpio4 26 0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
    status = "okay"; /* pin conflict with WEIM NOR */
    flash: m25p80@0 {
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "micron,n25q128a13";
        spi-max-frequency = <40000000>;
        reg = <0>;
    };
};
        pinctrl_ecspi1: ecspi1grp {
            fsl,pins = <
                MX6UL_PAD_CSI_DATA04__ECSPI1_SCLK     0x1b0b0
                MX6UL_PAD_CSI_DATA06__ECSPI1_MOSI     0x1b0b0
                MX6UL_PAD_CSI_DATA07__ECSPI1_MISO    0x1b0b0
            >;
        };
        pinctrl_ecspi1_cs: ecspi1cs {
            fsl,pins = <
                MX6UL_PAD_CSI_DATA05__GPIO4_IO26     0x1b0b0
            >;
        };
and ecspi3 slave config
&ecspi3 {
    #address-cells = <1>;
    #size-cells = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_ecspi3>;
    status = "okay";
    spi-slave;
    spidev0: spi@0 {
        reg = <0>;
        compatible = "rohm,dh2228fv";
        spi-max-frequency = <20000000>;
    };
};
        pinctrl_ecspi3: ecspi3grp {
            fsl,pins = <
                MX6UL_PAD_NAND_CE0_B__ECSPI3_SCLK    0x5011    //0x70a1
                MX6UL_PAD_NAND_CE1_B__ECSPI3_MOSI    0x5011    //0x70a1
                MX6UL_PAD_NAND_CLE__ECSPI3_MISO     0x5011    //0x70a1
                MX6UL_PAD_NAND_RE_B__ECSPI3_SS2        0x5011    //0x70a1
            SS>;
        };
Starting kernel ... 
 
Booting Linux on physical CPU 0x0 
Linux version 4.1.15+ (lxh@lxh) (gcc version 5.2.0 (GCC) ) #12 SMP PREEMPT Wed Jun 5 09:29:05 CST 2019 
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d 
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache 
Machine model: Freescale i.MX6 UltraLite 14x14 EVK Board 
Reserved memory: created CMA memory pool at 0x8c000000, size 320 MiB 
Reserved memory: initialized node linux,cma, compatible id shared-dma-pool 
Memory policy: Data cache writealloc 
PERCPU: Embedded 12 pages/cpu @8bb2f000 s16704 r8192 d24256 u49152 
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048 
Kernel command line: console=ttymxc1,115200 mtdparts=spi0.0:512k(uboot),256k(env),256k(script),4m(kernel),256k(dtb),3840k(rootfs),2m(config),2m(statistics),-(user) 
PID hash table entries: 2048 (order: 1, 8192 bytes) 
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes) 
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes) 
Memory: 181204K/524288K available (4672K kernel code, 228K rwdata, 1660K rodata, 320K init, 400K bss, 15404K reserved, 327680K cma-reserved, 0K highmem) 
Virtual kernel memory layout: 
    vector  : 0xffff0000 - 0xffff1000   (   4 kB) 
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB) 
    vmalloc : 0xa0800000 - 0xff000000   (1512 MB) 
    lowmem  : 0x80000000 - 0xa0000000   ( 512 MB) 
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB) 
    modules : 0x7f000000 - 0x7fe00000   (  14 MB) 
      .text : 0x80008000 - 0x80637594   (6334 kB) 
      .init : 0x80638000 - 0x80688000   ( 320 kB) 
      .data : 0x80688000 - 0x806c1360   ( 229 kB) 
       .bss : 0x806c4000 - 0x807281e8   ( 401 kB) 
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 
Preemptible hierarchical RCU implementation. 
        Additional per-CPU info printed with stalls. 
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=1. 
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1 
NR_IRQS:16 nr_irqs:16 16 
mxc_clocksource_init 24000000 
Switching to timer-based delay loop, resolution 41ns 
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns 
clocksource mxc_timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns 
Console: colour dummy device 80x30 
Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000) 
pid_max: default: 32768 minimum: 301 
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) 
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) 
CPU: Testing write buffer coherency: ok 
/cpus/cpu@0 missing clock-frequency property 
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 
Setting up static identity map for 0x80008280 - 0x800082d8 
Brought up 1 CPUs 
SMP: Total of 1 processors activated (48.00 BogoMIPS). 
CPU: All CPU(s) started in SVC mode. 
devtmpfs: initialized 
VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5 
clocksource jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns 
pinctrl core: initialized pinctrl subsystem 
NET: Registered protocol family 16 
DMA: preallocated 256 KiB pool for atomic coherent allocations 
cpuidle: using governor ladder 
cpuidle: using governor menu 
hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers. 
hw-breakpoint: maximum watchpoint size is 8 bytes. 
imx6ul-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver 
mxs-dma 1804000.dma-apbh: initialized 
SCSI subsystem initialized 
usbcore: registered new interface driver usbfs 
usbcore: registered new interface driver hub 
usbcore: registered new device driver usb 
pps_core: LinuxPPS API ver. 1 registered 
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> 
PTP clock support registered 
Switched to clocksource mxc_timer1 
NET: Registered protocol family 2 
TCP established hash table entries: 4096 (order: 2, 16384 bytes) 
TCP bind hash table entries: 4096 (order: 3, 32768 bytes) 
TCP: Hash tables configured (established 4096 bind 4096) 
UDP hash table entries: 256 (order: 1, 8192 bytes) 
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes) 
NET: Registered protocol family 1 
RPC: Registered named UNIX socket transport module. 
RPC: Registered udp transport module. 
RPC: Registered tcp transport module. 
RPC: Registered tcp NFSv4.1 backchannel transport module. 
Trying to unpack rootfs image as initramfs... 
Freeing initrd memory: 2724K (83800000 - 83aa9000) 
imx rpmsg driver is registered. 
Bus freq driver module loaded 
futex hash table entries: 256 (order: 2, 16384 bytes) 
VFS: Disk quotas dquot_6.6.0 
VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) 
NFS: Registering the id_resolver key type 
Key type id_resolver registered 
Key type id_legacy registered 
ntfs: driver 2.1.32 [Flags: R/O]. 
jffs2: version 2.2. (NAND) ? 2001-2006 Red Hat, Inc. 
fuse init (API version 7.23) 
io scheduler noop registered (default) 
imx-weim 21b8000.weim: Driver registered. 
imx-sdma 20ec000.sdma: no event needs to be remapped 
imx-sdma 20ec000.sdma: loaded firmware 3.3 
imx-sdma 20ec000.sdma: initialized 
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 22, base_baud = 5000000) is a IMX 
21e8000.serial: ttymxc1 at MMIO 0x21e8000 (irq = 224, base_baud = 5000000) is a IMX 
console [ttymxc1] enabled 
imx sema4 driver is registered. 
brd: module loaded 
loop: module loaded 
m25p80 spi0.0: n25q128a13 (16384 Kbytes) 
9 cmdlinepart partitions found on MTD device spi0.0 
Creating 9 MTD partitions on "spi0.0": 
0x000000000000-0x000000080000 : "uboot" 
0x000000080000-0x0000000c0000 : "env" 
0x0000000c0000-0x000000100000 : "script" 
0x000000100000-0x000000500000 : "kernel" 
0x000000500000-0x000000540000 : "dtb" 
0x000000540000-0x000000900000 : "rootfs" 
0x000000900000-0x000000b00000 : "config" 
0x000000b00000-0x000000d00000 : "statistics" 
0x000000d00000-0x000001000000 : "user" 
spi_imx 2008000.ecspi: probed 
spi_slave spi2: /soc/aips-bus@02000000/spba-bus@02000000/ecspi@02010000/spi@0 is not called 'slave' 
spi_slave spi2: Failed to create SPI device for /soc/aips-bus@02000000/spba-bus@02000000/ecspi@02010000/spi@0 
spi_imx 2010000.ecspi: probed 
spi_imx 2014000.ecspi: probed 
20b4000.ethernet supply phy not found, using dummy regulator 
pps pps0: new PPS source ptp0 
fec 20b4000.ethernet (unnamed net_device) (uninitialized): Invalid MAC address: 00:00:00:00:00:00 
fec 20b4000.ethernet (unnamed net_device) (uninitialized): Using random MAC address: e6:83:65:7b:d8:9a 
libphy: fec_enet_mii_bus: probed 
fec 20b4000.ethernet eth0: registered PHC device 0 
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver 
ehci-mxc: Freescale On-Chip EHCI Host driver 
usbcore: registered new interface driver cdc_acm 
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters 
usbcore: registered new interface driver usblp 
usbcore: registered new interface driver usb-storage 
usbcore: registered new interface driver usbserial 
usbcore: registered new interface driver usbserial_generic 
usbserial: USB Serial support registered for generic 
usbcore: registered new interface driver ftdi_sio 
usbserial: USB Serial support registered for FTDI USB Serial Device 
usbcore: registered new interface driver pl2303 
usbserial: USB Serial support registered for pl2303 
usbcore: registered new interface driver usb_ehset_test 
2184800.usbmisc supply vbus-wakeup not found, using dummy regulator 
2184000.usb supply vbus not found, using dummy regulator 
2184200.usb supply vbus not found, using dummy regulator 
ci_hdrc ci_hdrc.1: EHCI Host Controller 
ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1 
ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00 
hub 1-0:1.0: USB hub found 
hub 1-0:1.0: 1 port detected 
input: 20cc000.snvs:snvs-powerkey as /devices/platform/soc/2000000.aips-bus/20cc000.snvs/20cc000.snvs:snvs-powerkey/input/input0 
snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-r as rtc0 
i2c /dev entries driver 
imx2-wdt 20bc000.wdog: use WDOG_B to reboot. 
imx2-wdt 20bc000.wdog: timeout 60 sec (nowayout=0) 
sdhci: Secure Digital Host Controller Interface driver 
sdhci: Copyright(c) Pierre Ossman 
sdhci-pltfm: SDHCI platform and OF driver helper 
NET: Registered protocol family 17 
Key type dns_resolver registered 
input: gpio_keys as /devices/platform/gpio_keys/input/input1 
snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 1970-01-01 00:00:00 UTC (0) 
gpio_dvfs: disabling 
usb_otg2_vbus: disabling 
Freeing unused kernel memory: 320K (80638000 - 80688000) 
fec 20b4000.ethernet eth0: Freescale FEC PHY driver [Micrel KSZ8081 or KSZ8091] (mii_bus:phy_addr=20b4000.ethernet:01, irq=-1) 
  
  
spi_master spi0: I/O Error in DMA RX 
spi_master spi0: failed to transfer one message from queue 
mount: mounting /dev/mtdblock6 on /home/config/ failed: Input/output error 
 
Please press Enter to activate this console. random: nonblocking pool is initialized 
root@root:/#
2.then I use spi_slave
root@root:/# echo spidev > /sys/class/spi_slave/spi2/slave
i use MX6UL_PAD_GPIO1_IO00 as GPIO input, is pulled to high level.
MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 0x17059 //0xb0 //0x000010B0
and I use imx_4.14.98_2.0.0_ga kernel is the same phenomenon
The patch is available at:
Basically, NXP kernel 4.1 does not support SPI slave mode. Not even NXP 4.14 supports it.
Only kernel 4.15 and 4.16 from mainline supports it.
In order to use SPI slave in these kernels the "spi-slave" property needs to be passed in the devicetree as explained at:
Dear jimmychan:
我也有类似需求,我用IMX6ULL ecspi2 ,想配置成SPI-SLAVE模式,现在我同步了几个基线,L4.14.98和imx_4.19.35_1.0.0。
按照您说的,L4.14.98也不支持,仅L4.15以后的基线才支持。但是您们的另外一个技术支持igor的意思好像是L4.14.98就支持了? 从您给到的Patch来看,L4.14.98已经包含在了L4.14.98的基线中。
另外,最重要的一点是,好像这两个基线spidev.c都没修改,我在DT文件中添加了SPI-SLAVE,用户空间中没有对应的设备节点出来。是我配置的不对吗?
&ecspi2 {
 fsl,spi-num-chipselects = <1>;
 pinctrl-names = "default";
 pinctrl-0 = <&pinctrl_ecspi2>;
 spi-slave;
 status = "okay";
 spidev@1 {
 compatible = "spidev";
 spi-max-frequency = <20000000>;
 reg = <0>;
 };
};
Kernel的引导log如下:
spi_slave spi1: /soc/aips-bus@2000000/spba-bus@2000000/ecspi@200c000/spidev@1 is not called 'slave'
spi_slave spi1: Failed to create SPI device for /soc/aips-bus@2000000/spba-bus@2000000/ecspi@200c000/spidev@1
spi_imx 200c000.ecspi: probed
如果我注释掉
spidev@1 {
compatible = "spidev";
spi-max-frequency = <20000000>;
reg = <0>;
};
这几行,则不会报错。但是,dev目录下依旧没有spidev节点出来。另外两个master设备能够正常在dev中显示。
所以,我现在的问题是,如何使能SPI-SLAVE,并且在dev中显示slave节点?以便我用户空间的程序调用来接收数据?
