Setting up Debian (AMD 64 port) on the HP nx6125

History

Last updated: May, 2006.
macerl at telkomsa dot net

Introduction

The following is a brief description of what you need to do to get a working Debian (AMD 64 port) system on the HP nx6125. This page was written partly to document what I've done so far to set up my HP nx6125, so that I have something to reference should I need to do it again, and partly to help out other users who might find this information useful. I should add that I did not figure out all I describe below myself. I learned most of this from sources on the web and from the Debian newsgroups. (The Debian AMD 64 newsgroup is particularly active and people are keen to help. My thanks to all who helped out with my queries.) Further, I do not claim to be an expert on this machine. It is my first laptop and it has been a steep learning curve, so if there are any innaccuracies in what I've written below, then you can email me at: macerl at telkomsa dot net.

Installing Sarge/Etch

You will probably need to boot with vga=771 if you are using the Sarge (3.1) Debian installer, otherwise you won't see anything and the installer will hang. I haven't tried the more recent beta etch Debian installer, but if I were to do all this again, that would be my starting point (the old 2.6.8 kernel in Sarge doesn't enable DMA for your HD, resulting in a slow install -- be forewarned). You can get a copy of the latest Debian Installer at www.debian.org/devel/debian-installer. (UPDATE: Anthony Butler sent me a message with his experiences using this approach. You can find it here.)

Bearing in mind the bugs outlined below, you might also wish to boot with the option no_timer_check, but I didn't do this.

Kernel bugs affecting the HP nx6125

Description

At the time of writing (January 2006), there are two kernel bugs that affect the HP nx6125. The first is the annoying double timer interrupt bug (kernel bug #3927), which can be worked around easily. The second is a much more serious ACPI bug (kernel bug #5534), which causes erratic fan behaviour and consequent overheating of the CPU. The cumulative effects of overheating can be shorten the life of your electronics, so be vigilant of your fan usage.

The ACPI bug (#5534) results in erratic (read almost no) processing of thermal events/notifications. These notifications tell the system to turn on/off a fan in response to a thermal trip point being crossed. Unfortunately, for reasons which no-one currently understands, these thermal events are not being processed. However, you can coerce the kernel into processing them by issuing either a

$ cat /proc/acpi/thermal_zone/TZ?/temperature

or an

$ acpi -t

For a more detailed description of this behaviour see the discussion and links at bugzilla.kernel.org (bug #5534). There is one further thing I'd like to add. The source of the double timer problem has a further effect which you will notice. Initially, i.e., without the workaround I describe below, all your thermal trip points will be set to 16 degrees Celsius. This will make your fans blow at full speed. If you have acpid installed your CPU frequency will scale to a glacially slow 800MHz. (So avoid installing acpid until you do the workaround for #3927 I describe below.)

Workarounds

The workaround for bug #3927 is to use the boot parameter disable_timer_pin_1 if you are using anything as recent as kernel 2.6.14 (and more recent kernels). If you are using an older kernel then you could try the boot parameter no_timer_check. I've used both, but I find fewer bootup warnings/errors with disable_timer_pin_1, which is the option I prefer. When you boot with either of these parameters your fans should stop blowing as hard and at the same time, your thermal trip points for TZ1 (and TZ2, TZ3) will be correctly set to 58 C, 65C, etc. A cat /proc/acpi/thermal_zone/TZ1/trip_points should give you output which looks something like this

critical (S5):           95 C
passive:                 88 C: tc1=1 tc2=2 tsp=100 devices=0xffff810037fc8dc0
active[0]:               80 C: devices=0xffff810037f93f00
active[1]:               75 C: devices=0xffff810037f93dc0
active[2]:               65 C: devices=0xffff810037f93cc0
active[3]:               58 C: devices=0xffff810037f93bc0

UPDATE: bug #3927 is fixed in kernel 2.6.16-rc5. I have verified that this kernel does not exhibit the double timer problem on the HP nx6125.

UPDATE: bug #5534 is now (May 2006) fixed.There are two patches available. One by Peter Wainwright who single-handedly tracked down the source of this bug to a single threaded kacpid (the DSDT in the HP nx6125 assumes a multi-threaded kacpid). The other patch is by Alexey Starikovskiy, which i am currently using (see comment #112 at http://bugzilla.kernel.org/show_bug.cgi?id=5534).

Setting up X.org

ATI X300 graphics adapter

X.Org 6.8 and 6.9

To get X working with your ATI graphics adapter you need to use the radeon driver and have a section like this in your /etc/X11/xorg.conf.

Section "Device"
        Identifier      "Generic Video Card"
        Driver          "radeon"
        Chipset         "ATI Radeon Mobility M300 (M22) 5460 (PCIE)"
        Option          "no_accel"              "no"
#        Option         "MonitorLayout"         "LVDS,CRT"
        BusID           "PCI:1:5:0"
EndSection

The lines coloured red are important if you are using X.org 6.8. X.org 6.8 fails to detect the correct chipset for the ATI X300, so you need to override this with the chipset line. Also, the next line is important (thanks to some wiki, which is unfortunately not available anymore). For those interested, here is my complete /etc/X11/xorg.conf

UPDATE: As of X.org 6.9 you no longer need the lines coloured red in the above xorg.conf stanza. The ATI adapter is correctly recognised and configured in X.org 6.9.

Using ATI's fglrx

You could also download the proprietary accelerated driver fglrx from ATI and install that. I have succeeded in installing version 8.22.5 on kernel version 2.6.15.1 and X.org 6.9. I followed method 2 listed here. The accelerated ATI driver seems to work reasonably well. Most importantly for me, it drove a second monitor attached to my external VGA port "out of the box". I could not get this to work using the X.org radeon driver no matter how much I tweaked. One disadvantage of using fglrx is that the LCD brightness control keys don't function using the fglrx driver and I could not get fglrx to work (with 3D acceleration) using kernel 2.6.16-rc3.

Synaptics touchpad

Here's the relevant Section for my /etc/X11/xorg.conf.

Section "InputDevice"
        Identifier      "Synaptics Touchpad"
        Driver          "synaptics"
       # Option          "SendCoreEvents"        "true"
       Option           "AlwaysCore"
        #Option          "Device"                "/dev/psaux"
        Option          "Device"                "/dev/input/mouse0"
        Option          "Protocol"              "auto-dev"
        # added from web gentoo wiki
        Option  "LeftEdge"      "1700"
        Option  "RightEdge"     "5300"
        Option  "TopEdge"       "1700"
        Option  "BottomEdge"    "4200"
        Option  "FingerLow"     "25"
        Option  "FingerHigh"    "30"
        Option  "MaxTapTime"    "0"     #"180"
        Option  "MaxTapMove"    "220"
        Option  "VertScrollDelta" "100"
        Option  "MinSpeed"      "0.09"
        Option  "MaxSpeed"      "0.18"
        Option  "AccelFactor"   "0.0015"
        Option  "SHMConfig"     "on"
EndSection

One additional comment is worthwhile. After upgrading to a 2.6.14 series kernel I needed to explicitly load the evdev module in order for my touchpad to work correctly. To do this just issue an

# modprobe evdev

and to permanently set it that way add evdev to your /etc/modules.

Upgrade your kernel

If you installed with the Sarge 3.1 Debian Installer then you have an archaic 2.6.8 kernel installed. You will need to upgrade this as soon as possible to enable DMA on your hard drive, and to ensure that other devices work properly. I'm currently using the vanilla kernel 2.6.15 from www.kernel.org. My .config, which is a modified Debian 2.6.12 .config, can be found here.

Setting up wireless ethernet

ndiswrapper

Anthony Butler (anthony at butler dot co dot nz) kindly sent me detailed instructions on how to get ndiswrapper working with the Broadcom ethernet adapter. You can find them here.

DriverLoader

I had no success with ndiswrapper and the 64 bit Broadcom drivers from Acer's site. However, after a tip from the Debian AMD64 newsgroup, I was pointed towards Linuxant's WLAN DriverLoader. I have had much success with DriverLoader, but unfortunately, after the 30 day trial period is up, you will have to pay US$ 20.

You will need to download and install DriverLoader from www.linuxant.com. I downloaded the tarball and installed from source (METHOD C at the link below). Took all of five minutes. You can find detailed instructions on how to install DriverLoader at www.linuxant.com/driverloader/wlan/install.php. You will also need to download/apply for a trial license from Linuxant at www.linuxant.com/store/. (Remember this step. The lack of it caused me much frustration.) Without a trial license you will be able to see your access point, but be unable to connect to it. Finally, you will need the 64bit Win XP drivers from here. I have contacted HP about the availability of 64 bit Win XP drivers for the Broadcom on the HP nx6125 and the message I received was "no plans to develop them yet" (go figure!).

If you only need to connect to open wireless networks and are content to manually bring the interface up when needed, then you can simply add a stanza like the following to your /etc/network/interfaces (assuming you're using DHCP to get an IP address)

iface eth1 inet dhcp
  wireless-mode Managed
  wireless-essid ANY

which will connect to any available wireless network when you bring the interface up with

# ifup eth1

If you want the interface to be brought up automatically, and would like something a little more sophisticated then read the next subsections.

Installing ifplugd and WPA supplicant

ifplugd

Issue an

# apt-get install ifplugd

During installation you will be prompted for devices to monitor for automatic configuration. Using DriverLoader, my wireless interface is eth1. So to enable your wireless interface for automatic configuration just enter eth1 when asked for devices to monitor. Here is my /etc/default/ifplugd

# This file is sourced by both the init script /etc/init.d/ifplugd and
# the hotplug script /etc/hotplug.d/net/ifplugd.hotplug to give default
# values. The init script starts ifplugd for all interfaces listed in
# INTERFACES, and the hotplug script starts ifplugd for all interfaces
# listed in HOTPLUG_INTERFACES. The special value all starts one
# ifplugd for all interfaces being present.
INTERFACES="eth1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

for reference. You could, of course, add eth0 as well, to automatically configure your wired ethernet interface whenever a cable is attached.

Finally, you'll need to add the following line to your /etc/network/interfaces

# wireless network interface (using ifplugd and wpa_supplicant)
iface eth1 inet dhcp

Do not put auto eth1 in your /etc/network/interfaces. Ifplugd will take care of bringing up your eth1 interface whenever it detects an access point in your vicinity.

WPA supplicant

Issue an

# apt-get install wpasupplicant

Pre version 0.4.8-4

You must manually configure wpa_supplicant. I have a /etc/wpa_supplicant.conf of the following form

# Minimal /etc/wpa_supplicant.conf to associate with open
#  access points. Please see
#  /usr/share/doc/wpasupplicant/wpa_supplicant.conf.gz for more complete
#  configuration parameters.

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0

eapol_version=1
ap_scan=1
fast_reauth=1

### Associate with any open access point
###  Scans/ESSID changes can be done with wpa_cli
network={
        ssid=""
        key_mgmt=NONE
}

### Home network
network={
        ssid="the-name-of-my-home-network"
        key_mgmt=WPA-PSK
        psk="mycleverpassphrase"
}

The first network={..} block will associate with any open wireless network. The second is customised to my home network. Add networks as appropriate. You can give each network a search priority also (RTFM).

If all went well your wireless ethernet adapter should be configured automatically whenever ifplugd senses an access point. This auto-configuration will be completely transparent to you. I use an open network at work and a WPA encrypted network at home.

Version 0.4.8-4

To get the new version working I did the following (I'm using Linuxant's driverloader so I need to use the hostap driver):

  1. I followed the instructions in /usr/share/doc/wpasupplicant and copied the file /usr/share/doc/wpasupplicant/examples/wpacli-action-dhclient to /etc/wpa_supplicant/dhclient
  2. Moved my /etc/wpa_supplicant.conf to /etc/wpa_supplicant/wpa_supplicant.conf.local
  3. Purged the ifplugd package.
  4. Edited /etc/network/interfaces so that my eth2 stanza looked like:
    allow-hotplug eth2
    iface eth2 inet manual
            wpa-driver hostap
            wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf.local
            wpa-action /etc/wpa_supplicant/dhclient
    
After those changes and a quick restart, everything seemed to work. My /etc/wpa_supplicant/wpa_supplicant.conf.local is virtually identical to the /etc/wpasupplicant.conf shown above.

Firewire

Nothing to configure; it works out of the box. I installed kino and now I can control my Sony digital video camera and download the DV files directly to my laptop.

Bluetooth

When I get a Bluetooth device I'll let you know ;-)