Hi guys!

Just a thing to consider:

I think the issue might be around the dap implementation. I just read
through the ADI documentation the other day, and it says that if one
uses auto-increment for reading or writing using the MEM-AP, the
incrementation only works for the LSB 10 bits, after that the
behaviour is *undefined*. This struck a heavy wtf in me, that's why I
remember.

Maybe you should check out, if this is the problem.

Regards,
  Ákos Vandra

On 16 March 2012 11:33, Drasko DRASKOVIC <drasko.drasko...@gmail.com> wrote:
> On Fri, Mar 16, 2012 at 3:06 AM, 吴亚杰 <yajie...@hotmail.com> wrote:
>> Hi,
>>
>>> Date: Thu, 15 Mar 2012 19:11:45 +0100
>>> From: drasko.drasko...@gmail.com
>>> To: salva...@telecable.es
>>> CC: openocd-devel@lists.sourceforge.net
>>> Subject: Re: [OpenOCD-devel] Bug in mips32_pracc_read_mem32
>>
>>>
>>> On Thu, Mar 15, 2012 at 6:44 PM, salvador <salva...@telecable.es> wrote:
>>> > On 03/14/2012 07:24 PM, salvador wrote:
>>> > 1.-   There is no call to mips32_pracc_read_mem32()  in
>>> > mips_m4k_read_memory().
>>> Yes, there is. It is called implicitly, by mips32_pracc_read_mem().
>>> Anyway, count parameter is propagated.
>>> Looking in the mips_m4k_read_memory() you can easily see that it is
>>> used to count __BYTES__ :
>>>
>>> t = malloc(count * size * sizeof(uint8_t));
>>>
>>>
>>> > 2.-   I guess you mean a call to mips32_pracc_read_mem(). This function
>>> > has a parameter  "int size".
>>>
>>> Yes. Size of variable does not meter. It is a placeholder for integer
>>> - a number. This number, however, can be a number of apples, ducks or,
>>> as in this case - bytes.
>>>
>>> >
>>> > 3.-   The function mips32_pracc_read_mem() is defined in mips32_pracc.c
>>> > .     This function calls mips32_pracc_read_mem32() only if the
>>> > parameter size is 4 (WORD) and count >1.
>>>
>>> Yes. 'size' is the "acces width" : w, hw or b. Independantly, 'count'
>>> is nb of bytes.
>>
>> i think  'count' is not nb of bytes. see the followin code from the function
>> —— mips_m4k_read_memory
>> for(i = 0; i < (count*size); i += size)
>> {
>> switch(size)
>> {
>> case 4:
>> t32 = le_to_h_u32(&buffer[i]);
>> target_buffer_set_u32(target,&buffer[i], t32);
>> break;
>>             ......................
>>
>> if 'count' is really nb of bytes, i think the code should be the follwing
>> instead of the above:
>> for(i = 0; i < (count); i += size)
>>            .......................
>> In my opinion ,
>>     for  a "word access" , 'count' is nb of word
>>     for  a "halfword access" , 'count' is nb of halfword
>>     for  a "byte access" , 'count' is nb of byte
>
> Looking in target.h comments, this seems to be true...
>
> Salvador,
> what actually happends when you apply your patch ? Does it work
> correctly for more than 1024 words read ?
>
> If yes, can you please post the patch to gerrit ?
>
> BR,
> Drasko
>
> ------------------------------------------------------------------------------
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
> _______________________________________________
> OpenOCD-devel mailing list
> OpenOCD-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openocd-devel

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to