Lines Matching refs:skdev

282 static inline u32 skd_reg_read32(struct skd_device *skdev, u32 offset)  in skd_reg_read32()  argument
284 u32 val = readl(skdev->mem_map[1] + offset); in skd_reg_read32()
286 if (unlikely(skdev->dbg_level >= 2)) in skd_reg_read32()
287 dev_dbg(&skdev->pdev->dev, "offset %x = %x\n", offset, val); in skd_reg_read32()
291 static inline void skd_reg_write32(struct skd_device *skdev, u32 val, in skd_reg_write32() argument
294 writel(val, skdev->mem_map[1] + offset); in skd_reg_write32()
295 if (unlikely(skdev->dbg_level >= 2)) in skd_reg_write32()
296 dev_dbg(&skdev->pdev->dev, "offset %x = %x\n", offset, val); in skd_reg_write32()
299 static inline void skd_reg_write64(struct skd_device *skdev, u64 val, in skd_reg_write64() argument
302 writeq(val, skdev->mem_map[1] + offset); in skd_reg_write64()
303 if (unlikely(skdev->dbg_level >= 2)) in skd_reg_write64()
304 dev_dbg(&skdev->pdev->dev, "offset %x = %016llx\n", offset, in skd_reg_write64()
353 static void skd_destruct(struct skd_device *skdev);
355 static void skd_send_fitmsg(struct skd_device *skdev,
357 static void skd_send_special_fitmsg(struct skd_device *skdev,
359 static bool skd_preop_sg_list(struct skd_device *skdev,
361 static void skd_postop_sg_list(struct skd_device *skdev,
364 static void skd_restart_device(struct skd_device *skdev);
365 static int skd_quiesce_dev(struct skd_device *skdev);
366 static int skd_unquiesce_dev(struct skd_device *skdev);
367 static void skd_disable_interrupts(struct skd_device *skdev);
368 static void skd_isr_fwstate(struct skd_device *skdev);
369 static void skd_recover_requests(struct skd_device *skdev);
370 static void skd_soft_reset(struct skd_device *skdev);
374 static void skd_log_skdev(struct skd_device *skdev, const char *event);
375 static void skd_log_skreq(struct skd_device *skdev,
391 static int skd_in_flight(struct skd_device *skdev) in skd_in_flight() argument
395 blk_mq_tagset_busy_iter(&skdev->tag_set, skd_inc_in_flight, &count); in skd_in_flight()
444 struct skd_device *skdev = q->queuedata; in skd_fail_all() local
446 SKD_ASSERT(skdev->state != SKD_DRVR_STATE_ONLINE); in skd_fail_all()
448 skd_log_skdev(skdev, "req_not_online"); in skd_fail_all()
449 switch (skdev->state) { in skd_fail_all()
482 struct skd_device *skdev = q->queuedata; in skd_mq_queue_rq() local
493 if (unlikely(skdev->state != SKD_DRVR_STATE_ONLINE)) in skd_mq_queue_rq()
508 dev_dbg(&skdev->pdev->dev, in skd_mq_queue_rq()
521 if (req->bio && !skd_preop_sg_list(skdev, skreq)) { in skd_mq_queue_rq()
522 dev_dbg(&skdev->pdev->dev, "error Out\n"); in skd_mq_queue_rq()
528 dma_sync_single_for_device(&skdev->pdev->dev, skreq->sksg_dma_address, in skd_mq_queue_rq()
537 spin_lock_irqsave(&skdev->lock, flags); in skd_mq_queue_rq()
538 skmsg = skdev->skmsg; in skd_mq_queue_rq()
541 skmsg = &skdev->skmsg_table[tag]; in skd_mq_queue_rq()
542 skdev->skmsg = skmsg; in skd_mq_queue_rq()
580 dev_dbg(&skdev->pdev->dev, "req=0x%x busy=%d\n", skreq->id, in skd_mq_queue_rq()
581 skd_in_flight(skdev)); in skd_mq_queue_rq()
587 skd_send_fitmsg(skdev, skmsg); in skd_mq_queue_rq()
591 skd_send_fitmsg(skdev, skmsg); in skd_mq_queue_rq()
592 skdev->skmsg = NULL; in skd_mq_queue_rq()
594 spin_unlock_irqrestore(&skdev->lock, flags); in skd_mq_queue_rq()
603 struct skd_device *skdev = req->q->queuedata; in skd_timed_out() local
605 dev_err(&skdev->pdev->dev, "request with tag %#x timed out\n", in skd_timed_out()
618 static bool skd_preop_sg_list(struct skd_device *skdev, in skd_preop_sg_list() argument
631 n_sg = blk_rq_map_sg(skdev->queue, req, sgl); in skd_preop_sg_list()
639 n_sg = dma_map_sg(&skdev->pdev->dev, sgl, n_sg, skreq->data_dir); in skd_preop_sg_list()
643 SKD_ASSERT(n_sg <= skdev->sgs_per_request); in skd_preop_sg_list()
662 if (unlikely(skdev->dbg_level > 1)) { in skd_preop_sg_list()
663 dev_dbg(&skdev->pdev->dev, in skd_preop_sg_list()
669 dev_dbg(&skdev->pdev->dev, in skd_preop_sg_list()
679 static void skd_postop_sg_list(struct skd_device *skdev, in skd_postop_sg_list() argument
689 dma_unmap_sg(&skdev->pdev->dev, &skreq->sg[0], skreq->n_sg, in skd_postop_sg_list()
699 static void skd_timer_tick_not_online(struct skd_device *skdev);
703 struct skd_device *skdev = container_of(work, typeof(*skdev), in skd_start_queue() local
711 blk_mq_start_hw_queues(skdev->queue); in skd_start_queue()
716 struct skd_device *skdev = from_timer(skdev, t, timer); in skd_timer_tick() local
720 if (skdev->state == SKD_DRVR_STATE_FAULT) in skd_timer_tick()
726 spin_lock_irqsave(&skdev->lock, reqflags); in skd_timer_tick()
728 state = SKD_READL(skdev, FIT_STATUS); in skd_timer_tick()
730 if (state != skdev->drive_state) in skd_timer_tick()
731 skd_isr_fwstate(skdev); in skd_timer_tick()
733 if (skdev->state != SKD_DRVR_STATE_ONLINE) in skd_timer_tick()
734 skd_timer_tick_not_online(skdev); in skd_timer_tick()
736 mod_timer(&skdev->timer, (jiffies + HZ)); in skd_timer_tick()
738 spin_unlock_irqrestore(&skdev->lock, reqflags); in skd_timer_tick()
741 static void skd_timer_tick_not_online(struct skd_device *skdev) in skd_timer_tick_not_online() argument
743 switch (skdev->state) { in skd_timer_tick_not_online()
748 dev_dbg(&skdev->pdev->dev, in skd_timer_tick_not_online()
750 skdev->drive_state, skdev->state); in skd_timer_tick_not_online()
754 if (skdev->timer_countdown > 0) { in skd_timer_tick_not_online()
755 skdev->timer_countdown--; in skd_timer_tick_not_online()
758 skd_recover_requests(skdev); in skd_timer_tick_not_online()
764 dev_dbg(&skdev->pdev->dev, "busy[%x], countdown=%d\n", in skd_timer_tick_not_online()
765 skdev->state, skdev->timer_countdown); in skd_timer_tick_not_online()
766 if (skdev->timer_countdown > 0) { in skd_timer_tick_not_online()
767 skdev->timer_countdown--; in skd_timer_tick_not_online()
770 dev_dbg(&skdev->pdev->dev, in skd_timer_tick_not_online()
772 skdev->state, skdev->timer_countdown); in skd_timer_tick_not_online()
773 skd_restart_device(skdev); in skd_timer_tick_not_online()
778 if (skdev->timer_countdown > 0) { in skd_timer_tick_not_online()
779 skdev->timer_countdown--; in skd_timer_tick_not_online()
784 skdev->state = SKD_DRVR_STATE_FAULT; in skd_timer_tick_not_online()
786 dev_err(&skdev->pdev->dev, "DriveFault Connect Timeout (%x)\n", in skd_timer_tick_not_online()
787 skdev->drive_state); in skd_timer_tick_not_online()
791 schedule_work(&skdev->start_queue); in skd_timer_tick_not_online()
792 skdev->gendisk_on = -1; in skd_timer_tick_not_online()
793 wake_up_interruptible(&skdev->waitq); in skd_timer_tick_not_online()
805 if (skdev->timer_countdown > 0) { in skd_timer_tick_not_online()
806 skdev->timer_countdown--; in skd_timer_tick_not_online()
811 skdev->state = SKD_DRVR_STATE_FAULT; in skd_timer_tick_not_online()
812 dev_err(&skdev->pdev->dev, in skd_timer_tick_not_online()
814 skdev->drive_state); in skd_timer_tick_not_online()
828 if ((skdev->drive_state == FIT_SR_DRIVE_SOFT_RESET) || in skd_timer_tick_not_online()
829 (skdev->drive_state == FIT_SR_DRIVE_FAULT) || in skd_timer_tick_not_online()
830 (skdev->drive_state == FIT_SR_DRIVE_STATE_MASK)) in skd_timer_tick_not_online()
834 skd_recover_requests(skdev); in skd_timer_tick_not_online()
836 dev_err(&skdev->pdev->dev, "Disable BusMaster (%x)\n", in skd_timer_tick_not_online()
837 skdev->drive_state); in skd_timer_tick_not_online()
838 pci_disable_device(skdev->pdev); in skd_timer_tick_not_online()
839 skd_disable_interrupts(skdev); in skd_timer_tick_not_online()
840 skd_recover_requests(skdev); in skd_timer_tick_not_online()
845 schedule_work(&skdev->start_queue); in skd_timer_tick_not_online()
846 skdev->gendisk_on = -1; in skd_timer_tick_not_online()
847 wake_up_interruptible(&skdev->waitq); in skd_timer_tick_not_online()
860 static int skd_start_timer(struct skd_device *skdev) in skd_start_timer() argument
864 timer_setup(&skdev->timer, skd_timer_tick, 0); in skd_start_timer()
866 rc = mod_timer(&skdev->timer, (jiffies + HZ)); in skd_start_timer()
868 dev_err(&skdev->pdev->dev, "failed to start timer %d\n", rc); in skd_start_timer()
872 static void skd_kill_timer(struct skd_device *skdev) in skd_kill_timer() argument
874 del_timer_sync(&skdev->timer); in skd_kill_timer()
883 static int skd_format_internal_skspcl(struct skd_device *skdev) in skd_format_internal_skspcl() argument
885 struct skd_special_context *skspcl = &skdev->internal_skspcl; in skd_format_internal_skspcl()
911 static void skd_send_internal_skspcl(struct skd_device *skdev, in skd_send_internal_skspcl() argument
989 skd_send_special_fitmsg(skdev, skspcl); in skd_send_internal_skspcl()
992 static void skd_refresh_device_data(struct skd_device *skdev) in skd_refresh_device_data() argument
994 struct skd_special_context *skspcl = &skdev->internal_skspcl; in skd_refresh_device_data()
996 skd_send_internal_skspcl(skdev, skspcl, TEST_UNIT_READY); in skd_refresh_device_data()
999 static int skd_chk_read_buf(struct skd_device *skdev, in skd_chk_read_buf() argument
1013 static void skd_log_check_status(struct skd_device *skdev, u8 status, u8 key, in skd_log_check_status() argument
1019 dev_err(&skdev->pdev->dev, in skd_log_check_status()
1025 static void skd_complete_internal(struct skd_device *skdev, in skd_complete_internal() argument
1035 lockdep_assert_held(&skdev->lock); in skd_complete_internal()
1037 SKD_ASSERT(skspcl == &skdev->internal_skspcl); in skd_complete_internal()
1039 dev_dbg(&skdev->pdev->dev, "complete internal %x\n", scsi->cdb[0]); in skd_complete_internal()
1041 dma_sync_single_for_cpu(&skdev->pdev->dev, in skd_complete_internal()
1051 skd_log_check_status(skdev, status, skerr->key, skerr->code, in skd_complete_internal()
1057 skd_send_internal_skspcl(skdev, skspcl, WRITE_BUFFER); in skd_complete_internal()
1060 skd_send_internal_skspcl(skdev, skspcl, WRITE_BUFFER); in skd_complete_internal()
1062 if (skdev->state == SKD_DRVR_STATE_STOPPING) { in skd_complete_internal()
1063 dev_dbg(&skdev->pdev->dev, in skd_complete_internal()
1065 skdev->state); in skd_complete_internal()
1068 dev_dbg(&skdev->pdev->dev, in skd_complete_internal()
1070 skd_send_internal_skspcl(skdev, skspcl, in skd_complete_internal()
1077 skd_send_internal_skspcl(skdev, skspcl, READ_BUFFER); in skd_complete_internal()
1079 if (skdev->state == SKD_DRVR_STATE_STOPPING) { in skd_complete_internal()
1080 dev_dbg(&skdev->pdev->dev, in skd_complete_internal()
1082 skdev->state); in skd_complete_internal()
1085 dev_dbg(&skdev->pdev->dev, in skd_complete_internal()
1087 skd_send_internal_skspcl(skdev, skspcl, in skd_complete_internal()
1094 if (skd_chk_read_buf(skdev, skspcl) == 0) in skd_complete_internal()
1095 skd_send_internal_skspcl(skdev, skspcl, in skd_complete_internal()
1098 dev_err(&skdev->pdev->dev, in skd_complete_internal()
1100 skdev->connect_retries); in skd_complete_internal()
1101 if (skdev->connect_retries < in skd_complete_internal()
1103 skdev->connect_retries++; in skd_complete_internal()
1104 skd_soft_reset(skdev); in skd_complete_internal()
1106 dev_err(&skdev->pdev->dev, in skd_complete_internal()
1113 if (skdev->state == SKD_DRVR_STATE_STOPPING) { in skd_complete_internal()
1114 dev_dbg(&skdev->pdev->dev, in skd_complete_internal()
1116 skdev->state); in skd_complete_internal()
1119 dev_dbg(&skdev->pdev->dev, in skd_complete_internal()
1121 skd_send_internal_skspcl(skdev, skspcl, in skd_complete_internal()
1127 skdev->read_cap_is_valid = 0; in skd_complete_internal()
1129 skdev->read_cap_last_lba = in skd_complete_internal()
1132 skdev->read_cap_blocksize = in skd_complete_internal()
1136 dev_dbg(&skdev->pdev->dev, "last lba %d, bs %d\n", in skd_complete_internal()
1137 skdev->read_cap_last_lba, in skd_complete_internal()
1138 skdev->read_cap_blocksize); in skd_complete_internal()
1140 set_capacity(skdev->disk, skdev->read_cap_last_lba + 1); in skd_complete_internal()
1142 skdev->read_cap_is_valid = 1; in skd_complete_internal()
1144 skd_send_internal_skspcl(skdev, skspcl, INQUIRY); in skd_complete_internal()
1147 skdev->read_cap_last_lba = ~0; in skd_complete_internal()
1148 set_capacity(skdev->disk, skdev->read_cap_last_lba + 1); in skd_complete_internal()
1149 …dev_dbg(&skdev->pdev->dev, "**** MEDIUM ERROR caused READCAP to fail, ignore failure and continue … in skd_complete_internal()
1150 skd_send_internal_skspcl(skdev, skspcl, INQUIRY); in skd_complete_internal()
1152 dev_dbg(&skdev->pdev->dev, "**** READCAP failed, retry TUR\n"); in skd_complete_internal()
1153 skd_send_internal_skspcl(skdev, skspcl, in skd_complete_internal()
1159 skdev->inquiry_is_valid = 0; in skd_complete_internal()
1161 skdev->inquiry_is_valid = 1; in skd_complete_internal()
1164 skdev->inq_serial_num[i] = buf[i + 4]; in skd_complete_internal()
1165 skdev->inq_serial_num[12] = 0; in skd_complete_internal()
1168 if (skd_unquiesce_dev(skdev) < 0) in skd_complete_internal()
1169 dev_dbg(&skdev->pdev->dev, "**** failed, to ONLINE device\n"); in skd_complete_internal()
1171 skdev->connect_retries = 0; in skd_complete_internal()
1176 skdev->sync_done = 1; in skd_complete_internal()
1178 skdev->sync_done = -1; in skd_complete_internal()
1179 wake_up_interruptible(&skdev->waitq); in skd_complete_internal()
1193 static void skd_send_fitmsg(struct skd_device *skdev, in skd_send_fitmsg() argument
1198 dev_dbg(&skdev->pdev->dev, "dma address %pad, busy=%d\n", in skd_send_fitmsg()
1199 &skmsg->mb_dma_address, skd_in_flight(skdev)); in skd_send_fitmsg()
1200 dev_dbg(&skdev->pdev->dev, "msg_buf %p\n", skmsg->msg_buf); in skd_send_fitmsg()
1205 if (unlikely(skdev->dbg_level > 1)) { in skd_send_fitmsg()
1209 dev_dbg(&skdev->pdev->dev, "msg[%2d] %8ph\n", i, in skd_send_fitmsg()
1230 dma_sync_single_for_device(&skdev->pdev->dev, skmsg->mb_dma_address, in skd_send_fitmsg()
1236 SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND); in skd_send_fitmsg()
1239 static void skd_send_special_fitmsg(struct skd_device *skdev, in skd_send_special_fitmsg() argument
1246 if (unlikely(skdev->dbg_level > 1)) { in skd_send_special_fitmsg()
1251 dev_dbg(&skdev->pdev->dev, " spcl[%2d] %8ph\n", i, in skd_send_special_fitmsg()
1257 dev_dbg(&skdev->pdev->dev, in skd_send_special_fitmsg()
1265 dev_dbg(&skdev->pdev->dev, in skd_send_special_fitmsg()
1279 dma_sync_single_for_device(&skdev->pdev->dev, skspcl->mb_dma_address, in skd_send_special_fitmsg()
1281 dma_sync_single_for_device(&skdev->pdev->dev, in skd_send_special_fitmsg()
1285 dma_sync_single_for_device(&skdev->pdev->dev, in skd_send_special_fitmsg()
1293 SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND); in skd_send_special_fitmsg()
1302 static void skd_complete_other(struct skd_device *skdev,
1352 skd_check_status(struct skd_device *skdev, in skd_check_status() argument
1357 dev_err(&skdev->pdev->dev, "key/asc/ascq/fruc %02x/%02x/%02x/%02x\n", in skd_check_status()
1360 dev_dbg(&skdev->pdev->dev, in skd_check_status()
1390 dev_err(&skdev->pdev->dev, in skd_check_status()
1401 dev_dbg(&skdev->pdev->dev, "status check: error\n"); in skd_check_status()
1405 dev_dbg(&skdev->pdev->dev, "status check good default\n"); in skd_check_status()
1409 static void skd_resolve_req_exception(struct skd_device *skdev, in skd_resolve_req_exception() argument
1415 switch (skd_check_status(skdev, cmp_status, &skreq->err_info)) { in skd_resolve_req_exception()
1424 skd_log_skreq(skdev, skreq, "retry(busy)"); in skd_resolve_req_exception()
1426 dev_info(&skdev->pdev->dev, "drive BUSY imminent\n"); in skd_resolve_req_exception()
1427 skdev->state = SKD_DRVR_STATE_BUSY_IMMINENT; in skd_resolve_req_exception()
1428 skdev->timer_countdown = SKD_TIMER_MINUTES(20); in skd_resolve_req_exception()
1429 skd_quiesce_dev(skdev); in skd_resolve_req_exception()
1434 skd_log_skreq(skdev, skreq, "retry"); in skd_resolve_req_exception()
1449 static void skd_release_skreq(struct skd_device *skdev, in skd_release_skreq() argument
1458 static int skd_isr_completion_posted(struct skd_device *skdev, in skd_isr_completion_posted() argument
1475 lockdep_assert_held(&skdev->lock); in skd_isr_completion_posted()
1478 SKD_ASSERT(skdev->skcomp_ix < SKD_N_COMPLETION_ENTRY); in skd_isr_completion_posted()
1480 skcmp = &skdev->skcomp_table[skdev->skcomp_ix]; in skd_isr_completion_posted()
1486 skerr = &skdev->skerr_table[skdev->skcomp_ix]; in skd_isr_completion_posted()
1488 dev_dbg(&skdev->pdev->dev, in skd_isr_completion_posted()
1490 skdev->skcomp_cycle, skdev->skcomp_ix, cmp_cycle, in skd_isr_completion_posted()
1491 cmp_cntxt, cmp_status, skd_in_flight(skdev), in skd_isr_completion_posted()
1492 cmp_bytes, skdev->proto_ver); in skd_isr_completion_posted()
1494 if (cmp_cycle != skdev->skcomp_cycle) { in skd_isr_completion_posted()
1495 dev_dbg(&skdev->pdev->dev, "end of completions\n"); in skd_isr_completion_posted()
1502 skdev->skcomp_ix++; in skd_isr_completion_posted()
1503 if (skdev->skcomp_ix >= SKD_N_COMPLETION_ENTRY) { in skd_isr_completion_posted()
1504 skdev->skcomp_ix = 0; in skd_isr_completion_posted()
1505 skdev->skcomp_cycle++; in skd_isr_completion_posted()
1517 if (tag >= skdev->num_req_context) { in skd_isr_completion_posted()
1521 WARN_ON_ONCE(blk_mq_tag_to_rq(skdev->tag_set.tags[hwq], in skd_isr_completion_posted()
1523 skd_complete_other(skdev, skcmp, skerr); in skd_isr_completion_posted()
1527 rq = blk_mq_tag_to_rq(skdev->tag_set.tags[hwq], tag); in skd_isr_completion_posted()
1537 dev_err(&skdev->pdev->dev, in skd_isr_completion_posted()
1549 skd_log_check_status(skdev, cmp_status, skerr->key, in skd_isr_completion_posted()
1555 skd_postop_sg_list(skdev, skreq); in skd_isr_completion_posted()
1557 skd_release_skreq(skdev, skreq); in skd_isr_completion_posted()
1567 skd_resolve_req_exception(skdev, skreq, rq); in skd_isr_completion_posted()
1579 if (skdev->state == SKD_DRVR_STATE_PAUSING && in skd_isr_completion_posted()
1580 skd_in_flight(skdev) == 0) { in skd_isr_completion_posted()
1581 skdev->state = SKD_DRVR_STATE_PAUSED; in skd_isr_completion_posted()
1582 wake_up_interruptible(&skdev->waitq); in skd_isr_completion_posted()
1588 static void skd_complete_other(struct skd_device *skdev, in skd_complete_other() argument
1597 lockdep_assert_held(&skdev->lock); in skd_complete_other()
1603 dev_dbg(&skdev->pdev->dev, "table=0x%x id=0x%x slot=%d\n", req_table, in skd_complete_other()
1622 skspcl = &skdev->internal_skspcl; in skd_complete_other()
1625 skd_complete_internal(skdev, in skd_complete_other()
1650 static void skd_reset_skcomp(struct skd_device *skdev) in skd_reset_skcomp() argument
1652 memset(skdev->skcomp_table, 0, SKD_SKCOMP_SIZE); in skd_reset_skcomp()
1654 skdev->skcomp_ix = 0; in skd_reset_skcomp()
1655 skdev->skcomp_cycle = 1; in skd_reset_skcomp()
1665 struct skd_device *skdev = in skd_completion_worker() local
1670 spin_lock_irqsave(&skdev->lock, flags); in skd_completion_worker()
1676 skd_isr_completion_posted(skdev, 0, &flush_enqueued); in skd_completion_worker()
1677 schedule_work(&skdev->start_queue); in skd_completion_worker()
1679 spin_unlock_irqrestore(&skdev->lock, flags); in skd_completion_worker()
1682 static void skd_isr_msg_from_dev(struct skd_device *skdev);
1687 struct skd_device *skdev = ptr; in skd_isr() local
1694 spin_lock(&skdev->lock); in skd_isr()
1697 intstat = SKD_READL(skdev, FIT_INT_STATUS_HOST); in skd_isr()
1702 dev_dbg(&skdev->pdev->dev, "intstat=0x%x ack=0x%x\n", intstat, in skd_isr()
1714 if (likely (skdev->state in skd_isr()
1722 SKD_WRITEL(skdev, ack, FIT_INT_STATUS_HOST); in skd_isr()
1724 if (likely((skdev->state != SKD_DRVR_STATE_LOAD) && in skd_isr()
1725 (skdev->state != SKD_DRVR_STATE_STOPPING))) { in skd_isr()
1733 skd_isr_completion_posted(skdev, in skd_isr()
1738 skd_isr_fwstate(skdev); in skd_isr()
1739 if (skdev->state == SKD_DRVR_STATE_FAULT || in skd_isr()
1740 skdev->state == in skd_isr()
1742 spin_unlock(&skdev->lock); in skd_isr()
1748 skd_isr_msg_from_dev(skdev); in skd_isr()
1753 schedule_work(&skdev->start_queue); in skd_isr()
1756 schedule_work(&skdev->completion_worker); in skd_isr()
1758 schedule_work(&skdev->start_queue); in skd_isr()
1760 spin_unlock(&skdev->lock); in skd_isr()
1765 static void skd_drive_fault(struct skd_device *skdev) in skd_drive_fault() argument
1767 skdev->state = SKD_DRVR_STATE_FAULT; in skd_drive_fault()
1768 dev_err(&skdev->pdev->dev, "Drive FAULT\n"); in skd_drive_fault()
1771 static void skd_drive_disappeared(struct skd_device *skdev) in skd_drive_disappeared() argument
1773 skdev->state = SKD_DRVR_STATE_DISAPPEARED; in skd_drive_disappeared()
1774 dev_err(&skdev->pdev->dev, "Drive DISAPPEARED\n"); in skd_drive_disappeared()
1777 static void skd_isr_fwstate(struct skd_device *skdev) in skd_isr_fwstate() argument
1782 int prev_driver_state = skdev->state; in skd_isr_fwstate()
1784 sense = SKD_READL(skdev, FIT_STATUS); in skd_isr_fwstate()
1787 dev_err(&skdev->pdev->dev, "s1120 state %s(%d)=>%s(%d)\n", in skd_isr_fwstate()
1788 skd_drive_state_to_str(skdev->drive_state), skdev->drive_state, in skd_isr_fwstate()
1791 skdev->drive_state = state; in skd_isr_fwstate()
1793 switch (skdev->drive_state) { in skd_isr_fwstate()
1795 if (skdev->state == SKD_DRVR_STATE_PROTOCOL_MISMATCH) { in skd_isr_fwstate()
1796 skd_disable_interrupts(skdev); in skd_isr_fwstate()
1799 if (skdev->state == SKD_DRVR_STATE_RESTARTING) in skd_isr_fwstate()
1800 skd_recover_requests(skdev); in skd_isr_fwstate()
1801 if (skdev->state == SKD_DRVR_STATE_WAIT_BOOT) { in skd_isr_fwstate()
1802 skdev->timer_countdown = SKD_STARTING_TIMO; in skd_isr_fwstate()
1803 skdev->state = SKD_DRVR_STATE_STARTING; in skd_isr_fwstate()
1804 skd_soft_reset(skdev); in skd_isr_fwstate()
1808 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_fwstate()
1809 skdev->last_mtd = mtd; in skd_isr_fwstate()
1813 skdev->cur_max_queue_depth = skd_max_queue_depth; in skd_isr_fwstate()
1814 if (skdev->cur_max_queue_depth > skdev->dev_max_queue_depth) in skd_isr_fwstate()
1815 skdev->cur_max_queue_depth = skdev->dev_max_queue_depth; in skd_isr_fwstate()
1817 skdev->queue_low_water_mark = in skd_isr_fwstate()
1818 skdev->cur_max_queue_depth * 2 / 3 + 1; in skd_isr_fwstate()
1819 if (skdev->queue_low_water_mark < 1) in skd_isr_fwstate()
1820 skdev->queue_low_water_mark = 1; in skd_isr_fwstate()
1821 dev_info(&skdev->pdev->dev, in skd_isr_fwstate()
1823 skdev->cur_max_queue_depth, in skd_isr_fwstate()
1824 skdev->dev_max_queue_depth, in skd_isr_fwstate()
1825 skdev->queue_low_water_mark); in skd_isr_fwstate()
1827 skd_refresh_device_data(skdev); in skd_isr_fwstate()
1831 skdev->state = SKD_DRVR_STATE_BUSY; in skd_isr_fwstate()
1832 skdev->timer_countdown = SKD_BUSY_TIMO; in skd_isr_fwstate()
1833 skd_quiesce_dev(skdev); in skd_isr_fwstate()
1839 skdev->state = SKD_DRVR_STATE_BUSY_SANITIZE; in skd_isr_fwstate()
1840 skdev->timer_countdown = SKD_TIMER_SECONDS(3); in skd_isr_fwstate()
1841 schedule_work(&skdev->start_queue); in skd_isr_fwstate()
1844 skdev->state = SKD_DRVR_STATE_BUSY_ERASE; in skd_isr_fwstate()
1845 skdev->timer_countdown = SKD_BUSY_TIMO; in skd_isr_fwstate()
1848 skdev->state = SKD_DRVR_STATE_IDLE; in skd_isr_fwstate()
1851 switch (skdev->state) { in skd_isr_fwstate()
1857 skdev->state = SKD_DRVR_STATE_RESTARTING; in skd_isr_fwstate()
1862 dev_dbg(&skdev->pdev->dev, "ISR FIT_SR_DRIVE_FW_BOOTING\n"); in skd_isr_fwstate()
1863 skdev->state = SKD_DRVR_STATE_WAIT_BOOT; in skd_isr_fwstate()
1864 skdev->timer_countdown = SKD_WAIT_BOOT_TIMO; in skd_isr_fwstate()
1873 skd_drive_fault(skdev); in skd_isr_fwstate()
1874 skd_recover_requests(skdev); in skd_isr_fwstate()
1875 schedule_work(&skdev->start_queue); in skd_isr_fwstate()
1880 dev_info(&skdev->pdev->dev, "state=0x%x sense=0x%x\n", state, in skd_isr_fwstate()
1882 skd_drive_disappeared(skdev); in skd_isr_fwstate()
1883 skd_recover_requests(skdev); in skd_isr_fwstate()
1884 schedule_work(&skdev->start_queue); in skd_isr_fwstate()
1892 dev_err(&skdev->pdev->dev, "Driver state %s(%d)=>%s(%d)\n", in skd_isr_fwstate()
1894 skd_skdev_state_to_str(skdev->state), skdev->state); in skd_isr_fwstate()
1899 struct skd_device *const skdev = data; in skd_recover_request() local
1905 skd_log_skreq(skdev, skreq, "recover"); in skd_recover_request()
1909 skd_postop_sg_list(skdev, skreq); in skd_recover_request()
1917 static void skd_recover_requests(struct skd_device *skdev) in skd_recover_requests() argument
1919 blk_mq_tagset_busy_iter(&skdev->tag_set, skd_recover_request, skdev); in skd_recover_requests()
1922 static void skd_isr_msg_from_dev(struct skd_device *skdev) in skd_isr_msg_from_dev() argument
1928 mfd = SKD_READL(skdev, FIT_MSG_FROM_DEVICE); in skd_isr_msg_from_dev()
1930 dev_dbg(&skdev->pdev->dev, "mfd=0x%x last_mtd=0x%x\n", mfd, in skd_isr_msg_from_dev()
1931 skdev->last_mtd); in skd_isr_msg_from_dev()
1934 if (FIT_MXD_TYPE(mfd) != FIT_MXD_TYPE(skdev->last_mtd)) in skd_isr_msg_from_dev()
1939 skdev->proto_ver = FIT_PROTOCOL_MAJOR_VER(mfd); in skd_isr_msg_from_dev()
1941 if (skdev->proto_ver != FIT_PROTOCOL_VERSION_1) { in skd_isr_msg_from_dev()
1942 dev_err(&skdev->pdev->dev, "protocol mismatch\n"); in skd_isr_msg_from_dev()
1943 dev_err(&skdev->pdev->dev, " got=%d support=%d\n", in skd_isr_msg_from_dev()
1944 skdev->proto_ver, FIT_PROTOCOL_VERSION_1); in skd_isr_msg_from_dev()
1945 dev_err(&skdev->pdev->dev, " please upgrade driver\n"); in skd_isr_msg_from_dev()
1946 skdev->state = SKD_DRVR_STATE_PROTOCOL_MISMATCH; in skd_isr_msg_from_dev()
1947 skd_soft_reset(skdev); in skd_isr_msg_from_dev()
1951 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1952 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
1956 skdev->dev_max_queue_depth = FIT_MXD_DATA(mfd); in skd_isr_msg_from_dev()
1959 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1960 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
1964 SKD_WRITEQ(skdev, skdev->cq_dma_address, FIT_MSG_TO_DEVICE_ARG); in skd_isr_msg_from_dev()
1966 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1967 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
1971 skd_reset_skcomp(skdev); in skd_isr_msg_from_dev()
1972 mtd = FIT_MXD_CONS(FIT_MTD_CMD_LOG_HOST_ID, 0, skdev->devno); in skd_isr_msg_from_dev()
1973 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1974 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
1979 skdev->connect_time_stamp = (u32)ktime_get_real_seconds(); in skd_isr_msg_from_dev()
1980 data = skdev->connect_time_stamp & 0xFFFF; in skd_isr_msg_from_dev()
1982 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1983 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
1987 skdev->drive_jiffies = FIT_MXD_DATA(mfd); in skd_isr_msg_from_dev()
1988 data = (skdev->connect_time_stamp >> 16) & 0xFFFF; in skd_isr_msg_from_dev()
1990 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1991 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
1995 skdev->drive_jiffies |= (FIT_MXD_DATA(mfd) << 16); in skd_isr_msg_from_dev()
1997 SKD_WRITEL(skdev, mtd, FIT_MSG_TO_DEVICE); in skd_isr_msg_from_dev()
1998 skdev->last_mtd = mtd; in skd_isr_msg_from_dev()
2000 dev_err(&skdev->pdev->dev, "Time sync driver=0x%x device=0x%x\n", in skd_isr_msg_from_dev()
2001 skdev->connect_time_stamp, skdev->drive_jiffies); in skd_isr_msg_from_dev()
2005 skdev->last_mtd = 0; in skd_isr_msg_from_dev()
2016 static void skd_disable_interrupts(struct skd_device *skdev) in skd_disable_interrupts() argument
2020 sense = SKD_READL(skdev, FIT_CONTROL); in skd_disable_interrupts()
2022 SKD_WRITEL(skdev, sense, FIT_CONTROL); in skd_disable_interrupts()
2023 dev_dbg(&skdev->pdev->dev, "sense 0x%x\n", sense); in skd_disable_interrupts()
2028 SKD_WRITEL(skdev, ~0, FIT_INT_MASK_HOST); in skd_disable_interrupts()
2031 static void skd_enable_interrupts(struct skd_device *skdev) in skd_enable_interrupts() argument
2041 SKD_WRITEL(skdev, ~val, FIT_INT_MASK_HOST); in skd_enable_interrupts()
2042 dev_dbg(&skdev->pdev->dev, "interrupt mask=0x%x\n", ~val); in skd_enable_interrupts()
2044 val = SKD_READL(skdev, FIT_CONTROL); in skd_enable_interrupts()
2046 dev_dbg(&skdev->pdev->dev, "control=0x%x\n", val); in skd_enable_interrupts()
2047 SKD_WRITEL(skdev, val, FIT_CONTROL); in skd_enable_interrupts()
2056 static void skd_soft_reset(struct skd_device *skdev) in skd_soft_reset() argument
2060 val = SKD_READL(skdev, FIT_CONTROL); in skd_soft_reset()
2062 dev_dbg(&skdev->pdev->dev, "control=0x%x\n", val); in skd_soft_reset()
2063 SKD_WRITEL(skdev, val, FIT_CONTROL); in skd_soft_reset()
2066 static void skd_start_device(struct skd_device *skdev) in skd_start_device() argument
2072 spin_lock_irqsave(&skdev->lock, flags); in skd_start_device()
2075 SKD_WRITEL(skdev, FIT_INT_DEF_MASK, FIT_INT_STATUS_HOST); in skd_start_device()
2077 sense = SKD_READL(skdev, FIT_STATUS); in skd_start_device()
2079 dev_dbg(&skdev->pdev->dev, "initial status=0x%x\n", sense); in skd_start_device()
2082 skdev->drive_state = state; in skd_start_device()
2083 skdev->last_mtd = 0; in skd_start_device()
2085 skdev->state = SKD_DRVR_STATE_STARTING; in skd_start_device()
2086 skdev->timer_countdown = SKD_STARTING_TIMO; in skd_start_device()
2088 skd_enable_interrupts(skdev); in skd_start_device()
2090 switch (skdev->drive_state) { in skd_start_device()
2092 dev_err(&skdev->pdev->dev, "Drive offline...\n"); in skd_start_device()
2096 dev_dbg(&skdev->pdev->dev, "FIT_SR_DRIVE_FW_BOOTING\n"); in skd_start_device()
2097 skdev->state = SKD_DRVR_STATE_WAIT_BOOT; in skd_start_device()
2098 skdev->timer_countdown = SKD_WAIT_BOOT_TIMO; in skd_start_device()
2102 dev_info(&skdev->pdev->dev, "Start: BUSY_SANITIZE\n"); in skd_start_device()
2103 skdev->state = SKD_DRVR_STATE_BUSY_SANITIZE; in skd_start_device()
2104 skdev->timer_countdown = SKD_STARTED_BUSY_TIMO; in skd_start_device()
2108 dev_info(&skdev->pdev->dev, "Start: BUSY_ERASE\n"); in skd_start_device()
2109 skdev->state = SKD_DRVR_STATE_BUSY_ERASE; in skd_start_device()
2110 skdev->timer_countdown = SKD_STARTED_BUSY_TIMO; in skd_start_device()
2115 skd_soft_reset(skdev); in skd_start_device()
2119 dev_err(&skdev->pdev->dev, "Drive Busy...\n"); in skd_start_device()
2120 skdev->state = SKD_DRVR_STATE_BUSY; in skd_start_device()
2121 skdev->timer_countdown = SKD_STARTED_BUSY_TIMO; in skd_start_device()
2125 dev_err(&skdev->pdev->dev, "drive soft reset in prog\n"); in skd_start_device()
2133 skd_drive_fault(skdev); in skd_start_device()
2135 dev_dbg(&skdev->pdev->dev, "starting queue\n"); in skd_start_device()
2136 schedule_work(&skdev->start_queue); in skd_start_device()
2137 skdev->gendisk_on = -1; in skd_start_device()
2138 wake_up_interruptible(&skdev->waitq); in skd_start_device()
2144 skd_drive_disappeared(skdev); in skd_start_device()
2146 dev_dbg(&skdev->pdev->dev, in skd_start_device()
2148 schedule_work(&skdev->start_queue); in skd_start_device()
2149 skdev->gendisk_on = -1; in skd_start_device()
2150 wake_up_interruptible(&skdev->waitq); in skd_start_device()
2154 dev_err(&skdev->pdev->dev, "Start: unknown state %x\n", in skd_start_device()
2155 skdev->drive_state); in skd_start_device()
2159 state = SKD_READL(skdev, FIT_CONTROL); in skd_start_device()
2160 dev_dbg(&skdev->pdev->dev, "FIT Control Status=0x%x\n", state); in skd_start_device()
2162 state = SKD_READL(skdev, FIT_INT_STATUS_HOST); in skd_start_device()
2163 dev_dbg(&skdev->pdev->dev, "Intr Status=0x%x\n", state); in skd_start_device()
2165 state = SKD_READL(skdev, FIT_INT_MASK_HOST); in skd_start_device()
2166 dev_dbg(&skdev->pdev->dev, "Intr Mask=0x%x\n", state); in skd_start_device()
2168 state = SKD_READL(skdev, FIT_MSG_FROM_DEVICE); in skd_start_device()
2169 dev_dbg(&skdev->pdev->dev, "Msg from Dev=0x%x\n", state); in skd_start_device()
2171 state = SKD_READL(skdev, FIT_HW_VERSION); in skd_start_device()
2172 dev_dbg(&skdev->pdev->dev, "HW version=0x%x\n", state); in skd_start_device()
2174 spin_unlock_irqrestore(&skdev->lock, flags); in skd_start_device()
2177 static void skd_stop_device(struct skd_device *skdev) in skd_stop_device() argument
2180 struct skd_special_context *skspcl = &skdev->internal_skspcl; in skd_stop_device()
2184 spin_lock_irqsave(&skdev->lock, flags); in skd_stop_device()
2186 if (skdev->state != SKD_DRVR_STATE_ONLINE) { in skd_stop_device()
2187 dev_err(&skdev->pdev->dev, "%s not online no sync\n", __func__); in skd_stop_device()
2192 dev_err(&skdev->pdev->dev, "%s no special\n", __func__); in skd_stop_device()
2196 skdev->state = SKD_DRVR_STATE_SYNCING; in skd_stop_device()
2197 skdev->sync_done = 0; in skd_stop_device()
2199 skd_send_internal_skspcl(skdev, skspcl, SYNCHRONIZE_CACHE); in skd_stop_device()
2201 spin_unlock_irqrestore(&skdev->lock, flags); in skd_stop_device()
2203 wait_event_interruptible_timeout(skdev->waitq, in skd_stop_device()
2204 (skdev->sync_done), (10 * HZ)); in skd_stop_device()
2206 spin_lock_irqsave(&skdev->lock, flags); in skd_stop_device()
2208 switch (skdev->sync_done) { in skd_stop_device()
2210 dev_err(&skdev->pdev->dev, "%s no sync\n", __func__); in skd_stop_device()
2213 dev_err(&skdev->pdev->dev, "%s sync done\n", __func__); in skd_stop_device()
2216 dev_err(&skdev->pdev->dev, "%s sync error\n", __func__); in skd_stop_device()
2220 skdev->state = SKD_DRVR_STATE_STOPPING; in skd_stop_device()
2221 spin_unlock_irqrestore(&skdev->lock, flags); in skd_stop_device()
2223 skd_kill_timer(skdev); in skd_stop_device()
2225 spin_lock_irqsave(&skdev->lock, flags); in skd_stop_device()
2226 skd_disable_interrupts(skdev); in skd_stop_device()
2230 SKD_WRITEL(skdev, FIT_INT_DEF_MASK, FIT_INT_STATUS_HOST); in skd_stop_device()
2231 SKD_WRITEL(skdev, FIT_CR_SOFT_RESET, FIT_CONTROL); in skd_stop_device()
2233 spin_unlock_irqrestore(&skdev->lock, flags); in skd_stop_device()
2238 SKD_READL(skdev, FIT_STATUS) & FIT_SR_DRIVE_STATE_MASK; in skd_stop_device()
2246 dev_err(&skdev->pdev->dev, "%s state error 0x%02x\n", __func__, in skd_stop_device()
2251 static void skd_restart_device(struct skd_device *skdev) in skd_restart_device() argument
2256 SKD_WRITEL(skdev, FIT_INT_DEF_MASK, FIT_INT_STATUS_HOST); in skd_restart_device()
2258 state = SKD_READL(skdev, FIT_STATUS); in skd_restart_device()
2260 dev_dbg(&skdev->pdev->dev, "drive status=0x%x\n", state); in skd_restart_device()
2263 skdev->drive_state = state; in skd_restart_device()
2264 skdev->last_mtd = 0; in skd_restart_device()
2266 skdev->state = SKD_DRVR_STATE_RESTARTING; in skd_restart_device()
2267 skdev->timer_countdown = SKD_RESTARTING_TIMO; in skd_restart_device()
2269 skd_soft_reset(skdev); in skd_restart_device()
2273 static int skd_quiesce_dev(struct skd_device *skdev) in skd_quiesce_dev() argument
2277 switch (skdev->state) { in skd_quiesce_dev()
2280 dev_dbg(&skdev->pdev->dev, "stopping queue\n"); in skd_quiesce_dev()
2281 blk_mq_stop_hw_queues(skdev->queue); in skd_quiesce_dev()
2293 dev_dbg(&skdev->pdev->dev, "state [%d] not implemented\n", in skd_quiesce_dev()
2294 skdev->state); in skd_quiesce_dev()
2300 static int skd_unquiesce_dev(struct skd_device *skdev) in skd_unquiesce_dev() argument
2302 int prev_driver_state = skdev->state; in skd_unquiesce_dev()
2304 skd_log_skdev(skdev, "unquiesce"); in skd_unquiesce_dev()
2305 if (skdev->state == SKD_DRVR_STATE_ONLINE) { in skd_unquiesce_dev()
2306 dev_dbg(&skdev->pdev->dev, "**** device already ONLINE\n"); in skd_unquiesce_dev()
2309 if (skdev->drive_state != FIT_SR_DRIVE_ONLINE) { in skd_unquiesce_dev()
2318 skdev->state = SKD_DRVR_STATE_BUSY; in skd_unquiesce_dev()
2319 dev_dbg(&skdev->pdev->dev, "drive BUSY state\n"); in skd_unquiesce_dev()
2327 switch (skdev->state) { in skd_unquiesce_dev()
2337 skdev->state = SKD_DRVR_STATE_ONLINE; in skd_unquiesce_dev()
2338 dev_err(&skdev->pdev->dev, "Driver state %s(%d)=>%s(%d)\n", in skd_unquiesce_dev()
2340 prev_driver_state, skd_skdev_state_to_str(skdev->state), in skd_unquiesce_dev()
2341 skdev->state); in skd_unquiesce_dev()
2342 dev_dbg(&skdev->pdev->dev, in skd_unquiesce_dev()
2344 dev_dbg(&skdev->pdev->dev, "starting queue\n"); in skd_unquiesce_dev()
2345 dev_info(&skdev->pdev->dev, "STEC s1120 ONLINE\n"); in skd_unquiesce_dev()
2346 schedule_work(&skdev->start_queue); in skd_unquiesce_dev()
2347 skdev->gendisk_on = 1; in skd_unquiesce_dev()
2348 wake_up_interruptible(&skdev->waitq); in skd_unquiesce_dev()
2353 dev_dbg(&skdev->pdev->dev, in skd_unquiesce_dev()
2355 skdev->state); in skd_unquiesce_dev()
2369 struct skd_device *skdev = skd_host_data; in skd_reserved_isr() local
2372 spin_lock_irqsave(&skdev->lock, flags); in skd_reserved_isr()
2373 dev_dbg(&skdev->pdev->dev, "MSIX = 0x%x\n", in skd_reserved_isr()
2374 SKD_READL(skdev, FIT_INT_STATUS_HOST)); in skd_reserved_isr()
2375 dev_err(&skdev->pdev->dev, "MSIX reserved irq %d = 0x%x\n", irq, in skd_reserved_isr()
2376 SKD_READL(skdev, FIT_INT_STATUS_HOST)); in skd_reserved_isr()
2377 SKD_WRITEL(skdev, FIT_INT_RESERVED_MASK, FIT_INT_STATUS_HOST); in skd_reserved_isr()
2378 spin_unlock_irqrestore(&skdev->lock, flags); in skd_reserved_isr()
2384 struct skd_device *skdev = skd_host_data; in skd_statec_isr() local
2387 spin_lock_irqsave(&skdev->lock, flags); in skd_statec_isr()
2388 dev_dbg(&skdev->pdev->dev, "MSIX = 0x%x\n", in skd_statec_isr()
2389 SKD_READL(skdev, FIT_INT_STATUS_HOST)); in skd_statec_isr()
2390 SKD_WRITEL(skdev, FIT_ISH_FW_STATE_CHANGE, FIT_INT_STATUS_HOST); in skd_statec_isr()
2391 skd_isr_fwstate(skdev); in skd_statec_isr()
2392 spin_unlock_irqrestore(&skdev->lock, flags); in skd_statec_isr()
2398 struct skd_device *skdev = skd_host_data; in skd_comp_q() local
2403 spin_lock_irqsave(&skdev->lock, flags); in skd_comp_q()
2404 dev_dbg(&skdev->pdev->dev, "MSIX = 0x%x\n", in skd_comp_q()
2405 SKD_READL(skdev, FIT_INT_STATUS_HOST)); in skd_comp_q()
2406 SKD_WRITEL(skdev, FIT_ISH_COMPLETION_POSTED, FIT_INT_STATUS_HOST); in skd_comp_q()
2407 deferred = skd_isr_completion_posted(skdev, skd_isr_comp_limit, in skd_comp_q()
2410 schedule_work(&skdev->start_queue); in skd_comp_q()
2413 schedule_work(&skdev->completion_worker); in skd_comp_q()
2415 schedule_work(&skdev->start_queue); in skd_comp_q()
2417 spin_unlock_irqrestore(&skdev->lock, flags); in skd_comp_q()
2424 struct skd_device *skdev = skd_host_data; in skd_msg_isr() local
2427 spin_lock_irqsave(&skdev->lock, flags); in skd_msg_isr()
2428 dev_dbg(&skdev->pdev->dev, "MSIX = 0x%x\n", in skd_msg_isr()
2429 SKD_READL(skdev, FIT_INT_STATUS_HOST)); in skd_msg_isr()
2430 SKD_WRITEL(skdev, FIT_ISH_MSG_FROM_DEV, FIT_INT_STATUS_HOST); in skd_msg_isr()
2431 skd_isr_msg_from_dev(skdev); in skd_msg_isr()
2432 spin_unlock_irqrestore(&skdev->lock, flags); in skd_msg_isr()
2438 struct skd_device *skdev = skd_host_data; in skd_qfull_isr() local
2441 spin_lock_irqsave(&skdev->lock, flags); in skd_qfull_isr()
2442 dev_dbg(&skdev->pdev->dev, "MSIX = 0x%x\n", in skd_qfull_isr()
2443 SKD_READL(skdev, FIT_INT_STATUS_HOST)); in skd_qfull_isr()
2444 SKD_WRITEL(skdev, FIT_INT_QUEUE_FULL, FIT_INT_STATUS_HOST); in skd_qfull_isr()
2445 spin_unlock_irqrestore(&skdev->lock, flags); in skd_qfull_isr()
2484 static int skd_acquire_msix(struct skd_device *skdev) in skd_acquire_msix() argument
2487 struct pci_dev *pdev = skdev->pdev; in skd_acquire_msix()
2492 dev_err(&skdev->pdev->dev, "failed to enable MSI-X %d\n", rc); in skd_acquire_msix()
2496 skdev->msix_entries = kcalloc(SKD_MAX_MSIX_COUNT, in skd_acquire_msix()
2498 if (!skdev->msix_entries) { in skd_acquire_msix()
2500 dev_err(&skdev->pdev->dev, "msix table allocation error\n"); in skd_acquire_msix()
2506 struct skd_msix_entry *qentry = &skdev->msix_entries[i]; in skd_acquire_msix()
2509 "%s%d-msix %s", DRV_NAME, skdev->devno, in skd_acquire_msix()
2512 rc = devm_request_irq(&skdev->pdev->dev, in skd_acquire_msix()
2513 pci_irq_vector(skdev->pdev, i), in skd_acquire_msix()
2515 qentry->isr_name, skdev); in skd_acquire_msix()
2517 dev_err(&skdev->pdev->dev, in skd_acquire_msix()
2524 dev_dbg(&skdev->pdev->dev, "%d msix irq(s) enabled\n", in skd_acquire_msix()
2530 devm_free_irq(&pdev->dev, pci_irq_vector(pdev, i), skdev); in skd_acquire_msix()
2532 kfree(skdev->msix_entries); in skd_acquire_msix()
2533 skdev->msix_entries = NULL; in skd_acquire_msix()
2537 static int skd_acquire_irq(struct skd_device *skdev) in skd_acquire_irq() argument
2539 struct pci_dev *pdev = skdev->pdev; in skd_acquire_irq()
2544 rc = skd_acquire_msix(skdev); in skd_acquire_irq()
2548 dev_err(&skdev->pdev->dev, in skd_acquire_irq()
2552 snprintf(skdev->isr_name, sizeof(skdev->isr_name), "%s%d", DRV_NAME, in skd_acquire_irq()
2553 skdev->devno); in skd_acquire_irq()
2559 dev_err(&skdev->pdev->dev, in skd_acquire_irq()
2566 skdev->isr_name, skdev); in skd_acquire_irq()
2569 dev_err(&skdev->pdev->dev, "failed to allocate interrupt %d\n", in skd_acquire_irq()
2577 static void skd_release_irq(struct skd_device *skdev) in skd_release_irq() argument
2579 struct pci_dev *pdev = skdev->pdev; in skd_release_irq()
2581 if (skdev->msix_entries) { in skd_release_irq()
2586 skdev); in skd_release_irq()
2589 kfree(skdev->msix_entries); in skd_release_irq()
2590 skdev->msix_entries = NULL; in skd_release_irq()
2592 devm_free_irq(&pdev->dev, pdev->irq, skdev); in skd_release_irq()
2604 static void *skd_alloc_dma(struct skd_device *skdev, struct kmem_cache *s, in skd_alloc_dma() argument
2608 struct device *dev = &skdev->pdev->dev; in skd_alloc_dma()
2623 static void skd_free_dma(struct skd_device *skdev, struct kmem_cache *s, in skd_free_dma() argument
2630 dma_unmap_single(&skdev->pdev->dev, dma_handle, in skd_free_dma()
2635 static int skd_cons_skcomp(struct skd_device *skdev) in skd_cons_skcomp() argument
2640 dev_dbg(&skdev->pdev->dev, in skd_cons_skcomp()
2644 skcomp = dma_alloc_coherent(&skdev->pdev->dev, SKD_SKCOMP_SIZE, in skd_cons_skcomp()
2645 &skdev->cq_dma_address, GFP_KERNEL); in skd_cons_skcomp()
2652 skdev->skcomp_table = skcomp; in skd_cons_skcomp()
2653 skdev->skerr_table = (struct fit_comp_error_info *)((char *)skcomp + in skd_cons_skcomp()
2661 static int skd_cons_skmsg(struct skd_device *skdev) in skd_cons_skmsg() argument
2666 dev_dbg(&skdev->pdev->dev, in skd_cons_skmsg()
2668 sizeof(struct skd_fitmsg_context), skdev->num_fitmsg_context, in skd_cons_skmsg()
2669 sizeof(struct skd_fitmsg_context) * skdev->num_fitmsg_context); in skd_cons_skmsg()
2671 skdev->skmsg_table = kcalloc(skdev->num_fitmsg_context, in skd_cons_skmsg()
2674 if (skdev->skmsg_table == NULL) { in skd_cons_skmsg()
2679 for (i = 0; i < skdev->num_fitmsg_context; i++) { in skd_cons_skmsg()
2682 skmsg = &skdev->skmsg_table[i]; in skd_cons_skmsg()
2686 skmsg->msg_buf = dma_alloc_coherent(&skdev->pdev->dev, in skd_cons_skmsg()
2705 static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev, in skd_cons_sg_list() argument
2711 sg_list = skd_alloc_dma(skdev, skdev->sglist_cache, ret_dma_addr, in skd_cons_sg_list()
2730 static void skd_free_sg_list(struct skd_device *skdev, in skd_free_sg_list() argument
2737 skd_free_dma(skdev, skdev->sglist_cache, sg_list, dma_addr, in skd_free_sg_list()
2744 struct skd_device *skdev = set->driver_data; in skd_init_request() local
2750 skreq->sksg_list = skd_cons_sg_list(skdev, skd_sgs_per_request, in skd_init_request()
2759 struct skd_device *skdev = set->driver_data; in skd_exit_request() local
2762 skd_free_sg_list(skdev, skreq->sksg_list, skreq->sksg_dma_address); in skd_exit_request()
2765 static int skd_cons_sksb(struct skd_device *skdev) in skd_cons_sksb() argument
2770 skspcl = &skdev->internal_skspcl; in skd_cons_sksb()
2775 skspcl->data_buf = skd_alloc_dma(skdev, skdev->databuf_cache, in skd_cons_sksb()
2784 skspcl->msg_buf = skd_alloc_dma(skdev, skdev->msgbuf_cache, in skd_cons_sksb()
2792 skspcl->req.sksg_list = skd_cons_sg_list(skdev, 1, in skd_cons_sksb()
2799 if (!skd_format_internal_skspcl(skdev)) { in skd_cons_sksb()
2816 static int skd_cons_disk(struct skd_device *skdev) in skd_cons_disk() argument
2829 skdev->disk = disk; in skd_cons_disk()
2830 sprintf(disk->disk_name, DRV_NAME "%u", skdev->devno); in skd_cons_disk()
2832 disk->major = skdev->major; in skd_cons_disk()
2833 disk->first_minor = skdev->devno * SKD_MINORS_PER_DEVICE; in skd_cons_disk()
2835 disk->private_data = skdev; in skd_cons_disk()
2837 memset(&skdev->tag_set, 0, sizeof(skdev->tag_set)); in skd_cons_disk()
2838 skdev->tag_set.ops = &skd_mq_ops; in skd_cons_disk()
2839 skdev->tag_set.nr_hw_queues = 1; in skd_cons_disk()
2840 skdev->tag_set.queue_depth = skd_max_queue_depth; in skd_cons_disk()
2841 skdev->tag_set.cmd_size = sizeof(struct skd_request_context) + in skd_cons_disk()
2842 skdev->sgs_per_request * sizeof(struct scatterlist); in skd_cons_disk()
2843 skdev->tag_set.numa_node = NUMA_NO_NODE; in skd_cons_disk()
2844 skdev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | in skd_cons_disk()
2846 skdev->tag_set.driver_data = skdev; in skd_cons_disk()
2847 rc = blk_mq_alloc_tag_set(&skdev->tag_set); in skd_cons_disk()
2850 q = blk_mq_init_queue(&skdev->tag_set); in skd_cons_disk()
2852 blk_mq_free_tag_set(&skdev->tag_set); in skd_cons_disk()
2856 q->queuedata = skdev; in skd_cons_disk()
2858 skdev->queue = q; in skd_cons_disk()
2862 blk_queue_max_segments(q, skdev->sgs_per_request); in skd_cons_disk()
2873 spin_lock_irqsave(&skdev->lock, flags); in skd_cons_disk()
2874 dev_dbg(&skdev->pdev->dev, "stopping queue\n"); in skd_cons_disk()
2875 blk_mq_stop_hw_queues(skdev->queue); in skd_cons_disk()
2876 spin_unlock_irqrestore(&skdev->lock, flags); in skd_cons_disk()
2887 struct skd_device *skdev; in skd_construct() local
2892 skdev = kzalloc(sizeof(*skdev), GFP_KERNEL); in skd_construct()
2894 if (!skdev) { in skd_construct()
2899 skdev->state = SKD_DRVR_STATE_LOAD; in skd_construct()
2900 skdev->pdev = pdev; in skd_construct()
2901 skdev->devno = skd_next_devno++; in skd_construct()
2902 skdev->major = blk_major; in skd_construct()
2903 skdev->dev_max_queue_depth = 0; in skd_construct()
2905 skdev->num_req_context = skd_max_queue_depth; in skd_construct()
2906 skdev->num_fitmsg_context = skd_max_queue_depth; in skd_construct()
2907 skdev->cur_max_queue_depth = 1; in skd_construct()
2908 skdev->queue_low_water_mark = 1; in skd_construct()
2909 skdev->proto_ver = 99; in skd_construct()
2910 skdev->sgs_per_request = skd_sgs_per_request; in skd_construct()
2911 skdev->dbg_level = skd_dbg_level; in skd_construct()
2913 spin_lock_init(&skdev->lock); in skd_construct()
2915 INIT_WORK(&skdev->start_queue, skd_start_queue); in skd_construct()
2916 INIT_WORK(&skdev->completion_worker, skd_completion_worker); in skd_construct()
2919 skdev->msgbuf_cache = kmem_cache_create("skd-msgbuf", size, 0, in skd_construct()
2921 if (!skdev->msgbuf_cache) in skd_construct()
2923 WARN_ONCE(kmem_cache_size(skdev->msgbuf_cache) < size, in skd_construct()
2925 kmem_cache_size(skdev->msgbuf_cache), size); in skd_construct()
2927 skdev->sglist_cache = kmem_cache_create("skd-sglist", size, 0, in skd_construct()
2929 if (!skdev->sglist_cache) in skd_construct()
2931 WARN_ONCE(kmem_cache_size(skdev->sglist_cache) < size, in skd_construct()
2933 kmem_cache_size(skdev->sglist_cache), size); in skd_construct()
2935 skdev->databuf_cache = kmem_cache_create("skd-databuf", size, 0, in skd_construct()
2937 if (!skdev->databuf_cache) in skd_construct()
2939 WARN_ONCE(kmem_cache_size(skdev->databuf_cache) < size, in skd_construct()
2941 kmem_cache_size(skdev->databuf_cache), size); in skd_construct()
2943 dev_dbg(&skdev->pdev->dev, "skcomp\n"); in skd_construct()
2944 rc = skd_cons_skcomp(skdev); in skd_construct()
2948 dev_dbg(&skdev->pdev->dev, "skmsg\n"); in skd_construct()
2949 rc = skd_cons_skmsg(skdev); in skd_construct()
2953 dev_dbg(&skdev->pdev->dev, "sksb\n"); in skd_construct()
2954 rc = skd_cons_sksb(skdev); in skd_construct()
2958 dev_dbg(&skdev->pdev->dev, "disk\n"); in skd_construct()
2959 rc = skd_cons_disk(skdev); in skd_construct()
2963 dev_dbg(&skdev->pdev->dev, "VICTORY\n"); in skd_construct()
2964 return skdev; in skd_construct()
2967 dev_dbg(&skdev->pdev->dev, "construct failed\n"); in skd_construct()
2968 skd_destruct(skdev); in skd_construct()
2978 static void skd_free_skcomp(struct skd_device *skdev) in skd_free_skcomp() argument
2980 if (skdev->skcomp_table) in skd_free_skcomp()
2981 dma_free_coherent(&skdev->pdev->dev, SKD_SKCOMP_SIZE, in skd_free_skcomp()
2982 skdev->skcomp_table, skdev->cq_dma_address); in skd_free_skcomp()
2984 skdev->skcomp_table = NULL; in skd_free_skcomp()
2985 skdev->cq_dma_address = 0; in skd_free_skcomp()
2988 static void skd_free_skmsg(struct skd_device *skdev) in skd_free_skmsg() argument
2992 if (skdev->skmsg_table == NULL) in skd_free_skmsg()
2995 for (i = 0; i < skdev->num_fitmsg_context; i++) { in skd_free_skmsg()
2998 skmsg = &skdev->skmsg_table[i]; in skd_free_skmsg()
3001 dma_free_coherent(&skdev->pdev->dev, SKD_N_FITMSG_BYTES, in skd_free_skmsg()
3009 kfree(skdev->skmsg_table); in skd_free_skmsg()
3010 skdev->skmsg_table = NULL; in skd_free_skmsg()
3013 static void skd_free_sksb(struct skd_device *skdev) in skd_free_sksb() argument
3015 struct skd_special_context *skspcl = &skdev->internal_skspcl; in skd_free_sksb()
3017 skd_free_dma(skdev, skdev->databuf_cache, skspcl->data_buf, in skd_free_sksb()
3023 skd_free_dma(skdev, skdev->msgbuf_cache, skspcl->msg_buf, in skd_free_sksb()
3029 skd_free_sg_list(skdev, skspcl->req.sksg_list, in skd_free_sksb()
3036 static void skd_free_disk(struct skd_device *skdev) in skd_free_disk() argument
3038 struct gendisk *disk = skdev->disk; in skd_free_disk()
3043 if (skdev->queue) { in skd_free_disk()
3044 blk_cleanup_queue(skdev->queue); in skd_free_disk()
3045 skdev->queue = NULL; in skd_free_disk()
3050 if (skdev->tag_set.tags) in skd_free_disk()
3051 blk_mq_free_tag_set(&skdev->tag_set); in skd_free_disk()
3054 skdev->disk = NULL; in skd_free_disk()
3057 static void skd_destruct(struct skd_device *skdev) in skd_destruct() argument
3059 if (skdev == NULL) in skd_destruct()
3062 cancel_work_sync(&skdev->start_queue); in skd_destruct()
3064 dev_dbg(&skdev->pdev->dev, "disk\n"); in skd_destruct()
3065 skd_free_disk(skdev); in skd_destruct()
3067 dev_dbg(&skdev->pdev->dev, "sksb\n"); in skd_destruct()
3068 skd_free_sksb(skdev); in skd_destruct()
3070 dev_dbg(&skdev->pdev->dev, "skmsg\n"); in skd_destruct()
3071 skd_free_skmsg(skdev); in skd_destruct()
3073 dev_dbg(&skdev->pdev->dev, "skcomp\n"); in skd_destruct()
3074 skd_free_skcomp(skdev); in skd_destruct()
3076 kmem_cache_destroy(skdev->databuf_cache); in skd_destruct()
3077 kmem_cache_destroy(skdev->sglist_cache); in skd_destruct()
3078 kmem_cache_destroy(skdev->msgbuf_cache); in skd_destruct()
3080 dev_dbg(&skdev->pdev->dev, "skdev\n"); in skd_destruct()
3081 kfree(skdev); in skd_destruct()
3092 struct skd_device *skdev; in skd_bdev_getgeo() local
3095 skdev = bdev->bd_disk->private_data; in skd_bdev_getgeo()
3097 dev_dbg(&skdev->pdev->dev, "%s: CMD[%s] getgeo device\n", in skd_bdev_getgeo()
3100 if (skdev->read_cap_is_valid) { in skd_bdev_getgeo()
3101 capacity = get_capacity(skdev->disk); in skd_bdev_getgeo()
3111 static int skd_bdev_attach(struct device *parent, struct skd_device *skdev) in skd_bdev_attach() argument
3113 dev_dbg(&skdev->pdev->dev, "add_disk\n"); in skd_bdev_attach()
3114 device_add_disk(parent, skdev->disk, NULL); in skd_bdev_attach()
3137 static char *skd_pci_info(struct skd_device *skdev, char *str) in skd_pci_info() argument
3142 pcie_reg = pci_find_capability(skdev->pdev, PCI_CAP_ID_EXP); in skd_pci_info()
3150 pci_read_config_word(skdev->pdev, pcie_reg, &pcie_lstat); in skd_pci_info()
3171 struct skd_device *skdev; in skd_pci_probe() local
3198 skdev = skd_construct(pdev); in skd_pci_probe()
3199 if (skdev == NULL) { in skd_pci_probe()
3204 skd_pci_info(skdev, pci_str); in skd_pci_probe()
3212 skdev->pcie_error_reporting_is_enabled = 0; in skd_pci_probe()
3214 skdev->pcie_error_reporting_is_enabled = 1; in skd_pci_probe()
3216 pci_set_drvdata(pdev, skdev); in skd_pci_probe()
3219 skdev->mem_phys[i] = pci_resource_start(pdev, i); in skd_pci_probe()
3220 skdev->mem_size[i] = (u32)pci_resource_len(pdev, i); in skd_pci_probe()
3221 skdev->mem_map[i] = ioremap(skdev->mem_phys[i], in skd_pci_probe()
3222 skdev->mem_size[i]); in skd_pci_probe()
3223 if (!skdev->mem_map[i]) { in skd_pci_probe()
3230 skdev->mem_map[i], (uint64_t)skdev->mem_phys[i], in skd_pci_probe()
3231 skdev->mem_size[i]); in skd_pci_probe()
3234 rc = skd_acquire_irq(skdev); in skd_pci_probe()
3240 rc = skd_start_timer(skdev); in skd_pci_probe()
3244 init_waitqueue_head(&skdev->waitq); in skd_pci_probe()
3246 skd_start_device(skdev); in skd_pci_probe()
3248 rc = wait_event_interruptible_timeout(skdev->waitq, in skd_pci_probe()
3249 (skdev->gendisk_on), in skd_pci_probe()
3251 if (skdev->gendisk_on > 0) { in skd_pci_probe()
3253 skd_bdev_attach(&pdev->dev, skdev); in skd_pci_probe()
3269 skd_stop_device(skdev); in skd_pci_probe()
3270 skd_release_irq(skdev); in skd_pci_probe()
3274 if (skdev->mem_map[i]) in skd_pci_probe()
3275 iounmap(skdev->mem_map[i]); in skd_pci_probe()
3277 if (skdev->pcie_error_reporting_is_enabled) in skd_pci_probe()
3280 skd_destruct(skdev); in skd_pci_probe()
3294 struct skd_device *skdev; in skd_pci_remove() local
3296 skdev = pci_get_drvdata(pdev); in skd_pci_remove()
3297 if (!skdev) { in skd_pci_remove()
3301 skd_stop_device(skdev); in skd_pci_remove()
3302 skd_release_irq(skdev); in skd_pci_remove()
3305 if (skdev->mem_map[i]) in skd_pci_remove()
3306 iounmap(skdev->mem_map[i]); in skd_pci_remove()
3308 if (skdev->pcie_error_reporting_is_enabled) in skd_pci_remove()
3311 skd_destruct(skdev); in skd_pci_remove()
3323 struct skd_device *skdev; in skd_pci_suspend() local
3325 skdev = pci_get_drvdata(pdev); in skd_pci_suspend()
3326 if (!skdev) { in skd_pci_suspend()
3331 skd_stop_device(skdev); in skd_pci_suspend()
3333 skd_release_irq(skdev); in skd_pci_suspend()
3336 if (skdev->mem_map[i]) in skd_pci_suspend()
3337 iounmap(skdev->mem_map[i]); in skd_pci_suspend()
3339 if (skdev->pcie_error_reporting_is_enabled) in skd_pci_suspend()
3353 struct skd_device *skdev; in skd_pci_resume() local
3355 skdev = pci_get_drvdata(pdev); in skd_pci_resume()
3356 if (!skdev) { in skd_pci_resume()
3384 skdev->pcie_error_reporting_is_enabled = 0; in skd_pci_resume()
3386 skdev->pcie_error_reporting_is_enabled = 1; in skd_pci_resume()
3390 skdev->mem_phys[i] = pci_resource_start(pdev, i); in skd_pci_resume()
3391 skdev->mem_size[i] = (u32)pci_resource_len(pdev, i); in skd_pci_resume()
3392 skdev->mem_map[i] = ioremap(skdev->mem_phys[i], in skd_pci_resume()
3393 skdev->mem_size[i]); in skd_pci_resume()
3394 if (!skdev->mem_map[i]) { in skd_pci_resume()
3400 skdev->mem_map[i], (uint64_t)skdev->mem_phys[i], in skd_pci_resume()
3401 skdev->mem_size[i]); in skd_pci_resume()
3403 rc = skd_acquire_irq(skdev); in skd_pci_resume()
3409 rc = skd_start_timer(skdev); in skd_pci_resume()
3413 init_waitqueue_head(&skdev->waitq); in skd_pci_resume()
3415 skd_start_device(skdev); in skd_pci_resume()
3420 skd_stop_device(skdev); in skd_pci_resume()
3421 skd_release_irq(skdev); in skd_pci_resume()
3425 if (skdev->mem_map[i]) in skd_pci_resume()
3426 iounmap(skdev->mem_map[i]); in skd_pci_resume()
3428 if (skdev->pcie_error_reporting_is_enabled) in skd_pci_resume()
3441 struct skd_device *skdev; in skd_pci_shutdown() local
3445 skdev = pci_get_drvdata(pdev); in skd_pci_shutdown()
3446 if (!skdev) { in skd_pci_shutdown()
3452 skd_stop_device(skdev); in skd_pci_shutdown()
3566 static void skd_log_skdev(struct skd_device *skdev, const char *event) in skd_log_skdev() argument
3568 dev_dbg(&skdev->pdev->dev, "skdev=%p event='%s'\n", skdev, event); in skd_log_skdev()
3569 dev_dbg(&skdev->pdev->dev, " drive_state=%s(%d) driver_state=%s(%d)\n", in skd_log_skdev()
3570 skd_drive_state_to_str(skdev->drive_state), skdev->drive_state, in skd_log_skdev()
3571 skd_skdev_state_to_str(skdev->state), skdev->state); in skd_log_skdev()
3572 dev_dbg(&skdev->pdev->dev, " busy=%d limit=%d dev=%d lowat=%d\n", in skd_log_skdev()
3573 skd_in_flight(skdev), skdev->cur_max_queue_depth, in skd_log_skdev()
3574 skdev->dev_max_queue_depth, skdev->queue_low_water_mark); in skd_log_skdev()
3575 dev_dbg(&skdev->pdev->dev, " cycle=%d cycle_ix=%d\n", in skd_log_skdev()
3576 skdev->skcomp_cycle, skdev->skcomp_ix); in skd_log_skdev()
3579 static void skd_log_skreq(struct skd_device *skdev, in skd_log_skreq() argument
3586 dev_dbg(&skdev->pdev->dev, "skreq=%p event='%s'\n", skreq, event); in skd_log_skreq()
3587 dev_dbg(&skdev->pdev->dev, " state=%s(%d) id=0x%04x fitmsg=0x%04x\n", in skd_log_skreq()
3590 dev_dbg(&skdev->pdev->dev, " sg_dir=%d n_sg=%d\n", in skd_log_skreq()
3593 dev_dbg(&skdev->pdev->dev, in skd_log_skreq()