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.g...@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, > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot