======================================================================
Device tree bindings for the Aspeed Low Pin Count (LPC) Bus Controller
======================================================================

The LPC bus is a means to bridge a host CPU to a number of low-bandwidth
peripheral devices, replacing the use of the ISA bus in the age of PCI[0]. The
primary use case of the Aspeed LPC controller is as a slave on the bus
(typically in a Baseboard Management Controller SoC), but under certain
conditions it can also take the role of bus master.

The LPC controller is represented as a multi-function device to account for the
mix of functionality it provides. The principle split is between the register
layout at the start of the I/O space which is, to quote the Aspeed datasheet,
"basically compatible with the [LPC registers from the] popular BMC controller
H8S/2168[1]", and everything else, where everything else is an eclectic
collection of functions with a esoteric register layout. "Everything else",
here labeled the "host" portion of the controller, includes, but is not limited
to:

* An IPMI Block Transfer[2] Controller

* An LPC Host Controller: Manages LPC functions such as host vs slave mode, the
  physical properties of some LPC pins, configuration of serial IRQs, and
  APB-to-LPC bridging amonst other functions.

* An LPC Host Interface Controller: Manages functions exposed to the host such
  as LPC firmware hub cycles, configuration of the LPC-to-AHB mapping, UART
  management and bus snoop configuration.

* A set of SuperIO[3] scratch registers: Enables implementation of e.g. custom
  hardware management protocols for handover between the host and baseboard
  management controller.

Additionally the state of the LPC controller influences the pinmux
configuration, therefore the host portion of the controller is exposed as a
syscon as a means to arbitrate access.

[0] http://www.intel.com/design/chipsets/industry/25128901.pdf
[1] https://www.renesas.com/en-sg/doc/products/mpumcu/001/rej09b0078_h8s2168.pdf?key=7c88837454702128622bee53acbda8f4
[2] https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf
[3] https://en.wikipedia.org/wiki/Super_I/O

Required properties
===================

- compatible:	One of:
		"aspeed,ast2400-lpc", "simple-mfd"
		"aspeed,ast2500-lpc", "simple-mfd"
		"aspeed,ast2600-lpc", "simple-mfd"

- reg:		contains the physical address and length values of the Aspeed
                LPC memory region.

- #address-cells: <1>
- #size-cells:	<1>
- ranges: 	Maps 0 to the physical address and length of the LPC memory
                region

Required LPC Child nodes
========================

BMC Node
--------

- compatible:	One of:
		"aspeed,ast2400-lpc-bmc"
		"aspeed,ast2500-lpc-bmc"
		"aspeed,ast2600-lpc-bmc"

- reg:		contains the physical address and length values of the
                H8S/2168-compatible LPC controller memory region

Host Node
---------

- compatible:   One of:
		"aspeed,ast2400-lpc-host", "simple-mfd", "syscon"
		"aspeed,ast2500-lpc-host", "simple-mfd", "syscon"
		"aspeed,ast2600-lpc-host", "simple-mfd", "syscon"

- reg:		contains the address and length values of the host-related
                register space for the Aspeed LPC controller

- #address-cells: <1>
- #size-cells:	<1>
- ranges: 	Maps 0 to the address and length of the host-related LPC memory
                region

Example:

lpc: lpc@1e789000 {
	compatible = "aspeed,ast2500-lpc", "simple-mfd";
	reg = <0x1e789000 0x1000>;

	#address-cells = <1>;
	#size-cells = <1>;
	ranges = <0x0 0x1e789000 0x1000>;

	lpc_bmc: lpc-bmc@0 {
		compatible = "aspeed,ast2500-lpc-bmc";
		reg = <0x0 0x80>;
	};

	lpc_host: lpc-host@80 {
		compatible = "aspeed,ast2500-lpc-host", "simple-mfd", "syscon";
		reg = <0x80 0x1e0>;
		reg-io-width = <4>;

		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0x0 0x80 0x1e0>;
	};
};

BMC Node Children
==================


Host Node Children
==================

LPC Host Interface Controller
-------------------

The LPC Host Interface Controller manages functions exposed to the host such as
LPC firmware hub cycles, configuration of the LPC-to-AHB mapping, UART
management and bus snoop configuration.

Required properties:

- compatible:	One of:
		"aspeed,ast2400-lpc-ctrl";
		"aspeed,ast2500-lpc-ctrl";
		"aspeed,ast2600-lpc-ctrl";

- reg:		contains offset/length values of the host interface controller
		memory regions

- clocks:	contains a phandle to the syscon node describing the clocks.
		There should then be one cell representing the clock to use

Optional properties:

- memory-region: A phandle to a reserved_memory region to be used for the LPC
		to AHB mapping

- flash:	A phandle to the SPI flash controller containing the flash to
		be exposed over the LPC to AHB mapping

Example:

lpc-host@80 {
	lpc_ctrl: lpc-ctrl@0 {
		compatible = "aspeed,ast2500-lpc-ctrl";
		reg = <0x0 0x80>;
		clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
		memory-region = <&flash_memory>;
		flash = <&spi>;
	};
};

LPC Host Controller
-------------------

The Aspeed LPC Host Controller configures the Low Pin Count (LPC) bus behaviour
between the host and the baseboard management controller. The registers exist
in the "host" portion of the Aspeed LPC controller, which must be the parent of
the LPC host controller node.

Required properties:

- compatible:	One of:
		"aspeed,ast2400-lhc";
		"aspeed,ast2500-lhc";
		"aspeed,ast2600-lhc";

- reg:		contains offset/length values of the LHC memory regions. In the
		AST2400 and AST2500 there are two regions.

Example:

lhc: lhc@20 {
	compatible = "aspeed,ast2500-lhc";
	reg = <0x20 0x24 0x48 0x8>;
};

LPC reset control
-----------------

The UARTs present in the ASPEED SoC can have their resets tied to the reset
state of the LPC bus. Some systems may chose to modify this configuration.

Required properties:

 - compatible:		"aspeed,ast2600-lpc-reset" or
			"aspeed,ast2500-lpc-reset"
			"aspeed,ast2400-lpc-reset"
 - reg:			offset and length of the IP in the LHC memory region
 - #reset-controller	indicates the number of reset cells expected

Example:

lpc_reset: reset-controller@18 {
        compatible = "aspeed,ast2500-lpc-reset";
        reg = <0x18 0x4>;
        #reset-cells = <1>;
};
