MSI Wind U110

March 21, 2010

Subtitle: poulsbo and why you should avoid it.

I recently bought an MSI Wind U110. Linux suffers on this platform as a result of its GMA 500 aka "Poulsbo" graphics hardware. Wikipedia: "GMA 500 support on Linux is not optimal." It’s possible to run Ubuntu 9.10 Netbook Remix, which is what I’m doing now, but it’s not optimal in the following ways:

  1. The wireless is disabled in fascinating ways until you press Fn-F11. Once you do that, it should work out of the box.

  2. You absolutely need to get the psb driver. Without it, you can’t even drive the LCD at native resolution, and life just utterly sucks. I did this by dumping a bunch of PPAs into my /etc/apt/sources.list.d using add-apt-repository. The Ubuntu-Mobile PPA doesn’t seem to have packages for karmic right now; I found relevant packages in the PPA of kalon33: Nicolas DERIVE and the gma500 PPA of lucazade. I’m currently running the packages built by Nicolas DERIVE.

  3. You need to "fix" the driver in some obscure way so that it doesn’t crash when you modprobe it. Bug 406529 documents the fix — see comment 6. Be sure to uninstall the package psb-modules when you rebuild, because it has priority. The psb-kernel-source package unpacks into /usr/src.

  4. After you do the updated-packages dance, the "home screen" thing that lets you select packages doesn’t come up by default, but it does show up if you click the Ubuntu logo in the upper-left. Not sure what’s going on here.

  5. Suspend doesn’t work by default — the backlight doesn’t come on during resume. I’ve successfully suspended from the command line, both by sudo pm-suspend --quirk-vbestate-restore and using the uswsusp package using a command like sudo s2ram --force --vbe_save. It seems that by default, HAL is adding a bunch of quirks that interfere with backlight coming back on. HAL is in "maintenance mode" and may be being replaced by DeviceKit in the future, but for now we have to work with it.

    If you close the lid, you’ll see the quirks that are being added in /var/log/pm-suspend.log. On my machine, these were: --quirk-dpms-on --quirk-dpms-suspend --quirk-vbe-post --quirk-vbemode-restore --quirk-vbestate-restore --quirk-vga-mode-3. It’s --quirk-vbe-post that really messes everything up, but even when I disabled that one, I still had problems with the screen randomly not coming back (but with the backlight on), so I decided to disable all of these quirks except --quirk-vbestate-restore.

    There are at least two ways to do this. One way involves adding a pm-utils script to remove these quirks from pm-suspend calls. The other way involves telling HAL to get rid of these quirks.

    The first way is in some ways simpler, so let’s start there.

    1. Add a file to /etc/pm/sleep.d/05_remove-annoying-quirks with these contents:

      #!/bin/sh
      
      . "${PM_FUNCTIONS}"
      
      remove_quirks(){
        remove_parameters --quirk-dpms-on \
              --quirk-dpms-suspend \
              --quirk-vbe-post \
              --quirk-vbe-post \
              --quirk-vga-mode3 \
              --quirk-vbemode-restore
      }
      
      case "$1" in
              suspend|hibernate) remove_quirks;;
      esac
      
    2. sudo chmod a+x /etc/pm/sleep.d/05_remove_annoying_quirks

    Here’s how you disable the quirks in HAL, which may or may not be a more elegant solution.

    1. lshal | less to see what HAL thinks of your system. You should see, close to the top, something like power_management.quirk.vbe_post = true, and similar for all the other above quirks.

    2. sudo pm-suspend --quirk-vbestate-restore --store-quirks-as-fdi, which writes a file in /etc/hal/fdi/information/99local-pm-utils-quirks.fdi, storing the quirks you just used. On my machine, that looks like this:

      <?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
      <!-- Created by pm-utils -->
      <deviceinfo version="0.2">
        <device>
          <match key="system.hardware.vendor" string="Micro-Star International">
            <match key="system.hardware.product" string="U110">
              <match key="system.firmware.version" string="AN012IMS Ver1.0E">
                <match key="system.hardware.primary_video.vendor" int="0x8086">
                  <match key="system.hardware.primary_video.product" int="0x8108">
                    <merge key="power_management.quirk.vbemode_restore" type="bool">true</merge>
                    <merge key="power_management.quirk.vbestate_restore" type="bool">true</merge>
                  </match>
                </match>
              </match>
            </match>
          </match>
        </device>
      </deviceinfo>
      
    3. See the <merge> lines? Add some more that match the other quirks, to turn them off.

      <?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
      <!-- Created by pm-utils -->
      <deviceinfo version="0.2">
        <device>
          <match key="system.hardware.vendor" string="Micro-Star International">
            <match key="system.hardware.product" string="U110">
              <match key="system.firmware.version" string="AN012IMS Ver1.0E">
                <match key="system.hardware.primary_video.vendor" int="0x8086">
                  <match key="system.hardware.primary_video.product" int="0x8108">
                    <merge key="power_management.quirk.vbe_post" type="bool">false</merge>
                    <merge key="power_management.quirk.dpms_suspend" type="bool">false</merge>
                    <merge key="power_management.quirk.dpms_on" type="bool">false</merge>
                    <merge key="power_management.quirk.vga_mode_3" type="bool">false</merge>
                    <merge key="power_management.quirk.vbemode_restore" type="bool">true</merge>
                    <merge key="power_management.quirk.vbestate_restore" type="bool">true</merge>
                  </match>
                </match>
              </match>
            </match>
          </match>
        </device>
      </deviceinfo>
      
    4. sudo restart hal and then lshal | less again. You should now see power_management.quirk.vbe_post = false, etc.

  6. I stuck with uswsusp because resume is a lot faster using it. To enable uswsusp in pm-utils (which is what gnome-power-manager uses), edit /etc/pm/config.d/00sleep_module and add SLEEP_MODULE="uswsusp".

  7. Sound is broken out of the box. The fix is documented on Linux Tipps:

    Sound does not always work without problems. In Karmic 9.10 you have to comment out

    #options snd-hda-intel power_save=10 power_save_controller=N
    

    in /etc/modprobe.d/alsa-base.conf.

    options snd-hda-intel position_fix=1 bdl_pos_adj=64
    

    instead helped me as well.

    I’ve been playing with enabling/disabling this option and haven’t seen any clear gains or losses, although I have had sound cut out after resume both ways.

  8. The machine can drive external monitors at 1024×768, 800×600, 640×480, and 720×480, which is about what you would expect from hardware like this.

  9. Like the man says, webcam works fine once you press Fn-F6.

  10. I’m finding that when I try to record audio, I get a massive amount of static and very little input volume. Still working on this one..

  11. Bluetooth seems to work out-of-the-box, but you have to Fn-F11 to toggle it on. (This seems to be a matter of some contention for some people, but on my machine Fn-F11 cycles through both Bluetooth and wireless off, to Bluetooth off and wireless on, to Bluetooth on and Wireless off, to both on, and then back. (00, 01, 10, 11.)

[I'll continue to update this as I discover things about this machine.]

Otherwise, the keyboard’s pretty good and the battery life seems pretty good (as you might expect from the big-ass 9-cell battery).

As far as I can tell, it’s not really possible to run the Ubuntu Lucid alpha on this hardware, and probably won’t be for a while, because Xorg 1.7 is incompatible with the closed-source psb driver. I wrote a post on the thread on Intel’s forum about Linux support for GMA500 summarizing the various-driver situation; it’s possible that in a month, when Lucid finally comes out, there’ll be a better driver situation, or that in six months, Intel will release a better driver of their own. Do people still reverse engineer graphics drivers? Would anyone be interested in doing so for a free U110 or two of their own?

Knowing the things that I know, I’d probably advise against this netbook for anyone hoping to run Linux on it. In today’s day and age, it just doesn’t make sense to buy open-source-unfriendly hardware, even for the sake of a 10-inch screen. Then again, it’s hard to know what hardware to support. The Dell Mini 10, for example, has an Intel NM10 Express graphics card: what does that even mean? Does it have support? Wikipedia has a comparison of netbooks page, but there’s no column for "Linux support", and in general comparing multi-dimensional things like hardware is a real challenge. Anyone have any tips?

[Update: I have been tinkering with the different quirks for suspend. Right now I'm using SLEEP_MODLE="kernel" and removing both quirks --quirk-vga-mode3 and --quirk-vga-mode-3 (one is specified by HAL, and another by the man page..). However, I still haven't solved the problem that periodically my machine will still just fail to suspend. My impression is that SLEEP_MODULE="uswsusp" takes about half the time to suspend and resume, but that it's more unstable, where the failure mode is failing to resume. I don't know what else to try so for now I'm leaving it alone.]

Comments are closed.