dp: tx: Added link configuration and training callbacks.

New callbacks for:
- Link rate changes.
- Lane count changes.
- Pre-emphasis and voltage swing adjust request.

Signed-off-by: Andrei-Liviu Simion <andrei.simion@xilinx.com>
Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
This commit is contained in:
Andrei-Liviu Simion 2015-08-04 01:38:21 -07:00 committed by Nava kishore Manne
parent 941a63a7b9
commit d972cf8c18
2 changed files with 143 additions and 0 deletions

View file

@ -47,6 +47,8 @@
* ----- ---- -------- -----------------------------------------------
* 1.0 als 01/20/15 Initial release. TX code merged from the dptx driver.
* 2.0 als 06/08/15 Updated RX initialization with MST support.
* Added callbacks for lane count changes, link rate changes
* and pre-emphasis + voltage swing adjust requests.
* </pre>
*
*******************************************************************************/
@ -1060,6 +1062,12 @@ u32 XDp_TxSetLaneCount(XDp *InstancePtr, u8 LaneCount)
return XST_FAILURE;
}
/* Invoke callback, if defined. */
if (InstancePtr->TxInstance.LaneCountChangeCallback) {
InstancePtr->TxInstance.LaneCountChangeCallback(
InstancePtr->TxInstance.LaneCountChangeCallbackRef);
}
return XST_SUCCESS;
}
@ -1134,6 +1142,12 @@ u32 XDp_TxSetLinkRate(XDp *InstancePtr, u8 LinkRate)
return XST_FAILURE;
}
/* Invoke callback, if defined. */
if (InstancePtr->TxInstance.LinkRateChangeCallback) {
InstancePtr->TxInstance.LinkRateChangeCallback(
InstancePtr->TxInstance.LinkRateChangeCallbackRef);
}
return XST_SUCCESS;
}
@ -1703,6 +1717,92 @@ void XDp_WaitUs(XDp *InstancePtr, u32 MicroSeconds)
#endif
}
/******************************************************************************/
/**
* This function installs a callback function for when the driver's lane count
* change function is called either directly by the user or during link
* training.
*
* @param InstancePtr is a pointer to the XDp instance.
* @param CallbackFunc is the address to the callback function.
* @param CallbackRef is the user data item that will be passed to the
* callback function when it is invoked.
*
* @return None.
*
* @note None.
*
*******************************************************************************/
void XDp_TxSetLaneCountChangeCallback(XDp *InstancePtr,
XDp_IntrHandler CallbackFunc, void *CallbackRef)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(XDp_GetCoreType(InstancePtr) == XDP_TX);
Xil_AssertVoid(CallbackFunc != NULL);
Xil_AssertVoid(CallbackRef != NULL);
InstancePtr->TxInstance.LaneCountChangeCallback = CallbackFunc;
InstancePtr->TxInstance.LaneCountChangeCallbackRef = CallbackRef;
}
/******************************************************************************/
/**
* This function installs a callback function for when the driver's link rate
* change function is called either directly by the user or during link
* training.
*
* @param InstancePtr is a pointer to the XDp instance.
* @param CallbackFunc is the address to the callback function.
* @param CallbackRef is the user data item that will be passed to the
* callback function when it is invoked.
*
* @return None.
*
* @note None.
*
*******************************************************************************/
void XDp_TxSetLinkRateChangeCallback(XDp *InstancePtr,
XDp_IntrHandler CallbackFunc, void *CallbackRef)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(XDp_GetCoreType(InstancePtr) == XDP_TX);
Xil_AssertVoid(CallbackFunc != NULL);
Xil_AssertVoid(CallbackRef != NULL);
InstancePtr->TxInstance.LinkRateChangeCallback = CallbackFunc;
InstancePtr->TxInstance.LinkRateChangeCallbackRef = CallbackRef;
}
/******************************************************************************/
/**
* This function installs a callback function for when the driver's link rate
* change function is called during link training.
*
* @param InstancePtr is a pointer to the XDp instance.
* @param CallbackFunc is the address to the callback function.
* @param CallbackRef is the user data item that will be passed to the
* callback function when it is invoked.
*
* @return None.
*
* @note None.
*
*******************************************************************************/
void XDp_TxSetPeVsAdjustCallback(XDp *InstancePtr,
XDp_IntrHandler CallbackFunc, void *CallbackRef)
{
/* Verify arguments. */
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(XDp_GetCoreType(InstancePtr) == XDP_TX);
Xil_AssertVoid(CallbackFunc != NULL);
Xil_AssertVoid(CallbackRef != NULL);
InstancePtr->TxInstance.PeVsAdjustCallback = CallbackFunc;
InstancePtr->TxInstance.PeVsAdjustCallbackRef = CallbackRef;
}
/******************************************************************************/
/**
* This function prepares the DisplayPort TX core for use.
@ -2638,6 +2738,12 @@ static u32 XDp_TxAdjVswingPreemp(XDp *InstancePtr)
return XST_FAILURE;
}
/* Invoke callback, if defined. */
if (InstancePtr->TxInstance.PeVsAdjustCallback) {
InstancePtr->TxInstance.PeVsAdjustCallback(
InstancePtr->TxInstance.PeVsAdjustCallbackRef);
}
return XST_SUCCESS;
}

View file

@ -345,6 +345,8 @@
* 'u32 Guid[4]' changed to 'u8 Guid[16]'
* Added handlers and setter functions for HDCP and unplug
* events.
* Added callbacks for lane count changes, link rate changes
* and pre-emphasis + voltage swing adjust requests.
* </pre>
*
*******************************************************************************/
@ -808,6 +810,35 @@ typedef struct {
void *HpdPulseCallbackRef; /**< A pointer to the user data
passed to the HPD pulse
callback function. */
XDp_IntrHandler LaneCountChangeCallback; /** Callback function to be
invoked once a lane
count change has
occurred within the
driver. */
void *LaneCountChangeCallbackRef; /** A pointer to the user data
passed to the lane count
change callback
function. */
XDp_IntrHandler LinkRateChangeCallback; /**< Callback function to be
invoked once a link
rate change has
occurred within the
driver. */
void *LinkRateChangeCallbackRef; /** A pointer to the user data
passed to the link rate
change callback
function. */
XDp_IntrHandler PeVsAdjustCallback; /** Callback function to be
invoked once a voltage
swing and pre-emphasis
adjust request has been
handled within the
driver. */
void *PeVsAdjustCallbackRef; /** A pointer to the user data
passed to the voltage
swing and pre-emphasis
adjust request callback
function. */
} XDp_Tx;
/**
@ -1037,6 +1068,12 @@ void XDp_TxSetHasRedriverInPath(XDp *InstancePtr, u8 Set);
void XDp_TxCfgTxVsOffset(XDp *InstancePtr, u8 Offset);
void XDp_TxCfgTxVsLevel(XDp *InstancePtr, u8 Level, u8 TxLevel);
void XDp_TxCfgTxPeLevel(XDp *InstancePtr, u8 Level, u8 TxLevel);
void XDp_TxSetLaneCountChangeCallback(XDp *InstancePtr,
XDp_IntrHandler CallbackFunc, void *CallbackRef);
void XDp_TxSetLinkRateChangeCallback(XDp *InstancePtr,
XDp_IntrHandler CallbackFunc, void *CallbackRef);
void XDp_TxSetPeVsAdjustCallback(XDp *InstancePtr,
XDp_IntrHandler CallbackFunc, void *CallbackRef);
/* xdp.c: TX AUX transaction functions. */
u32 XDp_TxAuxRead(XDp *InstancePtr, u32 DpcdAddress, u32 BytesToRead,