blob: 76f46b313b4ed3ec4d38886e252882693e895a93 [file] [log] [blame]
vijay kumar47cb1d22015-04-06 15:33:00 +05301/* Copyright (c) 2009-2011,2015 The Linux Foundation. All rights reserved.
Kinson Chik18e36332011-08-15 10:07:28 -07002 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are met:
5 * * Redistributions of source code must retain the above copyright
6 * notice, this list of conditions and the following disclaimer.
7 * * Redistributions in binary form must reproduce the above copyright
8 * notice, this list of conditions and the following disclaimer in the
9 * documentation and/or other materials provided with the distribution.
Duy Truongf3ac7b32013-02-13 01:07:28 -080010 * * Neither the name of The Linux Foundation nor
Kinson Chik18e36332011-08-15 10:07:28 -070011 * the names of its contributors may be used to endorse or promote
12 * products derived from this software without specific prior written
13 * permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */
28
29#include <reg.h>
30#include <debug.h>
31#include <smem.h>
32#include <stdint.h>
Deepa Dinamanif551d052012-02-02 17:55:22 -080033#include <lib/ptable.h>
Kinson Chik18e36332011-08-15 10:07:28 -070034
35#define SIZE_1M (1024 * 1024)
36#define SIZE_8M (8 * SIZE_1M)
Kinson Chik2768bb42011-09-07 16:58:45 -070037#define SIZE_15M (15 * SIZE_1M)
Deepa Dinamanif551d052012-02-02 17:55:22 -080038#define SIZE_17M (17 * SIZE_1M)
Kinson Chik2768bb42011-09-07 16:58:45 -070039#define SIZE_23M (23 * SIZE_1M)
40#define SIZE_88M (11 * SIZE_8M)
vijay kumar47cb1d22015-04-06 15:33:00 +053041#define SIZE_38M (38 * SIZE_1M)
vijay kumarb768d062015-04-07 16:55:24 +053042#define SIZE_128M (16 * SIZE_8M)
Kinson Chik18e36332011-08-15 10:07:28 -070043
Ajay Dudanib01e5062011-12-03 23:23:42 -080044unsigned *target_atag_mem(unsigned *ptr)
Kinson Chik18e36332011-08-15 10:07:28 -070045{
46 struct smem_ram_ptable ram_ptable;
47 uint8_t i = 0;
Deepa Dinamanif551d052012-02-02 17:55:22 -080048 struct ptable *nand_ptable;
49 struct ptentry *dsp3_ptn;
50 unsigned int size;
Kinson Chik18e36332011-08-15 10:07:28 -070051
Ajay Dudanib01e5062011-12-03 23:23:42 -080052 if (smem_ram_ptable_init(&ram_ptable)) {
53 for (i = 0; i < ram_ptable.len; i++) {
Kinson Chik18e36332011-08-15 10:07:28 -070054 if (ram_ptable.parts[i].category == SDRAM &&
Ajay Dudanib01e5062011-12-03 23:23:42 -080055 ram_ptable.parts[i].type == SYS_MEMORY &&
56 ram_ptable.parts[i].start == 0x40000000) {
Kinson Chik2768bb42011-09-07 16:58:45 -070057 ASSERT(ram_ptable.parts[i].size >= SIZE_15M);
Kinson Chik18e36332011-08-15 10:07:28 -070058
59 *ptr++ = 4;
60 *ptr++ = 0x54410002;
Kinson Chik2768bb42011-09-07 16:58:45 -070061 *ptr++ = SIZE_15M;
Kinson Chik18e36332011-08-15 10:07:28 -070062 *ptr++ = ram_ptable.parts[i].start + SIZE_8M;
Kinson Chik3d9ca482011-08-29 16:08:58 -070063
64 *ptr++ = 4;
65 *ptr++ = 0x54410002;
Sridhar Anchab85cdd82015-05-01 14:22:29 +053066 *ptr++ = (SIZE_23M-SIZE_1M);
Kinson Chik2768bb42011-09-07 16:58:45 -070067 *ptr++ = ram_ptable.parts[i].start + SIZE_88M;
Deepa Dinamanif551d052012-02-02 17:55:22 -080068
vijay kumarb768d062015-04-07 16:55:24 +053069 if(ram_ptable.parts[i].size == 0x10000000) {
70 *ptr++ = 4;
71 *ptr++ = 0x54410002;
72 *ptr++ = SIZE_128M;
73 *ptr++ = ram_ptable.parts[i].start + SIZE_128M;
74 }
75
Deepa Dinamanif551d052012-02-02 17:55:22 -080076 nand_ptable = flash_get_ptable();
77 dsp3_ptn = ptable_find(nand_ptable, "dsp3");
78
79 /* Check for DSP3 partition and its size */
80 if(dsp3_ptn != NULL){
81 size = dsp3_ptn->start;
82 size += dsp3_ptn->length;
83 if(size != dsp3_ptn->start)
84 continue;
85 }
86
87 /*Add additional atag to pass DSP3 memory to kernel*/
88 *ptr++ = 4;
89 *ptr++ = 0x54410002;
90 *ptr++ = SIZE_17M;
91 *ptr++ = ram_ptable.parts[i].start + SIZE_88M + SIZE_23M;
92
Kinson Chik18e36332011-08-15 10:07:28 -070093 }
94 }
Ajay Dudanib01e5062011-12-03 23:23:42 -080095 } else {
Kinson Chik18e36332011-08-15 10:07:28 -070096 dprintf(CRITICAL, "ERROR: Unable to read RAM partition\n");
97 ASSERT(0);
98 }
99
100 return ptr;
101}
102
Kinson Chik28283082011-10-03 17:48:23 -0700103void *target_get_scratch_address(void)
104{
Ajay Dudanib01e5062011-12-03 23:23:42 -0800105 return ((void *)SCRATCH_ADDR);
Kinson Chik28283082011-10-03 17:48:23 -0700106}
107
Kinson Chik18e36332011-08-15 10:07:28 -0700108unsigned target_get_max_flash_size(void)
109{
vijay kumar47cb1d22015-04-06 15:33:00 +0530110 return (SIZE_38M);
Kinson Chik18e36332011-08-15 10:07:28 -0700111}