| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,198 @@ | ||
| # ASUS F2A85-M | ||
|
|
||
| This page describes how to run coreboot on the [ASUS F2A85-M]. | ||
|
|
||
| ## Variants | ||
| - ASUS F2A85-M - Working | ||
| - ASUS F2A85-M LE - Working | ||
| - ASUS F2A85-M PRO - Working | ||
| - ASUS F2A85-M2 - Working | ||
| - ASUS F2A85-M/CSM - Unsure if WIP. | ||
|
|
||
| ## Technology | ||
|
|
||
| Both "Trinity" and "Richland" desktop processing units are working, | ||
| the CPU architecture in these CPUs/APUs is [Piledriver], | ||
| and their GPU is [TeraScale 3] (VLIW4-based). | ||
|
|
||
| ```eval_rst | ||
| +------------------+--------------------------------------------------+ | ||
| | F2A85-M | | | ||
| +------------------+--------------------------------------------------+ | ||
| | DDR voltage IC | Nuvoton NCT3933U (AUX SMBUS 0x15) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Network | Realtek RTL8111F | | ||
| +------------------+--------------------------------------------------+ | ||
| | Northbridge | Integrated into CPU with IMC and GPU (APUs only) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Southbridge | Hudson-D4 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Sound IC | Realtek ALC887 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Super I/O | ITE 8603E | | ||
| +------------------+--------------------------------------------------+ | ||
| | VRM controller | DIGI VRM ASP1106 (Rebranded RT8894A - SMBUS 0x20)| | ||
| +------------------+--------------------------------------------------+ | ||
| ``` | ||
|
|
||
| ```eval_rst | ||
| +------------------+--------------------------------------------------+ | ||
| | F2A85-M LE | | | ||
| +------------------+--------------------------------------------------+ | ||
| | DDR voltage IC | Nuvoton NCT3933U (AUX SMBUS 0x15 - unconfirmed) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Network | Realtek RTL8111F | | ||
| +------------------+--------------------------------------------------+ | ||
| | Northbridge | Integrated into CPU with IMC and GPU(APUs only) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Southbridge | Hudson-D4 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Sound IC | Realtek ALC887 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Super I/O | ITE 8623E | | ||
| +------------------+--------------------------------------------------+ | ||
| | VRM controller | DIGI VRM ASP1106 (Rebranded RT8894A - SMBUS 0x20)| | ||
| +------------------+--------------------------------------------------+ | ||
| ``` | ||
|
|
||
| ```eval_rst | ||
| +------------------+--------------------------------------------------+ | ||
| | F2A85-M PRO | | | ||
| +------------------+--------------------------------------------------+ | ||
| | DDR voltage IC | Nuvoton NCT3933U (?) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Network | Realtek RTL8111F - Not working | | ||
| +------------------+--------------------------------------------------+ | ||
| | Northbridge | Integrated into CPU with IMC and GPU(APUs only) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Southbridge | Hudson-D4 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Sound IC | Realtek ALC887 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Super I/O | Nuvoton NCT6779D | | ||
| +------------------+--------------------------------------------------+ | ||
| | VRM controller | DIGI VRM ASP1107 | | ||
| +------------------+--------------------------------------------------+ | ||
| ``` | ||
|
|
||
| ## Flashing coreboot | ||
|
|
||
| ```eval_rst | ||
| +---------------------+------------+ | ||
| | Type | Value | | ||
| +=====================+============+ | ||
| | Socketed flash | yes | | ||
| +---------------------+------------+ | ||
| | Model | W25Q64F | | ||
| +---------------------+------------+ | ||
| | Size | 8 MiB | | ||
| +---------------------+------------+ | ||
| | Package | DIP-8 | | ||
| +---------------------+------------+ | ||
| | Write protection | no | | ||
| +---------------------+------------+ | ||
| | Dual BIOS feature | no | | ||
| +---------------------+------------+ | ||
| | Internal flashing | yes | | ||
| +---------------------+------------+ | ||
| ``` | ||
|
|
||
| ### Internal programming | ||
|
|
||
| The main SPI flash can be accessed using [flashrom]. | ||
| UEFI builds that allow flash chip access: | ||
| > v5016 is untested, but expected to work as well | ||
| > v5018 | ||
| > v5103 | ||
| > v5104 | ||
| > v5107 | ||
| > v5202 | ||
| > v6002 | ||
| > v6004 | ||
| > v6102 | ||
| > v6402 | ||
| > v6404 (requires downgrading to v6402 to flash coreboot) | ||
| > v6501 (requires downgrading to v6402 to flash coreboot) | ||
| > v6502 (requires downgrading to v6402 to flash coreboot) | ||
|
|
||
| Build v6502, v6501 and v6404 do not allow access to the flash chip. | ||
| Fortunately it is possible to downgrade build v6502, v6501, v6404 to v6402, with EZFlash. | ||
| Downgrading is done by downloading build v6402 from ASUS' F2A85-M download page | ||
| and copying it to (the root directory of) a FAT32 formatted USB flash drive. | ||
| Enter the EFI setup, switch to advanced mode if necessary, | ||
| open the 'Tool' tab and select "ASUS EZ Flash 2 Utility". | ||
|
|
||
| ## Integrated graphics | ||
|
|
||
| ### Option 1: Retrieve the VGA optionrom from the vendor EFI binary by running: | ||
|
|
||
| # dd if=/dev/mem of=vgabios.bin bs=1k count=64 skip=768 | ||
|
|
||
| ### Option 2: Extract from the vendor binary | ||
|
|
||
| Download the BIOS from the Support section at [ASUS F2A85-M]. | ||
| Using MMTool Aptio (versions 4.5.0 and 5.0.0): | ||
| - Load image, click on 'Extract tab' | ||
| - Select the 'export path' and 'link present' options | ||
| - Choose option ROM '1002,9900' and click on 'Extract' | ||
|
|
||
| This version is usable for all the GPUs. | ||
| > 1002,9901 Trinity (Radeon HD 7660D) | ||
| > 1002,9904 Trinity (Radeon HD 7560D) | ||
| > 1002,990c Richland (Radeon HD 8670D) | ||
| > 1002,990e Richland (Radeon HD 8570D) | ||
| > 1002,9991 Trinity (Radeon HD 7540D) | ||
| > 1002,9993 Trinity (Radeon HD 7480D) | ||
| > 1002,9996 Richland (Radeon HD 8470D) | ||
| > 1002,9998 Richland (Radeon HD 8370D) | ||
| > 1002,999d Richland (Radeon HD 8550D) | ||
|
|
||
| ## Known issues | ||
|
|
||
| - buggy USB 3.0 controller (works fine as 2.0 port) | ||
| - reboot, poweroff, S3 suspend/resume (broken since 4.8.1) | ||
|
|
||
| ## Known issues (untested because of non-working ACPI sleep) | ||
|
|
||
| - blink in suspend mode (GP43, program LDN7 F8=23 and blink with F9=2 for 1s blinks) | ||
| - fix immediate resume after suspend (perhaps PCIe STS needs to be cleared) | ||
| - fix resume with USB3.0 used (perhaps there is a bug in resume.c) | ||
|
|
||
| ## Untested | ||
|
|
||
| - audio over HDMI | ||
| - IOMMU | ||
| - PS/2 mouse | ||
|
|
||
| ## TODOs | ||
|
|
||
| - manage to use one ATOMBIOS for all the integrated GPUs | ||
|
|
||
| ## Working | ||
|
|
||
| - ACPI | ||
| - CPU frequency scaling | ||
| - flashrom under coreboot | ||
| - Gigabit Ethernet | ||
| - Hardware monitor | ||
| - Integrated graphics | ||
| - KVM | ||
| - Onboard audio | ||
| - PCIe | ||
| - PS/2 keyboard | ||
| - SATA | ||
| - Serial port | ||
| - SuperIO based fan control | ||
| - USB (XHCI is buggy) | ||
|
|
||
| ## Extra resources | ||
|
|
||
| - [Board manual] | ||
| - Flash chip datasheet [W25Q64FV] | ||
|
|
||
| [ASUS F2A85-M]: https://www.asus.com/Motherboards/F2A85M/ | ||
| [Board manual]: https://dlcdnets.asus.com/pub/ASUS/mb/SocketFM2/F2A85-M/E8005_F2A85-M.pdf | ||
| [flashrom]: https://flashrom.org/Flashrom | ||
| [Piledriver]: https://en.wikipedia.org/wiki/Piledriver_%28microarchitecture%29#APU_lines | ||
| [TeraScale 3]: https://en.wikipedia.org/wiki/TeraScale_%28microarchitecture%29#TeraScale_3 | ||
| [W25Q64FV]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| # Security | ||
|
|
||
| This section describes documentation about the security architecture of coreboot. | ||
|
|
||
| ## Vendor | ||
|
|
||
| - [Measured Boot](vboot/measured_boot.md) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # Intel Firmware Support Package (FSP)-specific documentation | ||
|
|
||
| This section contains documentation about Intel-FSP in public domain. | ||
|
|
||
| ## Open Source Intel FSP specification | ||
|
|
||
| * [About Intel FSP](https://firmware.intel.com/learn/fsp/about-intel-fsp) | ||
|
|
||
| * [FSP Specification 1.0](https://www.intel.in/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec.pdf) | ||
|
|
||
| * [FSP Specification 1.1](https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v1-1.pdf) | ||
|
|
||
| * [FSP Specification 2.0](https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v2.pdf) | ||
|
|
||
| ## Additional Features in FSP 2.1 specification | ||
|
|
||
| - [PPI](ppi/ppi.md) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| # PEIM to PEIM Interface (PPI) | ||
|
|
||
| This section is intended to document the purpose of creating PPI service | ||
| inside coreboot space to perform some specific operation related to CPU, | ||
| chipset using Intel FSP. This feature is added into FSP specification 2.1 | ||
| where FSP should be able to locate PPI, published by boot firmware and | ||
| able to execute the same in FSP's context. | ||
|
|
||
| * [What is PPI](https://www.intel.com/content/dam/www/public/us/en/documents/reference-guides/efi-pei-cis-v09.pdf) | ||
|
|
||
| ## List of PPI service | ||
|
|
||
| ### Publish MP Service PPI from boot firmware (coreboot) to initialize CPU | ||
| - [MP Service PPI](mp_service_ppi.md) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| # Multiple Processor (MP) Initialization | ||
|
|
||
| This section is intended to document the purpose of performing multiprocessor | ||
| initialization and its possible ways in coreboot space. | ||
|
|
||
| Entire CPU multiprocessor initialization can be divided into two parts | ||
| 1. BSP (Boot Strap Processor) Initialization | ||
| 2. AP (Application Processor) Initialization | ||
|
|
||
| * [Multiple Processor Init](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf) - section 8.4 | ||
|
|
||
| ## Problem Statement | ||
|
|
||
| 1. coreboot is capable enough to handle multiprocessor initialization on | ||
| IA platforms. | ||
|
|
||
| 2. With restricted CPU programming logic, there might be some cases where | ||
| certain feature programming can't be open sourced at early development of SOC. | ||
|
|
||
| Platform code might need to compromise on those closed source nature of CPU | ||
| programming if we don't plan to provide an alternate interface which can be | ||
| used by coreboot to get rid of such close sourced CPU programming. | ||
|
|
||
| ## Possible Solution Space | ||
|
|
||
| Considering these facts, there are 3 possible solutions to perform MP | ||
| initialization from coreboot + FSP space. | ||
|
|
||
| 1. coreboot to perform complete MP initialization by its own. This includes | ||
| BSP and AP programming of CPU features mostly non-restricted one. Preferred | ||
| Kconfig is USE_COREBOOT_NATIVE_MP_INIT. SoCs like SKL, KBL, APL are okay to | ||
| make use of same Kconfig option for MP initialization. | ||
|
|
||
| 2. Alternatively, SoC users also can skip coreboot doing MP initialization | ||
| and make use of FSP binary to perform same task. This can be achieved by using | ||
| Kconfig name USE_INTEL_FSP_MP_INIT. As of 2019 all Google Chrome products are | ||
| using coreboot native MP initialization mechanism and some IOTG platforms | ||
| are using FSP MP Init solution as well. | ||
|
|
||
| 3. Final option is to let coreboot publish PPI (PEIM to PEIM Interface) to | ||
| perform some restricted (closed source) CPU programming. In that case, | ||
| coreboot will use its native MP init and additionally publish MP service PPI | ||
| for FSP to consume. FSP will execute some CPU programming using same PPI | ||
| service from its own context. One can use | ||
| USE_INTEL_FSP_TO_CALL_COREBOOT_PUBLISH_MP_PPI Kconfig to perform this | ||
| operation. | ||
|
|
||
| For latest SoCs like CNL, WHL, ICL, etc, its recommended to make use of this | ||
| option in order to perform SGX and C6DRAM enabling. | ||
|
|
||
| Typically all platforms supported by FSP 2.1 specification will have | ||
| external PPI service feature implemented. | ||
|
|
||
| [References] | ||
| - [PPI](../fsp/ppi/ppi.md) | ||
| - [MP Service PPI](../fsp/ppi/mp_service_ppi.md) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,7 +15,7 @@ | |
|
|
||
| #include "coreinfo.h" | ||
|
|
||
| #if CONFIG(MODULE_BOOTLOG) | ||
|
|
||
| #define LINES_SHOWN 19 | ||
| #define TAB_WIDTH 2 | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -16,7 +16,7 @@ | |
| #include "coreinfo.h" | ||
| #include "endian.h" | ||
|
|
||
| #if CONFIG(MODULE_CBFS) | ||
|
|
||
| #define FILES_VISIBLE 19 | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,7 +15,7 @@ | |
|
|
||
| #include "coreinfo.h" | ||
|
|
||
| #if CONFIG(MODULE_NVRAM) | ||
|
|
||
| /** | ||
| * Dump 256 bytes of NVRAM. | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| CONFIG_LP_CHROMEOS=y | ||
| CONFIG_LP_ARCH_ARM64=y | ||
| CONFIG_LP_TIMER_ARM64_ARCH=y |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -34,7 +34,7 @@ | |
| #include <unistd.h> | ||
|
|
||
|
|
||
| #if !CONFIG(LP_STORAGE_64BIT_LBA) | ||
| typedef u32 lba_t; | ||
| #else | ||
| typedef u64 lba_t; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| /* | ||
| * This file is part of the coreboot project. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; version 2 of the License. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| */ | ||
|
|
||
| #ifndef __ARCH_MMIO_H__ | ||
| #define __ARCH_MMIO_H__ | ||
|
|
||
| #include <stdint.h> | ||
|
|
||
| /* NOTE: These are just stubs; if the architecture requires special | ||
| * care to avoid posted writes or cachelines, it is not yet done here. | ||
| */ | ||
|
|
||
| static inline uint8_t read8(const volatile void *addr) | ||
| { | ||
| return *(volatile uint8_t *)addr; | ||
| } | ||
|
|
||
| static inline uint16_t read16(const volatile void *addr) | ||
| { | ||
| return *(volatile uint16_t *)addr; | ||
| } | ||
|
|
||
| static inline uint32_t read32(const volatile void *addr) | ||
| { | ||
| return *(volatile uint32_t *)addr; | ||
| } | ||
|
|
||
| static inline void write8(volatile void *addr, uint8_t val) | ||
| { | ||
| *(volatile uint8_t *)addr = val; | ||
| } | ||
|
|
||
| static inline void write16(volatile void *addr, uint16_t val) | ||
| { | ||
| *(volatile uint16_t *)addr = val; | ||
| } | ||
|
|
||
| static inline void write32(volatile void *addr, uint32_t val) | ||
| { | ||
| *(volatile uint32_t *)addr = val; | ||
| } | ||
|
|
||
| #endif /* __ARCH_MMIO_H__ */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -37,7 +37,7 @@ | |
|
|
||
| #include <arch/x86/timestamp.inc> | ||
|
|
||
| #if CONFIG(SSE) | ||
| #include <cpu/x86/sse_enable.inc> | ||
| #endif | ||
|
|
||
|
|
||