cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

llcc-qcom.h (4426B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
      4 *
      5 */
      6
      7#include <linux/platform_device.h>
      8#ifndef __LLCC_QCOM__
      9#define __LLCC_QCOM__
     10
     11#define LLCC_CPUSS       1
     12#define LLCC_VIDSC0      2
     13#define LLCC_VIDSC1      3
     14#define LLCC_ROTATOR     4
     15#define LLCC_VOICE       5
     16#define LLCC_AUDIO       6
     17#define LLCC_MDMHPGRW    7
     18#define LLCC_MDM         8
     19#define LLCC_MODHW       9
     20#define LLCC_CMPT        10
     21#define LLCC_GPUHTW      11
     22#define LLCC_GPU         12
     23#define LLCC_MMUHWT      13
     24#define LLCC_CMPTDMA     15
     25#define LLCC_DISP        16
     26#define LLCC_VIDFW       17
     27#define LLCC_MDMHPFX     20
     28#define LLCC_MDMPNG      21
     29#define LLCC_AUDHW       22
     30#define LLCC_NPU         23
     31#define LLCC_WLHW        24
     32#define LLCC_PIMEM       25
     33#define LLCC_DRE         26
     34#define LLCC_CVP         28
     35#define LLCC_MODPE       29
     36#define LLCC_APTCM       30
     37#define LLCC_WRCACHE     31
     38#define LLCC_CVPFW       32
     39#define LLCC_CPUSS1      33
     40#define LLCC_CAMEXP0     34
     41#define LLCC_CPUMTE      35
     42#define LLCC_CPUHWT      36
     43#define LLCC_MDMCLAD2    37
     44#define LLCC_CAMEXP1     38
     45#define LLCC_AENPU       45
     46
     47/**
     48 * struct llcc_slice_desc - Cache slice descriptor
     49 * @slice_id: llcc slice id
     50 * @slice_size: Size allocated for the llcc slice
     51 */
     52struct llcc_slice_desc {
     53	u32 slice_id;
     54	size_t slice_size;
     55};
     56
     57/**
     58 * struct llcc_edac_reg_data - llcc edac registers data for each error type
     59 * @name: Name of the error
     60 * @synd_reg: Syndrome register address
     61 * @count_status_reg: Status register address to read the error count
     62 * @ways_status_reg: Status register address to read the error ways
     63 * @reg_cnt: Number of registers
     64 * @count_mask: Mask value to get the error count
     65 * @ways_mask: Mask value to get the error ways
     66 * @count_shift: Shift value to get the error count
     67 * @ways_shift: Shift value to get the error ways
     68 */
     69struct llcc_edac_reg_data {
     70	char *name;
     71	u64 synd_reg;
     72	u64 count_status_reg;
     73	u64 ways_status_reg;
     74	u32 reg_cnt;
     75	u32 count_mask;
     76	u32 ways_mask;
     77	u8  count_shift;
     78	u8  ways_shift;
     79};
     80
     81/**
     82 * struct llcc_drv_data - Data associated with the llcc driver
     83 * @regmap: regmap associated with the llcc device
     84 * @bcast_regmap: regmap associated with llcc broadcast offset
     85 * @cfg: pointer to the data structure for slice configuration
     86 * @lock: mutex associated with each slice
     87 * @cfg_size: size of the config data table
     88 * @max_slices: max slices as read from device tree
     89 * @num_banks: Number of llcc banks
     90 * @bitmap: Bit map to track the active slice ids
     91 * @offsets: Pointer to the bank offsets array
     92 * @ecc_irq: interrupt for llcc cache error detection and reporting
     93 * @version: Indicates the LLCC version
     94 */
     95struct llcc_drv_data {
     96	struct regmap *regmap;
     97	struct regmap *bcast_regmap;
     98	const struct llcc_slice_config *cfg;
     99	struct mutex lock;
    100	u32 cfg_size;
    101	u32 max_slices;
    102	u32 num_banks;
    103	unsigned long *bitmap;
    104	u32 *offsets;
    105	int ecc_irq;
    106	u32 version;
    107};
    108
    109#if IS_ENABLED(CONFIG_QCOM_LLCC)
    110/**
    111 * llcc_slice_getd - get llcc slice descriptor
    112 * @uid: usecase_id of the client
    113 */
    114struct llcc_slice_desc *llcc_slice_getd(u32 uid);
    115
    116/**
    117 * llcc_slice_putd - llcc slice descritpor
    118 * @desc: Pointer to llcc slice descriptor
    119 */
    120void llcc_slice_putd(struct llcc_slice_desc *desc);
    121
    122/**
    123 * llcc_get_slice_id - get slice id
    124 * @desc: Pointer to llcc slice descriptor
    125 */
    126int llcc_get_slice_id(struct llcc_slice_desc *desc);
    127
    128/**
    129 * llcc_get_slice_size - llcc slice size
    130 * @desc: Pointer to llcc slice descriptor
    131 */
    132size_t llcc_get_slice_size(struct llcc_slice_desc *desc);
    133
    134/**
    135 * llcc_slice_activate - Activate the llcc slice
    136 * @desc: Pointer to llcc slice descriptor
    137 */
    138int llcc_slice_activate(struct llcc_slice_desc *desc);
    139
    140/**
    141 * llcc_slice_deactivate - Deactivate the llcc slice
    142 * @desc: Pointer to llcc slice descriptor
    143 */
    144int llcc_slice_deactivate(struct llcc_slice_desc *desc);
    145
    146#else
    147static inline struct llcc_slice_desc *llcc_slice_getd(u32 uid)
    148{
    149	return NULL;
    150}
    151
    152static inline void llcc_slice_putd(struct llcc_slice_desc *desc)
    153{
    154
    155};
    156
    157static inline int llcc_get_slice_id(struct llcc_slice_desc *desc)
    158{
    159	return -EINVAL;
    160}
    161
    162static inline size_t llcc_get_slice_size(struct llcc_slice_desc *desc)
    163{
    164	return 0;
    165}
    166static inline int llcc_slice_activate(struct llcc_slice_desc *desc)
    167{
    168	return -EINVAL;
    169}
    170
    171static inline int llcc_slice_deactivate(struct llcc_slice_desc *desc)
    172{
    173	return -EINVAL;
    174}
    175#endif
    176
    177#endif