linux/arch/csky/kernel
Guo Ren f525bb2c9e csky: Tightly-Coupled Memory or Sram support
The implementation are not only used by TCM but also used by sram on
SOC bus. It follow existed linux tcm software interface, so that old
tcm application codes could be re-used directly.

Software interface list in asm/tcm.h:
 - Variables/Const: 	__tcmdata, __tcmconst
 - Functions:		__tcmfunc, __tcmlocalfunc
 - Malloc/Free:		tcm_alloc, tcm_free

In linux menuconfig:
 - Choose a TCM contain instrctions + data or separated in ITCM/DTCM.
 - Determine TCM_BASE (DTCM_BASE) in phyiscal address.
 - Determine size of TCM or ITCM(DTCM) in page counts.

Here is hello tcm example from Documentation/arm/tcm.rst which could
be directly used:

/* Uninitialized data */
static u32 __tcmdata tcmvar;
/* Initialized data */
static u32 __tcmdata tcmassigned = 0x2BADBABEU;
/* Constant */
static const u32 __tcmconst tcmconst = 0xCAFEBABEU;

static void __tcmlocalfunc tcm_to_tcm(void)
{
	int i;
	for (i = 0; i < 100; i++)
		tcmvar ++;
}

static void __tcmfunc hello_tcm(void)
{
	/* Some abstract code that runs in ITCM */
	int i;
	for (i = 0; i < 100; i++) {
		tcmvar ++;
	}
	tcm_to_tcm();
}

static void __init test_tcm(void)
{
	u32 *tcmem;
	int i;

	hello_tcm();
	printk("Hello TCM executed from ITCM RAM\n");

	printk("TCM variable from testrun: %u @ %p\n", tcmvar, &tcmvar);
	tcmvar = 0xDEADBEEFU;
	printk("TCM variable: 0x%x @ %p\n", tcmvar, &tcmvar);

	printk("TCM assigned variable: 0x%x @ %p\n", tcmassigned, &tcmassigned);

	printk("TCM constant: 0x%x @ %p\n", tcmconst, &tcmconst);

	/* Allocate some TCM memory from the pool */
	tcmem = tcm_alloc(20);
	if (tcmem) {
		printk("TCM Allocated 20 bytes of TCM @ %p\n", tcmem);
		tcmem[0] = 0xDEADBEEFU;
		tcmem[1] = 0x2BADBABEU;
		tcmem[2] = 0xCAFEBABEU;
		tcmem[3] = 0xDEADBEEFU;
		tcmem[4] = 0x2BADBABEU;
		for (i = 0; i < 5; i++)
			printk("TCM tcmem[%d] = %08x\n", i, tcmem[i]);
		tcm_free(tcmem, 20);
	}
}

TODO:
 - Separate fixup mapping from highmem
 - Support abiv1

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
2020-02-21 15:43:24 +08:00
..
asm-offsets.c csky: remove unused members in processor.h 2018-12-31 23:16:00 +08:00
atomic.S csky: Reconstruct signal processing 2019-04-22 13:44:57 +08:00
cpu-probe.c csky: Exception handling and mm-fault 2018-10-25 23:36:19 +08:00
dumpstack.c csky: Fixup dead loop in show_stack 2019-02-13 09:48:14 +08:00
entry.S sched/rt, csky: Use CONFIG_PREEMPTION 2019-12-08 14:37:33 +01:00
ftrace.c csky/ftrace: Add dynamic function tracer (include graph tracer) 2019-04-22 13:44:57 +08:00
head.S csky: Support vmlinux bootup with MMU off 2019-04-22 13:44:57 +08:00
irq.c csky: IRQ handling 2018-10-26 00:54:22 +08:00
Makefile treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
module.c csky: fixup compile error with CPU 810. 2019-01-10 04:37:37 -08:00
perf_callchain.c csky: Add perf callchain support 2019-04-22 13:44:57 +08:00
perf_event.c csky: Move static keyword to the front of declaration 2019-09-30 11:50:49 +08:00
perf_regs.c csky: Add support for perf registers sampling 2019-04-22 13:44:57 +08:00
power.c csky: Library functions 2018-10-26 00:54:24 +08:00
process.c csky: Initial stack protector support 2020-02-21 15:43:24 +08:00
ptrace.c csky/syscall_trace: Fixup return processing flow 2019-04-22 15:55:28 +08:00
setup.c arch/csky/setup: Drop dummy_con initialization 2020-01-14 15:29:16 +01:00
signal.c Merge branch 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2019-07-08 21:48:15 -07:00
smp.c csky: Revert mmu ASID mechanism 2019-07-19 14:21:36 +08:00
stacktrace.c csky: stacktrace supported. 2018-12-31 23:12:22 +08:00
syscall_table.c csky: System Call 2018-10-25 23:36:19 +08:00
syscall.c csky: System Call 2018-10-25 23:36:19 +08:00
time.c csky: Process management and Signal 2018-10-26 00:54:13 +08:00
traps.c arch/csky patches for 5.3-rc1 2019-07-19 12:15:33 -07:00
vdso.c csky: VDSO and rt_sigreturn 2018-10-26 00:54:22 +08:00
vmlinux.lds.S csky: Tightly-Coupled Memory or Sram support 2020-02-21 15:43:24 +08:00