]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/EmmcDxe: Don't expose BlockIo interface for RPMB partition
authorFeng Tian <feng.tian@intel.com>
Wed, 29 Jun 2016 03:15:50 +0000 (11:15 +0800)
committerFeng Tian <feng.tian@intel.com>
Fri, 1 Jul 2016 06:44:51 +0000 (14:44 +0800)
This change is to avoid UEFI SCT failure as UEFI SCT has no knowledge
about how to accessing a EMMC RPMB partition.

The user needs to access RPMB partition should get access through
EFI_SD_MMC_PASS_THRU protocol with authentication key & mac.

Cc: Hao Wu <hao.a.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.c

index d3602a5000ebe5071330e0e56744b8b2b3d221da..5040882d622fe3f31e547b867e915e046ce71320 100644 (file)
@@ -443,77 +443,60 @@ InstallProtocolOnPartition (
     //\r
     // Install BlkIo/BlkIo2/Ssp for the specified partition\r
     //\r
-    Status = gBS->InstallMultipleProtocolInterfaces (\r
-                    &Partition->Handle,\r
-                    &gEfiDevicePathProtocolGuid,\r
-                    Partition->DevicePath,\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    &Partition->BlockIo,\r
-                    &gEfiBlockIo2ProtocolGuid,\r
-                    &Partition->BlockIo2,\r
-                    NULL\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Error;\r
-    }\r
-\r
     if (Partition->PartitionType != EmmcPartitionRPMB) {\r
-      Status = gBS->InstallProtocolInterface (\r
+      Status = gBS->InstallMultipleProtocolInterfaces (\r
                       &Partition->Handle,\r
+                      &gEfiDevicePathProtocolGuid,\r
+                      Partition->DevicePath,\r
+                      &gEfiBlockIoProtocolGuid,\r
+                      &Partition->BlockIo,\r
+                      &gEfiBlockIo2ProtocolGuid,\r
+                      &Partition->BlockIo2,\r
                       &gEfiEraseBlockProtocolGuid,\r
-                      EFI_NATIVE_INTERFACE,\r
-                      &Partition->EraseBlock\r
+                      &Partition->EraseBlock,\r
+                      NULL\r
                       );\r
       if (EFI_ERROR (Status)) {\r
-        gBS->UninstallMultipleProtocolInterfaces (\r
-               &Partition->Handle,\r
-               &gEfiDevicePathProtocolGuid,\r
-               Partition->DevicePath,\r
-               &gEfiBlockIoProtocolGuid,\r
-               &Partition->BlockIo,\r
-               &gEfiBlockIo2ProtocolGuid,\r
-               &Partition->BlockIo2,\r
-               NULL\r
-               );\r
         goto Error;\r
       }\r
-    }\r
 \r
-    if (((Partition->PartitionType == EmmcPartitionUserData) ||\r
-        (Partition->PartitionType == EmmcPartitionBoot1) ||\r
-        (Partition->PartitionType == EmmcPartitionBoot2)) &&\r
-        ((Device->Csd.Ccc & BIT10) != 0)) {\r
-      Status = gBS->InstallProtocolInterface (\r
-                      &Partition->Handle,\r
-                      &gEfiStorageSecurityCommandProtocolGuid,\r
-                      EFI_NATIVE_INTERFACE,\r
-                      &Partition->StorageSecurity\r
-                      );\r
-      if (EFI_ERROR (Status)) {\r
-        gBS->UninstallMultipleProtocolInterfaces (\r
-               &Partition->Handle,\r
-               &gEfiDevicePathProtocolGuid,\r
-               Partition->DevicePath,\r
-               &gEfiBlockIoProtocolGuid,\r
-               &Partition->BlockIo,\r
-               &gEfiBlockIo2ProtocolGuid,\r
-               &Partition->BlockIo2,\r
-               &gEfiEraseBlockProtocolGuid,\r
-               &Partition->EraseBlock,\r
-               NULL\r
-               );\r
-        goto Error;\r
+      if (((Partition->PartitionType == EmmcPartitionUserData) ||\r
+          (Partition->PartitionType == EmmcPartitionBoot1) ||\r
+          (Partition->PartitionType == EmmcPartitionBoot2)) &&\r
+          ((Device->Csd.Ccc & BIT10) != 0)) {\r
+        Status = gBS->InstallProtocolInterface (\r
+                        &Partition->Handle,\r
+                        &gEfiStorageSecurityCommandProtocolGuid,\r
+                        EFI_NATIVE_INTERFACE,\r
+                        &Partition->StorageSecurity\r
+                        );\r
+        if (EFI_ERROR (Status)) {\r
+          gBS->UninstallMultipleProtocolInterfaces (\r
+                 &Partition->Handle,\r
+                 &gEfiDevicePathProtocolGuid,\r
+                 Partition->DevicePath,\r
+                 &gEfiBlockIoProtocolGuid,\r
+                 &Partition->BlockIo,\r
+                 &gEfiBlockIo2ProtocolGuid,\r
+                 &Partition->BlockIo2,\r
+                 &gEfiEraseBlockProtocolGuid,\r
+                 &Partition->EraseBlock,\r
+                 NULL\r
+                 );\r
+          goto Error;\r
+        }\r
       }\r
+\r
+      gBS->OpenProtocol (\r
+             Device->Private->Controller,\r
+             &gEfiSdMmcPassThruProtocolGuid,\r
+             (VOID **) &(Device->Private->PassThru),\r
+             Device->Private->DriverBindingHandle,\r
+             Partition->Handle,\r
+             EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+             );    \r
     }\r
 \r
-    gBS->OpenProtocol (\r
-           Device->Private->Controller,\r
-           &gEfiSdMmcPassThruProtocolGuid,\r
-           (VOID **) &(Device->Private->PassThru),\r
-           Device->Private->DriverBindingHandle,\r
-           Partition->Handle,\r
-           EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-           );\r
   } else {\r
     Status = EFI_INVALID_PARAMETER;\r
   }\r
@@ -993,7 +976,6 @@ EmmcDxeDriverBindingStop (
   EFI_BLOCK_IO_PROTOCOL                  *BlockIo;\r
   EFI_BLOCK_IO2_PROTOCOL                 *BlockIo2;\r
   EFI_STORAGE_SECURITY_COMMAND_PROTOCOL  *StorageSecurity;\r
-  EFI_ERASE_BLOCK_PROTOCOL               *EraseBlock;\r
   LIST_ENTRY                             *Link;\r
   LIST_ENTRY                             *NextLink;\r
   EMMC_REQUEST                           *Request;\r
@@ -1120,6 +1102,8 @@ EmmcDxeDriverBindingStop (
                     &Partition->BlockIo,\r
                     &gEfiBlockIo2ProtocolGuid,\r
                     &Partition->BlockIo2,\r
+                    &gEfiEraseBlockProtocolGuid,\r
+                    &Partition->EraseBlock,\r
                     NULL\r
                     );\r
     if (EFI_ERROR (Status)) {\r
@@ -1135,38 +1119,6 @@ EmmcDxeDriverBindingStop (
       continue;\r
     }\r
 \r
-    //\r
-    // If Erase Block Protocol is installed, then uninstall this protocol.\r
-    //\r
-    Status = gBS->OpenProtocol (\r
-                    ChildHandleBuffer[Index],\r
-                    &gEfiEraseBlockProtocolGuid,\r
-                    (VOID **) &EraseBlock,\r
-                    This->DriverBindingHandle,\r
-                    Controller,\r
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                    );\r
-\r
-    if (!EFI_ERROR (Status)) {\r
-      Status = gBS->UninstallProtocolInterface (\r
-                      ChildHandleBuffer[Index],\r
-                      &gEfiEraseBlockProtocolGuid,\r
-                      &Partition->EraseBlock\r
-                      );\r
-      if (EFI_ERROR (Status)) {\r
-        gBS->OpenProtocol (\r
-          Controller,\r
-          &gEfiSdMmcPassThruProtocolGuid,\r
-          (VOID **) &Partition->Device->Private->PassThru,\r
-          This->DriverBindingHandle,\r
-          ChildHandleBuffer[Index],\r
-          EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-          );\r
-        AllChildrenStopped = FALSE;\r
-        continue;\r
-      }\r
-    }\r
-\r
     //\r
     // If Storage Security Command Protocol is installed, then uninstall this protocol.\r
     //\r