cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

esas2r_init.c (45379B)


      1/*
      2 *  linux/drivers/scsi/esas2r/esas2r_init.c
      3 *      For use with ATTO ExpressSAS R6xx SAS/SATA RAID controllers
      4 *
      5 *  Copyright (c) 2001-2013 ATTO Technology, Inc.
      6 *  (mailto:linuxdrivers@attotech.com)mpt3sas/mpt3sas_trigger_diag.
      7 *
      8 * This program is free software; you can redistribute it and/or
      9 * modify it under the terms of the GNU General Public License
     10 * as published by the Free Software Foundation; either version 2
     11 * of the License, or (at your option) any later version.
     12 *
     13 * This program is distributed in the hope that it will be useful,
     14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 * GNU General Public License for more details.
     17 *
     18 * NO WARRANTY
     19 * THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
     20 * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
     21 * LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
     22 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
     23 * solely responsible for determining the appropriateness of using and
     24 * distributing the Program and assumes all risks associated with its
     25 * exercise of rights under this Agreement, including but not limited to
     26 * the risks and costs of program errors, damage to or loss of data,
     27 * programs or equipment, and unavailability or interruption of operations.
     28 *
     29 * DISCLAIMER OF LIABILITY
     30 * NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
     31 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     32 * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
     33 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     34 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
     35 * USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
     36 * HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
     37 *
     38 * You should have received a copy of the GNU General Public License
     39 * along with this program; if not, write to the Free Software
     40 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
     41 * USA.
     42 */
     43
     44#include "esas2r.h"
     45
     46static bool esas2r_initmem_alloc(struct esas2r_adapter *a,
     47				 struct esas2r_mem_desc *mem_desc,
     48				 u32 align)
     49{
     50	mem_desc->esas2r_param = mem_desc->size + align;
     51	mem_desc->virt_addr = NULL;
     52	mem_desc->phys_addr = 0;
     53	mem_desc->esas2r_data = dma_alloc_coherent(&a->pcid->dev,
     54						   (size_t)mem_desc->
     55						   esas2r_param,
     56						   (dma_addr_t *)&mem_desc->
     57						   phys_addr,
     58						   GFP_KERNEL);
     59
     60	if (mem_desc->esas2r_data == NULL) {
     61		esas2r_log(ESAS2R_LOG_CRIT,
     62			   "failed to allocate %lu bytes of consistent memory!",
     63			   (long
     64			    unsigned
     65			    int)mem_desc->esas2r_param);
     66		return false;
     67	}
     68
     69	mem_desc->virt_addr = PTR_ALIGN(mem_desc->esas2r_data, align);
     70	mem_desc->phys_addr = ALIGN(mem_desc->phys_addr, align);
     71	memset(mem_desc->virt_addr, 0, mem_desc->size);
     72	return true;
     73}
     74
     75static void esas2r_initmem_free(struct esas2r_adapter *a,
     76				struct esas2r_mem_desc *mem_desc)
     77{
     78	if (mem_desc->virt_addr == NULL)
     79		return;
     80
     81	/*
     82	 * Careful!  phys_addr and virt_addr may have been adjusted from the
     83	 * original allocation in order to return the desired alignment.  That
     84	 * means we have to use the original address (in esas2r_data) and size
     85	 * (esas2r_param) and calculate the original physical address based on
     86	 * the difference between the requested and actual allocation size.
     87	 */
     88	if (mem_desc->phys_addr) {
     89		int unalign = ((u8 *)mem_desc->virt_addr) -
     90			      ((u8 *)mem_desc->esas2r_data);
     91
     92		dma_free_coherent(&a->pcid->dev,
     93				  (size_t)mem_desc->esas2r_param,
     94				  mem_desc->esas2r_data,
     95				  (dma_addr_t)(mem_desc->phys_addr - unalign));
     96	} else {
     97		kfree(mem_desc->esas2r_data);
     98	}
     99
    100	mem_desc->virt_addr = NULL;
    101}
    102
    103static bool alloc_vda_req(struct esas2r_adapter *a,
    104			  struct esas2r_request *rq)
    105{
    106	struct esas2r_mem_desc *memdesc = kzalloc(
    107		sizeof(struct esas2r_mem_desc), GFP_KERNEL);
    108
    109	if (memdesc == NULL) {
    110		esas2r_hdebug("could not alloc mem for vda request memdesc\n");
    111		return false;
    112	}
    113
    114	memdesc->size = sizeof(union atto_vda_req) +
    115			ESAS2R_DATA_BUF_LEN;
    116
    117	if (!esas2r_initmem_alloc(a, memdesc, 256)) {
    118		esas2r_hdebug("could not alloc mem for vda request\n");
    119		kfree(memdesc);
    120		return false;
    121	}
    122
    123	a->num_vrqs++;
    124	list_add(&memdesc->next_desc, &a->vrq_mds_head);
    125
    126	rq->vrq_md = memdesc;
    127	rq->vrq = (union atto_vda_req *)memdesc->virt_addr;
    128	rq->vrq->scsi.handle = a->num_vrqs;
    129
    130	return true;
    131}
    132
    133static void esas2r_unmap_regions(struct esas2r_adapter *a)
    134{
    135	if (a->regs)
    136		iounmap((void __iomem *)a->regs);
    137
    138	a->regs = NULL;
    139
    140	pci_release_region(a->pcid, 2);
    141
    142	if (a->data_window)
    143		iounmap((void __iomem *)a->data_window);
    144
    145	a->data_window = NULL;
    146
    147	pci_release_region(a->pcid, 0);
    148}
    149
    150static int esas2r_map_regions(struct esas2r_adapter *a)
    151{
    152	int error;
    153
    154	a->regs = NULL;
    155	a->data_window = NULL;
    156
    157	error = pci_request_region(a->pcid, 2, a->name);
    158	if (error != 0) {
    159		esas2r_log(ESAS2R_LOG_CRIT,
    160			   "pci_request_region(2) failed, error %d",
    161			   error);
    162
    163		return error;
    164	}
    165
    166	a->regs = (void __force *)ioremap(pci_resource_start(a->pcid, 2),
    167					  pci_resource_len(a->pcid, 2));
    168	if (a->regs == NULL) {
    169		esas2r_log(ESAS2R_LOG_CRIT,
    170			   "ioremap failed for regs mem region\n");
    171		pci_release_region(a->pcid, 2);
    172		return -EFAULT;
    173	}
    174
    175	error = pci_request_region(a->pcid, 0, a->name);
    176	if (error != 0) {
    177		esas2r_log(ESAS2R_LOG_CRIT,
    178			   "pci_request_region(2) failed, error %d",
    179			   error);
    180		esas2r_unmap_regions(a);
    181		return error;
    182	}
    183
    184	a->data_window = (void __force *)ioremap(pci_resource_start(a->pcid,
    185								    0),
    186						 pci_resource_len(a->pcid, 0));
    187	if (a->data_window == NULL) {
    188		esas2r_log(ESAS2R_LOG_CRIT,
    189			   "ioremap failed for data_window mem region\n");
    190		esas2r_unmap_regions(a);
    191		return -EFAULT;
    192	}
    193
    194	return 0;
    195}
    196
    197static void esas2r_setup_interrupts(struct esas2r_adapter *a, int intr_mode)
    198{
    199	int i;
    200
    201	/* Set up interrupt mode based on the requested value */
    202	switch (intr_mode) {
    203	case INTR_MODE_LEGACY:
    204use_legacy_interrupts:
    205		a->intr_mode = INTR_MODE_LEGACY;
    206		break;
    207
    208	case INTR_MODE_MSI:
    209		i = pci_enable_msi(a->pcid);
    210		if (i != 0) {
    211			esas2r_log(ESAS2R_LOG_WARN,
    212				   "failed to enable MSI for adapter %d, "
    213				   "falling back to legacy interrupts "
    214				   "(err=%d)", a->index,
    215				   i);
    216			goto use_legacy_interrupts;
    217		}
    218		a->intr_mode = INTR_MODE_MSI;
    219		set_bit(AF2_MSI_ENABLED, &a->flags2);
    220		break;
    221
    222
    223	default:
    224		esas2r_log(ESAS2R_LOG_WARN,
    225			   "unknown interrupt_mode %d requested, "
    226			   "falling back to legacy interrupt",
    227			   interrupt_mode);
    228		goto use_legacy_interrupts;
    229	}
    230}
    231
    232static void esas2r_claim_interrupts(struct esas2r_adapter *a)
    233{
    234	unsigned long flags = 0;
    235
    236	if (a->intr_mode == INTR_MODE_LEGACY)
    237		flags |= IRQF_SHARED;
    238
    239	esas2r_log(ESAS2R_LOG_INFO,
    240		   "esas2r_claim_interrupts irq=%d (%p, %s, %lx)",
    241		   a->pcid->irq, a, a->name, flags);
    242
    243	if (request_irq(a->pcid->irq,
    244			(a->intr_mode ==
    245			 INTR_MODE_LEGACY) ? esas2r_interrupt :
    246			esas2r_msi_interrupt,
    247			flags,
    248			a->name,
    249			a)) {
    250		esas2r_log(ESAS2R_LOG_CRIT, "unable to request IRQ %02X",
    251			   a->pcid->irq);
    252		return;
    253	}
    254
    255	set_bit(AF2_IRQ_CLAIMED, &a->flags2);
    256	esas2r_log(ESAS2R_LOG_INFO,
    257		   "claimed IRQ %d flags: 0x%lx",
    258		   a->pcid->irq, flags);
    259}
    260
    261int esas2r_init_adapter(struct Scsi_Host *host, struct pci_dev *pcid,
    262			int index)
    263{
    264	struct esas2r_adapter *a;
    265	u64 bus_addr = 0;
    266	int i;
    267	void *next_uncached;
    268	struct esas2r_request *first_request, *last_request;
    269	bool dma64 = false;
    270
    271	if (index >= MAX_ADAPTERS) {
    272		esas2r_log(ESAS2R_LOG_CRIT,
    273			   "tried to init invalid adapter index %u!",
    274			   index);
    275		return 0;
    276	}
    277
    278	if (esas2r_adapters[index]) {
    279		esas2r_log(ESAS2R_LOG_CRIT,
    280			   "tried to init existing adapter index %u!",
    281			   index);
    282		return 0;
    283	}
    284
    285	a = (struct esas2r_adapter *)host->hostdata;
    286	memset(a, 0, sizeof(struct esas2r_adapter));
    287	a->pcid = pcid;
    288	a->host = host;
    289
    290	if (sizeof(dma_addr_t) > 4 &&
    291	    dma_get_required_mask(&pcid->dev) > DMA_BIT_MASK(32) &&
    292	    !dma_set_mask_and_coherent(&pcid->dev, DMA_BIT_MASK(64)))
    293		dma64 = true;
    294
    295	if (!dma64 && dma_set_mask_and_coherent(&pcid->dev, DMA_BIT_MASK(32))) {
    296		esas2r_log(ESAS2R_LOG_CRIT, "failed to set DMA mask");
    297		esas2r_kill_adapter(index);
    298		return 0;
    299	}
    300
    301	esas2r_log_dev(ESAS2R_LOG_INFO, &pcid->dev,
    302		       "%s-bit PCI addressing enabled\n", dma64 ? "64" : "32");
    303
    304	esas2r_adapters[index] = a;
    305	sprintf(a->name, ESAS2R_DRVR_NAME "_%02d", index);
    306	esas2r_debug("new adapter %p, name %s", a, a->name);
    307	spin_lock_init(&a->request_lock);
    308	spin_lock_init(&a->fw_event_lock);
    309	mutex_init(&a->fm_api_mutex);
    310	mutex_init(&a->fs_api_mutex);
    311	sema_init(&a->nvram_semaphore, 1);
    312
    313	esas2r_fw_event_off(a);
    314	snprintf(a->fw_event_q_name, ESAS2R_KOBJ_NAME_LEN, "esas2r/%d",
    315		 a->index);
    316	a->fw_event_q = create_singlethread_workqueue(a->fw_event_q_name);
    317
    318	init_waitqueue_head(&a->buffered_ioctl_waiter);
    319	init_waitqueue_head(&a->nvram_waiter);
    320	init_waitqueue_head(&a->fm_api_waiter);
    321	init_waitqueue_head(&a->fs_api_waiter);
    322	init_waitqueue_head(&a->vda_waiter);
    323
    324	INIT_LIST_HEAD(&a->general_req.req_list);
    325	INIT_LIST_HEAD(&a->active_list);
    326	INIT_LIST_HEAD(&a->defer_list);
    327	INIT_LIST_HEAD(&a->free_sg_list_head);
    328	INIT_LIST_HEAD(&a->avail_request);
    329	INIT_LIST_HEAD(&a->vrq_mds_head);
    330	INIT_LIST_HEAD(&a->fw_event_list);
    331
    332	first_request = (struct esas2r_request *)((u8 *)(a + 1));
    333
    334	for (last_request = first_request, i = 1; i < num_requests;
    335	     last_request++, i++) {
    336		INIT_LIST_HEAD(&last_request->req_list);
    337		list_add_tail(&last_request->comp_list, &a->avail_request);
    338		if (!alloc_vda_req(a, last_request)) {
    339			esas2r_log(ESAS2R_LOG_CRIT,
    340				   "failed to allocate a VDA request!");
    341			esas2r_kill_adapter(index);
    342			return 0;
    343		}
    344	}
    345
    346	esas2r_debug("requests: %p to %p (%d, %d)", first_request,
    347		     last_request,
    348		     sizeof(*first_request),
    349		     num_requests);
    350
    351	if (esas2r_map_regions(a) != 0) {
    352		esas2r_log(ESAS2R_LOG_CRIT, "could not map PCI regions!");
    353		esas2r_kill_adapter(index);
    354		return 0;
    355	}
    356
    357	a->index = index;
    358
    359	/* interrupts will be disabled until we are done with init */
    360	atomic_inc(&a->dis_ints_cnt);
    361	atomic_inc(&a->disable_cnt);
    362	set_bit(AF_CHPRST_PENDING, &a->flags);
    363	set_bit(AF_DISC_PENDING, &a->flags);
    364	set_bit(AF_FIRST_INIT, &a->flags);
    365	set_bit(AF_LEGACY_SGE_MODE, &a->flags);
    366
    367	a->init_msg = ESAS2R_INIT_MSG_START;
    368	a->max_vdareq_size = 128;
    369	a->build_sgl = esas2r_build_sg_list_sge;
    370
    371	esas2r_setup_interrupts(a, interrupt_mode);
    372
    373	a->uncached_size = esas2r_get_uncached_size(a);
    374	a->uncached = dma_alloc_coherent(&pcid->dev,
    375					 (size_t)a->uncached_size,
    376					 (dma_addr_t *)&bus_addr,
    377					 GFP_KERNEL);
    378	if (a->uncached == NULL) {
    379		esas2r_log(ESAS2R_LOG_CRIT,
    380			   "failed to allocate %d bytes of consistent memory!",
    381			   a->uncached_size);
    382		esas2r_kill_adapter(index);
    383		return 0;
    384	}
    385
    386	a->uncached_phys = bus_addr;
    387
    388	esas2r_debug("%d bytes uncached memory allocated @ %p (%x:%x)",
    389		     a->uncached_size,
    390		     a->uncached,
    391		     upper_32_bits(bus_addr),
    392		     lower_32_bits(bus_addr));
    393	memset(a->uncached, 0, a->uncached_size);
    394	next_uncached = a->uncached;
    395
    396	if (!esas2r_init_adapter_struct(a,
    397					&next_uncached)) {
    398		esas2r_log(ESAS2R_LOG_CRIT,
    399			   "failed to initialize adapter structure (2)!");
    400		esas2r_kill_adapter(index);
    401		return 0;
    402	}
    403
    404	tasklet_init(&a->tasklet,
    405		     esas2r_adapter_tasklet,
    406		     (unsigned long)a);
    407
    408	/*
    409	 * Disable chip interrupts to prevent spurious interrupts
    410	 * until we claim the IRQ.
    411	 */
    412	esas2r_disable_chip_interrupts(a);
    413	esas2r_check_adapter(a);
    414
    415	if (!esas2r_init_adapter_hw(a, true)) {
    416		esas2r_log(ESAS2R_LOG_CRIT, "failed to initialize hardware!");
    417	} else {
    418		esas2r_debug("esas2r_init_adapter ok");
    419	}
    420
    421	esas2r_claim_interrupts(a);
    422
    423	if (test_bit(AF2_IRQ_CLAIMED, &a->flags2))
    424		esas2r_enable_chip_interrupts(a);
    425
    426	set_bit(AF2_INIT_DONE, &a->flags2);
    427	if (!test_bit(AF_DEGRADED_MODE, &a->flags))
    428		esas2r_kickoff_timer(a);
    429	esas2r_debug("esas2r_init_adapter done for %p (%d)",
    430		     a, a->disable_cnt);
    431
    432	return 1;
    433}
    434
    435static void esas2r_adapter_power_down(struct esas2r_adapter *a,
    436				      int power_management)
    437{
    438	struct esas2r_mem_desc *memdesc, *next;
    439
    440	if ((test_bit(AF2_INIT_DONE, &a->flags2))
    441	    &&  (!test_bit(AF_DEGRADED_MODE, &a->flags))) {
    442		if (!power_management) {
    443			del_timer_sync(&a->timer);
    444			tasklet_kill(&a->tasklet);
    445		}
    446		esas2r_power_down(a);
    447
    448		/*
    449		 * There are versions of firmware that do not handle the sync
    450		 * cache command correctly.  Stall here to ensure that the
    451		 * cache is lazily flushed.
    452		 */
    453		mdelay(500);
    454		esas2r_debug("chip halted");
    455	}
    456
    457	/* Remove sysfs binary files */
    458	if (a->sysfs_fw_created) {
    459		sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_fw);
    460		a->sysfs_fw_created = 0;
    461	}
    462
    463	if (a->sysfs_fs_created) {
    464		sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_fs);
    465		a->sysfs_fs_created = 0;
    466	}
    467
    468	if (a->sysfs_vda_created) {
    469		sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_vda);
    470		a->sysfs_vda_created = 0;
    471	}
    472
    473	if (a->sysfs_hw_created) {
    474		sysfs_remove_bin_file(&a->host->shost_dev.kobj, &bin_attr_hw);
    475		a->sysfs_hw_created = 0;
    476	}
    477
    478	if (a->sysfs_live_nvram_created) {
    479		sysfs_remove_bin_file(&a->host->shost_dev.kobj,
    480				      &bin_attr_live_nvram);
    481		a->sysfs_live_nvram_created = 0;
    482	}
    483
    484	if (a->sysfs_default_nvram_created) {
    485		sysfs_remove_bin_file(&a->host->shost_dev.kobj,
    486				      &bin_attr_default_nvram);
    487		a->sysfs_default_nvram_created = 0;
    488	}
    489
    490	/* Clean up interrupts */
    491	if (test_bit(AF2_IRQ_CLAIMED, &a->flags2)) {
    492		esas2r_log_dev(ESAS2R_LOG_INFO,
    493			       &(a->pcid->dev),
    494			       "free_irq(%d) called", a->pcid->irq);
    495
    496		free_irq(a->pcid->irq, a);
    497		esas2r_debug("IRQ released");
    498		clear_bit(AF2_IRQ_CLAIMED, &a->flags2);
    499	}
    500
    501	if (test_bit(AF2_MSI_ENABLED, &a->flags2)) {
    502		pci_disable_msi(a->pcid);
    503		clear_bit(AF2_MSI_ENABLED, &a->flags2);
    504		esas2r_debug("MSI disabled");
    505	}
    506
    507	if (a->inbound_list_md.virt_addr)
    508		esas2r_initmem_free(a, &a->inbound_list_md);
    509
    510	if (a->outbound_list_md.virt_addr)
    511		esas2r_initmem_free(a, &a->outbound_list_md);
    512
    513	list_for_each_entry_safe(memdesc, next, &a->free_sg_list_head,
    514				 next_desc) {
    515		esas2r_initmem_free(a, memdesc);
    516	}
    517
    518	/* Following frees everything allocated via alloc_vda_req */
    519	list_for_each_entry_safe(memdesc, next, &a->vrq_mds_head, next_desc) {
    520		esas2r_initmem_free(a, memdesc);
    521		list_del(&memdesc->next_desc);
    522		kfree(memdesc);
    523	}
    524
    525	kfree(a->first_ae_req);
    526	a->first_ae_req = NULL;
    527
    528	kfree(a->sg_list_mds);
    529	a->sg_list_mds = NULL;
    530
    531	kfree(a->req_table);
    532	a->req_table = NULL;
    533
    534	if (a->regs) {
    535		esas2r_unmap_regions(a);
    536		a->regs = NULL;
    537		a->data_window = NULL;
    538		esas2r_debug("regions unmapped");
    539	}
    540}
    541
    542/* Release/free allocated resources for specified adapters. */
    543void esas2r_kill_adapter(int i)
    544{
    545	struct esas2r_adapter *a = esas2r_adapters[i];
    546
    547	if (a) {
    548		unsigned long flags;
    549		struct workqueue_struct *wq;
    550		esas2r_debug("killing adapter %p [%d] ", a, i);
    551		esas2r_fw_event_off(a);
    552		esas2r_adapter_power_down(a, 0);
    553		if (esas2r_buffered_ioctl &&
    554		    (a->pcid == esas2r_buffered_ioctl_pcid)) {
    555			dma_free_coherent(&a->pcid->dev,
    556					  (size_t)esas2r_buffered_ioctl_size,
    557					  esas2r_buffered_ioctl,
    558					  esas2r_buffered_ioctl_addr);
    559			esas2r_buffered_ioctl = NULL;
    560		}
    561
    562		if (a->vda_buffer) {
    563			dma_free_coherent(&a->pcid->dev,
    564					  (size_t)VDA_MAX_BUFFER_SIZE,
    565					  a->vda_buffer,
    566					  (dma_addr_t)a->ppvda_buffer);
    567			a->vda_buffer = NULL;
    568		}
    569		if (a->fs_api_buffer) {
    570			dma_free_coherent(&a->pcid->dev,
    571					  (size_t)a->fs_api_buffer_size,
    572					  a->fs_api_buffer,
    573					  (dma_addr_t)a->ppfs_api_buffer);
    574			a->fs_api_buffer = NULL;
    575		}
    576
    577		kfree(a->local_atto_ioctl);
    578		a->local_atto_ioctl = NULL;
    579
    580		spin_lock_irqsave(&a->fw_event_lock, flags);
    581		wq = a->fw_event_q;
    582		a->fw_event_q = NULL;
    583		spin_unlock_irqrestore(&a->fw_event_lock, flags);
    584		if (wq)
    585			destroy_workqueue(wq);
    586
    587		if (a->uncached) {
    588			dma_free_coherent(&a->pcid->dev,
    589					  (size_t)a->uncached_size,
    590					  a->uncached,
    591					  (dma_addr_t)a->uncached_phys);
    592			a->uncached = NULL;
    593			esas2r_debug("uncached area freed");
    594		}
    595
    596		esas2r_log_dev(ESAS2R_LOG_INFO,
    597			       &(a->pcid->dev),
    598			       "pci_disable_device() called.  msix_enabled: %d "
    599			       "msi_enabled: %d irq: %d pin: %d",
    600			       a->pcid->msix_enabled,
    601			       a->pcid->msi_enabled,
    602			       a->pcid->irq,
    603			       a->pcid->pin);
    604
    605		esas2r_log_dev(ESAS2R_LOG_INFO,
    606			       &(a->pcid->dev),
    607			       "before pci_disable_device() enable_cnt: %d",
    608			       a->pcid->enable_cnt.counter);
    609
    610		pci_disable_device(a->pcid);
    611		esas2r_log_dev(ESAS2R_LOG_INFO,
    612			       &(a->pcid->dev),
    613			       "after pci_disable_device() enable_cnt: %d",
    614			       a->pcid->enable_cnt.counter);
    615
    616		esas2r_log_dev(ESAS2R_LOG_INFO,
    617			       &(a->pcid->dev),
    618			       "pci_set_drv_data(%p, NULL) called",
    619			       a->pcid);
    620
    621		pci_set_drvdata(a->pcid, NULL);
    622		esas2r_adapters[i] = NULL;
    623
    624		if (test_bit(AF2_INIT_DONE, &a->flags2)) {
    625			clear_bit(AF2_INIT_DONE, &a->flags2);
    626
    627			set_bit(AF_DEGRADED_MODE, &a->flags);
    628
    629			esas2r_log_dev(ESAS2R_LOG_INFO,
    630				       &(a->host->shost_gendev),
    631				       "scsi_remove_host() called");
    632
    633			scsi_remove_host(a->host);
    634
    635			esas2r_log_dev(ESAS2R_LOG_INFO,
    636				       &(a->host->shost_gendev),
    637				       "scsi_host_put() called");
    638
    639			scsi_host_put(a->host);
    640		}
    641	}
    642}
    643
    644static int __maybe_unused esas2r_suspend(struct device *dev)
    645{
    646	struct Scsi_Host *host = dev_get_drvdata(dev);
    647	struct esas2r_adapter *a = (struct esas2r_adapter *)host->hostdata;
    648
    649	esas2r_log_dev(ESAS2R_LOG_INFO, dev, "suspending adapter()");
    650	if (!a)
    651		return -ENODEV;
    652
    653	esas2r_adapter_power_down(a, 1);
    654	esas2r_log_dev(ESAS2R_LOG_INFO, dev, "esas2r_suspend(): 0");
    655	return 0;
    656}
    657
    658static int __maybe_unused esas2r_resume(struct device *dev)
    659{
    660	struct Scsi_Host *host = dev_get_drvdata(dev);
    661	struct esas2r_adapter *a = (struct esas2r_adapter *)host->hostdata;
    662	int rez = 0;
    663
    664	esas2r_log_dev(ESAS2R_LOG_INFO, dev, "resuming adapter()");
    665
    666	if (!a) {
    667		rez = -ENODEV;
    668		goto error_exit;
    669	}
    670
    671	if (esas2r_map_regions(a) != 0) {
    672		esas2r_log(ESAS2R_LOG_CRIT, "could not re-map PCI regions!");
    673		rez = -ENOMEM;
    674		goto error_exit;
    675	}
    676
    677	/* Set up interupt mode */
    678	esas2r_setup_interrupts(a, a->intr_mode);
    679
    680	/*
    681	 * Disable chip interrupts to prevent spurious interrupts until we
    682	 * claim the IRQ.
    683	 */
    684	esas2r_disable_chip_interrupts(a);
    685	if (!esas2r_power_up(a, true)) {
    686		esas2r_debug("yikes, esas2r_power_up failed");
    687		rez = -ENOMEM;
    688		goto error_exit;
    689	}
    690
    691	esas2r_claim_interrupts(a);
    692
    693	if (test_bit(AF2_IRQ_CLAIMED, &a->flags2)) {
    694		/*
    695		 * Now that system interrupt(s) are claimed, we can enable
    696		 * chip interrupts.
    697		 */
    698		esas2r_enable_chip_interrupts(a);
    699		esas2r_kickoff_timer(a);
    700	} else {
    701		esas2r_debug("yikes, unable to claim IRQ");
    702		esas2r_log(ESAS2R_LOG_CRIT, "could not re-claim IRQ!");
    703		rez = -ENOMEM;
    704		goto error_exit;
    705	}
    706
    707error_exit:
    708	esas2r_log_dev(ESAS2R_LOG_CRIT, dev, "esas2r_resume(): %d",
    709		       rez);
    710	return rez;
    711}
    712
    713SIMPLE_DEV_PM_OPS(esas2r_pm_ops, esas2r_suspend, esas2r_resume);
    714
    715bool esas2r_set_degraded_mode(struct esas2r_adapter *a, char *error_str)
    716{
    717	set_bit(AF_DEGRADED_MODE, &a->flags);
    718	esas2r_log(ESAS2R_LOG_CRIT,
    719		   "setting adapter to degraded mode: %s\n", error_str);
    720	return false;
    721}
    722
    723u32 esas2r_get_uncached_size(struct esas2r_adapter *a)
    724{
    725	return sizeof(struct esas2r_sas_nvram)
    726	       + ALIGN(ESAS2R_DISC_BUF_LEN, 8)
    727	       + ALIGN(sizeof(u32), 8) /* outbound list copy pointer */
    728	       + 8
    729	       + (num_sg_lists * (u16)sgl_page_size)
    730	       + ALIGN((num_requests + num_ae_requests + 1 +
    731			ESAS2R_LIST_EXTRA) *
    732		       sizeof(struct esas2r_inbound_list_source_entry),
    733		       8)
    734	       + ALIGN((num_requests + num_ae_requests + 1 +
    735			ESAS2R_LIST_EXTRA) *
    736		       sizeof(struct atto_vda_ob_rsp), 8)
    737	       + 256; /* VDA request and buffer align */
    738}
    739
    740static void esas2r_init_pci_cfg_space(struct esas2r_adapter *a)
    741{
    742	if (pci_is_pcie(a->pcid)) {
    743		u16 devcontrol;
    744
    745		pcie_capability_read_word(a->pcid, PCI_EXP_DEVCTL, &devcontrol);
    746
    747		if ((devcontrol & PCI_EXP_DEVCTL_READRQ) >
    748		     PCI_EXP_DEVCTL_READRQ_512B) {
    749			esas2r_log(ESAS2R_LOG_INFO,
    750				   "max read request size > 512B");
    751
    752			devcontrol &= ~PCI_EXP_DEVCTL_READRQ;
    753			devcontrol |= PCI_EXP_DEVCTL_READRQ_512B;
    754			pcie_capability_write_word(a->pcid, PCI_EXP_DEVCTL,
    755						   devcontrol);
    756		}
    757	}
    758}
    759
    760/*
    761 * Determine the organization of the uncached data area and
    762 * finish initializing the adapter structure
    763 */
    764bool esas2r_init_adapter_struct(struct esas2r_adapter *a,
    765				void **uncached_area)
    766{
    767	u32 i;
    768	u8 *high;
    769	struct esas2r_inbound_list_source_entry *element;
    770	struct esas2r_request *rq;
    771	struct esas2r_mem_desc *sgl;
    772
    773	spin_lock_init(&a->sg_list_lock);
    774	spin_lock_init(&a->mem_lock);
    775	spin_lock_init(&a->queue_lock);
    776
    777	a->targetdb_end = &a->targetdb[ESAS2R_MAX_TARGETS];
    778
    779	if (!alloc_vda_req(a, &a->general_req)) {
    780		esas2r_hdebug(
    781			"failed to allocate a VDA request for the general req!");
    782		return false;
    783	}
    784
    785	/* allocate requests for asynchronous events */
    786	a->first_ae_req =
    787		kcalloc(num_ae_requests, sizeof(struct esas2r_request),
    788			GFP_KERNEL);
    789
    790	if (a->first_ae_req == NULL) {
    791		esas2r_log(ESAS2R_LOG_CRIT,
    792			   "failed to allocate memory for asynchronous events");
    793		return false;
    794	}
    795
    796	/* allocate the S/G list memory descriptors */
    797	a->sg_list_mds = kcalloc(num_sg_lists, sizeof(struct esas2r_mem_desc),
    798				 GFP_KERNEL);
    799
    800	if (a->sg_list_mds == NULL) {
    801		esas2r_log(ESAS2R_LOG_CRIT,
    802			   "failed to allocate memory for s/g list descriptors");
    803		return false;
    804	}
    805
    806	/* allocate the request table */
    807	a->req_table =
    808		kcalloc(num_requests + num_ae_requests + 1,
    809			sizeof(struct esas2r_request *),
    810			GFP_KERNEL);
    811
    812	if (a->req_table == NULL) {
    813		esas2r_log(ESAS2R_LOG_CRIT,
    814			   "failed to allocate memory for the request table");
    815		return false;
    816	}
    817
    818	/* initialize PCI configuration space */
    819	esas2r_init_pci_cfg_space(a);
    820
    821	/*
    822	 * the thunder_stream boards all have a serial flash part that has a
    823	 * different base address on the AHB bus.
    824	 */
    825	if ((a->pcid->subsystem_vendor == ATTO_VENDOR_ID)
    826	    && (a->pcid->subsystem_device & ATTO_SSDID_TBT))
    827		a->flags2 |= AF2_THUNDERBOLT;
    828
    829	if (test_bit(AF2_THUNDERBOLT, &a->flags2))
    830		a->flags2 |= AF2_SERIAL_FLASH;
    831
    832	if (a->pcid->subsystem_device == ATTO_TLSH_1068)
    833		a->flags2 |= AF2_THUNDERLINK;
    834
    835	/* Uncached Area */
    836	high = (u8 *)*uncached_area;
    837
    838	/* initialize the scatter/gather table pages */
    839
    840	for (i = 0, sgl = a->sg_list_mds; i < num_sg_lists; i++, sgl++) {
    841		sgl->size = sgl_page_size;
    842
    843		list_add_tail(&sgl->next_desc, &a->free_sg_list_head);
    844
    845		if (!esas2r_initmem_alloc(a, sgl, ESAS2R_SGL_ALIGN)) {
    846			/* Allow the driver to load if the minimum count met. */
    847			if (i < NUM_SGL_MIN)
    848				return false;
    849			break;
    850		}
    851	}
    852
    853	/* compute the size of the lists */
    854	a->list_size = num_requests + ESAS2R_LIST_EXTRA;
    855
    856	/* allocate the inbound list */
    857	a->inbound_list_md.size = a->list_size *
    858				  sizeof(struct
    859					 esas2r_inbound_list_source_entry);
    860
    861	if (!esas2r_initmem_alloc(a, &a->inbound_list_md, ESAS2R_LIST_ALIGN)) {
    862		esas2r_hdebug("failed to allocate IB list");
    863		return false;
    864	}
    865
    866	/* allocate the outbound list */
    867	a->outbound_list_md.size = a->list_size *
    868				   sizeof(struct atto_vda_ob_rsp);
    869
    870	if (!esas2r_initmem_alloc(a, &a->outbound_list_md,
    871				  ESAS2R_LIST_ALIGN)) {
    872		esas2r_hdebug("failed to allocate IB list");
    873		return false;
    874	}
    875
    876	/* allocate the NVRAM structure */
    877	a->nvram = (struct esas2r_sas_nvram *)high;
    878	high += sizeof(struct esas2r_sas_nvram);
    879
    880	/* allocate the discovery buffer */
    881	a->disc_buffer = high;
    882	high += ESAS2R_DISC_BUF_LEN;
    883	high = PTR_ALIGN(high, 8);
    884
    885	/* allocate the outbound list copy pointer */
    886	a->outbound_copy = (u32 volatile *)high;
    887	high += sizeof(u32);
    888
    889	if (!test_bit(AF_NVR_VALID, &a->flags))
    890		esas2r_nvram_set_defaults(a);
    891
    892	/* update the caller's uncached memory area pointer */
    893	*uncached_area = (void *)high;
    894
    895	/* initialize the allocated memory */
    896	if (test_bit(AF_FIRST_INIT, &a->flags)) {
    897		esas2r_targ_db_initialize(a);
    898
    899		/* prime parts of the inbound list */
    900		element =
    901			(struct esas2r_inbound_list_source_entry *)a->
    902			inbound_list_md.
    903			virt_addr;
    904
    905		for (i = 0; i < a->list_size; i++) {
    906			element->address = 0;
    907			element->reserved = 0;
    908			element->length = cpu_to_le32(HWILSE_INTERFACE_F0
    909						      | (sizeof(union
    910								atto_vda_req)
    911							 /
    912							 sizeof(u32)));
    913			element++;
    914		}
    915
    916		/* init the AE requests */
    917		for (rq = a->first_ae_req, i = 0; i < num_ae_requests; rq++,
    918		     i++) {
    919			INIT_LIST_HEAD(&rq->req_list);
    920			if (!alloc_vda_req(a, rq)) {
    921				esas2r_hdebug(
    922					"failed to allocate a VDA request!");
    923				return false;
    924			}
    925
    926			esas2r_rq_init_request(rq, a);
    927
    928			/* override the completion function */
    929			rq->comp_cb = esas2r_ae_complete;
    930		}
    931	}
    932
    933	return true;
    934}
    935
    936/* This code will verify that the chip is operational. */
    937bool esas2r_check_adapter(struct esas2r_adapter *a)
    938{
    939	u32 starttime;
    940	u32 doorbell;
    941	u64 ppaddr;
    942	u32 dw;
    943
    944	/*
    945	 * if the chip reset detected flag is set, we can bypass a bunch of
    946	 * stuff.
    947	 */
    948	if (test_bit(AF_CHPRST_DETECTED, &a->flags))
    949		goto skip_chip_reset;
    950
    951	/*
    952	 * BEFORE WE DO ANYTHING, disable the chip interrupts!  the boot driver
    953	 * may have left them enabled or we may be recovering from a fault.
    954	 */
    955	esas2r_write_register_dword(a, MU_INT_MASK_OUT, ESAS2R_INT_DIS_MASK);
    956	esas2r_flush_register_dword(a, MU_INT_MASK_OUT);
    957
    958	/*
    959	 * wait for the firmware to become ready by forcing an interrupt and
    960	 * waiting for a response.
    961	 */
    962	starttime = jiffies_to_msecs(jiffies);
    963
    964	while (true) {
    965		esas2r_force_interrupt(a);
    966		doorbell = esas2r_read_register_dword(a, MU_DOORBELL_OUT);
    967		if (doorbell == 0xFFFFFFFF) {
    968			/*
    969			 * Give the firmware up to two seconds to enable
    970			 * register access after a reset.
    971			 */
    972			if ((jiffies_to_msecs(jiffies) - starttime) > 2000)
    973				return esas2r_set_degraded_mode(a,
    974								"unable to access registers");
    975		} else if (doorbell & DRBL_FORCE_INT) {
    976			u32 ver = (doorbell & DRBL_FW_VER_MSK);
    977
    978			/*
    979			 * This driver supports version 0 and version 1 of
    980			 * the API
    981			 */
    982			esas2r_write_register_dword(a, MU_DOORBELL_OUT,
    983						    doorbell);
    984
    985			if (ver == DRBL_FW_VER_0) {
    986				set_bit(AF_LEGACY_SGE_MODE, &a->flags);
    987
    988				a->max_vdareq_size = 128;
    989				a->build_sgl = esas2r_build_sg_list_sge;
    990			} else if (ver == DRBL_FW_VER_1) {
    991				clear_bit(AF_LEGACY_SGE_MODE, &a->flags);
    992
    993				a->max_vdareq_size = 1024;
    994				a->build_sgl = esas2r_build_sg_list_prd;
    995			} else {
    996				return esas2r_set_degraded_mode(a,
    997								"unknown firmware version");
    998			}
    999			break;
   1000		}
   1001
   1002		schedule_timeout_interruptible(msecs_to_jiffies(100));
   1003
   1004		if ((jiffies_to_msecs(jiffies) - starttime) > 180000) {
   1005			esas2r_hdebug("FW ready TMO");
   1006			esas2r_bugon();
   1007
   1008			return esas2r_set_degraded_mode(a,
   1009							"firmware start has timed out");
   1010		}
   1011	}
   1012
   1013	/* purge any asynchronous events since we will repost them later */
   1014	esas2r_write_register_dword(a, MU_DOORBELL_IN, DRBL_MSG_IFC_DOWN);
   1015	starttime = jiffies_to_msecs(jiffies);
   1016
   1017	while (true) {
   1018		doorbell = esas2r_read_register_dword(a, MU_DOORBELL_OUT);
   1019		if (doorbell & DRBL_MSG_IFC_DOWN) {
   1020			esas2r_write_register_dword(a, MU_DOORBELL_OUT,
   1021						    doorbell);
   1022			break;
   1023		}
   1024
   1025		schedule_timeout_interruptible(msecs_to_jiffies(50));
   1026
   1027		if ((jiffies_to_msecs(jiffies) - starttime) > 3000) {
   1028			esas2r_hdebug("timeout waiting for interface down");
   1029			break;
   1030		}
   1031	}
   1032skip_chip_reset:
   1033	/*
   1034	 * first things first, before we go changing any of these registers
   1035	 * disable the communication lists.
   1036	 */
   1037	dw = esas2r_read_register_dword(a, MU_IN_LIST_CONFIG);
   1038	dw &= ~MU_ILC_ENABLE;
   1039	esas2r_write_register_dword(a, MU_IN_LIST_CONFIG, dw);
   1040	dw = esas2r_read_register_dword(a, MU_OUT_LIST_CONFIG);
   1041	dw &= ~MU_OLC_ENABLE;
   1042	esas2r_write_register_dword(a, MU_OUT_LIST_CONFIG, dw);
   1043
   1044	/* configure the communication list addresses */
   1045	ppaddr = a->inbound_list_md.phys_addr;
   1046	esas2r_write_register_dword(a, MU_IN_LIST_ADDR_LO,
   1047				    lower_32_bits(ppaddr));
   1048	esas2r_write_register_dword(a, MU_IN_LIST_ADDR_HI,
   1049				    upper_32_bits(ppaddr));
   1050	ppaddr = a->outbound_list_md.phys_addr;
   1051	esas2r_write_register_dword(a, MU_OUT_LIST_ADDR_LO,
   1052				    lower_32_bits(ppaddr));
   1053	esas2r_write_register_dword(a, MU_OUT_LIST_ADDR_HI,
   1054				    upper_32_bits(ppaddr));
   1055	ppaddr = a->uncached_phys +
   1056		 ((u8 *)a->outbound_copy - a->uncached);
   1057	esas2r_write_register_dword(a, MU_OUT_LIST_COPY_PTR_LO,
   1058				    lower_32_bits(ppaddr));
   1059	esas2r_write_register_dword(a, MU_OUT_LIST_COPY_PTR_HI,
   1060				    upper_32_bits(ppaddr));
   1061
   1062	/* reset the read and write pointers */
   1063	*a->outbound_copy =
   1064		a->last_write =
   1065			a->last_read = a->list_size - 1;
   1066	set_bit(AF_COMM_LIST_TOGGLE, &a->flags);
   1067	esas2r_write_register_dword(a, MU_IN_LIST_WRITE, MU_ILW_TOGGLE |
   1068				    a->last_write);
   1069	esas2r_write_register_dword(a, MU_OUT_LIST_COPY, MU_OLC_TOGGLE |
   1070				    a->last_write);
   1071	esas2r_write_register_dword(a, MU_IN_LIST_READ, MU_ILR_TOGGLE |
   1072				    a->last_write);
   1073	esas2r_write_register_dword(a, MU_OUT_LIST_WRITE,
   1074				    MU_OLW_TOGGLE | a->last_write);
   1075
   1076	/* configure the interface select fields */
   1077	dw = esas2r_read_register_dword(a, MU_IN_LIST_IFC_CONFIG);
   1078	dw &= ~(MU_ILIC_LIST | MU_ILIC_DEST);
   1079	esas2r_write_register_dword(a, MU_IN_LIST_IFC_CONFIG,
   1080				    (dw | MU_ILIC_LIST_F0 | MU_ILIC_DEST_DDR));
   1081	dw = esas2r_read_register_dword(a, MU_OUT_LIST_IFC_CONFIG);
   1082	dw &= ~(MU_OLIC_LIST | MU_OLIC_SOURCE);
   1083	esas2r_write_register_dword(a, MU_OUT_LIST_IFC_CONFIG,
   1084				    (dw | MU_OLIC_LIST_F0 |
   1085				     MU_OLIC_SOURCE_DDR));
   1086
   1087	/* finish configuring the communication lists */
   1088	dw = esas2r_read_register_dword(a, MU_IN_LIST_CONFIG);
   1089	dw &= ~(MU_ILC_ENTRY_MASK | MU_ILC_NUMBER_MASK);
   1090	dw |= MU_ILC_ENTRY_4_DW | MU_ILC_DYNAMIC_SRC
   1091	      | (a->list_size << MU_ILC_NUMBER_SHIFT);
   1092	esas2r_write_register_dword(a, MU_IN_LIST_CONFIG, dw);
   1093	dw = esas2r_read_register_dword(a, MU_OUT_LIST_CONFIG);
   1094	dw &= ~(MU_OLC_ENTRY_MASK | MU_OLC_NUMBER_MASK);
   1095	dw |= MU_OLC_ENTRY_4_DW | (a->list_size << MU_OLC_NUMBER_SHIFT);
   1096	esas2r_write_register_dword(a, MU_OUT_LIST_CONFIG, dw);
   1097
   1098	/*
   1099	 * notify the firmware that we're done setting up the communication
   1100	 * list registers.  wait here until the firmware is done configuring
   1101	 * its lists.  it will signal that it is done by enabling the lists.
   1102	 */
   1103	esas2r_write_register_dword(a, MU_DOORBELL_IN, DRBL_MSG_IFC_INIT);
   1104	starttime = jiffies_to_msecs(jiffies);
   1105
   1106	while (true) {
   1107		doorbell = esas2r_read_register_dword(a, MU_DOORBELL_OUT);
   1108		if (doorbell & DRBL_MSG_IFC_INIT) {
   1109			esas2r_write_register_dword(a, MU_DOORBELL_OUT,
   1110						    doorbell);
   1111			break;
   1112		}
   1113
   1114		schedule_timeout_interruptible(msecs_to_jiffies(100));
   1115
   1116		if ((jiffies_to_msecs(jiffies) - starttime) > 3000) {
   1117			esas2r_hdebug(
   1118				"timeout waiting for communication list init");
   1119			esas2r_bugon();
   1120			return esas2r_set_degraded_mode(a,
   1121							"timeout waiting for communication list init");
   1122		}
   1123	}
   1124
   1125	/*
   1126	 * flag whether the firmware supports the power down doorbell.  we
   1127	 * determine this by reading the inbound doorbell enable mask.
   1128	 */
   1129	doorbell = esas2r_read_register_dword(a, MU_DOORBELL_IN_ENB);
   1130	if (doorbell & DRBL_POWER_DOWN)
   1131		set_bit(AF2_VDA_POWER_DOWN, &a->flags2);
   1132	else
   1133		clear_bit(AF2_VDA_POWER_DOWN, &a->flags2);
   1134
   1135	/*
   1136	 * enable assertion of outbound queue and doorbell interrupts in the
   1137	 * main interrupt cause register.
   1138	 */
   1139	esas2r_write_register_dword(a, MU_OUT_LIST_INT_MASK, MU_OLIS_MASK);
   1140	esas2r_write_register_dword(a, MU_DOORBELL_OUT_ENB, DRBL_ENB_MASK);
   1141	return true;
   1142}
   1143
   1144/* Process the initialization message just completed and format the next one. */
   1145static bool esas2r_format_init_msg(struct esas2r_adapter *a,
   1146				   struct esas2r_request *rq)
   1147{
   1148	u32 msg = a->init_msg;
   1149	struct atto_vda_cfg_init *ci;
   1150
   1151	a->init_msg = 0;
   1152
   1153	switch (msg) {
   1154	case ESAS2R_INIT_MSG_START:
   1155	case ESAS2R_INIT_MSG_REINIT:
   1156	{
   1157		esas2r_hdebug("CFG init");
   1158		esas2r_build_cfg_req(a,
   1159				     rq,
   1160				     VDA_CFG_INIT,
   1161				     0,
   1162				     NULL);
   1163		ci = (struct atto_vda_cfg_init *)&rq->vrq->cfg.data.init;
   1164		ci->sgl_page_size = cpu_to_le32(sgl_page_size);
   1165		/* firmware interface overflows in y2106 */
   1166		ci->epoch_time = cpu_to_le32(ktime_get_real_seconds());
   1167		rq->flags |= RF_FAILURE_OK;
   1168		a->init_msg = ESAS2R_INIT_MSG_INIT;
   1169		break;
   1170	}
   1171
   1172	case ESAS2R_INIT_MSG_INIT:
   1173		if (rq->req_stat == RS_SUCCESS) {
   1174			u32 major;
   1175			u32 minor;
   1176			u16 fw_release;
   1177
   1178			a->fw_version = le16_to_cpu(
   1179				rq->func_rsp.cfg_rsp.vda_version);
   1180			a->fw_build = rq->func_rsp.cfg_rsp.fw_build;
   1181			fw_release = le16_to_cpu(
   1182				rq->func_rsp.cfg_rsp.fw_release);
   1183			major = LOBYTE(fw_release);
   1184			minor = HIBYTE(fw_release);
   1185			a->fw_version += (major << 16) + (minor << 24);
   1186		} else {
   1187			esas2r_hdebug("FAILED");
   1188		}
   1189
   1190		/*
   1191		 * the 2.71 and earlier releases of R6xx firmware did not error
   1192		 * unsupported config requests correctly.
   1193		 */
   1194
   1195		if ((test_bit(AF2_THUNDERBOLT, &a->flags2))
   1196		    || (be32_to_cpu(a->fw_version) > 0x00524702)) {
   1197			esas2r_hdebug("CFG get init");
   1198			esas2r_build_cfg_req(a,
   1199					     rq,
   1200					     VDA_CFG_GET_INIT2,
   1201					     sizeof(struct atto_vda_cfg_init),
   1202					     NULL);
   1203
   1204			rq->vrq->cfg.sg_list_offset = offsetof(
   1205				struct atto_vda_cfg_req,
   1206				data.sge);
   1207			rq->vrq->cfg.data.prde.ctl_len =
   1208				cpu_to_le32(sizeof(struct atto_vda_cfg_init));
   1209			rq->vrq->cfg.data.prde.address = cpu_to_le64(
   1210				rq->vrq_md->phys_addr +
   1211				sizeof(union atto_vda_req));
   1212			rq->flags |= RF_FAILURE_OK;
   1213			a->init_msg = ESAS2R_INIT_MSG_GET_INIT;
   1214			break;
   1215		}
   1216		fallthrough;
   1217
   1218	case ESAS2R_INIT_MSG_GET_INIT:
   1219		if (msg == ESAS2R_INIT_MSG_GET_INIT) {
   1220			ci = (struct atto_vda_cfg_init *)rq->data_buf;
   1221			if (rq->req_stat == RS_SUCCESS) {
   1222				a->num_targets_backend =
   1223					le32_to_cpu(ci->num_targets_backend);
   1224				a->ioctl_tunnel =
   1225					le32_to_cpu(ci->ioctl_tunnel);
   1226			} else {
   1227				esas2r_hdebug("FAILED");
   1228			}
   1229		}
   1230		fallthrough;
   1231
   1232	default:
   1233		rq->req_stat = RS_SUCCESS;
   1234		return false;
   1235	}
   1236	return true;
   1237}
   1238
   1239/*
   1240 * Perform initialization messages via the request queue.  Messages are
   1241 * performed with interrupts disabled.
   1242 */
   1243bool esas2r_init_msgs(struct esas2r_adapter *a)
   1244{
   1245	bool success = true;
   1246	struct esas2r_request *rq = &a->general_req;
   1247
   1248	esas2r_rq_init_request(rq, a);
   1249	rq->comp_cb = esas2r_dummy_complete;
   1250
   1251	if (a->init_msg == 0)
   1252		a->init_msg = ESAS2R_INIT_MSG_REINIT;
   1253
   1254	while (a->init_msg) {
   1255		if (esas2r_format_init_msg(a, rq)) {
   1256			unsigned long flags;
   1257			while (true) {
   1258				spin_lock_irqsave(&a->queue_lock, flags);
   1259				esas2r_start_vda_request(a, rq);
   1260				spin_unlock_irqrestore(&a->queue_lock, flags);
   1261				esas2r_wait_request(a, rq);
   1262				if (rq->req_stat != RS_PENDING)
   1263					break;
   1264			}
   1265		}
   1266
   1267		if (rq->req_stat == RS_SUCCESS
   1268		    || ((rq->flags & RF_FAILURE_OK)
   1269			&& rq->req_stat != RS_TIMEOUT))
   1270			continue;
   1271
   1272		esas2r_log(ESAS2R_LOG_CRIT, "init message %x failed (%x, %x)",
   1273			   a->init_msg, rq->req_stat, rq->flags);
   1274		a->init_msg = ESAS2R_INIT_MSG_START;
   1275		success = false;
   1276		break;
   1277	}
   1278
   1279	esas2r_rq_destroy_request(rq, a);
   1280	return success;
   1281}
   1282
   1283/* Initialize the adapter chip */
   1284bool esas2r_init_adapter_hw(struct esas2r_adapter *a, bool init_poll)
   1285{
   1286	bool rslt = false;
   1287	struct esas2r_request *rq;
   1288	u32 i;
   1289
   1290	if (test_bit(AF_DEGRADED_MODE, &a->flags))
   1291		goto exit;
   1292
   1293	if (!test_bit(AF_NVR_VALID, &a->flags)) {
   1294		if (!esas2r_nvram_read_direct(a))
   1295			esas2r_log(ESAS2R_LOG_WARN,
   1296				   "invalid/missing NVRAM parameters");
   1297	}
   1298
   1299	if (!esas2r_init_msgs(a)) {
   1300		esas2r_set_degraded_mode(a, "init messages failed");
   1301		goto exit;
   1302	}
   1303
   1304	/* The firmware is ready. */
   1305	clear_bit(AF_DEGRADED_MODE, &a->flags);
   1306	clear_bit(AF_CHPRST_PENDING, &a->flags);
   1307
   1308	/* Post all the async event requests */
   1309	for (i = 0, rq = a->first_ae_req; i < num_ae_requests; i++, rq++)
   1310		esas2r_start_ae_request(a, rq);
   1311
   1312	if (!a->flash_rev[0])
   1313		esas2r_read_flash_rev(a);
   1314
   1315	if (!a->image_type[0])
   1316		esas2r_read_image_type(a);
   1317
   1318	if (a->fw_version == 0)
   1319		a->fw_rev[0] = 0;
   1320	else
   1321		sprintf(a->fw_rev, "%1d.%02d",
   1322			(int)LOBYTE(HIWORD(a->fw_version)),
   1323			(int)HIBYTE(HIWORD(a->fw_version)));
   1324
   1325	esas2r_hdebug("firmware revision: %s", a->fw_rev);
   1326
   1327	if (test_bit(AF_CHPRST_DETECTED, &a->flags)
   1328	    && (test_bit(AF_FIRST_INIT, &a->flags))) {
   1329		esas2r_enable_chip_interrupts(a);
   1330		return true;
   1331	}
   1332
   1333	/* initialize discovery */
   1334	esas2r_disc_initialize(a);
   1335
   1336	/*
   1337	 * wait for the device wait time to expire here if requested.  this is
   1338	 * usually requested during initial driver load and possibly when
   1339	 * resuming from a low power state.  deferred device waiting will use
   1340	 * interrupts.  chip reset recovery always defers device waiting to
   1341	 * avoid being in a TASKLET too long.
   1342	 */
   1343	if (init_poll) {
   1344		u32 currtime = a->disc_start_time;
   1345		u32 nexttick = 100;
   1346		u32 deltatime;
   1347
   1348		/*
   1349		 * Block Tasklets from getting scheduled and indicate this is
   1350		 * polled discovery.
   1351		 */
   1352		set_bit(AF_TASKLET_SCHEDULED, &a->flags);
   1353		set_bit(AF_DISC_POLLED, &a->flags);
   1354
   1355		/*
   1356		 * Temporarily bring the disable count to zero to enable
   1357		 * deferred processing.  Note that the count is already zero
   1358		 * after the first initialization.
   1359		 */
   1360		if (test_bit(AF_FIRST_INIT, &a->flags))
   1361			atomic_dec(&a->disable_cnt);
   1362
   1363		while (test_bit(AF_DISC_PENDING, &a->flags)) {
   1364			schedule_timeout_interruptible(msecs_to_jiffies(100));
   1365
   1366			/*
   1367			 * Determine the need for a timer tick based on the
   1368			 * delta time between this and the last iteration of
   1369			 * this loop.  We don't use the absolute time because
   1370			 * then we would have to worry about when nexttick
   1371			 * wraps and currtime hasn't yet.
   1372			 */
   1373			deltatime = jiffies_to_msecs(jiffies) - currtime;
   1374			currtime += deltatime;
   1375
   1376			/*
   1377			 * Process any waiting discovery as long as the chip is
   1378			 * up.  If a chip reset happens during initial polling,
   1379			 * we have to make sure the timer tick processes the
   1380			 * doorbell indicating the firmware is ready.
   1381			 */
   1382			if (!test_bit(AF_CHPRST_PENDING, &a->flags))
   1383				esas2r_disc_check_for_work(a);
   1384
   1385			/* Simulate a timer tick. */
   1386			if (nexttick <= deltatime) {
   1387
   1388				/* Time for a timer tick */
   1389				nexttick += 100;
   1390				esas2r_timer_tick(a);
   1391			}
   1392
   1393			if (nexttick > deltatime)
   1394				nexttick -= deltatime;
   1395
   1396			/* Do any deferred processing */
   1397			if (esas2r_is_tasklet_pending(a))
   1398				esas2r_do_tasklet_tasks(a);
   1399
   1400		}
   1401
   1402		if (test_bit(AF_FIRST_INIT, &a->flags))
   1403			atomic_inc(&a->disable_cnt);
   1404
   1405		clear_bit(AF_DISC_POLLED, &a->flags);
   1406		clear_bit(AF_TASKLET_SCHEDULED, &a->flags);
   1407	}
   1408
   1409
   1410	esas2r_targ_db_report_changes(a);
   1411
   1412	/*
   1413	 * For cases where (a) the initialization messages processing may
   1414	 * handle an interrupt for a port event and a discovery is waiting, but
   1415	 * we are not waiting for devices, or (b) the device wait time has been
   1416	 * exhausted but there is still discovery pending, start any leftover
   1417	 * discovery in interrupt driven mode.
   1418	 */
   1419	esas2r_disc_start_waiting(a);
   1420
   1421	/* Enable chip interrupts */
   1422	a->int_mask = ESAS2R_INT_STS_MASK;
   1423	esas2r_enable_chip_interrupts(a);
   1424	esas2r_enable_heartbeat(a);
   1425	rslt = true;
   1426
   1427exit:
   1428	/*
   1429	 * Regardless of whether initialization was successful, certain things
   1430	 * need to get done before we exit.
   1431	 */
   1432
   1433	if (test_bit(AF_CHPRST_DETECTED, &a->flags) &&
   1434	    test_bit(AF_FIRST_INIT, &a->flags)) {
   1435		/*
   1436		 * Reinitialization was performed during the first
   1437		 * initialization.  Only clear the chip reset flag so the
   1438		 * original device polling is not cancelled.
   1439		 */
   1440		if (!rslt)
   1441			clear_bit(AF_CHPRST_PENDING, &a->flags);
   1442	} else {
   1443		/* First initialization or a subsequent re-init is complete. */
   1444		if (!rslt) {
   1445			clear_bit(AF_CHPRST_PENDING, &a->flags);
   1446			clear_bit(AF_DISC_PENDING, &a->flags);
   1447		}
   1448
   1449
   1450		/* Enable deferred processing after the first initialization. */
   1451		if (test_bit(AF_FIRST_INIT, &a->flags)) {
   1452			clear_bit(AF_FIRST_INIT, &a->flags);
   1453
   1454			if (atomic_dec_return(&a->disable_cnt) == 0)
   1455				esas2r_do_deferred_processes(a);
   1456		}
   1457	}
   1458
   1459	return rslt;
   1460}
   1461
   1462void esas2r_reset_adapter(struct esas2r_adapter *a)
   1463{
   1464	set_bit(AF_OS_RESET, &a->flags);
   1465	esas2r_local_reset_adapter(a);
   1466	esas2r_schedule_tasklet(a);
   1467}
   1468
   1469void esas2r_reset_chip(struct esas2r_adapter *a)
   1470{
   1471	if (!esas2r_is_adapter_present(a))
   1472		return;
   1473
   1474	/*
   1475	 * Before we reset the chip, save off the VDA core dump.  The VDA core
   1476	 * dump is located in the upper 512KB of the onchip SRAM.  Make sure
   1477	 * to not overwrite a previous crash that was saved.
   1478	 */
   1479	if (test_bit(AF2_COREDUMP_AVAIL, &a->flags2) &&
   1480	    !test_bit(AF2_COREDUMP_SAVED, &a->flags2)) {
   1481		esas2r_read_mem_block(a,
   1482				      a->fw_coredump_buff,
   1483				      MW_DATA_ADDR_SRAM + 0x80000,
   1484				      ESAS2R_FWCOREDUMP_SZ);
   1485
   1486		set_bit(AF2_COREDUMP_SAVED, &a->flags2);
   1487	}
   1488
   1489	clear_bit(AF2_COREDUMP_AVAIL, &a->flags2);
   1490
   1491	/* Reset the chip */
   1492	if (a->pcid->revision == MVR_FREY_B2)
   1493		esas2r_write_register_dword(a, MU_CTL_STATUS_IN_B2,
   1494					    MU_CTL_IN_FULL_RST2);
   1495	else
   1496		esas2r_write_register_dword(a, MU_CTL_STATUS_IN,
   1497					    MU_CTL_IN_FULL_RST);
   1498
   1499
   1500	/* Stall a little while to let the reset condition clear */
   1501	mdelay(10);
   1502}
   1503
   1504static void esas2r_power_down_notify_firmware(struct esas2r_adapter *a)
   1505{
   1506	u32 starttime;
   1507	u32 doorbell;
   1508
   1509	esas2r_write_register_dword(a, MU_DOORBELL_IN, DRBL_POWER_DOWN);
   1510	starttime = jiffies_to_msecs(jiffies);
   1511
   1512	while (true) {
   1513		doorbell = esas2r_read_register_dword(a, MU_DOORBELL_OUT);
   1514		if (doorbell & DRBL_POWER_DOWN) {
   1515			esas2r_write_register_dword(a, MU_DOORBELL_OUT,
   1516						    doorbell);
   1517			break;
   1518		}
   1519
   1520		schedule_timeout_interruptible(msecs_to_jiffies(100));
   1521
   1522		if ((jiffies_to_msecs(jiffies) - starttime) > 30000) {
   1523			esas2r_hdebug("Timeout waiting for power down");
   1524			break;
   1525		}
   1526	}
   1527}
   1528
   1529/*
   1530 * Perform power management processing including managing device states, adapter
   1531 * states, interrupts, and I/O.
   1532 */
   1533void esas2r_power_down(struct esas2r_adapter *a)
   1534{
   1535	set_bit(AF_POWER_MGT, &a->flags);
   1536	set_bit(AF_POWER_DOWN, &a->flags);
   1537
   1538	if (!test_bit(AF_DEGRADED_MODE, &a->flags)) {
   1539		u32 starttime;
   1540		u32 doorbell;
   1541
   1542		/*
   1543		 * We are currently running OK and will be reinitializing later.
   1544		 * increment the disable count to coordinate with
   1545		 * esas2r_init_adapter.  We don't have to do this in degraded
   1546		 * mode since we never enabled interrupts in the first place.
   1547		 */
   1548		esas2r_disable_chip_interrupts(a);
   1549		esas2r_disable_heartbeat(a);
   1550
   1551		/* wait for any VDA activity to clear before continuing */
   1552		esas2r_write_register_dword(a, MU_DOORBELL_IN,
   1553					    DRBL_MSG_IFC_DOWN);
   1554		starttime = jiffies_to_msecs(jiffies);
   1555
   1556		while (true) {
   1557			doorbell =
   1558				esas2r_read_register_dword(a, MU_DOORBELL_OUT);
   1559			if (doorbell & DRBL_MSG_IFC_DOWN) {
   1560				esas2r_write_register_dword(a, MU_DOORBELL_OUT,
   1561							    doorbell);
   1562				break;
   1563			}
   1564
   1565			schedule_timeout_interruptible(msecs_to_jiffies(100));
   1566
   1567			if ((jiffies_to_msecs(jiffies) - starttime) > 3000) {
   1568				esas2r_hdebug(
   1569					"timeout waiting for interface down");
   1570				break;
   1571			}
   1572		}
   1573
   1574		/*
   1575		 * For versions of firmware that support it tell them the driver
   1576		 * is powering down.
   1577		 */
   1578		if (test_bit(AF2_VDA_POWER_DOWN, &a->flags2))
   1579			esas2r_power_down_notify_firmware(a);
   1580	}
   1581
   1582	/* Suspend I/O processing. */
   1583	set_bit(AF_OS_RESET, &a->flags);
   1584	set_bit(AF_DISC_PENDING, &a->flags);
   1585	set_bit(AF_CHPRST_PENDING, &a->flags);
   1586
   1587	esas2r_process_adapter_reset(a);
   1588
   1589	/* Remove devices now that I/O is cleaned up. */
   1590	a->prev_dev_cnt = esas2r_targ_db_get_tgt_cnt(a);
   1591	esas2r_targ_db_remove_all(a, false);
   1592}
   1593
   1594/*
   1595 * Perform power management processing including managing device states, adapter
   1596 * states, interrupts, and I/O.
   1597 */
   1598bool esas2r_power_up(struct esas2r_adapter *a, bool init_poll)
   1599{
   1600	bool ret;
   1601
   1602	clear_bit(AF_POWER_DOWN, &a->flags);
   1603	esas2r_init_pci_cfg_space(a);
   1604	set_bit(AF_FIRST_INIT, &a->flags);
   1605	atomic_inc(&a->disable_cnt);
   1606
   1607	/* reinitialize the adapter */
   1608	ret = esas2r_check_adapter(a);
   1609	if (!esas2r_init_adapter_hw(a, init_poll))
   1610		ret = false;
   1611
   1612	/* send the reset asynchronous event */
   1613	esas2r_send_reset_ae(a, true);
   1614
   1615	/* clear this flag after initialization. */
   1616	clear_bit(AF_POWER_MGT, &a->flags);
   1617	return ret;
   1618}
   1619
   1620bool esas2r_is_adapter_present(struct esas2r_adapter *a)
   1621{
   1622	if (test_bit(AF_NOT_PRESENT, &a->flags))
   1623		return false;
   1624
   1625	if (esas2r_read_register_dword(a, MU_DOORBELL_OUT) == 0xFFFFFFFF) {
   1626		set_bit(AF_NOT_PRESENT, &a->flags);
   1627
   1628		return false;
   1629	}
   1630	return true;
   1631}
   1632
   1633const char *esas2r_get_model_name(struct esas2r_adapter *a)
   1634{
   1635	switch (a->pcid->subsystem_device) {
   1636	case ATTO_ESAS_R680:
   1637		return "ATTO ExpressSAS R680";
   1638
   1639	case ATTO_ESAS_R608:
   1640		return "ATTO ExpressSAS R608";
   1641
   1642	case ATTO_ESAS_R60F:
   1643		return "ATTO ExpressSAS R60F";
   1644
   1645	case ATTO_ESAS_R6F0:
   1646		return "ATTO ExpressSAS R6F0";
   1647
   1648	case ATTO_ESAS_R644:
   1649		return "ATTO ExpressSAS R644";
   1650
   1651	case ATTO_ESAS_R648:
   1652		return "ATTO ExpressSAS R648";
   1653
   1654	case ATTO_TSSC_3808:
   1655		return "ATTO ThunderStream SC 3808D";
   1656
   1657	case ATTO_TSSC_3808E:
   1658		return "ATTO ThunderStream SC 3808E";
   1659
   1660	case ATTO_TLSH_1068:
   1661		return "ATTO ThunderLink SH 1068";
   1662	}
   1663
   1664	return "ATTO SAS Controller";
   1665}
   1666
   1667const char *esas2r_get_model_name_short(struct esas2r_adapter *a)
   1668{
   1669	switch (a->pcid->subsystem_device) {
   1670	case ATTO_ESAS_R680:
   1671		return "R680";
   1672
   1673	case ATTO_ESAS_R608:
   1674		return "R608";
   1675
   1676	case ATTO_ESAS_R60F:
   1677		return "R60F";
   1678
   1679	case ATTO_ESAS_R6F0:
   1680		return "R6F0";
   1681
   1682	case ATTO_ESAS_R644:
   1683		return "R644";
   1684
   1685	case ATTO_ESAS_R648:
   1686		return "R648";
   1687
   1688	case ATTO_TSSC_3808:
   1689		return "SC 3808D";
   1690
   1691	case ATTO_TSSC_3808E:
   1692		return "SC 3808E";
   1693
   1694	case ATTO_TLSH_1068:
   1695		return "SH 1068";
   1696	}
   1697
   1698	return "unknown";
   1699}