Dietmar Posted February 28 Posted February 28 @reboot12 Waaoh, we will bring it to full live soon. But Now I have to go. I am back late in the evening may be 21:00 Dietmar This is the best sign so far. Those three RXPOLL lines mean the RX ring is no longer stuck: RDH (0x2810) moves: 0E -> 12 -> 17 RDT (0x2818) also moves: 09 -> 0E -> 12 That means: the hardware is consuming RX descriptors the driver is reposting them so the RX DMA path is now really alive So the old core failure is gone: DMA is working on RX the NIC is receiving real frames poll/ISR is working TXRECLAIM still at 0/0 in this snippet just means: there is still no proven TX traffic in this exact capture But the very important new fact is: this is not “dead hardware” anymore the board is now seeing inbound traffic on the wire What this means You should not make a new driver yet. A new driver now would be premature, because this latest snippet proves the current driver finally broke through on the receive side. Best next step now Use the current driver and do one focused test: generate real traffic: ipconfig /renew ping router ping another PC directly trace whether TX is actually used: SEND TXONE_IN / TXONE_OUT TXRECLAIM Because now the big missing split is: RX works, but TX never starts vs TX starts too, but upper networking/binding is still the issue New conclusion from this snippet Before: RX was dead (RDH=0 forever) Now: RX is alive descriptors are moving frames are arriving That is a major milestone. So the answer Do not build a new driver yet. Use the current hardwake + keep-poll build. Get the last TX-focused KD log with real traffic. If that next log shows: SEND + TXONE_OUT with moving TDT → then the driver is basically alive and the remaining issue is higher-level networking/binding/config RX moves but no SEND at all → then the next driver (or INF/media-state logic) should focus on binding/media indication SEND happens but no TXONE/TDT movement → then next driver should target the TX submission path
Dietmar Posted February 28 Posted February 28 @reboot12 With the same driver, do this KD block and ping as much as possible to router to compi each other and ipconfig /all ipconfig /renew .. I have to go Dietmar !sym quiet .reload /f i219.sys sxd ud bc * bu i219!I219MiniportSendPackets ".echo SEND; kb; gc" bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .echo TXONE_IN; .printf \"ctx=%p regs=%p ret=%p\n\", $t0, $t1, $t2; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; bp /1 @$t2 \".echo TXONE_OUT; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; gc\"; gc" bu i219!I219TxReclaim "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRECLAIM; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo RXPOLL; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; gc" bu i219!I219MiniportISR ".echo ISR; gc" g
reboot12 Posted February 28 Posted February 28 (edited) @Dietmar I tried map network drive to i219 WinXP PC - https://pastebin.com/5Wv46Hb0 If change i219 from static IP to DHCP then PC no set IP and I don't know what IP to ping. In router no any request and no any offer IP. PC has no IP configuration. WinDbg data only show while ping from router to i219 if card has set static IP and mask but in WinXP connection properties is always 0/0 packet Edited February 28 by reboot12
Dietmar Posted February 28 Posted February 28 @reboot12 Here is new driver and KD Block good luck Dietmar https://www.upload.ee/files/19119931/i219con.zip.html !sym quiet .reload /f i219.sys sxd ud bc * bu i219!I219WaitGoodMacState "r $t0=poi(@esp+4); r $t1=poi(@esp+8); r $t2=poi(@esp+0c); r $t3=poi($t0+0xDC); .printf \"GOODMAC loops=%x needpcim=%x regs=%p\n\", $t1, $t2, $t3; dd @$t3+0x0008 L1; dd @$t3+0x5B50 L3; gc" bu i219!I219TxProgramUnit "r $t0=poi(@esp+4); r $t1=poi(@esp+8); r $t2=poi(@esp+0c); r $t3=poi($t0+0xDC); .printf \"TXPROG_IN deep=%x restore=%x regs=%p\n\", $t1, $t2, $t3; dd @$t3+0x0008 L1; dd @$t3+0x5B50 L3; dd @$t3+0x0400 L1; dd @$t3+0x0410 L1; dd @$t3+0x3800 L3; dd @$t3+0x3810 L1; dd @$t3+0x3818 L1; dd @$t3+0x3828 L1; dd @$t3+0x3820 L1; dd @$t3+0x382C L1; dd @$t3+0x04A80 L1; dd @$t3+0x00C4 L1; r $t4=poi(@esp); bp /1 @$t4 \".echo TXPROG_OUT; dd @$t3+0x0008 L1; dd @$t3+0x5B50 L3; dd @$t3+0x0400 L1; dd @$t3+0x0410 L1; dd @$t3+0x3800 L3; dd @$t3+0x3810 L1; dd @$t3+0x3818 L1; dd @$t3+0x3828 L1; dd @$t3+0x3820 L1; dd @$t3+0x382C L1; dd @$t3+0x04A80 L1; dd @$t3+0x00C4 L1; gc\"; gc" bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRXSTART_IN; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2820 L1; dd @$t1+0x282C L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3820 L1; dd @$t1+0x382C L1; dd @$t1+0x00C4 L1; r $t2=poi(@esp); bp /1 @$t2 \".echo TXRXSTART_OUT; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2820 L1; dd @$t1+0x282C L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3820 L1; dd @$t1+0x382C L1; dd @$t1+0x00C4 L1; gc\"; gc" bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi(@esp+8); r $t2=poi($t0+0xDC); .printf \"TXSEND_IN pkt=%p regs=%p\n\", $t1, $t2; dd @$t2+0x0008 L1; dd @$t2+0x5B50 L3; dd @$t2+0x0400 L1; dd @$t2+0x3810 L1; dd @$t2+0x3818 L1; dd @$t2+0x3828 L1; dd @$t2+0x04A80 L1; r $t3=poi(@esp); bp /1 @$t3 \".echo TXSEND_OUT; dd @$t2+0x0008 L1; dd @$t2+0x5B50 L3; dd @$t2+0x0400 L1; dd @$t2+0x3810 L1; dd @$t2+0x3818 L1; dd @$t2+0x3828 L1; dd @$t2+0x04A80 L1; gc\"; gc" bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo CTRLKICK_IN; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x0400 L1; dd @$t1+0x3828 L1; dd @$t1+0x04A80 L1; r $t2=poi(@esp); bp /1 @$t2 \".echo CTRLKICK_OUT; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x0400 L1; dd @$t1+0x3828 L1; dd @$t1+0x04A80 L1; gc\"; gc" g
reboot12 Posted March 1 Posted March 1 (edited) @Dietmar i219con - https://pastebin.com/E1TaPuFW ping to i219 (static IP) from other PC: vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200 TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 TXPROG_OUT b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200 TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 TXPROG_OUT b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200 TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 TXPROG_OUT b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200 TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008 00080603 b978ab50 00000008 e001c25c 00000000 TXPROG_OUT b9785008 00080603 b978ab50 00000008 e001c25c 00000000 b9785400 0104010a b9785410 0060200a b9788800 0aa2e000 00000000 00000200 b9788810 00000000 b9788818 00000000 b9788828 02000000 b9788820 00000000 b978882c 00000000 b9789a80 00000000 b97850c4 00000000 ping from i219 to router - there is nothing in WinDbg In normal boot mode I run game Spider Solitaire and at some point, the message "Cable disconnected" appeared for a moment. @Dietmar What HAL driver you use? I use acpiapic_mp: Edited March 1 by reboot12
Dietmar Posted March 1 Posted March 1 @reboot12 This lan cable disconnect and then connect again I have also. It is an artefakt of this driver, because some settings are too hard, this will be gone in next version. How to use this KD block with the same driver as before: Let it run in Windbg. Then disconnect, connect the lan cable by hand. Then ping the router and compi each other Dietmar PS: I use the hal.dll from Ramsey with the 4GB switch. !sym quiet .reload /f i219.sys sxd ud bc * bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u ADP=%p\n\", poi(@esp+0x0c), poi(@esp+4); r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND regs=%p\n\", $t1; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc" bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXONE; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc" bu i219!I219TxReclaim "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRECLAIM; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc" bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRXSTART; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc" g
reboot12 Posted March 1 Posted March 1 29 minutes ago, Dietmar said: PS: I use the hal.dll from Ramsey with the 4GB switch. But what type - Uni or Multiprocessor ??? i219con next - https://pastebin.com/C9YX1BvL ping fro i219 to router - nothing ping from other PC to i219: TXRECLAIM b9712008 00080603 b9712400 0104010a 00000000 b9715800 0ac85000 00000000 00000200 00000000 b9715810 00000000 00000000 00000000 00000000 b9715820 00000000 00000000 02000000 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200 TXRECLAIM b9712008 00080603 b9712400 0104010a 00000000 b9715800 0ac85000 00000000 00000200 00000000 b9715810 00000000 00000000 00000000 00000000 b9715820 00000000 00000000 02000000 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200 TXRECLAIM b9712008 00080603 b9712400 0104010a 00000000 b9715800 0ac85000 00000000 00000200 00000000 b9715810 00000000 00000000 00000000 00000000 b9715820 00000000 00000000 02000000 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200 TXRECLAIM b9712008 00080603 b9712400 0104010a 00000000 b9715800 0ac85000 00000000 00000200 00000000 b9715810 00000000 00000000 00000000 00000000 b9715820 00000000 00000000 02000000 00000000 vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200
reboot12 Posted March 1 Posted March 1 (edited) @Dietmar If disconnect cable from i219 then in WinDbg: vs7_4_1g_megate_v49: LinkState -> DOWN 10Mb FD After I connect cable then "cable unplugged" message - I can't disbale connection in WinXP Edited March 1 by reboot12
Dietmar Posted March 1 Posted March 1 @reboot12 I use the hal.dll for multiprocessors with 4Gb forced from Ramsey. Here is diagnosis for your i219-LM until now: This is the clearest proof so far: Your driver is queuing packets. In your dump, SEND and TXONE fire, and the dword at 0x3818 rises from 0x0 to 0x14, while the dword at 0x3810 stays 0x0. In the e1000e register map, 0x3810 is TDH and 0x3818 is TDT. That means software advances the Tx tail, but hardware never advances the Tx head—so descriptors are being posted, but none are being consumed/completed. That also means the old “DMA/master gate is simply off” theory is mostly ruled out by this snapshot. STATUS=00080603 decodes as FD + Link Up + GIO master enable, and the PCIM_STATE bit (0x40000000) is not set here. So this is not the classic “still stuck in PCIm low-power state” picture. Also, TCTL=0104010a already includes E1000_TCTL_EN and E1000_TCTL_PSP, so the Tx unit is nominally enabled. The most suspicious register in your dump is now TXDCTL=02000000. In current e1000e definitions, the documented TXDCTL fields are threshold bits plus GRAN=0x01000000 and COUNT_DESC=0x00400000, and Linux’s E1000_TXDCTL_DMA_BURST_ENABLE macro builds a very different value from those fields. So 0x02000000 looks nonstandard / likely wrong for this MAC family. That is now my top suspect on the register-programming side. So the narrowed diagnosis is: NDIS send path is alive driver ring bookkeeping is alive tail writes reach the NIC failure is now between posted descriptor and hardware consumption That points to one of these, in order: bad TXDCTL programming bad Tx descriptor format / command bits Tx ring not fully re-armed after link event less likely: a deeper DMA fetch problem despite status looking okay The next best KD block is to watch the Tx FIFO registers (TDFH/TDFT/TDFHS/TDFTS/TDFPC) together with the normal ring registers. If the Tx FIFO stays dead while TDT keeps rising, then the MAC is not even pulling descriptors into its internal FIFO. Those FIFO registers are at 0x3410–0x3430, and TARC is at 0x3840. !sym quiet sxd ud bc * bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXONE; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3410 L5; dd @$t1+0x3800 L0c; dd @$t1+0x3840 L1; gc" bu i219!I219TxReclaim "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRECLAIM; dd @$t1+0x0008 L1; dd @$t1+0x3410 L5; dd @$t1+0x3800 L0c; dd @$t1+0x3840 L1; gc" g
Dietmar Posted March 1 Posted March 1 @reboot12 I just come to another crazy idea: Because everything works on your industrial board, only TX not: Please send me your working win10 i219.sys driver and the i219.inf for it. I make a Hex diagnose of this binary just for to fetch the missing path for some registers of your Industrial board, that are not make public until now so Linux cant help here Dietmar
reboot12 Posted March 1 Posted March 1 (edited) @Dietmar Official Win10 LAN drivers from Advantech for AIMB-786: AIMB-786_LAN_Win10(64bit)_23.2.0.1006.zip but 417MB This is extracted driver only for PRO1000\Win32 - LAN_AIMB-786_PRO1000.zip 7.21MB But I don't tested this driver. I tested driver included in Win10 19041.2604 (x64) after startnet in WinPE. This is wpeinit.log Installing device pci\ven_8086&dev_15bb&subsys_00008086 X:\windows\INF\net1ix64.inf succeeded I found .sys file is e1i65x64.sys Service name: e1i65x64 Edited March 1 by reboot12
Dietmar Posted March 1 Posted March 1 @reboot12 Oh..this is very nice! I just found, that this win10 driver for your Industrial board has some extra routines special for your board, that exact matches our problem with TX. Soon I send to you next driver Dietmar
Dietmar Posted March 1 Posted March 1 (edited) @reboot12 Please run this KD block for to check, if I see the difference between your i219-LM for your board and the "normal" version correct Dietmar bc * bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=((poi(@$t1+0x3828)&0xffc1ffdf)|0x0141001f); ed @$t1+0x3828 @$t2; r $t3=(poi(@$t1+0x3840)|0x0f800483); ed @$t1+0x3840 @$t3; .echo WIN10_STYLE_TX; dd @$t1+0x3828 L1; dd @$t1+0x3840 L1; dd @$t1+0x3410 L5; gc" g Edited March 1 by Dietmar
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now