123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- Device tree bindings for MVEBU Device Bus controllers
- The Device Bus controller available in some Marvell's SoC allows to control
- different types of standard memory and I/O devices such as NOR, NAND, and FPGA.
- The actual devices are instantiated from the child nodes of a Device Bus node.
- Required properties:
- - compatible: Armada 370/XP SoC are supported using the
- "marvell,mvebu-devbus" compatible string.
- Orion5x SoC are supported using the
- "marvell,orion-devbus" compatible string.
- - reg: A resource specifier for the register space.
- This is the base address of a chip select within
- the controller's register space.
- (see the example below)
- - #address-cells: Must be set to 1
- - #size-cells: Must be set to 1
- - ranges: Must be set up to reflect the memory layout with four
- integer values for each chip-select line in use:
- 0 <physical address of mapping> <size>
- Optional properties:
- - devbus,keep-config This property can optionally be used to keep
- using the timing parameters set by the
- bootloader. It makes all the timing properties
- described below unused.
- Timing properties for child nodes:
- Read parameters:
- - devbus,turn-off-ps: Defines the time during which the controller does not
- drive the AD bus after the completion of a device read.
- This prevents contentions on the Device Bus after a read
- cycle from a slow device.
- Mandatory, except if devbus,keep-config is used.
- - devbus,bus-width: Defines the bus width, in bits (e.g. <16>).
- Mandatory, except if devbus,keep-config is used.
- - devbus,badr-skew-ps: Defines the time delay from from A[2:0] toggle,
- to read data sample. This parameter is useful for
- synchronous pipelined devices, where the address
- precedes the read data by one or two cycles.
- Mandatory, except if devbus,keep-config is used.
- - devbus,acc-first-ps: Defines the time delay from the negation of
- ALE[0] to the cycle that the first read data is sampled
- by the controller.
- Mandatory, except if devbus,keep-config is used.
- - devbus,acc-next-ps: Defines the time delay between the cycle that
- samples data N and the cycle that samples data N+1
- (in burst accesses).
- Mandatory, except if devbus,keep-config is used.
- - devbus,rd-setup-ps: Defines the time delay between DEV_CSn assertion to
- DEV_OEn assertion. If set to 0 (default),
- DEV_OEn and DEV_CSn are asserted at the same cycle.
- This parameter has no affect on <acc-first-ps> parameter
- (no affect on first data sample). Set <rd-setup-ps>
- to a value smaller than <acc-first-ps>.
- Mandatory for "marvell,mvebu-devbus" compatible string,
- except if devbus,keep-config is used.
- - devbus,rd-hold-ps: Defines the time between the last data sample to the
- de-assertion of DEV_CSn. If set to 0 (default),
- DEV_OEn and DEV_CSn are de-asserted at the same cycle
- (the cycle of the last data sample).
- This parameter has no affect on DEV_OEn de-assertion.
- DEV_OEn is always de-asserted the next cycle after
- last data sampled. Also this parameter has no
- affect on <turn-off-ps> parameter.
- Set <rd-hold-ps> to a value smaller than <turn-off-ps>.
- Mandatory for "marvell,mvebu-devbus" compatible string,
- except if devbus,keep-config is used.
- Write parameters:
- - devbus,ale-wr-ps: Defines the time delay from the ALE[0] negation cycle
- to the DEV_WEn assertion.
- Mandatory.
- - devbus,wr-low-ps: Defines the time during which DEV_WEn is active.
- A[2:0] and Data are kept valid as long as DEV_WEn
- is active. This parameter defines the setup time of
- address and data to DEV_WEn rise.
- Mandatory.
- - devbus,wr-high-ps: Defines the time during which DEV_WEn is kept
- inactive (high) between data beats of a burst write.
- DEV_A[2:0] and Data are kept valid (do not toggle) for
- <wr-high-ps> - <tick> ps.
- This parameter defines the hold time of address and
- data after DEV_WEn rise.
- Mandatory.
- - devbus,sync-enable: Synchronous device enable.
- 1: True
- 0: False
- Mandatory for "marvell,mvebu-devbus" compatible string,
- except if devbus,keep-config is used.
- An example for an Armada XP GP board, with a 16 MiB NOR device as child
- is showed below. Note that the Device Bus driver is in charge of allocating
- the mbus address decoding window for each of its child devices.
- The window is created using the chip select specified in the child
- device node together with the base address and size specified in the ranges
- property. For instance, in the example below the allocated decoding window
- will start at base address 0xf0000000, with a size 0x1000000 (16 MiB)
- for chip select 0 (a.k.a DEV_BOOTCS).
- This address window handling is done in this mvebu-devbus only as a temporary
- solution. It will be removed when the support for mbus device tree binding is
- added.
- The reg property implicitly specifies the chip select as this:
- 0x10400: DEV_BOOTCS
- 0x10408: DEV_CS0
- 0x10410: DEV_CS1
- 0x10418: DEV_CS2
- 0x10420: DEV_CS3
- Example:
- devbus-bootcs@d0010400 {
- status = "okay";
- ranges = <0 0xf0000000 0x1000000>; /* @addr 0xf0000000, size 0x1000000 */
- #address-cells = <1>;
- #size-cells = <1>;
- /* Device Bus parameters are required */
- /* Read parameters */
- devbus,bus-width = <8>;
- devbus,turn-off-ps = <60000>;
- devbus,badr-skew-ps = <0>;
- devbus,acc-first-ps = <124000>;
- devbus,acc-next-ps = <248000>;
- devbus,rd-setup-ps = <0>;
- devbus,rd-hold-ps = <0>;
- /* Write parameters */
- devbus,sync-enable = <0>;
- devbus,wr-high-ps = <60000>;
- devbus,wr-low-ps = <60000>;
- devbus,ale-wr-ps = <60000>;
- flash@0 {
- compatible = "cfi-flash";
- /* 16 MiB */
- reg = <0 0x1000000>;
- bank-width = <2>;
- #address-cells = <1>;
- #size-cells = <1>;
- /*
- * We split the 16 MiB in two partitions,
- * just as an example.
- */
- partition@0 {
- label = "First";
- reg = <0 0x800000>;
- };
- partition@800000 {
- label = "Second";
- reg = <0x800000 0x800000>;
- };
- };
- };
|