1
0
Fork 0

MLK-17489-1: hdp api: merge CDN api V1.0.36 code

Merge Cadence HDMI API V1.0.36 code.

Signed-off-by: Sandor Yu <Sandor.yu@nxp.com>
pull/10/head
Sandor Yu 2018-01-30 16:03:55 +08:00 committed by Jason Liu
parent 164a61a9f4
commit 2cd9bbef15
11 changed files with 129 additions and 22 deletions

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -50,12 +50,25 @@
#include "util.h"
typedef enum {
AFE_LINK_RATE_1_6 = 0x6,
AFE_LINK_RATE_2_7 = 0xA,
AFE_LINK_RATE_5_4 = 0x14,
AFE_LINK_RATE_8_1 = 0x1A,
AFE_LINK_RATE_1_6 = 0x6, /* 1.62 Gb/s */
AFE_LINK_RATE_2_1 = 0x8, /* 2.16 Gb/s */
AFE_LINK_RATE_2_4 = 0x9, /* 2.43 Gb/s */
AFE_LINK_RATE_2_7 = 0xA, /* 2.70 Gb/s */
AFE_LINK_RATE_3_2 = 0xC, /* 3.24 Gb/s */
AFE_LINK_RATE_4_3 = 0x10, /* 4.32 Gb/s */
AFE_LINK_RATE_5_4 = 0x14, /* 5.40 Gb/s */
AFE_LINK_RATE_8_1 = 0x1E, /* 8.10 Gb/s */
} ENUM_AFE_LINK_RATE;
/* Some of the PHY programming sequences
* depend on the reference clock frequency.
* Variable of this type is used to control
* the programming flow. */
typedef enum {
REFCLK_24MHZ,
REFCLK_27MHZ
} REFCLK_FREQ;
typedef enum {
CLK_RATIO_1_1,
CLK_RATIO_5_4,
@ -72,6 +85,7 @@ typedef struct {
u8 msb;
} reg_field_t;
u8 AFE_check_rate_supported(ENUM_AFE_LINK_RATE rate);
void Afe_write(state_struct *state, u32 offset, u16 val);
u16 Afe_read(state_struct *state, u32 offset);
void AFE_init(state_struct *state, int num_lanes,

View File

@ -35,6 +35,8 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017-2018 NXP
*
******************************************************************************
*
* API_DPTX.c
@ -126,6 +128,8 @@ CDN_API_STATUS CDN_API_DPTX_SetHostCap(state_struct *state, u8 maxLinkRate,
u8 fastLinkTraining,
u8 laneMapping, u8 enchanced)
{
/* fifth bit of lanesCount_SSC is used to declare eDP. */
state->edp = ((lanesCount_SSC >> 5) & 1);
if (!state->running) {
if (!internal_apb_available(state))
return CDN_BSY;
@ -199,10 +203,39 @@ CDN_API_STATUS CDN_API_DPTX_Control_blocking(state_struct *state, u32 mode)
internal_block_function(&state->mutex, CDN_API_DPTX_Control(state, mode));
}
CDN_API_STATUS CDN_API_DPTX_EDP_Training(state_struct *state,
u8 mode, ENUM_AFE_LINK_RATE linkRate,
u8 rateId)
{
if (AFE_check_rate_supported(linkRate) == 0)
return CDN_ERROR_NOT_SUPPORTED;
if (!state->running) {
if (!internal_apb_available(state))
return CDN_BSY;
internal_tx_mkfullmsg(state, MB_MODULE_ID_DP_TX, DPTX_EDP_RATE_TRAINING, 3,
1, mode,
1, (u8)linkRate,
1, rateId);
state->bus_type = CDN_BUS_TYPE_APB;
return CDN_STARTED;
}
internal_process_messages(state);
return CDN_OK;
}
CDN_API_STATUS CDN_API_DPTX_EDP_Training_blocking(state_struct *state,
u8 mode,
ENUM_AFE_LINK_RATE linkRate,
u8 rateId)
{
internal_block_function(&state->mutex, CDN_API_DPTX_EDP_Training(state, mode, linkRate, rateId));
}
CDN_API_STATUS CDN_API_DPTX_Write_DPCD(state_struct *state, u32 numOfBytes,
u32 addr, u8 *buff,
DPTX_Write_DPCD_response *resp,
CDN_BUS_TYPE bus_type)
u32 addr, u8 *buff,
DPTX_Write_DPCD_response *resp,
CDN_BUS_TYPE bus_type)
{
CDN_API_STATUS ret;
if (!state->running) {

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -47,8 +47,9 @@
#ifndef _API_DPTX_H_
#define _API_DPTX_H_
# include "API_General.h"
# include "vic_table.h"
#include "API_General.h"
#include "vic_table.h"
#include "API_AFE.h"
#define MAX_NUM_OF_EVENTS 4
@ -274,6 +275,25 @@ CDN_API_STATUS CDN_API_DPTX_Control(state_struct *state, u32 mode);
*/
CDN_API_STATUS CDN_API_DPTX_Control_blocking(state_struct *state, u32 mode);
/**
* \brief Performs Fast Link Training, using LINK_RATE_SET DPCD register.
* \param [in] mode - 0 to stop training, 1 to start it, 2 to restart it.
* \param [in] linkRate - Link Rate to be used for training.
* \param [in] rateId - index of selected Link Rate in DPCd registers.
*
* Performs Fast Link Training, selecting Link Rate using LINK_RATE_SET DPCD
* register, characteristic to Embedded DisplayPort (eDP) v1.4 standard.
* If requested link rate is not supported by DPTX, function will return error
* code CDN_ERROR_NOT_SUPPORTED, and will take no further action.
* rateId is used to select, which Link Rate supported by sink (enumerated in
* SUPPORTED_LINK_RATES DPCD registers) is equal to rate requested. This value
* will be written to first 3 bits of LINK_RATE_SET DPCD registers. Allowed
* range is 0-7. If it is not known beforehand, SUPPORTED_LINK_RATES DPCD
* registers may be read by an upper layer, and then used to determine the
* correct value to use.
*/
CDN_API_STATUS CDN_API_DPTX_EDP_Training(state_struct *state, u8 mode, ENUM_AFE_LINK_RATE linkRate, u8 rateId);
CDN_API_STATUS CDN_API_DPTX_EDP_Training_blocking(state_struct *state, u8 mode, ENUM_AFE_LINK_RATE linkRate, u8 rateId);
/**
* \brief send DPX_ENABLE_EVENT command
*/

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -49,6 +49,7 @@
#include "apb_cfg.h"
#include "opcodes.h"
#include "general_handler.h"
#include "util.h"
static u32 alive;
@ -473,3 +474,32 @@ CDN_API_STATUS CDN_API_General_Phy_Test_Access_blocking(state_struct *state,
{
internal_block_function(&state->mutex, CDN_API_General_Phy_Test_Access(state, resp));
}
CDN_API_STATUS CDN_API_General_GetHpdState(state_struct *state, u8 *hpd_state)
{
CDN_API_STATUS ret;
*hpd_state = 0;
if (!state->running) {
if (!internal_apb_available(state))
return CDN_BSY;
internal_tx_mkfullmsg(state, MB_MODULE_ID_GENERAL, GENERAL_GET_HPD_STATE, 0);
state->bus_type = CDN_BUS_TYPE_APB;
state->rxEnable = 1;
return CDN_STARTED;
}
internal_process_messages(state);
ret = internal_test_rx_head(state, MB_MODULE_ID_GENERAL, GENERAL_GET_HPD_STATE);
if (ret != CDN_OK)
return ret;
internal_readmsg(state, 1, 1, hpd_state);
return CDN_OK;
}
CDN_API_STATUS CDN_API_General_GetHpdState_blocking(state_struct *state, u8 *hpd_state)
{
internal_block_function(&state->mutex, CDN_API_General_GetHpdState(state, hpd_state));
}

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -240,5 +240,7 @@ CDN_API_STATUS CDN_API_General_Write_Field_blocking(state_struct *state,
CDN_API_STATUS CDN_API_General_Phy_Test_Access(state_struct *state, u8 *resp);
CDN_API_STATUS CDN_API_General_Phy_Test_Access_blocking(state_struct *state,
u8 *resp);
CDN_API_STATUS CDN_API_General_GetHpdState(state_struct *state, u8 *hpd_state);
CDN_API_STATUS CDN_API_General_GetHpdState_blocking(state_struct *state, u8 *hpd_state);
#endif

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -52,6 +52,7 @@
#include "address.h"
#include "source_car.h"
#include "source_vif.h"
#include "general_handler.h"
#include <soc/imx8/soc.h>
CDN_API_STATUS CDN_API_HDMITX_DDC_READ(state_struct *state,
@ -489,16 +490,14 @@ CDN_API_STATUS CDN_API_HDMITX_GetHpdStatus(state_struct *state, u8 *hpd_sts)
if (!state->running) {
if (!internal_apb_available(state))
return CDN_BSY;
internal_tx_mkfullmsg(state, MB_MODULE_ID_HDMI_TX,
HDMI_TX_HPD_STATUS, 0);
internal_tx_mkfullmsg(state, MB_MODULE_ID_GENERAL, GENERAL_GET_HPD_STATE, 0);
state->rxEnable = 1;
state->bus_type = CDN_BUS_TYPE_APB;
return CDN_STARTED;
}
internal_process_messages(state);
ret =
internal_test_rx_head(state, MB_MODULE_ID_HDMI_TX,
HDMI_TX_HPD_STATUS);
internal_test_rx_head(state, MB_MODULE_ID_GENERAL, GENERAL_GET_HPD_STATE);
if (ret != CDN_OK)
return ret;
internal_readmsg(state, 1, 1, hpd_sts);

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -68,6 +68,7 @@
#define GENERAL_WRITE_REGISTER 0x05
#define GENERAL_WRITE_FIELD 0x06
#define GENERAL_READ_REGISTER 0x07
#define GENERAL_GET_HPD_STATE 0x11
#define GENERAL_TEST_TRNG_SIMPLE 0xF0

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -71,6 +71,7 @@
#define DPTX_SET_LINK_BREAK_POINT 0x0F
#define DPTX_FORCE_LANES 0x10
#define DPTX_HPD_STATE 0x11
#define DPTX_EDP_RATE_TRAINING 0x12
#define DPTX_DBG_SET 0xF0
#define DP_TX_OPCODE_READ_I2C_REQUEST 0xA5
#define DP_TX_OPCODE_WRITE_I2C_REQUEST 0xA6

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*

View File

@ -91,6 +91,8 @@ typedef enum {
CDN_CEC_ERR_RX_FAILED,
/** Operation aborted. */
CDN_CEC_ERR_ABORT,
/** All Logical Addresses are in use. */
CDN_CEC_ERR_ALL_LA_IN_USE,
} CDN_API_STATUS;
typedef enum {
@ -153,6 +155,7 @@ typedef struct {
u8 running;
CDN_BUS_TYPE bus_type;
u32 tmp;
u32 edp; /* use eDP */
struct mutex mutex; //mutex may replace running
struct hdp_mem *mem;

View File

@ -35,7 +35,7 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Copyright 2017 NXP
* Copyright 2017-2018 NXP
*
******************************************************************************
*
@ -95,7 +95,11 @@ typedef enum {
typedef enum {
RATE_1_6 = 162,
RATE_2_1 = 216,
RATE_2_4 = 243,
RATE_2_7 = 270,
RATE_3_2 = 324,
RATE_4_3 = 432,
RATE_5_4 = 540,
RATE_8_1 = 810,
} VIC_SYMBOL_RATE;