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.
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.
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.
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.
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 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.
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.
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.
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.
DisplaySize 331 208 # mm
HorizSync 31.5 - 90
VertRefresh 60 - 60
(
gtf 1280 800 60
gtf
is part of X.org) to get
ModeLine "1280x800" 83.46 1280 1344 1480 1680 800 801 804 828
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.
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.