arm11 burst writes are now only enabled for writes larger than 1 word. Single word writes are frequently used from reset init scripts to non-memory peripherals.
This commit is contained in:
parent
407061eaa6
commit
23c629a85e
|
@ -5737,7 +5737,11 @@ one bit in the encoding, effecively a fifth parameter.)
|
||||||
|
|
||||||
@deffn Command {arm11 memwrite burst} [value]
|
@deffn Command {arm11 memwrite burst} [value]
|
||||||
Displays the value of the memwrite burst-enable flag,
|
Displays the value of the memwrite burst-enable flag,
|
||||||
which is enabled by default.
|
which is enabled by default. Burst writes are only used
|
||||||
|
for memory writes larger than 1 word. Single word writes
|
||||||
|
are likely to be from reset init scripts and those writes
|
||||||
|
are often to non-memory locations which could easily have
|
||||||
|
many wait states, which could easily break burst writes.
|
||||||
If @var{value} is defined, first assigns that.
|
If @var{value} is defined, first assigns that.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
|
|
@ -1408,6 +1408,15 @@ int arm11_write_memory_inner(struct target_s *target, uint32_t address, uint32_t
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
/* burst writes are not used for single words as those may well be
|
||||||
|
* reset init script writes.
|
||||||
|
*
|
||||||
|
* The other advantage is that as burst writes are default, we'll
|
||||||
|
* now exercise both burst and non-burst code paths with the
|
||||||
|
* default settings, increasing code coverage.
|
||||||
|
*/
|
||||||
|
bool burst = arm11_config_memwrite_burst && (count > 1);
|
||||||
|
|
||||||
switch (size)
|
switch (size)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1463,7 +1472,7 @@ int arm11_write_memory_inner(struct target_s *target, uint32_t address, uint32_t
|
||||||
/** \todo TODO: buffer cast to uint32_t* causes alignment warnings */
|
/** \todo TODO: buffer cast to uint32_t* causes alignment warnings */
|
||||||
uint32_t *words = (uint32_t*)buffer;
|
uint32_t *words = (uint32_t*)buffer;
|
||||||
|
|
||||||
if (!arm11_config_memwrite_burst)
|
if (!burst)
|
||||||
{
|
{
|
||||||
/* STC p14,c5,[R0],#4 */
|
/* STC p14,c5,[R0],#4 */
|
||||||
/* STC p14,c5,[R0]*/
|
/* STC p14,c5,[R0]*/
|
||||||
|
@ -1501,7 +1510,7 @@ int arm11_write_memory_inner(struct target_s *target, uint32_t address, uint32_t
|
||||||
(unsigned) (address + size * count),
|
(unsigned) (address + size * count),
|
||||||
(unsigned) r0);
|
(unsigned) r0);
|
||||||
|
|
||||||
if (arm11_config_memwrite_burst)
|
if (burst)
|
||||||
LOG_ERROR("use 'arm11 memwrite burst disable' to disable fast burst mode");
|
LOG_ERROR("use 'arm11 memwrite burst disable' to disable fast burst mode");
|
||||||
|
|
||||||
if (arm11_config_memwrite_error_fatal)
|
if (arm11_config_memwrite_error_fatal)
|
||||||
|
|
Loading…
Reference in New Issue