.. | .. |
---|
| 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, |
---|