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_MCP_H__ 8ec94dbc5SRasesh Mody #define __ECORE_MCP_H__ 9ec94dbc5SRasesh Mody 10ec94dbc5SRasesh Mody #include "bcm_osal.h" 11ec94dbc5SRasesh Mody #include "mcp_public.h" 1249ca6a7bSRasesh Mody #include "ecore.h" 13ec94dbc5SRasesh Mody #include "ecore_mcp_api.h" 14c5e11089SRasesh Mody #include "ecore_dev_api.h" 15ec94dbc5SRasesh Mody 16ec94dbc5SRasesh Mody /* Using hwfn number (and not pf_num) is required since in CMT mode, 17ec94dbc5SRasesh Mody * same pf_num may be used by two different hwfn 18ec94dbc5SRasesh Mody * TODO - this shouldn't really be in .h file, but until all fields 19ec94dbc5SRasesh Mody * required during hw-init will be placed in their correct place in shmem 20ec94dbc5SRasesh Mody * we need it in ecore_dev.c [for readin the nvram reflection in shmem]. 21ec94dbc5SRasesh Mody */ 22ec94dbc5SRasesh Mody #define MCP_PF_ID_BY_REL(p_hwfn, rel_pfid) (ECORE_IS_BB((p_hwfn)->p_dev) ? \ 23ec94dbc5SRasesh Mody ((rel_pfid) | \ 24ec94dbc5SRasesh Mody ((p_hwfn)->abs_pf_id & 1) << 3) : \ 25ec94dbc5SRasesh Mody rel_pfid) 26ec94dbc5SRasesh Mody #define MCP_PF_ID(p_hwfn) MCP_PF_ID_BY_REL(p_hwfn, (p_hwfn)->rel_pf_id) 27ec94dbc5SRasesh Mody 28ec94dbc5SRasesh Mody struct ecore_mcp_info { 2922c99696SRasesh Mody /* List for mailbox commands which were sent and wait for a response */ 3022c99696SRasesh Mody osal_list_t cmd_list; 3122c99696SRasesh Mody 3222c99696SRasesh Mody /* Spinlock used for protecting the access to the mailbox commands list 3322c99696SRasesh Mody * and the sending of the commands. 3422c99696SRasesh Mody */ 3522c99696SRasesh Mody osal_spinlock_t cmd_lock; 3622c99696SRasesh Mody 37a474d1c1SRasesh Mody /* Flag to indicate whether sending a MFW mailbox command is blocked */ 38a474d1c1SRasesh Mody bool b_block_cmd; 39a474d1c1SRasesh Mody 4022c99696SRasesh Mody /* Spinlock used for syncing SW link-changes and link-changes 4122c99696SRasesh Mody * originating from attention context. 4222c99696SRasesh Mody */ 4322c99696SRasesh Mody osal_spinlock_t link_lock; 44610ccd98SRasesh Mody 45610ccd98SRasesh Mody /* Address of the MCP public area */ 46610ccd98SRasesh Mody u32 public_base; 47610ccd98SRasesh Mody /* Address of the driver mailbox */ 48610ccd98SRasesh Mody u32 drv_mb_addr; 49610ccd98SRasesh Mody /* Address of the MFW mailbox */ 50610ccd98SRasesh Mody u32 mfw_mb_addr; 51610ccd98SRasesh Mody /* Address of the port configuration (link) */ 52610ccd98SRasesh Mody u32 port_addr; 53610ccd98SRasesh Mody 54610ccd98SRasesh Mody /* Current driver mailbox sequence */ 55610ccd98SRasesh Mody u16 drv_mb_seq; 56610ccd98SRasesh Mody /* Current driver pulse sequence */ 57610ccd98SRasesh Mody u16 drv_pulse_seq; 58610ccd98SRasesh Mody 59ec94dbc5SRasesh Mody struct ecore_mcp_link_params link_input; 60ec94dbc5SRasesh Mody struct ecore_mcp_link_state link_output; 61ec94dbc5SRasesh Mody struct ecore_mcp_link_capabilities link_capabilities; 62610ccd98SRasesh Mody 63ec94dbc5SRasesh Mody struct ecore_mcp_function_info func_info; 64ec94dbc5SRasesh Mody 65ec94dbc5SRasesh Mody u8 *mfw_mb_cur; 66ec94dbc5SRasesh Mody u8 *mfw_mb_shadow; 67ec94dbc5SRasesh Mody u16 mfw_mb_length; 6822c99696SRasesh Mody u32 mcp_hist; 69652ee28aSRasesh Mody 70652ee28aSRasesh Mody /* Capabilties negotiated with the MFW */ 71652ee28aSRasesh Mody u32 capabilities; 72ec94dbc5SRasesh Mody }; 73ec94dbc5SRasesh Mody 74ffdd0599SHarish Patil struct ecore_mcp_mb_params { 75ffdd0599SHarish Patil u32 cmd; 76ffdd0599SHarish Patil u32 param; 77e32dc0f7SRasesh Mody void *p_data_src; 78e32dc0f7SRasesh Mody void *p_data_dst; 79ffdd0599SHarish Patil u32 mcp_resp; 80ffdd0599SHarish Patil u32 mcp_param; 81*3b307c55SRasesh Mody u8 data_src_size; 82*3b307c55SRasesh Mody u8 data_dst_size; 83*3b307c55SRasesh Mody u32 flags; 84*3b307c55SRasesh Mody #define ECORE_MB_FLAG_CAN_SLEEP (0x1 << 0) 85*3b307c55SRasesh Mody #define ECORE_MB_FLAG_AVOID_BLOCK (0x1 << 1) 86*3b307c55SRasesh Mody #define ECORE_MB_FLAGS_IS_SET(params, flag) \ 87*3b307c55SRasesh Mody ((params) != OSAL_NULL && ((params)->flags & ECORE_MB_FLAG_##flag)) 88ffdd0599SHarish Patil }; 89ffdd0599SHarish Patil 9043ef668cSRasesh Mody struct ecore_drv_tlv_hdr { 9143ef668cSRasesh Mody u8 tlv_type; /* According to the enum below */ 9243ef668cSRasesh Mody u8 tlv_length; /* In dwords - not including this header */ 9343ef668cSRasesh Mody u8 tlv_reserved; 9443ef668cSRasesh Mody #define ECORE_DRV_TLV_FLAGS_CHANGED 0x01 9543ef668cSRasesh Mody u8 tlv_flags; 9643ef668cSRasesh Mody }; 9743ef668cSRasesh Mody 98ec94dbc5SRasesh Mody /** 99ec94dbc5SRasesh Mody * @brief Initialize the interface with the MCP 100ec94dbc5SRasesh Mody * 101ec94dbc5SRasesh Mody * @param p_hwfn - HW func 102ec94dbc5SRasesh Mody * @param p_ptt - PTT required for register access 103ec94dbc5SRasesh Mody * 104ec94dbc5SRasesh Mody * @return enum _ecore_status_t 105ec94dbc5SRasesh Mody */ 106ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_cmd_init(struct ecore_hwfn *p_hwfn, 107ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 108ec94dbc5SRasesh Mody 109ec94dbc5SRasesh Mody /** 110ec94dbc5SRasesh Mody * @brief Initialize the port interface with the MCP 111ec94dbc5SRasesh Mody * 112ec94dbc5SRasesh Mody * @param p_hwfn 113ec94dbc5SRasesh Mody * @param p_ptt 114dd7b6aadSRasesh Mody * Can only be called after `num_ports_in_engine' is set 115ec94dbc5SRasesh Mody */ 116ec94dbc5SRasesh Mody void ecore_mcp_cmd_port_init(struct ecore_hwfn *p_hwfn, 117ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 118ec94dbc5SRasesh Mody /** 119ec94dbc5SRasesh Mody * @brief Releases resources allocated during the init process. 120ec94dbc5SRasesh Mody * 121ec94dbc5SRasesh Mody * @param p_hwfn - HW func 122ec94dbc5SRasesh Mody * @param p_ptt - PTT required for register access 123ec94dbc5SRasesh Mody * 124ec94dbc5SRasesh Mody * @return enum _ecore_status_t 125ec94dbc5SRasesh Mody */ 126ec94dbc5SRasesh Mody 127ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_free(struct ecore_hwfn *p_hwfn); 128ec94dbc5SRasesh Mody 129ec94dbc5SRasesh Mody /** 130ec94dbc5SRasesh Mody * @brief This function is called from the DPC context. After 131ec94dbc5SRasesh Mody * pointing PTT to the mfw mb, check for events sent by the MCP 132ec94dbc5SRasesh Mody * to the driver and ack them. In case a critical event 133ec94dbc5SRasesh Mody * detected, it will be handled here, otherwise the work will be 134ec94dbc5SRasesh Mody * queued to a sleepable work-queue. 135ec94dbc5SRasesh Mody * 136ec94dbc5SRasesh Mody * @param p_hwfn - HW function 137ec94dbc5SRasesh Mody * @param p_ptt - PTT required for register access 138ec94dbc5SRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - operation 139ec94dbc5SRasesh Mody * was successul. 140ec94dbc5SRasesh Mody */ 141ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_handle_events(struct ecore_hwfn *p_hwfn, 142ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 143ec94dbc5SRasesh Mody 144ec94dbc5SRasesh Mody /** 145ec94dbc5SRasesh Mody * @brief When MFW doesn't get driver pulse for couple of seconds, at some 146ec94dbc5SRasesh Mody * threshold before timeout expires, it will generate interrupt 147ec94dbc5SRasesh Mody * through a dedicated status block (DPSB - Driver Pulse Status 148ec94dbc5SRasesh Mody * Block), which the driver should respond immediately, by 149ec94dbc5SRasesh Mody * providing keepalive indication after setting the PTT to the 150ec94dbc5SRasesh Mody * driver-MFW mailbox. This function is called directly from the 151ec94dbc5SRasesh Mody * DPC upon receiving the DPSB attention. 152ec94dbc5SRasesh Mody * 153ec94dbc5SRasesh Mody * @param p_hwfn - hw function 154ec94dbc5SRasesh Mody * @param p_ptt - PTT required for register access 155ec94dbc5SRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - operation 1560b6bf70dSRasesh Mody * was successful. 157ec94dbc5SRasesh Mody */ 158ec94dbc5SRasesh Mody enum _ecore_status_t ecore_issue_pulse(struct ecore_hwfn *p_hwfn, 159ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 160ec94dbc5SRasesh Mody 1610b6bf70dSRasesh Mody enum ecore_drv_role { 1620b6bf70dSRasesh Mody ECORE_DRV_ROLE_OS, 1630b6bf70dSRasesh Mody ECORE_DRV_ROLE_KDUMP, 1640b6bf70dSRasesh Mody }; 1650b6bf70dSRasesh Mody 1660b6bf70dSRasesh Mody struct ecore_load_req_params { 167c5e11089SRasesh Mody /* Input params */ 1680b6bf70dSRasesh Mody enum ecore_drv_role drv_role; 1690b6bf70dSRasesh Mody u8 timeout_val; /* 1..254, '0' - default value, '255' - no timeout */ 1700b6bf70dSRasesh Mody bool avoid_eng_reset; 171c5e11089SRasesh Mody enum ecore_override_force_load override_force_load; 172c5e11089SRasesh Mody 173c5e11089SRasesh Mody /* Output params */ 1740b6bf70dSRasesh Mody u32 load_code; 1750b6bf70dSRasesh Mody }; 1760b6bf70dSRasesh Mody 177ec94dbc5SRasesh Mody /** 1780b6bf70dSRasesh Mody * @brief Sends a LOAD_REQ to the MFW, and in case the operation succeeds, 1790b6bf70dSRasesh Mody * returns whether this PF is the first on the engine/port or function. 180ec94dbc5SRasesh Mody * 1810b6bf70dSRasesh Mody * @param p_hwfn 182e32dc0f7SRasesh Mody * @param p_ptt 1830b6bf70dSRasesh Mody * @param p_params 1840b6bf70dSRasesh Mody * 1850b6bf70dSRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - Operation was successful. 186ec94dbc5SRasesh Mody */ 187ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, 188ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 1890b6bf70dSRasesh Mody struct ecore_load_req_params *p_params); 190ec94dbc5SRasesh Mody 191ec94dbc5SRasesh Mody /** 19260c78a5eSRasesh Mody * @brief Sends a LOAD_DONE message to the MFW 19360c78a5eSRasesh Mody * 19460c78a5eSRasesh Mody * @param p_hwfn 19560c78a5eSRasesh Mody * @param p_ptt 19660c78a5eSRasesh Mody * 19760c78a5eSRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - Operation was successful. 19860c78a5eSRasesh Mody */ 19960c78a5eSRasesh Mody enum _ecore_status_t ecore_mcp_load_done(struct ecore_hwfn *p_hwfn, 20060c78a5eSRasesh Mody struct ecore_ptt *p_ptt); 20160c78a5eSRasesh Mody 20260c78a5eSRasesh Mody /** 20339f0eb3bSRasesh Mody * @brief Sends a UNLOAD_REQ message to the MFW 20439f0eb3bSRasesh Mody * 20539f0eb3bSRasesh Mody * @param p_hwfn 20639f0eb3bSRasesh Mody * @param p_ptt 20739f0eb3bSRasesh Mody * 20839f0eb3bSRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - Operation was successful. 20939f0eb3bSRasesh Mody */ 21039f0eb3bSRasesh Mody enum _ecore_status_t ecore_mcp_unload_req(struct ecore_hwfn *p_hwfn, 21139f0eb3bSRasesh Mody struct ecore_ptt *p_ptt); 21239f0eb3bSRasesh Mody 21339f0eb3bSRasesh Mody /** 214e32dc0f7SRasesh Mody * @brief Sends a UNLOAD_DONE message to the MFW 215e32dc0f7SRasesh Mody * 216e32dc0f7SRasesh Mody * @param p_hwfn 217e32dc0f7SRasesh Mody * @param p_ptt 218e32dc0f7SRasesh Mody * 219e32dc0f7SRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - Operation was successful. 220e32dc0f7SRasesh Mody */ 221e32dc0f7SRasesh Mody enum _ecore_status_t ecore_mcp_unload_done(struct ecore_hwfn *p_hwfn, 222e32dc0f7SRasesh Mody struct ecore_ptt *p_ptt); 223e32dc0f7SRasesh Mody 224e32dc0f7SRasesh Mody /** 225ec94dbc5SRasesh Mody * @brief Read the MFW mailbox into Current buffer. 226ec94dbc5SRasesh Mody * 227ec94dbc5SRasesh Mody * @param p_hwfn 228ec94dbc5SRasesh Mody * @param p_ptt 229ec94dbc5SRasesh Mody */ 23022d07d93SRasesh Mody void ecore_mcp_read_mb(struct ecore_hwfn *p_hwfn, 23122d07d93SRasesh Mody struct ecore_ptt *p_ptt); 232ec94dbc5SRasesh Mody 233ec94dbc5SRasesh Mody /** 234ec94dbc5SRasesh Mody * @brief Ack to mfw that driver finished FLR process for VFs 235ec94dbc5SRasesh Mody * 236ec94dbc5SRasesh Mody * @param p_hwfn 237ec94dbc5SRasesh Mody * @param p_ptt 238ec94dbc5SRasesh Mody * @param vfs_to_ack - bit mask of all engine VFs for which the PF acks. 239ec94dbc5SRasesh Mody * 240ec94dbc5SRasesh Mody * @param return enum _ecore_status_t - ECORE_SUCCESS upon success. 241ec94dbc5SRasesh Mody */ 242ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_ack_vf_flr(struct ecore_hwfn *p_hwfn, 243ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 244ec94dbc5SRasesh Mody u32 *vfs_to_ack); 245ec94dbc5SRasesh Mody 246ec94dbc5SRasesh Mody /** 247ec94dbc5SRasesh Mody * @brief - calls during init to read shmem of all function-related info. 248ec94dbc5SRasesh Mody * 249ec94dbc5SRasesh Mody * @param p_hwfn 250ec94dbc5SRasesh Mody * 251ec94dbc5SRasesh Mody * @param return ECORE_SUCCESS upon success. 252ec94dbc5SRasesh Mody */ 253ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_fill_shmem_func_info(struct ecore_hwfn *p_hwfn, 254ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 255ec94dbc5SRasesh Mody 256ec94dbc5SRasesh Mody /** 257ec94dbc5SRasesh Mody * @brief - Reset the MCP using mailbox command. 258ec94dbc5SRasesh Mody * 259ec94dbc5SRasesh Mody * @param p_hwfn 260ec94dbc5SRasesh Mody * @param p_ptt 261ec94dbc5SRasesh Mody * 262ec94dbc5SRasesh Mody * @param return ECORE_SUCCESS upon success. 263ec94dbc5SRasesh Mody */ 264ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_reset(struct ecore_hwfn *p_hwfn, 265ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 266ec94dbc5SRasesh Mody 267ec94dbc5SRasesh Mody /** 268ec94dbc5SRasesh Mody * @brief indicates whether the MFW objects [under mcp_info] are accessible 269ec94dbc5SRasesh Mody * 270ec94dbc5SRasesh Mody * @param p_hwfn 271ec94dbc5SRasesh Mody * 272ec94dbc5SRasesh Mody * @return true iff MFW is running and mcp_info is initialized 273ec94dbc5SRasesh Mody */ 274ec94dbc5SRasesh Mody bool ecore_mcp_is_init(struct ecore_hwfn *p_hwfn); 275ec94dbc5SRasesh Mody 276ec94dbc5SRasesh Mody /** 277ec94dbc5SRasesh Mody * @brief request MFW to configure MSI-X for a VF 278ec94dbc5SRasesh Mody * 279ec94dbc5SRasesh Mody * @param p_hwfn 280ec94dbc5SRasesh Mody * @param p_ptt 281ec94dbc5SRasesh Mody * @param vf_id - absolute inside engine 282ec94dbc5SRasesh Mody * @param num_sbs - number of entries to request 283ec94dbc5SRasesh Mody * 284ec94dbc5SRasesh Mody * @return enum _ecore_status_t 285ec94dbc5SRasesh Mody */ 286ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_config_vf_msix(struct ecore_hwfn *p_hwfn, 287ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 288ec94dbc5SRasesh Mody u8 vf_id, u8 num); 289ec94dbc5SRasesh Mody 290ec94dbc5SRasesh Mody /** 291ec94dbc5SRasesh Mody * @brief - Halt the MCP. 292ec94dbc5SRasesh Mody * 293ec94dbc5SRasesh Mody * @param p_hwfn 294ec94dbc5SRasesh Mody * @param p_ptt 295ec94dbc5SRasesh Mody * 296ec94dbc5SRasesh Mody * @param return ECORE_SUCCESS upon success. 297ec94dbc5SRasesh Mody */ 298ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_halt(struct ecore_hwfn *p_hwfn, 299ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 300ec94dbc5SRasesh Mody 301ec94dbc5SRasesh Mody /** 302ec94dbc5SRasesh Mody * @brief - Wake up the MCP. 303ec94dbc5SRasesh Mody * 304ec94dbc5SRasesh Mody * @param p_hwfn 305ec94dbc5SRasesh Mody * @param p_ptt 306ec94dbc5SRasesh Mody * 307ec94dbc5SRasesh Mody * @param return ECORE_SUCCESS upon success. 308ec94dbc5SRasesh Mody */ 309ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_resume(struct ecore_hwfn *p_hwfn, 310ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt); 311ec94dbc5SRasesh Mody int __ecore_configure_pf_max_bandwidth(struct ecore_hwfn *p_hwfn, 312ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 313ec94dbc5SRasesh Mody struct ecore_mcp_link_state *p_link, 314ec94dbc5SRasesh Mody u8 max_bw); 315ec94dbc5SRasesh Mody int __ecore_configure_pf_min_bandwidth(struct ecore_hwfn *p_hwfn, 316ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 317ec94dbc5SRasesh Mody struct ecore_mcp_link_state *p_link, 318ec94dbc5SRasesh Mody u8 min_bw); 319ec94dbc5SRasesh Mody enum _ecore_status_t ecore_mcp_mask_parities(struct ecore_hwfn *p_hwfn, 320ec94dbc5SRasesh Mody struct ecore_ptt *p_ptt, 321ec94dbc5SRasesh Mody u32 mask_parities); 322301ea2d7SRasesh Mody /** 323301ea2d7SRasesh Mody * @brief - Sends crash mdump related info to the MFW. 324301ea2d7SRasesh Mody * 325301ea2d7SRasesh Mody * @param p_hwfn 326301ea2d7SRasesh Mody * @param p_ptt 327301ea2d7SRasesh Mody * 328301ea2d7SRasesh Mody * @param return ECORE_SUCCESS upon success. 329301ea2d7SRasesh Mody */ 330301ea2d7SRasesh Mody enum _ecore_status_t ecore_mcp_mdump_set_values(struct ecore_hwfn *p_hwfn, 331301ea2d7SRasesh Mody struct ecore_ptt *p_ptt, 332301ea2d7SRasesh Mody u32 epoch); 333301ea2d7SRasesh Mody 334301ea2d7SRasesh Mody /** 335301ea2d7SRasesh Mody * @brief - Triggers a MFW crash dump procedure. 336301ea2d7SRasesh Mody * 337301ea2d7SRasesh Mody * @param p_hwfn 338301ea2d7SRasesh Mody * @param p_ptt 339a064d7d2SRasesh Mody * @param epoch 340301ea2d7SRasesh Mody * 341301ea2d7SRasesh Mody * @param return ECORE_SUCCESS upon success. 342301ea2d7SRasesh Mody */ 343301ea2d7SRasesh Mody enum _ecore_status_t ecore_mcp_mdump_trigger(struct ecore_hwfn *p_hwfn, 344301ea2d7SRasesh Mody struct ecore_ptt *p_ptt); 345301ea2d7SRasesh Mody 346a064d7d2SRasesh Mody struct ecore_mdump_retain_data { 347a064d7d2SRasesh Mody u32 valid; 348a064d7d2SRasesh Mody u32 epoch; 349a064d7d2SRasesh Mody u32 pf; 350a064d7d2SRasesh Mody u32 status; 351a064d7d2SRasesh Mody }; 352a064d7d2SRasesh Mody 353a064d7d2SRasesh Mody /** 354a064d7d2SRasesh Mody * @brief - Gets the mdump retained data from the MFW. 355a064d7d2SRasesh Mody * 356a064d7d2SRasesh Mody * @param p_hwfn 357a064d7d2SRasesh Mody * @param p_ptt 358a064d7d2SRasesh Mody * @param p_mdump_retain 359a064d7d2SRasesh Mody * 360a064d7d2SRasesh Mody * @param return ECORE_SUCCESS upon success. 361a064d7d2SRasesh Mody */ 362a064d7d2SRasesh Mody enum _ecore_status_t 363a064d7d2SRasesh Mody ecore_mcp_mdump_get_retain(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 364a064d7d2SRasesh Mody struct ecore_mdump_retain_data *p_mdump_retain); 365a064d7d2SRasesh Mody 366301ea2d7SRasesh Mody /** 36749ca6a7bSRasesh Mody * @brief - Sets the MFW's max value for the given resource 36849ca6a7bSRasesh Mody * 36949ca6a7bSRasesh Mody * @param p_hwfn 37049ca6a7bSRasesh Mody * @param p_ptt 37149ca6a7bSRasesh Mody * @param res_id 37249ca6a7bSRasesh Mody * @param resc_max_val 37349ca6a7bSRasesh Mody * @param p_mcp_resp 37449ca6a7bSRasesh Mody * 37549ca6a7bSRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - operation was successful. 37649ca6a7bSRasesh Mody */ 37749ca6a7bSRasesh Mody enum _ecore_status_t 37849ca6a7bSRasesh Mody ecore_mcp_set_resc_max_val(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 37949ca6a7bSRasesh Mody enum ecore_resources res_id, u32 resc_max_val, 38049ca6a7bSRasesh Mody u32 *p_mcp_resp); 38149ca6a7bSRasesh Mody 38249ca6a7bSRasesh Mody /** 3839e2f08a4SRasesh Mody * @brief - Gets the MFW allocation info for the given resource 3849e2f08a4SRasesh Mody * 3859e2f08a4SRasesh Mody * @param p_hwfn 3869e2f08a4SRasesh Mody * @param p_ptt 38749ca6a7bSRasesh Mody * @param res_id 3889e2f08a4SRasesh Mody * @param p_mcp_resp 38949ca6a7bSRasesh Mody * @param p_resc_num 39049ca6a7bSRasesh Mody * @param p_resc_start 3919e2f08a4SRasesh Mody * 3929e2f08a4SRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - operation was successful. 3939e2f08a4SRasesh Mody */ 39449ca6a7bSRasesh Mody enum _ecore_status_t 39549ca6a7bSRasesh Mody ecore_mcp_get_resc_info(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 39649ca6a7bSRasesh Mody enum ecore_resources res_id, u32 *p_mcp_resp, 39749ca6a7bSRasesh Mody u32 *p_resc_num, u32 *p_resc_start); 39822d07d93SRasesh Mody 39940c926baSHarish Patil /** 40040c926baSHarish Patil * @brief - Initiates PF FLR 40140c926baSHarish Patil * 40240c926baSHarish Patil * @param p_hwfn 40340c926baSHarish Patil * @param p_ptt 40440c926baSHarish Patil * 40540c926baSHarish Patil * @param return ECORE_SUCCESS upon success. 40640c926baSHarish Patil */ 40740c926baSHarish Patil enum _ecore_status_t ecore_mcp_initiate_pf_flr(struct ecore_hwfn *p_hwfn, 40840c926baSHarish Patil struct ecore_ptt *p_ptt); 40940c926baSHarish Patil 41049ca6a7bSRasesh Mody #define ECORE_MCP_RESC_LOCK_MIN_VAL RESOURCE_DUMP /* 0 */ 41149ca6a7bSRasesh Mody #define ECORE_MCP_RESC_LOCK_MAX_VAL 31 41249ca6a7bSRasesh Mody 41349ca6a7bSRasesh Mody enum ecore_resc_lock { 41449ca6a7bSRasesh Mody ECORE_RESC_LOCK_DBG_DUMP = ECORE_MCP_RESC_LOCK_MIN_VAL, 41549ca6a7bSRasesh Mody /* Locks that the MFW is aware of should be added here downwards */ 41649ca6a7bSRasesh Mody 41749ca6a7bSRasesh Mody /* Ecore only locks should be added here upwards */ 41840a373fcSRasesh Mody ECORE_RESC_LOCK_RESC_ALLOC = ECORE_MCP_RESC_LOCK_MAX_VAL, 41940a373fcSRasesh Mody 42040a373fcSRasesh Mody /* A dummy value to be used for auxiliary functions in need of 42140a373fcSRasesh Mody * returning an 'error' value. 42240a373fcSRasesh Mody */ 42340a373fcSRasesh Mody ECORE_RESC_LOCK_RESC_INVALID, 42449ca6a7bSRasesh Mody }; 42549ca6a7bSRasesh Mody 42649ca6a7bSRasesh Mody struct ecore_resc_lock_params { 42749ca6a7bSRasesh Mody /* Resource number [valid values are 0..31] */ 42849ca6a7bSRasesh Mody u8 resource; 42949ca6a7bSRasesh Mody 43049ca6a7bSRasesh Mody /* Lock timeout value in seconds [default, none or 1..254] */ 43149ca6a7bSRasesh Mody u8 timeout; 4328a20e270SRasesh Mody #define ECORE_MCP_RESC_LOCK_TO_DEFAULT 0 4338a20e270SRasesh Mody #define ECORE_MCP_RESC_LOCK_TO_NONE 255 4348a20e270SRasesh Mody 43549ca6a7bSRasesh Mody /* Number of times to retry locking */ 43649ca6a7bSRasesh Mody u8 retry_num; 43740a373fcSRasesh Mody #define ECORE_MCP_RESC_LOCK_RETRY_CNT_DFLT 10 43849ca6a7bSRasesh Mody 43949ca6a7bSRasesh Mody /* The interval in usec between retries */ 44049ca6a7bSRasesh Mody u16 retry_interval; 44140a373fcSRasesh Mody #define ECORE_MCP_RESC_LOCK_RETRY_VAL_DFLT 10000 44249ca6a7bSRasesh Mody 44349ca6a7bSRasesh Mody /* Use sleep or delay between retries */ 44449ca6a7bSRasesh Mody bool sleep_b4_retry; 44549ca6a7bSRasesh Mody 44649ca6a7bSRasesh Mody /* Will be set as true if the resource is free and granted */ 44749ca6a7bSRasesh Mody bool b_granted; 44849ca6a7bSRasesh Mody 44949ca6a7bSRasesh Mody /* Will be filled with the resource owner. 45049ca6a7bSRasesh Mody * [0..15 = PF0-15, 16 = MFW, 17 = diag over serial] 45149ca6a7bSRasesh Mody */ 45249ca6a7bSRasesh Mody u8 owner; 45349ca6a7bSRasesh Mody }; 45449ca6a7bSRasesh Mody 4558a20e270SRasesh Mody /** 4568a20e270SRasesh Mody * @brief Acquires MFW generic resource lock 4578a20e270SRasesh Mody * 4588a20e270SRasesh Mody * @param p_hwfn 4598a20e270SRasesh Mody * @param p_ptt 46049ca6a7bSRasesh Mody * @param p_params 4618a20e270SRasesh Mody * 4628a20e270SRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - operation was successful. 4638a20e270SRasesh Mody */ 46449ca6a7bSRasesh Mody enum _ecore_status_t 46549ca6a7bSRasesh Mody ecore_mcp_resc_lock(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 46649ca6a7bSRasesh Mody struct ecore_resc_lock_params *p_params); 46749ca6a7bSRasesh Mody 46849ca6a7bSRasesh Mody struct ecore_resc_unlock_params { 46949ca6a7bSRasesh Mody /* Resource number [valid values are 0..31] */ 47049ca6a7bSRasesh Mody u8 resource; 47149ca6a7bSRasesh Mody 47249ca6a7bSRasesh Mody /* Allow to release a resource even if belongs to another PF */ 47349ca6a7bSRasesh Mody bool b_force; 47449ca6a7bSRasesh Mody 47549ca6a7bSRasesh Mody /* Will be set as true if the resource is released */ 47649ca6a7bSRasesh Mody bool b_released; 47749ca6a7bSRasesh Mody }; 4788a20e270SRasesh Mody 4798a20e270SRasesh Mody /** 4808a20e270SRasesh Mody * @brief Releases MFW generic resource lock 4818a20e270SRasesh Mody * 4828a20e270SRasesh Mody * @param p_hwfn 4838a20e270SRasesh Mody * @param p_ptt 48449ca6a7bSRasesh Mody * @param p_params 4858a20e270SRasesh Mody * 4868a20e270SRasesh Mody * @return enum _ecore_status_t - ECORE_SUCCESS - operation was successful. 4878a20e270SRasesh Mody */ 48849ca6a7bSRasesh Mody enum _ecore_status_t 48949ca6a7bSRasesh Mody ecore_mcp_resc_unlock(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 49049ca6a7bSRasesh Mody struct ecore_resc_unlock_params *p_params); 4918a20e270SRasesh Mody 492652ee28aSRasesh Mody /** 49340a373fcSRasesh Mody * @brief - default initialization for lock/unlock resource structs 49440a373fcSRasesh Mody * 49540a373fcSRasesh Mody * @param p_lock - lock params struct to be initialized; Can be OSAL_NULL 49640a373fcSRasesh Mody * @param p_unlock - unlock params struct to be initialized; Can be OSAL_NULL 49740a373fcSRasesh Mody * @param resource - the requested resource 49840a373fcSRasesh Mody * @paral b_is_permanent - disable retries & aging when set 49940a373fcSRasesh Mody */ 50030ecf673SRasesh Mody void ecore_mcp_resc_lock_default_init(struct ecore_resc_lock_params *p_lock, 50140a373fcSRasesh Mody struct ecore_resc_unlock_params *p_unlock, 50240a373fcSRasesh Mody enum ecore_resc_lock resource, 50340a373fcSRasesh Mody bool b_is_permanent); 50440a373fcSRasesh Mody 50540a373fcSRasesh Mody /** 506652ee28aSRasesh Mody * @brief Learn of supported MFW features; To be done during early init 507652ee28aSRasesh Mody * 508652ee28aSRasesh Mody * @param p_hwfn 509652ee28aSRasesh Mody * @param p_ptt 510652ee28aSRasesh Mody */ 511652ee28aSRasesh Mody enum _ecore_status_t ecore_mcp_get_capabilities(struct ecore_hwfn *p_hwfn, 512652ee28aSRasesh Mody struct ecore_ptt *p_ptt); 513652ee28aSRasesh Mody 514652ee28aSRasesh Mody /** 515652ee28aSRasesh Mody * @brief Inform MFW of set of features supported by driver. Should be done 516652ee28aSRasesh Mody * inside the contet of the LOAD_REQ. 517652ee28aSRasesh Mody * 518652ee28aSRasesh Mody * @param p_hwfn 519652ee28aSRasesh Mody * @param p_ptt 520652ee28aSRasesh Mody */ 521652ee28aSRasesh Mody enum _ecore_status_t ecore_mcp_set_capabilities(struct ecore_hwfn *p_hwfn, 522652ee28aSRasesh Mody struct ecore_ptt *p_ptt); 523652ee28aSRasesh Mody 524f5940e7dSRasesh Mody enum ecore_mcp_drv_attr_cmd { 525f5940e7dSRasesh Mody ECORE_MCP_DRV_ATTR_CMD_READ, 526f5940e7dSRasesh Mody ECORE_MCP_DRV_ATTR_CMD_WRITE, 527f5940e7dSRasesh Mody ECORE_MCP_DRV_ATTR_CMD_READ_CLEAR, 528f5940e7dSRasesh Mody ECORE_MCP_DRV_ATTR_CMD_CLEAR, 529f5940e7dSRasesh Mody }; 530f5940e7dSRasesh Mody 531f5940e7dSRasesh Mody struct ecore_mcp_drv_attr { 532f5940e7dSRasesh Mody enum ecore_mcp_drv_attr_cmd attr_cmd; 533f5940e7dSRasesh Mody u32 attr_num; 534f5940e7dSRasesh Mody 535f5940e7dSRasesh Mody /* R/RC - will be set with the read value 536f5940e7dSRasesh Mody * W - should hold the required value to be written 537f5940e7dSRasesh Mody * C - DC 538f5940e7dSRasesh Mody */ 539f5940e7dSRasesh Mody u32 val; 540f5940e7dSRasesh Mody 541f5940e7dSRasesh Mody /* W - mask/offset to be applied on the given value 542f5940e7dSRasesh Mody * R/RC/C - DC 543f5940e7dSRasesh Mody */ 544f5940e7dSRasesh Mody u32 mask; 545f5940e7dSRasesh Mody u32 offset; 546f5940e7dSRasesh Mody }; 547f5940e7dSRasesh Mody 548f5940e7dSRasesh Mody /** 549f5940e7dSRasesh Mody * @brief Handle the drivers' attributes that are kept by the MFW. 550f5940e7dSRasesh Mody * 551f5940e7dSRasesh Mody * @param p_hwfn 552f5940e7dSRasesh Mody * @param p_ptt 553f5940e7dSRasesh Mody * @param p_drv_attr 554f5940e7dSRasesh Mody */ 555f5940e7dSRasesh Mody enum _ecore_status_t 556f5940e7dSRasesh Mody ecore_mcp_drv_attribute(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 557f5940e7dSRasesh Mody struct ecore_mcp_drv_attr *p_drv_attr); 558f5940e7dSRasesh Mody 55947af7019SRasesh Mody /** 56047af7019SRasesh Mody * @brief Read ufp config from the shared memory. 56147af7019SRasesh Mody * 56247af7019SRasesh Mody * @param p_hwfn 56347af7019SRasesh Mody * @param p_ptt 56447af7019SRasesh Mody */ 56547af7019SRasesh Mody void 56647af7019SRasesh Mody ecore_mcp_read_ufp_config(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt); 56747af7019SRasesh Mody 5682fdeb693SRasesh Mody void ecore_mcp_wol_wr(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 5692fdeb693SRasesh Mody u32 offset, u32 val); 5702fdeb693SRasesh Mody 5713eed444aSRasesh Mody /** 5723eed444aSRasesh Mody * @brief Get the engine affinity configuration. 5733eed444aSRasesh Mody * 5743eed444aSRasesh Mody * @param p_hwfn 5753eed444aSRasesh Mody * @param p_ptt 5763eed444aSRasesh Mody */ 5773eed444aSRasesh Mody enum _ecore_status_t ecore_mcp_get_engine_config(struct ecore_hwfn *p_hwfn, 5783eed444aSRasesh Mody struct ecore_ptt *p_ptt); 5793eed444aSRasesh Mody 5803eed444aSRasesh Mody /** 5813eed444aSRasesh Mody * @brief Get the PPFID bitmap. 5823eed444aSRasesh Mody * 5833eed444aSRasesh Mody * @param p_hwfn 5843eed444aSRasesh Mody * @param p_ptt 5853eed444aSRasesh Mody */ 5863eed444aSRasesh Mody enum _ecore_status_t ecore_mcp_get_ppfid_bitmap(struct ecore_hwfn *p_hwfn, 5873eed444aSRasesh Mody struct ecore_ptt *p_ptt); 5883eed444aSRasesh Mody 589ec94dbc5SRasesh Mody #endif /* __ECORE_MCP_H__ */ 590