| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) |
|---|
| 1 | 2 | /* QLogic qed NIC Driver |
|---|
| 2 | 3 | * Copyright (c) 2015-2017 QLogic Corporation |
|---|
| 3 | | - * |
|---|
| 4 | | - * This software is available to you under a choice of one of two |
|---|
| 5 | | - * licenses. You may choose to be licensed under the terms of the GNU |
|---|
| 6 | | - * General Public License (GPL) Version 2, available from the file |
|---|
| 7 | | - * COPYING in the main directory of this source tree, or the |
|---|
| 8 | | - * OpenIB.org BSD license below: |
|---|
| 9 | | - * |
|---|
| 10 | | - * Redistribution and use in source and binary forms, with or |
|---|
| 11 | | - * without modification, are permitted provided that the following |
|---|
| 12 | | - * conditions are met: |
|---|
| 13 | | - * |
|---|
| 14 | | - * - Redistributions of source code must retain the above |
|---|
| 15 | | - * copyright notice, this list of conditions and the following |
|---|
| 16 | | - * disclaimer. |
|---|
| 17 | | - * |
|---|
| 18 | | - * - Redistributions in binary form must reproduce the above |
|---|
| 19 | | - * copyright notice, this list of conditions and the following |
|---|
| 20 | | - * disclaimer in the documentation and /or other materials |
|---|
| 21 | | - * provided with the distribution. |
|---|
| 22 | | - * |
|---|
| 23 | | - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|---|
| 24 | | - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|---|
| 25 | | - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|---|
| 26 | | - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
|---|
| 27 | | - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
|---|
| 28 | | - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
|---|
| 29 | | - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|---|
| 30 | | - * SOFTWARE. |
|---|
| 4 | + * Copyright (c) 2019-2020 Marvell International Ltd. |
|---|
| 31 | 5 | */ |
|---|
| 32 | 6 | |
|---|
| 33 | 7 | #include <linux/types.h> |
|---|
| .. | .. |
|---|
| 121 | 95 | struct qed_cxt_info cxt_info; |
|---|
| 122 | 96 | u32 dummy_cid; |
|---|
| 123 | 97 | int rc = 0; |
|---|
| 124 | | - u16 tmp; |
|---|
| 98 | + __le16 tmp; |
|---|
| 125 | 99 | u8 i; |
|---|
| 126 | 100 | |
|---|
| 127 | 101 | /* Get SPQ entry */ |
|---|
| .. | .. |
|---|
| 167 | 141 | goto err; |
|---|
| 168 | 142 | } |
|---|
| 169 | 143 | p_cxt = cxt_info.p_cxt; |
|---|
| 144 | + memset(p_cxt, 0, sizeof(*p_cxt)); |
|---|
| 145 | + |
|---|
| 170 | 146 | SET_FIELD(p_cxt->tstorm_ag_context.flags3, |
|---|
| 171 | 147 | E4_TSTORM_FCOE_CONN_AG_CTX_DUMMY_TIMER_CF_EN, 1); |
|---|
| 172 | 148 | |
|---|
| .. | .. |
|---|
| 186 | 162 | tmp = cpu_to_le16(fcoe_pf_params->cmdq_num_entries); |
|---|
| 187 | 163 | p_data->q_params.cmdq_num_entries = tmp; |
|---|
| 188 | 164 | |
|---|
| 189 | | - tmp = fcoe_pf_params->num_cqs; |
|---|
| 190 | | - p_data->q_params.num_queues = (u8)tmp; |
|---|
| 165 | + p_data->q_params.num_queues = fcoe_pf_params->num_cqs; |
|---|
| 191 | 166 | |
|---|
| 192 | | - tmp = (u16)p_hwfn->hw_info.resc_start[QED_CMDQS_CQS]; |
|---|
| 193 | | - p_data->q_params.queue_relative_offset = (u8)tmp; |
|---|
| 167 | + tmp = (__force __le16)p_hwfn->hw_info.resc_start[QED_CMDQS_CQS]; |
|---|
| 168 | + p_data->q_params.queue_relative_offset = (__force u8)tmp; |
|---|
| 194 | 169 | |
|---|
| 195 | 170 | for (i = 0; i < fcoe_pf_params->num_cqs; i++) { |
|---|
| 196 | | - u16 igu_sb_id; |
|---|
| 197 | | - |
|---|
| 198 | | - igu_sb_id = qed_get_igu_sb_id(p_hwfn, i); |
|---|
| 199 | | - tmp = cpu_to_le16(igu_sb_id); |
|---|
| 171 | + tmp = cpu_to_le16(qed_get_igu_sb_id(p_hwfn, i)); |
|---|
| 200 | 172 | p_data->q_params.cq_cmdq_sb_num_arr[i] = tmp; |
|---|
| 201 | 173 | } |
|---|
| 202 | 174 | |
|---|
| .. | .. |
|---|
| 209 | 181 | fcoe_pf_params->bdq_pbl_base_addr[BDQ_ID_RQ]); |
|---|
| 210 | 182 | p_data->q_params.bdq_pbl_num_entries[BDQ_ID_RQ] = |
|---|
| 211 | 183 | fcoe_pf_params->bdq_pbl_num_entries[BDQ_ID_RQ]; |
|---|
| 212 | | - tmp = fcoe_pf_params->bdq_xoff_threshold[BDQ_ID_RQ]; |
|---|
| 213 | | - p_data->q_params.bdq_xoff_threshold[BDQ_ID_RQ] = cpu_to_le16(tmp); |
|---|
| 214 | | - tmp = fcoe_pf_params->bdq_xon_threshold[BDQ_ID_RQ]; |
|---|
| 215 | | - p_data->q_params.bdq_xon_threshold[BDQ_ID_RQ] = cpu_to_le16(tmp); |
|---|
| 184 | + tmp = cpu_to_le16(fcoe_pf_params->bdq_xoff_threshold[BDQ_ID_RQ]); |
|---|
| 185 | + p_data->q_params.bdq_xoff_threshold[BDQ_ID_RQ] = tmp; |
|---|
| 186 | + tmp = cpu_to_le16(fcoe_pf_params->bdq_xon_threshold[BDQ_ID_RQ]); |
|---|
| 187 | + p_data->q_params.bdq_xon_threshold[BDQ_ID_RQ] = tmp; |
|---|
| 216 | 188 | |
|---|
| 217 | 189 | DMA_REGPAIR_LE(p_data->q_params.bdq_pbl_base_address[BDQ_ID_IMM_DATA], |
|---|
| 218 | 190 | fcoe_pf_params->bdq_pbl_base_addr[BDQ_ID_IMM_DATA]); |
|---|
| 219 | 191 | p_data->q_params.bdq_pbl_num_entries[BDQ_ID_IMM_DATA] = |
|---|
| 220 | 192 | fcoe_pf_params->bdq_pbl_num_entries[BDQ_ID_IMM_DATA]; |
|---|
| 221 | | - tmp = fcoe_pf_params->bdq_xoff_threshold[BDQ_ID_IMM_DATA]; |
|---|
| 222 | | - p_data->q_params.bdq_xoff_threshold[BDQ_ID_IMM_DATA] = cpu_to_le16(tmp); |
|---|
| 223 | | - tmp = fcoe_pf_params->bdq_xon_threshold[BDQ_ID_IMM_DATA]; |
|---|
| 224 | | - p_data->q_params.bdq_xon_threshold[BDQ_ID_IMM_DATA] = cpu_to_le16(tmp); |
|---|
| 225 | | - tmp = fcoe_pf_params->rq_buffer_size; |
|---|
| 226 | | - p_data->q_params.rq_buffer_size = cpu_to_le16(tmp); |
|---|
| 193 | + tmp = cpu_to_le16(fcoe_pf_params->bdq_xoff_threshold[BDQ_ID_IMM_DATA]); |
|---|
| 194 | + p_data->q_params.bdq_xoff_threshold[BDQ_ID_IMM_DATA] = tmp; |
|---|
| 195 | + tmp = cpu_to_le16(fcoe_pf_params->bdq_xon_threshold[BDQ_ID_IMM_DATA]); |
|---|
| 196 | + p_data->q_params.bdq_xon_threshold[BDQ_ID_IMM_DATA] = tmp; |
|---|
| 197 | + tmp = cpu_to_le16(fcoe_pf_params->rq_buffer_size); |
|---|
| 198 | + p_data->q_params.rq_buffer_size = tmp; |
|---|
| 227 | 199 | |
|---|
| 228 | 200 | if (fcoe_pf_params->is_target) { |
|---|
| 229 | 201 | SET_FIELD(p_data->q_params.q_validity, |
|---|
| .. | .. |
|---|
| 257 | 229 | struct fcoe_conn_offload_ramrod_data *p_data; |
|---|
| 258 | 230 | struct qed_spq_entry *p_ent = NULL; |
|---|
| 259 | 231 | struct qed_sp_init_data init_data; |
|---|
| 260 | | - u16 physical_q0, tmp; |
|---|
| 232 | + u16 physical_q0; |
|---|
| 233 | + __le16 tmp; |
|---|
| 261 | 234 | int rc; |
|---|
| 262 | 235 | |
|---|
| 263 | 236 | /* Get SPQ entry */ |
|---|
| .. | .. |
|---|
| 278 | 251 | |
|---|
| 279 | 252 | /* Transmission PQ is the first of the PF */ |
|---|
| 280 | 253 | physical_q0 = qed_get_cm_pq_idx(p_hwfn, PQ_FLAGS_OFLD); |
|---|
| 281 | | - p_conn->physical_q0 = cpu_to_le16(physical_q0); |
|---|
| 254 | + p_conn->physical_q0 = physical_q0; |
|---|
| 282 | 255 | p_data->physical_q0 = cpu_to_le16(physical_q0); |
|---|
| 283 | 256 | |
|---|
| 284 | 257 | p_data->conn_id = cpu_to_le16(p_conn->conn_id); |
|---|
| .. | .. |
|---|
| 577 | 550 | void qed_fcoe_setup(struct qed_hwfn *p_hwfn) |
|---|
| 578 | 551 | { |
|---|
| 579 | 552 | struct e4_fcoe_task_context *p_task_ctx = NULL; |
|---|
| 553 | + u32 i, lc; |
|---|
| 580 | 554 | int rc; |
|---|
| 581 | | - u32 i; |
|---|
| 582 | 555 | |
|---|
| 583 | 556 | spin_lock_init(&p_hwfn->p_fcoe_info->lock); |
|---|
| 584 | 557 | for (i = 0; i < p_hwfn->pf_params.fcoe_pf_params.num_tasks; i++) { |
|---|
| .. | .. |
|---|
| 589 | 562 | continue; |
|---|
| 590 | 563 | |
|---|
| 591 | 564 | memset(p_task_ctx, 0, sizeof(struct e4_fcoe_task_context)); |
|---|
| 592 | | - SET_FIELD(p_task_ctx->timer_context.logical_client_0, |
|---|
| 593 | | - TIMERS_CONTEXT_VALIDLC0, 1); |
|---|
| 594 | | - SET_FIELD(p_task_ctx->timer_context.logical_client_1, |
|---|
| 595 | | - TIMERS_CONTEXT_VALIDLC1, 1); |
|---|
| 565 | + |
|---|
| 566 | + lc = 0; |
|---|
| 567 | + SET_FIELD(lc, TIMERS_CONTEXT_VALIDLC0, 1); |
|---|
| 568 | + p_task_ctx->timer_context.logical_client_0 = cpu_to_le32(lc); |
|---|
| 569 | + |
|---|
| 570 | + lc = 0; |
|---|
| 571 | + SET_FIELD(lc, TIMERS_CONTEXT_VALIDLC1, 1); |
|---|
| 572 | + p_task_ctx->timer_context.logical_client_1 = cpu_to_le32(lc); |
|---|
| 573 | + |
|---|
| 596 | 574 | SET_FIELD(p_task_ctx->tstorm_ag_context.flags0, |
|---|
| 597 | 575 | E4_TSTORM_FCOE_TASK_AG_CTX_CONNECTION_TYPE, 1); |
|---|
| 598 | 576 | } |
|---|
| .. | .. |
|---|
| 745 | 723 | static int qed_fill_fcoe_dev_info(struct qed_dev *cdev, |
|---|
| 746 | 724 | struct qed_dev_fcoe_info *info) |
|---|
| 747 | 725 | { |
|---|
| 748 | | - struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev); |
|---|
| 726 | + struct qed_hwfn *hwfn = QED_AFFIN_HWFN(cdev); |
|---|
| 749 | 727 | int rc; |
|---|
| 750 | 728 | |
|---|
| 751 | 729 | memset(info, 0, sizeof(*info)); |
|---|
| .. | .. |
|---|
| 806 | 784 | return -EINVAL; |
|---|
| 807 | 785 | } |
|---|
| 808 | 786 | |
|---|
| 809 | | - p_ptt = qed_ptt_acquire(QED_LEADING_HWFN(cdev)); |
|---|
| 787 | + p_ptt = qed_ptt_acquire(QED_AFFIN_HWFN(cdev)); |
|---|
| 810 | 788 | if (!p_ptt) |
|---|
| 811 | 789 | return -EAGAIN; |
|---|
| 812 | 790 | |
|---|
| 813 | 791 | /* Stop the fcoe */ |
|---|
| 814 | | - rc = qed_sp_fcoe_func_stop(QED_LEADING_HWFN(cdev), p_ptt, |
|---|
| 792 | + rc = qed_sp_fcoe_func_stop(QED_AFFIN_HWFN(cdev), p_ptt, |
|---|
| 815 | 793 | QED_SPQ_MODE_EBLOCK, NULL); |
|---|
| 816 | 794 | cdev->flags &= ~QED_FLAG_STORAGE_STARTED; |
|---|
| 817 | | - qed_ptt_release(QED_LEADING_HWFN(cdev), p_ptt); |
|---|
| 795 | + qed_ptt_release(QED_AFFIN_HWFN(cdev), p_ptt); |
|---|
| 818 | 796 | |
|---|
| 819 | 797 | return rc; |
|---|
| 820 | 798 | } |
|---|
| .. | .. |
|---|
| 828 | 806 | return 0; |
|---|
| 829 | 807 | } |
|---|
| 830 | 808 | |
|---|
| 831 | | - rc = qed_sp_fcoe_func_start(QED_LEADING_HWFN(cdev), |
|---|
| 832 | | - QED_SPQ_MODE_EBLOCK, NULL); |
|---|
| 809 | + rc = qed_sp_fcoe_func_start(QED_AFFIN_HWFN(cdev), QED_SPQ_MODE_EBLOCK, |
|---|
| 810 | + NULL); |
|---|
| 833 | 811 | if (rc) { |
|---|
| 834 | 812 | DP_NOTICE(cdev, "Failed to start fcoe\n"); |
|---|
| 835 | 813 | return rc; |
|---|
| .. | .. |
|---|
| 849 | 827 | return -ENOMEM; |
|---|
| 850 | 828 | } |
|---|
| 851 | 829 | |
|---|
| 852 | | - rc = qed_cxt_get_tid_mem_info(QED_LEADING_HWFN(cdev), tid_info); |
|---|
| 830 | + rc = qed_cxt_get_tid_mem_info(QED_AFFIN_HWFN(cdev), tid_info); |
|---|
| 853 | 831 | if (rc) { |
|---|
| 854 | 832 | DP_NOTICE(cdev, "Failed to gather task information\n"); |
|---|
| 855 | 833 | qed_fcoe_stop(cdev); |
|---|
| .. | .. |
|---|
| 884 | 862 | } |
|---|
| 885 | 863 | |
|---|
| 886 | 864 | /* Acquire the connection */ |
|---|
| 887 | | - rc = qed_fcoe_acquire_connection(QED_LEADING_HWFN(cdev), NULL, |
|---|
| 865 | + rc = qed_fcoe_acquire_connection(QED_AFFIN_HWFN(cdev), NULL, |
|---|
| 888 | 866 | &hash_con->con); |
|---|
| 889 | 867 | if (rc) { |
|---|
| 890 | 868 | DP_NOTICE(cdev, "Failed to acquire Connection\n"); |
|---|
| .. | .. |
|---|
| 898 | 876 | hash_add(cdev->connections, &hash_con->node, *handle); |
|---|
| 899 | 877 | |
|---|
| 900 | 878 | if (p_doorbell) |
|---|
| 901 | | - *p_doorbell = qed_fcoe_get_db_addr(QED_LEADING_HWFN(cdev), |
|---|
| 879 | + *p_doorbell = qed_fcoe_get_db_addr(QED_AFFIN_HWFN(cdev), |
|---|
| 902 | 880 | *handle); |
|---|
| 903 | 881 | |
|---|
| 904 | 882 | return 0; |
|---|
| .. | .. |
|---|
| 916 | 894 | } |
|---|
| 917 | 895 | |
|---|
| 918 | 896 | hlist_del(&hash_con->node); |
|---|
| 919 | | - qed_fcoe_release_connection(QED_LEADING_HWFN(cdev), hash_con->con); |
|---|
| 897 | + qed_fcoe_release_connection(QED_AFFIN_HWFN(cdev), hash_con->con); |
|---|
| 920 | 898 | kfree(hash_con); |
|---|
| 921 | 899 | |
|---|
| 922 | 900 | return 0; |
|---|
| .. | .. |
|---|
| 971 | 949 | con->d_id.addr_mid = conn_info->d_id.addr_mid; |
|---|
| 972 | 950 | con->d_id.addr_lo = conn_info->d_id.addr_lo; |
|---|
| 973 | 951 | |
|---|
| 974 | | - return qed_sp_fcoe_conn_offload(QED_LEADING_HWFN(cdev), con, |
|---|
| 952 | + return qed_sp_fcoe_conn_offload(QED_AFFIN_HWFN(cdev), con, |
|---|
| 975 | 953 | QED_SPQ_MODE_EBLOCK, NULL); |
|---|
| 976 | 954 | } |
|---|
| 977 | 955 | |
|---|
| .. | .. |
|---|
| 992 | 970 | con = hash_con->con; |
|---|
| 993 | 971 | con->terminate_params = terminate_params; |
|---|
| 994 | 972 | |
|---|
| 995 | | - return qed_sp_fcoe_conn_destroy(QED_LEADING_HWFN(cdev), con, |
|---|
| 973 | + return qed_sp_fcoe_conn_destroy(QED_AFFIN_HWFN(cdev), con, |
|---|
| 996 | 974 | QED_SPQ_MODE_EBLOCK, NULL); |
|---|
| 997 | 975 | } |
|---|
| 998 | 976 | |
|---|
| 999 | 977 | static int qed_fcoe_stats(struct qed_dev *cdev, struct qed_fcoe_stats *stats) |
|---|
| 1000 | 978 | { |
|---|
| 1001 | | - return qed_fcoe_get_stats(QED_LEADING_HWFN(cdev), stats); |
|---|
| 979 | + return qed_fcoe_get_stats(QED_AFFIN_HWFN(cdev), stats); |
|---|
| 1002 | 980 | } |
|---|
| 1003 | 981 | |
|---|
| 1004 | 982 | void qed_get_protocol_stats_fcoe(struct qed_dev *cdev, |
|---|