linux/Documentation
Ville Syrjälä 470022b5c2 drm/i915/flipq: Provide the nuts and bolts code for flip queue
Provide the lower level code for PIPEDMC based flip queue.

We'll use the so called semi-full flip queue mode where the
PIPEDMC will start the provided DSB on a scanline a little
ahead of the vblank. We need to program the triggering scanline
early enough so that the DSB has enough time to complete writing
all the double buffered registers before they get latched (at
start of vblank).

The firmware implements several queues:
- 3 "plane queues" which execute a single DSB per entry
- 1 "general queue" which can apparently execute 2 DSBs per entry
- 1 vestigial "fast queue" that replaced the "simple flip queue"
  on ADL+, but this isn't supposed to be used due to issues.

But we only need a single plane queue really, and we won't actually
use it as a real queue because we don't allow queueing multiple commits
ahead of time. So the whole thing is perhaps useless. I suppose
there migth be some power saving benefits if we would get the flip
scheduled by userspace early and then could keep some hardware powered
off a bit longer until the DMC kicks off the flipq programming. But that
is pure speculation at this time and needs to be proven.

The code to hook up the flip queue into the actual atomic commit
path will follow later.

TODO: need to think how to do the "wait for DMC firmware load" nicely
      need to think about VRR and PSR
      etc.

v2: Don't write DMC_FQ_W2_PTS_CFG_SEL on pre-lnl
    Don't oops at flipq init if there is no dmc
v3: Adapt to PTL+ flipq changes (different queue entry
    layout, different trigger event, need VRR TG)
    Use the actual CDCLK frequency
    Ask the DSB code how long things are expected to take
v3: Adjust the cdclk rounding (docs are 100% vague, Windows
    rounds like this)
    Initialize some undocumented magic DMC variables on PTL
v4: Use PIPEDMC_FQ_STATUS for busy check (the busy bit in
    PIPEDMC_FQ_CTRL is apparently gone on LNL+)
    Based the preempt timeout on the max exec time
    Preempt before disabling the flip queue
    Order the PIPEDMC_SCANLINECMP* writes a bit more carefully
    Fix some typos
v5: Try to deal with some clang-20 div-by-zero false positive (Nathan)
    Add some docs (Jani)

Cc: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

epr
Link: https://patchwork.freedesktop.org/patch/msgid/20250624170049.27284-5-ville.syrjala@linux.intel.com
History 2025-06-27 15:54:43 +03:00
..
ABI UAPI Changes: 2025-06-20 09:08:01 +10:00
accel accel/amdxdna: Add documentation for AMD NPU accelerator driver 2024-11-22 11:40:56 -07:00
accounting Mainly individually changelogged singleton patches. The patch series in 2025-01-26 17:50:53 -08:00
admin-guide smb: client: disable path remapping with POSIX extensions 2025-06-09 15:59:03 -05:00
arch RISC-V Patches for the 6.16 Merge Window, Part 1 2025-06-06 18:05:18 -07:00
block Documentation: ublk: Separate UBLK_F_AUTO_BUF_REG fallback behavior sublists 2025-06-13 09:25:42 -06:00
bpf bpf: Add support for __prog argument suffix to pass in prog->aux 2025-05-13 18:47:54 -07:00
cdrom scsi: sr: Fix unintentional arithmetic wraparound 2024-05-15 10:05:24 -04:00
core-api Kbuild updates for v6.16 2025-06-07 10:05:35 -07:00
cpu-freq Docs/subsystem-apis: Remove '[The ]Linux' prefixes from titles of listed documents 2023-01-24 15:27:08 -07:00
crypto crypto: remove obsolete 'comp' compression API 2025-03-21 17:39:06 +08:00
dev-tools Documentation: kunit: improve example on testing static functions 2025-05-19 13:22:21 -06:00
devicetree drm-misc-next for 6.17: 2025-06-18 08:09:35 +10:00
doc-guide Docs: doc-guide: update sphinx.rst Sphinx version number 2025-05-21 04:28:29 -06:00
driver-api Char/Misc/IIO pull request for 6.16-rc1 2025-06-06 11:50:47 -07:00
edac cxl/edac: Add CXL memory device soft PPR control feature 2025-05-23 13:25:06 -07:00
fault-injection net: Implement fault injection forcing skb reallocation 2024-11-12 12:05:33 +01:00
fb fbdev: sstfb.rst: Fix spelling mistake 2025-05-31 10:24:02 +02:00
features LoongArch: Enable ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS 2025-05-30 21:45:42 +08:00
filesystems docs: proc: update VmFlags documentation in smaps 2025-06-11 22:42:35 -07:00
firmware-guide Documentation: ACPI: Use all-string data node references 2025-04-09 16:39:17 +02:00
firmware_class firmware: revamp firmware documentation 2017-01-11 09:42:59 +01:00
fpga Documentation: use capitalization for chapters and acronyms 2023-05-16 12:49:31 -06:00
gpu drm/i915/flipq: Provide the nuts and bolts code for flip queue 2025-06-27 15:54:43 +03:00
hid docs: hid: Fix typo in intel-thc-hid.rst 2025-04-14 10:40:52 -06:00
hwmon hwmon updates for v6.16 2025-06-03 09:11:26 -07:00
i2c docs: i2c: Fix "resitors" to "resistors" 2025-05-20 11:22:16 +02:00
iio docs: iio: ad3552r: fix malformed table 2025-05-21 14:19:46 +01:00
images docs: add SVG version of the Linux logo 2022-06-01 09:32:45 -06:00
infiniband docs: infiniband: document the UCAP API 2025-03-09 13:13:02 -04:00
input Input: amijoy - make headings compliant w/ guidelines in documentation 2025-05-30 15:34:38 -07:00
isdn Documentation: isdn: correct spelling 2023-02-10 16:28:13 -08:00
kbuild Kbuild updates for v6.16 2025-06-07 10:05:35 -07:00
kernel-hacking docs/licensing: Clarify wording about "GPL" and "Proprietary" 2024-11-22 10:44:25 -07:00
leds LEDs for v6.16 2025-06-03 12:10:31 -07:00
litmus-tests Documentation/litmus-tests: Make cmpxchg() tests safe for klitmus 2024-05-06 14:29:21 -07:00
livepatch docs: livepatch: move text out of code block 2025-03-04 16:01:29 +01:00
locking hwspinlock: Remove unused hwspin_lock_get_id() 2025-03-21 17:12:04 -05:00
maintainer docs: Remove redundant word "for" 2024-10-21 09:32:20 -06:00
mhi docs: Add documentation for MHI bus 2020-03-19 07:41:04 +01:00
misc-devices misc: amd-sbi: Add document for AMD SB IOCTL description 2025-05-21 14:44:41 +02:00
mm Docs/damon: update titles and brief introductions to explain DAMOS 2025-05-22 14:55:38 -07:00
netlabel docs: add some directories to the main documentation index 2019-07-15 11:03:03 -03:00
netlink netlink: specs: rt-link: decode ip6gre 2025-06-05 12:50:10 +02:00
networking - The 11 patch series "Add folio_mk_pte()" from Matthew Wilcox 2025-05-31 15:44:16 -07:00
nvdimm nvdimm: fixes to maintainter-entry-profile 2020-05-25 10:19:19 -06:00
nvme Documentation: typo fixes 2025-02-18 14:01:22 -07:00
PCI Merge branch 'pci/misc' 2025-06-04 10:50:45 -05:00
pcmcia Documentation: use capitalization for chapters and acronyms 2023-05-16 12:49:31 -06:00
peci Docs/subsystem-apis: Remove '[The ]Linux' prefixes from titles of listed documents 2023-01-24 15:27:08 -07:00
power PM: EM: Documentation: Fix typos in example driver code 2025-05-13 14:30:01 +02:00
process - The 3 patch series "hung_task: extend blocking task stacktrace dump to 2025-05-31 19:12:53 -07:00
RCU doc/RCU/listRCU: refine example code for eliminating stale data 2025-05-16 09:00:54 -04:00
rust Documentation: rust: testing: add docs on the new KUnit #[test] tests 2025-05-27 20:09:59 +02:00
scheduler sched_ext: Changes for v6.16 2025-05-27 21:12:50 -07:00
scsi scsi: docs: Clean up some style in scsi_mid_low_api 2025-05-12 22:11:55 -04:00
security Hi, 2025-03-28 12:42:53 -07:00
sound ASoC: doc: Add documentation for SOC USB 2025-04-11 13:02:31 +02:00
sphinx docs: kerneldoc.py: simplify exception handling logic 2025-05-21 03:53:40 -06:00
sphinx-static docs: translations: add translations links when they exist 2023-12-19 14:34:59 -07:00
spi spi: Enable controllers to extend the SPI protocol with MOSI idle configuration 2024-07-29 01:19:51 +01:00
staging rpmsg updates for v6.16 2025-06-02 11:06:44 -07:00
sunrpc/xdr nfsd: rename NFS4_SHARE_WANT_* constants to OPEN4_SHARE_ACCESS_WANT_* 2025-01-21 15:30:01 -05:00
target scsi: target: docs: Remove tcm_mod_builder.py 2023-06-28 22:01:32 -04:00
tee Documentation: tee: Add TS-TEE driver 2024-04-03 14:03:09 +02:00
timers timers/Documentation: Cleanup delay/sleep documentation 2024-10-16 00:36:48 +02:00
tools Documentation/rtla: Include BPF sample collection 2025-04-14 10:42:55 -06:00
trace Char/Misc/IIO pull request for 6.16-rc1 2025-06-06 11:50:47 -07:00
translations Kbuild updates for v6.16 2025-06-07 10:05:35 -07:00
usb USB/Thunderbolt update for 6.15-rc1 2025-04-02 18:23:31 -07:00
userspace-api LoongArch changes for v6.16 2025-06-07 09:56:18 -07:00
virt Notable changes: 2025-06-05 11:45:33 -07:00
w1 w1: add UART w1 bus driver 2024-02-15 15:02:33 +01:00
watchdog watchdog: Delete the cpu5wdt driver 2024-11-05 10:04:39 +01:00
wmi platform/x86: dell-ddv: Expose the battery health to userspace 2025-05-12 13:20:42 +03:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
atomic_bitops.txt wait_on_bit: add an acquire memory barrier 2022-08-26 09:30:25 -07:00
atomic_t.txt Documentation/atomic_t: Emphasize that failed atomic operations give no ordering 2024-05-06 14:29:04 -07:00
Changes docs: add back 'Documentation/Changes' file (as symlink) 2016-12-14 16:30:12 -08:00
CodingStyle doc: re-add CodingStyle and SubmittingPatches 2016-10-24 08:12:35 -02:00
conf.py docs: conf.py: drop backward support for old Sphinx versions 2025-05-19 08:02:14 -06:00
docutils.conf doc-rst: Add missing newline at end of file 2019-06-20 14:16:56 -06:00
index.rst docs: fix typo in firmware-related section 2025-05-07 00:53:22 -06:00
Kconfig Documentation: Avoid duplicate Kconfig inclusion 2023-01-19 13:56:34 -07:00
Makefile docs: Makefile: Inherit PYTHONPYCACHEPREFIX setting as env variable 2025-05-07 00:53:22 -06:00
memory-barriers.txt docs/memory-barriers.txt: Remove left-over references to "CACHE COHERENCY" 2024-09-13 23:56:44 -07:00
SubmittingPatches doc: re-add CodingStyle and SubmittingPatches 2016-10-24 08:12:35 -02:00
subsystem-apis.rst Documentation/EDAC: Fix warning document isn't included in any toctree 2025-04-01 22:26:47 +02:00