HdmiDebugGpioInitLib.c 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /** @file
  2. GPIO initialization for the HDMI I2C Debug Port
  3. Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include <Uefi.h>
  7. #include <Library/PcdLib.h>
  8. #include <Library/PciLib.h>
  9. #include <Library/GpioLib.h>
  10. #include <Library/HdmiDebugPchDetectionLib.h>
  11. #include <GpioPinsSklLp.h>
  12. #include <GpioPinsSklH.h>
  13. //GPIO Table Terminator
  14. #define END_OF_GPIO_TABLE 0xFFFFFFFF
  15. typedef enum {
  16. EnumDdcUnknown = 0,
  17. EnumDdcA,
  18. EnumDdcB,
  19. EnumDdcC,
  20. EnumDdcD,
  21. EnumDdcE,
  22. EnumDdcF,
  23. EnumI2cChannelMax
  24. } IGFX_I2C_CHANNEL;
  25. /*** SKL-LP ***/
  26. // HDMI-B DDC GPIO Pins
  27. GPIO_INIT_CONFIG mDebugGpioTableSklLpDdpB[] =
  28. {
  29. {GPIO_SKL_LP_GPP_E18, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPB_CTRLCLK
  30. {GPIO_SKL_LP_GPP_E19, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPB_CTRLDATA
  31. {END_OF_GPIO_TABLE, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirNone, GpioOutDefault, GpioIntDis, GpioDswReset, GpioTermNone}},//Marking End of Table
  32. };
  33. UINT16 mDebugGpioTableSklLpDdpBSize = sizeof (mDebugGpioTableSklLpDdpB) / sizeof (GPIO_INIT_CONFIG) - 1;
  34. // HDMI-C DDC GPIO Pins
  35. GPIO_INIT_CONFIG mDebugGpioTableSklLpDdpC[] =
  36. {
  37. {GPIO_SKL_LP_GPP_E20, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPC_CTRLCLK
  38. {GPIO_SKL_LP_GPP_E21, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPC_CTRLDATA
  39. {END_OF_GPIO_TABLE, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirNone, GpioOutDefault, GpioIntDis, GpioDswReset, GpioTermNone}},//Marking End of Table
  40. };
  41. UINT16 mDebugGpioTableSklLpDdpCSize = sizeof (mDebugGpioTableSklLpDdpC) / sizeof (GPIO_INIT_CONFIG) - 1;
  42. // HDMI-D DDC GPIO Pins
  43. GPIO_INIT_CONFIG mDebugGpioTableSklLpDdpD[] =
  44. {
  45. {GPIO_SKL_LP_GPP_E22, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPD_CTRLCLK
  46. {GPIO_SKL_LP_GPP_E23, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPD_CTRLDATA
  47. {END_OF_GPIO_TABLE, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirNone, GpioOutDefault, GpioIntDis, GpioDswReset, GpioTermNone}},//Marking End of Table
  48. };
  49. UINT16 mDebugGpioTableSklLpDdpDSize = sizeof (mDebugGpioTableSklLpDdpD) / sizeof (GPIO_INIT_CONFIG) - 1;
  50. /*** SKL-H ***/
  51. // HDMI-B DDC GPIO Pins
  52. GPIO_INIT_CONFIG mDebugGpioTableSklHDdpB[] =
  53. {
  54. {GPIO_SKL_H_GPP_I5, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPB_CTRLCLK
  55. {GPIO_SKL_H_GPP_I6, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPB_CTRLDATA
  56. {END_OF_GPIO_TABLE, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirNone, GpioOutDefault, GpioIntDis, GpioDswReset, GpioTermNone}},//Marking End of Table
  57. };
  58. UINT16 mDebugGpioTableSklHDdpBSize = sizeof (mDebugGpioTableSklHDdpB) / sizeof (GPIO_INIT_CONFIG) - 1;
  59. // HDMI-C DDC GPIO Pins
  60. GPIO_INIT_CONFIG mDebugGpioTableSklHDdpC[] =
  61. {
  62. {GPIO_SKL_H_GPP_I7, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPC_CTRLCLK
  63. {GPIO_SKL_H_GPP_I8, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPC_CTRLDATA
  64. {END_OF_GPIO_TABLE, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirNone, GpioOutDefault, GpioIntDis, GpioDswReset, GpioTermNone}},//Marking End of Table
  65. };
  66. UINT16 mDebugGpioTableSklHDdpCSize = sizeof (mDebugGpioTableSklHDdpC) / sizeof (GPIO_INIT_CONFIG) - 1;
  67. // HDMI-D DDC GPIO Pins
  68. GPIO_INIT_CONFIG mDebugGpioTableSklHDdpD[] =
  69. {
  70. {GPIO_SKL_H_GPP_I9, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPD_CTRLCLK
  71. {GPIO_SKL_H_GPP_I10, {GpioPadModeNative1, GpioHostOwnDefault, GpioDirNone, GpioOutDefault, GpioIntDis, GpioHostDeepReset, GpioTermNone}}, //DDPD_CTRLDATA
  72. {END_OF_GPIO_TABLE, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirNone, GpioOutDefault, GpioIntDis, GpioDswReset, GpioTermNone}},//Marking End of Table
  73. };
  74. UINT16 mDebugGpioTableSklHDdpDSize = sizeof (mDebugGpioTableSklHDdpD) / sizeof (GPIO_INIT_CONFIG) - 1;
  75. /**
  76. Configures GPIO
  77. @param[in] GpioTable Point to Platform Gpio table
  78. @param[in] GpioTableCount Number of Gpio table entries
  79. **/
  80. VOID
  81. HdmiDebugConfigureGpio (
  82. IN GPIO_INIT_CONFIG *GpioDefinition,
  83. IN UINT16 GpioTableCount
  84. )
  85. {
  86. EFI_STATUS Status;
  87. Status = GpioConfigurePads (GpioTableCount, GpioDefinition);
  88. }
  89. /**
  90. Configures GPIOs to enable usage of the HDMI DDC I2C Bus
  91. @retval EFI_SUCCESS The function completed successfully
  92. @retval EFI_UNSUPPORTED The platform is using a PCH that is not supported yet.
  93. **/
  94. EFI_STATUS
  95. HdmiDebugGpioInit (
  96. VOID
  97. )
  98. {
  99. IGFX_I2C_CHANNEL Channel;
  100. PCH_TYPE PchType;
  101. PchType = GetPchTypeInternal ();
  102. Channel = (IGFX_I2C_CHANNEL) PcdGet32 (PcdI2cHdmiDebugPortDdcI2cChannel);
  103. switch (PchType) {
  104. case PchTypeSptLp:
  105. switch (Channel) {
  106. case EnumDdcB:
  107. HdmiDebugConfigureGpio (mDebugGpioTableSklLpDdpB, mDebugGpioTableSklLpDdpBSize);
  108. return EFI_SUCCESS;
  109. case EnumDdcC:
  110. HdmiDebugConfigureGpio (mDebugGpioTableSklLpDdpC, mDebugGpioTableSklLpDdpCSize);
  111. return EFI_SUCCESS;
  112. case EnumDdcD:
  113. HdmiDebugConfigureGpio (mDebugGpioTableSklLpDdpD, mDebugGpioTableSklLpDdpDSize);
  114. return EFI_SUCCESS;
  115. default:
  116. return EFI_UNSUPPORTED;
  117. }
  118. break;
  119. case PchTypeSptH:
  120. case PchTypeKbpH:
  121. switch (Channel) {
  122. case EnumDdcB:
  123. HdmiDebugConfigureGpio (mDebugGpioTableSklHDdpB, mDebugGpioTableSklHDdpBSize);
  124. return EFI_SUCCESS;
  125. case EnumDdcC:
  126. HdmiDebugConfigureGpio (mDebugGpioTableSklHDdpC, mDebugGpioTableSklHDdpCSize);
  127. return EFI_SUCCESS;
  128. case EnumDdcD:
  129. HdmiDebugConfigureGpio (mDebugGpioTableSklHDdpD, mDebugGpioTableSklHDdpDSize);
  130. return EFI_SUCCESS;
  131. default:
  132. return EFI_UNSUPPORTED;
  133. }
  134. break;
  135. default:
  136. return EFI_UNSUPPORTED;
  137. }
  138. }