[U-Boot] [RFC PATCH v4 0/23] Add Driver Model support to network stack

Joe Hershberger joe.hershberger at gmail.com
Sun Mar 1 23:12:04 CET 2015


On Sun, Mar 1, 2015 at 10:13 AM, Simon Glass <sjg at chromium.org> wrote:
>
> Hi Joe,
>
> On 24 February 2015 at 17:02, Joe Hershberger <joe.hershberger at ni.com>
wrote:
> > Add support for the Ethernet MAC controllers.  Phy support will come
later.
> >
> > I am still leaving this as an RFC because I plan to add real board
support
> > before committing to mainline. When it is acceptable / accepted, I will
push it
> > as a dev branch on the net repo until a real device is supported. If any
> > required changes are discovered in the process of supporting a real
device I
> > will send those as a patch against the dev branch, but then squash
before
> > sending the non-RFC version. I plan to rebase when the merge window
opens
> > anyway.
> >
> > If desired, let me know which of the non-DM related prerequisite
patches are
> > wanted for this release.
> >
> > I've added unit tests to verify functionality.
> >
> > There is an additional driver for sandbox that bridges to the RAW
> > Ethernet API in Linux which lets you test with real traffic. It now
> > supports localhost as well (the 'lo' interface).
>
> I've got some comments queued up the the series so will send those
> soon (never got to it this week so am catching up!). I wanted to try
> it out on a board to see how things look. The short answer is that it
> works really nicely on sunxi. I'll send some patches that I needed,
> hopefully that doesn't duplicate any work you have done.

It's great that works on your board without much effort. Looking at those
patches I wouldn't say it duplicates much effort. It's more like your
changes are a stop-gap to my efforts, which makes me less inclined to wait
for all of the additional phy and mdio driver-model changes to be complete
before integrating the dm-eth support to mainline.

> In terms of getting this into mainline, I'd be happy to use
> u-boot-dm/next if that suits you and Tom. There are series for PCI and
> USB to sort out, and if the last merge window is any indication it's a
> real struggle to get multiple large series applied within the merge
> window when there are dependencies between them.

That makes sense to me. Since it is a next branch, we are still agreeing
that the branch will be rebased on top of the release, correct?

> Some general comments that I will put here for want of a better place:
>
> - it would be good to have the DM code in drivers/net/eth-uclass.c at
some point

I completely agree.  I moved it there probably 3 different times locally in
slightly different ways and backed it out each time.  I think it should be
a follow-on clean-up patch. It makes this initial patch series messier than
I wanted (hence I backed it out). That is the long-term goal.

> - struct eth_pdata is used by the uclass and is common to all drivers,
> but I wonder if we will find that drivers want to add their own
> private platdata? I added phy_interface but that is generic. Let's
> see.

Yeah, I think that's something that can be revisited pretty easily if the
need becomes clear.

> - I think the recv() method should change before long. The
> NetReceive() call should be made from the uclass since it is common to
> all drivers. Then the recv() method can return a packet if it finds
> one, but not submit it for processing

I agree. I never liked how it was laid out and now is a great opportunity
to change it since every driver has to be touched anyway.

> One interesting point for me is that you have taken a slightly more
> ambitious approach with the conversion by not reusing eth_device. That
> seems to have have worked out well and makes me think I could revisit
> SPI flash perhaps and do the same.

I agree that it's nicer to get rid of the extra wrapping structure.
Naturally the refactor could happen any time, but it seemed simple enough
to just do now.

> >
> > Changes in v4:
> > -New to v4
> > -Fix compile regression in !DM_ETH case
> > -New to v4
> > -New to v4
> > -New to v4
> > -New to v4
> > -New to v4
>
> If you put this in a patch, patman will remove duplicates in the cover
letter.
>
> Series-process-log: uniq
>
> You can also sort with:
>
> Series-process-log: sort, uniq

Thanks for the tip. Any reason these are not enabled by default?

> > -Redo the seq / probe implementation
> > --Don't prevent eth_initialize on driver model
> > --Use eth_initialize to probe all devices and write_hwaddr
> > --Look up MAC address in post-probe
> > --Include ethprime handling in eth_initialize
> > --If current == NULL, always check if there is a device available in
eth_get_dev
> > --Move env init call from uclass init to eth_initialize
> > --Print the alias in eth_initialize
> > -Stop handling selecting a new "current" in pre-unbind as it will now
work itself out by clearing the pointer
> > -Change -1 returns to error constants
> > -Remove bd_t *bis from dm eth_ops init function
> > -Add documentation to the structures
> > -Add a helper function for eth_uclass_priv
> > -Change puts to printf
> > -Add eth_get_ops helper
> > -Rename init() to start() in ops
> > -Rename halt() to stop() in ops
> > -Remove checks for driver==NULL
> > -Remove priv pointer in per-device priv struct (drivers already get
their own directly from DM)
> > -Cleaned up sandbox EXTRA_ENV define
> > -Moved config to Kconfig
> > -Removed checks on priv != NULL and added protection in uclass instead
> > -Use only the seq from DM to find aliases
> > -Load from ethprime on eth_initialize()
> > -Added testing for ethrotate
> > -Add ability to disable ping reply in sandbox eth driver
> > -Updated expected behavior based on changes to the NetLoop
> > -Added comments to README.sandbox
> > -Use accessors for platdata and priv
> > -Add comments to priv struct definition
> > -Move os file to arch
> > -Cleanup var definition order
> > -Moved config to Kconfig
> > -Clean up the interface to sandbox's eth-raw-os by passing priv to
raw-os
> > -Fixed the MAC address limitation (now all traffic uses MAC address
from env)
> > -New to v4
> > -Added support for the 'lo' network interface
> >
> > Changes in v3:
> > -Reorder dm test makefile
> > -Move the get_dev_by_* protos to also be !DM_ETH like the impl
> > -Correct the pre_unbind logic
> > -Correct failure chaining from bind to probe to init
> > --Fail init if not activated
> > --Fail probe if ethaddr not set
> > -Update ethaddr from env unconditionally on init
> > -Use set current to select the current device regardless of the
previous selection
> > -Allow current eth dev to be NULL
> > -Fixed blank line formatting for variable declaration
> > -Added 2 more ethaddr to sandbox
> > -Print which device in the debug write hwaddr
> > -Prevent a crash if memory is not allocated
> > -Added dm eth testing
> > -Added support for aliases
> > -Added support for ethprime
> > -Added testing for netretry
> > -Made the os raw packet support for sandbox eth build and work.
> >
> > Changes in v2:
> > -Updated comments
> > -Removed extra parentheses
> > -Changed eth_uclass_priv local var names to be uc_priv
> > -Update error codes
> > -Cause an invalid name to fail binding
> > -Rebase on top of dm/master
> > -Stop maintaining our own index and use DM seq now that it works for
our needs
> > -Move the hwaddr to platdata so that its memory is allocated at bind
when we need it
> > -Prevent device from being probed before used by a command (i.e. before
eth_init()).
> > -Change printfs to debug in sandbox driver
> > -Remove unused priv struct for sandbox driver
> > -Change printfs to debug in sandbox driver
> > -Move static data to priv
> > -Move fake hwaddr to the device tree
> > -Added the raw packet proof-of-concept patch.
> >
> > Joe Hershberger (23):
> >   test: dm: Reorder the objects to build
> >   common: Make sure arch-specific map_sysmem() is defined
> >   net: Provide a function to get the current MAC address
> >   net: Rename helper function to be more clear
> >   net: Remove unneeded "extern" in net.h
> >   net: Refactor in preparation for driver model
> >   net: Change return codes from net/eth.c to use errorno constants
> >   net: Use int instead of u8 for boolean flag
> >   net: Remove the bd* parameter from net stack functions
> >   net: Make netretry actually do something
> >   net: Access mapped physmem in net functions
> >   dm: eth: Add basic driver model support to Ethernet stack
> >   sandbox: eth: Add network support to sandbox
> >   sandbox: eth: Add ARP and PING response to sandbox driver
> >   test: dm: eth: Add tests for the eth dm implementation
> >   dm: eth: Add support for aliases
> >   dm: eth: Add support for ethprime env var
> >   test: dm: eth: Add testing for ethrotate env var
> >   sandbox: eth: Add ability to disable ping reply in sandbox eth driver
> >   test: dm: net: Add a test of the netretry behavior
> >   sandbox: eth: Add a bridge to a real network for sandbox
> >   sandbox: Enable DHCP and IP defrag
> >   sandbox: eth: Add support for using the 'lo' interface
> >
> >  arch/mips/mach-au1x00/au1x00_eth.c    |   2 +-
> >  arch/powerpc/cpu/mpc8260/ether_fcc.c  |   2 +-
> >  arch/powerpc/cpu/mpc85xx/ether_fcc.c  |   2 +-
> >  arch/powerpc/cpu/mpc8xx/scc.c         |   2 +-
> >  arch/sandbox/Kconfig                  |  12 +
> >  arch/sandbox/cpu/Makefile             |  10 +
> >  arch/sandbox/cpu/eth-raw-os.c         | 198 +++++++++++++
> >  arch/sandbox/dts/sandbox.dts          |  21 ++
> >  arch/sandbox/include/asm/eth-raw-os.h |  40 +++
> >  board/sandbox/README.sandbox          |  17 +-
> >  common/board_r.c                      |   2 +-
> >  common/cmd_bdinfo.c                   |   2 +
> >  drivers/net/Kconfig                   |  28 ++
> >  drivers/net/Makefile                  |   2 +
> >  drivers/net/netconsole.c              |   4 +-
> >  drivers/net/sandbox-raw.c             | 163 +++++++++++
> >  drivers/net/sandbox.c                 | 200 +++++++++++++
> >  include/common.h                      |   4 +-
> >  include/configs/sandbox.h             |  25 +-
> >  include/dm/uclass-id.h                |   1 +
> >  include/net.h                         | 187 ++++++++----
> >  net/eth.c                             | 521
+++++++++++++++++++++++++++++-----
> >  net/net.c                             |  17 +-
> >  net/nfs.c                             |   2 +-
> >  net/tftp.c                            |   2 +-
> >  test/dm/Makefile                      |   5 +-
> >  test/dm/eth.c                         | 129 +++++++++
> >  test/dm/test.dts                      |  20 ++
> >  28 files changed, 1466 insertions(+), 154 deletions(-)
> >  create mode 100644 arch/sandbox/cpu/eth-raw-os.c
> >  create mode 100644 arch/sandbox/include/asm/eth-raw-os.h
> >  create mode 100644 drivers/net/sandbox-raw.c
> >  create mode 100644 drivers/net/sandbox.c
> >  create mode 100644 test/dm/eth.c
> >
> > --
> > 1.7.11.5
> >
>
> Regards,
> Simon
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot


More information about the U-Boot mailing list