diff --git a/commitFile.txt b/commitFile.txt index e352ab2..42e39ce 100644 --- a/commitFile.txt +++ b/commitFile.txt @@ -108,7 +108,7 @@ c762aa186dc72ed0b9183492f9bd187c301d33d3 - kernel-open/nvidia/nv-kthread-q.c 70bece14e12b9ffc92816ee8159a4ce596579d78 - kernel-open/nvidia/os-pci.c a677049bb56fa5ebe22fe43b0c4a12acd58a6677 - kernel-open/nvidia/nv-p2p.c e4d12f027cb5f74124da71bbbc23bcb33651834a - kernel-open/nvidia/nv-pci-table.c -1bc3343eecfa3194929d2e1d5620a652f109434d - kernel-open/nvidia/nv-pci.c +1034de1ab2403c30bb22d6a65bd2134a540590f4 - kernel-open/nvidia/nv-pci.c 6dfc57ac42bed97c6ff81d82e493f05b369e0b84 - kernel-open/nvidia/nvspdm_cryptlib_extensions.h bba706cfbc04b3a880b5e661066f92e765fad663 - kernel-open/nvidia/nv-caps-imex.c ed3c83f62e4ccc4b53d886eedd4b47518a361393 - kernel-open/nvidia/nv-dmabuf.c @@ -871,7 +871,7 @@ a17aae37486b325442e447489b64add3694ab8b0 - src/nvidia/arch/nvalloc/unix/src/osun b5b409625fde1b640e4e93276e35248f0fccfa4c - src/nvidia/arch/nvalloc/unix/src/gcc_helper.c 07f9c0995f1fbbba9eb819321996b57c1d2b86cd - src/nvidia/arch/nvalloc/unix/src/exports-stubs.c 00e1da5b996760d70515c7d400462ebbc9dc4cba - src/nvidia/arch/nvalloc/unix/src/osinit.c -dc5a592d8de2a6c173c6dd3cf6d079ced05a1ecd - src/nvidia/arch/nvalloc/unix/src/osapi.c +be6bfb5b135e7f728ecff7aaac52e6cfa4f4f5ce - src/nvidia/arch/nvalloc/unix/src/osapi.c a7383deea9dcab093323d8dde1ede73f85f93343 - src/nvidia/arch/nvalloc/unix/src/rmobjexportimport.c b1a6d0a1ca4307b8e8d9cf136c94ef7c9efbae4c - src/nvidia/arch/nvalloc/unix/src/registry.c 915ee6dbffff92a86d68ac38549b25aa1e146872 - src/nvidia/arch/nvalloc/unix/src/os-hypervisor-stubs.c @@ -1474,7 +1474,7 @@ be49ea18102a44914e0d7686c51430df18336383 - src/nvidia-modeset/src/nvkms-frameloc f754a27436fd1e1fa103de6110224c21ad7ea9f4 - src/nvidia-modeset/src/nvkms-pow.c e8c6d2eedfba19f8f06dd57f629588615cf1a2e9 - src/nvidia-modeset/src/nvkms-evo1.c d15f314bea66574e0ffc72966b86bae8366412f5 - src/nvidia-modeset/src/nvkms-console-restore.c -0699860902369359e5ff1a0ef46b87e955d4bb7a - src/nvidia-modeset/src/nvkms-modepool.c +f6e217845650e0e33591016a17df3b26ea6cdc7b - src/nvidia-modeset/src/nvkms-modepool.c 403e6dbff0a607c2aecf3204c56633bd7b612ae2 - src/nvidia-modeset/src/nvkms-stereo.c fd6ecacc4f273c88960148c070dd17d93f49909b - src/nvidia-modeset/src/nvkms-lut.c 771fee54d1123871e380db6f3227b4946b6be647 - src/nvidia-modeset/src/dp/nvdp-timer.cpp diff --git a/kernel-open/nvidia/nv-pci.c b/kernel-open/nvidia/nv-pci.c index d7c2212..b552b43 100644 --- a/kernel-open/nvidia/nv-pci.c +++ b/kernel-open/nvidia/nv-pci.c @@ -659,17 +659,15 @@ nv_pci_gb10b_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) #endif // - // When GPU is suspended(railgated), the PM runtime suspend callback should - // suspend all devfreq devices, and devfreq cycle should not be triggered. + // GPU can be under suspending/suspended/resuming state defined the runtime + // PM (RPM) framework. When device is under either of these states, DVFS based + // on GPU load information should be disabled. // - // However, users are still able to change the devfreq governor from the - // sysfs interface and indirectly invoke the update_devfreq function, which - // will further call the target callback function. + // Complete load-based DVFS cycle involve GPU load query through rmapi and + // clock scaling through BPMP MRQ_CLK mailbox request, which will awake the + // GPU and contradict the suspended state. // - // Early stop the process here before clk_set_rate/clk_get_rate, since these - // calls served by BPMP will awake the GPU. - // - if (pm_runtime_suspended(&pdev->dev)) + if (!pm_runtime_active(&pdev->dev)) { *freq = tdev->devfreq->scaling_min_freq; return 0; @@ -746,7 +744,15 @@ nv_pci_tegra_devfreq_get_cur_freq(struct device *dev, unsigned long *freq) { struct nv_pci_tegra_devfreq_dev *tdev = to_tegra_devfreq_dev(dev); - if (!pm_runtime_suspended(dev->parent)) + // + // When GPU is suspended(railgated), the PM runtime suspend callback should + // suspend all devfreq devices, and devfreq cycle should not be triggered. + // + // However, users are still able to change the devfreq governor from the + // sysfs interface and indirectly invoke the update_devfreq function, which + // will further call the get_dev_status callback function. + // + if (pm_runtime_active(dev->parent)) *freq = clk_get_rate(tdev->clk); else *freq = tdev->devfreq->scaling_min_freq; @@ -768,14 +774,15 @@ nv_pci_tegra_devfreq_get_dev_status(struct device *dev, NV_STATUS status; // - // When GPU is suspended(railgated), the PM runtime suspend callback should - // suspend all devfreq devices, and devfreq cycle should not be triggered. + // GPU can be under suspending/suspended/resuming state defined the runtime + // PM (RPM) framework. When device is under either of these states, DVFS based + // on GPU load information should be disabled. // - // However, users are still able to change the devfreq governor from the - // sysfs interface and indirectly invoke the update_devfreq function, which - // will further call the get_dev_status callback function. + // Complete load-based DVFS cycle involve GPU load query through rmapi and + // clock scaling through BPMP MRQ_CLK mailbox request, which will awake the + // GPU and contradict the suspended state. // - if (pm_runtime_suspended(&pdev->dev)) + if (!pm_runtime_active(&pdev->dev)) { stat->total_time = 100; stat->busy_time = 0; diff --git a/push_info.txt b/push_info.txt index 7ccac1f..759156d 100644 --- a/push_info.txt +++ b/push_info.txt @@ -1 +1 @@ -rel-38_test_nv-tegra-migration +rel-38_eng_2025-10-09 diff --git a/src/nvidia-modeset/src/nvkms-modepool.c b/src/nvidia-modeset/src/nvkms-modepool.c index d8ad154..fb5b13a 100644 --- a/src/nvidia-modeset/src/nvkms-modepool.c +++ b/src/nvidia-modeset/src/nvkms-modepool.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2005-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2005-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: MIT * * Permission is hereby granted, free of charge, to any person obtaining a @@ -1989,7 +1989,9 @@ static NvBool ConstructModeTimingsMetaData( * pTimingsEvo after ValidateMode has written to it. */ if (nvDpyIsHdmiEvo(pDpyEvo)) { - NvTiming_ConstructVideoInfoframeCtrl(&timing, pVideoInfoFrameCtrl); + if (pVideoInfoFrameCtrl != NULL) { + NvTiming_ConstructVideoInfoframeCtrl(&timing, pVideoInfoFrameCtrl); + } if (pVendorInfoFrameCtrl != NULL) { // Currently hardcoded to send infoframe necessary for HDMI 1.4a 4kx2k extended modes. diff --git a/src/nvidia/arch/nvalloc/unix/src/osapi.c b/src/nvidia/arch/nvalloc/unix/src/osapi.c index 404b57d..3d91a9d 100644 --- a/src/nvidia/arch/nvalloc/unix/src/osapi.c +++ b/src/nvidia/arch/nvalloc/unix/src/osapi.c @@ -4784,7 +4784,8 @@ NV_STATUS NV_API_CALL rm_pmu_perfmon_get_load( return NV_ERR_INVALID_ARGUMENT; } - if (nvp->dynamic_power.state == NV_DYNAMIC_POWER_STATE_IDLE_INDICATED) + if (nvp->dynamic_power.state != NV_DYNAMIC_POWER_STATE_IN_USE && + nvp->dynamic_power.state != NV_DYNAMIC_POWER_STATE_IDLE_INSTANT) { *load = 0; return NV_OK;