Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

imxrt: added write back d-cache support for Ethernet #3005

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

michallenc
Copy link
Contributor

Summary

Added correct d-cache cleaning and invalidation to imxrt Ethernet driver for write back support. This seems to be working well as imxrt1060-evk gets IP addres correctly and then is able to ping other devices (or being pinged by others), but I´d welcome some other opinion about cleaning and invalidating those segments of cache before merging.

Testing

Tested on imxrt1060-evk with ping example.

@michallenc michallenc changed the title imxrt: added Ethernet support for write back d-cache imxrt: added write back d-cache support for Ethernet Mar 8, 2021
@masayuki2009
Copy link
Contributor

@michallenc

I've just tried this PR with imxrt1060-evk:netnsh.

It works with CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y which is the current configuration
but it's unstable if I disable the configuration.

Actually, if I tried to log in to the board with telnet from PC, it failed.
How about your environment?

@michallenc
Copy link
Contributor Author

Hi @masayuki2009, thanks. I can actually connect to console via telnet (I use imxrt1060-evk:netnsh with write back d-cache and CONFIG_NETINIT_DHCPC=y to get IP address)., but you are right. When I stayed there for longer time and tried more commands it seemed to be unstable - getting longer delays and sometimes it lagged until I restarted the board. I will have to take further look to debugg this.

Trying 192.168.0.112...
Connected to 192.168.0.112.
Escape character is '^]'.

NuttShell (NSH) NuttX-10.0.1
nsh> 
nsh> ifconfig
eth0	Link encap:Ethernet HWaddr 00:e0:de:ad:be:ef at UP
	inet addr:192.168.0.112 DRaddr:192.168.0.1 Mask:255.255.255.0
	inet6 addr: fc00::2/112
	inet6 DRaddr: fc00::1/112

	RX: Received Fragment Errors  
	    0000002d 00000000 00000000
	    IPv4     IPv6     ARP      Dropped 
	    0000001f 00000000 0000000e 00000000
	TX: Queued   Sent     Errors   Timeouts
	    00000023 00000023 00000000 00000000
	Total Errors: 00000000

             IPv4  IPv6   TCP   UDP  ICMP  ICMPv6
Received     002a  0000  001e  0002  000a  0000
Dropped      0000  0000  0000  0000  0000  0000
  IPv4        VHL: 0000   Frg: 0000
  IPv6        VHL: 0000
  Checksum   0000  ----  0000  0000  ----  ----
  TCP         ACK: 0000   SYN: 0000
              RST: 0000  0000
  Type       0000  0000  ----  ----  0000  0000
Sent         002f  0000  0023  0002  000a  0000
  Rexmit     ----  ----  0000  ----  ----  ----
nsh> ?
help usage:  help [-v] [<cmd>]

  .         cd        exec      ifdown    mh        rm        time      
  [         cp        exit      ifup      mount     rmdir     true      
  ?         cmp       false     kill      mv        set       uname     
  arp       dirname   free      ls        mw        sleep     umount    
  basename  dd        help      mb        nslookup  source    unset     
  break     df        hexdump   mkdir     ps        test      usleep    
  cat       echo      ifconfig  mkrd      pwd       telnetd   xd        

Builtin Apps:
  ping6  renew  ping   sh     iperf  nsh    
nsh> ping 192.168.0.106
ping [8:100]
nsh> PING 192.168.0.106 56 bytes of data
56 bytes from 192.168.0.106: icmp_seq=0 time=10 ms
56 bytes from 192.168.0.106: icmp_seq=1 time=90 ms
56 bytes from 192.168.0.106: icmp_seq=2 time=110 ms
56 bytes from 192.168.0.106: icmp_seq=3 time=120 ms
56 bytes from 192.168.0.106: icmp_seq=4 time=30 ms
56 bytes from 192.168.0.106: icmp_seq=5 time=50 ms
56 bytes from 192.168.0.106: icmp_seq=6 time=60 ms
56 bytes from 192.168.0.106: icmp_seq=7 time=90 ms
56 bytes from 192.168.0.106: icmp_seq=8 time=10 ms
56 bytes from 192.168.0.106: icmp_seq=9 time=100 ms
10 packets transmitted, 10 received, 0% packet loss, time 10100 ms

nsh> 

@michallenc
Copy link
Contributor Author

FInally got some time to take a closer look at this. Still not quite there, but at least I have an idea now where the problem might be. It seems like either the message is not transmited after exiting imxrt_transmit or either it is, but we does not receive interrupt. That couses txtail to get stuck at one value and thus we soon get -EBUSY warning.

@masayuki2009
Copy link
Contributor

Hi @michallenc,

I took a look at the ethernet driver code for zephyr and MCUXpresso SDK and found that both define a non-cacheable area for the descriptors.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants