Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f47e2a37 authored by Channagoud Kadabi's avatar Channagoud Kadabi Committed by Prasad Sodagudi
Browse files

ARM: msm: Documentation: Add device tree binding for LLCC



Add documentation for LLCC (Last Level Cache Controller) device tree
bindings. This document provides overview of LLCC driver, device tree
binding for the LLCC driver and device tree binding for the clients that
use LLCC.

Change-Id: I28143053a7076eeb1991d85ebf80b7623ddd4368
Signed-off-by: default avatarChannagoud Kadabi <ckadabi@codeaurora.org>
Signed-off-by: default avatarPrasad Sodagudi <psodagud@codeaurora.org>
parent 15ef5d08
Loading
Loading
Loading
Loading
+111 −0
Original line number Diff line number Diff line
== Introduction==

LLCC (Last Level Cache Controller) driver is implemented as simple-mfd. The
driver is classified into four drivers based on the hw block that provide
different functionality.

1. LLCC Core Driver:
LLCC core driver takes care of initialization of the LLCC required to enable LLCC,
ECC (Error Correction Code) & AMON (Activity Monitor) drivers.

2. LLCC driver:
Programs the SCT (system configuration table). The SCT programming divides the
system cache into slices. Each slice is assigned an ID A.K.A SCID(Sub-cache ID).

HW modules that are designated to use the system cache are known as clients.
Each client must also be represented as a node in the device tree just like
any other hw module.

One client can have multiple SCID's assigned meaning each client could get
multiple slices in the cache. Client can use the slices for various pre-defined
usecases. Each client defines a set of names for these usecases in its
device tree binding.

Client makes a request to LLCC device to get cache-slices properties for each
of its usecase. Client gets the information like cache slice ID and size of the
cache slice.

3. LLCC ECC Driver:
Reports single and double bit errors in the data and tag ram of LLCC.

4. LLCC AMON Driver:
Keeps track of the data progress within the internal channels of LLCC.

== llcc device ==

Require Properties:
- compatible:
	Usage: required
	Value type: <string>
	Definition: must be "qcom,llcc-core"

- reg:
	Usage: required
	Value Type: <prop-encoded-array>
	Definition: must be addresses and sizes of the LLCC registers

- reg-names:
	Usage: required
	Value Type: <stringlist>
	Definition: Address names. Must be "llcc"

- #cache-cells:
	Usage: required
	Value Type: <u32>
	Definition: Number of cache cells, must be 1

- max-slices:
	usage: required
	Value Type: <u32>
	Definition: Number of cache slices supported by hardware

Optional Properties:
- status:
	Usage: optional
	Value type: <string>
	Definition: Property to enable or disable the driver

Example:

	qcom,llcc@01300000 {
		compatible = "llcc-core", "syscon", "simple-mfd";
		reg = <0x1300000 0x50000>;
		reg-names = "llcc_base";
		status = "disabled";

		llcc: qcom,msmskunk-llcc {
			compatible = "qcom,msmskunk-llcc";
			#cache-cells = <1>;
			max-slices = <32>;
		};

		qcom,llcc-erp {
			compatible = "qcom,llcc-erp";
		};

		qcom,llcc-amon {
			compatible = "qcom,llcc-amon";
		};
	};

== Client ==

Required properties:
- cache-slice-names:
	Usage: required
	Value type: <stringlist>
	Definition: A set of names that identify the usecase names of a client that uses
		    cache slice. These strings are used to look up the cache slice
		    entries by name.

- cache-slices:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: The tuple has phandle to llcc device as the first argument and the
		    second argument is the usecase id of the client.
For Example:

	venus {
		cache-slice-names = "vidsc0", "vidsc1";
		cache-slices = <&llcc 2>, <&llcc 3>;
	};