On Thu, Nov 17, 2011 at 12:57:38PM -0600, Timur Tabi wrote: > The Freescale P1022 has a unique pin muxing "feature" where the DIU video > controller's video signals are muxed with 24 of the local bus address signals. > When the DIU is enabled, the bulk of the local bus is disabled, preventing > access to memory-mapped devices like NOR flash and the pixis FPGA. > > In this situation, the pixis supports "indirect mode", which allows access > to the pixis itself by reading/writing addresses on specific local bus > chip selects. CS0 is used to select which pixis register to access, and > CS1 is used to read/write the value. > > To support this, we introduce another board-control child node of the > localbus node that contains a 'reg' property for CS0 and CS1. This will > produce the correct physical addresses for CS0 and CS1. > > Signed-off-by: Timur Tabi <ti...@freescale.com> > --- > arch/powerpc/boot/dts/p1022ds.dts | 14 ++++++++++++++ > 1 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/arch/powerpc/boot/dts/p1022ds.dts > b/arch/powerpc/boot/dts/p1022ds.dts > index 24a73e9..3e85d8c 100644 > --- a/arch/powerpc/boot/dts/p1022ds.dts > +++ b/arch/powerpc/boot/dts/p1022ds.dts > @@ -24,6 +24,20 @@ > 0x2 0x0 0xf 0xffa00000 0x00040000 > 0x3 0x0 0xf 0xffdf0000 0x00008000>; > > + /* > + * This node is used to access the pixis via "indirect" mode, > + * which is done by writing the pixis register index to chip > + * select 0 and the value to/from chip select 1. Indirect > + * mode is the only way to access the pixis when DIU video > + * is enabled. Note that this assumes that the first column > + * of the 'ranges' property above is the chip select number. > + */ > + board-control@0,0 { > + compatible = "fsl,p1022ds-indirect-pixis"; > + reg = <0x0 0x0 1 /* CS0 */ > + 0x1 0x0 1>; /* CS1 */ > + }; > + > nor@0,0 { > #address-cells = <1>; > #size-cells = <1>;
U-Boot should mark some of these devices as disabled, based on whether indirect mode is enabled on boot. If you're not going to do that, at least remove simple-bus from the compatible list. Something like this is probably the best way to describe it: localbus { compatible = "...", "fsl,elbc", "simple-bus"; ranges = <...>; #address-cells = <2>; #size-cells = <2>; mux { compatible = "fsl,p1022ds-localbus-mux"; // no simple-bus fsl,localbus-mux-mode = "indirect"; // inital state on boot ranges; #address-cells = <2>; #size-cells = <2>; board-control@0,0 { compatible = "fsl,p1022ds-indirect-pixis"; reg = <0 0 1 1 0 1>; fsl,localbus-mux-avail = "indirect"; }; flash@0,0 { ... fsl,localbus-mux-avail = "direct"; }; ... }; }; Or encode the mode as part of reg, as I suggested for someone else here: http://lists.ozlabs.org/pipermail/devicetree-discuss/2011-November/009378.html -Scott _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev