[U-Boot] [PATCH v4 2/2] Enable test case with A20-OLinuXino-Lime2

Stefan Mavrodiev stefan.mavrodiev at gmail.com
Wed Feb 7 07:05:14 UTC 2018


On 02/07/2018 08:39 AM, Jagan Teki wrote:
> On Wed, Feb 7, 2018 at 12:00 PM, Stefan Mavrodiev
> <stefan.mavrodiev at gmail.com> wrote:
>> On 02/06/2018 06:48 PM, Jagan Teki wrote:
>>> On Tue, Feb 6, 2018 at 6:44 PM, Stefan Mavrodiev <stefan at olimex.com>
>>> wrote:
>>>> Driver testing is done with A20-OLinuXino-Lime2. Testing
>>>> requirements are:
>>>>     - Exposing spi0 alternative pins in the dts file
>>>>     - Add alias node, enabling driver probing
>>>>     - Add flash sub-node of spi
>>>>     - Enable spi flash related options in the defconfig file
>>>>
>>>> The testing log is:
>>>>
>>>>     U-Boot SPL 2018.03-rc1-00075-g35a689a-dirty (Feb 06 2018 - 14:40:07
>>>> +0200)
>>>>     DRAM: 1024 MiB
>>>>     CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
>>>>     Trying to boot from FEL
>>> Why FEL? can't it boot from SPI-FLASH?
>> Because I previously erased the flash during testing. Here is same, booting
>> from SPI:
>>
>>    U-Boot SPL 2018.03-rc1-00075-g61ce225 (Feb 07 2018 - 08:21:07 +0200)
>>    DRAM: 1024 MiB
>>    CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
>>    Trying to boot from sunxi SPI
>>
>>
>>    U-Boot 2018.03-rc1-00075-g61ce225 (Feb 07 2018 - 08:21:07 +0200) Allwinner
>> Technology
>>
>>
>>    CPU:   Allwinner A20 (SUN7I)
>>    Model: Olimex A20-OLinuXino-LIME2
>>    I2C:   ready
>>    DRAM:  1 GiB
>>    MMC:   SUNXI SD/MMC: 0
>>    Loading Environment from SPI Flash... SF: Detected w25q128bv with page
>> size 256 Bytes, erase size 4 KiB, total 16 MiB
>>    OK
>>    In:    serial
>>    Out:   serial
>>    Err:   serial
>>    Allwinner mUSB OTG (Peripheral)
>>    SCSI:  SATA link 0 timeout.
>>    AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
>>    flags: ncq stag pm led clo only pmp pio slum part ccc apst
>>    Net:   No ethernet found.
>>    starting USB...
>>    USB0:   USB EHCI 1.00
>>    USB1:   USB OHCI 1.0
>>    USB2:   USB EHCI 1.00
>>    USB3:   USB OHCI 1.0
>>    scanning bus 0 for devices... 1 USB Device(s) found
>>    scanning bus 2 for devices... 1 USB Device(s) found
>>           scanning usb for storage devices... 0 Storage Device(s) found
>>    Hit any key to stop autoboot:
>>>
>>>>     U-Boot 2018.03-rc1-00075-g35a689a-dirty (Feb 06 2018 - 14:40:07 +0200)
>>>> Allwinner Technology
>>>>
>>>>     CPU:   Allwinner A20 (SUN7I)
>>>>     Model: Olimex A20-OLinuXino-LIME2
>>>>     I2C:   ready
>>>>     DRAM:  1 GiB
>>>>     MMC:   SUNXI SD/MMC: 0
>>>>     Loading Environment from SPI Flash... SF: Detected w25q128bv with page
>>>> size 256 Bytes, erase size 4 KiB, total 16 MiB
>>>>     OK
>>>>     In:    serial
>>>>     Out:   serial
>>>>     Err:   serial
>>>>     Allwinner mUSB OTG (Peripheral)
>>>>     SCSI:  SATA link 0 timeout.
>>>>     AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
>>>>     flags: ncq stag pm led clo only pmp pio slum part ccc apst
>>>>     Net:   No ethernet found.
>>>>     starting USB...
>>>>     USB0:   USB EHCI 1.00
>>>>     USB1:   USB OHCI 1.0
>>>>     USB2:   USB EHCI 1.00
>>>>     USB3:   USB OHCI 1.0
>>>>     scanning bus 0 for devices... 1 USB Device(s) found
>>>>     scanning bus 2 for devices... 1 USB Device(s) found
>>>>            scanning usb for storage devices... 0 Storage Device(s) found
>>>>     Hit any key to stop autoboot:  0
>>>>
>>>>     # Probe device
>>>>     => sf probe
>>>>     SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB,
>>>> total 16 MiB
>>> How did this resolved w/o sspi?
>> I enabled both CONFIG_SPI_FLASH and CONFIG_DM_SPI_FLASH. The driver-model
>> search for
>> "spi-flash" compatible string, probe it and bind it to the spi driver.
>>>
>>>>     # Erase
>>>>     => sf erase 0x1000 0x100
>>>>     SF: 256 bytes @ 0x1000 Erased: ERROR
>>>>     => sf erase 0x1000 0x1000
>>>>     SF: 4096 bytes @ 0x1000 Erased: OK
>>>>
>>>>     # Test
>>>>     => sf test 0 100000
>>>>     SPI flash test:
>>>>     0 erase: 12104 ticks, 84 KiB/s 0.672 Mbps
>>>>     1 check: 8881 ticks, 115 KiB/s 0.920 Mbps
>>>>     2 write: 10824 ticks, 94 KiB/s 0.752 Mbps
>>>>     3 read: 8872 ticks, 115 KiB/s 0.920 Mbps
>>>>     Test passed
>>>>     0 erase: 12104 ticks, 84 KiB/s 0.672 Mbps
>>>>     1 check: 8881 ticks, 115 KiB/s 0.920 Mbps
>>>>     2 write: 10824 ticks, 94 KiB/s 0.752 Mbps
>>>>     3 read: 8872 ticks, 115 KiB/s 0.920 Mbps
>>>>
>>>>     # Try write/read
>>>>     => sf erase 0x1000 0x1000
>>>>     SF: 4096 bytes @ 0x1000 Erased: OK
>>>>
>>>>     => md.b 0x50000000 0x100
>>>>     50000000: a9 4d b7 68 d2 48 69 c3 09 78 fa d3 33 66 e9 53
>>>> .M.h.Hi..x..3f.S
>>>>     50000010: b0 53 af 79 ad 33 79 b1 f1 e3 1d 09 2e ba dd dc
>>>> .S.y.3y.........
>>>>     50000020: 8c eb eb 53 f4 ef 66 89 b5 e9 f6 fb af 73 7f cb
>>>> ...S..f......s..
>>>>     50000030: b6 4b bf de c3 fd de bb 9a 53 ad 7d ef 38 6f bf
>>>> .K.......S.}.8o.
>>>>     50000040: fd fb e7 5e e9 db fc 0c fc f7 be 76 ad b9 fd eb
>>>> ...^.......v....
>>>>     50000050: f3 ed 5f b5 bb bd ba 8f ff df 1f bf f3 ff fb d7
>>>> .._.............
>>>>     50000060: b7 6e 9e 5f af 7a 62 ed 7f 66 1b 6d fd fb 47 f7
>>>> .n._.zb..f.m..G.
>>>>     50000070: b7 fa f4 db d5 b6 d5 ff 81 e6 f5 d9 8f ef ff db
>>>> ................
>>>>     50000080: b7 dd bd fb f3 1d 9d 2f f6 db c8 7f fb cf b9 f3
>>>> ......./........
>>>>     50000090: 3c ee da 2f b7 5e 6f bc f1 2f 2b cf 3f f2 fb ee
>>>> <../.^o../+.?...
>>>>     500000a0: 6f 5e 99 c3 3b 51 bd d4 be 40 4e db ab ed f9 77
>>>> o^..;Q... at N....w
>>>>     500000b0: 9f f6 7d ed 54 4a 68 f8 7d ee 53 9b ff ae ef e4
>>>> ..}.TJh.}.S.....
>>>>     500000c0: 73 ff 3c c7 f7 df f6 be bf 0f 97 96 3d 9b 9e 9f
>>>> s.<.........=...
>>>>     500000d0: e4 49 ca ff be fa ff df f7 7a cf ab 7f 7a 7b cf
>>>> .I.......z...z{.
>>>>     500000e0: bb c7 9f 3f c1 99 f2 f2 bf ee cf fb d5 b9 e2 e8
>>>> ...?............
>>>>     500000f0: ec e8 b2 bd 21 1f 5a ef 7a 7d 9d ad 31 89 3f 6f
>>>> ....!.Z.z}..1.?o
>>>>
>>>>     => sf write 0x50000000 0x1000 0x100
>>>>     device 0 offset 0x1000, size 0x100
>>>>     SF: 256 bytes @ 0x1000 Written: OK
>>>>     => sf read 0x51000000 0x1000 0x100
>>>>     device 0 offset 0x1000, size 0x100
>>>>     SF: 256 bytes @ 0x1000 Read: OK
>>>>
>>>>     => cmp.b 0x50000000 0x51000000 0x100
>>>>     Total of 256 byte(s) were the same
>>>>
>>>> Signed-off-by: Stefan Mavrodiev <stefan at olimex.com>
>>>> ---
>>>>    arch/arm/dts/sun7i-a20-olinuxino-lime2.dts | 30
>>>> ++++++++++++++++++++++++++++++
>>>>    configs/A20-OLinuXino-Lime2_defconfig      | 11 +++++++++++
>>>>    drivers/mtd/spi/Makefile                   |  4 +++-
>>>>    include/configs/sunxi-common.h             |  2 ++
>>>>    4 files changed, 46 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/arch/arm/dts/sun7i-a20-olinuxino-lime2.dts
>>>> b/arch/arm/dts/sun7i-a20-olinuxino-lime2.dts
>>>> index d5c796c..a6ee87c 100644
>>>> --- a/arch/arm/dts/sun7i-a20-olinuxino-lime2.dts
>>>> +++ b/arch/arm/dts/sun7i-a20-olinuxino-lime2.dts
>>>> @@ -54,6 +54,7 @@
>>>>
>>>>           aliases {
>>>>                   serial0 = &uart0;
>>>> +               spi0 = &spi0;
>>>>           };
>>>>
>>>>           chosen {
>>>> @@ -215,6 +216,20 @@
>>>>                   allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
>>>>           };
>>>>
>>>> +       spi0_pins_b: spi0 at 1 {
>>>> +               allwinner,pins = "PC0", "PC1", "PC2";
>>>> +               allwinner,function = "spi0";
>>>> +               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
>>>> +               allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
>>>> +       };
>>>> +
>>>> +       spi0_cs0_pins_b: spi0_cs0 at 1 {
>>>> +               allwinner,pins = "PC23";
>>>> +               allwinner,function = "spi0";
>>>> +               allwinner,drive = <SUN4I_PINCTRL_10_MA>;
>>>> +               allw inner,pull = <SUN4I_PINCTRL_NO_PULL>;
>>>> +       };
>>>> +
>>>>           usb0_id_detect_pin: usb0_id_detect_pin at 0 {
>>>>                   allwinner,pins = "PH4";
>>>>                   allwinner,function = "gpio_in";
>>>> @@ -257,6 +272,21 @@
>>>>           status = "okay";
>>>>    };
>>>>
>>>> +&spi0 {
>>>> +       pinctrl-names = "default";
>>>> +       pinctrl-0 = <&spi0_pins_b>, <&spi0_cs0_pins_b>;
>>>> +       status = "okay";
>>>> +
>>>> +       flash: w25q128 at 0 {
>>> Was it sync from Linux?
>> No, this isn't in the linux dts.
> But we have to, please send it to Linux first.
We've already commented this issue. In the v2 [1], I've explained that this
won't go mainline, since it's optional feature. Rather it will be 
managed with overlays.
>
>>>
>>> I think as per binding docs
>>>
>>> [label:] node-name[@unit-address]
>>> vendor: subsys-nane[@0]
>>> w25q128: spi-nor at 0 {
>>>
>>>> +               #address-cells = <1>;
>>>> +               #size-cells = <1>;
>>>> +               compatible = "winbond,w25q128", "jedec,spi-nor",
>>>> "spi-flash";
>>>> +               reg = <0>;
>>>> +               spi-max-frequency = <20000000>;
>>>> +               status = "okay";
>>>> +       };
>>>> +};
>>>> +
>>>>    &uart0 {
>>>>           pinctrl-names = "default";
>>>>           pinctrl-0 = <&uart0_pins_a>;
>>>> diff --git a/configs/A20-OLinuXino-Lime2_defconfig
>>>> b/configs/A20-OLinuXino-Lime2_defconfig
>>>> index 1edc844..da5ca34 100644
>>>> --- a/configs/A20-OLinuXino-Lime2_defconfig
>>>> +++ b/configs/A20-OLinuXino-Lime2_defconfig
>>>> @@ -30,3 +30,14 @@ CONFIG_SCSI=y
>>>>    CONFIG_USB_EHCI_HCD=y
>>>>    CONFIG_USB_MUSB_GADGET=y
>>>>    CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
>>>> +CONFIG_CMD_SF=y
>>>> +CONFIG_CMD_SF_TEST=y
>>>> +CONFIG_DM_SPI_FLASH=y
>>>> +CONFIG_SPI_FLASH=y
>>>> +CONFIG_SPI_FLASH_WINBOND=y
>>>> +CONFIG_SPL_SPI_SUNXI=y
>>>> +CONFIG_DM_SPI=y
>>>> +CONFIG_SUN4I_SPI=y
>>>> +# CONFIG_ENV_IS_IN_FAT is not set
>>>> +# CONFIG_ENV_IS_IN_MMC is not set
>>>> +CONFIG_ENV_IS_IN_SPI_FLASH=y
>>>> diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
>>>> index fcda023..d4a5fbd 100644
>>>> --- a/drivers/mtd/spi/Makefile
>>>> +++ b/drivers/mtd/spi/Makefile
>>>> @@ -10,9 +10,11 @@ obj-$(CONFIG_DM_SPI_FLASH) += sf-uclass.o
>>>>    ifdef CONFIG_SPL_BUILD
>>>>    obj-$(CONFIG_SPL_SPI_BOOT)     += fsl_espi_spl.o
>>>>    obj-$(CONFIG_SPL_SPI_SUNXI)    += sunxi_spi_spl.o
>>>> +else
>>>> +obj-$(CONFIG_SPI_FLASH)        += sf_probe.o
>>>>    endif
>>> This will break SPL build with sf_probe.c and even we can unnecessary
>>> build other SPI_FLASH files.
>> Yes, but if both DM and legacy drivers are enabled u-boot won't build. From
>> what I can understand,
>> sf-uclass is some kind of wrapper of sf_probe. Maybe sf_probe needs some
>> rework, because it uses
>> functions not available during spl build. Thats why I exclude it during spl,
>> because after all this is
>> test case, not actual patch.
> That isn't true exactly, sunxi_spi_spl.c need drivers/mtd during SPL
> and If SPI_FLASH is built because if defined. Technically
> sunxi_spi_spl doesn't use either SPI or SPL_FLASH subsystem. So I've
> moved this into arch area, try this [1]
>
> [1] https://patchwork.ozlabs.org/patch/869946/
I'll try it.

[1] https://patchwork.ozlabs.org/patch/846031/



More information about the U-Boot mailing list