diff --git a/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.mdd b/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.mdd
index e8ff05f9..69a7be51 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.mdd
+++ b/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.mdd
@@ -36,6 +36,6 @@ BEGIN driver dprxss
OPTION driver_state = ACTIVE;
OPTION depends = (video_common_v2_0);
OPTION copyfiles = all;
- OPTION VERSION = 1.0;
+ OPTION VERSION = 2.0;
OPTION NAME = dprxss;
END driver
diff --git a/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.tcl b/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.tcl
index af20ba9e..83e60425 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.tcl
+++ b/XilinxProcessorIPLib/drivers/dprxss/data/dprxss.tcl
@@ -27,6 +27,11 @@
# Except as contained in this notice, the name of the Xilinx shall not be used
# in advertising or otherwise to promote the sale, use or other dealings in
# this Software without prior written authorization from Xilinx.
+#
+# MODIFICATION HISTORY:
+# Ver Who Date Changes
+# ---- --- -------- -----------------------------------------------------------
+# 2.00 sha 10/05/15 Added Timer Counter support.
###############################################################################
proc generate {drv_handle} {
@@ -50,6 +55,7 @@ proc hier_ip_define_config_file {drv_handle file_name drv_string args} {
set sub_core_params(displayport) "BASEADDR S_AXI_ACLK LANE_COUNT LINK_RATE MAX_BITS_PER_COLOR QUAD_PIXEL_ENABLE DUAL_PIXEL_ENABLE YCRCB_ENABLE YONLY_ENABLE GT_DATAWIDTH SECONDARY_SUPPORT AUDIO_CHANNELS MST_ENABLE NUMBER_OF_MST_STREAMS PROTOCOL_SELECTION FLOW_DIRECTION"
set sub_core_params(axi_iic) "BASEADDR TEN_BIT_ADR GPO_WIDTH"
set sub_core_params(hdcp) "BASEADDR S_AXI_FREQUENCY IS_RX IS_HDMI"
+ set sub_core_params(axi_timer) "BASEADDR CLOCK_FREQ_HZ"
set total_subcores [array size sub_core_params]
set filename [file join "src" $file_name]
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/hdcp1x/xdprxss_hdcp1x.h b/XilinxProcessorIPLib/drivers/dprxss/src/hdcp1x/xdprxss_hdcp1x.h
index 55c278f7..21b7a4c7 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/hdcp1x/xdprxss_hdcp1x.h
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/hdcp1x/xdprxss_hdcp1x.h
@@ -41,8 +41,10 @@
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
-* ---- --- -------- -----------------------------------------------------
+* ---- --- -------- ----------------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Protected HDCP, Timer Counter header file under macro
+* number of instances.
*
*
******************************************************************************/
@@ -56,7 +58,11 @@ extern "C" {
/***************************** Include Files *********************************/
+#include "xparameters.h"
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
#include "xhdcp1x.h"
+#include "xtmrctr.h"
+#endif
/************************** Constant Definitions *****************************/
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.c b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.c
index 63c6e734..137f74ca 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.c
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.c
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss.c
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
*
* This is the main file for Xilinx DisplayPort Receiver Subsystem driver.
@@ -45,8 +45,10 @@
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
-* ---- --- -------- -----------------------------------------------------
+* ---- --- -------- ----------------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Added HDCP and Timer Counter support.
+* Protected HDCP under macro number of instances.
*
*
******************************************************************************/
@@ -70,6 +72,10 @@
typedef struct {
XDp DpInst;
XIic IicInst;
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ XHdcp1x Hdcp1xInst;
+ XTmrCtr TmrCtrInst;
+#endif
} XDpRxSs_SubCores;
/************************** Function Prototypes ******************************/
@@ -80,6 +86,10 @@ static void StubTp1Callback(void *InstancePtr);
static void StubTp2Callback(void *InstancePtr);
static void StubUnplugCallback(void *InstancePtr);
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+static void DpRxSs_TimeOutCallback(void *InstancePtr, u8 TmrCtrNumber);
+#endif
+
/************************** Variable Definitions *****************************/
/* A generic EDID structure. */
@@ -139,6 +149,9 @@ XDpRxSs_SubCores DpRxSsSubCores;
u32 XDpRxSs_CfgInitialize(XDpRxSs *InstancePtr, XDpRxSs_Config *CfgPtr,
u32 EffectiveAddr)
{
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ XHdcp1x_Config Hdcp1xConfig;
+#endif
XIic_Config IicConfig;
XDp_Config DpConfig;
u32 Status;
@@ -238,13 +251,13 @@ u32 XDpRxSs_CfgInitialize(XDpRxSs *InstancePtr, XDpRxSs_Config *CfgPtr,
XVidC_Dp159Reset(InstancePtr->IicPtr, FALSE);
/* Wait for us */
- XDp_WaitUs(InstancePtr->DpPtr, 800);
+ XDp_WaitUs(InstancePtr->DpPtr, 1000);
/* Initialize DP159 */
XVidC_Dp159Initialize(InstancePtr->IicPtr);
/* Wait for us */
- XDp_WaitUs(InstancePtr->DpPtr, 900);
+ XDp_WaitUs(InstancePtr->DpPtr, 1000);
/* Initialize default training pattern callbacks in DP RX
* Subsystem
@@ -271,6 +284,74 @@ u32 XDpRxSs_CfgInitialize(XDpRxSs *InstancePtr, XDpRxSs_Config *CfgPtr,
DpRxSs_PopulateDpRxPorts(InstancePtr);
}
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ /* Check for Timer Counter availability */
+ if (InstancePtr->TmrCtrPtr != NULL) {
+ xdbg_printf(XDBG_DEBUG_GENERAL,"SS INFO: Initializing Timer "
+ "Counter IP \n\r");
+
+ /* Calculate absolute base address of Timer Counter sub-core */
+ InstancePtr->Config.TmrCtrSubCore.TmrCtrConfig.BaseAddress +=
+ InstancePtr->Config.BaseAddress;
+
+ /* Timer Counter config initialize */
+ Status = XTmrCtr_Initialize(InstancePtr->TmrCtrPtr,
+ InstancePtr->Config.TmrCtrSubCore.TmrCtrConfig.DeviceId);
+ if (Status != XST_SUCCESS) {
+ xdbg_printf(XDBG_DEBUG_GENERAL,"SS ERR:: Timer "
+ "Counter initialization failed\n\r");
+ return XST_FAILURE;
+ }
+
+ /* Calculate absolute base address of Timer Counter sub-core */
+ InstancePtr->TmrCtrPtr->Config.BaseAddress +=
+ InstancePtr->Config.BaseAddress;
+ InstancePtr->TmrCtrPtr->BaseAddress +=
+ InstancePtr->Config.BaseAddress;
+
+ /* Configure the callback */
+ XTmrCtr_SetHandler(InstancePtr->TmrCtrPtr,
+ (XTmrCtr_Handler)DpRxSs_TimeOutCallback,
+ InstancePtr);
+
+ /* Enable the specified options for Timer Counter zero */
+ XTmrCtr_SetOptions (InstancePtr->TmrCtrPtr, 0,
+ XTC_DOWN_COUNT_OPTION | XTC_INT_MODE_OPTION);
+
+ /* Set the reset value to Timer Counter zero */
+ XTmrCtr_SetResetValue (InstancePtr->TmrCtrPtr, 0,
+ XDPRXSS_TMRCTR_RST_VAL);
+ }
+
+ /* Check for HDCP availability */
+ if ((InstancePtr->Hdcp1xPtr != NULL) &&
+ (InstancePtr->Config.HdcpEnable)) {
+ xdbg_printf(XDBG_DEBUG_GENERAL,"SS INFO: Initializing HDCP IP "
+ "\n\r");
+
+ /* Calculate absolute base address of HDCP sub-core */
+ InstancePtr->Config.Hdcp1xSubCore.Hdcp1xConfig.BaseAddress +=
+ InstancePtr->Config.BaseAddress;
+ (void)memcpy((void *)&(Hdcp1xConfig),
+ (const void *)&CfgPtr->Hdcp1xSubCore.Hdcp1xConfig,
+ sizeof(XHdcp1x_Config));
+
+ /* HDCP config initialize */
+ Hdcp1xConfig.BaseAddress += InstancePtr->Config.BaseAddress;
+ Status = XHdcp1x_CfgInitialize(InstancePtr->Hdcp1xPtr,
+ &Hdcp1xConfig, (void *)InstancePtr->DpPtr,
+ Hdcp1xConfig.BaseAddress);
+ if (Status != XST_SUCCESS) {
+ xdbg_printf(XDBG_DEBUG_GENERAL,"SS ERR:: HDCP "
+ "initialization failed\n\r");
+ return XST_FAILURE;
+ }
+
+ /* Set key selection value for RX */
+ XHdcp1x_SetKeySelect(InstancePtr->Hdcp1xPtr, 0x1);
+ }
+#endif
+
/* Set the flag to indicate the subsystem is ready */
InstancePtr->IsReady = (u32)(XIL_COMPONENT_IS_READY);
@@ -295,6 +376,17 @@ void XDpRxSs_Reset(XDpRxSs *InstancePtr)
/* Verify argument. */
Xil_AssertVoid(InstancePtr != NULL);
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ /* Reset HDCP interface */
+ if ((InstancePtr->Hdcp1xPtr) && (InstancePtr->Config.HdcpEnable)) {
+ XHdcp1x_Reset(InstancePtr->Hdcp1xPtr);
+ }
+
+ /* Reset Timer Counter zero */
+ if (InstancePtr->TmrCtrPtr) {
+ XTmrCtr_Reset(InstancePtr->TmrCtrPtr, 0);
+ }
+#endif
/* Reset the video and AUX logic from DP RX */
XDpRxSs_WriteReg(InstancePtr->DpPtr->Config.BaseAddr,
XDP_RX_SOFT_RESET, XDP_RX_SOFT_RESET_VIDEO_MASK |
@@ -588,6 +680,373 @@ u32 XDpRxSs_HandleDownReq(XDpRxSs *InstancePtr)
return Status;
}
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+/*****************************************************************************/
+/**
+*
+* This function enables High-Bandwidth Content Protection (HDCP) interface.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return
+* - XST_SUCCESS, if HDCP i/f enabled successfully.
+* - XST_FAILURE, otherwise.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_HdcpEnable(XDpRxSs *InstancePtr)
+{
+ u32 Status;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Enable HDCP interface */
+ Status = XHdcp1x_Enable(InstancePtr->Hdcp1xPtr);
+
+ return Status;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function disables High-Bandwidth Content Protection (HDCP) interface.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return
+* - XST_SUCCESS, if HDCP i/f disabled successfully.
+* - XST_FAILURE, otherwise.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_HdcpDisable(XDpRxSs *InstancePtr)
+{
+ u32 Status;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Enable HDCP interface */
+ Status = XHdcp1x_Disable(InstancePtr->Hdcp1xPtr);
+
+ return Status;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function polls the HDCP interface, process events and sets receive
+* state machine accordingly.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return
+* - XST_SUCCESS, if polling the HDCP interface was successful.
+* - XST_FAILURE, if polling the HDCP interface failed.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_Poll(XDpRxSs *InstancePtr)
+{
+ u32 Status;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Poll the HDCP interface */
+ Status = XHdcp1x_Poll(InstancePtr->Hdcp1xPtr);
+
+ return Status;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function enables/disables the underlying physical interface.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+* @param PhyState indicates TRUE/FALSE value to enable/disable the
+* underlying physical interface.
+*
+* @return
+* - XST_SUCCESS, if the underlying physical interface enabled
+* successfully.
+* - XST_FAILURE, if the underlying physical interface failed to
+* enable.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_SetPhysicalState(XDpRxSs *InstancePtr, u32 PhyState)
+{
+ u32 Status;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid((PhyState == TRUE) || (PhyState == FALSE));
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Enable underlying physical interface */
+ Status = XHdcp1x_SetPhysicalState(InstancePtr->Hdcp1xPtr, PhyState);
+
+ return Status;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function sets lane(s) of the HDCP interface.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+* @param Lane is the number of lanes to be used.
+* - 1 = XDPRXSS_LANE_COUNT_SET_1
+* - 2 = XDPRXSS_LANE_COUNT_SET_2
+* - 4 = XDPRXSS_LANE_COUNT_SET_4
+*
+* @return
+* - XST_SUCCESS, if lane(s) into the HDCP i/f set successfully.
+* - XST_FAILURE, if failed to set lane(s) into the HDCP i/f.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_SetLane(XDpRxSs *InstancePtr, u32 Lane)
+{
+ u32 Status;
+
+ /* Verify arguments. */
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+ Xil_AssertNonvoid((Lane == XDPRXSS_LANE_COUNT_SET_1) ||
+ (Lane == XDPRXSS_LANE_COUNT_SET_2) ||
+ (Lane == XDPRXSS_LANE_COUNT_SET_4));
+
+ /* Set lanes into the HDCP interface */
+ Status = XHdcp1x_SetLaneCount(InstancePtr->Hdcp1xPtr, Lane);
+
+ return Status;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function initiates authentication process.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return
+* - XST_SUCCESS, if authentication initiated successfully.
+* - XST_FAILURE, if authentication initiated failed.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_Authenticate(XDpRxSs *InstancePtr)
+{
+ u32 Status;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Initiate authentication process */
+ Status = XHdcp1x_Authenticate(InstancePtr->Hdcp1xPtr);
+
+ return Status;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function checks whether the HDCP Receiver authenticated or not.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return
+* - TRUE, if HDCP Receiver is authenticated.
+* - FALSE, if the HDCP Receiver not authenticated.
+*
+* @note None.
+*
+******************************************************************************/
+u32 XDpRxSs_IsAuthenticated(XDpRxSs *InstancePtr)
+{
+ u32 Authenticate;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Check authentication has completed successfully */
+ Authenticate = XHdcp1x_IsAuthenticated(InstancePtr->Hdcp1xPtr);
+
+ return Authenticate;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function retrieves the current encryption map.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return
+* - The current encryption map.
+* - Otherwise zero.
+*
+* @note None.
+*
+******************************************************************************/
+u64 XDpRxSs_GetEncryption(XDpRxSs *InstancePtr)
+{
+ u64 StreamMap;
+
+ /* Verify arguments.*/
+ Xil_AssertNonvoid(InstancePtr != NULL);
+ Xil_AssertNonvoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Get stream map of the stream(s) */
+ StreamMap = XHdcp1x_GetEncryption(InstancePtr->Hdcp1xPtr);
+
+ return StreamMap;
+}
+/*****************************************************************************/
+/**
+*
+* This function sets the debug printf function.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+* @param PrintfFunc is the printf function.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_SetDebugPrintf(XDpRxSs *InstancePtr, XDpRxSs_Printf PrintfFunc)
+{
+ /* Verify arguments.*/
+ Xil_AssertVoid(InstancePtr->Config.HdcpEnable == 0x1);
+ Xil_AssertVoid(PrintfFunc != NULL);
+
+ /* Set debug printf function */
+ XHdcp1x_SetDebugPrintf(PrintfFunc);
+}
+
+/*****************************************************************************/
+/**
+*
+* This function sets the debug log message function.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+* @param LogFunc is the debug logging function.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_SetDebugLogMsg(XDpRxSs *InstancePtr, XDpRxSs_LogMsg LogFunc)
+{
+ /* Verify arguments.*/
+ Xil_AssertVoid(InstancePtr->Config.HdcpEnable == 0x1);
+ Xil_AssertVoid(LogFunc != NULL);
+
+ /* Set debug log message function */
+ XHdcp1x_SetDebugLogMsg(LogFunc);
+}
+
+/*****************************************************************************/
+/**
+*
+* This function starts the Timer Counter in count down, interrupt mode.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_StartTimer(XDpRxSs *InstancePtr)
+{
+ /* Verify arguments.*/
+ Xil_AssertVoid(InstancePtr != NULL);
+ Xil_AssertVoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Enable the specified options for Timer Counter zero */
+ XTmrCtr_SetOptions (InstancePtr->TmrCtrPtr, 0,
+ XTC_DOWN_COUNT_OPTION | XTC_INT_MODE_OPTION);
+
+ /* Set the reset value to Timer Counter zero */
+ XTmrCtr_SetResetValue (InstancePtr->TmrCtrPtr, 0,
+ XDPRXSS_TMRCTR_RST_VAL);
+
+ /* Start Timer Counter 0 in count down mode */
+ XTmrCtr_Start(InstancePtr->TmrCtrPtr, 0);
+}
+
+
+/*****************************************************************************/
+/**
+*
+* This function stops the Timer Counter.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_StopTimer(XDpRxSs *InstancePtr)
+{
+ /* Verify arguments.*/
+ Xil_AssertVoid(InstancePtr != NULL);
+ Xil_AssertVoid(InstancePtr->Config.HdcpEnable == 0x1);
+
+ /* Stop Timer Counter 0 in count down mode */
+ XTmrCtr_Stop(InstancePtr->TmrCtrPtr, 0);
+
+ /* Reset Timer Counter reset done */
+ InstancePtr->TmrCtrResetDone = 0;
+}
+
+/*****************************************************************************/
+/**
+*
+* This function is the callback called when the Timer Counter reset done with
+* specified reset value, assigned during initialization.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+* @param TmrCtrNumber is the number of the timer/counter within the
+* Timer Counter core.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+static void DpRxSs_TimeOutCallback(void *InstancePtr, u8 TmrCtrNumber)
+{
+ XDpRxSs *XDpRxSsPtr = (XDpRxSs *)InstancePtr;
+
+ /* Verify arguments.*/
+ Xil_AssertVoid(XDpRxSsPtr != NULL);
+ Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT);
+
+ /* Set Timer Counter reset done */
+ XDpRxSsPtr->TmrCtrResetDone = 1;
+}
+#endif
+
/*****************************************************************************/
/**
*
@@ -608,6 +1067,18 @@ static void DpRxSs_GetIncludedSubCores(XDpRxSs *InstancePtr)
/* Assign instance of IIC core */
InstancePtr->IicPtr = ((InstancePtr->Config.DpSubCore.IsPresent)?
(&DpRxSsSubCores.IicInst): NULL);
+
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ /* Assign instance of HDCP core */
+ InstancePtr->Hdcp1xPtr =
+ ((InstancePtr->Config.Hdcp1xSubCore.IsPresent)?
+ (&DpRxSsSubCores.Hdcp1xInst): NULL);
+
+ /* Assign instance of Timer Counter core */
+ InstancePtr->TmrCtrPtr =
+ ((InstancePtr->Config.TmrCtrSubCore.IsPresent)?
+ (&DpRxSsSubCores.TmrCtrInst): NULL);
+#endif
}
/*****************************************************************************/
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.h b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.h
index e83167aa..e42fadaa 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.h
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss.h
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss.h
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
* @details
*
@@ -58,11 +58,13 @@
*
* Interrupts
*
-* The DisplayPort RX Subsystem driver provides an interrupt handler
-* XDpRxSs_DpIntrHandler for handling the interrupt from the DisplayPort
-* sub-core. The users of this driver have to register this handler with
-* the interrupt system and provide the callback functions by using
-* XDpRxSs_SetCallBack API.
+* The DisplayPort RX Subsystem driver provides the interrupt handlers
+* - XDpRxSs_DpIntrHandler
+* - XDpRxSs_HdcpIntrHandler
+* - XDpRxSs_TmrCtrIntrHandler, for handling the interrupt from the DisplayPort,
+* optional HDCP and Timer Counter sub-cores respectively. The users of this
+* driver have to register this handler with the interrupt system and provide
+* the callback functions by using XDpRxSs_SetCallBack API.
*
* Virtual Memory
*
@@ -91,8 +93,10 @@
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
-* ---- --- -------- -----------------------------------------------------
+* ---- --- -------- ----------------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Removed HDCP interrupt handler types.
+* Added HDCP and Timer Counter support.
*
*
******************************************************************************/
@@ -175,48 +179,13 @@ typedef enum {
XDPRXSS_HANDLER_DP_CRC_TEST_EVENT = 16, /**< CRC test start event
* interrupt type for
* DisplayPort core */
- XDPRXSS_HANDLER_DP_HDCP_DBG_WR_EVENT = 17, /**< HDCP debug
- * register write
- * event interrupt
- * type for
- * DisplayPort
- * core */
- XDPRXSS_HANDLER_DP_HDCP_AKSV_WR_EVENT = 18, /**< HDCP AKSV MSB
- * register write
- * event interrupt
- * type for
- * DisplayPort
- * core */
- XDPRXSS_HANDLER_DP_HDCP_AN_WR_EVENT = 19, /**< HDCP AN MSB
- * register write
- * event interrupt
- * type for
- * DisplayPort
- * core */
- XDPRXSS_HANDLER_DP_HDCP_A_INFO_WR_EVENT = 20, /**< HDCP A info
- * register write
- * event interrupt
- * type for
- * DisplayPort
- * core */
- XDPRXSS_HANDLER_DP_HDCP_RO_RD_EVENT = 21, /**< HDCP RO register
- * read event
- * interrupt type for
- * DisplayPort
- * core */
- XDPRXSS_HANDLER_DP_HDCP_B_INFO_RD_EVENT = 22, /**< HDCP B info
- * register read
- * event interrupt
- * type for
- * DisplayPort
- * core */
- XDPRXSS_HANDLER_UNPLUG_EVENT = 23, /**< Unplug event type for
+ XDPRXSS_HANDLER_UNPLUG_EVENT = 17, /**< Unplug event type for
* DisplayPort RX
* Subsystem */
- XDPRXSS_HANDLER_LINKBW_EVENT = 24, /**< Link BW event type for
+ XDPRXSS_HANDLER_LINKBW_EVENT = 18, /**< Link BW event type for
* DisplayPort RX Subsystem
*/
- XDPRXSS_HANDLER_PLL_RESET_EVENT = 25 /**< PLL reset event type for
+ XDPRXSS_HANDLER_PLL_RESET_EVENT = 19 /**< PLL reset event type for
* DisplayPort RX Subsystem
*/
} XDpRxSs_HandlerType;
@@ -252,6 +221,7 @@ typedef struct {
* information */
} XDpRxSs_IicSubCore;
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
/**
* High-Bandwidth Content Protection (HDCP) Sub-core structure.
*/
@@ -261,6 +231,17 @@ typedef struct {
* information */
} XDpRxSs_Hdcp1xSubCore;
+/**
+* Timer Counter Sub-core structure.
+*/
+typedef struct {
+ u16 IsPresent; /**< Flag to hold the presence of Timer
+ * Counter core */
+ XTmrCtr_Config TmrCtrConfig; /**< Timer Counter core
+ * configuration information */
+} XDpRxSs_TmrCtrSubCore;
+#endif
+
/**
* This typedef contains configuration information for the DisplayPort
* Receiver Subsystem core. Each DisplayPort RX Subsystem core should have
@@ -288,8 +269,14 @@ typedef struct {
u8 ColorFormat; /**< Type of color format supported by this
* core instance. */
XDpRxSs_DpSubCore DpSubCore; /**< DisplayPort Configuration */
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
XDpRxSs_Hdcp1xSubCore Hdcp1xSubCore; /**< HDCP Configuration */
+#endif
XDpRxSs_IicSubCore IicSubCore; /**< IIC Configuration */
+#if ((XPAR_XHDCP_NUM_INSTANCES > 0) && (XPAR_XTMRCTR_NUM_INSTANCES > 0))
+ XDpRxSs_TmrCtrSubCore TmrCtrSubCore; /**< Timer Counter
+ * Configuration */
+#endif
} XDpRxSs_Config;
/*****************************************************************************/
@@ -315,6 +302,16 @@ typedef struct {
/* Sub-core instances */
XDp *DpPtr; /**< DisplayPort sub-core instance */
XIic *IicPtr; /**< IIC sub-core instance */
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ XHdcp1x *Hdcp1xPtr; /**< HDCP sub-core instance */
+ XTmrCtr *TmrCtrPtr; /**< Timer Counter sub-core instance */
+ u8 TmrCtrResetDone; /**< Timer reset done. This is used for
+ * MacBook which authenticates just
+ * after training is done. This
+ * ensures that system does not do
+ * anything until this variable set
+ * to one.*/
+#endif
/* Callback */
XDpRxSs_Callback PllResetCallback; /**< Callback function for PLL
@@ -444,6 +441,11 @@ typedef struct {
#define XDpRxSs_WaitUs(InstancePtr, MicroSeconds) \
XDp_WaitUs((InstancePtr)->DpPtr, MicroSeconds)
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+#define XDpRxSs_Printf XHdcp1x_Printf /**< Debug printf */
+#define XDpRxSs_LogMsg XHdcp1x_LogMsg /**< Debug log message */
+#endif
+
/************************** Function Prototypes ******************************/
/* Initialization function in xdprxss_sinit.c */
@@ -461,15 +463,36 @@ u32 XDpRxSs_CheckLinkStatus(XDpRxSs *InstancePtr);
u32 XDpRxSs_HandleDownReq(XDpRxSs *InstancePtr);
void XDpRxSs_SetUserPixelWidth(XDpRxSs *InstancePtr, u8 UserPixelWidth);
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+/* Optional HDCP related functions */
+u32 XDpRxSs_HdcpEnable(XDpRxSs *InstancePtr);
+u32 XDpRxSs_HdcpDisable(XDpRxSs *InstancePtr);
+u32 XDpRxSs_Poll(XDpRxSs *InstancePtr);
+u32 XDpRxSs_SetPhysicalState(XDpRxSs *InstancePtr, u32 PhyState);
+u32 XDpRxSs_SetLane(XDpRxSs *InstancePtr, u32 Lane);
+u32 XDpRxSs_Authenticate(XDpRxSs *InstancePtr);
+u32 XDpRxSs_IsAuthenticated(XDpRxSs *InstancePtr);
+u64 XDpRxSs_GetEncryption(XDpRxSs *InstancePtr);
+void XDpRxSs_SetDebugPrintf(XDpRxSs *InstancePtr, XDpRxSs_Printf PrintfFunc);
+void XDpRxSs_SetDebugLogMsg(XDpRxSs *InstancePtr, XDpRxSs_LogMsg LogFunc);
+void XDpRxSs_StartTimer(XDpRxSs *InstancePtr);
+void XDpRxSs_StopTimer(XDpRxSs *InstancePtr);
+#endif
+
void XDpRxSs_ReportCoreInfo(XDpRxSs *InstancePtr);
void XDpRxSs_ReportLinkInfo(XDpRxSs *InstancePtr);
void XDpRxSs_ReportMsaInfo(XDpRxSs *InstancePtr);
void XDpRxSs_ReportDp159BitErrCount(XDpRxSs *InstancePtr);
+void XDpRxSs_ReportHdcpInfo(XDpRxSs *InstancePtr);
/* Self test function in xdprxss_selftest.c */
u32 XDpRxSs_SelfTest(XDpRxSs *InstancePtr);
/* Interrupt functions in xdprxss_intr.c */
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+void XDpRxSs_HdcpIntrHandler(void *InstancePtr);
+void XDpRxSs_TmrCtrIntrHandler(void *InstancePtr);
+#endif
void XDpRxSs_DpIntrHandler(void *InstancePtr);
u32 XDpRxSs_SetCallBack(XDpRxSs *InstancePtr, u32 HandlerType,
void *CallbackFunc, void *CallbackRef);
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_dbg.c b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_dbg.c
index 40e50dbd..896caf13 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_dbg.c
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_dbg.c
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss_dbg.c
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
*
* This file contains functions to report debug information of DisplayPort RX
@@ -45,6 +45,9 @@
* Ver Who Date Changes
* ---- --- -------- -----------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Added HDCP support.
+* Removed DP159 bit error count code. Used DP159 bit error
+* count function from Video Common library.
*
*
******************************************************************************/
@@ -91,6 +94,15 @@ void XDpRxSs_ReportCoreInfo(XDpRxSs *InstancePtr)
xil_printf("\n\rDisplayPort RX Subsystem info:\n\r");
/* Report all the included cores in the subsystem instance */
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ if (InstancePtr->Hdcp1xPtr) {
+ xil_printf("High-Bandwidth Content protection (HDCP):Yes\n\r");
+ }
+ if (InstancePtr->TmrCtrPtr) {
+ xil_printf("Timer Counter(0):Yes\n\r");
+ }
+#endif
+
if (InstancePtr->DpPtr) {
xil_printf("DisplayPort Receiver(DPRX):Yes\n\r");
}
@@ -140,36 +152,46 @@ void XDpRxSs_ReportCoreInfo(XDpRxSs *InstancePtr)
void XDpRxSs_ReportLinkInfo(XDpRxSs *InstancePtr)
{
XDp_Config *RxConfig = &InstancePtr->DpPtr->Config;
+ u32 RegValue;
+ u32 Index;
/* Verify argument. */
Xil_AssertVoid(InstancePtr != NULL);
/* Read link rate and lane count */
- xil_printf("\n\rLINK_BW_SET (0x09C) status in DPCD = 0x%x\n\r",
+ xil_printf("\n\rLINK_BW_SET (0x400) status in DPCD = 0x%x\n\r",
XDpRxSs_ReadReg(RxConfig->BaseAddr,
- XDP_RX_OVER_LINK_BW_SET));
- xil_printf("\n\rLANE_COUNT_SET (0x0A0) status in DPCD = 0x%x\n\r",
+ XDP_RX_DPCD_LINK_BW_SET));
+ xil_printf("LANE_COUNT_SET (0x404) status in DPCD = 0x%x\n\r",
XDpRxSs_ReadReg(RxConfig->BaseAddr,
- XDP_RX_OVER_LANE_COUNT_SET));
+ XDP_RX_DPCD_LANE_COUNT_SET));
/* Read lanes status */
- xil_printf("LANE0_1_STATUS (0x043C) in DPCD = 0x%x\n\r",
+ xil_printf("\n\rLANE0_1_STATUS (0x043C) in DPCD = 0x%x\n\r",
XDpRxSs_ReadReg(RxConfig->BaseAddr,
XDP_RX_DPCD_LANE01_STATUS));
xil_printf("LANE2_3_STATUS (0x440) in DPCD = 0x%x\n\r",
XDpRxSs_ReadReg(RxConfig->BaseAddr,
XDP_RX_DPCD_LANE23_STATUS));
- /* Read symbol error */
- xil_printf("SYM_ERR_CNT01 (0x448) = 0x%x\n\r"
- "SYM_ERR_CNT23 (0x44C) = 0x%x\n\r",
- XDpRxSs_ReadReg(RxConfig->BaseAddr,
- XDP_RX_DPCD_SYM_ERR_CNT01),
- XDpRxSs_ReadReg(RxConfig->BaseAddr,
- XDP_RX_DPCD_SYM_ERR_CNT23));
+ /* Read symbol error which is RC register. Two times read is required
+ * due to during training if this register is read it gives all F's,
+ * second time read it gives proper value.
+ */
+ for (Index = 0; Index < 2; Index++) {
+ RegValue = XDpRxSs_ReadReg(RxConfig->BaseAddr,
+ XDP_RX_DPCD_SYM_ERR_CNT01);
+ }
+ xil_printf("\n\rSYM_ERR_CNT01 (0x448) = 0x%x\n\r", RegValue);
+
+ for (Index = 0; Index < 2; Index++) {
+ RegValue = XDpRxSs_ReadReg(RxConfig->BaseAddr,
+ XDP_RX_DPCD_SYM_ERR_CNT23);
+ }
+ xil_printf("SYM_ERR_CNT23 (0x44C) = 0x%x\n\r", RegValue);
/* PHY status */
- xil_printf("PHY_STATUS (0x208) = 0x%x\n\r",
+ xil_printf("\n\rPHY_STATUS (0x208) = 0x%x\n\r",
XDpRxSs_ReadReg(RxConfig->BaseAddr, XDP_RX_PHY_STATUS));
xil_printf("\n\r");
@@ -246,66 +268,34 @@ void XDpRxSs_ReportMsaInfo(XDpRxSs *InstancePtr)
******************************************************************************/
void XDpRxSs_ReportDp159BitErrCount(XDpRxSs *InstancePtr)
{
- u8 Data;
-
/* Verify argument. */
Xil_AssertVoid(InstancePtr != NULL);
- /* Select page 0 */
- XVidC_Dp159Write(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0xFF, 0x00);
+ /* Print bit error count */
+ XVidC_Dp159BitErrCount(InstancePtr->IicPtr);
+}
- /* Read TST_INT/Q */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x17, &Data);
- xil_printf("TST_INT/Q : %d\n\r", Data);
+/*****************************************************************************/
+/**
+*
+* This function prints the debug display info of the HDCP interface.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_ReportHdcpInfo(XDpRxSs *InstancePtr)
+{
+ /* Verify argument. */
+ Xil_AssertVoid(InstancePtr != NULL);
- /* BERT counter0[7:0] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x18, &Data);
- xil_printf("BERT counter0[7:0] : %d\n\r", Data);
-
- /* BERT counter0[11:8] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x19, &Data);
- xil_printf("BERT counter0[11:8] : %d\n\r", Data);
-
- /* BERT counter1[7:0] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x1A, &Data);
- xil_printf("BERT counter0[7:0] : %d\n\r", Data);
-
- /* BERT counter1[11:8] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x1B, &Data);
- xil_printf("BERT counter0[11:8] : %d\n\r", Data);
-
- /* BERT counter2[7:0] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x1C, &Data);
- xil_printf("BERT counter2[7:0] : %d\n\r", Data);
-
- /* BERT counter2[11:8] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x1D, &Data);
- xil_printf("BERT counter2[11:8] : %d\n\r", Data);
-
- /* BERT counter3[7:0] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x1E, &Data);
- xil_printf("BERT counter3[7:0] : %d\n\r", Data);
-
- /* BERT counter3[11:8] */
- XVidC_Dp159Read(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0x1F, &Data);
- xil_printf("BERT counter3[11:8] : %d\n\r", Data);
-
- /* Clear BERT counters and TST_INTQ latches - Self-clearing in DP159 */
- XVidC_Dp159Write(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0xFF, 0x00);
-
- /* Select page 1 */
- XVidC_Dp159Write(InstancePtr->IicPtr, XVIDC_DP159_IIC_SLAVE,
- 0xFF, 0x01);
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ XHdcp1x_Info(InstancePtr->Hdcp1xPtr);
+#else
+ xil_printf("HDCP is not supported in this design.\n\r");
+#endif
}
/** @} */
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_g.c b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_g.c
index a001ecea..0582d83b 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_g.c
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_g.c
@@ -47,6 +47,7 @@
#define XPAR_DP_RX_SUBSYSTEM_0_DP_PRESENT 1
#define XPAR_DP_RX_SUBSYSTEM_0_DP_RX_HDCP_PRESENT 1
#define XPAR_DP_RX_SUBSYSTEM_0_IIC_PRESENT 1
+#define XPAR_DP_RX_SUBSYSTEM_0_TIMER_PRESENT 1
XDpRxSs_Config XDpRxSs_ConfigTable[] =
@@ -103,6 +104,14 @@ XDpRxSs_Config XDpRxSs_ConfigTable[] =
XPAR_DP_RX_SUBSYSTEM_0_IIC_TEN_BIT_ADR,
XPAR_DP_RX_SUBSYSTEM_0_IIC_GPO_WIDTH
}
+ },
+ {
+ XPAR_DP_RX_SUBSYSTEM_0_TIMER_PRESENT,
+ {
+ XPAR_DP_RX_SUBSYSTEM_0_TIMER_DEVICE_ID,
+ XPAR_DP_RX_SUBSYSTEM_0_TIMER_BASEADDR,
+ XPAR_DP_RX_SUBSYSTEM_0_TIMER_CLOCK_FREQ_HZ
+ }
}
}
};
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_hw.h b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_hw.h
index ec0e93aa..f36f295c 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_hw.h
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_hw.h
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss_hw.h
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
*
* This header file contains identifiers and register-level core functions (or
@@ -48,6 +48,7 @@
* Ver Who Date Changes
* ---- --- -------- -----------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Added Timer Counter reset value macro.
*
*
******************************************************************************/
@@ -123,6 +124,9 @@ extern "C" {
#define XDPRXSS_GUID_NBYTES XDP_GUID_NBYTES /**< Number of bytes
* for GUID */
+#define XDPRXSS_TMRCTR_RST_VAL 100000000 /**< Timer Counter
+ * reset value */
+
/**************************** Type Definitions *******************************/
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_intr.c b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_intr.c
index a5493165..c0c763e1 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_intr.c
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_intr.c
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss_intr.c
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
*
* This file contains interrupt related functions of Xilinx DisplayPort RX
@@ -45,6 +45,8 @@
* Ver Who Date Changes
* ---- --- -------- -----------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Removed setting HDCP callbacks.
+* Added HDCP and Timer Counter interrupt handler.
*
*
******************************************************************************/
@@ -101,6 +103,64 @@ void XDpRxSs_DpIntrHandler(void *InstancePtr)
XDp_InterruptHandler(XDpRxSsPtr->DpPtr);
}
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+/*****************************************************************************/
+/**
+*
+* This function is the interrupt handler for the HDCP Cipher core.
+*
+* The application is responsible for connecting this function to the interrupt
+* system.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance that
+* just interrupted.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_HdcpIntrHandler(void *InstancePtr)
+{
+ XDpRxSs *XDpRxSsPtr = (XDpRxSs *)InstancePtr;
+
+ /* Verify arguments. */
+ Xil_AssertVoid(XDpRxSsPtr != NULL);
+ Xil_AssertVoid(XDpRxSsPtr->IsReady == XIL_COMPONENT_IS_READY);
+
+ /* HDCP Cipher interrupt handler */
+ XHdcp1x_CipherIntrHandler(XDpRxSsPtr->Hdcp1xPtr);
+}
+
+/*****************************************************************************/
+/**
+*
+* This function is the interrupt handler for the Timer Counter core.
+*
+* The application is responsible for connecting this function to the interrupt
+* system.
+*
+* @param InstancePtr is a pointer to the XDpRxSs core instance that
+* just interrupted.
+*
+* @return None.
+*
+* @note None.
+*
+******************************************************************************/
+void XDpRxSs_TmrCtrIntrHandler(void *InstancePtr)
+{
+ XDpRxSs *XDpRxSsPtr = (XDpRxSs *)InstancePtr;
+
+ /* Verify arguments. */
+ Xil_AssertVoid(XDpRxSsPtr != NULL);
+ Xil_AssertVoid(XDpRxSsPtr->IsReady == XIL_COMPONENT_IS_READY);
+
+ /* Timer Counter interrupt handler */
+ XTmrCtr_InterruptHandler(XDpRxSsPtr->TmrCtrPtr);
+}
+#endif
+
/*****************************************************************************/
/**
*
@@ -126,12 +186,6 @@ void XDpRxSs_DpIntrHandler(void *InstancePtr)
* XDPRXSS_HANDLER_DP_PAYLOAD_ALLOC_EVENT XDp_RxSetIntrPayloadAllocHandler
* XDPRXSS_HANDLER_DP_ACT_RX_EVENT XDp_RxSetIntrActRxHandler
* XDPRXSS_HANDLER_DP_CRC_TEST_EVENT XDp_RxSetIntrCrcTestHandler
-* XDPRXSS_HANDLER_DP_HDCP_DBG_WR_EVENT XDp_RxSetIntrHdcpDebugWriteHandler
-* XDPRXSS_HANDLER_DP_HDCP_AKSV_WR_EVENT XDp_RxSetIntrHdcpAksvWriteHandler
-* XDPRXSS_HANDLER_DP_HDCP_AN_WR_EVENT XDp_RxSetIntrHdcpAnWriteHandler
-* XDPRXSS_HANDLER_DP_HDCP_A_INFO_WR_EVENT XDp_RxSetIntrHdcpAinfoWriteHandler
-* XDPRXSS_HANDLER_DP_HDCP_RO_RD_EVENT XDp_RxSetIntrHdcpRoReadHandler
-* XDPRXSS_HANDLER_DP_HDCP_B_INFO_RD_EVENT XDp_RxSetIntrHdcpBinfoReadHandler
* XDPRXSS_HANDLER_UNPLUG_EVENT UnplugCallback
* XDPRXSS_HANDLER_LINKBW_EVENT LinkBwCallback
* XDPRXSS_HANDLER_PLL_RESET_EVENT PllResetCallback
@@ -261,42 +315,6 @@ u32 XDpRxSs_SetCallBack(XDpRxSs *InstancePtr, u32 HandlerType,
Status = XST_SUCCESS;
break;
- case XDPRXSS_HANDLER_DP_HDCP_DBG_WR_EVENT:
- XDp_RxSetIntrHdcpDebugWriteHandler(InstancePtr->DpPtr,
- CallbackFunc, CallbackRef);
- Status = XST_SUCCESS;
- break;
-
- case XDPRXSS_HANDLER_DP_HDCP_AKSV_WR_EVENT:
- XDp_RxSetIntrHdcpAksvWriteHandler(InstancePtr->DpPtr,
- CallbackFunc, CallbackRef);
- Status = XST_SUCCESS;
- break;
-
- case XDPRXSS_HANDLER_DP_HDCP_AN_WR_EVENT:
- XDp_RxSetIntrHdcpAnWriteHandler(InstancePtr->DpPtr,
- CallbackFunc, CallbackRef);
- Status = XST_SUCCESS;
- break;
-
- case XDPRXSS_HANDLER_DP_HDCP_A_INFO_WR_EVENT:
- XDp_RxSetIntrHdcpAinfoWriteHandler(InstancePtr->DpPtr,
- CallbackFunc, CallbackRef);
- Status = XST_SUCCESS;
- break;
-
- case XDPRXSS_HANDLER_DP_HDCP_RO_RD_EVENT:
- XDp_RxSetIntrHdcpRoReadHandler(InstancePtr->DpPtr,
- CallbackFunc, CallbackRef);
- Status = XST_SUCCESS;
- break;
-
- case XDPRXSS_HANDLER_DP_HDCP_B_INFO_RD_EVENT:
- XDp_RxSetIntrHdcpBinfoReadHandler(InstancePtr->DpPtr,
- CallbackFunc, CallbackRef);
- Status = XST_SUCCESS;
- break;
-
case XDPRXSS_HANDLER_UNPLUG_EVENT:
InstancePtr->UnplugCallback =
(XDpRxSs_Callback)((void *)CallbackFunc);
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_selftest.c b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_selftest.c
index d619d8f1..7162a96f 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_selftest.c
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_selftest.c
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss_selftest.c
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
*
* This file contains self test function for the DisplayPort Receiver
@@ -45,6 +45,7 @@
* Ver Who Date Changes
* ---- --- -------- -----------------------------------------------------
* 1.00 sha 05/18/15 Initial release.
+* 2.00 sha 10/05/15 Added HDCP and Timer Counter self test.
*
*
******************************************************************************/
@@ -102,6 +103,24 @@ u32 XDpRxSs_SelfTest(XDpRxSs *InstancePtr)
}
}
+#if (XPAR_XHDCP_NUM_INSTANCES > 0)
+ if ((InstancePtr->Hdcp1xPtr) && (InstancePtr->Config.HdcpEnable)) {
+ Status = XHdcp1x_SelfTest(InstancePtr->Hdcp1xPtr);
+ if (Status != XST_SUCCESS) {
+ xdbg_printf(XDBG_DEBUG_GENERAL,"ERR::HDCP Self test "
+ "failed\r\n");
+ }
+ }
+
+ if (InstancePtr->TmrCtrPtr) {
+ Status = XTmrCtr_SelfTest(InstancePtr->TmrCtrPtr, 0);
+ if (Status != XST_SUCCESS) {
+ xdbg_printf(XDBG_DEBUG_GENERAL,"ERR::Timer Counter "
+ "Self test failed\r\n");
+ }
+ }
+#endif
+
/* Check IIC availability */
if (InstancePtr->IicPtr) {
Status = (u32)XIic_SelfTest(InstancePtr->IicPtr);
diff --git a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_sinit.c b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_sinit.c
index cc835fd5..18febb45 100644
--- a/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_sinit.c
+++ b/XilinxProcessorIPLib/drivers/dprxss/src/xdprxss_sinit.c
@@ -33,7 +33,7 @@
/**
*
* @file xdprxss_sinit.c
-* @addtogroup dprxss_v1_0
+* @addtogroup dprxss_v2_0
* @{
*
* This file contains static initialization method for Xilinx DisplayPort