[PATCH] Code refactor: Changes to memory management initialization

Gedare Bloom gedare at gwu.edu
Mon Jul 13 15:50:47 UTC 2015


On Thu, Jul 9, 2015 at 9:53 AM,  <krohini1593 at gmail.com> wrote:
> From: Rohini Kulkarni <krohini1593 at gmail.com>
>
> ---
>  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 <bsp/start.h>
>  #include <bsp/raspberrypi.h>
>  #include <bsp/mm.h>
> +#include <bsp.h>
>
>  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 0000000..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 <bsp/start.h>
> +#include <bsp/arm-cp15-start.h>
> +#include <bsp/linker-symbols.h>
> +#include <libcpu/arm-cp15.h>
> +#include <bsp/mm.h>
> +#include <bsp.h>
> +
> +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 <bsp/start.h>
>  #include <bsp/arm-cp15-start.h>
>  #include <bsp/linker-symbols.h>
> +#include <libcpu/arm-cp15.h>
>  #include <bsp/mm.h>
>
> -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_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_management_initialize(
> +  uint32_t bsp_initial_mmu_ctrl_set,
> +  uint32_t bsp_initial_mmu_ctrl_clear,
> +  uint32_t domain_set
> +);
If other BSPs can use this function now and share the code, you should
refactor them to do so. If they all use the
ARM_MMU_DEFAULT_CLIENT_DOMAIN, you can get rid of the domain_set
parameter.

>
>  #ifdef __cplusplus
>  }
> --
> 1.7.9.5
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list