From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=156.151.31.85; helo=userp2120.oracle.com; envelope-from=nikita.leshchenko@oracle.com; receiver=edk2-devel@lists.01.org Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id AFB8221CAD998 for ; Thu, 31 Jan 2019 02:08:16 -0800 (PST) Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id x0VA4ix3172506 for ; Thu, 31 Jan 2019 10:08:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2018-07-02; bh=DoiCn+k8srF6Ak2cNNdh97RyVxJ9gCQqExpJTkNPMuQ=; b=KQh2ZO9lm6sxFx5L6mHsYANVm/LcT0OFBlrsV+rc3SftdsYS07RfHEQOJjIWu1Tq1aMj J6sdgcGaqKmW81G0/UA4rYGKwtBWuEVv5m2ewhfD9UHPh+ivjo89O03p0zUtohKoxjJw OzU93eZblfgmvuBqGmTnZ87dWdtWaP4/wTVtxhC/7aYWB9Kpgg2cIyn759VDCjGufIar HlZ9xmGI/TPiTitTsw3GLjsqmgiwvob7RHR139Tcz5JIXgxWRxIr37oT3I+9dXoL6Ccz QE5PncSYo69U4uLD7NDlg4pW1U6+NIIl7V3oCL0QJUrBme3qZJfq3YtptT+m0l8//HL3 uA== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp2120.oracle.com with ESMTP id 2q8g6rfjtc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 31 Jan 2019 10:08:15 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id x0VA8FYP004900 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 31 Jan 2019 10:08:15 GMT Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id x0VA8FRn002738 for ; Thu, 31 Jan 2019 10:08:15 GMT Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 31 Jan 2019 02:08:14 -0800 From: Nikita Leshenko To: edk2-devel@lists.01.org Cc: liran.alon@oracle.com, Nikita Leshenko Date: Thu, 31 Jan 2019 12:07:20 +0200 Message-Id: <20190131100724.20907-11-nikita.leshchenko@oracle.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190131100724.20907-1-nikita.leshchenko@oracle.com> References: <20190131100724.20907-1-nikita.leshchenko@oracle.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9152 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=839 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901310080 Subject: [PATCH 10/14] OvmfPkg/MptScsiDxe: Set and restore PCI attributes X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 31 Jan 2019 10:08:16 -0000 Content-Transfer-Encoding: 8bit Enable the IO Space and Bus Mastering and restore the original values when the device is stopped. This is a standard procedure in PCI drivers. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Nikita Leshenko Reviewed-by: Konrad Rzeszutek Wilk Reviewed-by: Aaron Young Reviewed-by: Liran Alon --- OvmfPkg/MptScsiDxe/MptScsi.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 29816fb98c..92c190499e 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -43,6 +43,7 @@ typedef struct { EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; } MPT_SCSI_DEV; #define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ @@ -269,6 +270,7 @@ MptScsiControllerStart ( EFI_STATUS Status; EFI_PHYSICAL_ADDRESS PhysicalAddress; MPT_SCSI_DEV *Dev; + BOOLEAN PciAttributesChanged = FALSE; DEBUG ((EFI_D_INFO, "Starting MptScsi\n")); @@ -307,6 +309,25 @@ MptScsiControllerStart ( goto Done; } + Status = Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationGet, 0, + &Dev->OriginalPciAttributes); + if (EFI_ERROR (Status)) { + goto Done; + } + + // Enable I/O Space & Bus-Mastering + Status = Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_IO_ATTRIBUTE_IO | EFI_PCI_IO_ATTRIBUTE_BUS_MASTER, + NULL); + if (EFI_ERROR (Status)) { + goto Done; + } + PciAttributesChanged = TRUE; + Dev->PassThruMode.AdapterId = MAX_UINT32; // Host adapter channel, doesn't exist Dev->PassThruMode.Attributes = EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL @@ -332,6 +353,13 @@ MptScsiControllerStart ( DEBUG ((EFI_D_INFO, "MptScsi Installed\n")); Done: if (EFI_ERROR (Status)) { + if (PciAttributesChanged) { + Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationEnable, + Dev->OriginalPciAttributes, + NULL); + } if (Dev->PciIo) { gBS->CloseProtocol ( ControllerHandle, @@ -378,6 +406,13 @@ MptScsiControllerStop ( ControllerHandle, &gEfiExtScsiPassThruProtocolGuid, &Dev->PassThru); + + Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationEnable, + Dev->OriginalPciAttributes, + NULL); + gBS->CloseProtocol ( ControllerHandle, &gEfiPciIoProtocolGuid, -- 2.20.1