154 lines
3.9 KiB
Plaintext
154 lines
3.9 KiB
Plaintext
|
|
== 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
|
||
|
|
|
||
|
|
- cap-based-alloc-and-pwr-collapse:
|
||
|
|
Usage: optional
|
||
|
|
Value Type: Boolean
|
||
|
|
Definition: Property to express that HLOS can enable/disable capacity
|
||
|
|
based allocation and power collapse retention for a client. Include
|
||
|
|
this property to set it. If not set, it will be treated as false.
|
||
|
|
|
||
|
|
== 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,
|
||
|
|
qcom,sm8150-llcc,
|
||
|
|
qcom,sdmshrike-llcc,
|
||
|
|
qcom,sm6150-llcc,
|
||
|
|
qcom,sdmmagpie-llcc,
|
||
|
|
qcom,sdxprairie-llcc,
|
||
|
|
qcom,atoll-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>;
|
||
|
|
};
|