Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4960291imu; Wed, 19 Dec 2018 03:18:50 -0800 (PST) X-Google-Smtp-Source: AFSGD/X2xSRAjXi+EFD1EEw8IylITvdmBLBk/1endVQ2sBXlRhumdcuQCxcaeJQwQrRH86xYWli/ X-Received: by 2002:a62:2a4b:: with SMTP id q72mr19829652pfq.61.1545218330515; Wed, 19 Dec 2018 03:18:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545218330; cv=none; d=google.com; s=arc-20160816; b=YQcdPZ4JznLHYL48R2h5LiMrgpR9oN6f5Ik9nj1TCuoJiLYmCKEkyVT9Qrw2R2TkOe otQDW+0uKljZqqiLIswSegjrVl2156eXvDwj5/8nD//yZU6/pLMFvMM7bo7KigLCgNKh ykn6Fa6z2RfuTjBIOsPQKjINxciYnSOgH7FlEd/Jyea0gWcdk8NBO1zlwcsADbBogf83 Q0HRbjJ9WVm6QTezxwQwt7A6hOFTifH/fNTg98pVz/JhWQyqRLl3/u7gLklRNtLSnc3h S2GsPoS+E4shbxMxt1bs60sISuJc+Zfz+CPblehaBxL7oxWkI3fu5RvA5+gccjcdkkHi NJyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:cc:to:from:subject:dkim-signature; bh=ddJJKRBZKFVE0EAC9YSD6keBJ7y9nWFWSn8IjUTuVvY=; b=NMKwPRemuTXKEZ588tXcFcDcj1ioQ3ZU5iN+teE5XonD/ULlj39f1sL7wjwYNtfZbh 6zm2sHZKcLI2sCoJE/B+4/scalvEEk3kP7la79NURV+axtJORcNkLP447QPcJhpQJL8J YupHq+amk0wiu0zDU6CoIxeyjjTwdMH8m6cxFn+6Hy/6DpBmy7DMDERV4Tr+OfyAk800 EG6GvJekFhrCctKk5j/SQNs5z5Q9LfHO37Z7wdH8w0fHzZz+c3b9LoRQpNZTZK4mKD8O 8ln5vlj8xSIkPG6T263kIjSvzoxy6pkZKJukpnCqbvUPfecl7PfAC5+g1l2Z3Wc64jv+ emEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@areca-com-tw.20150623.gappssmtp.com header.s=20150623 header.b=EWg6ueg6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u8si9625930plh.385.2018.12.19.03.18.34; Wed, 19 Dec 2018 03:18:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@areca-com-tw.20150623.gappssmtp.com header.s=20150623 header.b=EWg6ueg6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727952AbeLSInU (ORCPT + 99 others); Wed, 19 Dec 2018 03:43:20 -0500 Received: from mail-it1-f196.google.com ([209.85.166.196]:54018 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726631AbeLSInT (ORCPT ); Wed, 19 Dec 2018 03:43:19 -0500 Received: by mail-it1-f196.google.com with SMTP id g85so8487684ita.3 for ; Wed, 19 Dec 2018 00:43:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=areca-com-tw.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:date:message-id:mime-version :content-transfer-encoding; bh=ddJJKRBZKFVE0EAC9YSD6keBJ7y9nWFWSn8IjUTuVvY=; b=EWg6ueg6iZMTDACSnpvXdMYDELRXmuIizn4k+d7k2cnjE97lYBwQBtBsaBi16ipCVR zaaha3Rga8Gzb3gwjIbGkkSwc9lUhZJxnDe0A7NB7uEnZKHrPsGBMMHyuX7o76Q28K4t pkSuUMyhxlDsMLbHQEZSr+0D7I+7DLuAcpJ0N/YPEKd6zhamNGk+CrYXfi+62GAZDQLb o72WPA0SmDA0gWT8LG+vW9avrpNYEeAri+hGdqhdevVZp4iqrpz4fDESR9jxJn1fBE6z u6UlKBgOPtBjUu7UgAHrGHSCAV/V9FYalpxLO/BKBQ3mlxsmX4xWPXiZMEIbcViCgT09 FG5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:mime-version :content-transfer-encoding; bh=ddJJKRBZKFVE0EAC9YSD6keBJ7y9nWFWSn8IjUTuVvY=; b=gpQ0Nkbn9kvWF5G4d9YrVpYo/Hmb13vdKNgy5qcTLTDAPkVwXl7o1VZc19WSQL+AoX C1ZSya5jMY2K4Vy8IoK6fJnV3easBW2f+o4KzUDpYh2QdLQ3j3R9NTCI0ozz27MethcN +dUEYw+2UMdgcQis0WM5C5AFVxNymgLTXhi87Dz7PLMlvJQH/lMoLyEsbpra9HHqQPB0 22vX4ipenbHFsdPECRbOngYZR9+zJuyt0EJjQmgA8qZWgCQajW090B4GDaFxcoykRp3i MNFbIST65y8p/KdIQ28mmcIqWyomSWPm7K4bQwfgwcWyYaxpiIvqKATj/HUJLH5xgsZF /ovQ== X-Gm-Message-State: AA+aEWatkzWAlOj/nNaA4h+rjP1EgLTfU9bKrMLnJ01DqD59b3JCoCbX ZcHZTNPp+x5OpyhbC67UVjX/iw== X-Received: by 2002:a05:660c:fd2:: with SMTP id m18mr5831878itn.1.1545208998692; Wed, 19 Dec 2018 00:43:18 -0800 (PST) Received: from [192.168.0.130] (60-248-88-209.HINET-IP.hinet.net. [60.248.88.209]) by smtp.gmail.com with ESMTPSA id p19sm4245408itp.13.2018.12.19.00.43.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Dec 2018 00:43:18 -0800 (PST) Subject: [PATCH 5/12] scsi: arcmsr: Update for ACB_ADAPTER_TYPE_A that ccb address can above 4GB From: Ching Huang To: martin.petersen@oracle.com, James.Bottomley@HansenPartnership.com, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: dan.carpenter@oracle.com, hch@infradead.org, colin.king@canonical.com Content-Type: text/plain; charset="UTF-8" Date: Wed, 19 Dec 2018 16:43:15 +0800 Message-ID: <1545208995.4457.29.camel@Centos6.3-64> Mime-Version: 1.0 X-Mailer: Evolution 2.32.3 (2.32.3-37.el6) Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From Ching Huang Update for ACB_ADAPTER_TYPE_A that ccb address can above 4GB Signed-off-by: Ching Huang --- diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c index 5353dbb..2ff1c9a 100755 --- a/drivers/scsi/arcmsr/arcmsr_hba.c +++ b/drivers/scsi/arcmsr/arcmsr_hba.c @@ -1382,10 +1382,12 @@ static void arcmsr_drain_donequeue(struct AdapterControlBlock *acb, struct Comma static void arcmsr_done4abort_postqueue(struct AdapterControlBlock *acb) { int i = 0; - uint32_t flag_ccb, ccb_cdb_phy; + uint32_t flag_ccb; struct ARCMSR_CDB *pARCMSR_CDB; bool error; struct CommandControlBlock *pCCB; + unsigned long ccb_cdb_phy, cdb_phy_hipart; + switch (acb->adapter_type) { case ACB_ADAPTER_TYPE_A: { @@ -1397,7 +1399,10 @@ static void arcmsr_done4abort_postqueue(struct AdapterControlBlock *acb) writel(outbound_intstatus, ®->outbound_intstatus);/*clear interrupt*/ while(((flag_ccb = readl(®->outbound_queueport)) != 0xFFFFFFFF) && (i++ < acb->maxOutstanding)) { - pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5));/*frame must be 32 bytes aligned*/ + ccb_cdb_phy = (flag_ccb << 5) & 0xffffffff; + if (acb->cdb_phyadd_hipart) + ccb_cdb_phy = ccb_cdb_phy | acb->cdb_phyadd_hipart; + pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset + ccb_cdb_phy); pCCB = container_of(pARCMSR_CDB, struct CommandControlBlock, arcmsr_cdb); error = (flag_ccb & ARCMSR_CCBREPLY_FLAG_ERROR_MODE0) ? true : false; arcmsr_drain_donequeue(acb, pCCB, error); @@ -2333,8 +2338,13 @@ static void arcmsr_hbaA_postqueue_isr(struct AdapterControlBlock *acb) struct ARCMSR_CDB *pARCMSR_CDB; struct CommandControlBlock *pCCB; bool error; + unsigned long cdb_phy_addr; + while ((flag_ccb = readl(®->outbound_queueport)) != 0xFFFFFFFF) { - pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5));/*frame must be 32 bytes aligned*/ + cdb_phy_addr = (flag_ccb << 5) & 0xffffffff; + if (acb->cdb_phyadd_hipart) + cdb_phy_addr = cdb_phy_addr | acb->cdb_phyadd_hipart; + pARCMSR_CDB = (struct ARCMSR_CDB *)(acb->vir2phy_offset + cdb_phy_addr); pCCB = container_of(pARCMSR_CDB, struct CommandControlBlock, arcmsr_cdb); error = (flag_ccb & ARCMSR_CCBREPLY_FLAG_ERROR_MODE0) ? true : false; arcmsr_drain_donequeue(acb, pCCB, error); @@ -3258,7 +3268,9 @@ static int arcmsr_hbaA_polling_ccbdone(struct AdapterControlBlock *acb, uint32_t flag_ccb, outbound_intstatus, poll_ccb_done = 0, poll_count = 0; int rtn; bool error; - polling_hba_ccb_retry: + unsigned long ccb_cdb_phy; + +polling_hba_ccb_retry: poll_count++; outbound_intstatus = readl(®->outbound_intstatus) & acb->outbound_int_enable; writel(outbound_intstatus, ®->outbound_intstatus);/*clear interrupt*/ @@ -3276,7 +3288,10 @@ static int arcmsr_hbaA_polling_ccbdone(struct AdapterControlBlock *acb, goto polling_hba_ccb_retry; } } - arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + (flag_ccb << 5)); + ccb_cdb_phy = (flag_ccb << 5) & 0xffffffff; + if (acb->cdb_phyadd_hipart) + ccb_cdb_phy = ccb_cdb_phy | acb->cdb_phyadd_hipart; + arcmsr_cdb = (struct ARCMSR_CDB *)(acb->vir2phy_offset + ccb_cdb_phy); ccb = container_of(arcmsr_cdb, struct CommandControlBlock, arcmsr_cdb); poll_ccb_done |= (ccb == poll_ccb) ? 1 : 0; if ((ccb->acb != acb) || (ccb->startdone != ARCMSR_CCB_START)) {