From e3f77d98674facd4c26e244b63d8beceb7f1d148 Mon Sep 17 00:00:00 2001 From: Andrei-Liviu Simion Date: Tue, 29 Jul 2014 17:19:26 -0700 Subject: [PATCH] dptx: Changed the self test function and example to check register reset values. This function will now pass without a DisplayPort cable connected. Signed-off-by: Andrei-Liviu Simion --- .../drivers/dptx/examples/readme.txt | 2 +- .../dptx/examples/xdptx_audio_example.c | 6 +- .../dptx/examples/xdptx_example_common.c | 9 +- .../dptx/examples/xdptx_intr_example.c | 9 +- .../dptx/examples/xdptx_poll_example.c | 6 +- .../dptx/examples/xdptx_selftest_example.c | 28 +-- .../dptx/examples/xdptx_timer_example.c | 6 +- XilinxProcessorIPLib/drivers/dptx/src/xdptx.c | 92 ++++++---- .../drivers/dptx/src/xdptx_selftest.c | 169 ++++++++++++++---- 9 files changed, 239 insertions(+), 88 deletions(-) diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/readme.txt b/XilinxProcessorIPLib/drivers/dptx/examples/readme.txt index 9d7633e5..224ea441 100644 --- a/XilinxProcessorIPLib/drivers/dptx/examples/readme.txt +++ b/XilinxProcessorIPLib/drivers/dptx/examples/readme.txt @@ -30,7 +30,7 @@ There are 5 examples included in this directory: 5) xdptx_selftest_example.c : This self test example will perform a sanity check on the state of the DisplayPort TX instance. It may be called prior to usage of the core or after a reset to ensure that (a subset of) the registers hold - the default values. + their default values. Each of these examples are meant to be used in conjunction with xdptx_example_common.[ch] which holds common functionality for all examples. diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_audio_example.c b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_audio_example.c index 2803994a..8dc407ea 100644 --- a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_audio_example.c +++ b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_audio_example.c @@ -89,7 +89,8 @@ static void Dptx_AudioSendInfoFrame(XDptx *InstancePtr); * * @param None. * - * @return - XST_SUCCESS if the audio example finished successfully. + * @return + * - XST_SUCCESS if the audio example finished successfully. * - XST_FAILURE otherwise. * * @note None. @@ -118,7 +119,8 @@ int main(void) * @param DeviceId is the unique device ID of the DisplayPort TX core * instance. * - * @return - XST_SUCCESS if the system was set up correctly and link + * @return + * - XST_SUCCESS if the system was set up correctly and link * training was successful. * - XST_FAILURE otherwise. * diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_example_common.c b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_example_common.c index 33e273cd..cc95080b 100644 --- a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_example_common.c +++ b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_example_common.c @@ -77,7 +77,8 @@ static void Dptx_StartVideoStream(XDptx *InstancePtr); * @param LaneCount is the number of lanes to use over the main link. * @param LinkRate is the link rate to use over the main link. * - * @return - XST_SUCCESS if main link was successfully established. + * @return + * - XST_SUCCESS if main link was successfully established. * - XST_FAILURE otherwise. * * @note None. @@ -110,7 +111,8 @@ u32 Dptx_Run(XDptx *InstancePtr) * @param DeviceId is the unique device ID of the DisplayPort TX core * instance. * - * @return - XST_SUCCESS if the device configuration was found and obtained + * @return + * - XST_SUCCESS if the device configuration was found and obtained * and if the main link was successfully established. * - XST_FAILURE otherwise. * @@ -146,7 +148,8 @@ u32 Dptx_SetupExample(XDptx *InstancePtr, u16 DeviceId) * * @param InstancePtr is a pointer to the XDptx instance. * - * @return - XST_SUCCESS the if main link was successfully established. + * @return + * - XST_SUCCESS the if main link was successfully established. * - XST_FAILURE otherwise. * * @note None. diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_intr_example.c b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_intr_example.c index 291457d4..455bedc4 100644 --- a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_intr_example.c +++ b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_intr_example.c @@ -122,7 +122,8 @@ INTC IntcInstance; /* The interrupt controller instance. */ * * @param None. * - * @return - XST_FAILURE if the interrupt example was unsuccessful - system + * @return + * - XST_FAILURE if the interrupt example was unsuccessful - system * setup failed. * * @note Unless setup failed, main will never return since @@ -158,7 +159,8 @@ int main(void) * @param HpdPulseHandler is a pointer to the handler called when an HPD * pulse occurs. * - * @return - XST_FAILURE if the system setup failed. + * @return + * - XST_FAILURE if the system setup failed. * - XST_SUCCESS should never return since this function, if setup * was successful, is blocking. * @@ -218,7 +220,8 @@ u32 Dptx_IntrExample(XDptx *InstancePtr, u16 DeviceId, INTC *IntcPtr, * @param HpdPulseHandler is a pointer to the handler called when an HPD * pulse occurs. * - * @return - XST_SUCCESS if the interrupt system was successfully set up. + * @return + * - XST_SUCCESS if the interrupt system was successfully set up. * - XST_FAILURE otherwise. * * @note An interrupt controller must be present in the system, connected diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_poll_example.c b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_poll_example.c index 837e7fd7..123f1b3e 100644 --- a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_poll_example.c +++ b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_poll_example.c @@ -75,7 +75,8 @@ static void Dptx_HpdPoll(XDptx *InstancePtr); * * @param None. * - * @return - XST_FAILURE if the polling example was unsuccessful - system + * @return + * - XST_FAILURE if the polling example was unsuccessful - system * setup failed. * * @note Unless setup failed, main will never return since @@ -103,7 +104,8 @@ int main(void) * @param DeviceId is the unique device ID of the DisplayPort TX core * instance. * - * @return - XST_FAILURE if the system setup failed. + * @return + * - XST_FAILURE if the system setup failed. * - XST_SUCCESS should never return since this function, if setup * was successful, is blocking. * diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_selftest_example.c b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_selftest_example.c index 2e3cb4b5..3235746c 100644 --- a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_selftest_example.c +++ b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_selftest_example.c @@ -35,8 +35,10 @@ * @file xdptx_selftest_example.c * * Contains a design example using the XDptx driver. It performs a self test on - * the DisplayPort TX core by training the main link at the maximum common - * capabilities between the TX and RX and checking the lane status. + * the DisplayPort TX core that will compare many of the DisplayPort TX core's + * registers against their default reset values. + * + * @note None. * *
  * MODIFICATION HISTORY:
@@ -54,7 +56,7 @@
 
 /**************************** Function Prototypes *****************************/
 
-u32 Dptx_SelfTestExample(u16 DeviceId);
+u32 Dptx_SelfTestExample(XDptx *InstancePtr, u16 DeviceId);
 
 /**************************** Function Definitions ****************************/
 
@@ -62,28 +64,30 @@ int main(void)
 {
         u32 Status;
 
-        Status = Dptx_SelfTestExample(DPTX_DEVICE_ID);
+        Status = Dptx_SelfTestExample(&DptxInstance, DPTX_DEVICE_ID);
         if (Status != XST_SUCCESS) {
-                xil_printf("XDptx_SelfTest failed.\n");
+                xil_printf("XDptx_SelfTest failed, check register values.\n");
                 return XST_FAILURE;
         }
         xil_printf("XDptx_SelfTest passed.\n");
         return Status;
 }
 
-u32 Dptx_SelfTestExample(u16 DeviceId)
+u32 Dptx_SelfTestExample(XDptx *InstancePtr, u16 DeviceId)
 {
         u32 Status;
+        XDptx_Config *ConfigPtr;
 
-        Status = Dptx_SetupExample(&DptxInstance, DeviceId);
-        if (Status != XST_SUCCESS) {
+        /* Obtain the device configuration for the DisplayPort TX core. */
+        ConfigPtr = XDptx_LookupConfig(DeviceId);
+        if (!ConfigPtr) {
                 return XST_FAILURE;
         }
-
-        XDptx_EnableTrainAdaptive(&DptxInstance, TRAIN_ADAPTIVE);
-        XDptx_SetHasRedriverInPath(&DptxInstance, TRAIN_HAS_REDRIVER);
+        /* Copy the device configuration into the InstancePtr's Config
+         * structure. */
+        XDptx_CfgInitialize(InstancePtr, ConfigPtr, ConfigPtr->BaseAddr);
 
         /* Run the self test. */
-        Status = XDptx_SelfTest(&DptxInstance);
+        Status = XDptx_SelfTest(InstancePtr);
         return Status;
 }
diff --git a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_timer_example.c b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_timer_example.c
index 7ec18103..f64577da 100644
--- a/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_timer_example.c
+++ b/XilinxProcessorIPLib/drivers/dptx/examples/xdptx_timer_example.c
@@ -84,7 +84,8 @@ XTmrCtr TimerCounterInst;       /* The timer counter instance. */
  *
  * @param       None.
  *
- * @return      - XST_SUCCESS if the timer example finished successfully.
+ * @return
+ *              - XST_SUCCESS if the timer example finished successfully.
  *              - XST_FAILURE otherwise.
  *
  * @note        None.
@@ -117,7 +118,8 @@ int main(void)
  * @param       TimerCounterPtr is a pointer to the timer instance.
  * @param       UserSleepFunc is a pointer to the custom handler for sleep.
  *
- * @return      - XST_SUCCESS if the system was set up correctly and link
+ * @return
+ *              - XST_SUCCESS if the system was set up correctly and link
  *                training was successful.
  *              - XST_FAILURE otherwise.
  *
diff --git a/XilinxProcessorIPLib/drivers/dptx/src/xdptx.c b/XilinxProcessorIPLib/drivers/dptx/src/xdptx.c
index f4a38726..421578c2 100644
--- a/XilinxProcessorIPLib/drivers/dptx/src/xdptx.c
+++ b/XilinxProcessorIPLib/drivers/dptx/src/xdptx.c
@@ -139,7 +139,8 @@ static u32 XDptx_WaitPhyReady(XDptx *InstancePtr);
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the DisplayPort TX core was successfully
+ * @return
+ *              - XST_SUCCESS if the DisplayPort TX core was successfully
  *                initialized.
  *              - XST_FAILURE otherwise.
  *
@@ -254,7 +255,8 @@ void XDptx_CfgInitialize(XDptx *InstancePtr, XDptx_Config *ConfigPtr,
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the DisplayPort Configuration Data was read
+ * @return
+ *              - XST_SUCCESS if the DisplayPort Configuration Data was read
  *                successfully.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_FAILURE otherwise.
@@ -313,7 +315,8 @@ u32 XDptx_GetRxCapabilities(XDptx *InstancePtr)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the I2C transactions to read the EDID were
+ * @return
+ *              - XST_SUCCESS if the I2C transactions to read the EDID were
  *                successful.
  *              - XST_ERROR_COUNT_MAX if the EDID read request timed out.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
@@ -347,7 +350,8 @@ u32 XDptx_GetEdid(XDptx *InstancePtr)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if main link settings were successfully set.
+ * @return
+ *              - XST_SUCCESS if main link settings were successfully set.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_FAILURE otherwise.
  *
@@ -393,7 +397,8 @@ u32 XDptx_CfgMainLinkMax(XDptx *InstancePtr)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS was either already trained, or has been
+ * @return
+ *              - XST_SUCCESS was either already trained, or has been
  *                trained successfully.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_FAILURE otherwise.
@@ -449,7 +454,8 @@ u32 XDptx_EstablishLink(XDptx *InstancePtr)
  * @param       InstancePtr is a pointer to the XDptx instance.
  * @param       LaneCount is the number of lanes to check.
  *
- * @return      - XST_SUCCESS if the RX device has maintained clock recovery,
+ * @return
+ *              - XST_SUCCESS if the RX device has maintained clock recovery,
  *                channel equalization, symbol lock, and interlane alignment.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_FAILURE otherwise.
@@ -554,7 +560,8 @@ void XDptx_SetHasRedriverInPath(XDptx *InstancePtr, u8 Set)
  * @param       Data is a pointer to the data buffer that will be filled with
  *              read data.
  *
- * @return      - XST_SUCCESS if the AUX read request was successfully
+ * @return
+ *              - XST_SUCCESS if the AUX read request was successfully
  *                acknowledged.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_ERROR_COUNT_MAX if the AUX request timed out.
@@ -596,7 +603,8 @@ u32 XDptx_AuxRead(XDptx *InstancePtr, u32 Address, u32 NumBytes, void *Data)
  * @param       Data is a pointer to the data buffer that contains the data
  *              to be written to the RX device.
  *
- * @return      - XST_SUCCESS if AUX write request was successfully
+ * @return
+ *              - XST_SUCCESS if AUX write request was successfully
  *                acknowledged.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_ERROR_COUNT_MAX if the AUX request timed out.
@@ -640,7 +648,8 @@ u32 XDptx_AuxWrite(XDptx *InstancePtr, u32 Address, u32 NumBytes, void *Data)
  * @param       Data is a pointer to a buffer that will be filled with the I2C
  *              read data.
  *
- * @return      - XST_SUCCESS if the I2C read has successfully completed with no
+ * @return
+ *              - XST_SUCCESS if the I2C read has successfully completed with no
  *                errors.
  *              - XST_ERROR_COUNT_MAX if the AUX request timed out.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
@@ -699,7 +708,8 @@ u32 XDptx_IicRead(XDptx *InstancePtr, u8 IicAddress, u8 RegStartAddress,
  * @param       Data is a pointer to a buffer which will be used as the data
  *              source for the write.
  *
- * @return      - XST_SUCCESS if the I2C write has successfully completed with
+ * @return
+ *              - XST_SUCCESS if the I2C write has successfully completed with
  *                no errors.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_ERROR_COUNT_MAX if the AUX request timed out.
@@ -755,7 +765,8 @@ u32 XDptx_IicWrite(XDptx *InstancePtr, u8 IicAddress, u8 RegStartAddress,
  * @param       Enable will downspread the main link signal if set to 1 and
  *              disable downspreading if set to 0.
  *
- * @return      - XST_SUCCESS if setting the downspread control enable was
+ * @return
+ *              - XST_SUCCESS if setting the downspread control enable was
  *                successful.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_FAILURE otherwise.
@@ -815,7 +826,8 @@ u32 XDptx_SetDownspread(XDptx *InstancePtr, u8 Enable)
  * @param       Enable will enable enhanced frame mode if set to 1 and disable
  *              it if set to 0.
  *
- * @return      - XST_SUCCESS if setting the enhanced frame mode enable was
+ * @return
+ *              - XST_SUCCESS if setting the enhanced frame mode enable was
  *                successful.
  *              - XST_DEVICE_NOT_FOUND if no RX is connected.
  *              - XST_FAILURE otherwise.
@@ -874,7 +886,8 @@ u32 XDptx_SetEnhancedFrameMode(XDptx *InstancePtr, u8 Enable)
  * @param       InstancePtr is a pointer to the XDptx instance.
  * @param       LaneCount is the number of lanes to be used over the main link.
  *
- * @return      - XST_SUCCESS if setting the new lane count was successful.
+ * @return
+ *              - XST_SUCCESS if setting the new lane count was successful.
  *              - XST_DEVICE_NOT_FOUND if no RX is connected.
  *              - XST_FAILURE otherwise.
  *
@@ -934,7 +947,8 @@ u32 XDptx_SetLaneCount(XDptx *InstancePtr, u8 LaneCount)
  *              - XDPTX_LINK_BW_SET_270GBPS = 0x0A (for a 2.70 Gbps data rate)
  *              - XDPTX_LINK_BW_SET_540GBPS = 0x14 (for a 5.40 Gbps data rate)
  *
- * @return      - XST_SUCCESS if setting the new link rate was successful.
+ * @return
+ *              - XST_SUCCESS if setting the new link rate was successful.
  *              - XST_DEVICE_NOT_FOUND if no RX device is connected.
  *              - XST_FAILURE otherwise.
  *
@@ -1001,7 +1015,8 @@ u32 XDptx_SetLinkRate(XDptx *InstancePtr, u8 LinkRate)
  * @param       InstancePtr is a pointer to the XDptx instance.
  * @param       Enable will enable or disable scrambling.
  *
- * @return      - XST_SUCCESS if setting the scrambling enable was successful.
+ * @return
+ *              - XST_SUCCESS if setting the scrambling enable was successful.
  *              - XST_FAILURE otherwise.
  *
  * @note        None.
@@ -1206,7 +1221,7 @@ void XDptx_WaitUs(XDptx *InstancePtr, u32 MicroSeconds)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      The next training state:
+ * @return
  *              - XST_SUCCESS if the training process succeeded.
  *              - XST_FAILURE otherwise.
  *
@@ -1307,7 +1322,8 @@ static u32 XDptx_RunTraining(XDptx *InstancePtr)
  * 
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XDPTX_TS_CHANNEL_EQUALIZATION if the clock recovery sequence
+ * @return      The next training state:
+ *              - XDPTX_TS_CHANNEL_EQUALIZATION if the clock recovery sequence
  *                completed successfully.
  *              - XDPTX_TS_FAILURE if writing the drive settings to the RX
  *                device was unsuccesful.
@@ -1417,7 +1433,8 @@ static XDptx_TrainingState XDptx_TrainingStateClockRecovery(XDptx *InstancePtr)
  *              clock recovery sequence before down-shifting to a reduced data
  *              rate or a reduced number of lanes.
  *
- * @return      - XDPTX_TS_SUCCESS if training succeeded.
+ * @return      The next training state:
+ *              - XDPTX_TS_SUCCESS if training succeeded.
  *              - XDPTX_TS_FAILURE if writing the drive settings to the RX
  *                device was unsuccesful.
  *              - XDPTX_TS_ADJUST_LINK_RATE if, after MaxIterations loop
@@ -1648,7 +1665,8 @@ static XDptx_TrainingState XDptx_TrainingStateAdjustLaneCount(
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the AUX read was successful.
+ * @return
+ *              - XST_SUCCESS if the AUX read was successful.
  *              - XST_FAILURE otherwise.
  *
  * @note        None.
@@ -1679,7 +1697,8 @@ static u32 XDptx_GetLaneStatusAdjReqs(XDptx *InstancePtr)
  * @param       InstancePtr is a pointer to the XDptx instance.
  * @param       LaneCount is the number of lanes to check.
  *
- * @return      - XST_SUCCESS if the RX device's clock recovery PLL has
+ * @return
+ *              - XST_SUCCESS if the RX device's clock recovery PLL has
  *                achieved frequency lock for all lanes in use.
  *              - XST_FAILURE otherwise.
  *
@@ -1734,7 +1753,8 @@ static u32 XDptx_CheckClockRecovery(XDptx *InstancePtr, u8 LaneCount)
  * @param       InstancePtr is a pointer to the XDptx instance.
  * @param       LaneCount is the number of lanes to check.
  *
- * @return      - XST_SUCCESS if the RX device has achieved channel
+ * @return
+ *              - XST_SUCCESS if the RX device has achieved channel
  *                equalization symbol lock, and interlane alignment for all
  *                lanes in use.
  *              - XST_FAILURE otherwise.
@@ -1820,7 +1840,8 @@ static u32 XDptx_CheckChannelEqualization(XDptx *InstancePtr, u8 LaneCount)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if writing the settings was successful.
+ * @return
+ *              - XST_SUCCESS if writing the settings was successful.
  *              - XST_FAILURE otherwise.
  *
  * @note        None.
@@ -1907,7 +1928,8 @@ static u32 XDptx_SetVswingPreemp(XDptx *InstancePtr)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the new levels were written successfully.
+ * @return
+ *              - XST_SUCCESS if the new levels were written successfully.
  *              - XST_FAILURE otherwise (an AUX transaction failed).
  *
  * @note        None.
@@ -1990,7 +2012,8 @@ static u32 XDptx_AdjVswingPreemp(XDptx *InstancePtr)
  *              - XDPTX_TRAINING_PATTERN_SET_TP2
  *              - XDPTX_TRAINING_PATTERN_SET_TP3
  *
- * @return      - XST_SUCCESS if setting the pattern was successful.
+ * @return
+ *              - XST_SUCCESS if setting the pattern was successful.
  *              - XST_FAILURE otherwise.
  *
  * @note        None.
@@ -2093,7 +2116,8 @@ static u32 XDptx_GetTrainingDelay(XDptx *InstancePtr,
  * @param       Data is a pointer to the data buffer that contains the data
  *              to be read/written from/to the RX device.
  *
- * @return      - XST_SUCCESS if the AUX transaction request was acknowledged.
+ * @return
+ *              - XST_SUCCESS if the AUX transaction request was acknowledged.
  *              - XST_ERROR_COUNT_MAX if the AUX request timed out.
  *              - XST_FAILURE otherwise (if the DisplayPort TX core sees a NACK
  *                reply code or if the AUX transaction failed).
@@ -2167,7 +2191,8 @@ static u32 XDptx_AuxCommon(XDptx *InstancePtr, u32 CmdType, u32 Address,
  *              AUX command, as well as a write buffer used for write commands,
  *              and a read buffer for read commands.
  *
- * @return      - XST_SUCCESS if the request was acknowledged.
+ * @return
+ *              - XST_SUCCESS if the request was acknowledged.
  *              - XST_ERROR_COUNT_MAX if resending the request exceeded the
  *                maximum for deferral and timeout.
  *              - XST_FAILURE otherwise (if the DisplayPort TX core sees a NACK
@@ -2225,7 +2250,8 @@ static u32 XDptx_AuxRequest(XDptx *InstancePtr, XDptx_AuxTransaction *Request)
  *              structure containing the required information for issuing an AUX
  *              command. 
  *
- * @return      - XST_SUCCESS if the request was acknowledged.
+ * @return
+ *              - XST_SUCCESS if the request was acknowledged.
  *              - XST_ERROR_COUNT_MAX if waiting for a reply timed out.
  *              - XST_SEND_ERROR if the request was deferred.
  *              - XST_FAILURE otherwise, if the request was NACK'ed.
@@ -2304,7 +2330,8 @@ static u32 XDptx_AuxRequestSend(XDptx *InstancePtr,
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if a reply was sent from the RX device.
+ * @return
+ *              - XST_SUCCESS if a reply was sent from the RX device.
  *              - XST_ERROR_COUNT_MAX otherwise, if a timeout has occurred.
  *
  * @note        None.
@@ -2342,7 +2369,8 @@ static u32 XDptx_AuxWaitReply(XDptx *InstancePtr)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the the RX device is no longer busy.
+ * @return
+ *              - XST_SUCCESS if the the RX device is no longer busy.
  *              - XST_ERROR_COUNT_MAX otherwise, if a timeout has occurred.
  *
  * @note        None.
@@ -2381,7 +2409,8 @@ static u32 XDptx_AuxWaitReady(XDptx *InstancePtr)
  *              - XDPTX_PHY_CLOCK_SELECT_270GBPS = 0x03
  *              - XDPTX_PHY_CLOCK_SELECT_540GBPS = 0x05
  *
- * @return      - XST_SUCCESS if the reset for each lane is done after the clock
+ * @return
+ *              - XST_SUCCESS if the reset for each lane is done after the clock
  *                frequency has been set.
  *              - XST_FAILURE otherwise.
  *
@@ -2421,7 +2450,8 @@ static u32 XDptx_SetClkSpeed(XDptx *InstancePtr, u32 Speed)
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_ERROR_COUNT_MAX if the PHY failed to be ready.
+ * @return
+ *              - XST_ERROR_COUNT_MAX if the PHY failed to be ready.
  *              - XST_SUCCESS otherwise.
  *
  * @note        None.
diff --git a/XilinxProcessorIPLib/drivers/dptx/src/xdptx_selftest.c b/XilinxProcessorIPLib/drivers/dptx/src/xdptx_selftest.c
index baf5174f..cd275ec8 100644
--- a/XilinxProcessorIPLib/drivers/dptx/src/xdptx_selftest.c
+++ b/XilinxProcessorIPLib/drivers/dptx/src/xdptx_selftest.c
@@ -34,7 +34,9 @@
  *
  * @file xdptx_selftest.c
  *
- * This file contains a diagnostic self-test function for the XDptx driver.
+ * This file contains a diagnostic self-test function for the XDptx driver. It
+ * will check many of the DisplayPort TX's register values against the default
+ * reset values as a sanity-check that the core is ready to be used.
  *
  * @note        None.
  *
@@ -53,19 +55,109 @@
 #include "xdptx.h"
 #include "xstatus.h"
 
+/**************************** Variable Definitions ****************************/
+
+/**
+ * This table contains the default values for the DisplayPort TX core's general
+ * usage registers.
+ */
+u32 ResetValues[53][2] =
+{
+        {XDPTX_LINK_BW_SET, 0},
+        {XDPTX_LANE_COUNT_SET, 0},
+        {XDPTX_ENHANCED_FRAME_EN, 0},
+        {XDPTX_TRAINING_PATTERN_SET, 0},
+        {XDPTX_LINK_QUAL_PATTERN_SET, 0},
+        {XDPTX_SCRAMBLING_DISABLE, 0},
+        {XDPTX_DOWNSPREAD_CTRL, 0},
+        {XDPTX_SOFT_RESET, 0},
+        {XDPTX_ENABLE, 0},
+        {XDPTX_ENABLE_MAIN_STREAM, 0},
+        {XDPTX_ENABLE_SEC_STREAM, 0},
+        {XDPTX_FORCE_SCRAMBLER_RESET, 0},
+        {XDPTX_TX_MST_CONFIG, 0},
+        {XDPTX_AUX_CMD, 0},
+        {XDPTX_AUX_WRITE_FIFO, 0},
+        {XDPTX_AUX_ADDRESS, 0},
+        {XDPTX_AUX_CLK_DIVIDER, 0},
+        {XDPTX_TX_USER_FIFO_OVERFLOW, 0},
+        {XDPTX_AUX_REPLY_DATA, 0},
+        {XDPTX_AUX_REPLY_CODE, 0},
+        {XDPTX_AUX_REPLY_COUNT, 0},
+        {XDPTX_INTERRUPT_MASK, 0x3F},
+        {XDPTX_REPLY_DATA_COUNT, 0},
+        {XDPTX_REPLY_STATUS, 0x10},
+        {XDPTX_STREAM0, 0},
+        {XDPTX_STREAM1, 0},
+        {XDPTX_STREAM2, 0},
+        {XDPTX_STREAM3, 0},
+        {XDPTX_PHY_CONFIG, 0x03},
+        {XDPTX_PHY_VOLTAGE_DIFF_LANE_0, 0},
+        {XDPTX_PHY_VOLTAGE_DIFF_LANE_1, 0},
+        {XDPTX_PHY_VOLTAGE_DIFF_LANE_2, 0},
+        {XDPTX_PHY_VOLTAGE_DIFF_LANE_3, 0},
+        {XDPTX_PHY_TRANSMIT_PRBS7, 0},
+        {XDPTX_PHY_CLOCK_SELECT, 0},
+        {XDPTX_TX_PHY_POWER_DOWN, 0},
+        {XDPTX_PHY_PRECURSOR_LANE_0, 0},
+        {XDPTX_PHY_PRECURSOR_LANE_1, 0},
+        {XDPTX_PHY_PRECURSOR_LANE_2, 0},
+        {XDPTX_PHY_PRECURSOR_LANE_3, 0},
+        {XDPTX_PHY_POSTCURSOR_LANE_0, 0},
+        {XDPTX_PHY_POSTCURSOR_LANE_1, 0},
+        {XDPTX_PHY_POSTCURSOR_LANE_2, 0},
+        {XDPTX_PHY_POSTCURSOR_LANE_3, 0},
+        {XDPTX_GT_DRP_COMMAND, 0},
+        {XDPTX_GT_DRP_READ_DATA, 0},
+        {XDPTX_GT_DRP_CHANNEL_STATUS, 0},
+        {XDPTX_TX_AUDIO_CONTROL, 0},
+        {XDPTX_TX_AUDIO_CHANNELS, 0},
+        {XDPTX_TX_AUDIO_INFO_DATA, 0},
+        {XDPTX_TX_AUDIO_MAUD, 0},
+        {XDPTX_TX_AUDIO_NAUD, 0},
+        {XDPTX_TX_AUDIO_EXT_DATA, 0}
+};
+
+/**
+ * This table contains the default values for the DisplayPort TX core's main
+ * stream attribute (MSA) registers.
+ */
+u32 ResetValuesMsa[20][2] =
+{
+        {XDPTX_MAIN_STREAM_HTOTAL, 0},
+        {XDPTX_MAIN_STREAM_VTOTAL, 0},
+        {XDPTX_MAIN_STREAM_POLARITY, 0},
+        {XDPTX_MAIN_STREAM_HSWIDTH, 0},
+        {XDPTX_MAIN_STREAM_VSWIDTH, 0},
+        {XDPTX_MAIN_STREAM_HRES, 0},
+        {XDPTX_MAIN_STREAM_VRES, 0},
+        {XDPTX_MAIN_STREAM_HSTART, 0},
+        {XDPTX_MAIN_STREAM_VSTART, 0},
+        {XDPTX_MAIN_STREAM_MISC0, 0},
+        {XDPTX_MAIN_STREAM_MISC1, 0},
+        {XDPTX_M_VID, 0},
+        {XDPTX_TU_SIZE, 0},
+        {XDPTX_N_VID, 0},
+        {XDPTX_USER_PIXEL_WIDTH, 0},
+        {XDPTX_USER_DATA_COUNT_PER_LANE, 0},
+        {XDPTX_MAIN_STREAM_INTERLACED, 0},
+        {XDPTX_MIN_BYTES_PER_TU, 0},
+        {XDPTX_FRAC_BYTES_PER_TU, 0},
+        {XDPTX_INIT_WAIT, 32}
+};
+
 /**************************** Function Definitions ****************************/
 
 /******************************************************************************/
 /**
- * This function runs a self-test on the XDptx driver/device. The test attempts
- * to intialize the DisplayPort TX core, train the main link at the highest
- * common capabilities between the core and the RX device, and checks the status
- * of the link after training.
+ * This function runs a self-test on the XDptx driver/device. The sanity test
+ * checks whether or not all tested registers hold their default reset values.
  *
  * @param       InstancePtr is a pointer to the XDptx instance.
  *
- * @return      - XST_SUCCESS if the self-test passed. The main link has been
- *                trained and established successfully.
+ * @return
+ *              - XST_SUCCESS if the self-test passed - all tested registers
+ *                hold their default reset values.
  *              - XST_FAILURE otherwise.
  *
  * @note        None.
@@ -73,35 +165,48 @@
 *******************************************************************************/
 u32 XDptx_SelfTest(XDptx *InstancePtr)
 {
-        XDptx_Config *ConfigPtr;
-        u32 Status;
+        u8 Index;
+        u8 StreamIndex;
+        u32 StreamOffset;
+        u32 Val;
 
-        /* Verify arguments. */
-        Xil_AssertNonvoid(InstancePtr != NULL);
-        Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
-
-        /* Obtain the capabilities of the RX device by reading the DisplayPort
-         * Configuration Data (DPCD). */
-        Status = XDptx_GetRxCapabilities(InstancePtr);
-        if (Status != XST_SUCCESS) {
-                return XST_FAILURE;
+        /* Compare general usage registers with their default values. */
+        for (Index = 0; Index < 53; Index++) {
+                Val = XDptx_ReadReg(InstancePtr->Config.BaseAddr,
+                                                        ResetValues[Index][0]);
+                /* Fail if register does not hold default value. */
+                if (Val != ResetValues[Index][1]) {
+                        return XST_FAILURE;
+                }
         }
 
-        /* Configure the main link attributes. */
-        Status = XDptx_CfgMainLinkMax(InstancePtr);
-        if (Status != XST_SUCCESS) {
-                return XST_FAILURE;
+        /* Compare main stream attribute (MSA) registers for all 4 streams with
+         * their default values. */
+        for (StreamIndex = 0; StreamIndex < 4; StreamIndex++) {
+                /* Determine the MSA register offset for each stream. */
+                if (StreamIndex == 0) {
+                        StreamOffset = 0;
+                }
+                else if (StreamIndex == 1) {
+                        StreamOffset = XDPTX_STREAM2_MSA_START_OFFSET;
+                }
+                else if (StreamIndex == 2) {
+                        StreamOffset = XDPTX_STREAM3_MSA_START_OFFSET;
+                }
+                else if (StreamIndex == 3) {
+                        StreamOffset = XDPTX_STREAM4_MSA_START_OFFSET;
+                }
+
+                for (Index = 0; Index < 20; Index++) {
+                        Val = XDptx_ReadReg(InstancePtr->Config.BaseAddr,
+                                        StreamOffset + ResetValuesMsa[Index][0]);
+                        /* Fail if register does not hold default value. */
+                        if (Val != ResetValuesMsa[Index][1]) {
+                                return XST_FAILURE;
+                        }
+                }
         }
 
-        /* Attempt to establish a link at the maximum common capabilities
-         * between the DisplayPort TX core and the RX device. */
-        XDptx_EstablishLink(InstancePtr);
-
-        /* Return whether or not the link has been successfully trained. */
-        Status = XDptx_CheckLinkStatus(InstancePtr,
-                                        InstancePtr->LinkConfig.LaneCount);
-        if (Status != XST_SUCCESS) {
-                return XST_FAILURE;
-        }
+        /* All tested registers hold their default reset values. */
         return XST_SUCCESS;
 }