From: Vipul Pandya <vipul@chelsio.com>
To: netdev@vger.kernel.org, linux-rdma@vger.kernel.org,
linux-scsi@vger.kernel.org
Cc: davem@davemloft.net, roland@purestorage.com,
JBottomley@parallels.com, dm@chelsio.com,
swise@opengridcomputing.com, leedom@chelsio.com,
naresh@chelsio.com, divy@chelsio.com, santosh@chelsio.com,
arvindb@chelsio.com, abhishek@chelsio.com,
Vipul Pandya <vipul@chelsio.com>
Subject: [PATCH net-next 06/22] cxgb4: Enable doorbell drop recovery only for T4 adapter
Date: Tue, 12 Mar 2013 17:16:18 +0530 [thread overview]
Message-ID: <1363088794-31453-7-git-send-email-vipul@chelsio.com> (raw)
In-Reply-To: <1363088794-31453-1-git-send-email-vipul@chelsio.com>
From: Santosh Rastapur <santosh@chelsio.com>
Signed-off-by: Santosh Rastapur <santosh@chelsio.com>
Signed-off-by: Vipul Pandya <vipul@chelsio.com>
---
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 87 ++++++++++++++++++----
1 files changed, 71 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index ce1451c..177d0c1 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -3227,10 +3227,18 @@ EXPORT_SYMBOL(cxgb4_port_chan);
unsigned int cxgb4_dbfifo_count(const struct net_device *dev, int lpfifo)
{
struct adapter *adap = netdev2adap(dev);
- u32 v;
+ u32 v1, v2, lp_count, hp_count;
- v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
- return lpfifo ? G_LP_COUNT(v) : G_HP_COUNT(v);
+ v1 = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
+ v2 = t4_read_reg(adap, SGE_DBFIFO_STATUS2);
+ if (is_t4(adap->chip)) {
+ lp_count = G_LP_COUNT(v1);
+ hp_count = G_HP_COUNT(v1);
+ } else {
+ lp_count = G_LP_COUNT_T5(v1);
+ hp_count = G_HP_COUNT_T5(v2);
+ }
+ return lpfifo ? lp_count : hp_count;
}
EXPORT_SYMBOL(cxgb4_dbfifo_count);
@@ -3368,14 +3376,23 @@ static struct notifier_block cxgb4_netevent_nb = {
static void drain_db_fifo(struct adapter *adap, int usecs)
{
- u32 v;
+ u32 v1, v2, lp_count, hp_count;
do {
+ v1 = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
+ v2 = t4_read_reg(adap, SGE_DBFIFO_STATUS2);
+ if (is_t4(adap->chip)) {
+ lp_count = G_LP_COUNT(v1);
+ hp_count = G_HP_COUNT(v1);
+ } else {
+ lp_count = G_LP_COUNT_T5(v1);
+ hp_count = G_HP_COUNT_T5(v2);
+ }
+
+ if (lp_count == 0 && hp_count == 0)
+ break;
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(usecs_to_jiffies(usecs));
- v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
- if (G_LP_COUNT(v) == 0 && G_HP_COUNT(v) == 0)
- break;
} while (1);
}
@@ -3484,24 +3501,62 @@ static void process_db_drop(struct work_struct *work)
adap = container_of(work, struct adapter, db_drop_task);
+ if (is_t4(adap->chip)) {
+ disable_dbs(adap);
+ notify_rdma_uld(adap, CXGB4_CONTROL_DB_DROP);
+ drain_db_fifo(adap, 1);
+ recover_all_queues(adap);
+ enable_dbs(adap);
+ } else {
+ u32 dropped_db = t4_read_reg(adap, 0x010ac);
+ u16 qid = (dropped_db >> 15) & 0x1ffff;
+ u16 pidx_inc = dropped_db & 0x1fff;
+ unsigned int s_qpp;
+ unsigned short udb_density;
+ unsigned long qpshift;
+ int page;
+ u32 udb;
+
+ dev_warn(adap->pdev_dev,
+ "Dropped DB 0x%x qid %d bar2 %d coalesce %d pidx %d\n",
+ dropped_db, qid,
+ (dropped_db >> 14) & 1,
+ (dropped_db >> 13) & 1,
+ pidx_inc);
+
+ drain_db_fifo(adap, 1);
+
+ s_qpp = QUEUESPERPAGEPF1 * adap->fn;
+ udb_density = 1 << QUEUESPERPAGEPF0_GET(t4_read_reg(adap,
+ SGE_EGRESS_QUEUES_PER_PAGE_PF) >> s_qpp);
+ qpshift = PAGE_SHIFT - ilog2(udb_density);
+ udb = qid << qpshift;
+ udb &= PAGE_MASK;
+ page = udb / PAGE_SIZE;
+ udb += (qid - (page * udb_density)) * 128;
+
+ writel(PIDX(pidx_inc), adap->bar2 + udb + 8);
+
+ /* Re-enable BAR2 WC */
+ t4_set_reg_field(adap, 0x10b0, 1<<15, 1<<15);
+ }
+
t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_DROPPED_DB, 0);
- disable_dbs(adap);
- notify_rdma_uld(adap, CXGB4_CONTROL_DB_DROP);
- drain_db_fifo(adap, 1);
- recover_all_queues(adap);
- enable_dbs(adap);
}
void t4_db_full(struct adapter *adap)
{
- t4_set_reg_field(adap, SGE_INT_ENABLE3,
- DBFIFO_HP_INT | DBFIFO_LP_INT, 0);
- queue_work(workq, &adap->db_full_task);
+ if (is_t4(adap->chip)) {
+ t4_set_reg_field(adap, SGE_INT_ENABLE3,
+ DBFIFO_HP_INT | DBFIFO_LP_INT, 0);
+ queue_work(workq, &adap->db_full_task);
+ }
}
void t4_db_dropped(struct adapter *adap)
{
- queue_work(workq, &adap->db_drop_task);
+ if (is_t4(adap->chip))
+ queue_work(workq, &adap->db_drop_task);
}
static void uld_attach(struct adapter *adap, unsigned int uld)
--
1.7.1
next prev parent reply other threads:[~2013-03-12 11:46 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-12 11:46 [PATCH net-next 00/22] Add support for Chelsio T5 adapter Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 01/22] cxgb4: Add register definations for T5 Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 02/22] cxgb4: Add macros, structures and inline functions " Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 03/22] cxgb4: Initialize T5 Vipul Pandya
[not found] ` <1363088794-31453-1-git-send-email-vipul-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>
2013-03-12 11:46 ` [PATCH net-next 04/22] cxgb4: Dump T5 registers Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 05/22] cxgb4: Add T5 write combining support Vipul Pandya
2013-03-12 12:19 ` David Miller
[not found] ` <20130312.081927.1036246728528667686.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2013-03-12 14:42 ` Steve Wise
[not found] ` <513F3EBD.5020504-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
2013-03-13 14:36 ` Vipul Pandya
2013-03-13 15:43 ` David Laight
2013-03-13 22:54 ` Casey Leedom
2013-03-12 11:46 ` [PATCH net-next 07/22] cxgb4: Add T5 debugfs support Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 08/22] cxgb4: Add T5 PCI ids Vipul Pandya
2013-03-12 11:46 ` Vipul Pandya [this message]
2013-03-12 11:46 ` [PATCH net-next 09/22] cxgb4: Update driver version and description Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 10/22] cxgb4: Disable SR-IOV support for PF4-7 for T5 Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 11/22] cxgb4vf: Add support for Chelsio T5 adapter Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 12/22] RDMA/cxgb4: Add Support " Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 13/22] RDMA/cxgb4: Turn off db coalescing when RDMA QPs are in use Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 14/22] RDMA/cxgb4: Add module_params to enable DB FC & Coalescing on T5 Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 15/22] RDMA/cxgb4: Use DSGLs for fastreg and adapter memory writes for T5 Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 16/22] RDMA/cxgb4: Map pbl buffers for dma if using DSGL Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 17/22] RDMA/cxgb4: Bump tcam_full stat and WR reply timeout Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 18/22] RDMA/cxgb4: Fix onchip queue support for T5 Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 19/22] csiostor: Segregate T4 adapter operations Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 20/22] csiostor: Add T5 " Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 21/22] csiostor: Header file modifications for chip support and bug fixes Vipul Pandya
2013-03-12 11:46 ` [PATCH net-next 22/22] csiostor: Cleanup chip specific operations Vipul Pandya
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1363088794-31453-7-git-send-email-vipul@chelsio.com \
--to=vipul@chelsio.com \
--cc=JBottomley@parallels.com \
--cc=abhishek@chelsio.com \
--cc=arvindb@chelsio.com \
--cc=davem@davemloft.net \
--cc=divy@chelsio.com \
--cc=dm@chelsio.com \
--cc=leedom@chelsio.com \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=naresh@chelsio.com \
--cc=netdev@vger.kernel.org \
--cc=roland@purestorage.com \
--cc=santosh@chelsio.com \
--cc=swise@opengridcomputing.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox