[U-Boot] [PATCH] net: usb: r8152: Add DM support
Simon Glass
sjg at chromium.org
Tue Jun 28 20:43:28 CEST 2016
Hi Stefan,
On 28 June 2016 at 08:28, Stefan Roese <sr at denx.de> wrote:
> Hi Simon,
>
> On 26.06.2016 04:53, Simon Glass wrote:
>> On 22 June 2016 at 01:18, Stefan Roese <sr at denx.de> wrote:
>>> Add support for driver model, so that CONFIG_DM_ETH can be defined and
>>> used with this driver.
>>>
>>> This patch also adds the read_rom_hwaddr() callback so that the ROM MAC
>>> address will be used to the DM part of this driver.
>>>
>>> Signed-off-by: Stefan Roese <sr at denx.de>
>>> Cc: Stephen Warren <swarren at nvidia.com>
>>> Cc: Ted Chen <tedchen at realtek.com>
>>> Cc: Simon Glass <sjg at chromium.org>
>>> Cc: Joe Hershberger <joe.hershberger at ni.com>
>>> ---
>>> drivers/usb/eth/r8152.c | 235 ++++++++++++++++++++++++++++++++++++++++-----
>>> drivers/usb/eth/r8152.h | 4 +
>>> drivers/usb/eth/r8152_fw.c | 2 +
>>> 3 files changed, 219 insertions(+), 22 deletions(-)
>>
>> Reviewed-by: Simon Glass <sjg at chromium.org>
>>
>> With a few comments below.
[snip]
>>> +int r8152_eth_recv(struct udevice *dev, int flags, uchar **packetp)
>>> +{
>>> + struct r8152 *tp = dev_get_priv(dev);
>>> + struct ueth_data *ueth = &tp->ueth;
>>> + uint8_t *ptr;
>>> + int ret, len;
>>> + struct rx_desc *rx_desc;
>>> + u16 packet_len;
>>> +
>>> + len = usb_ether_get_rx_bytes(ueth, &ptr);
>>> + debug("%s: first try, len=%d\n", __func__, len);
>>> + if (!len) {
>>> + if (!(flags & ETH_RECV_CHECK_DEVICE))
>>> + return -EAGAIN;
>>> + ret = usb_ether_receive(ueth, RTL8152_AGG_BUF_SZ);
>>> + if (ret == -EAGAIN)
>>> + return ret;
>>
>> What about if ret returns some other error?
>
> Good catch. Will fix in v2.
>
> BTW: I've cloned this part from other drivers (e.g. smsc95xx.c
> and asix.c). So they would need some additional error handling here
> as well.
OK
>
>>> +
>>> + len = usb_ether_get_rx_bytes(ueth, &ptr);
>>> + debug("%s: second try, len=%d\n", __func__, len);
>>> + }
>>> +
>>> + rx_desc = (struct rx_desc *)ptr;
>>> + packet_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK;
>>> + packet_len -= CRC_SIZE;
>>> +
>>> + if (packet_len > len - (sizeof(struct rx_desc) + CRC_SIZE)) {
>>> + debug("Rx: too large packet: %d\n", packet_len);
>>> + goto err;
>>> + }
>>> +
>>> + *packetp = ptr + sizeof(struct rx_desc);
>>> + return packet_len;
>>> +
>>> +err:
>>> + usb_ether_advance_rxbuf(ueth, -1);
>>> + return -EINVAL;
>>
>> -E2BIG?
>
> Hmmm. This does not seem appropriate here:
>
> #define E2BIG 7 /* Argument list too long */
>
> Or is it commonly used also for non argument list return failure?
Not sure...:-)
I was probably thinking of -ENOSPC.
[snip]
Regards,
Simon
More information about the U-Boot
mailing list