summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/Intel/MultiProcessorInit/MultiProcessorInit.md43
-rw-r--r--Documentation/Intel/NativeRaminit/Sandybridge_freq.md6
-rw-r--r--Documentation/Intel/NativeRaminit/Sandybridge_read.md26
3 files changed, 43 insertions, 32 deletions
diff --git a/Documentation/Intel/MultiProcessorInit/MultiProcessorInit.md b/Documentation/Intel/MultiProcessorInit/MultiProcessorInit.md
index 477c559b39..ab0b5135ed 100644
--- a/Documentation/Intel/MultiProcessorInit/MultiProcessorInit.md
+++ b/Documentation/Intel/MultiProcessorInit/MultiProcessorInit.md
@@ -10,15 +10,15 @@ Today coreboot is capable enough to handle multi-processor initialization on IA
The multi-processor initialization code has to take care of lots of duties:
-1 Bringing all cores out of reset
-2 Load latest microcode on all cores
-3 Sync latest MTRR snapshot between BSP and APs
-4 Perform sets of CPU feature programming
- * CPU Power & Thermal Management
- * Overclocking
- * Intel Trusted Execution Technology
- * Intel Software Guard Extensions
- * Intel Processor Trace etc.
+1. Bringing all cores out of reset
+2. Load latest microcode on all cores
+3. Sync latest MTRR snapshot between BSP and APs
+4. Perform sets of CPU feature programming
+ * CPU Power & Thermal Management
+ * Overclocking
+ * Intel Trusted Execution Technology
+ * Intel Software Guard Extensions
+ * Intel Processor Trace etc.
This above CPU feature programming lists are expected to grow with current and future
CPU complexity and there might be some cases where certain feature programming mightbe
@@ -39,30 +39,39 @@ programming using coreboot published APIs.
Due to the fact that FSP is using EFI infrastructure and need to relying on install/locate
PPI to perform certain API call, hence coreboot has to created MP services APIs known as
EFI_MP_SERVICES_PPI as per PI specification volume 1, section 8.3.9.
-More details here: http://www.uefi.org/sites/default/files/resources/PI_Spec_1_6.pdf
+More details here: [PI_Spec_1_6]
### coreboot to publish EFI_MP_SERVICES_PPI APIs
+
+```eval_rst
++------------------------------+------------------------------------------------------------------+
| API | Description |
-|------------------------------|------------------------------------------------------------------|
++==============================+==================================================================+
| PeiGetNumberOfProcessors | Get the number of CPU's. |
++------------------------------+------------------------------------------------------------------+
| PeiGetProcessorInfo | Get information on a specific CPU. |
++------------------------------+------------------------------------------------------------------+
| PeiStartupAllAPs | Activate all of the application processors. |
++------------------------------+------------------------------------------------------------------+
| PeiStartupThisAP | Activate a specific application processor. |
++------------------------------+------------------------------------------------------------------+
| PeiSwitchBSP | Switch the boot strap processor. |
++------------------------------+------------------------------------------------------------------+
| PeiEnableDisableAP | Enable or disable an application processor. |
++------------------------------+------------------------------------------------------------------+
| PeiWhoAmI | Identify the currently executing processor. |
-|------------------------------|------------------------------------------------------------------|
-
++------------------------------+------------------------------------------------------------------+
+```
## Code Flow
Here is proposed design flow with coreboot has implemented EFI_MP_SERVICES_PPI API and FSP will make
use of the same to perform some CPU feature programming.
-** coreboot-FSP MP init flow **
-![alt text][coreboot_publish_mp_service_api]
+**coreboot-FSP MP init flow**
+![coreboot-fsp mp init flow][coreboot_publish_mp_service_api]
-[coreboot_publish_mp_service_api]: coreboot_publish_mp_service_api.png "coreboot-fsp mp init flow"
+[coreboot_publish_mp_service_api]: coreboot_publish_mp_service_api.png
## Benefits
1. coreboot was using SkipMpInit=1 which will skip entire FSP CPU feature programming.
@@ -72,3 +81,5 @@ Silicon recommended CPU programming.
coreboot interfaces to execute those programming.
3. coreboot will have more control over running those feature programming as API optimization
handled by coreboot.
+
+[PI_Spec_1_6]: http://www.uefi.org/sites/default/files/resources/PI_Spec_1_6.pdf
diff --git a/Documentation/Intel/NativeRaminit/Sandybridge_freq.md b/Documentation/Intel/NativeRaminit/Sandybridge_freq.md
index cf68d5ec46..d8b73b3aec 100644
--- a/Documentation/Intel/NativeRaminit/Sandybridge_freq.md
+++ b/Documentation/Intel/NativeRaminit/Sandybridge_freq.md
@@ -69,7 +69,7 @@ It is possible to override the soft fuses limit by using a board-specific
> **Note:** Ignoring max mem freq. fuses is supported since coreboot 4.7.
-## <a name="hard_fuses"></a> Hard fuses
+## Hard fuses
"Hard" fuses are programmed by Intel and limit the maximum frequency that can
be used on a given CPU/board/chipset. At time of writing there's no register
to read this limit, before trying to set a given DRAM frequency. The memory PLL
@@ -77,8 +77,8 @@ won't lock, indicating that the chosen memory multiplier isn't available. In
this case coreboot tries the next smaller memory multiplier until the PLL will
lock.
-## <a name="devicetree"></a> Devicetree
-The devicetree register ```max_mem_clock_mhz``` overrides the "soft" fuses set
+## Devicetree
+The devicetree register `max_mem_clock_mhz` overrides the "soft" fuses set
by the board manufacturer.
By using this register it's possible to force a minimum operating frequency.
diff --git a/Documentation/Intel/NativeRaminit/Sandybridge_read.md b/Documentation/Intel/NativeRaminit/Sandybridge_read.md
index e58298ab77..0496657b3f 100644
--- a/Documentation/Intel/NativeRaminit/Sandybridge_read.md
+++ b/Documentation/Intel/NativeRaminit/Sandybridge_read.md
@@ -78,20 +78,20 @@ The highest IO delay was set on the right-hand side, while the last block
on the left-hand side has zero IO delay.
#### roundtrip 55 DCKs
-![alt text][timA_lane0-3_rt55]
+![timA for lane0 - lane3, roundtrip 55][timA_lane0-3_rt55]
-[timA_lane0-3_rt55]: timA_lane0-3_rt55.png "timA for lane0 - lane3, roundtrip 55"
+[timA_lane0-3_rt55]: timA_lane0-3_rt55.png
#### roundtrip 54 DCKs
-![alt text][timA_lane0-3_rt54]
+![timA for lane0 - lane3, roundtrip 54][timA_lane0-3_rt54]
-[timA_lane0-3_rt54]: timA_lane0-3_rt54.png "timA for lane0 - lane3, roundtrip 54"
+[timA_lane0-3_rt54]: timA_lane0-3_rt54.png
#### roundtrip 53 DCKs
-![alt text][timA_lane0-3_rt53]
+![timA for lane0 - lane3, roundtrip 53][timA_lane0-3_rt53]
-[timA_lane0-3_rt53]: timA_lane0-3_rt53.png "timA for lane0 - lane3, roundtrip 53"
+[timA_lane0-3_rt53]: timA_lane0-3_rt53.png
As you can see the signal has some jitter as every sample was taken in a
different loop iteration. The result register only contains a single bit per
@@ -128,13 +128,13 @@ If it's "high" we have found the preamble.
The roundtrip time and IO delay will be adjusted until all lanes are aligned.
The resulting IO delay is visible in the picture below.
-** roundtrip time: 49 DCKs, IO delay (at blue point): 6 DCKs **
-![alt text][timA_lane0-3_discover_420x]
+**roundtrip time: 49 DCKs, IO delay (at blue point): 6 DCKs**
+![timA for lane0 - lane3, finding minimum roundtrip time][timA_lane0-3_discover_420x]
-[timA_lane0-3_discover_420x]: timA_lane0-3_discover_420x.png "timA for lane0 - lane3, finding minimum roundtrip time"
+[timA_lane0-3_discover_420x]: timA_lane0-3_discover_420x.png
-** Note: The sampled data has been shifted by timA. The preamble is now
-in phase. **
+**Note: The sampled data has been shifted by timA. The preamble is now
+in phase.**
## Fine adjustment
@@ -146,8 +146,8 @@ times. The fine adjustment finds the middle of each rising edge (it's actual
the falling edge of the preamble) to get the final IO phase. You can see the
result in the picture below.
-![alt text][timA_lane0-3_adjust_fine]
+![timA for lane0 - lane3, fine adjustment][timA_lane0-3_adjust_fine]
-[timA_lane0-3_adjust_fine]: timA_lane0-3_adjust_fine.png "timA for lane0 - lane3, fine adjustment"
+[timA_lane0-3_adjust_fine]: timA_lane0-3_adjust_fine.png
Lanes 0 - 2 will be adjusted by a phase of -10, while lane 3 is already correct.