# Copyright (C) 2018 EETS GmbH - http://www.eets.ch/
#
# SPDX-License-Identifier: GPL-2.0+
#

Summary
=======

This document covers the PDU001 target.

Hardware
========

The PDU-001 (Processor and Display Unit) is a plugin card for 19" racks. It is
manufactured by EETS GmbH (https://www.eets.ch). The core of the board is a m2
SOM from bytes at work (https://www.bytesatwork.ch) which in turn is based on
AM3352 SOC from TI (https://www.ti.com).

Customization
=============

As usual the console serial interface is set by CONFIG_CONS_INDEX. Best choice
is 4 here since UART3 is wired to the connector K2.
The Run LED on the PDU-001 can be turned on red by setting CONFIG_RUN_LED_RED
or green by setting CONFIG_RUN_LED_GREEN. Setting CONFIG_RUN_LED_OFF will turn
off the Run LED.

Booting
=======

The system boots from either eMMC or SD card cage. It will first try to boot
from the SD card cage. If this fails (missing or unbootable SD card) it will
try to boot from the internal eMMC. The root file system is always expected to
be located in the second partition of the device (eMMC or SD card) that pro-
vided the boot loader.
