# Howto setup a 120Hz SM22R33RZ with nvidia drivers

## krinn

Hi, as i have just brought this monitor and as it was a misery to make it run like at 120Hz, here's an howto do it with all steps i've done to achieve it (so someone with another monitor model might follow them to achieve that with his monitor too)

I won't speak about 3D output, as i don't brought it for that, but just to get a monitor that refresh closer to what my poor old Vision Master Pro was doing and saved my eyes, so i don't own 3D glasses.

step1: Finding the monitor EDID infos

Actually this step is not really necessary, because just forcing the 120Hz is enough to make it work as nvidia drivers will query EDID to get that value, but i like to know what are these settings to know what i could try for other modeline in non-native resolution. You can just skip to step 2 without setting any modeline infos and this should work.

I've found a program in the tree (emerge -a read-edid) that should read EDID infos from the monitor and tell me what i need to configure xorg, great !

But for some reason, the program wasn't able to read the infos

```
get-edid

get-edid: get-edid version 2.0.0

   Performing real mode VBE call

   Interrupt 0x10 ax=0x4f00 bx=0x0 cx=0x0

   Function supported

   Call successful

   VBE version 300

   VBE string at 0x2110 "NVIDIA"

VBE/DDC service about to be called

   Report DDC capabilities

   Performing real mode VBE call

   Interrupt 0x10 ax=0x4f15 bx=0x0 cx=0x0

   Function supported

   Call successful

   Monitor and video card combination does not support DDC1 transfers

   Monitor and video card combination does not support DDC2 transfers

   0 seconds per 128 byte EDID block transfer

   Screen is not blanked during DDC transfer

Reading next EDID block

VBE/DDC service about to be called

   Read EDID

   Performing real mode VBE call

   Interrupt 0x10 ax=0x4f15 bx=0x1 cx=0x0

   Function supported

   Call failed

The EDID data should not be trusted as the VBE call failed

Error: output block unchanged

```

After (hours) of search in google, and testing, i've found a simple solve, nvidia-settings have an option to save the edid infos it get from the monitor.

Here's where to get it (i will gave it anyway, but it's for people with a different monitor that wish get it the same way i did)

- Goto GPU0 (well the gpu where the monitor is attach to)

- Select the monitor (should be DFP-0 or DFP-1, monitor name is show there)

- And hit the "Acquire EDID" button

Now select binary format to save the EDID infos (because if you choose the text format, you'll get an hex dump of the edid, not something useful for human, and this text format also cannot be use with parse-edid that comes with get-edid program).

Now that we have the good edid infos in binary format, parse-edid is able to tell us the infos we are seeking (show for ones that don't own an nvidia but still need the EDID infos) :

```
parse-edid < edid.bin

parse-edid: parse-edid version 2.0.0

parse-edid: EDID checksum passed.

   # EDID version 1 revision 3

Section "Monitor"

   # Block type: 2:0 3:fd

   # Block type: 2:0 3:fc

   Identifier "SyncMaster"

   VendorName "SAM"

   ModelName "SyncMaster"

   # Block type: 2:0 3:fd

   HorizSync 30-190

   VertRefresh 56-125

   # Max dot clock (video bandwidth) 330 MHz

   # Block type: 2:0 3:fc

   # Block type: 2:0 3:ff

   # DPMS capabilities: Active off:yes  Suspend:no  Standby:no

   Mode    "1680x1050"   # vfreq 59.883Hz, hfreq 64.674kHz

      DotClock   119.000000

      HTimings   1680 1728 1760 1840

      VTimings   1050 1053 1059 1080

      Flags   "-HSync" "+VSync"

   EndMode

   # Block type: 2:0 3:fd

   # Block type: 2:0 3:fc

   # Block type: 2:0 3:ff

EndSection

```

Finally we get the infos we need now

Step 2: Setting your xorg.conf

I'll show you only the part that are need, other settings are upto you, the only thing important is to use 1680x1050_120 (because if you notice i've change the modeline name to 1680x1050_120 in it)

```

Section "Monitor"

    Identifier     "Monitor0"

    VendorName     "Samsung"

    ModelName      "SM2233RZ"

    HorizSync       30.0 - 190.0

    VertRefresh     56.0 - 125.0

    Option         "dpms"

    # SM2233RZ 1680x1050 vfreq 59.883Hz, hfreq 64.674kHz

    Modeline "1680x1050_120" 119.00 1680 1728 1760 1840 1050 1053 1059 1080 -HSync +VSync

EndSection

Section "Screen"

    Option         "MetaModes" "1680x1050_120"

    SubSection     "Display"

        Depth       24

    EndSubSection

EndSection
```

Note to ones using multi-display as me, the correct option is : 

```
    Option         "MetaModes" "1680x1050_120,1680x1050_120; NULL, 1680x1050_120; 1680x1050_120, NULL"
```

Step 3: Restart the server with the new config

And check current monitor settings....

```
 nvidia-settings --query [gpu:0]/RefreshRate[DFP-0]

  Attribute 'RefreshRate' (beleg:0[gpu:0]; display device: DFP-0): 59,88 Hz.

    'RefreshRate' is an integer attribute.

    'RefreshRate' is a read-only attribute.

    'RefreshRate' is display device specific.

    'RefreshRate' can use the following target types: X Screen, GPU, Display

    Device.

```

LOL it still doesn't work.

This time google gave me the answer, it's because nvidia drivers always start with GPU scaling enable for each monitor, and this prevent the monitor to work by itself.

All google answers says you need to load the nvidia-settings config file while booting : ie make the config file without the GPU scaling enable, quit (it autosave it), and use nvidia-settings -l

But because on my computer the nvidia-settings bug when using the -l switch, it try to use the display from my host:display instead of using the DISPLAY env return value

```
ERROR: Cannot open display 'beleg:0.0'.

cat ~/.nvidia-settings-rc | grep GPUScaling

beleg:0.0/GPUScaling[DFP-0]=65537

beleg:0.0/GPUScaling[DFP-1]=131073

env | grep DISPLAY

DISPLAY=:0.0

```

So because of that and because i frankly don't care to check everytime i run the nvidia-settings GUI if it reenable the GPU scaling shit everytime, i will use the direct query instead (and it's possible hopefuly !).

This will do what we need, and specially without that bug.

Step 4: Disabling GPU Scaling

You will have to run that evertime X is run, so find where you wish add it, for me i simply add it as a start program in gnome.

And you will have to do that for each monitors (DFP-0 and DFP-1 if you have two)

```
nvidia-settings -a [gpu:0]/GPUScaling[DFP-0]=1,1

  Attribute 'GPUScaling' (beleg:0[gpu:0], display device: DFP-0) assigned value

  1,1.
```

And now we can re-check again the monitors settings (or use your monitor info panel)

```
nvidia-settings --query [gpu:0]/RefreshRate[DFP-0] 

  Attribute 'RefreshRate' (beleg:0[gpu:0]; display device: DFP-0): 120,00 Hz.

    'RefreshRate' is an integer attribute.

    'RefreshRate' is a read-only attribute.

    'RefreshRate' is display device specific.

    'RefreshRate' can use the following target types: X Screen, GPU, Display

    Device.

```

And now xrandr and xvidtune output to show how X see that. xvidtune show twice Dot Clock speed, but it could just be because i use two monitors, and xrandr is lost, gnome screen size use the xrandr info, and will then only allow you to get frequencies report by xrandr.

```
xvidtune -show

"3360x1050"   238.46   3360 1728 1760 1840   1050 1053 1059 1080 +hsync +vsync

xrandr -q

xrandr: Failed to get size of gamma for output default

Screen 0: minimum 1024 x 768, current 3360 x 1050, maximum 3360 x 1050

default connected 3360x1050+0+0 0mm x 0mm

   3360x1050      50.0* 

   1680x1050      51.0  

   1024x768       52.0  

```

And actual results from xorg.log (with my current settings, but it should gave you an idea of the result)

```
[ 57603.706] (==) NVIDIA(0): Using gamma correction (1.0, 1.0, 1.0)

[ 57603.706] (**) NVIDIA(0): Option "HWcursor" "true"

[ 57603.706] (**) NVIDIA(0): Option "TVStandard" "PAL-N"

[ 57603.706] (**) NVIDIA(0): Option "RenderAccel" "true"

[ 57603.706] (**) NVIDIA(0): Option "TwinView" "true"

[ 57603.706] (**) NVIDIA(0): Option "TwinViewOrientation" "LeftOf"

[ 57603.706] (**) NVIDIA(0): Option "MetaModes" "1680x1050_120,1680x1050_120; NULL, 1680x1050_120; 1024x768, NULL"

[ 57603.706] (**) NVIDIA(0): Option "AllowGLXWithComposite" "1"

[ 57603.706] (**) NVIDIA(0): Option "AddARGBGLXVisuals" "True"

[ 57603.706] (**) NVIDIA(0): Enabling RENDER acceleration

[ 57603.706] (**) NVIDIA(0): TV Standard string: "PAL-N"

[ 57604.873] (II) NVIDIA(GPU-0): Display (Samsung SyncMaster (DFP-0)) supports NVIDIA 3D Vision

[ 57604.873] (II) NVIDIA(GPU-0):     stereo.

[ 57605.000] (II) NVIDIA(GPU-0): Display (Samsung SyncMaster (DFP-1)) supports NVIDIA 3D Vision

[ 57605.000] (II) NVIDIA(GPU-0):     stereo.

[ 57605.001] (II) NVIDIA(0): NVIDIA GPU GeForce GTX 260 (GT200) at PCI:2:0:0 (GPU-0)

[ 57605.001] (--) NVIDIA(0): Memory: 917504 kBytes

[ 57605.001] (--) NVIDIA(0): VideoBIOS: 62.00.4c.00.01

[ 57605.001] (II) NVIDIA(0): Detected PCI Express Link width: 16X

[ 57605.001] (--) NVIDIA(0): Interlaced video modes are supported on this GPU

[ 57605.001] (--) NVIDIA(0): Connected display device(s) on GeForce GTX 260 at PCI:2:0:0

[ 57605.001] (--) NVIDIA(0):     Samsung SyncMaster (DFP-0)

[ 57605.001] (--) NVIDIA(0):     Samsung SyncMaster (DFP-1)

[ 57605.001] (--) NVIDIA(0): Samsung SyncMaster (DFP-0): 330.0 MHz maximum pixel clock

[ 57605.001] (--) NVIDIA(0): Samsung SyncMaster (DFP-0): Internal Dual Link TMDS

[ 57605.001] (--) NVIDIA(0): Samsung SyncMaster (DFP-1): 330.0 MHz maximum pixel clock

[ 57605.001] (--) NVIDIA(0): Samsung SyncMaster (DFP-1): Internal Dual Link TMDS

[ 57605.005] (**) NVIDIA(0): TwinView enabled

[ 57605.206] (II) NVIDIA(0): Assigned Display Devices: DFP-0, DFP-1

[ 57605.207] (II) NVIDIA(0): Validated modes:

[ 57605.207] (II) NVIDIA(0):     "1680x1050_120,1680x1050_120"

[ 57605.207] (II) NVIDIA(0):     "NULL,1680x1050_120"

[ 57605.207] (II) NVIDIA(0):     "1024x768,NULL"

[ 57605.207] (II) NVIDIA(0): Virtual screen size determined to be 3360 x 1050

[ 57605.244] (--) NVIDIA(0): DPI set to (88, 88); computed from "UseEdidDpi" X config

[ 57605.244] (--) NVIDIA(0):     option

[ 57605.244] (**) NVIDIA(0): Enabling 32-bit ARGB GLX visuals.

[ 57605.244] (--) Depth 24 pixmap format is 32 bpp

[ 57605.244] (II) NVIDIA: Using 768.00 MB of virtual memory for indirect memory access.

[ 57605.255] (II) NVIDIA(0): Setting mode "1680x1050_120,1680x1050_120"

[ 57605.342] (II) Loading extension NV-GLX

[ 57605.393] (==) NVIDIA(0): Disabling shared memory pixmaps

[ 57605.393] (==) NVIDIA(0): Backing store disabled

[ 57605.393] (==) NVIDIA(0): Silken mouse enabled

[ 57605.394] (==) NVIDIA(0): DPMS enabled

```

I hope this will help you setup your monitor easier.Last edited by krinn on Wed Jan 25, 2012 7:30 pm; edited 1 time in total

----------

## Dominique_71

Thanks for that.

It is another tool in portage, hwinfo, the Suse hardware recognition tool. It doesn't show the same informations: I get only one mode with nvidia-settings and several with hwinfo. The plus with nvidia-settings and parse-edid is than the info is formatted for inclusion in xorg.conf.

Also, a strange result of both ways is than I don't get the current screen mode:

```
hwinfo --monitor

40: None 00.1: 10000 Monitor                                    

  [Created at monitor.95]

  Unique ID: jyhG.TzX2mv4fahF

  Hardware Class: monitor

  Model: "SAMSUNG SyncMaster"

  Vendor: SAM "SAMSUNG"

  Device: eisa 0x0109 "SyncMaster"

  Serial ID: "HVAX712516"

  Resolution: 720x400@70Hz

  Resolution: 640x480@60Hz

  Resolution: 640x480@67Hz

  Resolution: 640x480@72Hz

  Resolution: 640x480@75Hz

  Resolution: 800x600@56Hz

  Resolution: 800x600@60Hz

  Resolution: 800x600@72Hz

  Resolution: 800x600@75Hz

  Resolution: 832x624@75Hz

  Resolution: 1024x768@60Hz

  Resolution: 1024x768@70Hz

  Resolution: 1024x768@75Hz

  Resolution: 1280x1024@75Hz

  Resolution: 1280x1024@85Hz

  Resolution: 1024x768@85Hz

  Resolution: 800x600@85Hz

  Resolution: 640x480@85Hz

  Size: 352x264 mm

  Detailed Timings #0:

     Resolution: 1280x1024

     Horizontal: 1280 1344 1504 1728 (+64 +224 +448) +hsync

       Vertical: 1024 1025 1028 1072 (+1 +4 +48) +vsync

    Frequencies: 157.50 MHz, 91.15 kHz, 85.02 Hz

  Driver Info #0:

    Max. Resolution: 1280x1024

    Vert. Sync Range: 50-160 Hz

    Hor. Sync Range: 30-96 kHz

    Bandwidth: 157 MHz

  Config Status: cfg=new, avail=yes, need=no, active=unknown
```

```
parse-edid < edid.bin

parse-edid: parse-edid version 2.0.0

parse-edid: EDID checksum passed.

   # EDID version 1 revision 3

Section "Monitor"

   # Block type: 2:0 3:fd

   # Block type: 2:0 3:fc

   Identifier "SyncMaster"

   VendorName "SAM"

   ModelName "SyncMaster"

   # Block type: 2:0 3:fd

   HorizSync 30-96

   VertRefresh 50-160

   # Max dot clock (video bandwidth) 250 MHz

   # Block type: 2:0 3:fc

   # Block type: 2:0 3:ff

   # DPMS capabilities: Active off:yes  Suspend:no  Standby:no

   Mode    "1280x1024"   # vfreq 85.024Hz, hfreq 91.146kHz

      DotClock   157.500000

      HTimings   1280 1344 1504 1728

      VTimings   1024 1025 1028 1072

      Flags   "+HSync" "+VSync"

   EndMode

   # Block type: 2:0 3:fd

   # Block type: 2:0 3:fc

   # Block type: 2:0 3:ff

EndSection

```

My current mode is 1600x1200@75Hz. I get it with another Suse tool: during a Suse installation, one of the final steps is to optionally read the monitor installation CD. That way, Yast is able to retrieve all the mode informations supported by the monitor and will write them into xorg.conf. This is a huge list of modes including a 1280x1024@88Hz mode.

----------

## krinn

tried hwinfo to see, here's what i get

```
hwinfo --monitor

35: None 00.0: 10002 LCD Monitor                                

  [Created at monitor.95]

  Unique ID: rdCR.rQl8NIf_F_2

  Hardware Class: monitor

  Model: "SAMSUNG SyncMaster"

  Vendor: SAM "SAMSUNG"

  Device: eisa 0x04ea "SyncMaster"

  Serial ID: "HVNZA00879"

  Resolution: 1680x1050@60Hz

  Size: 478x300 mm

  Detailed Timings #0:

     Resolution: 1680x1050

     Horizontal: 1680 1728 1760 1840 (+48 +80 +160) -hsync

       Vertical: 1050 1053 1059 1080 (+3 +9 +30) +vsync

    Frequencies: 119.00 MHz, 64.67 kHz, 59.88 Hz

  Driver Info #0:

    Max. Resolution: 1680x1050

    Vert. Sync Range: 56-125 Hz

    Hor. Sync Range: 30-190 kHz

    Bandwidth: 119 MHz

  Config Status: cfg=new, avail=yes, need=no, active=unknown

```

I cannot get my resolution too.

But now xrandr output it correctly, i didn't think to note the xrandr previous version i was using, but this one, now output it as it should. Check xrandr output.

```
xrandr --version

xrandr program version       1.3.5

Server reports RandR version 1.3

xrandr -q

xrandr: Failed to get size of gamma for output default

Screen 0: minimum 1024 x 768, current 3360 x 1050, maximum 3360 x 1050

default connected 3360x1050+0+0 0mm x 0mm

   3360x1050     120.0* 

   1680x1050     120.0  

   1024x768       85.0  

```

----------

## Dominique_71

Here, xrandr is failing to report the correct modes. It is the same version as yours:

```
xrandr -v

xrandr program version       1.3.5

Server reports RandR version 1.3

xrandr -q

xrandr: Failed to get size of gamma for output default

Screen 0: minimum 320 x 175, current 1600 x 1200, maximum 1600 x 1200

default connected 1600x1200+0+0 0mm x 0mm

   1600x1200      50.0*    51.0     57.0     58.0     59.0     60.0  

   1280x1024      52.0     56.0     63.0     64.0

...
```

According to nvidia-settings, my monitor can do 1600x1024@75, 70, 68, 65 and 60Hz. It is no 50Hz mode for that resolution. Also,  it is no 1280x1024#52Hz mode. Even 2048x1536 is at 60Hz. I will soon try with another one monitor, a LCD screen.

What would be great with nvidia-settings and parse-edid is that they would be able to output all the modes that show nvidia-settings.

----------

