fsl_flexram_allocate.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright 2019-2021 NXP
  3. * All rights reserved.
  4. *
  5. *
  6. * SPDX-License-Identifier: BSD-3-Clause
  7. */
  8. #include "fsl_flexram_allocate.h"
  9. /*******************************************************************************
  10. * Definitions
  11. ******************************************************************************/
  12. /* Component ID definition, used by tools. */
  13. #ifndef FSL_COMPONENT_ID
  14. #define FSL_COMPONENT_ID "driver.soc_flexram_allocate"
  15. #endif
  16. /*******************************************************************************
  17. * Prototypes
  18. ******************************************************************************/
  19. /*******************************************************************************
  20. * Variables
  21. ******************************************************************************/
  22. /*******************************************************************************
  23. * Code
  24. ******************************************************************************/
  25. /*!
  26. * brief FLEXRAM allocate on-chip ram for OCRAM,ITCM,DTCM
  27. * This function is independent of FLEXRAM_Init, it can be called directly if ram re-allocate
  28. * is needed.
  29. * param config allocate configuration.
  30. * retval kStatus_InvalidArgument the argument is invalid
  31. * kStatus_Success allocate success
  32. */
  33. status_t FLEXRAM_AllocateRam(flexram_allocate_ram_t *config)
  34. {
  35. assert(config != NULL);
  36. uint8_t dtcmBankNum = config->dtcmBankNum;
  37. uint8_t itcmBankNum = config->itcmBankNum;
  38. uint8_t ocramBankNum = config->ocramBankNum;
  39. uint8_t i = 0U;
  40. uint32_t bankCfg = 0U;
  41. status_t status = kStatus_Success;
  42. /* check the arguments */
  43. if ((uint8_t)FSL_FEATURE_FLEXRAM_INTERNAL_RAM_TOTAL_BANK_NUMBERS < (dtcmBankNum + itcmBankNum + ocramBankNum))
  44. {
  45. status = kStatus_InvalidArgument;
  46. }
  47. else
  48. {
  49. /* flexram bank config value */
  50. for (i = 0U; i < (uint8_t)FSL_FEATURE_FLEXRAM_INTERNAL_RAM_TOTAL_BANK_NUMBERS; i++)
  51. {
  52. if (i < ocramBankNum)
  53. {
  54. bankCfg |= ((uint32_t)kFLEXRAM_BankOCRAM) << (i * 2U);
  55. continue;
  56. }
  57. if (i < (dtcmBankNum + ocramBankNum))
  58. {
  59. bankCfg |= ((uint32_t)kFLEXRAM_BankDTCM) << (i * 2U);
  60. continue;
  61. }
  62. if (i < (dtcmBankNum + ocramBankNum + itcmBankNum))
  63. {
  64. bankCfg |= ((uint32_t)kFLEXRAM_BankITCM) << (i * 2U);
  65. continue;
  66. }
  67. }
  68. IOMUXC_GPR->GPR17 = bankCfg;
  69. /* select ram allocate source from FLEXRAM_BANK_CFG */
  70. FLEXRAM_SetAllocateRamSrc(kFLEXRAM_BankAllocateThroughBankCfg);
  71. }
  72. return status;
  73. }