blob: 90bc36823a8312373d49f8e5065166b7270be073 [file] [log] [blame]
== 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.
5. LLCC Performance Monitor
Used to monitor the events of LLCC sub blocks.
== 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"
- llcc-bank-off:
Usage: required
Value Type: <u32 array>
Definition: Offsets of llcc banks from llcc base address starting from
LLCC bank0.
- llcc-broadcast-off:
Usage: required
Value Type: <u32>
Definition: Offset of broadcast register from LLCC bank0 address.
- #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
== llcc amon device ==
Optional Properties:
-qcom,fg-cnt : The value of fine grained counter of activity monitor
block.
compatible devices:
qcom,sdm845-llcc,
qcom,sdm670-llcc
Example:
qcom,llcc@01300000 {
compatible = "llcc-core", "syscon", "simple-mfd";
reg = <0x1300000 0x50000>;
reg-names = "llcc_base";
status = "disabled";
llcc: qcom,sdm845-llcc {
compatible = "qcom,sdm845-llcc";
#cache-cells = <1>;
max-slices = <32>;
};
qcom,llcc-erp {
compatible = "qcom,llcc-erp";
};
qcom,llcc-amon {
compatible = "qcom,llcc-amon";
qcom,fg-cnt = <0x7>;
};
qcom,llcc-perfmon {
compatible = "qcom,llcc-perfmon";
};
};
== 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>;
};