Re: [RTnet-developers] Kernel module for smc91111
Brought to you by:
bet-frogger,
kiszka
From: Hinko K. <hin...@i-...> - 2011-09-16 07:34:19
|
On 09/16/2011 08:32 AM, Jan Kiszka wrote: > On 2011-09-14 12:18, Hinko Kocevar wrote: >> Hi all, >> >> I'm trying to use smc91111 RT driver provided in RTnet package (git >> sources) on my ARM PXA253 board. The modules compiles against linux >> 2.6.35.9 and Xenomai 2.5.6, but when it is loaded it produces oops. >> >> What is the state of this module? >> >> OTOH, I might also try to port the stock kernel driver smc91x we are >> currently using to RTnet. It is quite similar to the one in RTnet but >> with more features and support for many ARM based boards. > > The rt_smc91111 is probably not prepared for your hardware. Note that > there is both smc91x ans smc911x in upstream while rt_smc9111 was based > on the latter (IIRC). > Thank you for response. I have done some porting of the smc91x driver as found in 2.6.35.9 vanilla kernel to RTnet. The driver compiles and loads fine, my network card is also detected. Once started with "./rtnet start" I get this : [ 36.417588] I-pipe: Detected illicit call from domain 'Xenomai' [ 36.417626] <3> into a service reserved for domain 'Linux' and below. Complete dump: root@xcep:~# sh -x /usr/local/rtnet/sbin/rtnet start + prefix=/usr/local/rtnet + RTNETCFG=/usr/local/rtnet/etc/rtnet.conf + '[' start = -cf ']' + '[' -r /usr/local/rtnet/etc/rtnet.conf ']' + . /usr/local/rtnet/etc/rtnet.conf ++ prefix=/usr/local/rtnet ++ exec_prefix=/usr/local/rtnet ++ RTNET_MOD=/usr/local/rtnet/modules ++ RTIFCONFIG=/usr/local/rtnet/sbin/rtifconfig ++ RTCFG=/usr/local/rtnet/sbin/rtcfg ++ TDMACFG=/usr/local/rtnet/sbin/tdmacfg ++ MODULE_EXT=.ko ++ RT_DRIVER=rt_smc91111 ++ RT_DRIVER_OPTIONS= ++ IPADDR=127.0.0.2 ++ NETMASK=255.255.255.0 ++ RT_LOOPBACK=yes ++ RT_PROTOCOLS=udp packet ++ RTCAP=no ++ STAGE_2_SRC= ++ STAGE_2_DST= ++ STAGE_2_CMDS= ++ TDMA_MODE=master ++ TDMA_SLAVES=127.0.0.1 ++ TDMA_CYCLE=5000 ++ TDMA_OFFSET=200 + '[' start = -v ']' + '[' start = -c ']' + NETMASK_OPT= + '[' '!' 255.255.255.0 = '' ']' + NETMASK_OPT=netmask 255.255.255.0 + init_rtnet + insmod /usr/local/rtnet/modules/rtnet.ko [ 32.975902] [ 32.975935] *** RTnet 0.9.12 - built on Sep 14 2011 15:06:10 *** [ 32.975952] [ 32.985177] RTnet: initialising real-time networking + insmod /usr/local/rtnet/modules/rtipv4.ko + insmod /usr/local/rtnet/modules/rt_smc91111.ko [ 33.958026] smc91x.c: v1.1-RTnet, sep 13 2011 by Hinko Kocevar <hin...@i-...> [ 33.976603] RTnet: registered rteth0 [ 33.980392] rteth0: SMC91C11xFD (build 1316009442) (rev 2) at c4b2c300 IRQ 8 DMA 8 [nowait] [ 33.988842] rteth0: Ethernet addr: 00:d0:50:31:11:6c + insmod /usr/local/rtnet/modules/rtudp.ko + insmod /usr/local/rtnet/modules/rtpacket.ko + '[' yes = yes ']' + insmod /usr/local/rtnet/modules/rt_loopback.ko [ 34.457924] initializing loopback... [ 34.462746] RTnet: registered rtlo + '[' no = yes ']' + '[' yes = yes ']' + /usr/local/rtnet/sbin/rtifconfig rtlo up 127.0.0.1 + '[' no = yes ']' + insmod /usr/local/rtnet/modules/rtcfg.ko [ 35.218000] RTcfg: init real-time configuration distribution protocol + insmod /usr/local/rtnet/modules/rtmac.ko [ 35.728923] RTmac: init realtime media access control + insmod /usr/local/rtnet/modules/tdma.ko [ 36.209592] RTmac/TDMA: init time division multiple access control mechanism + '[' master = master ']' + start_master + /usr/local/rtnet/sbin/rtcfg rteth0 server [ 36.253994] RTcfg: rtcfg_do_main_event() rtdev=1, event=RTCFG_CMD_SERVER, state=RTCFG_MAIN_OFF [ 36.262661] RTcfg: next main state=RTCFG_MAIN_SERVER_RUNNING + STAGE_2_OPT= + '[' '!' '' = '' ']' + '[' '!' 127.0.0.1 = '' ']' + /usr/local/rtnet/sbin/rtifconfig rteth0 up 127.0.0.2 netmask 255.255.255.0 + /usr/local/rtnet/sbin/tdmacfg rteth0 master 5000 + /usr/local/rtnet/sbin/tdmacfg rteth0 slot 0 0 [ 36.417588] I-pipe: Detected illicit call from domain 'Xenomai' [ 36.417626] <3> into a service reserved for domain 'Linux' and below. [ 36.432007] Backtrace: [ 36.434313] Xenomai: suspending kernel thread c3e51940 ('rtnet-tdma') at 0xc0022b6c after exception #0 [ 36.443975] BUG: sleeping function called from invalid context at arch/arm/mm/fault.c:312 [ 36.452177] in_atomic(): 0, irqs_disabled(): 128, pid: 192, name: sh [ 36.458539] Backtrace: [ 36.461050] [<c0022a88>] (dump_backtrace+0x0/0x118) from [<c0022bd4>] (dump_stack+0x18/0x1c) [ 36.469510] r7:c3d5fca0 r6:c3d7b960 r5:c3d7b994 r4:c3dc6000 [ 36.475242] [<c0022bbc>] (dump_stack+0x0/0x1c) from [<c002cb20>] (__might_sleep+0xd8/0xfc) [ 36.483558] [<c002ca48>] (__might_sleep+0x0/0xfc) from [<c002603c>] (do_page_fault+0x124/0x294) [ 36.492276] r4:00000000 [ 36.494865] [<c0025f18>] (do_page_fault+0x0/0x294) from [<c001e320>] (do_DataAbort+0x40/0x134) [ 36.503520] [<c001e2e0>] (do_DataAbort+0x0/0x134) from [<c001ef84>] (ret_from_exception+0x0/0x40) [ 36.512412] Exception stack(0xc3dc7fb0 to 0xc3dc7ff8) [ 36.517490] 7fa0: 40018350 00000000 00000000 000000c0 [ 36.525709] 7fc0: 40017f68 00000000 000000c0 00000000 000000ce ffffffff 4017b000 becc20f4 [ 36.533917] 7fe0: 40018350 becc20a8 400f54f8 400d090c 60000010 ffffffff [ 36.540549] r8:000000ce r7:00000000 r6:000000c0 r5:00000000 r4:ffffffff + OFFSET=200 + echo '$TDMACFG rteth0 slot 0 200;ifconfig vnic0 up $IPADDR $NETMASK_OPT' + /usr/local/rtnet/sbin/rtcfg rteth0 add 127.0.0.1 -stage1 - [ 36.621182] RTcfg: rtcfg_do_main_event() rtdev=1, event=RTCFG_CMD_ADD, state=RTCFG_MAIN_SERVER_RUNNING + OFFSET=400 + ifconfig vnic0 up 127.0.0.2 netmask 255.255.255.0 + echo -n 'Waiting for all slaves...' Waiting for all slaves...+ /usr/local/rtnet/sbin/rtcfg rteth0 wait [ 36.681875] RTcfg: rtcfg_do_main_event() rtdev=1, event=RTCFG_CMD_WAIT, state=RTCFG_MAIN_SERVER_RUNNING ^C root@xcep:~# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:20 errors:0 dropped:0 overruns:0 frame:0 TX packets:20 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1256 (1.2 KiB) TX bytes:1256 (1.2 KiB) vnic0 Link encap:Ethernet HWaddr 00:D0:50:31:11:6C inet addr:127.0.0.2 Bcast:127.0.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MTU:1496 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Later on these lines start to appear on console: [ 69.254013] RTcfg: error -105 while sending stage 1 frame [ 70.254016] RTcfg: error -105 while sending stage 1 frame [ 71.254015] RTcfg: error -105 while sending stage 1 frame [ 72.254017] RTcfg: error -105 while sending stage 1 frame [ 73.254017] RTcfg: error -105 while sending stage 1 frame [ 74.254018] RTcfg: error -105 while sending stage 1 frame [ 75.254020] RTcfg: error -105 while sending stage 1 frame [ 76.254019] RTcfg: error -105 while sending stage 1 frame [ 77.254020] RTcfg: error -105 while sending stage 1 frame [ 78.254022] RTcfg: error -105 while sending stage 1 frame [ 79.254022] RTcfg: error -105 while sending stage 1 frame I feel I'm quite close to working version, so I'm attaching the driver sources too, if you are interested and have some time to look at (probably not :). Note that I used the same file names (rt_smc91111.{c,h}), while the code is different, for the sake of simplicity of compiling smc91x driver under RTnet. Hopefully of the guidelines of the README.drvporting were addressed. I also removed spinlocks where possible since my HW is not SMP capable. Best regards, Hinko -- Hinko Kocevar Technical support software engineer Instrumentation Technologies d.d. Velika pot 22, SI-5250 Solkan - Slovenia T:+386 5 3352600, F:+386 5 3352601 mailto: hin...@i-... http://www.i-tech.si - When your users demand stability |