Merge branch '2019-10-28-azure-ci-support'
authorTom Rini <trini@konsulko.com>
Wed, 30 Oct 2019 13:05:13 +0000 (09:05 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 30 Oct 2019 13:05:13 +0000 (09:05 -0400)
- Clean up Travis-CI slightly and then add support for Microsoft Azure
  pipelines, all from Bin Meng.

56 files changed:
arch/arm/dts/Makefile
arch/arm/dts/sun50i-a64-olinuxino-emmc.dts [new file with mode: 0644]
arch/arm/dts/sun50i-a64-sopine-baseboard-u-boot.dtsi [new file with mode: 0644]
arch/arm/dts/sun50i-h6-beelink-gs1.dts
arch/arm/dts/sun50i-h6-pine-h64.dts
arch/arm/dts/sun50i-h6.dtsi
arch/arm/include/asm/arch-sunxi/dram_sun50i_h6.h
arch/arm/include/asm/arch-sunxi/gpio.h
arch/arm/mach-sunxi/Kconfig
arch/arm/mach-sunxi/board.c
arch/arm/mach-sunxi/clock_sun6i.c
arch/arm/mach-sunxi/dram_sun50i_h6.c
board/sunxi/MAINTAINERS
cmd/Kconfig
configs/a64-olinuxino-emmc_defconfig [new file with mode: 0644]
configs/aristainetos2_defconfig
configs/aristainetos2b_defconfig
configs/aristainetos_defconfig
configs/cm_fx6_defconfig
configs/socfpga_arria5_defconfig
configs/socfpga_cyclone5_defconfig
configs/socfpga_dbm_soc1_defconfig
configs/socfpga_de0_nano_soc_defconfig
configs/socfpga_de10_nano_defconfig
configs/socfpga_is1_defconfig
configs/socfpga_mcvevk_defconfig
configs/socfpga_sockit_defconfig
configs/socfpga_socrates_defconfig
configs/socfpga_sr1500_defconfig
configs/socfpga_vining_fpga_defconfig
configs/sopine_baseboard_defconfig
configs/stm32mp15_basic_defconfig
doc/driver-model/spi-howto.rst
drivers/mtd/spi/Kconfig
drivers/mtd/spi/Makefile
drivers/mtd/spi/sf_internal.h
drivers/mtd/spi/sf_probe.c
drivers/mtd/spi/spi-nor-core.c
drivers/mtd/spi/spi-nor-ids.c
drivers/spi/Kconfig
drivers/spi/ath79_spi.c
drivers/spi/bcm63xx_hsspi.c
drivers/spi/bcm63xx_spi.c
drivers/spi/designware_spi.c
drivers/spi/sandbox_spi.c
drivers/spi/spi-uclass.c
drivers/spi/tegra20_sflash.c
include/configs/aristainetos-common.h
include/configs/cm_fx6.h
include/configs/da850evm.h
include/configs/dh_imx6.h
include/configs/display5.h
include/configs/gw_ventana.h
include/configs/rcar-gen2-common.h
include/configs/socfpga_common.h
include/spi.h

index 6a7dbb6309b8d347f1ff930eeaf09690a1930ed4..47978e7685103b37f60eaf09ff7150aa7c0c2de0 100644 (file)
@@ -540,6 +540,7 @@ dtb-$(CONFIG_MACH_SUN50I) += \
        sun50i-a64-nanopi-a64.dtb \
        sun50i-a64-oceanic-5205-5inmfd.dtb \
        sun50i-a64-olinuxino.dtb \
+       sun50i-a64-olinuxino-emmc.dtb \
        sun50i-a64-orangepi-win.dtb \
        sun50i-a64-pine64-lts.dtb \
        sun50i-a64-pine64-plus.dtb \
diff --git a/arch/arm/dts/sun50i-a64-olinuxino-emmc.dts b/arch/arm/dts/sun50i-a64-olinuxino-emmc.dts
new file mode 100644 (file)
index 0000000..96ab022
--- /dev/null
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2018 Martin Ayotte <martinayotte@gmail.com>
+ * Copyright (C) 2019 Sunil Mohan Adapa <sunil@medhas.org>
+ */
+
+#include "sun50i-a64-olinuxino.dts"
+
+/ {
+       model = "Olimex A64-Olinuxino-eMMC";
+       compatible = "olimex,a64-olinuxino-emmc", "allwinner,sun50i-a64";
+};
+
+&mmc2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc2_pins>;
+       vmmc-supply = <&reg_dcdc1>;
+       vqmmc-supply = <&reg_dcdc1>;
+       bus-width = <8>;
+       non-removable;
+       cap-mmc-hw-reset;
+       status = "okay";
+};
diff --git a/arch/arm/dts/sun50i-a64-sopine-baseboard-u-boot.dtsi b/arch/arm/dts/sun50i-a64-sopine-baseboard-u-boot.dtsi
new file mode 100644 (file)
index 0000000..02b1ae0
--- /dev/null
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2018 Jagan Teki <jagan@amarulasolutions.com>
+ */
+
+#include "sunxi-u-boot.dtsi"
+
+/ {
+       aliases {
+               spi0 = &spi0;
+       };
+};
index 54b0882bedf32aed0dcbaa4d7c5585ee835d5d18..0dc33c90dd60e567ab4b6412adfac43dd2c69872 100644 (file)
@@ -14,6 +14,7 @@
        compatible = "azw,beelink-gs1", "allwinner,sun50i-h6";
 
        aliases {
+               ethernet0 = &emac;
                serial0 = &uart0;
        };
 
                stdout-path = "serial0:115200n8";
        };
 
+       connector {
+               compatible = "hdmi-connector";
+               type = "a";
+
+               port {
+                       hdmi_con_in: endpoint {
+                               remote-endpoint = <&hdmi_out_con>;
+                       };
+               };
+       };
+
        leds {
                compatible = "gpio-leds";
 
        };
 };
 
+&de {
+       status = "okay";
+};
+
+&ehci0 {
+       status = "okay";
+};
+
+&emac {
+       pinctrl-names = "default";
+       pinctrl-0 = <&ext_rgmii_pins>;
+       phy-mode = "rgmii";
+       phy-handle = <&ext_rgmii_phy>;
+       phy-supply = <&reg_aldo2>;
+       status = "okay";
+};
+
+&hdmi {
+       status = "okay";
+};
+
+&hdmi_out {
+       hdmi_out_con: endpoint {
+               remote-endpoint = <&hdmi_con_in>;
+       };
+};
+
+&mdio {
+       ext_rgmii_phy: ethernet-phy@1 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <1>;
+       };
+};
+
 &mmc0 {
        vmmc-supply = <&reg_cldo1>;
        cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
        status = "okay";
 };
 
+&ohci0 {
+       status = "okay";
+};
+
+&pio {
+       vcc-pd-supply = <&reg_cldo1>;
+       vcc-pg-supply = <&reg_aldo1>;
+};
+
 &r_i2c {
        status = "okay";
 
        };
 };
 
+&r_pio {
+       /*
+        * PL0 and PL1 are used for PMIC I2C
+        * don't enable the pl-supply else
+        * it will fail at boot
+        *
+        * vcc-pl-supply = <&reg_aldo1>;
+        */
+       vcc-pm-supply = <&reg_aldo1>;
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_ph_pins>;
        status = "okay";
 };
+
+&usb2otg {
+       dr_mode = "host";
+       status = "okay";
+};
+
+&usb2phy {
+       usb0_vbus-supply = <&reg_vcc5v>;
+       status = "okay";
+};
index 4802902e128f980d58baf7bbdd93094230840b30..189834518391009a83c92629ead862e2f71af331 100644 (file)
        status = "okay";
 };
 
+&pio {
+       vcc-pc-supply = <&reg_bldo2>;
+       vcc-pd-supply = <&reg_cldo1>;
+       vcc-pg-supply = <&reg_aldo1>;
+};
+
 &r_i2c {
        status = "okay";
 
        pcf8563: rtc@51 {
                compatible = "nxp,pcf8563";
                reg = <0x51>;
+               interrupt-parent = <&r_intc>;
+               interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
                #clock-cells = <0>;
        };
 };
 
+&r_pio {
+       vcc-pm-supply = <&reg_aldo1>;
+};
+
 &uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_ph_pins>;
index e0dc4a05c1ba0273e2c3fced95c063e38f4f0d17..a117f479ae555ceda3468d6a76639a805e404644 100644 (file)
                #size-cells = <1>;
                ranges;
 
-               display-engine@1000000 {
+               bus@1000000 {
                        compatible = "allwinner,sun50i-h6-de3",
                                     "allwinner,sun50i-a64-de2";
                        reg = <0x1000000 0x400000>;
                        #reset-cells = <1>;
                };
 
+               dma: dma-controller@3002000 {
+                       compatible = "allwinner,sun50i-h6-dma";
+                       reg = <0x03002000 0x1000>;
+                       interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ccu CLK_BUS_DMA>, <&ccu CLK_MBUS_DMA>;
+                       clock-names = "bus", "mbus";
+                       dma-channels = <16>;
+                       dma-requests = <46>;
+                       resets = <&ccu RST_BUS_DMA>;
+                       #dma-cells = <1>;
+               };
+
                sid: sid@3006000 {
                        compatible = "allwinner,sun50i-h6-sid";
                        reg = <0x03006000 0x400>;
                };
 
+               watchdog: watchdog@30090a0 {
+                       compatible = "allwinner,sun50i-h6-wdt",
+                                    "allwinner,sun6i-a31-wdt";
+                       reg = <0x030090a0 0x20>;
+                       interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
+                       /* Broken on some H6 boards */
+                       status = "disabled";
+               };
+
                pio: pinctrl@300b000 {
                        compatible = "allwinner,sun50i-h6-pinctrl";
                        reg = <0x0300b000 0x400>;
                                bias-pull-up;
                        };
 
+                       /*
+                        * /omit-if-no-ref/ isn't supported by U-boot
+                        * keep this comment to avoid bad sync with Linux
+                        */
+                       mmc1_pins: mmc1-pins {
+                               pins = "PG0", "PG1", "PG2", "PG3",
+                                      "PG4", "PG5";
+                               function = "mmc1";
+                               drive-strength = <30>;
+                               bias-pull-up;
+                       };
+
                        mmc2_pins: mmc2-pins {
                                pins = "PC1", "PC4", "PC5", "PC6",
                                       "PC7", "PC8", "PC9", "PC10",
                        resets = <&ccu RST_BUS_MMC1>;
                        reset-names = "ahb";
                        interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc1_pins>;
                        status = "disabled";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        resets = <&ccu RST_BUS_OHCI3>,
                                 <&ccu RST_BUS_EHCI3>;
                        phys = <&usb2phy 3>;
-                       phy-names = "usb";
                        status = "disabled";
                };
 
                                 <&ccu CLK_USB_OHCI3>;
                        resets = <&ccu RST_BUS_OHCI3>;
                        phys = <&usb2phy 3>;
-                       phy-names = "usb";
                        status = "disabled";
                };
 
                        #reset-cells = <1>;
                };
 
+               r_watchdog: watchdog@7020400 {
+                       compatible = "allwinner,sun50i-h6-wdt",
+                                    "allwinner,sun6i-a31-wdt";
+                       reg = <0x07020400 0x20>;
+                       interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
                r_intc: interrupt-controller@7021000 {
                        compatible = "allwinner,sun50i-h6-r-intc",
                                     "allwinner,sun6i-a31-r-intc";
index 0a1da023760ddd329038e018d1ed7c2f659bd056..49a8a66f7b119e20a6fe1aa10b9976c2cbd1c674 100644 (file)
@@ -315,6 +315,7 @@ struct dram_para {
        u8 cols;
        u8 rows;
        u8 ranks;
+       u8 bus_full_width;
        const u8 dx_read_delays[NR_OF_BYTE_LANES][RD_LINES_PER_BYTE_LANE];
        const u8 dx_write_delays[NR_OF_BYTE_LANES][WR_LINES_PER_BYTE_LANE];
 };
index 40a3f845d047d33fa680ea26ce3c9b1957f6b2b5..a646ea6a3ce6af1edb74d10a5f03f79fd5177b69 100644 (file)
@@ -73,6 +73,9 @@ struct sunxi_gpio_reg {
        struct sunxi_gpio_int gpio_int;
 };
 
+#define SUN50I_H6_GPIO_POW_MOD_SEL     0x340
+#define SUN50I_H6_GPIO_POW_MOD_VAL     0x348
+
 #define BANK_TO_GPIO(bank)     (((bank) < SUNXI_GPIO_L) ? \
        &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank] : \
        &((struct sunxi_gpio_reg *)SUNXI_R_PIO_BASE)->gpio_bank[(bank) - SUNXI_GPIO_L])
index ffdf09f29e4e7590330d3ea29d6dee0cdde45d82..16d41b83afe189e7d55fcbf6eb19dd2405573bac 100644 (file)
@@ -275,7 +275,10 @@ config MACH_SUN9I
 config MACH_SUN50I
        bool "sun50i (Allwinner A64)"
        select ARM64
+       select SPI
        select DM_I2C
+       select DM_SPI if SPI
+       select DM_SPI_FLASH
        select PHY_SUN4I_USB
        select SUN6I_PRCM
        select SUNXI_DE2
index 8e9bb63d9d2fc85d1ad2202f214470d13df0cfd5..db506367bf91868b303951678d2e9fd103bbd43c 100644 (file)
@@ -65,6 +65,7 @@ struct mm_region *mem_map = sunxi_mem_map;
 
 static int gpio_init(void)
 {
+       __maybe_unused uint val;
 #if CONFIG_CONS_INDEX == 1 && defined(CONFIG_UART0_PORT_F)
 #if defined(CONFIG_MACH_SUN4I) || \
     defined(CONFIG_MACH_SUN7I) || \
@@ -139,6 +140,14 @@ static int gpio_init(void)
 #error Unsupported console port number. Please fix pin mux settings in board.c
 #endif
 
+#ifdef CONFIG_MACH_SUN50I_H6
+       /* Update PIO power bias configuration by copy hardware detected value */
+       val = readl(SUNXI_PIO_BASE + SUN50I_H6_GPIO_POW_MOD_VAL);
+       writel(val, SUNXI_PIO_BASE + SUN50I_H6_GPIO_POW_MOD_SEL);
+       val = readl(SUNXI_R_PIO_BASE + SUN50I_H6_GPIO_POW_MOD_VAL);
+       writel(val, SUNXI_R_PIO_BASE + SUN50I_H6_GPIO_POW_MOD_SEL);
+#endif
+
        return 0;
 }
 
index 1628f3a7b6d3f67af89ea2751ac8d242c15b9e0a..6ca38f73d93cdd897f90c40ad5fc741a47e659d5 100644 (file)
@@ -118,7 +118,7 @@ void clock_set_pll1(unsigned int clk)
        if (clk > 1152000000) {
                k = 2;
        } else if (clk > 768000000) {
-               k = 3;
+               k = 4;
                m = 2;
        }
 
index 2a8275da3a6ba306016a17ff14ffdf1d1d174dbf..9375db76a1e1bf0912a75357dd00ba9d455a4a75 100644 (file)
@@ -201,6 +201,9 @@ static void mctl_set_addrmap(struct dram_para *para)
        u8 rows = para->rows;
        u8 ranks = para->ranks;
 
+       if (!para->bus_full_width)
+               cols -= 1;
+
        /* Ranks */
        if (ranks == 2)
                mctl_ctl->addrmap[0] = rows + cols - 3;
@@ -213,6 +216,10 @@ static void mctl_set_addrmap(struct dram_para *para)
        /* Columns */
        mctl_ctl->addrmap[2] = 0;
        switch (cols) {
+       case 7:
+               mctl_ctl->addrmap[3] = 0x1F1F1F00;
+               mctl_ctl->addrmap[4] = 0x1F1F;
+               break;
        case 8:
                mctl_ctl->addrmap[3] = 0x1F1F0000;
                mctl_ctl->addrmap[4] = 0x1F1F;
@@ -300,13 +307,16 @@ static void mctl_com_init(struct dram_para *para)
                reg_val = 0x3f00;
        clrsetbits_le32(&mctl_com->unk_0x008, 0x3f00, reg_val);
 
-       /* TODO: half DQ, DDR4 */
-       reg_val = MSTR_BUSWIDTH_FULL | MSTR_BURST_LENGTH(8) |
-                 MSTR_ACTIVE_RANKS(para->ranks);
+       /* TODO: DDR4 */
+       reg_val = MSTR_BURST_LENGTH(8) | MSTR_ACTIVE_RANKS(para->ranks);
        if (para->type == SUNXI_DRAM_TYPE_LPDDR3)
                reg_val |= MSTR_DEVICETYPE_LPDDR3;
        if (para->type == SUNXI_DRAM_TYPE_DDR3)
                reg_val |= MSTR_DEVICETYPE_DDR3 | MSTR_2TMODE;
+       if (para->bus_full_width)
+               reg_val |= MSTR_BUSWIDTH_FULL;
+       else
+               reg_val |= MSTR_BUSWIDTH_HALF;
        writel(reg_val | BIT(31), &mctl_ctl->mstr);
 
        if (para->type == SUNXI_DRAM_TYPE_LPDDR3)
@@ -333,7 +343,10 @@ static void mctl_com_init(struct dram_para *para)
        }
        writel(reg_val, &mctl_ctl->odtcfg);
 
-       /* TODO: half DQ */
+       if (!para->bus_full_width) {
+               writel(0x0, &mctl_phy->dx[2].gcr[0]);
+               writel(0x0, &mctl_phy->dx[3].gcr[0]);
+       }
 }
 
 static void mctl_bit_delay_set(struct dram_para *para)
@@ -514,22 +527,35 @@ static void mctl_channel_init(struct dram_para *para)
 
        if (readl(&mctl_phy->pgsr[0]) & 0x400000)
        {
-               /*
-                * Detect single rank.
-                * TODO: also detect half DQ.
-                */
+               /* Check for single rank and optionally half DQ. */
                if ((readl(&mctl_phy->dx[0].rsr[0]) & 0x3) == 2 &&
-                   (readl(&mctl_phy->dx[1].rsr[0]) & 0x3) == 2 &&
-                   (readl(&mctl_phy->dx[2].rsr[0]) & 0x3) == 2 &&
-                   (readl(&mctl_phy->dx[3].rsr[0]) & 0x3) == 2) {
+                   (readl(&mctl_phy->dx[1].rsr[0]) & 0x3) == 2) {
                        para->ranks = 1;
+
+                       if ((readl(&mctl_phy->dx[2].rsr[0]) & 0x3) != 2 ||
+                           (readl(&mctl_phy->dx[3].rsr[0]) & 0x3) != 2)
+                               para->bus_full_width = 0;
+
                        /* Restart DRAM initialization from scratch. */
                        mctl_core_init(para);
                        return;
                }
-               else {
-                       panic("This DRAM setup is currently not supported.\n");
+
+               /*
+                * Check for dual rank and half DQ. NOTE: This combination
+                * is highly unlikely and was not tested. Condition is the
+                * same as in libdram, though.
+                */
+               if ((readl(&mctl_phy->dx[0].rsr[0]) & 0x3) == 0 &&
+                   (readl(&mctl_phy->dx[1].rsr[0]) & 0x3) == 0) {
+                       para->bus_full_width = 0;
+
+                       /* Restart DRAM initialization from scratch. */
+                       mctl_core_init(para);
+                       return;
                }
+
+               panic("This DRAM setup is currently not supported.\n");
        }
 
        if (readl(&mctl_phy->pgsr[0]) & 0xff00000) {
@@ -557,11 +583,8 @@ static void mctl_channel_init(struct dram_para *para)
 
 static void mctl_auto_detect_dram_size(struct dram_para *para)
 {
-       /* TODO: non-LPDDR3, half DQ */
-       /*
-        * Detect rank number by the code in mctl_channel_init. Furtherly
-        * when DQ detection is available it will also be executed there.
-        */
+       /* TODO: non-(LP)DDR3 */
+       /* Detect rank number and half DQ by the code in mctl_channel_init. */
        mctl_core_init(para);
 
        /* detect row address bits */
@@ -570,8 +593,9 @@ static void mctl_auto_detect_dram_size(struct dram_para *para)
        mctl_core_init(para);
 
        for (para->rows = 13; para->rows < 18; para->rows++) {
-               /* 8 banks, 8 bit per byte and 32 bit width */
-               if (mctl_mem_matches((1 << (para->rows + para->cols + 5))))
+               /* 8 banks, 8 bit per byte and 16/32 bit width */
+               if (mctl_mem_matches((1 << (para->rows + para->cols +
+                                           4 + para->bus_full_width))))
                        break;
        }
 
@@ -580,18 +604,21 @@ static void mctl_auto_detect_dram_size(struct dram_para *para)
        mctl_core_init(para);
 
        for (para->cols = 8; para->cols < 11; para->cols++) {
-               /* 8 bits per byte and 32 bit width */
-               if (mctl_mem_matches(1 << (para->cols + 2)))
+               /* 8 bits per byte and 16/32 bit width */
+               if (mctl_mem_matches(1 << (para->cols + 1 +
+                                          para->bus_full_width)))
                        break;
        }
 }
 
 unsigned long mctl_calc_size(struct dram_para *para)
 {
-       /* TODO: non-LPDDR3, half DQ */
+       u8 width = para->bus_full_width ? 4 : 2;
+
+       /* TODO: non-(LP)DDR3 */
 
-       /* 8 banks, 32-bit (4 byte) data width */
-       return (1ULL << (para->cols + para->rows + 3)) * 4 * para->ranks;
+       /* 8 banks */
+       return (1ULL << (para->cols + para->rows + 3)) * width * para->ranks;
 }
 
 #define SUN50I_H6_LPDDR3_DX_WRITE_DELAYS                       \
@@ -625,6 +652,7 @@ unsigned long sunxi_dram_init(void)
                .ranks = 2,
                .cols = 11,
                .rows = 14,
+               .bus_full_width = 1,
 #ifdef CONFIG_SUNXI_DRAM_H6_LPDDR3
                .type = SUNXI_DRAM_TYPE_LPDDR3,
                .dx_read_delays  = SUN50I_H6_LPDDR3_DX_READ_DELAYS,
index 88f13533b8852c6355660d2d56b39f0995fb9958..a2adf89b5d56873aba4f3b9d1e671c2824039c3e 100644 (file)
@@ -106,6 +106,11 @@ M: Jagan Teki <jagan@amarulasolutions.com>
 S:     Maintained
 F:     configs/a64-olinuxino_defconfig
 
+A64-OLINUXINO-EMMC BOARD
+M:     Sunil Mohan Adapa <sunil@medhas.org>
+S:     Maintained
+F:     configs/a64-olinuxino-emmc_defconfig
+
 A80 OPTIMUS BOARD
 M:     Chen-Yu Tsai <wens@csie.org>
 S:     Maintained
index 82b5d300d2c1c0efc385658fb63d2d34dff6af57..b08a7098579bc0426a57332250e6d7d3f4580b3f 100644 (file)
@@ -1168,6 +1168,7 @@ config CMD_SDRAM
 config CMD_SF
        bool "sf"
        depends on DM_SPI_FLASH || SPI_FLASH
+       default y if DM_SPI_FLASH
        help
          SPI Flash support
 
diff --git a/configs/a64-olinuxino-emmc_defconfig b/configs/a64-olinuxino-emmc_defconfig
new file mode 100644 (file)
index 0000000..56153e3
--- /dev/null
@@ -0,0 +1,17 @@
+CONFIG_ARM=y
+CONFIG_ARCH_SUNXI=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_SPL=y
+CONFIG_MACH_SUN50I=y
+CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+CONFIG_USE_PREBOOT=y
+# CONFIG_CMD_FLASH is not set
+# CONFIG_SPL_DOS_PARTITION is not set
+# CONFIG_SPL_EFI_PARTITION is not set
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino-emmc"
+CONFIG_SUN8I_EMAC=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
index 18ef5d2dce54af08e1e9c6d244c059ff7f22744d..0bfc1177622e1b36c0b2d94a64ea60d42d921975 100644 (file)
@@ -44,6 +44,7 @@ CONFIG_SF_DEFAULT_CS=1
 CONFIG_SF_DEFAULT_MODE=0
 CONFIG_SF_DEFAULT_SPEED=20000000
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT=1
 CONFIG_PHYLIB=y
index 1054c05d8c1d793abcb1b25439019e08a1bf88f2..e2da747a8f93d8ea190e5a04b4d0ef53ae3120e8 100644 (file)
@@ -42,6 +42,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SF_DEFAULT_MODE=0
 CONFIG_SF_DEFAULT_SPEED=20000000
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT=1
 CONFIG_PHYLIB=y
index 4080a7b3108fc00c19032fbd4c1c75d5d5778247..5caf95c22f521d3ddee854444385954dab197eb7 100644 (file)
@@ -43,6 +43,7 @@ CONFIG_SF_DEFAULT_BUS=3
 CONFIG_SF_DEFAULT_MODE=0
 CONFIG_SF_DEFAULT_SPEED=20000000
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_MTD_UBI_FASTMAP_AUTOCONVERT=1
 CONFIG_PHYLIB=y
index eed0558e2449a45d2ed59136abde0f0bed1ea661..fbaf79d1f0ab7180661c3db9a438a90b64f5a53b 100644 (file)
@@ -72,6 +72,7 @@ CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_SST=y
 CONFIG_SPI_FLASH_WINBOND=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHYLIB=y
 CONFIG_MII=y
 CONFIG_DM_PMIC=y
index 93254677e7fd3fdb55c64dc2737295caf0ad6221..51f559cda8007a1cb6b23f226fdb922d8726f623 100644 (file)
@@ -47,6 +47,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index 8e5b2e2f66f74503fd9cc129c1dbdc1c8efe2df2..c6481130297ac4d1c2bd52dd072f3b601ec9aa6a 100644 (file)
@@ -48,6 +48,7 @@ CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index c73f3821e7bc968e29817c7aa4feb497e561f860..414f13147e43c30a1f3912f3770ac17ad1f88cce 100644 (file)
@@ -46,6 +46,7 @@ CONFIG_SYS_I2C_DW=y
 CONFIG_DM_MMC=y
 CONFIG_MMC_DW=y
 CONFIG_MTD_DEVICE=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_DM_ETH=y
 CONFIG_PHY_GIGE=y
 CONFIG_ETH_DESIGNWARE=y
index 80ccb33fbb5d3734a64eb855737e255570d43f26..6eb052e9db3174839ae89c280447a1a4ac0faa40 100644 (file)
@@ -43,6 +43,7 @@ CONFIG_SYS_I2C_DW=y
 CONFIG_DM_MMC=y
 CONFIG_MMC_DW=y
 CONFIG_MTD_DEVICE=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index 98e80b7c864954f46c7f6cba23386aae2349f594..6b8b5b41a1a6ab929ccdc714c788139e3569dde8 100644 (file)
@@ -39,6 +39,7 @@ CONFIG_SYS_I2C_DW=y
 CONFIG_DM_MMC=y
 CONFIG_MMC_DW=y
 CONFIG_MTD_DEVICE=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index 99cdb26aae51766667de55c07896d42d232bc524..38b9f6c24b59f82489cb46e9314d7188a84b1751 100644 (file)
@@ -43,6 +43,7 @@ CONFIG_SYS_I2C_DW=y
 CONFIG_MTD_DEVICE=y
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index e977cd77073dbe384562cc4a71d28bbbe124fdba..605ffd7c2b0810c9514bb740f15404cb670722ea 100644 (file)
@@ -42,6 +42,7 @@ CONFIG_DM_I2C=y
 CONFIG_SYS_I2C_DW=y
 CONFIG_DM_MMC=y
 CONFIG_MMC_DW=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_DM_ETH=y
 CONFIG_PHY_GIGE=y
 CONFIG_ETH_DESIGNWARE=y
index b570b9dc949449c65f009e17373e60d5376aef85..cae6f7bc9b7b33b7ec7da0c4fc855b5b215de283 100644 (file)
@@ -48,6 +48,7 @@ CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index 9eac00e49dc218928d6345d58aa8dec319de873c..9cb1daa889c9d6e7d8ed29d33f3f131b83b16240 100644 (file)
@@ -48,6 +48,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_MACRONIX=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_DM_ETH=y
index 092347a6df53ecca95dcce19352c0da7433ab58e..c48bbb0e9c340901c5449f69b72cb879722634f9 100644 (file)
@@ -49,6 +49,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SF_DEFAULT_SPEED=100000000
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_PHY_MARVELL=y
 CONFIG_DM_ETH=y
 CONFIG_PHY_GIGE=y
index a9c594e219511120ab64ae24e67626c40f1824bb..80733ba6b150545481fe87d5bda538b03e0fe3c0 100644 (file)
@@ -72,6 +72,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_SPANSION=y
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_SPI_FLASH_MTD=y
 CONFIG_MTD_UBI_FASTMAP=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
index 5833234b63eb14248cfdf48c193cf091eccca84a..c9123fd7ee1722b90ac40e2e370750c77281c82c 100644 (file)
@@ -10,6 +10,7 @@ CONFIG_DRAM_ZQ=3881949
 CONFIG_MMC0_CD_PIN=""
 CONFIG_MMC_SUNXI_SLOT_EXTRA=2
 CONFIG_SPL_SPI_SUNXI=y
+CONFIG_SPI_FLASH_WINBOND=y
 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
 CONFIG_USE_PREBOOT=y
 CONFIG_SYS_SPI_U_BOOT_OFFS=0x8000
index c54feb03e69d7dbee6a04bcb7e2ab78f6951050e..2a54e715cb5fdc2f6983af8da69d8054f73776a6 100644 (file)
@@ -90,6 +90,7 @@ CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
 CONFIG_SPI_FLASH_MTD=y
+CONFIG_SPL_SPI_FLASH_MTD=y
 CONFIG_DM_ETH=y
 CONFIG_DWC_ETH_QOS=y
 CONFIG_PHY=y
index 5540eb7d38ecabf7a7ac896251bfde916b5edabb..9631a5059d3f9bc3fccb0a77ee96082c4bd1722c 100644 (file)
@@ -116,7 +116,7 @@ Put this code at the bottom of your existing driver file:
        static int exynos_cs_info(struct udevice *bus, uint cs,
                                  struct spi_cs_info *info)
        {
-               return -ENODEV;
+               return -EINVAL;
        }
 
        static const struct dm_spi_ops exynos_spi_ops = {
@@ -633,9 +633,9 @@ is not obvious from outside the driver. In this case you can provide a
 method for cs_info() to deal with this. If you don't provide it, then the
 device tree will be used to determine what chip selects are valid.
 
-Return -ENODEV if the supplied chip select is invalid, or 0 if it is valid.
-If you don't provide the cs_info() method, -ENODEV is assumed for all
-chip selects that do not appear in the device tree.
+Return -EINVAL if the supplied chip select is invalid, or 0 if it is valid.
+If you don't provide the cs_info() method, 0 is assumed for all chip selects
+that do not appear in the device tree.
 
 
 Test it
index d3b007a731dac0134beb13cecefe51657cca4d82..d77f818505ac7afdf4a2749aa86cc2d9abe6fd94 100644 (file)
@@ -3,6 +3,7 @@ menu "SPI Flash Support"
 config DM_SPI_FLASH
        bool "Enable Driver Model for SPI flash"
        depends on DM && DM_SPI
+       imply SPI_FLASH
        help
          Enable driver model for SPI flash. This SPI flash interface
          (spi_flash_probe(), spi_flash_write(), etc.) is then
@@ -26,11 +27,10 @@ config SPI_FLASH_SANDBOX
          stored in a file on the host filesystem.
 
 config SPI_FLASH
-       bool "Legacy SPI Flash Interface support"
-       depends on SPI
+       bool "SPI Flash Core Interface support"
        select SPI_MEM
        help
-         Enable the legacy SPI flash support. This will include basic
+         Enable the SPI flash Core support. This will include basic
          standard support for things like probing, read / write, and
          erasing through cmd_sf interface.
 
@@ -196,4 +196,12 @@ config SPI_FLASH_MTD
 
          If unsure, say N
 
+config SPL_SPI_FLASH_MTD
+       bool "SPI flash MTD support for SPL"
+       depends on SPI_FLASH
+       help
+          Enable the MTD support for the SPI flash layer in SPL.
+
+         If unsure, say N
+
 endmenu # menu "SPI Flash Support"
index 20db1015d9ed6323af60bf818051f1296c1a7775..b5dfa300de49c9563252ef3fda7ad4bbd75c549a 100644 (file)
@@ -19,5 +19,5 @@ endif
 
 obj-$(CONFIG_SPI_FLASH) += spi-nor.o
 obj-$(CONFIG_SPI_FLASH_DATAFLASH) += sf_dataflash.o
-obj-$(CONFIG_SPI_FLASH_MTD) += sf_mtd.o
+obj-$(CONFIG_$(SPL_)SPI_FLASH_MTD) += sf_mtd.o
 obj-$(CONFIG_SPI_FLASH_SANDBOX) += sandbox.o
index bb8c19a31cf70df90de1d89e2a3fdad236354a56..5c643034c691ae101bddb561584920e5ce896f6c 100644 (file)
@@ -77,7 +77,7 @@ extern const struct flash_info spi_nor_ids[];
 int spi_flash_cmd_get_sw_write_prot(struct spi_flash *flash);
 
 
-#ifdef CONFIG_SPI_FLASH_MTD
+#if CONFIG_IS_ENABLED(SPI_FLASH_MTD)
 int spi_flash_mtd_register(struct spi_flash *flash);
 void spi_flash_mtd_unregister(void);
 #endif
index 73297e1a0a512a0a82ce7ac38b9665e7bceddcca..f051e473ffc4d9a945f1b729c249a77771404db3 100644 (file)
@@ -44,7 +44,7 @@ static int spi_flash_probe_slave(struct spi_flash *flash)
        if (ret)
                goto err_read_id;
 
-#ifdef CONFIG_SPI_FLASH_MTD
+#if CONFIG_IS_ENABLED(SPI_FLASH_MTD)
        ret = spi_flash_mtd_register(flash);
 #endif
 
@@ -83,7 +83,7 @@ struct spi_flash *spi_flash_probe(unsigned int busnum, unsigned int cs,
 
 void spi_flash_free(struct spi_flash *flash)
 {
-#ifdef CONFIG_SPI_FLASH_MTD
+#if CONFIG_IS_ENABLED(SPI_FLASH_MTD)
        spi_flash_mtd_unregister();
 #endif
        spi_free_slave(flash->spi);
@@ -152,7 +152,7 @@ static int spi_flash_std_probe(struct udevice *dev)
 
 static int spi_flash_std_remove(struct udevice *dev)
 {
-#ifdef CONFIG_SPI_FLASH_MTD
+#if CONFIG_IS_ENABLED(SPI_FLASH_MTD)
        spi_flash_mtd_unregister();
 #endif
        return 0;
index 990e39d7c2f6f50c72cfb99619ef83c3160cc391..5a8c084255662669930584bb2dbb0606be671d74 100644 (file)
@@ -380,12 +380,12 @@ static int spi_nor_fsr_ready(struct spi_nor *nor)
 
        if (fsr & (FSR_E_ERR | FSR_P_ERR)) {
                if (fsr & FSR_E_ERR)
-                       dev_dbg(nor->dev, "Erase operation failed.\n");
+                       dev_err(nor->dev, "Erase operation failed.\n");
                else
-                       dev_dbg(nor->dev, "Program operation failed.\n");
+                       dev_err(nor->dev, "Program operation failed.\n");
 
                if (fsr & FSR_PT_ERR)
-                       dev_dbg(nor->dev,
+                       dev_err(nor->dev,
                                "Attempted to modify a protected sector.\n");
 
                nor->write_reg(nor, SPINOR_OP_CLFSR, NULL, 0);
@@ -1916,7 +1916,7 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
 
                erasesize = 1U << erasesize;
                opcode = (half >> 8) & 0xff;
-#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
+#ifdef CONFIG_SPI_FLASH_USE_4K_SECTORS
                if (erasesize == SZ_4K) {
                        nor->erase_opcode = opcode;
                        mtd->erasesize = erasesize;
index 6996c0a2864f9ef549035e02aa3dd73ee4fa2a41..d3b84574ac4cf606b60da3e7dfbf50cb5f545109 100644 (file)
@@ -58,7 +58,7 @@
  * All newly added entries should describe *hardware* and should use SECT_4K
  * (or SECT_4K_PMC) if hardware supports erasing 4 KiB sectors. For usage
  * scenarios excluding small sectors there is config option that can be
- * disabled: CONFIG_MTD_SPI_NOR_USE_4K_SECTORS.
+ * disabled: CONFIG_SPI_FLASH_USE_4K_SECTORS.
  * For historical (and compatibility) reasons (before we got above config) some
  * old entries may be missing 4K flag.
  */
@@ -75,6 +75,7 @@ const struct flash_info spi_nor_ids[] = {
        { INFO("at45db161d",    0x1f2600, 0, 64 * 1024,  32, SECT_4K) },
        { INFO("at45db321d",    0x1f2700, 0, 64 * 1024,  64, SECT_4K) },
        { INFO("at45db641d",    0x1f2800, 0, 64 * 1024, 128, SECT_4K) },
+       { INFO("at25sl321",     0x1f4216, 0, 64 * 1024,  64, SECT_4K) },
        { INFO("at26df081a",    0x1f4501, 0, 64 * 1024,  16, SECT_4K) },
 #endif
 #ifdef CONFIG_SPI_FLASH_EON            /* EON */
@@ -128,6 +129,8 @@ const struct flash_info spi_nor_ids[] = {
                        SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
        { INFO("is25wp128",  0x9d7018, 0, 64 * 1024, 256,
                        SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
+       { INFO("is25wp256",  0x9d7019, 0, 64 * 1024, 512,
+                       SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 #endif
 #ifdef CONFIG_SPI_FLASH_MACRONIX       /* MACRONIX */
        /* Macronix */
@@ -161,12 +164,16 @@ const struct flash_info spi_nor_ids[] = {
        { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_QUAD_READ) },
        { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
        { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
-       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
-       { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
+       { INFO6("mt25ql256a",    0x20ba19, 0x104400, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES | USE_FSR) },
+       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_FSR) },
+       { INFO6("mt25qu256a",  0x20bb19, 0x104400, 64 * 1024,  512, SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES | USE_FSR) },
+       { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_QUAD_READ | USE_FSR) },
        { INFO6("mt25qu512a",  0x20bb20, 0x104400, 64 * 1024, 1024,
-                SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
-       { INFO("n25q512a",    0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
-       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
+                SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES |
+                USE_FSR) },
+       { INFO("n25q512a",    0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
+       { INFO6("mt25ql512a",  0x20ba20, 0x104400, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
+       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
        { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
        { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
        { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
index b8ca2bdedd5bceadc504e0ed6594d3696d69d716..7be867d5b66dc70b1858bbd39f7ce3f63114169a 100644 (file)
@@ -1,5 +1,22 @@
 menuconfig SPI
        bool "SPI Support"
+       help
+         The "Serial Peripheral Interface" is a low level synchronous
+          protocol.  Chips that support SPI can have data transfer rates
+          up to several tens of Mbit/sec.  Chips are addressed with a
+          controller and a chipselect.  Most SPI slaves don't support
+          dynamic device discovery; some are even write-only or read-only.
+
+          SPI is widely used by microcontrollers to talk with sensors,
+          eeprom and flash memory, codecs and various other controller
+          chips, analog to digital (and d-to-a) converters, and more.
+          MMC and SD cards can be accessed using SPI protocol; and for
+          DataFlash cards used in MMC sockets, SPI must always be used.
+
+          SPI is one of a family of similar protocols using a four wire
+          interface (select, clock, data in, data out) including Microwire
+          (half duplex), SSP, SSI, and PSP.  This driver framework should
+          work with most such devices and controllers.
 
 if SPI
 
@@ -243,6 +260,7 @@ config SPI_SIFIVE
 
 config SPI_SUNXI
        bool "Allwinner SoC SPI controllers"
+       default ARCH_SUNXI
        help
          Enable the Allwinner SoC SPi controller driver.
 
index 4fd3c050e8e9079c6427d30db43ff22083798c2c..207069218f6ce445728f10570f23df33a29da0cd 100644 (file)
@@ -198,7 +198,7 @@ static int ath79_cs_info(struct udevice *bus, uint cs,
 {
        /* Always allow activity on CS 0/1/2 */
        if (cs >= 3)
-               return -ENODEV;
+               return -EINVAL;
 
        return 0;
 }
index e82b80c107c1aec7cb98bb265c5fb693503675d1..529adfbc4e6e7ee4cb07c70b933187ffd4c68534 100644 (file)
@@ -108,7 +108,7 @@ static int bcm63xx_hsspi_cs_info(struct udevice *bus, uint cs,
 
        if (cs >= priv->num_cs) {
                printf("no cs %u\n", cs);
-               return -ENODEV;
+               return -EINVAL;
        }
 
        return 0;
index 4d19e03523fb3fb1bcbdb9b0199129274287b45f..69f88c9e0873e7006bd4c6cdc5564ea26017c759 100644 (file)
@@ -130,7 +130,7 @@ static int bcm63xx_spi_cs_info(struct udevice *bus, uint cs,
 
        if (cs >= priv->num_cs) {
                printf("no cs %u\n", cs);
-               return -ENODEV;
+               return -EINVAL;
        }
 
        return 0;
index 7d58cfae55e417d1766069111f2ab963d434e6dc..91e613e9cd65374c0220814421d407a3bcd17041 100644 (file)
@@ -518,8 +518,22 @@ static int dw_spi_set_mode(struct udevice *bus, uint mode)
 static int dw_spi_remove(struct udevice *bus)
 {
        struct dw_spi_priv *priv = dev_get_priv(bus);
+       int ret;
+
+       ret = reset_release_bulk(&priv->resets);
+       if (ret)
+               return ret;
 
-       return reset_release_bulk(&priv->resets);
+#if CONFIG_IS_ENABLED(CLK)
+       ret = clk_disable(&priv->clk);
+       if (ret)
+               return ret;
+
+       ret = clk_free(&priv->clk);
+       if (ret)
+               return ret;
+#endif
+       return 0;
 }
 
 static const struct dm_spi_ops dw_spi_ops = {
index 906401ec8ab46acb242b7cfad857622427a717ba..16473ec7a0b9d5e36d3ca270c98e8b23060f48a7 100644 (file)
@@ -117,7 +117,7 @@ static int sandbox_cs_info(struct udevice *bus, uint cs,
 {
        /* Always allow activity on CS 0 */
        if (cs >= 1)
-               return -ENODEV;
+               return -EINVAL;
 
        return 0;
 }
index a4d1b65682d1e75d4ccac2b38c90f2f1f005a124..947516073ea99650b1703a9fc5fcc854b5496a81 100644 (file)
@@ -261,11 +261,10 @@ int spi_cs_info(struct udevice *bus, uint cs, struct spi_cs_info *info)
                return ops->cs_info(bus, cs, info);
 
        /*
-        * We could assume there is at least one valid chip select, but best
-        * to be sure and return an error in this case. The driver didn't
-        * care enough to tell us.
+        * We could assume there is at least one valid chip select.
+        * The driver didn't care enough to tell us.
         */
-       return -ENODEV;
+       return 0;
 }
 
 int spi_find_bus_and_cs(int busnum, int cs, struct udevice **busp,
index a54b10fdebf933322deedd776d3d80ff6a7c63b8..567e33f156a96940b478160a1644684564929328 100644 (file)
@@ -78,7 +78,7 @@ int tegra20_sflash_cs_info(struct udevice *bus, unsigned int cs,
 {
        /* Tegra20 SPI-Flash - only 1 device ('bus/cs') */
        if (cs != 0)
-               return -ENODEV;
+               return -EINVAL;
        else
                return 0;
 }
index e998d9b1b279800f27a67be3e091574d9aec6cf9..b451c7e7dccb94b63026799b8b8235cc01d40b46 100644 (file)
@@ -30,7 +30,6 @@
 #define CONFIG_ETHPRIME                        "FEC"
 #define CONFIG_FEC_MXC_PHYADDR         0
 
-#define CONFIG_SPI_FLASH_MTD
 #define CONFIG_SYS_SPI_ST_ENABLE_WP_PIN
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
index b957e9cba4b5e29a8195eefd4972cfa1f7fc0411..c1a6625fcb10abb2580d576677c7c81e87f6cfb8 100644 (file)
 #define CONFIG_MXC_UART_BASE           UART4_BASE
 #define CONFIG_SYS_BAUDRATE_TABLE      {9600, 19200, 38400, 57600, 115200}
 
-/* SPI flash */
-
-/* MTD support */
-#ifndef CONFIG_SPL_BUILD
-#define CONFIG_SPI_FLASH_MTD
-#endif
-
 /* Environment */
 #define CONFIG_ENV_SECT_SIZE           (64 * 1024)
 #define CONFIG_ENV_SIZE                        (8 * 1024)
index 41f0813a01982c5d3030996113cec3f7daccbfdc..6876134a00cb6187b840357a20a641fb7c9d53a2 100644 (file)
 #define CONFIG_ENV_SECT_SIZE           CONFIG_SYS_FLASH_SECT_SZ
 #endif
 
-#ifdef CONFIG_USE_SPIFLASH
-#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
+#if defined(CONFIG_USE_SPIFLASH) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
 #define CONFIG_ENV_SIZE                        (64 << 10)
 #define CONFIG_ENV_OFFSET              (512 << 10)
 #define CONFIG_ENV_SECT_SIZE   (64 << 10)
 #endif
-#ifdef CONFIG_SPL_BUILD
-#undef CONFIG_SPI_FLASH_MTD
-#endif
-#endif
 
 /*
  * U-Boot general configuration
index a854d0b53152d1df7b2ffb1f254b3d54d2b7f6a6..86c1192035281b56c1570a14f321d27f48a95170 100644 (file)
@@ -59,7 +59,6 @@
 #if defined(CONFIG_SPL_BUILD)
 #undef CONFIG_DM_SPI
 #undef CONFIG_DM_SPI_FLASH
-#undef CONFIG_SPI_FLASH_MTD
 #endif
 
 /* UART */
index d80641568eb44c8294cbc7713762c984b9305574..65dae1f62faeaf13584a6c73588e1764a069959b 100644 (file)
@@ -39,7 +39,6 @@
 #if defined(CONFIG_SPL_BUILD)
 #undef CONFIG_DM_SPI
 #undef CONFIG_DM_SPI_FLASH
-#undef CONFIG_SPI_FLASH_MTD
 #endif
 
 /* Below values are "dummy" - only to avoid build break */
index a27627e72199afb405ea93457105d61c6794640d..e543061bff6d630d2b3249dd0ccc9226c3e2101b 100644 (file)
 #define CONFIG_MXC_UART
 #define CONFIG_MXC_UART_BASE          UART2_BASE
 
-#ifdef CONFIG_SPI_FLASH
-
-/* SPI */
-#ifdef CONFIG_CMD_SF
-  #define CONFIG_SPI_FLASH_MTD
-                                            /* GPIO 3-19 (21248) */
-#endif
-
-#elif defined(CONFIG_SPL_NAND_SUPPORT)
+#if !defined(CONFIG_SPI_FLASH) && defined(CONFIG_SPL_NAND_SUPPORT)
 /* Enable NAND support */
 #ifdef CONFIG_CMD_NAND
   #define CONFIG_SYS_MAX_NAND_DEVICE   1
index 71a5909045b3dd180f443fdd7e5077b80275c70a..e940a8b70a3b3ab72187688ffdf355fd136cccf6 100644 (file)
 #define CONFIG_ENV_SIZE_REDUND (CONFIG_SYS_MONITOR_LEN)
 
 /* SF MTD */
-#if defined(CONFIG_SPI_FLASH_MTD) && !defined(CONFIG_SPL_BUILD)
-#else
+#ifdef CONFIG_SPL_BUILD
 #undef CONFIG_DM_SPI
 #undef CONFIG_DM_SPI_FLASH
-#undef CONFIG_SPI_FLASH_MTD
 #endif
 
 /* Timer */
index 94268ed7a310ca99f61cb4b6a4ed7be5c5dcb673..baa214399ff9d94a78aaa3707273224b8769227e 100644 (file)
 /*
  * QSPI support
  */
-/* Enable multiple SPI NOR flash manufacturers */
-#ifndef CONFIG_SPL_BUILD
-#define CONFIG_SPI_FLASH_MTD
-#endif
 /* QSPI reference clock */
 #ifndef __ASSEMBLY__
 unsigned int cm_get_qspi_controller_clk_hz(void);
index 5eec0c4775e5c9a3122f772841e1952fb803b6ac..3f79168df30ab70756725bded35342288824054c 100644 (file)
@@ -458,7 +458,7 @@ struct dm_spi_ops {
         * @cs:         The chip select (0..n-1)
         * @info:       Returns information about the chip select, if valid.
         *              On entry info->dev is NULL
-        * @return 0 if OK (and @info is set up), -ENODEV if the chip select
+        * @return 0 if OK (and @info is set up), -EINVAL if the chip select
         *         is invalid, other -ve value on error
         */
        int (*cs_info)(struct udevice *bus, uint cs, struct spi_cs_info *info);