FreeBSD on the Toshiba Satellite M40-SF3

This article describes my experiences running FreeBSD on a Toshiba Satellite M40-SF3 laptop, model number PSM40C-SF300E. It provides supplemental information to the M40 entry in The FreeBSD Laptop Compatibility List.

The Toshiba Satellite line contains a wide variety of models, with similar model numbers often having quite different hardware configurations. This model dates from mid to late 2005; hardware configuration is:

The machine has ran with full installations of FreeBSD releases 5.4, 6.0, 6.1, and 6.2, and is currently running FreeBSD 6.2. Most of the notes below apply to 6.2, which was the most recent full release when these notes were written. FreeBSD-7.0-CURRENT snapshots have been tested occasionally to monitor hardware support; as of this writing, 7.0 had not yet been released.

Most things work; some hardware is unsupported, and support for other hardware has improved from earlier releases. Following are additional notes for things that either do not work, or require some additional tweaking to work properly.

Ethernet

The Marvell Yukon II 88E8036 10/100 wired ethernet controller is not supported by any FreeBSD release up to 6.2. There is a binary driver available from Marvell, in the form of a package. It can be installed by pkg_add, and installs two files:

/boot/kernel/if_myk.ko
/usr/share/man/man4/myk.4.gz

Move if_myk.ko to /boot/modules/, or it will be lost next time you build a new kernel. Enable the driver by adding

if_myk_load="YES"               # Marvell Yukon/Yukon II Ethernet

to /boot/loader.conf.local. A few months after 6.2 was released, a native FreeBSD driver, msk(4), was added to 6-STABLE and 7-CURRENT. This driver supports the Yukon II chipset, and eliminates the need for the Marvell binary driver package.

Wireless

The Intel Pro/Wireless 2915ABG wireless adapter was not supported at all in FreeBSD 5. Beginning with FreeBSD 6.0, the iwi(4) driver supports the 2915ABG adapter. However, the driver requires firmware to be downloaded to the adapter in order to function. FreeBSD 6.0, 6.1, and 6.2 all required a port to be installed to obtain the required firmware; the port name varied with each release. For FreeBSD 6.2, install the net/iwi-firmware-kmod port, and add the following lines to /boot/loader.conf.local:

if_iwi_load="YES"
firmware_load="YES"

This process was simplified shortly after the release of FreeBSD 6.2; the firmware was added to the base system, and requires no extra port, only a few lines in /boot/loader.conf.local:

if_iwi_load="YES"
iwi_bss_load="YES"
legal.intel_iwi.license_ack=1

Note that installing from a 6.2 release CD (or earlier) will not provide a working network interface, wired or wireless. It is necessary to retrieve either the Marvell package or the iwi-firmware-kmod port distfiles from another machine, and bring them to the M40. USB flash drives or external drives can be used for this.

Audio

The Realtek AD1981B controller works; use

snd_ich_load="YES"              # Intel ICH

in /boot/loader.conf.local.

External USB speakers will also work; use

snd_uaudio_load="YES"           # USB audio

in /boot/loader.conf.local. Internal audio seems to have priority if both are loaded; I am not sure how to have the system automatically switch between the two.

CardBus / PCMCIA

The CardBus controller is a Texas Instruments PCIxx21/x515 Cardbus Controller, according to WinXP; PCI vendor/device id is 0x104c/0x8031. It should work, but doesn't.

The device is recognized by FreeBSD as device cbb0, but doesn't work. A number of different error messages occur in various FreeBSD versions. FreeBSD 6 versions often produced bad Vcc request errors; 7-CURRENT has Could not map register memory errors.

ACPI

ACPI support has improved, but doesn't completely work yet. Prior to 6.2 the loader default was to not enable ACPI, suggesting that this ACPI BIOS had known problems. 6.2, defaulted to enabling ACPI; however, if you tried to boot with ACPI enabled, the hard disk was not recognized.

A few months after 6.2 came out there was an upgrade to the ACPI code in FreeBSD which improved ACPI support on this machine, as tested with 7-CURRENT snapshots. With ACPI on, the system seems to boot fine, devices are recognized, and the system runs. There are still bugs, however: when the system is halted, in either power-down or halt mode, the system freezes at the point where it should either power-off or halt; the power button doesn't work, and the battery must be removed to shut the machine off. Booting with verbose logging in 7-CURRENT shows an error message:

acpi: bad write to port 0x080 (32), val 0x55
Powering system off using ACPI

Shutting down with reboot works.

My ACPI debugging page contains links to verbose dmesg output, and ACPI DSDT files.

IEEE 1394 Firewire

Untested - I have no firewire peripherals. Everything seems to be recognized at boot time, so it should work as well as firewire support on any other machine.

6 in 1 Flash Card Reader

Unrecognized. This seems to be two devices:

I have not been able to find a FreeBSD driver for this, nor do I know where such a driver would fit into the FreeBSD mass storage framework.

X Windows

The version of X.org in FreeBSD 6.2 (and most earlier FreeBSD 6 releases) is 6.9.0; this version will work, but a few tweaks are required to xorg.conf(5) in order to get the native 1280x800 mode of the TFT display to work.

The Synaptics Touchpad is detected as a PS/2 mouse, and works fine in X.org. Let sysinstall set it up as a normal PS/2 mouse. It is possibly to use the touchpad and a USB mouse at the same time; no special configuration is required. To enable or disable the touchpad, you must boot into WinXP; no FreeBSD changes are required when you do this.

The display adapter is a PCI Express 16x NVIDIA GeForce Go 6600 with 128MB of dedicated DDR memory. It is detected by the standard X.org drivers; in FreeBSD 6.2 I normally use xorgcfg to set up an initial xorg.conf(5) file. You can see the changes I made in my 6.9.0 xorg.conf file, compared to the default 6.9.0 xorg.conf file.

The important changes are in the Monitor section, since X.org 6.9.0 does not handle the native 1280x800 mode of the 15.4" TFT LCD display.

Following the 6.2 release, the version of X.org in the FreeBSD ports tree was upgraded to X.Org 7. Preliminary testing with Xorg 7.3 on 7-CURRENT indicates that some of the above manual tweaks are no longer necessary.

Notes

I don't run Linux on any of my machines, but since Linux sometimes supports hardware before FreeBSD does, I have done a bit of testing with several live CD versions of Linux. The most recent, Ubuntu/Kubuntu 7.10, seems to have support for most of the above hardware exceptions.