Author: cem
Date: Wed Nov 11 18:55:25 2015
New Revision: 290682
URL: https://svnweb.freebsd.org/changeset/base/290682

Log:
  NTB: Diff reduce with Linux
  
  No functional change.
  
  Sponsored by: EMC / Isilon Storage Division

Modified:
  head/sys/dev/ntb/if_ntb/if_ntb.c
  head/sys/dev/ntb/ntb_hw/ntb_hw.c
  head/sys/dev/ntb/ntb_hw/ntb_regs.h

Modified: head/sys/dev/ntb/if_ntb/if_ntb.c
==============================================================================
--- head/sys/dev/ntb/if_ntb/if_ntb.c    Wed Nov 11 18:55:16 2015        
(r290681)
+++ head/sys/dev/ntb/if_ntb/if_ntb.c    Wed Nov 11 18:55:25 2015        
(r290682)
@@ -273,7 +273,7 @@ static void ntb_net_tx_handler(struct nt
 static void ntb_net_rx_handler(struct ntb_transport_qp *qp, void *qp_data,
     void *data, int len);
 static void ntb_net_event_handler(void *data, enum ntb_link_event status);
-static int ntb_transport_init(struct ntb_softc *ntb);
+static int ntb_transport_probe(struct ntb_softc *ntb);
 static void ntb_transport_free(struct ntb_transport_ctx *);
 static void ntb_transport_init_queue(struct ntb_transport_ctx *nt,
     unsigned int qp_num);
@@ -368,7 +368,7 @@ ntb_setup_interface(void)
                return (ENXIO);
        }
 
-       rc = ntb_transport_init(net_softc.ntb);
+       rc = ntb_transport_probe(net_softc.ntb);
        if (rc != 0) {
                printf("ntb: Cannot init transport: %d\n", rc);
                return (rc);
@@ -541,7 +541,7 @@ ntb_net_event_handler(void *data, enum n
 /* Transport Init and teardown */
 
 static int
-ntb_transport_init(struct ntb_softc *ntb)
+ntb_transport_probe(struct ntb_softc *ntb)
 {
        struct ntb_transport_ctx *nt = &net_softc;
        struct ntb_transport_mw *mw;
@@ -596,6 +596,8 @@ ntb_transport_init(struct ntb_softc *ntb
        nt->link_is_up = false;
        ntb_link_enable(ntb, NTB_SPEED_AUTO, NTB_WIDTH_AUTO);
        ntb_link_event(ntb);
+
+       callout_reset(&nt->link_work, 0, ntb_transport_link_work, nt);
        return (0);
 
 err:
@@ -693,6 +695,8 @@ ntb_transport_init_queue(struct ntb_tran
        STAILQ_INIT(&qp->rx_pend_q);
        STAILQ_INIT(&qp->rx_free_q);
        STAILQ_INIT(&qp->tx_free_q);
+
+       callout_reset(&qp->link_work, 0, ntb_qp_link_work, qp);
 }
 
 static void

Modified: head/sys/dev/ntb/ntb_hw/ntb_hw.c
==============================================================================
--- head/sys/dev/ntb/ntb_hw/ntb_hw.c    Wed Nov 11 18:55:16 2015        
(r290681)
+++ head/sys/dev/ntb/ntb_hw/ntb_hw.c    Wed Nov 11 18:55:25 2015        
(r290682)
@@ -518,26 +518,26 @@ ntb_attach(device_t device)
                error = ntb_detect_atom(ntb);
        else
                error = ntb_detect_xeon(ntb);
-       if (error)
+       if (error != 0)
                goto out;
 
        ntb_detect_max_mw(ntb);
 
+       pci_enable_busmaster(ntb->device);
+
        error = ntb_map_pci_bars(ntb);
-       if (error)
+       if (error != 0)
                goto out;
        if (ntb->type == NTB_ATOM)
                error = ntb_atom_init_dev(ntb);
        else
                error = ntb_xeon_init_dev(ntb);
-       if (error)
-               goto out;
-       error = ntb_init_isr(ntb);
-       if (error)
+       if (error != 0)
                goto out;
-       ntb_sysctl_init(ntb);
 
-       pci_enable_busmaster(ntb->device);
+       ntb_poll_link(ntb);
+
+       ntb_sysctl_init(ntb);
 
 out:
        if (error != 0)
@@ -556,6 +556,7 @@ ntb_detach(device_t device)
                ntb_db_set_mask(ntb, ntb->db_valid_mask);
        callout_drain(&ntb->heartbeat_timer);
        callout_drain(&ntb->lr_timer);
+       pci_disable_busmaster(ntb->device);
        if (ntb->type == NTB_XEON)
                ntb_teardown_xeon(ntb);
        ntb_teardown_interrupts(ntb);
@@ -1274,18 +1275,22 @@ ntb_xeon_init_dev(struct ntb_softc *ntb)
                return (rc);
 
        /* Enable Bus Master and Memory Space on the secondary side */
-       ntb_reg_write(2, XEON_PCICMD_OFFSET,
+       ntb_reg_write(2, XEON_SPCICMD_OFFSET,
            PCIM_CMD_MEMEN | PCIM_CMD_BUSMASTEREN);
 
-       /* Enable link training */
-       ntb_link_enable(ntb, NTB_SPEED_AUTO, NTB_WIDTH_AUTO);
+       /*
+        * Mask all doorbell interrupts.
+        */
+       ntb_db_set_mask(ntb, ntb->db_valid_mask);
 
-       return (0);
+       rc = ntb_init_isr(ntb);
+       return (rc);
 }
 
 static int
 ntb_atom_init_dev(struct ntb_softc *ntb)
 {
+       int error;
 
        KASSERT(ntb->conn_type == NTB_CONN_B2B,
            ("Unsupported NTB configuration (%d)\n", ntb->conn_type));
@@ -1310,9 +1315,13 @@ ntb_atom_init_dev(struct ntb_softc *ntb)
        configure_atom_secondary_side_bars(ntb);
 
        /* Enable Bus Master and Memory Space on the secondary side */
-       ntb_reg_write(2, ATOM_PCICMD_OFFSET,
+       ntb_reg_write(2, ATOM_SPCICMD_OFFSET,
            PCIM_CMD_MEMEN | PCIM_CMD_BUSMASTEREN);
 
+       error = ntb_init_isr(ntb);
+       if (error != 0)
+               return (error);
+
        /* Initiate PCI-E link training */
        ntb_link_enable(ntb, NTB_SPEED_AUTO, NTB_WIDTH_AUTO);
 
@@ -1988,6 +1997,19 @@ ntb_sysctl_init(struct ntb_softc *ntb)
            CTLFLAG_RD, NULL, "Raw HW registers (big-endian)");
        regpar = SYSCTL_CHILDREN(tmptree);
 
+       SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "ntbcntl",
+           CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, NTB_REG_32 |
+           ntb->reg->ntb_ctl, sysctl_handle_register, "IU",
+           "NTB Control register");
+       SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnkcap",
+           CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, NTB_REG_32 |
+           0x19c, sysctl_handle_register, "IU",
+           "NTB Link Capabilities");
+       SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "lnkcon",
+           CTLFLAG_RD | CTLTYPE_OPAQUE, ntb, NTB_REG_32 |
+           0x1a0, sysctl_handle_register, "IU",
+           "NTB Link Control register");
+
        SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_mask",
            CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
            NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_mask,
@@ -2352,7 +2374,7 @@ ntb_peer_spad_write(struct ntb_softc *nt
                return (EINVAL);
 
        if (HAS_FEATURE(NTB_SDOORBELL_LOCKUP))
-               ntb_mw_write(4, XEON_SHADOW_SPAD_OFFSET + idx * 4, val);
+               ntb_mw_write(4, XEON_SPAD_OFFSET + idx * 4, val);
        else
                ntb_reg_write(4, ntb->peer_reg->spad + idx * 4, val);
 
@@ -2378,7 +2400,7 @@ ntb_peer_spad_read(struct ntb_softc *ntb
                return (EINVAL);
 
        if (HAS_FEATURE(NTB_SDOORBELL_LOCKUP))
-               *val = ntb_mw_read(4, XEON_SHADOW_SPAD_OFFSET + idx * 4);
+               *val = ntb_mw_read(4, XEON_SPAD_OFFSET + idx * 4);
        else
                *val = ntb_reg_read(4, ntb->peer_reg->spad + idx * 4);
 
@@ -2564,7 +2586,7 @@ ntb_peer_db_set(struct ntb_softc *ntb, u
 {
 
        if (HAS_FEATURE(NTB_SDOORBELL_LOCKUP)) {
-               ntb_mw_write(2, XEON_SHADOW_PDOORBELL_OFFSET, bit);
+               ntb_mw_write(2, XEON_PDOORBELL_OFFSET, bit);
                return;
        }
 
@@ -2600,7 +2622,7 @@ ntb_get_peer_db_addr(struct ntb_softc *n
                    ("invalid b2b idx"));
 
                bar = &ntb->bar_info[ntb_mw_to_bar(ntb, ntb->b2b_mw_idx)];
-               regoff = XEON_SHADOW_PDOORBELL_OFFSET;
+               regoff = XEON_PDOORBELL_OFFSET;
        }
        KASSERT(bar->pci_bus_tag != X86_BUS_SPACE_IO, ("uh oh"));
 

Modified: head/sys/dev/ntb/ntb_hw/ntb_regs.h
==============================================================================
--- head/sys/dev/ntb/ntb_hw/ntb_regs.h  Wed Nov 11 18:55:16 2015        
(r290681)
+++ head/sys/dev/ntb/ntb_hw/ntb_regs.h  Wed Nov 11 18:55:25 2015        
(r290682)
@@ -46,7 +46,7 @@
 #define XEON_DB_LINK_BIT       (1 << XEON_DB_LINK)
 #define XEON_SPAD_COUNT                16
 
-#define XEON_PCICMD_OFFSET     0x0504
+#define XEON_SPCICMD_OFFSET    0x0504
 #define XEON_DEVCTRL_OFFSET    0x0598
 #define XEON_DEVSTS_OFFSET     0x059a
 #define XEON_LINK_STATUS_OFFSET        0x01a2
@@ -91,7 +91,7 @@
 #define ATOM_DB_MSIX_VECTOR_SHIFT      1
 #define ATOM_SPAD_COUNT                16
 
-#define ATOM_PCICMD_OFFSET     0xb004
+#define ATOM_SPCICMD_OFFSET    0xb004
 #define ATOM_MBAR23_OFFSET     0xb018
 #define ATOM_MBAR45_OFFSET     0xb020
 #define ATOM_DEVCTRL_OFFSET    0xb048
@@ -168,8 +168,4 @@
 /* The peer ntb secondary config space is 32KB fixed size */
 #define XEON_B2B_MIN_SIZE              0x8000
 
-/* XEON Shadowed MMIO Space */
-#define XEON_SHADOW_PDOORBELL_OFFSET   0x60
-#define XEON_SHADOW_SPAD_OFFSET                0x80
-
 #endif /* _NTB_REGS_H_ */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to