mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-04-24 08:19:14 +00:00
550.54.14
This commit is contained in:
@@ -111,7 +111,7 @@ void updateColorFormatForDisplayIdExtnTimings(NVT_EDID_INFO *pInfo,
|
||||
nvt_assert((timingIdx) <= COUNT(pInfo->timing));
|
||||
|
||||
if ((pInfo->input.u.digital.video_interface == NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_HDMI_A_SUPPORTED ||
|
||||
pInfo->input.u.digital.video_interface == NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_HDMI_B_SUPPORTED ||
|
||||
pInfo->input.u.digital.video_interface == NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_HDMI_B_SUPPORTED ||
|
||||
pInfo->ext861.valid.H14B_VSDB || pInfo->ext861.valid.H20_HF_VSDB) && pInfo->ext861.revision >= NVT_CEA861_REV_A)
|
||||
{
|
||||
if (!pInfo->ext_displayid.supported_displayId2_0)
|
||||
@@ -153,7 +153,7 @@ void updateColorFormatForDisplayIdExtnTimings(NVT_EDID_INFO *pInfo,
|
||||
pDisplayIdInfo->u4.display_interface_features.rgb_depth.support_10b,
|
||||
pDisplayIdInfo->u4.display_interface_features.rgb_depth.support_12b,
|
||||
pDisplayIdInfo->u4.display_interface_features.rgb_depth.support_14b,
|
||||
pDisplayIdInfo->u4.display_interface_features.rgb_depth.support_16b);
|
||||
pDisplayIdInfo->u4.display_interface_features.rgb_depth.support_16b);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ void updateColorFormatForDisplayIdExtnTimings(NVT_EDID_INFO *pInfo,
|
||||
pDisplayIdInfo->u4.display_interface.ycbcr422_depth.support_14b,
|
||||
pDisplayIdInfo->u4.display_interface.ycbcr422_depth.support_16b);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
// yuv444
|
||||
UPDATE_BPC_FOR_COLORFORMAT(pT->etc.yuv444, 0, /* yuv444 does not support 6bpc */
|
||||
@@ -264,7 +264,7 @@ static NVT_STATUS parseDisplayIdSection(DISPLAYID_SECTION * section,
|
||||
* @brief Parses a displayID data block
|
||||
* @param block The DisplayID data block to parse
|
||||
* @param max_length The indicated total length of the each data block for checking
|
||||
* @param pLength return the indicated length of the each data block
|
||||
* @param pLength return the indicated length of the each data block
|
||||
* @param pEdidInfo EDID struct containing DisplayID information and
|
||||
* the timings or validation purpose if it is NULL
|
||||
*/
|
||||
@@ -285,7 +285,7 @@ NVT_STATUS parseDisplayIdBlock(NvU8* pBlock,
|
||||
return NVT_STATUS_ERR;
|
||||
|
||||
pInfo = pEdidInfo == NULL ? NULL : &pEdidInfo->ext_displayid;
|
||||
|
||||
|
||||
*pLength = hdr->data_bytes + NVT_DISPLAYID_DATABLOCK_HEADER_LEN;
|
||||
|
||||
switch (hdr->type)
|
||||
@@ -386,9 +386,9 @@ static NVT_STATUS parseDisplayIdColorChar(NvU8 * block, NVT_DISPLAYID_INFO *pInf
|
||||
|
||||
for (i = 0; i < prim_num; i++)
|
||||
{
|
||||
x_p = (blk->points)[i].color_x_bits_low +
|
||||
x_p = (blk->points)[i].color_x_bits_low +
|
||||
(DRF_VAL(T_DISPLAYID, _COLOR, _POINT_X, (blk->points)[i].color_bits_mid) << 8);
|
||||
y_p = DRF_VAL(T_DISPLAYID, _COLOR, _POINT_Y, (blk->points)[i].color_bits_mid) +
|
||||
y_p = DRF_VAL(T_DISPLAYID, _COLOR, _POINT_Y, (blk->points)[i].color_bits_mid) +
|
||||
((blk->points)[i].color_y_bits_high << 4);
|
||||
pInfo->primaries[i].x = x_p;
|
||||
pInfo->primaries[i].y = y_p;
|
||||
@@ -396,9 +396,9 @@ static NVT_STATUS parseDisplayIdColorChar(NvU8 * block, NVT_DISPLAYID_INFO *pInf
|
||||
|
||||
for (j = 0; j < wp_num; j++)
|
||||
{
|
||||
x_p = (blk->points)[i].color_x_bits_low +
|
||||
x_p = (blk->points)[i].color_x_bits_low +
|
||||
(DRF_VAL(T_DISPLAYID, _COLOR, _POINT_X, (blk->points)[i].color_bits_mid) << 8);
|
||||
y_p = DRF_VAL(T_DISPLAYID, _COLOR, _POINT_Y, (blk->points)[i].color_bits_mid) +
|
||||
y_p = DRF_VAL(T_DISPLAYID, _COLOR, _POINT_Y, (blk->points)[i].color_bits_mid) +
|
||||
((blk->points)[i].color_y_bits_high << 4);
|
||||
pInfo->white_points[pInfo->total_primaries + j].x = x_p;
|
||||
pInfo->white_points[pInfo->total_primaries + j].y = y_p;
|
||||
@@ -508,7 +508,6 @@ static NVT_STATUS parseDisplayIdTiming1(NvU8 * block, NVT_EDID_INFO *pEdidInfo)
|
||||
CODE_SEGMENT(PAGE_DD_CODE)
|
||||
static NVT_STATUS parseDisplayIdTiming1Descriptor(DISPLAYID_TIMING_1_DESCRIPTOR * type1, NVT_TIMING *pT)
|
||||
{
|
||||
NvU32 totalPixels_in_2_fields;
|
||||
if (type1 == NULL || pT == NULL)
|
||||
return NVT_STATUS_ERR;
|
||||
|
||||
@@ -569,30 +568,17 @@ static NVT_STATUS parseDisplayIdTiming1Descriptor(DISPLAYID_TIMING_1_DESCRIPTOR
|
||||
}
|
||||
|
||||
// the refresh rate
|
||||
if (pT->interlaced)
|
||||
{
|
||||
// in interlaced mode, adjust for one extra line in every other frame. pT->VTotal is field based here
|
||||
totalPixels_in_2_fields = (NvU32)pT->HTotal * ((NvU32)pT->VTotal * 2 + 1);
|
||||
// calculate the field rate in interlaced mode
|
||||
pT->etc.rr = (NvU16)axb_div_c(pT->pclk * 2, 10000, totalPixels_in_2_fields);
|
||||
pT->etc.rrx1k = axb_div_c(pT->pclk * 2, 10000000, totalPixels_in_2_fields);
|
||||
}
|
||||
else
|
||||
{
|
||||
// calculate frame rate in progressive mode
|
||||
// in progressive mode filed = frame
|
||||
pT->etc.rr = (NvU16)axb_div_c(pT->pclk, 10000, (NvU32)pT->HTotal * (NvU32)pT->VTotal);
|
||||
pT->etc.rrx1k = axb_div_c(pT->pclk, 10000000, (NvU32)pT->HTotal * (NvU32)pT->VTotal);
|
||||
}
|
||||
pT->etc.rr = NvTiming_CalcRR(pT->pclk, pT->interlaced, pT->HTotal, pT->VTotal);
|
||||
pT->etc.rrx1k = NvTiming_CalcRRx1k(pT->pclk, pT->interlaced, pT->HTotal, pT->VTotal);
|
||||
pT->etc.name[39] = '\0';
|
||||
pT->etc.rep = 0x1; // bit mask for no pixel repetition
|
||||
|
||||
|
||||
pT->etc.status = NVT_STATUS_DISPLAYID_1;
|
||||
// Unlike the PTM in EDID base block, DisplayID type I/II preferred timing does not have dependency on sequence
|
||||
// so we'll just update the preferred flag, not sequence them
|
||||
//pT->etc.status = NVT_STATUS_DISPLAYID_1N(1);
|
||||
pT->etc.flag |= type1->options.is_preferred_detailed_timing ? NVT_FLAG_DISPLAYID_DTD_PREFERRED_TIMING : 0;
|
||||
|
||||
|
||||
/* Fields currently not used. Uncomment them for future use
|
||||
type1->options.stereo_support;
|
||||
*/
|
||||
@@ -651,7 +637,6 @@ static NVT_STATUS parseDisplayIdTiming2(NvU8 * block, NVT_EDID_INFO *pEdidInfo)
|
||||
CODE_SEGMENT(PAGE_DD_CODE)
|
||||
static NVT_STATUS parseDisplayIdTiming2Descriptor(DISPLAYID_TIMING_2_DESCRIPTOR * type2, NVT_TIMING *pT)
|
||||
{
|
||||
NvU32 totalPixels_in_2_fields;
|
||||
if (type2 == NULL || pT == NULL)
|
||||
return NVT_STATUS_ERR;
|
||||
|
||||
@@ -679,32 +664,19 @@ static NVT_STATUS parseDisplayIdTiming2Descriptor(DISPLAYID_TIMING_2_DESCRIPTOR
|
||||
pT->interlaced = type2->options.interface_frame_scanning_type;
|
||||
|
||||
// the refresh rate
|
||||
if (pT->interlaced)
|
||||
{
|
||||
// in interlaced mode, adjust for one extra line in every other frame. pT->VTotal is field based here
|
||||
totalPixels_in_2_fields = (NvU32)pT->HTotal * ((NvU32)pT->VTotal * 2 + 1);
|
||||
// calculate the field rate in interlaced mode
|
||||
pT->etc.rr = (NvU16)axb_div_c(pT->pclk * 2, 10000, totalPixels_in_2_fields);
|
||||
pT->etc.rrx1k = axb_div_c(pT->pclk * 2, 10000000, totalPixels_in_2_fields);
|
||||
}
|
||||
else
|
||||
{
|
||||
// calculate frame rate in progressive mode
|
||||
// in progressive mode filed = frame
|
||||
pT->etc.rr = (NvU16)axb_div_c(pT->pclk, 10000, (NvU32)pT->HTotal * (NvU32)pT->VTotal);
|
||||
pT->etc.rrx1k = axb_div_c(pT->pclk, 10000000, (NvU32)pT->HTotal * (NvU32)pT->VTotal);
|
||||
}
|
||||
pT->etc.rr = NvTiming_CalcRR(pT->pclk, pT->interlaced, pT->HTotal, pT->VTotal);
|
||||
pT->etc.rrx1k = NvTiming_CalcRRx1k(pT->pclk, pT->interlaced, pT->HTotal, pT->VTotal);
|
||||
|
||||
pT->etc.aspect = 0;
|
||||
pT->etc.name[39] = '\0';
|
||||
pT->etc.rep = 0x1; // Bit mask for no pixel repetition
|
||||
|
||||
|
||||
pT->etc.status = NVT_STATUS_DISPLAYID_2;
|
||||
// Unlike the PTM in EDID base block, DisplayID type I/II preferred timing does not have dependency on sequence
|
||||
// so we'll just update the preferred flag, not sequence them
|
||||
//pT->etc.status = NVT_STATUS_DISPLAYID_1N(1);
|
||||
pT->etc.flag |= type2->options.is_preferred_detailed_timing ? NVT_FLAG_DISPLAYID_DTD_PREFERRED_TIMING : 0;
|
||||
|
||||
|
||||
/* Fields currently not used. Uncomment them for future use
|
||||
type1->options.stereo_support;
|
||||
*/
|
||||
@@ -861,12 +833,12 @@ static NVT_STATUS parseDisplayIdTiming5Descriptor(DISPLAYID_TIMING_5_DESCRIPTOR
|
||||
{
|
||||
NvU32 width, height, rr;
|
||||
NvBool is1000div1001 = NV_FALSE;
|
||||
|
||||
|
||||
// we don't handle stereo type nor custom reduced blanking yet
|
||||
//NvU8 stereoType, formula;
|
||||
//stereoType = (desc->optns & NVT_DISPLAYID_TIMING_5_STEREO_SUPPORT_MASK);
|
||||
//formula = desc->optns & NVT_DISPLAYID_TIMING_5_FORMULA_SUPPORT_MASK;
|
||||
|
||||
|
||||
if (desc->optns & NVT_DISPLAYID_TIMING_5_FRACTIONAL_RR_SUPPORT_MASK)
|
||||
{
|
||||
is1000div1001 = NV_TRUE;
|
||||
@@ -892,7 +864,7 @@ static NVT_STATUS parseDisplayIdTiming5(NvU8 * block, NVT_EDID_INFO *pEdidInfo)
|
||||
for (i = 0; i * sizeof(DISPLAYID_TIMING_5_DESCRIPTOR) < blk->header.data_bytes; i++)
|
||||
{
|
||||
NVMISC_MEMSET(&newTiming, 0, sizeof(newTiming));
|
||||
|
||||
|
||||
if (parseDisplayIdTiming5Descriptor(blk->descriptors + i, &newTiming) == NVT_STATUS_SUCCESS)
|
||||
{
|
||||
if (pEdidInfo == NULL) continue;
|
||||
@@ -1030,7 +1002,7 @@ static NVT_STATUS parseDisplayIdRangeLimits(NvU8 * block, NVT_DISPLAYID_INFO *pI
|
||||
|
||||
rl = pInfo->range_limits + pInfo->rl_num;
|
||||
(pInfo->rl_num)++;
|
||||
|
||||
|
||||
rl->pclk_min = minPclk;
|
||||
rl->pclk_max = maxPclk;
|
||||
|
||||
@@ -1105,7 +1077,7 @@ static NVT_STATUS parseDisplayIdDeviceData(NvU8 * block, NVT_DISPLAYID_INFO *pIn
|
||||
pInfo->device_op_mode = DRF_VAL(T_DISPLAYID, _DEVICE, _OPERATING_MODE, blk->operating_mode);
|
||||
pInfo->support_backlight = DRF_VAL(T_DISPLAYID, _DEVICE, _BACKLIGHT, blk->operating_mode);
|
||||
pInfo->support_intensity = DRF_VAL(T_DISPLAYID, _DEVICE, _INTENSITY, blk->operating_mode);
|
||||
|
||||
|
||||
pInfo->horiz_pixel_count = blk->horizontal_pixel_count;
|
||||
pInfo->vert_pixel_count = blk->vertical_pixel_count;
|
||||
|
||||
@@ -1278,7 +1250,7 @@ static NVT_STATUS parseDisplayIdStereo(NvU8 * block, NVT_DISPLAYID_INFO *pInfo)
|
||||
nvt_assert(0);
|
||||
return NVT_STATUS_ERR;
|
||||
}
|
||||
|
||||
|
||||
return NVT_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1322,7 +1294,7 @@ static NVT_STATUS parseDisplayIdTiledDisplay(NvU8 * block, NVT_DISPLAYID_INFO *p
|
||||
pInfo->bezel_info.left = (blk->bezel_info.left * blk->bezel_info.pixel_density) / 10;
|
||||
|
||||
pInfo->tile_topology_id.vendor_id = (blk->topology_id.vendor_id[2] << 16) |
|
||||
(blk->topology_id.vendor_id[1] << 8 ) |
|
||||
(blk->topology_id.vendor_id[1] << 8 ) |
|
||||
blk->topology_id.vendor_id[0];
|
||||
|
||||
pInfo->tile_topology_id.product_id = (blk->topology_id.product_id[1] << 8) | blk->topology_id.product_id[0];
|
||||
@@ -1350,7 +1322,7 @@ static NVT_STATUS parseDisplayIdCtaData(NvU8 * block, NVT_EDID_INFO *pInfo)
|
||||
if (pInfo == NULL) return NVT_STATUS_SUCCESS;
|
||||
|
||||
p861info = &pInfo->ext861;
|
||||
|
||||
|
||||
pInfo->ext_displayid.cea_data_block_present = 1;
|
||||
p861info->revision = blk->revision;
|
||||
|
||||
@@ -1366,7 +1338,7 @@ static NVT_STATUS parseDisplayIdCtaData(NvU8 * block, NVT_EDID_INFO *pInfo)
|
||||
|
||||
//parse HDR related information from the HDR static metadata data block
|
||||
parseCea861HdrStaticMetadataDataBlock(p861info, pInfo, FROM_DISPLAYID_13_DATA_BLOCK);
|
||||
|
||||
|
||||
// base video
|
||||
parse861bShortTiming(p861info, pInfo, FROM_DISPLAYID_13_DATA_BLOCK);
|
||||
// yuv420-only video
|
||||
@@ -1422,7 +1394,7 @@ static NVT_STATUS parseDisplayIdDisplayInterfaceFeatures(NvU8 * block, NVT_DISPL
|
||||
|
||||
// Minimum Pixel Rate at Which YCbCr 4:2:0 Encoding Is Supported
|
||||
pInfo->u4.display_interface_features.minimum_pixel_rate_ycbcr420 = blk->minimum_pixel_rate_ycbcr420;
|
||||
|
||||
|
||||
// Audio capability
|
||||
pInfo->u4.display_interface_features.audio_capability.support_32khz = DRF_VAL(T_DISPLAYID, _INTERFACE_FEATURES, _AUDIO_SUPPORTED_32KHZ, blk->supported_audio_capability);
|
||||
pInfo->u4.display_interface_features.audio_capability.support_44_1khz = DRF_VAL(T_DISPLAYID, _INTERFACE_FEATURES, _AUDIO_SUPPORTED_44_1KHZ, blk->supported_audio_capability);
|
||||
|
||||
Reference in New Issue
Block a user