-
Notifications
You must be signed in to change notification settings - Fork 52.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
In order to use S32C1I instruction on cores with ATOMCTL SR the register must be properly initialized. Signed-off-by: Max Filippov <[email protected]> Signed-off-by: Chris Zankel <[email protected]>
- Loading branch information
Showing
3 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
We Have Atomic Operation Control (ATOMCTL) Register. | ||
This register determines the effect of using a S32C1I instruction | ||
with various combinations of: | ||
|
||
1. With and without an Coherent Cache Controller which | ||
can do Atomic Transactions to the memory internally. | ||
|
||
2. With and without An Intelligent Memory Controller which | ||
can do Atomic Transactions itself. | ||
|
||
The Core comes up with a default value of for the three types of cache ops: | ||
|
||
0x28: (WB: Internal, WT: Internal, BY:Exception) | ||
|
||
On the FPGA Cards we typically simulate an Intelligent Memory controller | ||
which can implement RCW transactions. For FPGA cards with an External | ||
Memory controller we let it to the atomic operations internally while | ||
doing a Cached (WB) transaction and use the Memory RCW for un-cached | ||
operations. | ||
|
||
For systems without an coherent cache controller, non-MX, we always | ||
use the memory controllers RCW, thought non-MX controlers likely | ||
support the Internal Operation. | ||
|
||
CUSTOMER-WARNING: | ||
Virtually all customers buy their memory controllers from vendors that | ||
don't support atomic RCW memory transactions and will likely want to | ||
configure this register to not use RCW. | ||
|
||
Developers might find using RCW in Bypass mode convenient when testing | ||
with the cache being bypassed; for example studying cache alias problems. | ||
|
||
See Section 4.3.12.4 of ISA; Bits: | ||
|
||
WB WT BY | ||
5 4 | 3 2 | 1 0 | ||
2 Bit | ||
Field | ||
Values WB - Write Back WT - Write Thru BY - Bypass | ||
--------- --------------- ----------------- ---------------- | ||
0 Exception Exception Exception | ||
1 RCW Transaction RCW Transaction RCW Transaction | ||
2 Internal Operation Exception Reserved | ||
3 Reserved Reserved Reserved |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* arch/xtensa/include/asm/initialize_mmu.h | ||
* | ||
* Initializes MMU: | ||
* | ||
* For the new V3 MMU we remap the TLB from virtual == physical | ||
* to the standard Linux mapping used in earlier MMU's. | ||
* | ||
* The the MMU we also support a new configuration register that | ||
* specifies how the S32C1I instruction operates with the cache | ||
* controller. | ||
* | ||
* This file is subject to the terms and conditions of the GNU General | ||
* Public License. See the file "COPYING" in the main directory of | ||
* this archive for more details. | ||
* | ||
* Copyright (C) 2008 - 2012 Tensilica, Inc. | ||
* | ||
* Marc Gauthier <[email protected]> | ||
* Pete Delaney <[email protected]> | ||
*/ | ||
|
||
#ifndef _XTENSA_INITIALIZE_MMU_H | ||
#define _XTENSA_INITIALIZE_MMU_H | ||
|
||
#ifdef __ASSEMBLY__ | ||
|
||
#define XTENSA_HWVERSION_RC_2009_0 230000 | ||
|
||
.macro initialize_mmu | ||
|
||
#if XCHAL_HAVE_S32C1I && (XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RC_2009_0) | ||
/* | ||
* We Have Atomic Operation Control (ATOMCTL) Register; Initialize it. | ||
* For details see Documentation/xtensa/atomctl.txt | ||
*/ | ||
#if XCHAL_DCACHE_IS_COHERENT | ||
movi a3, 0x25 /* For SMP/MX -- internal for writeback, | ||
* RCW otherwise | ||
*/ | ||
#else | ||
movi a3, 0x29 /* non-MX -- Most cores use Std Memory | ||
* Controlers which usually can't use RCW | ||
*/ | ||
#endif | ||
wsr a3, atomctl | ||
#endif /* XCHAL_HAVE_S32C1I && | ||
* (XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RC_2009_0) | ||
*/ | ||
|
||
.endm | ||
|
||
#endif /*__ASSEMBLY__*/ | ||
|
||
#endif /* _XTENSA_INITIALIZE_MMU_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters