Documentation: Add cavium SoC and mainboard
* 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>
This commit is contained in:
parent
a45e9f8106
commit
8c986ab263
|
@ -18,4 +18,5 @@ Contents:
|
||||||
* [System on Chip-specific documentation](soc/index.md)
|
* [System on Chip-specific documentation](soc/index.md)
|
||||||
* [Mainboard-specific documentation](mainboard/index.md)
|
* [Mainboard-specific documentation](mainboard/index.md)
|
||||||
* [SuperIO-specific documentation](superio/index.md)
|
* [SuperIO-specific documentation](superio/index.md)
|
||||||
|
* [Vendorcode-specific documentation](vendorcode/index.md)
|
||||||
* [Release notes for past releases](releases/index.md)
|
* [Release notes for past releases](releases/index.md)
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 148 KiB |
|
@ -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
|
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
This section contains documentation about coreboot on specific mainboards.
|
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
|
## HP
|
||||||
|
|
||||||
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
||||||
|
|
||||||
|
## SiFive
|
||||||
|
|
||||||
|
- [SiFive HiFive Unleashed](sifive/hifive-unleashed.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 not shown.
After Width: | Height: | Size: 114 KiB |
|
@ -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
|
||||||
|
```
|
|
@ -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)
|
|
@ -4,4 +4,5 @@ This section contains documentation about coreboot on specific SOCs.
|
||||||
|
|
||||||
## Vendor
|
## Vendor
|
||||||
|
|
||||||
|
- [Cavium](cavium/index.md)
|
||||||
- [Intel](intel/index.md)
|
- [Intel](intel/index.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.
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Cavium vendorcode-specific documentation
|
||||||
|
|
||||||
|
This section contains documentation about coreboot on Cavium specific
|
||||||
|
vendorcode.
|
||||||
|
|
||||||
|
## Sections
|
||||||
|
|
||||||
|
- [BDK](bdk.md)
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Vendorcode-specific documentation
|
||||||
|
|
||||||
|
This section contains documentation about coreboot on specific vendorcode.
|
||||||
|
|
||||||
|
## Vendor
|
||||||
|
|
||||||
|
- [Cavium](cavium/index.md)
|
Loading…
Reference in New Issue