diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-07-31 09:20:02 -0400 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-07-31 09:20:02 -0400 |
| commit | ceb0885d3b01bb2e2f18765770e212914f2864be (patch) | |
| tree | 0952c90cd49704a9172e985ca491d79b60c40bc8 | |
| parent | b31fc7af78e17b0203e1cd5a195c590e8adeae0d (diff) | |
| parent | 08458ef6eede6cf7d5a33c3a7c8bcdc3943012c2 (diff) | |
Merge branch 'misc' into devel
Conflicts:
arch/arm/mm/init.c
60 files changed, 475 insertions, 426 deletions
diff --git a/Documentation/arm/memory.txt b/Documentation/arm/memory.txt index eb0fae18ffb1..771d48d3b335 100644 --- a/Documentation/arm/memory.txt +++ b/Documentation/arm/memory.txt | |||
| @@ -33,7 +33,13 @@ ffff0000 ffff0fff CPU vector page. | |||
| 33 | 33 | ||
| 34 | fffe0000 fffeffff XScale cache flush area. This is used | 34 | fffe0000 fffeffff XScale cache flush area. This is used |
| 35 | in proc-xscale.S to flush the whole data | 35 | in proc-xscale.S to flush the whole data |
| 36 | cache. Free for other usage on non-XScale. | 36 | cache. (XScale does not have TCM.) |
| 37 | |||
| 38 | fffe8000 fffeffff DTCM mapping area for platforms with | ||
| 39 | DTCM mounted inside the CPU. | ||
| 40 | |||
| 41 | fffe0000 fffe7fff ITCM mapping area for platforms with | ||
| 42 | ITCM mounted inside the CPU. | ||
| 37 | 43 | ||
| 38 | fff00000 fffdffff Fixmap mapping region. Addresses provided | 44 | fff00000 fffdffff Fixmap mapping region. Addresses provided |
| 39 | by fix_to_virt() will be located here. | 45 | by fix_to_virt() will be located here. |
diff --git a/Documentation/arm/tcm.txt b/Documentation/arm/tcm.txt index 77fd9376e6d7..7c15871c1885 100644 --- a/Documentation/arm/tcm.txt +++ b/Documentation/arm/tcm.txt | |||
| @@ -19,8 +19,8 @@ defines a CPUID_TCM register that you can read out from the | |||
| 19 | system control coprocessor. Documentation from ARM can be found | 19 | system control coprocessor. Documentation from ARM can be found |
| 20 | at http://infocenter.arm.com, search for "TCM Status Register" | 20 | at http://infocenter.arm.com, search for "TCM Status Register" |
| 21 | to see documents for all CPUs. Reading this register you can | 21 | to see documents for all CPUs. Reading this register you can |
| 22 | determine if ITCM (bit 0) and/or DTCM (bit 16) is present in the | 22 | determine if ITCM (bits 1-0) and/or DTCM (bit 17-16) is present |
| 23 | machine. | 23 | in the machine. |
| 24 | 24 | ||
| 25 | There is further a TCM region register (search for "TCM Region | 25 | There is further a TCM region register (search for "TCM Region |
| 26 | Registers" at the ARM site) that can report and modify the location | 26 | Registers" at the ARM site) that can report and modify the location |
| @@ -35,7 +35,15 @@ The TCM memory can then be remapped to another address again using | |||
| 35 | the MMU, but notice that the TCM if often used in situations where | 35 | the MMU, but notice that the TCM if often used in situations where |
| 36 | the MMU is turned off. To avoid confusion the current Linux | 36 | the MMU is turned off. To avoid confusion the current Linux |
| 37 | implementation will map the TCM 1 to 1 from physical to virtual | 37 | implementation will map the TCM 1 to 1 from physical to virtual |
| 38 | memory in the location specified by the machine. | 38 | memory in the location specified by the kernel. Currently Linux |
| 39 | will map ITCM to 0xfffe0000 and on, and DTCM to 0xfffe8000 and | ||
| 40 | on, supporting a maximum of 32KiB of ITCM and 32KiB of DTCM. | ||
| 41 | |||
| 42 | Newer versions of the region registers also support dividing these | ||
| 43 | TCMs in two separate banks, so for example an 8KiB ITCM is divided | ||
| 44 | into two 4KiB banks with its own control registers. The idea is to | ||
| 45 | be able to lock and hide one of the banks for use by the secure | ||
| 46 | world (TrustZone). | ||
| 39 | 47 | ||
| 40 | TCM is used for a few things: | 48 | TCM is used for a few things: |
| 41 | 49 | ||
| @@ -65,18 +73,18 @@ in <asm/tcm.h>. Using this interface it is possible to: | |||
| 65 | memory. Such a heap is great for things like saving | 73 | memory. Such a heap is great for things like saving |
| 66 | device state when shutting off device power domains. | 74 | device state when shutting off device power domains. |
| 67 | 75 | ||
| 68 | A machine that has TCM memory shall select HAVE_TCM in | 76 | A machine that has TCM memory shall select HAVE_TCM from |
| 69 | arch/arm/Kconfig for itself, and then the | 77 | arch/arm/Kconfig for itself. Code that needs to use TCM shall |
| 70 | rest of the functionality will depend on the physical | 78 | #include <asm/tcm.h> |
| 71 | location and size of ITCM and DTCM to be defined in | ||
| 72 | mach/memory.h for the machine. Code that needs to use | ||
| 73 | TCM shall #include <asm/tcm.h> If the TCM is not located | ||
| 74 | at the place given in memory.h it will be moved using | ||
| 75 | the TCM Region registers. | ||
| 76 | 79 | ||
| 77 | Functions to go into itcm can be tagged like this: | 80 | Functions to go into itcm can be tagged like this: |
| 78 | int __tcmfunc foo(int bar); | 81 | int __tcmfunc foo(int bar); |
| 79 | 82 | ||
| 83 | Since these are marked to become long_calls and you may want | ||
| 84 | to have functions called locally inside the TCM without | ||
| 85 | wasting space, there is also the __tcmlocalfunc prefix that | ||
| 86 | will make the call relative. | ||
| 87 | |||
| 80 | Variables to go into dtcm can be tagged like this: | 88 | Variables to go into dtcm can be tagged like this: |
| 81 | int __tcmdata foo; | 89 | int __tcmdata foo; |
| 82 | 90 | ||
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4047f5724da3..ba1ac08b4e02 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -57,7 +57,7 @@ config GENERIC_CLOCKEVENTS | |||
| 57 | config GENERIC_CLOCKEVENTS_BROADCAST | 57 | config GENERIC_CLOCKEVENTS_BROADCAST |
| 58 | bool | 58 | bool |
| 59 | depends on GENERIC_CLOCKEVENTS | 59 | depends on GENERIC_CLOCKEVENTS |
| 60 | default y if SMP && !LOCAL_TIMERS | 60 | default y if SMP |
| 61 | 61 | ||
