mv_ddr_sys_env_lib.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) Marvell International Ltd. and its affiliates
  4. */
  5. #ifndef _MV_DDR_SYS_ENV_LIB_H
  6. #define _MV_DDR_SYS_ENV_LIB_H
  7. #include "ddr_ml_wrapper.h"
  8. /* device revision */
  9. #define DEV_ID_REG 0x18238
  10. #define DEV_VERSION_ID_REG 0x1823c
  11. #define REVISON_ID_OFFS 8
  12. #define REVISON_ID_MASK 0xf00
  13. #define MPP_CONTROL_REG(id) (0x18000 + (id * 4))
  14. #define GPP_DATA_OUT_REG(grp) (MV_GPP_REGS_BASE(grp) + 0x00)
  15. #define GPP_DATA_OUT_EN_REG(grp) (MV_GPP_REGS_BASE(grp) + 0x04)
  16. #define GPP_DATA_IN_REG(grp) (MV_GPP_REGS_BASE(grp) + 0x10)
  17. #define MV_GPP_REGS_BASE(unit) (0x18100 + ((unit) * 0x40))
  18. #define MPP_REG_NUM(GPIO_NUM) (GPIO_NUM / 8)
  19. #define MPP_MASK(GPIO_NUM) (0xf << 4 * (GPIO_NUM - \
  20. (MPP_REG_NUM(GPIO_NUM) * 8)));
  21. #define GPP_REG_NUM(GPIO_NUM) (GPIO_NUM / 32)
  22. #define GPP_MASK(GPIO_NUM) (1 << GPIO_NUM % 32)
  23. /* device ID */
  24. /* Board ID numbers */
  25. #define MARVELL_BOARD_ID_MASK 0x10
  26. /* Customer boards for A38x */
  27. #define A38X_CUSTOMER_BOARD_ID_BASE 0x0
  28. #define A38X_CUSTOMER_BOARD_ID0 (A38X_CUSTOMER_BOARD_ID_BASE + 0)
  29. #define A38X_CUSTOMER_BOARD_ID1 (A38X_CUSTOMER_BOARD_ID_BASE + 1)
  30. #define A38X_MV_MAX_CUSTOMER_BOARD_ID (A38X_CUSTOMER_BOARD_ID_BASE + 2)
  31. #define A38X_MV_CUSTOMER_BOARD_NUM (A38X_MV_MAX_CUSTOMER_BOARD_ID - \
  32. A38X_CUSTOMER_BOARD_ID_BASE)
  33. /* Marvell boards for A38x */
  34. #define A38X_MARVELL_BOARD_ID_BASE 0x10
  35. #define RD_NAS_68XX_ID (A38X_MARVELL_BOARD_ID_BASE + 0)
  36. #define DB_68XX_ID (A38X_MARVELL_BOARD_ID_BASE + 1)
  37. #define RD_AP_68XX_ID (A38X_MARVELL_BOARD_ID_BASE + 2)
  38. #define DB_AP_68XX_ID (A38X_MARVELL_BOARD_ID_BASE + 3)
  39. #define DB_GP_68XX_ID (A38X_MARVELL_BOARD_ID_BASE + 4)
  40. #define DB_BP_6821_ID (A38X_MARVELL_BOARD_ID_BASE + 5)
  41. #define DB_AMC_6820_ID (A38X_MARVELL_BOARD_ID_BASE + 6)
  42. #define A38X_MV_MAX_MARVELL_BOARD_ID (A38X_MARVELL_BOARD_ID_BASE + 7)
  43. #define A38X_MV_MARVELL_BOARD_NUM (A38X_MV_MAX_MARVELL_BOARD_ID - \
  44. A38X_MARVELL_BOARD_ID_BASE)
  45. /* Marvell boards for A39x */
  46. #define A39X_MARVELL_BOARD_ID_BASE 0x30
  47. #define A39X_DB_69XX_ID (A39X_MARVELL_BOARD_ID_BASE + 0)
  48. #define A39X_RD_69XX_ID (A39X_MARVELL_BOARD_ID_BASE + 1)
  49. #define A39X_MV_MAX_MARVELL_BOARD_ID (A39X_MARVELL_BOARD_ID_BASE + 2)
  50. #define A39X_MV_MARVELL_BOARD_NUM (A39X_MV_MAX_MARVELL_BOARD_ID - \
  51. A39X_MARVELL_BOARD_ID_BASE)
  52. struct board_wakeup_gpio {
  53. u32 board_id;
  54. int gpio_num;
  55. };
  56. enum suspend_wakeup_status {
  57. SUSPEND_WAKEUP_DISABLED,
  58. SUSPEND_WAKEUP_ENABLED,
  59. SUSPEND_WAKEUP_ENABLED_GPIO_DETECTED,
  60. };
  61. /*
  62. * GPIO status indication for Suspend Wakeup:
  63. * If suspend to RAM is supported and GPIO inidcation is implemented,
  64. * set the gpio number
  65. * If suspend to RAM is supported but GPIO indication is not implemented
  66. * set '-2'
  67. * If suspend to RAM is not supported set '-1'
  68. */
  69. #ifdef CONFIG_CUSTOMER_BOARD_SUPPORT
  70. #ifdef CONFIG_ARMADA_38X
  71. #define MV_BOARD_WAKEUP_GPIO_INFO { \
  72. {A38X_CUSTOMER_BOARD_ID0, -1 }, \
  73. {A38X_CUSTOMER_BOARD_ID0, -1 }, \
  74. };
  75. #else
  76. #define MV_BOARD_WAKEUP_GPIO_INFO { \
  77. {A39X_CUSTOMER_BOARD_ID0, -1 }, \
  78. {A39X_CUSTOMER_BOARD_ID0, -1 }, \
  79. };
  80. #endif /* CONFIG_ARMADA_38X */
  81. #else
  82. #ifdef CONFIG_ARMADA_38X
  83. #define MV_BOARD_WAKEUP_GPIO_INFO { \
  84. {RD_NAS_68XX_ID, -2 }, \
  85. {DB_68XX_ID, -1 }, \
  86. {RD_AP_68XX_ID, -2 }, \
  87. {DB_AP_68XX_ID, -2 }, \
  88. {DB_GP_68XX_ID, -2 }, \
  89. {DB_BP_6821_ID, -2 }, \
  90. {DB_AMC_6820_ID, -2 }, \
  91. };
  92. #else
  93. #define MV_BOARD_WAKEUP_GPIO_INFO { \
  94. {A39X_RD_69XX_ID, -1 }, \
  95. {A39X_DB_69XX_ID, -1 }, \
  96. };
  97. #endif /* CONFIG_ARMADA_38X */
  98. #endif /* CONFIG_CUSTOMER_BOARD_SUPPORT */
  99. enum suspend_wakeup_status mv_ddr_sys_env_suspend_wakeup_check(void);
  100. u32 mv_ddr_sys_env_get_cs_ena_from_reg(void);
  101. #endif /* _MV_DDR_SYS_ENV_LIB_H */