diff options
author | Tom Rini <trini@ti.com> | 2012-10-22 16:54:38 -0700 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2012-10-22 16:54:38 -0700 |
commit | c7656bab411433f987baa2288eff8c78ddc0f378 (patch) | |
tree | 18fe8fa515ecdea19afa83d1af0c6eff4946a5d4 /doc/README.mpc85xx-spin-table | |
parent | bdc3ff6e4f75813d01e51081799d10e4a9c7fbcb (diff) | |
parent | 23028d69e950023a3cb605751dbcb1e314be8b36 (diff) | |
download | u-boot-imx-c7656bab411433f987baa2288eff8c78ddc0f378.zip u-boot-imx-c7656bab411433f987baa2288eff8c78ddc0f378.tar.gz u-boot-imx-c7656bab411433f987baa2288eff8c78ddc0f378.tar.bz2 |
Merge branch 'master' of git://www.denx.de/git/u-boot-mpc85xx
Diffstat (limited to 'doc/README.mpc85xx-spin-table')
-rw-r--r-- | doc/README.mpc85xx-spin-table | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/doc/README.mpc85xx-spin-table b/doc/README.mpc85xx-spin-table new file mode 100644 index 0000000..8da768a --- /dev/null +++ b/doc/README.mpc85xx-spin-table @@ -0,0 +1,26 @@ +Spin table in cache +===================================== +As specified by ePAPR v1.1, the spin table needs to be in cached memory. After +DDR is initialized and U-boot relocates itself into DDR, the spin table is +accessible for core 0. It is part of release.S, within 4KB range after +__secondary_start_page. For other cores to use the spin table, the booting +process is described below: + +Core 0 sets up the reset page on the top 4K of memory (or 4GB if total memory +is more than 4GB), and creates a TLB to map it to 0xffff_f000, regardless of +the physical address of this page, with WIMGE=0b01010. Core 0 also enables boot +page translation for secondary cores to use this page of memory. Then 4KB +memory is copied from __secondary_start_page to the boot page, after flusing +cache because this page is mapped as normal DDR. Before copying the reset page, +core 0 puts the physical address of the spin table (which is in release.S and +relocated to the top of mapped memory) into a variable __spin_table_addr so +that secondary cores can see it. + +When secondary cores boot up from 0xffff_f000 page, they only have one default +TLB. While booting, they set up another TLB in AS=1 space and jump into +the new space. The new TLB covers the physical address of the spin table page, +with WIMGE =0b00100. Now secondary cores can keep polling the spin table +without stress DDR bus because both the code and the spin table is in cache. + +For the above to work, DDR has to set the 'M' bit of WIMGE, in order to keep +cache coherence. |