diff options
author | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2016-07-02 18:52:44 +0200 |
---|---|---|
committer | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2016-07-04 15:55:57 +0200 |
commit | 2d5902d6aedb45ea4139a7e291f7edebe8b5fc18 (patch) | |
tree | 6f750c1472cbac9e5f25776f189924cd2c9ab77d /c/src/lib/libbsp/arm/raspberrypi | |
parent | score/arm: Ensure that copile time alignment is 64 bytes for Cortex-A multilib. (diff) | |
download | rtems-2d5902d6aedb45ea4139a7e291f7edebe8b5fc18.tar.bz2 |
arm/raspberrypi: update VideoCore cache flush workaround to work on RPi2.
The arm_cp15_data_cache_clean_and_invalidate leads to hang on RPi2,
clean by individual lines works on RPi1 and RPi2.
Diffstat (limited to 'c/src/lib/libbsp/arm/raspberrypi')
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/vc.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c index 7bc17ba797..0bec0c2dab 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c @@ -73,9 +73,20 @@ static inline void bcm2835_mailbox_buffer_flush_and_invalidate( */ rtems_cache_flush_multiple_data_lines( buf, size ); rtems_cache_invalidate_multiple_data_lines( buf, size ); -#else - /* Flush complete data cache */ +#elif 0 + /* Flush complete data cache, does not work on RPi2 for some reason */ arm_cp15_data_cache_clean_and_invalidate(); +#else + /* + * This is temporal workaround for missing cache meanager + * which works on RPi2 + */ + size += (uintptr_t)buf & ~63; + size = (size + 63) & ~63; + while ( size ) { + size -= 32; + arm_cp15_data_cache_clean_and_invalidate_line(buf); + } #endif } } |