summaryrefslogtreecommitdiff
path: root/arch/arm/cpu/arm926ejs/aspeed/TRAPTEST.c
blob: 72936c03e8e1911cabba8ba0c1c8195ba261be54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#define PLLTEST_C
static const char ThisFile[] = "PLLTEST.c";

#include "SWFUNC.H"

#include <COMMINF.H>
#include <TYPEDEF.H>
#include <IO.H>

#define ASTCHIP_2400    0
#define ASTCHIP_2300    1
#define ASTCHIP_1400    2
#define ASTCHIP_1300    3
#define ASTCHIP_1050    4

const UCHAR jVersion[] = "v.0.60.06";

typedef struct _TRAPINFO {
    USHORT  CPU_clk;
    UCHAR   CPU_AHB_ratio;
} _TrapInfo;

const _TrapInfo AST_default_trap_setting[] = {
    // CPU_clk, CPU_AHB_ratio
    { 384,      2 },            // AST2400 or AST1250 ( ASTCHIP_2400 )
    { 384,      2 },            // AST2300 ( ASTCHIP_2300 )
    { 384,   0xFF },            // AST1400 ( ASTCHIP_1400 )
    { 384,   0xFF },            // AST1300 ( ASTCHIP_1300 )
    { 384,      2 }             // AST1050 ( ASTCHIP_1050 )
};

int trap_function(int argc, char *argv[])
{
    UCHAR   chiptype;   
    ULONG   ulData, ulTemp; 
    UCHAR   status = TRUE;
    USHORT  val_trap;
    
    printf("**************************************************** \n");       
    printf("*** ASPEED Trap Test %s Log               *** \n", jVersion);
    printf("***                                   for u-boot *** \n");
    printf("**************************************************** \n"); 
    printf("\n"); 
    
    // Check chip type
    switch ( ReadSOC_DD( 0x1e6e2000 + 0x7c ) ) {   
        case 0x02010303 :
        case 0x02000303 : 
            printf("The chip is AST2400 or AST1250\n" ); 
            chiptype = ASTCHIP_2400; 
            break;
            
        case 0x02010103 :
        case 0x02000003 : 
            printf("The chip is AST1400\n" ); 
            chiptype = ASTCHIP_1400; 
            break;
            
        case 0x01010303 :
        case 0x01000003 : 
            printf("The chip is AST2300\n" ); 
            chiptype = ASTCHIP_2300; 
            break;
        
        case 0x01010203 : 
            printf("The chip is AST1050\n" ); 
            chiptype = ASTCHIP_1050; 
            break;
            
        case 0x01010003 : 
            printf("The chip is AST1300\n" ); 
            chiptype = ASTCHIP_1300; 
            break;
            
        default     : 
            printf ("Error Silicon Revision ID(SCU7C) %08lx!!!\n", ReadSOC_DD( 0x1e6e2000 + 0x7c ) ); 
            return(1);
    }
    
    WriteSOC_DD(0x1e6e2000, 0x1688A8A8);
    ulData = ReadSOC_DD(0x1e6e2070);
    
    // Check CPU clock
    ulTemp  = ulData;
    ulTemp &= 0x0300;
    ulTemp >>= 8;
    
    switch (ulTemp)
    {
        case 0x00:
            val_trap = 384;
            break;
        case 0x01:
            val_trap = 360;
            break;
        case 0x02:
            val_trap = 336;
            break;
        case 0x03:
            val_trap = 408;
            break;
    }
    
    if (AST_default_trap_setting[chiptype].CPU_clk != val_trap)
    {
        printf("[ERROR] CPU CLK: Correct is %d; Real is %d \n", AST_default_trap_setting[chiptype].CPU_clk, val_trap);	
    	status = FALSE;
    }
           	
    // Check cpu_ahb_ratio
    ulTemp  = ulData;
    ulTemp &= 0x0c00;
    ulTemp >>= 10;
    
    switch (ulTemp)
    {
        case 0x00:
            val_trap = 1;
            break;
        case 0x01:
            val_trap = 2;
            break;
        case 0x02:
            val_trap = 4;
            break;
        case 0x03:
            val_trap = 3;
            break;
    }
    
    if (AST_default_trap_setting[chiptype].CPU_AHB_ratio != val_trap)
    {
        printf("[ERROR] CPU:AHB: Correct is %x:1; Real is %x:1 \n", AST_default_trap_setting[chiptype].CPU_AHB_ratio, val_trap);	
    	status = FALSE;
    }
    
    if ( status == TRUE )
        printf("[PASS] hardware trap for CPU clock and CPU\\AHB ratio.\n");
    
    return status;
}