Re: [PATCH] Code refactor: Changes to memory management initialization
On Thu, Jul 9, 2015 at 9:53 AM, wrote: > From: Rohini Kulkarni > > --- > c/src/lib/libbsp/arm/raspberrypi/Makefile.am |1 + > c/src/lib/libbsp/arm/raspberrypi/include/bsp.h | 14 > .../libbsp/arm/raspberrypi/startup/bspstarthooks.c |8 ++--- > .../libbsp/arm/raspberrypi/startup/bspstartmmu.c | 34 > > c/src/lib/libbsp/arm/shared/mminit.c | 20 > c/src/lib/libbsp/shared/include/mm.h |6 +++- > 6 files changed, 65 insertions(+), 18 deletions(-) > create mode 100644 c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c > > diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am > b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am > index d59263c..74545d6 100644 > --- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am > +++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am > @@ -131,6 +131,7 @@ libbsp_a_CPPFLAGS += > -I$(srcdir)/../../../libcpu/arm/shared/include > > # Start hooks > libbsp_a_SOURCES += startup/bspstarthooks.c > +libbsp_a_SOURCES += startup/bspstartmmu.c > > # LIBMM > libbsp_a_SOURCES += startup/mm_config_table.c > diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h > b/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h > index c05a410..410d9ab 100644 > --- a/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h > +++ b/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h > @@ -33,12 +33,6 @@ extern "C" { > > #define BSP_FEATURE_IRQ_EXTENSION > > -#ifdef __cplusplus > -} > -#endif /* __cplusplus */ > - > -#endif /* LIBBSP_ARM_RASPBERRYPI_BSP_H */ > - > /** > * @defgroup arm_raspberrypi Raspberry Pi Support > * > @@ -47,3 +41,11 @@ extern "C" { > * @brief Raspberry Pi support package > * > */ > + > +void raspberrypi_setup_mmu_and_cache(void); > + > +#ifdef __cplusplus > +} > +#endif /* __cplusplus */ > + > +#endif /* LIBBSP_ARM_RASPBERRYPI_BSP_H */ > diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c > b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c > index 047c8ad..107649f 100644 > --- a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c > +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c > @@ -26,15 +26,15 @@ > #include > #include > #include > +#include > > void BSP_START_TEXT_SECTION bsp_start_hook_0(void) > -{ > +{ > } > > - > void BSP_START_TEXT_SECTION bsp_start_hook_1(void) > { >bsp_start_copy_sections(); > - bsp_memory_management_initialize(); > + raspberrypi_setup_mmu_and_cache(); >bsp_start_clear_bss(); > -} > +} > \ No newline at end of file > diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c > b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c > new file mode 100644 > index 000..3741070 > --- /dev/null > +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c > @@ -0,0 +1,34 @@ > +#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +void raspberrypi_setup_mmu_and_cache(void) This function should be in the start text section. Also, you could make it static and put it into the bspstarthooks.c file. > +{ > + uint32_t bsp_initial_mmu_ctrl_set; > + uint32_t bsp_initial_mmu_ctrl_clear; > + uint32_t domain_set; > + > +#if (BSP_IS_RPI2 == 1) > + /* Enable SMP in auxiliary control */ > + uint32_t actlr = arm_cp15_get_auxiliary_control(); > + actlr |= ARM_CORTEX_A9_ACTL_SMP; > + arm_cp15_set_auxiliary_control(actlr); > + bsp_initial_mmu_ctrl_clear = ARM_CP15_CTRL_A; > + bsp_initial_mmu_ctrl_set = ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z; > +#else > + bsp_initial_mmu_ctrl_clear = 0; > + bsp_initial_mmu_ctrl_set = ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | > ARM_CP15_CTRL_XP; Check for line length > 80 characters. > +#endif > + domain_set = ARM_MMU_DEFAULT_CLIENT_DOMAIN; > + > + bsp_memory_management_initialize( > +bsp_initial_mmu_ctrl_set, > +bsp_initial_mmu_ctrl_clear, > +domain_set Just pass ARM_MMU_DEFAULT_CLIENT_DOMAIN directly here. > + ); > +} > \ No newline at end of file > diff --git a/c/src/lib/libbsp/arm/shared/mminit.c > b/c/src/lib/libbsp/arm/shared/mminit.c > index acfbfc0..b477482 100644 > --- a/c/src/lib/libbsp/arm/shared/mminit.c > +++ b/c/src/lib/libbsp/arm/shared/mminit.c > @@ -11,19 +11,25 @@ > #include > #include > #include > +#include > #include > > -BSP_START_TEXT_SECTION void bsp_memory_management_initialize(void) > -{ > - uint32_t ctrl = arm_cp15_get_control(); > - > - ctrl |= ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | ARM_CP15_CTRL_XP; > > +BSP_START_TEXT_SECTION void bsp_memory_management_initialize( > + uint32_t bsp_initial_mmu_ctrl_set, > + uint32_t bsp_initial_mmu_ctrl_clear, > + uint32_t domain_set > +) > +{ > + uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache( > +bsp_initial_mmu_ctrl_clear, > +bsp_initial_mmu_ctrl_set ); Put the closing ); on a line by itself, like below. > + >arm_cp15_start_setup_translation_table_and_en
Re: [PATCH] Code refactor: Changes to memory management initialization
On 12/07/15 18:58, Rohini Kulkarni wrote: diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c new file mode 100644 index 000..3741070 --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c @@ -0,0 +1,34 @@ +#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION + +#include +#include +#include +#include +#include +#include + +void raspberrypi_setup_mmu_and_cache(void) +{ + uint32_t bsp_initial_mmu_ctrl_set; + uint32_t bsp_initial_mmu_ctrl_clear; + uint32_t domain_set; Why is this a global visible function? Why do we need the domain_set parameter? -- 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.hu...@embedded-brains.de PGP : Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. ___ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel
Re: [PATCH] Code refactor: Changes to memory management initialization
Hi, Please review the changes. I will work on the suggestions and make the required modifications. Thanks. On 9 Jul 2015 19:24, wrote: From: Rohini Kulkarni --- c/src/lib/libbsp/arm/raspberrypi/Makefile.am |1 + c/src/lib/libbsp/arm/raspberrypi/include/bsp.h | 14 .../libbsp/arm/raspberrypi/startup/bspstarthooks.c |8 ++--- .../libbsp/arm/raspberrypi/startup/bspstartmmu.c | 34 c/src/lib/libbsp/arm/shared/mminit.c | 20 c/src/lib/libbsp/shared/include/mm.h |6 +++- 6 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am index d59263c..74545d6 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am +++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am @@ -131,6 +131,7 @@ libbsp_a_CPPFLAGS += -I$(srcdir)/../../../libcpu/arm/shared/include # Start hooks libbsp_a_SOURCES += startup/bspstarthooks.c +libbsp_a_SOURCES += startup/bspstartmmu.c # LIBMM libbsp_a_SOURCES += startup/mm_config_table.c diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h b/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h index c05a410..410d9ab 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h @@ -33,12 +33,6 @@ extern "C" { #define BSP_FEATURE_IRQ_EXTENSION -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* LIBBSP_ARM_RASPBERRYPI_BSP_H */ - /** * @defgroup arm_raspberrypi Raspberry Pi Support * @@ -47,3 +41,11 @@ extern "C" { * @brief Raspberry Pi support package * */ + +void raspberrypi_setup_mmu_and_cache(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_RASPBERRYPI_BSP_H */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c index 047c8ad..107649f 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c @@ -26,15 +26,15 @@ #include #include #include +#include void BSP_START_TEXT_SECTION bsp_start_hook_0(void) -{ +{ } - void BSP_START_TEXT_SECTION bsp_start_hook_1(void) { bsp_start_copy_sections(); - bsp_memory_management_initialize(); + raspberrypi_setup_mmu_and_cache(); bsp_start_clear_bss(); -} +} \ No newline at end of file diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c new file mode 100644 index 000..3741070 --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c @@ -0,0 +1,34 @@ +#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION + +#include +#include +#include +#include +#include +#include + +void raspberrypi_setup_mmu_and_cache(void) +{ + uint32_t bsp_initial_mmu_ctrl_set; + uint32_t bsp_initial_mmu_ctrl_clear; + uint32_t domain_set; + +#if (BSP_IS_RPI2 == 1) + /* Enable SMP in auxiliary control */ + uint32_t actlr = arm_cp15_get_auxiliary_control(); + actlr |= ARM_CORTEX_A9_ACTL_SMP; + arm_cp15_set_auxiliary_control(actlr); + bsp_initial_mmu_ctrl_clear = ARM_CP15_CTRL_A; + bsp_initial_mmu_ctrl_set = ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z; +#else + bsp_initial_mmu_ctrl_clear = 0; + bsp_initial_mmu_ctrl_set = ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | ARM_CP15_CTRL_XP; +#endif + domain_set = ARM_MMU_DEFAULT_CLIENT_DOMAIN; + + bsp_memory_management_initialize( +bsp_initial_mmu_ctrl_set, +bsp_initial_mmu_ctrl_clear, +domain_set + ); +} \ No newline at end of file diff --git a/c/src/lib/libbsp/arm/shared/mminit.c b/c/src/lib/libbsp/arm/shared/mminit.c index acfbfc0..b477482 100644 --- a/c/src/lib/libbsp/arm/shared/mminit.c +++ b/c/src/lib/libbsp/arm/shared/mminit.c @@ -11,19 +11,25 @@ #include #include #include +#include #include -BSP_START_TEXT_SECTION void bsp_memory_management_initialize(void) -{ - uint32_t ctrl = arm_cp15_get_control(); - - ctrl |= ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | ARM_CP15_CTRL_XP; +BSP_START_TEXT_SECTION void bsp_memory_management_initialize( + uint32_t bsp_initial_mmu_ctrl_set, + uint32_t bsp_initial_mmu_ctrl_clear, + uint32_t domain_set +) +{ + uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache( +bsp_initial_mmu_ctrl_clear, +bsp_initial_mmu_ctrl_set ); + arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache( ctrl, (uint32_t *) bsp_translation_table_base, -ARM_MMU_DEFAULT_CLIENT_DOMAIN, +domain_set, &arm_cp15_start_mmu_config_table[0], arm_cp15_start_mmu_config_table_size ); -} +} \ No newline at end of file diff --git a/c/src/lib/libbsp/shared/include/mm.h b/c/src/lib/libbsp/shared/include/mm.h index 2152f68..49ee472 100644 --- a/c/src/lib/libbsp/shared/include/mm.h +++ b/c/src/lib/libbsp/shared/include/mm.h @@ -33,7 +33,11 @@ exter
[PATCH] Code refactor: Changes to memory management initialization
From: Rohini Kulkarni --- c/src/lib/libbsp/arm/raspberrypi/Makefile.am |1 + c/src/lib/libbsp/arm/raspberrypi/include/bsp.h | 14 .../libbsp/arm/raspberrypi/startup/bspstarthooks.c |8 ++--- .../libbsp/arm/raspberrypi/startup/bspstartmmu.c | 34 c/src/lib/libbsp/arm/shared/mminit.c | 20 c/src/lib/libbsp/shared/include/mm.h |6 +++- 6 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am index d59263c..74545d6 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am +++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am @@ -131,6 +131,7 @@ libbsp_a_CPPFLAGS += -I$(srcdir)/../../../libcpu/arm/shared/include # Start hooks libbsp_a_SOURCES += startup/bspstarthooks.c +libbsp_a_SOURCES += startup/bspstartmmu.c # LIBMM libbsp_a_SOURCES += startup/mm_config_table.c diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h b/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h index c05a410..410d9ab 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/bsp.h @@ -33,12 +33,6 @@ extern "C" { #define BSP_FEATURE_IRQ_EXTENSION -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* LIBBSP_ARM_RASPBERRYPI_BSP_H */ - /** * @defgroup arm_raspberrypi Raspberry Pi Support * @@ -47,3 +41,11 @@ extern "C" { * @brief Raspberry Pi support package * */ + +void raspberrypi_setup_mmu_and_cache(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_RASPBERRYPI_BSP_H */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c index 047c8ad..107649f 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstarthooks.c @@ -26,15 +26,15 @@ #include #include #include +#include void BSP_START_TEXT_SECTION bsp_start_hook_0(void) -{ +{ } - void BSP_START_TEXT_SECTION bsp_start_hook_1(void) { bsp_start_copy_sections(); - bsp_memory_management_initialize(); + raspberrypi_setup_mmu_and_cache(); bsp_start_clear_bss(); -} +} \ No newline at end of file diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c new file mode 100644 index 000..3741070 --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspstartmmu.c @@ -0,0 +1,34 @@ +#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION + +#include +#include +#include +#include +#include +#include + +void raspberrypi_setup_mmu_and_cache(void) +{ + uint32_t bsp_initial_mmu_ctrl_set; + uint32_t bsp_initial_mmu_ctrl_clear; + uint32_t domain_set; + +#if (BSP_IS_RPI2 == 1) + /* Enable SMP in auxiliary control */ + uint32_t actlr = arm_cp15_get_auxiliary_control(); + actlr |= ARM_CORTEX_A9_ACTL_SMP; + arm_cp15_set_auxiliary_control(actlr); + bsp_initial_mmu_ctrl_clear = ARM_CP15_CTRL_A; + bsp_initial_mmu_ctrl_set = ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z; +#else + bsp_initial_mmu_ctrl_clear = 0; + bsp_initial_mmu_ctrl_set = ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | ARM_CP15_CTRL_XP; +#endif + domain_set = ARM_MMU_DEFAULT_CLIENT_DOMAIN; + + bsp_memory_management_initialize( +bsp_initial_mmu_ctrl_set, +bsp_initial_mmu_ctrl_clear, +domain_set + ); +} \ No newline at end of file diff --git a/c/src/lib/libbsp/arm/shared/mminit.c b/c/src/lib/libbsp/arm/shared/mminit.c index acfbfc0..b477482 100644 --- a/c/src/lib/libbsp/arm/shared/mminit.c +++ b/c/src/lib/libbsp/arm/shared/mminit.c @@ -11,19 +11,25 @@ #include #include #include +#include #include -BSP_START_TEXT_SECTION void bsp_memory_management_initialize(void) -{ - uint32_t ctrl = arm_cp15_get_control(); - - ctrl |= ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_S | ARM_CP15_CTRL_XP; +BSP_START_TEXT_SECTION void bsp_memory_management_initialize( + uint32_t bsp_initial_mmu_ctrl_set, + uint32_t bsp_initial_mmu_ctrl_clear, + uint32_t domain_set +) +{ + uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache( +bsp_initial_mmu_ctrl_clear, +bsp_initial_mmu_ctrl_set ); + arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache( ctrl, (uint32_t *) bsp_translation_table_base, -ARM_MMU_DEFAULT_CLIENT_DOMAIN, +domain_set, &arm_cp15_start_mmu_config_table[0], arm_cp15_start_mmu_config_table_size ); -} +} \ No newline at end of file diff --git a/c/src/lib/libbsp/shared/include/mm.h b/c/src/lib/libbsp/shared/include/mm.h index 2152f68..49ee472 100644 --- a/c/src/lib/libbsp/shared/include/mm.h +++ b/c/src/lib/libbsp/shared/include/mm.h @@ -33,7 +33,11 @@ extern "C" { * @brief MM Support Package */ -void bsp_memory_management_initialize(void); +void bsp_memory_