Nathan Lewis

BeagleBoard xM at 1 GHz in Debian with Kernel 3.11-rc2

The SoC in the BeagleBoard xM is capable of running at 1 GHz, but up to this point this has only been possible with TI's branch of kernel 3.0. The current vendor kernel (based on kernel 3.2) limits the operating frequency to 800 MHz.

Kernel 3.11-rc2 introduces the ti-abb-regulator (adaptive body bias) driver for TI OMAP SoCs. This new driver, combined with the existing Smart Reflex Class 3 driver (available since kernel 3.6), enables dynamic core voltage adjustment — the missing piece for safe 1 GHz operation on the OMAP36xx/OMAP37xx CPUs found in the BeagleBoard xM.

My patchset enabling this driver in the device tree of the BeagleBoard xM, along with my port of the sprz319 erratum patch (fixing USB instability) has been merged into the v3.11.x branch of Robert C. Nelson's armv7-multiplatform repository (the kernel used for the community Debian and Ubuntu images).

Screenshot
BeagleBoard xM operating at 1 GHz on the Community Debian Image

Update (March 2014)

These patches are confirmed to still work with the new kernel 3.14.x series.

Build Instructions

To build the kernel with 1 GHz support, clone Robert C. Nelson's armv7-multiplatform repository:

git clone https://github.com/RobertCNelson/armv7-multiplatform.git
cd armv7-multiplatform
git checkout origin/v3.11.x -b v3.11.x

# Enable the sprz319 erratum patch to fix USB instability
sed -i 's/#omap_sprz319_erratum/omap_sprz319_erratum/g' patch.sh

# Build and Install Kernel
./build_kernel.sh
./tools/install_kernel.sh

Boot Configuration

In uEnv.txt, switch from classic boot to device tree boot

-uenvcmd=run boot_classic; run device_args; bootz 0x80300000 0x81600000:${initrd_size}
+uenvcmd=run boot_ftd; run device_args; bootz 0x80300000 0x81600000:${initrd_size} 0x815f0000

Add the following to the top of uEnv.txt to specify the device tree blob

fdtfile=omap3-beagle-xm.dtb

Implementation Details

For the very curious, the patchset consists of the following patches:

0001-Added-the-Texas-Instruments-OMAP-Clock-driver-origin.patch

The ti-abb-regulator driver requires device tree bindings, but OMAP3 clock references aren't currently available.

Adapt a driver from LKML to provide the necessary OMAP3 clock bindings.

0002-Add-the-clock-bindings-to-omap3.dtsi-that-were-made-.patch

Introduce a patch from LKML to add the sysclk and dpll1 clock bindings to the OMAP3 device tree definition.

0003-Use-cpu0-cpufreq-in-a-device-tree-supported-boot.-Th.patch

Introduce a patch from LKML to always initialize the cpufreq subsystem regardless of boot method.

0004-Now-this-one-is-mine-lol.-Reading-through-the-ti-abb.patch

Finally one I wrote for a change!

Add the operating points table and instantiate the ti-abb-regulator driver in the device tree.

0001-hack-omap-clockk-dpll5-apply-sprz319e-2.1-erratum-co.patch

Adapt the sprz319 erratum patch to kernel 3.11-rc2 to fix usb instability on OMAP36xx/37xx.