Skip to content

Commit

Permalink
Documentation: Add cavium SoC and mainboard
Browse files Browse the repository at this point in the history
* Add documentation for CN81XX SoC
* Add documentation for CN81XX EVB SFF mainboard
* Add documentation for BDK
* Add documentation for BOOTROM and BOOTBLOCK behaviour
* Alphabetically sort vendors

Change-Id: Ibfcd42788e31f684baed658dc3c4dfe1b8e4f354
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/27150
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: David Hendricks <david.hendricks@gmail.com>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
  • Loading branch information
PatrickRudolph authored and zaolin committed Jun 19, 2018
1 parent a45e9f8 commit 8c986ab
Show file tree
Hide file tree
Showing 12 changed files with 275 additions and 2 deletions.
1 change: 1 addition & 0 deletions Documentation/index.md
Expand Up @@ -18,4 +18,5 @@ Contents:
* [System on Chip-specific documentation](soc/index.md)
* [Mainboard-specific documentation](mainboard/index.md)
* [SuperIO-specific documentation](superio/index.md)
* [Vendorcode-specific documentation](vendorcode/index.md)
* [Release notes for past releases](releases/index.md)
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
76 changes: 76 additions & 0 deletions Documentation/mainboard/cavium/cn8100_sff_evb.md
@@ -0,0 +1,76 @@
# CN81xx Evaluation-board SFF

## Specs

* 3 mini PCIe slots
* 4 SATA ports
* one USB3.0 A connector
* 20Pin JTAG
* 4 Gigabit Ethernet
* 2 SFP+ connectors
* PCIe x4 slot
* UART over USB
* eMMC Flash or MicroSD card slot for on-board storage
* 1 Slot with DDR-4 memory with ECC support
* SPI flash
* MMC and uSD-card

## Flashing coreboot

```eval_rst
+---------------------+----------------+
| Type | Value |
+=====================+================+
| Socketed flash | no |
+---------------------+----------------+
| Model | Micron 25Q128A |
+---------------------+----------------+
| Size | 8 MiB |
+---------------------+----------------+
| In circuit flashing | no |
+---------------------+----------------+
| Package | SOIC-8 |
+---------------------+----------------+
| Write protection | No |
+---------------------+----------------+
| Dual BIOS feature | No |
+---------------------+----------------+
| Internal flashing | ? |
+---------------------+----------------+
```

## Notes about the hardware

1. Cavium connected *GPIO10* to a global reset line.
It's unclear which chips are connected, but at least the PHY and SATA chips
are connected.

2. The 4 QLMs can be configured using DIP switches (SW1). That means only a
subset of of the available connectors is working at time.

3. The boot source can be configure using DIP switches (SW1).

4. The core and system clock frequency can be configured using DIP switches
(SW3 / SW2).

5. The JTAG follows Cavium's own protocol. Support for it is missing in
OpenOCD. You have to use ARMs official hardware and software.

## Technology

```eval_rst
+---------------+----------------------------------------+
| SoC | :doc:`../../soc/cavium/cn81xx/index` |
+---------------+----------------------------------------+
| CPU | Cavium ARMv8-Quadcore `CN81XX`_ |
+---------------+----------------------------------------+
.. _CN81XX: https://www.cavium.com/product-octeon-tx-cn80xx-81xx.html
```

## Picture

![][cn81xx_board]

[cn81xx_board]: cavium_cn81xx_sff_evb.jpg
8 changes: 6 additions & 2 deletions Documentation/mainboard/index.md
Expand Up @@ -2,10 +2,14 @@

This section contains documentation about coreboot on specific mainboards.

## SiFive
## Cavium

- [SiFive HiFive Unleashed](sifive/hifive-unleashed.md)
- [CN81XX EVB SFF](cavium/cn8100_sff_evb.md)

## HP

- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)

## SiFive

- [SiFive HiFive Unleashed](sifive/hifive-unleashed.md)
19 changes: 19 additions & 0 deletions Documentation/soc/cavium/bootflow.md
@@ -0,0 +1,19 @@
# Cavium bootflow

The on-chip **BOOTROM** first sets up the L2 cache and the SPI controller.
It then reads **CSIB_NBL1FW** and **CLIB_NBL1FW** configuration data to get
the position of the bootstage in flash. It then loads 192KiB from flash into
L2 cache to a fixed address. The boot mode is called "Non-Secure-Boot" as
the signature of the bootstage isn't verified.
The **BOOTROM** can do AES decryption for obfuscation or verify the signature
of the bootstage. Both features aren't used and won't be described any further.

* The typical position of bootstage in flash is at address **0x20000**.
* The entry point in physical DRAM is at address **0x100000**.

## Layout

![Bootflow of Cavium CN8xxx SoCs][cavium_bootflow]

[cavium_bootflow]: cavium_bootflow.png

Binary file added Documentation/soc/cavium/cavium_bootflow.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
119 changes: 119 additions & 0 deletions Documentation/soc/cavium/cn81xx/index.md
@@ -0,0 +1,119 @@
# Cavium CN81xx documentation

## Reference code

```eval_rst
The Cavium reference code is called `BDK`_ (board development kit) and is part
of the `Octeon-TX-SDK`_. Parts of the `BDK`_ have been integrated into coreoboot.
```

## SOC code

The SOC folder contains functions for:
* TWSI
* UART
* TIMER
* SPI
* MMU
* DRAM
* CLOCK
* GPIO
* Secondary CPUs
* PCI

All other hardware is initilized by the BDK code, which is invoked from
ramstage.

## Notes about the hardware

Cavium SoC do **not** have embedded SRAM. The **BOOTROM** setups the
L2 cache and loads 192KiB of firmware starting from 0x20000 to a fixed
location. It then jumps to the firmware.

```eval_rst
For more details have a look at `Cavium CN8XXX Bootflow`_.
```

## CAR setup

For Cache-as-RAM we only need to lock the cachelines which are used by bootblock
or romstage until DRAM has been set up. At the end of romstage the cachelines
are unlocked and the contents are flushed to DRAM.
Locked cachelines are never evicted.

The CAR setup is done in '''bootblock_custom.S''' and thus doesn't use the common
aarch64 '''bootblock.S''' code.

## DRAM setup

```eval_rst
The DRAM setup is done by the `BDK`_.
```

## PCI setup

The PCI setup is done using the MMCONF mechanism.
Besides configuring device visibility (secure/unsecure) the MSI-X interrupts
needs to be configured.

## Devicetree patching

The Linux devicetree needs to be patched, depending on the available hardware
and their configuration. Some values depends on fuses, some on user selectable
configuration.

The following SoC specific fixes are made:

1. Fix SCLK
2. Fix UUA refclock
3. Remove unused PEM entries
4. Remove unused QLM entries
5. Set local MAC address

## CN81xx quirks

The CN81xx needs some quirks that are not documented or hidden in the code.

### Violation of PCI spec

**Problem:**

* The PCI device 01:01.0 is disabled, but a multifunction device.
* The PCI device 01:01.2 - 00:01.7 is enabled and can't be found by the coreboot
PCI allocator.

**Solution:**

The PCI Bus 0 and 1 are scanned manually in SOC's PCI code.


### Crash accessing SLI memory

**Problem:**

The SLI memory region decodes to attached PCIe devices.
Accessing the memory region results in 'Data Abort Exception' if the link of the
PCIe device never had been enabled.

**Solution:**

Enable the PCIe link at least once. (You can disabling the link and the SLI
memory reads as 0xffffffff.)


### RNG Data Abort Exception

**Problem:**

'Data Abort Exception' on accessing the enabled RNG.

**Solution**:

Read the BDK_RNM_CTL_STATUS register at least once after writing it.


```eval_rst
.. _Octeon-TX-SDK: https://github.com/Cavium-Open-Source-Distributions/OCTEON-TX-SDK
.. _Cavium CN8XXX Bootflow: ../bootflow.html
.. _BDK: ../../../vendorcode/cavium/bdk.html
```
8 changes: 8 additions & 0 deletions Documentation/soc/cavium/index.md
@@ -0,0 +1,8 @@
# Cavium SOC-specific documentation

This section contains documentation about coreboot on specific Cavium SOCs.

## Platforms

- [CN81xx series](cn81xx/index.md)
- [CN8xxx bootflow](bootflow.md)
1 change: 1 addition & 0 deletions Documentation/soc/index.md
Expand Up @@ -4,4 +4,5 @@ This section contains documentation about coreboot on specific SOCs.

## Vendor

- [Cavium](cavium/index.md)
- [Intel](intel/index.md)
30 changes: 30 additions & 0 deletions Documentation/vendorcode/cavium/bdk.md
@@ -0,0 +1,30 @@
# Cavium's BDK

## BDK
A part of Cavium's BDK can be found in '''src/vendorcode/cavium/bdk'''.
It does the **DRAM init** in romstage and the **PCIe**, **QLM**, **SLI**,
**PHY**, **BGX**, **SATA** init in ramstage.

## Devicetree
The BDK does use it's own devicetree, as coreboot's devicetree isn't
compatible. The devicetree stores key-value pairs (see **bdk-devicetree.h**
for implementation details), where the key and the value are stored as strings.

The key-value pairs must be advertised in romstage and ramstage using the
'''bdk_config_set_fdt()''' method.

The tool '''util/cavium/devicetree_convert.py''' can be used to convert a
devicetree to a key-value array.

## Modifications

* The BDK has been modified to compile under coreboot's toolchain.
* Removed FDT devicetree support.
* Dropped files that aren't required for SoC bringup
* Added Kconfig values for verbose console output

## Debugging

You can enable verbose console output in *menuconfig*:

Go to **Chipset**, **BDK** and enable one or multiple stages.
8 changes: 8 additions & 0 deletions Documentation/vendorcode/cavium/index.md
@@ -0,0 +1,8 @@
# Cavium vendorcode-specific documentation

This section contains documentation about coreboot on Cavium specific
vendorcode.

## Sections

- [BDK](bdk.md)
7 changes: 7 additions & 0 deletions Documentation/vendorcode/index.md
@@ -0,0 +1,7 @@
# Vendorcode-specific documentation

This section contains documentation about coreboot on specific vendorcode.

## Vendor

- [Cavium](cavium/index.md)

0 comments on commit 8c986ab

Please sign in to comment.