/meta-acpi

Yocto BSP layer for ACPI enabled boards

Primary LanguageBitBakeMIT LicenseMIT

This README file contains information on building the meta-acpi BSP
layer. Please see the corresponding sections below for details.

Dependencies
============

This layer depends on:

  URI: git://git.yoctoproject.org/poky.git
  branch: krogoth

  URI: git://git.yoctoproject.org/meta-intel
  branch: krogoth

Table of Contents
=================

  I. Overview
  II. Building the meta-acpi BSP layer
  III. ACPI tables
  IV. Sample ACPI tables

I. Overview
===========

This layer provides extended support for Intel ACPI enabled development
boards such as Minnowboard, Minnowboard MAX, Galileo and Joule.

The driving force here is that the BIOS shipped with these boards cannot
possibly support all possible devices you can connect them. For example
Minnowboard MAX has a low speed expansion connector providing access to
I2C, SPI and UART buses. It is up to the developer to connect additional
devices to the board.

This layer makes it possible to include ACPI tables with the image. Each
table contains description of one device connected to the board. The
kernel loads these tables during boot and is able to enumerate devices
included in those.

We include sample ACPI tables for each board that can be used as base
for the actual devices the developer wants to connect to these boards.

II. Building the meta-acpi BSP layer
===========================================

This layer builds on top of meta-intel (see dependencies above) so you
need to download it first.

Having done that, and assuming you extracted the BSP tarball contents at
the top-level of your yocto build tree, you can build an image by adding
the location of the meta-acpi layer to bblayers.conf, along with any
other layers needed (to access common metadata shared between BSPs)
e.g.:

  /path/to/poky/meta-intel \
  /path/to/poky/meta-acpi \

Currently supported boards include Galileo, Minnowboard, MinnowBoard
MAX, Minnowboard Turbot and Joule. You can pick the board including
default ACPI tables by setting MACHINE in local.conf either of:

  MACHINE = "galileo"
  MACHINE = "minnowboard"
  MACHINE = "minnowboard-max"
  MACHINE = "joule"

Depending on the board.

You should then be able to build an image as such:

  % source oe-init-build-env
  % bitbake core-image-base

At the end of a successful build, you should have a live image that you
can boot from a USB flash drive.

In order to write the image to the USB flash drive, you can do
something like this:

  % dd if=core-image-base-minnowboard.hddimg of=/dev/sdf bs=1M

You may need to run this as root using sudo but before doing that, make
sure you have the right device in place of /dev/sdf.

III. ACPI tables
================

The recipes-bsp/acpi-tables/samples/${MACHINE}/* includes sample ACPI
tables for each board. The default configuration enables some of those.
For example if you build for Minnowboard the
conf/machine/minnowboard.conf has following line by default:

  ACPI_TABLES ?= "buttons.asl leds.asl"

This asks acpi-tables package to include following sample ACPI tables:

  recipes-bsp/acpi-tables/samples/minnowboard/buttons.asl
  recipes-bsp/acpi-tables/samples/minnowboard/leds.asl

These effectively create two new devices: A GPIO Buttons input device
and a GPIO LEDS device. When you an image created with this
configuration, you should see that the on board LED0 starts blinking
approximately at human heartbeat rate. Also if you insert a SD-card, the
LED1 on the board blinks as long as there is some I/O happening.

You can use your own devices instead by overriding ACPI_TABLES in
your local.conf. For example we can add a custom device to our
Minnowboard like:

  ACPI_TABLES = "${TOPDIR}/acpi-tables/device.asl"

This includes only device.asl and nothing more. Leaving ACPI_TABLES
empty means no devices will be added.

When you make changes to the device.asl or edit the ACPI_TABLES variable,
in order for the changes to take effect, you need to clean and rebuild
core-image-base. Otherwise, the changes to acpi-tables are not copied
to the initramfs on the image.

  % bitbake -c clean core-image-base
  % bitbake core-image-base

When you are adding your own devices, it is important that you look at
the original ACPI tables of the board in question. Typically host
controllers, like SPI and I2C, might have different path from board to
board.

When you are adding you own devices remember that paths and devices
(host controller, like SPI and I2C) differ from board to board so it is
important that you look at the actual ACPI tables of the board in
question. For example here is one way you can dissasemble ACPI DSDT
table.

Run this on the target machine (acpidump is included with this meta
layer):

  # acpidump -o acpi.dump

Copy this file to your host (you can use SSH for example). Then on the
host you can run:

  % acpixtract acpi.dump
  % iasl -d dsdt.dat

The resulting dsdt.dsl contains ASL code of the DSDT table. By
inspecting this DSDT you should be able to figure out where to connect
your device.

IV. Sample ACPI tables
======================

Here is a description of the sample ACPI tables for each supported
board. You can use these directly by just specifying the filename in
ACPI_TABLES variable.

All these live under recipes-bsp/acpi-tables/samples directory.

Galileo
--------

Galileo has rather peculiar way of muxing pins. It uses several discrete
mux chips and GPIOs to control them. We provide gpiomux-*.asl files
which provide both names to GPIOs and pin muxing accordingly. User can
select which buses are muxed on the pins of the board.

  gpiomux.asl - Just adds names to GPIOs, no muxing is done.
  gpiomux-i2c.asl - Adds names to GPIOs and muxes out native I2C.
  gpiomux-spi.asl - Adds names to GPIOs and muxes out native SPI.
  gpiomux-uart0.asl - Adds names to GPIOs and muxes out UART0.
  gpiomux-all.asl - Adds names to GPIOs and muxes out native
                    I2C, SPI and UART0.
  spidev.asl - Adds raw access SPI test device to the SPI bus using the
               GPIO chip select.
  at25.asl - Adds Atmel AT25 compatible 1k EEPROM device connected to
             the GPIO chip select.

Note this uses some features (like GPIO hogging) not yet available in
the mainline kernel. We are working to get these upstreamed.

Minnowboard
-----------

  buttons.asl - Adds GPIO buttons device for all 4 buttons available
                on the board.
  leds.asl - Adds GPIO LEDs device for the two user programmable LEDs
             available on the board and connects heartbeat and mmc
             triggers to them.

Minnowboard MAX / Turbot
------------------------

  at25.asl - Adds Atmel AT25 compatible 1k EEPROM device connected to
             the first chip select on the SPI bus of the low speed
             connector.
  m25p80.asl - Adds M25P80 compatible SPI-NOR flash connected to the
               first chip select on the SPI bus of the low speed
               connector.
  spidev.asl - Adds raw access SPI test device to the first chip select
               on the SPI bus of the low speed connector.
  leds.asl - Adds GPIO LEDs device for the D2 LED available on
             Minnowboard Turbot.

Joule
-----

  am2315.asl - Adds Aosong AM2315 temperature and humidity sensor to the
               first I2C bus available on breakout #1 header.
  at25.asl - Adds Atmel AT25 compatible 1k EEPROM device to the first
             chip select on the SPI bus of breakout #1 header.
  buttons.asl - Adds GPIO buttons device for the button labeled "GP BTN"
                on the board.
  i2c1.asl - Configures the first I2C bus to use 100 kHz standard mode
             instead of the default 400 kHz.
  isl29125.asl - Adds Intersil isl29125 RGB color sensor to the second
                 I2C bus available on Intel Joule Gumstix Sensor board.
  leds.asl - Adds GPIO LEDs device for all 4 user programmable LEDs on
             the board. First and second LEDs have default triggers for
             hearbeat and mmc respectively.
  spidev0.asl - Adds raw access SPI test device to the first chip
                select on the SPI bus of breakout #1 header.
  spidev2.asl - Adds raw access SPI test device to the third chip
                select on the SPI bus of breakout #1 header.