GPD MicroPC (v2)


1. Hardware


2. Support overview

Component

Status

Details

Graphics

Graphical sessions

(./)

Using drm-kmod port. By default, the screen will display everything rotated 90 degrees to the left, but the multifix patch: multifix-13.3-RELEASE.diff will properly rotate the vt(4) console and bootloader upright. See below for instructions. You'll also want to rotate the display in X. See 20-monitor.conf

Backlight (brightness) control

(./)

Using acpi_video

Input devices

Keyboard backlight

(./)

No OS support needed

Touchpad

(./)

Works properly. Two finger scrolling for some reason doesn't work well, so see middle-button scrolling configuration in notes and 30-touchpad.conf.

Touch screen

-

Trackpoint

-

Media keys

Brightness keys

(./)

Using acpi_hidd port.

Volume keys

(./)

Network

Ethernet

(./)

Wi-Fi

(./)

Other

Battery

{i}

The battery works correctly but GPD omitted a charge limiter, and there was concern that if it were left on the charger, battery lifetime might be short. Having used this device extensively for more than two years with no degradation, this does not seem to be a problem.

Bluetooth

(./)

Worked properly, but only with a specific firmware loaded. See the notes below for details.

CD/DVD drive

-

ExpressCard reader

-

Fan

(./)

There's a switch to turn off the fan and use passive cooling, but support for passive cooling on multiprocessors is broken in 13.3 so it will overheat and shut down if you use it. The multifix patch will solve the problem; passive cooling works well and when the fan is turned off, the computer will be slower but much quieter.

Fingerprint reader

-

PC card reader

-

SD card reader

(./)

SIM card slot

-

Smart card reader

-

Suspend & resume

(./)

Suspending X now works perfectly. It requires the use of the default modesetting driver with the drm-510-kmod port's kernel module. See the notes for details.

Webcam

-

Ports

DisplayPort

-

FireWire

-

HDMI

(./)

Serial

(./)

Thunderbolt

-

USB

(./)

VGA

-

Sound

Headphone jack

(./)

Stereo output, set hw.snd.default_unit=0

Microphone jack

(./)

Set hw.snd.default_unit=0 for the jack, 1 for the case microphone. The case microphone will pick up the cooling fan noise very effectively if the fan is running.

Speakers

(./)

There's just one speaker! Set hw.snd.default_unit=1. There are grills under the case for two but only one gets put in. There is another output to the HDMI port for unit 3, so you can use this to watch movies.

Last update: 2024-04-23T03:16:10+0000

Legend

(./) OK

{i} Somewhat OK: requires additional tweaking or works worse than expected

- Not present

3. Notes

There are several things that need to be configured to make this machine work well. In an attempt to make the configuration process easier, I will list the most important and easy things first.

3.1. ACPI notifications fail

The ACPI functions that go through the EC controller will not work at all on a new installation. This is serious, because they include the power button, the lid switch, the brightness keys, thermal events, and other notifications. The problem is that the particular EC controller on this machine only works in burst mode, and that's off by default in FreeBSD. So put this into /boot/loader.conf:

debug.acpi.ec.burst=1

3.2. Suspending while using X

In the past, the X server would frequently crash while resuming with 'Caught signal 6 (Abort trap)' in unw_step.

The problem was solved with the drm-510-kmod driver from the ports collection - use the modesetting driver.

The modesetting driver will be used by default if the Intel video driver is not installed. If it is installed, delete it ("pkg delete xf86-video-intel").

Alternatively, you can explicitly configure it in /usr/local/etc/X11/xorg.conf.d: 10-modesetting.conf

Section "Device"
  Identifier    "ModeSetting"
  Driver        "modesetting"
EndSection

You might also disable vt(4) switching on suspend in /etc/sysctl.conf; it's not necessary and suspend/resume will be faster without it:

kern.vt.suspendswitch=0         # Not needed

3.3. Time after resume

If you suspend and resume the computer you may find the time becomes incorrect, usually by a few minutes to a few hours. This is a bug in FreeBSD 13.3, and only occurs if you are running ntpd.

The multifix patch will correct the problem. Ntpd will, for unrelated reasons, need to be restarted after each resume. In 13.3 this is now handled by the default system configuration in /etc/rc.d/ntpd.

3.4. Disable unused hardware

There's an mmc attached to sdhci_pci0, but nothing's attached to it and it will hang on resumes and sometimes on startup. So disable it by putting this into /boot/device.hints:

hint.sdhci_pci.0.disabled="1"

3.5. Serial (RS-232) Port

There are five UARTs on the computer, but only one is supplied with a DB-9. To avoid confusion, you might want to disable the others by adding this to /boot/device.hints:

hint.uart.2.disabled="1"
hint.uart.3.disabled="1"
hint.uart.4.disabled="1"
hint.uart.5.disabled="1"

3.6. Bluetooth

You will need to download the correct firmware for the bluetooth controller from:

This is not the firmware included in the iwmbt-firmware-20210315 port. Don't install the port, but download the linked firmware from the linux-firmware repository link and place it in this directory (create it if necessary):

 /usr/local/share/iwmbt-firmware

Then power down the computer, and reboot.

On my GPD MicroPC running FreeBSD 13.3-RELEASE, a bluetooth keyboard, mouse, and speakers are currently working quite well.

3.7. Brightness control keys

The screen brightness control keys will require the acpi_hidd driver, available eventually from the ports and right now from

3.8. Other missing keys

There's no Scroll Lock key on the GPD MicroPC's keyboard. If you need it, or another missing key, take your favorite keymap file from /usr/share/vt/keymaps, add the missing key, (for example the following will make Alt-Esc act as the Scroll Lock key):

001   esc    esc    esc    esc    slock  esc    debug  esc     O

and run

kbdcontrol -l <keymap_file>

3.9. Touchpad

Install 30-touchpad.conf into /usr/local/etc /X11/xorg.conf.d to enable using the middle mouse button as a scroll wheel modifier for the touchpad.

3.10. Automatic rotation of console

To rotate the vt(4) console to the proper orientation, install the multifix patch: multifix-13.3-RELEASE.diff. It elaborates upon work by Stefan Grundmann and published to the freebsd-hackers@freebsd.org list.

NOTE: The multifix patch is not just for the GPD MicroPC. It provides automatic or manual rotation of the FreeBSD vt(4) console and loader screen between portrait and landscape modes, improved thermal management, and a few fixes to the /boot/loader lua menus. The automatic rotation detection uses work done by Hans de Goede, and examines both the SMBIOS VBT and quirk tables.

Before installing the multifix patch, update the drm-510-kmod port by adding the four files from this shar archive to the port's files directory:

Then build and re-install the port.

The easiest way to install the multifix patch is to:

Upon a reboot, the system will automatically determine and correct the orientation of the screen when i915kms is loaded. Read the manual page for loader.conf for more information.

Rotating the screen after X has been started is easier. You can use xrandr(1) or place this configuration file into /usr/local/etc /X11/xorg.conf.d: 20-monitor.conf

3.11. Passive Cooling

On FreeBSD 13.3, passive cooling only adjusts the frequency of cpu0. This works fine if all the other cpus follow cpu0, but on the Celeron N4120 they're independent. So you cannot run the GPD MicroPC hard with the fans off, or it will overheat and shut down.

The multifix patch will solve the problem, but there is a little configuration needed as well.

First add this to /etc/sysctl.conf:

hw.acpi.thermal.user_override=1

to enable changes to the thermal thresholds (because GPD set the defaults badly).

Enable powerd and set the thermal thresholds by placing

powerd_enable="YES"
performance_cx_lowest="Cmax"    # Online CPU idle state
performance_tz0_CR3="94C"       # Online critical standby (S3) threshold
economy_tz0_CR3="94C"           # Offline critical standby (S3) threshold
performance_tz0_PSV="90C"       # Online passive cooling threshold

in /etc/rc.conf.

With this configuration your machine will not overheat during intense activity with the fan switched off, but will instead run more slowly as it gets warm. If it somehow does get too warm, it will enter S3 (suspend to memory) to cool.

Although not necessary on the GPD MicroPC, in general these parameters can be adjusted to keep the fans off or low when A/C power is off, while preferring active cooling when it is on.

It would probably be best to manage the battery's thermal stress by reserving passive cooling for modest activities, where it is much quieter and works well.

3.12. BIOS passwords

Even if you set an administrative password, the BIOS will let you enter a null password and provide access (in user mode) to the BIOS settings. User mode is quite permissive - you can set things like the SSD password within it. If you set the user password the settings are protected by the user password, but you have to enter it every time to boot the computer.

3.13. ASL errors

There are a couple of bugs in the BIOS that will cause error messages during startup but which are harmless.

The first bug involves an obscure syntax used to denote fixed I/O ranges, and since it's wrong the FreeBSD kernel complains. It's boilerplate from AMI, is present in a lot of AMI BIOSs, and is probably for ISA. The kernel complains and ignores the range, and there don't appear to be bug reports resulting from this. It's likely the only problem it causes is the kernel error message.

The second bug is a genuine error, but it does not prevent anything in the ACPI system from working. The EC controller registers are not supposed to be accessed until it's initialized. Once it's initialized, ECAV should be set to say it's active. Only then should the registers be used. For some reason GPD decided to just set ECAV true before initialization, so the initial check for battery status tries to access an uninitialized register and errors are generated. The patch will cause the ACPI system to skip the first check, but even without it the ACPI system will try again after the EC controller is ready.

There's also a harmless syntax error that Microsoft's asl compiler ignores but the Intel/FreeBSD compiler flags as an error.

If you want to fix these, download this patch: acpi.asl.diff

Decompile and save the asl file from your computer using

acpidump -dt > acpi.asl

Apply the patch, recompile it with iasl, put the compiled AML in /boot/acpi.aml, and add the following lines to /boot/loader.conf:

acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/acpi.aml"

When you reboot the errors should be gone. If you somehow manage to mess it up enough to make it hard to boot your machine, boot from a memory stick and remove the acpi.aml file from /boot, or use a bootenv you set up earlier.

3.14. Additional Resources

There's a very nice page, "Installing Debian on the GPD MicroPC", at

which has a number of generally helpful tips about setting up the machine. In particular see

which has a nice section at the bottom regarding the setup of X windows on the GPD MicroPC.


4. Files

  • [get | view] (2022-08-28T04:37:13+0000, 0.1 KB) [[attachment:10-modesetting.conf]]
  • [get | view] (2022-06-23T18:08:56+0000, 0.2 KB) [[attachment:20-monitor.conf]]
  • [get | view] (2022-06-23T18:08:12+0000, 0.2 KB) [[attachment:30-touchpad.conf]]
  • [get | view] (2022-06-22T08:27:15+0000, 1.4 KB) [[attachment:acpi.asl.diff]]
  • [get | view] (2024-04-24T03:43:00+0000, 5.8 KB) [[attachment:files_drm_510_kmod.shar]]
  • [get | view] (2024-04-24T03:43:00+0000, 19.2 KB) [[attachment:loader_rotate-13.3-RELEASE.diff]]
  • [get | view] (2024-04-24T03:43:00+0000, 0.6 KB) [[attachment:lua_commentparse-13.3-RELEASE.diff]]
  • [get | view] (2024-04-24T03:43:00+0000, 41.1 KB) [[attachment:multifix-13.3-RELEASE.diff]]
  • [get | view] (2024-04-24T03:43:00+0000, 0.6 KB) [[attachment:ntp-13.3-RELEASE.diff]]
  • [get | view] (2024-04-24T03:43:01+0000, 10.8 KB) [[attachment:thermal_management-13.3-RELEASE.diff]]
  • [get | view] (2024-04-24T03:43:01+0000, 2.9 KB) [[attachment:usb_hid_setprotocol-13.3-RELEASE.diff]]
  • [get | view] (2024-04-24T03:43:01+0000, 7.2 KB) [[attachment:vt_rotate-13.3-RELEASE.diff]]
 All files | Selected Files: delete move to page copy to page


CategoryLaptop

Laptops/GPD_MicroPC (last edited 2024-04-24T04:39:44+0000 by CyrusRahman)