prefetch_mod.h 6.9 KB
Newer Older
L
liqiang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright(c) 2019 Huawei Technologies Co., Ltd
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 * Create: 2020-07-02
 * Author: Liqiang (liqiang9102@gitee)
15
 *         Liuke20 (liuke20@gitee)
L
liqiang 已提交
16
 */
L
liqiang2020 已提交
17 18 19
#ifndef __PREFETCH_TUNING__
#define __PREFETCH_TUNING__

L
liqiang 已提交
20
enum {
L
liqiang 已提交
21
    DISABLE = 0,
L
liqiang 已提交
22 23 24
    ENABLE
};

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
enum FunctionOrderList {
    IOCAPACITY_LIMIT_ORDER = 0,
    TAG_REP_ALG_ORDER,
    SQMERGE_ORDER,
    RDMERGE_ORDER,
    PREFETCH_DROP_HHA_ORDER,
    RAMSWAP_ORDER,
    PRIME_DROP_MASK_ORDER,
    SEQUENCE_OPT_ORDER,
    BANKINTLV_ORDER,
    PREFETCH_ULT_DDR_ORDER,
    PREFETCH_ULT_DDR_EN_ORDER,
    PREFETCH_ULT_L3T_ORDER,
    PREFETCH_UTL_L3T_EN_ORDER,
    PREFETCH_START_LEVEL_ORDER,
    REG_TOTEM_DUAL_ORDER,
    REG_CANUM_SKTVEC_ORDER,
    REG_SKT1_TB_CAVEC_ORDER,
    REG_SKT1_TA_CAVEC_ORDER,
    REG_SKT0_TB_CAVEC_ORDER,
    REG_SKT0_TA_CAVEC_ORDER,
    REG_SKT3_TB_CAVEC_ORDER,
    REG_SKT3_TA_CAVEC_ORDER,
    REG_SKT2_TB_CAVEC_ORDER,
    REG_SKT2_TA_CAVEC_ORDER,
    RDMERGE_UPGRADE_EN_ORDER,
    DDR_COMPRESS_OPT_EN_ORDER,
    SNPSLEEP_EN_ORDER,
    PREFETCHTGT_EN_ORDER,
    BANKINTL_STAGGER_ORDER,
    CPU_PF_LQOS_EN_ORDER,
    REFILLSIZE_COM_ADA_EN_ORDER,
    REFILLSIZE_PRE_ADA_EN_ORDER,
    PREFETCH_OVERIDE_LEVEL_ORDER,
    PREFETCH_VAGUE_EN_ORDER,
    PREFETCH_CORE_EN_ORDER,
    PREFETCH_MATCH_EN_ORDER,
    REG_CTRL_PREFETCH_DROP_ORDER,
    REG_CTRL_DMCASSIGN_ORDER,
    REG_CTRL_RDATABYP_ORDER,
    REG_DIR_REPLACE_ALG_ORDER,
    PREFETCH_COMB_ORDER,
    REG_FUNCDIS_COMB_ORDER,
    DDR_INTLV_SKT_ORDER,
    DDR_INTLV_DIE_ORDER,
    FUNC_NUM
};

enum RegOffsetList {
    L3T_DYNAMIC_CTRL = 0x400,
    L3T_STATIC_CTRL	= 0x000,
    L3T_DYNAMIC_AUCTRL0 = 0x404,
    L3T_DYNAMIC_AUCTRL1 = 0x40c,
    L3T_PREFETCH = 0x410,
    HHA_TOTEMNUM = 0x020,
    HHA_CANUM_L = 0x024,
    HHA_CANUM_H = 0x028,
    HHA_CTRL = 0x000,
    HHA_DIR_CTRL = 0x00c,
    HHA_FUNC_DIS = 0x010,
    AA_MSD1_CTRL = 0x384
};

enum ComMsd1Ctrl {
    DDR_INTLV_SKT_START = 29,
    DDR_INTLV_SKT_END = 30,
    DDR_INTLV_DIE_START = 27,
    DDR_INTLV_DIE_END = 27,
};

enum HhaFuncDisReg {
    PREFETCH_COMB_START = 21,
    PREFETCH_COMB_END = 21,
    PREFETCH_FUNCDIS_COMB_START = 2,
    PREFETCH_FUNCDIS_COMB_END = 2
};

enum HhaDirCtrlReg {
    REG_DIR_REPLACE_ALG_START = 0,
    REG_DIR_REPLACE_ALG_END = 1
};

enum HhaCtrlReg {
    REG_CTRL_PREFETCH_DROP_START = 6,
    REG_CTRL_PREFETCH_DROP_END = 6,
    REG_CTRL_DMCASSIGN_START = 5,
    REG_CTRL_DMCASSIGN_END = 5,
    REG_CTRL_RDATABYP_START = 4,
    REG_CTRL_RDATABYP_END = 4
};

enum L3tStaticCtrlReg {
    RAMSWAP_START = 16,
    RAMSWAP_END = 16
};

enum L3tDynamicAuctrl0Reg {
    DDR_COMPRESS_OPT_EN_START = 7,
    DDR_COMPRESS_OPT_EN_END = 7,
    SNPSLEEP_EN_START = 1,
    SNPSLEEP_EN_END = 1,
    PREFETCHTGT_EN_START = 0,
    PREFETCHTGT_EN_END = 0
};

enum L3tDynamicCtrlReg {
    TAG_REP_ALG_START = 0,
    TAG_REP_ALG_END = 1,
    PREFETCH_DROP_HHA_START = 4,
    PREFETCH_DROP_HHA_END = 4,
    RDMERGE_UPGRADE_EN_START = 8,
    RDMERGE_UPGRADE_EN_END = 8,
    RDMERGE_START = 9,
    RDMERGE_END = 9,
    SQMERGE_START = 10,
    SQMERGE_END = 10,
    IOCAPACITY_LIMIT_START = 13,
    IOCAPACITY_LIMIT_END = 13
};

enum L3tDynamicAuctrl1Reg {
    BANKINTLV_START = 0,
    BANKINTLV_END = 0,
    SEQUENCE_OPT_START = 1,
    SEQUENCE_OPT_END = 1,
    REFILLSIZE_PRE_ADA_EN_START = 2,
    REFILLSIZE_PRE_ADA_EN_END = 2,
    REFILLSIZE_COM_ADA_EN_START = 3,
    REFILLSIZE_COM_ADA_EN_END = 3,
    PRIME_DROP_MASK_START = 5,
    PRIME_DROP_MASK_END = 5,
    CPU_PF_LQOS_EN_START = 11,
    CPU_PF_LQOS_EN_END = 11,
    BANKINTL_STAGGER_START = 19,
    BANKINTL_STAGGER_END = 19
};

enum L3tPrefetchReg {
    PREFETCH_START_LEVEL_START = 0,
    PREFETCH_START_LEVEL_END = 4,
    PREFETCH_MATCH_EN_START = 7,
    PREFETCH_MATCH_EN_END = 7,
    PREFETCH_CORE_EN_START = 8,
    PREFETCH_CORE_EN_END = 11,
    PREFETCH_VAGUE_EN_START = 12,
    PREFETCH_VAGUE_EN_END = 12,
    PREFETCH_UTL_L3T_EN_START = 13,
    PREFETCH_UTL_L3T_EN_END = 13,
    PREFETCH_ULT_L3T_START = 14,
    PREFETCH_ULT_L3T_END = 15,
    PREFETCH_ULT_DDR_EN_START = 16,
    PREFETCH_ULT_DDR_EN_END = 16,
    PREFETCH_ULT_DDR_START = 17,
    PREFETCH_ULT_DDR_END = 18,
    PREFETCH_OVERIDE_LEVEL_START = 20,
    PREFETCH_OVERIDE_LEVEL_END = 23
};

enum HhaTotemnumReg {
    REG_CANUM_SKTVEC_START = 0,
    REG_CANUM_SKTVEC_END = 3,
    REG_TOTEM_DUAL_START = 4,
    REG_TOTEM_DUAL_END = 4
};

enum HhaCanumLReg {
    REG_SKT0_TA_CAVEC_START = 0,
    REG_SKT0_TA_CAVEC_END = 7,
    REG_SKT0_TB_CAVEC_START = 8,
    REG_SKT0_TB_CAVEC_END = 15,
    REG_SKT1_TA_CAVEC_START = 16,
    REG_SKT1_TA_CAVEC_END = 23,
    REG_SKT1_TB_CAVEC_START = 24,
    REG_SKT1_TB_CAVEC_END = 31
};

enum HhaCanumHReg {
    REG_SKT2_TA_CAVEC_START = 0,
    REG_SKT2_TA_CAVEC_END = 7,
    REG_SKT2_TB_CAVEC_START = 8,
    REG_SKT2_TB_CAVEC_END = 15,
    REG_SKT3_TA_CAVEC_START = 16,
    REG_SKT3_TA_CAVEC_END = 23,
    REG_SKT3_TB_CAVEC_START = 24,
    REG_SKT3_TB_CAVEC_END = 31
};

L
liqiang 已提交
212
#define CACHE_READUNIQ_CTRL (1L << 40)
213 214
#define TB_L3T0_BASE		0x90180000
#define TOTEM_OFFSET		0x8000000
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
#define TB_AA_BASE		    0x90300000
#define TB_HHA0_BASE		0x90120000
#define NI_AA_BASE		    0x200140000ULL
#define REG_RANGE	        0x5000
#define MAX_STR             32


typedef struct {
    unsigned long Base;
    unsigned long Offset;
    unsigned long Address;
    int Val;
    int StartBit;
    int EndBit;
    int Glb;
    int Sup;
    char Name[MAX_STR];
    struct mutex* temp_mtx;
} FuncStruct;
L
liqiang2020 已提交
234 235 236

#ifdef CONFIG_ARCH_HISI
typedef struct {
L
liqiang 已提交
237 238 239 240
    long cpuprefctrl_el1;
    long adps_lld_ddr_el1;
    long adpp_l1v_mop_el1;
    long adps_lld_l3_el1;
L
liqiang2020 已提交
241
} cfg_t;
242

L
liqiang2020 已提交
243 244 245 246 247 248
#else
typedef long cfg_t;
#endif

extern void set_prefetch(void* dummy);
extern void get_prefetch(void* dummy);
L
liqiang 已提交
249 250
extern void read_unique_set(void *dummy);
extern void read_unique_get(void *dummy);
L
liqiang2020 已提交
251
extern void reset_prefetch(void* dummy);
252 253 254 255 256
extern int initial_cpu_info(void);
extern void set_val(FuncStruct Str);
extern int get_val(FuncStruct Str);
extern int get_default_cfg(int* arr);
extern FuncStruct *get_func(struct device_attribute* attr);
L
liqiang2020 已提交
257

258 259 260
extern unsigned get_totem_num(void);
extern unsigned get_nr_skt(void);
extern unsigned long get_skt_offset(void);
L
liqiang2020 已提交
261 262
extern int prefetch_policy_num(void);
extern cfg_t *prefetch_policy(int policy);
263
extern void reset_default_cfg(int *old_cfg_int);
L
liqiang2020 已提交
264 265

#endif