Hi Andy, thank you for these tests, it is very helpful. The problem you have can be easily solved by applying David Claffey's patches.
I see that mips32_pracc_fastdata_xfer() works well for you - I'll take a look why it does not work for me and elaborate on the list. Also, I can see that you are not facing the problem which I have : Error: couldn't read enough bytes from FT2232 device (0 < 5) Error: couldn't read from FT2232 Error: register read failed Since Laurent from Amontec is capable of reproducing the same problem, it might be something related to Amontec dongle I am using, but there is small chance. Which dongle are you using ? Best regards, Drasko On Fri, Mar 25, 2011 at 11:52 AM, Andrew Lyon <andrew.l...@gmail.com> wrote: > On Thu, Mar 24, 2011 at 11:01 AM, Drasko DRASKOVIC > <drasko.drasko...@gmail.com> wrote: >> Hi Andy, >> I am very surprised that OpenOCD works for big endian MIPS. >> >> I am currently working on this and I am preparing the patch that will >> fix some of the issues. >> >> What I currently observed is : >> >> 1) mips_m4k_write_memory() and mips_m4k_read_memory() do not handle >> endianess at all. Since these functions are used by mww and mdw >> commands to set up SDRAM controller, most probably your configuration >> is wrong. Can you check this by reading SDRAM controller configuration >> registers and comparing to that configuration you expect ? I'd be very >> suprised that it works. >> >> 2) Only mips_m4k_bulk_write_memory() handles endianess, but it is >> called on 128 byes blocks (becaus it uses FASTDATA, and size of >> FASTDATA area is 16 words). Bottom line is that by my observation >> confirmed that mips32_pracc_fastdata_xfer() called internaly does not >> work either, and I do not think that it works for little endian >> targets also, missing some FASTDATA instructions. So, it would be very >> important if you can answer us the question I asked in the first mail >> : is mips32_pracc_fastdata_xfer() function called, and does it >> succeeds, or it falls back to simple mips_m4k_write_memory() ? I would >> expect to fail and fallback to mips_m4k_write_memory(), which as I >> explaind, do not handle endianess at all. >> >> So please send us the report on following 3 things : >> 1) Is SDRAM configured OK (i.e. does mww commands work well for you) > > Hi Drasko, > > You are absolutely right there are endianness issues with mips > bigendian, on the board I am using the memory controller is already > configured by the onboard firmware but reading back the values I can > see they are bitswapped: > > mdw 0xbf8011d0 1 > 0xbf8011d0: 932d0000 > Correct Value: 0xbf8011d0 0x2D93 > > mdw 0xbf8011e0 1 > 0xbf8011e0: 35820000 > Correct Value: 0xbf8011e0 0x8235 > >> 2) Is mips32_pracc_fastdata_xfer() exiting with error > > No, I checked the debug logs and it works successfully: > > Debug: 219 25550 target.c:1251 target_write_buffer(): writing buffer > of 57344 byte at 0x86000000 > Debug: 220 25550 mips_m4k.c:984 mips_m4k_bulk_write_memory(): address: > 0x86000000, count: 0x00003800 > Debug: 221 25551 target.c:1072 target_alloc_working_area(): MMU > disabled, using physical address for working memory 0xa0600000 > Debug: 222 25551 target.c:1134 target_alloc_working_area(): allocated > new working area at address 0xa0600000 > Debug: 228 28508 mips32_pracc.c:971 mips32_pracc_fastdata_xfer(): > mips32_pracc_fastdata_xfer using 0xa0600000 for write handler > > Debug: 230 28711 ft2232.c:1685 ft2232_execute_scan(): ft2232 buffer > size reached, sending queued commands (first_unsent: 0xb74f3008, cmd: > 0xb7411fe8) > User : 232 29125 command.c:539 command_print(): 57344 bytes written at > address 0x86000000 > User : 233 29126 command.c:539 command_print(): downloaded 57344 bytes > in 3.576233s (15.659 kb/s) > > >> 3) Dump the loaded image and inspect it - is it well loaded in memory ? > > I think fastdata may be loading it correctly, but reading it back it > is clearly bitswapped: > > hexdump of original file: > > 0000000 000b 1000 0000 0000 0000 0000 0000 0000 > 0000010 688c 688c 0000 0000 312e 312e 0000 3000 > 0000020 0000 0000 0000 0000 0000 0000 0000 0000 > 0000030 7800 401b 00ff 3c08 ff00 3508 d824 0368 > 0000040 0001 3c08 9500 3508 0019 1768 0000 0000 > 0000050 8000 4008 8000 3c09 ffff 3529 4024 0109 > 0000060 3604 3c09 4025 0109 0000 0000 8000 4088 > 0000070 0040 0000 0040 0000 0040 0000 00c0 0000 > 0000080 6000 4008 fffc 3c09 ffff 3529 4024 0109 > 0000090 0000 2409 4025 0109 0000 0000 6000 4088 > 00000a0 0040 0000 0040 0000 0040 0000 00c0 0000 > 00000b0 0001 3c08 8000 3508 0007 1368 0000 0000 > 00000c0 0001 3c08 8400 3508 0003 1368 0000 0000 > 00000d0 0019 1000 0000 0000 8000 4008 8000 3c09 > 00000e0 ffff 3529 4024 0109 3600 3c09 4025 0109 > 00000f0 0000 0000 8000 4088 0040 0000 0040 0000 > > The file was loaded using fastdata_xfer and then read back, hexdump: > > 0000000 0010 0b00 0000 0000 0000 0000 0000 0000 > 0000010 8c68 8c68 0000 0000 2e31 2e31 0030 0000 > 0000020 0000 0000 0000 0000 0000 0000 0000 0000 > 0000030 1b40 0078 083c ff00 0835 00ff 6803 24d8 > 0000040 083c 0100 0835 0095 6817 1900 0000 0000 > 0000050 0840 0080 093c 0080 2935 ffff 0901 2440 > 0000060 093c 0436 0901 2540 0000 0000 8840 0080 > 0000070 0000 4000 0000 4000 0000 4000 0000 c000 > 0000080 0840 0060 093c fcff 2935 ffff 0901 2440 > 0000090 0924 0000 0901 2540 0000 0000 8840 0060 > 00000a0 0000 4000 0000 4000 0000 4000 0000 c000 > 00000b0 083c 0100 0835 0080 6813 0700 0000 0000 > 00000c0 083c 0100 0835 0084 6813 0300 0000 0000 > 00000d0 0010 1900 0000 0000 0840 0080 093c 0080 > 00000e0 2935 ffff 0901 2440 093c 0036 0901 2540 > 00000f0 0000 0000 8840 0080 0000 4000 0000 4000 > > > If I load a smaller image which does not use fastdata then it reads > back exactly the same as it was written, but clearly in memory it is > bitswapped. > > Andy > > >> >> If this does not work, you can forget any debugging... >> >> Best regards, >> Drasko >> >> On Thu, Mar 24, 2011 at 11:43 AM, Andrew Lyon <andrew.l...@gmail.com> wrote: >>> On Wed, Mar 23, 2011 at 2:06 PM, Drasko DRASKOVIC >>> <drasko.drasko...@gmail.com> wrote: >>>> Hi Andy, >>>> are you using big or little endian CPU ? >>> >>> big endian. >>> >>>> >>>> Is mips32_pracc_fastdata_xfer() function called, and does it succeeds, >>>> or it falls back to simple mips_m4k_write_memory() ? >>> >>> I realized I had not setup the working area properly and having done >>> so load_image is much faster (14.378 kb/s) >>> >>> However I have noticed other problems, to give some background the >>> board is a mips router which already has a working factory firmware, I >>> am trying to port the uboot code released by the manufacturer into a >>> newer version of uboot, so I load my new uboot binary into memory and >>> resume to that address, but instead of running my code the system >>> seems to reset and boot from rom again. >>> >>> So I tried a more simple binary which simply toggles a gpio to make a >>> led flash, but the same thing happens. >>> >>> Here is a log with some notes. >>> >>>> targets >>> TargetName Type Endian TapName State >>> -- ------------------ ---------- ------ ------------------ ------------ >>> 0* xway.cpu mips_m4k big xway.cpu running >>> >>> *At this point the board has loaded uboot from rom and is at the uboot >>> prompt. >>> >>>> halt >>> target state: halted >>> target halted in MIPS32 mode due to debug-request, pc: 0x83fd7ac0 >>>> load_image test1 0x80000000 >>> 57344 bytes written at address 0x80000000 >>> downloaded 57344 bytes in 3.937115s (14.224 kb/s) >>>> step 0x80000000 >>> target state: halted >>> target halted in MIPS32 mode due to single-step, pc: 0x83fd7abc >>> >>> *As you can see PC is not where I asked it to go. >>> >>>> resume >>> >>> *At this point the uboot prompt starts responding to input again, >>> showing that the system never exec any of my code. >>> >>>> halt >>>> resume 0x80000000 >>> >>> *System resets and boots from rom. >>> >>> Andy >>> >>> >>>> >>>> BR, >>>> Drasko >>>> >>>> On Tue, Mar 22, 2011 at 2:20 PM, Andrew Lyon <andrew.l...@gmail.com> wrote: >>>>> Hi, >>>>> >>>>> I am using a ft2232 based jtag device with a mips board and the >>>>> performance is really terrible: >>>>> >>>>> 57344 bytes in 3119.897949s (0.018 kb/s) >>>>> >>>>> It seems to work ok in that I can halt, resume, read/write memory etc, >>>>> but every operation is very slow, halting takes almost 3 seconds. >>>>> >>>>> I pulled the code from git and have tried using both libftdi and >>>>> libftd2xx0.4.16 but there is little difference. >>>>> >>>>> The jtag came with a guruplug and although I no longer have the >>>>> guruplug itself I do recall reflashing the 225k uboot image and it >>>>> took only a few seconds. >>>>> >>>>> Is this expected performance? If not what do I need to do to debug? >>>>> >>>>> Andy >>>>> _______________________________________________ >>>>> Openocd-development mailing list >>>>> Openocd-development@lists.berlios.de >>>>> https://lists.berlios.de/mailman/listinfo/openocd-development >>>>> >>>> >>> >> > _______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development