Hello, When I enable SPI support I do not get a SPI bus.
Config: --- a/configs/orangepi_zero_defconfig +++ b/configs/orangepi_zero_defconfig @@ -11,3 +11,21 @@ CONFIG_CONSOLE_MUX=y CONFIG_SUN8I_EMAC=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_OHCI_HCD=y +CONFIG_SPI=y +CONFIG_DM_SPI=y +CONFIG_DM_SPI_FLASH=y +CONFIG_SPI_FLASH=y +CONFIG_CMD_SPI=y +CONFIG_CMD_SF_TEST=y +CONFIG_SPI_FLASH_SFDP_SUPPORT=y +CONFIG_SPI_FLASH_ATMEL=y +CONFIG_SPI_FLASH_EON=y +CONFIG_SPI_FLASH_GIGADEVICE=y +CONFIG_SPI_FLASH_ISSI=y +CONFIG_SPI_FLASH_MACRONIX=y +CONFIG_SPI_FLASH_SPANSION=y +CONFIG_SPI_FLASH_STMICRO=y +CONFIG_SPI_FLASH_SST=y +CONFIG_SPI_FLASH_WINBOND=y +CONFIG_SPI_FLASH_XMC=y +CONFIG_SPI_FLASH_DATAFLASH=y DT (which lists the flash types so did not really have to enable them all) --- a/arch/arm/dts/sun8i-h2-plus-orangepi-zero.dts +++ b/arch/arm/dts/sun8i-h2-plus-orangepi-zero.dts @@ -163,10 +163,11 @@ }; &spi0 { - /* Disable SPI NOR by default: it optional on Orange Pi Zero boards */ - status = "disabled"; + /* Enable SPI NOR by default: it optional on Orange Pi Zero boards */ + status = "okay"; flash@0 { + status = "okay"; #address-cells = <1>; #size-cells = <1>; compatible = "mxicy,mx25l1606e", "winbond,w25q128"; The guide on debugging says to add dm_dump_all --- a/drivers/spi/spi-uclass.c +++ b/drivers/spi/spi-uclass.c @@ -328,6 +328,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode, bool created = false; int ret; + dm_dump_all(); #if CONFIG_IS_ENABLED(OF_PLATDATA) ret = uclass_first_device_err(UCLASS_SPI, &bus); #else which prints Class Index Probed Driver Name ----------------------------------------------------------- root 0 [ + ] root_driver root_driver simple_bus 0 [ + ] simple_bus |-- soc mmc 0 [ + ] sunxi_mmc | |-- mmc@1c0f000 blk 0 [ ] mmc_blk | | `-- m...@1c0f000.blk mmc 1 [ + ] sunxi_mmc | |-- mmc@1c10000 blk 1 [ ] mmc_blk | | `-- m...@1c10000.blk phy 0 [ ] sun4i_usb_phy | |-- phy@1c19400 usb 0 [ ] ehci_generic | |-- usb@1c1a000 usb 1 [ ] ohci_generic | |-- usb@1c1a400 usb 2 [ ] ehci_generic | |-- usb@1c1b000 usb 3 [ ] ohci_generic | |-- usb@1c1b400 clk 0 [ + ] sun8i_h3_ccu | |-- clock@1c20000 reset 0 [ + ] sunxi_reset | | `-- reset gpio 0 [ + ] gpio_sunxi | |-- pinctrl@1c20800 gpio 1 [ + ] gpio_sunxi | | |-- PA gpio 2 [ + ] gpio_sunxi | | |-- PB gpio 3 [ + ] gpio_sunxi | | |-- PC gpio 4 [ + ] gpio_sunxi | | |-- PD gpio 5 [ + ] gpio_sunxi | | |-- PE gpio 6 [ + ] gpio_sunxi | | |-- PF gpio 7 [ + ] gpio_sunxi | | |-- PG gpio 8 [ + ] gpio_sunxi | | |-- PH gpio 9 [ + ] gpio_sunxi | | `-- PI eth 0 [ + ] eth_sun8i_emac | |-- ethernet@1c30000 spi 0 [ ] sun4i_spi | |-- spi@1c68000 serial 0 [ + ] ns16550_serial | |-- serial@1c28000 gpio 10 [ + ] gpio_sunxi | `-- pinctrl@1f02c00 gpio 11 [ + ] gpio_sunxi | `-- PL clk 1 [ + ] fixed_rate_clock |-- osc24M_clk clk 2 [ ] fixed_rate_clock `-- osc32k_clk Invalid bus 0 (err=-19) -19 means ENODEV according to my /usr/include/asm-generic/errno-base.h Debug prints added to sunxi driver are never printed: --- a/drivers/spi/spi-sunxi.c +++ b/drivers/spi/spi-sunxi.c @@ -305,6 +305,7 @@ static int sun4i_spi_claim_bus(struct udevice *dev) { struct sun4i_spi_priv *priv = dev_get_priv(dev->parent); int ret; + printf("sun4i_spi_claim_bus\n"); ret = sun4i_spi_set_clock(dev->parent, true); if (ret) @@ -487,6 +488,8 @@ static int sun4i_spi_probe(struct udevice *bus) struct sun4i_spi_priv *priv = dev_get_priv(bus); int ret; + printf("sun4i_spi_probe\n"); + ret = clk_get_by_name(bus, "ahb", &priv->clk_ahb); if (ret) { dev_err(dev, "failed to get ahb clock\n"); AFAICT the device tree compatible matches the one in the driver. How do I make u-boot run the driver? Thanks Michal