bootloader_efuse_esp32.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * SPDX-FileCopyrightText: 2019-2021 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "bootloader_common.h"
  7. #include "bootloader_clock.h"
  8. #include "soc/efuse_reg.h"
  9. #include "soc/syscon_reg.h"
  10. uint8_t bootloader_common_get_chip_revision(void)
  11. {
  12. uint8_t eco_bit0, eco_bit1, eco_bit2;
  13. eco_bit0 = (REG_READ(EFUSE_BLK0_RDATA3_REG) & 0xF000) >> 15;
  14. eco_bit1 = (REG_READ(EFUSE_BLK0_RDATA5_REG) & 0x100000) >> 20;
  15. eco_bit2 = (REG_READ(SYSCON_DATE_REG) & 0x80000000) >> 31;
  16. uint32_t combine_value = (eco_bit2 << 2) | (eco_bit1 << 1) | eco_bit0;
  17. uint8_t chip_ver = 0;
  18. switch (combine_value) {
  19. case 0:
  20. chip_ver = 0;
  21. break;
  22. case 1:
  23. chip_ver = 1;
  24. break;
  25. case 3:
  26. chip_ver = 2;
  27. break;
  28. #if CONFIG_IDF_ENV_FPGA
  29. case 4: /* Empty efuses, but SYSCON_DATE_REG bit is set */
  30. chip_ver = 3;
  31. break;
  32. #endif
  33. case 7:
  34. chip_ver = 3;
  35. break;
  36. default:
  37. chip_ver = 0;
  38. break;
  39. }
  40. return chip_ver;
  41. }
  42. uint32_t bootloader_common_get_chip_ver_pkg(void)
  43. {
  44. uint32_t pkg_version = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_PKG);
  45. uint32_t pkg_version_4bit = REG_GET_FIELD(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_VER_PKG_4BIT);
  46. return (pkg_version_4bit << 3) | pkg_version;
  47. }
  48. int bootloader_clock_get_rated_freq_mhz()
  49. {
  50. //Check if ESP32 is rated for a CPU frequency of 160MHz only
  51. if (REG_GET_BIT(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_CPU_FREQ_RATED) &&
  52. REG_GET_BIT(EFUSE_BLK0_RDATA3_REG, EFUSE_RD_CHIP_CPU_FREQ_LOW)) {
  53. return 160;
  54. }
  55. return 240;
  56. }