need help getting SPI controller working on 405EX
Lorenz Kolb
lorenz.kolb.newsgroups.nospam at lkmail.de
Sun Aug 9 23:38:08 EST 2009
Nathan French wrote:
> Hi, I am trying to add support for the 405EX's SPI controller on a Kilauea board. I've added the below to the device tree (under plb/opb/):
>
> [nfrench at nfrench-laptop linux-2.6-denx]$ diff -C2 arch/powerpc/boot/dts/kilauea.dts spi.dts
> *** arch/powerpc/boot/dts/kilauea.dts 2009-05-05 15:56:16.000000000 -0700
> --- spi.dts 2009-08-06 08:42:19.000000000 -0700
> ***************
> *** 207,210 ****
> --- 207,221 ----
> #size-cells = <0>;
> };
> +
> + SPI0: spi at ef600600 {
> + cell-index = <0>;
> + compatible = "ibm,spi-405ex", "ibm,spi";
> + reg = <ef600600 6>;
> + interrupts = <8 4>;
> + interrupt-parent = <&UIC0>;
> + mode = "cpu";
> + };
>
> RGMII0: emac-rgmii at ef600b00 {
>
That entry within the device tree will generally make the spi-"bus"
known to Linux, that's ok so far.
> I've also compiled my kernel with the following enabled:
>
> CONFIG_SPI=y
> CONFIG_SPI_MASTER=y
> CONFIG_SPI_SPIDEV=y
>
> I see this make it into the device tree after boot:
>
> [root at 10.2.3.28 /]$ find /proc/device-tree/ | grep spi
> /proc/device-tree/plb/opb/spi at ef600600
> /proc/device-tree/plb/opb/spi at ef600600/name
> /proc/device-tree/plb/opb/spi at ef600600/mode
> /proc/device-tree/plb/opb/spi at ef600600/interrupt-parent
> /proc/device-tree/plb/opb/spi at ef600600/interrupts
> /proc/device-tree/plb/opb/spi at ef600600/reg
> /proc/device-tree/plb/opb/spi at ef600600/compatible
> /proc/device-tree/plb/opb/spi at ef600600/cell-index
>
> But I don't see any /dev/spidev* devices created or any mention of SPI
> at boot time. I'm starting to suspect that I don't have the kernel
> configured right, otherwise I would see at least the SPI driver
> complaining about something, right?
For getting spidev devices you have to add entries for an spidev device
to your newly created spi-"bus". So what you are currently missing are
the spidev child-nodes in the device tree.
As I'm currently cut off from some device to test, no guaranty that it
will work, but your dts entry should look something like:
SPI0: spi at ef600600 {
cell-index = <0>;
compatible = "ibm,spi-405ex", "ibm,spi";
reg = <ef600600 6>;
interrupts = <8 4>;
interrupt-parent = <&UIC0>;
mode = "cpu";
yourdevice at 0 {
compatible = "spidev";
spi-max-frequency = <1000000>; /* what ever your
max-freq. is */
reg = <0>; /* Chipselect-address */
};
};
>
> Thanks,
>
> Nathan French
At least something similar worked for me some months ago (before we
switched to a "real" driver for some custom peripheral).
Regards,
Lorenz
More information about the Linuxppc-dev
mailing list