Avnu / OpenAvnu

OpenAvnu - an Avnu sponsored repository for Time Sensitive Network (TSN and AVB) technology
468 stars 289 forks source link

OpenAVNU Stack Integration with TI CPSW Driver #866

Open pm93 opened 5 years ago

pm93 commented 5 years ago

Hello,

I am trying to use OpenAVNU stack on TI Jacinto6 Plus (DRA7xx) board. I am trying to use the TI Board Ethernet(CPSW) as an AVB switch, instead of Intel I210. Since, I am not using Intel I210, the igb driver will not work for me. I need to integrate TI CPTS driver with the existing OpenAVNU stack.

Is there any existing AvNU stack available with CPTS integrated? If not, what changes do we need to make in the stack for integrating with CPTS?

Thanks, Mandar

pinealservo commented 5 years ago

Hi @pm93,

I developed an AVB stack for QNX based around CPSW on an earlier Jacinto part a number of years ago, so I know this should be do-able in principle at least.

Last I checked (a long time ago, and things might have changed), the Linux upstream driver for the CPSW-based ethernet just puts it in dual-mac mode rather than full switch mode. Depending on how the drivers look now and what your ultimate goal is, you may need to either modify that driver or make a new one that manages CPSW as a switch instead of a pair of MACs.

At least with the version of CPSW I was using, it had a built-in credit-based shaper. There's some code in the repository here (OpenAvnu/daemons/shaper) to manage the traffic shaping subsystem based on stream reservations, but it's currently set up to use software-based shaping in the kernel with algorithms that aren't quite the same as the specified shaper. There should now be a shaper in the kernel that can either do proper credit-based shaping in software or hand it off to hardware; look for it in the traffic shaping subsystem and figure out how to hook it up to CPSW drivers; setting the shaper was just writing a register or two when everything else was set up in the right modes..

Depending on the current state of the drivers and whether you intend to just do the minimum work to get something functional or make something upstream-able, this could be a few lines of code in the right places or a gigantic project. Most of your time will probably be spent reading code and manuals to figure out how things are currently working and where the appropriate place to place changes will be. Hopefully this provides a bit of a head start on it, but I can't be of much more help beyond this.

Good luck!