QorIQ DPAA Buffer Manager Device Tree Bindings

Copyright (C) 2008 - 2014 Freescale Semiconductor Inc.

CONTENTS

	- BMan Node
	- BMan Private Memory Node
	- Example

BMan Node

The Buffer Manager is part of the Data-Path Acceleration Architecture (DPAA).
BMan supports hardware allocation and deallocation of buffers belonging to pools
originally created by software with configurable depletion thresholds. This
binding covers the CCSR space programming model

PROPERTIES

- compatible
	Usage:		Required
	Value type:	<stringlist>
	Definition:	Must include "fsl,bman"
			May include "fsl,<SoC>-bman"

- reg
	Usage:		Required
	Value type:	<prop-encoded-array>
	Definition:	Registers region within the CCSR address space

The BMan revision information is located in the BMAN_IP_REV_1/2 registers which
are located at offsets 0xbf8 and 0xbfc

- interrupts
	Usage:		Required
	Value type:	<prop-encoded-array>
	Definition:	Standard property. The error interrupt

- fsl,bman-portals
	Usage:		Required
	Value type:	<phandle>
	Definition:	Phandle to this BMan instance's portals

- fsl,liodn
	Usage:		See pamu.txt
	Value type:	<prop-encoded-array>
	Definition:	PAMU property used for static LIODN assignment

- fsl,iommu-parent
	Usage:		See pamu.txt
	Value type:	<phandle>
	Definition:	PAMU property used for dynamic LIODN assignment

	For additional details about the PAMU/LIODN binding(s) see pamu.txt

Devices connected to a BMan instance via Direct Connect Portals (DCP) must link
to the respective BMan instance

- fsl,bman
	Usage:		Required
	Value type:	<prop-encoded-array>
	Description:	List of phandle and DCP index pairs, to the BMan instance
			to which this device is connected via the DCP

BMan Private Memory Node

BMan requires a contiguous range of physical memory used for the backing store
for BMan Free Buffer Proxy Records (FBPR). This memory is reserved/allocated as a
node under the /reserved-memory node

The BMan FBPR memory node must be named "bman-fbpr"

PROPERTIES

- compatible
	Usage:		required
	Value type:	<stringlist>
	Definition:	Must inclide "fsl,bman-fbpr"

The following constraints are relevant to the FBPR private memory:
	- The size must be 2^(size + 1), with size = 11..33. That is 4 KiB to
	  16 GiB
	- The alignment must be a muliptle of the memory size

The size of the FBPR must be chosen by observing the hardware features configured
via the Reset Configuration Word (RCW) and that are relevant to a specific board
(e.g. number of MAC(s) pinned-out, number of offline/host command FMan ports,
etc.). The size configured in the DT must reflect the hardware capabilities and
not the specific needs of an application

For additional details about reserved memory regions see reserved-memory.txt

EXAMPLE

The example below shows a BMan FBPR dynamic allocation memory node

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		bman_fbpr: bman-fbpr {
			compatible = "fsl,bman-fbpr";
			alloc-ranges = <0 0 0x10 0>;
			size = <0 0x1000000>;
			alignment = <0 0x1000000>;
		};
	};

The example below shows a (P4080) BMan CCSR-space node

	bportals: bman-portals@ff4000000 {
		...
	};

	crypto@300000 {
		...
		fsl,bman = <&bman, 2>;
		...
	};

	bman: bman@31a000 {
		compatible = "fsl,bman";
		reg = <0x31a000 0x1000>;
		interrupts = <16 2 1 2>;
		fsl,liodn = <0x17>;
		fsl,bman-portals = <&bportals>;
		memory-region = <&bman_fbpr>;
	};

	fman@400000 {
		...
		fsl,bman = <&bman, 0>;
		...
	};
