aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/atheros
diff options
context:
space:
mode:
authorHuang, Xiong <xiong@qca.qualcomm.com>2012-04-17 15:32:29 -0400
committerDavid S. Miller <davem@davemloft.net>2012-04-18 15:35:31 -0400
commit8d5c68362f7d77cdffdf12ab7516a6eb77a5dd90 (patch)
tree276f8c722d8705885ff1296033f42432c91a3355 /drivers/net/ethernet/atheros
parent864ad85f77dc10055c7d5016e99bb201766a737d (diff)
atl1c: remove SMB/CMB DMA related code
l1c & later chips don't support DMA for SMB. CMB is removed from hardware. reg(15C8) is used to trig interrupt by tpd threshold. Signed-off-by: xiong <xiong@qca.qualcomm.com> Tested-by: Liu David <dwliu@qca.qualcomm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/atheros')
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c.h19
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_hw.h10
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c34
3 files changed, 6 insertions, 57 deletions
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c.h b/drivers/net/ethernet/atheros/atl1c/atl1c.h
index cf82b74be263..93b59915ec56 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c.h
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c.h
@@ -426,10 +426,6 @@ struct atl1c_hw {
426#define ATL1C_FPGA_VERSION 0x8000 426#define ATL1C_FPGA_VERSION 0x8000
427 u16 link_cap_flags; 427 u16 link_cap_flags;
428#define ATL1C_LINK_CAP_1000M 0x0001 428#define ATL1C_LINK_CAP_1000M 0x0001
429 u16 cmb_tpd;
430 u16 cmb_rrd;
431 u16 cmb_rx_timer; /* 2us resolution */
432 u16 cmb_tx_timer;
433 u32 smb_timer; 429 u32 smb_timer;
434 430
435 u16 rrd_thresh; /* Threshold of number of RRD produced to trigger 431 u16 rrd_thresh; /* Threshold of number of RRD produced to trigger
@@ -449,8 +445,7 @@ struct atl1c_hw {
449 445
450/* 446/*
451 * atl1c_ring_header represents a single, contiguous block of DMA space 447 * atl1c_ring_header represents a single, contiguous block of DMA space
452 * mapped for the three descriptor rings (tpd, rfd, rrd) and the two 448 * mapped for the three descriptor rings (tpd, rfd, rrd) described below
453 * message blocks (cmb, smb) described below
454 */ 449 */
455struct atl1c_ring_header { 450struct atl1c_ring_header {
456 void *desc; /* virtual address */ 451 void *desc; /* virtual address */
@@ -524,16 +519,6 @@ struct atl1c_rrd_ring {
524 u16 next_to_clean; 519 u16 next_to_clean;
525}; 520};
526 521
527struct atl1c_cmb {
528 void *cmb;
529 dma_addr_t dma;
530};
531
532struct atl1c_smb {
533 void *smb;
534 dma_addr_t dma;
535};
536
537/* board specific private data structure */ 522/* board specific private data structure */
538struct atl1c_adapter { 523struct atl1c_adapter {
539 struct net_device *netdev; 524 struct net_device *netdev;
@@ -571,8 +556,6 @@ struct atl1c_adapter {
571 struct atl1c_tpd_ring tpd_ring[AT_MAX_TRANSMIT_QUEUE]; 556 struct atl1c_tpd_ring tpd_ring[AT_MAX_TRANSMIT_QUEUE];
572 struct atl1c_rfd_ring rfd_ring; 557 struct atl1c_rfd_ring rfd_ring;
573 struct atl1c_rrd_ring rrd_ring; 558 struct atl1c_rrd_ring rrd_ring;
574 struct atl1c_cmb cmb;
575 struct atl1c_smb smb;
576 u32 bd_number; /* board number;*/ 559 u32 bd_number; /* board number;*/
577}; 560};
578 561
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
index f5c7473596d0..caff2ae20a6c 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
@@ -447,8 +447,6 @@ int atl1c_phy_power_saving(struct atl1c_hw *hw);
447 */ 447 */
448#define REG_RX_BASE_ADDR_HI 0x1540 448#define REG_RX_BASE_ADDR_HI 0x1540
449#define REG_TX_BASE_ADDR_HI 0x1544 449#define REG_TX_BASE_ADDR_HI 0x1544
450#define REG_SMB_BASE_ADDR_HI 0x1548
451#define REG_SMB_BASE_ADDR_LO 0x154C
452#define REG_RFD0_HEAD_ADDR_LO 0x1550 450#define REG_RFD0_HEAD_ADDR_LO 0x1550
453#define REG_RFD_RING_SIZE 0x1560 451#define REG_RFD_RING_SIZE 0x1560
454#define RFD_RING_SIZE_MASK 0x0FFF 452#define RFD_RING_SIZE_MASK 0x0FFF
@@ -461,7 +459,6 @@ int atl1c_phy_power_saving(struct atl1c_hw *hw);
461#define REG_NTPD_HEAD_ADDR_LO 0x1580 459#define REG_NTPD_HEAD_ADDR_LO 0x1580
462#define REG_TPD_RING_SIZE 0x1584 460#define REG_TPD_RING_SIZE 0x1584
463#define TPD_RING_SIZE_MASK 0xFFFF 461#define TPD_RING_SIZE_MASK 0xFFFF
464#define REG_CMB_BASE_ADDR_LO 0x1588
465 462
466/* TXQ Control Register */ 463/* TXQ Control Register */
467#define REG_TXQ_CTRL 0x1590 464#define REG_TXQ_CTRL 0x1590
@@ -556,13 +553,10 @@ int atl1c_phy_power_saving(struct atl1c_hw *hw);
556#define MAC_CTRL_SMB_DIS 0x1000000 553#define MAC_CTRL_SMB_DIS 0x1000000
557#define DMA_CTRL_SMB_NOW 0x80000000 554#define DMA_CTRL_SMB_NOW 0x80000000
558 555
559/* CMB/SMB Control Register */ 556/* INT-triggle/SMB Control Register */
560#define REG_SMB_STAT_TIMER 0x15C4 /* 2us resolution */ 557#define REG_SMB_STAT_TIMER 0x15C4 /* 2us resolution */
561#define SMB_STAT_TIMER_MASK 0xFFFFFF 558#define SMB_STAT_TIMER_MASK 0xFFFFFF
562#define REG_CMB_TPD_THRESH 0x15C8 559#define REG_TINT_TPD_THRESH 0x15C8 /* tpd th to trig intrrupt */
563#define CMB_TPD_THRESH_MASK 0xFFFF
564#define REG_CMB_TX_TIMER 0x15CC /* 2us resolution */
565#define CMB_TX_TIMER_MASK 0xFFFF
566 560
567/* Mail box */ 561/* Mail box */
568#define MB_RFDX_PROD_IDX_MASK 0xFFFF 562#define MB_RFDX_PROD_IDX_MASK 0xFFFF
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 4f19f5c30fc7..c4d5929f7022 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -733,8 +733,6 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
733 733
734 hw->ict = 50000; /* 100ms */ 734 hw->ict = 50000; /* 100ms */
735 hw->smb_timer = 200000; /* 400ms */ 735 hw->smb_timer = 200000; /* 400ms */
736 hw->cmb_tpd = 4;
737 hw->cmb_tx_timer = 1; /* 2 us */
738 hw->rx_imt = 200; 736 hw->rx_imt = 200;
739 hw->tx_imt = 1000; 737 hw->tx_imt = 1000;
740 738
@@ -943,8 +941,7 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
943 sizeof(struct atl1c_tpd_desc) * tpd_ring->count * 2 + 941 sizeof(struct atl1c_tpd_desc) * tpd_ring->count * 2 +
944 sizeof(struct atl1c_rx_free_desc) * rx_desc_count + 942 sizeof(struct atl1c_rx_free_desc) * rx_desc_count +
945 sizeof(struct atl1c_recv_ret_status) * rx_desc_count + 943 sizeof(struct atl1c_recv_ret_status) * rx_desc_count +
946 sizeof(struct atl1c_hw_stats) + 944 8 * 4;
947 8 * 4 + 8 * 2;
948 945
949 ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, 946 ring_header->desc = pci_alloc_consistent(pdev, ring_header->size,
950 &ring_header->dma); 947 &ring_header->dma);
@@ -977,8 +974,6 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
977 rrd_ring->count; 974 rrd_ring->count;
978 offset += roundup(rrd_ring->size, 8); 975 offset += roundup(rrd_ring->size, 8);
979 976
980 adapter->smb.dma = ring_header->dma + offset;
981 adapter->smb.smb = (u8 *)ring_header->desc + offset;
982 return 0; 977 return 0;
983 978
984err_nomem: 979err_nomem:
@@ -993,8 +988,6 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
993 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring; 988 struct atl1c_rrd_ring *rrd_ring = &adapter->rrd_ring;
994 struct atl1c_tpd_ring *tpd_ring = (struct atl1c_tpd_ring *) 989 struct atl1c_tpd_ring *tpd_ring = (struct atl1c_tpd_ring *)
995 adapter->tpd_ring; 990 adapter->tpd_ring;
996 struct atl1c_cmb *cmb = (struct atl1c_cmb *) &adapter->cmb;
997 struct atl1c_smb *smb = (struct atl1c_smb *) &adapter->smb;
998 u32 data; 991 u32 data;
999 992
1000 /* TPD */ 993 /* TPD */
@@ -1029,14 +1022,6 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
1029 AT_WRITE_REG(hw, REG_RRD_RING_SIZE, 1022 AT_WRITE_REG(hw, REG_RRD_RING_SIZE,
1030 (rrd_ring->count & RRD_RING_SIZE_MASK)); 1023 (rrd_ring->count & RRD_RING_SIZE_MASK));
1031 1024
1032 /* CMB */
1033 AT_WRITE_REG(hw, REG_CMB_BASE_ADDR_LO, cmb->dma & AT_DMA_LO_ADDR_MASK);
1034
1035 /* SMB */
1036 AT_WRITE_REG(hw, REG_SMB_BASE_ADDR_HI,
1037 (u32)((smb->dma & AT_DMA_HI_ADDR_MASK) >> 32));
1038 AT_WRITE_REG(hw, REG_SMB_BASE_ADDR_LO,
1039 (u32)(smb->dma & AT_DMA_LO_ADDR_MASK));
1040 if (hw->nic_type == athr_l2c_b) { 1025 if (hw->nic_type == athr_l2c_b) {
1041 AT_WRITE_REG(hw, REG_SRAM_RXF_LEN, 0x02a0L); 1026 AT_WRITE_REG(hw, REG_SRAM_RXF_LEN, 0x02a0L);
1042 AT_WRITE_REG(hw, REG_SRAM_TXF_LEN, 0x0100L); 1027 AT_WRITE_REG(hw, REG_SRAM_TXF_LEN, 0x0100L);
@@ -1115,12 +1100,6 @@ static void atl1c_configure_dma(struct atl1c_adapter *adapter)
1115 u32 dma_ctrl_data; 1100 u32 dma_ctrl_data;
1116 1101
1117 dma_ctrl_data = DMA_CTRL_DMAR_REQ_PRI; 1102 dma_ctrl_data = DMA_CTRL_DMAR_REQ_PRI;
1118 if (hw->ctrl_flags & ATL1C_CMB_ENABLE)
1119 dma_ctrl_data |= DMA_CTRL_CMB_EN;
1120 if (hw->ctrl_flags & ATL1C_SMB_ENABLE)
1121 dma_ctrl_data |= DMA_CTRL_SMB_EN;
1122 else
1123 dma_ctrl_data |= MAC_CTRL_SMB_DIS;
1124 1103
1125 switch (hw->dma_order) { 1104 switch (hw->dma_order) {
1126 case atl1c_dma_ord_in: 1105 case atl1c_dma_ord_in:
@@ -1440,16 +1419,9 @@ static int atl1c_configure(struct atl1c_adapter *adapter)
1440 master_ctrl_data |= MASTER_CTRL_SA_TIMER_EN; 1419 master_ctrl_data |= MASTER_CTRL_SA_TIMER_EN;
1441 AT_WRITE_REG(hw, REG_MASTER_CTRL, master_ctrl_data); 1420 AT_WRITE_REG(hw, REG_MASTER_CTRL, master_ctrl_data);
1442 1421
1443 if (hw->ctrl_flags & ATL1C_CMB_ENABLE) { 1422 AT_WRITE_REG(hw, REG_SMB_STAT_TIMER,
1444 AT_WRITE_REG(hw, REG_CMB_TPD_THRESH, 1423 hw->smb_timer & SMB_STAT_TIMER_MASK);
1445 hw->cmb_tpd & CMB_TPD_THRESH_MASK);
1446 AT_WRITE_REG(hw, REG_CMB_TX_TIMER,
1447 hw->cmb_tx_timer & CMB_TX_TIMER_MASK);
1448 }
1449 1424
1450 if (hw->ctrl_flags & ATL1C_SMB_ENABLE)
1451 AT_WRITE_REG(hw, REG_SMB_STAT_TIMER,
1452 hw->smb_timer & SMB_STAT_TIMER_MASK);
1453 /* set MTU */ 1425 /* set MTU */
1454 AT_WRITE_REG(hw, REG_MTU, hw->max_frame_size + ETH_HLEN + 1426 AT_WRITE_REG(hw, REG_MTU, hw->max_frame_size + ETH_HLEN +
1455 VLAN_HLEN + ETH_FCS_LEN); 1427 VLAN_HLEN + ETH_FCS_LEN);