Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2015 NVIDIA Corporation. */ /* * Function naming determines intended use: * * <x>_r(void) : Returns the offset for register <x>. * * <x>_w(void) : Returns the word offset for word (4 byte) element <x>. * * <x>_<y>_s(void) : Returns size of field <y> of register <x> in bits. * * <x>_<y>_f(u32 v) : Returns a value based on 'v' which has been shifted * and masked to place it at field <y> of register <x>. This value * can be |'d with others to produce a full register value for * register <x>. * * <x>_<y>_m(void) : Returns a mask for field <y> of register <x>. This * value can be ~'d and then &'d to clear the value of field <y> for * register <x>. * * <x>_<y>_<z>_f(void) : Returns the constant value <z> after being shifted * to place it at field <y> of register <x>. This value can be |'d * with others to produce a full register value for <x>. * * <x>_<y>_v(u32 r) : Returns the value of field <y> from a full register * <x> value 'r' after being shifted to place its LSB at bit 0. * This value is suitable for direct comparison with other unshifted * values appropriate for use in field <y> of register <x>. * * <x>_<y>_<z>_v(void) : Returns the constant value for <z> defined for * field <y> of register <x>. This value is suitable for direct * comparison with unshifted values appropriate for use in field <y> * of register <x>. */ #ifndef HOST1X_HW_HOST1X05_SYNC_H #define HOST1X_HW_HOST1X05_SYNC_H #define REGISTER_STRIDE 4 static inline u32 host1x_sync_syncpt_r(unsigned int id) { return 0xf80 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT(id) \ host1x_sync_syncpt_r(id) static inline u32 host1x_sync_syncpt_thresh_cpu0_int_status_r(unsigned int id) { return 0xe80 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT_THRESH_CPU0_INT_STATUS(id) \ host1x_sync_syncpt_thresh_cpu0_int_status_r(id) static inline u32 host1x_sync_syncpt_thresh_int_disable_r(unsigned int id) { return 0xf00 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT_THRESH_INT_DISABLE(id) \ host1x_sync_syncpt_thresh_int_disable_r(id) static inline u32 host1x_sync_syncpt_thresh_int_enable_cpu0_r(unsigned int id) { return 0xf20 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT_THRESH_INT_ENABLE_CPU0(id) \ host1x_sync_syncpt_thresh_int_enable_cpu0_r(id) static inline u32 host1x_sync_cf_setup_r(unsigned int channel) { return 0xc00 + channel * REGISTER_STRIDE; } #define HOST1X_SYNC_CF_SETUP(channel) \ host1x_sync_cf_setup_r(channel) static inline u32 host1x_sync_cf_setup_base_v(u32 r) { return (r >> 0) & 0x3ff; } #define HOST1X_SYNC_CF_SETUP_BASE_V(r) \ host1x_sync_cf_setup_base_v(r) static inline u32 host1x_sync_cf_setup_limit_v(u32 r) { return (r >> 16) & 0x3ff; } #define HOST1X_SYNC_CF_SETUP_LIMIT_V(r) \ host1x_sync_cf_setup_limit_v(r) static inline u32 host1x_sync_cmdproc_stop_r(void) { return 0xac; } #define HOST1X_SYNC_CMDPROC_STOP \ host1x_sync_cmdproc_stop_r() static inline u32 host1x_sync_ch_teardown_r(void) { return 0xb0; } #define HOST1X_SYNC_CH_TEARDOWN \ host1x_sync_ch_teardown_r() static inline u32 host1x_sync_usec_clk_r(void) { return 0x1a4; } #define HOST1X_SYNC_USEC_CLK \ host1x_sync_usec_clk_r() static inline u32 host1x_sync_ctxsw_timeout_cfg_r(void) { return 0x1a8; } #define HOST1X_SYNC_CTXSW_TIMEOUT_CFG \ host1x_sync_ctxsw_timeout_cfg_r() static inline u32 host1x_sync_ip_busy_timeout_r(void) { return 0x1bc; } #define HOST1X_SYNC_IP_BUSY_TIMEOUT \ host1x_sync_ip_busy_timeout_r() static inline u32 host1x_sync_mlock_owner_r(unsigned int id) { return 0x340 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_MLOCK_OWNER(id) \ host1x_sync_mlock_owner_r(id) static inline u32 host1x_sync_mlock_owner_chid_v(u32 r) { return (r >> 8) & 0xf; } #define HOST1X_SYNC_MLOCK_OWNER_CHID_V(v) \ host1x_sync_mlock_owner_chid_v(v) static inline u32 host1x_sync_mlock_owner_cpu_owns_v(u32 r) { return (r >> 1) & 0x1; } #define HOST1X_SYNC_MLOCK_OWNER_CPU_OWNS_V(r) \ host1x_sync_mlock_owner_cpu_owns_v(r) static inline u32 host1x_sync_mlock_owner_ch_owns_v(u32 r) { return (r >> 0) & 0x1; } #define HOST1X_SYNC_MLOCK_OWNER_CH_OWNS_V(r) \ host1x_sync_mlock_owner_ch_owns_v(r) static inline u32 host1x_sync_syncpt_int_thresh_r(unsigned int id) { return 0x1380 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT_INT_THRESH(id) \ host1x_sync_syncpt_int_thresh_r(id) static inline u32 host1x_sync_syncpt_base_r(unsigned int id) { return 0x600 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT_BASE(id) \ host1x_sync_syncpt_base_r(id) static inline u32 host1x_sync_syncpt_cpu_incr_r(unsigned int id) { return 0xf60 + id * REGISTER_STRIDE; } #define HOST1X_SYNC_SYNCPT_CPU_INCR(id) \ host1x_sync_syncpt_cpu_incr_r(id) static inline u32 host1x_sync_cbread_r(unsigned int channel) { return 0xc80 + channel * REGISTER_STRIDE; } #define HOST1X_SYNC_CBREAD(channel) \ host1x_sync_cbread_r(channel) static inline u32 host1x_sync_cfpeek_ctrl_r(void) { return 0x74c; } #define HOST1X_SYNC_CFPEEK_CTRL \ host1x_sync_cfpeek_ctrl_r() static inline u32 host1x_sync_cfpeek_ctrl_addr_f(u32 v) { return (v & 0x3ff) << 0; } #define HOST1X_SYNC_CFPEEK_CTRL_ADDR_F(v) \ host1x_sync_cfpeek_ctrl_addr_f(v) static inline u32 host1x_sync_cfpeek_ctrl_channr_f(u32 v) { return (v & 0xf) << 16; } #define HOST1X_SYNC_CFPEEK_CTRL_CHANNR_F(v) \ host1x_sync_cfpeek_ctrl_channr_f(v) static inline u32 host1x_sync_cfpeek_ctrl_ena_f(u32 v) { return (v & 0x1) << 31; } #define HOST1X_SYNC_CFPEEK_CTRL_ENA_F(v) \ host1x_sync_cfpeek_ctrl_ena_f(v) static inline u32 host1x_sync_cfpeek_read_r(void) { return 0x750; } #define HOST1X_SYNC_CFPEEK_READ \ host1x_sync_cfpeek_read_r() static inline u32 host1x_sync_cfpeek_ptrs_r(void) { return 0x754; } #define HOST1X_SYNC_CFPEEK_PTRS \ host1x_sync_cfpeek_ptrs_r() static inline u32 host1x_sync_cfpeek_ptrs_cf_rd_ptr_v(u32 r) { return (r >> 0) & 0x3ff; } #define HOST1X_SYNC_CFPEEK_PTRS_CF_RD_PTR_V(r) \ host1x_sync_cfpeek_ptrs_cf_rd_ptr_v(r) static inline u32 host1x_sync_cfpeek_ptrs_cf_wr_ptr_v(u32 r) { return (r >> 16) & 0x3ff; } #define HOST1X_SYNC_CFPEEK_PTRS_CF_WR_PTR_V(r) \ host1x_sync_cfpeek_ptrs_cf_wr_ptr_v(r) static inline u32 host1x_sync_cbstat_r(unsigned int channel) { return 0xcc0 + channel * REGISTER_STRIDE; } #define HOST1X_SYNC_CBSTAT(channel) \ host1x_sync_cbstat_r(channel) static inline u32 host1x_sync_cbstat_cboffset_v(u32 r) { return (r >> 0) & 0xffff; } #define HOST1X_SYNC_CBSTAT_CBOFFSET_V(r) \ host1x_sync_cbstat_cboffset_v(r) static inline u32 host1x_sync_cbstat_cbclass_v(u32 r) { return (r >> 16) & 0x3ff; } #define HOST1X_SYNC_CBSTAT_CBCLASS_V(r) \ host1x_sync_cbstat_cbclass_v(r) #endif |