Notice: We have migrated to GitLab launching 2024-05-01 see here: https://gitlab.rtems.org/

#2774 assigned defect

RTEMS loaded by u-boot with dcache, icache and mmu enable does not boot.

Reported by: Chris Johns Owned by: Needs Funding
Priority: normal Milestone: Indefinite
Component: bsps Version: 5
Severity: normal Keywords:
Cc: Blocked By:
Blocking:

Description

The arm/xilinx_zynq_zedboard does not boot with a recent u-boot built from git (b2f1858455e99a91aeafe59ac73c6c047106d5e8). I have tracked the issue down to the MMU initialization and I am wondering if there are a few issues we need to look at closer. I think RTEMS could handle this case a little better and this would improve the ARM support making it more resilient to how it is run.

I have the code booting and running and these are the changes.

  1. In arm_cp15_start_setup_translation_table in arm-cp15-start.h I moved the arm_cp15_set_translation_table_base to after the table is created. While this is not that important I did find when looking into this problem it improved things when I had a call to arm_cp15_data_cache_clean_all_levels() before setting the table base. I am not sure the cache clear is needed.
  1. In the zynq_setup_mmu_and_cache I detect the MMU being enabled and if enabled I:
  uint32_t ctrl = arm_cp15_get_control();

  if ((ctrl & ARM_CP15_CTRL_M) != 0) {
    arm_cp15_data_cache_clean_all_levels();
    ctrl &= ~(ARM_CP15_CTRL_C | ARM_CP15_CTRL_I | ARM_CP15_CTRL_M);
    arm_cp15_set_control(ctrl);
    arm_cp15_tlb_invalidate();
  }

This lets ticker run.

Change History (1)

comment:1 Changed on 02/15/17 at 14:20:42 by Sebastian Huber

Milestone: 4.12Indefinite
Owner: set to Needs Funding
Status: newassigned
Note: See TracTickets for help on using tickets.