efi_driver: don't bind internal block devices
UEFI block devices can either mirror U-Boot's internal devices or be
provided by an EFI application like iPXE.
When ConnectController() is invoked for the EFI_BLOCK_IO_PROTOCOL
interface for such an application provided device we create a virtual
U-Boot block device of type "efi_blk".
Currently we do not call ConnectController() when handles for U-Boot's
internal block devices are created. If an EFI application calls
ConnectController() for a handle relating to an internal block device,
we erroneously create an extra "efi_blk" block device.
E.g. the UEFI shell has a command 'connect -r' which calls
ConnectController() for all handles with device path protocol.
In the Supported() method of our EFI_DRIVER_BINDING_PROTOCOL return
EFI_UNSUPPORTED when dealing with an U-Boot internal device.
Reported-by: Etienne Carriere <etienne.carriere@linaro.org>
Fixes: commit 05ef48a248
("efi_driver: EFI block driver")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org>
Tested-by: Etienne Carriere <etienne.carriere@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
7932548939
commit
8cf8ad3533
@ -71,6 +71,15 @@ static efi_status_t EFIAPI efi_uc_supported(
|
||||
EFI_ENTRY("%p, %p, %ls", this, controller_handle,
|
||||
efi_dp_str(remaining_device_path));
|
||||
|
||||
/*
|
||||
* U-Boot internal devices install protocols interfaces without calling
|
||||
* ConnectController(). Hence we should not bind an extra driver.
|
||||
*/
|
||||
if (controller_handle->dev) {
|
||||
ret = EFI_UNSUPPORTED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = EFI_CALL(systab.boottime->open_protocol(
|
||||
controller_handle, bp->ops->protocol,
|
||||
&interface, this->driver_binding_handle,
|
||||
|
Loading…
Reference in New Issue
Block a user