13126df22SRasesh Mody /* SPDX-License-Identifier: BSD-3-Clause 29adde217SRasesh Mody * Copyright (c) 2016 - 2018 Cavium Inc. 3ec94dbc5SRasesh Mody * All rights reserved. 49adde217SRasesh Mody * www.cavium.com 5ec94dbc5SRasesh Mody */ 6ec94dbc5SRasesh Mody 7ec94dbc5SRasesh Mody #ifndef __ECORE_HW_H__ 8ec94dbc5SRasesh Mody #define __ECORE_HW_H__ 9ec94dbc5SRasesh Mody 10ec94dbc5SRasesh Mody #include "ecore.h" 11ec94dbc5SRasesh Mody 12*7ed1cd53SRasesh Mody /* Forward declaration */ 13ec94dbc5SRasesh Mody struct ecore_ptt; 14ec94dbc5SRasesh Mody 15ec94dbc5SRasesh Mody enum reserved_ptts { 16ec94dbc5SRasesh Mody RESERVED_PTT_EDIAG, 17ec94dbc5SRasesh Mody RESERVED_PTT_USER_SPACE, 18ec94dbc5SRasesh Mody RESERVED_PTT_MAIN, 19ec94dbc5SRasesh Mody RESERVED_PTT_DPC, 20ec94dbc5SRasesh Mody RESERVED_PTT_MAX 21ec94dbc5SRasesh Mody }; 22ec94dbc5SRasesh Mody 23ec94dbc5SRasesh Mody /* @@@TMP - in earlier versions of the emulation, the HW lock started from 1 24ec94dbc5SRasesh Mody * instead of 0, this should be fixed in later HW versions. 25ec94dbc5SRasesh Mody */ 26ec94dbc5SRasesh Mody #ifndef MISC_REG_DRIVER_CONTROL_0 27ec94dbc5SRasesh Mody #define MISC_REG_DRIVER_CONTROL_0 MISC_REG_DRIVER_CONTROL_1 28ec94dbc5SRasesh Mody #endif 29ec94dbc5SRasesh Mody #ifndef MISC_REG_DRIVER_CONTROL_0_SIZE 30ec94dbc5SRasesh Mody #define MISC_REG_DRIVER_CONTROL_0_SIZE MISC_REG_DRIVER_CONTROL_1_SIZE 31ec94dbc5SRasesh Mody #endif 32ec94dbc5SRasesh Mody 33ea85629fSRasesh Mody /* Definitions for DMA constants */ 34ec94dbc5SRasesh Mody #define DMAE_GO_VALUE 0x1 35ec94dbc5SRasesh Mody 36ec94dbc5SRasesh Mody #ifdef __BIG_ENDIAN 37ec94dbc5SRasesh Mody #define DMAE_COMPLETION_VAL 0xAED10000 38ec94dbc5SRasesh Mody #define DMAE_CMD_ENDIANITY 0x3 39ec94dbc5SRasesh Mody #else 40ec94dbc5SRasesh Mody #define DMAE_COMPLETION_VAL 0xD1AE 41ec94dbc5SRasesh Mody #define DMAE_CMD_ENDIANITY 0x2 42ec94dbc5SRasesh Mody #endif 43ec94dbc5SRasesh Mody 44ec94dbc5SRasesh Mody #define DMAE_CMD_SIZE 14 45ec94dbc5SRasesh Mody /* size of DMAE command structure to fill.. DMAE_CMD_SIZE-5 */ 46ec94dbc5SRasesh Mody #define DMAE_CMD_SIZE_TO_FILL (DMAE_CMD_SIZE - 5) 47ec94dbc5SRasesh Mody /* Minimum wait for dmae opertaion to complete 2 milliseconds */ 48ec94dbc5SRasesh Mody #define DMAE_MIN_WAIT_TIME 0x2 49ec94dbc5SRasesh Mody #define DMAE_MAX_CLIENTS 32 50ec94dbc5SRasesh Mody 51ec94dbc5SRasesh Mody /** 52ec94dbc5SRasesh Mody * @brief ecore_gtt_init - Initialize GTT windows 53ec94dbc5SRasesh Mody * 54ec94dbc5SRasesh Mody * @param p_hwfn 55ec94dbc5SRasesh Mody */ 56*7ed1cd53SRasesh Mody void ecore_gtt_init(struct ecore_hwfn *p_hwfn); 57ec94dbc5SRasesh Mody 58ec94dbc5SRasesh Mody /** 59ec94dbc5SRasesh Mody * @brief ecore_ptt_invalidate - Forces all ptt entries to be re-configured 60ec94dbc5SRasesh Mody * 61ec94dbc5SRasesh Mody * @param p_hwfn 62ec94dbc5SRasesh Mody */ 63ec94dbc5SRasesh Mody void ecore_ptt_invalidate(struct ecore_hwfn *p_hwfn); 64ec94dbc5SRasesh Mody 65ec94dbc5SRasesh Mody /** 66ec94dbc5SRasesh Mody * @brief ecore_ptt_pool_alloc - Allocate and initialize PTT pool 67ec94dbc5SRasesh Mody * 68ec94dbc5SRasesh Mody * @param p_hwfn 69ec94dbc5SRasesh Mody * 70ec94dbc5SRasesh Mody * @return _ecore_status_t - success (0), negative - error. 71ec94dbc5SRasesh Mody */ 72ec94dbc5SRasesh Mody enum _ecore_status_t ecore_ptt_pool_alloc(struct ecore_hwfn *p_hwfn); 73ec94dbc5SRasesh Mody 74ec94dbc5SRasesh Mody /** 75ec94dbc5SRasesh Mody * @brief ecore_ptt_pool_free - 76ec94dbc5SRasesh Mody * 77ec94dbc5SRasesh Mody * @param p_hwfn 78ec94dbc5SRasesh Mody */ 79ec94dbc5SRasesh Mody void ecore_ptt_pool_free(struct ecore_hwfn *p_hwfn); 80ec94dbc5SRasesh Mody 81ec94dbc5SRasesh Mody /** 82ec94dbc5SRasesh Mody * @brief ecore_ptt_get_bar_addr - Get PPT's external BAR address 83ec94dbc5SRasesh Mody * 84ec94dbc5SRasesh Mody * @param p_ptt 85ec94dbc5SRasesh Mody * 86ec94dbc5SRasesh Mody * @return u32 87ec94dbc5SRasesh Mody */ 88ec94dbc5SRasesh Mody u32 ecore_ptt_get_bar_addr(struct ecore_ptt *p_ptt); 89ec94dbc5SRasesh Mody 90ec94dbc5SRasesh Mody /** 91ec94dbc5SRasesh Mody * @brief ecore_ptt_set_win - Set PTT Window's GRC BAR address 92ec94dbc5SRasesh Mody * 93ec94dbc5SRasesh Mody * @param p_hwfn 94ec94dbc5SRasesh Mody * @param p_ptt 95*7ed1cd53SRasesh Mody * @param new_hw_addr 96ec94dbc5SRasesh Mody */ 97ec94dbc5SRasesh Mody void ecore_ptt_set_win(struct ecore_hwfn *p_hwfn, 989455b556SRasesh Mody struct ecore_ptt *p_ptt, 999455b556SRasesh Mody u32 new_hw_addr); 100ec94dbc5SRasesh Mody 101ec94dbc5SRasesh Mody /** 102ec94dbc5SRasesh Mody * @brief ecore_get_reserved_ptt - Get a specific reserved PTT 103ec94dbc5SRasesh Mody * 104ec94dbc5SRasesh Mody * @param p_hwfn 105ec94dbc5SRasesh Mody * @param ptt_idx 106ec94dbc5SRasesh Mody * 107ec94dbc5SRasesh Mody * @return struct ecore_ptt * 108ec94dbc5SRasesh Mody */ 109ec94dbc5SRasesh Mody struct ecore_ptt *ecore_get_reserved_ptt(struct ecore_hwfn *p_hwfn, 110ec94dbc5SRasesh Mody enum reserved_ptts ptt_idx); 111ec94dbc5SRasesh Mody 112ec94dbc5SRasesh Mody /** 113ec94dbc5SRasesh Mody * @brief ecore_wr - Write value to BAR using the given ptt 114ec94dbc5SRasesh Mody * 115ec94dbc5SRasesh Mody * @param p_hwfn 116ec94dbc5SRasesh Mody * @param p_ptt 117ec94dbc5SRasesh Mody * @param hw_addr 1183eed444aSRasesh Mody * @param val 119ec94dbc5SRasesh Mody */ 120ec94dbc5SRasesh Mody void ecore_wr(struct ecore_hwfn *p_hwfn, 1219455b556SRasesh Mody struct ecore_ptt *p_ptt, 1229455b556SRasesh Mody u32 hw_addr, 1239455b556SRasesh Mody u32 val); 124ec94dbc5SRasesh Mody 125ec94dbc5SRasesh Mody /** 126ec94dbc5SRasesh Mody * @brief ecore_rd - Read value from BAR using the given ptt 127ec94dbc5SRasesh Mody * 128ec94dbc5SRasesh Mody * @param p_hwfn 129ec94dbc5SRasesh Mody * @param p_ptt 130ec94dbc5SRasesh Mody * @param hw_addr 131ec94dbc5SRasesh Mody */ 1329455b556SRasesh Mody u32 ecore_rd(struct ecore_hwfn *p_hwfn, 1339455b556SRasesh Mody struct ecore_ptt *p_ptt, 1349455b556SRasesh Mody u32 hw_addr); 135ec94dbc5SRasesh Mody 136ec94dbc5SRasesh Mody /** 137ec94dbc5SRasesh Mody * @brief ecore_memcpy_from - copy n bytes from BAR using the given 138ec94dbc5SRasesh Mody * ptt 139ec94dbc5SRasesh Mody * 140ec94dbc5SRasesh Mody * @param p_hwfn 141ec94dbc5SRasesh Mody * @param p_ptt 142ec94dbc5SRasesh Mody * @param dest 143ec94dbc5SRasesh Mody * @param hw_addr 144ec94dbc5SRasesh Mody * @param n 145ec94dbc5SRasesh Mody */ 146ec94dbc5SRasesh Mody void ecore_memcpy_from(struct ecore_hwfn *p_hwfn, 147ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 1489455b556SRasesh Mody void *dest, 1499455b556SRasesh Mody u32 hw_addr, 1509455b556SRasesh Mody osal_size_t n); 151ec94dbc5SRasesh Mody 152ec94dbc5SRasesh Mody /** 153ec94dbc5SRasesh Mody * @brief ecore_memcpy_to - copy n bytes to BAR using the given 154ec94dbc5SRasesh Mody * ptt 155ec94dbc5SRasesh Mody * 156ec94dbc5SRasesh Mody * @param p_hwfn 157ec94dbc5SRasesh Mody * @param p_ptt 158ec94dbc5SRasesh Mody * @param hw_addr 159ec94dbc5SRasesh Mody * @param src 160ec94dbc5SRasesh Mody * @param n 161ec94dbc5SRasesh Mody */ 162ec94dbc5SRasesh Mody void ecore_memcpy_to(struct ecore_hwfn *p_hwfn, 163ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 1649455b556SRasesh Mody u32 hw_addr, 1659455b556SRasesh Mody void *src, 1669455b556SRasesh Mody osal_size_t n); 167ec94dbc5SRasesh Mody /** 168ec94dbc5SRasesh Mody * @brief ecore_fid_pretend - pretend to another function when 169ec94dbc5SRasesh Mody * accessing the ptt window. There is no way to unpretend 170ec94dbc5SRasesh Mody * a function. The only way to cancel a pretend is to 171ec94dbc5SRasesh Mody * pretend back to the original function. 172ec94dbc5SRasesh Mody * 173ec94dbc5SRasesh Mody * @param p_hwfn 174ec94dbc5SRasesh Mody * @param p_ptt 175ec94dbc5SRasesh Mody * @param fid - fid field of pxp_pretend structure. Can contain 176ec94dbc5SRasesh Mody * either pf / vf, port/path fields are don't care. 177ec94dbc5SRasesh Mody */ 178ec94dbc5SRasesh Mody void ecore_fid_pretend(struct ecore_hwfn *p_hwfn, 1799455b556SRasesh Mody struct ecore_ptt *p_ptt, 1809455b556SRasesh Mody u16 fid); 181ec94dbc5SRasesh Mody 182ec94dbc5SRasesh Mody /** 183ec94dbc5SRasesh Mody * @brief ecore_port_pretend - pretend to another port when 184ec94dbc5SRasesh Mody * accessing the ptt window 185ec94dbc5SRasesh Mody * 186ec94dbc5SRasesh Mody * @param p_hwfn 187ec94dbc5SRasesh Mody * @param p_ptt 188ec94dbc5SRasesh Mody * @param port_id - the port to pretend to 189ec94dbc5SRasesh Mody */ 190ec94dbc5SRasesh Mody void ecore_port_pretend(struct ecore_hwfn *p_hwfn, 1919455b556SRasesh Mody struct ecore_ptt *p_ptt, 1929455b556SRasesh Mody u8 port_id); 193ec94dbc5SRasesh Mody 194ec94dbc5SRasesh Mody /** 195ec94dbc5SRasesh Mody * @brief ecore_port_unpretend - cancel any previously set port 196ec94dbc5SRasesh Mody * pretend 197ec94dbc5SRasesh Mody * 198ec94dbc5SRasesh Mody * @param p_hwfn 199ec94dbc5SRasesh Mody * @param p_ptt 200ec94dbc5SRasesh Mody */ 2019455b556SRasesh Mody void ecore_port_unpretend(struct ecore_hwfn *p_hwfn, 2029455b556SRasesh Mody struct ecore_ptt *p_ptt); 203ec94dbc5SRasesh Mody 204ec94dbc5SRasesh Mody /** 2059585053bSRasesh Mody * @brief ecore_port_fid_pretend - pretend to another port and another function 2069585053bSRasesh Mody * when accessing the ptt window 2079585053bSRasesh Mody * 2089585053bSRasesh Mody * @param p_hwfn 2099585053bSRasesh Mody * @param p_ptt 2109585053bSRasesh Mody * @param port_id - the port to pretend to 2119585053bSRasesh Mody * @param fid - fid field of pxp_pretend structure. Can contain either pf / vf. 2129585053bSRasesh Mody */ 2139585053bSRasesh Mody void ecore_port_fid_pretend(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 2149585053bSRasesh Mody u8 port_id, u16 fid); 2159585053bSRasesh Mody 2169585053bSRasesh Mody /** 217ec94dbc5SRasesh Mody * @brief ecore_vfid_to_concrete - build a concrete FID for a 218ec94dbc5SRasesh Mody * given VF ID 219ec94dbc5SRasesh Mody * 220ec94dbc5SRasesh Mody * @param p_hwfn 221ec94dbc5SRasesh Mody * @param p_ptt 222ec94dbc5SRasesh Mody * @param vfid 223ec94dbc5SRasesh Mody */ 224ec94dbc5SRasesh Mody u32 ecore_vfid_to_concrete(struct ecore_hwfn *p_hwfn, u8 vfid); 225ec94dbc5SRasesh Mody 226ec94dbc5SRasesh Mody /** 227ec94dbc5SRasesh Mody * @brief ecore_dmae_info_alloc - Init the dmae_info structure 228ec94dbc5SRasesh Mody * which is part of p_hwfn. 229ec94dbc5SRasesh Mody * @param p_hwfn 230ec94dbc5SRasesh Mody */ 231ec94dbc5SRasesh Mody enum _ecore_status_t ecore_dmae_info_alloc(struct ecore_hwfn *p_hwfn); 232ec94dbc5SRasesh Mody 233ec94dbc5SRasesh Mody /** 234ec94dbc5SRasesh Mody * @brief ecore_dmae_info_free - Free the dmae_info structure 235ec94dbc5SRasesh Mody * which is part of p_hwfn 236ec94dbc5SRasesh Mody * 237ec94dbc5SRasesh Mody * @param p_hwfn 238ec94dbc5SRasesh Mody */ 239ec94dbc5SRasesh Mody void ecore_dmae_info_free(struct ecore_hwfn *p_hwfn); 240ec94dbc5SRasesh Mody 241ea85629fSRasesh Mody /** 242ea85629fSRasesh Mody * @brief ecore_dmae_host2grc - copy data from source address to 243ea85629fSRasesh Mody * dmae registers using the given ptt 244ea85629fSRasesh Mody * 245ea85629fSRasesh Mody * @param p_hwfn 246ea85629fSRasesh Mody * @param p_ptt 247ea85629fSRasesh Mody * @param source_addr 248ea85629fSRasesh Mody * @param grc_addr (dmae_data_offset) 249ea85629fSRasesh Mody * @param size_in_dwords 250ea85629fSRasesh Mody * @param p_params (default parameters will be used in case of OSAL_NULL) 251ea85629fSRasesh Mody * 252ea85629fSRasesh Mody * @return enum _ecore_status_t 253ea85629fSRasesh Mody */ 254ea85629fSRasesh Mody enum _ecore_status_t 255ea85629fSRasesh Mody ecore_dmae_host2grc(struct ecore_hwfn *p_hwfn, 256ea85629fSRasesh Mody struct ecore_ptt *p_ptt, 257ea85629fSRasesh Mody u64 source_addr, 258ea85629fSRasesh Mody u32 grc_addr, 259ea85629fSRasesh Mody u32 size_in_dwords, 260ea85629fSRasesh Mody struct dmae_params *p_params); 261ea85629fSRasesh Mody 262ea85629fSRasesh Mody /** 263ea85629fSRasesh Mody * @brief ecore_dmae_grc2host - Read data from dmae data offset 264ea85629fSRasesh Mody * to source address using the given ptt 265ea85629fSRasesh Mody * 266ea85629fSRasesh Mody * @param p_ptt 267ea85629fSRasesh Mody * @param grc_addr (dmae_data_offset) 268ea85629fSRasesh Mody * @param dest_addr 269ea85629fSRasesh Mody * @param size_in_dwords 270ea85629fSRasesh Mody * @param p_params (default parameters will be used in case of OSAL_NULL) 271ea85629fSRasesh Mody * 272ea85629fSRasesh Mody * @return enum _ecore_status_t 273ea85629fSRasesh Mody */ 274ea85629fSRasesh Mody enum _ecore_status_t 275ea85629fSRasesh Mody ecore_dmae_grc2host(struct ecore_hwfn *p_hwfn, 276ea85629fSRasesh Mody struct ecore_ptt *p_ptt, 277ea85629fSRasesh Mody u32 grc_addr, 278ea85629fSRasesh Mody dma_addr_t dest_addr, 279ea85629fSRasesh Mody u32 size_in_dwords, 280ea85629fSRasesh Mody struct dmae_params *p_params); 281ea85629fSRasesh Mody 282ea85629fSRasesh Mody /** 283ea85629fSRasesh Mody * @brief ecore_dmae_host2host - copy data from to source address 284ea85629fSRasesh Mody * to a destination address (for SRIOV) using the given ptt 285ea85629fSRasesh Mody * 286ea85629fSRasesh Mody * @param p_hwfn 287ea85629fSRasesh Mody * @param p_ptt 288ea85629fSRasesh Mody * @param source_addr 289ea85629fSRasesh Mody * @param dest_addr 290ea85629fSRasesh Mody * @param size_in_dwords 291ea85629fSRasesh Mody * @param p_params (default parameters will be used in case of OSAL_NULL) 292ea85629fSRasesh Mody * 293ea85629fSRasesh Mody * @return enum _ecore_status_t 294ea85629fSRasesh Mody */ 295ea85629fSRasesh Mody enum _ecore_status_t 296ea85629fSRasesh Mody ecore_dmae_host2host(struct ecore_hwfn *p_hwfn, 297ea85629fSRasesh Mody struct ecore_ptt *p_ptt, 298ea85629fSRasesh Mody dma_addr_t source_addr, 299ea85629fSRasesh Mody dma_addr_t dest_addr, 300ea85629fSRasesh Mody u32 size_in_dwords, 301ea85629fSRasesh Mody struct dmae_params *p_params); 302ea85629fSRasesh Mody 303ea85629fSRasesh Mody enum _ecore_status_t ecore_dmae_sanity(struct ecore_hwfn *p_hwfn, 304ea85629fSRasesh Mody struct ecore_ptt *p_ptt, 305ea85629fSRasesh Mody const char *phase); 306ea85629fSRasesh Mody 307ec94dbc5SRasesh Mody enum _ecore_status_t ecore_init_fw_data(struct ecore_dev *p_dev, 308ec94dbc5SRasesh Mody const u8 *fw_data); 309ec94dbc5SRasesh Mody 310ec94dbc5SRasesh Mody void ecore_hw_err_notify(struct ecore_hwfn *p_hwfn, 311ec94dbc5SRasesh Mody enum ecore_hw_err_type err_type); 312ec94dbc5SRasesh Mody 3133eed444aSRasesh Mody /** 3143eed444aSRasesh Mody * @brief ecore_ppfid_wr - Write value to BAR using the given ptt while 3153eed444aSRasesh Mody * pretending to a PF to which the given PPFID pertains. 3163eed444aSRasesh Mody * 3173eed444aSRasesh Mody * @param p_hwfn 3183eed444aSRasesh Mody * @param p_ptt 3193eed444aSRasesh Mody * @param abs_ppfid 3203eed444aSRasesh Mody * @param hw_addr 3213eed444aSRasesh Mody * @param val 3223eed444aSRasesh Mody */ 3233eed444aSRasesh Mody void ecore_ppfid_wr(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 3243eed444aSRasesh Mody u8 abs_ppfid, u32 hw_addr, u32 val); 3253eed444aSRasesh Mody 3263eed444aSRasesh Mody /** 3273eed444aSRasesh Mody * @brief ecore_ppfid_rd - Read value from BAR using the given ptt while 3283eed444aSRasesh Mody * pretending to a PF to which the given PPFID pertains. 3293eed444aSRasesh Mody * 3303eed444aSRasesh Mody * @param p_hwfn 3313eed444aSRasesh Mody * @param p_ptt 3323eed444aSRasesh Mody * @param abs_ppfid 3333eed444aSRasesh Mody * @param hw_addr 3343eed444aSRasesh Mody */ 3353eed444aSRasesh Mody u32 ecore_ppfid_rd(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 3363eed444aSRasesh Mody u8 abs_ppfid, u32 hw_addr); 3373eed444aSRasesh Mody 338ec94dbc5SRasesh Mody #endif /* __ECORE_HW_H__ */ 339