[U-Boot] [PATCH 1/1] efi_loader: completely initialize network

Alexander Graf agraf at suse.de
Wed Apr 4 09:42:53 UTC 2018



On 03.04.18 22:06, Heinrich Schuchardt wrote:
> Add missing network initialization code.
> 
> Before the patch the network was only usable if a network command like
> dhcp or tftp had beed executed.
> 
> This was visible when interrupting the console countdown and executing
> bootefi selftest for vexpress_ca15_tc2_defconfig.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
>  lib/efi_loader/efi_net.c | 36 ++++++++++++++++++++++++++++++++++--
>  1 file changed, 34 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/efi_loader/efi_net.c b/lib/efi_loader/efi_net.c
> index 3d860e658e..9afe76cdb3 100644
> --- a/lib/efi_loader/efi_net.c
> +++ b/lib/efi_loader/efi_net.c
> @@ -54,14 +54,46 @@ static efi_status_t EFIAPI efi_net_stop(struct efi_simple_network *this)
>  	return EFI_EXIT(EFI_SUCCESS);
>  }
>  
> +/*
> + * Initialize network adapter and allocate transmit and receive buffers.
> + *
> + * This function implements the Initialize service of the
> + * EFI_SIMPLE_NETWORK_PROTOCOL. See the Unified Extensible Firmware Interface
> + * (UEFI) specification for details.
> + *
> + * @this:	pointer to the protocol instance
> + * @extra_rx:	extra receive buffer to be allocated
> + * @extra_tx:	extra transmit buffer to be allocated
> + * @return:	status code
> + */
>  static efi_status_t EFIAPI efi_net_initialize(struct efi_simple_network *this,
>  					      ulong extra_rx, ulong extra_tx)
>  {
> +	int ret;
> +	efi_status_t r = EFI_SUCCESS;
> +
>  	EFI_ENTRY("%p, %lx, %lx", this, extra_rx, extra_tx);
>  
> -	eth_init();
> +	if (!this) {
> +		r = EFI_INVALID_PARAMETER;
> +		goto error;
> +	}
>  
> -	return EFI_EXIT(EFI_SUCCESS);
> +	/* Setup packet buffers */
> +	net_init();
> +	/* Disable hardware and put it into the reset state */
> +	eth_halt();
> +	/* Set current device according to environment variables */
> +	eth_set_current();

Is there any way to do the above dance only when needed? Some network
adapters can take quite a while to initialize and I'd prefer to not go
through that when not absolutely necessary.


Alex

> +	/* Get hardware ready for send and receive operations */
> +	ret = eth_init();
> +	if (ret < 0) {
> +		eth_halt();
> +		r = EFI_DEVICE_ERROR;
> +	}
> +
> +error:
> +	return EFI_EXIT(r);
>  }
>  
>  static efi_status_t EFIAPI efi_net_reset(struct efi_simple_network *this,
> 


More information about the U-Boot mailing list