[U-Boot] [PATCH 1/2] net: move ether_crc to tsec driver

Simon Goldschmidt simon.k.r.goldschmidt at gmail.com
Mon Nov 26 08:12:39 UTC 2018


On Mon, Nov 26, 2018 at 9:00 AM Chris Packham <judge.packham at gmail.com> wrote:
>
> ether_crc was added to the core net code in commit 53a5c424bf86
> ("multicast tftp: RFC2090") so that other drivers could use it. However
> the only current user of it is tsec.c so move it there.
>
> Signed-off-by: Chris Packham <judge.packham at gmail.com>
> ---
>
>  drivers/net/tsec.c | 25 +++++++++++++++++++++++++
>  include/net.h      |  1 -
>  net/eth_legacy.c   | 24 ------------------------
>  3 files changed, 25 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
> index 03a46da2f8a1..9a4fab85e928 100644
> --- a/drivers/net/tsec.c
> +++ b/drivers/net/tsec.c
> @@ -80,6 +80,31 @@ static void tsec_configure_serdes(struct tsec_private *priv)
>
>  #ifdef CONFIG_MCAST_TFTP
>
> +/* the 'way' for ethernet-CRC-32. Spliced in from Linux lib/crc32.c
> + * and this is the ethernet-crc method needed for TSEC -- and perhaps
> + * some other adapter -- hash tables
> + */
> +#define CRCPOLY_LE 0xedb88320
> +static u32 ether_crc(size_t len, unsigned char const *p)

I haven't checked, but can't we use lib/crc32.c for this? The
polynomial is the same...

> +{
> +       int i;
> +       u32 crc;
> +
> +       crc = ~0;
> +       while (len--) {
> +               crc ^= *p++;
> +               for (i = 0; i < 8; i++)
> +                       crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
> +       }
> +       /* an reverse the bits, cuz of way they arrive -- last-first */
> +       crc = (crc >> 16) | (crc << 16);
> +       crc = (crc >> 8 & 0x00ff00ff) | (crc << 8 & 0xff00ff00);
> +       crc = (crc >> 4 & 0x0f0f0f0f) | (crc << 4 & 0xf0f0f0f0);
> +       crc = (crc >> 2 & 0x33333333) | (crc << 2 & 0xcccccccc);
> +       crc = (crc >> 1 & 0x55555555) | (crc << 1 & 0xaaaaaaaa);

Does lib/bitrev.c do this job?

Regards,
Simon

> +       return crc;
> +}
> +
>  /* CREDITS: linux gianfar driver, slightly adjusted... thanx. */
>
>  /* Set the appropriate hash bit for the given addr */
> diff --git a/include/net.h b/include/net.h
> index 51c099dae2e5..359bfb5ef69f 100644
> --- a/include/net.h
> +++ b/include/net.h
> @@ -289,7 +289,6 @@ const char *eth_get_name(void);             /* get name of current device */
>
>  #ifdef CONFIG_MCAST_TFTP
>  int eth_mcast_join(struct in_addr mcast_addr, int join);
> -u32 ether_crc(size_t len, unsigned char const *p);
>  #endif
>
>
> diff --git a/net/eth_legacy.c b/net/eth_legacy.c
> index 2a9caa3509b0..d2e16b8fa3da 100644
> --- a/net/eth_legacy.c
> +++ b/net/eth_legacy.c
> @@ -310,30 +310,6 @@ int eth_mcast_join(struct in_addr mcast_ip, int join)
>         return eth_current->mcast(eth_current, mcast_mac, join);
>  }
>
> -/* the 'way' for ethernet-CRC-32. Spliced in from Linux lib/crc32.c
> - * and this is the ethernet-crc method needed for TSEC -- and perhaps
> - * some other adapter -- hash tables
> - */
> -#define CRCPOLY_LE 0xedb88320
> -u32 ether_crc(size_t len, unsigned char const *p)
> -{
> -       int i;
> -       u32 crc;
> -       crc = ~0;
> -       while (len--) {
> -               crc ^= *p++;
> -               for (i = 0; i < 8; i++)
> -                       crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
> -       }
> -       /* an reverse the bits, cuz of way they arrive -- last-first */
> -       crc = (crc >> 16) | (crc << 16);
> -       crc = (crc >> 8 & 0x00ff00ff) | (crc << 8 & 0xff00ff00);
> -       crc = (crc >> 4 & 0x0f0f0f0f) | (crc << 4 & 0xf0f0f0f0);
> -       crc = (crc >> 2 & 0x33333333) | (crc << 2 & 0xcccccccc);
> -       crc = (crc >> 1 & 0x55555555) | (crc << 1 & 0xaaaaaaaa);
> -       return crc;
> -}
> -
>  #endif
>
>
> --
> 2.19.2
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot


More information about the U-Boot mailing list