== 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: Definition: must be "qcom,llcc-core" - reg: Usage: required Value Type: Definition: must be addresses and sizes of the LLCC registers - reg-names: Usage: required Value Type: Definition: Address names. Must be "llcc" - llcc-bank-off: Usage: required Value Type: Definition: Offsets of llcc banks from llcc base address starting from LLCC bank0. - llcc-broadcast-off: Usage: required Value Type: Definition: Offset of broadcast register from LLCC bank0 address. - #cache-cells: Usage: required Value Type: Definition: Number of cache cells, must be 1 - max-slices: usage: required Value Type: Definition: Number of cache slices supported by hardware Optional Properties: - status: Usage: optional Value type: 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: 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: 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>; };