[U-Boot] u-boot device model SPI + SPI Flash
Hoefle Marco
Marco.Hoefle at nanotronic.ch
Thu Oct 22 08:16:16 CEST 2015
> -----Original Message-----
> From: Jagan Teki [mailto:jteki at openedev.com]
> Sent: Mittwoch, 21. Oktober 2015 18:45
> To: Hoefle Marco <Marco.Hoefle at nanotronic.ch>
> Cc: u-boot at lists.denx.de
> Subject: Re: [U-Boot] u-boot device model SPI + SPI Flash
>
> On 21 October 2015 at 22:10, Hoefle Marco <Marco.Hoefle at nanotronic.ch>
> wrote:
> > Hello Jagan,
> > Thank you for your reply.
> > Please find my comments bellow. I missed to mention that I am using
> > mainline 2015.07
> >
> >
> >> -----Original Message-----
> >> From: Jagan Teki [mailto:jteki at openedev.com]
> >> Sent: Mittwoch, 21. Oktober 2015 18:28
> >> To: Hoefle Marco <Marco.Hoefle at nanotronic.ch>
> >> Cc: u-boot at lists.denx.de
> >> Subject: Re: [U-Boot] u-boot device model SPI + SPI Flash
> >>
> >> On 21 October 2015 at 16:25, Hoefle Marco
> >> <Marco.Hoefle at nanotronic.ch>
> >> wrote:
> >> >
> >> > Hello,
> >> > I saw that here is also a mailing list dedicated to device model
> >> > issues but it
> >> looks obsolete (last post February 2014) so I am using this forum.
> >>
> >> Please note its driver model - not a device model.
> > Ok
> >>
> >> >
> >> > I have a problem nearly identically to
> >> > http://lists.denx.de/pipermail/u-boot/2015-April/210754.html
> >> >
> >> >
> >> > The SPI initialization does not work:
> >> >
> >> > Invalid bus 0 (err=-19)
> >> > *** Warning - spi_flash_probe() failed, using default environment
> >>
> >> Which board it is? dts file name?
> > It is a custom dts file. It is for a Microblaze CPU in an Artix FPGA.
> > The dts reflects that one below
> >>
> >> >
> >> >
> >> > This is the device tree compiled into u-boot:
> >> >
> >> > U-Boot> fdt addr 0x8FEB8A7C
> >> > U-Boot> fdt print
> >> > / {
> >> > #address-cells = <0x00000001>;
> >> > #size-cells = <0x00000001>;
> >> > aliases {
> >> > serial0 = "serial at 40600000";
> >> > spi0 = "/axi_quad_spi at 44a00000";
> >> > };
> >> > memory {
> >> > device_type = "memory";
> >> > reg = <0x80000000 0x10000000>;
> >> > };
> >> > axi_quad_spi at 44a00000 {
> >> > compatible = "xlnx,xps-spi-2.00.a";
> >>
> >> Do you need zynq spi or qspi driver there is no compatible string
> >> with "xlnx,xps-spi-2.00.a" do know which source you're using?
> > This driver is used:
> > u-boot/drivers/spi/xilinx_spi.c
>
> In that case, use the compatible in your dts as below
>
> static const struct udevice_id xilinx_spi_ids[] = {
> { .compatible = "xlnx,xilinx-spi" },
> { }
> };
That was a copy paste failure, sorry for that. The reason was that in the meanwhile I tried the original Xilinx driver from their github tree. They have the tag: compatible = "xlnx,xps-spi-2.00.a"
However, I changed back to have mainline code only an put a few printfs to it:
U-Boot 2015.07--33711bdd4a4dce942fb5ae85a68899a8357bdd94---dirty (Oct 22 2015 - 07:57:35 +0200)
DRAM: 256 MiB
uclass_find_device_by_seq: 0 -1
uclass_find_device_by_seq: 0 0
- -1 -1
- not found
env_relocate: 267
spi_flash_probe: 410
busnum: 0, cs: 0, max_hz: 50000000
spi_setup_slave: 336
spi_get_bus_and_cs: 248
uclass_find_device_by_seq: 0 0
- -1 -1
- not found
uclass_find_device_by_seq: 1 0
- -1 -1
- not found
Invalid bus 0 (err=-19)
*** Warning - spi_flash_probe() failed, using default environment
U-Boot> fdt addr 0x8FEB89FC
U-Boot> fdt print
/ {
#address-cells = <0x00000001>;
#size-cells = <0x00000001>;
aliases {
serial0 = "/serial at 40600000";
spi0 = "/axi_quad_spi at 44a00000";
};
memory {
device_type = "memory";
reg = <0x80000000 0x10000000>;
};
serial at 40600000 {
clock-frequency = <0x05f5e100>;
compatible = "xlnx,xps-uartlite-1.00.a";
current-speed = <0x0001c200>;
};
axi_quad_spi at 44a00000 {
compatible = "xlnx,xilinx-spi";
reg = <0x44a00000 0x00010000>;
spi-max-frequency = <0x423a35c7>;
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
status = "okay";
is-dual = <0x00000000>;
num-cs = <0x00000001>;
flash at 0 {
compatible = "n25q128a11";
reg = <0x00000000>;
spi-tx-bus-width = <0x00000001>;
spi-rx-bus-width = <0x00000004>;
spi-max-frequency = <0x0d3ed78e>;
#address-cells = <0x00000001>;
#size-cells = <0x00000001>;
partition at qspi-fsbl-uboot {
label = "qspi-fsbl-uboot";
reg = <0x00000000 0x00100000>;
};
partition at qspi-linux {
label = "qspi-linux";
reg = <0x00100000 0x00500000>;
};
partition at qspi-device-tree {
label = "qspi-device-tree";
reg = <0x00600000 0x00020000>;
};
partition at qspi-rootfs {
label = "qspi-rootfs";
reg = <0x00620000 0x005e0000>;
};
partition at qspi-bitstream {
label = "qspi-bitstream";
reg = <0x00c00000 0x00400000>;
};
};
};
};
U-Boot> dm tree
Class Probed Name
----------------------------------------
root [ + ] root_driver
spi [ ] `-- axi_quad_spi at 44a00000
Btw, it seems that dm tree has a bug. It crashes on this line:
ret = test_cmd->cmd(test_cmd, flag, argc, argv);
I did a quick hack on this to get the output. I will investigate this further and tell you the result if you wish.
> Or if you want to change it on driver update your compatible string on above
> udevice_id
>
> >
> >
> >>
> >> > reg = <0x44a00000 0x00010000>;
> >> > spi-max-frequency = <0x423a35c7>;
> >> > #address-cells = <0x00000001>;
> >> > #size-cells = <0x00000000>;
> >> > status = "okay";
> >> > is-dual = <0x00000000>;
> >> > num-cs = <0x00000001>;
> >> > flash at 0 {
> >> > compatible = "n25q128a11";
> >> > reg = <0x00000000>;
> >> > spi-tx-bus-width = <0x00000001>;
> >> > spi-rx-bus-width = <0x00000004>;
> >> > spi-max-frequency = <0x0d3ed78e>;
> >> > #address-cells = <0x00000001>;
> >> > #size-cells = <0x00000001>;
> >> > partition at qspi-fsbl-uboot {
> >> > label = "qspi-fsbl-uboot";
> >> > reg = <0x00000000 0x00100000>;
> >> > };
> >> > partition at qspi-linux {
> >> > label = "qspi-linux";
> >> > reg = <0x00100000 0x00500000>;
> >> > };
> >> > partition at qspi-device-tree {
> >> > label = "qspi-device-tree";
> >> > reg = <0x00600000 0x00020000>;
> >> > };
> >> > partition at qspi-rootfs {
> >> > label = "qspi-rootfs";
> >> > reg = <0x00620000 0x005e0000>;
> >> > };
> >> > partition at qspi-bitstream {
> >> > label = "qspi-bitstream";
> >> > reg = <0x00c00000 0x00400000>;
> >> > };
> >> > };
> >> > };
> >> > };
> >> >
> >> > Has anybody an idea how to debug this further?
>
> thanks!
>
> --
> Jagan | openedev.
>
More information about the U-Boot
mailing list