[PATCH] Modify raspberrypi mm_config_table to map GPIO and registers.

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Oct 15 06:59:00 UTC 2013


On 2013-10-14 18:16, Hesham Moustafa wrote:
>
> On Mon, Oct 14, 2013 at 6:03 PM, Gedare Bloom <gedare at rtems.org
> <mailto:gedare at rtems.org>> wrote:
>
>     On Mon, Oct 14, 2013 at 11:54 AM, Hesham Moustafa
>     <heshamelmatary at gmail.com <mailto:heshamelmatary at gmail.com>> wrote:
>      >
>      >
>      >
>      > On Mon, Oct 14, 2013 at 4:02 PM, Sebastian Huber
>      > <sebastian.huber at embedded-brains.de
>     <mailto:sebastian.huber at embedded-brains.de>> wrote:
>      >>
>      >> On 2013-10-14 15:34, Hesham AL-Matary wrote:
>      >>>
>      >>> diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
>      >>> b/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
>      >>> index 5436a76..2b748b2 100644
>      >>> --- a/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
>      >>> +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
>      >>> @@ -42,7 +42,7 @@ bsp_mm_config_table[] = {
>      >>>     }, {
>      >>>       .begin = (uint32_t) bsp_section_text_begin,
>      >>>       .end = (uint32_t) bsp_section_text_end,
>      >>> -    .flags = ARMV7_MMU_CODE_CACHED
>      >>> +    .flags = ARMV7_MMU_READ_WRITE
>      >>
>      >>
>      >> What is the problem with the cache?  Did the cache previously work?
>      >
>      > There is a problem with applying a Read-Only permissions in general to this
>      > area for RaspberryPi BSP.
>     Any idea why? Letting the text region be read-write is overly
>     permissive, as RTEMS does not generally use self-modifying code.
>
> Not sure about the reason, I had to test (i.e., change attributes) every entry in
>   the table and finally found that this section causes the problem. I could not use
> other debugging methods because the BSP is new and lacks a driver to remotely
> debug, and I could not also use printf as it's a startup code. Maybe this section
> overlaps other section (as its minimum size is 1 MB and it's aligned)
> which is written later (e.g., vector table area). ticker.exe only works with this
> modification.

You can add a gap between the read-only and read-write sections with the

bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? 
bsp_section_rwbarrier_align : 1M;

symbol which may be provided by the BSP specific linker command file.

You can also use Qemu to debug this problem.

>
>      >>
>      >>
>      >>
>      >>>     }, {
>      >>>       .begin = (uint32_t) bsp_section_rodata_begin,
>      >>>       .end = (uint32_t) bsp_section_rodata_end,
>      >>> @@ -63,8 +63,12 @@ bsp_mm_config_table[] = {
>      >>>       .begin = (uint32_t) bsp_section_stack_begin,
>      >>>       .end = (uint32_t) bsp_section_stack_end,
>      >>>       .flags = MMU_DATA_READ_WRITE
>      >>> +  }, {
>      >>> +    .begin = 0x20000000,
>      >>> +    .end = 0x20FFFFFF,
>      >>> +    .flags = ARMV7_MMU_DATA_READ_WRITE
>      >>
>      >>
>      >> What is this for an area?
>      >
>      > It's for Raspberry GPIO pins and other registers (defined at
>      > raspbberrypi.h).

Is this the correct setting for devices?

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list