Deleted Added
full compact
bxe.c (314093) bxe.c (315881)
1/*-
2 * Copyright (c) 2007-2014 QLogic Corporation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24 * THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2007-2014 QLogic Corporation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24 * THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: stable/11/sys/dev/bxe/bxe.c 314093 2017-02-22 08:49:52Z royger $");
28__FBSDID("$FreeBSD: stable/11/sys/dev/bxe/bxe.c 315881 2017-03-24 02:58:20Z davidcs $");
29
29
30#define BXE_DRIVER_VERSION "1.78.89"
30#define BXE_DRIVER_VERSION "1.78.90"
31
32#include "bxe.h"
33#include "ecore_sp.h"
34#include "ecore_init.h"
35#include "ecore_init_ops.h"
36
37#include "57710_int_offsets.h"
38#include "57711_int_offsets.h"

--- 452 unchanged lines hidden (view full) ---

491 { STATS_OFFSET32(mbuf_alloc_rx),
492 4, STATS_FLAGS_FUNC, "mbuf_alloc_rx"},
493 { STATS_OFFSET32(mbuf_alloc_sge),
494 4, STATS_FLAGS_FUNC, "mbuf_alloc_sge"},
495 { STATS_OFFSET32(mbuf_alloc_tpa),
496 4, STATS_FLAGS_FUNC, "mbuf_alloc_tpa"},
497 { STATS_OFFSET32(tx_queue_full_return),
498 4, STATS_FLAGS_FUNC, "tx_queue_full_return"},
31
32#include "bxe.h"
33#include "ecore_sp.h"
34#include "ecore_init.h"
35#include "ecore_init_ops.h"
36
37#include "57710_int_offsets.h"
38#include "57711_int_offsets.h"

--- 452 unchanged lines hidden (view full) ---

491 { STATS_OFFSET32(mbuf_alloc_rx),
492 4, STATS_FLAGS_FUNC, "mbuf_alloc_rx"},
493 { STATS_OFFSET32(mbuf_alloc_sge),
494 4, STATS_FLAGS_FUNC, "mbuf_alloc_sge"},
495 { STATS_OFFSET32(mbuf_alloc_tpa),
496 4, STATS_FLAGS_FUNC, "mbuf_alloc_tpa"},
497 { STATS_OFFSET32(tx_queue_full_return),
498 4, STATS_FLAGS_FUNC, "tx_queue_full_return"},
499 { STATS_OFFSET32(bxe_tx_mq_sc_state_failures),
500 4, STATS_FLAGS_FUNC, "bxe_tx_mq_sc_state_failures"},
499 { STATS_OFFSET32(tx_request_link_down_failures),
500 4, STATS_FLAGS_FUNC, "tx_request_link_down_failures"},
501 { STATS_OFFSET32(bd_avail_too_less_failures),
502 4, STATS_FLAGS_FUNC, "bd_avail_too_less_failures"},
503 { STATS_OFFSET32(tx_mq_not_empty),
501 { STATS_OFFSET32(tx_request_link_down_failures),
502 4, STATS_FLAGS_FUNC, "tx_request_link_down_failures"},
503 { STATS_OFFSET32(bd_avail_too_less_failures),
504 4, STATS_FLAGS_FUNC, "bd_avail_too_less_failures"},
505 { STATS_OFFSET32(tx_mq_not_empty),
504 4, STATS_FLAGS_FUNC, "tx_mq_not_empty"}
506 4, STATS_FLAGS_FUNC, "tx_mq_not_empty"},
507 { STATS_OFFSET32(nsegs_path1_errors),
508 4, STATS_FLAGS_FUNC, "nsegs_path1_errors"},
509 { STATS_OFFSET32(nsegs_path2_errors),
510 4, STATS_FLAGS_FUNC, "nsegs_path2_errors"}
505
511
512
506};
507
508static const struct {
509 uint32_t offset;
510 uint32_t size;
511 char string[STAT_NAME_LEN];
512} bxe_eth_q_stats_arr[] = {
513 { Q_STATS_OFFSET32(total_bytes_received_hi),

--- 97 unchanged lines hidden (view full) ---

611 { Q_STATS_OFFSET32(mbuf_alloc_rx),
612 4, "mbuf_alloc_rx"},
613 { Q_STATS_OFFSET32(mbuf_alloc_sge),
614 4, "mbuf_alloc_sge"},
615 { Q_STATS_OFFSET32(mbuf_alloc_tpa),
616 4, "mbuf_alloc_tpa"},
617 { Q_STATS_OFFSET32(tx_queue_full_return),
618 4, "tx_queue_full_return"},
513};
514
515static const struct {
516 uint32_t offset;
517 uint32_t size;
518 char string[STAT_NAME_LEN];
519} bxe_eth_q_stats_arr[] = {
520 { Q_STATS_OFFSET32(total_bytes_received_hi),

--- 97 unchanged lines hidden (view full) ---

618 { Q_STATS_OFFSET32(mbuf_alloc_rx),
619 4, "mbuf_alloc_rx"},
620 { Q_STATS_OFFSET32(mbuf_alloc_sge),
621 4, "mbuf_alloc_sge"},
622 { Q_STATS_OFFSET32(mbuf_alloc_tpa),
623 4, "mbuf_alloc_tpa"},
624 { Q_STATS_OFFSET32(tx_queue_full_return),
625 4, "tx_queue_full_return"},
626 { Q_STATS_OFFSET32(bxe_tx_mq_sc_state_failures),
627 4, "bxe_tx_mq_sc_state_failures"},
619 { Q_STATS_OFFSET32(tx_request_link_down_failures),
620 4, "tx_request_link_down_failures"},
621 { Q_STATS_OFFSET32(bd_avail_too_less_failures),
622 4, "bd_avail_too_less_failures"},
623 { Q_STATS_OFFSET32(tx_mq_not_empty),
628 { Q_STATS_OFFSET32(tx_request_link_down_failures),
629 4, "tx_request_link_down_failures"},
630 { Q_STATS_OFFSET32(bd_avail_too_less_failures),
631 4, "bd_avail_too_less_failures"},
632 { Q_STATS_OFFSET32(tx_mq_not_empty),
624 4, "tx_mq_not_empty"}
633 4, "tx_mq_not_empty"},
634 { Q_STATS_OFFSET32(nsegs_path1_errors),
635 4, "nsegs_path1_errors"},
636 { Q_STATS_OFFSET32(nsegs_path2_errors),
637 4, "nsegs_path2_errors"}
625
638
639
626};
627
628#define BXE_NUM_ETH_STATS ARRAY_SIZE(bxe_eth_stats_arr)
629#define BXE_NUM_ETH_Q_STATS ARRAY_SIZE(bxe_eth_q_stats_arr)
630
631
632static void bxe_cmng_fns_init(struct bxe_softc *sc,
633 uint8_t read_cfg,

--- 53 unchanged lines hidden (view full) ---

687 uint32_t unload_mode,
688 uint8_t keep_link);
689
690static void bxe_handle_sp_tq(void *context, int pending);
691static void bxe_handle_fp_tq(void *context, int pending);
692
693static int bxe_add_cdev(struct bxe_softc *sc);
694static void bxe_del_cdev(struct bxe_softc *sc);
640};
641
642#define BXE_NUM_ETH_STATS ARRAY_SIZE(bxe_eth_stats_arr)
643#define BXE_NUM_ETH_Q_STATS ARRAY_SIZE(bxe_eth_q_stats_arr)
644
645
646static void bxe_cmng_fns_init(struct bxe_softc *sc,
647 uint8_t read_cfg,

--- 53 unchanged lines hidden (view full) ---

701 uint32_t unload_mode,
702 uint8_t keep_link);
703
704static void bxe_handle_sp_tq(void *context, int pending);
705static void bxe_handle_fp_tq(void *context, int pending);
706
707static int bxe_add_cdev(struct bxe_softc *sc);
708static void bxe_del_cdev(struct bxe_softc *sc);
709int bxe_grc_dump(struct bxe_softc *sc);
695static int bxe_alloc_buf_rings(struct bxe_softc *sc);
696static void bxe_free_buf_rings(struct bxe_softc *sc);
697
698/* calculate crc32 on a buffer (NOTE: crc32_length MUST be aligned to 8) */
699uint32_t
700calc_crc32(uint8_t *crc32_packet,
701 uint32_t crc32_length,
702 uint32_t crc32_seed,

--- 4523 unchanged lines hidden (view full) ---

5226 *m_head = m0;
5227 error = bus_dmamap_load_mbuf_sg(fp->tx_mbuf_tag,
5228 tx_buf->m_map, m0,
5229 segs, &nsegs, BUS_DMA_NOWAIT);
5230 if (error) {
5231 fp->eth_q_stats.tx_dma_mapping_failure++;
5232 /* No sense in trying to defrag/copy chain, drop it. :( */
5233 rc = error;
710static int bxe_alloc_buf_rings(struct bxe_softc *sc);
711static void bxe_free_buf_rings(struct bxe_softc *sc);
712
713/* calculate crc32 on a buffer (NOTE: crc32_length MUST be aligned to 8) */
714uint32_t
715calc_crc32(uint8_t *crc32_packet,
716 uint32_t crc32_length,
717 uint32_t crc32_seed,

--- 4523 unchanged lines hidden (view full) ---

5241 *m_head = m0;
5242 error = bus_dmamap_load_mbuf_sg(fp->tx_mbuf_tag,
5243 tx_buf->m_map, m0,
5244 segs, &nsegs, BUS_DMA_NOWAIT);
5245 if (error) {
5246 fp->eth_q_stats.tx_dma_mapping_failure++;
5247 /* No sense in trying to defrag/copy chain, drop it. :( */
5248 rc = error;
5234 }
5235 else {
5236 /* if the chain is still too long then drop it */
5237 if (__predict_false(nsegs > BXE_MAX_SEGMENTS)) {
5238 bus_dmamap_unload(fp->tx_mbuf_tag, tx_buf->m_map);
5239 rc = ENODEV;
5249 } else {
5250 /* if the chain is still too long then drop it */
5251 if(m0->m_pkthdr.csum_flags & CSUM_TSO) {
5252 /*
5253 * in case TSO is enabled nsegs should be checked against
5254 * BXE_TSO_MAX_SEGMENTS
5255 */
5256 if (__predict_false(nsegs > BXE_TSO_MAX_SEGMENTS)) {
5257 bus_dmamap_unload(fp->tx_mbuf_tag, tx_buf->m_map);
5258 fp->eth_q_stats.nsegs_path1_errors++;
5259 rc = ENODEV;
5260 }
5261 } else {
5262 if (__predict_false(nsegs > BXE_MAX_SEGMENTS)) {
5263 bus_dmamap_unload(fp->tx_mbuf_tag, tx_buf->m_map);
5264 fp->eth_q_stats.nsegs_path2_errors++;
5265 rc = ENODEV;
5266 }
5240 }
5241 }
5242 }
5243 }
5244
5245bxe_tx_encap_continue:
5246
5247 /* Check for errors */

--- 383 unchanged lines hidden (view full) ---

5631 struct mbuf *next;
5632 int depth, rc, tx_count;
5633 uint16_t tx_bd_avail;
5634
5635 rc = tx_count = 0;
5636
5637 BXE_FP_TX_LOCK_ASSERT(fp);
5638
5267 }
5268 }
5269 }
5270 }
5271
5272bxe_tx_encap_continue:
5273
5274 /* Check for errors */

--- 383 unchanged lines hidden (view full) ---

5658 struct mbuf *next;
5659 int depth, rc, tx_count;
5660 uint16_t tx_bd_avail;
5661
5662 rc = tx_count = 0;
5663
5664 BXE_FP_TX_LOCK_ASSERT(fp);
5665
5666 if (sc->state != BXE_STATE_OPEN) {
5667 fp->eth_q_stats.bxe_tx_mq_sc_state_failures++;
5668 return ENETDOWN;
5669 }
5670
5639 if (!tx_br) {
5640 BLOGE(sc, "Multiqueue TX and no buf_ring!\n");
5641 return (EINVAL);
5642 }
5643
5644 if (m != NULL) {
5645 rc = drbr_enqueue(ifp, tx_br, m);
5646 if (rc != 0) {

--- 105 unchanged lines hidden (view full) ---

5752
5753 /* check if flowid is set */
5754
5755 if (BXE_VALID_FLOWID(m))
5756 fp_index = (m->m_pkthdr.flowid % sc->num_queues);
5757
5758 fp = &sc->fp[fp_index];
5759
5671 if (!tx_br) {
5672 BLOGE(sc, "Multiqueue TX and no buf_ring!\n");
5673 return (EINVAL);
5674 }
5675
5676 if (m != NULL) {
5677 rc = drbr_enqueue(ifp, tx_br, m);
5678 if (rc != 0) {

--- 105 unchanged lines hidden (view full) ---

5784
5785 /* check if flowid is set */
5786
5787 if (BXE_VALID_FLOWID(m))
5788 fp_index = (m->m_pkthdr.flowid % sc->num_queues);
5789
5790 fp = &sc->fp[fp_index];
5791
5792 if (sc->state != BXE_STATE_OPEN) {
5793 fp->eth_q_stats.bxe_tx_mq_sc_state_failures++;
5794 return ENETDOWN;
5795 }
5796
5760 if (BXE_FP_TX_TRYLOCK(fp)) {
5761 rc = bxe_tx_mq_start_locked(sc, ifp, fp, m);
5762 BXE_FP_TX_UNLOCK(fp);
5763 } else {
5764 rc = drbr_enqueue(ifp, fp->tx_br, m);
5765 taskqueue_enqueue(fp->tq, &fp->tx_task);
5766 }
5767

--- 6 unchanged lines hidden (view full) ---

5774 struct bxe_softc *sc = if_getsoftc(ifp);
5775 struct bxe_fastpath *fp;
5776 struct mbuf *m;
5777 int i;
5778
5779 for (i = 0; i < sc->num_queues; i++) {
5780 fp = &sc->fp[i];
5781
5797 if (BXE_FP_TX_TRYLOCK(fp)) {
5798 rc = bxe_tx_mq_start_locked(sc, ifp, fp, m);
5799 BXE_FP_TX_UNLOCK(fp);
5800 } else {
5801 rc = drbr_enqueue(ifp, fp->tx_br, m);
5802 taskqueue_enqueue(fp->tq, &fp->tx_task);
5803 }
5804

--- 6 unchanged lines hidden (view full) ---

5811 struct bxe_softc *sc = if_getsoftc(ifp);
5812 struct bxe_fastpath *fp;
5813 struct mbuf *m;
5814 int i;
5815
5816 for (i = 0; i < sc->num_queues; i++) {
5817 fp = &sc->fp[i];
5818
5782 if (fp->state != BXE_FP_STATE_OPEN) {
5819 if (fp->state != BXE_FP_STATE_IRQ) {
5783 BLOGD(sc, DBG_LOAD, "Not clearing fp[%02d] buf_ring (state=%d)\n",
5784 fp->index, fp->state);
5785 continue;
5786 }
5787
5788 if (fp->tx_br != NULL) {
5789 BLOGD(sc, DBG_LOAD, "Clearing fp[%02d] buf_ring\n", fp->index);
5790 BXE_FP_TX_LOCK(fp);

--- 200 unchanged lines hidden (view full) ---

5991
5992 bxe_free_ilt_lines_mem(sc);
5993
5994}
5995
5996static int
5997bxe_alloc_mem(struct bxe_softc *sc)
5998{
5820 BLOGD(sc, DBG_LOAD, "Not clearing fp[%02d] buf_ring (state=%d)\n",
5821 fp->index, fp->state);
5822 continue;
5823 }
5824
5825 if (fp->tx_br != NULL) {
5826 BLOGD(sc, DBG_LOAD, "Clearing fp[%02d] buf_ring\n", fp->index);
5827 BXE_FP_TX_LOCK(fp);

--- 200 unchanged lines hidden (view full) ---

6028
6029 bxe_free_ilt_lines_mem(sc);
6030
6031}
6032
6033static int
6034bxe_alloc_mem(struct bxe_softc *sc)
6035{
6036
5999 int context_size;
6000 int allocated;
6001 int i;
6002
6003 /*
6004 * Allocate memory for CDU context:
6005 * This memory is allocated separately and not in the generic ILT
6006 * functions because CDU differs in few aspects:

--- 978 unchanged lines hidden (view full) ---

6985 uint32_t pause_enabled = 0;
6986 struct host_port_stats *pstats;
6987 int cmng_fns;
6988 struct bxe_fastpath *fp;
6989 int i;
6990
6991 /* Make sure that we are synced with the current statistics */
6992 bxe_stats_handle(sc, STATS_EVENT_STOP);
6037 int context_size;
6038 int allocated;
6039 int i;
6040
6041 /*
6042 * Allocate memory for CDU context:
6043 * This memory is allocated separately and not in the generic ILT
6044 * functions because CDU differs in few aspects:

--- 978 unchanged lines hidden (view full) ---

7023 uint32_t pause_enabled = 0;
7024 struct host_port_stats *pstats;
7025 int cmng_fns;
7026 struct bxe_fastpath *fp;
7027 int i;
7028
7029 /* Make sure that we are synced with the current statistics */
7030 bxe_stats_handle(sc, STATS_EVENT_STOP);
6993
7031 BLOGI(sc, "link_vars phy_flags : %x\n", sc->link_vars.phy_flags);
6994 elink_link_update(&sc->link_params, &sc->link_vars);
6995
6996 if (sc->link_vars.link_up) {
6997
6998 /* dropless flow control */
6999 if (!CHIP_IS_E1(sc) && sc->dropless_fc) {
7000 pause_enabled = 0;
7001

--- 4188 unchanged lines hidden (view full) ---

11190 unsigned long flags = 0;
11191
11192 if (IS_MF_SD(sc)) {
11193 bxe_set_bit(ECORE_Q_FLG_OV, &flags);
11194 }
11195
11196 if (if_getcapenable(sc->ifp) & IFCAP_LRO) {
11197 bxe_set_bit(ECORE_Q_FLG_TPA, &flags);
7032 elink_link_update(&sc->link_params, &sc->link_vars);
7033
7034 if (sc->link_vars.link_up) {
7035
7036 /* dropless flow control */
7037 if (!CHIP_IS_E1(sc) && sc->dropless_fc) {
7038 pause_enabled = 0;
7039

--- 4188 unchanged lines hidden (view full) ---

11228 unsigned long flags = 0;
11229
11230 if (IS_MF_SD(sc)) {
11231 bxe_set_bit(ECORE_Q_FLG_OV, &flags);
11232 }
11233
11234 if (if_getcapenable(sc->ifp) & IFCAP_LRO) {
11235 bxe_set_bit(ECORE_Q_FLG_TPA, &flags);
11236#if __FreeBSD_version >= 800000
11198 bxe_set_bit(ECORE_Q_FLG_TPA_IPV6, &flags);
11237 bxe_set_bit(ECORE_Q_FLG_TPA_IPV6, &flags);
11238#endif
11199 }
11200
11201 if (leading) {
11202 bxe_set_bit(ECORE_Q_FLG_LEADING_RSS, &flags);
11203 bxe_set_bit(ECORE_Q_FLG_MCAST, &flags);
11204 }
11205
11206 bxe_set_bit(ECORE_Q_FLG_VLAN, &flags);

--- 420 unchanged lines hidden (view full) ---

11627 sc->link_params.req_fc_auto_adv = ELINK_FLOW_CTRL_BOTH;
11628 }
11629}
11630
11631static void
11632bxe_calc_fc_adv(struct bxe_softc *sc)
11633{
11634 uint8_t cfg_idx = bxe_get_link_cfg_idx(sc);
11239 }
11240
11241 if (leading) {
11242 bxe_set_bit(ECORE_Q_FLG_LEADING_RSS, &flags);
11243 bxe_set_bit(ECORE_Q_FLG_MCAST, &flags);
11244 }
11245
11246 bxe_set_bit(ECORE_Q_FLG_VLAN, &flags);

--- 420 unchanged lines hidden (view full) ---

11667 sc->link_params.req_fc_auto_adv = ELINK_FLOW_CTRL_BOTH;
11668 }
11669}
11670
11671static void
11672bxe_calc_fc_adv(struct bxe_softc *sc)
11673{
11674 uint8_t cfg_idx = bxe_get_link_cfg_idx(sc);
11675
11676
11677 sc->port.advertising[cfg_idx] &= ~(ADVERTISED_Asym_Pause |
11678 ADVERTISED_Pause);
11679
11635 switch (sc->link_vars.ieee_fc &
11636 MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) {
11680 switch (sc->link_vars.ieee_fc &
11681 MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK) {
11637 case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_NONE:
11638 default:
11639 sc->port.advertising[cfg_idx] &= ~(ADVERTISED_Asym_Pause |
11640 ADVERTISED_Pause);
11641 break;
11642
11643 case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH:
11644 sc->port.advertising[cfg_idx] |= (ADVERTISED_Asym_Pause |
11645 ADVERTISED_Pause);
11646 break;
11647
11648 case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC:
11649 sc->port.advertising[cfg_idx] |= ADVERTISED_Asym_Pause;
11650 break;
11682
11683 case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_BOTH:
11684 sc->port.advertising[cfg_idx] |= (ADVERTISED_Asym_Pause |
11685 ADVERTISED_Pause);
11686 break;
11687
11688 case MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_ASYMMETRIC:
11689 sc->port.advertising[cfg_idx] |= ADVERTISED_Asym_Pause;
11690 break;
11691
11692 default:
11693 break;
11694
11651 }
11652}
11653
11654static uint16_t
11655bxe_get_mf_speed(struct bxe_softc *sc)
11656{
11657 uint16_t line_speed = sc->link_vars.line_speed;
11658 if (IS_MF(sc)) {

--- 65 unchanged lines hidden (view full) ---

11724 if (!memcmp(&cur_data, &sc->last_reported_link, sizeof(cur_data)) ||
11725 (bxe_test_bit(BXE_LINK_REPORT_LINK_DOWN,
11726 &sc->last_reported_link.link_report_flags) &&
11727 bxe_test_bit(BXE_LINK_REPORT_LINK_DOWN,
11728 &cur_data.link_report_flags))) {
11729 return;
11730 }
11731
11695 }
11696}
11697
11698static uint16_t
11699bxe_get_mf_speed(struct bxe_softc *sc)
11700{
11701 uint16_t line_speed = sc->link_vars.line_speed;
11702 if (IS_MF(sc)) {

--- 65 unchanged lines hidden (view full) ---

11768 if (!memcmp(&cur_data, &sc->last_reported_link, sizeof(cur_data)) ||
11769 (bxe_test_bit(BXE_LINK_REPORT_LINK_DOWN,
11770 &sc->last_reported_link.link_report_flags) &&
11771 bxe_test_bit(BXE_LINK_REPORT_LINK_DOWN,
11772 &cur_data.link_report_flags))) {
11773 return;
11774 }
11775
11776 ELINK_DEBUG_P2(sc, "Change in link status : cur_data = %x, last_reported_link = %x\n",
11777 cur_data.link_report_flags, sc->last_reported_link.link_report_flags);
11732 sc->link_cnt++;
11733
11778 sc->link_cnt++;
11779
11780 ELINK_DEBUG_P1(sc, "link status change count = %x\n", sc->link_cnt);
11734 /* report new link params and remember the state for the next time */
11735 memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
11736
11737 if (bxe_test_bit(BXE_LINK_REPORT_LINK_DOWN,
11738 &cur_data.link_report_flags)) {
11739 if_link_state_change(sc->ifp, LINK_STATE_DOWN);
11781 /* report new link params and remember the state for the next time */
11782 memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
11783
11784 if (bxe_test_bit(BXE_LINK_REPORT_LINK_DOWN,
11785 &cur_data.link_report_flags)) {
11786 if_link_state_change(sc->ifp, LINK_STATE_DOWN);
11740 BLOGI(sc, "NIC Link is Down\n");
11741 } else {
11742 const char *duplex;
11743 const char *flow;
11744
11745 if (bxe_test_and_clear_bit(BXE_LINK_REPORT_FULL_DUPLEX,
11746 &cur_data.link_report_flags)) {
11747 duplex = "full";
11787 } else {
11788 const char *duplex;
11789 const char *flow;
11790
11791 if (bxe_test_and_clear_bit(BXE_LINK_REPORT_FULL_DUPLEX,
11792 &cur_data.link_report_flags)) {
11793 duplex = "full";
11794 ELINK_DEBUG_P0(sc, "link set to full duplex\n");
11748 } else {
11749 duplex = "half";
11795 } else {
11796 duplex = "half";
11797 ELINK_DEBUG_P0(sc, "link set to half duplex\n");
11750 }
11751
11752 /*
11753 * Handle the FC at the end so that only these flags would be
11754 * possibly set. This way we may easily check if there is no FC
11755 * enabled.
11756 */
11757 if (cur_data.link_report_flags) {

--- 884 unchanged lines hidden (view full) ---

12642 bxe_ifmedia_status);
12643
12644 /* set the default interface values */
12645 ifmedia_add(&sc->ifmedia, (IFM_ETHER | IFM_FDX | sc->media), 0, NULL);
12646 ifmedia_add(&sc->ifmedia, (IFM_ETHER | IFM_AUTO), 0, NULL);
12647 ifmedia_set(&sc->ifmedia, (IFM_ETHER | IFM_AUTO));
12648
12649 sc->ifmedia.ifm_media = sc->ifmedia.ifm_cur->ifm_media; /* XXX ? */
11798 }
11799
11800 /*
11801 * Handle the FC at the end so that only these flags would be
11802 * possibly set. This way we may easily check if there is no FC
11803 * enabled.
11804 */
11805 if (cur_data.link_report_flags) {

--- 884 unchanged lines hidden (view full) ---

12690 bxe_ifmedia_status);
12691
12692 /* set the default interface values */
12693 ifmedia_add(&sc->ifmedia, (IFM_ETHER | IFM_FDX | sc->media), 0, NULL);
12694 ifmedia_add(&sc->ifmedia, (IFM_ETHER | IFM_AUTO), 0, NULL);
12695 ifmedia_set(&sc->ifmedia, (IFM_ETHER | IFM_AUTO));
12696
12697 sc->ifmedia.ifm_media = sc->ifmedia.ifm_cur->ifm_media; /* XXX ? */
12698 BLOGI(sc, "IFMEDIA flags : %x\n", sc->ifmedia.ifm_media);
12650
12651 /* allocate the ifnet structure */
12652 if ((ifp = if_gethandle(IFT_ETHER)) == NULL) {
12653 BLOGE(sc, "Interface allocation failed!\n");
12654 return (ENXIO);
12655 }
12656
12657 if_setsoftc(ifp, sc);

--- 1331 unchanged lines hidden (view full) ---

13989 if (!(sc->link_params.speed_cap_mask[idx] &
13990 PORT_HW_CFG_SPEED_CAPABILITY_D0_20G)) {
13991 sc->port.supported[idx] &= ~ELINK_SUPPORTED_20000baseKR2_Full;
13992 }
13993 }
13994
13995 BLOGD(sc, DBG_LOAD, "PHY supported 0=0x%08x 1=0x%08x\n",
13996 sc->port.supported[0], sc->port.supported[1]);
12699
12700 /* allocate the ifnet structure */
12701 if ((ifp = if_gethandle(IFT_ETHER)) == NULL) {
12702 BLOGE(sc, "Interface allocation failed!\n");
12703 return (ENXIO);
12704 }
12705
12706 if_setsoftc(ifp, sc);

--- 1331 unchanged lines hidden (view full) ---

14038 if (!(sc->link_params.speed_cap_mask[idx] &
14039 PORT_HW_CFG_SPEED_CAPABILITY_D0_20G)) {
14040 sc->port.supported[idx] &= ~ELINK_SUPPORTED_20000baseKR2_Full;
14041 }
14042 }
14043
14044 BLOGD(sc, DBG_LOAD, "PHY supported 0=0x%08x 1=0x%08x\n",
14045 sc->port.supported[0], sc->port.supported[1]);
14046 ELINK_DEBUG_P2(sc, "PHY supported 0=0x%08x 1=0x%08x\n",
14047 sc->port.supported[0], sc->port.supported[1]);
13997}
13998
13999static void
14000bxe_link_settings_requested(struct bxe_softc *sc)
14001{
14002 uint32_t link_config;
14003 uint32_t idx;
14004 uint32_t cfg_size = 0;

--- 48 unchanged lines hidden (view full) ---

14053 break;
14054
14055 case PORT_FEATURE_LINK_SPEED_10M_HALF:
14056 if (sc->port.supported[idx] & ELINK_SUPPORTED_10baseT_Half) {
14057 sc->link_params.req_line_speed[idx] = ELINK_SPEED_10;
14058 sc->link_params.req_duplex[idx] = DUPLEX_HALF;
14059 sc->port.advertising[idx] |= (ADVERTISED_10baseT_Half |
14060 ADVERTISED_TP);
14048}
14049
14050static void
14051bxe_link_settings_requested(struct bxe_softc *sc)
14052{
14053 uint32_t link_config;
14054 uint32_t idx;
14055 uint32_t cfg_size = 0;

--- 48 unchanged lines hidden (view full) ---

14104 break;
14105
14106 case PORT_FEATURE_LINK_SPEED_10M_HALF:
14107 if (sc->port.supported[idx] & ELINK_SUPPORTED_10baseT_Half) {
14108 sc->link_params.req_line_speed[idx] = ELINK_SPEED_10;
14109 sc->link_params.req_duplex[idx] = DUPLEX_HALF;
14110 sc->port.advertising[idx] |= (ADVERTISED_10baseT_Half |
14111 ADVERTISED_TP);
14112 ELINK_DEBUG_P1(sc, "driver requesting DUPLEX_HALF req_duplex = %x!\n",
14113 sc->link_params.req_duplex[idx]);
14061 } else {
14062 BLOGE(sc, "Invalid NVRAM config link_config=0x%08x "
14063 "speed_cap_mask=0x%08x\n",
14064 link_config, sc->link_params.speed_cap_mask[idx]);
14065 return;
14066 }
14067 break;
14068

--- 88 unchanged lines hidden (view full) ---

14157 }
14158
14159 BLOGD(sc, DBG_LOAD, "req_line_speed=%d req_duplex=%d "
14160 "req_flow_ctrl=0x%x advertising=0x%x\n",
14161 sc->link_params.req_line_speed[idx],
14162 sc->link_params.req_duplex[idx],
14163 sc->link_params.req_flow_ctrl[idx],
14164 sc->port.advertising[idx]);
14114 } else {
14115 BLOGE(sc, "Invalid NVRAM config link_config=0x%08x "
14116 "speed_cap_mask=0x%08x\n",
14117 link_config, sc->link_params.speed_cap_mask[idx]);
14118 return;
14119 }
14120 break;
14121

--- 88 unchanged lines hidden (view full) ---

14210 }
14211
14212 BLOGD(sc, DBG_LOAD, "req_line_speed=%d req_duplex=%d "
14213 "req_flow_ctrl=0x%x advertising=0x%x\n",
14214 sc->link_params.req_line_speed[idx],
14215 sc->link_params.req_duplex[idx],
14216 sc->link_params.req_flow_ctrl[idx],
14217 sc->port.advertising[idx]);
14218 ELINK_DEBUG_P3(sc, "req_line_speed=%d req_duplex=%d "
14219 "advertising=0x%x\n",
14220 sc->link_params.req_line_speed[idx],
14221 sc->link_params.req_duplex[idx],
14222 sc->port.advertising[idx]);
14165 }
14166}
14167
14168static void
14169bxe_get_phy_info(struct bxe_softc *sc)
14170{
14171 uint8_t port = SC_PORT(sc);
14172 uint32_t config = sc->port.config;
14173 uint32_t eee_mode;
14174
14175 /* shmem data already read in bxe_get_shmem_info() */
14176
14223 }
14224}
14225
14226static void
14227bxe_get_phy_info(struct bxe_softc *sc)
14228{
14229 uint8_t port = SC_PORT(sc);
14230 uint32_t config = sc->port.config;
14231 uint32_t eee_mode;
14232
14233 /* shmem data already read in bxe_get_shmem_info() */
14234
14177 BLOGD(sc, DBG_LOAD, "lane_config=0x%08x speed_cap_mask0=0x%08x "
14235 ELINK_DEBUG_P3(sc, "lane_config=0x%08x speed_cap_mask0=0x%08x "
14178 "link_config0=0x%08x\n",
14179 sc->link_params.lane_config,
14180 sc->link_params.speed_cap_mask[0],
14181 sc->port.link_config[0]);
14236 "link_config0=0x%08x\n",
14237 sc->link_params.lane_config,
14238 sc->link_params.speed_cap_mask[0],
14239 sc->port.link_config[0]);
14240
14182
14183 bxe_link_settings_supported(sc, sc->link_params.switch_cfg);
14184 bxe_link_settings_requested(sc);
14185
14186 if (sc->autogreeen == AUTO_GREEN_FORCE_ON) {
14187 sc->link_params.feature_config_flags |=
14188 ELINK_FEATURE_CONFIG_AUTOGREEEN_ENABLED;
14189 } else if (sc->autogreeen == AUTO_GREEN_FORCE_OFF) {

--- 14 unchanged lines hidden (view full) ---

14204 ELINK_EEE_MODE_ENABLE_LPI |
14205 ELINK_EEE_MODE_OUTPUT_TIME);
14206 } else {
14207 sc->link_params.eee_mode = 0;
14208 }
14209
14210 /* get the media type */
14211 bxe_media_detect(sc);
14241
14242 bxe_link_settings_supported(sc, sc->link_params.switch_cfg);
14243 bxe_link_settings_requested(sc);
14244
14245 if (sc->autogreeen == AUTO_GREEN_FORCE_ON) {
14246 sc->link_params.feature_config_flags |=
14247 ELINK_FEATURE_CONFIG_AUTOGREEEN_ENABLED;
14248 } else if (sc->autogreeen == AUTO_GREEN_FORCE_OFF) {

--- 14 unchanged lines hidden (view full) ---

14263 ELINK_EEE_MODE_ENABLE_LPI |
14264 ELINK_EEE_MODE_OUTPUT_TIME);
14265 } else {
14266 sc->link_params.eee_mode = 0;
14267 }
14268
14269 /* get the media type */
14270 bxe_media_detect(sc);
14271 ELINK_DEBUG_P1(sc, "detected media type\n", sc->media);
14212}
14213
14214static void
14215bxe_get_params(struct bxe_softc *sc)
14216{
14217 /* get user tunable params */
14218 bxe_get_tunable_params(sc);
14219

--- 1339 unchanged lines hidden (view full) ---

15559 BLOGE(sc, "Invalid bxe_eth_q_stats size (index=%d size=%d)\n",
15560 index, bxe_eth_q_stats_arr[index].size);
15561 return (-1);
15562 }
15563
15564 return (sysctl_handle_64(oidp, &value, 0, req));
15565}
15566
14272}
14273
14274static void
14275bxe_get_params(struct bxe_softc *sc)
14276{
14277 /* get user tunable params */
14278 bxe_get_tunable_params(sc);
14279

--- 1339 unchanged lines hidden (view full) ---

15619 BLOGE(sc, "Invalid bxe_eth_q_stats size (index=%d size=%d)\n",
15620 index, bxe_eth_q_stats_arr[index].size);
15621 return (-1);
15622 }
15623
15624 return (sysctl_handle_64(oidp, &value, 0, req));
15625}
15626
15627static void bxe_force_link_reset(struct bxe_softc *sc)
15628{
15629
15630 bxe_acquire_phy_lock(sc);
15631 elink_link_reset(&sc->link_params, &sc->link_vars, 1);
15632 bxe_release_phy_lock(sc);
15633}
15634
15635static int
15636bxe_sysctl_pauseparam(SYSCTL_HANDLER_ARGS)
15637{
15638 struct bxe_softc *sc = (struct bxe_softc *)arg1;;
15639 uint32_t cfg_idx = bxe_get_link_cfg_idx(sc);
15640 int rc = 0;
15641 int error;
15642 int result;
15643
15644
15645 error = sysctl_handle_int(oidp, &sc->bxe_pause_param, 0, req);
15646
15647 if (error || !req->newptr) {
15648 return (error);
15649 }
15650 if ((sc->bxe_pause_param < 0) || (sc->bxe_pause_param > 8)) {
15651 BLOGW(sc, "invalid pause param (%d) - use intergers between 1 & 8\n",sc->bxe_pause_param);
15652 sc->bxe_pause_param = 8;
15653 }
15654
15655 result = (sc->bxe_pause_param << PORT_FEATURE_FLOW_CONTROL_SHIFT);
15656
15657
15658 if((result & 0x400) && !(sc->port.supported[cfg_idx] & ELINK_SUPPORTED_Autoneg)) {
15659 BLOGW(sc, "Does not support Autoneg pause_param %d\n", sc->bxe_pause_param);
15660 return -EINVAL;
15661 }
15662
15663 if(IS_MF(sc))
15664 return 0;
15665 sc->link_params.req_flow_ctrl[cfg_idx] = ELINK_FLOW_CTRL_AUTO;
15666 if(result & ELINK_FLOW_CTRL_RX)
15667 sc->link_params.req_flow_ctrl[cfg_idx] |= ELINK_FLOW_CTRL_RX;
15668
15669 if(result & ELINK_FLOW_CTRL_TX)
15670 sc->link_params.req_flow_ctrl[cfg_idx] |= ELINK_FLOW_CTRL_TX;
15671 if(sc->link_params.req_flow_ctrl[cfg_idx] == ELINK_FLOW_CTRL_AUTO)
15672 sc->link_params.req_flow_ctrl[cfg_idx] = ELINK_FLOW_CTRL_NONE;
15673
15674 if(result & 0x400) {
15675 if (sc->link_params.req_line_speed[cfg_idx] == ELINK_SPEED_AUTO_NEG) {
15676 sc->link_params.req_flow_ctrl[cfg_idx] =
15677 ELINK_FLOW_CTRL_AUTO;
15678 }
15679 sc->link_params.req_fc_auto_adv = 0;
15680 if (result & ELINK_FLOW_CTRL_RX)
15681 sc->link_params.req_fc_auto_adv |= ELINK_FLOW_CTRL_RX;
15682
15683 if (result & ELINK_FLOW_CTRL_TX)
15684 sc->link_params.req_fc_auto_adv |= ELINK_FLOW_CTRL_TX;
15685 if (!sc->link_params.req_fc_auto_adv)
15686 sc->link_params.req_fc_auto_adv |= ELINK_FLOW_CTRL_NONE;
15687 }
15688 if (IS_PF(sc)) {
15689 if (sc->link_vars.link_up) {
15690 bxe_stats_handle(sc, STATS_EVENT_STOP);
15691 }
15692 if (if_getdrvflags(sc->ifp) & IFF_DRV_RUNNING) {
15693 bxe_force_link_reset(sc);
15694 bxe_acquire_phy_lock(sc);
15695
15696 rc = elink_phy_init(&sc->link_params, &sc->link_vars);
15697
15698 bxe_release_phy_lock(sc);
15699
15700 bxe_calc_fc_adv(sc);
15701 }
15702 }
15703 return rc;
15704}
15705
15706
15567static void
15568bxe_add_sysctls(struct bxe_softc *sc)
15569{
15570 struct sysctl_ctx_list *ctx;
15571 struct sysctl_oid_list *children;
15572 struct sysctl_oid *queue_top, *queue;
15573 struct sysctl_oid_list *queue_top_children, *queue_children;
15574 char queue_num_buf[32];

--- 84 unchanged lines hidden (view full) ---

15659 CTLFLAG_RD, &sc->grcdump_done, 0,
15660 "set by driver when grcdump is done");
15661
15662 sc->rx_budget = bxe_rx_budget;
15663 SYSCTL_ADD_UINT(ctx, children, OID_AUTO, "rx_budget",
15664 CTLFLAG_RW, &sc->rx_budget, 0,
15665 "rx processing budget");
15666
15707static void
15708bxe_add_sysctls(struct bxe_softc *sc)
15709{
15710 struct sysctl_ctx_list *ctx;
15711 struct sysctl_oid_list *children;
15712 struct sysctl_oid *queue_top, *queue;
15713 struct sysctl_oid_list *queue_top_children, *queue_children;
15714 char queue_num_buf[32];

--- 84 unchanged lines hidden (view full) ---

15799 CTLFLAG_RD, &sc->grcdump_done, 0,
15800 "set by driver when grcdump is done");
15801
15802 sc->rx_budget = bxe_rx_budget;
15803 SYSCTL_ADD_UINT(ctx, children, OID_AUTO, "rx_budget",
15804 CTLFLAG_RW, &sc->rx_budget, 0,
15805 "rx processing budget");
15806
15807 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "pause_param",
15808 CTLTYPE_UINT | CTLFLAG_RW, sc, 0,
15809 bxe_sysctl_pauseparam, "IU",
15810 "need pause frames- DEF:0/TX:1/RX:2/BOTH:3/AUTO:4/AUTOTX:5/AUTORX:6/AUTORXTX:7/NONE:8");
15811
15812
15667 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "state",
15668 CTLTYPE_UINT | CTLFLAG_RW, sc, 0,
15669 bxe_sysctl_state, "IU", "dump driver state");
15670
15671 for (i = 0; i < BXE_NUM_ETH_STATS; i++) {
15672 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
15673 bxe_eth_stats_arr[i].string,
15674 CTLTYPE_U64 | CTLFLAG_RD, sc, i,

--- 2318 unchanged lines hidden (view full) ---

17993}
17994
17995static void
17996bxe_reset_port(struct bxe_softc *sc)
17997{
17998 int port = SC_PORT(sc);
17999 uint32_t val;
18000
15813 SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "state",
15814 CTLTYPE_UINT | CTLFLAG_RW, sc, 0,
15815 bxe_sysctl_state, "IU", "dump driver state");
15816
15817 for (i = 0; i < BXE_NUM_ETH_STATS; i++) {
15818 SYSCTL_ADD_PROC(ctx, children, OID_AUTO,
15819 bxe_eth_stats_arr[i].string,
15820 CTLTYPE_U64 | CTLFLAG_RD, sc, i,

--- 2318 unchanged lines hidden (view full) ---

18139}
18140
18141static void
18142bxe_reset_port(struct bxe_softc *sc)
18143{
18144 int port = SC_PORT(sc);
18145 uint32_t val;
18146
18147 ELINK_DEBUG_P0(sc, "bxe_reset_port called\n");
18001 /* reset physical Link */
18002 bxe_link_reset(sc);
18003
18004 REG_WR(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0);
18005
18006 /* Do not rcv packets to BRB */
18007 REG_WR(sc, NIG_REG_LLH0_BRB1_DRV_MASK + port*4, 0x0);
18008 /* Do not direct rcv packets that are not for MCP to the BRB */

--- 486 unchanged lines hidden (view full) ---

18495 uint32_t preset_idx;
18496 uint8_t *buf;
18497 uint32_t size;
18498 struct dump_header *d_hdr;
18499 uint32_t i;
18500 uint32_t reg_val;
18501 uint32_t reg_addr;
18502 uint32_t cmd_offset;
18148 /* reset physical Link */
18149 bxe_link_reset(sc);
18150
18151 REG_WR(sc, NIG_REG_MASK_INTERRUPT_PORT0 + port*4, 0);
18152
18153 /* Do not rcv packets to BRB */
18154 REG_WR(sc, NIG_REG_LLH0_BRB1_DRV_MASK + port*4, 0x0);
18155 /* Do not direct rcv packets that are not for MCP to the BRB */

--- 486 unchanged lines hidden (view full) ---

18642 uint32_t preset_idx;
18643 uint8_t *buf;
18644 uint32_t size;
18645 struct dump_header *d_hdr;
18646 uint32_t i;
18647 uint32_t reg_val;
18648 uint32_t reg_addr;
18649 uint32_t cmd_offset;
18503 int context_size;
18504 int allocated;
18505 struct ecore_ilt *ilt = SC_ILT(sc);
18506 struct bxe_fastpath *fp;
18507 struct ilt_client_info *ilt_cli;
18508 int grc_dump_size;
18509
18510
18511 if (sc->grcdump_done || sc->grcdump_started)
18512 return (rval);

--- 78 unchanged lines hidden (view full) ---

18591 bxe_pretend_func(sc, 1);
18592 ecore_clear_blocks_parity(sc);
18593 ecore_enable_blocks_parity(sc);
18594
18595 /* Return to current function */
18596 bxe_pretend_func(sc, SC_ABS_FUNC(sc));
18597
18598
18650 struct ecore_ilt *ilt = SC_ILT(sc);
18651 struct bxe_fastpath *fp;
18652 struct ilt_client_info *ilt_cli;
18653 int grc_dump_size;
18654
18655
18656 if (sc->grcdump_done || sc->grcdump_started)
18657 return (rval);

--- 78 unchanged lines hidden (view full) ---

18736 bxe_pretend_func(sc, 1);
18737 ecore_clear_blocks_parity(sc);
18738 ecore_enable_blocks_parity(sc);
18739
18740 /* Return to current function */
18741 bxe_pretend_func(sc, SC_ABS_FUNC(sc));
18742
18743
18599 context_size = (sizeof(union cdu_context) * BXE_L2_CID_COUNT(sc));
18600 for (i = 0, allocated = 0; allocated < context_size; i++) {
18601
18744
18602 BLOGI(sc, "cdu_context i %d paddr %#jx vaddr %p size 0x%zx\n", i,
18603 (uintmax_t)sc->context[i].vcxt_dma.paddr,
18604 sc->context[i].vcxt_dma.vaddr,
18605 sc->context[i].size);
18606 allocated += sc->context[i].size;
18607 }
18608 BLOGI(sc, "fw stats start_paddr %#jx end_paddr %#jx vaddr %p size 0x%x\n",
18609 (uintmax_t)sc->fw_stats_req_mapping,
18610 (uintmax_t)sc->fw_stats_data_mapping,
18611 sc->fw_stats_req, (sc->fw_stats_req_size + sc->fw_stats_data_size));
18612 BLOGI(sc, "def_status_block paddr %p vaddr %p size 0x%zx\n",
18613 (void *)sc->def_sb_dma.paddr, sc->def_sb,
18614 sizeof(struct host_sp_status_block));
18615 BLOGI(sc, "event_queue paddr %#jx vaddr %p size 0x%x\n",
18616 (uintmax_t)sc->eq_dma.paddr, sc->eq_dma.vaddr, BCM_PAGE_SIZE);
18617 BLOGI(sc, "slow path paddr %#jx vaddr %p size 0x%zx\n",
18618 (uintmax_t)sc->sp_dma.paddr, sc->sp_dma.vaddr,
18619 sizeof(struct bxe_slowpath));
18620 BLOGI(sc, "slow path queue paddr %#jx vaddr %p size 0x%x\n",
18621 (uintmax_t)sc->spq_dma.paddr, sc->spq_dma.vaddr, BCM_PAGE_SIZE);
18622 BLOGI(sc, "fw_buf paddr %#jx vaddr %p size 0x%x\n",
18623 (uintmax_t)sc->gz_buf_dma.paddr, sc->gz_buf_dma.vaddr,
18624 FW_BUF_SIZE);
18625 for (i = 0; i < sc->num_queues; i++) {
18626 fp = &sc->fp[i];
18627 BLOGI(sc, "FP status block fp %d paddr %#jx vaddr %p size 0x%zx\n", i,
18628 (uintmax_t)fp->sb_dma.paddr, fp->sb_dma.vaddr,
18629 sizeof(union bxe_host_hc_status_block));
18630 BLOGI(sc, "TX BD CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i,
18631 (uintmax_t)fp->tx_dma.paddr, fp->tx_dma.vaddr,
18632 (BCM_PAGE_SIZE * TX_BD_NUM_PAGES));
18633 BLOGI(sc, "RX BD CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i,
18634 (uintmax_t)fp->rx_dma.paddr, fp->rx_dma.vaddr,
18635 (BCM_PAGE_SIZE * RX_BD_NUM_PAGES));
18636 BLOGI(sc, "RX RCQ CHAIN fp %d paddr %#jx vaddr %p size 0x%zx\n", i,
18637 (uintmax_t)fp->rcq_dma.paddr, fp->rcq_dma.vaddr,
18638 (BCM_PAGE_SIZE * RCQ_NUM_PAGES));
18639 BLOGI(sc, "RX SGE CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i,
18640 (uintmax_t)fp->rx_sge_dma.paddr, fp->rx_sge_dma.vaddr,
18641 (BCM_PAGE_SIZE * RX_SGE_NUM_PAGES));
18642 }
18745 if(sc->state == BXE_STATE_OPEN) {
18746 if(sc->fw_stats_req != NULL) {
18747 BLOGI(sc, "fw stats start_paddr %#jx end_paddr %#jx vaddr %p size 0x%x\n",
18748 (uintmax_t)sc->fw_stats_req_mapping,
18749 (uintmax_t)sc->fw_stats_data_mapping,
18750 sc->fw_stats_req, (sc->fw_stats_req_size + sc->fw_stats_data_size));
18751 }
18752 if(sc->def_sb != NULL) {
18753 BLOGI(sc, "def_status_block paddr %p vaddr %p size 0x%zx\n",
18754 (void *)sc->def_sb_dma.paddr, sc->def_sb,
18755 sizeof(struct host_sp_status_block));
18756 }
18757 if(sc->eq_dma.vaddr != NULL) {
18758 BLOGI(sc, "event_queue paddr %#jx vaddr %p size 0x%x\n",
18759 (uintmax_t)sc->eq_dma.paddr, sc->eq_dma.vaddr, BCM_PAGE_SIZE);
18760 }
18761 if(sc->sp_dma.vaddr != NULL) {
18762 BLOGI(sc, "slow path paddr %#jx vaddr %p size 0x%zx\n",
18763 (uintmax_t)sc->sp_dma.paddr, sc->sp_dma.vaddr,
18764 sizeof(struct bxe_slowpath));
18765 }
18766 if(sc->spq_dma.vaddr != NULL) {
18767 BLOGI(sc, "slow path queue paddr %#jx vaddr %p size 0x%x\n",
18768 (uintmax_t)sc->spq_dma.paddr, sc->spq_dma.vaddr, BCM_PAGE_SIZE);
18769 }
18770 if(sc->gz_buf_dma.vaddr != NULL) {
18771 BLOGI(sc, "fw_buf paddr %#jx vaddr %p size 0x%x\n",
18772 (uintmax_t)sc->gz_buf_dma.paddr, sc->gz_buf_dma.vaddr,
18773 FW_BUF_SIZE);
18774 }
18775 for (i = 0; i < sc->num_queues; i++) {
18776 fp = &sc->fp[i];
18777 if(fp->sb_dma.vaddr != NULL && fp->tx_dma.vaddr != NULL &&
18778 fp->rx_dma.vaddr != NULL && fp->rcq_dma.vaddr != NULL &&
18779 fp->rx_sge_dma.vaddr != NULL) {
18643
18780
18644 ilt_cli = &ilt->clients[1];
18645 for (i = ilt_cli->start; i <= ilt_cli->end; i++) {
18646 BLOGI(sc, "ECORE_ILT paddr %#jx vaddr %p size 0x%x\n",
18647 (uintmax_t)(((struct bxe_dma *)((&ilt->lines[i])->page))->paddr),
18648 ((struct bxe_dma *)((&ilt->lines[i])->page))->vaddr, BCM_PAGE_SIZE);
18649 }
18781 BLOGI(sc, "FP status block fp %d paddr %#jx vaddr %p size 0x%zx\n", i,
18782 (uintmax_t)fp->sb_dma.paddr, fp->sb_dma.vaddr,
18783 sizeof(union bxe_host_hc_status_block));
18784 BLOGI(sc, "TX BD CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i,
18785 (uintmax_t)fp->tx_dma.paddr, fp->tx_dma.vaddr,
18786 (BCM_PAGE_SIZE * TX_BD_NUM_PAGES));
18787 BLOGI(sc, "RX BD CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i,
18788 (uintmax_t)fp->rx_dma.paddr, fp->rx_dma.vaddr,
18789 (BCM_PAGE_SIZE * RX_BD_NUM_PAGES));
18790 BLOGI(sc, "RX RCQ CHAIN fp %d paddr %#jx vaddr %p size 0x%zx\n", i,
18791 (uintmax_t)fp->rcq_dma.paddr, fp->rcq_dma.vaddr,
18792 (BCM_PAGE_SIZE * RCQ_NUM_PAGES));
18793 BLOGI(sc, "RX SGE CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i,
18794 (uintmax_t)fp->rx_sge_dma.paddr, fp->rx_sge_dma.vaddr,
18795 (BCM_PAGE_SIZE * RX_SGE_NUM_PAGES));
18796 }
18797 }
18798 if(ilt != NULL ) {
18799 ilt_cli = &ilt->clients[1];
18800 if(ilt->lines != NULL) {
18801 for (i = ilt_cli->start; i <= ilt_cli->end; i++) {
18802 BLOGI(sc, "ECORE_ILT paddr %#jx vaddr %p size 0x%x\n",
18803 (uintmax_t)(((struct bxe_dma *)((&ilt->lines[i])->page))->paddr),
18804 ((struct bxe_dma *)((&ilt->lines[i])->page))->vaddr, BCM_PAGE_SIZE);
18805 }
18806 }
18807 }
18650
18651
18808
18809
18652 cmd_offset = DMAE_REG_CMD_MEM;
18653 for (i = 0; i < 224; i++) {
18654 reg_addr = (cmd_offset +(i * 4));
18655 reg_val = REG_RD(sc, reg_addr);
18656 BLOGI(sc, "DMAE_REG_CMD_MEM i=%d reg_addr 0x%x reg_val 0x%08x\n",i,
18657 reg_addr, reg_val);
18658 }
18810 cmd_offset = DMAE_REG_CMD_MEM;
18811 for (i = 0; i < 224; i++) {
18812 reg_addr = (cmd_offset +(i * 4));
18813 reg_val = REG_RD(sc, reg_addr);
18814 BLOGI(sc, "DMAE_REG_CMD_MEM i=%d reg_addr 0x%x reg_val 0x%08x\n",i,
18815 reg_addr, reg_val);
18816 }
18817 }
18659
18818
18660
18661 BLOGI(sc, "Collection of grcdump done\n");
18662 sc->grcdump_done = 1;
18663 return(rval);
18664}
18665
18666static int
18667bxe_add_cdev(struct bxe_softc *sc)
18668{

--- 330 unchanged lines hidden ---
18819 BLOGI(sc, "Collection of grcdump done\n");
18820 sc->grcdump_done = 1;
18821 return(rval);
18822}
18823
18824static int
18825bxe_add_cdev(struct bxe_softc *sc)
18826{

--- 330 unchanged lines hidden ---