Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

cnic: Update TCP options setup for iSCSI.

Update TCP delayed ACK and timestamp options setup to match latest bnx2x
firmware.

Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eddie Wai and committed by
David S. Miller
b3bd2d65 6cdcdbba

+37 -32
+27 -26
drivers/net/ethernet/broadcom/cnic.c
··· 1427 1427 rcu_read_unlock(); 1428 1428 } 1429 1429 1430 + static void cnic_bnx2x_set_tcp_options(struct cnic_dev *dev, int time_stamps, 1431 + int en_tcp_dack) 1432 + { 1433 + struct cnic_local *cp = dev->cnic_priv; 1434 + struct bnx2x *bp = netdev_priv(dev->netdev); 1435 + u8 xstorm_flags = XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN; 1436 + u16 tstorm_flags = 0; 1437 + 1438 + if (time_stamps) { 1439 + xstorm_flags |= XSTORM_L5CM_TCP_FLAGS_TS_ENABLED; 1440 + tstorm_flags |= TSTORM_L5CM_TCP_FLAGS_TS_ENABLED; 1441 + } 1442 + if (en_tcp_dack) 1443 + tstorm_flags |= TSTORM_L5CM_TCP_FLAGS_DELAYED_ACK_EN; 1444 + 1445 + CNIC_WR8(dev, BAR_XSTRORM_INTMEM + 1446 + XSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(cp->pfid), xstorm_flags); 1447 + 1448 + CNIC_WR16(dev, BAR_TSTRORM_INTMEM + 1449 + TSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(cp->pfid), tstorm_flags); 1450 + } 1451 + 1430 1452 static int cnic_bnx2x_iscsi_init1(struct cnic_dev *dev, struct kwqe *kwqe) 1431 1453 { 1432 1454 struct cnic_local *cp = dev->cnic_priv; ··· 1527 1505 req1->cq_num_wqes); 1528 1506 CNIC_WR16(dev, BAR_CSTRORM_INTMEM + CSTORM_ISCSI_HQ_SIZE_OFFSET(pfid), 1529 1507 hq_bds); 1508 + 1509 + cnic_bnx2x_set_tcp_options(dev, 1510 + req1->flags & ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE, 1511 + req1->flags & ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE); 1530 1512 1531 1513 return 0; 1532 1514 } ··· 2061 2035 xstorm_buf->pseudo_header_checksum = 2062 2036 swab16(~csum_ipv6_magic(&src_ip, &dst_ip, 0, IPPROTO_TCP, 0)); 2063 2037 2064 - if (!(kwqe1->tcp_flags & L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK)) 2065 - tstorm_buf->params |= 2066 - L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE; 2067 2038 if (kwqe3->ka_timeout) { 2068 2039 tstorm_buf->ka_enable = 1; 2069 2040 tstorm_buf->ka_timeout = kwqe3->ka_timeout; ··· 2105 2082 CNIC_WR8(dev, BAR_TSTRORM_INTMEM + 2106 2083 TSTORM_ISCSI_TCP_VARS_MSB_LOCAL_MAC_ADDR_OFFSET(pfid) + 1, 2107 2084 mac[0]); 2108 - } 2109 - 2110 - static void cnic_bnx2x_set_tcp_timestamp(struct cnic_dev *dev, int tcp_ts) 2111 - { 2112 - struct cnic_local *cp = dev->cnic_priv; 2113 - struct bnx2x *bp = netdev_priv(dev->netdev); 2114 - u8 xstorm_flags = XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN; 2115 - u16 tstorm_flags = 0; 2116 - 2117 - if (tcp_ts) { 2118 - xstorm_flags |= XSTORM_L5CM_TCP_FLAGS_TS_ENABLED; 2119 - tstorm_flags |= TSTORM_L5CM_TCP_FLAGS_TS_ENABLED; 2120 - } 2121 - 2122 - CNIC_WR8(dev, BAR_XSTRORM_INTMEM + 2123 - XSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(cp->pfid), xstorm_flags); 2124 - 2125 - CNIC_WR16(dev, BAR_TSTRORM_INTMEM + 2126 - TSTORM_ISCSI_TCP_VARS_FLAGS_OFFSET(cp->pfid), tstorm_flags); 2127 2085 } 2128 2086 2129 2087 static int cnic_bnx2x_connect(struct cnic_dev *dev, struct kwqe *wqes[], ··· 2181 2177 2182 2178 CNIC_WR16(dev, BAR_XSTRORM_INTMEM + 2183 2179 XSTORM_ISCSI_LOCAL_VLAN_OFFSET(cp->pfid), csk->vlan_id); 2184 - 2185 - cnic_bnx2x_set_tcp_timestamp(dev, 2186 - kwqe1->tcp_flags & L4_KWQ_CONNECT_REQ1_TIME_STAMP); 2187 2180 2188 2181 ret = cnic_submit_kwqe_16(dev, L5CM_RAMROD_CMD_ID_TCP_CONNECT, 2189 2182 kwqe1->cid, ISCSI_CONNECTION_TYPE, &l5_data); ··· 4221 4220 u32 port = CNIC_PORT(cp); 4222 4221 4223 4222 cnic_init_bnx2x_mac(dev); 4224 - cnic_bnx2x_set_tcp_timestamp(dev, 1); 4223 + cnic_bnx2x_set_tcp_options(dev, 0, 1); 4225 4224 4226 4225 CNIC_WR16(dev, BAR_XSTRORM_INTMEM + 4227 4226 XSTORM_ISCSI_LOCAL_VLAN_OFFSET(pfid), 0);
+2 -2
drivers/net/ethernet/broadcom/cnic_defs.h
··· 5400 5400 u16 flags; 5401 5401 #define TSTORM_L5CM_TCP_FLAGS_VLAN_ID (0xFFF<<0) 5402 5402 #define TSTORM_L5CM_TCP_FLAGS_VLAN_ID_SHIFT 0 5403 - #define TSTORM_L5CM_TCP_FLAGS_RSRV0 (0x1<<12) 5404 - #define TSTORM_L5CM_TCP_FLAGS_RSRV0_SHIFT 12 5403 + #define TSTORM_L5CM_TCP_FLAGS_DELAYED_ACK_EN (0x1<<12) 5404 + #define TSTORM_L5CM_TCP_FLAGS_DELAYED_ACK_SHIFT 12 5405 5405 #define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<13) 5406 5406 #define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 13 5407 5407 #define TSTORM_L5CM_TCP_FLAGS_RSRV1 (0x3<<14)
+8 -4
drivers/scsi/bnx2i/57xx_iscsi_hsi.h
··· 581 581 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE_SHIFT 4 582 582 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE (0x1<<5) 583 583 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE_SHIFT 5 584 - #define ISCSI_KWQE_INIT1_RESERVED1 (0x3<<6) 585 - #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 6 584 + #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE (0x1<<6) 585 + #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE_SHIFT 6 586 + #define ISCSI_KWQE_INIT1_RESERVED1 (0x1<<7) 587 + #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 7 586 588 u16 cq_num_wqes; 587 589 #elif defined(__LITTLE_ENDIAN) 588 590 u16 cq_num_wqes; ··· 595 593 #define ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE_SHIFT 4 596 594 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE (0x1<<5) 597 595 #define ISCSI_KWQE_INIT1_KEEP_ALIVE_ENABLE_SHIFT 5 598 - #define ISCSI_KWQE_INIT1_RESERVED1 (0x3<<6) 599 - #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 6 596 + #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE (0x1<<6) 597 + #define ISCSI_KWQE_INIT1_TIME_STAMPS_ENABLE_SHIFT 6 598 + #define ISCSI_KWQE_INIT1_RESERVED1 (0x1<<7) 599 + #define ISCSI_KWQE_INIT1_RESERVED1_SHIFT 7 600 600 u8 cq_log_wqes_per_page; 601 601 #endif 602 602 #if defined(__BIG_ENDIAN)