All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Garry <john.garry@huawei.com>
To: James.Bottomley@HansenPartnership.com
Cc: linux-kernel@vger.kernel.com, devicetree@vger.kernel.org,
	arnd@arndb.de, linuxarm@huawei.com, zhangfei.gao@linaro.org,
	linux-scsi@vger.kernel.org, xuwei5@hisilicon.com,
	john.garry2@mail.dcu.ie, hare@suse.de,
	John Garry <john.garry@huawei.com>
Subject: [PATCH 18/25] scsi: hisi_sas: add dev_gone and port_deformed
Date: Mon, 12 Oct 2015 23:20:30 +0800	[thread overview]
Message-ID: <1444663237-238302-19-git-send-email-john.garry@huawei.com> (raw)
In-Reply-To: <1444663237-238302-1-git-send-email-john.garry@huawei.com>

Add function calls for lldd_dev_gone and lldd_port_deformed.

Signed-off-by: John Garry <john.garry@huawei.com>
---
 drivers/scsi/hisi_sas/hisi_sas.h       |  7 +++
 drivers/scsi/hisi_sas/hisi_sas_init.c  |  2 +
 drivers/scsi/hisi_sas/hisi_sas_main.c  | 80 ++++++++++++++++++++++++++++++++++
 drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 28 ++++++++++++
 4 files changed, 117 insertions(+)

diff --git a/drivers/scsi/hisi_sas/hisi_sas.h b/drivers/scsi/hisi_sas/hisi_sas.h
index 3f61a4a..265d9bd 100644
--- a/drivers/scsi/hisi_sas/hisi_sas.h
+++ b/drivers/scsi/hisi_sas/hisi_sas.h
@@ -352,14 +352,19 @@ union hisi_sas_command_table {
 void hisi_sas_slot_index_init(struct hisi_hba *hisi_hba);
 void hisi_sas_phy_init(struct hisi_hba *hisi_hba, int i);
 int hisi_sas_dev_found(struct domain_device *dev);
+void hisi_sas_dev_gone(struct domain_device *dev);
 int hisi_sas_queue_command(struct sas_task *task, gfp_t gfp_flags);
 void hisi_sas_port_formed(struct asd_sas_phy *sas_phy);
+void hisi_sas_port_deformed(struct asd_sas_phy *sas_phy);
 void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy);
 void hisi_sas_wq_process(struct work_struct *work);
 void hisi_sas_slot_task_free(struct hisi_hba *hisi_hba, struct sas_task *task,
 			struct hisi_sas_slot *slot);
 
 /* hw specific functions */
+extern int slot_complete_v1_hw(struct hisi_hba *hisi_hba,
+			       struct hisi_sas_slot *slot,
+			       int abort);
 extern void hisi_sas_setup_itct_v1_hw(struct hisi_hba *hisi_hba,
 				      struct hisi_sas_device *device);
 extern void start_delivery_v1_hw(struct hisi_hba *hisi_hba);
@@ -370,6 +375,8 @@ extern int prep_ssp_v1_hw(struct hisi_hba *hisi_hba,
 extern int interrupt_init_v1_hw(struct hisi_hba *hisi_hba);
 extern int interrupt_openall_v1_hw(struct hisi_hba *hisi_hba);
 extern int hw_init_v1_hw(struct hisi_hba *hisi_hba);
+extern int free_device_v1_hw(struct hisi_hba *hisi_hba,
+			     struct hisi_sas_device *dev);
 extern int phys_init_v1_hw(struct hisi_hba *hisi_hba);
 extern void sl_notify_v1_hw(struct hisi_hba *hisi_hba, int phy_no);
 extern void setup_itct_v1_hw(struct hisi_hba *hisi_hba,
diff --git a/drivers/scsi/hisi_sas/hisi_sas_init.c b/drivers/scsi/hisi_sas/hisi_sas_init.c
index 703527b..ba64562 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_init.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_init.c
@@ -34,8 +34,10 @@ static struct scsi_host_template hisi_sas_sht = {
 
 static struct sas_domain_function_template hisi_sas_transport_ops = {
 	.lldd_dev_found		= hisi_sas_dev_found,
+	.lldd_dev_gone		= hisi_sas_dev_gone,
 	.lldd_execute_task	= hisi_sas_queue_command,
 	.lldd_port_formed	= hisi_sas_port_formed,
+	.lldd_port_deformed	= hisi_sas_port_deformed,
 };
 
 static int hisi_sas_alloc(struct hisi_hba *hisi_hba, struct Scsi_Host *shost)
diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
index fbc2cca..36ef8cd 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
@@ -514,12 +514,86 @@ void hisi_sas_port_notify_formed(struct asd_sas_phy *sas_phy, int lock)
 		spin_unlock_irqrestore(&hisi_hba->lock, flags);
 }
 
+void hisi_sas_do_release_task(struct hisi_hba *hisi_hba,
+		int phy_no, struct domain_device *device)
+{
+	struct hisi_sas_phy *phy;
+	struct hisi_sas_port *port;
+	struct hisi_sas_slot *slot, *slot2;
+	struct device *dev = &hisi_hba->pdev->dev;
+
+	phy = &hisi_hba->phy[phy_no];
+	port = phy->port;
+	if (!port)
+		return;
+
+	list_for_each_entry_safe(slot, slot2, &port->list, entry) {
+		struct sas_task *task;
+
+		task = slot->task;
+		if (device && task->dev != device)
+			continue;
+
+		dev_info(dev, "Release slot [%d:%d], task [%p]:\n",
+			 slot->dlvry_queue, slot->dlvry_queue_slot, task);
+		slot_complete_v1_hw(hisi_hba, slot, 1);
+	}
+}
+
+static void hisi_sas_port_notify_deformed(struct asd_sas_phy *sas_phy,
+					  int lock)
+{
+	struct domain_device *device;
+	struct hisi_sas_phy *phy = sas_phy->lldd_phy;
+	struct hisi_hba *hisi_hba = phy->hisi_hba;
+	struct asd_sas_port *sas_port = sas_phy->port;
+	struct hisi_sas_port *port = sas_port->lldd_port;
+	int phy_no = 0;
+
+	port->port_attached = 0;
+	port->id = -1;
+
+	while (phy != &hisi_hba->phy[phy_no]) {
+		phy_no++;
+
+		if (phy_no >= hisi_hba->n_phy)
+			return;
+	}
+	list_for_each_entry(device, &sas_port->dev_list, dev_list_node)
+		hisi_sas_do_release_task(phy->hisi_hba, phy_no, device);
+}
 
 int hisi_sas_dev_found(struct domain_device *device)
 {
 	return hisi_sas_dev_found_notify(device, 1);
 }
 
+
+static void hisi_sas_dev_gone_notify(struct domain_device *device)
+{
+	struct hisi_sas_device *sas_dev = device->lldd_dev;
+	struct hisi_hba *hisi_hba = dev_to_hisi_hba(device);
+	struct device *dev = &hisi_hba->pdev->dev;
+
+	if (!sas_dev) {
+		pr_warn("%s: found dev has gone\n", __func__);
+		return;
+	}
+
+	dev_info(dev, "found dev[%lld:%x] is gone\n",
+		 sas_dev->device_id, sas_dev->dev_type);
+
+	free_device_v1_hw(hisi_hba, sas_dev);
+
+	device->lldd_dev = NULL;
+	sas_dev->sas_device = NULL;
+}
+
+void hisi_sas_dev_gone(struct domain_device *device)
+{
+	hisi_sas_dev_gone_notify(device);
+}
+
 int hisi_sas_queue_command(struct sas_task *task, gfp_t gfp_flags)
 {
 	return hisi_sas_task_exec(task, gfp_flags, NULL, 0, NULL);
@@ -529,6 +603,12 @@ void hisi_sas_port_formed(struct asd_sas_phy *sas_phy)
 {
 	hisi_sas_port_notify_formed(sas_phy, 1);
 }
+
+void hisi_sas_port_deformed(struct asd_sas_phy *sas_phy)
+{
+	hisi_sas_port_notify_deformed(sas_phy, 1);
+}
+
 static void hisi_sas_phy_disconnected(struct hisi_sas_phy *phy)
 {
 	phy->phy_attached = 0;
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
index fadd163..2de54a7 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
@@ -534,6 +534,34 @@ void setup_itct_v1_hw(struct hisi_hba *hisi_hba,
 				(0xff00 < ITCT_HDR_REJ_OPEN_TL_OFF));
 }
 
+int free_device_v1_hw(struct hisi_hba *hisi_hba,
+		      struct hisi_sas_device *sas_dev)
+{
+	u64 dev_id = sas_dev->device_id;
+	struct hisi_sas_itct *itct = &hisi_hba->itct[dev_id];
+	u32 qw0, reg_val = hisi_sas_read32(hisi_hba, CFG_AGING_TIME);
+
+	reg_val |= CFG_AGING_TIME_ITCT_REL_MSK;
+	hisi_sas_write32(hisi_hba, CFG_AGING_TIME, reg_val);
+
+	/* free itct */
+	udelay(1);
+	reg_val = hisi_sas_read32(hisi_hba, CFG_AGING_TIME);
+	reg_val &= ~CFG_AGING_TIME_ITCT_REL_MSK;
+	hisi_sas_write32(hisi_hba, CFG_AGING_TIME, reg_val);
+
+	qw0 = cpu_to_le64(itct->qw0);
+	qw0 &= ~ITCT_HDR_VALID_MSK;
+	itct->qw0 = cpu_to_le64(qw0);
+
+	memset(sas_dev, 0, sizeof(*sas_dev));
+	sas_dev->device_id = dev_id;
+	sas_dev->dev_type = SAS_PHY_UNUSED;
+	sas_dev->dev_status = HISI_SAS_DEV_NORMAL;
+
+	return 0;
+}
+
 static int reset_hw_v1_hw(struct hisi_hba *hisi_hba)
 {
 	int i;
-- 
1.9.1


  parent reply	other threads:[~2015-10-12 15:20 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-12 15:20 [PATCH 00/25] HiSilicon SAS driver John Garry
2015-10-12 15:20 ` [PATCH 02/25] devicetree: bindings: scsi: HiSi SAS John Garry
2015-10-16 13:47   ` Rob Herring
     [not found]     ` <CAL_JsqLk9p_YX2FCNiR4sOSU74asN0UrOSJ5gQfnyRhrFH8LgQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-10-19 10:48       ` John Garry
2015-10-19 14:51         ` zhangfei
2015-10-12 15:20 ` [PATCH 03/25] scsi: hisi_sas: add initial bare driver John Garry
     [not found]   ` <1444663237-238302-4-git-send-email-john.garry-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-10-15  8:49     ` Xinwei Kong
2015-10-15  9:23       ` John Garry
2015-10-15  9:28         ` zhangfei
     [not found]         ` <561F707C.1070305-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-10-15 12:07           ` Xinwei Kong
2015-10-12 15:20 ` [PATCH 04/25] scsi: hisi_sas: add scsi host registration John Garry
2015-10-12 15:21   ` Arnd Bergmann
2015-10-12 15:21     ` Arnd Bergmann
2015-10-13  9:16     ` John Garry
2015-10-13  9:16       ` John Garry
2015-10-13 12:18       ` Arnd Bergmann
2015-10-12 15:20 ` [PATCH 07/25] scsi: hisi_sas: add ioremap for device HW John Garry
2015-10-12 15:21   ` Arnd Bergmann
2015-10-13  9:47     ` zhangfei
2015-10-13  9:47       ` zhangfei
2015-10-13 12:20       ` Arnd Bergmann
2015-10-13 12:20         ` Arnd Bergmann
2015-10-13 15:09         ` zhangfei
2015-10-12 17:18   ` [RFC PATCH] scsi: hisi_sas: hisi_sas_ioremap() can be static kbuild test robot
2015-10-12 17:18   ` [PATCH 07/25] scsi: hisi_sas: add ioremap for device HW kbuild test robot
2015-10-12 15:20 ` [PATCH 08/25] scsi: hisi_sas: add cq structure initialization John Garry
2015-10-12 15:20 ` [PATCH 10/25] scsi: hisi_sas: add misc HBA initialization John Garry
2015-10-12 21:44   ` kbuild test robot
2015-10-12 15:20 ` [PATCH 12/25] scsi: hisi_sas: add v1 HW initialisation code John Garry
2015-10-12 18:46   ` Arnd Bergmann
2015-10-13 12:44     ` John Garry
2015-10-13 12:44       ` John Garry
2015-10-13 12:47       ` Arnd Bergmann
2015-10-12 15:20 ` [PATCH 13/25] scsi: hisi_sas: add path from phyup irq to SAS framework John Garry
2015-10-12 22:03   ` kbuild test robot
2015-10-13  0:27     ` Julian Calaby
2015-10-13  0:40       ` [lkp] " Fengguang Wu
2015-10-12 22:03   ` [RFC PATCH] scsi: hisi_sas: hisi_sas_bytes_dmaed() can be static kbuild test robot
2015-10-16 12:55   ` [PATCH 13/25] scsi: hisi_sas: add path from phyup irq to SAS framework Arnd Bergmann
2015-10-16 13:29     ` John Garry
2015-10-16 13:29       ` John Garry
2015-10-16 13:36       ` Arnd Bergmann
2015-10-19 14:11         ` John Garry
2015-10-19 14:11           ` John Garry
2015-10-19 14:26           ` Arnd Bergmann
2015-10-19 14:55             ` John Garry
2015-10-19 14:55               ` John Garry
2015-10-20  8:40               ` Arnd Bergmann
2015-10-20  9:09                 ` John Garry
2015-10-20  9:09                   ` John Garry
     [not found] ` <1444663237-238302-1-git-send-email-john.garry-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-10-12 15:20   ` [PATCH 01/25] [SCSI] sas: centralise ssp frame information units John Garry
2015-10-12 15:20   ` [PATCH 05/25] scsi: hisi_sas: allocate memories and create pools John Garry
2015-10-12 15:15     ` Arnd Bergmann
2015-10-12 15:15       ` Arnd Bergmann
2015-10-13  9:42       ` zhangfei
     [not found]     ` <1444663237-238302-6-git-send-email-john.garry-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-10-13  1:05       ` kbuild test robot
2015-10-12 15:20   ` [PATCH 06/25] scsi: hisi_sas: add slot init code John Garry
2015-10-12 15:20   ` [PATCH 09/25] scsi: hisi_sas: add phy SAS ADDR initialization John Garry
2015-10-13  6:12     ` Hannes Reinecke
     [not found]       ` <561CA0CB.5090802-l3A5Bk7waGM@public.gmane.org>
2015-10-13 17:14         ` John Garry
2015-10-14  8:40           ` Hannes Reinecke
     [not found]             ` <561E1501.2070507-l3A5Bk7waGM@public.gmane.org>
2015-10-14 15:05               ` John Garry
2015-10-14 15:18                 ` Arnd Bergmann
2015-10-15  3:36                   ` zhangfei
2015-10-15  8:43                     ` Arnd Bergmann
2015-10-12 15:20   ` [PATCH 11/25] scsi: hisi_sas: add v1 hardware register definitions John Garry
2015-10-12 15:20   ` [PATCH 14/25] scsi: hisi_sas: add ssp command function John Garry
2015-10-13  1:24     ` kbuild test robot
2015-10-12 15:20   ` [PATCH 20/25] scsi: hisi_sas: add smp protocol support John Garry
2015-10-12 15:20   ` [PATCH 22/25] scsi: hisi_sas: add tmf methods John Garry
2015-10-12 23:02     ` kbuild test robot
     [not found]       ` <1444663237-238302-23-git-send-email-john.garry-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-10-12 23:02         ` [RFC PATCH] scsi: hisi_sas: hisi_sas_find_dev_phyno() can be static kbuild test robot
2015-10-12 15:20   ` [PATCH 23/25] scsi: hisi_sas: add control phy handler John Garry
2015-10-12 15:20 ` [PATCH 15/25] scsi: hisi_sas: add cq interrupt handler John Garry
2015-10-12 22:15   ` kbuild test robot
2015-10-12 15:20 ` [PATCH 16/25] scsi: hisi_sas: add dev_found and port_formed John Garry
2015-10-12 22:35   ` [RFC PATCH] scsi: hisi_sas: hisi_sas_alloc_dev() can be static kbuild test robot
2015-10-12 22:35   ` [PATCH 16/25] scsi: hisi_sas: add dev_found and port_formed kbuild test robot
2015-10-12 15:20 ` [PATCH 17/25] scsi: hisi_sas: add abnormal irq handler John Garry
2015-10-12 15:20 ` John Garry [this message]
     [not found]   ` <1444663237-238302-19-git-send-email-john.garry-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-10-12 22:49     ` [PATCH 18/25] scsi: hisi_sas: add dev_gone and port_deformed kbuild test robot
2015-10-12 22:49   ` [RFC PATCH] scsi: hisi_sas: hisi_sas_do_release_task() can be static kbuild test robot
2015-10-12 15:20 ` [PATCH 19/25] scsi: hisi_sas: add bcast interrupt handler John Garry
2015-10-12 15:20 ` [PATCH 21/25] scsi: hisi_sas: add scan finished and start John Garry
2015-10-12 15:20 ` [PATCH 24/25] scsi: hisi_sas: add fatal irq handler John Garry
2015-10-12 15:20 ` [PATCH 25/25] MAINTAINERS: add maintainer for HiSi SAS driver John Garry
2015-10-19  8:47 ` [PATCH 00/25] HiSilicon " John Garry
2015-10-19  8:47   ` John Garry
2015-10-19  8:55   ` Hannes Reinecke
2015-10-19 10:40     ` John Garry
2015-10-19 10:40       ` John Garry

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=1444663237-238302-19-git-send-email-john.garry@huawei.com \
    --to=john.garry@huawei.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=arnd@arndb.de \
    --cc=devicetree@vger.kernel.org \
    --cc=hare@suse.de \
    --cc=john.garry2@mail.dcu.ie \
    --cc=linux-kernel@vger.kernel.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=xuwei5@hisilicon.com \
    --cc=zhangfei.gao@linaro.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.