diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-25 19:46:44 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-25 19:46:44 -0500 |
commit | fffddfd6c8e0c10c42c6e2cc54ba880fcc36ebbb (patch) | |
tree | 71bc5e597124dbaf7550f1e089d675718b3ed5c0 /Documentation | |
parent | 69086a78bdc973ec0b722be790b146e84ba8a8c4 (diff) | |
parent | be88298b0a3f771a4802f20c5e66af74bfd1dff1 (diff) |
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm merge from Dave Airlie:
"Highlights:
- TI LCD controller KMS driver
- TI OMAP KMS driver merged from staging
- drop gma500 stub driver
- the fbcon locking fixes
- the vgacon dirty like zebra fix.
- open firmware videomode and hdmi common code helpers
- major locking rework for kms object handling - pageflip/cursor
won't block on polling anymore!
- fbcon helper and prime helper cleanups
- i915: all over the map, haswell power well enhancements, valleyview
macro horrors cleaned up, killing lots of legacy GTT code,
- radeon: CS ioctl unification, deprecated UMS support, gpu reset
rework, VM fixes
- nouveau: reworked thermal code, external dp/tmds encoder support
(anx9805), fences sleep instead of polling,
- exynos: all over the driver fixes."
Lovely conflict in radeon/evergreen_cs.c between commit de0babd60d8d
("drm/radeon: enforce use of radeon_get_ib_value when reading user cmd")
and the new changes that modified that evergreen_dma_cs_parse()
function.
* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (508 commits)
drm/tilcdc: only build on arm
drm/i915: Revert hdmi HDP pin checks
drm/tegra: Add list of framebuffers to debugfs
drm/tegra: Fix color expansion
drm/tegra: Split DC_CMD_STATE_CONTROL register write
drm/tegra: Implement page-flipping support
drm/tegra: Implement VBLANK support
drm/tegra: Implement .mode_set_base()
drm/tegra: Add plane support
drm/tegra: Remove bogus tegra_framebuffer structure
drm: Add consistency check for page-flipping
drm/radeon: Use generic HDMI infoframe helpers
drm/tegra: Use generic HDMI infoframe helpers
drm: Add EDID helper documentation
drm: Add HDMI infoframe helpers
video: Add generic HDMI infoframe helpers
drm: Add some missing forward declarations
drm: Move mode tables to drm_edid.c
drm: Remove duplicate drm_mode_cea_vic()
gma500: Fix n, m1 and m2 clock limits for sdvo and lvds
...
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/DocBook/drm.tmpl | 78 | ||||
-rw-r--r-- | Documentation/EDID/HOWTO.txt | 27 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/drm/tilcdc/panel.txt | 59 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/drm/tilcdc/slave.txt | 18 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/drm/tilcdc/tfp410.txt | 21 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/drm/tilcdc/tilcdc.txt | 21 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/video/display-timing.txt | 109 | ||||
-rw-r--r-- | Documentation/thermal/nouveau_thermal | 81 |
8 files changed, 396 insertions, 18 deletions
diff --git a/Documentation/DocBook/drm.tmpl b/Documentation/DocBook/drm.tmpl index 4ee2304f82f9..f9df3b872c16 100644 --- a/Documentation/DocBook/drm.tmpl +++ b/Documentation/DocBook/drm.tmpl | |||
@@ -743,6 +743,10 @@ char *date;</synopsis> | |||
743 | These two operations are mandatory for GEM drivers that support DRM | 743 | These two operations are mandatory for GEM drivers that support DRM |
744 | PRIME. | 744 | PRIME. |
745 | </para> | 745 | </para> |
746 | <sect4> | ||
747 | <title>DRM PRIME Helper Functions Reference</title> | ||
748 | !Pdrivers/gpu/drm/drm_prime.c PRIME Helpers | ||
749 | </sect4> | ||
746 | </sect3> | 750 | </sect3> |
747 | <sect3 id="drm-gem-objects-mapping"> | 751 | <sect3 id="drm-gem-objects-mapping"> |
748 | <title>GEM Objects Mapping</title> | 752 | <title>GEM Objects Mapping</title> |
@@ -978,10 +982,25 @@ int max_width, max_height;</synopsis> | |||
978 | If the parameters are deemed valid, drivers then create, initialize and | 982 | If the parameters are deemed valid, drivers then create, initialize and |
979 | return an instance of struct <structname>drm_framebuffer</structname>. | 983 | return an instance of struct <structname>drm_framebuffer</structname>. |
980 | If desired the instance can be embedded in a larger driver-specific | 984 | If desired the instance can be embedded in a larger driver-specific |
981 | structure. The new instance is initialized with a call to | 985 | structure. Drivers must fill its <structfield>width</structfield>, |
982 | <function>drm_framebuffer_init</function> which takes a pointer to DRM | 986 | <structfield>height</structfield>, <structfield>pitches</structfield>, |
983 | frame buffer operations (struct | 987 | <structfield>offsets</structfield>, <structfield>depth</structfield>, |
984 | <structname>drm_framebuffer_funcs</structname>). Frame buffer operations are | 988 | <structfield>bits_per_pixel</structfield> and |
989 | <structfield>pixel_format</structfield> fields from the values passed | ||
990 | through the <parameter>drm_mode_fb_cmd2</parameter> argument. They | ||
991 | should call the <function>drm_helper_mode_fill_fb_struct</function> | ||
992 | helper function to do so. | ||
993 | </para> | ||
994 | |||
995 | <para> | ||
996 | The initailization of the new framebuffer instance is finalized with a | ||
997 | call to <function>drm_framebuffer_init</function> which takes a pointer | ||
998 | to DRM frame buffer operations (struct | ||
999 | <structname>drm_framebuffer_funcs</structname>). Note that this function | ||
1000 | publishes the framebuffer and so from this point on it can be accessed | ||
1001 | concurrently from other threads. Hence it must be the last step in the | ||
1002 | driver's framebuffer initialization sequence. Frame buffer operations | ||
1003 | are | ||
985 | <itemizedlist> | 1004 | <itemizedlist> |
986 | <listitem> | 1005 | <listitem> |
987 | <synopsis>int (*create_handle)(struct drm_framebuffer *fb, | 1006 | <synopsis>int (*create_handle)(struct drm_framebuffer *fb, |
@@ -1022,16 +1041,16 @@ int max_width, max_height;</synopsis> | |||
1022 | </itemizedlist> | 1041 | </itemizedlist> |
1023 | </para> | 1042 | </para> |
1024 | <para> | 1043 | <para> |
1025 | After initializing the <structname>drm_framebuffer</structname> | 1044 | The lifetime of a drm framebuffer is controlled with a reference count, |
1026 | instance drivers must fill its <structfield>width</structfield>, | 1045 | drivers can grab additional references with |
1027 | <structfield>height</structfield>, <structfield>pitches</structfield>, | 1046 | <function>drm_framebuffer_reference</function> </para> and drop them |
1028 | <structfield>offsets</structfield>, <structfield>depth</structfield>, | 1047 | again with <function>drm_framebuffer_unreference</function>. For |
1029 | <structfield>bits_per_pixel</structfield> and | 1048 | driver-private framebuffers for which the last reference is never |
1030 | <structfield>pixel_format</structfield> fields from the values passed | 1049 | dropped (e.g. for the fbdev framebuffer when the struct |
1031 | through the <parameter>drm_mode_fb_cmd2</parameter> argument. They | 1050 | <structname>drm_framebuffer</structname> is embedded into the fbdev |
1032 | should call the <function>drm_helper_mode_fill_fb_struct</function> | 1051 | helper struct) drivers can manually clean up a framebuffer at module |
1033 | helper function to do so. | 1052 | unload time with |
1034 | </para> | 1053 | <function>drm_framebuffer_unregister_private</function>. |
1035 | </sect2> | 1054 | </sect2> |
1036 | <sect2> | 1055 | <sect2> |
1037 | <title>Output Polling</title> | 1056 | <title>Output Polling</title> |
@@ -1043,6 +1062,22 @@ int max_width, max_height;</synopsis> | |||
1043 | operation. | 1062 | operation. |
1044 | </para> | 1063 | </para> |
1045 | </sect2> | 1064 | </sect2> |
1065 | <sect2> | ||
1066 | <title>Locking</title> | ||
1067 | <para> | ||
1068 | Beside some lookup structures with their own locking (which is hidden | ||
1069 | behind the interface functions) most of the modeset state is protected | ||
1070 | by the <code>dev-<mode_config.lock</code> mutex and additionally | ||
1071 | per-crtc locks to allow cursor updates, pageflips and similar operations | ||
1072 | to occur concurrently with background tasks like output detection. | ||
1073 | Operations which cross domains like a full modeset always grab all | ||
1074 | locks. Drivers there need to protect resources shared between crtcs with | ||
1075 | additional locking. They also need to be careful to always grab the | ||
1076 | relevant crtc locks if a modset functions touches crtc state, e.g. for | ||
1077 | load detection (which does only grab the <code>mode_config.lock</code> | ||
1078 | to allow concurrent screen updates on live crtcs). | ||
1079 | </para> | ||
1080 | </sect2> | ||
1046 | </sect1> | 1081 | </sect1> |
1047 | 1082 | ||
1048 | <!-- Internals: kms initialization and cleanup --> | 1083 | <!-- Internals: kms initialization and cleanup --> |
@@ -1126,6 +1161,12 @@ int max_width, max_height;</synopsis> | |||
1126 | any new rendering to the frame buffer until the page flip completes. | 1161 | any new rendering to the frame buffer until the page flip completes. |
1127 | </para> | 1162 | </para> |
1128 | <para> | 1163 | <para> |
1164 | If a page flip can be successfully scheduled the driver must set the | ||
1165 | <code>drm_crtc-<fb</code> field to the new framebuffer pointed to | ||
1166 | by <code>fb</code>. This is important so that the reference counting | ||
1167 | on framebuffers stays balanced. | ||
1168 | </para> | ||
1169 | <para> | ||
1129 | If a page flip is already pending, the | 1170 | If a page flip is already pending, the |
1130 | <methodname>page_flip</methodname> operation must return | 1171 | <methodname>page_flip</methodname> operation must return |
1131 | -<errorname>EBUSY</errorname>. | 1172 | -<errorname>EBUSY</errorname>. |
@@ -1609,6 +1650,10 @@ void intel_crt_init(struct drm_device *dev) | |||
1609 | make its properties available to applications. | 1650 | make its properties available to applications. |
1610 | </para> | 1651 | </para> |
1611 | </sect2> | 1652 | </sect2> |
1653 | <sect2> | ||
1654 | <title>KMS API Functions</title> | ||
1655 | !Edrivers/gpu/drm/drm_crtc.c | ||
1656 | </sect2> | ||
1612 | </sect1> | 1657 | </sect1> |
1613 | 1658 | ||
1614 | <!-- Internals: kms helper functions --> | 1659 | <!-- Internals: kms helper functions --> |
@@ -2104,6 +2149,7 @@ void intel_crt_init(struct drm_device *dev) | |||
2104 | <title>fbdev Helper Functions Reference</title> | 2149 | <title>fbdev Helper Functions Reference</title> |
2105 | !Pdrivers/gpu/drm/drm_fb_helper.c fbdev helpers | 2150 | !Pdrivers/gpu/drm/drm_fb_helper.c fbdev helpers |
2106 | !Edrivers/gpu/drm/drm_fb_helper.c | 2151 | !Edrivers/gpu/drm/drm_fb_helper.c |
2152 | !Iinclude/drm/drm_fb_helper.h | ||
2107 | </sect2> | 2153 | </sect2> |
2108 | <sect2> | 2154 | <sect2> |
2109 | <title>Display Port Helper Functions Reference</title> | 2155 | <title>Display Port Helper Functions Reference</title> |
@@ -2111,6 +2157,10 @@ void intel_crt_init(struct drm_device *dev) | |||
2111 | !Iinclude/drm/drm_dp_helper.h | 2157 | !Iinclude/drm/drm_dp_helper.h |
2112 | !Edrivers/gpu/drm/drm_dp_helper.c | 2158 | !Edrivers/gpu/drm/drm_dp_helper.c |
2113 | </sect2> | 2159 | </sect2> |
2160 | <sect2> | ||
2161 | <title>EDID Helper Functions Reference</title> | ||
2162 | !Edrivers/gpu/drm/drm_edid.c | ||
2163 | </sect2> | ||
2114 | </sect1> | 2164 | </sect1> |
2115 | 2165 | ||
2116 | <!-- Internals: vertical blanking --> | 2166 | <!-- Internals: vertical blanking --> |
diff --git a/Documentation/EDID/HOWTO.txt b/Documentation/EDID/HOWTO.txt index 75a9f2a0c43d..2d0a8f09475d 100644 --- a/Documentation/EDID/HOWTO.txt +++ b/Documentation/EDID/HOWTO.txt | |||
@@ -28,11 +28,30 @@ Makefile environment are given here. | |||
28 | To create binary EDID and C source code files from the existing data | 28 | To create binary EDID and C source code files from the existing data |
29 | material, simply type "make". | 29 | material, simply type "make". |
30 | 30 | ||
31 | If you want to create your own EDID file, copy the file 1024x768.S and | 31 | If you want to create your own EDID file, copy the file 1024x768.S, |
32 | replace the settings with your own data. The CRC value in the last line | 32 | replace the settings with your own data and add a new target to the |
33 | Makefile. Please note that the EDID data structure expects the timing | ||
34 | values in a different way as compared to the standard X11 format. | ||
35 | |||
36 | X11: | ||
37 | HTimings: hdisp hsyncstart hsyncend htotal | ||
38 | VTimings: vdisp vsyncstart vsyncend vtotal | ||
39 | |||
40 | EDID: | ||
41 | #define XPIX hdisp | ||
42 | #define XBLANK htotal-hdisp | ||
43 | #define XOFFSET hsyncstart-hdisp | ||
44 | #define XPULSE hsyncend-hsyncstart | ||
45 | |||
46 | #define YPIX vdisp | ||
47 | #define YBLANK vtotal-vdisp | ||
48 | #define YOFFSET (63+(vsyncstart-vdisp)) | ||
49 | #define YPULSE (63+(vsyncend-vsyncstart)) | ||
50 | |||
51 | The CRC value in the last line | ||
33 | #define CRC 0x55 | 52 | #define CRC 0x55 |
34 | is a bit tricky. After a first version of the binary data set is | 53 | also is a bit tricky. After a first version of the binary data set is |
35 | created, it must be be checked with the "edid-decode" utility which will | 54 | created, it must be checked with the "edid-decode" utility which will |
36 | most probably complain about a wrong CRC. Fortunately, the utility also | 55 | most probably complain about a wrong CRC. Fortunately, the utility also |
37 | displays the correct CRC which must then be inserted into the source | 56 | displays the correct CRC which must then be inserted into the source |
38 | file. After the make procedure is repeated, the EDID data set is ready | 57 | file. After the make procedure is repeated, the EDID data set is ready |
diff --git a/Documentation/devicetree/bindings/drm/tilcdc/panel.txt b/Documentation/devicetree/bindings/drm/tilcdc/panel.txt new file mode 100644 index 000000000000..9301c330d1a6 --- /dev/null +++ b/Documentation/devicetree/bindings/drm/tilcdc/panel.txt | |||
@@ -0,0 +1,59 @@ | |||
1 | Device-Tree bindings for tilcdc DRM generic panel output driver | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: value should be "ti,tilcdc,panel". | ||
5 | - panel-info: configuration info to configure LCDC correctly for the panel | ||
6 | - ac-bias: AC Bias Pin Frequency | ||
7 | - ac-bias-intrpt: AC Bias Pin Transitions per Interrupt | ||
8 | - dma-burst-sz: DMA burst size | ||
9 | - bpp: Bits per pixel | ||
10 | - fdd: FIFO DMA Request Delay | ||
11 | - sync-edge: Horizontal and Vertical Sync Edge: 0=rising 1=falling | ||
12 | - sync-ctrl: Horizontal and Vertical Sync: Control: 0=ignore | ||
13 | - raster-order: Raster Data Order Select: 1=Most-to-least 0=Least-to-most | ||
14 | - fifo-th: DMA FIFO threshold | ||
15 | - display-timings: typical videomode of lcd panel. Multiple video modes | ||
16 | can be listed if the panel supports multiple timings, but the 'native-mode' | ||
17 | should be the preferred/default resolution. Refer to | ||
18 | Documentation/devicetree/bindings/video/display-timing.txt for display | ||
19 | timing binding details. | ||
20 | |||
21 | Recommended properties: | ||
22 | - pinctrl-names, pinctrl-0: the pincontrol settings to configure | ||
23 | muxing properly for pins that connect to TFP410 device | ||
24 | |||
25 | Example: | ||
26 | |||
27 | /* Settings for CDTech_S035Q01 / LCD3 cape: */ | ||
28 | lcd3 { | ||
29 | compatible = "ti,tilcdc,panel"; | ||
30 | pinctrl-names = "default"; | ||
31 | pinctrl-0 = <&bone_lcd3_cape_lcd_pins>; | ||
32 | panel-info { | ||
33 | ac-bias = <255>; | ||
34 | ac-bias-intrpt = <0>; | ||
35 | dma-burst-sz = <16>; | ||
36 | bpp = <16>; | ||
37 | fdd = <0x80>; | ||
38 | sync-edge = <0>; | ||
39 | sync-ctrl = <1>; | ||
40 | raster-order = <0>; | ||
41 | fifo-th = <0>; | ||
42 | }; | ||
43 | display-timings { | ||
44 | native-mode = <&timing0>; | ||
45 | timing0: 320x240 { | ||
46 | hactive = <320>; | ||
47 | vactive = <240>; | ||
48 | hback-porch = <21>; | ||
49 | hfront-porch = <58>; | ||
50 | hsync-len = <47>; | ||
51 | vback-porch = <11>; | ||
52 | vfront-porch = <23>; | ||
53 | vsync-len = <2>; | ||
54 | clock-frequency = <8000000>; | ||
55 | hsync-active = <0>; | ||
56 | vsync-active = <0>; | ||
57 | }; | ||
58 | }; | ||
59 | }; | ||
diff --git a/Documentation/devicetree/bindings/drm/tilcdc/slave.txt b/Documentation/devicetree/bindings/drm/tilcdc/slave.txt new file mode 100644 index 000000000000..3d2c52460dca --- /dev/null +++ b/Documentation/devicetree/bindings/drm/tilcdc/slave.txt | |||
@@ -0,0 +1,18 @@ | |||
1 | Device-Tree bindings for tilcdc DRM encoder slave output driver | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: value should be "ti,tilcdc,slave". | ||
5 | - i2c: the phandle for the i2c device the encoder slave is connected to | ||
6 | |||
7 | Recommended properties: | ||
8 | - pinctrl-names, pinctrl-0: the pincontrol settings to configure | ||
9 | muxing properly for pins that connect to TFP410 device | ||
10 | |||
11 | Example: | ||
12 | |||
13 | hdmi { | ||
14 | compatible = "ti,tilcdc,slave"; | ||
15 | i2c = <&i2c0>; | ||
16 | pinctrl-names = "default"; | ||
17 | pinctrl-0 = <&nxp_hdmi_bonelt_pins>; | ||
18 | }; | ||
diff --git a/Documentation/devicetree/bindings/drm/tilcdc/tfp410.txt b/Documentation/devicetree/bindings/drm/tilcdc/tfp410.txt new file mode 100644 index 000000000000..a58ae7756fc6 --- /dev/null +++ b/Documentation/devicetree/bindings/drm/tilcdc/tfp410.txt | |||
@@ -0,0 +1,21 @@ | |||
1 | Device-Tree bindings for tilcdc DRM TFP410 output driver | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: value should be "ti,tilcdc,tfp410". | ||
5 | - i2c: the phandle for the i2c device to use for DDC | ||
6 | |||
7 | Recommended properties: | ||
8 | - pinctrl-names, pinctrl-0: the pincontrol settings to configure | ||
9 | muxing properly for pins that connect to TFP410 device | ||
10 | - powerdn-gpio: the powerdown GPIO, pulled low to power down the | ||
11 | TFP410 device (for DPMS_OFF) | ||
12 | |||
13 | Example: | ||
14 | |||
15 | dvicape { | ||
16 | compatible = "ti,tilcdc,tfp410"; | ||
17 | i2c = <&i2c2>; | ||
18 | pinctrl-names = "default"; | ||
19 | pinctrl-0 = <&bone_dvi_cape_dvi_00A1_pins>; | ||
20 | powerdn-gpio = <&gpio2 31 0>; | ||
21 | }; | ||
diff --git a/Documentation/devicetree/bindings/drm/tilcdc/tilcdc.txt b/Documentation/devicetree/bindings/drm/tilcdc/tilcdc.txt new file mode 100644 index 000000000000..e5f130159ae1 --- /dev/null +++ b/Documentation/devicetree/bindings/drm/tilcdc/tilcdc.txt | |||
@@ -0,0 +1,21 @@ | |||
1 | Device-Tree bindings for tilcdc DRM driver | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: value should be "ti,am33xx-tilcdc". | ||
5 | - interrupts: the interrupt number | ||
6 | - reg: base address and size of the LCDC device | ||
7 | |||
8 | Recommended properties: | ||
9 | - interrupt-parent: the phandle for the interrupt controller that | ||
10 | services interrupts for this device. | ||
11 | - ti,hwmods: Name of the hwmod associated to the LCDC | ||
12 | |||
13 | Example: | ||
14 | |||
15 | fb: fb@4830e000 { | ||
16 | compatible = "ti,am33xx-tilcdc"; | ||
17 | reg = <0x4830e000 0x1000>; | ||
18 | interrupt-parent = <&intc>; | ||
19 | interrupts = <36>; | ||
20 | ti,hwmods = "lcdc"; | ||
21 | }; | ||
diff --git a/Documentation/devicetree/bindings/video/display-timing.txt b/Documentation/devicetree/bindings/video/display-timing.txt new file mode 100644 index 000000000000..150038552bc3 --- /dev/null +++ b/Documentation/devicetree/bindings/video/display-timing.txt | |||
@@ -0,0 +1,109 @@ | |||
1 | display-timing bindings | ||
2 | ======================= | ||
3 | |||
4 | display-timings node | ||
5 | -------------------- | ||
6 | |||
7 | required properties: | ||
8 | - none | ||
9 | |||
10 | optional properties: | ||
11 | - native-mode: The native mode for the display, in case multiple modes are | ||
12 | provided. When omitted, assume the first node is the native. | ||
13 | |||
14 | timing subnode | ||
15 | -------------- | ||
16 | |||
17 | required properties: | ||
18 | - hactive, vactive: display resolution | ||
19 | - hfront-porch, hback-porch, hsync-len: horizontal display timing parameters | ||
20 | in pixels | ||
21 | vfront-porch, vback-porch, vsync-len: vertical display timing parameters in | ||
22 | lines | ||
23 | - clock-frequency: display clock in Hz | ||
24 | |||
25 | optional properties: | ||
26 | - hsync-active: hsync pulse is active low/high/ignored | ||
27 | - vsync-active: vsync pulse is active low/high/ignored | ||
28 | - de-active: data-enable pulse is active low/high/ignored | ||
29 | - pixelclk-active: with | ||
30 | - active high = drive pixel data on rising edge/ | ||
31 | sample data on falling edge | ||
32 | - active low = drive pixel data on falling edge/ | ||
33 | sample data on rising edge | ||
34 | - ignored = ignored | ||
35 | - interlaced (bool): boolean to enable interlaced mode | ||
36 | - doublescan (bool): boolean to enable doublescan mode | ||
37 | |||
38 | All the optional properties that are not bool follow the following logic: | ||
39 | <1>: high active | ||
40 | <0>: low active | ||
41 | omitted: not used on hardware | ||
42 | |||
43 | There are different ways of describing the capabilities of a display. The | ||
44 | devicetree representation corresponds to the one commonly found in datasheets | ||
45 | for displays. If a display supports multiple signal timings, the native-mode | ||
46 | can be specified. | ||
47 | |||
48 | The parameters are defined as: | ||
49 | |||
50 | +----------+-------------------------------------+----------+-------+ | ||
51 | | | ↑ | | | | ||
52 | | | |vback_porch | | | | ||
53 | | | ↓ | | | | ||
54 | +----------#######################################----------+-------+ | ||
55 | | # ↑ # | | | ||
56 | | # | # | | | ||
57 | | hback # | # hfront | hsync | | ||
58 | | porch # | hactive # porch | len | | ||
59 | |<-------->#<-------+--------------------------->#<-------->|<----->| | ||
60 | | # | # | | | ||
61 | | # |vactive # | | | ||
62 | | # | # | | | ||
63 | | # ↓ # | | | ||
64 | +----------#######################################----------+-------+ | ||
65 | | | ↑ | | | | ||
66 | | | |vfront_porch | | | | ||
67 | | | ↓ | | | | ||
68 | +----------+-------------------------------------+----------+-------+ | ||
69 | | | ↑ | | | | ||
70 | | | |vsync_len | | | | ||
71 | | | ↓ | | | | ||
72 | +----------+-------------------------------------+----------+-------+ | ||
73 | |||
74 | Example: | ||
75 | |||
76 | display-timings { | ||
77 | native-mode = <&timing0>; | ||
78 | timing0: 1080p24 { | ||
79 | /* 1920x1080p24 */ | ||
80 | clock-frequency = <52000000>; | ||
81 | hactive = <1920>; | ||
82 | vactive = <1080>; | ||
83 | hfront-porch = <25>; | ||
84 | hback-porch = <25>; | ||
85 | hsync-len = <25>; | ||
86 | vback-porch = <2>; | ||
87 | vfront-porch = <2>; | ||
88 | vsync-len = <2>; | ||
89 | hsync-active = <1>; | ||
90 | }; | ||
91 | }; | ||
92 | |||
93 | Every required property also supports the use of ranges, so the commonly used | ||
94 | datasheet description with minimum, typical and maximum values can be used. | ||
95 | |||
96 | Example: | ||
97 | |||
98 | timing1: timing { | ||
99 | /* 1920x1080p24 */ | ||
100 | clock-frequency = <148500000>; | ||
101 | hactive = <1920>; | ||
102 | vactive = <1080>; | ||
103 | hsync-len = <0 44 60>; | ||
104 | hfront-porch = <80 88 95>; | ||
105 | hback-porch = <100 148 160>; | ||
106 | vfront-porch = <0 4 6>; | ||
107 | vback-porch = <0 36 50>; | ||
108 | vsync-len = <0 5 6>; | ||
109 | }; | ||
diff --git a/Documentation/thermal/nouveau_thermal b/Documentation/thermal/nouveau_thermal new file mode 100644 index 000000000000..efceb7828f54 --- /dev/null +++ b/Documentation/thermal/nouveau_thermal | |||
@@ -0,0 +1,81 @@ | |||
1 | Kernel driver nouveau | ||
2 | =================== | ||
3 | |||
4 | Supported chips: | ||
5 | * NV43+ | ||
6 | |||
7 | Authors: Martin Peres (mupuf) <martin.peres@labri.fr> | ||
8 | |||
9 | Description | ||
10 | --------- | ||
11 | |||
12 | This driver allows to read the GPU core temperature, drive the GPU fan and | ||
13 | set temperature alarms. | ||
14 | |||
15 | Currently, due to the absence of in-kernel API to access HWMON drivers, Nouveau | ||
16 | cannot access any of the i2c external monitoring chips it may find. If you | ||
17 | have one of those, temperature and/or fan management through Nouveau's HWMON | ||
18 | interface is likely not to work. This document may then not cover your situation | ||
19 | entirely. | ||
20 | |||
21 | Temperature management | ||
22 | -------------------- | ||
23 | |||
24 | Temperature is exposed under as a read-only HWMON attribute temp1_input. | ||
25 | |||
26 | In order to protect the GPU from overheating, Nouveau supports 4 configurable | ||
27 | temperature thresholds: | ||
28 | |||
29 | * Fan_boost: Fan speed is set to 100% when reaching this temperature; | ||
30 | * Downclock: The GPU will be downclocked to reduce its power dissipation; | ||
31 | * Critical: The GPU is put on hold to further lower power dissipation; | ||
32 | * Shutdown: Shut the computer down to protect your GPU. | ||
33 | |||
34 | WARNING: Some of these thresholds may not be used by Nouveau depending | ||
35 | on your chipset. | ||
36 | |||
37 | The default value for these thresholds comes from the GPU's vbios. These | ||
38 | thresholds can be configured thanks to the following HWMON attributes: | ||
39 | |||
40 | * Fan_boost: temp1_auto_point1_temp and temp1_auto_point1_temp_hyst; | ||
41 | * Downclock: temp1_max and temp1_max_hyst; | ||
42 | * Critical: temp1_crit and temp1_crit_hyst; | ||
43 | * Shutdown: temp1_emergency and temp1_emergency_hyst. | ||
44 | |||
45 | NOTE: Remember that the values are stored as milli degrees Celcius. Don't forget | ||
46 | to multiply! | ||
47 | |||
48 | Fan management | ||
49 | ------------ | ||
50 | |||
51 | Not all cards have a drivable fan. If you do, then the following HWMON | ||
52 | attributes should be available: | ||
53 | |||
54 | * pwm1_enable: Current fan management mode (NONE, MANUAL or AUTO); | ||
55 | * pwm1: Current PWM value (power percentage); | ||
56 | * pwm1_min: The minimum PWM speed allowed; | ||
57 | * pwm1_max: The maximum PWM speed allowed (bypassed when hitting Fan_boost); | ||
58 | |||
59 | You may also have the following attribute: | ||
60 | |||
61 | * fan1_input: Speed in RPM of your fan. | ||
62 | |||
63 | Your fan can be driven in different modes: | ||
64 | |||
65 | * 0: The fan is left untouched; | ||
66 | * 1: The fan can be driven in manual (use pwm1 to change the speed); | ||
67 | * 2; The fan is driven automatically depending on the temperature. | ||
68 | |||
69 | NOTE: Be sure to use the manual mode if you want to drive the fan speed manually | ||
70 | |||
71 | NOTE2: Not all fan management modes may be supported on all chipsets. We are | ||
72 | working on it. | ||
73 | |||
74 | Bug reports | ||
75 | --------- | ||
76 | |||
77 | Thermal management on Nouveau is new and may not work on all cards. If you have | ||
78 | inquiries, please ping mupuf on IRC (#nouveau, freenode). | ||
79 | |||
80 | Bug reports should be filled on Freedesktop's bug tracker. Please follow | ||
81 | http://nouveau.freedesktop.org/wiki/Bugs | ||