[U-Boot] [PATCH v4 2/2] Enable test case with A20-OLinuXino-Lime2
Stefan Mavrodiev
stefan.mavrodiev at gmail.com
Wed Feb 7 06:30:35 UTC 2018
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.
>
> 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.
Regards,
Stefan Mavrodiev
More information about the U-Boot
mailing list