1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023 2024 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: Bus errors accessing VME with base 7.0.6.1 and latest synApps modules |
From: | Mark Rivers via Tech-talk <tech-talk at aps.anl.gov> |
To: | Till Straumann <till.straumann at psi.ch>, Michael Davidsaver <mdavidsaver at gmail.com>, Torsten Bögershausen <Torsten.Bogershausen at ess.eu>, Benjamin Franksen <benjamin.franksen at helmholtz-berlin.de> |
Cc: | "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov> |
Date: | Wed, 1 Jun 2022 18:20:52 +0000 |
Hi Till, Ø
Could you please provide 'dbEvent.o' (from commit 85822f305) ?
I’m not sure what you mean. Do you mean send the .o file itself, or do a vxWorks disassembly of that function? Ø
- check if the bus error is 'real', i.e., try to access the reported VME address e.g., from the console This is the system VME memory map: iocexample> sysVmeMapShow VMEbus access from CPU: 0x80000000 - 0xBFFFFFFF => A32: 0x80000000 - 0xBFFFFFFF 0xF0000000 - 0xF0FFFFFF => A24: 0x000000 - 0xFFFFFF 0xFBFF0000 - 0xFBFFFFFF => A16: 0x0000 - 0xFFFF 0xF2000000 - 0xF2FFFFFF => CR/CSR:0x000000 - 0xFFFFFF PCIbus access from VMEbus: A32: 0x80000000 - 0x9FFFFFFF => RAM: 0x00000000 - 0x1FFFFFFF value = 0 = 0x0 The A16 errors are all at addresses like this, i.e. address 0x34xx [Fri May 27 14:05:24 2022] VME Bus Error accessing A16: 0x345e [Fri May 27 14:20:20 2022] VME Bus Error accessing A16: 0x345e [Fri May 27 15:49:10 2022] VME Bus Error accessing A16: 0x345e [Fri May 27 15:49:57 2022] VME Bus Error accessing A16: 0x347e [Fri May 27 16:15:55 2022] VME Bus Error accessing A16: 0x345e [Fri May 27 16:39:39 2022] VME Bus Error accessing A16: 0x345e [Tue May 31 17:59:31 2022] VME Bus Error accessing A16: 0x347e [Tue May 31 22:09:43 2022] VME Bus Error accessing A16: 0x347e The A32 VME bus errors are all at addresses like these, i.e. addresses 0xbfxxxxxx. [Tue May 31 16:09:11 2022] VME Bus Error accessing A32: 0xbfe3332c [Tue May 31 16:11:01 2022] VME Bus Error accessing A32: 0xbfdffff8 [Tue May 31 18:47:53 2022] VME Bus Error accessing A32: 0xbffb3330 [Tue May 31 18:47:54 2022] VME Bus Error accessing A32: 0xbfe99994 [Tue May 31 18:47:54 2022] VME Bus Error accessing A32: 0xbfe692d4 [Wed Jun 1 07:29:53 2022] VME Bus Error accessing A32: 0xbffcf67c [Wed Jun 1 11:29:14 2022] VME Bus Error accessing A32: 0xbfa8c418 For these tests I only have a single VME card installed, other than the MVME5100 CPU. That card is a TVME200 IP carrier. It is configured with this command: # The second carrier in our system is a TEWS TVME200 # The argument to ipacAddTVME200 is the values of the 6 switches on the board # In this case 34 = base address 3400 # 2 = interrupt mapping 4, 5, 2, 1, 4, 5, 2, 1 # F = A32 address space, 8MB per slot, 32MB total # A2 = A2000000 base address in A32 space ipacAddTVME200("342FA2") This means that the card occupies 0x3400 to 0x37FF in the A16 address space, each of the 4 IP slots used 0x100 bytes. The IP330 module is in slot 0, so it uses addresses
0x3400 – 0x34ff. The VME bus errors are all at address 0x345e or 0x347e. This means they are in the mailbox register space of the IP330 card. Those addresses should not generate a bus
error on a read operation. But if it was a write operation then it should generate a bus error. This is a memory dump of the A16 memory for the IP330. Note that we can indeed read address 0x345e and 0x347e. iocexample> d 0xfbff3400 NOTE: memory values are displayed in hexadecimal. 0xfbff3400: 2b02 4078 0021 0f00 0000 0000 0000 0000 *+.@x.!..........* 0xfbff3410: 0000 0000 0000 0000 0000 0000 0000 0000 *................* 0xfbff3420: 0000 0000 0000 0000 0000 0000 0000 0000 *................* 0xfbff3430: 0000 0000 0000 0000 0000 0000 0000 0000 *................* 0xfbff3440: 16b8 1701 1701 1700 171b 16fe 170b 16f9 *................* 0xfbff3450: 1703 1702 16fa 16f4 170d 16ed 16fe 16e3 *................* 0xfbff3460: 16b6 169c 16a7 1c2f 1c4a 1c2c 1c36 2138 *......./.J.,.6!8* 0xfbff3470: 2db9 2dae 2d9a 2d86 330a 32e6 32ea 32cc *-.-.-.-.3.2.2.2.* 0xfbff3480: ff49 ff50 ff41 ff43 ffa3 ff11 ff00 ff00 *.I.P.A.C........* 0xfbff3490: ff00 ff00 ff0c ff5a ff00 ff00 ff00 ff00 *.......Z........* 0xfbff34a0: ff00 ff00 ff00 ff00 ff00 ff00 ff00 ff00 *................* 0xfbff34b0: ff00 ff00 ff00 ff00 ff00 ff00 ff00 ff00 *................* 0xfbff34c0: 0054 0000 0054 0000 0054 0000 0054 0000 *.T...T...T...T..* 0xfbff34d0: 0054 0000 0054 0000 0054 0000 0054 0000 *.T...T...T...T..* 0xfbff34e0: 0054 0000 0054 0000 0054 0000 0054 0000 *.T...T...T...T..* 0xfbff34f0: 0054 0000 0054 0000 0054 0000 0054 0000 *.T...T...T...T..* value = 0 = 0x0 The A32 address errors are at 0xbfxxxxxx. That is at the very top of the A32 address space. That is not where the TVME200 card is located, it is at 0xA2000000. Those
addresses are not readable, and do indeed generate an A32 bus error: iocexample> *(0xbfe3332c) VME Bus Error accessing A32: 0xbfe3332c machine check Exception next instruction address: 0x001fe4f4 Machine Status Register: 0x0008b032 Condition Register: 0x88000244 0x0012489c vxTaskEntry +0x48 : 0x0020c554 () 0x0020c554 shellTask +0x4a8: shellExec () 0x0020c020 shellExec +0x11c: 0x00201a78 () 0x00201ca0 shellInterpCInit+0x640: shellInterpCparse () 0x00201384 shellInterpCparse+0xa3c: 0x001fe9f4 () 0x001fea24 shellInterpClex+0x1d6c: 0x001fe6dc () 0x001fe7a0 shellInterpClex+0x1ae8: 0x001fe490 () Shell task 'tShell0' restarted... So the A16 bus errors are at a “valid” address, but perhaps a write rather than a read is being done. The A32 addresses cannot be read, they do generate bus errors. Mark From: Till Straumann <till.straumann at psi.ch> Hi Mark.
|