armv7m_mpu.h 993 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * (C) Copyright 2017
  3. * Vikas Manocha, ST Micoelectronics, vikas.manocha@st.com.
  4. *
  5. * SPDX-License-Identifier: GPL-2.0+
  6. */
  7. enum region_number {
  8. REGION_0 = 0,
  9. REGION_1,
  10. REGION_2,
  11. REGION_3,
  12. REGION_4,
  13. REGION_5,
  14. REGION_6,
  15. REGION_7,
  16. };
  17. enum ap {
  18. NO_ACCESS = 0,
  19. PRIV_RW_USR_NO,
  20. PRIV_RW_USR_RO,
  21. PRIV_RW_USR_RW,
  22. UNPREDICTABLE,
  23. PRIV_RO_USR_NO,
  24. PRIV_RO_USR_RO,
  25. };
  26. enum mr_attr {
  27. STRONG_ORDER = 0,
  28. SHARED_WRITE_BUFFERED,
  29. O_I_WT_NO_WR_ALLOC,
  30. O_I_WB_NO_WR_ALLOC,
  31. O_I_NON_CACHEABLE,
  32. O_I_WB_RD_WR_ALLOC,
  33. DEVICE_NON_SHARED,
  34. };
  35. enum size {
  36. REGION_8MB = 22,
  37. REGION_16MB,
  38. REGION_32MB,
  39. REGION_64MB,
  40. REGION_128MB,
  41. REGION_256MB,
  42. REGION_512MB,
  43. REGION_1GB,
  44. REGION_2GB,
  45. REGION_4GB,
  46. };
  47. enum xn {
  48. XN_DIS = 0,
  49. XN_EN,
  50. };
  51. struct mpu_region_config {
  52. uint32_t start_addr;
  53. enum region_number region_no;
  54. enum xn xn;
  55. enum ap ap;
  56. enum mr_attr mr_attr;
  57. enum size reg_size;
  58. };
  59. void disable_mpu(void);
  60. void enable_mpu(void);
  61. void mpu_config(struct mpu_region_config *reg_config);