Enable SIL Image 3124/3132 PCI/SATA converter on IMX6SX for UBOOT

Brenke, Maik Maik.Brenke at continental-corporation.com
Thu Jan 9 17:36:37 CET 2020


Dear ladys and gentleman,


according the setup in [setup] I want to enable the SIL Image 3124/3132 PCI/SATA converter in UBOOT (u-boot-2018.03) on an IMX6SX CPU.

I tested the implementation and the setup via the Linux Kernel (see Kernel config in [kernel config] in Linux (see lspci [kernel]). After I enabled PCI in UBOOT I got the working result according [UBOOT].

But the SATA implementation (see complete config [defconfig]) failed during compilation of UBOOT with "arch/arm/mach-imx/mx6/clock.c:1015:32: error: 'MXC_CCM_CCGR5_SATA_MASK' undeclared (first use in this function); did you mean 'MXC_CCM_CCGR5_SAI1_MASK'?".


Is it possible to only read from an attached SSD on the SIL Image 31xx PCI/SATA converter via PCI in UBOOT?



P.s.: There are different warnings and notes during compilation (see [warnings]).


[setup]:
| imx6sx (UBOOT) | <---PCI---> | Silicon Image 3124/3132 SATA | <--- SATA ---> | SSD |


[kernel config]:
# enable pci in kernel                  (PCI support)
#  enable express support               (PCI Express Port Bus support)
#  PCI host controller drivers          (Freescale i.MX6 PCIe controller)
# enable sata driver in kernel          (Serial ATA and Parallel ATA drivers)
# enable PCI-SATA interface in kernel:
AHCI SATA support
Platform AHCI SATA support
…
Silicon Image 3124/3132 SATA support
# enable pci in device-tree             (#define CONFIG_EFUSA9X_PCIE)


[kernel]:
$ lspci
00:00.0 Class 0604: 16c3:abcd
01:00.0 Class 0106: 1b21:0612


[UBOOT]:
PCI:
  00:01.0     - 16c3:abcd - Bridge device
   01:00.0    - 1b21:0612 - Mass storage controller

efusA9X # pci
Scanning PCI devices on bus 0
BusDevFun  VendorId   DeviceId   Device Class       Sub-Class
_____________________________________________________________
00.01.00   0x16c3     0xabcd     Build before PCI Rev2.0 0x00


[defconfig]:
$ diff -us configs/fsimx6sx_efus_defconfig .config | grep ^+
+++ .config 2020-01-09 16:30:41.073863186 +0100
+CONFIG_AHCI=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_SATA=y
+CONFIG_SATA=y
+CONFIG_LIBATA=y
+CONFIG_AHCI_PCI=y
+# CONFIG_SATA_CEVA is not set
+# CONFIG_DWC_AHCI is not set
+CONFIG_SATA_SIL=y
+CONFIG_BLK=y
+# CONFIG_NVME is not set
+CONFIG_PCI=y
+# CONFIG_DM_PCI is not set
+# CONFIG_PCI_PNP is not set
+CONFIG_DM_SCSI=y



[warnings]:
$ make clean all
…
include/generated/autoconf.h:99: note: this is the location of the previous definition
 #define CONFIG_PCI 1

  CC      arch/arm/mach-imx/i2c-mxv7.o
In file included from include/config.h:6,
                 from include/common.h:21,
                 from arch/arm/mach-imx/i2c-mxv7.c:6:
include/configs/fsimx6sx.h:296: warning: "CONFIG_PCI" redefined
 #define CONFIG_PCI

…

In file included from ././include/linux/kconfig.h:4,
                 from <command-line>:
include/generated/autoconf.h:99: note: this is the location of the previous definition
 #define CONFIG_PCI 1

In file included from arch/arm/mach-imx/mx6/clock.c:9:
arch/arm/mach-imx/mx6/clock.c: In function 'ungate_sata_clock':
arch/arm/mach-imx/mx6/clock.c:1001:32: error: 'MXC_CCM_CCGR5_SATA_MASK' undeclared (first use in this function); did you mean 'MXC_CCM_CCGR5_SAI1_MASK'?
  setbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
                                ^~~~~~~~~~~~~~~~~~~~~~~
./arch/arm/include/asm/io.h:49:61: note: in definition of macro '__arch_putl'
 #define __arch_putl(v,a)  (*(volatile unsigned int *)(a) = (v))
                                                             ^
./arch/arm/include/asm/io.h:146:35: note: in expansion of macro '__raw_writel'
 #define out_arch(type,endian,a,v) __raw_write##type(cpu_to_##endian(v),a)
                                   ^~~~~~~~~~~
include/linux/byteorder/generic.h:89:21: note: in expansion of macro '__cpu_to_le32'
 #define cpu_to_le32 __cpu_to_le32
                     ^~~~~~~~~~~~~
./arch/arm/include/asm/io.h:150:23: note: in expansion of macro 'out_arch'
 #define out_le32(a,v) out_arch(l,le32,a,v)
                       ^~~~~~~~
./arch/arm/include/asm/io.h:170:2: note: in expansion of macro 'out_le32'
  out_##type((addr), in_##type(addr) | (set))
  ^~~~
./arch/arm/include/asm/io.h:180:33: note: in expansion of macro 'setbits'
 #define setbits_le32(addr, set) setbits(le32, addr, set)
                                 ^~~~~~~
arch/arm/mach-imx/mx6/clock.c:1001:2: note: in expansion of macro 'setbits_le32'
  setbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
  ^~~~~~~~~~~~
arch/arm/mach-imx/mx6/clock.c:1001:32: note: each undeclared identifier is reported only once for each function it appears in
  setbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
                                ^~~~~~~~~~~~~~~~~~~~~~~
./arch/arm/include/asm/io.h:49:61: note: in definition of macro '__arch_putl'
 #define __arch_putl(v,a)  (*(volatile unsigned int *)(a) = (v))
                                                             ^
./arch/arm/include/asm/io.h:146:35: note: in expansion of macro '__raw_writel'
 #define out_arch(type,endian,a,v) __raw_write##type(cpu_to_##endian(v),a)
                                   ^~~~~~~~~~~
include/linux/byteorder/generic.h:89:21: note: in expansion of macro '__cpu_to_le32'
 #define cpu_to_le32 __cpu_to_le32
                     ^~~~~~~~~~~~~
./arch/arm/include/asm/io.h:150:23: note: in expansion of macro 'out_arch'
 #define out_le32(a,v) out_arch(l,le32,a,v)
                       ^~~~~~~~
./arch/arm/include/asm/io.h:170:2: note: in expansion of macro 'out_le32'
  out_##type((addr), in_##type(addr) | (set))
  ^~~~
./arch/arm/include/asm/io.h:180:33: note: in expansion of macro 'setbits'
 #define setbits_le32(addr, set) setbits(le32, addr, set)
                                 ^~~~~~~
arch/arm/mach-imx/mx6/clock.c:1001:2: note: in expansion of macro 'setbits_le32'
  setbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
  ^~~~~~~~~~~~
arch/arm/mach-imx/mx6/clock.c: In function 'disable_sata_clock':
arch/arm/mach-imx/mx6/clock.c:1015:32: error: 'MXC_CCM_CCGR5_SATA_MASK' undeclared (first use in this function); did you mean 'MXC_CCM_CCGR5_SAI1_MASK'?
  clrbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
                                ^~~~~~~~~~~~~~~~~~~~~~~
./arch/arm/include/asm/io.h:49:61: note: in definition of macro '__arch_putl'
 #define __arch_putl(v,a)  (*(volatile unsigned int *)(a) = (v))
                                                             ^
./arch/arm/include/asm/io.h:146:35: note: in expansion of macro '__raw_writel'
 #define out_arch(type,endian,a,v) __raw_write##type(cpu_to_##endian(v),a)
                                   ^~~~~~~~~~~
include/linux/byteorder/generic.h:89:21: note: in expansion of macro '__cpu_to_le32'
 #define cpu_to_le32 __cpu_to_le32
                     ^~~~~~~~~~~~~
./arch/arm/include/asm/io.h:150:23: note: in expansion of macro 'out_arch'
 #define out_le32(a,v) out_arch(l,le32,a,v)
                       ^~~~~~~~
./arch/arm/include/asm/io.h:167:2: note: in expansion of macro 'out_le32'
  out_##type((addr), in_##type(addr) & ~(clear))
  ^~~~
./arch/arm/include/asm/io.h:179:35: note: in expansion of macro 'clrbits'
 #define clrbits_le32(addr, clear) clrbits(le32, addr, clear)
                                   ^~~~~~~
arch/arm/mach-imx/mx6/clock.c:1015:2: note: in expansion of macro 'clrbits_le32'
  clrbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
  ^~~~~~~~~~~~
make[2]: *** [arch/arm/mach-imx/mx6/clock.o] Fehler 1
scripts/Makefile.build:280: die Regel für Ziel „arch/arm/mach-imx/mx6/clock.o“ scheiterte
scripts/Makefile.build:425: die Regel für Ziel „arch/arm/mach-imx/mx6“ scheiterte
make[1]: *** [arch/arm/mach-imx/mx6] Fehler 2
Makefile:1343: die Regel für Ziel „arch/arm/mach-imx“ scheiterte
make: *** [arch/arm/mach-imx] Fehler 2


Mit freundlichen Grüßen / Best regards

Maik Brenke
Embedded Linux Developer



More information about the U-Boot mailing list