summaryrefslogtreecommitdiffstats
path: root/util/bucts/readme.md
blob: 1bf9beebc85733b25c480cf9b89426f4cefc79ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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>