aboutsummaryrefslogtreecommitdiff
path: root/util/bucts/readme.md
diff options
context:
space:
mode:
Diffstat (limited to 'util/bucts/readme.md')
-rw-r--r--util/bucts/readme.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/util/bucts/readme.md b/util/bucts/readme.md
new file mode 100644
index 0000000000..1bf9beebc8
--- /dev/null
+++ b/util/bucts/readme.md
@@ -0,0 +1,52 @@
+# What is bucts?
+Many Intel southbridges provide a mechanism called Back Up Control Top Swap (`BUC.TS`).
+This functionality allows to have the southbridge fetch the reset vector or
+the beginning of the bootblock at a 64K/128/256K offset from the usual top of flash.
+
+This can be useful in different ways:
+- Have a backup bootblock in case of bootblock hacking;
+- Some vendor BIOS only write protect their bootblock so this tool makes it
+ possible to circumvent this protection to allow flashing and booting coreboot.
+
+The BUC.TS status is stored in a nvram bit. To clear it one has to remove the RTC battery.
+
+# Operation Description
+First compile bucts by running make:
+
+ $ make
+
+Then you can view the current system settings:
+
+ $ ./bucts --print
+
+To flip the decode address of the bootblock, by setting `BUC.TS` to 1:
+
+ $ ./bucts --set
+
+To set the behavior the regular mapping, by setting `BUC.TS` to 0
+
+ $ ./bucts --unset
+
+
+# Details
+Example Bootblock size of 64KB (this is only configurable to be something else
+like 128 or 256K on PCH Intel targets).
+
+<pre>
+ +-------------+ -> 0x200000 +-------------+ -> 0xFFFFFFFF +-------------+ -> 0xFFFFFFFF
+ | | | | | |
+ | bootblock_0 | | bootblock_0 | | bootblock_1 |
+ | | | | | |
+ +-------------+ -> 0x1F0000 +-------------+ -> 0xFFFF0000 +-------------+ -> 0xFFFF0000
+ | | | | | |
+ | bootblock_1 | | bootblock_1 | | bootblock_0 |
+ | | | | | |
+ +-------------+ -> 0x1E0000 +-------------+ -> 0xFFFE0000 +-------------+ -> 0xFFFE0000
+ | | | | | |
+ | | | | | |
+ Z Z Z Z Z Z
+ Z Z Z Z Z Z
+ | | | | | |
+ | | | | | |
+ FLASH (2M) Memory Map BUC.TS=0 Memory Map BUC.TS=1
+</pre>