[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