| == 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, |
| qcom,qcs605-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>; |
| }; |