mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-01-26 19:19:47 +00:00
515.65.01
This commit is contained in:
@@ -122,6 +122,8 @@ namespace DisplayPort
|
||||
ConnectorType connectorType;
|
||||
Address address;
|
||||
GUID guid;
|
||||
GUID guid2;
|
||||
bool bVirtualPeerDevice;
|
||||
NvU8 peerDevice;
|
||||
NvU8 dpcdRevisionMajor;
|
||||
NvU8 dpcdRevisionMinor;
|
||||
@@ -357,6 +359,29 @@ namespace DisplayPort
|
||||
return hal->setIgnoreMSATimingParamters(msaTimingParamIgnoreEn);
|
||||
}
|
||||
|
||||
bool isVirtualPeerDevice()
|
||||
{
|
||||
return bVirtualPeerDevice;
|
||||
}
|
||||
|
||||
bool isBranchDevice()
|
||||
{
|
||||
return !isVideoSink() && !isAudioSink();
|
||||
}
|
||||
|
||||
bool isAtLeastVersion(unsigned major, unsigned minor)
|
||||
{
|
||||
if (dpcdRevisionMajor > major)
|
||||
return true;
|
||||
|
||||
if (dpcdRevisionMajor < major)
|
||||
return false;
|
||||
|
||||
return dpcdRevisionMinor >= minor;
|
||||
}
|
||||
|
||||
virtual void queryGUID2();
|
||||
|
||||
virtual bool getSDPExtnForColorimetrySupported();
|
||||
|
||||
virtual bool isPowerSuspended();
|
||||
@@ -447,6 +472,7 @@ namespace DisplayPort
|
||||
unsigned getDscPeakThroughputModel();
|
||||
unsigned getDscMaxSliceWidth();
|
||||
unsigned getDscDecoderColorDepthSupportMask();
|
||||
void setDscDecompressionDevice(bool bDscCapBasedOnParent);
|
||||
};
|
||||
class DeviceHDCPDetection : public Object, MessageManager::Message::MessageEventSink, Timer::TimerCallback
|
||||
{
|
||||
|
||||
@@ -624,132 +624,36 @@ create:
|
||||
if (existingDev && existingDev->complianceDeviceEdidReadTest)
|
||||
existingDev->lazyExitNow = true;
|
||||
|
||||
if(newDev->isBranchDevice() && newDev->isAtLeastVersion(1,4))
|
||||
{
|
||||
//
|
||||
// GUID_2 will be non-zero for a virtual peer device and 0 for others.
|
||||
// This will help identify if a device is virtual peer device or not.
|
||||
//
|
||||
newDev->queryGUID2();
|
||||
}
|
||||
|
||||
// Read panel DSC support only if GPU supports DSC
|
||||
bool bGpuDscSupported;
|
||||
main->getDscCaps(&bGpuDscSupported);
|
||||
if (bGpuDscSupported && newDev->getDSCSupport())
|
||||
if (bGpuDscSupported)
|
||||
{
|
||||
// Read and parse DSC caps only if panel supports DSC
|
||||
newDev->readAndParseDSCCaps();
|
||||
|
||||
// Read and Parse Branch Specific DSC Caps
|
||||
if (!newDev->isVideoSink() && !newDev->isAudioSink())
|
||||
if (newDev->getDSCSupport())
|
||||
{
|
||||
newDev->readAndParseBranchSpecificDSCCaps();
|
||||
}
|
||||
}
|
||||
// Read and parse DSC caps only if panel supports DSC
|
||||
newDev->readAndParseDSCCaps();
|
||||
|
||||
// Decide if DSC stream can be sent to new device
|
||||
newDev->bDSCPossible = false;
|
||||
newDev->devDoingDscDecompression = NULL;
|
||||
if (bGpuDscSupported && !processedEdid.WARFlags.bIgnoreDscCap)
|
||||
{
|
||||
if (newDev->multistream)
|
||||
{
|
||||
if ((newDev->peerDevice == Dongle) &&
|
||||
(newDev->dpcdRevisionMajor != 0) &&
|
||||
!bDscCapBasedOnParent)
|
||||
// Read and Parse Branch Specific DSC Caps
|
||||
if (!newDev->isVideoSink() && !newDev->isAudioSink())
|
||||
{
|
||||
// For Peer Type 4 device with LAM DPCD rev != 0.0, check only the device's own DSC capability.
|
||||
if (newDev->isDSCSupported())
|
||||
{
|
||||
newDev->bDSCPossible = true;
|
||||
newDev->devDoingDscDecompression = newDev;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this->bDscMstEnablePassThrough)
|
||||
{
|
||||
//
|
||||
// Check the device's own and its parent's DSC capability.
|
||||
// - Sink device will do DSC cecompression when
|
||||
// 1. Sink device is capable of DSC decompression and parent
|
||||
// supports DSC pass through.
|
||||
//
|
||||
// - Sink device's parent will do DSC decompression
|
||||
// 1. If sink device supports DSC decompression but it's parent does not support
|
||||
// DSC Pass through, but supports DSC decompression.
|
||||
// 2. If the device does not support DSC decompression, but parent supports it.
|
||||
//
|
||||
if (newDev->isDSCSupported())
|
||||
{
|
||||
if (newDev->videoSink && newDev->parent)
|
||||
{
|
||||
if (newDev->parent->isDSCPassThroughSupported())
|
||||
{
|
||||
//
|
||||
// This condition takes care of DSC capable sink devices
|
||||
// connected behind a DSC Pass through capable branch
|
||||
//
|
||||
newDev->devDoingDscDecompression = newDev;
|
||||
newDev->bDSCPossible = true;
|
||||
}
|
||||
else if (newDev->parent->isDSCSupported())
|
||||
{
|
||||
//
|
||||
// This condition takes care of DSC capable sink devices
|
||||
// connected behind a branch device that is not capable
|
||||
// of DSC pass through but can do DSC decompression.
|
||||
//
|
||||
newDev->bDSCPossible = true;
|
||||
newDev->devDoingDscDecompression = newDev->parent;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// This condition takes care of branch device capable of DSC.
|
||||
newDev->devDoingDscDecompression = newDev;
|
||||
newDev->bDSCPossible = true;
|
||||
}
|
||||
}
|
||||
else if (newDev->parent && newDev->parent->isDSCSupported())
|
||||
{
|
||||
//
|
||||
// This condition takes care of sink devices not capable of DSC
|
||||
// but parent is capable of DSC decompression.
|
||||
//
|
||||
newDev->bDSCPossible = true;
|
||||
newDev->devDoingDscDecompression = newDev->parent;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Revert to old code if DSC Pass through support is not requested.
|
||||
// This code will be deleted once DSC Pass through support will be enabled
|
||||
// by default which will be done when 2Head1OR MST (GR-133) will be in production.
|
||||
//
|
||||
// Check the device's own and its parent's DSC capability. Parent of the device can do
|
||||
// DSC decompression and send uncompressed stream to downstream device
|
||||
//
|
||||
if (newDev->isDSCSupported() || (newDev->parent && newDev->parent->isDSCSupported()))
|
||||
{
|
||||
newDev->bDSCPossible = true;
|
||||
}
|
||||
|
||||
// For multistream device, determine who will do the DSC decompression
|
||||
if (newDev->bDSCPossible)
|
||||
{
|
||||
if(!newDev->isDSCSupported())
|
||||
{
|
||||
newDev->devDoingDscDecompression = newDev->parent;
|
||||
}
|
||||
else
|
||||
{
|
||||
newDev->devDoingDscDecompression = newDev;
|
||||
}
|
||||
}
|
||||
}
|
||||
newDev->readAndParseBranchSpecificDSCCaps();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (!processedEdid.WARFlags.bIgnoreDscCap)
|
||||
{
|
||||
if (newDev->isDSCSupported())
|
||||
{
|
||||
newDev->bDSCPossible = true;
|
||||
newDev->devDoingDscDecompression = newDev;
|
||||
}
|
||||
// Check if DSC is possible for the device and if so, set DSC Decompression device.
|
||||
newDev->setDscDecompressionDevice(this->bDscCapBasedOnParent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1953,8 +1857,9 @@ void ConnectorImpl::fireEvents()
|
||||
void ConnectorImpl::fireEventsInternal()
|
||||
{
|
||||
ListElement * next;
|
||||
Address::StringBuffer sb;
|
||||
Address::StringBuffer sb, sb1;
|
||||
DP_USED(sb);
|
||||
DP_USED(sb1);
|
||||
for (ListElement * e = deviceList.begin(); e != deviceList.end(); e = next)
|
||||
{
|
||||
next = e->next;
|
||||
@@ -2096,7 +2001,7 @@ void ConnectorImpl::fireEventsInternal()
|
||||
DP_LOG(("DPCONN> New device %s | Native DSC Capability - %s | DSC Decompression Device - %s",
|
||||
dev->address.toString(sb),
|
||||
(dev->isDSCSupported() ? "Capable" : "Not Capable"),
|
||||
(dev->devDoingDscDecompression) ? dev->devDoingDscDecompression->address.toString(sb):"NA"));
|
||||
(dev->devDoingDscDecompression) ? dev->devDoingDscDecompression->address.toString(sb1):"NA"));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -81,6 +81,7 @@ DeviceImpl::DeviceImpl(DPCDHAL * hal, ConnectorImpl * connector, DeviceImpl * pa
|
||||
activeGroup(0),
|
||||
connector(connector),
|
||||
address(),
|
||||
bVirtualPeerDevice(false),
|
||||
plugged(false),
|
||||
friendlyAux(this),
|
||||
isHDCPCap(False),
|
||||
@@ -1445,6 +1446,8 @@ NvBool DeviceImpl::getDSCSupport()
|
||||
NvU8 byte = 0;
|
||||
unsigned size = 0;
|
||||
unsigned nakReason = NakUndefined;
|
||||
Address::StringBuffer sb;
|
||||
DP_USED(sb);
|
||||
|
||||
dscCaps.bDSCSupported = false;
|
||||
|
||||
@@ -1462,6 +1465,11 @@ NvBool DeviceImpl::getDSCSupport()
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
DP_LOG(("DP-DEV> DSC Support AUX READ failed for %s!", address.toString(sb)));
|
||||
}
|
||||
|
||||
return dscCaps.bDSCSupported;
|
||||
}
|
||||
|
||||
@@ -1737,16 +1745,40 @@ bool DeviceImpl::readAndParseDSCCaps()
|
||||
|
||||
unsigned sizeCompleted = 0;
|
||||
unsigned nakReason = NakUndefined;
|
||||
Address::StringBuffer sb;
|
||||
DP_USED(sb);
|
||||
|
||||
if(AuxBus::success != this->getDpcdData(NV_DPCD14_DSC_SUPPORT,
|
||||
&rawDscCaps[0], sizeof(rawDscCaps), &sizeCompleted, &nakReason))
|
||||
{
|
||||
DP_LOG(("DP-DEV> Error querying DSC Caps on %s!", this->address.toString(sb)));
|
||||
return false;
|
||||
}
|
||||
|
||||
return parseDscCaps(&rawDscCaps[0], sizeof(rawDscCaps));
|
||||
}
|
||||
|
||||
void DeviceImpl::queryGUID2()
|
||||
{
|
||||
unsigned sizeCompleted = 0;
|
||||
unsigned nakReason = NakUndefined;
|
||||
Address::StringBuffer sb;
|
||||
DP_USED(sb);
|
||||
|
||||
if(AuxBus::success == this->getDpcdData(NV_DPCD20_GUID_2,
|
||||
&this->guid2.data[0], DPCD_GUID_SIZE, &sizeCompleted, &nakReason))
|
||||
{
|
||||
if (!(this->guid2.isGuidZero()))
|
||||
{
|
||||
this->bVirtualPeerDevice = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DP_LOG(("DP-DEV> Error querying GUID2 on %s!", this->address.toString(sb)));
|
||||
}
|
||||
}
|
||||
|
||||
bool DeviceImpl::readAndParseBranchSpecificDSCCaps()
|
||||
{
|
||||
unsigned sizeCompleted = 0;
|
||||
@@ -1785,7 +1817,7 @@ bool DeviceImpl::getDscEnable(bool *pEnable)
|
||||
|
||||
if (status != AuxBus::success)
|
||||
{
|
||||
DP_LOG(("DP> Error querying DSC Enable State!"));
|
||||
DP_LOG(("DP-DEV> Error querying DSC Enable State!"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1793,13 +1825,110 @@ bool DeviceImpl::getDscEnable(bool *pEnable)
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeviceImpl::setDscDecompressionDevice(bool bDscCapBasedOnParent)
|
||||
{
|
||||
// Decide if DSC stream can be sent to new device
|
||||
this->bDSCPossible = false;
|
||||
this->devDoingDscDecompression = NULL;
|
||||
|
||||
if (this->multistream)
|
||||
{
|
||||
if ((this->peerDevice == Dongle) &&
|
||||
(this->dpcdRevisionMajor != 0) &&
|
||||
!bDscCapBasedOnParent)
|
||||
{
|
||||
// For Peer Type 4 device with LAM DPCD rev != 0.0, check only the device's own DSC capability.
|
||||
if (this->isDSCSupported())
|
||||
{
|
||||
this->bDSCPossible = true;
|
||||
this->devDoingDscDecompression = this;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Check the device's own and its parent's DSC capability.
|
||||
// - Sink device will do DSC cecompression when
|
||||
// 1. Sink device is capable of DSC decompression
|
||||
// 2. Sink is on a logical port (8-15)
|
||||
//
|
||||
// OR
|
||||
//
|
||||
// 1. Sink device is capable of DSC decompression
|
||||
// 2. Parent of sink is a Virtual Peer device
|
||||
// 3. Parent of sink supports DSC Pass through
|
||||
//
|
||||
// - Sink device's parent will do DSC decompression
|
||||
// 1. Above conditions are not true.
|
||||
// 2. Parent of sink supports DSC decompression.
|
||||
//
|
||||
if (this->isDSCSupported())
|
||||
{
|
||||
if (this->isVideoSink() && this->getParent() != NULL)
|
||||
{
|
||||
if (this->isLogical())
|
||||
{
|
||||
this->devDoingDscDecompression = this;
|
||||
this->bDSCPossible = true;
|
||||
}
|
||||
else if (this->parent->isVirtualPeerDevice() &&
|
||||
this->parent->isDSCPassThroughSupported())
|
||||
{
|
||||
//
|
||||
// This condition takes care of DSC capable sink devices
|
||||
// connected behind a DSC Pass through capable branch
|
||||
//
|
||||
this->devDoingDscDecompression = this;
|
||||
this->bDSCPossible = true;
|
||||
}
|
||||
else if (this->parent->isDSCSupported())
|
||||
{
|
||||
//
|
||||
// This condition takes care of DSC capable sink devices
|
||||
// connected behind a branch device that is not capable
|
||||
// of DSC pass through but can do DSC decompression.
|
||||
//
|
||||
this->bDSCPossible = true;
|
||||
this->devDoingDscDecompression = this->parent;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// This condition takes care of branch device capable of DSC.
|
||||
this->devDoingDscDecompression = this;
|
||||
this->bDSCPossible = true;
|
||||
}
|
||||
}
|
||||
else if (this->parent && this->parent->isDSCSupported())
|
||||
{
|
||||
//
|
||||
// This condition takes care of sink devices not capable of DSC
|
||||
// but parent is capable of DSC decompression.
|
||||
//
|
||||
this->bDSCPossible = true;
|
||||
this->devDoingDscDecompression = this->parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this->isDSCSupported())
|
||||
{
|
||||
this->bDSCPossible = true;
|
||||
this->devDoingDscDecompression = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool DeviceImpl::setDscEnable(bool enable)
|
||||
{
|
||||
NvU8 byte = 0;
|
||||
NvU8 dscEnableByte = 0;
|
||||
NvU8 dscPassthroughByte = 0;
|
||||
unsigned size = 0;
|
||||
unsigned nakReason = NakUndefined;
|
||||
bool bCurrDscEnable = false;
|
||||
bool bDscPassThrough = false;
|
||||
bool bDscPassThroughUpdated = true;
|
||||
Address::StringBuffer buffer;
|
||||
DP_USED(buffer);
|
||||
|
||||
@@ -1809,12 +1938,13 @@ bool DeviceImpl::setDscEnable(bool enable)
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((this->devDoingDscDecompression == this) && this->parent != NULL && this->connector->bDscMstEnablePassThrough)
|
||||
if ((this->devDoingDscDecompression == this) && !this->isLogical() && this->parent != NULL && this->connector->bDscMstEnablePassThrough)
|
||||
{
|
||||
//
|
||||
// If the device has a parent, that means the sink is on a MST link and
|
||||
// and on a MST link if DSC is possible on the path and devDoingDscDecompression
|
||||
// is the sink itself, then the parent should be DSC Pass through capable..
|
||||
// is the sink itself and sink is not on a logical port, then the parent should be
|
||||
// DSC Pass through capable.
|
||||
//
|
||||
bDscPassThrough = true;
|
||||
}
|
||||
@@ -1829,7 +1959,7 @@ bool DeviceImpl::setDscEnable(bool enable)
|
||||
//
|
||||
if (!getDscEnable(&bCurrDscEnable))
|
||||
{
|
||||
DP_LOG(("DP> Not able to get DSC Enable State!"));
|
||||
DP_LOG(("DP-DEV> Not able to get DSC Enable State!"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1838,66 +1968,59 @@ bool DeviceImpl::setDscEnable(bool enable)
|
||||
{
|
||||
if(bDscPassThrough)
|
||||
{
|
||||
byte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _YES, byte);
|
||||
dscPassthroughByte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _YES, dscPassthroughByte);
|
||||
DP_LOG(("DP-DEV> Enabling DSC Pass through on branch device - %s",
|
||||
this->parent->getTopologyAddress().toString(buffer)));
|
||||
}
|
||||
|
||||
if (!bCurrDscEnable)
|
||||
{
|
||||
dscEnableByte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _YES, dscEnableByte);
|
||||
DP_LOG(("DP-DEV> Enabling DSC decompression on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!bCurrDscEnable)
|
||||
{
|
||||
byte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _YES, byte);
|
||||
DP_LOG(("DP-DEV> Enabling DSC decompression on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
}
|
||||
else
|
||||
{
|
||||
DP_LOG(("DP-DEV> DSC decompression is already enabled on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
return true;
|
||||
}
|
||||
DP_LOG(("DP-DEV> DSC decompression is already enabled on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(bDscPassThrough)
|
||||
{
|
||||
byte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _NO, byte);
|
||||
dscPassthroughByte = FLD_SET_DRF(_DPCD20, _DSC_PASS_THROUGH, _ENABLE, _NO, dscPassthroughByte);
|
||||
DP_LOG(("DP-DEV> Disabling DSC Pass through on branch device - %s",
|
||||
this->parent->getTopologyAddress().toString(buffer)));
|
||||
}
|
||||
|
||||
if (bCurrDscEnable)
|
||||
{
|
||||
dscEnableByte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _NO, dscEnableByte);
|
||||
DP_LOG(("DP-DEV> Disabling DSC decompression on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bCurrDscEnable)
|
||||
{
|
||||
byte = FLD_SET_DRF(_DPCD14, _DSC_ENABLE, _SINK, _NO, byte);
|
||||
DP_LOG(("DP-DEV> Disabling DSC decompression on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
}
|
||||
else
|
||||
{
|
||||
DP_LOG(("DP-DEV> DSC decompression is already disabled on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
return true;
|
||||
}
|
||||
DP_LOG(("DP-DEV> DSC decompression is already disabled on device - %s",
|
||||
this->devDoingDscDecompression->getTopologyAddress().toString(buffer)));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (bDscPassThrough)
|
||||
{
|
||||
//
|
||||
// When sink is DSC decompression capable and parent is DSC pass through capable
|
||||
// source needs to only enable DSC pass through on the parent branch and parent
|
||||
// branch will take care of enabling DSC decompression on the sink.
|
||||
//
|
||||
return (!this->parent->setDpcdData(NV_DPCD20_DSC_PASS_THROUGH,
|
||||
&byte, sizeof byte, &size, &nakReason));
|
||||
}
|
||||
else
|
||||
{
|
||||
return (!this->devDoingDscDecompression->setDpcdData(NV_DPCD14_DSC_ENABLE,
|
||||
&byte, sizeof byte, &size, &nakReason));
|
||||
if(this->parent->setDpcdData(NV_DPCD20_DSC_PASS_THROUGH,
|
||||
&dscPassthroughByte, sizeof dscPassthroughByte, &size, &nakReason))
|
||||
{
|
||||
DP_LOG(("DP-DEV> Setting DSC Passthrough state on parent branch failed"));
|
||||
bDscPassThroughUpdated = false;
|
||||
}
|
||||
}
|
||||
|
||||
return (!this->devDoingDscDecompression->setDpcdData(NV_DPCD14_DSC_ENABLE,
|
||||
&dscEnableByte, sizeof dscEnableByte, &size, &nakReason)) && bDscPassThroughUpdated;
|
||||
}
|
||||
|
||||
unsigned DeviceImpl::getDscVersionMajor()
|
||||
|
||||
@@ -651,9 +651,19 @@ void DiscoveryManager::BranchDetection::handleLinkAddressDownReply()
|
||||
if (child[i].isInputPort)
|
||||
{
|
||||
parentDevice.peerDevice = child[i].peerDeviceType;
|
||||
parentDevice.dpcdRevisionMajor = child[i].dpcdRevisionMajor;
|
||||
parentDevice.dpcdRevisionMinor = child[i].dpcdRevisionMinor;
|
||||
parentDevice.portMap.inputMap |= (1 << child[i].portNumber);
|
||||
if (address == Address(0))
|
||||
{
|
||||
//
|
||||
// For immediate branch device, we will have already read DPCD version
|
||||
// in notifyHPD. So we can just use that to populate here.
|
||||
// For the remaining devices, LAM to parent branch will report the child
|
||||
// DPCD version in reply and we are populating it in
|
||||
// BranchDetection::detectCompleted.
|
||||
//
|
||||
parentDevice.dpcdRevisionMajor = parent->hal->getRevisionMajor();
|
||||
parentDevice.dpcdRevisionMinor = parent->hal->getRevisionMinor();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -82,8 +82,6 @@ ParseResponseStatus LinkAddressMessage::parseResponseAck(EncodedMessage * messag
|
||||
else
|
||||
{
|
||||
reader->readOrDefault(6 /*zeroes*/, 0x0);
|
||||
reply.res[i].dpcdRevisionMajor = 1;
|
||||
reply.res[i].dpcdRevisionMinor = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#define NV_DPCD20_DSC_PASS_THROUGH_ENABLE_NO (0x00000000) /* R-XUV */
|
||||
#define NV_DPCD20_DSC_PASS_THROUGH_ENABLE_YES (0x00000001) /* R-XUV */
|
||||
|
||||
#define NV_DPCD20_GUID_2 (0x00000040) /* R-XUR */
|
||||
|
||||
// PANEL REPLAY RELATED DPCD
|
||||
#define NV_DPCD20_PANEL_REPLAY_CAPABILITY (0x000000B0)
|
||||
#define NV_DPCD20_PANEL_REPLAY_CAPABILITY_SUPPORTED 0:0
|
||||
|
||||
@@ -36,25 +36,25 @@
|
||||
// and then checked back in. You cannot make changes to these sections without
|
||||
// corresponding changes to the buildmeister script
|
||||
#ifndef NV_BUILD_BRANCH
|
||||
#define NV_BUILD_BRANCH r515_00
|
||||
#define NV_BUILD_BRANCH r516_87
|
||||
#endif
|
||||
#ifndef NV_PUBLIC_BRANCH
|
||||
#define NV_PUBLIC_BRANCH r515_00
|
||||
#define NV_PUBLIC_BRANCH r516_87
|
||||
#endif
|
||||
|
||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
|
||||
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r515/r515_00-269"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31485447)
|
||||
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r515/r516_87-317"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31589401)
|
||||
#define NV_BUILD_TYPE "Official"
|
||||
#define NV_BUILD_NAME "rel/gpu_drv/r515/r515_00-269"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31485447)
|
||||
#define NV_BUILD_NAME "rel/gpu_drv/r515/r516_87-317"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31589401)
|
||||
|
||||
#else /* Windows builds */
|
||||
#define NV_BUILD_BRANCH_VERSION "r515_00-210"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31485447)
|
||||
#define NV_BUILD_BRANCH_VERSION "r516_87-1"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31588177)
|
||||
#define NV_BUILD_TYPE "Official"
|
||||
#define NV_BUILD_NAME "516.56"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31485447)
|
||||
#define NV_BUILD_NAME "516.90"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31588177)
|
||||
#define NV_BUILD_BRANCH_BASE_VERSION R515
|
||||
#endif
|
||||
// End buildmeister python edited section
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
|
||||
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
|
||||
|
||||
#define NV_VERSION_STRING "515.57"
|
||||
#define NV_VERSION_STRING "515.65.01"
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -3424,7 +3424,7 @@ nvlink_lib_ctrl_get_device_link_states
|
||||
NvU32 i = 0;
|
||||
|
||||
nvlink_link **links = (nvlink_link **)nvlink_malloc(
|
||||
sizeof(nvlink_link *) * NVLINK_MAX_NVLINK_ENDPOINTS);
|
||||
sizeof(nvlink_link *) * NVLINK_MAX_SYSTEM_LINK_NUM);
|
||||
if (links == NULL)
|
||||
{
|
||||
return NVL_NO_MEM;
|
||||
|
||||
@@ -63,6 +63,7 @@ CHIPSET_SETUP_FUNC(Intel_A301_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(Intel_0685_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(Intel_4381_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(Intel_7A82_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(Intel_7A04_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(SiS_656_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(ATI_RS400_setupFunc)
|
||||
CHIPSET_SETUP_FUNC(ATI_RS480_setupFunc)
|
||||
@@ -182,6 +183,8 @@ CSINFO chipsetInfo[] =
|
||||
{PCI_VENDOR_ID_INTEL, 0x7A82, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
|
||||
{PCI_VENDOR_ID_INTEL, 0x7A84, CS_INTEL_7A82, "Intel-AlderLake", Intel_7A82_setupFunc},
|
||||
{PCI_VENDOR_ID_INTEL, 0x1B81, CS_INTEL_1B81, "Intel-SapphireRapids", NULL},
|
||||
{PCI_VENDOR_ID_INTEL, 0x18DC, CS_INTEL_18DC, "Intel-IceLake", NULL},
|
||||
{PCI_VENDOR_ID_INTEL, 0x7A04, CS_INTEL_7A04, "Intel-RaptorLake", Intel_7A04_setupFunc},
|
||||
|
||||
{PCI_VENDOR_ID_NVIDIA, 0x0FAE, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
|
||||
{PCI_VENDOR_ID_NVIDIA, 0x0FAF, CS_NVIDIA_T210, "T210", Nvidia_T210_setupFunc},
|
||||
|
||||
@@ -642,6 +642,8 @@ enum {
|
||||
, CS_PHYTIUM_S2500
|
||||
, CS_MELLANOX_BLUEFIELD2
|
||||
, CS_INTEL_1B81
|
||||
, CS_INTEL_18DC
|
||||
, CS_INTEL_7A04
|
||||
, CS_MAX_PCIE
|
||||
};
|
||||
|
||||
|
||||
@@ -943,6 +943,7 @@ NvBool NV_API_CALL rm_disable_iomap_wc(void);
|
||||
|
||||
void NV_API_CALL rm_init_dynamic_power_management(nvidia_stack_t *, nv_state_t *, NvBool);
|
||||
void NV_API_CALL rm_cleanup_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
||||
void NV_API_CALL rm_enable_dynamic_power_management(nvidia_stack_t *, nv_state_t *);
|
||||
NV_STATUS NV_API_CALL rm_ref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
||||
void NV_API_CALL rm_unref_dynamic_power(nvidia_stack_t *, nv_state_t *, nv_dynamic_power_mode_t);
|
||||
NV_STATUS NV_API_CALL rm_transition_dynamic_power(nvidia_stack_t *, nv_state_t *, NvBool);
|
||||
|
||||
@@ -50,6 +50,13 @@ void NV_API_CALL rm_cleanup_dynamic_power_management(
|
||||
{
|
||||
}
|
||||
|
||||
void NV_API_CALL rm_enable_dynamic_power_management(
|
||||
nvidia_stack_t *sp,
|
||||
nv_state_t *nv
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
NV_STATUS NV_API_CALL rm_ref_dynamic_power(
|
||||
nvidia_stack_t *sp,
|
||||
nv_state_t *nv,
|
||||
|
||||
@@ -178,6 +178,7 @@
|
||||
--undefined=rm_schedule_gpu_wakeup
|
||||
--undefined=rm_init_dynamic_power_management
|
||||
--undefined=rm_cleanup_dynamic_power_management
|
||||
--undefined=rm_enable_dynamic_power_management
|
||||
--undefined=rm_ref_dynamic_power
|
||||
--undefined=rm_unref_dynamic_power
|
||||
--undefined=rm_transition_dynamic_power
|
||||
|
||||
@@ -868,6 +868,8 @@ static const CHIPS_RELEASED sChipsReleased[] = {
|
||||
{ 0x2233, 0x165a, 0x10de, "NVIDIA RTX A5500" },
|
||||
{ 0x2233, 0x165a, 0x17aa, "NVIDIA RTX A5500" },
|
||||
{ 0x2235, 0x145a, 0x10de, "NVIDIA A40" },
|
||||
{ 0x2236, 0x1482, 0x10de, "NVIDIA A10" },
|
||||
{ 0x2237, 0x152f, 0x10de, "NVIDIA A10G" },
|
||||
{ 0x2238, 0x1677, 0x10de, "NVIDIA A10M" },
|
||||
{ 0x2414, 0x0000, 0x0000, "NVIDIA GeForce RTX 3060 Ti" },
|
||||
{ 0x2420, 0x0000, 0x0000, "NVIDIA GeForce RTX 3080 Ti Laptop GPU" },
|
||||
|
||||
@@ -491,6 +491,7 @@ struct RS_CPU_UNMAP_PARAMS
|
||||
NvP64 pLinearAddress; ///< [in] Address of mapped memory
|
||||
NvU32 flags; ///< [in] Resource-specific flags
|
||||
NvU32 processId;
|
||||
NvBool bTeardown; ///< [in] Unmap operation is due to client teardown
|
||||
|
||||
/// [in] hContext Handle of resource that provides a context for the mapping (e.g., subdevice for channel map)
|
||||
NvHandle hContext;
|
||||
|
||||
@@ -465,6 +465,7 @@ struct RS_CPU_UNMAP_PARAMS
|
||||
NvP64 pLinearAddress; ///< [in] Address of mapped memory
|
||||
NvU32 flags; ///< [in] Resource-specific flags
|
||||
NvU32 processId;
|
||||
NvBool bTeardown; ///< [in] Unmap operation is due to client teardown
|
||||
|
||||
/// [in] hContext Handle of resource that provides a context for the mapping (e.g., subdevice for channel map)
|
||||
NvHandle hContext;
|
||||
|
||||
@@ -56,6 +56,8 @@ dispsfConstruct_IMPL
|
||||
return NV_ERR_INSUFFICIENT_PERMISSIONS;
|
||||
}
|
||||
|
||||
NV_CHECK_OR_RETURN(LEVEL_ERROR, pKernelDisplay != NULL, NV_ERR_NOT_SUPPORTED);
|
||||
|
||||
// Set sf user RegBase offset
|
||||
kdispGetDisplaySfUserBaseAndSize_HAL(pGpu, pKernelDisplay,
|
||||
&pDispSfUser->ControlOffset,
|
||||
|
||||
@@ -3713,6 +3713,7 @@ gvaspaceWalkUserCtxRelease_IMPL
|
||||
{
|
||||
// If current context doesn't match, must have nested acquires (not allowed).
|
||||
NV_ASSERT_OR_RETURN_VOID(pUserCtx->pGpuState);
|
||||
NV_ASSERT_OR_RETURN_VOID(pUserCtx->pGpuState->pWalk);
|
||||
NV_ASSERT(pUserCtx == mmuWalkGetUserCtx(pUserCtx->pGpuState->pWalk));
|
||||
mmuWalkSetUserCtx(pUserCtx->pGpuState->pWalk, NULL);
|
||||
}
|
||||
|
||||
@@ -880,6 +880,18 @@ Intel_7A82_setupFunc
|
||||
return NV_OK;
|
||||
}
|
||||
|
||||
// Intel Z790 platform (Raptor Lake)
|
||||
static NV_STATUS
|
||||
Intel_7A04_setupFunc
|
||||
(
|
||||
OBJCL *pCl
|
||||
)
|
||||
{
|
||||
pCl->setProperty(pCl, PDB_PROP_CL_HAS_RESIZABLE_BAR_ISSUE, NV_TRUE);
|
||||
|
||||
return NV_OK;
|
||||
}
|
||||
|
||||
static NV_STATUS
|
||||
Nvidia_T210_setupFunc
|
||||
(
|
||||
|
||||
@@ -974,11 +974,24 @@ serverUnmap_Prologue
|
||||
{
|
||||
rmStatus = osAttachToProcess(&pProcessHandle, ProcessId);
|
||||
if (rmStatus != NV_OK)
|
||||
return rmStatus;
|
||||
{
|
||||
if (pUnmapParams->bTeardown)
|
||||
pProcessHandle = NULL;
|
||||
else
|
||||
return rmStatus;
|
||||
}
|
||||
|
||||
pUnmapParams->pProcessHandle = pProcessHandle;
|
||||
}
|
||||
|
||||
// Don't do any filtering if this is a tear-down path
|
||||
if (pUnmapParams->bTeardown)
|
||||
{
|
||||
pUnmapParams->fnFilter = NULL;
|
||||
return NV_OK;
|
||||
}
|
||||
|
||||
|
||||
pUnmapParams->fnFilter = bKernel
|
||||
? serverutilMappingFilterKernel
|
||||
: serverutilMappingFilterCurrentUserProc;
|
||||
|
||||
@@ -205,7 +205,10 @@ mmuWalkLevelInstancesForceFree
|
||||
MMU_WALK *pWalk
|
||||
)
|
||||
{
|
||||
_mmuWalkLevelInstancesForceFree(pWalk, &pWalk->root);
|
||||
if (pWalk != NULL)
|
||||
{
|
||||
_mmuWalkLevelInstancesForceFree(pWalk, &pWalk->root);
|
||||
}
|
||||
}
|
||||
|
||||
/*----------------------------Private Functions--------------------------------*/
|
||||
|
||||
@@ -110,6 +110,8 @@ mmuWalkReleaseEntries
|
||||
MMU_WALK_OP_PARAMS opParams = {0};
|
||||
NV_STATUS status = NV_OK;
|
||||
|
||||
NV_ASSERT_OR_RETURN(NULL != pWalk, NV_ERR_INVALID_ARGUMENT);
|
||||
|
||||
NV_ASSERT_OR_RETURN(NULL != mmuWalkFindLevel(pWalk, pLevelFmt),
|
||||
NV_ERR_INVALID_ARGUMENT);
|
||||
NV_ASSERT_OR_RETURN(NV_IS_ALIGNED(vaLo, mmuFmtLevelPageSize(pLevelFmt)),
|
||||
|
||||
@@ -1084,7 +1084,8 @@ _clientUnmapResourceRefMappings
|
||||
: pCpuMapping->pContextRef->hResource;
|
||||
params.hMemory = pResourceRef->hResource;
|
||||
params.pLinearAddress = pCpuMapping->pLinearAddress;
|
||||
params.processId = pCpuMapping->processId;
|
||||
params.processId = pCpuMapping->processId;
|
||||
params.bTeardown = NV_TRUE;
|
||||
params.flags = pCpuMapping->flags;
|
||||
params.pSecInfo = &pCallContext->secInfo;
|
||||
params.pLockInfo = &lockInfo;
|
||||
@@ -1147,6 +1148,7 @@ _clientUnmapBackRefMappings
|
||||
params.hMemory = pBackRef->hResource;
|
||||
params.pLinearAddress = pCpuMapping->pLinearAddress;
|
||||
params.processId = pCpuMapping->processId;
|
||||
params.bTeardown = NV_TRUE;
|
||||
params.flags = pCpuMapping->flags;
|
||||
params.pSecInfo = &pCallContext->secInfo;
|
||||
params.pLockInfo = &lockInfo;
|
||||
|
||||
Reference in New Issue
Block a user