cancel
Showing results for 
Search instead for 
Did you mean: 

MX 10 and H563: Generating bad LL code for MPU region ?

Nikita91
Lead II

When I generate code for the MPU region 0 wit HAL I get:

void MPU_Config(void)
{
  MPU_Region_InitTypeDef MPU_InitStruct = {0};
  MPU_Attributes_InitTypeDef MPU_AttributesInit = {0};

  /* Disables the MPU */
  HAL_MPU_Disable();

  /** Initializes and configures the Region and the memory to be protected
  */
  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  MPU_InitStruct.BaseAddress = 0x08fff800;
  MPU_InitStruct.LimitAddress = 0x08fff900;
  MPU_InitStruct.AttributesIndex = MPU_ATTRIBUTES_NUMBER0;
  MPU_InitStruct.AccessPermission = MPU_REGION_ALL_RO;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_OUTER_SHAREABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);
  MPU_AttributesInit.Number = MPU_REGION_NUMBER0;
  MPU_AttributesInit.Attributes = MPU_DEVICE_nGnRnE | MPU_WRITE_THROUGH
                              | MPU_TRANSIENT | MPU_NO_ALLOCATE;

  HAL_MPU_ConfigMemoryAttributes(&MPU_AttributesInit);
  /* Enables the MPU */
  HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}

OK.

With the exact same configuration, when I switch to LL I get:

void MPU_Config(void)
{
  /* Disables the MPU */
  LL_MPU_Disable();

  /** Initializes and configures the Region and the memory to be protected
  */
  LL_MPU_ConfigRegion(LL_MPU_REGION_NUMBER0, LL_MPU_INSTRUCTION_ACCESS_DISABLE, LL_MPU_ATTRIBUTES_NUMBER0, 0x08fff800, 0x08fff900);
  LL_MPU_EnableRegion(LL_MPU_REGION_NUMBER0);
  LL_MPU_ConfigAttributes(LL_MPU_ATTRIBUTES_NUMBER0, LL_MPU_DEVICE_nGnRnE | LL_MPU_WRITE_THROUGH
                              | LL_MPU_TRANSIENT | LL_MPU_NO_ALLOCATE);
  /* Enables the MPU */
  LL_MPU_Enable(LL_MPU_CTRL_PRIVILEGED_DEFAULT);
}

I think there are not equivalent. There is a missing :

 | LL_MPU_REGION_ALL_RO | LL_MPU_ACCESS_OUTER_SHAREABLE

in the 2nd parameter of LL_MPU_ConfigRegion().

Is this true?

 

1 ACCEPTED SOLUTION

Accepted Solutions
Semer CHERNI
ST Employee

Hello @Nikita91 

First let me thank you for posting.

In fact you are right, I made the test adding the missing code, and only then I get the same MPU registers configuration done by the HAL generated code.

The issue is raised internally for analysis and future fix (169120: this is an internal ticket number)

KR,
Semer.

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

View solution in original post

1 REPLY 1
Semer CHERNI
ST Employee

Hello @Nikita91 

First let me thank you for posting.

In fact you are right, I made the test adding the missing code, and only then I get the same MPU registers configuration done by the HAL generated code.

The issue is raised internally for analysis and future fix (169120: this is an internal ticket number)

KR,
Semer.

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.