[PATCH 05/07] Basic IO mappings for mach-tcc8k

Linus Walleij linus.ml.walleij at gmail.com
Tue Mar 23 03:29:01 EDT 2010


2010/3/22 Hans J. Koch <hjk at linutronix.de>:

> Map the IO ranges of TCC8xxx peripherals.
> +       {
> +               .virtual        = INT_SRAM_BASE_VIRT,   /* Internal SRAM */
> +               .pfn            = __phys_to_pfn(INT_SRAM_BASE),
> +               .length         = INT_SRAM_SIZE,
> +               .type           = MT_DEVICE
> +       },

MT_DEVICE is probably inappropriate here as well.

> +       {
> +               .virtual        = DATA_TCM_BASE_VIRT,   /* Data TCM */
> +               .pfn            = __phys_to_pfn(DATA_TCM_BASE),
> +               .length         = DATA_TCM_SIZE,
> +               .type           = MT_DEVICE
> +       },

Actually, look close at your specs here, because you seem to have both
SRAM and TCM, usually you have ITCM+DTCM, so the thing that is
called SRAM may be something else.

Looking at the .h file:

+#define INT_SRAM_BASE          0x30000000
+#define INT_SRAM_SIZE          SZ_32K
(...)
+#define DATA_TCM_BASE          0xa0000000
+#define DATA_TCM_SIZE          SZ_8K

Check if the SRAM is really an SRAM and not ITCM (which can be
suspected). Also check that the DTCM is really such a thing.
(The code in arch/arm/kernel/tcm.c does this once you enable it,
it will scream if the config of the system does not match what the
CPU register is saying about ITCM+DTCM.)

If the DTCM is really an embedded TCM you can move it wherever
you want, even i physical memory space. It doesn't have to be on
0xa0000000, this is probably only the place where your boot code
locates it.

Yours,
Linus Walleij



More information about the linux-arm-kernel mailing list