forked from Ivasoft/openwrt
rename target/linux/generic-2.6 to generic
SVN-Revision: 21952
This commit is contained in:
19
target/linux/generic/files/crypto/ocf/kirkwood/Makefile
Normal file
19
target/linux/generic/files/crypto/ocf/kirkwood/Makefile
Normal file
@@ -0,0 +1,19 @@
|
||||
# for SGlinux builds
|
||||
-include $(ROOTDIR)/modules/.config
|
||||
|
||||
obj-$(CONFIG_OCF_KIRKWOOD) += mv_cesa.o
|
||||
|
||||
mv_cesa-y := cesa/mvCesa.o cesa/mvLru.o cesa/mvMD5.o cesa/mvSHA1.o cesa/AES/mvAesAlg.o cesa/AES/mvAesApi.o cesa/mvCesaDebug.o cesa_ocf_drv.o
|
||||
|
||||
# Extra objects required by the CESA driver
|
||||
mv_cesa-y += mvHal/kw_family/ctrlEnv/mvCtrlEnvLib.o mvHal/kw_family/boardEnv/mvBoardEnvLib.o mvHal/mv_hal/twsi/mvTwsi.o mvHal/kw_family/ctrlEnv/sys/mvCpuIf.o mvHal/kw_family/ctrlEnv/sys/mvAhbToMbus.o mvHal/kw_family/ctrlEnv/sys/mvSysDram.o mvHal/linux_oss/mvOs.o mvHal/kw_family/ctrlEnv/mvCtrlEnvAddrDec.o mvHal/mv_hal/gpp/mvGpp.o mvHal/kw_family/ctrlEnv/sys/mvSysPex.o mvHal/mv_hal/pex/mvPex.o mvHal/kw_family/boardEnv/mvBoardEnvSpec.o mvHal/common/mvCommon.o mvHal/common/mvDebug.o mvHal/kw_family/ctrlEnv/sys/mvSysCesa.o
|
||||
|
||||
ifdef src
|
||||
EXTRA_CFLAGS += -I$(src)/.. -I$(src)/cesa -I$(src)/mvHal -I$(src)/mvHal/common -I$(src)/mvHal/kw_family -I$(src)/mvHal/mv_hal -I$(src)/mvHal/linux_oss -I$(src)
|
||||
endif
|
||||
|
||||
EXTRA_CFLAGS += -DMV_LINUX -DMV_CPU_LE -DMV_ARM -DMV_INCLUDE_CESA -DMV_INCLUDE_PEX -DMV_CACHE_COHERENCY=3
|
||||
ifdef TOPDIR
|
||||
-include $(TOPDIR)/Rules.make
|
||||
endif
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/* mvAes.h v2.0 August '99
|
||||
* Reference ANSI C code
|
||||
*/
|
||||
|
||||
/* AES Cipher header file for ANSI C Submissions
|
||||
Lawrence E. Bassham III
|
||||
Computer Security Division
|
||||
National Institute of Standards and Technology
|
||||
|
||||
April 15, 1998
|
||||
|
||||
This sample is to assist implementers developing to the Cryptographic
|
||||
API Profile for AES Candidate Algorithm Submissions. Please consult this
|
||||
document as a cross-reference.
|
||||
|
||||
ANY CHANGES, WHERE APPROPRIATE, TO INFORMATION PROVIDED IN THIS FILE
|
||||
MUST BE DOCUMENTED. CHANGES ARE ONLY APPROPRIATE WHERE SPECIFIED WITH
|
||||
THE STRING "CHANGE POSSIBLE". FUNCTION CALLS AND THEIR PARAMETERS CANNOT
|
||||
BE CHANGED. STRUCTURES CAN BE ALTERED TO ALLOW IMPLEMENTERS TO INCLUDE
|
||||
IMPLEMENTATION SPECIFIC INFORMATION.
|
||||
*/
|
||||
|
||||
/* Includes:
|
||||
Standard include files
|
||||
*/
|
||||
|
||||
#include "mvOs.h"
|
||||
|
||||
|
||||
/* Error Codes - CHANGE POSSIBLE: inclusion of additional error codes */
|
||||
|
||||
/* Key direction is invalid, e.g., unknown value */
|
||||
#define AES_BAD_KEY_DIR -1
|
||||
|
||||
/* Key material not of correct length */
|
||||
#define AES_BAD_KEY_MAT -2
|
||||
|
||||
/* Key passed is not valid */
|
||||
#define AES_BAD_KEY_INSTANCE -3
|
||||
|
||||
/* Params struct passed to cipherInit invalid */
|
||||
#define AES_BAD_CIPHER_MODE -4
|
||||
|
||||
/* Cipher in wrong state (e.g., not initialized) */
|
||||
#define AES_BAD_CIPHER_STATE -5
|
||||
|
||||
#define AES_BAD_CIPHER_INSTANCE -7
|
||||
|
||||
|
||||
/* Function protoypes */
|
||||
/* CHANGED: makeKey(): parameter blockLen added
|
||||
this parameter is absolutely necessary if you want to
|
||||
setup the round keys in a variable block length setting
|
||||
cipherInit(): parameter blockLen added (for obvious reasons)
|
||||
*/
|
||||
int aesMakeKey(MV_U8 *expandedKey, MV_U8 *keyMaterial, int keyLen, int blockLen);
|
||||
int aesBlockEncrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen,
|
||||
MV_U32 *plain, int numBlocks, MV_U32 *cipher);
|
||||
int aesBlockDecrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen,
|
||||
MV_U32 *plain, int numBlocks, MV_U32 *cipher);
|
||||
|
||||
|
||||
@@ -0,0 +1,317 @@
|
||||
/* rijndael-alg-ref.c v2.0 August '99
|
||||
* Reference ANSI C code
|
||||
* authors: Paulo Barreto
|
||||
* Vincent Rijmen, K.U.Leuven
|
||||
*
|
||||
* This code is placed in the public domain.
|
||||
*/
|
||||
|
||||
#include "mvOs.h"
|
||||
|
||||
#include "mvAesAlg.h"
|
||||
|
||||
#include "mvAesBoxes.dat"
|
||||
|
||||
|
||||
MV_U8 mul1(MV_U8 aa, MV_U8 bb);
|
||||
void KeyAddition(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC], MV_U8 BC);
|
||||
void ShiftRow128Enc(MV_U8 a[4][MAXBC]);
|
||||
void ShiftRow128Dec(MV_U8 a[4][MAXBC]);
|
||||
void Substitution(MV_U8 a[4][MAXBC], MV_U8 box[256]);
|
||||
void MixColumn(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC]);
|
||||
void InvMixColumn(MV_U8 a[4][MAXBC]);
|
||||
|
||||
|
||||
#define mul(aa, bb) (mask[bb] & Alogtable[aa + Logtable[bb]])
|
||||
|
||||
MV_U8 mul1(MV_U8 aa, MV_U8 bb)
|
||||
{
|
||||
return mask[bb] & Alogtable[aa + Logtable[bb]];
|
||||
}
|
||||
|
||||
|
||||
void KeyAddition(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC], MV_U8 BC)
|
||||
{
|
||||
/* Exor corresponding text input and round key input bytes
|
||||
*/
|
||||
((MV_U32*)(&(a[0][0])))[0] ^= ((MV_U32*)(&(rk[0][0])))[0];
|
||||
((MV_U32*)(&(a[1][0])))[0] ^= ((MV_U32*)(&(rk[1][0])))[0];
|
||||
((MV_U32*)(&(a[2][0])))[0] ^= ((MV_U32*)(&(rk[2][0])))[0];
|
||||
((MV_U32*)(&(a[3][0])))[0] ^= ((MV_U32*)(&(rk[3][0])))[0];
|
||||
|
||||
}
|
||||
|
||||
void ShiftRow128Enc(MV_U8 a[4][MAXBC]) {
|
||||
/* Row 0 remains unchanged
|
||||
* The other three rows are shifted a variable amount
|
||||
*/
|
||||
MV_U8 tmp[MAXBC];
|
||||
|
||||
tmp[0] = a[1][1];
|
||||
tmp[1] = a[1][2];
|
||||
tmp[2] = a[1][3];
|
||||
tmp[3] = a[1][0];
|
||||
|
||||
((MV_U32*)(&(a[1][0])))[0] = ((MV_U32*)(&(tmp[0])))[0];
|
||||
/*
|
||||
a[1][0] = tmp[0];
|
||||
a[1][1] = tmp[1];
|
||||
a[1][2] = tmp[2];
|
||||
a[1][3] = tmp[3];
|
||||
*/
|
||||
tmp[0] = a[2][2];
|
||||
tmp[1] = a[2][3];
|
||||
tmp[2] = a[2][0];
|
||||
tmp[3] = a[2][1];
|
||||
|
||||
((MV_U32*)(&(a[2][0])))[0] = ((MV_U32*)(&(tmp[0])))[0];
|
||||
/*
|
||||
a[2][0] = tmp[0];
|
||||
a[2][1] = tmp[1];
|
||||
a[2][2] = tmp[2];
|
||||
a[2][3] = tmp[3];
|
||||
*/
|
||||
tmp[0] = a[3][3];
|
||||
tmp[1] = a[3][0];
|
||||
tmp[2] = a[3][1];
|
||||
tmp[3] = a[3][2];
|
||||
|
||||
((MV_U32*)(&(a[3][0])))[0] = ((MV_U32*)(&(tmp[0])))[0];
|
||||
/*
|
||||
a[3][0] = tmp[0];
|
||||
a[3][1] = tmp[1];
|
||||
a[3][2] = tmp[2];
|
||||
a[3][3] = tmp[3];
|
||||
*/
|
||||
}
|
||||
|
||||
void ShiftRow128Dec(MV_U8 a[4][MAXBC]) {
|
||||
/* Row 0 remains unchanged
|
||||
* The other three rows are shifted a variable amount
|
||||
*/
|
||||
MV_U8 tmp[MAXBC];
|
||||
|
||||
tmp[0] = a[1][3];
|
||||
tmp[1] = a[1][0];
|
||||
tmp[2] = a[1][1];
|
||||
tmp[3] = a[1][2];
|
||||
|
||||
((MV_U32*)(&(a[1][0])))[0] = ((MV_U32*)(&(tmp[0])))[0];
|
||||
/*
|
||||
a[1][0] = tmp[0];
|
||||
a[1][1] = tmp[1];
|
||||
a[1][2] = tmp[2];
|
||||
a[1][3] = tmp[3];
|
||||
*/
|
||||
|
||||
tmp[0] = a[2][2];
|
||||
tmp[1] = a[2][3];
|
||||
tmp[2] = a[2][0];
|
||||
tmp[3] = a[2][1];
|
||||
|
||||
((MV_U32*)(&(a[2][0])))[0] = ((MV_U32*)(&(tmp[0])))[0];
|
||||
/*
|
||||
a[2][0] = tmp[0];
|
||||
a[2][1] = tmp[1];
|
||||
a[2][2] = tmp[2];
|
||||
a[2][3] = tmp[3];
|
||||
*/
|
||||
|
||||
tmp[0] = a[3][1];
|
||||
tmp[1] = a[3][2];
|
||||
tmp[2] = a[3][3];
|
||||
tmp[3] = a[3][0];
|
||||
|
||||
((MV_U32*)(&(a[3][0])))[0] = ((MV_U32*)(&(tmp[0])))[0];
|
||||
/*
|
||||
a[3][0] = tmp[0];
|
||||
a[3][1] = tmp[1];
|
||||
a[3][2] = tmp[2];
|
||||
a[3][3] = tmp[3];
|
||||
*/
|
||||
}
|
||||
|
||||
void Substitution(MV_U8 a[4][MAXBC], MV_U8 box[256]) {
|
||||
/* Replace every byte of the input by the byte at that place
|
||||
* in the nonlinear S-box
|
||||
*/
|
||||
int i, j;
|
||||
|
||||
for(i = 0; i < 4; i++)
|
||||
for(j = 0; j < 4; j++) a[i][j] = box[a[i][j]] ;
|
||||
}
|
||||
|
||||
void MixColumn(MV_U8 a[4][MAXBC], MV_U8 rk[4][MAXBC]) {
|
||||
/* Mix the four bytes of every column in a linear way
|
||||
*/
|
||||
MV_U8 b[4][MAXBC];
|
||||
int i, j;
|
||||
|
||||
for(j = 0; j < 4; j++){
|
||||
b[0][j] = mul(25,a[0][j]) ^ mul(1,a[1][j]) ^ a[2][j] ^ a[3][j];
|
||||
b[1][j] = mul(25,a[1][j]) ^ mul(1,a[2][j]) ^ a[3][j] ^ a[0][j];
|
||||
b[2][j] = mul(25,a[2][j]) ^ mul(1,a[3][j]) ^ a[0][j] ^ a[1][j];
|
||||
b[3][j] = mul(25,a[3][j]) ^ mul(1,a[0][j]) ^ a[1][j] ^ a[2][j];
|
||||
}
|
||||
for(i = 0; i < 4; i++)
|
||||
/*for(j = 0; j < BC; j++) a[i][j] = b[i][j];*/
|
||||
((MV_U32*)(&(a[i][0])))[0] = ((MV_U32*)(&(b[i][0])))[0] ^ ((MV_U32*)(&(rk[i][0])))[0];;
|
||||
}
|
||||
|
||||
void InvMixColumn(MV_U8 a[4][MAXBC]) {
|
||||
/* Mix the four bytes of every column in a linear way
|
||||
* This is the opposite operation of Mixcolumn
|
||||
*/
|
||||
MV_U8 b[4][MAXBC];
|
||||
int i, j;
|
||||
|
||||
for(j = 0; j < 4; j++){
|
||||
b[0][j] = mul(223,a[0][j]) ^ mul(104,a[1][j]) ^ mul(238,a[2][j]) ^ mul(199,a[3][j]);
|
||||
b[1][j] = mul(223,a[1][j]) ^ mul(104,a[2][j]) ^ mul(238,a[3][j]) ^ mul(199,a[0][j]);
|
||||
b[2][j] = mul(223,a[2][j]) ^ mul(104,a[3][j]) ^ mul(238,a[0][j]) ^ mul(199,a[1][j]);
|
||||
b[3][j] = mul(223,a[3][j]) ^ mul(104,a[0][j]) ^ mul(238,a[1][j]) ^ mul(199,a[2][j]);
|
||||
}
|
||||
for(i = 0; i < 4; i++)
|
||||
/*for(j = 0; j < BC; j++) a[i][j] = b[i][j];*/
|
||||
((MV_U32*)(&(a[i][0])))[0] = ((MV_U32*)(&(b[i][0])))[0];
|
||||
}
|
||||
|
||||
int rijndaelKeySched (MV_U8 k[4][MAXKC], int keyBits, int blockBits, MV_U8 W[MAXROUNDS+1][4][MAXBC])
|
||||
{
|
||||
/* Calculate the necessary round keys
|
||||
* The number of calculations depends on keyBits and blockBits
|
||||
*/
|
||||
int KC, BC, ROUNDS;
|
||||
int i, j, t, rconpointer = 0;
|
||||
MV_U8 tk[4][MAXKC];
|
||||
|
||||
switch (keyBits) {
|
||||
case 128: KC = 4; break;
|
||||
case 192: KC = 6; break;
|
||||
case 256: KC = 8; break;
|
||||
default : return (-1);
|
||||
}
|
||||
|
||||
switch (blockBits) {
|
||||
case 128: BC = 4; break;
|
||||
case 192: BC = 6; break;
|
||||
case 256: BC = 8; break;
|
||||
default : return (-2);
|
||||
}
|
||||
|
||||
switch (keyBits >= blockBits ? keyBits : blockBits) {
|
||||
case 128: ROUNDS = 10; break;
|
||||
case 192: ROUNDS = 12; break;
|
||||
case 256: ROUNDS = 14; break;
|
||||
default : return (-3); /* this cannot happen */
|
||||
}
|
||||
|
||||
|
||||
for(j = 0; j < KC; j++)
|
||||
for(i = 0; i < 4; i++)
|
||||
tk[i][j] = k[i][j];
|
||||
t = 0;
|
||||
/* copy values into round key array */
|
||||
for(j = 0; (j < KC) && (t < (ROUNDS+1)*BC); j++, t++)
|
||||
for(i = 0; i < 4; i++) W[t / BC][i][t % BC] = tk[i][j];
|
||||
|
||||
while (t < (ROUNDS+1)*BC) { /* while not enough round key material calculated */
|
||||
/* calculate new values */
|
||||
for(i = 0; i < 4; i++)
|
||||
tk[i][0] ^= S[tk[(i+1)%4][KC-1]];
|
||||
tk[0][0] ^= rcon[rconpointer++];
|
||||
|
||||
if (KC != 8)
|
||||
for(j = 1; j < KC; j++)
|
||||
for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1];
|
||||
else {
|
||||
for(j = 1; j < KC/2; j++)
|
||||
for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1];
|
||||
for(i = 0; i < 4; i++) tk[i][KC/2] ^= S[tk[i][KC/2 - 1]];
|
||||
for(j = KC/2 + 1; j < KC; j++)
|
||||
for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1];
|
||||
}
|
||||
/* copy values into round key array */
|
||||
for(j = 0; (j < KC) && (t < (ROUNDS+1)*BC); j++, t++)
|
||||
for(i = 0; i < 4; i++) W[t / BC][i][t % BC] = tk[i][j];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int rijndaelEncrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds)
|
||||
{
|
||||
/* Encryption of one block.
|
||||
*/
|
||||
int r, BC, ROUNDS;
|
||||
|
||||
BC = 4;
|
||||
ROUNDS = rounds;
|
||||
|
||||
/* begin with a key addition
|
||||
*/
|
||||
|
||||
KeyAddition(a,rk[0],BC);
|
||||
|
||||
/* ROUNDS-1 ordinary rounds
|
||||
*/
|
||||
for(r = 1; r < ROUNDS; r++) {
|
||||
Substitution(a,S);
|
||||
ShiftRow128Enc(a);
|
||||
MixColumn(a, rk[r]);
|
||||
/*KeyAddition(a,rk[r],BC);*/
|
||||
}
|
||||
|
||||
/* Last round is special: there is no MixColumn
|
||||
*/
|
||||
Substitution(a,S);
|
||||
ShiftRow128Enc(a);
|
||||
KeyAddition(a,rk[ROUNDS],BC);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int rijndaelDecrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds)
|
||||
{
|
||||
int r, BC, ROUNDS;
|
||||
|
||||
BC = 4;
|
||||
ROUNDS = rounds;
|
||||
|
||||
/* To decrypt: apply the inverse operations of the encrypt routine,
|
||||
* in opposite order
|
||||
*
|
||||
* (KeyAddition is an involution: it 's equal to its inverse)
|
||||
* (the inverse of Substitution with table S is Substitution with the inverse table of S)
|
||||
* (the inverse of Shiftrow is Shiftrow over a suitable distance)
|
||||
*/
|
||||
|
||||
/* First the special round:
|
||||
* without InvMixColumn
|
||||
* with extra KeyAddition
|
||||
*/
|
||||
KeyAddition(a,rk[ROUNDS],BC);
|
||||
ShiftRow128Dec(a);
|
||||
Substitution(a,Si);
|
||||
|
||||
/* ROUNDS-1 ordinary rounds
|
||||
*/
|
||||
for(r = ROUNDS-1; r > 0; r--) {
|
||||
KeyAddition(a,rk[r],BC);
|
||||
InvMixColumn(a);
|
||||
ShiftRow128Dec(a);
|
||||
Substitution(a,Si);
|
||||
|
||||
}
|
||||
|
||||
/* End with the extra key addition
|
||||
*/
|
||||
|
||||
KeyAddition(a,rk[0],BC);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/* rijndael-alg-ref.h v2.0 August '99
|
||||
* Reference ANSI C code
|
||||
* authors: Paulo Barreto
|
||||
* Vincent Rijmen, K.U.Leuven
|
||||
*/
|
||||
#ifndef __RIJNDAEL_ALG_H
|
||||
#define __RIJNDAEL_ALG_H
|
||||
|
||||
#define MAXBC (128/32)
|
||||
#define MAXKC (256/32)
|
||||
#define MAXROUNDS 14
|
||||
|
||||
|
||||
int rijndaelKeySched (MV_U8 k[4][MAXKC], int keyBits, int blockBits, MV_U8 rk[MAXROUNDS+1][4][MAXBC]);
|
||||
|
||||
int rijndaelEncrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds);
|
||||
int rijndaelDecrypt128(MV_U8 a[4][MAXBC], MV_U8 rk[MAXROUNDS+1][4][MAXBC], int rounds);
|
||||
|
||||
#endif /* __RIJNDAEL_ALG_H */
|
||||
@@ -0,0 +1,312 @@
|
||||
/* rijndael-api-ref.c v2.1 April 2000
|
||||
* Reference ANSI C code
|
||||
* authors: v2.0 Paulo Barreto
|
||||
* Vincent Rijmen, K.U.Leuven
|
||||
* v2.1 Vincent Rijmen, K.U.Leuven
|
||||
*
|
||||
* This code is placed in the public domain.
|
||||
*/
|
||||
#include "mvOs.h"
|
||||
|
||||
#include "mvAes.h"
|
||||
#include "mvAesAlg.h"
|
||||
|
||||
|
||||
/* Defines:
|
||||
Add any additional defines you need
|
||||
*/
|
||||
|
||||
#define MODE_ECB 1 /* Are we ciphering in ECB mode? */
|
||||
#define MODE_CBC 2 /* Are we ciphering in CBC mode? */
|
||||
#define MODE_CFB1 3 /* Are we ciphering in 1-bit CFB mode? */
|
||||
|
||||
|
||||
int aesMakeKey(MV_U8 *expandedKey, MV_U8 *keyMaterial, int keyLen, int blockLen)
|
||||
{
|
||||
MV_U8 W[MAXROUNDS+1][4][MAXBC];
|
||||
MV_U8 k[4][MAXKC];
|
||||
MV_U8 j;
|
||||
int i, rounds, KC;
|
||||
|
||||
if (expandedKey == NULL)
|
||||
{
|
||||
return AES_BAD_KEY_INSTANCE;
|
||||
}
|
||||
|
||||
if (!((keyLen == 128) || (keyLen == 192) || (keyLen == 256)))
|
||||
{
|
||||
return AES_BAD_KEY_MAT;
|
||||
}
|
||||
|
||||
if (keyMaterial == NULL)
|
||||
{
|
||||
return AES_BAD_KEY_MAT;
|
||||
}
|
||||
|
||||
/* initialize key schedule: */
|
||||
for(i=0; i<keyLen/8; i++)
|
||||
{
|
||||
j = keyMaterial[i];
|
||||
k[i % 4][i / 4] = j;
|
||||
}
|
||||
|
||||
rijndaelKeySched (k, keyLen, blockLen, W);
|
||||
#ifdef MV_AES_DEBUG
|
||||
{
|
||||
MV_U8* pW = &W[0][0][0];
|
||||
int x;
|
||||
|
||||
mvOsPrintf("Expended Key: size = %d\n", sizeof(W));
|
||||
for(i=0; i<sizeof(W); i++)
|
||||
{
|
||||
mvOsPrintf("%02x ", pW[i]);
|
||||
}
|
||||
for(i=0; i<MAXROUNDS+1; i++)
|
||||
{
|
||||
mvOsPrintf("\n Round #%02d: ", i);
|
||||
for(x=0; x<MAXBC; x++)
|
||||
{
|
||||
mvOsPrintf("%02x%02x%02x%02x ",
|
||||
W[i][0][x], W[i][1][x], W[i][2][x], W[i][3][x]);
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
}
|
||||
}
|
||||
#endif /* MV_AES_DEBUG */
|
||||
switch (keyLen)
|
||||
{
|
||||
case 128:
|
||||
rounds = 10;
|
||||
KC = 4;
|
||||
break;
|
||||
case 192:
|
||||
rounds = 12;
|
||||
KC = 6;
|
||||
break;
|
||||
case 256:
|
||||
rounds = 14;
|
||||
KC = 8;
|
||||
break;
|
||||
default :
|
||||
return (-1);
|
||||
}
|
||||
|
||||
for(i=0; i<MAXBC; i++)
|
||||
{
|
||||
for(j=0; j<4; j++)
|
||||
{
|
||||
expandedKey[i*4+j] = W[rounds][j][i];
|
||||
}
|
||||
}
|
||||
for(; i<KC; i++)
|
||||
{
|
||||
for(j=0; j<4; j++)
|
||||
{
|
||||
expandedKey[i*4+j] = W[rounds-1][j][i+MAXBC-KC];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int aesBlockEncrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen,
|
||||
MV_U32 *plain, int numBlocks, MV_U32 *cipher)
|
||||
{
|
||||
int i, j, t;
|
||||
MV_U8 block[4][MAXBC];
|
||||
int rounds;
|
||||
char *input, *outBuffer;
|
||||
|
||||
input = (char*)plain;
|
||||
outBuffer = (char*)cipher;
|
||||
|
||||
/* check parameter consistency: */
|
||||
if( (expandedKey == NULL) || ((keyLen != 128) && (keyLen != 192) && (keyLen != 256)))
|
||||
{
|
||||
return AES_BAD_KEY_MAT;
|
||||
}
|
||||
if ((mode != MODE_ECB && mode != MODE_CBC))
|
||||
{
|
||||
return AES_BAD_CIPHER_STATE;
|
||||
}
|
||||
|
||||
switch (keyLen)
|
||||
{
|
||||
case 128: rounds = 10; break;
|
||||
case 192: rounds = 12; break;
|
||||
case 256: rounds = 14; break;
|
||||
default : return (-3); /* this cannot happen */
|
||||
}
|
||||
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case MODE_ECB:
|
||||
for (i = 0; i < numBlocks; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for(t = 0; t < 4; t++)
|
||||
/* parse input stream into rectangular array */
|
||||
block[t][j] = input[16*i+4*j+t] & 0xFF;
|
||||
}
|
||||
rijndaelEncrypt128(block, (MV_U8 (*)[4][MAXBC])expandedKey, rounds);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
/* parse rectangular array into output ciphertext bytes */
|
||||
for(t = 0; t < 4; t++)
|
||||
outBuffer[16*i+4*j+t] = (MV_U8) block[t][j];
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MODE_CBC:
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for(t = 0; t < 4; t++)
|
||||
/* parse initial value into rectangular array */
|
||||
block[t][j] = IV[t+4*j] & 0xFF;
|
||||
}
|
||||
for (i = 0; i < numBlocks; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for(t = 0; t < 4; t++)
|
||||
/* parse input stream into rectangular array and exor with
|
||||
IV or the previous ciphertext */
|
||||
block[t][j] ^= input[16*i+4*j+t] & 0xFF;
|
||||
}
|
||||
rijndaelEncrypt128(block, (MV_U8 (*)[4][MAXBC])expandedKey, rounds);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
/* parse rectangular array into output ciphertext bytes */
|
||||
for(t = 0; t < 4; t++)
|
||||
outBuffer[16*i+4*j+t] = (MV_U8) block[t][j];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: return AES_BAD_CIPHER_STATE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int aesBlockDecrypt128(MV_U8 mode, MV_U8 *IV, MV_U8 *expandedKey, int keyLen,
|
||||
MV_U32 *srcData, int numBlocks, MV_U32 *dstData)
|
||||
{
|
||||
int i, j, t;
|
||||
MV_U8 block[4][MAXBC];
|
||||
MV_U8 iv[4][MAXBC];
|
||||
int rounds;
|
||||
char *input, *outBuffer;
|
||||
|
||||
input = (char*)srcData;
|
||||
outBuffer = (char*)dstData;
|
||||
|
||||
if (expandedKey == NULL)
|
||||
{
|
||||
return AES_BAD_KEY_MAT;
|
||||
}
|
||||
|
||||
/* check parameter consistency: */
|
||||
if (keyLen != 128 && keyLen != 192 && keyLen != 256)
|
||||
{
|
||||
return AES_BAD_KEY_MAT;
|
||||
}
|
||||
if ((mode != MODE_ECB && mode != MODE_CBC))
|
||||
{
|
||||
return AES_BAD_CIPHER_STATE;
|
||||
}
|
||||
|
||||
switch (keyLen)
|
||||
{
|
||||
case 128: rounds = 10; break;
|
||||
case 192: rounds = 12; break;
|
||||
case 256: rounds = 14; break;
|
||||
default : return (-3); /* this cannot happen */
|
||||
}
|
||||
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case MODE_ECB:
|
||||
for (i = 0; i < numBlocks; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for(t = 0; t < 4; t++)
|
||||
{
|
||||
/* parse input stream into rectangular array */
|
||||
block[t][j] = input[16*i+4*j+t] & 0xFF;
|
||||
}
|
||||
}
|
||||
rijndaelDecrypt128(block, (MV_U8 (*)[4][MAXBC])expandedKey, rounds);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
/* parse rectangular array into output ciphertext bytes */
|
||||
for(t = 0; t < 4; t++)
|
||||
outBuffer[16*i+4*j+t] = (MV_U8) block[t][j];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MODE_CBC:
|
||||
/* first block */
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for(t = 0; t < 4; t++)
|
||||
{
|
||||
/* parse input stream into rectangular array */
|
||||
block[t][j] = input[4*j+t] & 0xFF;
|
||||
iv[t][j] = block[t][j];
|
||||
}
|
||||
}
|
||||
rijndaelDecrypt128(block, (MV_U8 (*)[4][MAXBC])expandedKey, rounds);
|
||||
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
/* exor the IV and parse rectangular array into output ciphertext bytes */
|
||||
for(t = 0; t < 4; t++)
|
||||
{
|
||||
outBuffer[4*j+t] = (MV_U8) (block[t][j] ^ IV[t+4*j]);
|
||||
IV[t+4*j] = iv[t][j];
|
||||
}
|
||||
}
|
||||
|
||||
/* next blocks */
|
||||
for (i = 1; i < numBlocks; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for(t = 0; t < 4; t++)
|
||||
{
|
||||
/* parse input stream into rectangular array */
|
||||
iv[t][j] = input[16*i+4*j+t] & 0xFF;
|
||||
block[t][j] = iv[t][j];
|
||||
}
|
||||
}
|
||||
rijndaelDecrypt128(block, (MV_U8 (*)[4][MAXBC])expandedKey, rounds);
|
||||
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
/* exor previous ciphertext block and parse rectangular array
|
||||
into output ciphertext bytes */
|
||||
for(t = 0; t < 4; t++)
|
||||
{
|
||||
outBuffer[16*i+4*j+t] = (MV_U8) (block[t][j] ^ IV[t+4*j]);
|
||||
IV[t+4*j] = iv[t][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: return AES_BAD_CIPHER_STATE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
3126
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.c
Normal file
3126
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.c
Normal file
File diff suppressed because it is too large
Load Diff
412
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.h
Normal file
412
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesa.h
Normal file
@@ -0,0 +1,412 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCesa.h - Header File for Cryptographic Engines and Security Accelerator
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This header file contains macros typedefs and function declaration for
|
||||
* the Marvell Cryptographic Engines and Security Accelerator.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvCesa_h__
|
||||
#define __mvCesa_h__
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvCommon.h"
|
||||
#include "mvDebug.h"
|
||||
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
|
||||
#include "cesa/mvMD5.h"
|
||||
#include "cesa/mvSHA1.h"
|
||||
|
||||
#include "cesa/mvCesa.h"
|
||||
#include "cesa/AES/mvAes.h"
|
||||
#include "mvSysHwConfig.h"
|
||||
|
||||
#ifdef MV_INCLUDE_IDMA
|
||||
#include "idma/mvIdma.h"
|
||||
#include "idma/mvIdmaRegs.h"
|
||||
#else
|
||||
/* Redefine MV_DMA_DESC structure */
|
||||
typedef struct _mvDmaDesc
|
||||
{
|
||||
MV_U32 byteCnt; /* The total number of bytes to transfer */
|
||||
MV_U32 phySrcAdd; /* The physical source address */
|
||||
MV_U32 phyDestAdd; /* The physical destination address */
|
||||
MV_U32 phyNextDescPtr; /* If we are using chain mode DMA transfer, */
|
||||
/* then this pointer should point to the */
|
||||
/* physical address of the next descriptor, */
|
||||
/* otherwise it should be NULL. */
|
||||
}MV_DMA_DESC;
|
||||
#endif /* MV_INCLUDE_IDMA */
|
||||
|
||||
#include "cesa/mvCesaRegs.h"
|
||||
|
||||
#define MV_CESA_AUTH_BLOCK_SIZE 64 /* bytes */
|
||||
|
||||
#define MV_CESA_MD5_DIGEST_SIZE 16 /* bytes */
|
||||
#define MV_CESA_SHA1_DIGEST_SIZE 20 /* bytes */
|
||||
|
||||
#define MV_CESA_MAX_DIGEST_SIZE MV_CESA_SHA1_DIGEST_SIZE
|
||||
|
||||
#define MV_CESA_DES_KEY_LENGTH 8 /* bytes = 64 bits */
|
||||
#define MV_CESA_3DES_KEY_LENGTH 24 /* bytes = 192 bits */
|
||||
#define MV_CESA_AES_128_KEY_LENGTH 16 /* bytes = 128 bits */
|
||||
#define MV_CESA_AES_192_KEY_LENGTH 24 /* bytes = 192 bits */
|
||||
#define MV_CESA_AES_256_KEY_LENGTH 32 /* bytes = 256 bits */
|
||||
|
||||
#define MV_CESA_MAX_CRYPTO_KEY_LENGTH MV_CESA_AES_256_KEY_LENGTH
|
||||
|
||||
#define MV_CESA_DES_BLOCK_SIZE 8 /* bytes = 64 bits */
|
||||
#define MV_CESA_3DES_BLOCK_SIZE 8 /* bytes = 64 bits */
|
||||
|
||||
#define MV_CESA_AES_BLOCK_SIZE 16 /* bytes = 128 bits */
|
||||
|
||||
#define MV_CESA_MAX_IV_LENGTH MV_CESA_AES_BLOCK_SIZE
|
||||
|
||||
#define MV_CESA_MAX_MAC_KEY_LENGTH 64 /* bytes */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 cryptoKey[MV_CESA_MAX_CRYPTO_KEY_LENGTH];
|
||||
MV_U8 macKey[MV_CESA_MAX_MAC_KEY_LENGTH];
|
||||
MV_CESA_OPERATION operation;
|
||||
MV_CESA_DIRECTION direction;
|
||||
MV_CESA_CRYPTO_ALG cryptoAlgorithm;
|
||||
MV_CESA_CRYPTO_MODE cryptoMode;
|
||||
MV_U8 cryptoKeyLength;
|
||||
MV_CESA_MAC_MODE macMode;
|
||||
MV_U8 macKeyLength;
|
||||
MV_U8 digestSize;
|
||||
|
||||
} MV_CESA_OPEN_SESSION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_BUF_INFO *pFrags;
|
||||
MV_U16 numFrags;
|
||||
MV_U16 mbufSize;
|
||||
|
||||
} MV_CESA_MBUF;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void* pReqPrv; /* instead of reqId */
|
||||
MV_U32 retCode;
|
||||
MV_16 sessionId;
|
||||
|
||||
} MV_CESA_RESULT;
|
||||
|
||||
typedef void (*MV_CESA_CALLBACK) (MV_CESA_RESULT* pResult);
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void* pReqPrv; /* instead of reqId */
|
||||
MV_CESA_MBUF* pSrc;
|
||||
MV_CESA_MBUF* pDst;
|
||||
MV_CESA_CALLBACK* pFuncCB;
|
||||
MV_16 sessionId;
|
||||
MV_U16 ivFromUser;
|
||||
MV_U16 ivOffset;
|
||||
MV_U16 cryptoOffset;
|
||||
MV_U16 cryptoLength;
|
||||
MV_U16 digestOffset;
|
||||
MV_U16 macOffset;
|
||||
MV_U16 macLength;
|
||||
MV_BOOL skipFlush;
|
||||
} MV_CESA_COMMAND;
|
||||
|
||||
|
||||
|
||||
MV_STATUS mvCesaHalInit (int numOfSession, int queueDepth, char* pSramBase, MV_U32 cryptEngBase, void *osHandle);
|
||||
MV_STATUS mvCesaFinish (void);
|
||||
MV_STATUS mvCesaSessionOpen(MV_CESA_OPEN_SESSION *pSession, short* pSid);
|
||||
MV_STATUS mvCesaSessionClose(short sid);
|
||||
MV_STATUS mvCesaCryptoIvSet(MV_U8* pIV, int ivSize);
|
||||
|
||||
MV_STATUS mvCesaAction (MV_CESA_COMMAND* pCmd);
|
||||
|
||||
MV_U32 mvCesaInProcessGet(void);
|
||||
MV_STATUS mvCesaReadyDispatch(void);
|
||||
MV_STATUS mvCesaReadyGet(MV_CESA_RESULT* pResult);
|
||||
MV_BOOL mvCesaIsReady(void);
|
||||
|
||||
int mvCesaMbufOffset(MV_CESA_MBUF* pMbuf, int offset, int* pBufOffset);
|
||||
MV_STATUS mvCesaCopyFromMbuf(MV_U8* pDst, MV_CESA_MBUF* pSrcMbuf,
|
||||
int offset, int size);
|
||||
MV_STATUS mvCesaCopyToMbuf(MV_U8* pSrc, MV_CESA_MBUF* pDstMbuf,
|
||||
int offset, int size);
|
||||
MV_STATUS mvCesaMbufCopy(MV_CESA_MBUF* pMbufDst, int dstMbufOffset,
|
||||
MV_CESA_MBUF* pMbufSrc, int srcMbufOffset, int size);
|
||||
|
||||
/********** Debug functions ********/
|
||||
|
||||
void mvCesaDebugMbuf(const char* str, MV_CESA_MBUF *pMbuf, int offset, int size);
|
||||
void mvCesaDebugSA(short sid, int mode);
|
||||
void mvCesaDebugStats(void);
|
||||
void mvCesaDebugStatsClear(void);
|
||||
void mvCesaDebugRegs(void);
|
||||
void mvCesaDebugStatus(void);
|
||||
void mvCesaDebugQueue(int mode);
|
||||
void mvCesaDebugSram(int mode);
|
||||
void mvCesaDebugSAD(int mode);
|
||||
|
||||
|
||||
/******** CESA Private definitions ********/
|
||||
#if (MV_CESA_VERSION >= 2)
|
||||
#if (MV_CACHE_COHERENCY == MV_CACHE_COHER_SW)
|
||||
#define MV_CESA_TDMA_CTRL_VALUE MV_CESA_TDMA_DST_BURST_MASK(MV_CESA_TDMA_BURST_128B) \
|
||||
| MV_CESA_TDMA_SRC_BURST_MASK(MV_CESA_TDMA_BURST_128B) \
|
||||
| MV_CESA_TDMA_OUTSTAND_READ_EN_MASK \
|
||||
| MV_CESA_TDMA_NO_BYTE_SWAP_MASK \
|
||||
| MV_CESA_TDMA_ENABLE_MASK
|
||||
#else
|
||||
#define MV_CESA_TDMA_CTRL_VALUE MV_CESA_TDMA_DST_BURST_MASK(MV_CESA_TDMA_BURST_32B) \
|
||||
| MV_CESA_TDMA_SRC_BURST_MASK(MV_CESA_TDMA_BURST_128B) \
|
||||
/*| MV_CESA_TDMA_OUTSTAND_READ_EN_MASK */\
|
||||
| MV_CESA_TDMA_ENABLE_MASK
|
||||
|
||||
#endif
|
||||
#else
|
||||
#define MV_CESA_IDMA_CTRL_LOW_VALUE ICCLR_DST_BURST_LIM_128BYTE \
|
||||
| ICCLR_SRC_BURST_LIM_128BYTE \
|
||||
| ICCLR_INT_MODE_MASK \
|
||||
| ICCLR_BLOCK_MODE \
|
||||
| ICCLR_CHAN_ENABLE \
|
||||
| ICCLR_DESC_MODE_16M
|
||||
#endif /* MV_CESA_VERSION >= 2 */
|
||||
|
||||
#define MV_CESA_MAX_PKT_SIZE (64 * 1024)
|
||||
#define MV_CESA_MAX_MBUF_FRAGS 20
|
||||
|
||||
#define MV_CESA_MAX_REQ_FRAGS ( (MV_CESA_MAX_PKT_SIZE / MV_CESA_MAX_BUF_SIZE) + 1)
|
||||
|
||||
#define MV_CESA_MAX_DMA_DESC (MV_CESA_MAX_MBUF_FRAGS*2 + 5)
|
||||
|
||||
#define MAX_CESA_CHAIN_LENGTH 20
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_IDLE = 0,
|
||||
MV_CESA_PENDING,
|
||||
MV_CESA_PROCESS,
|
||||
MV_CESA_READY,
|
||||
#if (MV_CESA_VERSION >= 3)
|
||||
MV_CESA_CHAIN,
|
||||
#endif
|
||||
} MV_CESA_STATE;
|
||||
|
||||
|
||||
/* Session database */
|
||||
|
||||
/* Map of Key materials of the session in SRAM.
|
||||
* Each field must be 8 byte aligned
|
||||
* Total size: 32 + 24 + 24 = 80 bytes
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 cryptoKey[MV_CESA_MAX_CRYPTO_KEY_LENGTH];
|
||||
MV_U8 macInnerIV[MV_CESA_MAX_DIGEST_SIZE];
|
||||
MV_U8 reservedInner[4];
|
||||
MV_U8 macOuterIV[MV_CESA_MAX_DIGEST_SIZE];
|
||||
MV_U8 reservedOuter[4];
|
||||
|
||||
} MV_CESA_SRAM_SA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_CESA_SRAM_SA* pSramSA;
|
||||
MV_U32 config;
|
||||
MV_U8 cryptoKeyLength;
|
||||
MV_U8 cryptoIvSize;
|
||||
MV_U8 cryptoBlockSize;
|
||||
MV_U8 digestSize;
|
||||
MV_U8 macKeyLength;
|
||||
MV_U8 valid;
|
||||
MV_U8 ctrMode;
|
||||
MV_U32 count;
|
||||
|
||||
} MV_CESA_SA;
|
||||
|
||||
/* DMA list management */
|
||||
typedef struct
|
||||
{
|
||||
MV_DMA_DESC* pDmaFirst;
|
||||
MV_DMA_DESC* pDmaLast;
|
||||
|
||||
} MV_CESA_DMA;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 numFrag;
|
||||
MV_U8 nextFrag;
|
||||
int bufOffset;
|
||||
int cryptoSize;
|
||||
int macSize;
|
||||
int newDigestOffset;
|
||||
MV_U8 orgDigest[MV_CESA_MAX_DIGEST_SIZE];
|
||||
|
||||
} MV_CESA_FRAGS;
|
||||
|
||||
/* Request queue */
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 state;
|
||||
MV_U8 fragMode;
|
||||
MV_U8 fixOffset;
|
||||
MV_CESA_COMMAND* pCmd;
|
||||
MV_CESA_COMMAND* pOrgCmd;
|
||||
MV_BUF_INFO dmaDescBuf;
|
||||
MV_CESA_DMA dma[MV_CESA_MAX_REQ_FRAGS];
|
||||
MV_BUF_INFO cesaDescBuf;
|
||||
MV_CESA_DESC* pCesaDesc;
|
||||
MV_CESA_FRAGS frags;
|
||||
|
||||
|
||||
} MV_CESA_REQ;
|
||||
|
||||
|
||||
/* SRAM map */
|
||||
/* Total SRAM size calculation */
|
||||
/* SRAM size =
|
||||
* MV_CESA_MAX_BUF_SIZE +
|
||||
* sizeof(MV_CESA_DESC) +
|
||||
* MV_CESA_MAX_IV_LENGTH +
|
||||
* MV_CESA_MAX_IV_LENGTH +
|
||||
* MV_CESA_MAX_DIGEST_SIZE +
|
||||
* sizeof(MV_CESA_SRAM_SA)
|
||||
* = 1600 + 32 + 16 + 16 + 24 + 80 + 280 (reserved) = 2048 bytes
|
||||
* = 3200 + 32 + 16 + 16 + 24 + 80 + 728 (reserved) = 4096 bytes
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 buf[MV_CESA_MAX_BUF_SIZE];
|
||||
MV_CESA_DESC desc;
|
||||
MV_U8 cryptoIV[MV_CESA_MAX_IV_LENGTH];
|
||||
MV_U8 tempCryptoIV[MV_CESA_MAX_IV_LENGTH];
|
||||
MV_U8 tempDigest[MV_CESA_MAX_DIGEST_SIZE+4];
|
||||
MV_CESA_SRAM_SA sramSA;
|
||||
|
||||
} MV_CESA_SRAM_MAP;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U32 openedCount;
|
||||
MV_U32 closedCount;
|
||||
MV_U32 fragCount;
|
||||
MV_U32 reqCount;
|
||||
MV_U32 maxReqCount;
|
||||
MV_U32 procCount;
|
||||
MV_U32 readyCount;
|
||||
MV_U32 notReadyCount;
|
||||
MV_U32 startCount;
|
||||
#if (MV_CESA_VERSION >= 3)
|
||||
MV_U32 maxChainUsage;
|
||||
#endif
|
||||
|
||||
} MV_CESA_STATS;
|
||||
|
||||
|
||||
/* External variables */
|
||||
|
||||
extern MV_CESA_STATS cesaStats;
|
||||
extern MV_CESA_FRAGS cesaFrags;
|
||||
|
||||
extern MV_BUF_INFO cesaSramSaBuf;
|
||||
|
||||
extern MV_CESA_SA* pCesaSAD;
|
||||
extern MV_U16 cesaMaxSA;
|
||||
|
||||
extern MV_CESA_REQ* pCesaReqFirst;
|
||||
extern MV_CESA_REQ* pCesaReqLast;
|
||||
extern MV_CESA_REQ* pCesaReqEmpty;
|
||||
extern MV_CESA_REQ* pCesaReqProcess;
|
||||
extern int cesaQueueDepth;
|
||||
extern int cesaReqResources;
|
||||
#if (MV_CESA_VERSION>= 3)
|
||||
extern MV_U32 cesaChainLength;
|
||||
#endif
|
||||
|
||||
extern MV_CESA_SRAM_MAP* cesaSramVirtPtr;
|
||||
extern MV_U32 cesaSramPhysAddr;
|
||||
|
||||
static INLINE MV_ULONG mvCesaVirtToPhys(MV_BUF_INFO* pBufInfo, void* pVirt)
|
||||
{
|
||||
return (pBufInfo->bufPhysAddr + ((MV_U8*)pVirt - pBufInfo->bufVirtPtr));
|
||||
}
|
||||
|
||||
/* Additional DEBUG functions */
|
||||
void mvCesaDebugSramSA(MV_CESA_SRAM_SA* pSramSA, int mode);
|
||||
void mvCesaDebugCmd(MV_CESA_COMMAND* pCmd, int mode);
|
||||
void mvCesaDebugDescriptor(MV_CESA_DESC* pDesc);
|
||||
|
||||
|
||||
|
||||
#endif /* __mvCesa_h__ */
|
||||
@@ -0,0 +1,484 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvDebug.h"
|
||||
|
||||
#include "cesa/mvMD5.h"
|
||||
#include "cesa/mvSHA1.h"
|
||||
|
||||
#include "cesa/mvCesa.h"
|
||||
#include "cesa/mvCesaRegs.h"
|
||||
#include "cesa/AES/mvAes.h"
|
||||
|
||||
static const char* mvCesaDebugStateStr(MV_CESA_STATE state)
|
||||
{
|
||||
switch(state)
|
||||
{
|
||||
case MV_CESA_IDLE:
|
||||
return "Idle";
|
||||
|
||||
case MV_CESA_PENDING:
|
||||
return "Pend";
|
||||
|
||||
case MV_CESA_PROCESS:
|
||||
return "Proc";
|
||||
|
||||
case MV_CESA_READY:
|
||||
return "Ready";
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
static const char* mvCesaDebugOperStr(MV_CESA_OPERATION oper)
|
||||
{
|
||||
switch(oper)
|
||||
{
|
||||
case MV_CESA_MAC_ONLY:
|
||||
return "MacOnly";
|
||||
|
||||
case MV_CESA_CRYPTO_ONLY:
|
||||
return "CryptoOnly";
|
||||
|
||||
case MV_CESA_MAC_THEN_CRYPTO:
|
||||
return "MacCrypto";
|
||||
|
||||
case MV_CESA_CRYPTO_THEN_MAC:
|
||||
return "CryptoMac";
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "Null";
|
||||
}
|
||||
|
||||
static const char* mvCesaDebugCryptoAlgStr(MV_CESA_CRYPTO_ALG cryptoAlg)
|
||||
{
|
||||
switch(cryptoAlg)
|
||||
{
|
||||
case MV_CESA_CRYPTO_DES:
|
||||
return "DES";
|
||||
|
||||
case MV_CESA_CRYPTO_3DES:
|
||||
return "3DES";
|
||||
|
||||
case MV_CESA_CRYPTO_AES:
|
||||
return "AES";
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "Null";
|
||||
}
|
||||
|
||||
static const char* mvCesaDebugMacModeStr(MV_CESA_MAC_MODE macMode)
|
||||
{
|
||||
switch(macMode)
|
||||
{
|
||||
case MV_CESA_MAC_MD5:
|
||||
return "MD5";
|
||||
|
||||
case MV_CESA_MAC_SHA1:
|
||||
return "SHA1";
|
||||
|
||||
case MV_CESA_MAC_HMAC_MD5:
|
||||
return "HMAC-MD5";
|
||||
|
||||
case MV_CESA_MAC_HMAC_SHA1:
|
||||
return "HMAC_SHA1";
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "Null";
|
||||
}
|
||||
|
||||
void mvCesaDebugCmd(MV_CESA_COMMAND* pCmd, int mode)
|
||||
{
|
||||
mvOsPrintf("pCmd=%p, pReqPrv=%p, pSrc=%p, pDst=%p, pCB=%p, sid=%d\n",
|
||||
pCmd, pCmd->pReqPrv, pCmd->pSrc, pCmd->pDst,
|
||||
pCmd->pFuncCB, pCmd->sessionId);
|
||||
mvOsPrintf("isUser=%d, ivOffs=%d, crOffs=%d, crLen=%d, digest=%d, macOffs=%d, macLen=%d\n",
|
||||
pCmd->ivFromUser, pCmd->ivOffset, pCmd->cryptoOffset, pCmd->cryptoLength,
|
||||
pCmd->digestOffset, pCmd->macOffset, pCmd->macLength);
|
||||
}
|
||||
|
||||
/* no need to use in tool */
|
||||
void mvCesaDebugMbuf(const char* str, MV_CESA_MBUF *pMbuf, int offset, int size)
|
||||
{
|
||||
int frag, len, fragOffset;
|
||||
|
||||
if(str != NULL)
|
||||
mvOsPrintf("%s: pMbuf=%p, numFrags=%d, mbufSize=%d\n",
|
||||
str, pMbuf, pMbuf->numFrags, pMbuf->mbufSize);
|
||||
|
||||
frag = mvCesaMbufOffset(pMbuf, offset, &fragOffset);
|
||||
if(frag == MV_INVALID)
|
||||
{
|
||||
mvOsPrintf("CESA Mbuf Error: offset (%d) out of range\n", offset);
|
||||
return;
|
||||
}
|
||||
|
||||
for(; frag<pMbuf->numFrags; frag++)
|
||||
{
|
||||
mvOsPrintf("#%2d. bufVirt=%p, bufSize=%d\n",
|
||||
frag, pMbuf->pFrags[frag].bufVirtPtr,
|
||||
pMbuf->pFrags[frag].bufSize);
|
||||
if(size > 0)
|
||||
{
|
||||
len = MV_MIN(pMbuf->pFrags[frag].bufSize, size);
|
||||
mvDebugMemDump(pMbuf->pFrags[frag].bufVirtPtr+fragOffset, len, 1);
|
||||
size -= len;
|
||||
fragOffset = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mvCesaDebugRegs(void)
|
||||
{
|
||||
mvOsPrintf("\t CESA Registers:\n");
|
||||
|
||||
mvOsPrintf("MV_CESA_CMD_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_CMD_REG,
|
||||
MV_REG_READ( MV_CESA_CMD_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_CHAN_DESC_OFFSET_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_CHAN_DESC_OFFSET_REG,
|
||||
MV_REG_READ(MV_CESA_CHAN_DESC_OFFSET_REG) );
|
||||
|
||||
mvOsPrintf("MV_CESA_CFG_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_CFG_REG,
|
||||
MV_REG_READ( MV_CESA_CFG_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_STATUS_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_STATUS_REG,
|
||||
MV_REG_READ( MV_CESA_STATUS_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_ISR_CAUSE_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_ISR_CAUSE_REG,
|
||||
MV_REG_READ( MV_CESA_ISR_CAUSE_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_ISR_MASK_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_ISR_MASK_REG,
|
||||
MV_REG_READ( MV_CESA_ISR_MASK_REG ) );
|
||||
#if (MV_CESA_VERSION >= 2)
|
||||
mvOsPrintf("MV_CESA_TDMA_CTRL_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_CTRL_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_CTRL_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_BYTE_COUNT_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_BYTE_COUNT_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_BYTE_COUNT_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_SRC_ADDR_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_SRC_ADDR_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_SRC_ADDR_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_DST_ADDR_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_DST_ADDR_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_DST_ADDR_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_NEXT_DESC_PTR_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_NEXT_DESC_PTR_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_NEXT_DESC_PTR_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_CURR_DESC_PTR_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_CURR_DESC_PTR_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_CURR_DESC_PTR_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_ERROR_CAUSE_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_ERROR_CAUSE_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_ERROR_CAUSE_REG ) );
|
||||
|
||||
mvOsPrintf("MV_CESA_TDMA_ERROR_MASK_REG : 0x%X = 0x%08x\n",
|
||||
MV_CESA_TDMA_ERROR_MASK_REG,
|
||||
MV_REG_READ( MV_CESA_TDMA_ERROR_CAUSE_REG ) );
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void mvCesaDebugStatus(void)
|
||||
{
|
||||
mvOsPrintf("\n\t CESA Status\n\n");
|
||||
|
||||
mvOsPrintf("pReqQ=%p, qDepth=%d, reqSize=%ld bytes, qRes=%d, ",
|
||||
pCesaReqFirst, cesaQueueDepth, sizeof(MV_CESA_REQ),
|
||||
cesaReqResources);
|
||||
#if (MV_CESA_VERSION >= 3)
|
||||
mvOsPrintf("chainLength=%u\n",cesaChainLength);
|
||||
#else
|
||||
mvOsPrintf("\n");
|
||||
#endif
|
||||
|
||||
mvOsPrintf("pSAD=%p, maxSA=%d, sizeSA=%ld bytes\n",
|
||||
pCesaSAD, cesaMaxSA, sizeof(MV_CESA_SA));
|
||||
|
||||
mvOsPrintf("\n");
|
||||
|
||||
mvCesaDebugRegs();
|
||||
mvCesaDebugStats();
|
||||
mvCesaDebugStatsClear();
|
||||
}
|
||||
|
||||
void mvCesaDebugDescriptor(MV_CESA_DESC* pDesc)
|
||||
{
|
||||
mvOsPrintf("config=0x%08x, crSrcOffs=0x%04x, crDstOffs=0x%04x\n",
|
||||
pDesc->config, pDesc->cryptoSrcOffset, pDesc->cryptoDstOffset);
|
||||
|
||||
mvOsPrintf("crLen=0x%04x, crKeyOffs=0x%04x, ivOffs=0x%04x, ivBufOffs=0x%04x\n",
|
||||
pDesc->cryptoDataLen, pDesc->cryptoKeyOffset,
|
||||
pDesc->cryptoIvOffset, pDesc->cryptoIvBufOffset);
|
||||
|
||||
mvOsPrintf("macSrc=0x%04x, digest=0x%04x, macLen=0x%04x, inIv=0x%04x, outIv=0x%04x\n",
|
||||
pDesc->macSrcOffset, pDesc->macDigestOffset, pDesc->macDataLen,
|
||||
pDesc->macInnerIvOffset, pDesc->macOuterIvOffset);
|
||||
}
|
||||
|
||||
void mvCesaDebugQueue(int mode)
|
||||
{
|
||||
mvOsPrintf("\n\t CESA Request Queue:\n\n");
|
||||
|
||||
mvOsPrintf("pFirstReq=%p, pLastReq=%p, qDepth=%d, reqSize=%ld bytes\n",
|
||||
pCesaReqFirst, pCesaReqLast, cesaQueueDepth, sizeof(MV_CESA_REQ));
|
||||
|
||||
mvOsPrintf("pEmpty=%p, pProcess=%p, qResources=%d\n",
|
||||
pCesaReqEmpty, pCesaReqProcess,
|
||||
cesaReqResources);
|
||||
|
||||
if(mode != 0)
|
||||
{
|
||||
int count = 0;
|
||||
MV_CESA_REQ* pReq = pCesaReqFirst;
|
||||
|
||||
for(count=0; count<cesaQueueDepth; count++)
|
||||
{
|
||||
/* Print out requsts */
|
||||
mvOsPrintf("%02d. pReq=%p, state=%s, frag=0x%x, pCmd=%p, pDma=%p, pDesc=%p\n",
|
||||
count, pReq, mvCesaDebugStateStr(pReq->state),
|
||||
pReq->fragMode, pReq->pCmd, pReq->dma[0].pDmaFirst, &pReq->pCesaDesc[0]);
|
||||
if(pReq->fragMode != MV_CESA_FRAG_NONE)
|
||||
{
|
||||
int frag;
|
||||
|
||||
mvOsPrintf("pFrags=%p, num=%d, next=%d, bufOffset=%d, cryptoSize=%d, macSize=%d\n",
|
||||
&pReq->frags, pReq->frags.numFrag, pReq->frags.nextFrag,
|
||||
pReq->frags.bufOffset, pReq->frags.cryptoSize, pReq->frags.macSize);
|
||||
for(frag=0; frag<pReq->frags.numFrag; frag++)
|
||||
{
|
||||
mvOsPrintf("#%d: pDmaFirst=%p, pDesc=%p\n", frag,
|
||||
pReq->dma[frag].pDmaFirst, &pReq->pCesaDesc[frag]);
|
||||
}
|
||||
}
|
||||
if(mode > 1)
|
||||
{
|
||||
/* Print out Command */
|
||||
mvCesaDebugCmd(pReq->pCmd, mode);
|
||||
|
||||
/* Print out Descriptor */
|
||||
mvCesaDebugDescriptor(&pReq->pCesaDesc[0]);
|
||||
}
|
||||
pReq++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void mvCesaDebugSramSA(MV_CESA_SRAM_SA* pSramSA, int mode)
|
||||
{
|
||||
if(pSramSA == NULL)
|
||||
{
|
||||
mvOsPrintf("cesaSramSA: Unexpected pSramSA=%p\n", pSramSA);
|
||||
return;
|
||||
}
|
||||
mvOsPrintf("pSramSA=%p, sizeSramSA=%ld bytes\n",
|
||||
pSramSA, sizeof(MV_CESA_SRAM_SA));
|
||||
|
||||
if(mode != 0)
|
||||
{
|
||||
mvOsPrintf("cryptoKey=%p, maxCryptoKey=%d bytes\n",
|
||||
pSramSA->cryptoKey, MV_CESA_MAX_CRYPTO_KEY_LENGTH);
|
||||
mvDebugMemDump(pSramSA->cryptoKey, MV_CESA_MAX_CRYPTO_KEY_LENGTH, 1);
|
||||
|
||||
mvOsPrintf("macInnerIV=%p, maxInnerIV=%d bytes\n",
|
||||
pSramSA->macInnerIV, MV_CESA_MAX_DIGEST_SIZE);
|
||||
mvDebugMemDump(pSramSA->macInnerIV, MV_CESA_MAX_DIGEST_SIZE, 1);
|
||||
|
||||
mvOsPrintf("macOuterIV=%p, maxOuterIV=%d bytes\n",
|
||||
pSramSA->macOuterIV, MV_CESA_MAX_DIGEST_SIZE);
|
||||
mvDebugMemDump(pSramSA->macOuterIV, MV_CESA_MAX_DIGEST_SIZE, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void mvCesaDebugSA(short sid, int mode)
|
||||
{
|
||||
MV_CESA_OPERATION oper;
|
||||
MV_CESA_DIRECTION dir;
|
||||
MV_CESA_CRYPTO_ALG cryptoAlg;
|
||||
MV_CESA_CRYPTO_MODE cryptoMode;
|
||||
MV_CESA_MAC_MODE macMode;
|
||||
MV_CESA_SA* pSA = &pCesaSAD[sid];
|
||||
|
||||
if( (pSA->valid) || ((pSA->count != 0) && (mode > 0)) || (mode >= 2) )
|
||||
{
|
||||
mvOsPrintf("\n\nCESA SA Entry #%d (%p) - %s (count=%d)\n",
|
||||
sid, pSA,
|
||||
pSA->valid ? "Valid" : "Invalid", pSA->count);
|
||||
|
||||
oper = (pSA->config & MV_CESA_OPERATION_MASK) >> MV_CESA_OPERATION_OFFSET;
|
||||
dir = (pSA->config & MV_CESA_DIRECTION_MASK) >> MV_CESA_DIRECTION_BIT;
|
||||
mvOsPrintf("%s - %s ", mvCesaDebugOperStr(oper),
|
||||
(dir == MV_CESA_DIR_ENCODE) ? "Encode" : "Decode");
|
||||
if(oper != MV_CESA_MAC_ONLY)
|
||||
{
|
||||
cryptoAlg = (pSA->config & MV_CESA_CRYPTO_ALG_MASK) >> MV_CESA_CRYPTO_ALG_OFFSET;
|
||||
cryptoMode = (pSA->config & MV_CESA_CRYPTO_MODE_MASK) >> MV_CESA_CRYPTO_MODE_BIT;
|
||||
mvOsPrintf("- %s - %s ", mvCesaDebugCryptoAlgStr(cryptoAlg),
|
||||
(cryptoMode == MV_CESA_CRYPTO_ECB) ? "ECB" : "CBC");
|
||||
}
|
||||
if(oper != MV_CESA_CRYPTO_ONLY)
|
||||
{
|
||||
macMode = (pSA->config & MV_CESA_MAC_MODE_MASK) >> MV_CESA_MAC_MODE_OFFSET;
|
||||
mvOsPrintf("- %s ", mvCesaDebugMacModeStr(macMode));
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
|
||||
if(mode > 0)
|
||||
{
|
||||
mvOsPrintf("config=0x%08x, cryptoKeySize=%d, digestSize=%d\n",
|
||||
pCesaSAD[sid].config, pCesaSAD[sid].cryptoKeyLength,
|
||||
pCesaSAD[sid].digestSize);
|
||||
|
||||
mvCesaDebugSramSA(pCesaSAD[sid].pSramSA, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**/
|
||||
void mvCesaDebugSram(int mode)
|
||||
{
|
||||
mvOsPrintf("\n\t SRAM contents: size=%ld, pVirt=%p\n\n",
|
||||
sizeof(MV_CESA_SRAM_MAP), cesaSramVirtPtr);
|
||||
|
||||
mvOsPrintf("\n\t Sram buffer: size=%d, pVirt=%p\n",
|
||||
MV_CESA_MAX_BUF_SIZE, cesaSramVirtPtr->buf);
|
||||
if(mode != 0)
|
||||
mvDebugMemDump(cesaSramVirtPtr->buf, 64, 1);
|
||||
|
||||
mvOsPrintf("\n");
|
||||
mvOsPrintf("\n\t Sram descriptor: size=%ld, pVirt=%p\n",
|
||||
sizeof(MV_CESA_DESC), &cesaSramVirtPtr->desc);
|
||||
if(mode != 0)
|
||||
{
|
||||
mvOsPrintf("\n");
|
||||
mvCesaDebugDescriptor(&cesaSramVirtPtr->desc);
|
||||
}
|
||||
mvOsPrintf("\n\t Sram IV: size=%d, pVirt=%p\n",
|
||||
MV_CESA_MAX_IV_LENGTH, &cesaSramVirtPtr->cryptoIV);
|
||||
if(mode != 0)
|
||||
{
|
||||
mvOsPrintf("\n");
|
||||
mvDebugMemDump(cesaSramVirtPtr->cryptoIV, MV_CESA_MAX_IV_LENGTH, 1);
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
mvCesaDebugSramSA(&cesaSramVirtPtr->sramSA, 0);
|
||||
}
|
||||
|
||||
void mvCesaDebugSAD(int mode)
|
||||
{
|
||||
int sid;
|
||||
|
||||
mvOsPrintf("\n\t Cesa SAD status: pSAD=%p, maxSA=%d\n",
|
||||
pCesaSAD, cesaMaxSA);
|
||||
|
||||
for(sid=0; sid<cesaMaxSA; sid++)
|
||||
{
|
||||
mvCesaDebugSA(sid, mode);
|
||||
}
|
||||
}
|
||||
|
||||
void mvCesaDebugStats(void)
|
||||
{
|
||||
mvOsPrintf("\n\t Cesa Statistics\n");
|
||||
|
||||
mvOsPrintf("Opened=%u, Closed=%u\n",
|
||||
cesaStats.openedCount, cesaStats.closedCount);
|
||||
mvOsPrintf("Req=%u, maxReq=%u, frags=%u, start=%u\n",
|
||||
cesaStats.reqCount, cesaStats.maxReqCount,
|
||||
cesaStats.fragCount, cesaStats.startCount);
|
||||
#if (MV_CESA_VERSION >= 3)
|
||||
mvOsPrintf("maxChainUsage=%u\n",cesaStats.maxChainUsage);
|
||||
#endif
|
||||
mvOsPrintf("\n");
|
||||
mvOsPrintf("proc=%u, ready=%u, notReady=%u\n",
|
||||
cesaStats.procCount, cesaStats.readyCount, cesaStats.notReadyCount);
|
||||
}
|
||||
|
||||
void mvCesaDebugStatsClear(void)
|
||||
{
|
||||
memset(&cesaStats, 0, sizeof(cesaStats));
|
||||
}
|
||||
357
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h
Normal file
357
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaRegs.h
Normal file
@@ -0,0 +1,357 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvCesaRegs_h__
|
||||
#define __mvCesaRegs_h__
|
||||
|
||||
#include "mvTypes.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* word 0 */
|
||||
MV_U32 config;
|
||||
/* word 1 */
|
||||
MV_U16 cryptoSrcOffset;
|
||||
MV_U16 cryptoDstOffset;
|
||||
/* word 2 */
|
||||
MV_U16 cryptoDataLen;
|
||||
MV_U16 reserved1;
|
||||
/* word 3 */
|
||||
MV_U16 cryptoKeyOffset;
|
||||
MV_U16 reserved2;
|
||||
/* word 4 */
|
||||
MV_U16 cryptoIvOffset;
|
||||
MV_U16 cryptoIvBufOffset;
|
||||
/* word 5 */
|
||||
MV_U16 macSrcOffset;
|
||||
MV_U16 macTotalLen;
|
||||
/* word 6 */
|
||||
MV_U16 macDigestOffset;
|
||||
MV_U16 macDataLen;
|
||||
/* word 7 */
|
||||
MV_U16 macInnerIvOffset;
|
||||
MV_U16 macOuterIvOffset;
|
||||
|
||||
} MV_CESA_DESC;
|
||||
|
||||
/* operation */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_MAC_ONLY = 0,
|
||||
MV_CESA_CRYPTO_ONLY = 1,
|
||||
MV_CESA_MAC_THEN_CRYPTO = 2,
|
||||
MV_CESA_CRYPTO_THEN_MAC = 3,
|
||||
|
||||
MV_CESA_MAX_OPERATION
|
||||
|
||||
} MV_CESA_OPERATION;
|
||||
|
||||
#define MV_CESA_OPERATION_OFFSET 0
|
||||
#define MV_CESA_OPERATION_MASK (0x3 << MV_CESA_OPERATION_OFFSET)
|
||||
|
||||
/* mac algorithm */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_MAC_NULL = 0,
|
||||
MV_CESA_MAC_MD5 = 4,
|
||||
MV_CESA_MAC_SHA1 = 5,
|
||||
MV_CESA_MAC_HMAC_MD5 = 6,
|
||||
MV_CESA_MAC_HMAC_SHA1 = 7,
|
||||
|
||||
} MV_CESA_MAC_MODE;
|
||||
|
||||
#define MV_CESA_MAC_MODE_OFFSET 4
|
||||
#define MV_CESA_MAC_MODE_MASK (0x7 << MV_CESA_MAC_MODE_OFFSET)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_MAC_DIGEST_FULL = 0,
|
||||
MV_CESA_MAC_DIGEST_96B = 1,
|
||||
|
||||
} MV_CESA_MAC_DIGEST_SIZE;
|
||||
|
||||
#define MV_CESA_MAC_DIGEST_SIZE_BIT 7
|
||||
#define MV_CESA_MAC_DIGEST_SIZE_MASK (1 << MV_CESA_MAC_DIGEST_SIZE_BIT)
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_CRYPTO_NULL = 0,
|
||||
MV_CESA_CRYPTO_DES = 1,
|
||||
MV_CESA_CRYPTO_3DES = 2,
|
||||
MV_CESA_CRYPTO_AES = 3,
|
||||
|
||||
} MV_CESA_CRYPTO_ALG;
|
||||
|
||||
#define MV_CESA_CRYPTO_ALG_OFFSET 8
|
||||
#define MV_CESA_CRYPTO_ALG_MASK (0x3 << MV_CESA_CRYPTO_ALG_OFFSET)
|
||||
|
||||
|
||||
/* direction */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_DIR_ENCODE = 0,
|
||||
MV_CESA_DIR_DECODE = 1,
|
||||
|
||||
} MV_CESA_DIRECTION;
|
||||
|
||||
#define MV_CESA_DIRECTION_BIT 12
|
||||
#define MV_CESA_DIRECTION_MASK (1 << MV_CESA_DIRECTION_BIT)
|
||||
|
||||
/* crypto IV mode */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_CRYPTO_ECB = 0,
|
||||
MV_CESA_CRYPTO_CBC = 1,
|
||||
|
||||
/* NO HW Support */
|
||||
MV_CESA_CRYPTO_CTR = 10,
|
||||
|
||||
} MV_CESA_CRYPTO_MODE;
|
||||
|
||||
#define MV_CESA_CRYPTO_MODE_BIT 16
|
||||
#define MV_CESA_CRYPTO_MODE_MASK (1 << MV_CESA_CRYPTO_MODE_BIT)
|
||||
|
||||
/* 3DES mode */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_CRYPTO_3DES_EEE = 0,
|
||||
MV_CESA_CRYPTO_3DES_EDE = 1,
|
||||
|
||||
} MV_CESA_CRYPTO_3DES_MODE;
|
||||
|
||||
#define MV_CESA_CRYPTO_3DES_MODE_BIT 20
|
||||
#define MV_CESA_CRYPTO_3DES_MODE_MASK (1 << MV_CESA_CRYPTO_3DES_MODE_BIT)
|
||||
|
||||
|
||||
/* AES Key Length */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_CRYPTO_AES_KEY_128 = 0,
|
||||
MV_CESA_CRYPTO_AES_KEY_192 = 1,
|
||||
MV_CESA_CRYPTO_AES_KEY_256 = 2,
|
||||
|
||||
} MV_CESA_CRYPTO_AES_KEY_LEN;
|
||||
|
||||
#define MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET 24
|
||||
#define MV_CESA_CRYPTO_AES_KEY_LEN_MASK (0x3 << MV_CESA_CRYPTO_AES_KEY_LEN_OFFSET)
|
||||
|
||||
/* Fragmentation mode */
|
||||
typedef enum
|
||||
{
|
||||
MV_CESA_FRAG_NONE = 0,
|
||||
MV_CESA_FRAG_FIRST = 1,
|
||||
MV_CESA_FRAG_LAST = 2,
|
||||
MV_CESA_FRAG_MIDDLE = 3,
|
||||
|
||||
} MV_CESA_FRAG_MODE;
|
||||
|
||||
#define MV_CESA_FRAG_MODE_OFFSET 30
|
||||
#define MV_CESA_FRAG_MODE_MASK (0x3 << MV_CESA_FRAG_MODE_OFFSET)
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/********** Security Accelerator Command Register **************/
|
||||
#define MV_CESA_CMD_REG (MV_CESA_REG_BASE + 0xE00)
|
||||
|
||||
#define MV_CESA_CMD_CHAN_ENABLE_BIT 0
|
||||
#define MV_CESA_CMD_CHAN_ENABLE_MASK (1 << MV_CESA_CMD_CHAN_ENABLE_BIT)
|
||||
|
||||
#define MV_CESA_CMD_CHAN_DISABLE_BIT 2
|
||||
#define MV_CESA_CMD_CHAN_DISABLE_MASK (1 << MV_CESA_CMD_CHAN_DISABLE_BIT)
|
||||
|
||||
/********** Security Accelerator Descriptor Pointers Register **********/
|
||||
#define MV_CESA_CHAN_DESC_OFFSET_REG (MV_CESA_REG_BASE + 0xE04)
|
||||
|
||||
/********** Security Accelerator Configuration Register **********/
|
||||
#define MV_CESA_CFG_REG (MV_CESA_REG_BASE + 0xE08)
|
||||
|
||||
#define MV_CESA_CFG_STOP_DIGEST_ERR_BIT 0
|
||||
#define MV_CESA_CFG_STOP_DIGEST_ERR_MASK (1 << MV_CESA_CFG_STOP_DIGEST_ERR_BIT)
|
||||
|
||||
#define MV_CESA_CFG_WAIT_DMA_BIT 7
|
||||
#define MV_CESA_CFG_WAIT_DMA_MASK (1 << MV_CESA_CFG_WAIT_DMA_BIT)
|
||||
|
||||
#define MV_CESA_CFG_ACT_DMA_BIT 9
|
||||
#define MV_CESA_CFG_ACT_DMA_MASK (1 << MV_CESA_CFG_ACT_DMA_BIT)
|
||||
|
||||
#define MV_CESA_CFG_CHAIN_MODE_BIT 11
|
||||
#define MV_CESA_CFG_CHAIN_MODE_MASK (1 << MV_CESA_CFG_CHAIN_MODE_BIT)
|
||||
|
||||
/********** Security Accelerator Status Register ***********/
|
||||
#define MV_CESA_STATUS_REG (MV_CESA_REG_BASE + 0xE0C)
|
||||
|
||||
#define MV_CESA_STATUS_ACTIVE_BIT 0
|
||||
#define MV_CESA_STATUS_ACTIVE_MASK (1 << MV_CESA_STATUS_ACTIVE_BIT)
|
||||
|
||||
#define MV_CESA_STATUS_DIGEST_ERR_BIT 8
|
||||
#define MV_CESA_STATUS_DIGEST_ERR_MASK (1 << MV_CESA_STATUS_DIGEST_ERR_BIT)
|
||||
|
||||
|
||||
/* Cryptographic Engines and Security Accelerator Interrupt Cause Register */
|
||||
#define MV_CESA_ISR_CAUSE_REG (MV_CESA_REG_BASE + 0xE20)
|
||||
|
||||
/* Cryptographic Engines and Security Accelerator Interrupt Mask Register */
|
||||
#define MV_CESA_ISR_MASK_REG (MV_CESA_REG_BASE + 0xE24)
|
||||
|
||||
#define MV_CESA_CAUSE_AUTH_MASK (1 << 0)
|
||||
#define MV_CESA_CAUSE_DES_MASK (1 << 1)
|
||||
#define MV_CESA_CAUSE_AES_ENCR_MASK (1 << 2)
|
||||
#define MV_CESA_CAUSE_AES_DECR_MASK (1 << 3)
|
||||
#define MV_CESA_CAUSE_DES_ALL_MASK (1 << 4)
|
||||
|
||||
#define MV_CESA_CAUSE_ACC_BIT 5
|
||||
#define MV_CESA_CAUSE_ACC_MASK (1 << MV_CESA_CAUSE_ACC_BIT)
|
||||
|
||||
#define MV_CESA_CAUSE_ACC_DMA_BIT 7
|
||||
#define MV_CESA_CAUSE_ACC_DMA_MASK (1 << MV_CESA_CAUSE_ACC_DMA_BIT)
|
||||
#define MV_CESA_CAUSE_ACC_DMA_ALL_MASK (3 << MV_CESA_CAUSE_ACC_DMA_BIT)
|
||||
|
||||
#define MV_CESA_CAUSE_DMA_COMPL_BIT 9
|
||||
#define MV_CESA_CAUSE_DMA_COMPL_MASK (1 << MV_CESA_CAUSE_DMA_COMPL_BIT)
|
||||
|
||||
#define MV_CESA_CAUSE_DMA_OWN_ERR_BIT 10
|
||||
#define MV_CESA_CAUSE_DMA_OWN_ERR_MASK (1 < MV_CESA_CAUSE_DMA_OWN_ERR_BIT)
|
||||
|
||||
#define MV_CESA_CAUSE_DMA_CHAIN_PKT_BIT 11
|
||||
#define MV_CESA_CAUSE_DMA_CHAIN_PKT_MASK (1 < MV_CESA_CAUSE_DMA_CHAIN_PKT_BIT)
|
||||
|
||||
|
||||
#define MV_CESA_AUTH_DATA_IN_REG (MV_CESA_REG_BASE + 0xd38)
|
||||
#define MV_CESA_AUTH_BIT_COUNT_LOW_REG (MV_CESA_REG_BASE + 0xd20)
|
||||
#define MV_CESA_AUTH_BIT_COUNT_HIGH_REG (MV_CESA_REG_BASE + 0xd24)
|
||||
|
||||
#define MV_CESA_AUTH_INIT_VAL_DIGEST_REG(i) (MV_CESA_REG_BASE + 0xd00 + (i<<2))
|
||||
|
||||
#define MV_CESA_AUTH_INIT_VAL_DIGEST_A_REG (MV_CESA_REG_BASE + 0xd00)
|
||||
#define MV_CESA_AUTH_INIT_VAL_DIGEST_B_REG (MV_CESA_REG_BASE + 0xd04)
|
||||
#define MV_CESA_AUTH_INIT_VAL_DIGEST_C_REG (MV_CESA_REG_BASE + 0xd08)
|
||||
#define MV_CESA_AUTH_INIT_VAL_DIGEST_D_REG (MV_CESA_REG_BASE + 0xd0c)
|
||||
#define MV_CESA_AUTH_INIT_VAL_DIGEST_E_REG (MV_CESA_REG_BASE + 0xd10)
|
||||
#define MV_CESA_AUTH_COMMAND_REG (MV_CESA_REG_BASE + 0xd18)
|
||||
|
||||
#define MV_CESA_AUTH_ALGORITHM_BIT 0
|
||||
#define MV_CESA_AUTH_ALGORITHM_MD5 (0<<AUTH_ALGORITHM_BIT)
|
||||
#define MV_CESA_AUTH_ALGORITHM_SHA1 (1<<AUTH_ALGORITHM_BIT)
|
||||
|
||||
#define MV_CESA_AUTH_IV_MODE_BIT 1
|
||||
#define MV_CESA_AUTH_IV_MODE_INIT (0<<AUTH_IV_MODE_BIT)
|
||||
#define MV_CESA_AUTH_IV_MODE_CONTINUE (1<<AUTH_IV_MODE_BIT)
|
||||
|
||||
#define MV_CESA_AUTH_DATA_BYTE_SWAP_BIT 2
|
||||
#define MV_CESA_AUTH_DATA_BYTE_SWAP_MASK (1<<AUTH_DATA_BYTE_SWAP_BIT)
|
||||
|
||||
|
||||
#define MV_CESA_AUTH_IV_BYTE_SWAP_BIT 4
|
||||
#define MV_CESA_AUTH_IV_BYTE_SWAP_MASK (1<<AUTH_IV_BYTE_SWAP_BIT)
|
||||
|
||||
#define MV_CESA_AUTH_TERMINATION_BIT 31
|
||||
#define MV_CESA_AUTH_TERMINATION_MASK (1<<AUTH_TERMINATION_BIT)
|
||||
|
||||
|
||||
/*************** TDMA Control Register ************************************************/
|
||||
#define MV_CESA_TDMA_CTRL_REG (MV_CESA_TDMA_REG_BASE + 0x840)
|
||||
|
||||
#define MV_CESA_TDMA_BURST_32B 3
|
||||
#define MV_CESA_TDMA_BURST_128B 4
|
||||
|
||||
#define MV_CESA_TDMA_DST_BURST_OFFSET 0
|
||||
#define MV_CESA_TDMA_DST_BURST_ALL_MASK (0x7<<MV_CESA_TDMA_DST_BURST_OFFSET)
|
||||
#define MV_CESA_TDMA_DST_BURST_MASK(burst) ((burst)<<MV_CESA_TDMA_DST_BURST_OFFSET)
|
||||
|
||||
#define MV_CESA_TDMA_OUTSTAND_READ_EN_BIT 4
|
||||
#define MV_CESA_TDMA_OUTSTAND_READ_EN_MASK (1<<MV_CESA_TDMA_OUTSTAND_READ_EN_BIT)
|
||||
|
||||
#define MV_CESA_TDMA_SRC_BURST_OFFSET 6
|
||||
#define MV_CESA_TDMA_SRC_BURST_ALL_MASK (0x7<<MV_CESA_TDMA_SRC_BURST_OFFSET)
|
||||
#define MV_CESA_TDMA_SRC_BURST_MASK(burst) ((burst)<<MV_CESA_TDMA_SRC_BURST_OFFSET)
|
||||
|
||||
#define MV_CESA_TDMA_CHAIN_MODE_BIT 9
|
||||
#define MV_CESA_TDMA_NON_CHAIN_MODE_MASK (1<<MV_CESA_TDMA_CHAIN_MODE_BIT)
|
||||
|
||||
#define MV_CESA_TDMA_BYTE_SWAP_BIT 11
|
||||
#define MV_CESA_TDMA_BYTE_SWAP_MASK (0 << MV_CESA_TDMA_BYTE_SWAP_BIT)
|
||||
#define MV_CESA_TDMA_NO_BYTE_SWAP_MASK (1 << MV_CESA_TDMA_BYTE_SWAP_BIT)
|
||||
|
||||
#define MV_CESA_TDMA_ENABLE_BIT 12
|
||||
#define MV_CESA_TDMA_ENABLE_MASK (1<<MV_CESA_TDMA_ENABLE_BIT)
|
||||
|
||||
#define MV_CESA_TDMA_FETCH_NEXT_DESC_BIT 13
|
||||
#define MV_CESA_TDMA_FETCH_NEXT_DESC_MASK (1<<MV_CESA_TDMA_FETCH_NEXT_DESC_BIT)
|
||||
|
||||
#define MV_CESA_TDMA_CHAN_ACTIVE_BIT 14
|
||||
#define MV_CESA_TDMA_CHAN_ACTIVE_MASK (1<<MV_CESA_TDMA_CHAN_ACTIVE_BIT)
|
||||
/*------------------------------------------------------------------------------------*/
|
||||
|
||||
#define MV_CESA_TDMA_BYTE_COUNT_REG (MV_CESA_TDMA_REG_BASE + 0x800)
|
||||
#define MV_CESA_TDMA_SRC_ADDR_REG (MV_CESA_TDMA_REG_BASE + 0x810)
|
||||
#define MV_CESA_TDMA_DST_ADDR_REG (MV_CESA_TDMA_REG_BASE + 0x820)
|
||||
#define MV_CESA_TDMA_NEXT_DESC_PTR_REG (MV_CESA_TDMA_REG_BASE + 0x830)
|
||||
#define MV_CESA_TDMA_CURR_DESC_PTR_REG (MV_CESA_TDMA_REG_BASE + 0x870)
|
||||
|
||||
#define MV_CESA_TDMA_ERROR_CAUSE_REG (MV_CESA_TDMA_REG_BASE + 0x8C0)
|
||||
#define MV_CESA_TDMA_ERROR_MASK_REG (MV_CESA_TDMA_REG_BASE + 0x8C4)
|
||||
|
||||
|
||||
#endif /* __mvCesaRegs_h__ */
|
||||
|
||||
3096
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaTest.c
Normal file
3096
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvCesaTest.c
Normal file
File diff suppressed because it is too large
Load Diff
158
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.c
Normal file
158
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.c
Normal file
@@ -0,0 +1,158 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvLru.h"
|
||||
/* LRU Cache support */
|
||||
|
||||
|
||||
/* Init LRU cache database */
|
||||
MV_LRU_CACHE* mvLruCacheInit(int numOfEntries)
|
||||
{
|
||||
int i;
|
||||
MV_LRU_CACHE* pLruCache;
|
||||
|
||||
pLruCache = mvOsMalloc(sizeof(MV_LRU_CACHE));
|
||||
if(pLruCache == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
memset(pLruCache, 0, sizeof(MV_LRU_CACHE));
|
||||
|
||||
pLruCache->table = mvOsMalloc(numOfEntries*sizeof(MV_LRU_ENTRY));
|
||||
if(pLruCache->table == NULL)
|
||||
{
|
||||
mvOsFree(pLruCache);
|
||||
return NULL;
|
||||
}
|
||||
memset(pLruCache->table, 0, numOfEntries*sizeof(MV_LRU_ENTRY));
|
||||
pLruCache->tableSize = numOfEntries;
|
||||
|
||||
for(i=0; i<numOfEntries; i++)
|
||||
{
|
||||
pLruCache->table[i].next = i+1;
|
||||
pLruCache->table[i].prev = i-1;
|
||||
}
|
||||
pLruCache->least = 0;
|
||||
pLruCache->most = numOfEntries-1;
|
||||
|
||||
return pLruCache;
|
||||
}
|
||||
|
||||
void mvLruCacheFinish(MV_LRU_CACHE* pLruCache)
|
||||
{
|
||||
mvOsFree(pLruCache->table);
|
||||
mvOsFree(pLruCache);
|
||||
}
|
||||
|
||||
/* Update LRU cache database after using cache Index */
|
||||
void mvLruCacheIdxUpdate(MV_LRU_CACHE* pLruHndl, int cacheIdx)
|
||||
{
|
||||
int prev, next;
|
||||
|
||||
if(cacheIdx == pLruHndl->most)
|
||||
return;
|
||||
|
||||
next = pLruHndl->table[cacheIdx].next;
|
||||
if(cacheIdx == pLruHndl->least)
|
||||
{
|
||||
pLruHndl->least = next;
|
||||
}
|
||||
else
|
||||
{
|
||||
prev = pLruHndl->table[cacheIdx].prev;
|
||||
|
||||
pLruHndl->table[next].prev = prev;
|
||||
pLruHndl->table[prev].next = next;
|
||||
}
|
||||
|
||||
pLruHndl->table[pLruHndl->most].next = cacheIdx;
|
||||
pLruHndl->table[cacheIdx].prev = pLruHndl->most;
|
||||
pLruHndl->most = cacheIdx;
|
||||
}
|
||||
|
||||
/* Delete LRU cache entry */
|
||||
void mvLruCacheIdxDelete(MV_LRU_CACHE* pLruHndl, int cacheIdx)
|
||||
{
|
||||
int prev, next;
|
||||
|
||||
if(cacheIdx == pLruHndl->least)
|
||||
return;
|
||||
|
||||
prev = pLruHndl->table[cacheIdx].prev;
|
||||
if(cacheIdx == pLruHndl->most)
|
||||
{
|
||||
pLruHndl->most = prev;
|
||||
}
|
||||
else
|
||||
{
|
||||
next = pLruHndl->table[cacheIdx].next;
|
||||
|
||||
pLruHndl->table[next].prev = prev;
|
||||
pLruHndl->table[prev].next = next;
|
||||
}
|
||||
pLruHndl->table[pLruHndl->least].prev = cacheIdx;
|
||||
pLruHndl->table[cacheIdx].next = pLruHndl->least;
|
||||
pLruHndl->least = cacheIdx;
|
||||
}
|
||||
112
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.h
Normal file
112
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvLru.h
Normal file
@@ -0,0 +1,112 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
/*******************************************************************************
|
||||
* mvLru.h - Header File for Least Recently Used Cache algorithm
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This header file contains macros typedefs and function declaration for
|
||||
* the Least Recently Used Cache algorithm.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvLru_h__
|
||||
#define __mvLru_h__
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int next;
|
||||
int prev;
|
||||
} MV_LRU_ENTRY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int least;
|
||||
int most;
|
||||
MV_LRU_ENTRY* table;
|
||||
int tableSize;
|
||||
|
||||
}MV_LRU_CACHE;
|
||||
|
||||
|
||||
/* Find Cache index for replacement LRU */
|
||||
static INLINE int mvLruCacheIdxFind(MV_LRU_CACHE* pLruHndl)
|
||||
{
|
||||
return pLruHndl->least;
|
||||
}
|
||||
|
||||
/* Init LRU cache module */
|
||||
MV_LRU_CACHE* mvLruCacheInit(int numOfEntries);
|
||||
|
||||
/* Finish LRU cache module */
|
||||
void mvLruCacheFinish(MV_LRU_CACHE* pLruHndl);
|
||||
|
||||
/* Update LRU cache database after using cache Index */
|
||||
void mvLruCacheIdxUpdate(MV_LRU_CACHE* pLruHndl, int cacheIdx);
|
||||
|
||||
/* Delete LRU cache entry */
|
||||
void mvLruCacheIdxDelete(MV_LRU_CACHE* pLruHndl, int cacheIdx);
|
||||
|
||||
|
||||
#endif /* __mvLru_h__ */
|
||||
349
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c
Normal file
349
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.c
Normal file
@@ -0,0 +1,349 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvMD5.h"
|
||||
|
||||
static void mvMD5Transform(MV_U32 buf[4], MV_U32 const in[MV_MD5_MAC_LEN]);
|
||||
|
||||
#ifdef MV_CPU_LE
|
||||
#define mvByteReverse(buf, len) /* Nothing */
|
||||
#else
|
||||
static void mvByteReverse(unsigned char *buf, unsigned longs);
|
||||
|
||||
/*
|
||||
* Note: this code is harmless on little-endian machines.
|
||||
*/
|
||||
static void mvByteReverse(unsigned char *buf, unsigned longs)
|
||||
{
|
||||
MV_U32 t;
|
||||
|
||||
do
|
||||
{
|
||||
t = (MV_U32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
|
||||
((unsigned) buf[1] << 8 | buf[0]);
|
||||
*(MV_U32 *) buf = t;
|
||||
buf += 4;
|
||||
} while (--longs);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
|
||||
* initialization constants.
|
||||
*/
|
||||
void mvMD5Init(MV_MD5_CONTEXT *ctx)
|
||||
{
|
||||
ctx->buf[0] = 0x67452301;
|
||||
ctx->buf[1] = 0xefcdab89;
|
||||
ctx->buf[2] = 0x98badcfe;
|
||||
ctx->buf[3] = 0x10325476;
|
||||
|
||||
ctx->bits[0] = 0;
|
||||
ctx->bits[1] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update context to reflect the concatenation of another buffer full
|
||||
* of bytes.
|
||||
*/
|
||||
void mvMD5Update(MV_MD5_CONTEXT *ctx, unsigned char const *buf, unsigned len)
|
||||
{
|
||||
MV_U32 t;
|
||||
|
||||
/* Update bitcount */
|
||||
|
||||
t = ctx->bits[0];
|
||||
if ((ctx->bits[0] = t + ((MV_U32) len << 3)) < t)
|
||||
ctx->bits[1]++; /* Carry from low to high */
|
||||
ctx->bits[1] += len >> 29;
|
||||
|
||||
t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
|
||||
|
||||
/* Handle any leading odd-sized chunks */
|
||||
|
||||
if (t)
|
||||
{
|
||||
unsigned char *p = (unsigned char *) ctx->in + t;
|
||||
|
||||
t = 64 - t;
|
||||
if (len < t)
|
||||
{
|
||||
memcpy(p, buf, len);
|
||||
return;
|
||||
}
|
||||
memcpy(p, buf, t);
|
||||
mvByteReverse(ctx->in, MV_MD5_MAC_LEN);
|
||||
mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in);
|
||||
buf += t;
|
||||
len -= t;
|
||||
}
|
||||
/* Process data in 64-byte chunks */
|
||||
|
||||
while (len >= 64)
|
||||
{
|
||||
memcpy(ctx->in, buf, 64);
|
||||
mvByteReverse(ctx->in, MV_MD5_MAC_LEN);
|
||||
mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in);
|
||||
buf += 64;
|
||||
len -= 64;
|
||||
}
|
||||
|
||||
/* Handle any remaining bytes of data. */
|
||||
|
||||
memcpy(ctx->in, buf, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Final wrapup - pad to 64-byte boundary with the bit pattern
|
||||
* 1 0* (64-bit count of bits processed, MSB-first)
|
||||
*/
|
||||
void mvMD5Final(unsigned char digest[MV_MD5_MAC_LEN], MV_MD5_CONTEXT *ctx)
|
||||
{
|
||||
unsigned count;
|
||||
unsigned char *p;
|
||||
|
||||
/* Compute number of bytes mod 64 */
|
||||
count = (ctx->bits[0] >> 3) & 0x3F;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
p = ctx->in + count;
|
||||
*p++ = 0x80;
|
||||
|
||||
/* Bytes of padding needed to make 64 bytes */
|
||||
count = 64 - 1 - count;
|
||||
|
||||
/* Pad out to 56 mod 64 */
|
||||
if (count < 8)
|
||||
{
|
||||
/* Two lots of padding: Pad the first block to 64 bytes */
|
||||
memset(p, 0, count);
|
||||
mvByteReverse(ctx->in, MV_MD5_MAC_LEN);
|
||||
mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in);
|
||||
|
||||
/* Now fill the next block with 56 bytes */
|
||||
memset(ctx->in, 0, 56);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Pad block to 56 bytes */
|
||||
memset(p, 0, count - 8);
|
||||
}
|
||||
mvByteReverse(ctx->in, 14);
|
||||
|
||||
/* Append length in bits and transform */
|
||||
((MV_U32 *) ctx->in)[14] = ctx->bits[0];
|
||||
((MV_U32 *) ctx->in)[15] = ctx->bits[1];
|
||||
|
||||
mvMD5Transform(ctx->buf, (MV_U32 *) ctx->in);
|
||||
mvByteReverse((unsigned char *) ctx->buf, 4);
|
||||
memcpy(digest, ctx->buf, MV_MD5_MAC_LEN);
|
||||
memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
|
||||
}
|
||||
|
||||
/* The four core functions - F1 is optimized somewhat */
|
||||
|
||||
/* #define F1(x, y, z) (x & y | ~x & z) */
|
||||
#define F1(x, y, z) (z ^ (x & (y ^ z)))
|
||||
#define F2(x, y, z) F1(z, x, y)
|
||||
#define F3(x, y, z) (x ^ y ^ z)
|
||||
#define F4(x, y, z) (y ^ (x | ~z))
|
||||
|
||||
/* This is the central step in the MD5 algorithm. */
|
||||
#define MD5STEP(f, w, x, y, z, data, s) \
|
||||
( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
|
||||
|
||||
/*
|
||||
* The core of the MD5 algorithm, this alters an existing MD5 hash to
|
||||
* reflect the addition of 16 longwords of new data. MD5Update blocks
|
||||
* the data and converts bytes into longwords for this routine.
|
||||
*/
|
||||
static void mvMD5Transform(MV_U32 buf[4], MV_U32 const in[MV_MD5_MAC_LEN])
|
||||
{
|
||||
register MV_U32 a, b, c, d;
|
||||
|
||||
a = buf[0];
|
||||
b = buf[1];
|
||||
c = buf[2];
|
||||
d = buf[3];
|
||||
|
||||
MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
|
||||
|
||||
MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
|
||||
|
||||
MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
|
||||
|
||||
MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
|
||||
|
||||
buf[0] += a;
|
||||
buf[1] += b;
|
||||
buf[2] += c;
|
||||
buf[3] += d;
|
||||
}
|
||||
|
||||
void mvMD5(unsigned char const *buf, unsigned len, unsigned char* digest)
|
||||
{
|
||||
MV_MD5_CONTEXT ctx;
|
||||
|
||||
mvMD5Init(&ctx);
|
||||
mvMD5Update(&ctx, buf, len);
|
||||
mvMD5Final(digest, &ctx);
|
||||
}
|
||||
|
||||
|
||||
void mvHmacMd5(unsigned char const* text, int text_len,
|
||||
unsigned char const* key, int key_len,
|
||||
unsigned char* digest)
|
||||
{
|
||||
int i;
|
||||
MV_MD5_CONTEXT ctx;
|
||||
unsigned char k_ipad[64+1]; /* inner padding - key XORd with ipad */
|
||||
unsigned char k_opad[64+1]; /* outer padding - key XORd with opad */
|
||||
|
||||
/* start out by storing key in pads */
|
||||
memset(k_ipad, 0, 64);
|
||||
memcpy(k_ipad, key, key_len);
|
||||
memset(k_opad, 0, 64);
|
||||
memcpy(k_opad, key, key_len);
|
||||
|
||||
/* XOR key with ipad and opad values */
|
||||
for (i=0; i<64; i++)
|
||||
{
|
||||
k_ipad[i] ^= 0x36;
|
||||
k_opad[i] ^= 0x5c;
|
||||
}
|
||||
|
||||
/* perform inner MD5 */
|
||||
mvMD5Init(&ctx); /* init ctx for 1st pass */
|
||||
mvMD5Update(&ctx, k_ipad, 64); /* start with inner pad */
|
||||
mvMD5Update(&ctx, text, text_len); /* then text of datagram */
|
||||
mvMD5Final(digest, &ctx); /* finish up 1st pass */
|
||||
|
||||
/* perform outer MD5 */
|
||||
mvMD5Init(&ctx); /* init ctx for 2nd pass */
|
||||
mvMD5Update(&ctx, k_opad, 64); /* start with outer pad */
|
||||
mvMD5Update(&ctx, digest, 16); /* then results of 1st hash */
|
||||
mvMD5Final(digest, &ctx); /* finish up 2nd pass */
|
||||
}
|
||||
93
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h
Normal file
93
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvMD5.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvMD5_h__
|
||||
#define __mvMD5_h__
|
||||
|
||||
#include "mvMD5.h"
|
||||
|
||||
#define MV_MD5_MAC_LEN 16
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U32 buf[4];
|
||||
MV_U32 bits[2];
|
||||
MV_U8 in[64];
|
||||
|
||||
} MV_MD5_CONTEXT;
|
||||
|
||||
void mvMD5Init(MV_MD5_CONTEXT *context);
|
||||
void mvMD5Update(MV_MD5_CONTEXT *context, unsigned char const *buf,
|
||||
unsigned len);
|
||||
void mvMD5Final(unsigned char digest[16], MV_MD5_CONTEXT *context);
|
||||
|
||||
void mvMD5(unsigned char const *buf, unsigned len, unsigned char* digest);
|
||||
|
||||
void mvHmacMd5(unsigned char const* text, int text_len,
|
||||
unsigned char const* key, int key_len,
|
||||
unsigned char* digest);
|
||||
|
||||
|
||||
#endif /* __mvMD5_h__ */
|
||||
239
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.c
Normal file
239
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.c
Normal file
@@ -0,0 +1,239 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvSHA1.h"
|
||||
|
||||
#define SHA1HANDSOFF
|
||||
|
||||
typedef union
|
||||
{
|
||||
MV_U8 c[64];
|
||||
MV_U32 l[16];
|
||||
|
||||
} CHAR64LONG16;
|
||||
|
||||
static void mvSHA1Transform(MV_U32 state[5], const MV_U8 *buffer);
|
||||
|
||||
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
|
||||
|
||||
|
||||
#ifdef MV_CPU_LE
|
||||
#define blk0(i) (block->l[i] = (rol(block->l[i], 24) & 0xFF00FF00) | \
|
||||
(rol(block->l[i], 8) & 0x00FF00FF))
|
||||
#else
|
||||
#define blk0(i) block->l[i]
|
||||
#endif
|
||||
#define blk(i) (block->l[i & 15] = rol(block->l[(i + 13) & 15] ^ \
|
||||
block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1))
|
||||
|
||||
/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
|
||||
#define R0(v,w,x,y,z,i) \
|
||||
z += ((w & (x ^ y)) ^ y) + blk0(i) + 0x5A827999 + rol(v, 5); \
|
||||
w = rol(w, 30);
|
||||
#define R1(v,w,x,y,z,i) \
|
||||
z += ((w & (x ^ y)) ^ y) + blk(i) + 0x5A827999 + rol(v, 5); \
|
||||
w = rol(w, 30);
|
||||
#define R2(v,w,x,y,z,i) \
|
||||
z += (w ^ x ^ y) + blk(i) + 0x6ED9EBA1 + rol(v, 5); w = rol(w, 30);
|
||||
#define R3(v,w,x,y,z,i) \
|
||||
z += (((w | x) & y) | (w & x)) + blk(i) + 0x8F1BBCDC + rol(v, 5); \
|
||||
w = rol(w, 30);
|
||||
#define R4(v,w,x,y,z,i) \
|
||||
z += (w ^ x ^ y) + blk(i) + 0xCA62C1D6 + rol(v, 5); \
|
||||
w=rol(w, 30);
|
||||
|
||||
/* Hash a single 512-bit block. This is the core of the algorithm. */
|
||||
static void mvSHA1Transform(MV_U32 state[5], const MV_U8 *buffer)
|
||||
{
|
||||
MV_U32 a, b, c, d, e;
|
||||
CHAR64LONG16* block;
|
||||
|
||||
#ifdef SHA1HANDSOFF
|
||||
static MV_U32 workspace[16];
|
||||
|
||||
block = (CHAR64LONG16 *) workspace;
|
||||
memcpy(block, buffer, 64);
|
||||
#else
|
||||
block = (CHAR64LONG16 *) buffer;
|
||||
#endif
|
||||
/* Copy context->state[] to working vars */
|
||||
a = state[0];
|
||||
b = state[1];
|
||||
c = state[2];
|
||||
d = state[3];
|
||||
e = state[4];
|
||||
/* 4 rounds of 20 operations each. Loop unrolled. */
|
||||
R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
|
||||
R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
|
||||
R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
|
||||
R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
|
||||
R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
|
||||
R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
|
||||
R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
|
||||
R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
|
||||
R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
|
||||
R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
|
||||
R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
|
||||
R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
|
||||
R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
|
||||
R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
|
||||
R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
|
||||
R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
|
||||
R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
|
||||
R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
|
||||
R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
|
||||
R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
|
||||
/* Add the working vars back into context.state[] */
|
||||
state[0] += a;
|
||||
state[1] += b;
|
||||
state[2] += c;
|
||||
state[3] += d;
|
||||
state[4] += e;
|
||||
/* Wipe variables */
|
||||
a = b = c = d = e = 0;
|
||||
}
|
||||
|
||||
void mvSHA1Init(MV_SHA1_CTX* context)
|
||||
{
|
||||
/* SHA1 initialization constants */
|
||||
context->state[0] = 0x67452301;
|
||||
context->state[1] = 0xEFCDAB89;
|
||||
context->state[2] = 0x98BADCFE;
|
||||
context->state[3] = 0x10325476;
|
||||
context->state[4] = 0xC3D2E1F0;
|
||||
context->count[0] = context->count[1] = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Run your data through this. */
|
||||
void mvSHA1Update(MV_SHA1_CTX *context, MV_U8 const *data,
|
||||
unsigned int len)
|
||||
{
|
||||
MV_U32 i, j;
|
||||
|
||||
j = (context->count[0] >> 3) & 63;
|
||||
if ((context->count[0] += len << 3) < (len << 3))
|
||||
context->count[1]++;
|
||||
context->count[1] += (len >> 29);
|
||||
if ((j + len) > 63)
|
||||
{
|
||||
memcpy(&context->buffer[j], data, (i = 64-j));
|
||||
mvSHA1Transform(context->state, context->buffer);
|
||||
for ( ; i + 63 < len; i += 64)
|
||||
{
|
||||
mvSHA1Transform(context->state, &data[i]);
|
||||
}
|
||||
j = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
i = 0;
|
||||
}
|
||||
memcpy(&context->buffer[j], &data[i], len - i);
|
||||
}
|
||||
|
||||
void mvSHA1Final(MV_U8* digest, MV_SHA1_CTX* context)
|
||||
{
|
||||
MV_U32 i;
|
||||
MV_U8 finalcount[8];
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] >>
|
||||
((3-(i & 3)) * 8) ) & 255); /* Endian independent */
|
||||
}
|
||||
mvSHA1Update(context, (const unsigned char *) "\200", 1);
|
||||
while ((context->count[0] & 504) != 448)
|
||||
{
|
||||
mvSHA1Update(context, (const unsigned char *) "\0", 1);
|
||||
}
|
||||
mvSHA1Update(context, finalcount, 8); /* Should cause a mvSHA1Transform()
|
||||
*/
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
digest[i] = (unsigned char)
|
||||
((context->state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
|
||||
}
|
||||
/* Wipe variables */
|
||||
i = 0;
|
||||
memset(context->buffer, 0, 64);
|
||||
memset(context->state, 0, 20);
|
||||
memset(context->count, 0, 8);
|
||||
memset(finalcount, 0, 8);
|
||||
|
||||
#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */
|
||||
mvSHA1Transform(context->state, context->buffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void mvSHA1(MV_U8 const *buf, unsigned int len, MV_U8* digest)
|
||||
{
|
||||
MV_SHA1_CTX ctx;
|
||||
|
||||
mvSHA1Init(&ctx);
|
||||
mvSHA1Update(&ctx, buf, len);
|
||||
mvSHA1Final(digest, &ctx);
|
||||
}
|
||||
88
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.h
Normal file
88
target/linux/generic/files/crypto/ocf/kirkwood/cesa/mvSHA1.h
Normal file
@@ -0,0 +1,88 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvSHA1_h__
|
||||
#define __mvSHA1_h__
|
||||
|
||||
#include "mvSHA1.h"
|
||||
|
||||
#define MV_SHA1_MAC_LEN 20
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U32 state[5];
|
||||
MV_U32 count[2];
|
||||
MV_U8 buffer[64];
|
||||
|
||||
} MV_SHA1_CTX;
|
||||
|
||||
void mvSHA1Init(MV_SHA1_CTX *context);
|
||||
void mvSHA1Update(MV_SHA1_CTX *context, MV_U8 const *buf, unsigned int len);
|
||||
void mvSHA1Final(MV_U8* digest, MV_SHA1_CTX *context);
|
||||
|
||||
void mvSHA1(MV_U8 const *buf, unsigned int len, MV_U8* digest);
|
||||
|
||||
|
||||
#endif /* __mvSHA1_h__ */
|
||||
1296
target/linux/generic/files/crypto/ocf/kirkwood/cesa_ocf_drv.c
Normal file
1296
target/linux/generic/files/crypto/ocf/kirkwood/cesa_ocf_drv.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,213 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmv802_3h
|
||||
#define __INCmv802_3h
|
||||
|
||||
|
||||
/* includes */
|
||||
#include "mvTypes.h"
|
||||
|
||||
/* Defines */
|
||||
#define MV_MAX_ETH_DATA 1500
|
||||
|
||||
/* 802.3 types */
|
||||
#define MV_IP_TYPE 0x0800
|
||||
#define MV_IP_ARP_TYPE 0x0806
|
||||
#define MV_APPLE_TALK_ARP_TYPE 0x80F3
|
||||
#define MV_NOVELL_IPX_TYPE 0x8137
|
||||
#define MV_EAPOL_TYPE 0x888e
|
||||
|
||||
|
||||
|
||||
/* Encapsulation header for RFC1042 and Ethernet_tunnel */
|
||||
|
||||
#define MV_RFC1042_SNAP_HEADER {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}
|
||||
|
||||
#define MV_ETH_SNAP_LSB 0xF8
|
||||
|
||||
|
||||
#define MV_MAC_ADDR_SIZE (6)
|
||||
#define MV_MAC_STR_SIZE (20)
|
||||
#define MV_VLAN_HLEN (4)
|
||||
|
||||
/* This macro checks for a multicast mac address */
|
||||
#define MV_IS_MULTICAST_MAC(mac) (((mac)[0] & 0x1) == 1)
|
||||
|
||||
|
||||
/* This macro checks for an broadcast mac address */
|
||||
#define MV_IS_BROADCAST_MAC(mac) \
|
||||
(((mac)[0] == 0xFF) && \
|
||||
((mac)[1] == 0xFF) && \
|
||||
((mac)[2] == 0xFF) && \
|
||||
((mac)[3] == 0xFF) && \
|
||||
((mac)[4] == 0xFF) && \
|
||||
((mac)[5] == 0xFF))
|
||||
|
||||
|
||||
/* Typedefs */
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 pDA[MV_MAC_ADDR_SIZE];
|
||||
MV_U8 pSA[MV_MAC_ADDR_SIZE];
|
||||
MV_U16 typeOrLen;
|
||||
|
||||
} MV_802_3_HEADER;
|
||||
|
||||
enum {
|
||||
MV_IP_PROTO_NULL = 0, /* Dummy protocol for TCP */
|
||||
MV_IP_PROTO_ICMP = 1, /* Internet Control Message Protocol */
|
||||
MV_IP_PROTO_IGMP = 2, /* Internet Group Management Protocol */
|
||||
MV_IP_PROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94) */
|
||||
MV_IP_PROTO_TCP = 6, /* Transmission Control Protocol */
|
||||
MV_IP_PROTO_EGP = 8, /* Exterior Gateway Protocol */
|
||||
MV_IP_PROTO_PUP = 12, /* PUP protocol */
|
||||
MV_IP_PROTO_UDP = 17, /* User Datagram Protocol */
|
||||
MV_IP_PROTO_IDP = 22, /* XNS IDP protocol */
|
||||
MV_IP_PROTO_DCCP = 33, /* Datagram Congestion Control Protocol */
|
||||
MV_IP_PROTO_IPV6 = 41, /* IPv6-in-IPv4 tunnelling */
|
||||
MV_IP_PROTO_RSVP = 46, /* RSVP protocol */
|
||||
MV_IP_PROTO_GRE = 47, /* Cisco GRE tunnels (rfc 1701,1702) */
|
||||
MV_IP_PROTO_ESP = 50, /* Encapsulation Security Payload protocol */
|
||||
MV_IP_PROTO_AH = 51, /* Authentication Header protocol */
|
||||
MV_IP_PROTO_BEETPH = 94, /* IP option pseudo header for BEET */
|
||||
MV_IP_PROTO_PIM = 103,
|
||||
MV_IP_PROTO_COMP = 108, /* Compression Header protocol */
|
||||
MV_IP_PROTO_ZERO_HOP = 114, /* Any 0 hop protocol (IANA) */
|
||||
MV_IP_PROTO_SCTP = 132, /* Stream Control Transport Protocol */
|
||||
MV_IP_PROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */
|
||||
|
||||
MV_IP_PROTO_RAW = 255, /* Raw IP packets */
|
||||
MV_IP_PROTO_MAX
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 version;
|
||||
MV_U8 tos;
|
||||
MV_U16 totalLength;
|
||||
MV_U16 identifier;
|
||||
MV_U16 fragmentCtrl;
|
||||
MV_U8 ttl;
|
||||
MV_U8 protocol;
|
||||
MV_U16 checksum;
|
||||
MV_U32 srcIP;
|
||||
MV_U32 dstIP;
|
||||
|
||||
} MV_IP_HEADER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U32 spi;
|
||||
MV_U32 seqNum;
|
||||
} MV_ESP_HEADER;
|
||||
|
||||
#define MV_ICMP_ECHOREPLY 0 /* Echo Reply */
|
||||
#define MV_ICMP_DEST_UNREACH 3 /* Destination Unreachable */
|
||||
#define MV_ICMP_SOURCE_QUENCH 4 /* Source Quench */
|
||||
#define MV_ICMP_REDIRECT 5 /* Redirect (change route) */
|
||||
#define MV_ICMP_ECHO 8 /* Echo Request */
|
||||
#define MV_ICMP_TIME_EXCEEDED 11 /* Time Exceeded */
|
||||
#define MV_ICMP_PARAMETERPROB 12 /* Parameter Problem */
|
||||
#define MV_ICMP_TIMESTAMP 13 /* Timestamp Request */
|
||||
#define MV_ICMP_TIMESTAMPREPLY 14 /* Timestamp Reply */
|
||||
#define MV_ICMP_INFO_REQUEST 15 /* Information Request */
|
||||
#define MV_ICMP_INFO_REPLY 16 /* Information Reply */
|
||||
#define MV_ICMP_ADDRESS 17 /* Address Mask Request */
|
||||
#define MV_ICMP_ADDRESSREPLY 18 /* Address Mask Reply */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U8 type;
|
||||
MV_U8 code;
|
||||
MV_U16 checksum;
|
||||
MV_U16 id;
|
||||
MV_U16 sequence;
|
||||
|
||||
} MV_ICMP_ECHO_HEADER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U16 source;
|
||||
MV_U16 dest;
|
||||
MV_U32 seq;
|
||||
MV_U32 ack_seq;
|
||||
MV_U16 flags;
|
||||
MV_U16 window;
|
||||
MV_U16 chksum;
|
||||
MV_U16 urg_offset;
|
||||
|
||||
} MV_TCP_HEADER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MV_U16 source;
|
||||
MV_U16 dest;
|
||||
MV_U16 len;
|
||||
MV_U16 check;
|
||||
|
||||
} MV_UDP_HEADER;
|
||||
|
||||
#endif /* __INCmv802_3h */
|
||||
@@ -0,0 +1,277 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mv802_3.h"
|
||||
#include "mvCommon.h"
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvMacStrToHex - Convert MAC format string to hex.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function convert MAC format string to hex.
|
||||
*
|
||||
* INPUT:
|
||||
* macStr - MAC address string. Fornat of address string is
|
||||
* uu:vv:ww:xx:yy:zz, where ":" can be any delimiter.
|
||||
*
|
||||
* OUTPUT:
|
||||
* macHex - MAC in hex format.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvMacStrToHex(const char* macStr, MV_U8* macHex)
|
||||
{
|
||||
int i;
|
||||
char tmp[3];
|
||||
|
||||
for(i = 0; i < MV_MAC_ADDR_SIZE; i++)
|
||||
{
|
||||
tmp[0] = macStr[(i * 3) + 0];
|
||||
tmp[1] = macStr[(i * 3) + 1];
|
||||
tmp[2] = '\0';
|
||||
macHex[i] = (MV_U8) (strtol(tmp, NULL, 16));
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvMacHexToStr - Convert MAC in hex format to string format.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function convert MAC in hex format to string format.
|
||||
*
|
||||
* INPUT:
|
||||
* macHex - MAC in hex format.
|
||||
*
|
||||
* OUTPUT:
|
||||
* macStr - MAC address string. String format is uu:vv:ww:xx:yy:zz.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvMacHexToStr(MV_U8* macHex, char* macStr)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < MV_MAC_ADDR_SIZE; i++)
|
||||
{
|
||||
mvOsSPrintf(&macStr[i * 3], "%02x:", macHex[i]);
|
||||
}
|
||||
macStr[(i * 3) - 1] = '\0';
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSizePrint - Print the given size with size unit description.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the given size with size unit description.
|
||||
* FOr example when size paramter is 0x180000, the function prints:
|
||||
* "size 1MB+500KB"
|
||||
*
|
||||
* INPUT:
|
||||
* size - Size in bytes.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvSizePrint(MV_U32 size)
|
||||
{
|
||||
mvOsOutput("size ");
|
||||
|
||||
if(size >= _1G)
|
||||
{
|
||||
mvOsOutput("%3dGB ", size / _1G);
|
||||
size %= _1G;
|
||||
if(size)
|
||||
mvOsOutput("+");
|
||||
}
|
||||
if(size >= _1M )
|
||||
{
|
||||
mvOsOutput("%3dMB ", size / _1M);
|
||||
size %= _1M;
|
||||
if(size)
|
||||
mvOsOutput("+");
|
||||
}
|
||||
if(size >= _1K)
|
||||
{
|
||||
mvOsOutput("%3dKB ", size / _1K);
|
||||
size %= _1K;
|
||||
if(size)
|
||||
mvOsOutput("+");
|
||||
}
|
||||
if(size > 0)
|
||||
{
|
||||
mvOsOutput("%3dB ", size);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvHexToBin - Convert hex to binary
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function Convert hex to binary.
|
||||
*
|
||||
* INPUT:
|
||||
* pHexStr - hex buffer pointer.
|
||||
* size - Size to convert.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pBin - Binary buffer pointer.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvHexToBin(const char* pHexStr, MV_U8* pBin, int size)
|
||||
{
|
||||
int j, i;
|
||||
char tmp[3];
|
||||
MV_U8 byte;
|
||||
|
||||
for(j=0, i=0; j<size; j++, i+=2)
|
||||
{
|
||||
tmp[0] = pHexStr[i];
|
||||
tmp[1] = pHexStr[i+1];
|
||||
tmp[2] = '\0';
|
||||
byte = (MV_U8) (strtol(tmp, NULL, 16) & 0xFF);
|
||||
pBin[j] = byte;
|
||||
}
|
||||
}
|
||||
|
||||
void mvAsciiToHex(const char* asciiStr, char* hexStr)
|
||||
{
|
||||
int i=0;
|
||||
|
||||
while(asciiStr[i] != 0)
|
||||
{
|
||||
mvOsSPrintf(&hexStr[i*2], "%02x", asciiStr[i]);
|
||||
i++;
|
||||
}
|
||||
hexStr[i*2] = 0;
|
||||
}
|
||||
|
||||
|
||||
void mvBinToHex(const MV_U8* bin, char* hexStr, int size)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<size; i++)
|
||||
{
|
||||
mvOsSPrintf(&hexStr[i*2], "%02x", bin[i]);
|
||||
}
|
||||
hexStr[i*2] = '\0';
|
||||
}
|
||||
|
||||
void mvBinToAscii(const MV_U8* bin, char* asciiStr, int size)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<size; i++)
|
||||
{
|
||||
mvOsSPrintf(&asciiStr[i*2], "%c", bin[i]);
|
||||
}
|
||||
asciiStr[i*2] = '\0';
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvLog2 -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Calculate the Log2 of a given number.
|
||||
*
|
||||
* INPUT:
|
||||
* num - A number to calculate the Log2 for.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* Log 2 of the input number, or 0xFFFFFFFF if input is 0.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvLog2(MV_U32 num)
|
||||
{
|
||||
MV_U32 result = 0;
|
||||
if(num == 0)
|
||||
return 0xFFFFFFFF;
|
||||
while(num != 1)
|
||||
{
|
||||
num = num >> 1;
|
||||
result++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,308 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
|
||||
#ifndef __INCmvCommonh
|
||||
#define __INCmvCommonh
|
||||
|
||||
#include "mvTypes.h"
|
||||
|
||||
/* Swap tool */
|
||||
|
||||
/* 16bit nibble swap. For example 0x1234 -> 0x2143 */
|
||||
#define MV_NIBBLE_SWAP_16BIT(X) (((X&0xf) << 4) | \
|
||||
((X&0xf0) >> 4) | \
|
||||
((X&0xf00) << 4) | \
|
||||
((X&0xf000) >> 4))
|
||||
|
||||
/* 32bit nibble swap. For example 0x12345678 -> 0x21436587 */
|
||||
#define MV_NIBBLE_SWAP_32BIT(X) (((X&0xf) << 4) | \
|
||||
((X&0xf0) >> 4) | \
|
||||
((X&0xf00) << 4) | \
|
||||
((X&0xf000) >> 4) | \
|
||||
((X&0xf0000) << 4) | \
|
||||
((X&0xf00000) >> 4) | \
|
||||
((X&0xf000000) << 4) | \
|
||||
((X&0xf0000000) >> 4))
|
||||
|
||||
/* 16bit byte swap. For example 0x1122 -> 0x2211 */
|
||||
#define MV_BYTE_SWAP_16BIT(X) ((((X)&0xff)<<8) | (((X)&0xff00)>>8))
|
||||
|
||||
/* 32bit byte swap. For example 0x11223344 -> 0x44332211 */
|
||||
#define MV_BYTE_SWAP_32BIT(X) ((((X)&0xff)<<24) | \
|
||||
(((X)&0xff00)<<8) | \
|
||||
(((X)&0xff0000)>>8) | \
|
||||
(((X)&0xff000000)>>24))
|
||||
|
||||
/* 64bit byte swap. For example 0x11223344.55667788 -> 0x88776655.44332211 */
|
||||
#define MV_BYTE_SWAP_64BIT(X) ((l64) ((((X)&0xffULL)<<56) | \
|
||||
(((X)&0xff00ULL)<<40) | \
|
||||
(((X)&0xff0000ULL)<<24) | \
|
||||
(((X)&0xff000000ULL)<<8) | \
|
||||
(((X)&0xff00000000ULL)>>8) | \
|
||||
(((X)&0xff0000000000ULL)>>24) | \
|
||||
(((X)&0xff000000000000ULL)>>40) | \
|
||||
(((X)&0xff00000000000000ULL)>>56)))
|
||||
|
||||
/* Endianess macros. */
|
||||
#if defined(MV_CPU_LE)
|
||||
#define MV_16BIT_LE(X) (X)
|
||||
#define MV_32BIT_LE(X) (X)
|
||||
#define MV_64BIT_LE(X) (X)
|
||||
#define MV_16BIT_BE(X) MV_BYTE_SWAP_16BIT(X)
|
||||
#define MV_32BIT_BE(X) MV_BYTE_SWAP_32BIT(X)
|
||||
#define MV_64BIT_BE(X) MV_BYTE_SWAP_64BIT(X)
|
||||
#elif defined(MV_CPU_BE)
|
||||
#define MV_16BIT_LE(X) MV_BYTE_SWAP_16BIT(X)
|
||||
#define MV_32BIT_LE(X) MV_BYTE_SWAP_32BIT(X)
|
||||
#define MV_64BIT_LE(X) MV_BYTE_SWAP_64BIT(X)
|
||||
#define MV_16BIT_BE(X) (X)
|
||||
#define MV_32BIT_BE(X) (X)
|
||||
#define MV_64BIT_BE(X) (X)
|
||||
#else
|
||||
#error "CPU endianess isn't defined!\n"
|
||||
#endif
|
||||
|
||||
|
||||
/* Bit field definitions */
|
||||
#define NO_BIT 0x00000000
|
||||
#define BIT0 0x00000001
|
||||
#define BIT1 0x00000002
|
||||
#define BIT2 0x00000004
|
||||
#define BIT3 0x00000008
|
||||
#define BIT4 0x00000010
|
||||
#define BIT5 0x00000020
|
||||
#define BIT6 0x00000040
|
||||
#define BIT7 0x00000080
|
||||
#define BIT8 0x00000100
|
||||
#define BIT9 0x00000200
|
||||
#define BIT10 0x00000400
|
||||
#define BIT11 0x00000800
|
||||
#define BIT12 0x00001000
|
||||
#define BIT13 0x00002000
|
||||
#define BIT14 0x00004000
|
||||
#define BIT15 0x00008000
|
||||
#define BIT16 0x00010000
|
||||
#define BIT17 0x00020000
|
||||
#define BIT18 0x00040000
|
||||
#define BIT19 0x00080000
|
||||
#define BIT20 0x00100000
|
||||
#define BIT21 0x00200000
|
||||
#define BIT22 0x00400000
|
||||
#define BIT23 0x00800000
|
||||
#define BIT24 0x01000000
|
||||
#define BIT25 0x02000000
|
||||
#define BIT26 0x04000000
|
||||
#define BIT27 0x08000000
|
||||
#define BIT28 0x10000000
|
||||
#define BIT29 0x20000000
|
||||
#define BIT30 0x40000000
|
||||
#define BIT31 0x80000000
|
||||
|
||||
/* Handy sizes */
|
||||
#define _1K 0x00000400
|
||||
#define _2K 0x00000800
|
||||
#define _4K 0x00001000
|
||||
#define _8K 0x00002000
|
||||
#define _16K 0x00004000
|
||||
#define _32K 0x00008000
|
||||
#define _64K 0x00010000
|
||||
#define _128K 0x00020000
|
||||
#define _256K 0x00040000
|
||||
#define _512K 0x00080000
|
||||
|
||||
#define _1M 0x00100000
|
||||
#define _2M 0x00200000
|
||||
#define _4M 0x00400000
|
||||
#define _8M 0x00800000
|
||||
#define _16M 0x01000000
|
||||
#define _32M 0x02000000
|
||||
#define _64M 0x04000000
|
||||
#define _128M 0x08000000
|
||||
#define _256M 0x10000000
|
||||
#define _512M 0x20000000
|
||||
|
||||
#define _1G 0x40000000
|
||||
#define _2G 0x80000000
|
||||
|
||||
/* Tclock and Sys clock define */
|
||||
#define _100MHz 100000000
|
||||
#define _125MHz 125000000
|
||||
#define _133MHz 133333334
|
||||
#define _150MHz 150000000
|
||||
#define _160MHz 160000000
|
||||
#define _166MHz 166666667
|
||||
#define _175MHz 175000000
|
||||
#define _178MHz 178000000
|
||||
#define _183MHz 183333334
|
||||
#define _187MHz 187000000
|
||||
#define _192MHz 192000000
|
||||
#define _194MHz 194000000
|
||||
#define _200MHz 200000000
|
||||
#define _233MHz 233333334
|
||||
#define _250MHz 250000000
|
||||
#define _266MHz 266666667
|
||||
#define _300MHz 300000000
|
||||
|
||||
/* For better address window table readability */
|
||||
#define EN MV_TRUE
|
||||
#define DIS MV_FALSE
|
||||
#define N_A -1 /* Not applicable */
|
||||
|
||||
/* Cache configuration options for memory (DRAM, SRAM, ... ) */
|
||||
|
||||
/* Memory uncached, HW or SW cache coherency is not needed */
|
||||
#define MV_UNCACHED 0
|
||||
/* Memory cached, HW cache coherency supported in WriteThrough mode */
|
||||
#define MV_CACHE_COHER_HW_WT 1
|
||||
/* Memory cached, HW cache coherency supported in WriteBack mode */
|
||||
#define MV_CACHE_COHER_HW_WB 2
|
||||
/* Memory cached, No HW cache coherency, Cache coherency must be in SW */
|
||||
#define MV_CACHE_COHER_SW 3
|
||||
|
||||
|
||||
/* Macro for testing aligment. Positive if number is NOT aligned */
|
||||
#define MV_IS_NOT_ALIGN(number, align) ((number) & ((align) - 1))
|
||||
|
||||
/* Macro for alignment up. For example, MV_ALIGN_UP(0x0330, 0x20) = 0x0340 */
|
||||
#define MV_ALIGN_UP(number, align) \
|
||||
(((number) & ((align) - 1)) ? (((number) + (align)) & ~((align)-1)) : (number))
|
||||
|
||||
/* Macro for alignment down. For example, MV_ALIGN_UP(0x0330, 0x20) = 0x0320 */
|
||||
#define MV_ALIGN_DOWN(number, align) ((number) & ~((align)-1))
|
||||
|
||||
/* This macro returns absolute value */
|
||||
#define MV_ABS(number) (((int)(number) < 0) ? -(int)(number) : (int)(number))
|
||||
|
||||
|
||||
/* Bit fields manipulation macros */
|
||||
|
||||
/* An integer word which its 'x' bit is set */
|
||||
#define MV_BIT_MASK(bitNum) (1 << (bitNum) )
|
||||
|
||||
/* Checks wheter bit 'x' in integer word is set */
|
||||
#define MV_BIT_CHECK(word, bitNum) ( (word) & MV_BIT_MASK(bitNum) )
|
||||
|
||||
/* Clear (reset) bit 'x' in integer word (RMW - Read-Modify-Write) */
|
||||
#define MV_BIT_CLEAR(word, bitNum) ( (word) &= ~(MV_BIT_MASK(bitNum)) )
|
||||
|
||||
/* Set bit 'x' in integer word (RMW) */
|
||||
#define MV_BIT_SET(word, bitNum) ( (word) |= MV_BIT_MASK(bitNum) )
|
||||
|
||||
/* Invert bit 'x' in integer word (RMW) */
|
||||
#define MV_BIT_INV(word, bitNum) ( (word) ^= MV_BIT_MASK(bitNum) )
|
||||
|
||||
/* Get the min between 'a' or 'b' */
|
||||
#define MV_MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
/* Get the max between 'a' or 'b' */
|
||||
#define MV_MAX(a,b) (((a) < (b)) ? (b) : (a))
|
||||
|
||||
/* Temporary */
|
||||
#define mvOsDivide(num, div) \
|
||||
({ \
|
||||
int i=0, rem=(num); \
|
||||
\
|
||||
while(rem >= (div)) \
|
||||
{ \
|
||||
rem -= (div); \
|
||||
i++; \
|
||||
} \
|
||||
(i); \
|
||||
})
|
||||
|
||||
/* Temporary */
|
||||
#define mvOsReminder(num, div) \
|
||||
({ \
|
||||
int rem = (num); \
|
||||
\
|
||||
while(rem >= (div)) \
|
||||
rem -= (div); \
|
||||
(rem); \
|
||||
})
|
||||
|
||||
#define MV_IP_QUAD(ipAddr) ((ipAddr >> 24) & 0xFF), ((ipAddr >> 16) & 0xFF), \
|
||||
((ipAddr >> 8) & 0xFF), ((ipAddr >> 0) & 0xFF)
|
||||
|
||||
#define MV_IS_POWER_OF_2(num) ((num != 0) && ((num & (num - 1)) == 0))
|
||||
|
||||
#ifndef MV_ASMLANGUAGE
|
||||
/* mvCommon API list */
|
||||
|
||||
MV_VOID mvHexToBin(const char* pHexStr, MV_U8* pBin, int size);
|
||||
void mvAsciiToHex(const char* asciiStr, char* hexStr);
|
||||
void mvBinToHex(const MV_U8* bin, char* hexStr, int size);
|
||||
void mvBinToAscii(const MV_U8* bin, char* asciiStr, int size);
|
||||
|
||||
MV_STATUS mvMacStrToHex(const char* macStr, MV_U8* macHex);
|
||||
MV_STATUS mvMacHexToStr(MV_U8* macHex, char* macStr);
|
||||
void mvSizePrint(MV_U32);
|
||||
|
||||
MV_U32 mvLog2(MV_U32 num);
|
||||
|
||||
#endif /* MV_ASMLANGUAGE */
|
||||
|
||||
|
||||
#endif /* __INCmvCommonh */
|
||||
@@ -0,0 +1,326 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
|
||||
/* includes */
|
||||
#include "mvOs.h"
|
||||
#include "mv802_3.h"
|
||||
#include "mvCommon.h"
|
||||
#include "mvDebug.h"
|
||||
|
||||
/* Global variables effect on behave MV_DEBUG_PRINT and MV_DEBUG_CODE macros
|
||||
* mvDebug - map of bits (one for each module) bit=1 means enable
|
||||
* debug code and messages for this module
|
||||
* mvModuleDebug - array of 32 bits varables one for each module
|
||||
*/
|
||||
MV_U32 mvDebug = 0;
|
||||
MV_U32 mvDebugModules[MV_MODULE_MAX];
|
||||
|
||||
/* Init mvModuleDebug array to default values */
|
||||
void mvDebugInit(void)
|
||||
{
|
||||
int bit;
|
||||
|
||||
mvDebug = 0;
|
||||
for(bit=0; bit<MV_MODULE_MAX; bit++)
|
||||
{
|
||||
mvDebugModules[bit] = MV_DEBUG_FLAG_ERR | MV_DEBUG_FLAG_STATS;
|
||||
mvDebug |= MV_BIT_MASK(bit);
|
||||
}
|
||||
}
|
||||
|
||||
void mvDebugModuleEnable(MV_MODULE_ID module, MV_BOOL isEnable)
|
||||
{
|
||||
if (isEnable)
|
||||
{
|
||||
MV_BIT_SET(mvDebug, module);
|
||||
}
|
||||
else
|
||||
MV_BIT_CLEAR(mvDebug, module);
|
||||
}
|
||||
|
||||
void mvDebugModuleSetFlags(MV_MODULE_ID module, MV_U32 flags)
|
||||
{
|
||||
mvDebugModules[module] |= flags;
|
||||
}
|
||||
|
||||
void mvDebugModuleClearFlags(MV_MODULE_ID module, MV_U32 flags)
|
||||
{
|
||||
mvDebugModules[module] &= ~flags;
|
||||
}
|
||||
|
||||
/* Dump memory in specific format:
|
||||
* address: X1X1X1X1 X2X2X2X2 ... X8X8X8X8
|
||||
*/
|
||||
void mvDebugMemDump(void* addr, int size, int access)
|
||||
{
|
||||
int i, j;
|
||||
MV_U32 memAddr = (MV_U32)addr;
|
||||
|
||||
if(access == 0)
|
||||
access = 1;
|
||||
|
||||
if( (access != 4) && (access != 2) && (access != 1) )
|
||||
{
|
||||
mvOsPrintf("%d wrong access size. Access must be 1 or 2 or 4\n",
|
||||
access);
|
||||
return;
|
||||
}
|
||||
memAddr = MV_ALIGN_DOWN( (unsigned int)addr, 4);
|
||||
size = MV_ALIGN_UP(size, 4);
|
||||
addr = (void*)MV_ALIGN_DOWN( (unsigned int)addr, access);
|
||||
while(size > 0)
|
||||
{
|
||||
mvOsPrintf("%08x: ", memAddr);
|
||||
i = 0;
|
||||
/* 32 bytes in the line */
|
||||
while(i < 32)
|
||||
{
|
||||
if(memAddr >= (MV_U32)addr)
|
||||
{
|
||||
switch(access)
|
||||
{
|
||||
case 1:
|
||||
if( memAddr == CPU_PHY_MEM(memAddr) )
|
||||
{
|
||||
mvOsPrintf("%02x ", MV_MEMIO8_READ(memAddr));
|
||||
}
|
||||
else
|
||||
{
|
||||
mvOsPrintf("%02x ", *((MV_U8*)memAddr));
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if( memAddr == CPU_PHY_MEM(memAddr) )
|
||||
{
|
||||
mvOsPrintf("%04x ", MV_MEMIO16_READ(memAddr));
|
||||
}
|
||||
else
|
||||
{
|
||||
mvOsPrintf("%04x ", *((MV_U16*)memAddr));
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if( memAddr == CPU_PHY_MEM(memAddr) )
|
||||
{
|
||||
mvOsPrintf("%08x ", MV_MEMIO32_READ(memAddr));
|
||||
}
|
||||
else
|
||||
{
|
||||
mvOsPrintf("%08x ", *((MV_U32*)memAddr));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(j=0; j<(access*2+1); j++)
|
||||
mvOsPrintf(" ");
|
||||
}
|
||||
i += access;
|
||||
memAddr += access;
|
||||
size -= access;
|
||||
if(size <= 0)
|
||||
break;
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
void mvDebugPrintBufInfo(BUF_INFO* pBufInfo, int size, int access)
|
||||
{
|
||||
if(pBufInfo == NULL)
|
||||
{
|
||||
mvOsPrintf("\n!!! pBufInfo = NULL\n");
|
||||
return;
|
||||
}
|
||||
mvOsPrintf("\n*** pBufInfo=0x%x, cmdSts=0x%08x, pBuf=0x%x, bufSize=%d\n",
|
||||
(unsigned int)pBufInfo,
|
||||
(unsigned int)pBufInfo->cmdSts,
|
||||
(unsigned int)pBufInfo->pBuff,
|
||||
(unsigned int)pBufInfo->bufSize);
|
||||
mvOsPrintf("pData=0x%x, byteCnt=%d, pNext=0x%x, uInfo1=0x%x, uInfo2=0x%x\n",
|
||||
(unsigned int)pBufInfo->pData,
|
||||
(unsigned int)pBufInfo->byteCnt,
|
||||
(unsigned int)pBufInfo->pNextBufInfo,
|
||||
(unsigned int)pBufInfo->userInfo1,
|
||||
(unsigned int)pBufInfo->userInfo2);
|
||||
if(pBufInfo->pData != NULL)
|
||||
{
|
||||
if(size > pBufInfo->byteCnt)
|
||||
size = pBufInfo->byteCnt;
|
||||
mvDebugMemDump(pBufInfo->pData, size, access);
|
||||
}
|
||||
}
|
||||
|
||||
void mvDebugPrintPktInfo(MV_PKT_INFO* pPktInfo, int size, int access)
|
||||
{
|
||||
int frag, len;
|
||||
|
||||
if(pPktInfo == NULL)
|
||||
{
|
||||
mvOsPrintf("\n!!! pPktInfo = NULL\n");
|
||||
return;
|
||||
}
|
||||
mvOsPrintf("\npPkt=%p, stat=0x%08x, numFr=%d, size=%d, pFr=%p, osInfo=0x%lx\n",
|
||||
pPktInfo, pPktInfo->status, pPktInfo->numFrags, pPktInfo->pktSize,
|
||||
pPktInfo->pFrags, pPktInfo->osInfo);
|
||||
|
||||
for(frag=0; frag<pPktInfo->numFrags; frag++)
|
||||
{
|
||||
mvOsPrintf("#%2d. bufVirt=%p, bufSize=%d\n",
|
||||
frag, pPktInfo->pFrags[frag].bufVirtPtr,
|
||||
pPktInfo->pFrags[frag].bufSize);
|
||||
if(size > 0)
|
||||
{
|
||||
len = MV_MIN((int)pPktInfo->pFrags[frag].bufSize, size);
|
||||
mvDebugMemDump(pPktInfo->pFrags[frag].bufVirtPtr, len, access);
|
||||
size -= len;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void mvDebugPrintIpAddr(MV_U32 ipAddr)
|
||||
{
|
||||
mvOsPrintf("%d.%d.%d.%d", ((ipAddr >> 24) & 0xFF), ((ipAddr >> 16) & 0xFF),
|
||||
((ipAddr >> 8) & 0xFF), ((ipAddr >> 0) & 0xFF));
|
||||
}
|
||||
|
||||
void mvDebugPrintMacAddr(const MV_U8* pMacAddr)
|
||||
{
|
||||
int i;
|
||||
|
||||
mvOsPrintf("%02x", (unsigned int)pMacAddr[0]);
|
||||
for(i=1; i<MV_MAC_ADDR_SIZE; i++)
|
||||
{
|
||||
mvOsPrintf(":%02x", pMacAddr[i]);
|
||||
}
|
||||
/* mvOsPrintf("\n");*/
|
||||
}
|
||||
|
||||
|
||||
/******* There are three functions deals with MV_DEBUG_TIMES structure ********/
|
||||
|
||||
/* Reset MV_DEBUG_TIMES entry */
|
||||
void mvDebugResetTimeEntry(MV_DEBUG_TIMES* pTimeEntry, int count, char* pName)
|
||||
{
|
||||
pTimeEntry->begin = 0;
|
||||
pTimeEntry->count = count;
|
||||
pTimeEntry->end = 0;
|
||||
pTimeEntry->left = pTimeEntry->count;
|
||||
pTimeEntry->total = 0;
|
||||
pTimeEntry->min = 0xFFFFFFFF;
|
||||
pTimeEntry->max = 0x0;
|
||||
strncpy(pTimeEntry->name, pName, sizeof(pTimeEntry->name)-1);
|
||||
pTimeEntry->name[sizeof(pTimeEntry->name)-1] = '\0';
|
||||
}
|
||||
|
||||
/* Print out MV_DEBUG_TIMES entry */
|
||||
void mvDebugPrintTimeEntry(MV_DEBUG_TIMES* pTimeEntry, MV_BOOL isTitle)
|
||||
{
|
||||
int num;
|
||||
|
||||
if(isTitle == MV_TRUE)
|
||||
mvOsPrintf("Event NumOfEvents TotalTime Average Min Max\n");
|
||||
|
||||
num = pTimeEntry->count-pTimeEntry->left;
|
||||
if(num > 0)
|
||||
{
|
||||
mvOsPrintf("%-11s %6u 0x%08lx %6lu %6lu %6lu\n",
|
||||
pTimeEntry->name, num, pTimeEntry->total, pTimeEntry->total/num,
|
||||
pTimeEntry->min, pTimeEntry->max);
|
||||
}
|
||||
}
|
||||
|
||||
/* Update MV_DEBUG_TIMES entry */
|
||||
void mvDebugUpdateTimeEntry(MV_DEBUG_TIMES* pTimeEntry)
|
||||
{
|
||||
MV_U32 delta;
|
||||
|
||||
if(pTimeEntry->left > 0)
|
||||
{
|
||||
if(pTimeEntry->end <= pTimeEntry->begin)
|
||||
{
|
||||
delta = pTimeEntry->begin - pTimeEntry->end;
|
||||
}
|
||||
else
|
||||
{
|
||||
delta = ((MV_U32)0x10000 - pTimeEntry->end) + pTimeEntry->begin;
|
||||
}
|
||||
pTimeEntry->total += delta;
|
||||
|
||||
if(delta < pTimeEntry->min)
|
||||
pTimeEntry->min = delta;
|
||||
|
||||
if(delta > pTimeEntry->max)
|
||||
pTimeEntry->max = delta;
|
||||
|
||||
pTimeEntry->left--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
|
||||
#ifndef __INCmvDebugh
|
||||
#define __INCmvDebugh
|
||||
|
||||
/* includes */
|
||||
#include "mvTypes.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MV_MODULE_INVALID = -1,
|
||||
MV_MODULE_ETH = 0,
|
||||
MV_MODULE_IDMA,
|
||||
MV_MODULE_XOR,
|
||||
MV_MODULE_TWASI,
|
||||
MV_MODULE_MGI,
|
||||
MV_MODULE_USB,
|
||||
MV_MODULE_CESA,
|
||||
|
||||
MV_MODULE_MAX
|
||||
}MV_MODULE_ID;
|
||||
|
||||
/* Define generic flags useful for most of modules */
|
||||
#define MV_DEBUG_FLAG_ALL (0)
|
||||
#define MV_DEBUG_FLAG_INIT (1 << 0)
|
||||
#define MV_DEBUG_FLAG_RX (1 << 1)
|
||||
#define MV_DEBUG_FLAG_TX (1 << 2)
|
||||
#define MV_DEBUG_FLAG_ERR (1 << 3)
|
||||
#define MV_DEBUG_FLAG_TRACE (1 << 4)
|
||||
#define MV_DEBUG_FLAG_DUMP (1 << 5)
|
||||
#define MV_DEBUG_FLAG_CACHE (1 << 6)
|
||||
#define MV_DEBUG_FLAG_IOCTL (1 << 7)
|
||||
#define MV_DEBUG_FLAG_STATS (1 << 8)
|
||||
|
||||
extern MV_U32 mvDebug;
|
||||
extern MV_U32 mvDebugModules[MV_MODULE_MAX];
|
||||
|
||||
#ifdef MV_DEBUG
|
||||
# define MV_DEBUG_PRINT(module, flags, msg) mvOsPrintf msg
|
||||
# define MV_DEBUG_CODE(module, flags, code) code
|
||||
#elif defined(MV_RT_DEBUG)
|
||||
# define MV_DEBUG_PRINT(module, flags, msg) \
|
||||
if( (mvDebug & (1<<(module))) && \
|
||||
((mvDebugModules[(module)] & (flags)) == (flags)) ) \
|
||||
mvOsPrintf msg
|
||||
# define MV_DEBUG_CODE(module, flags, code) \
|
||||
if( (mvDebug & (1<<(module))) && \
|
||||
((mvDebugModules[(module)] & (flags)) == (flags)) ) \
|
||||
code
|
||||
#else
|
||||
# define MV_DEBUG_PRINT(module, flags, msg)
|
||||
# define MV_DEBUG_CODE(module, flags, code)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* typedefs */
|
||||
|
||||
/* time measurement structure used to check how much time pass between
|
||||
* two points
|
||||
*/
|
||||
typedef struct {
|
||||
char name[20]; /* name of the entry */
|
||||
unsigned long begin; /* time measured on begin point */
|
||||
unsigned long end; /* time measured on end point */
|
||||
unsigned long total; /* Accumulated time */
|
||||
unsigned long left; /* The rest measurement actions */
|
||||
unsigned long count; /* Maximum measurement actions */
|
||||
unsigned long min; /* Minimum time from begin to end */
|
||||
unsigned long max; /* Maximum time from begin to end */
|
||||
} MV_DEBUG_TIMES;
|
||||
|
||||
|
||||
/* mvDebug.h API list */
|
||||
|
||||
/****** Error Recording ******/
|
||||
|
||||
/* Dump memory in specific format:
|
||||
* address: X1X1X1X1 X2X2X2X2 ... X8X8X8X8
|
||||
*/
|
||||
void mvDebugMemDump(void* addr, int size, int access);
|
||||
|
||||
void mvDebugPrintBufInfo(BUF_INFO* pBufInfo, int size, int access);
|
||||
|
||||
void mvDebugPrintPktInfo(MV_PKT_INFO* pPktInfo, int size, int access);
|
||||
|
||||
void mvDebugPrintIpAddr(MV_U32 ipAddr);
|
||||
|
||||
void mvDebugPrintMacAddr(const MV_U8* pMacAddr);
|
||||
|
||||
/**** There are three functions deals with MV_DEBUG_TIMES structure ****/
|
||||
|
||||
/* Reset MV_DEBUG_TIMES entry */
|
||||
void mvDebugResetTimeEntry(MV_DEBUG_TIMES* pTimeEntry, int count, char* name);
|
||||
|
||||
/* Update MV_DEBUG_TIMES entry */
|
||||
void mvDebugUpdateTimeEntry(MV_DEBUG_TIMES* pTimeEntry);
|
||||
|
||||
/* Print out MV_DEBUG_TIMES entry */
|
||||
void mvDebugPrintTimeEntry(MV_DEBUG_TIMES* pTimeEntry, MV_BOOL isTitle);
|
||||
|
||||
|
||||
/******** General ***********/
|
||||
|
||||
/* Change value of mvDebugPrint global variable */
|
||||
|
||||
void mvDebugInit(void);
|
||||
void mvDebugModuleEnable(MV_MODULE_ID module, MV_BOOL isEnable);
|
||||
void mvDebugModuleSetFlags(MV_MODULE_ID module, MV_U32 flags);
|
||||
void mvDebugModuleClearFlags(MV_MODULE_ID module, MV_U32 flags);
|
||||
|
||||
|
||||
#endif /* __INCmvDebug.h */
|
||||
|
||||
@@ -0,0 +1,225 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDeviceIdh
|
||||
#define __INCmvDeviceIdh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* defines */
|
||||
#define MARVELL_VEN_ID 0x11ab
|
||||
|
||||
/* Disco-3 */
|
||||
#define MV64460_DEV_ID 0x6480
|
||||
#define MV64460B_DEV_ID 0x6485
|
||||
#define MV64430_DEV_ID 0x6420
|
||||
|
||||
/* Disco-5 */
|
||||
#define MV64560_DEV_ID 0x6450
|
||||
|
||||
/* Disco-6 */
|
||||
#define MV64660_DEV_ID 0x6460
|
||||
|
||||
/* Orion */
|
||||
#define MV_1181_DEV_ID 0x1181
|
||||
#define MV_5181_DEV_ID 0x5181
|
||||
#define MV_5281_DEV_ID 0x5281
|
||||
#define MV_5182_DEV_ID 0x5182
|
||||
#define MV_8660_DEV_ID 0x8660
|
||||
#define MV_5180_DEV_ID 0x5180
|
||||
#define MV_5082_DEV_ID 0x5082
|
||||
#define MV_1281_DEV_ID 0x1281
|
||||
#define MV_6082_DEV_ID 0x6082
|
||||
#define MV_6183_DEV_ID 0x6183
|
||||
#define MV_6183L_DEV_ID 0x6083
|
||||
|
||||
#define MV_5281_D0_REV 0x4
|
||||
#define MV_5281_D0_ID ((MV_5281_DEV_ID << 16) | MV_5281_D0_REV)
|
||||
#define MV_5281_D0_NAME "88F5281 D0"
|
||||
|
||||
#define MV_5281_D1_REV 0x5
|
||||
#define MV_5281_D1_ID ((MV_5281_DEV_ID << 16) | MV_5281_D1_REV)
|
||||
#define MV_5281_D1_NAME "88F5281 D1"
|
||||
|
||||
#define MV_5281_D2_REV 0x6
|
||||
#define MV_5281_D2_ID ((MV_5281_DEV_ID << 16) | MV_5281_D2_REV)
|
||||
#define MV_5281_D2_NAME "88F5281 D2"
|
||||
|
||||
|
||||
#define MV_5181L_A0_REV 0x8 /* need for PCIE Er */
|
||||
#define MV_5181_A1_REV 0x1 /* for USB Er ..*/
|
||||
#define MV_5181_B0_REV 0x2
|
||||
#define MV_5181_B1_REV 0x3
|
||||
#define MV_5182_A1_REV 0x1
|
||||
#define MV_5180N_B1_REV 0x3
|
||||
#define MV_5181L_A0_ID ((MV_5181_DEV_ID << 16) | MV_5181L_A0_REV)
|
||||
|
||||
|
||||
|
||||
/* kw */
|
||||
#define MV_6281_DEV_ID 0x6281
|
||||
#define MV_6192_DEV_ID 0x6192
|
||||
#define MV_6190_DEV_ID 0x6190
|
||||
#define MV_6180_DEV_ID 0x6180
|
||||
|
||||
#define MV_6281_A0_REV 0x2
|
||||
#define MV_6281_A0_ID ((MV_6281_DEV_ID << 16) | MV_6281_A0_REV)
|
||||
#define MV_6281_A0_NAME "88F6281 A0"
|
||||
|
||||
#define MV_6192_A0_REV 0x2
|
||||
#define MV_6192_A0_ID ((MV_6192_DEV_ID << 16) | MV_6192_A0_REV)
|
||||
#define MV_6192_A0_NAME "88F6192 A0"
|
||||
|
||||
#define MV_6190_A0_REV 0x2
|
||||
#define MV_6190_A0_ID ((MV_6190_DEV_ID << 16) | MV_6190_A0_REV)
|
||||
#define MV_6190_A0_NAME "88F6190 A0"
|
||||
|
||||
#define MV_6180_A0_REV 0x2
|
||||
#define MV_6180_A0_ID ((MV_6180_DEV_ID << 16) | MV_6180_A0_REV)
|
||||
#define MV_6180_A0_NAME "88F6180 A0"
|
||||
|
||||
#define MV_6281_A1_REV 0x3
|
||||
#define MV_6281_A1_ID ((MV_6281_DEV_ID << 16) | MV_6281_A1_REV)
|
||||
#define MV_6281_A1_NAME "88F6281 A1"
|
||||
|
||||
#define MV_6192_A1_REV 0x3
|
||||
#define MV_6192_A1_ID ((MV_6192_DEV_ID << 16) | MV_6192_A1_REV)
|
||||
#define MV_6192_A1_NAME "88F6192 A1"
|
||||
|
||||
#define MV_6190_A1_REV 0x3
|
||||
#define MV_6190_A1_ID ((MV_6190_DEV_ID << 16) | MV_6190_A1_REV)
|
||||
#define MV_6190_A1_NAME "88F6190 A1"
|
||||
|
||||
#define MV_6180_A1_REV 0x3
|
||||
#define MV_6180_A1_ID ((MV_6180_DEV_ID << 16) | MV_6180_A1_REV)
|
||||
#define MV_6180_A1_NAME "88F6180 A1"
|
||||
|
||||
#define MV_88F6XXX_A0_REV 0x2
|
||||
#define MV_88F6XXX_A1_REV 0x3
|
||||
/* Disco-Duo */
|
||||
#define MV_78XX0_ZY_DEV_ID 0x6381
|
||||
#define MV_78XX0_ZY_NAME "MV78X00"
|
||||
|
||||
#define MV_78XX0_Z0_REV 0x1
|
||||
#define MV_78XX0_Z0_ID ((MV_78XX0_ZY_DEV_ID << 16) | MV_78XX0_Z0_REV)
|
||||
#define MV_78XX0_Z0_NAME "78X00 Z0"
|
||||
|
||||
#define MV_78XX0_Y0_REV 0x2
|
||||
#define MV_78XX0_Y0_ID ((MV_78XX0_ZY_DEV_ID << 16) | MV_78XX0_Y0_REV)
|
||||
#define MV_78XX0_Y0_NAME "78X00 Y0"
|
||||
|
||||
#define MV_78XX0_DEV_ID 0x7800
|
||||
#define MV_78XX0_NAME "MV78X00"
|
||||
|
||||
#define MV_76100_DEV_ID 0x7610
|
||||
#define MV_78200_DEV_ID 0x7820
|
||||
#define MV_78100_DEV_ID 0x7810
|
||||
#define MV_78XX0_A0_REV 0x1
|
||||
#define MV_78XX0_A1_REV 0x2
|
||||
|
||||
#define MV_76100_NAME "MV76100"
|
||||
#define MV_78100_NAME "MV78100"
|
||||
#define MV_78200_NAME "MV78200"
|
||||
|
||||
#define MV_76100_A0_ID ((MV_76100_DEV_ID << 16) | MV_78XX0_A0_REV)
|
||||
#define MV_78100_A0_ID ((MV_78100_DEV_ID << 16) | MV_78XX0_A0_REV)
|
||||
#define MV_78200_A0_ID ((MV_78200_DEV_ID << 16) | MV_78XX0_A0_REV)
|
||||
|
||||
#define MV_76100_A1_ID ((MV_76100_DEV_ID << 16) | MV_78XX0_A1_REV)
|
||||
#define MV_78100_A1_ID ((MV_78100_DEV_ID << 16) | MV_78XX0_A1_REV)
|
||||
#define MV_78200_A1_ID ((MV_78200_DEV_ID << 16) | MV_78XX0_A1_REV)
|
||||
|
||||
#define MV_76100_A0_NAME "MV76100 A0"
|
||||
#define MV_78100_A0_NAME "MV78100 A0"
|
||||
#define MV_78200_A0_NAME "MV78200 A0"
|
||||
#define MV_78XX0_A0_NAME "MV78XX0 A0"
|
||||
|
||||
#define MV_76100_A1_NAME "MV76100 A1"
|
||||
#define MV_78100_A1_NAME "MV78100 A1"
|
||||
#define MV_78200_A1_NAME "MV78200 A1"
|
||||
#define MV_78XX0_A1_NAME "MV78XX0 A1"
|
||||
|
||||
/*MV88F632X family*/
|
||||
#define MV_6321_DEV_ID 0x6321
|
||||
#define MV_6322_DEV_ID 0x6322
|
||||
#define MV_6323_DEV_ID 0x6323
|
||||
|
||||
#define MV_6321_NAME "88F6321"
|
||||
#define MV_6322_NAME "88F6322"
|
||||
#define MV_6323_NAME "88F6323"
|
||||
|
||||
#define MV_632X_A1_REV 0x2
|
||||
|
||||
#define MV_6321_A1_ID ((MV_6321_DEV_ID << 16) | MV_632X_A1_REV)
|
||||
#define MV_6322_A1_ID ((MV_6322_DEV_ID << 16) | MV_632X_A1_REV)
|
||||
#define MV_6323_A1_ID ((MV_6323_DEV_ID << 16) | MV_632X_A1_REV)
|
||||
|
||||
#define MV_6321_A1_NAME "88F6321 A1"
|
||||
#define MV_6322_A1_NAME "88F6322 A1"
|
||||
#define MV_6323_A1_NAME "88F6323 A1"
|
||||
|
||||
|
||||
#endif /* __INCmvDeviceIdh */
|
||||
@@ -0,0 +1,73 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvHalVerh
|
||||
#define __INCmvHalVerh
|
||||
|
||||
/* Defines */
|
||||
#define MV_HAL_VERSION "FEROCEON_HAL_3_1_7"
|
||||
#define MV_RELEASE_BASELINE "SoCandControllers_FEROCEON_RELEASE_7_9_2009_KW_4_3_4_DD_2_1_4_6183_1_1_4"
|
||||
|
||||
#endif /* __INCmvHalVerh */
|
||||
@@ -0,0 +1,100 @@
|
||||
/*******************************************************************************
|
||||
* Copyright 2003, Marvell Semiconductor Israel LTD. *
|
||||
* THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL. *
|
||||
* NO RIGHTS ARE GRANTED HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT *
|
||||
* OF MARVELL OR ANY THIRD PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE *
|
||||
* DISCRETION TO REQUEST THAT THIS CODE BE IMMEDIATELY RETURNED TO MARVELL. *
|
||||
* THIS CODE IS PROVIDED "AS IS". MARVELL MAKES NO WARRANTIES, EXPRESSED, *
|
||||
* IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, COMPLETENESS OR PERFORMANCE. *
|
||||
* *
|
||||
* MARVELL COMPRISES MARVELL TECHNOLOGY GROUP LTD. (MTGL) AND ITS SUBSIDIARIES, *
|
||||
* MARVELL INTERNATIONAL LTD. (MIL), MARVELL TECHNOLOGY, INC. (MTI), MARVELL *
|
||||
* SEMICONDUCTOR, INC. (MSI), MARVELL ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K. *
|
||||
* (MJKK), MARVELL SEMICONDUCTOR ISRAEL LTD (MSIL). *
|
||||
********************************************************************************
|
||||
* mvQueue.c
|
||||
*
|
||||
* FILENAME: $Workfile: mvStack.c $
|
||||
* REVISION: $Revision: 1.1 $
|
||||
* LAST UPDATE: $Modtime: $
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This file implements simple Stack LIFO functionality.
|
||||
*******************************************************************************/
|
||||
|
||||
/* includes */
|
||||
#include "mvOs.h"
|
||||
#include "mvTypes.h"
|
||||
#include "mvDebug.h"
|
||||
#include "mvStack.h"
|
||||
|
||||
/* defines */
|
||||
|
||||
|
||||
/* Public functions */
|
||||
|
||||
|
||||
/* Purpose: Create new stack
|
||||
* Inputs:
|
||||
* - MV_U32 noOfElements - maximum number of elements in the stack.
|
||||
* Each element 4 bytes size
|
||||
* Return: void* - pointer to created stack.
|
||||
*/
|
||||
void* mvStackCreate(int numOfElements)
|
||||
{
|
||||
MV_STACK* pStack;
|
||||
MV_U32* pStackElements;
|
||||
|
||||
pStack = (MV_STACK*)mvOsMalloc(sizeof(MV_STACK));
|
||||
pStackElements = (MV_U32*)mvOsMalloc(numOfElements*sizeof(MV_U32));
|
||||
if( (pStack == NULL) || (pStackElements == NULL) )
|
||||
{
|
||||
mvOsPrintf("mvStack: Can't create new stack\n");
|
||||
return NULL;
|
||||
}
|
||||
memset(pStackElements, 0, numOfElements*sizeof(MV_U32));
|
||||
pStack->numOfElements = numOfElements;
|
||||
pStack->stackIdx = 0;
|
||||
pStack->stackElements = pStackElements;
|
||||
|
||||
return pStack;
|
||||
}
|
||||
|
||||
/* Purpose: Delete existing stack
|
||||
* Inputs:
|
||||
* - void* stackHndl - Stack handle as returned by "mvStackCreate()" function
|
||||
*
|
||||
* Return: MV_STATUS MV_NOT_FOUND - Failure. StackHandle is not valid.
|
||||
* MV_OK - Success.
|
||||
*/
|
||||
MV_STATUS mvStackDelete(void* stackHndl)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
if( (pStack == NULL) || (pStack->stackElements == NULL) )
|
||||
return MV_NOT_FOUND;
|
||||
|
||||
mvOsFree(pStack->stackElements);
|
||||
mvOsFree(pStack);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
/* PrintOut status of the stack */
|
||||
void mvStackStatus(void* stackHndl, MV_BOOL isPrintElements)
|
||||
{
|
||||
int i;
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
mvOsPrintf("StackHandle=%p, pElements=%p, numElements=%d, stackIdx=%d\n",
|
||||
stackHndl, pStack->stackElements, pStack->numOfElements,
|
||||
pStack->stackIdx);
|
||||
if(isPrintElements == MV_TRUE)
|
||||
{
|
||||
for(i=0; i<pStack->stackIdx; i++)
|
||||
{
|
||||
mvOsPrintf("%3d. Value=0x%x\n", i, pStack->stackElements[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
/*******************************************************************************
|
||||
* Copyright 2003, Marvell Semiconductor Israel LTD. *
|
||||
* THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL. *
|
||||
* NO RIGHTS ARE GRANTED HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT *
|
||||
* OF MARVELL OR ANY THIRD PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE *
|
||||
* DISCRETION TO REQUEST THAT THIS CODE BE IMMEDIATELY RETURNED TO MARVELL. *
|
||||
* THIS CODE IS PROVIDED "AS IS". MARVELL MAKES NO WARRANTIES, EXPRESSED, *
|
||||
* IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, COMPLETENESS OR PERFORMANCE. *
|
||||
* *
|
||||
* MARVELL COMPRISES MARVELL TECHNOLOGY GROUP LTD. (MTGL) AND ITS SUBSIDIARIES, *
|
||||
* MARVELL INTERNATIONAL LTD. (MIL), MARVELL TECHNOLOGY, INC. (MTI), MARVELL *
|
||||
* SEMICONDUCTOR, INC. (MSI), MARVELL ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K. *
|
||||
* (MJKK), MARVELL SEMICONDUCTOR ISRAEL LTD (MSIL). *
|
||||
********************************************************************************
|
||||
* mvStack.h - Header File for :
|
||||
*
|
||||
* FILENAME: $Workfile: mvStack.h $
|
||||
* REVISION: $Revision: 1.1 $
|
||||
* LAST UPDATE: $Modtime: $
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This file defines simple Stack (LIFO) functionality.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvStack_h__
|
||||
#define __mvStack_h__
|
||||
|
||||
|
||||
/* includes */
|
||||
#include "mvTypes.h"
|
||||
|
||||
|
||||
/* defines */
|
||||
|
||||
|
||||
/* typedefs */
|
||||
/* Data structure describes general purpose Stack */
|
||||
typedef struct
|
||||
{
|
||||
int stackIdx;
|
||||
int numOfElements;
|
||||
MV_U32* stackElements;
|
||||
} MV_STACK;
|
||||
|
||||
static INLINE MV_BOOL mvStackIsFull(void* stackHndl)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
if(pStack->stackIdx == pStack->numOfElements)
|
||||
return MV_TRUE;
|
||||
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
static INLINE MV_BOOL mvStackIsEmpty(void* stackHndl)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
if(pStack->stackIdx == 0)
|
||||
return MV_TRUE;
|
||||
|
||||
return MV_FALSE;
|
||||
}
|
||||
/* Purpose: Push new element to stack
|
||||
* Inputs:
|
||||
* - void* stackHndl - Stack handle as returned by "mvStackCreate()" function.
|
||||
* - MV_U32 value - New element.
|
||||
*
|
||||
* Return: MV_STATUS MV_FULL - Failure. Stack is full.
|
||||
* MV_OK - Success. Element is put to stack.
|
||||
*/
|
||||
static INLINE void mvStackPush(void* stackHndl, MV_U32 value)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
#ifdef MV_RT_DEBUG
|
||||
if(pStack->stackIdx == pStack->numOfElements)
|
||||
{
|
||||
mvOsPrintf("mvStackPush: Stack is FULL\n");
|
||||
return;
|
||||
}
|
||||
#endif /* MV_RT_DEBUG */
|
||||
|
||||
pStack->stackElements[pStack->stackIdx] = value;
|
||||
pStack->stackIdx++;
|
||||
}
|
||||
|
||||
/* Purpose: Pop element from the top of stack and copy it to "pValue"
|
||||
* Inputs:
|
||||
* - void* stackHndl - Stack handle as returned by "mvStackCreate()" function.
|
||||
* - MV_U32 value - Element in the top of stack.
|
||||
*
|
||||
* Return: MV_STATUS MV_EMPTY - Failure. Stack is empty.
|
||||
* MV_OK - Success. Element is removed from the stack and
|
||||
* copied to pValue argument
|
||||
*/
|
||||
static INLINE MV_U32 mvStackPop(void* stackHndl)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
#ifdef MV_RT_DEBUG
|
||||
if(pStack->stackIdx == 0)
|
||||
{
|
||||
mvOsPrintf("mvStackPop: Stack is EMPTY\n");
|
||||
return 0;
|
||||
}
|
||||
#endif /* MV_RT_DEBUG */
|
||||
|
||||
pStack->stackIdx--;
|
||||
return pStack->stackElements[pStack->stackIdx];
|
||||
}
|
||||
|
||||
static INLINE int mvStackIndex(void* stackHndl)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
return pStack->stackIdx;
|
||||
}
|
||||
|
||||
static INLINE int mvStackFreeElements(void* stackHndl)
|
||||
{
|
||||
MV_STACK* pStack = (MV_STACK*)stackHndl;
|
||||
|
||||
return (pStack->numOfElements - pStack->stackIdx);
|
||||
}
|
||||
|
||||
/* mvStack.h API list */
|
||||
|
||||
/* Create new Stack */
|
||||
void* mvStackCreate(int numOfElements);
|
||||
|
||||
/* Delete existing stack */
|
||||
MV_STATUS mvStackDelete(void* stackHndl);
|
||||
|
||||
/* Print status of the stack */
|
||||
void mvStackStatus(void* stackHndl, MV_BOOL isPrintElements);
|
||||
|
||||
#endif /* __mvStack_h__ */
|
||||
|
||||
@@ -0,0 +1,245 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvTypesh
|
||||
#define __INCmvTypesh
|
||||
|
||||
/* Defines */
|
||||
|
||||
/* The following is a list of Marvell status */
|
||||
#define MV_ERROR (-1)
|
||||
#define MV_OK (0x00) /* Operation succeeded */
|
||||
#define MV_FAIL (0x01) /* Operation failed */
|
||||
#define MV_BAD_VALUE (0x02) /* Illegal value (general) */
|
||||
#define MV_OUT_OF_RANGE (0x03) /* The value is out of range */
|
||||
#define MV_BAD_PARAM (0x04) /* Illegal parameter in function called */
|
||||
#define MV_BAD_PTR (0x05) /* Illegal pointer value */
|
||||
#define MV_BAD_SIZE (0x06) /* Illegal size */
|
||||
#define MV_BAD_STATE (0x07) /* Illegal state of state machine */
|
||||
#define MV_SET_ERROR (0x08) /* Set operation failed */
|
||||
#define MV_GET_ERROR (0x09) /* Get operation failed */
|
||||
#define MV_CREATE_ERROR (0x0A) /* Fail while creating an item */
|
||||
#define MV_NOT_FOUND (0x0B) /* Item not found */
|
||||
#define MV_NO_MORE (0x0C) /* No more items found */
|
||||
#define MV_NO_SUCH (0x0D) /* No such item */
|
||||
#define MV_TIMEOUT (0x0E) /* Time Out */
|
||||
#define MV_NO_CHANGE (0x0F) /* Parameter(s) is already in this value */
|
||||
#define MV_NOT_SUPPORTED (0x10) /* This request is not support */
|
||||
#define MV_NOT_IMPLEMENTED (0x11) /* Request supported but not implemented */
|
||||
#define MV_NOT_INITIALIZED (0x12) /* The item is not initialized */
|
||||
#define MV_NO_RESOURCE (0x13) /* Resource not available (memory ...) */
|
||||
#define MV_FULL (0x14) /* Item is full (Queue or table etc...) */
|
||||
#define MV_EMPTY (0x15) /* Item is empty (Queue or table etc...) */
|
||||
#define MV_INIT_ERROR (0x16) /* Error occured while INIT process */
|
||||
#define MV_HW_ERROR (0x17) /* Hardware error */
|
||||
#define MV_TX_ERROR (0x18) /* Transmit operation not succeeded */
|
||||
#define MV_RX_ERROR (0x19) /* Recieve operation not succeeded */
|
||||
#define MV_NOT_READY (0x1A) /* The other side is not ready yet */
|
||||
#define MV_ALREADY_EXIST (0x1B) /* Tried to create existing item */
|
||||
#define MV_OUT_OF_CPU_MEM (0x1C) /* Cpu memory allocation failed. */
|
||||
#define MV_NOT_STARTED (0x1D) /* Not started yet */
|
||||
#define MV_BUSY (0x1E) /* Item is busy. */
|
||||
#define MV_TERMINATE (0x1F) /* Item terminates it's work. */
|
||||
#define MV_NOT_ALIGNED (0x20) /* Wrong alignment */
|
||||
#define MV_NOT_ALLOWED (0x21) /* Operation NOT allowed */
|
||||
#define MV_WRITE_PROTECT (0x22) /* Write protected */
|
||||
|
||||
|
||||
#define MV_INVALID (int)(-1)
|
||||
|
||||
#define MV_FALSE 0
|
||||
#define MV_TRUE (!(MV_FALSE))
|
||||
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void*)0)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef MV_ASMLANGUAGE
|
||||
/* typedefs */
|
||||
|
||||
typedef char MV_8;
|
||||
typedef unsigned char MV_U8;
|
||||
|
||||
typedef int MV_32;
|
||||
typedef unsigned int MV_U32;
|
||||
|
||||
typedef short MV_16;
|
||||
typedef unsigned short MV_U16;
|
||||
|
||||
#ifdef MV_PPC64
|
||||
typedef long MV_64;
|
||||
typedef unsigned long MV_U64;
|
||||
#else
|
||||
typedef long long MV_64;
|
||||
typedef unsigned long long MV_U64;
|
||||
#endif
|
||||
|
||||
typedef long MV_LONG; /* 32/64 */
|
||||
typedef unsigned long MV_ULONG; /* 32/64 */
|
||||
|
||||
typedef int MV_STATUS;
|
||||
typedef int MV_BOOL;
|
||||
typedef void MV_VOID;
|
||||
typedef float MV_FLOAT;
|
||||
|
||||
typedef int (*MV_FUNCPTR) (void); /* ptr to function returning int */
|
||||
typedef void (*MV_VOIDFUNCPTR) (void); /* ptr to function returning void */
|
||||
typedef double (*MV_DBLFUNCPTR) (void); /* ptr to function returning double*/
|
||||
typedef float (*MV_FLTFUNCPTR) (void); /* ptr to function returning float */
|
||||
|
||||
typedef MV_U32 MV_KHZ;
|
||||
typedef MV_U32 MV_MHZ;
|
||||
typedef MV_U32 MV_HZ;
|
||||
|
||||
|
||||
/* This enumerator describes the set of commands that can be applied on */
|
||||
/* an engine (e.g. IDMA, XOR). Appling a comman depends on the current */
|
||||
/* status (see MV_STATE enumerator) */
|
||||
/* Start can be applied only when status is IDLE */
|
||||
/* Stop can be applied only when status is IDLE, ACTIVE or PAUSED */
|
||||
/* Pause can be applied only when status is ACTIVE */
|
||||
/* Restart can be applied only when status is PAUSED */
|
||||
typedef enum _mvCommand
|
||||
{
|
||||
MV_START, /* Start */
|
||||
MV_STOP, /* Stop */
|
||||
MV_PAUSE, /* Pause */
|
||||
MV_RESTART /* Restart */
|
||||
} MV_COMMAND;
|
||||
|
||||
/* This enumerator describes the set of state conditions. */
|
||||
/* Moving from one state to other is stricted. */
|
||||
typedef enum _mvState
|
||||
{
|
||||
MV_IDLE,
|
||||
MV_ACTIVE,
|
||||
MV_PAUSED,
|
||||
MV_UNDEFINED_STATE
|
||||
} MV_STATE;
|
||||
|
||||
|
||||
/* This structure describes address space window. Window base can be */
|
||||
/* 64 bit, window size up to 4GB */
|
||||
typedef struct _mvAddrWin
|
||||
{
|
||||
MV_U32 baseLow; /* 32bit base low */
|
||||
MV_U32 baseHigh; /* 32bit base high */
|
||||
MV_U32 size; /* 32bit size */
|
||||
}MV_ADDR_WIN;
|
||||
|
||||
/* This binary enumerator describes protection attribute status */
|
||||
typedef enum _mvProtRight
|
||||
{
|
||||
ALLOWED, /* Protection attribute allowed */
|
||||
FORBIDDEN /* Protection attribute forbidden */
|
||||
}MV_PROT_RIGHT;
|
||||
|
||||
/* Unified struct for Rx and Tx packet operations. The user is required to */
|
||||
/* be familier only with Tx/Rx descriptor command status. */
|
||||
typedef struct _bufInfo
|
||||
{
|
||||
MV_U32 cmdSts; /* Tx/Rx command status */
|
||||
MV_U16 byteCnt; /* Size of valid data in the buffer */
|
||||
MV_U16 bufSize; /* Total size of the buffer */
|
||||
MV_U8 *pBuff; /* Pointer to Buffer */
|
||||
MV_U8 *pData; /* Pointer to data in the Buffer */
|
||||
MV_U32 userInfo1; /* Tx/Rx attached user information 1 */
|
||||
MV_U32 userInfo2; /* Tx/Rx attached user information 2 */
|
||||
struct _bufInfo *pNextBufInfo; /* Next buffer in packet */
|
||||
} BUF_INFO;
|
||||
|
||||
/* This structure contains information describing one of buffers
|
||||
* (fragments) they are built Ethernet packet.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MV_U8* bufVirtPtr;
|
||||
MV_ULONG bufPhysAddr;
|
||||
MV_U32 bufSize;
|
||||
MV_U32 dataSize;
|
||||
MV_U32 memHandle;
|
||||
MV_32 bufAddrShift;
|
||||
} MV_BUF_INFO;
|
||||
|
||||
/* This structure contains information describing Ethernet packet.
|
||||
* The packet can be divided for few buffers (fragments)
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MV_ULONG osInfo;
|
||||
MV_BUF_INFO *pFrags;
|
||||
MV_U32 status;
|
||||
MV_U16 pktSize;
|
||||
MV_U16 numFrags;
|
||||
MV_U32 ownerId;
|
||||
MV_U32 fragIP;
|
||||
} MV_PKT_INFO;
|
||||
|
||||
#endif /* MV_ASMLANGUAGE */
|
||||
|
||||
#endif /* __INCmvTypesh */
|
||||
|
||||
110
target/linux/generic/files/crypto/ocf/kirkwood/mvHal/dbg-trace.c
Normal file
110
target/linux/generic/files/crypto/ocf/kirkwood/mvHal/dbg-trace.c
Normal file
@@ -0,0 +1,110 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/time.h>
|
||||
#include "dbg-trace.h"
|
||||
|
||||
#define TRACE_ARR_LEN 800
|
||||
#define STR_LEN 128
|
||||
struct trace {
|
||||
struct timeval tv;
|
||||
char str[STR_LEN];
|
||||
unsigned int callback_val1;
|
||||
unsigned int callback_val2;
|
||||
char valid;
|
||||
};
|
||||
static unsigned int (*trc_callback1) (unsigned char) = NULL;
|
||||
static unsigned int (*trc_callback2) (unsigned char) = NULL;
|
||||
static unsigned char trc_param1 = 0;
|
||||
static unsigned char trc_param2 = 0;
|
||||
struct trace *trc_arr;
|
||||
static int trc_index;
|
||||
static int trc_active = 0;
|
||||
|
||||
void TRC_START()
|
||||
{
|
||||
trc_active = 1;
|
||||
}
|
||||
|
||||
void TRC_STOP()
|
||||
{
|
||||
trc_active = 0;
|
||||
}
|
||||
|
||||
void TRC_INIT(void *callback1, void *callback2, unsigned char callback1_param, unsigned char callback2_param)
|
||||
{
|
||||
printk("Marvell debug tracing is on\n");
|
||||
trc_arr = (struct trace *)kmalloc(TRACE_ARR_LEN*sizeof(struct trace),GFP_KERNEL);
|
||||
if(trc_arr == NULL)
|
||||
{
|
||||
printk("Can't allocate Debug Trace buffer\n");
|
||||
return;
|
||||
}
|
||||
memset(trc_arr,0,TRACE_ARR_LEN*sizeof(struct trace));
|
||||
trc_index = 0;
|
||||
trc_callback1 = callback1;
|
||||
trc_callback2 = callback2;
|
||||
trc_param1 = callback1_param;
|
||||
trc_param2 = callback2_param;
|
||||
}
|
||||
void TRC_REC(char *fmt,...)
|
||||
{
|
||||
va_list args;
|
||||
struct trace *trc = &trc_arr[trc_index];
|
||||
|
||||
if(trc_active == 0)
|
||||
return;
|
||||
|
||||
do_gettimeofday(&trc->tv);
|
||||
if(trc_callback1)
|
||||
trc->callback_val1 = trc_callback1(trc_param1);
|
||||
if(trc_callback2)
|
||||
trc->callback_val2 = trc_callback2(trc_param2);
|
||||
va_start(args, fmt);
|
||||
vsprintf(trc->str,fmt,args);
|
||||
va_end(args);
|
||||
trc->valid = 1;
|
||||
if((++trc_index) == TRACE_ARR_LEN) {
|
||||
trc_index = 0;
|
||||
}
|
||||
}
|
||||
void TRC_OUTPUT(void)
|
||||
{
|
||||
int i,j;
|
||||
struct trace *p;
|
||||
printk("\n\nTrace %d items\n",TRACE_ARR_LEN);
|
||||
for(i=0,j=trc_index; i<TRACE_ARR_LEN; i++,j++) {
|
||||
if(j == TRACE_ARR_LEN)
|
||||
j = 0;
|
||||
p = &trc_arr[j];
|
||||
if(p->valid) {
|
||||
unsigned long uoffs;
|
||||
struct trace *plast;
|
||||
if(p == &trc_arr[0])
|
||||
plast = &trc_arr[TRACE_ARR_LEN-1];
|
||||
else
|
||||
plast = p-1;
|
||||
if(p->tv.tv_sec == ((plast)->tv.tv_sec))
|
||||
uoffs = (p->tv.tv_usec - ((plast)->tv.tv_usec));
|
||||
else
|
||||
uoffs = (1000000 - ((plast)->tv.tv_usec)) +
|
||||
((p->tv.tv_sec - ((plast)->tv.tv_sec) - 1) * 1000000) +
|
||||
p->tv.tv_usec;
|
||||
printk("%03d: [+%ld usec]", j, (unsigned long)uoffs);
|
||||
if(trc_callback1)
|
||||
printk("[%u]",p->callback_val1);
|
||||
if(trc_callback2)
|
||||
printk("[%u]",p->callback_val2);
|
||||
printk(": %s",p->str);
|
||||
}
|
||||
p->valid = 0;
|
||||
}
|
||||
memset(trc_arr,0,TRACE_ARR_LEN*sizeof(struct trace));
|
||||
trc_index = 0;
|
||||
}
|
||||
void TRC_RELEASE(void)
|
||||
{
|
||||
kfree(trc_arr);
|
||||
trc_index = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
#ifndef _MV_DBG_TRCE_H_
|
||||
#define _MV_DBG_TRCE_H_
|
||||
|
||||
#ifdef CONFIG_MV_DBG_TRACE
|
||||
void TRC_INIT(void *callback1, void *callback2,
|
||||
unsigned char callback1_param, unsigned char callback2_param);
|
||||
void TRC_REC(char *fmt,...);
|
||||
void TRC_OUTPUT(void);
|
||||
void TRC_RELEASE(void);
|
||||
void TRC_START(void);
|
||||
void TRC_STOP(void);
|
||||
|
||||
#else
|
||||
#define TRC_INIT(x1,x2,x3,x4)
|
||||
#define TRC_REC(X...)
|
||||
#define TRC_OUTPUT()
|
||||
#define TRC_RELEASE()
|
||||
#define TRC_START()
|
||||
#define TRC_STOP()
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,376 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef __INCmvBoardEnvLibh
|
||||
#define __INCmvBoardEnvLibh
|
||||
|
||||
/* defines */
|
||||
/* The below constant macros defines the board I2C EEPROM data offsets */
|
||||
|
||||
|
||||
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "mvSysHwConfig.h"
|
||||
#include "boardEnv/mvBoardEnvSpec.h"
|
||||
|
||||
|
||||
/* DUART stuff for Tclk detection only */
|
||||
#define DUART_BAUD_RATE 115200
|
||||
#define MAX_CLOCK_MARGINE 5000000 /* Maximum detected clock margine */
|
||||
|
||||
/* Voice devices assembly modes */
|
||||
#define DAISY_CHAIN_MODE 1
|
||||
#define DUAL_CHIP_SELECT_MODE 0
|
||||
#define INTERRUPT_TO_MPP 1
|
||||
#define INTERRUPT_TO_TDM 0
|
||||
|
||||
|
||||
#define BOARD_ETH_PORT_NUM MV_ETH_MAX_PORTS
|
||||
#define BOARD_ETH_SWITCH_PORT_NUM 5
|
||||
|
||||
#define MV_BOARD_MAX_USB_IF 1
|
||||
#define MV_BOARD_MAX_MPP 7
|
||||
#define MV_BOARD_NAME_LEN 0x20
|
||||
|
||||
typedef struct _boardData
|
||||
{
|
||||
MV_U32 magic;
|
||||
MV_U16 boardId;
|
||||
MV_U8 boardVer;
|
||||
MV_U8 boardRev;
|
||||
MV_U32 reserved1;
|
||||
MV_U32 reserved2;
|
||||
|
||||
}BOARD_DATA;
|
||||
|
||||
typedef enum _devBoardMppGroupClass
|
||||
{
|
||||
MV_BOARD_MPP_GROUP_1,
|
||||
MV_BOARD_MPP_GROUP_2,
|
||||
MV_BOARD_MAX_MPP_GROUP
|
||||
}MV_BOARD_MPP_GROUP_CLASS;
|
||||
|
||||
typedef enum _devBoardMppTypeClass
|
||||
{
|
||||
MV_BOARD_AUTO,
|
||||
MV_BOARD_TDM,
|
||||
MV_BOARD_AUDIO,
|
||||
MV_BOARD_RGMII,
|
||||
MV_BOARD_GMII,
|
||||
MV_BOARD_TS,
|
||||
MV_BOARD_MII,
|
||||
MV_BOARD_OTHER
|
||||
}MV_BOARD_MPP_TYPE_CLASS;
|
||||
|
||||
typedef enum _devBoardModuleIdClass
|
||||
{
|
||||
MV_BOARD_MODULE_TDM_ID = 1,
|
||||
MV_BOARD_MODULE_AUDIO_ID,
|
||||
MV_BOARD_MODULE_RGMII_ID,
|
||||
MV_BOARD_MODULE_GMII_ID,
|
||||
MV_BOARD_MODULE_TS_ID,
|
||||
MV_BOARD_MODULE_MII_ID,
|
||||
MV_BOARD_MODULE_TDM_5CHAN_ID,
|
||||
MV_BOARD_MODULE_OTHER_ID
|
||||
}MV_BOARD_MODULE_ID_CLASS;
|
||||
|
||||
typedef struct _boardMppTypeInfo
|
||||
{
|
||||
MV_BOARD_MPP_TYPE_CLASS boardMppGroup1;
|
||||
MV_BOARD_MPP_TYPE_CLASS boardMppGroup2;
|
||||
|
||||
}MV_BOARD_MPP_TYPE_INFO;
|
||||
|
||||
|
||||
typedef enum _devBoardClass
|
||||
{
|
||||
BOARD_DEV_NOR_FLASH,
|
||||
BOARD_DEV_NAND_FLASH,
|
||||
BOARD_DEV_SEVEN_SEG,
|
||||
BOARD_DEV_FPGA,
|
||||
BOARD_DEV_SRAM,
|
||||
BOARD_DEV_SPI_FLASH,
|
||||
BOARD_DEV_OTHER,
|
||||
}MV_BOARD_DEV_CLASS;
|
||||
|
||||
typedef enum _devTwsiBoardClass
|
||||
{
|
||||
BOARD_TWSI_RTC,
|
||||
BOARD_DEV_TWSI_EXP,
|
||||
BOARD_DEV_TWSI_SATR,
|
||||
BOARD_TWSI_AUDIO_DEC,
|
||||
BOARD_TWSI_OTHER
|
||||
}MV_BOARD_TWSI_CLASS;
|
||||
|
||||
typedef enum _devGppBoardClass
|
||||
{
|
||||
BOARD_GPP_RTC,
|
||||
BOARD_GPP_MV_SWITCH,
|
||||
BOARD_GPP_USB_VBUS,
|
||||
BOARD_GPP_USB_VBUS_EN,
|
||||
BOARD_GPP_USB_OC,
|
||||
BOARD_GPP_USB_HOST_DEVICE,
|
||||
BOARD_GPP_REF_CLCK,
|
||||
BOARD_GPP_VOIP_SLIC,
|
||||
BOARD_GPP_LIFELINE,
|
||||
BOARD_GPP_BUTTON,
|
||||
BOARD_GPP_TS_BUTTON_C,
|
||||
BOARD_GPP_TS_BUTTON_U,
|
||||
BOARD_GPP_TS_BUTTON_D,
|
||||
BOARD_GPP_TS_BUTTON_L,
|
||||
BOARD_GPP_TS_BUTTON_R,
|
||||
BOARD_GPP_POWER_BUTTON,
|
||||
BOARD_GPP_RESTOR_BUTTON,
|
||||
BOARD_GPP_WPS_BUTTON,
|
||||
BOARD_GPP_HDD0_POWER,
|
||||
BOARD_GPP_HDD1_POWER,
|
||||
BOARD_GPP_FAN_POWER,
|
||||
BOARD_GPP_RESET,
|
||||
BOARD_GPP_POWER_ON_LED,
|
||||
BOARD_GPP_HDD_POWER,
|
||||
BOARD_GPP_SDIO_POWER,
|
||||
BOARD_GPP_SDIO_DETECT,
|
||||
BOARD_GPP_SDIO_WP,
|
||||
BOARD_GPP_SWITCH_PHY_INT,
|
||||
BOARD_GPP_TSU_DIRCTION,
|
||||
BOARD_GPP_OTHER
|
||||
}MV_BOARD_GPP_CLASS;
|
||||
|
||||
|
||||
typedef struct _devCsInfo
|
||||
{
|
||||
MV_U8 deviceCS;
|
||||
MV_U32 params;
|
||||
MV_U32 devClass; /* MV_BOARD_DEV_CLASS */
|
||||
MV_U8 devWidth;
|
||||
|
||||
}MV_DEV_CS_INFO;
|
||||
|
||||
|
||||
#define MV_BOARD_PHY_FORCE_10MB 0x0
|
||||
#define MV_BOARD_PHY_FORCE_100MB 0x1
|
||||
#define MV_BOARD_PHY_FORCE_1000MB 0x2
|
||||
#define MV_BOARD_PHY_SPEED_AUTO 0x3
|
||||
|
||||
typedef struct _boardSwitchInfo
|
||||
{
|
||||
MV_32 linkStatusIrq;
|
||||
MV_32 qdPort[BOARD_ETH_SWITCH_PORT_NUM];
|
||||
MV_32 qdCpuPort;
|
||||
MV_32 smiScanMode; /* 1 for SMI_MANUAL_MODE, 0 otherwise */
|
||||
MV_32 switchOnPort;
|
||||
|
||||
}MV_BOARD_SWITCH_INFO;
|
||||
|
||||
typedef struct _boardLedInfo
|
||||
{
|
||||
MV_U8 activeLedsNumber;
|
||||
MV_U8 ledsPolarity; /* '0' or '1' to turn on led */
|
||||
MV_U8* gppPinNum; /* Pointer to GPP values */
|
||||
|
||||
}MV_BOARD_LED_INFO;
|
||||
|
||||
typedef struct _boardGppInfo
|
||||
{
|
||||
MV_BOARD_GPP_CLASS devClass;
|
||||
MV_U8 gppPinNum;
|
||||
|
||||
}MV_BOARD_GPP_INFO;
|
||||
|
||||
|
||||
typedef struct _boardTwsiInfo
|
||||
{
|
||||
MV_BOARD_TWSI_CLASS devClass;
|
||||
MV_U8 twsiDevAddr;
|
||||
MV_U8 twsiDevAddrType;
|
||||
|
||||
}MV_BOARD_TWSI_INFO;
|
||||
|
||||
|
||||
typedef enum _boardMacSpeed
|
||||
{
|
||||
BOARD_MAC_SPEED_10M,
|
||||
BOARD_MAC_SPEED_100M,
|
||||
BOARD_MAC_SPEED_1000M,
|
||||
BOARD_MAC_SPEED_AUTO,
|
||||
|
||||
}MV_BOARD_MAC_SPEED;
|
||||
|
||||
typedef struct _boardMacInfo
|
||||
{
|
||||
MV_BOARD_MAC_SPEED boardMacSpeed;
|
||||
MV_U8 boardEthSmiAddr;
|
||||
|
||||
}MV_BOARD_MAC_INFO;
|
||||
|
||||
typedef struct _boardMppInfo
|
||||
{
|
||||
MV_U32 mppGroup[MV_BOARD_MAX_MPP];
|
||||
|
||||
}MV_BOARD_MPP_INFO;
|
||||
|
||||
typedef struct _boardInfo
|
||||
{
|
||||
char boardName[MV_BOARD_NAME_LEN];
|
||||
MV_U8 numBoardMppTypeValue;
|
||||
MV_BOARD_MPP_TYPE_INFO* pBoardMppTypeValue;
|
||||
MV_U8 numBoardMppConfigValue;
|
||||
MV_BOARD_MPP_INFO* pBoardMppConfigValue;
|
||||
MV_U32 intsGppMaskLow;
|
||||
MV_U32 intsGppMaskHigh;
|
||||
MV_U8 numBoardDeviceIf;
|
||||
MV_DEV_CS_INFO* pDevCsInfo;
|
||||
MV_U8 numBoardTwsiDev;
|
||||
MV_BOARD_TWSI_INFO* pBoardTwsiDev;
|
||||
MV_U8 numBoardMacInfo;
|
||||
MV_BOARD_MAC_INFO* pBoardMacInfo;
|
||||
MV_U8 numBoardGppInfo;
|
||||
MV_BOARD_GPP_INFO* pBoardGppInfo;
|
||||
MV_U8 activeLedsNumber;
|
||||
MV_U8* pLedGppPin;
|
||||
MV_U8 ledsPolarity; /* '0' or '1' to turn on led */
|
||||
/* GPP values */
|
||||
MV_U32 gppOutEnValLow;
|
||||
MV_U32 gppOutEnValHigh;
|
||||
MV_U32 gppOutValLow;
|
||||
MV_U32 gppOutValHigh;
|
||||
MV_U32 gppPolarityValLow;
|
||||
MV_U32 gppPolarityValHigh;
|
||||
|
||||
/* Switch Configuration */
|
||||
MV_BOARD_SWITCH_INFO* pSwitchInfo;
|
||||
}MV_BOARD_INFO;
|
||||
|
||||
|
||||
|
||||
MV_VOID mvBoardEnvInit(MV_VOID);
|
||||
MV_U32 mvBoardIdGet(MV_VOID);
|
||||
MV_U16 mvBoardModelGet(MV_VOID);
|
||||
MV_U16 mvBoardRevGet(MV_VOID);
|
||||
MV_STATUS mvBoardNameGet(char *pNameBuff);
|
||||
MV_32 mvBoardPhyAddrGet(MV_U32 ethPortNum);
|
||||
MV_BOARD_MAC_SPEED mvBoardMacSpeedGet(MV_U32 ethPortNum);
|
||||
MV_32 mvBoardLinkStatusIrqGet(MV_U32 ethPortNum);
|
||||
MV_32 mvBoardSwitchPortGet(MV_U32 ethPortNum, MV_U8 boardPortNum);
|
||||
MV_32 mvBoardSwitchCpuPortGet(MV_U32 ethPortNum);
|
||||
MV_32 mvBoardIsSwitchConnected(MV_U32 ethPortNum);
|
||||
MV_32 mvBoardSmiScanModeGet(MV_U32 ethPortNum);
|
||||
MV_BOOL mvBoardIsPortInSgmii(MV_U32 ethPortNum);
|
||||
MV_BOOL mvBoardIsPortInGmii(MV_VOID);
|
||||
MV_U32 mvBoardTclkGet(MV_VOID);
|
||||
MV_U32 mvBoardSysClkGet(MV_VOID);
|
||||
MV_U32 mvBoardDebugLedNumGet(MV_U32 boardId);
|
||||
MV_VOID mvBoardDebugLed(MV_U32 hexNum);
|
||||
MV_32 mvBoardMppGet(MV_U32 mppGroupNum);
|
||||
|
||||
MV_U8 mvBoardRtcTwsiAddrTypeGet(MV_VOID);
|
||||
MV_U8 mvBoardRtcTwsiAddrGet(MV_VOID);
|
||||
|
||||
MV_U8 mvBoardA2DTwsiAddrTypeGet(MV_VOID);
|
||||
MV_U8 mvBoardA2DTwsiAddrGet(MV_VOID);
|
||||
|
||||
MV_U8 mvBoardTwsiExpAddrGet(MV_U32 index);
|
||||
MV_U8 mvBoardTwsiSatRAddrTypeGet(MV_U32 index);
|
||||
MV_U8 mvBoardTwsiSatRAddrGet(MV_U32 index);
|
||||
MV_U8 mvBoardTwsiExpAddrTypeGet(MV_U32 index);
|
||||
MV_BOARD_MODULE_ID_CLASS mvBoarModuleTypeGet(MV_BOARD_MPP_GROUP_CLASS devClass);
|
||||
MV_BOARD_MPP_TYPE_CLASS mvBoardMppGroupTypeGet(MV_BOARD_MPP_GROUP_CLASS mppGroupClass);
|
||||
MV_VOID mvBoardMppGroupTypeSet(MV_BOARD_MPP_GROUP_CLASS mppGroupClass,
|
||||
MV_BOARD_MPP_TYPE_CLASS mppGroupType);
|
||||
MV_VOID mvBoardMppGroupIdUpdate(MV_VOID);
|
||||
MV_VOID mvBoardMppMuxSet(MV_VOID);
|
||||
MV_VOID mvBoardTdmMppSet(MV_32 chType);
|
||||
MV_VOID mvBoardVoiceConnModeGet(MV_32* connMode, MV_32* irqMode);
|
||||
|
||||
MV_VOID mvBoardMppModuleTypePrint(MV_VOID);
|
||||
MV_VOID mvBoardReset(MV_VOID);
|
||||
MV_U8 mvBoarTwsiSatRGet(MV_U8 devNum, MV_U8 regNum);
|
||||
MV_STATUS mvBoarTwsiSatRSet(MV_U8 devNum, MV_U8 regNum, MV_U8 regVal);
|
||||
MV_BOOL mvBoardSpecInitGet(MV_U32* regOff, MV_U32* data);
|
||||
/* Board devices API managments */
|
||||
MV_32 mvBoardGetDevicesNumber(MV_BOARD_DEV_CLASS devClass);
|
||||
MV_32 mvBoardGetDeviceBaseAddr(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
|
||||
MV_32 mvBoardGetDeviceBusWidth(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
|
||||
MV_32 mvBoardGetDeviceWidth(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
|
||||
MV_32 mvBoardGetDeviceWinSize(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
|
||||
MV_U32 boardGetDevCSNum(MV_32 devNum, MV_BOARD_DEV_CLASS devClass);
|
||||
|
||||
/* Gpio Pin Connections API */
|
||||
MV_32 mvBoardUSBVbusGpioPinGet(int devId);
|
||||
MV_32 mvBoardUSBVbusEnGpioPinGet(int devId);
|
||||
MV_U32 mvBoardPexBridgeIntPinGet(MV_U32 devNum, MV_U32 intPin);
|
||||
|
||||
MV_32 mvBoardResetGpioPinGet(MV_VOID);
|
||||
MV_32 mvBoardRTCGpioPinGet(MV_VOID);
|
||||
MV_32 mvBoardGpioIntMaskLowGet(MV_VOID);
|
||||
MV_32 mvBoardGpioIntMaskHighGet(MV_VOID);
|
||||
MV_32 mvBoardSlicGpioPinGet(MV_U32 slicNum);
|
||||
|
||||
MV_32 mvBoardSDIOGpioPinGet(MV_VOID);
|
||||
MV_STATUS mvBoardSDioWPControl(MV_BOOL mode);
|
||||
MV_32 mvBoarGpioPinNumGet(MV_BOARD_GPP_CLASS class, MV_U32 index);
|
||||
|
||||
MV_32 mvBoardNandWidthGet(void);
|
||||
MV_STATUS mvBoardFanPowerControl(MV_BOOL mode);
|
||||
MV_STATUS mvBoardHDDPowerControl(MV_BOOL mode);
|
||||
#endif /* __INCmvBoardEnvLibh */
|
||||
@@ -0,0 +1,848 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#include "mvCommon.h"
|
||||
#include "mvBoardEnvLib.h"
|
||||
#include "mvBoardEnvSpec.h"
|
||||
#include "twsi/mvTwsi.h"
|
||||
|
||||
#define DB_88F6281A_BOARD_PCI_IF_NUM 0x0
|
||||
#define DB_88F6281A_BOARD_TWSI_DEF_NUM 0x7
|
||||
#define DB_88F6281A_BOARD_MAC_INFO_NUM 0x2
|
||||
#define DB_88F6281A_BOARD_GPP_INFO_NUM 0x3
|
||||
#define DB_88F6281A_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#define DB_88F6281A_BOARD_MPP_GROUP_TYPE_NUM 0x1
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
#define DB_88F6281A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
#define DB_88F6281A_BOARD_DEVICE_CONFIG_NUM 0x2
|
||||
#else
|
||||
#define DB_88F6281A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#endif
|
||||
#define DB_88F6281A_BOARD_DEBUG_LED_NUM 0x0
|
||||
|
||||
|
||||
MV_BOARD_TWSI_INFO db88f6281AInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{
|
||||
{BOARD_DEV_TWSI_EXP, 0x20, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_EXP, 0x21, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_EXP, 0x27, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4C, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4D, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4E, ADDR7_BIT},
|
||||
{BOARD_TWSI_AUDIO_DEC, 0x4A, ADDR7_BIT}
|
||||
};
|
||||
|
||||
MV_BOARD_MAC_INFO db88f6281AInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{
|
||||
{BOARD_MAC_SPEED_AUTO, 0x8},
|
||||
{BOARD_MAC_SPEED_AUTO, 0x9}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO db88f6281AInfoBoardMppTypeInfo[] =
|
||||
/* {{MV_BOARD_MPP_TYPE_CLASS boardMppGroup1,
|
||||
MV_BOARD_MPP_TYPE_CLASS boardMppGroup2}} */
|
||||
{{MV_BOARD_AUTO, MV_BOARD_AUTO}
|
||||
};
|
||||
|
||||
MV_BOARD_GPP_INFO db88f6281AInfoBoardGppInfo[] =
|
||||
/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
|
||||
{
|
||||
{BOARD_GPP_TSU_DIRCTION, 33}
|
||||
/*muxed with TDM/Audio module via IOexpender
|
||||
{BOARD_GPP_SDIO_DETECT, 38},
|
||||
{BOARD_GPP_USB_VBUS, 49}*/
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO db88f6281AInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
{
|
||||
{0, N_A, BOARD_DEV_NAND_FLASH, 8}, /* NAND DEV */
|
||||
{1, N_A, BOARD_DEV_SPI_FLASH, 8}, /* SPI DEV */
|
||||
};
|
||||
#else
|
||||
{{1, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
#endif
|
||||
|
||||
MV_BOARD_MPP_INFO db88f6281AInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
DB_88F6281A_MPP0_7,
|
||||
DB_88F6281A_MPP8_15,
|
||||
DB_88F6281A_MPP16_23,
|
||||
DB_88F6281A_MPP24_31,
|
||||
DB_88F6281A_MPP32_39,
|
||||
DB_88F6281A_MPP40_47,
|
||||
DB_88F6281A_MPP48_55
|
||||
}}};
|
||||
|
||||
|
||||
MV_BOARD_INFO db88f6281AInfo = {
|
||||
"DB-88F6281A-BP", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
DB_88F6281A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
db88f6281AInfoBoardMppTypeInfo,
|
||||
DB_88F6281A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
db88f6281AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
0, /* intsGppMaskHigh */
|
||||
DB_88F6281A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
db88f6281AInfoBoardDeCsInfo,
|
||||
DB_88F6281A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
db88f6281AInfoBoardTwsiDev,
|
||||
DB_88F6281A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
db88f6281AInfoBoardMacInfo,
|
||||
DB_88F6281A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
db88f6281AInfoBoardGppInfo,
|
||||
DB_88F6281A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
DB_88F6281A_OE_LOW, /* gppOutEnLow */
|
||||
DB_88F6281A_OE_HIGH, /* gppOutEnHigh */
|
||||
DB_88F6281A_OE_VAL_LOW, /* gppOutValLow */
|
||||
DB_88F6281A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
BIT6, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
|
||||
#define RD_88F6281A_BOARD_PCI_IF_NUM 0x0
|
||||
#define RD_88F6281A_BOARD_TWSI_DEF_NUM 0x2
|
||||
#define RD_88F6281A_BOARD_MAC_INFO_NUM 0x2
|
||||
#define RD_88F6281A_BOARD_GPP_INFO_NUM 0x5
|
||||
#define RD_88F6281A_BOARD_MPP_GROUP_TYPE_NUM 0x1
|
||||
#define RD_88F6281A_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
#define RD_88F6281A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
#define RD_88F6281A_BOARD_DEVICE_CONFIG_NUM 0x2
|
||||
#else
|
||||
#define RD_88F6281A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#endif
|
||||
#define RD_88F6281A_BOARD_DEBUG_LED_NUM 0x0
|
||||
|
||||
MV_BOARD_MAC_INFO rd88f6281AInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{{BOARD_MAC_SPEED_1000M, 0xa},
|
||||
{BOARD_MAC_SPEED_AUTO, 0xb}
|
||||
};
|
||||
|
||||
MV_BOARD_SWITCH_INFO rd88f6281AInfoBoardSwitchInfo[] =
|
||||
/* MV_32 linkStatusIrq, {MV_32 qdPort0, MV_32 qdPort1, MV_32 qdPort2, MV_32 qdPort3, MV_32 qdPort4},
|
||||
MV_32 qdCpuPort, MV_32 smiScanMode, MV_32 switchOnPort} */
|
||||
{{38, {0, 1, 2, 3, -1}, 5, 2, 0},
|
||||
{-1, {-1}, -1, -1, -1}};
|
||||
|
||||
MV_BOARD_TWSI_INFO rd88f6281AInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{
|
||||
{BOARD_DEV_TWSI_EXP, 0xFF, ADDR7_BIT}, /* dummy entry to align with modules indexes */
|
||||
{BOARD_DEV_TWSI_EXP, 0x27, ADDR7_BIT}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO rd88f6281AInfoBoardMppTypeInfo[] =
|
||||
{{MV_BOARD_RGMII, MV_BOARD_TDM}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO rd88f6281AInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
{
|
||||
{0, N_A, BOARD_DEV_NAND_FLASH, 8}, /* NAND DEV */
|
||||
{1, N_A, BOARD_DEV_SPI_FLASH, 8}, /* SPI DEV */
|
||||
};
|
||||
#else
|
||||
{{1, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
#endif
|
||||
|
||||
MV_BOARD_GPP_INFO rd88f6281AInfoBoardGppInfo[] =
|
||||
/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
|
||||
{{BOARD_GPP_SDIO_DETECT, 28},
|
||||
{BOARD_GPP_USB_OC, 29},
|
||||
{BOARD_GPP_WPS_BUTTON, 35},
|
||||
{BOARD_GPP_MV_SWITCH, 38},
|
||||
{BOARD_GPP_USB_VBUS, 49}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_INFO rd88f6281AInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
RD_88F6281A_MPP0_7,
|
||||
RD_88F6281A_MPP8_15,
|
||||
RD_88F6281A_MPP16_23,
|
||||
RD_88F6281A_MPP24_31,
|
||||
RD_88F6281A_MPP32_39,
|
||||
RD_88F6281A_MPP40_47,
|
||||
RD_88F6281A_MPP48_55
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO rd88f6281AInfo = {
|
||||
"RD-88F6281A", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
RD_88F6281A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
rd88f6281AInfoBoardMppTypeInfo,
|
||||
RD_88F6281A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
rd88f6281AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
(1 << 3), /* intsGppMaskHigh */
|
||||
RD_88F6281A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
rd88f6281AInfoBoardDeCsInfo,
|
||||
RD_88F6281A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
rd88f6281AInfoBoardTwsiDev,
|
||||
RD_88F6281A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
rd88f6281AInfoBoardMacInfo,
|
||||
RD_88F6281A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
rd88f6281AInfoBoardGppInfo,
|
||||
RD_88F6281A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
RD_88F6281A_OE_LOW, /* gppOutEnLow */
|
||||
RD_88F6281A_OE_HIGH, /* gppOutEnHigh */
|
||||
RD_88F6281A_OE_VAL_LOW, /* gppOutValLow */
|
||||
RD_88F6281A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
BIT6, /* gppPolarityValHigh */
|
||||
rd88f6281AInfoBoardSwitchInfo /* pSwitchInfo */
|
||||
};
|
||||
|
||||
|
||||
#define DB_88F6192A_BOARD_PCI_IF_NUM 0x0
|
||||
#define DB_88F6192A_BOARD_TWSI_DEF_NUM 0x7
|
||||
#define DB_88F6192A_BOARD_MAC_INFO_NUM 0x2
|
||||
#define DB_88F6192A_BOARD_GPP_INFO_NUM 0x3
|
||||
#define DB_88F6192A_BOARD_MPP_GROUP_TYPE_NUM 0x1
|
||||
#define DB_88F6192A_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
#define DB_88F6192A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
#define DB_88F6192A_BOARD_DEVICE_CONFIG_NUM 0x2
|
||||
#else
|
||||
#define DB_88F6192A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#endif
|
||||
#define DB_88F6192A_BOARD_DEBUG_LED_NUM 0x0
|
||||
|
||||
MV_BOARD_TWSI_INFO db88f6192AInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{
|
||||
{BOARD_DEV_TWSI_EXP, 0x20, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_EXP, 0x21, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_EXP, 0x27, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4C, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4D, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4E, ADDR7_BIT},
|
||||
{BOARD_TWSI_AUDIO_DEC, 0x4A, ADDR7_BIT}
|
||||
};
|
||||
|
||||
MV_BOARD_MAC_INFO db88f6192AInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{
|
||||
{BOARD_MAC_SPEED_AUTO, 0x8},
|
||||
{BOARD_MAC_SPEED_AUTO, 0x9}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO db88f6192AInfoBoardMppTypeInfo[] =
|
||||
/* {{MV_BOARD_MPP_TYPE_CLASS boardMppGroup1,
|
||||
MV_BOARD_MPP_TYPE_CLASS boardMppGroup2}} */
|
||||
{{MV_BOARD_AUTO, MV_BOARD_OTHER}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO db88f6192AInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
{
|
||||
{0, N_A, BOARD_DEV_NAND_FLASH, 8}, /* NAND DEV */
|
||||
{1, N_A, BOARD_DEV_SPI_FLASH, 8}, /* SPI DEV */
|
||||
};
|
||||
#else
|
||||
{{1, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
#endif
|
||||
|
||||
MV_BOARD_GPP_INFO db88f6192AInfoBoardGppInfo[] =
|
||||
/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
|
||||
{
|
||||
{BOARD_GPP_SDIO_WP, 20},
|
||||
{BOARD_GPP_USB_VBUS, 22},
|
||||
{BOARD_GPP_SDIO_DETECT, 23},
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_INFO db88f6192AInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
DB_88F6192A_MPP0_7,
|
||||
DB_88F6192A_MPP8_15,
|
||||
DB_88F6192A_MPP16_23,
|
||||
DB_88F6192A_MPP24_31,
|
||||
DB_88F6192A_MPP32_35
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO db88f6192AInfo = {
|
||||
"DB-88F6192A-BP", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
DB_88F6192A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
db88f6192AInfoBoardMppTypeInfo,
|
||||
DB_88F6192A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
db88f6192AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
(1 << 3), /* intsGppMaskHigh */
|
||||
DB_88F6192A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
db88f6192AInfoBoardDeCsInfo,
|
||||
DB_88F6192A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
db88f6192AInfoBoardTwsiDev,
|
||||
DB_88F6192A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
db88f6192AInfoBoardMacInfo,
|
||||
DB_88F6192A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
db88f6192AInfoBoardGppInfo,
|
||||
DB_88F6192A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
DB_88F6192A_OE_LOW, /* gppOutEnLow */
|
||||
DB_88F6192A_OE_HIGH, /* gppOutEnHigh */
|
||||
DB_88F6192A_OE_VAL_LOW, /* gppOutValLow */
|
||||
DB_88F6192A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
#define DB_88F6190A_BOARD_MAC_INFO_NUM 0x1
|
||||
|
||||
MV_BOARD_INFO db88f6190AInfo = {
|
||||
"DB-88F6190A-BP", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
DB_88F6192A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
db88f6192AInfoBoardMppTypeInfo,
|
||||
DB_88F6192A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
db88f6192AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
(1 << 3), /* intsGppMaskHigh */
|
||||
DB_88F6192A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
db88f6192AInfoBoardDeCsInfo,
|
||||
DB_88F6192A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
db88f6192AInfoBoardTwsiDev,
|
||||
DB_88F6190A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
db88f6192AInfoBoardMacInfo,
|
||||
DB_88F6192A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
db88f6192AInfoBoardGppInfo,
|
||||
DB_88F6192A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
DB_88F6192A_OE_LOW, /* gppOutEnLow */
|
||||
DB_88F6192A_OE_HIGH, /* gppOutEnHigh */
|
||||
DB_88F6192A_OE_VAL_LOW, /* gppOutValLow */
|
||||
DB_88F6192A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
#define RD_88F6192A_BOARD_PCI_IF_NUM 0x0
|
||||
#define RD_88F6192A_BOARD_TWSI_DEF_NUM 0x0
|
||||
#define RD_88F6192A_BOARD_MAC_INFO_NUM 0x1
|
||||
#define RD_88F6192A_BOARD_GPP_INFO_NUM 0xE
|
||||
#define RD_88F6192A_BOARD_MPP_GROUP_TYPE_NUM 0x1
|
||||
#define RD_88F6192A_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#define RD_88F6192A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#define RD_88F6192A_BOARD_DEBUG_LED_NUM 0x3
|
||||
|
||||
MV_U8 rd88f6192AInfoBoardDebugLedIf[] =
|
||||
{17, 28, 29};
|
||||
|
||||
MV_BOARD_MAC_INFO rd88f6192AInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{{BOARD_MAC_SPEED_AUTO, 0x8}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO rd88f6192AInfoBoardMppTypeInfo[] =
|
||||
/* {{MV_BOARD_MPP_TYPE_CLASS boardMppGroup1,
|
||||
MV_BOARD_MPP_TYPE_CLASS boardMppGroup2}} */
|
||||
{{MV_BOARD_OTHER, MV_BOARD_OTHER}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO rd88f6192AInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
{{1, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
|
||||
MV_BOARD_GPP_INFO rd88f6192AInfoBoardGppInfo[] =
|
||||
/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
|
||||
{
|
||||
{BOARD_GPP_USB_VBUS_EN, 10},
|
||||
{BOARD_GPP_USB_HOST_DEVICE, 11},
|
||||
{BOARD_GPP_RESET, 14},
|
||||
{BOARD_GPP_POWER_ON_LED, 15},
|
||||
{BOARD_GPP_HDD_POWER, 16},
|
||||
{BOARD_GPP_WPS_BUTTON, 24},
|
||||
{BOARD_GPP_TS_BUTTON_C, 25},
|
||||
{BOARD_GPP_USB_VBUS, 26},
|
||||
{BOARD_GPP_USB_OC, 27},
|
||||
{BOARD_GPP_TS_BUTTON_U, 30},
|
||||
{BOARD_GPP_TS_BUTTON_R, 31},
|
||||
{BOARD_GPP_TS_BUTTON_L, 32},
|
||||
{BOARD_GPP_TS_BUTTON_D, 34},
|
||||
{BOARD_GPP_FAN_POWER, 35}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_INFO rd88f6192AInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
RD_88F6192A_MPP0_7,
|
||||
RD_88F6192A_MPP8_15,
|
||||
RD_88F6192A_MPP16_23,
|
||||
RD_88F6192A_MPP24_31,
|
||||
RD_88F6192A_MPP32_35
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO rd88f6192AInfo = {
|
||||
"RD-88F6192A-NAS", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
RD_88F6192A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
rd88f6192AInfoBoardMppTypeInfo,
|
||||
RD_88F6192A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
rd88f6192AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
(1 << 3), /* intsGppMaskHigh */
|
||||
RD_88F6192A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
rd88f6192AInfoBoardDeCsInfo,
|
||||
RD_88F6192A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
NULL,
|
||||
RD_88F6192A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
rd88f6192AInfoBoardMacInfo,
|
||||
RD_88F6192A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
rd88f6192AInfoBoardGppInfo,
|
||||
RD_88F6192A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
rd88f6192AInfoBoardDebugLedIf,
|
||||
0, /* ledsPolarity */
|
||||
RD_88F6192A_OE_LOW, /* gppOutEnLow */
|
||||
RD_88F6192A_OE_HIGH, /* gppOutEnHigh */
|
||||
RD_88F6192A_OE_VAL_LOW, /* gppOutValLow */
|
||||
RD_88F6192A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
MV_BOARD_INFO rd88f6190AInfo = {
|
||||
"RD-88F6190A-NAS", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
RD_88F6192A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
rd88f6192AInfoBoardMppTypeInfo,
|
||||
RD_88F6192A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
rd88f6192AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
(1 << 3), /* intsGppMaskHigh */
|
||||
RD_88F6192A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
rd88f6192AInfoBoardDeCsInfo,
|
||||
RD_88F6192A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
NULL,
|
||||
RD_88F6192A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
rd88f6192AInfoBoardMacInfo,
|
||||
RD_88F6192A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
rd88f6192AInfoBoardGppInfo,
|
||||
RD_88F6192A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
rd88f6192AInfoBoardDebugLedIf,
|
||||
0, /* ledsPolarity */
|
||||
RD_88F6192A_OE_LOW, /* gppOutEnLow */
|
||||
RD_88F6192A_OE_HIGH, /* gppOutEnHigh */
|
||||
RD_88F6192A_OE_VAL_LOW, /* gppOutValLow */
|
||||
RD_88F6192A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
#define DB_88F6180A_BOARD_PCI_IF_NUM 0x0
|
||||
#define DB_88F6180A_BOARD_TWSI_DEF_NUM 0x5
|
||||
#define DB_88F6180A_BOARD_MAC_INFO_NUM 0x1
|
||||
#define DB_88F6180A_BOARD_GPP_INFO_NUM 0x0
|
||||
#define DB_88F6180A_BOARD_MPP_GROUP_TYPE_NUM 0x2
|
||||
#define DB_88F6180A_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#define DB_88F6180A_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#define DB_88F6180A_BOARD_DEBUG_LED_NUM 0x0
|
||||
|
||||
MV_BOARD_TWSI_INFO db88f6180AInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{
|
||||
{BOARD_DEV_TWSI_EXP, 0x20, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_EXP, 0x21, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_EXP, 0x27, ADDR7_BIT},
|
||||
{BOARD_DEV_TWSI_SATR, 0x4C, ADDR7_BIT},
|
||||
{BOARD_TWSI_AUDIO_DEC, 0x4A, ADDR7_BIT}
|
||||
};
|
||||
|
||||
MV_BOARD_MAC_INFO db88f6180AInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{{BOARD_MAC_SPEED_AUTO, 0x8}
|
||||
};
|
||||
|
||||
MV_BOARD_GPP_INFO db88f6180AInfoBoardGppInfo[] =
|
||||
/* {{MV_BOARD_GPP_CLASS devClass, MV_U8 gppPinNum}} */
|
||||
{
|
||||
/* Muxed with TDM/Audio module via IOexpender
|
||||
{BOARD_GPP_USB_VBUS, 6} */
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO db88f6180AInfoBoardMppTypeInfo[] =
|
||||
/* {{MV_BOARD_MPP_TYPE_CLASS boardMppGroup1,
|
||||
MV_BOARD_MPP_TYPE_CLASS boardMppGroup2}} */
|
||||
{{MV_BOARD_OTHER, MV_BOARD_AUTO}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO db88f6180AInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
#if defined(MV_NAND_BOOT)
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
#else
|
||||
{{1, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
#endif
|
||||
|
||||
MV_BOARD_MPP_INFO db88f6180AInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
DB_88F6180A_MPP0_7,
|
||||
DB_88F6180A_MPP8_15,
|
||||
DB_88F6180A_MPP16_23,
|
||||
DB_88F6180A_MPP24_31,
|
||||
DB_88F6180A_MPP32_39,
|
||||
DB_88F6180A_MPP40_44
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO db88f6180AInfo = {
|
||||
"DB-88F6180A-BP", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
DB_88F6180A_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
db88f6180AInfoBoardMppTypeInfo,
|
||||
DB_88F6180A_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
db88f6180AInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
0, /* intsGppMaskHigh */
|
||||
DB_88F6180A_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
db88f6180AInfoBoardDeCsInfo,
|
||||
DB_88F6180A_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
db88f6180AInfoBoardTwsiDev,
|
||||
DB_88F6180A_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
db88f6180AInfoBoardMacInfo,
|
||||
DB_88F6180A_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
NULL,
|
||||
DB_88F6180A_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
DB_88F6180A_OE_LOW, /* gppOutEnLow */
|
||||
DB_88F6180A_OE_HIGH, /* gppOutEnHigh */
|
||||
DB_88F6180A_OE_VAL_LOW, /* gppOutValLow */
|
||||
DB_88F6180A_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
|
||||
#define RD_88F6281A_PCAC_BOARD_PCI_IF_NUM 0x0
|
||||
#define RD_88F6281A_PCAC_BOARD_TWSI_DEF_NUM 0x1
|
||||
#define RD_88F6281A_PCAC_BOARD_MAC_INFO_NUM 0x1
|
||||
#define RD_88F6281A_PCAC_BOARD_GPP_INFO_NUM 0x0
|
||||
#define RD_88F6281A_PCAC_BOARD_MPP_GROUP_TYPE_NUM 0x1
|
||||
#define RD_88F6281A_PCAC_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
#define RD_88F6281A_PCAC_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
#define RD_88F6281A_PCAC_BOARD_DEVICE_CONFIG_NUM 0x2
|
||||
#else
|
||||
#define RD_88F6281A_PCAC_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#endif
|
||||
#define RD_88F6281A_PCAC_BOARD_DEBUG_LED_NUM 0x4
|
||||
|
||||
MV_U8 rd88f6281APcacInfoBoardDebugLedIf[] =
|
||||
{38, 39, 40, 41};
|
||||
|
||||
MV_BOARD_MAC_INFO rd88f6281APcacInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{{BOARD_MAC_SPEED_AUTO, 0x8}
|
||||
};
|
||||
|
||||
MV_BOARD_TWSI_INFO rd88f6281APcacInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{
|
||||
{BOARD_TWSI_OTHER, 0xa7, ADDR7_BIT}
|
||||
};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO rd88f6281APcacInfoBoardMppTypeInfo[] =
|
||||
{{MV_BOARD_OTHER, MV_BOARD_OTHER}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO rd88f6281APcacInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
{
|
||||
{0, N_A, BOARD_DEV_NAND_FLASH, 8}, /* NAND DEV */
|
||||
{1, N_A, BOARD_DEV_SPI_FLASH, 8}, /* SPI DEV */
|
||||
};
|
||||
#else
|
||||
{{1, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
#endif
|
||||
|
||||
MV_BOARD_MPP_INFO rd88f6281APcacInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
RD_88F6281A_PCAC_MPP0_7,
|
||||
RD_88F6281A_PCAC_MPP8_15,
|
||||
RD_88F6281A_PCAC_MPP16_23,
|
||||
RD_88F6281A_PCAC_MPP24_31,
|
||||
RD_88F6281A_PCAC_MPP32_39,
|
||||
RD_88F6281A_PCAC_MPP40_47,
|
||||
RD_88F6281A_PCAC_MPP48_55
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO rd88f6281APcacInfo = {
|
||||
"RD-88F6281A-PCAC", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
RD_88F6281A_PCAC_BOARD_MPP_GROUP_TYPE_NUM, /* numBoardMppGroupType */
|
||||
rd88f6281APcacInfoBoardMppTypeInfo,
|
||||
RD_88F6281A_PCAC_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
rd88f6281APcacInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
(1 << 3), /* intsGppMaskHigh */
|
||||
RD_88F6281A_PCAC_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
rd88f6281APcacInfoBoardDeCsInfo,
|
||||
RD_88F6281A_PCAC_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
rd88f6281APcacInfoBoardTwsiDev,
|
||||
RD_88F6281A_PCAC_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
rd88f6281APcacInfoBoardMacInfo,
|
||||
RD_88F6281A_PCAC_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
0,
|
||||
RD_88F6281A_PCAC_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
RD_88F6281A_PCAC_OE_LOW, /* gppOutEnLow */
|
||||
RD_88F6281A_PCAC_OE_HIGH, /* gppOutEnHigh */
|
||||
RD_88F6281A_PCAC_OE_VAL_LOW, /* gppOutValLow */
|
||||
RD_88F6281A_PCAC_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
|
||||
/* 6281 Sheeva Plug*/
|
||||
|
||||
#define SHEEVA_PLUG_BOARD_PCI_IF_NUM 0x0
|
||||
#define SHEEVA_PLUG_BOARD_TWSI_DEF_NUM 0x0
|
||||
#define SHEEVA_PLUG_BOARD_MAC_INFO_NUM 0x1
|
||||
#define SHEEVA_PLUG_BOARD_GPP_INFO_NUM 0x0
|
||||
#define SHEEVA_PLUG_BOARD_MPP_GROUP_TYPE_NUN 0x1
|
||||
#define SHEEVA_PLUG_BOARD_MPP_CONFIG_NUM 0x1
|
||||
#define SHEEVA_PLUG_BOARD_DEVICE_CONFIG_NUM 0x1
|
||||
#define SHEEVA_PLUG_BOARD_DEBUG_LED_NUM 0x1
|
||||
|
||||
MV_U8 sheevaPlugInfoBoardDebugLedIf[] =
|
||||
{49};
|
||||
|
||||
MV_BOARD_MAC_INFO sheevaPlugInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{{BOARD_MAC_SPEED_AUTO, 0x0}};
|
||||
|
||||
MV_BOARD_TWSI_INFO sheevaPlugInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{{BOARD_TWSI_OTHER, 0x0, ADDR7_BIT}};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO sheevaPlugInfoBoardMppTypeInfo[] =
|
||||
{{MV_BOARD_OTHER, MV_BOARD_OTHER}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO sheevaPlugInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
|
||||
MV_BOARD_MPP_INFO sheevaPlugInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
RD_SHEEVA_PLUG_MPP0_7,
|
||||
RD_SHEEVA_PLUG_MPP8_15,
|
||||
RD_SHEEVA_PLUG_MPP16_23,
|
||||
RD_SHEEVA_PLUG_MPP24_31,
|
||||
RD_SHEEVA_PLUG_MPP32_39,
|
||||
RD_SHEEVA_PLUG_MPP40_47,
|
||||
RD_SHEEVA_PLUG_MPP48_55
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO sheevaPlugInfo = {
|
||||
"SHEEVA PLUG", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
SHEEVA_PLUG_BOARD_MPP_GROUP_TYPE_NUN, /* numBoardMppGroupType */
|
||||
sheevaPlugInfoBoardMppTypeInfo,
|
||||
SHEEVA_PLUG_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
sheevaPlugInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
0, /* intsGppMaskHigh */
|
||||
SHEEVA_PLUG_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
sheevaPlugInfoBoardDeCsInfo,
|
||||
SHEEVA_PLUG_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
sheevaPlugInfoBoardTwsiDev,
|
||||
SHEEVA_PLUG_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
sheevaPlugInfoBoardMacInfo,
|
||||
SHEEVA_PLUG_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
0,
|
||||
SHEEVA_PLUG_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
sheevaPlugInfoBoardDebugLedIf,
|
||||
0, /* ledsPolarity */
|
||||
RD_SHEEVA_PLUG_OE_LOW, /* gppOutEnLow */
|
||||
RD_SHEEVA_PLUG_OE_HIGH, /* gppOutEnHigh */
|
||||
RD_SHEEVA_PLUG_OE_VAL_LOW, /* gppOutValLow */
|
||||
RD_SHEEVA_PLUG_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
/* Customer specific board place holder*/
|
||||
|
||||
#define DB_CUSTOMER_BOARD_PCI_IF_NUM 0x0
|
||||
#define DB_CUSTOMER_BOARD_TWSI_DEF_NUM 0x0
|
||||
#define DB_CUSTOMER_BOARD_MAC_INFO_NUM 0x0
|
||||
#define DB_CUSTOMER_BOARD_GPP_INFO_NUM 0x0
|
||||
#define DB_CUSTOMER_BOARD_MPP_GROUP_TYPE_NUN 0x0
|
||||
#define DB_CUSTOMER_BOARD_MPP_CONFIG_NUM 0x0
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
#define DB_CUSTOMER_BOARD_DEVICE_CONFIG_NUM 0x0
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
#define DB_CUSTOMER_BOARD_DEVICE_CONFIG_NUM 0x0
|
||||
#else
|
||||
#define DB_CUSTOMER_BOARD_DEVICE_CONFIG_NUM 0x0
|
||||
#endif
|
||||
#define DB_CUSTOMER_BOARD_DEBUG_LED_NUM 0x0
|
||||
|
||||
MV_U8 dbCustomerInfoBoardDebugLedIf[] =
|
||||
{0};
|
||||
|
||||
MV_BOARD_MAC_INFO dbCustomerInfoBoardMacInfo[] =
|
||||
/* {{MV_BOARD_MAC_SPEED boardMacSpeed, MV_U8 boardEthSmiAddr}} */
|
||||
{{BOARD_MAC_SPEED_AUTO, 0x0}};
|
||||
|
||||
MV_BOARD_TWSI_INFO dbCustomerInfoBoardTwsiDev[] =
|
||||
/* {{MV_BOARD_DEV_CLASS devClass, MV_U8 twsiDevAddr, MV_U8 twsiDevAddrType}} */
|
||||
{{BOARD_TWSI_OTHER, 0x0, ADDR7_BIT}};
|
||||
|
||||
MV_BOARD_MPP_TYPE_INFO dbCustomerInfoBoardMppTypeInfo[] =
|
||||
{{MV_BOARD_OTHER, MV_BOARD_OTHER}
|
||||
};
|
||||
|
||||
MV_DEV_CS_INFO dbCustomerInfoBoardDeCsInfo[] =
|
||||
/*{deviceCS, params, devType, devWidth}*/
|
||||
#if defined(MV_NAND) && defined(MV_NAND_BOOT)
|
||||
{{0, N_A, BOARD_DEV_NAND_FLASH, 8}}; /* NAND DEV */
|
||||
#elif defined(MV_NAND) && defined(MV_SPI_BOOT)
|
||||
{
|
||||
{0, N_A, BOARD_DEV_NAND_FLASH, 8}, /* NAND DEV */
|
||||
{2, N_A, BOARD_DEV_SPI_FLASH, 8}, /* SPI DEV */
|
||||
};
|
||||
#else
|
||||
{{2, N_A, BOARD_DEV_SPI_FLASH, 8}}; /* SPI DEV */
|
||||
#endif
|
||||
|
||||
MV_BOARD_MPP_INFO dbCustomerInfoBoardMppConfigValue[] =
|
||||
{{{
|
||||
DB_CUSTOMER_MPP0_7,
|
||||
DB_CUSTOMER_MPP8_15,
|
||||
DB_CUSTOMER_MPP16_23,
|
||||
DB_CUSTOMER_MPP24_31,
|
||||
DB_CUSTOMER_MPP32_39,
|
||||
DB_CUSTOMER_MPP40_47,
|
||||
DB_CUSTOMER_MPP48_55
|
||||
}}};
|
||||
|
||||
MV_BOARD_INFO dbCustomerInfo = {
|
||||
"DB-CUSTOMER", /* boardName[MAX_BOARD_NAME_LEN] */
|
||||
DB_CUSTOMER_BOARD_MPP_GROUP_TYPE_NUN, /* numBoardMppGroupType */
|
||||
dbCustomerInfoBoardMppTypeInfo,
|
||||
DB_CUSTOMER_BOARD_MPP_CONFIG_NUM, /* numBoardMppConfig */
|
||||
dbCustomerInfoBoardMppConfigValue,
|
||||
0, /* intsGppMaskLow */
|
||||
0, /* intsGppMaskHigh */
|
||||
DB_CUSTOMER_BOARD_DEVICE_CONFIG_NUM, /* numBoardDevIf */
|
||||
dbCustomerInfoBoardDeCsInfo,
|
||||
DB_CUSTOMER_BOARD_TWSI_DEF_NUM, /* numBoardTwsiDev */
|
||||
dbCustomerInfoBoardTwsiDev,
|
||||
DB_CUSTOMER_BOARD_MAC_INFO_NUM, /* numBoardMacInfo */
|
||||
dbCustomerInfoBoardMacInfo,
|
||||
DB_CUSTOMER_BOARD_GPP_INFO_NUM, /* numBoardGppInfo */
|
||||
0,
|
||||
DB_CUSTOMER_BOARD_DEBUG_LED_NUM, /* activeLedsNumber */
|
||||
NULL,
|
||||
0, /* ledsPolarity */
|
||||
DB_CUSTOMER_OE_LOW, /* gppOutEnLow */
|
||||
DB_CUSTOMER_OE_HIGH, /* gppOutEnHigh */
|
||||
DB_CUSTOMER_OE_VAL_LOW, /* gppOutValLow */
|
||||
DB_CUSTOMER_OE_VAL_HIGH, /* gppOutValHigh */
|
||||
0, /* gppPolarityValLow */
|
||||
0, /* gppPolarityValHigh */
|
||||
NULL /* pSwitchInfo */
|
||||
};
|
||||
|
||||
MV_BOARD_INFO* boardInfoTbl[] = {
|
||||
&db88f6281AInfo,
|
||||
&rd88f6281AInfo,
|
||||
&db88f6192AInfo,
|
||||
&rd88f6192AInfo,
|
||||
&db88f6180AInfo,
|
||||
&db88f6190AInfo,
|
||||
&rd88f6190AInfo,
|
||||
&rd88f6281APcacInfo,
|
||||
&dbCustomerInfo,
|
||||
&sheevaPlugInfo
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,262 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvBoardEnvSpech
|
||||
#define __INCmvBoardEnvSpech
|
||||
|
||||
#include "mvSysHwConfig.h"
|
||||
|
||||
|
||||
/* For future use */
|
||||
#define BD_ID_DATA_START_OFFS 0x0
|
||||
#define BD_DETECT_SEQ_OFFS 0x0
|
||||
#define BD_SYS_NUM_OFFS 0x4
|
||||
#define BD_NAME_OFFS 0x8
|
||||
|
||||
/* I2C bus addresses */
|
||||
#define MV_BOARD_CTRL_I2C_ADDR 0x0 /* Controller slave addr */
|
||||
#define MV_BOARD_CTRL_I2C_ADDR_TYPE ADDR7_BIT
|
||||
#define MV_BOARD_DIMM0_I2C_ADDR 0x56
|
||||
#define MV_BOARD_DIMM0_I2C_ADDR_TYPE ADDR7_BIT
|
||||
#define MV_BOARD_DIMM1_I2C_ADDR 0x54
|
||||
#define MV_BOARD_DIMM1_I2C_ADDR_TYPE ADDR7_BIT
|
||||
#define MV_BOARD_EEPROM_I2C_ADDR 0x51
|
||||
#define MV_BOARD_EEPROM_I2C_ADDR_TYPE ADDR7_BIT
|
||||
#define MV_BOARD_MAIN_EEPROM_I2C_ADDR 0x50
|
||||
#define MV_BOARD_MAIN_EEPROM_I2C_ADDR_TYPE ADDR7_BIT
|
||||
#define MV_BOARD_MUX_I2C_ADDR_ENTRY 0x2
|
||||
#define MV_BOARD_DIMM_I2C_CHANNEL 0x0
|
||||
|
||||
#define BOOT_FLASH_INDEX 0
|
||||
#define MAIN_FLASH_INDEX 1
|
||||
|
||||
#define BOARD_ETH_START_PORT_NUM 0
|
||||
|
||||
/* Supported clocks */
|
||||
#define MV_BOARD_TCLK_100MHZ 100000000
|
||||
#define MV_BOARD_TCLK_125MHZ 125000000
|
||||
#define MV_BOARD_TCLK_133MHZ 133333333
|
||||
#define MV_BOARD_TCLK_150MHZ 150000000
|
||||
#define MV_BOARD_TCLK_166MHZ 166666667
|
||||
#define MV_BOARD_TCLK_200MHZ 200000000
|
||||
|
||||
#define MV_BOARD_SYSCLK_100MHZ 100000000
|
||||
#define MV_BOARD_SYSCLK_125MHZ 125000000
|
||||
#define MV_BOARD_SYSCLK_133MHZ 133333333
|
||||
#define MV_BOARD_SYSCLK_150MHZ 150000000
|
||||
#define MV_BOARD_SYSCLK_166MHZ 166666667
|
||||
#define MV_BOARD_SYSCLK_200MHZ 200000000
|
||||
#define MV_BOARD_SYSCLK_233MHZ 233333333
|
||||
#define MV_BOARD_SYSCLK_250MHZ 250000000
|
||||
#define MV_BOARD_SYSCLK_267MHZ 266666667
|
||||
#define MV_BOARD_SYSCLK_300MHZ 300000000
|
||||
#define MV_BOARD_SYSCLK_333MHZ 333333334
|
||||
#define MV_BOARD_SYSCLK_400MHZ 400000000
|
||||
|
||||
#define MV_BOARD_REFCLK_25MHZ 25000000
|
||||
|
||||
/* Board specific */
|
||||
/* =============================== */
|
||||
|
||||
/* boards ID numbers */
|
||||
|
||||
#define BOARD_ID_BASE 0x0
|
||||
|
||||
/* New board ID numbers */
|
||||
#define DB_88F6281A_BP_ID (BOARD_ID_BASE)
|
||||
#define DB_88F6281_BP_MLL_ID 1680
|
||||
#define RD_88F6281A_ID (BOARD_ID_BASE+0x1)
|
||||
#define RD_88F6281_MLL_ID 1682
|
||||
#define DB_88F6192A_BP_ID (BOARD_ID_BASE+0x2)
|
||||
#define RD_88F6192A_ID (BOARD_ID_BASE+0x3)
|
||||
#define RD_88F6192_MLL_ID 1681
|
||||
#define DB_88F6180A_BP_ID (BOARD_ID_BASE+0x4)
|
||||
#define DB_88F6190A_BP_ID (BOARD_ID_BASE+0x5)
|
||||
#define RD_88F6190A_ID (BOARD_ID_BASE+0x6)
|
||||
#define RD_88F6281A_PCAC_ID (BOARD_ID_BASE+0x7)
|
||||
#define DB_CUSTOMER_ID (BOARD_ID_BASE+0x8)
|
||||
#define SHEEVA_PLUG_ID (BOARD_ID_BASE+0x9)
|
||||
#define MV_MAX_BOARD_ID (SHEEVA_PLUG_ID + 1)
|
||||
|
||||
/* DB-88F6281A-BP */
|
||||
#if defined(MV_NAND)
|
||||
#define DB_88F6281A_MPP0_7 0x21111111
|
||||
#else
|
||||
#define DB_88F6281A_MPP0_7 0x21112220
|
||||
#endif
|
||||
#define DB_88F6281A_MPP8_15 0x11113311
|
||||
#define DB_88F6281A_MPP16_23 0x00551111
|
||||
#define DB_88F6281A_MPP24_31 0x00000000
|
||||
#define DB_88F6281A_MPP32_39 0x00000000
|
||||
#define DB_88F6281A_MPP40_47 0x00000000
|
||||
#define DB_88F6281A_MPP48_55 0x00000000
|
||||
#define DB_88F6281A_OE_LOW 0x0
|
||||
#if defined(MV_TDM_5CHANNELS)
|
||||
#define DB_88F6281A_OE_HIGH (BIT6)
|
||||
#else
|
||||
#define DB_88F6281A_OE_HIGH 0x0
|
||||
#endif
|
||||
#define DB_88F6281A_OE_VAL_LOW 0x0
|
||||
#define DB_88F6281A_OE_VAL_HIGH 0x0
|
||||
|
||||
/* RD-88F6281A */
|
||||
#if defined(MV_NAND)
|
||||
#define RD_88F6281A_MPP0_7 0x21111111
|
||||
#else
|
||||
#define RD_88F6281A_MPP0_7 0x21112220
|
||||
#endif
|
||||
#define RD_88F6281A_MPP8_15 0x11113311
|
||||
#define RD_88F6281A_MPP16_23 0x33331111
|
||||
#define RD_88F6281A_MPP24_31 0x33003333
|
||||
#define RD_88F6281A_MPP32_39 0x20440533
|
||||
#define RD_88F6281A_MPP40_47 0x22202222
|
||||
#define RD_88F6281A_MPP48_55 0x00000002
|
||||
#define RD_88F6281A_OE_LOW (BIT28 | BIT29)
|
||||
#define RD_88F6281A_OE_HIGH (BIT3 | BIT6 | BIT17)
|
||||
#define RD_88F6281A_OE_VAL_LOW 0x0
|
||||
#define RD_88F6281A_OE_VAL_HIGH 0x0
|
||||
|
||||
/* DB-88F6192A-BP */
|
||||
#if defined(MV_NAND)
|
||||
#define DB_88F6192A_MPP0_7 0x21111111
|
||||
#else
|
||||
#define DB_88F6192A_MPP0_7 0x21112220
|
||||
#endif
|
||||
#define DB_88F6192A_MPP8_15 0x11113311
|
||||
#define DB_88F6192A_MPP16_23 0x00501111
|
||||
#define DB_88F6192A_MPP24_31 0x00000000
|
||||
#define DB_88F6192A_MPP32_35 0x00000000
|
||||
#define DB_88F6192A_OE_LOW (BIT22 | BIT23)
|
||||
#define DB_88F6192A_OE_HIGH 0x0
|
||||
#define DB_88F6192A_OE_VAL_LOW 0x0
|
||||
#define DB_88F6192A_OE_VAL_HIGH 0x0
|
||||
|
||||
/* RD-88F6192A */
|
||||
#define RD_88F6192A_MPP0_7 0x01222222
|
||||
#define RD_88F6192A_MPP8_15 0x00000011
|
||||
#define RD_88F6192A_MPP16_23 0x05550000
|
||||
#define RD_88F6192A_MPP24_31 0x0
|
||||
#define RD_88F6192A_MPP32_35 0x0
|
||||
#define RD_88F6192A_OE_LOW (BIT11 | BIT14 | BIT24 | BIT25 | BIT26 | BIT27 | BIT30 | BIT31)
|
||||
#define RD_88F6192A_OE_HIGH (BIT0 | BIT2)
|
||||
#define RD_88F6192A_OE_VAL_LOW 0x18400
|
||||
#define RD_88F6192A_OE_VAL_HIGH 0x8
|
||||
|
||||
/* DB-88F6180A-BP */
|
||||
#if defined(MV_NAND)
|
||||
#define DB_88F6180A_MPP0_7 0x21111111
|
||||
#else
|
||||
#define DB_88F6180A_MPP0_7 0x01112222
|
||||
#endif
|
||||
#define DB_88F6180A_MPP8_15 0x11113311
|
||||
#define DB_88F6180A_MPP16_23 0x00001111
|
||||
#define DB_88F6180A_MPP24_31 0x0
|
||||
#define DB_88F6180A_MPP32_39 0x4444c000
|
||||
#define DB_88F6180A_MPP40_44 0x00044444
|
||||
#define DB_88F6180A_OE_LOW 0x0
|
||||
#define DB_88F6180A_OE_HIGH 0x0
|
||||
#define DB_88F6180A_OE_VAL_LOW 0x0
|
||||
#define DB_88F6180A_OE_VAL_HIGH 0x0
|
||||
|
||||
/* RD-88F6281A_PCAC */
|
||||
#define RD_88F6281A_PCAC_MPP0_7 0x21111111
|
||||
#define RD_88F6281A_PCAC_MPP8_15 0x00003311
|
||||
#define RD_88F6281A_PCAC_MPP16_23 0x00001100
|
||||
#define RD_88F6281A_PCAC_MPP24_31 0x00000000
|
||||
#define RD_88F6281A_PCAC_MPP32_39 0x00000000
|
||||
#define RD_88F6281A_PCAC_MPP40_47 0x00000000
|
||||
#define RD_88F6281A_PCAC_MPP48_55 0x00000000
|
||||
#define RD_88F6281A_PCAC_OE_LOW 0x0
|
||||
#define RD_88F6281A_PCAC_OE_HIGH 0x0
|
||||
#define RD_88F6281A_PCAC_OE_VAL_LOW 0x0
|
||||
#define RD_88F6281A_PCAC_OE_VAL_HIGH 0x0
|
||||
|
||||
/* SHEEVA PLUG */
|
||||
#define RD_SHEEVA_PLUG_MPP0_7 0x01111111
|
||||
#define RD_SHEEVA_PLUG_MPP8_15 0x11113322
|
||||
#define RD_SHEEVA_PLUG_MPP16_23 0x00001111
|
||||
#define RD_SHEEVA_PLUG_MPP24_31 0x00100000
|
||||
#define RD_SHEEVA_PLUG_MPP32_39 0x00000000
|
||||
#define RD_SHEEVA_PLUG_MPP40_47 0x00000000
|
||||
#define RD_SHEEVA_PLUG_MPP48_55 0x00000000
|
||||
#define RD_SHEEVA_PLUG_OE_LOW 0x0
|
||||
#define RD_SHEEVA_PLUG_OE_HIGH 0x0
|
||||
#define RD_SHEEVA_PLUG_OE_VAL_LOW (BIT29)
|
||||
#define RD_SHEEVA_PLUG_OE_VAL_HIGH ((~(BIT17 | BIT16 | BIT15)) | BIT14)
|
||||
|
||||
/* DB-CUSTOMER */
|
||||
#define DB_CUSTOMER_MPP0_7 0x21111111
|
||||
#define DB_CUSTOMER_MPP8_15 0x00003311
|
||||
#define DB_CUSTOMER_MPP16_23 0x00001100
|
||||
#define DB_CUSTOMER_MPP24_31 0x00000000
|
||||
#define DB_CUSTOMER_MPP32_39 0x00000000
|
||||
#define DB_CUSTOMER_MPP40_47 0x00000000
|
||||
#define DB_CUSTOMER_MPP48_55 0x00000000
|
||||
#define DB_CUSTOMER_OE_LOW 0x0
|
||||
#define DB_CUSTOMER_OE_HIGH (~((BIT6) | (BIT7) | (BIT8) | (BIT9)))
|
||||
#define DB_CUSTOMER_OE_VAL_LOW 0x0
|
||||
#define DB_CUSTOMER_OE_VAL_HIGH 0x0
|
||||
|
||||
#endif /* __INCmvBoardEnvSpech */
|
||||
@@ -0,0 +1,320 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#include "cpu/mvCpu.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvRegs.h"
|
||||
#include "ctrlEnv/sys/mvCpuIfRegs.h"
|
||||
|
||||
/* defines */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
/* locals */
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCpuPclkGet - Get the CPU pClk (pipe clock)
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This routine extract the CPU core clock.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit clock cycles in MHertz.
|
||||
*
|
||||
*******************************************************************************/
|
||||
/* 6180 have different clk reset sampling */
|
||||
|
||||
static MV_U32 mvCpu6180PclkGet(MV_VOID)
|
||||
{
|
||||
MV_U32 tmpPClkRate=0;
|
||||
MV_CPU_ARM_CLK cpu6180_ddr_l2_CLK[] = MV_CPU6180_DDR_L2_CLCK_TBL;
|
||||
|
||||
tmpPClkRate = MV_REG_READ(MPP_SAMPLE_AT_RESET);
|
||||
tmpPClkRate = tmpPClkRate & MSAR_CPUCLCK_MASK_6180;
|
||||
tmpPClkRate = tmpPClkRate >> MSAR_CPUCLCK_OFFS_6180;
|
||||
|
||||
tmpPClkRate = cpu6180_ddr_l2_CLK[tmpPClkRate].cpuClk;
|
||||
|
||||
return tmpPClkRate;
|
||||
}
|
||||
|
||||
|
||||
MV_U32 mvCpuPclkGet(MV_VOID)
|
||||
{
|
||||
#if defined(PCLCK_AUTO_DETECT)
|
||||
MV_U32 tmpPClkRate=0;
|
||||
MV_U32 cpuCLK[] = MV_CPU_CLCK_TBL;
|
||||
|
||||
if(mvCtrlModelGet() == MV_6180_DEV_ID)
|
||||
return mvCpu6180PclkGet();
|
||||
|
||||
tmpPClkRate = MV_REG_READ(MPP_SAMPLE_AT_RESET);
|
||||
tmpPClkRate = MSAR_CPUCLCK_EXTRACT(tmpPClkRate);
|
||||
tmpPClkRate = cpuCLK[tmpPClkRate];
|
||||
|
||||
return tmpPClkRate;
|
||||
#else
|
||||
return MV_DEFAULT_PCLK
|
||||
#endif
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCpuL2ClkGet - Get the CPU L2 (CPU bus clock)
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This routine extract the CPU L2 clock.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit clock cycles in Hertz.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_U32 mvCpu6180L2ClkGet(MV_VOID)
|
||||
{
|
||||
MV_U32 L2ClkRate=0;
|
||||
MV_CPU_ARM_CLK _cpu6180_ddr_l2_CLK[] = MV_CPU6180_DDR_L2_CLCK_TBL;
|
||||
|
||||
L2ClkRate = MV_REG_READ(MPP_SAMPLE_AT_RESET);
|
||||
L2ClkRate = L2ClkRate & MSAR_CPUCLCK_MASK_6180;
|
||||
L2ClkRate = L2ClkRate >> MSAR_CPUCLCK_OFFS_6180;
|
||||
|
||||
L2ClkRate = _cpu6180_ddr_l2_CLK[L2ClkRate].l2Clk;
|
||||
|
||||
return L2ClkRate;
|
||||
|
||||
}
|
||||
|
||||
MV_U32 mvCpuL2ClkGet(MV_VOID)
|
||||
{
|
||||
#ifdef L2CLK_AUTO_DETECT
|
||||
MV_U32 L2ClkRate, tmp, pClkRate, indexL2Rtio;
|
||||
MV_U32 L2Rtio[][2] = MV_L2_CLCK_RTIO_TBL;
|
||||
|
||||
if(mvCtrlModelGet() == MV_6180_DEV_ID)
|
||||
return mvCpu6180L2ClkGet();
|
||||
|
||||
pClkRate = mvCpuPclkGet();
|
||||
|
||||
tmp = MV_REG_READ(MPP_SAMPLE_AT_RESET);
|
||||
indexL2Rtio = MSAR_L2CLCK_EXTRACT(tmp);
|
||||
|
||||
L2ClkRate = ((pClkRate * L2Rtio[indexL2Rtio][1]) / L2Rtio[indexL2Rtio][0]);
|
||||
|
||||
return L2ClkRate;
|
||||
#else
|
||||
return MV_BOARD_DEFAULT_L2CLK;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCpuNameGet - Get CPU name
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function returns a string describing the CPU model and revision.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pNameBuff - Buffer to contain board name string. Minimum size 32 chars.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*******************************************************************************/
|
||||
MV_VOID mvCpuNameGet(char *pNameBuff)
|
||||
{
|
||||
MV_U32 cpuModel;
|
||||
|
||||
cpuModel = mvOsCpuPartGet();
|
||||
|
||||
/* The CPU module is indicated in the Processor Version Register (PVR) */
|
||||
switch(cpuModel)
|
||||
{
|
||||
case CPU_PART_MRVL131:
|
||||
mvOsSPrintf(pNameBuff, "%s (Rev %d)", "Marvell Feroceon",mvOsCpuRevGet());
|
||||
break;
|
||||
case CPU_PART_ARM926:
|
||||
mvOsSPrintf(pNameBuff, "%s (Rev %d)", "ARM926",mvOsCpuRevGet());
|
||||
break;
|
||||
case CPU_PART_ARM946:
|
||||
mvOsSPrintf(pNameBuff, "%s (Rev %d)", "ARM946",mvOsCpuRevGet());
|
||||
break;
|
||||
default:
|
||||
mvOsSPrintf(pNameBuff,"??? (0x%04x) (Rev %d)",cpuModel,mvOsCpuRevGet());
|
||||
break;
|
||||
} /* switch */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#define MV_PROC_STR_SIZE 50
|
||||
|
||||
static void mvCpuIfGetL2EccMode(MV_8 *buf)
|
||||
{
|
||||
MV_U32 regVal = MV_REG_READ(CPU_L2_CONFIG_REG);
|
||||
if (regVal & BIT2)
|
||||
mvOsSPrintf(buf, "L2 ECC Enabled");
|
||||
else
|
||||
mvOsSPrintf(buf, "L2 ECC Disabled");
|
||||
}
|
||||
|
||||
static void mvCpuIfGetL2Mode(MV_8 *buf)
|
||||
{
|
||||
MV_U32 regVal = 0;
|
||||
__asm volatile ("mrc p15, 1, %0, c15, c1, 0" : "=r" (regVal)); /* Read Marvell extra features register */
|
||||
if (regVal & BIT22)
|
||||
mvOsSPrintf(buf, "L2 Enabled");
|
||||
else
|
||||
mvOsSPrintf(buf, "L2 Disabled");
|
||||
}
|
||||
|
||||
static void mvCpuIfGetL2PrefetchMode(MV_8 *buf)
|
||||
{
|
||||
MV_U32 regVal = 0;
|
||||
__asm volatile ("mrc p15, 1, %0, c15, c1, 0" : "=r" (regVal)); /* Read Marvell extra features register */
|
||||
if (regVal & BIT24)
|
||||
mvOsSPrintf(buf, "L2 Prefetch Disabled");
|
||||
else
|
||||
mvOsSPrintf(buf, "L2 Prefetch Enabled");
|
||||
}
|
||||
|
||||
static void mvCpuIfGetWriteAllocMode(MV_8 *buf)
|
||||
{
|
||||
MV_U32 regVal = 0;
|
||||
__asm volatile ("mrc p15, 1, %0, c15, c1, 0" : "=r" (regVal)); /* Read Marvell extra features register */
|
||||
if (regVal & BIT28)
|
||||
mvOsSPrintf(buf, "Write Allocate Enabled");
|
||||
else
|
||||
mvOsSPrintf(buf, "Write Allocate Disabled");
|
||||
}
|
||||
|
||||
static void mvCpuIfGetCpuStreamMode(MV_8 *buf)
|
||||
{
|
||||
MV_U32 regVal = 0;
|
||||
__asm volatile ("mrc p15, 1, %0, c15, c1, 0" : "=r" (regVal)); /* Read Marvell extra features register */
|
||||
if (regVal & BIT29)
|
||||
mvOsSPrintf(buf, "CPU Streaming Enabled");
|
||||
else
|
||||
mvOsSPrintf(buf, "CPU Streaming Disabled");
|
||||
}
|
||||
|
||||
static void mvCpuIfPrintCpuRegs(void)
|
||||
{
|
||||
MV_U32 regVal = 0;
|
||||
|
||||
__asm volatile ("mrc p15, 1, %0, c15, c1, 0" : "=r" (regVal)); /* Read Marvell extra features register */
|
||||
mvOsPrintf("Extra Feature Reg = 0x%x\n",regVal);
|
||||
|
||||
__asm volatile ("mrc p15, 0, %0, c1, c0, 0" : "=r" (regVal)); /* Read Control register */
|
||||
mvOsPrintf("Control Reg = 0x%x\n",regVal);
|
||||
|
||||
__asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r" (regVal)); /* Read ID Code register */
|
||||
mvOsPrintf("ID Code Reg = 0x%x\n",regVal);
|
||||
|
||||
__asm volatile ("mrc p15, 0, %0, c0, c0, 1" : "=r" (regVal)); /* Read Cache Type register */
|
||||
mvOsPrintf("Cache Type Reg = 0x%x\n",regVal);
|
||||
|
||||
}
|
||||
|
||||
MV_U32 mvCpuIfPrintSystemConfig(MV_8 *buffer, MV_U32 index)
|
||||
{
|
||||
MV_U32 count = 0;
|
||||
|
||||
MV_8 L2_ECC_str[MV_PROC_STR_SIZE];
|
||||
MV_8 L2_En_str[MV_PROC_STR_SIZE];
|
||||
MV_8 L2_Prefetch_str[MV_PROC_STR_SIZE];
|
||||
MV_8 Write_Alloc_str[MV_PROC_STR_SIZE];
|
||||
MV_8 Cpu_Stream_str[MV_PROC_STR_SIZE];
|
||||
|
||||
mvCpuIfGetL2Mode(L2_En_str);
|
||||
mvCpuIfGetL2EccMode(L2_ECC_str);
|
||||
mvCpuIfGetL2PrefetchMode(L2_Prefetch_str);
|
||||
mvCpuIfGetWriteAllocMode(Write_Alloc_str);
|
||||
mvCpuIfGetCpuStreamMode(Cpu_Stream_str);
|
||||
mvCpuIfPrintCpuRegs();
|
||||
|
||||
count += mvOsSPrintf(buffer + count + index, "%s\n", L2_En_str);
|
||||
count += mvOsSPrintf(buffer + count + index, "%s\n", L2_ECC_str);
|
||||
count += mvOsSPrintf(buffer + count + index, "%s\n", L2_Prefetch_str);
|
||||
count += mvOsSPrintf(buffer + count + index, "%s\n", Write_Alloc_str);
|
||||
count += mvOsSPrintf(buffer + count + index, "%s\n", Cpu_Stream_str);
|
||||
return count;
|
||||
}
|
||||
|
||||
MV_U32 whoAmI(MV_VOID)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvCpuh
|
||||
#define __INCmvCpuh
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "mvOs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
|
||||
/* defines */
|
||||
#define CPU_PART_MRVL131 0x131
|
||||
#define CPU_PART_ARM926 0x926
|
||||
#define CPU_PART_ARM946 0x946
|
||||
#define MV_CPU_ARM_CLK_ELM_SIZE 12
|
||||
#define MV_CPU_ARM_CLK_RATIO_OFF 8
|
||||
#define MV_CPU_ARM_CLK_DDR_OFF 4
|
||||
|
||||
#ifndef MV_ASMLANGUAGE
|
||||
typedef struct _mvCpuArmClk
|
||||
{
|
||||
MV_U32 cpuClk; /* CPU clock in MHz */
|
||||
MV_U32 ddrClk; /* DDR clock in MHz */
|
||||
MV_U32 l2Clk; /* CPU DDR clock ratio */
|
||||
|
||||
}MV_CPU_ARM_CLK;
|
||||
|
||||
MV_U32 mvCpuPclkGet(MV_VOID);
|
||||
MV_VOID mvCpuNameGet(char *pNameBuff);
|
||||
MV_U32 mvCpuL2ClkGet(MV_VOID);
|
||||
MV_U32 mvCpuIfPrintSystemConfig(MV_8 *buffer, MV_U32 index);
|
||||
MV_U32 whoAmI(MV_VOID);
|
||||
|
||||
#endif /* MV_ASMLANGUAGE */
|
||||
|
||||
|
||||
#endif /* __INCmvCpuh */
|
||||
@@ -0,0 +1,296 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCtrlEnvAddrDec.h - Marvell controller address decode library
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* DEPENDENCIES:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/* includes */
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
#include "ctrlEnv/sys/mvAhbToMbusRegs.h"
|
||||
#include "ddr2/mvDramIfRegs.h"
|
||||
#include "pex/mvPexRegs.h"
|
||||
|
||||
#define MV_DEBUG
|
||||
|
||||
/* defines */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
/* Default Attributes array */
|
||||
MV_TARGET_ATTRIB mvTargetDefaultsArray[] = TARGETS_DEF_ARRAY;
|
||||
extern MV_TARGET *sampleAtResetTargetArray;
|
||||
/* Dram\AHBToMbus\PEX share regsiter */
|
||||
|
||||
#define CTRL_DEC_BASE_OFFS 16
|
||||
#define CTRL_DEC_BASE_MASK (0xffff << CTRL_DEC_BASE_OFFS)
|
||||
#define CTRL_DEC_BASE_ALIGNMENT 0x10000
|
||||
|
||||
#define CTRL_DEC_SIZE_OFFS 16
|
||||
#define CTRL_DEC_SIZE_MASK (0xffff << CTRL_DEC_SIZE_OFFS)
|
||||
#define CTRL_DEC_SIZE_ALIGNMENT 0x10000
|
||||
|
||||
#define CTRL_DEC_WIN_EN BIT0
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCtrlAddrDecToReg - Get address decode register format values
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
* RETURN:
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCtrlAddrDecToReg(MV_ADDR_WIN *pAddrDecWin, MV_DEC_REGS *pAddrDecRegs)
|
||||
{
|
||||
|
||||
MV_U32 baseToReg=0 , sizeToReg=0;
|
||||
|
||||
/* BaseLow[31:16] => base register [31:16] */
|
||||
baseToReg = pAddrDecWin->baseLow & CTRL_DEC_BASE_MASK;
|
||||
|
||||
/* Write to address decode Base Address Register */
|
||||
pAddrDecRegs->baseReg &= ~CTRL_DEC_BASE_MASK;
|
||||
pAddrDecRegs->baseReg |= baseToReg;
|
||||
|
||||
/* Get size register value according to window size */
|
||||
sizeToReg = ctrlSizeToReg(pAddrDecWin->size, CTRL_DEC_SIZE_ALIGNMENT);
|
||||
|
||||
/* Size parameter validity check. */
|
||||
if (-1 == sizeToReg)
|
||||
{
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* set size */
|
||||
pAddrDecRegs->sizeReg &= ~CTRL_DEC_SIZE_MASK;
|
||||
pAddrDecRegs->sizeReg |= (sizeToReg << CTRL_DEC_SIZE_OFFS);
|
||||
|
||||
|
||||
return MV_OK;
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCtrlRegToAddrDec - Extract address decode struct from registers.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function extract address decode struct from address decode
|
||||
* registers given as parameters.
|
||||
*
|
||||
* INPUT:
|
||||
* pAddrDecRegs - Address decode register struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - Target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if address decode registers data is invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCtrlRegToAddrDec(MV_DEC_REGS *pAddrDecRegs, MV_ADDR_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_U32 sizeRegVal;
|
||||
|
||||
sizeRegVal = (pAddrDecRegs->sizeReg & CTRL_DEC_SIZE_MASK) >>
|
||||
CTRL_DEC_SIZE_OFFS;
|
||||
|
||||
pAddrDecWin->size = ctrlRegToSize(sizeRegVal, CTRL_DEC_SIZE_ALIGNMENT);
|
||||
|
||||
|
||||
/* Extract base address */
|
||||
/* Base register [31:16] ==> baseLow[31:16] */
|
||||
pAddrDecWin->baseLow = pAddrDecRegs->baseReg & CTRL_DEC_BASE_MASK;
|
||||
|
||||
pAddrDecWin->baseHigh = 0;
|
||||
|
||||
return MV_OK;
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCtrlAttribGet -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
* RETURN:
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
MV_STATUS mvCtrlAttribGet(MV_TARGET target,
|
||||
MV_TARGET_ATTRIB *targetAttrib)
|
||||
{
|
||||
|
||||
targetAttrib->attrib = mvTargetDefaultsArray[MV_CHANGE_BOOT_CS(target)].attrib;
|
||||
targetAttrib->targetId = mvTargetDefaultsArray[MV_CHANGE_BOOT_CS(target)].targetId;
|
||||
|
||||
return MV_OK;
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCtrlGetAttrib -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
* RETURN:
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_TARGET mvCtrlTargetGet(MV_TARGET_ATTRIB *targetAttrib)
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_TARGET x;
|
||||
for (target = SDRAM_CS0; target < MAX_TARGETS ; target ++)
|
||||
{
|
||||
x = MV_CHANGE_BOOT_CS(target);
|
||||
if ((mvTargetDefaultsArray[x].attrib == targetAttrib->attrib) &&
|
||||
(mvTargetDefaultsArray[MV_CHANGE_BOOT_CS(target)].targetId == targetAttrib->targetId))
|
||||
{
|
||||
/* found it */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
MV_STATUS mvCtrlAddrDecToParams(MV_DEC_WIN *pAddrDecWin,
|
||||
MV_DEC_WIN_PARAMS *pWinParam)
|
||||
{
|
||||
MV_U32 baseToReg=0, sizeToReg=0;
|
||||
|
||||
/* BaseLow[31:16] => base register [31:16] */
|
||||
baseToReg = pAddrDecWin->addrWin.baseLow & CTRL_DEC_BASE_MASK;
|
||||
|
||||
/* Write to address decode Base Address Register */
|
||||
pWinParam->baseAddr &= ~CTRL_DEC_BASE_MASK;
|
||||
pWinParam->baseAddr |= baseToReg;
|
||||
|
||||
/* Get size register value according to window size */
|
||||
sizeToReg = ctrlSizeToReg(pAddrDecWin->addrWin.size, CTRL_DEC_SIZE_ALIGNMENT);
|
||||
|
||||
/* Size parameter validity check. */
|
||||
if (-1 == sizeToReg)
|
||||
{
|
||||
mvOsPrintf("mvCtrlAddrDecToParams: ERR. ctrlSizeToReg failed.\n");
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
pWinParam->size = sizeToReg;
|
||||
|
||||
pWinParam->attrib = mvTargetDefaultsArray[MV_CHANGE_BOOT_CS(pAddrDecWin->target)].attrib;
|
||||
pWinParam->targetId = mvTargetDefaultsArray[MV_CHANGE_BOOT_CS(pAddrDecWin->target)].targetId;
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
MV_STATUS mvCtrlParamsToAddrDec(MV_DEC_WIN_PARAMS *pWinParam,
|
||||
MV_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
pAddrDecWin->addrWin.baseLow = pWinParam->baseAddr;
|
||||
|
||||
/* Upper 32bit address base is supported under PCI High Address remap */
|
||||
pAddrDecWin->addrWin.baseHigh = 0;
|
||||
|
||||
/* Prepare sizeReg to ctrlRegToSize function */
|
||||
pAddrDecWin->addrWin.size = ctrlRegToSize(pWinParam->size, CTRL_DEC_SIZE_ALIGNMENT);
|
||||
|
||||
if (-1 == pAddrDecWin->addrWin.size)
|
||||
{
|
||||
DB(mvOsPrintf("mvCtrlParamsToAddrDec: ERR. ctrlRegToSize failed.\n"));
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
targetAttrib.targetId = pWinParam->targetId;
|
||||
targetAttrib.attrib = pWinParam->attrib;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvCtrlEnvAddrDech
|
||||
#define __INCmvCtrlEnvAddrDech
|
||||
|
||||
/* includes */
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvRegs.h"
|
||||
|
||||
|
||||
/* defines */
|
||||
/* DUnit attributes */
|
||||
#define ATMWCR_WIN_DUNIT_CS0_OFFS 0
|
||||
#define ATMWCR_WIN_DUNIT_CS0_MASK BIT0
|
||||
#define ATMWCR_WIN_DUNIT_CS0_REQ (0 << ATMWCR_WIN_DUNIT_CS0_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_DUNIT_CS1_OFFS 1
|
||||
#define ATMWCR_WIN_DUNIT_CS1_MASK BIT1
|
||||
#define ATMWCR_WIN_DUNIT_CS1_REQ (0 << ATMWCR_WIN_DUNIT_CS1_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_DUNIT_CS2_OFFS 2
|
||||
#define ATMWCR_WIN_DUNIT_CS2_MASK BIT2
|
||||
#define ATMWCR_WIN_DUNIT_CS2_REQ (0 << ATMWCR_WIN_DUNIT_CS2_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_DUNIT_CS3_OFFS 3
|
||||
#define ATMWCR_WIN_DUNIT_CS3_MASK BIT3
|
||||
#define ATMWCR_WIN_DUNIT_CS3_REQ (0 << ATMWCR_WIN_DUNIT_CS3_OFFS)
|
||||
|
||||
/* RUnit (Device) attributes */
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS0_OFFS 0
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS0_MASK BIT0
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS0_REQ (0 << ATMWCR_WIN_RUNIT_DEVCS0_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS1_OFFS 1
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS1_MASK BIT1
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS1_REQ (0 << ATMWCR_WIN_RUNIT_DEVCS1_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS2_OFFS 2
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS2_MASK BIT2
|
||||
#define ATMWCR_WIN_RUNIT_DEVCS2_REQ (0 << ATMWCR_WIN_RUNIT_DEVCS2_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_RUNIT_BOOTCS_OFFS 4
|
||||
#define ATMWCR_WIN_RUNIT_BOOTCS_MASK BIT4
|
||||
#define ATMWCR_WIN_RUNIT_BOOTCS_REQ (0 << ATMWCR_WIN_RUNIT_BOOTCS_OFFS)
|
||||
|
||||
/* LMaster (PCI) attributes */
|
||||
#define ATMWCR_WIN_LUNIT_BYTE_SWP_OFFS 0
|
||||
#define ATMWCR_WIN_LUNIT_BYTE_SWP_MASK BIT0
|
||||
#define ATMWCR_WIN_LUNIT_BYTE_SWP (0 << ATMWCR_WIN_LUNIT_BYTE_SWP_OFFS)
|
||||
#define ATMWCR_WIN_LUNIT_BYTE_NO_SWP (1 << ATMWCR_WIN_LUNIT_BYTE_SWP_OFFS)
|
||||
|
||||
|
||||
#define ATMWCR_WIN_LUNIT_WORD_SWP_OFFS 1
|
||||
#define ATMWCR_WIN_LUNIT_WORD_SWP_MASK BIT1
|
||||
#define ATMWCR_WIN_LUNIT_WORD_SWP (0 << ATMWCR_WIN_LUNIT_WORD_SWP_OFFS)
|
||||
#define ATMWCR_WIN_LUNIT_WORD_NO_SWP (1 << ATMWCR_WIN_LUNIT_WORD_SWP_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_LUNIT_NO_SNOOP BIT2
|
||||
|
||||
#define ATMWCR_WIN_LUNIT_TYPE_OFFS 3
|
||||
#define ATMWCR_WIN_LUNIT_TYPE_MASK BIT3
|
||||
#define ATMWCR_WIN_LUNIT_TYPE_IO (0 << ATMWCR_WIN_LUNIT_TYPE_OFFS)
|
||||
#define ATMWCR_WIN_LUNIT_TYPE_MEM (1 << ATMWCR_WIN_LUNIT_TYPE_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_LUNIT_FORCE64_OFFS 4
|
||||
#define ATMWCR_WIN_LUNIT_FORCE64_MASK BIT4
|
||||
#define ATMWCR_WIN_LUNIT_FORCE64 (0 << ATMWCR_WIN_LUNIT_FORCE64_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_LUNIT_ORDERING_OFFS 6
|
||||
#define ATMWCR_WIN_LUNIT_ORDERING_MASK BIT6
|
||||
#define ATMWCR_WIN_LUNIT_ORDERING (1 << ATMWCR_WIN_LUNIT_FORCE64_OFFS)
|
||||
|
||||
/* PEX Attributes */
|
||||
#define ATMWCR_WIN_PEX_TYPE_OFFS 3
|
||||
#define ATMWCR_WIN_PEX_TYPE_MASK BIT3
|
||||
#define ATMWCR_WIN_PEX_TYPE_IO (0 << ATMWCR_WIN_PEX_TYPE_OFFS)
|
||||
#define ATMWCR_WIN_PEX_TYPE_MEM (1 << ATMWCR_WIN_PEX_TYPE_OFFS)
|
||||
|
||||
/* typedefs */
|
||||
|
||||
/* Unsupported attributes for address decode: */
|
||||
/* 2) PCI0/1_REQ64n control */
|
||||
|
||||
typedef struct _mvDecRegs
|
||||
{
|
||||
MV_U32 baseReg;
|
||||
MV_U32 baseRegHigh;
|
||||
MV_U32 sizeReg;
|
||||
|
||||
}MV_DEC_REGS;
|
||||
|
||||
typedef struct _mvTargetAttrib
|
||||
{
|
||||
MV_U8 attrib; /* chip select attributes */
|
||||
MV_TARGET_ID targetId; /* Target Id of this MV_TARGET */
|
||||
|
||||
}MV_TARGET_ATTRIB;
|
||||
|
||||
|
||||
/* This structure describes address decode window */
|
||||
typedef struct _mvDecWin
|
||||
{
|
||||
MV_TARGET target; /* Target for addr decode window */
|
||||
MV_ADDR_WIN addrWin; /* Address window of target */
|
||||
MV_BOOL enable; /* Window enable/disable */
|
||||
}MV_DEC_WIN;
|
||||
|
||||
typedef struct _mvDecWinParams
|
||||
{
|
||||
MV_TARGET_ID targetId; /* Target ID field */
|
||||
MV_U8 attrib; /* Attribute field */
|
||||
MV_U32 baseAddr; /* Base address in register format */
|
||||
MV_U32 size; /* Size in register format */
|
||||
}MV_DEC_WIN_PARAMS;
|
||||
|
||||
|
||||
/* mvCtrlEnvAddrDec API list */
|
||||
|
||||
MV_STATUS mvCtrlAddrDecToReg(MV_ADDR_WIN *pAddrDecWin,
|
||||
MV_DEC_REGS *pAddrDecRegs);
|
||||
|
||||
MV_STATUS mvCtrlRegToAddrDec(MV_DEC_REGS *pAddrDecRegs,
|
||||
MV_ADDR_WIN *pAddrDecWin);
|
||||
|
||||
MV_STATUS mvCtrlAttribGet(MV_TARGET target,
|
||||
MV_TARGET_ATTRIB *targetAttrib);
|
||||
|
||||
MV_TARGET mvCtrlTargetGet(MV_TARGET_ATTRIB *targetAttrib);
|
||||
|
||||
|
||||
MV_STATUS mvCtrlAddrDecToParams(MV_DEC_WIN *pAddrDecWin,
|
||||
MV_DEC_WIN_PARAMS *pWinParam);
|
||||
|
||||
MV_STATUS mvCtrlParamsToAddrDec(MV_DEC_WIN_PARAMS *pWinParam,
|
||||
MV_DEC_WIN *pAddrDecWin);
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* __INCmvCtrlEnvAddrDech */
|
||||
@@ -0,0 +1,98 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvCtrlEnvAsmh
|
||||
#define __INCmvCtrlEnvAsmh
|
||||
#include "pex/mvPexRegs.h"
|
||||
|
||||
#define CHIP_BOND_REG 0x10034
|
||||
#define PCKG_OPT_MASK_AS #3
|
||||
#define PXCCARI_REVID_MASK_AS #PXCCARI_REVID_MASK
|
||||
|
||||
/* Read device ID into toReg bits 15:0 from 0xd0000000 */
|
||||
/* defines */
|
||||
#define MV_DV_CTRL_MODEL_GET_ASM(toReg, tmpReg) \
|
||||
MV_DV_REG_READ_ASM(toReg, tmpReg, CHIP_BOND_REG);\
|
||||
and toReg, toReg, PCKG_OPT_MASK_AS /* Mask for package ID */
|
||||
|
||||
/* Read device ID into toReg bits 15:0 from 0xf1000000*/
|
||||
#define MV_CTRL_MODEL_GET_ASM(toReg, tmpReg) \
|
||||
MV_REG_READ_ASM(toReg, tmpReg, CHIP_BOND_REG);\
|
||||
and toReg, toReg, PCKG_OPT_MASK_AS /* Mask for package ID */
|
||||
|
||||
/* Read Revision into toReg bits 7:0 0xd0000000*/
|
||||
#define MV_DV_CTRL_REV_GET_ASM(toReg, tmpReg) \
|
||||
/* Read device revision */ \
|
||||
MV_DV_REG_READ_ASM(toReg, tmpReg, PEX_CFG_DIRECT_ACCESS(0,PEX_CLASS_CODE_AND_REVISION_ID));\
|
||||
and toReg, toReg, PXCCARI_REVID_MASK_AS /* Mask for calss ID */
|
||||
|
||||
/* Read Revision into toReg bits 7:0 0xf1000000*/
|
||||
#define MV_CTRL_REV_GET_ASM(toReg, tmpReg) \
|
||||
/* Read device revision */ \
|
||||
MV_REG_READ_ASM(toReg, tmpReg, PEX_CFG_DIRECT_ACCESS(0,PEX_CLASS_CODE_AND_REVISION_ID));\
|
||||
and toReg, toReg, PXCCARI_REVID_MASK_AS /* Mask for calss ID */
|
||||
|
||||
|
||||
#endif /* __INCmvCtrlEnvAsmh */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,185 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvCtrlEnvLibh
|
||||
#define __INCmvCtrlEnvLibh
|
||||
|
||||
/* includes */
|
||||
#include "mvSysHwConfig.h"
|
||||
#include "mvCommon.h"
|
||||
#include "mvTypes.h"
|
||||
#include "mvOs.h"
|
||||
#include "boardEnv/mvBoardEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
#include "ctrlEnv/mvCtrlEnvRegs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
|
||||
/* typedefs */
|
||||
|
||||
/* This enumerator describes the possible HW cache coherency policies the */
|
||||
/* controllers supports. */
|
||||
typedef enum _mvCachePolicy
|
||||
{
|
||||
NO_COHERENCY, /* No HW cache coherency support */
|
||||
WT_COHERENCY, /* HW cache coherency supported in Write Through policy */
|
||||
WB_COHERENCY /* HW cache coherency supported in Write Back policy */
|
||||
}MV_CACHE_POLICY;
|
||||
|
||||
|
||||
/* The swapping is referred to a 64-bit words (as this is the controller */
|
||||
/* internal data path width). This enumerator describes the possible */
|
||||
/* data swap types. Below is an example of the data 0x0011223344556677 */
|
||||
typedef enum _mvSwapType
|
||||
{
|
||||
MV_BYTE_SWAP, /* Byte Swap 77 66 55 44 33 22 11 00 */
|
||||
MV_NO_SWAP, /* No swapping 00 11 22 33 44 55 66 77 */
|
||||
MV_BYTE_WORD_SWAP, /* Both byte and word swap 33 22 11 00 77 66 55 44 */
|
||||
MV_WORD_SWAP, /* Word swap 44 55 66 77 00 11 22 33 */
|
||||
SWAP_TYPE_MAX /* Delimiter for this enumerator */
|
||||
}MV_SWAP_TYPE;
|
||||
|
||||
/* This structure describes access rights for Access protection windows */
|
||||
/* that can be found in IDMA, XOR, Ethernet and MPSC units. */
|
||||
/* Note that the permission enumerator coresponds to its register format. */
|
||||
/* For example, Read only premission is presented as "1" in register field. */
|
||||
typedef enum _mvAccessRights
|
||||
{
|
||||
NO_ACCESS_ALLOWED = 0, /* No access allowed */
|
||||
READ_ONLY = 1, /* Read only permission */
|
||||
ACC_RESERVED = 2, /* Reserved access right */
|
||||
FULL_ACCESS = 3, /* Read and Write permission */
|
||||
MAX_ACC_RIGHTS
|
||||
}MV_ACCESS_RIGHTS;
|
||||
|
||||
|
||||
/* mcspLib.h API list */
|
||||
|
||||
MV_STATUS mvCtrlEnvInit(MV_VOID);
|
||||
MV_U32 mvCtrlMppRegGet(MV_U32 mppGroup);
|
||||
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
MV_U32 mvCtrlPexMaxIfGet(MV_VOID);
|
||||
#else
|
||||
#define mvCtrlPexMaxIfGet() (0)
|
||||
#endif
|
||||
|
||||
#define mvCtrlPciIfMaxIfGet() (0)
|
||||
|
||||
#if defined(MV_INCLUDE_GIG_ETH)
|
||||
MV_U32 mvCtrlEthMaxPortGet(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_XOR)
|
||||
MV_U32 mvCtrlXorMaxChanGet(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_USB)
|
||||
MV_U32 mvCtrlUsbMaxGet(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_NAND)
|
||||
MV_U32 mvCtrlNandSupport(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDIO)
|
||||
MV_U32 mvCtrlSdioSupport(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_TS)
|
||||
MV_U32 mvCtrlTsSupport(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_AUDIO)
|
||||
MV_U32 mvCtrlAudioSupport(MV_VOID);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_TDM)
|
||||
MV_U32 mvCtrlTdmSupport(MV_VOID);
|
||||
#endif
|
||||
|
||||
MV_U16 mvCtrlModelGet(MV_VOID);
|
||||
MV_U8 mvCtrlRevGet(MV_VOID);
|
||||
MV_STATUS mvCtrlNameGet(char *pNameBuff);
|
||||
MV_U32 mvCtrlModelRevGet(MV_VOID);
|
||||
MV_STATUS mvCtrlModelRevNameGet(char *pNameBuff);
|
||||
MV_VOID mvCtrlAddrDecShow(MV_VOID);
|
||||
const MV_8* mvCtrlTargetNameGet(MV_TARGET target);
|
||||
MV_U32 ctrlSizeToReg(MV_U32 size, MV_U32 alignment);
|
||||
MV_U32 ctrlRegToSize(MV_U32 regSize, MV_U32 alignment);
|
||||
MV_U32 ctrlSizeRegRoundUp(MV_U32 size, MV_U32 alignment);
|
||||
MV_U32 mvCtrlSysRstLengthCounterGet(MV_VOID);
|
||||
MV_STATUS ctrlWinOverlapTest(MV_ADDR_WIN *pAddrWin1, MV_ADDR_WIN *pAddrWin2);
|
||||
MV_STATUS ctrlWinWithinWinTest(MV_ADDR_WIN *pAddrWin1, MV_ADDR_WIN *pAddrWin2);
|
||||
|
||||
MV_VOID mvCtrlPwrClckSet(MV_UNIT_ID unitId, MV_U32 index, MV_BOOL enable);
|
||||
MV_BOOL mvCtrlPwrClckGet(MV_UNIT_ID unitId, MV_U32 index);
|
||||
MV_VOID mvCtrlPwrMemSet(MV_UNIT_ID unitId, MV_U32 index, MV_BOOL enable);
|
||||
MV_BOOL mvCtrlIsBootFromSPI(MV_VOID);
|
||||
MV_BOOL mvCtrlIsBootFromSPIUseNAND(MV_VOID);
|
||||
MV_BOOL mvCtrlIsBootFromNAND(MV_VOID);
|
||||
#if defined(MV_INCLUDE_CLK_PWR_CNTRL)
|
||||
MV_VOID mvCtrlPwrSaveOn(MV_VOID);
|
||||
MV_VOID mvCtrlPwrSaveOff(MV_VOID);
|
||||
#endif
|
||||
MV_BOOL mvCtrlPwrMemGet(MV_UNIT_ID unitId, MV_U32 index);
|
||||
MV_VOID mvMPPConfigToSPI(MV_VOID);
|
||||
MV_VOID mvMPPConfigToDefault(MV_VOID);
|
||||
|
||||
|
||||
#endif /* __INCmvCtrlEnvLibh */
|
||||
@@ -0,0 +1,419 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvCtrlEnvRegsh
|
||||
#define __INCmvCtrlEnvRegsh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* CV Support */
|
||||
#define PEX0_MEM0 PEX0_MEM
|
||||
#define PCI0_MEM0 PEX0_MEM
|
||||
|
||||
/* Controller revision info */
|
||||
#define PCI_CLASS_CODE_AND_REVISION_ID 0x008
|
||||
#define PCCRIR_REVID_OFFS 0 /* Revision ID */
|
||||
#define PCCRIR_REVID_MASK (0xff << PCCRIR_REVID_OFFS)
|
||||
|
||||
/* Controler environment registers offsets */
|
||||
|
||||
/* Power Managment Control */
|
||||
#define POWER_MNG_MEM_CTRL_REG 0x20118
|
||||
|
||||
#define PMC_GESTOPMEM_OFFS(port) ((port)? 13 : 0)
|
||||
#define PMC_GESTOPMEM_MASK(port) (1 << PMC_GESTOPMEM_OFFS(port))
|
||||
#define PMC_GESTOPMEM_EN(port) (0 << PMC_GESTOPMEM_OFFS(port))
|
||||
#define PMC_GESTOPMEM_STOP(port) (1 << PMC_GESTOPMEM_OFFS(port))
|
||||
|
||||
#define PMC_PEXSTOPMEM_OFFS 1
|
||||
#define PMC_PEXSTOPMEM_MASK (1 << PMC_PEXSTOPMEM_OFFS)
|
||||
#define PMC_PEXSTOPMEM_EN (0 << PMC_PEXSTOPMEM_OFFS)
|
||||
#define PMC_PEXSTOPMEM_STOP (1 << PMC_PEXSTOPMEM_OFFS)
|
||||
|
||||
#define PMC_USBSTOPMEM_OFFS 2
|
||||
#define PMC_USBSTOPMEM_MASK (1 << PMC_USBSTOPMEM_OFFS)
|
||||
#define PMC_USBSTOPMEM_EN (0 << PMC_USBSTOPMEM_OFFS)
|
||||
#define PMC_USBSTOPMEM_STOP (1 << PMC_USBSTOPMEM_OFFS)
|
||||
|
||||
#define PMC_DUNITSTOPMEM_OFFS 3
|
||||
#define PMC_DUNITSTOPMEM_MASK (1 << PMC_DUNITSTOPMEM_OFFS)
|
||||
#define PMC_DUNITSTOPMEM_EN (0 << PMC_DUNITSTOPMEM_OFFS)
|
||||
#define PMC_DUNITSTOPMEM_STOP (1 << PMC_DUNITSTOPMEM_OFFS)
|
||||
|
||||
#define PMC_RUNITSTOPMEM_OFFS 4
|
||||
#define PMC_RUNITSTOPMEM_MASK (1 << PMC_RUNITSTOPMEM_OFFS)
|
||||
#define PMC_RUNITSTOPMEM_EN (0 << PMC_RUNITSTOPMEM_OFFS)
|
||||
#define PMC_RUNITSTOPMEM_STOP (1 << PMC_RUNITSTOPMEM_OFFS)
|
||||
|
||||
#define PMC_XORSTOPMEM_OFFS(port) (5+(port*2))
|
||||
#define PMC_XORSTOPMEM_MASK(port) (1 << PMC_XORSTOPMEM_OFFS(port))
|
||||
#define PMC_XORSTOPMEM_EN(port) (0 << PMC_XORSTOPMEM_OFFS(port))
|
||||
#define PMC_XORSTOPMEM_STOP(port) (1 << PMC_XORSTOPMEM_OFFS(port))
|
||||
|
||||
#define PMC_SATASTOPMEM_OFFS(port) (6+(port*5))
|
||||
#define PMC_SATASTOPMEM_MASK(port) (1 << PMC_SATASTOPMEM_OFFS(port))
|
||||
#define PMC_SATASTOPMEM_EN(port) (0 << PMC_SATASTOPMEM_OFFS(port))
|
||||
#define PMC_SATASTOPMEM_STOP(port) (1 << PMC_SATASTOPMEM_OFFS(port))
|
||||
|
||||
#define PMC_SESTOPMEM_OFFS 8
|
||||
#define PMC_SESTOPMEM_MASK (1 << PMC_SESTOPMEM_OFFS)
|
||||
#define PMC_SESTOPMEM_EN (0 << PMC_SESTOPMEM_OFFS)
|
||||
#define PMC_SESTOPMEM_STOP (1 << PMC_SESTOPMEM_OFFS)
|
||||
|
||||
#define PMC_AUDIOSTOPMEM_OFFS 9
|
||||
#define PMC_AUDIOSTOPMEM_MASK (1 << PMC_AUDIOSTOPMEM_OFFS)
|
||||
#define PMC_AUDIOSTOPMEM_EN (0 << PMC_AUDIOSTOPMEM_OFFS)
|
||||
#define PMC_AUDIOSTOPMEM_STOP (1 << PMC_AUDIOSTOPMEM_OFFS)
|
||||
|
||||
#define POWER_MNG_CTRL_REG 0x2011C
|
||||
|
||||
#define PMC_GESTOPCLOCK_OFFS(port) ((port)? 19 : 0)
|
||||
#define PMC_GESTOPCLOCK_MASK(port) (1 << PMC_GESTOPCLOCK_OFFS(port))
|
||||
#define PMC_GESTOPCLOCK_EN(port) (1 << PMC_GESTOPCLOCK_OFFS(port))
|
||||
#define PMC_GESTOPCLOCK_STOP(port) (0 << PMC_GESTOPCLOCK_OFFS(port))
|
||||
|
||||
#define PMC_PEXPHYSTOPCLOCK_OFFS 1
|
||||
#define PMC_PEXPHYSTOPCLOCK_MASK (1 << PMC_PEXPHYSTOPCLOCK_OFFS)
|
||||
#define PMC_PEXPHYSTOPCLOCK_EN (1 << PMC_PEXPHYSTOPCLOCK_OFFS)
|
||||
#define PMC_PEXPHYSTOPCLOCK_STOP (0 << PMC_PEXPHYSTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_PEXSTOPCLOCK_OFFS 2
|
||||
#define PMC_PEXSTOPCLOCK_MASK (1 << PMC_PEXSTOPCLOCK_OFFS)
|
||||
#define PMC_PEXSTOPCLOCK_EN (1 << PMC_PEXSTOPCLOCK_OFFS)
|
||||
#define PMC_PEXSTOPCLOCK_STOP (0 << PMC_PEXSTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_USBSTOPCLOCK_OFFS 3
|
||||
#define PMC_USBSTOPCLOCK_MASK (1 << PMC_USBSTOPCLOCK_OFFS)
|
||||
#define PMC_USBSTOPCLOCK_EN (1 << PMC_USBSTOPCLOCK_OFFS)
|
||||
#define PMC_USBSTOPCLOCK_STOP (0 << PMC_USBSTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_SDIOSTOPCLOCK_OFFS 4
|
||||
#define PMC_SDIOSTOPCLOCK_MASK (1 << PMC_SDIOSTOPCLOCK_OFFS)
|
||||
#define PMC_SDIOSTOPCLOCK_EN (1 << PMC_SDIOSTOPCLOCK_OFFS)
|
||||
#define PMC_SDIOSTOPCLOCK_STOP (0 << PMC_SDIOSTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_TSSTOPCLOCK_OFFS 5
|
||||
#define PMC_TSSTOPCLOCK_MASK (1 << PMC_TSSTOPCLOCK_OFFS)
|
||||
#define PMC_TSSTOPCLOCK_EN (1 << PMC_TSSTOPCLOCK_OFFS)
|
||||
#define PMC_TSSTOPCLOCK_STOP (0 << PMC_TSSTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_AUDIOSTOPCLOCK_OFFS 9
|
||||
#define PMC_AUDIOSTOPCLOCK_MASK (1 << PMC_AUDIOSTOPCLOCK_OFFS)
|
||||
#define PMC_AUDIOSTOPCLOCK_EN (1 << PMC_AUDIOSTOPCLOCK_OFFS)
|
||||
#define PMC_AUDIOSTOPCLOCK_STOP (0 << PMC_AUDIOSTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_POWERSAVE_OFFS 11
|
||||
#define PMC_POWERSAVE_MASK (1 << PMC_POWERSAVE_OFFS)
|
||||
#define PMC_POWERSAVE_EN (1 << PMC_POWERSAVE_OFFS)
|
||||
#define PMC_POWERSAVE_STOP (0 << PMC_POWERSAVE_OFFS)
|
||||
|
||||
|
||||
|
||||
|
||||
#define PMC_SATASTOPCLOCK_OFFS(port) (14+(port))
|
||||
#define PMC_SATASTOPCLOCK_MASK(port) (1 << PMC_SATASTOPCLOCK_OFFS(port))
|
||||
#define PMC_SATASTOPCLOCK_EN(port) (1 << PMC_SATASTOPCLOCK_OFFS(port))
|
||||
#define PMC_SATASTOPCLOCK_STOP(port) (0 << PMC_SATASTOPCLOCK_OFFS(port))
|
||||
|
||||
#define PMC_SESTOPCLOCK_OFFS 17
|
||||
#define PMC_SESTOPCLOCK_MASK (1 << PMC_SESTOPCLOCK_OFFS)
|
||||
#define PMC_SESTOPCLOCK_EN (1 << PMC_SESTOPCLOCK_OFFS)
|
||||
#define PMC_SESTOPCLOCK_STOP (0 << PMC_SESTOPCLOCK_OFFS)
|
||||
|
||||
#define PMC_TDMSTOPCLOCK_OFFS 20
|
||||
#define PMC_TDMSTOPCLOCK_MASK (1 << PMC_TDMSTOPCLOCK_OFFS)
|
||||
#define PMC_TDMSTOPCLOCK_EN (1 << PMC_TDMSTOPCLOCK_OFFS)
|
||||
#define PMC_TDMSTOPCLOCK_STOP (0 << PMC_TDMSTOPCLOCK_OFFS)
|
||||
|
||||
|
||||
/* Controler environment registers offsets */
|
||||
#define MPP_CONTROL_REG0 0x10000
|
||||
#define MPP_CONTROL_REG1 0x10004
|
||||
#define MPP_CONTROL_REG2 0x10008
|
||||
#define MPP_CONTROL_REG3 0x1000C
|
||||
#define MPP_CONTROL_REG4 0x10010
|
||||
#define MPP_CONTROL_REG5 0x10014
|
||||
#define MPP_CONTROL_REG6 0x10018
|
||||
#define MPP_SAMPLE_AT_RESET 0x10030
|
||||
#define CHIP_BOND_REG 0x10034
|
||||
#define SYSRST_LENGTH_COUNTER_REG 0x10050
|
||||
#define SLCR_COUNT_OFFS 0
|
||||
#define SLCR_COUNT_MASK (0x1FFFFFFF << SLCR_COUNT_OFFS)
|
||||
#define SLCR_CLR_OFFS 31
|
||||
#define SLCR_CLR_MASK (1 << SLCR_CLR_OFFS)
|
||||
#define PCKG_OPT_MASK 0x3
|
||||
#define MPP_OUTPUT_DRIVE_REG 0x100E0
|
||||
#define MPP_RGMII0_OUTPUT_DRIVE_OFFS 7
|
||||
#define MPP_3_3_RGMII0_OUTPUT_DRIVE (0x0 << MPP_RGMII0_OUTPUT_DRIVE_OFFS)
|
||||
#define MPP_1_8_RGMII0_OUTPUT_DRIVE (0x1 << MPP_RGMII0_OUTPUT_DRIVE_OFFS)
|
||||
#define MPP_RGMII1_OUTPUT_DRIVE_OFFS 15
|
||||
#define MPP_3_3_RGMII1_OUTPUT_DRIVE (0x0 << MPP_RGMII1_OUTPUT_DRIVE_OFFS)
|
||||
#define MPP_1_8_RGMII1_OUTPUT_DRIVE (0x1 << MPP_RGMII1_OUTPUT_DRIVE_OFFS)
|
||||
|
||||
#define MSAR_BOOT_MODE_OFFS 12
|
||||
#define MSAR_BOOT_MODE_MASK (0x7 << MSAR_BOOT_MODE_OFFS)
|
||||
#define MSAR_BOOT_NAND_WITH_BOOTROM (0x5 << MSAR_BOOT_MODE_OFFS)
|
||||
#define MSAR_BOOT_SPI_WITH_BOOTROM (0x4 << MSAR_BOOT_MODE_OFFS)
|
||||
#define MSAR_BOOT_SPI_USE_NAND_WITH_BOOTROM (0x2 << MSAR_BOOT_MODE_OFFS)
|
||||
|
||||
#define MSAR_BOOT_MODE_6180(X) (((X & 0x3000) >> 12) | \
|
||||
((X & 0x2) << 1))
|
||||
#define MSAR_BOOT_SPI_WITH_BOOTROM_6180 0x1
|
||||
#define MSAR_BOOT_NAND_WITH_BOOTROM_6180 0x5
|
||||
|
||||
#define MSAR_TCLCK_OFFS 21
|
||||
#define MSAR_TCLCK_MASK (0x1 << MSAR_TCLCK_OFFS)
|
||||
#define MSAR_TCLCK_166 (0x1 << MSAR_TCLCK_OFFS)
|
||||
#define MSAR_TCLCK_200 (0x0 << MSAR_TCLCK_OFFS)
|
||||
|
||||
|
||||
#define MSAR_CPUCLCK_EXTRACT(X) (((X & 0x2) >> 1) | ((X & 0x400000) >> 21) | \
|
||||
((X & 0x18) >> 1))
|
||||
|
||||
#define MSAR_CPUCLCK_OFFS_6180 2
|
||||
#define MSAR_CPUCLCK_MASK_6180 (0x7 << MSAR_CPUCLCK_OFFS_6180)
|
||||
|
||||
#define MSAR_DDRCLCK_RTIO_OFFS 5
|
||||
#define MSAR_DDRCLCK_RTIO_MASK (0xF << MSAR_DDRCLCK_RTIO_OFFS)
|
||||
|
||||
#define MSAR_L2CLCK_EXTRACT(X) (((X & 0x600) >> 9) | ((X & 0x80000) >> 17))
|
||||
|
||||
#ifndef MV_ASMLANGUAGE
|
||||
/* CPU clock for 6281,6192 0->Resereved */
|
||||
#define MV_CPU_CLCK_TBL { 0, 0, 0, 0, \
|
||||
600000000, 0, 800000000, 1000000000, \
|
||||
0, 1200000000, 0, 0, \
|
||||
1500000000, 0, 0, 0}
|
||||
|
||||
/* DDR clock RATIO for 6281,6192 {0,0}->Reserved */
|
||||
#define MV_DDR_CLCK_RTIO_TBL {\
|
||||
{0, 0}, {0, 0}, {2, 1}, {0, 0}, \
|
||||
{3, 1}, {0, 0}, {4, 1}, {9, 2}, \
|
||||
{5, 1}, {6, 1}, {0, 0}, {0, 0}, \
|
||||
{0, 0}, {0, 0}, {0, 0}, {0, 0} \
|
||||
}
|
||||
|
||||
/* L2 clock RATIO for 6281,6192 {1,1}->Reserved */
|
||||
#define MV_L2_CLCK_RTIO_TBL {\
|
||||
{0, 0}, {2, 1}, {0, 0}, {3, 1}, \
|
||||
{0, 0}, {0, 0}, {0, 0}, {0, 0} \
|
||||
}
|
||||
|
||||
/* 6180 have different clk reset sampling */
|
||||
/* ARM CPU, DDR, L2 clock for 6180 {0,0,0}->Reserved */
|
||||
#define MV_CPU6180_DDR_L2_CLCK_TBL { \
|
||||
{0, 0, 0 },\
|
||||
{0, 0, 0 },\
|
||||
{0, 0, 0 },\
|
||||
{0, 0, 0 },\
|
||||
{0, 0, 0 },\
|
||||
{600000000, 200000000, 300000000 },\
|
||||
{800000000, 200000000, 400000000 },\
|
||||
{0, 0, 0 }\
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* These macros help units to identify a target Mbus Arbiter group */
|
||||
#define MV_TARGET_IS_DRAM(target) \
|
||||
((target >= SDRAM_CS0) && (target <= SDRAM_CS3))
|
||||
|
||||
#define MV_TARGET_IS_PEX0(target) \
|
||||
((target >= PEX0_MEM) && (target <= PEX0_IO))
|
||||
|
||||
#define MV_TARGET_IS_PEX1(target) 0
|
||||
|
||||
#define MV_TARGET_IS_PEX(target) (MV_TARGET_IS_PEX0(target) || MV_TARGET_IS_PEX1(target))
|
||||
|
||||
#define MV_TARGET_IS_DEVICE(target) \
|
||||
((target >= DEVICE_CS0) && (target <= DEVICE_CS3))
|
||||
|
||||
#define MV_PCI_DRAM_BAR_TO_DRAM_TARGET(bar) 0
|
||||
|
||||
#define MV_TARGET_IS_AS_BOOT(target) ((target) == (sampleAtResetTargetArray[ \
|
||||
(mvCtrlModelGet() == MV_6180_DEV_ID)? MSAR_BOOT_MODE_6180 \
|
||||
(MV_REG_READ(MPP_SAMPLE_AT_RESET)):((MV_REG_READ(MPP_SAMPLE_AT_RESET)\
|
||||
& MSAR_BOOT_MODE_MASK) >> MSAR_BOOT_MODE_OFFS)]))
|
||||
|
||||
|
||||
#define MV_CHANGE_BOOT_CS(target) (((target) == DEV_BOOCS)?\
|
||||
sampleAtResetTargetArray[(mvCtrlModelGet() == MV_6180_DEV_ID)? \
|
||||
MSAR_BOOT_MODE_6180(MV_REG_READ(MPP_SAMPLE_AT_RESET)): \
|
||||
((MV_REG_READ(MPP_SAMPLE_AT_RESET) & MSAR_BOOT_MODE_MASK)\
|
||||
>> MSAR_BOOT_MODE_OFFS)]:(target))
|
||||
|
||||
#define TCLK_TO_COUNTER_RATIO 1 /* counters running in Tclk */
|
||||
|
||||
#define BOOT_TARGETS_NAME_ARRAY { \
|
||||
TBL_TERM, \
|
||||
TBL_TERM, \
|
||||
BOOT_ROM_CS, \
|
||||
TBL_TERM, \
|
||||
BOOT_ROM_CS, \
|
||||
BOOT_ROM_CS, \
|
||||
TBL_TERM, \
|
||||
TBL_TERM \
|
||||
}
|
||||
|
||||
#define BOOT_TARGETS_NAME_ARRAY_6180 { \
|
||||
TBL_TERM, \
|
||||
BOOT_ROM_CS, \
|
||||
TBL_TERM, \
|
||||
TBL_TERM, \
|
||||
TBL_TERM, \
|
||||
BOOT_ROM_CS, \
|
||||
TBL_TERM, \
|
||||
TBL_TERM \
|
||||
}
|
||||
|
||||
|
||||
/* For old competability */
|
||||
#define DEVICE_CS0 NFLASH_CS
|
||||
#define DEVICE_CS1 SPI_CS
|
||||
#define DEVICE_CS2 BOOT_ROM_CS
|
||||
#define DEVICE_CS3 DEV_BOOCS
|
||||
#define MV_BOOTDEVICE_INDEX 0
|
||||
|
||||
#define START_DEV_CS DEV_CS0
|
||||
#define DEV_TO_TARGET(dev) ((dev) + DEVICE_CS0)
|
||||
|
||||
#define PCI_IF0_MEM0 PEX0_MEM
|
||||
#define PCI_IF0_IO PEX0_IO
|
||||
|
||||
|
||||
/* This enumerator defines the Marvell controller target ID */
|
||||
typedef enum _mvTargetId
|
||||
{
|
||||
DRAM_TARGET_ID = 0 , /* Port 0 -> DRAM interface */
|
||||
DEV_TARGET_ID = 1, /* Port 1 -> Nand/SPI */
|
||||
PEX0_TARGET_ID = 4 , /* Port 4 -> PCI Express0 */
|
||||
CRYPT_TARGET_ID = 3 , /* Port 3 --> Crypto Engine */
|
||||
SAGE_TARGET_ID = 12 , /* Port 12 -> SAGE Unit */
|
||||
MAX_TARGETS_ID
|
||||
}MV_TARGET_ID;
|
||||
|
||||
|
||||
/* This enumerator described the possible Controller paripheral targets. */
|
||||
/* Controller peripherals are designated memory/IO address spaces that the */
|
||||
/* controller can access. They are also refered as "targets" */
|
||||
typedef enum _mvTarget
|
||||
{
|
||||
TBL_TERM = -1, /* none valid target, used as targets list terminator*/
|
||||
SDRAM_CS0, /* SDRAM chip select 0 */
|
||||
SDRAM_CS1, /* SDRAM chip select 1 */
|
||||
SDRAM_CS2, /* SDRAM chip select 2 */
|
||||
SDRAM_CS3, /* SDRAM chip select 3 */
|
||||
PEX0_MEM, /* PCI Express 0 Memory */
|
||||
PEX0_IO, /* PCI Express 0 IO */
|
||||
INTER_REGS, /* Internal registers */
|
||||
NFLASH_CS, /* NFLASH_CS */
|
||||
SPI_CS, /* SPI_CS */
|
||||
BOOT_ROM_CS, /* BOOT_ROM_CS */
|
||||
DEV_BOOCS, /* DEV_BOOCS */
|
||||
CRYPT_ENG, /* Crypto Engine */
|
||||
#ifdef MV_INCLUDE_SAGE
|
||||
SAGE_UNIT, /* SAGE Unit */
|
||||
#endif
|
||||
MAX_TARGETS
|
||||
|
||||
}MV_TARGET;
|
||||
|
||||
#define TARGETS_DEF_ARRAY { \
|
||||
{0x0E, DRAM_TARGET_ID }, /* SDRAM_CS0 */ \
|
||||
{0x0D, DRAM_TARGET_ID }, /* SDRAM_CS1 */ \
|
||||
{0x0B, DRAM_TARGET_ID }, /* SDRAM_CS0 */ \
|
||||
{0x07, DRAM_TARGET_ID }, /* SDRAM_CS1 */ \
|
||||
{0xE8, PEX0_TARGET_ID }, /* PEX0_MEM */ \
|
||||
{0xE0, PEX0_TARGET_ID }, /* PEX0_IO */ \
|
||||
{0xFF, 0xFF }, /* INTER_REGS */ \
|
||||
{0x2F, DEV_TARGET_ID }, /* NFLASH_CS */ \
|
||||
{0x1E, DEV_TARGET_ID }, /* SPI_CS */ \
|
||||
{0x1D, DEV_TARGET_ID }, /* BOOT_ROM_CS */ \
|
||||
{0x1E, DEV_TARGET_ID }, /* DEV_BOOCS */ \
|
||||
{0x01, CRYPT_TARGET_ID}, /* CRYPT_ENG */ \
|
||||
{0x00, SAGE_TARGET_ID } \
|
||||
}
|
||||
|
||||
|
||||
#define TARGETS_NAME_ARRAY { \
|
||||
"SDRAM_CS0", /* SDRAM_CS0 */ \
|
||||
"SDRAM_CS1", /* SDRAM_CS1 */ \
|
||||
"SDRAM_CS2", /* SDRAM_CS2 */ \
|
||||
"SDRAM_CS3", /* SDRAM_CS3 */ \
|
||||
"PEX0_MEM", /* PEX0_MEM */ \
|
||||
"PEX0_IO", /* PEX0_IO */ \
|
||||
"INTER_REGS", /* INTER_REGS */ \
|
||||
"NFLASH_CS", /* NFLASH_CS */ \
|
||||
"SPI_CS", /* SPI_CS */ \
|
||||
"BOOT_ROM_CS", /* BOOT_ROM_CS */ \
|
||||
"DEV_BOOTCS", /* DEV_BOOCS */ \
|
||||
"CRYPT_ENG", /* CRYPT_ENG */ \
|
||||
"SAGE_UNIT" /* SAGE_UNIT */ \
|
||||
}
|
||||
#endif /* MV_ASMLANGUAGE */
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,257 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvCtrlEnvSpech
|
||||
#define __INCmvCtrlEnvSpech
|
||||
|
||||
#include "mvDeviceId.h"
|
||||
#include "mvSysHwConfig.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define MV_ARM_SOC
|
||||
#define SOC_NAME_PREFIX "MV88F"
|
||||
|
||||
|
||||
/* units base and port numbers */
|
||||
#ifdef MV_ASMLANGUAGE
|
||||
#define XOR_UNIT_BASE(unit) 0x60800
|
||||
#else
|
||||
#define MV_XOR_REG_BASE 0x60000
|
||||
#define XOR_UNIT_BASE(unit) ((unit)? 0x60900:0x60800)
|
||||
#endif
|
||||
|
||||
#define TDM_REG_BASE 0xD0000
|
||||
#define USB_REG_BASE(dev) 0x50000
|
||||
#define AUDIO_REG_BASE 0xA0000
|
||||
#define SATA_REG_BASE 0x80000
|
||||
#define MV_CESA_REG_BASE 0x3D000
|
||||
#define MV_CESA_TDMA_REG_BASE 0x30000
|
||||
#define MV_SDIO_REG_BASE 0x90000
|
||||
#define MV_ETH_REG_BASE(port) (((port) == 0) ? 0x72000 : 0x76000)
|
||||
#define MV_UART_CHAN_BASE(chanNum) (0x12000 + (chanNum * 0x100))
|
||||
#define DRAM_BASE 0x0
|
||||
#define CNTMR_BASE 0x20300
|
||||
#define TWSI_SLAVE_BASE(chanNum) 0x11000
|
||||
#define PEX_IF_BASE(pexIf) 0x40000
|
||||
#define MPP_REG_BASE 0x10000
|
||||
#define TSU_GLOBAL_REG_BASE 0xB4000
|
||||
#define MAX_AHB_TO_MBUS_REG_BASE 0x20000
|
||||
|
||||
#define INTER_REGS_SIZE _1M
|
||||
/* This define describes the TWSI interrupt bit and location */
|
||||
#define TWSI_CPU_MAIN_INT_CAUSE_REG 0x20200
|
||||
#define TWSI0_CPU_MAIN_INT_BIT (1<<29)
|
||||
#define TWSI_SPEED 100000
|
||||
|
||||
#define MV_GPP_MAX_GROUP 2
|
||||
#define MV_CNTMR_MAX_COUNTER 2
|
||||
#define MV_UART_MAX_CHAN 2
|
||||
#define MV_XOR_MAX_UNIT 2
|
||||
#define MV_XOR_MAX_CHAN 4 /* total channels for all units together*/
|
||||
#define MV_XOR_MAX_CHAN_PER_UNIT 2 /* channels for units */
|
||||
#define MV_SATA_MAX_CHAN 2
|
||||
|
||||
#define MV_6281_MPP_MAX_MODULE 2
|
||||
#define MV_6192_MPP_MAX_MODULE 1
|
||||
#define MV_6190_MPP_MAX_MODULE 1
|
||||
#define MV_6180_MPP_MAX_MODULE 2
|
||||
#define MV_6281_MPP_MAX_GROUP 7
|
||||
#define MV_6192_MPP_MAX_GROUP 4
|
||||
#define MV_6190_MPP_MAX_GROUP 4
|
||||
#define MV_6180_MPP_MAX_GROUP 3
|
||||
|
||||
#define MV_DRAM_MAX_CS 4
|
||||
|
||||
/* This define describes the maximum number of supported PCI\PCIX Interfaces*/
|
||||
#define MV_PCI_MAX_IF 0
|
||||
#define MV_PCI_START_IF 0
|
||||
|
||||
/* This define describes the maximum number of supported PEX Interfaces */
|
||||
#define MV_INCLUDE_PEX0
|
||||
#define MV_DISABLE_PEX_DEVICE_BAR
|
||||
#define MV_PEX_MAX_IF 1
|
||||
#define MV_PEX_START_IF MV_PCI_MAX_IF
|
||||
|
||||
/* This define describes the maximum number of supported PCI Interfaces */
|
||||
#define MV_PCI_IF_MAX_IF (MV_PEX_MAX_IF+MV_PCI_MAX_IF)
|
||||
|
||||
#define MV_ETH_MAX_PORTS 2
|
||||
#define MV_6281_ETH_MAX_PORTS 2
|
||||
#define MV_6192_ETH_MAX_PORTS 2
|
||||
#define MV_6190_ETH_MAX_PORTS 1
|
||||
#define MV_6180_ETH_MAX_PORTS 1
|
||||
|
||||
#define MV_IDMA_MAX_CHAN 0
|
||||
|
||||
#define MV_USB_MAX_PORTS 1
|
||||
|
||||
#define MV_USB_VERSION 1
|
||||
|
||||
|
||||
#define MV_6281_NAND 1
|
||||
#define MV_6192_NAND 1
|
||||
#define MV_6190_NAND 1
|
||||
#define MV_6180_NAND 0
|
||||
|
||||
#define MV_6281_SDIO 1
|
||||
#define MV_6192_SDIO 1
|
||||
#define MV_6190_SDIO 1
|
||||
#define MV_6180_SDIO 1
|
||||
|
||||
#define MV_6281_TS 1
|
||||
#define MV_6192_TS 1
|
||||
#define MV_6190_TS 0
|
||||
#define MV_6180_TS 0
|
||||
|
||||
#define MV_6281_AUDIO 1
|
||||
#define MV_6192_AUDIO 1
|
||||
#define MV_6190_AUDIO 0
|
||||
#define MV_6180_AUDIO 1
|
||||
|
||||
#define MV_6281_TDM 1
|
||||
#define MV_6192_TDM 1
|
||||
#define MV_6190_TDM 0
|
||||
#define MV_6180_TDM 0
|
||||
|
||||
#define MV_DEVICE_MAX_CS 4
|
||||
|
||||
/* Others */
|
||||
#define PEX_HOST_BUS_NUM(pciIf) (pciIf)
|
||||
#define PEX_HOST_DEV_NUM(pciIf) 0
|
||||
|
||||
#define PCI_IO(pciIf) (PEX0_IO)
|
||||
#define PCI_MEM(pciIf, memNum) (PEX0_MEM0)
|
||||
/* CESA version #2: One channel, 2KB SRAM, TDMA */
|
||||
#if defined(MV_CESA_CHAIN_MODE_SUPPORT)
|
||||
#define MV_CESA_VERSION 3
|
||||
#else
|
||||
#define MV_CESA_VERSION 2
|
||||
#endif
|
||||
#define MV_CESA_SRAM_SIZE 2*1024
|
||||
/* This define describes the maximum number of supported Ethernet ports */
|
||||
#define MV_ETH_VERSION 4
|
||||
#define MV_ETH_MAX_RXQ 8
|
||||
#define MV_ETH_MAX_TXQ 8
|
||||
#define MV_ETH_PORT_SGMII { MV_FALSE, MV_FALSE }
|
||||
/* This define describes the the support of USB */
|
||||
#define MV_USB_VERSION 1
|
||||
|
||||
#define MV_INCLUDE_SDRAM_CS0
|
||||
#define MV_INCLUDE_SDRAM_CS1
|
||||
#define MV_INCLUDE_SDRAM_CS2
|
||||
#define MV_INCLUDE_SDRAM_CS3
|
||||
|
||||
#define MV_INCLUDE_DEVICE_CS0
|
||||
#define MV_INCLUDE_DEVICE_CS1
|
||||
#define MV_INCLUDE_DEVICE_CS2
|
||||
#define MV_INCLUDE_DEVICE_CS3
|
||||
|
||||
#define MPP_GROUP_1_TYPE {\
|
||||
{0, 0, 0}, /* Reserved for AUTO */ \
|
||||
{0x22220000, 0x22222222, 0x2222}, /* TDM */ \
|
||||
{0x44440000, 0x00044444, 0x0000}, /* AUDIO */ \
|
||||
{0x33330000, 0x33003333, 0x0033}, /* RGMII */ \
|
||||
{0x33330000, 0x03333333, 0x0033}, /* GMII */ \
|
||||
{0x11110000, 0x11111111, 0x0001}, /* TS */ \
|
||||
{0x33330000, 0x33333333, 0x3333} /* MII */ \
|
||||
}
|
||||
|
||||
#define MPP_GROUP_2_TYPE {\
|
||||
{0, 0, 0}, /* Reserved for AUTO */ \
|
||||
{0x22220000, 0x22222222, 0x22}, /* TDM */ \
|
||||
{0x44440000, 0x00044444, 0x0}, /* AUDIO */ \
|
||||
{0, 0, 0}, /* N_A */ \
|
||||
{0, 0, 0}, /* N_A */ \
|
||||
{0x11110000, 0x11111111, 0x01} /* TS */ \
|
||||
}
|
||||
|
||||
#ifndef MV_ASMLANGUAGE
|
||||
|
||||
/* This enumerator defines the Marvell Units ID */
|
||||
typedef enum _mvUnitId
|
||||
{
|
||||
DRAM_UNIT_ID,
|
||||
PEX_UNIT_ID,
|
||||
ETH_GIG_UNIT_ID,
|
||||
USB_UNIT_ID,
|
||||
IDMA_UNIT_ID,
|
||||
XOR_UNIT_ID,
|
||||
SATA_UNIT_ID,
|
||||
TDM_UNIT_ID,
|
||||
UART_UNIT_ID,
|
||||
CESA_UNIT_ID,
|
||||
SPI_UNIT_ID,
|
||||
AUDIO_UNIT_ID,
|
||||
SDIO_UNIT_ID,
|
||||
TS_UNIT_ID,
|
||||
MAX_UNITS_ID
|
||||
|
||||
}MV_UNIT_ID;
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __INCmvCtrlEnvSpech */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,130 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvAhbToMbush
|
||||
#define __INCmvAhbToMbush
|
||||
|
||||
/* includes */
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/sys/mvAhbToMbusRegs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
/* defines */
|
||||
|
||||
#if defined(MV_88F1181)
|
||||
/* This enumerator defines the Marvell controller possible MBUS arbiter */
|
||||
/* target ports. It is used to define crossbar priority scheame (pizza) */
|
||||
typedef enum _mvMBusArbTargetId
|
||||
{
|
||||
DRAM_MBUS_ARB_TARGET = 0, /* Port 0 -> DRAM interface */
|
||||
TWSI_MBUS_ARB_TARGET = 1, /* Port 1 -> TWSI */
|
||||
ARM_MBUS_ARB_TARGET = 2, /* Port 2 -> ARM */
|
||||
PEX1_MBUS_ARB_TARGET = 3, /* Port 3 -> PCI Express 1 */
|
||||
PEX0_MBUS_ARB_TARGET = 4, /* Port 4 -> PCI Express0 */
|
||||
MAX_MBUS_ARB_TARGETS
|
||||
}MV_MBUS_ARB_TARGET;
|
||||
|
||||
typedef struct _mvMBusArbCtrl
|
||||
{
|
||||
MV_BOOL starvEn;
|
||||
MV_BOOL highPrio;
|
||||
MV_BOOL fixedRoundRobin;
|
||||
|
||||
}MV_MBUS_ARB_CTRL;
|
||||
|
||||
#endif /* #if defined(MV_88F1181) */
|
||||
|
||||
typedef struct _mvAhbtoMbusDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_AHB_TO_MBUS_DEC_WIN;
|
||||
|
||||
/* mvAhbToMbus.h API list */
|
||||
|
||||
MV_STATUS mvAhbToMbusInit(MV_VOID);
|
||||
MV_STATUS mvAhbToMbusWinSet(MV_U32 winNum, MV_AHB_TO_MBUS_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvAhbToMbusWinGet(MV_U32 winNum, MV_AHB_TO_MBUS_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvAhbToMbusWinEnable(MV_U32 winNum,MV_BOOL enable);
|
||||
MV_U32 mvAhbToMbusWinRemap(MV_U32 winNum, MV_ADDR_WIN *pAddrDecWin);
|
||||
MV_U32 mvAhbToMbusWinTargetGet(MV_TARGET target);
|
||||
MV_U32 mvAhbToMbusWinAvailGet(MV_VOID);
|
||||
MV_STATUS mvAhbToMbusWinTargetSwap(MV_TARGET target1,MV_TARGET target2);
|
||||
|
||||
#if defined(MV_88F1181)
|
||||
|
||||
MV_STATUS mvMbusArbSet(MV_MBUS_ARB_TARGET *pPizzaArbArray);
|
||||
MV_STATUS mvMbusArbCtrlSet(MV_MBUS_ARB_CTRL *ctrl);
|
||||
MV_STATUS mvMbusArbCtrlGet(MV_MBUS_ARB_CTRL *ctrl);
|
||||
|
||||
#endif /* #if defined(MV_88F1181) */
|
||||
|
||||
|
||||
MV_VOID mvAhbToMbusAddDecShow(MV_VOID);
|
||||
|
||||
|
||||
#endif /* __INCmvAhbToMbush */
|
||||
@@ -0,0 +1,143 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvAhbToMbusRegsh
|
||||
#define __INCmvAhbToMbusRegsh
|
||||
|
||||
/******************************/
|
||||
/* ARM Address Map Registers */
|
||||
/******************************/
|
||||
|
||||
#define MAX_AHB_TO_MBUS_WINS 9
|
||||
#define MV_AHB_TO_MBUS_INTREG_WIN 8
|
||||
|
||||
|
||||
#define AHB_TO_MBUS_WIN_CTRL_REG(winNum) (0x20000 + (winNum)*0x10)
|
||||
#define AHB_TO_MBUS_WIN_BASE_REG(winNum) (0x20004 + (winNum)*0x10)
|
||||
#define AHB_TO_MBUS_WIN_REMAP_LOW_REG(winNum) (0x20008 + (winNum)*0x10)
|
||||
#define AHB_TO_MBUS_WIN_REMAP_HIGH_REG(winNum) (0x2000C + (winNum)*0x10)
|
||||
#define AHB_TO_MBUS_WIN_INTEREG_REG 0x20080
|
||||
|
||||
/* Window Control Register */
|
||||
/* AHB_TO_MBUS_WIN_CTRL_REG (ATMWCR)*/
|
||||
#define ATMWCR_WIN_ENABLE BIT0 /* Window Enable */
|
||||
|
||||
#define ATMWCR_WIN_TARGET_OFFS 4 /* The target interface associated
|
||||
with this window*/
|
||||
#define ATMWCR_WIN_TARGET_MASK (0xf << ATMWCR_WIN_TARGET_OFFS)
|
||||
|
||||
#define ATMWCR_WIN_ATTR_OFFS 8 /* The target interface attributes
|
||||
Associated with this window */
|
||||
#define ATMWCR_WIN_ATTR_MASK (0xff << ATMWCR_WIN_ATTR_OFFS)
|
||||
|
||||
|
||||
/*
|
||||
Used with the Base register to set the address window size and location
|
||||
Must be programed from LSB to MSB as sequence of 1’s followed
|
||||
by sequence of 0’s. The number of 1’s specifies the size of the window
|
||||
in 64 KB granularity (e.g. a value of 0x00FF specifies 256 = 16 MB).
|
||||
|
||||
NOTE: A value of 0x0 specifies 64KB size.
|
||||
*/
|
||||
#define ATMWCR_WIN_SIZE_OFFS 16 /* Window Size */
|
||||
#define ATMWCR_WIN_SIZE_MASK (0xffff << ATMWCR_WIN_SIZE_OFFS)
|
||||
#define ATMWCR_WIN_SIZE_ALIGNMENT 0x10000
|
||||
|
||||
/* Window Base Register */
|
||||
/* AHB_TO_MBUS_WIN_BASE_REG (ATMWBR) */
|
||||
|
||||
/*
|
||||
Used with the size field to set the address window size and location.
|
||||
Corresponds to transaction address[31:16]
|
||||
*/
|
||||
#define ATMWBR_BASE_OFFS 16 /* Base Address */
|
||||
#define ATMWBR_BASE_MASK (0xffff << ATMWBR_BASE_OFFS)
|
||||
#define ATMWBR_BASE_ALIGNMENT 0x10000
|
||||
|
||||
/* Window Remap Low Register */
|
||||
/* AHB_TO_MBUS_WIN_REMAP_LOW_REG (ATMWRLR) */
|
||||
|
||||
/*
|
||||
Used with the size field to specifies address bits[31:0] to be driven to
|
||||
the target interface.:
|
||||
target_addr[31:16] = (addr[31:16] & size[15:0]) | (remap[31:16] & ~size[15:0])
|
||||
*/
|
||||
#define ATMWRLR_REMAP_LOW_OFFS 16 /* Remap Address */
|
||||
#define ATMWRLR_REMAP_LOW_MASK (0xffff << ATMWRLR_REMAP_LOW_OFFS)
|
||||
#define ATMWRLR_REMAP_LOW_ALIGNMENT 0x10000
|
||||
|
||||
/* Window Remap High Register */
|
||||
/* AHB_TO_MBUS_WIN_REMAP_HIGH_REG (ATMWRHR) */
|
||||
|
||||
/*
|
||||
Specifies address bits[63:32] to be driven to the target interface.
|
||||
target_addr[63:32] = (RemapHigh[31:0]
|
||||
*/
|
||||
#define ATMWRHR_REMAP_HIGH_OFFS 0 /* Remap Address */
|
||||
#define ATMWRHR_REMAP_HIGH_MASK (0xffffffff << ATMWRHR_REMAP_HIGH_OFFS)
|
||||
|
||||
|
||||
#endif /* __INCmvAhbToMbusRegsh */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,120 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvCpuIfh
|
||||
#define __INCmvCpuIfh
|
||||
|
||||
/* includes */
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/sys/mvCpuIfRegs.h"
|
||||
#include "ctrlEnv/sys/mvAhbToMbus.h"
|
||||
#include "ddr2/mvDramIf.h"
|
||||
#include "ctrlEnv/sys/mvSysDram.h"
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
#include "pex/mvPex.h"
|
||||
#endif
|
||||
|
||||
/* defines */
|
||||
|
||||
/* typedefs */
|
||||
/* This structure describes CPU interface address decode window */
|
||||
typedef struct _mvCpuIfDecWin
|
||||
{
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_U32 winNum; /* Window Number in the AHB To Mbus bridge */
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_CPU_DEC_WIN;
|
||||
|
||||
|
||||
|
||||
/* mvCpuIfLib.h API list */
|
||||
|
||||
/* mvCpuIfLib.h API list */
|
||||
|
||||
MV_STATUS mvCpuIfInit(MV_CPU_DEC_WIN *cpuAddrWinMap);
|
||||
MV_STATUS mvCpuIfTargetWinSet(MV_TARGET target, MV_CPU_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvCpuIfTargetWinGet(MV_TARGET target, MV_CPU_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvCpuIfTargetWinEnable(MV_TARGET target,MV_BOOL enable);
|
||||
MV_U32 mvCpuIfTargetWinSizeGet(MV_TARGET target);
|
||||
MV_U32 mvCpuIfTargetWinBaseLowGet(MV_TARGET target);
|
||||
MV_U32 mvCpuIfTargetWinBaseHighGet(MV_TARGET target);
|
||||
MV_TARGET mvCpuIfTargetOfBaseAddressGet(MV_U32 baseAddress);
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
MV_U32 mvCpuIfPexRemap(MV_TARGET pexTarget, MV_ADDR_WIN *pAddrDecWin);
|
||||
MV_VOID mvCpuIfEnablePex(MV_U32 pexIf, MV_PEX_TYPE pexType);
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PCI)
|
||||
MV_U32 mvCpuIfPciRemap(MV_TARGET pciTarget, MV_ADDR_WIN *pAddrDecWin);
|
||||
#endif
|
||||
MV_U32 mvCpuIfPciIfRemap(MV_TARGET pciTarget, MV_ADDR_WIN *pAddrDecWin);
|
||||
|
||||
MV_VOID mvCpuIfAddDecShow(MV_VOID);
|
||||
|
||||
#if defined(MV88F6281)
|
||||
MV_STATUS mvCpuIfBridgeReorderWAInit(void);
|
||||
#endif
|
||||
|
||||
#endif /* __INCmvCpuIfh */
|
||||
@@ -0,0 +1,304 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvCpuIfRegsh
|
||||
#define __INCmvCpuIfRegsh
|
||||
|
||||
/****************************************/
|
||||
/* ARM Control and Status Registers Map */
|
||||
/****************************************/
|
||||
|
||||
#define CPU_CONFIG_REG 0x20100
|
||||
#define CPU_CTRL_STAT_REG 0x20104
|
||||
#define CPU_RSTOUTN_MASK_REG 0x20108
|
||||
#define CPU_SYS_SOFT_RST_REG 0x2010C
|
||||
#define CPU_AHB_MBUS_CAUSE_INT_REG 0x20110
|
||||
#define CPU_AHB_MBUS_MASK_INT_REG 0x20114
|
||||
#define CPU_FTDLL_CONFIG_REG 0x20120
|
||||
#define CPU_L2_CONFIG_REG 0x20128
|
||||
|
||||
|
||||
|
||||
/* ARM Configuration register */
|
||||
/* CPU_CONFIG_REG (CCR) */
|
||||
|
||||
|
||||
/* Reset vector location */
|
||||
#define CCR_VEC_INIT_LOC_OFFS 1
|
||||
#define CCR_VEC_INIT_LOC_MASK BIT1
|
||||
/* reset at 0x00000000 */
|
||||
#define CCR_VEC_INIT_LOC_0000 (0 << CCR_VEC_INIT_LOC_OFFS)
|
||||
/* reset at 0xFFFF0000 */
|
||||
#define CCR_VEC_INIT_LOC_FF00 (1 << CCR_VEC_INIT_LOC_OFFS)
|
||||
|
||||
|
||||
#define CCR_AHB_ERROR_PROP_OFFS 2
|
||||
#define CCR_AHB_ERROR_PROP_MASK BIT2
|
||||
/* Erros are not propogated to AHB */
|
||||
#define CCR_AHB_ERROR_PROP_NO_INDICATE (0 << CCR_AHB_ERROR_PROP_OFFS)
|
||||
/* Erros are propogated to AHB */
|
||||
#define CCR_AHB_ERROR_PROP_INDICATE (1 << CCR_AHB_ERROR_PROP_OFFS)
|
||||
|
||||
|
||||
#define CCR_ENDIAN_INIT_OFFS 3
|
||||
#define CCR_ENDIAN_INIT_MASK BIT3
|
||||
#define CCR_ENDIAN_INIT_LITTLE (0 << CCR_ENDIAN_INIT_OFFS)
|
||||
#define CCR_ENDIAN_INIT_BIG (1 << CCR_ENDIAN_INIT_OFFS)
|
||||
|
||||
|
||||
#define CCR_INCR_EN_OFFS 4
|
||||
#define CCR_INCR_EN_MASK BIT4
|
||||
#define CCR_INCR_EN BIT4
|
||||
|
||||
|
||||
#define CCR_NCB_BLOCKING_OFFS 5
|
||||
#define CCR_NCB_BLOCKING_MASK (1 << CCR_NCB_BLOCKING_OFFS)
|
||||
#define CCR_NCB_BLOCKING_NON (0 << CCR_NCB_BLOCKING_OFFS)
|
||||
#define CCR_NCB_BLOCKING_EN (1 << CCR_NCB_BLOCKING_OFFS)
|
||||
|
||||
#define CCR_CPU_2_MBUSL_TICK_DRV_OFFS 8
|
||||
#define CCR_CPU_2_MBUSL_TICK_DRV_MASK (0xF << CCR_CPU_2_MBUSL_TICK_DRV_OFFS)
|
||||
#define CCR_CPU_2_MBUSL_TICK_SMPL_OFFS 12
|
||||
#define CCR_CPU_2_MBUSL_TICK_SMPL_MASK (0xF << CCR_CPU_2_MBUSL_TICK_SMPL_OFFS)
|
||||
#define CCR_ICACH_PREF_BUF_ENABLE BIT16
|
||||
#define CCR_DCACH_PREF_BUF_ENABLE BIT17
|
||||
|
||||
/* Ratio options for CPU to DDR for 6281/6192/6190 */
|
||||
#define CPU_2_DDR_CLK_1x3 4
|
||||
#define CPU_2_DDR_CLK_1x4 6
|
||||
|
||||
/* Ratio options for CPU to DDR for 6281 only */
|
||||
#define CPU_2_DDR_CLK_2x9 7
|
||||
#define CPU_2_DDR_CLK_1x5 8
|
||||
#define CPU_2_DDR_CLK_1x6 9
|
||||
|
||||
/* Ratio options for CPU to DDR for 6180 only */
|
||||
#define CPU_2_DDR_CLK_1x3_1 0x5
|
||||
#define CPU_2_DDR_CLK_1x4_1 0x6
|
||||
|
||||
/* Default values for CPU to Mbus-L DDR Interface Tick Driver and */
|
||||
/* CPU to Mbus-L Tick Sample fields in CPU config register */
|
||||
|
||||
#define TICK_DRV_1x1 0
|
||||
#define TICK_DRV_1x2 0
|
||||
#define TICK_DRV_1x3 1
|
||||
#define TICK_DRV_1x4 2
|
||||
#define TICK_SMPL_1x1 0
|
||||
#define TICK_SMPL_1x2 1
|
||||
#define TICK_SMPL_1x3 0
|
||||
#define TICK_SMPL_1x4 0
|
||||
|
||||
#define CPU_2_MBUSL_DDR_CLK_1x2 \
|
||||
((TICK_DRV_1x2 << CCR_CPU_2_MBUSL_TICK_DRV_OFFS) | \
|
||||
(TICK_SMPL_1x2 << CCR_CPU_2_MBUSL_TICK_SMPL_OFFS))
|
||||
#define CPU_2_MBUSL_DDR_CLK_1x3 \
|
||||
((TICK_DRV_1x3 << CCR_CPU_2_MBUSL_TICK_DRV_OFFS) | \
|
||||
(TICK_SMPL_1x3 << CCR_CPU_2_MBUSL_TICK_SMPL_OFFS))
|
||||
#define CPU_2_MBUSL_DDR_CLK_1x4 \
|
||||
((TICK_DRV_1x4 << CCR_CPU_2_MBUSL_TICK_DRV_OFFS) | \
|
||||
(TICK_SMPL_1x4 << CCR_CPU_2_MBUSL_TICK_SMPL_OFFS))
|
||||
|
||||
/* ARM Control and Status register */
|
||||
/* CPU_CTRL_STAT_REG (CCSR) */
|
||||
|
||||
|
||||
/*
|
||||
This is used to block PCI express\PCI from access Socrates/Feroceon GP
|
||||
while ARM boot is still in progress
|
||||
*/
|
||||
|
||||
#define CCSR_PCI_ACCESS_OFFS 0
|
||||
#define CCSR_PCI_ACCESS_MASK BIT0
|
||||
#define CCSR_PCI_ACCESS_ENABLE (0 << CCSR_PCI_ACCESS_OFFS)
|
||||
#define CCSR_PCI_ACCESS_DISBALE (1 << CCSR_PCI_ACCESS_OFFS)
|
||||
|
||||
#define CCSR_ARM_RESET BIT1
|
||||
#define CCSR_SELF_INT BIT2
|
||||
#define CCSR_BIG_ENDIAN BIT15
|
||||
|
||||
|
||||
/* RSTOUTn Mask Register */
|
||||
/* CPU_RSTOUTN_MASK_REG (CRMR) */
|
||||
|
||||
#define CRMR_PEX_RST_OUT_OFFS 0
|
||||
#define CRMR_PEX_RST_OUT_MASK BIT0
|
||||
#define CRMR_PEX_RST_OUT_ENABLE (1 << CRMR_PEX_RST_OUT_OFFS)
|
||||
#define CRMR_PEX_RST_OUT_DISABLE (0 << CRMR_PEX_RST_OUT_OFFS)
|
||||
|
||||
#define CRMR_WD_RST_OUT_OFFS 1
|
||||
#define CRMR_WD_RST_OUT_MASK BIT1
|
||||
#define CRMR_WD_RST_OUT_ENABLE (1 << CRMR_WD_RST_OUT_OFFS)
|
||||
#define CRMR_WD_RST_OUT_DISBALE (0 << CRMR_WD_RST_OUT_OFFS)
|
||||
|
||||
#define CRMR_SOFT_RST_OUT_OFFS 2
|
||||
#define CRMR_SOFT_RST_OUT_MASK BIT2
|
||||
#define CRMR_SOFT_RST_OUT_ENABLE (1 << CRMR_SOFT_RST_OUT_OFFS)
|
||||
#define CRMR_SOFT_RST_OUT_DISBALE (0 << CRMR_SOFT_RST_OUT_OFFS)
|
||||
|
||||
/* System Software Reset Register */
|
||||
/* CPU_SYS_SOFT_RST_REG (CSSRR) */
|
||||
|
||||
#define CSSRR_SYSTEM_SOFT_RST BIT0
|
||||
|
||||
/* AHB to Mbus Bridge Interrupt Cause Register*/
|
||||
/* CPU_AHB_MBUS_CAUSE_INT_REG (CAMCIR) */
|
||||
|
||||
#define CAMCIR_ARM_SELF_INT BIT0
|
||||
#define CAMCIR_ARM_TIMER0_INT_REQ BIT1
|
||||
#define CAMCIR_ARM_TIMER1_INT_REQ BIT2
|
||||
#define CAMCIR_ARM_WD_TIMER_INT_REQ BIT3
|
||||
|
||||
|
||||
/* AHB to Mbus Bridge Interrupt Mask Register*/
|
||||
/* CPU_AHB_MBUS_MASK_INT_REG (CAMMIR) */
|
||||
|
||||
#define CAMCIR_ARM_SELF_INT_OFFS 0
|
||||
#define CAMCIR_ARM_SELF_INT_MASK BIT0
|
||||
#define CAMCIR_ARM_SELF_INT_EN (1 << CAMCIR_ARM_SELF_INT_OFFS)
|
||||
#define CAMCIR_ARM_SELF_INT_DIS (0 << CAMCIR_ARM_SELF_INT_OFFS)
|
||||
|
||||
|
||||
#define CAMCIR_ARM_TIMER0_INT_REQ_OFFS 1
|
||||
#define CAMCIR_ARM_TIMER0_INT_REQ_MASK BIT1
|
||||
#define CAMCIR_ARM_TIMER0_INT_REQ_EN (1 << CAMCIR_ARM_TIMER0_INT_REQ_OFFS)
|
||||
#define CAMCIR_ARM_TIMER0_INT_REQ_DIS (0 << CAMCIR_ARM_TIMER0_INT_REQ_OFFS)
|
||||
|
||||
#define CAMCIR_ARM_TIMER1_INT_REQ_OFFS 2
|
||||
#define CAMCIR_ARM_TIMER1_INT_REQ_MASK BIT2
|
||||
#define CAMCIR_ARM_TIMER1_INT_REQ_EN (1 << CAMCIR_ARM_TIMER1_INT_REQ_OFFS)
|
||||
#define CAMCIR_ARM_TIMER1_INT_REQ_DIS (0 << CAMCIR_ARM_TIMER1_INT_REQ_OFFS)
|
||||
|
||||
#define CAMCIR_ARM_WD_TIMER_INT_REQ_OFFS 3
|
||||
#define CAMCIR_ARM_WD_TIMER_INT_REQ_MASK BIT3
|
||||
#define CAMCIR_ARM_WD_TIMER_INT_REQ_EN (1 << CAMCIR_ARM_WD_TIMER_INT_REQ_OFFS)
|
||||
#define CAMCIR_ARM_WD_TIMER_INT_REQ_DIS (0 << CAMCIR_ARM_WD_TIMER_INT_REQ_OFFS)
|
||||
|
||||
/* CPU FTDLL Config register (CFCR) fields */
|
||||
#define CFCR_FTDLL_ICACHE_TAG_OFFS 0
|
||||
#define CFCR_FTDLL_ICACHE_TAG_MASK (0x7F << CFCR_FTDLL_ICACHE_TAG_OFFS)
|
||||
#define CFCR_FTDLL_DCACHE_TAG_OFFS 8
|
||||
#define CFCR_FTDLL_DCACHE_TAG_MASK (0x7F << CFCR_FTDLL_DCACHE_TAG_OFFS)
|
||||
#define CFCR_FTDLL_OVERWRITE_ENABLE (1 << 15)
|
||||
/* For Orion 2 D2 only */
|
||||
#define CFCR_MRVL_CPU_ID_OFFS 16
|
||||
#define CFCR_MRVL_CPU_ID_MASK (0x1 << CFCR_MRVL_CPU_ID_OFFS)
|
||||
#define CFCR_ARM_CPU_ID (0x0 << CFCR_MRVL_CPU_ID_OFFS)
|
||||
#define CFCR_MRVL_CPU_ID (0x1 << CFCR_MRVL_CPU_ID_OFFS)
|
||||
#define CFCR_VFP_SUB_ARC_NUM_OFFS 7
|
||||
#define CFCR_VFP_SUB_ARC_NUM_MASK (0x1 << CFCR_VFP_SUB_ARC_NUM_OFFS)
|
||||
#define CFCR_VFP_SUB_ARC_NUM_1 (0x0 << CFCR_VFP_SUB_ARC_NUM_OFFS)
|
||||
#define CFCR_VFP_SUB_ARC_NUM_2 (0x1 << CFCR_VFP_SUB_ARC_NUM_OFFS)
|
||||
|
||||
/* CPU_L2_CONFIG_REG fields */
|
||||
#ifdef MV_CPU_LE
|
||||
#define CL2CR_L2_ECC_EN_OFFS 2
|
||||
#define CL2CR_L2_WT_MODE_OFFS 4
|
||||
#else
|
||||
#define CL2CR_L2_ECC_EN_OFFS 26
|
||||
#define CL2CR_L2_WT_MODE_OFFS 28
|
||||
#endif
|
||||
|
||||
#define CL2CR_L2_ECC_EN_MASK (1 << CL2CR_L2_ECC_EN_OFFS)
|
||||
#define CL2CR_L2_WT_MODE_MASK (1 << CL2CR_L2_WT_MODE_OFFS)
|
||||
|
||||
/*******************************************/
|
||||
/* Main Interrupt Controller Registers Map */
|
||||
/*******************************************/
|
||||
|
||||
#define CPU_MAIN_INT_CAUSE_REG 0x20200
|
||||
#define CPU_MAIN_IRQ_MASK_REG 0x20204
|
||||
#define CPU_MAIN_FIQ_MASK_REG 0x20208
|
||||
#define CPU_ENPOINT_MASK_REG 0x2020C
|
||||
#define CPU_MAIN_INT_CAUSE_HIGH_REG 0x20210
|
||||
#define CPU_MAIN_IRQ_MASK_HIGH_REG 0x20214
|
||||
#define CPU_MAIN_FIQ_MASK_HIGH_REG 0x20218
|
||||
#define CPU_ENPOINT_MASK_HIGH_REG 0x2021C
|
||||
|
||||
|
||||
/*******************************************/
|
||||
/* ARM Doorbell Registers Map */
|
||||
/*******************************************/
|
||||
|
||||
#define CPU_HOST_TO_ARM_DRBL_REG 0x20400
|
||||
#define CPU_HOST_TO_ARM_MASK_REG 0x20404
|
||||
#define CPU_ARM_TO_HOST_DRBL_REG 0x20408
|
||||
#define CPU_ARM_TO_HOST_MASK_REG 0x2040C
|
||||
|
||||
|
||||
|
||||
/* CPU control register map */
|
||||
/* Set bits means value is about to change according to new value */
|
||||
#define CPU_CONFIG_DEFAULT_MASK (CCR_VEC_INIT_LOC_MASK | CCR_AHB_ERROR_PROP_MASK)
|
||||
|
||||
#define CPU_CONFIG_DEFAULT (CCR_VEC_INIT_LOC_FF00)
|
||||
|
||||
/* CPU Control and status defaults */
|
||||
#define CPU_CTRL_STAT_DEFAULT_MASK (CCSR_PCI_ACCESS_MASK)
|
||||
|
||||
|
||||
#define CPU_CTRL_STAT_DEFAULT (CCSR_PCI_ACCESS_ENABLE)
|
||||
|
||||
#endif /* __INCmvCpuIfRegsh */
|
||||
|
||||
@@ -0,0 +1,324 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#include "mvSysAudio.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* mvAudioWinSet - Set AUDIO target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the AUDIO will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - AUDIO target address decode window number.
|
||||
* pAddrDecWin - AUDIO target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvAudioWinSet(MV_U32 winNum, MV_AUDIO_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_DEC_REGS decRegs;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_AUDIO_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Invalid win num %d\n",__FUNCTION__, winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvAudioWinSet:Error setting AUDIO window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pAddrDecWin->target),
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
decRegs.baseReg = 0;
|
||||
decRegs.sizeReg = 0;
|
||||
|
||||
if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlAddrDecToReg Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target, &targetAttribs);
|
||||
|
||||
/* set attributes */
|
||||
decRegs.sizeReg &= ~MV_AUDIO_WIN_ATTR_MASK;
|
||||
decRegs.sizeReg |= (targetAttribs.attrib << MV_AUDIO_WIN_ATTR_OFFSET);
|
||||
|
||||
/* set target ID */
|
||||
decRegs.sizeReg &= ~MV_AUDIO_WIN_TARGET_MASK;
|
||||
decRegs.sizeReg |= (targetAttribs.targetId << MV_AUDIO_WIN_TARGET_OFFSET);
|
||||
|
||||
if (pAddrDecWin->enable == MV_TRUE)
|
||||
{
|
||||
decRegs.sizeReg |= MV_AUDIO_WIN_ENABLE_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
decRegs.sizeReg &= ~MV_AUDIO_WIN_ENABLE_MASK;
|
||||
}
|
||||
|
||||
MV_REG_WRITE( MV_AUDIO_WIN_CTRL_REG(winNum), decRegs.sizeReg);
|
||||
MV_REG_WRITE( MV_AUDIO_WIN_BASE_REG(winNum), decRegs.baseReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvAudioWinGet - Get AUDIO peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get AUDIO peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - AUDIO target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - AUDIO target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvAudioWinGet(MV_U32 winNum, MV_AUDIO_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_AUDIO_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s : ERR. Invalid winNum %d\n",
|
||||
__FUNCTION__, winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ( MV_AUDIO_WIN_BASE_REG(winNum) );
|
||||
decRegs.sizeReg = MV_REG_READ( MV_AUDIO_WIN_CTRL_REG(winNum) );
|
||||
|
||||
if (MV_OK != mvCtrlRegToAddrDec(&decRegs, &pAddrDecWin->addrWin) )
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlRegToAddrDec Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib = (decRegs.sizeReg & MV_AUDIO_WIN_ATTR_MASK) >>
|
||||
MV_AUDIO_WIN_ATTR_OFFSET;
|
||||
targetAttrib.targetId = (decRegs.sizeReg & MV_AUDIO_WIN_TARGET_MASK) >>
|
||||
MV_AUDIO_WIN_TARGET_OFFSET;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
/* Check if window is enabled */
|
||||
if(decRegs.sizeReg & MV_AUDIO_WIN_ENABLE_MASK)
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvAudioAddrDecShow - Print the AUDIO address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the AUDIO address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvAudioAddrDecShow(MV_VOID)
|
||||
{
|
||||
|
||||
MV_AUDIO_DEC_WIN win;
|
||||
int i;
|
||||
|
||||
if (MV_FALSE == mvCtrlPwrClckGet(AUDIO_UNIT_ID, 0))
|
||||
return;
|
||||
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "AUDIO:\n" );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for( i = 0; i < MV_AUDIO_MAX_ADDR_DECODE_WIN; i++ )
|
||||
{
|
||||
memset( &win, 0, sizeof(MV_AUDIO_DEC_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if( mvAudioWinGet( i, &win ) == MV_OK )
|
||||
{
|
||||
if( win.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %08x, ",
|
||||
mvCtrlTargetNameGet(win.target), win.addrWin.baseLow );
|
||||
mvOsOutput( "...." );
|
||||
|
||||
mvSizePrint( win.addrWin.size );
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvAudioWinInit - Initialize the integrated AUDIO target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Initialize the AUDIO peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvAudioInit(MV_VOID)
|
||||
{
|
||||
int winNum;
|
||||
MV_AUDIO_DEC_WIN audioWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
MV_U32 status;
|
||||
|
||||
mvAudioHalInit();
|
||||
|
||||
/* Initiate Audio address decode */
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum = 0; winNum < MV_AUDIO_MAX_ADDR_DECODE_WIN; winNum++)
|
||||
{
|
||||
MV_U32 regVal = MV_REG_READ(MV_AUDIO_WIN_CTRL_REG(winNum));
|
||||
regVal &= ~MV_AUDIO_WIN_ENABLE_MASK;
|
||||
MV_REG_WRITE(MV_AUDIO_WIN_CTRL_REG(winNum), regVal);
|
||||
}
|
||||
|
||||
for(winNum = 0; winNum < MV_AUDIO_MAX_ADDR_DECODE_WIN; winNum++)
|
||||
{
|
||||
|
||||
/* We will set the Window to DRAM_CS0 in default */
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(SDRAM_CS0,
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. mvCpuIfTargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
audioWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
audioWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
audioWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
audioWin.enable = MV_TRUE;
|
||||
audioWin.target = SDRAM_CS0;
|
||||
|
||||
if(MV_OK != mvAudioWinSet(winNum, &audioWin))
|
||||
{
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef __INCMVSysAudioH
|
||||
#define __INCMVSysAudioH
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "audio/mvAudio.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
|
||||
/***********************************/
|
||||
/* Audio Address Decoding registers*/
|
||||
/***********************************/
|
||||
|
||||
#define MV_AUDIO_MAX_ADDR_DECODE_WIN 2
|
||||
#define MV_AUDIO_RECORD_WIN_NUM 0
|
||||
#define MV_AUDIO_PLAYBACK_WIN_NUM 1
|
||||
|
||||
#define MV_AUDIO_WIN_CTRL_REG(win) (AUDIO_REG_BASE + 0xA04 + ((win)<<3))
|
||||
#define MV_AUDIO_WIN_BASE_REG(win) (AUDIO_REG_BASE + 0xA00 + ((win)<<3))
|
||||
|
||||
#define MV_AUDIO_RECORD_WIN_CTRL_REG MV_AUDIO_WIN_CTRL_REG(MV_AUDIO_RECORD_WIN_NUM)
|
||||
#define MV_AUDIO_RECORD_WIN_BASE_REG MV_AUDIO_WIN_BASE_REG(MV_AUDIO_RECORD_WIN_NUM)
|
||||
#define MV_AUDIO_PLAYBACK_WIN_CTRL_REG MV_AUDIO_WIN_CTRL_REG(MV_AUDIO_PLAYBACK_WIN_NUM)
|
||||
#define MV_AUDIO_PLAYBACK_WIN_BASE_REG MV_AUDIO_WIN_BASE_REG(MV_AUDIO_PLAYBACK_WIN_NUM)
|
||||
|
||||
|
||||
/* BITs in Windows 0-3 Control and Base Registers */
|
||||
#define MV_AUDIO_WIN_ENABLE_BIT 0
|
||||
#define MV_AUDIO_WIN_ENABLE_MASK (1<<MV_AUDIO_WIN_ENABLE_BIT)
|
||||
|
||||
#define MV_AUDIO_WIN_TARGET_OFFSET 4
|
||||
#define MV_AUDIO_WIN_TARGET_MASK (0xF<<MV_AUDIO_WIN_TARGET_OFFSET)
|
||||
|
||||
#define MV_AUDIO_WIN_ATTR_OFFSET 8
|
||||
#define MV_AUDIO_WIN_ATTR_MASK (0xFF<<MV_AUDIO_WIN_ATTR_OFFSET)
|
||||
|
||||
#define MV_AUDIO_WIN_SIZE_OFFSET 16
|
||||
#define MV_AUDIO_WIN_SIZE_MASK (0xFFFF<<MV_AUDIO_WIN_SIZE_OFFSET)
|
||||
|
||||
#define MV_AUDIO_WIN_BASE_OFFSET 16
|
||||
#define MV_AUDIO_WIN_BASE_MASK (0xFFFF<<MV_AUDIO_WIN_BASE_OFFSET)
|
||||
|
||||
|
||||
typedef struct _mvAudioDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
} MV_AUDIO_DEC_WIN;
|
||||
|
||||
|
||||
MV_STATUS mvAudioInit(MV_VOID);
|
||||
MV_STATUS mvAudioWinGet(MV_U32 winNum, MV_AUDIO_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvAudioWinSet(MV_U32 winNum, MV_AUDIO_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvAudioWinInit(MV_VOID);
|
||||
MV_VOID mvAudioAddrDecShow(MV_VOID);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,382 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvSysCesa.h"
|
||||
|
||||
#if (MV_CESA_VERSION >= 2)
|
||||
MV_TARGET tdmaAddrDecPrioTable[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_MEM,
|
||||
#endif
|
||||
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCesaWinGet - Get TDMA target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get TDMA target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TDMA target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pDecWin - TDMA target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS mvCesaWinGet(MV_U32 winNum, MV_DEC_WIN *pDecWin)
|
||||
{
|
||||
MV_DEC_WIN_PARAMS winParam;
|
||||
MV_U32 sizeReg, baseReg;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_CESA_TDMA_ADDR_DEC_WIN)
|
||||
{
|
||||
mvOsPrintf("%s : ERR. Invalid winNum %d\n",
|
||||
__FUNCTION__, winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
baseReg = MV_REG_READ( MV_CESA_TDMA_BASE_ADDR_REG(winNum) );
|
||||
sizeReg = MV_REG_READ( MV_CESA_TDMA_WIN_CTRL_REG(winNum) );
|
||||
|
||||
/* Check if window is enabled */
|
||||
if(sizeReg & MV_CESA_TDMA_WIN_ENABLE_MASK)
|
||||
{
|
||||
pDecWin->enable = MV_TRUE;
|
||||
|
||||
/* Extract window parameters from registers */
|
||||
winParam.targetId = (sizeReg & MV_CESA_TDMA_WIN_TARGET_MASK) >> MV_CESA_TDMA_WIN_TARGET_OFFSET;
|
||||
winParam.attrib = (sizeReg & MV_CESA_TDMA_WIN_ATTR_MASK) >> MV_CESA_TDMA_WIN_ATTR_OFFSET;
|
||||
winParam.size = (sizeReg & MV_CESA_TDMA_WIN_SIZE_MASK) >> MV_CESA_TDMA_WIN_SIZE_OFFSET;
|
||||
winParam.baseAddr = (baseReg & MV_CESA_TDMA_WIN_BASE_MASK);
|
||||
|
||||
/* Translate the decode window parameters to address decode struct */
|
||||
if (MV_OK != mvCtrlParamsToAddrDec(&winParam, pDecWin))
|
||||
{
|
||||
mvOsPrintf("Failed to translate register parameters to CESA address" \
|
||||
" decode window structure\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pDecWin->enable = MV_FALSE;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* cesaWinOverlapDetect - Detect CESA TDMA address windows overlapping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviur is expected in case TDMA address decode
|
||||
* windows overlapps.
|
||||
* This function detects TDMA address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE - if the given address window overlap current address
|
||||
* decode map,
|
||||
* MV_FALSE - otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS cesaWinOverlapDetect(MV_U32 winNum, MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 winNumIndex;
|
||||
MV_DEC_WIN addrDecWin;
|
||||
|
||||
for(winNumIndex=0; winNumIndex<MV_CESA_TDMA_ADDR_DEC_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvCesaWinGet(winNumIndex, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. TargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if(addrDecWin.enable == MV_FALSE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCesaTdmaWinSet - Set CESA TDMA target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the CESA TDMA will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - CESA TDMA target address decode window number.
|
||||
* pAddrDecWin - CESA TDMA target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR - if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM - if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS mvCesaTdmaWinSet(MV_U32 winNum, MV_DEC_WIN *pDecWin)
|
||||
{
|
||||
MV_DEC_WIN_PARAMS winParams;
|
||||
MV_U32 sizeReg, baseReg;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_CESA_TDMA_ADDR_DEC_WIN)
|
||||
{
|
||||
mvOsPrintf("mvCesaTdmaWinSet: ERR. Invalid win num %d\n",winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if (MV_TRUE == cesaWinOverlapDetect(winNum, &pDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Window %d overlap\n", __FUNCTION__, winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pDecWin->addrWin.baseLow, pDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvCesaTdmaWinSet: Error setting CESA TDMA window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pDecWin->target),
|
||||
pDecWin->addrWin.baseLow,
|
||||
pDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if(MV_OK != mvCtrlAddrDecToParams(pDecWin, &winParams))
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlAddrDecToParams Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* set Size, Attributes and TargetID */
|
||||
sizeReg = (((winParams.targetId << MV_CESA_TDMA_WIN_TARGET_OFFSET) & MV_CESA_TDMA_WIN_TARGET_MASK) |
|
||||
((winParams.attrib << MV_CESA_TDMA_WIN_ATTR_OFFSET) & MV_CESA_TDMA_WIN_ATTR_MASK) |
|
||||
((winParams.size << MV_CESA_TDMA_WIN_SIZE_OFFSET) & MV_CESA_TDMA_WIN_SIZE_MASK));
|
||||
|
||||
if (pDecWin->enable == MV_TRUE)
|
||||
{
|
||||
sizeReg |= MV_CESA_TDMA_WIN_ENABLE_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
sizeReg &= ~MV_CESA_TDMA_WIN_ENABLE_MASK;
|
||||
}
|
||||
|
||||
/* Update Base value */
|
||||
baseReg = (winParams.baseAddr & MV_CESA_TDMA_WIN_BASE_MASK);
|
||||
|
||||
MV_REG_WRITE( MV_CESA_TDMA_WIN_CTRL_REG(winNum), sizeReg);
|
||||
MV_REG_WRITE( MV_CESA_TDMA_BASE_ADDR_REG(winNum), baseReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
static MV_STATUS mvCesaTdmaAddrDecInit (void)
|
||||
{
|
||||
MV_U32 winNum;
|
||||
MV_STATUS status;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
MV_DEC_WIN cesaWin;
|
||||
MV_U32 winPrioIndex = 0;
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum=0; winNum<MV_CESA_TDMA_ADDR_DEC_WIN; winNum++)
|
||||
{
|
||||
MV_REG_BIT_RESET(MV_CESA_TDMA_WIN_CTRL_REG(winNum), MV_CESA_TDMA_WIN_ENABLE_MASK);
|
||||
}
|
||||
|
||||
/* Go through all windows in user table until table terminator */
|
||||
winNum = 0;
|
||||
while( (tdmaAddrDecPrioTable[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < MV_CESA_TDMA_ADDR_DEC_WIN) ) {
|
||||
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(tdmaAddrDecPrioTable[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
if(MV_NO_SUCH == status){
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("cesaInit: TargetWinGet failed. winNum=%d, winIdx=%d, target=%d, status=0x%x\n",
|
||||
winNum, winPrioIndex, tdmaAddrDecPrioTable[winPrioIndex], status);
|
||||
return MV_ERROR;
|
||||
}
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
cesaWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
cesaWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
cesaWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
cesaWin.enable = MV_TRUE;
|
||||
cesaWin.target = tdmaAddrDecPrioTable[winPrioIndex];
|
||||
|
||||
#if defined(MV646xx)
|
||||
/* Get the default attributes for that target window */
|
||||
mvCtrlDefAttribGet(cesaWin.target, &cesaWin.addrWinAttr);
|
||||
#endif /* MV646xx */
|
||||
|
||||
if(MV_OK != mvCesaTdmaWinSet(winNum, &cesaWin))
|
||||
{
|
||||
mvOsPrintf("mvCesaTdmaWinSet FAILED: winNum=%d\n",
|
||||
winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex++;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
#endif /* MV_CESA_VERSION >= 2 */
|
||||
|
||||
|
||||
|
||||
|
||||
MV_STATUS mvCesaInit (int numOfSession, int queueDepth, char* pSramBase, void *osHandle)
|
||||
{
|
||||
MV_U32 cesaCryptEngBase;
|
||||
MV_CPU_DEC_WIN addrDecWin;
|
||||
|
||||
if(sizeof(MV_CESA_SRAM_MAP) > MV_CESA_SRAM_SIZE)
|
||||
{
|
||||
mvOsPrintf("mvCesaInit: Wrong SRAM map - %ld > %d\n",
|
||||
sizeof(MV_CESA_SRAM_MAP), MV_CESA_SRAM_SIZE);
|
||||
return MV_FAIL;
|
||||
}
|
||||
#if 0
|
||||
if (mvCpuIfTargetWinGet(CRYPT_ENG, &addrDecWin) == MV_OK)
|
||||
cesaCryptEngBase = addrDecWin.addrWin.baseLow;
|
||||
else
|
||||
{
|
||||
mvOsPrintf("mvCesaInit: ERR. mvCpuIfTargetWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
#else
|
||||
cesaCryptEngBase = (MV_U32)pSramBase;
|
||||
#endif
|
||||
|
||||
#if 0 /* Already done in the platform init */
|
||||
#if (MV_CESA_VERSION >= 2)
|
||||
mvCesaTdmaAddrDecInit();
|
||||
#endif /* MV_CESA_VERSION >= 2 */
|
||||
#endif
|
||||
return mvCesaHalInit(numOfSession, queueDepth, pSramBase, cesaCryptEngBase,
|
||||
osHandle);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __mvSysCesa_h__
|
||||
#define __mvSysCesa_h__
|
||||
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "cesa/mvCesa.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
|
||||
/***************************** TDMA Registers *************************************/
|
||||
|
||||
#define MV_CESA_TDMA_ADDR_DEC_WIN 4
|
||||
|
||||
#define MV_CESA_TDMA_BASE_ADDR_REG(win) (MV_CESA_TDMA_REG_BASE + 0xa00 + (win<<3))
|
||||
|
||||
#define MV_CESA_TDMA_WIN_CTRL_REG(win) (MV_CESA_TDMA_REG_BASE + 0xa04 + (win<<3))
|
||||
|
||||
#define MV_CESA_TDMA_WIN_ENABLE_BIT 0
|
||||
#define MV_CESA_TDMA_WIN_ENABLE_MASK (1 << MV_CESA_TDMA_WIN_ENABLE_BIT)
|
||||
|
||||
#define MV_CESA_TDMA_WIN_TARGET_OFFSET 4
|
||||
#define MV_CESA_TDMA_WIN_TARGET_MASK (0xf << MV_CESA_TDMA_WIN_TARGET_OFFSET)
|
||||
|
||||
#define MV_CESA_TDMA_WIN_ATTR_OFFSET 8
|
||||
#define MV_CESA_TDMA_WIN_ATTR_MASK (0xff << MV_CESA_TDMA_WIN_ATTR_OFFSET)
|
||||
|
||||
#define MV_CESA_TDMA_WIN_SIZE_OFFSET 16
|
||||
#define MV_CESA_TDMA_WIN_SIZE_MASK (0xFFFF << MV_CESA_TDMA_WIN_SIZE_OFFSET)
|
||||
|
||||
#define MV_CESA_TDMA_WIN_BASE_OFFSET 16
|
||||
#define MV_CESA_TDMA_WIN_BASE_MASK (0xFFFF << MV_CESA_TDMA_WIN_BASE_OFFSET)
|
||||
|
||||
|
||||
MV_STATUS mvCesaInit (int numOfSession, int queueDepth, char* pSramBase, void *osHandle);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,348 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
/* includes */
|
||||
|
||||
#include "ddr2/mvDramIf.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "ctrlEnv/sys/mvSysDram.h"
|
||||
|
||||
/* #define MV_DEBUG */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
static MV_BOOL sdramIfWinOverlap(MV_TARGET target, MV_ADDR_WIN *pAddrWin);
|
||||
|
||||
/*******************************************************************************
|
||||
* mvDramIfWinSet - Set DRAM interface address decode window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets DRAM interface address decode window.
|
||||
*
|
||||
* INPUT:
|
||||
* target - System target. Use only SDRAM targets.
|
||||
* pAddrDecWin - SDRAM address window structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters are invalid or window is invalid, MV_OK
|
||||
* otherwise.
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvDramIfWinSet(MV_TARGET target, MV_DRAM_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_U32 baseReg=0,sizeReg=0;
|
||||
MV_U32 baseToReg=0 , sizeToReg=0;
|
||||
|
||||
/* Check parameters */
|
||||
if (!MV_TARGET_IS_DRAM(target))
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinSet: target %d is not SDRAM\n", target);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlaps with current enabled windows */
|
||||
if (MV_TRUE == sdramIfWinOverlap(target, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinSet: ERR. Target %d overlaps\n", target);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinSet:Error setting DRAM interface window %d."\
|
||||
"\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
target,
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* read base register*/
|
||||
baseReg = MV_REG_READ(SDRAM_BASE_ADDR_REG(0,target));
|
||||
|
||||
/* read size register */
|
||||
sizeReg = MV_REG_READ(SDRAM_SIZE_REG(0,target));
|
||||
|
||||
/* BaseLow[31:16] => base register [31:16] */
|
||||
baseToReg = pAddrDecWin->addrWin.baseLow & SCBAR_BASE_MASK;
|
||||
|
||||
/* Write to address decode Base Address Register */
|
||||
baseReg &= ~SCBAR_BASE_MASK;
|
||||
baseReg |= baseToReg;
|
||||
|
||||
/* Translate the given window size to register format */
|
||||
sizeToReg = ctrlSizeToReg(pAddrDecWin->addrWin.size, SCSR_SIZE_ALIGNMENT);
|
||||
|
||||
/* Size parameter validity check. */
|
||||
if (-1 == sizeToReg)
|
||||
{
|
||||
mvOsPrintf("mvCtrlAddrDecToReg: ERR. Win %d size invalid.\n",target);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* set size */
|
||||
sizeReg &= ~SCSR_SIZE_MASK;
|
||||
/* Size is located at upper 16 bits */
|
||||
sizeReg |= (sizeToReg << SCSR_SIZE_OFFS);
|
||||
|
||||
/* enable/Disable */
|
||||
if (MV_TRUE == pAddrDecWin->enable)
|
||||
{
|
||||
sizeReg |= SCSR_WIN_EN;
|
||||
}
|
||||
else
|
||||
{
|
||||
sizeReg &= ~SCSR_WIN_EN;
|
||||
}
|
||||
|
||||
/* 3) Write to address decode Base Address Register */
|
||||
MV_REG_WRITE(SDRAM_BASE_ADDR_REG(0,target), baseReg);
|
||||
|
||||
/* Write to address decode Size Register */
|
||||
MV_REG_WRITE(SDRAM_SIZE_REG(0,target), sizeReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvDramIfWinGet - Get DRAM interface address decode window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function gets DRAM interface address decode window.
|
||||
*
|
||||
* INPUT:
|
||||
* target - System target. Use only SDRAM targets.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - SDRAM address window structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters are invalid or window is invalid, MV_OK
|
||||
* otherwise.
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvDramIfWinGet(MV_TARGET target, MV_DRAM_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_U32 baseReg,sizeReg;
|
||||
MV_U32 sizeRegVal;
|
||||
/* Check parameters */
|
||||
if (!MV_TARGET_IS_DRAM(target))
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinGet: target %d is Illigal\n", target);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Read base and size registers */
|
||||
sizeReg = MV_REG_READ(SDRAM_SIZE_REG(0,target));
|
||||
baseReg = MV_REG_READ(SDRAM_BASE_ADDR_REG(0,target));
|
||||
|
||||
sizeRegVal = (sizeReg & SCSR_SIZE_MASK) >> SCSR_SIZE_OFFS;
|
||||
|
||||
pAddrDecWin->addrWin.size = ctrlRegToSize(sizeRegVal,
|
||||
SCSR_SIZE_ALIGNMENT);
|
||||
|
||||
/* Check if ctrlRegToSize returned OK */
|
||||
if (-1 == pAddrDecWin->addrWin.size)
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinGet: size of target %d is Illigal\n", target);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Extract base address */
|
||||
/* Base register [31:16] ==> baseLow[31:16] */
|
||||
pAddrDecWin->addrWin.baseLow = baseReg & SCBAR_BASE_MASK;
|
||||
|
||||
pAddrDecWin->addrWin.baseHigh = 0;
|
||||
|
||||
|
||||
if (sizeReg & SCSR_WIN_EN)
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvDramIfWinEnable - Enable/Disable SDRAM address decode window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function enable/Disable SDRAM address decode window.
|
||||
*
|
||||
* INPUT:
|
||||
* target - System target. Use only SDRAM targets.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR in case function parameter are invalid, MV_OK otherewise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvDramIfWinEnable(MV_TARGET target, MV_BOOL enable)
|
||||
{
|
||||
MV_DRAM_DEC_WIN addrDecWin;
|
||||
|
||||
/* Check parameters */
|
||||
if (!MV_TARGET_IS_DRAM(target))
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinEnable: target %d is Illigal\n", target);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (enable == MV_TRUE)
|
||||
{ /* First check for overlap with other enabled windows */
|
||||
if (MV_OK != mvDramIfWinGet(target, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("mvDramIfWinEnable:ERR. Getting target %d failed.\n",
|
||||
target);
|
||||
return MV_ERROR;
|
||||
}
|
||||
/* Check for overlapping */
|
||||
if (MV_FALSE == sdramIfWinOverlap(target, &(addrDecWin.addrWin)))
|
||||
{
|
||||
/* No Overlap. Enable address decode winNum window */
|
||||
MV_REG_BIT_SET(SDRAM_SIZE_REG(0,target), SCSR_WIN_EN);
|
||||
}
|
||||
else
|
||||
{ /* Overlap detected */
|
||||
mvOsPrintf("mvDramIfWinEnable: ERR. Target %d overlap detect\n",
|
||||
target);
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ /* Disable address decode winNum window */
|
||||
MV_REG_BIT_RESET(SDRAM_SIZE_REG(0, target), SCSR_WIN_EN);
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* sdramIfWinOverlap - Check if an address window overlap an SDRAM address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function scan each SDRAM address decode window to test if it
|
||||
* overlapps the given address windoow
|
||||
*
|
||||
* INPUT:
|
||||
* target - SDRAM target where the function skips checking.
|
||||
* pAddrDecWin - The tested address window for overlapping with
|
||||
* SDRAM windows.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlaps any enabled address
|
||||
* decode map, MV_FALSE otherwise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_BOOL sdramIfWinOverlap(MV_TARGET target, MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_TARGET targetNum;
|
||||
MV_DRAM_DEC_WIN addrDecWin;
|
||||
|
||||
for(targetNum = SDRAM_CS0; targetNum < MV_DRAM_MAX_CS ; targetNum++)
|
||||
{
|
||||
/* don't check our winNum or illegal targets */
|
||||
if (targetNum == target)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvDramIfWinGet(targetNum, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("sdramIfWinOverlap: ERR. TargetWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if (MV_FALSE == addrDecWin.enable)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(MV_TRUE == ctrlWinOverlapTest(pAddrWin, &addrDecWin.addrWin))
|
||||
{
|
||||
mvOsPrintf(
|
||||
"sdramIfWinOverlap: Required target %d overlap winNum %d\n",
|
||||
target, targetNum);
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __sysDram
|
||||
#define __sysDram
|
||||
|
||||
/* This structure describes CPU interface address decode window */
|
||||
typedef struct _mvDramIfDecWin
|
||||
{
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
}MV_DRAM_DEC_WIN;
|
||||
|
||||
MV_STATUS mvDramIfWinSet(MV_TARGET target, MV_DRAM_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvDramIfWinGet(MV_TARGET target, MV_DRAM_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvDramIfWinEnable(MV_TARGET target, MV_BOOL enable);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,658 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#include "ctrlEnv/sys/mvSysGbe.h"
|
||||
|
||||
|
||||
|
||||
typedef struct _mvEthDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_ETH_DEC_WIN;
|
||||
|
||||
MV_TARGET ethAddrDecPrioTap[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS0)
|
||||
DEVICE_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS1)
|
||||
DEVICE_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS2)
|
||||
DEVICE_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS3)
|
||||
DEVICE_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_IO,
|
||||
#endif
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
static MV_STATUS ethWinOverlapDetect(int port, MV_U32 winNum, MV_ADDR_WIN *pAddrWin);
|
||||
static MV_STATUS mvEthWinSet(int port, MV_U32 winNum, MV_ETH_DEC_WIN *pAddrDecWin);
|
||||
static MV_STATUS mvEthWinGet(int port, MV_U32 winNum, MV_ETH_DEC_WIN *pAddrDecWin);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthWinInit - Initialize ETH address decode windows
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function initialize ETH window decode unit. It set the
|
||||
* default address decode windows of the unit.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if setting fail.
|
||||
*******************************************************************************/
|
||||
/* Configure EthDrv memory map registes. */
|
||||
MV_STATUS mvEthWinInit (int port)
|
||||
{
|
||||
MV_U32 winNum, status, winPrioIndex=0, i, regVal=0;
|
||||
MV_ETH_DEC_WIN ethWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
static MV_U32 accessProtReg = 0;
|
||||
|
||||
#if (MV_ETH_VERSION <= 1)
|
||||
static MV_BOOL isFirst = MV_TRUE;
|
||||
|
||||
if(isFirst == MV_FALSE)
|
||||
{
|
||||
MV_REG_WRITE(ETH_ACCESS_PROTECT_REG(port), accessProtReg);
|
||||
return MV_OK;
|
||||
}
|
||||
isFirst = MV_FALSE;
|
||||
#endif /* MV_GIGA_ETH_VERSION */
|
||||
|
||||
/* Initiate Ethernet address decode */
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum=0; winNum<ETH_MAX_DECODE_WIN; winNum++)
|
||||
{
|
||||
regVal |= MV_BIT_MASK(winNum);
|
||||
}
|
||||
MV_REG_WRITE(ETH_BASE_ADDR_ENABLE_REG(port), regVal);
|
||||
|
||||
/* Go through all windows in user table until table terminator */
|
||||
for (winNum=0; ((ethAddrDecPrioTap[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < ETH_MAX_DECODE_WIN)); )
|
||||
{
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(ethAddrDecPrioTap[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if(MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("mvEthWinInit: ERR. mvCpuIfTargetWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
ethWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
ethWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
ethWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
ethWin.enable = MV_TRUE;
|
||||
ethWin.target = ethAddrDecPrioTap[winPrioIndex];
|
||||
|
||||
if(MV_OK != mvEthWinSet(port, winNum, ðWin))
|
||||
{
|
||||
mvOsPrintf("mvEthWinInit: ERR. mvEthWinSet failed winNum=%d\n",
|
||||
winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex ++;
|
||||
}
|
||||
|
||||
/* set full access to all windows. */
|
||||
for(i=0; i<winNum; i++)
|
||||
{
|
||||
accessProtReg |= (FULL_ACCESS << (i*2));
|
||||
}
|
||||
MV_REG_WRITE(ETH_ACCESS_PROTECT_REG(port), accessProtReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthWinSet - Set ETH target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the ETH will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - ETH to target address decode window number.
|
||||
* pAddrDecWin - ETH target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvEthWinSet(int port, MV_U32 winNum, MV_ETH_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_DEC_REGS decRegs;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= ETH_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvEthWinSet: ERR. Invalid win num %d\n",winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if (MV_TRUE == ethWinOverlapDetect(port, winNum, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("mvEthWinSet: ERR. Window %d overlap\n", winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvEthWinSet: Error setting Ethernet window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pAddrDecWin->target),
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
|
||||
decRegs.baseReg = MV_REG_READ(ETH_WIN_BASE_REG(port, winNum));
|
||||
decRegs.sizeReg = MV_REG_READ(ETH_WIN_SIZE_REG(port, winNum));
|
||||
|
||||
if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
|
||||
{
|
||||
mvOsPrintf("mvEthWinSet:mvCtrlAddrDecToReg Failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target,&targetAttribs);
|
||||
|
||||
/* set attributes */
|
||||
decRegs.baseReg &= ~ETH_WIN_ATTR_MASK;
|
||||
decRegs.baseReg |= targetAttribs.attrib << ETH_WIN_ATTR_OFFS;
|
||||
/* set target ID */
|
||||
decRegs.baseReg &= ~ETH_WIN_TARGET_MASK;
|
||||
decRegs.baseReg |= targetAttribs.targetId << ETH_WIN_TARGET_OFFS;
|
||||
|
||||
/* for the safe side we disable the window before writing the new
|
||||
values */
|
||||
mvEthWinEnable(port, winNum, MV_FALSE);
|
||||
MV_REG_WRITE(ETH_WIN_BASE_REG(port, winNum), decRegs.baseReg);
|
||||
|
||||
/* Write to address decode Size Register */
|
||||
MV_REG_WRITE(ETH_WIN_SIZE_REG(port, winNum), decRegs.sizeReg);
|
||||
|
||||
/* Enable address decode target window */
|
||||
if (pAddrDecWin->enable == MV_TRUE)
|
||||
{
|
||||
mvEthWinEnable(port, winNum, MV_TRUE);
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvETHWinGet - Get dma peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get ETH peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - ETH to target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - ETH target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvEthWinGet(int port, MV_U32 winNum, MV_ETH_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= ETH_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvEthWinGet: ERR. Invalid winNum %d\n", winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ(ETH_WIN_BASE_REG(port, winNum));
|
||||
decRegs.sizeReg = MV_REG_READ(ETH_WIN_SIZE_REG(port, winNum));
|
||||
|
||||
if (MV_OK != mvCtrlRegToAddrDec(&decRegs,&(pAddrDecWin->addrWin)))
|
||||
{
|
||||
mvOsPrintf("mvAhbToMbusWinGet: mvCtrlRegToAddrDec Failed \n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib =
|
||||
(decRegs.baseReg & ETH_WIN_ATTR_MASK) >> ETH_WIN_ATTR_OFFS;
|
||||
targetAttrib.targetId =
|
||||
(decRegs.baseReg & ETH_WIN_TARGET_MASK) >> ETH_WIN_TARGET_OFFS;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
/* Check if window is enabled */
|
||||
if (~(MV_REG_READ(ETH_BASE_ADDR_ENABLE_REG(port))) & (1 << winNum) )
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthWinEnable - Enable/disable a ETH to target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function enable/disable a ETH to target address window.
|
||||
* According to parameter 'enable' the routine will enable the
|
||||
* window, thus enabling ETH accesses (before enabling the window it is
|
||||
* tested for overlapping). Otherwise, the window will be disabled.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - ETH to target address decode window number.
|
||||
* enable - Enable/disable parameter.
|
||||
*
|
||||
* OUTPUT:
|
||||
* N/A
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if decode window number was wrong or enabled window overlapps.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvEthWinEnable(int port, MV_U32 winNum,MV_BOOL enable)
|
||||
{
|
||||
MV_ETH_DEC_WIN addrDecWin;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= ETH_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvEthTargetWinEnable:ERR. Invalid winNum%d\n",winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (enable == MV_TRUE)
|
||||
{ /* First check for overlap with other enabled windows */
|
||||
/* Get current window */
|
||||
if (MV_OK != mvEthWinGet(port, winNum, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("mvEthTargetWinEnable:ERR. targetWinGet fail\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
/* Check for overlapping */
|
||||
if (MV_FALSE == ethWinOverlapDetect(port, winNum, &(addrDecWin.addrWin)))
|
||||
{
|
||||
/* No Overlap. Enable address decode target window */
|
||||
MV_REG_BIT_RESET(ETH_BASE_ADDR_ENABLE_REG(port), (1 << winNum));
|
||||
}
|
||||
else
|
||||
{ /* Overlap detected */
|
||||
mvOsPrintf("mvEthTargetWinEnable:ERR. Overlap detected\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ /* Disable address decode target window */
|
||||
MV_REG_BIT_SET(ETH_BASE_ADDR_ENABLE_REG(port), (1 << winNum));
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthWinTargetGet - Get Window number associated with target
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
* RETURN:
|
||||
* window number
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvEthWinTargetGet(int port, MV_TARGET target)
|
||||
{
|
||||
MV_ETH_DEC_WIN decWin;
|
||||
MV_U32 winNum;
|
||||
|
||||
/* Check parameters */
|
||||
if (target >= MAX_TARGETS)
|
||||
{
|
||||
mvOsPrintf("mvAhbToMbusWinTargetGet: target %d is Illigal\n", target);
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
for (winNum=0; winNum<ETH_MAX_DECODE_WIN; winNum++)
|
||||
{
|
||||
if (mvEthWinGet(port, winNum,&decWin) != MV_OK)
|
||||
{
|
||||
mvOsPrintf("mvAhbToMbusWinTargetGet: window returned error\n");
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
if (decWin.enable == MV_TRUE)
|
||||
{
|
||||
if (decWin.target == target)
|
||||
{
|
||||
return winNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthProtWinSet - Set access protection of Ethernet to target window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Each Ethernet port can be configured with access attributes for each
|
||||
* of the Ethenret to target windows (address decode windows). This
|
||||
* function sets access attributes to a given window for the given channel.
|
||||
*
|
||||
* INPUTS:
|
||||
* ethPort - ETH channel number. See MV_ETH_CHANNEL enumerator.
|
||||
* winNum - IETH to target address decode window number.
|
||||
* access - IETH access rights. See MV_ACCESS_RIGHTS enumerator.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR in case window number is invalid or access right reserved.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvEthProtWinSet(MV_U32 portNo, MV_U32 winNum, MV_ACCESS_RIGHTS access)
|
||||
{
|
||||
MV_U32 protReg;
|
||||
|
||||
/* Parameter checking */
|
||||
if(portNo >= mvCtrlEthMaxPortGet())
|
||||
{
|
||||
mvOsPrintf("mvEthProtWinSet:ERR. Invalid port number %d\n", portNo);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (winNum >= ETH_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvEthProtWinSet:ERR. Invalid winNum%d\n",winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if((access == ACC_RESERVED) || (access >= MAX_ACC_RIGHTS))
|
||||
{
|
||||
mvOsPrintf("mvEthProtWinSet:ERR. Inv access param %d\n", access);
|
||||
return MV_ERROR;
|
||||
}
|
||||
/* Read current protection register */
|
||||
protReg = MV_REG_READ(ETH_ACCESS_PROTECT_REG(portNo));
|
||||
|
||||
/* Clear protection window field */
|
||||
protReg &= ~(ETH_PROT_WIN_MASK(winNum));
|
||||
|
||||
/* Set new protection field value */
|
||||
protReg |= (access << (ETH_PROT_WIN_OFFS(winNum)));
|
||||
|
||||
/* Write protection register back */
|
||||
MV_REG_WRITE(ETH_ACCESS_PROTECT_REG(portNo), protReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* ethWinOverlapDetect - Detect ETH address windows overlapping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviur is expected in case ETH address decode
|
||||
* windows overlapps.
|
||||
* This function detects ETH address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS ethWinOverlapDetect(int port, MV_U32 winNum, MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 baseAddrEnableReg;
|
||||
MV_U32 winNumIndex;
|
||||
MV_ETH_DEC_WIN addrDecWin;
|
||||
|
||||
/* Read base address enable register. Do not check disabled windows */
|
||||
baseAddrEnableReg = MV_REG_READ(ETH_BASE_ADDR_ENABLE_REG(port));
|
||||
|
||||
for (winNumIndex=0; winNumIndex<ETH_MAX_DECODE_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if (baseAddrEnableReg & (1 << winNumIndex))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvEthWinGet(port, winNumIndex, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("ethWinOverlapDetect: ERR. TargetWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
/*
|
||||
mvOsPrintf("ethWinOverlapDetect:\n
|
||||
winNumIndex =%d baseHigh =0x%x baseLow=0x%x size=0x%x enable=0x%x\n",
|
||||
winNumIndex,
|
||||
addrDecWin.addrWin.baseHigh,
|
||||
addrDecWin.addrWin.baseLow,
|
||||
addrDecWin.addrWin.size,
|
||||
addrDecWin.enable);
|
||||
*/
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthAddrDecShow - Print the Etherent address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the Etherent address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
void mvEthPortAddrDecShow(int port)
|
||||
{
|
||||
MV_ETH_DEC_WIN win;
|
||||
int i;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "ETH %d:\n", port );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for( i = 0; i < ETH_MAX_DECODE_WIN; i++ )
|
||||
{
|
||||
memset( &win, 0, sizeof(ETH_MAX_DECODE_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if( mvEthWinGet(port, i, &win ) == MV_OK )
|
||||
{
|
||||
if( win.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %08x, ",
|
||||
mvCtrlTargetNameGet(win.target), win.addrWin.baseLow );
|
||||
mvOsOutput( "...." );
|
||||
mvSizePrint( win.addrWin.size );
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void mvEthAddrDecShow(void)
|
||||
{
|
||||
int port;
|
||||
|
||||
for(port=0; port<mvCtrlEthMaxPortGet(); port++)
|
||||
{
|
||||
if (MV_FALSE == mvCtrlPwrClckGet(ETH_GIG_UNIT_ID, port)) continue;
|
||||
|
||||
mvEthPortAddrDecShow(port);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void mvEthInit(void)
|
||||
{
|
||||
MV_U32 port;
|
||||
|
||||
/* Power down all existing ports */
|
||||
for(port=0; port<mvCtrlEthMaxPortGet(); port++)
|
||||
{
|
||||
if (MV_FALSE == mvCtrlPwrClckGet(ETH_GIG_UNIT_ID, port))
|
||||
continue;
|
||||
|
||||
mvEthPortPowerUp(port);
|
||||
mvEthWinInit(port);
|
||||
}
|
||||
mvEthHalInit();
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvSysGbeh
|
||||
#define __INCmvSysGbeh
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "eth/mvEth.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
|
||||
#define ETH_WIN_BASE_REG(port, win) (MV_ETH_REG_BASE(port) + 0x200 + ((win)<<3))
|
||||
#define ETH_WIN_SIZE_REG(port, win) (MV_ETH_REG_BASE(port) + 0x204 + ((win)<<3))
|
||||
#define ETH_WIN_REMAP_REG(port, win) (MV_ETH_REG_BASE(port) + 0x280 + ((win)<<2))
|
||||
#define ETH_BASE_ADDR_ENABLE_REG(port) (MV_ETH_REG_BASE(port) + 0x290)
|
||||
#define ETH_ACCESS_PROTECT_REG(port) (MV_ETH_REG_BASE(port) + 0x294)
|
||||
|
||||
/**** Address decode parameters ****/
|
||||
|
||||
/* Ethernet Base Address Register bits */
|
||||
#define ETH_MAX_DECODE_WIN 6
|
||||
#define ETH_MAX_HIGH_ADDR_REMAP_WIN 4
|
||||
|
||||
/* Ethernet Port Access Protect (EPAP) register */
|
||||
|
||||
/* The target associated with this window*/
|
||||
#define ETH_WIN_TARGET_OFFS 0
|
||||
#define ETH_WIN_TARGET_MASK (0xf << ETH_WIN_TARGET_OFFS)
|
||||
/* The target attributes Associated with window */
|
||||
#define ETH_WIN_ATTR_OFFS 8
|
||||
#define ETH_WIN_ATTR_MASK (0xff << ETH_WIN_ATTR_OFFS)
|
||||
|
||||
/* Ethernet Port Access Protect Register (EPAPR) */
|
||||
#define ETH_PROT_NO_ACCESS NO_ACCESS_ALLOWED
|
||||
#define ETH_PROT_READ_ONLY READ_ONLY
|
||||
#define ETH_PROT_FULL_ACCESS FULL_ACCESS
|
||||
#define ETH_PROT_WIN_OFFS(winNum) (2 * (winNum))
|
||||
#define ETH_PROT_WIN_MASK(winNum) (0x3 << ETH_PROT_WIN_OFFS(winNum))
|
||||
|
||||
MV_STATUS mvEthWinInit (int port);
|
||||
MV_STATUS mvEthWinEnable(int port, MV_U32 winNum, MV_BOOL enable);
|
||||
MV_U32 mvEthWinTargetGet(int port, MV_TARGET target);
|
||||
MV_STATUS mvEthProtWinSet(MV_U32 portNo, MV_U32 winNum, MV_ACCESS_RIGHTS
|
||||
access);
|
||||
|
||||
void mvEthPortAddrDecShow(int port);
|
||||
|
||||
MV_VOID mvEthAddrDecShow(MV_VOID);
|
||||
|
||||
void mvEthInit(void);
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,348 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCSysPEXH
|
||||
#define __INCSysPEXH
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
/* 4KB granularity */
|
||||
#define MINIMUM_WINDOW_SIZE 0x1000
|
||||
#define MINIMUM_BAR_SIZE 0x1000
|
||||
#define MINIMUM_BAR_SIZE_MASK 0xFFFFF000
|
||||
#define BAR_SIZE_OFFS 12
|
||||
#define BAR_SIZE_MASK (0xFFFFF << BAR_SIZE_OFFS)
|
||||
|
||||
|
||||
|
||||
#define MV_PEX_WIN_DEFAULT 6
|
||||
#define MV_PEX_WIN_EXP_ROM 7
|
||||
#define PEX_MAX_TARGET_WIN 8
|
||||
|
||||
|
||||
#define PEX_MAX_BARS 3
|
||||
#define PEX_INTER_REGS_BAR 0
|
||||
#define PEX_DRAM_BAR 1
|
||||
#define PEX_DEVICE_BAR 2
|
||||
|
||||
/*************************************/
|
||||
/* PCI Express BAR Control Registers */
|
||||
/*************************************/
|
||||
#define PEX_BAR_CTRL_REG(pexIf,bar) (0x41804 + (bar-1)*4- (pexIf)*0x10000)
|
||||
#define PEX_EXP_ROM_BAR_CTRL_REG(pexIf) (0x4180C - (pexIf)*0x10000)
|
||||
|
||||
|
||||
/* PCI Express BAR Control Register */
|
||||
/* PEX_BAR_CTRL_REG (PXBCR) */
|
||||
|
||||
#define PXBCR_BAR_EN BIT0
|
||||
#define PXBCR_BAR_SIZE_OFFS 16
|
||||
#define PXBCR_BAR_SIZE_MASK (0xffff << PXBCR_BAR_SIZE_OFFS)
|
||||
#define PXBCR_BAR_SIZE_ALIGNMENT 0x10000
|
||||
|
||||
|
||||
|
||||
/* PCI Express Expansion ROM BAR Control Register */
|
||||
/* PEX_EXP_ROM_BAR_CTRL_REG (PXERBCR) */
|
||||
|
||||
#define PXERBCR_EXPROM_EN BIT0
|
||||
#define PXERBCR_EXPROMSZ_OFFS 19
|
||||
#define PXERBCR_EXPROMSZ_MASK (0xf << PXERBCR_EXPROMSZ_OFFS)
|
||||
#define PXERBCR_EXPROMSZ_512KB (0x0 << PXERBCR_EXPROMSZ_OFFS)
|
||||
#define PXERBCR_EXPROMSZ_1024KB (0x1 << PXERBCR_EXPROMSZ_OFFS)
|
||||
#define PXERBCR_EXPROMSZ_2048KB (0x3 << PXERBCR_EXPROMSZ_OFFS)
|
||||
#define PXERBCR_EXPROMSZ_4096KB (0x7 << PXERBCR_EXPROMSZ_OFFS)
|
||||
|
||||
/************************************************/
|
||||
/* PCI Express Address Window Control Registers */
|
||||
/************************************************/
|
||||
#define PEX_WIN0_3_CTRL_REG(pexIf,winNum) \
|
||||
(0x41820 + (winNum) * 0x10 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN0_3_BASE_REG(pexIf,winNum) \
|
||||
(0x41824 + (winNum) * 0x10 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN0_3_REMAP_REG(pexIf,winNum) \
|
||||
(0x4182C + (winNum) * 0x10 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN4_5_CTRL_REG(pexIf,winNum) \
|
||||
(0x41860 + (winNum - 4) * 0x20 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN4_5_BASE_REG(pexIf,winNum) \
|
||||
(0x41864 + (winNum - 4) * 0x20 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN4_5_REMAP_REG(pexIf,winNum) \
|
||||
(0x4186C + (winNum - 4) * 0x20 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN4_5_REMAP_HIGH_REG(pexIf,winNum) \
|
||||
(0x41870 + (winNum - 4) * 0x20 - (pexIf) * 0x10000)
|
||||
|
||||
#define PEX_WIN_DEFAULT_CTRL_REG(pexIf) (0x418B0 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN_EXP_ROM_CTRL_REG(pexIf) (0x418C0 - (pexIf) * 0x10000)
|
||||
#define PEX_WIN_EXP_ROM_REMAP_REG(pexIf) (0x418C4 - (pexIf) * 0x10000)
|
||||
|
||||
/* PCI Express Window Control Register */
|
||||
/* PEX_WIN_CTRL_REG (PXWCR) */
|
||||
|
||||
#define PXWCR_WIN_EN BIT0 /* Window Enable.*/
|
||||
|
||||
#define PXWCR_WIN_BAR_MAP_OFFS 1 /* Mapping to BAR.*/
|
||||
#define PXWCR_WIN_BAR_MAP_MASK BIT1
|
||||
#define PXWCR_WIN_BAR_MAP_BAR1 (0 << PXWCR_WIN_BAR_MAP_OFFS)
|
||||
#define PXWCR_WIN_BAR_MAP_BAR2 (1 << PXWCR_WIN_BAR_MAP_OFFS)
|
||||
|
||||
#define PXWCR_TARGET_OFFS 4 /*Unit ID */
|
||||
#define PXWCR_TARGET_MASK (0xf << PXWCR_TARGET_OFFS)
|
||||
|
||||
#define PXWCR_ATTRIB_OFFS 8 /* target attributes */
|
||||
#define PXWCR_ATTRIB_MASK (0xff << PXWCR_ATTRIB_OFFS)
|
||||
|
||||
#define PXWCR_SIZE_OFFS 16 /* size */
|
||||
#define PXWCR_SIZE_MASK (0xffff << PXWCR_SIZE_OFFS)
|
||||
#define PXWCR_SIZE_ALIGNMENT 0x10000
|
||||
|
||||
/* PCI Express Window Base Register */
|
||||
/* PEX_WIN_BASE_REG (PXWBR)*/
|
||||
|
||||
#define PXWBR_BASE_OFFS 16 /* address[31:16] */
|
||||
#define PXWBR_BASE_MASK (0xffff << PXWBR_BASE_OFFS)
|
||||
#define PXWBR_BASE_ALIGNMENT 0x10000
|
||||
|
||||
/* PCI Express Window Remap Register */
|
||||
/* PEX_WIN_REMAP_REG (PXWRR)*/
|
||||
|
||||
#define PXWRR_REMAP_EN BIT0
|
||||
#define PXWRR_REMAP_OFFS 16
|
||||
#define PXWRR_REMAP_MASK (0xffff << PXWRR_REMAP_OFFS)
|
||||
#define PXWRR_REMAP_ALIGNMENT 0x10000
|
||||
|
||||
/* PCI Express Window Remap (High) Register */
|
||||
/* PEX_WIN_REMAP_HIGH_REG (PXWRHR)*/
|
||||
|
||||
#define PXWRHR_REMAP_HIGH_OFFS 0
|
||||
#define PXWRHR_REMAP_HIGH_MASK (0xffffffff << PXWRHR_REMAP_HIGH_OFFS)
|
||||
|
||||
/* PCI Express Default Window Control Register */
|
||||
/* PEX_WIN_DEFAULT_CTRL_REG (PXWDCR) */
|
||||
|
||||
#define PXWDCR_TARGET_OFFS 4 /*Unit ID */
|
||||
#define PXWDCR_TARGET_MASK (0xf << PXWDCR_TARGET_OFFS)
|
||||
#define PXWDCR_ATTRIB_OFFS 8 /* target attributes */
|
||||
#define PXWDCR_ATTRIB_MASK (0xff << PXWDCR_ATTRIB_OFFS)
|
||||
|
||||
/* PCI Express Expansion ROM Window Control Register */
|
||||
/* PEX_WIN_EXP_ROM_CTRL_REG (PXWERCR)*/
|
||||
|
||||
#define PXWERCR_TARGET_OFFS 4 /*Unit ID */
|
||||
#define PXWERCR_TARGET_MASK (0xf << PXWERCR_TARGET_OFFS)
|
||||
#define PXWERCR_ATTRIB_OFFS 8 /* target attributes */
|
||||
#define PXWERCR_ATTRIB_MASK (0xff << PXWERCR_ATTRIB_OFFS)
|
||||
|
||||
/* PCI Express Expansion ROM Window Remap Register */
|
||||
/* PEX_WIN_EXP_ROM_REMAP_REG (PXWERRR)*/
|
||||
|
||||
#define PXWERRR_REMAP_EN BIT0
|
||||
#define PXWERRR_REMAP_OFFS 16
|
||||
#define PXWERRR_REMAP_MASK (0xffff << PXWERRR_REMAP_OFFS)
|
||||
#define PXWERRR_REMAP_ALIGNMENT 0x10000
|
||||
|
||||
|
||||
|
||||
/*PEX_MEMORY_BAR_BASE_ADDR(barNum) (PXMBBA)*/
|
||||
/* PCI Express BAR0 Internal Register*/
|
||||
/*PEX BAR0_INTER_REG (PXBIR)*/
|
||||
|
||||
#define PXBIR_IOSPACE BIT0 /* Memory Space Indicator */
|
||||
|
||||
#define PXBIR_TYPE_OFFS 1 /* BAR Type/Init Val. */
|
||||
#define PXBIR_TYPE_MASK (0x3 << PXBIR_TYPE_OFFS)
|
||||
#define PXBIR_TYPE_32BIT_ADDR (0x0 << PXBIR_TYPE_OFFS)
|
||||
#define PXBIR_TYPE_64BIT_ADDR (0x2 << PXBIR_TYPE_OFFS)
|
||||
|
||||
#define PXBIR_PREFETCH_EN BIT3 /* Prefetch Enable */
|
||||
|
||||
#define PXBIR_BASE_OFFS 20 /* Base address. Address bits [31:20] */
|
||||
#define PXBIR_BASE_MASK (0xfff << PXBIR_BASE_OFFS)
|
||||
#define PXBIR_BASE_ALIGNMET (1 << PXBIR_BASE_OFFS)
|
||||
|
||||
|
||||
/* PCI Express BAR0 Internal (High) Register*/
|
||||
/*PEX BAR0_INTER_REG_HIGH (PXBIRH)*/
|
||||
|
||||
#define PXBIRH_BASE_OFFS 0 /* Base address. Bits [63:32] */
|
||||
#define PXBIRH_BASE_MASK (0xffffffff << PBBHR_BASE_OFFS)
|
||||
|
||||
|
||||
#define PEX_BAR_DEFAULT_ATTRIB 0xc /* Memory - Prefetch - 64 bit address */
|
||||
#define PEX_BAR0_DEFAULT_ATTRIB PEX_BAR_DEFAULT_ATTRIB
|
||||
#define PEX_BAR1_DEFAULT_ATTRIB PEX_BAR_DEFAULT_ATTRIB
|
||||
#define PEX_BAR2_DEFAULT_ATTRIB PEX_BAR_DEFAULT_ATTRIB
|
||||
|
||||
|
||||
/* PCI Express BAR1 Register */
|
||||
/* PCI Express BAR2 Register*/
|
||||
/*PEX BAR1_REG (PXBR)*/
|
||||
/*PEX BAR2_REG (PXBR)*/
|
||||
|
||||
#define PXBR_IOSPACE BIT0 /* Memory Space Indicator */
|
||||
|
||||
#define PXBR_TYPE_OFFS 1 /* BAR Type/Init Val. */
|
||||
#define PXBR_TYPE_MASK (0x3 << PXBR_TYPE_OFFS)
|
||||
#define PXBR_TYPE_32BIT_ADDR (0x0 << PXBR_TYPE_OFFS)
|
||||
#define PXBR_TYPE_64BIT_ADDR (0x2 << PXBR_TYPE_OFFS)
|
||||
|
||||
#define PXBR_PREFETCH_EN BIT3 /* Prefetch Enable */
|
||||
|
||||
#define PXBR_BASE_OFFS 16 /* Base address. Address bits [31:16] */
|
||||
#define PXBR_BASE_MASK (0xffff << PXBR_BASE_OFFS)
|
||||
#define PXBR_BASE_ALIGNMET (1 << PXBR_BASE_OFFS)
|
||||
|
||||
|
||||
/* PCI Express BAR1 (High) Register*/
|
||||
/* PCI Express BAR2 (High) Register*/
|
||||
/*PEX BAR1_REG_HIGH (PXBRH)*/
|
||||
/*PEX BAR2_REG_HIGH (PXBRH)*/
|
||||
|
||||
#define PXBRH_BASE_OFFS 0 /* Base address. Address bits [63:32] */
|
||||
#define PXBRH_BASE_MASK (0xffffffff << PXBRH_BASE_OFFS)
|
||||
|
||||
/* PCI Express Expansion ROM BAR Register*/
|
||||
/*PEX_EXPANSION_ROM_BASE_ADDR_REG (PXERBAR)*/
|
||||
|
||||
#define PXERBAR_EXPROMEN BIT0 /* Expansion ROM Enable */
|
||||
|
||||
#define PXERBAR_BASE_512K_OFFS 19 /* Expansion ROM Base Address */
|
||||
#define PXERBAR_BASE_512K_MASK (0x1fff << PXERBAR_BASE_512K_OFFS)
|
||||
|
||||
#define PXERBAR_BASE_1MB_OFFS 20 /* Expansion ROM Base Address */
|
||||
#define PXERBAR_BASE_1MB_MASK (0xfff << PXERBAR_BASE_1MB_OFFS)
|
||||
|
||||
#define PXERBAR_BASE_2MB_OFFS 21 /* Expansion ROM Base Address */
|
||||
#define PXERBAR_BASE_2MB_MASK (0x7ff << PXERBAR_BASE_2MB_OFFS)
|
||||
|
||||
#define PXERBAR_BASE_4MB_OFFS 22 /* Expansion ROM Base Address */
|
||||
#define PXERBAR_BASE_4MB_MASK (0x3ff << PXERBAR_BASE_4MB_OFFS)
|
||||
|
||||
/* PEX Bar attributes */
|
||||
typedef struct _mvPexBar
|
||||
{
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_PEX_BAR;
|
||||
|
||||
/* PEX Remap Window attributes */
|
||||
typedef struct _mvPexRemapWin
|
||||
{
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_PEX_REMAP_WIN;
|
||||
|
||||
/* PEX Remap Window attributes */
|
||||
typedef struct _mvPexDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_U32 targetBar;
|
||||
MV_U8 attrib; /* chip select attributes */
|
||||
MV_TARGET_ID targetId; /* Target Id of this MV_TARGET */
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_PEX_DEC_WIN;
|
||||
|
||||
/* Global Functions prototypes */
|
||||
/* mvPexHalInit - Initialize PEX interfaces*/
|
||||
MV_STATUS mvPexInit(MV_U32 pexIf, MV_PEX_TYPE pexType);
|
||||
|
||||
|
||||
/* mvPexTargetWinSet - Set PEX to peripheral target address window BAR*/
|
||||
MV_STATUS mvPexTargetWinSet(MV_U32 pexIf, MV_U32 winNum,
|
||||
MV_PEX_DEC_WIN *pAddrDecWin);
|
||||
|
||||
/* mvPexTargetWinGet - Get PEX to peripheral target address window*/
|
||||
MV_STATUS mvPexTargetWinGet(MV_U32 pexIf, MV_U32 winNum,
|
||||
MV_PEX_DEC_WIN *pAddrDecWin);
|
||||
|
||||
/* mvPexTargetWinEnable - Enable/disable a PEX BAR window*/
|
||||
MV_STATUS mvPexTargetWinEnable(MV_U32 pexIf,MV_U32 winNum, MV_BOOL enable);
|
||||
|
||||
/* mvPexTargetWinRemap - Set PEX to target address window remap.*/
|
||||
MV_STATUS mvPexTargetWinRemap(MV_U32 pexIf, MV_U32 winNum,
|
||||
MV_PEX_REMAP_WIN *pAddrWin);
|
||||
|
||||
/* mvPexTargetWinRemapEnable -enable\disable a PEX Window remap.*/
|
||||
MV_STATUS mvPexTargetWinRemapEnable(MV_U32 pexIf, MV_U32 winNum,
|
||||
MV_BOOL enable);
|
||||
|
||||
/* mvPexBarSet - Set PEX bar address and size */
|
||||
MV_STATUS mvPexBarSet(MV_U32 pexIf, MV_U32 barNum, MV_PEX_BAR *addrWin);
|
||||
|
||||
/* mvPexBarGet - Get PEX bar address and size */
|
||||
MV_STATUS mvPexBarGet(MV_U32 pexIf, MV_U32 barNum, MV_PEX_BAR *addrWin);
|
||||
|
||||
/* mvPexBarEnable - enable\disable a PEX bar*/
|
||||
MV_STATUS mvPexBarEnable(MV_U32 pexIf, MV_U32 barNum, MV_BOOL enable);
|
||||
|
||||
/* mvPexAddrDecShow - Display address decode windows attributes */
|
||||
MV_VOID mvPexAddrDecShow(MV_VOID);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,430 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#include "mvTypes.h"
|
||||
#include "mvCommon.h"
|
||||
#include "mvOs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "cpu/mvCpu.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "sata/CoreDriver/mvRegs.h"
|
||||
#include "ctrlEnv/sys/mvSysSata.h"
|
||||
|
||||
MV_TARGET sataAddrDecPrioTab[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_MEM,
|
||||
#endif
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* sataWinOverlapDetect - Detect SATA address windows overlapping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviur is expected in case SATA address decode
|
||||
* windows overlapps.
|
||||
* This function detects SATA address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS sataWinOverlapDetect(int dev, MV_U32 winNum,
|
||||
MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 winNumIndex;
|
||||
MV_SATA_DEC_WIN addrDecWin;
|
||||
|
||||
for(winNumIndex=0; winNumIndex<MV_SATA_MAX_ADDR_DECODE_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvSataWinGet(dev, winNumIndex, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. TargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if(addrDecWin.enable == MV_FALSE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSataWinSet - Set SATA target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the SATA will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - SATA target address decode window number.
|
||||
* pAddrDecWin - SATA target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvSataWinSet(int dev, MV_U32 winNum, MV_SATA_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_DEC_REGS decRegs;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_SATA_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Invalid win num %d\n",__FUNCTION__, winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if (MV_TRUE == sataWinOverlapDetect(dev, winNum, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Window %d overlap\n", __FUNCTION__, winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvSataWinSet:Error setting SATA window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pAddrDecWin->target),
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
decRegs.baseReg = 0;
|
||||
decRegs.sizeReg = 0;
|
||||
|
||||
if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlAddrDecToReg Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target, &targetAttribs);
|
||||
|
||||
/* set attributes */
|
||||
decRegs.sizeReg &= ~MV_SATA_WIN_ATTR_MASK;
|
||||
decRegs.sizeReg |= (targetAttribs.attrib << MV_SATA_WIN_ATTR_OFFSET);
|
||||
|
||||
/* set target ID */
|
||||
decRegs.sizeReg &= ~MV_SATA_WIN_TARGET_MASK;
|
||||
decRegs.sizeReg |= (targetAttribs.targetId << MV_SATA_WIN_TARGET_OFFSET);
|
||||
|
||||
if (pAddrDecWin->enable == MV_TRUE)
|
||||
{
|
||||
decRegs.sizeReg |= MV_SATA_WIN_ENABLE_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
decRegs.sizeReg &= ~MV_SATA_WIN_ENABLE_MASK;
|
||||
}
|
||||
|
||||
MV_REG_WRITE( MV_SATA_WIN_CTRL_REG(dev, winNum), decRegs.sizeReg);
|
||||
MV_REG_WRITE( MV_SATA_WIN_BASE_REG(dev, winNum), decRegs.baseReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSataWinGet - Get SATA peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get SATA peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - SATA target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - SATA target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvSataWinGet(int dev, MV_U32 winNum, MV_SATA_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_SATA_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s (dev=%d): ERR. Invalid winNum %d\n",
|
||||
__FUNCTION__, dev, winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ( MV_SATA_WIN_BASE_REG(dev, winNum) );
|
||||
decRegs.sizeReg = MV_REG_READ( MV_SATA_WIN_CTRL_REG(dev, winNum) );
|
||||
|
||||
if (MV_OK != mvCtrlRegToAddrDec(&decRegs, &pAddrDecWin->addrWin) )
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlRegToAddrDec Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib = (decRegs.sizeReg & MV_SATA_WIN_ATTR_MASK) >>
|
||||
MV_SATA_WIN_ATTR_OFFSET;
|
||||
targetAttrib.targetId = (decRegs.sizeReg & MV_SATA_WIN_TARGET_MASK) >>
|
||||
MV_SATA_WIN_TARGET_OFFSET;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
/* Check if window is enabled */
|
||||
if(decRegs.sizeReg & MV_SATA_WIN_ENABLE_MASK)
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvSataAddrDecShow - Print the SATA address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the SATA address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvSataAddrDecShow(MV_VOID)
|
||||
{
|
||||
|
||||
MV_SATA_DEC_WIN win;
|
||||
int i,j;
|
||||
|
||||
|
||||
|
||||
for( j = 0; j < MV_SATA_MAX_CHAN; j++ )
|
||||
{
|
||||
if (MV_FALSE == mvCtrlPwrClckGet(SATA_UNIT_ID, j))
|
||||
return;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "SATA %d:\n", j );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for( i = 0; i < MV_SATA_MAX_ADDR_DECODE_WIN; i++ )
|
||||
{
|
||||
memset( &win, 0, sizeof(MV_SATA_DEC_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if( mvSataWinGet(j, i, &win ) == MV_OK )
|
||||
{
|
||||
if( win.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %08x, ",
|
||||
mvCtrlTargetNameGet(win.target), win.addrWin.baseLow );
|
||||
mvOsOutput( "...." );
|
||||
|
||||
mvSizePrint( win.addrWin.size );
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSataWinInit - Initialize the integrated SATA target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Initialize the SATA peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvSataWinInit(MV_VOID)
|
||||
{
|
||||
int winNum;
|
||||
MV_SATA_DEC_WIN sataWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
MV_U32 status, winPrioIndex = 0;
|
||||
|
||||
/* Initiate Sata address decode */
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum = 0; winNum < MV_SATA_MAX_ADDR_DECODE_WIN; winNum++)
|
||||
{
|
||||
MV_U32 regVal = MV_REG_READ(MV_SATA_WIN_CTRL_REG(0, winNum));
|
||||
regVal &= ~MV_SATA_WIN_ENABLE_MASK;
|
||||
MV_REG_WRITE(MV_SATA_WIN_CTRL_REG(0, winNum), regVal);
|
||||
}
|
||||
|
||||
winNum = 0;
|
||||
while( (sataAddrDecPrioTab[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < MV_SATA_MAX_ADDR_DECODE_WIN) )
|
||||
{
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(sataAddrDecPrioTab[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if(MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. mvCpuIfTargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
sataWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
sataWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
sataWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
sataWin.enable = MV_TRUE;
|
||||
sataWin.target = sataAddrDecPrioTab[winPrioIndex];
|
||||
|
||||
if(MV_OK != mvSataWinSet(0/*dev*/, winNum, &sataWin))
|
||||
{
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex++;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef __INCMVSysSataAddrDech
|
||||
#define __INCMVSysSataAddrDech
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _mvSataDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
} MV_SATA_DEC_WIN;
|
||||
|
||||
|
||||
#define MV_SATA_MAX_ADDR_DECODE_WIN 4
|
||||
|
||||
#define MV_SATA_WIN_CTRL_REG(dev, win) (SATA_REG_BASE + 0x30 + ((win)<<4))
|
||||
#define MV_SATA_WIN_BASE_REG(dev, win) (SATA_REG_BASE + 0x34 + ((win)<<4))
|
||||
|
||||
/* BITs in Bridge Interrupt Cause and Mask registers */
|
||||
#define MV_SATA_ADDR_DECODE_ERROR_BIT 0
|
||||
#define MV_SATA_ADDR_DECODE_ERROR_MASK (1<<MV_SATA_ADDR_DECODE_ERROR_BIT)
|
||||
|
||||
/* BITs in Windows 0-3 Control and Base Registers */
|
||||
#define MV_SATA_WIN_ENABLE_BIT 0
|
||||
#define MV_SATA_WIN_ENABLE_MASK (1<<MV_SATA_WIN_ENABLE_BIT)
|
||||
|
||||
#define MV_SATA_WIN_TARGET_OFFSET 4
|
||||
#define MV_SATA_WIN_TARGET_MASK (0xF<<MV_SATA_WIN_TARGET_OFFSET)
|
||||
|
||||
#define MV_SATA_WIN_ATTR_OFFSET 8
|
||||
#define MV_SATA_WIN_ATTR_MASK (0xFF<<MV_SATA_WIN_ATTR_OFFSET)
|
||||
|
||||
#define MV_SATA_WIN_SIZE_OFFSET 16
|
||||
#define MV_SATA_WIN_SIZE_MASK (0xFFFF<<MV_SATA_WIN_SIZE_OFFSET)
|
||||
|
||||
#define MV_SATA_WIN_BASE_OFFSET 16
|
||||
#define MV_SATA_WIN_BASE_MASK (0xFFFF<<MV_SATA_WIN_BASE_OFFSET)
|
||||
|
||||
MV_STATUS mvSataWinGet(int dev, MV_U32 winNum, MV_SATA_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvSataWinSet(int dev, MV_U32 winNum, MV_SATA_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvSataWinByTargetGet(MV_TARGET target, MV_SATA_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvSataWinInit(MV_VOID);
|
||||
MV_VOID mvSataAddrDecShow(MV_VOID);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,427 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#include "mvTypes.h"
|
||||
#include "mvCommon.h"
|
||||
#include "mvOs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "cpu/mvCpu.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "mvRegs.h"
|
||||
#include "ctrlEnv/sys/mvSysSdmmc.h"
|
||||
|
||||
MV_TARGET sdmmcAddrDecPrioTab[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_MEM,
|
||||
#endif
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* sdmmcWinOverlapDetect - Detect SDMMC address windows overlapping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviur is expected in case SDMMC address decode
|
||||
* windows overlapps.
|
||||
* This function detects SDMMC address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS sdmmcWinOverlapDetect(int dev, MV_U32 winNum,
|
||||
MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 winNumIndex;
|
||||
MV_SDMMC_DEC_WIN addrDecWin;
|
||||
|
||||
for(winNumIndex=0; winNumIndex<MV_SDMMC_MAX_ADDR_DECODE_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvSdmmcWinGet(dev, winNumIndex, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. TargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if(addrDecWin.enable == MV_FALSE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSdmmcWinSet - Set SDMMC target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the SDMMC will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - SDMMC target address decode window number.
|
||||
* pAddrDecWin - SDMMC target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvSdmmcWinSet(int dev, MV_U32 winNum, MV_SDMMC_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_DEC_REGS decRegs;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_SDMMC_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Invalid win num %d\n",__FUNCTION__, winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if (MV_TRUE == sdmmcWinOverlapDetect(dev, winNum, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Window %d overlap\n", __FUNCTION__, winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvSdmmcWinSet:Error setting SDMMC window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pAddrDecWin->target),
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
decRegs.baseReg = 0;
|
||||
decRegs.sizeReg = 0;
|
||||
|
||||
if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlAddrDecToReg Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target, &targetAttribs);
|
||||
|
||||
/* set attributes */
|
||||
decRegs.sizeReg &= ~MV_SDMMC_WIN_ATTR_MASK;
|
||||
decRegs.sizeReg |= (targetAttribs.attrib << MV_SDMMC_WIN_ATTR_OFFSET);
|
||||
|
||||
/* set target ID */
|
||||
decRegs.sizeReg &= ~MV_SDMMC_WIN_TARGET_MASK;
|
||||
decRegs.sizeReg |= (targetAttribs.targetId << MV_SDMMC_WIN_TARGET_OFFSET);
|
||||
|
||||
if (pAddrDecWin->enable == MV_TRUE)
|
||||
{
|
||||
decRegs.sizeReg |= MV_SDMMC_WIN_ENABLE_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
decRegs.sizeReg &= ~MV_SDMMC_WIN_ENABLE_MASK;
|
||||
}
|
||||
|
||||
MV_REG_WRITE( MV_SDMMC_WIN_CTRL_REG(dev, winNum), decRegs.sizeReg);
|
||||
MV_REG_WRITE( MV_SDMMC_WIN_BASE_REG(dev, winNum), decRegs.baseReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSdmmcWinGet - Get SDMMC peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get SDMMC peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - SDMMC target address decode window number.
|
||||
*d
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - SDMMC target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvSdmmcWinGet(int dev, MV_U32 winNum, MV_SDMMC_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_SDMMC_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s (dev=%d): ERR. Invalid winNum %d\n",
|
||||
__FUNCTION__, dev, winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ( MV_SDMMC_WIN_BASE_REG(dev, winNum) );
|
||||
decRegs.sizeReg = MV_REG_READ( MV_SDMMC_WIN_CTRL_REG(dev, winNum) );
|
||||
|
||||
if (MV_OK != mvCtrlRegToAddrDec(&decRegs, &pAddrDecWin->addrWin) )
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlRegToAddrDec Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib = (decRegs.sizeReg & MV_SDMMC_WIN_ATTR_MASK) >>
|
||||
MV_SDMMC_WIN_ATTR_OFFSET;
|
||||
targetAttrib.targetId = (decRegs.sizeReg & MV_SDMMC_WIN_TARGET_MASK) >>
|
||||
MV_SDMMC_WIN_TARGET_OFFSET;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
/* Check if window is enabled */
|
||||
if(decRegs.sizeReg & MV_SDMMC_WIN_ENABLE_MASK)
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvSdmmcAddrDecShow - Print the SDMMC address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the SDMMC address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvSdmmcAddrDecShow(MV_VOID)
|
||||
{
|
||||
|
||||
MV_SDMMC_DEC_WIN win;
|
||||
int i,j=0;
|
||||
|
||||
|
||||
|
||||
if (MV_FALSE == mvCtrlPwrClckGet(SDIO_UNIT_ID, 0))
|
||||
return;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "SDMMC %d:\n", j );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for( i = 0; i < MV_SDMMC_MAX_ADDR_DECODE_WIN; i++ )
|
||||
{
|
||||
memset( &win, 0, sizeof(MV_SDMMC_DEC_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if( mvSdmmcWinGet(j, i, &win ) == MV_OK )
|
||||
{
|
||||
if( win.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %08x, ",
|
||||
mvCtrlTargetNameGet(win.target), win.addrWin.baseLow );
|
||||
mvOsOutput( "...." );
|
||||
|
||||
mvSizePrint( win.addrWin.size );
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvSdmmcWinInit - Initialize the integrated SDMMC target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Initialize the SDMMC peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvSdmmcWinInit(MV_VOID)
|
||||
{
|
||||
int winNum;
|
||||
MV_SDMMC_DEC_WIN sdmmcWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
MV_U32 status, winPrioIndex = 0;
|
||||
|
||||
/* Initiate Sdmmc address decode */
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum = 0; winNum < MV_SDMMC_MAX_ADDR_DECODE_WIN; winNum++)
|
||||
{
|
||||
MV_U32 regVal = MV_REG_READ(MV_SDMMC_WIN_CTRL_REG(0, winNum));
|
||||
regVal &= ~MV_SDMMC_WIN_ENABLE_MASK;
|
||||
MV_REG_WRITE(MV_SDMMC_WIN_CTRL_REG(0, winNum), regVal);
|
||||
}
|
||||
|
||||
winNum = 0;
|
||||
while( (sdmmcAddrDecPrioTab[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < MV_SDMMC_MAX_ADDR_DECODE_WIN) )
|
||||
{
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(sdmmcAddrDecPrioTab[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if(MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. mvCpuIfTargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
sdmmcWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
sdmmcWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
sdmmcWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
sdmmcWin.enable = MV_TRUE;
|
||||
sdmmcWin.target = sdmmcAddrDecPrioTab[winPrioIndex];
|
||||
|
||||
if(MV_OK != mvSdmmcWinSet(0/*dev*/, winNum, &sdmmcWin))
|
||||
{
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex++;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef __INCMVSysSdmmcAddrDech
|
||||
#define __INCMVSysSdmmcAddrDech
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _mvSdmmcDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
} MV_SDMMC_DEC_WIN;
|
||||
|
||||
|
||||
#define MV_SDMMC_MAX_ADDR_DECODE_WIN 4
|
||||
|
||||
#define MV_SDMMC_WIN_CTRL_REG(dev, win) (MV_SDIO_REG_BASE + 0x108 + ((win)<<3))
|
||||
#define MV_SDMMC_WIN_BASE_REG(dev, win) (MV_SDIO_REG_BASE + 0x10c + ((win)<<3))
|
||||
|
||||
|
||||
/* BITs in Windows 0-3 Control and Base Registers */
|
||||
#define MV_SDMMC_WIN_ENABLE_BIT 0
|
||||
#define MV_SDMMC_WIN_ENABLE_MASK (1<<MV_SDMMC_WIN_ENABLE_BIT)
|
||||
|
||||
#define MV_SDMMC_WIN_TARGET_OFFSET 4
|
||||
#define MV_SDMMC_WIN_TARGET_MASK (0xF<<MV_SDMMC_WIN_TARGET_OFFSET)
|
||||
|
||||
#define MV_SDMMC_WIN_ATTR_OFFSET 8
|
||||
#define MV_SDMMC_WIN_ATTR_MASK (0xFF<<MV_SDMMC_WIN_ATTR_OFFSET)
|
||||
|
||||
#define MV_SDMMC_WIN_SIZE_OFFSET 16
|
||||
#define MV_SDMMC_WIN_SIZE_MASK (0xFFFF<<MV_SDMMC_WIN_SIZE_OFFSET)
|
||||
|
||||
#define MV_SDMMC_WIN_BASE_OFFSET 16
|
||||
#define MV_SDMMC_WIN_BASE_MASK (0xFFFF<<MV_SDMMC_WIN_BASE_OFFSET)
|
||||
|
||||
MV_STATUS mvSdmmcWinGet(int dev, MV_U32 winNum, MV_SDMMC_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvSdmmcWinSet(int dev, MV_U32 winNum, MV_SDMMC_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvSdmmcWinByTargetGet(MV_TARGET target, MV_SDMMC_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvSdmmcWinInit(MV_VOID);
|
||||
MV_VOID mvSdmmcAddrDecShow(MV_VOID);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,462 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvSysTdm.h"
|
||||
|
||||
|
||||
/* defines */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
static MV_TARGET tdmAddrDecPrioTap[] =
|
||||
{
|
||||
PEX0_MEM,
|
||||
SDRAM_CS0,
|
||||
SDRAM_CS1,
|
||||
SDRAM_CS2,
|
||||
SDRAM_CS3,
|
||||
DEVICE_CS0,
|
||||
DEVICE_CS1,
|
||||
DEVICE_CS2,
|
||||
DEV_BOOCS,
|
||||
PEX0_IO,
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
static MV_STATUS tdmWinOverlapDetect(MV_U32 winNum, MV_ADDR_WIN *pAddrWin);
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTdmWinInit - Initialize TDM address decode windows
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function initialize TDM window decode unit. It set the
|
||||
* default address decode
|
||||
* windows of the unit.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if setting fail.
|
||||
*******************************************************************************/
|
||||
|
||||
MV_STATUS mvTdmWinInit(void)
|
||||
{
|
||||
MV_U32 winNum;
|
||||
MV_U32 winPrioIndex = 0;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
MV_TDM_DEC_WIN tdmWin;
|
||||
MV_STATUS status;
|
||||
|
||||
/*Disable all windows*/
|
||||
for (winNum = 0; winNum < TDM_MBUS_MAX_WIN; winNum++)
|
||||
{
|
||||
mvTdmWinEnable(winNum, MV_FALSE);
|
||||
}
|
||||
|
||||
for (winNum = 0; ((tdmAddrDecPrioTap[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < TDM_MBUS_MAX_WIN)); )
|
||||
{
|
||||
status = mvCpuIfTargetWinGet(tdmAddrDecPrioTap[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
if (MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("mvTdmInit: ERR. mvCpuIfTargetWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
tdmWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
tdmWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
tdmWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
tdmWin.enable = MV_TRUE;
|
||||
tdmWin.target = tdmAddrDecPrioTap[winPrioIndex];
|
||||
if (MV_OK != mvTdmWinSet(winNum, &tdmWin))
|
||||
{
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex++;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTdmWinSet - Set TDM target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the TDM will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TDM to target address decode window number.
|
||||
* pAddrDecWin - TDM target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
MV_STATUS mvTdmWinSet(MV_U32 winNum, MV_TDM_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_U32 ctrlReg = 0;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= TDM_MBUS_MAX_WIN)
|
||||
{
|
||||
mvOsPrintf("mvTdmWinSet: ERR. Invalid win num %d\n",winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if (MV_TRUE == tdmWinOverlapDetect(winNum, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("mvTdmWinSet: ERR. Window %d overlap\n", winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if (MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow, pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvTdmWinSet: Error setting TDM window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pAddrDecWin->target),
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ(TDM_WIN_BASE_REG(winNum));
|
||||
decRegs.sizeReg = (MV_REG_READ(TDM_WIN_CTRL_REG(winNum)) & TDM_WIN_SIZE_MASK) >> TDM_WIN_SIZE_OFFS;
|
||||
|
||||
if (MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
|
||||
{
|
||||
mvOsPrintf("mvTdmWinSet: mvCtrlAddrDecToReg Failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target, &targetAttribs);
|
||||
|
||||
/* for the safe side we disable the window before writing the new
|
||||
values */
|
||||
mvTdmWinEnable(winNum, MV_FALSE);
|
||||
|
||||
ctrlReg |= (targetAttribs.attrib << TDM_WIN_ATTRIB_OFFS);
|
||||
ctrlReg |= (targetAttribs.targetId << TDM_WIN_TARGET_OFFS);
|
||||
ctrlReg |= (decRegs.sizeReg & TDM_WIN_SIZE_MASK);
|
||||
|
||||
/* Write to address base and control registers */
|
||||
MV_REG_WRITE(TDM_WIN_BASE_REG(winNum), decRegs.baseReg);
|
||||
MV_REG_WRITE(TDM_WIN_CTRL_REG(winNum), ctrlReg);
|
||||
/* Enable address decode target window */
|
||||
if (pAddrDecWin->enable == MV_TRUE)
|
||||
{
|
||||
mvTdmWinEnable(winNum, MV_TRUE);
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTdmWinGet - Get peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get TDM peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TDM to target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - TDM target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
MV_STATUS mvTdmWinGet(MV_U32 winNum, MV_TDM_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= TDM_MBUS_MAX_WIN)
|
||||
{
|
||||
mvOsPrintf("mvTdmWinGet: ERR. Invalid winNum %d\n", winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ(TDM_WIN_BASE_REG(winNum));
|
||||
decRegs.sizeReg = (MV_REG_READ(TDM_WIN_CTRL_REG(winNum)) & TDM_WIN_SIZE_MASK) >> TDM_WIN_SIZE_OFFS;
|
||||
|
||||
if (MV_OK != mvCtrlRegToAddrDec(&decRegs,&(pAddrDecWin->addrWin)))
|
||||
{
|
||||
mvOsPrintf("mvTdmWinGet: mvCtrlRegToAddrDec Failed \n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib =
|
||||
(MV_REG_READ(TDM_WIN_CTRL_REG(winNum)) & TDM_WIN_ATTRIB_MASK) >> TDM_WIN_ATTRIB_OFFS;
|
||||
targetAttrib.targetId =
|
||||
(MV_REG_READ(TDM_WIN_CTRL_REG(winNum)) & TDM_WIN_TARGET_MASK) >> TDM_WIN_TARGET_OFFS;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
/* Check if window is enabled */
|
||||
if (MV_REG_READ(TDM_WIN_CTRL_REG(winNum)) & TDM_WIN_ENABLE_MASK)
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTdmWinEnable - Enable/disable a TDM to target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function enable/disable a TDM to target address window.
|
||||
* According to parameter 'enable' the routine will enable the
|
||||
* window, thus enabling TDM accesses (before enabling the window it is
|
||||
* tested for overlapping). Otherwise, the window will be disabled.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TDM to target address decode window number.
|
||||
* enable - Enable/disable parameter.
|
||||
*
|
||||
* OUTPUT:
|
||||
* N/A
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if decode window number was wrong or enabled window overlapps.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvTdmWinEnable(int winNum, MV_BOOL enable)
|
||||
{
|
||||
MV_TDM_DEC_WIN addrDecWin;
|
||||
|
||||
if (MV_TRUE == enable)
|
||||
{
|
||||
if (winNum >= TDM_MBUS_MAX_WIN)
|
||||
{
|
||||
mvOsPrintf("mvTdmWinEnable:ERR. Invalid winNum%d\n",winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* First check for overlap with other enabled windows */
|
||||
/* Get current window */
|
||||
if (MV_OK != mvTdmWinGet(winNum, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("mvTdmWinEnable:ERR. targetWinGet fail\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
/* Check for overlapping */
|
||||
if (MV_FALSE == tdmWinOverlapDetect(winNum, &(addrDecWin.addrWin)))
|
||||
{
|
||||
/* No Overlap. Enable address decode target window */
|
||||
MV_REG_BIT_SET(TDM_WIN_CTRL_REG(winNum), TDM_WIN_ENABLE_MASK);
|
||||
}
|
||||
else
|
||||
{ /* Overlap detected */
|
||||
mvOsPrintf("mvTdmWinEnable:ERR. Overlap detected\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MV_REG_BIT_RESET(TDM_WIN_CTRL_REG(winNum), TDM_WIN_ENABLE_MASK);
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* tdmWinOverlapDetect - Detect TDM address windows overlapping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviour is expected in case TDM address decode
|
||||
* windows overlapps.
|
||||
* This function detects TDM address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS tdmWinOverlapDetect(MV_U32 winNum, MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 winNumIndex;
|
||||
MV_TDM_DEC_WIN addrDecWin;
|
||||
|
||||
for (winNumIndex = 0; winNumIndex < TDM_MBUS_MAX_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
/* Do not check disabled windows */
|
||||
if (MV_REG_READ(TDM_WIN_CTRL_REG(winNum)) & TDM_WIN_ENABLE_MASK)
|
||||
{
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvTdmWinGet(winNumIndex, &addrDecWin))
|
||||
{
|
||||
DB(mvOsPrintf("dmaWinOverlapDetect: ERR. TargetWinGet failed\n"));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTdmAddrDecShow - Print the TDM address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the TDM address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvTdmAddrDecShow(MV_VOID)
|
||||
{
|
||||
MV_TDM_DEC_WIN win;
|
||||
int i;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "TDM:\n" );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for( i = 0; i < TDM_MBUS_MAX_WIN; i++ )
|
||||
{
|
||||
memset( &win, 0, sizeof(MV_TDM_DEC_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if (mvTdmWinGet(i, &win ) == MV_OK )
|
||||
{
|
||||
if( win.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %08x, ",
|
||||
mvCtrlTargetNameGet(win.target), win.addrWin.baseLow);
|
||||
mvOsOutput( "...." );
|
||||
mvSizePrint( win.addrWin.size );
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvSysTdmh
|
||||
#define __INCmvSysTdmh
|
||||
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
typedef struct _mvTdmDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
} MV_TDM_DEC_WIN;
|
||||
|
||||
MV_STATUS mvTdmWinInit(MV_VOID);
|
||||
MV_STATUS mvTdmWinSet(MV_U32 winNum, MV_TDM_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvTdmWinGet(MV_U32 winNum, MV_TDM_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvTdmWinEnable(int winNum, MV_BOOL enable);
|
||||
MV_VOID mvTdmAddrDecShow(MV_VOID);
|
||||
|
||||
|
||||
#define TDM_MBUS_MAX_WIN 4
|
||||
#define TDM_WIN_CTRL_REG(win) ((TDM_REG_BASE + 0x4030) + (win<<4))
|
||||
#define TDM_WIN_BASE_REG(win) ((TDM_REG_BASE +0x4034) + (win<<4))
|
||||
|
||||
/* TDM_WIN_CTRL_REG bits */
|
||||
#define TDM_WIN_ENABLE_OFFS 0
|
||||
#define TDM_WIN_ENABLE_MASK (1<<TDM_WIN_ENABLE_OFFS)
|
||||
#define TDM_WIN_ENABLE 1
|
||||
#define TDM_WIN_TARGET_OFFS 4
|
||||
#define TDM_WIN_TARGET_MASK (0xf<<TDM_WIN_TARGET_OFFS)
|
||||
#define TDM_WIN_ATTRIB_OFFS 8
|
||||
#define TDM_WIN_ATTRIB_MASK (0xff<<TDM_WIN_ATTRIB_OFFS)
|
||||
#define TDM_WIN_SIZE_OFFS 16
|
||||
#define TDM_WIN_SIZE_MASK (0xffff<<TDM_WIN_SIZE_OFFS)
|
||||
|
||||
/* TDM_WIN_BASE_REG bits */
|
||||
#define TDM_BASE_OFFS 16
|
||||
#define TDM_BASE_MASK (0xffff<<TDM_BASE_OFFS)
|
||||
|
||||
#endif /*__INCmvSysTdmh*/
|
||||
|
||||
@@ -0,0 +1,591 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#include "ctrlEnv/sys/mvSysTs.h"
|
||||
|
||||
|
||||
typedef struct _mvTsuDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_TSU_DEC_WIN;
|
||||
|
||||
|
||||
MV_TARGET tsuAddrDecPrioTap[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_MEM,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PCI)
|
||||
PCI0_MEM,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS0)
|
||||
DEVICE_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS1)
|
||||
DEVICE_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS2)
|
||||
DEVICE_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS3)
|
||||
DEVICE_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_IO,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PCI)
|
||||
PCI0_IO,
|
||||
#endif
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
static MV_STATUS tsuWinOverlapDetect(MV_U32 winNum, MV_ADDR_WIN *pAddrWin);
|
||||
static MV_STATUS mvTsuWinSet(MV_U32 winNum, MV_TSU_DEC_WIN *pAddrDecWin);
|
||||
static MV_STATUS mvTsuWinGet(MV_U32 winNum, MV_TSU_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvTsuWinEnable(MV_U32 winNum,MV_BOOL enable);
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuWinInit
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Initialize the TSU unit address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
* OUTPUT:
|
||||
* None.
|
||||
* RETURN:
|
||||
* MV_OK - on success,
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvTsuWinInit(void)
|
||||
{
|
||||
MV_U32 winNum, status, winPrioIndex=0;
|
||||
MV_TSU_DEC_WIN tsuWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum = 0; winNum < TSU_MAX_DECODE_WIN; winNum++)
|
||||
{
|
||||
MV_REG_BIT_RESET(MV_TSU_WIN_CTRL_REG(winNum),
|
||||
TSU_WIN_CTRL_EN_MASK);
|
||||
}
|
||||
|
||||
/* Go through all windows in user table until table terminator */
|
||||
for(winNum = 0; ((tsuAddrDecPrioTap[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < TSU_MAX_DECODE_WIN));)
|
||||
{
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(tsuAddrDecPrioTap[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if(MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if(MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("mvTsuWinInit: ERR. mvCpuIfTargetWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
tsuWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
tsuWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
tsuWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
tsuWin.enable = MV_TRUE;
|
||||
tsuWin.target = tsuAddrDecPrioTap[winPrioIndex];
|
||||
|
||||
if(MV_OK != mvTsuWinSet(winNum, &tsuWin))
|
||||
{
|
||||
mvOsPrintf("mvTsuWinInit: ERR. mvTsuWinSet failed winNum=%d\n",
|
||||
winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex ++;
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuWinSet
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the TSU will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TSU to target address decode window number.
|
||||
* pAddrDecWin - TSU target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR - if address window overlapps with other address decode
|
||||
* windows.
|
||||
* MV_BAD_PARAM - if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvTsuWinSet(MV_U32 winNum, MV_TSU_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_DEC_REGS decRegs;
|
||||
|
||||
/* Parameter checking */
|
||||
if(winNum >= TSU_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvTsuWinSet: ERR. Invalid win num %d\n",winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if(MV_TRUE == tsuWinOverlapDetect(winNum, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("mvTsuWinSet: ERR. Window %d overlap\n", winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pAddrDecWin->addrWin.baseLow,pAddrDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvTsuWinSet: Error setting TSU window %d to target "
|
||||
"%s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum, mvCtrlTargetNameGet(pAddrDecWin->target),
|
||||
pAddrDecWin->addrWin.baseLow,
|
||||
pAddrDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ(MV_TSU_WIN_BASE_REG(winNum));
|
||||
decRegs.sizeReg = MV_REG_READ(MV_TSU_WIN_CTRL_REG(winNum));
|
||||
|
||||
if(MV_OK != mvCtrlAddrDecToReg(&(pAddrDecWin->addrWin),&decRegs))
|
||||
{
|
||||
mvOsPrintf("mvTsuWinSet: mvCtrlAddrDecToReg Failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target,&targetAttribs);
|
||||
|
||||
/* set attributes */
|
||||
decRegs.sizeReg &= ~TSU_WIN_CTRL_ATTR_MASK;
|
||||
decRegs.sizeReg |= targetAttribs.attrib << TSU_WIN_CTRL_ATTR_OFFS;
|
||||
/* set target ID */
|
||||
decRegs.sizeReg &= ~TSU_WIN_CTRL_TARGET_MASK;
|
||||
decRegs.sizeReg |= targetAttribs.targetId << TSU_WIN_CTRL_TARGET_OFFS;
|
||||
|
||||
/* for the safe side we disable the window before writing the new */
|
||||
/* values */
|
||||
mvTsuWinEnable(winNum, MV_FALSE);
|
||||
MV_REG_WRITE(MV_TSU_WIN_CTRL_REG(winNum),decRegs.sizeReg);
|
||||
|
||||
/* Write to address decode Size Register */
|
||||
MV_REG_WRITE(MV_TSU_WIN_BASE_REG(winNum), decRegs.baseReg);
|
||||
|
||||
/* Enable address decode target window */
|
||||
if(pAddrDecWin->enable == MV_TRUE)
|
||||
{
|
||||
mvTsuWinEnable(winNum,MV_TRUE);
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuWinGet
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get TSU peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TSU to target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pAddrDecWin - TSU target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvTsuWinGet(MV_U32 winNum, MV_TSU_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS decRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
|
||||
/* Parameter checking */
|
||||
if(winNum >= TSU_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvTsuWinGet: ERR. Invalid winNum %d\n", winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
decRegs.baseReg = MV_REG_READ(MV_TSU_WIN_BASE_REG(winNum));
|
||||
decRegs.sizeReg = MV_REG_READ(MV_TSU_WIN_CTRL_REG(winNum));
|
||||
|
||||
if(MV_OK != mvCtrlRegToAddrDec(&decRegs,&(pAddrDecWin->addrWin)))
|
||||
{
|
||||
mvOsPrintf("mvTsuWinGet: mvCtrlRegToAddrDec Failed \n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib =
|
||||
(decRegs.sizeReg & TSU_WIN_CTRL_ATTR_MASK) >> TSU_WIN_CTRL_ATTR_OFFS;
|
||||
targetAttrib.targetId =
|
||||
(decRegs.sizeReg & TSU_WIN_CTRL_TARGET_MASK) >> TSU_WIN_CTRL_TARGET_OFFS;
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
/* Check if window is enabled */
|
||||
if((MV_REG_READ(MV_TSU_WIN_CTRL_REG(winNum)) & TSU_WIN_CTRL_EN_MASK))
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAddrDecWin->enable = MV_FALSE;
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuWinEnable
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function enable/disable a TSU to target address window.
|
||||
* According to parameter 'enable' the routine will enable the
|
||||
* window, thus enabling TSU accesses (before enabling the window it is
|
||||
* tested for overlapping). Otherwise, the window will be disabled.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - TSU to target address decode window number.
|
||||
* enable - Enable / disable parameter.
|
||||
*
|
||||
* OUTPUT:
|
||||
* N/A
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if decode window number was wrong or enabled window overlapps.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvTsuWinEnable(MV_U32 winNum,MV_BOOL enable)
|
||||
{
|
||||
MV_TSU_DEC_WIN addrDecWin;
|
||||
|
||||
/* Parameter checking */
|
||||
if(winNum >= TSU_MAX_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("mvTsuWinEnable: ERR. Invalid winNum%d\n",winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if(enable == MV_TRUE)
|
||||
{
|
||||
/* First check for overlap with other enabled windows */
|
||||
/* Get current window. */
|
||||
if(MV_OK != mvTsuWinGet(winNum,&addrDecWin))
|
||||
{
|
||||
mvOsPrintf("mvTsuWinEnable: ERR. targetWinGet fail\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
/* Check for overlapping. */
|
||||
if(MV_FALSE == tsuWinOverlapDetect(winNum,&(addrDecWin.addrWin)))
|
||||
{
|
||||
/* No Overlap. Enable address decode target window */
|
||||
MV_REG_BIT_SET(MV_TSU_WIN_CTRL_REG(winNum),
|
||||
TSU_WIN_CTRL_EN_MASK);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Overlap detected */
|
||||
mvOsPrintf("mvTsuWinEnable: ERR. Overlap detected\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Disable address decode target window */
|
||||
MV_REG_BIT_RESET(MV_TSU_WIN_CTRL_REG(winNum),
|
||||
TSU_WIN_CTRL_EN_MASK);
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuWinTargetGet
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get Window number associated with target
|
||||
*
|
||||
* INPUT:
|
||||
* target - Target ID to get the window number for.
|
||||
* OUTPUT:
|
||||
*
|
||||
* RETURN:
|
||||
* window number or 0xFFFFFFFF on error.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvTsuWinTargetGet(MV_TARGET target)
|
||||
{
|
||||
MV_TSU_DEC_WIN decWin;
|
||||
MV_U32 winNum;
|
||||
|
||||
/* Check parameters */
|
||||
if(target >= MAX_TARGETS)
|
||||
{
|
||||
mvOsPrintf("mvTsuWinTargetGet: target %d is Illigal\n", target);
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
for(winNum = 0; winNum < TSU_MAX_DECODE_WIN; winNum++)
|
||||
{
|
||||
if(mvTsuWinGet(winNum,&decWin) != MV_OK)
|
||||
{
|
||||
mvOsPrintf("mvTsuWinGet: window returned error\n");
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
if (decWin.enable == MV_TRUE)
|
||||
{
|
||||
if(decWin.target == target)
|
||||
{
|
||||
return winNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* tsuWinOverlapDetect
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Detect TSU address windows overlapping
|
||||
* An unpredicted behaviur is expected in case TSU address decode
|
||||
* windows overlapps.
|
||||
* This function detects TSU address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS tsuWinOverlapDetect(MV_U32 winNum, MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 ctrlReg;
|
||||
MV_U32 winNumIndex;
|
||||
MV_TSU_DEC_WIN addrDecWin;
|
||||
|
||||
for(winNumIndex = 0; winNumIndex < TSU_MAX_DECODE_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if(winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
ctrlReg = MV_REG_READ(MV_TSU_WIN_CTRL_REG(winNumIndex));
|
||||
if((ctrlReg & TSU_WIN_CTRL_EN_MASK) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvTsuWinGet(winNumIndex, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("tsuWinOverlapDetect: ERR. mvTsuWinGet failed\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuAddrDecShow
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Print the TSU address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
void mvTsuAddrDecShow(void)
|
||||
{
|
||||
MV_TSU_DEC_WIN win;
|
||||
int i;
|
||||
|
||||
if (MV_FALSE == mvCtrlPwrClckGet(TS_UNIT_ID, 0))
|
||||
return;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "TSU:\n");
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for(i = 0; i < TSU_MAX_DECODE_WIN; i++)
|
||||
{
|
||||
memset(&win, 0, sizeof(TSU_MAX_DECODE_WIN));
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if(mvTsuWinGet(i, &win ) == MV_OK )
|
||||
{
|
||||
if(win.enable == MV_TRUE)
|
||||
{
|
||||
mvOsOutput("%s base %08x, ",
|
||||
mvCtrlTargetNameGet(win.target),
|
||||
win.addrWin.baseLow);
|
||||
mvOsOutput( "...." );
|
||||
mvSizePrint(win.addrWin.size );
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvTsuInit
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Initialize the TSU unit, and get unit out of reset.
|
||||
*
|
||||
* INPUT:
|
||||
* coreClock - The core clock at which the TSU should operate.
|
||||
* mode - The mode on configure the unit into (serial/parallel).
|
||||
* memHandle - Memory handle used for memory allocations.
|
||||
* OUTPUT:
|
||||
* None.
|
||||
* RETURN:
|
||||
* MV_OK - on success,
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvTsuInit(MV_TSU_CORE_CLOCK coreClock, MV_TSU_PORTS_MODE mode,
|
||||
void *osHandle)
|
||||
{
|
||||
MV_STATUS status;
|
||||
|
||||
status = mvTsuWinInit();
|
||||
if(status == MV_OK)
|
||||
status = mvTsuHalInit(coreClock,mode,osHandle);
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvSysTsh
|
||||
#define __INCmvSysTsh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* includes */
|
||||
#include "ts/mvTsu.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
#define TSU_MAX_DECODE_WIN 4
|
||||
|
||||
|
||||
/*******************************************/
|
||||
/* TSU Windows Registers */
|
||||
/*******************************************/
|
||||
#define MV_TSU_WIN_CTRL_REG(win) (TSU_GLOBAL_REG_BASE +0x30 + 0x10 * win)
|
||||
#define MV_TSU_WIN_BASE_REG(win) (TSU_GLOBAL_REG_BASE +0x34 + 0x10 * win)
|
||||
|
||||
/* TSU windows control register. */
|
||||
#define TSU_WIN_CTRL_EN_MASK (0x1 << 0)
|
||||
#define TSU_WIN_CTRL_TARGET_OFFS 4
|
||||
#define TSU_WIN_CTRL_TARGET_MASK (0xF << TSU_WIN_CTRL_TARGET_OFFS)
|
||||
#define TSU_WIN_CTRL_ATTR_OFFS 8
|
||||
#define TSU_WIN_CTRL_ATTR_MASK (0xFF << TSU_WIN_CTRL_ATTR_OFFS)
|
||||
#define TSU_WIN_CTRL_SIZE_OFFS 16
|
||||
#define TSU_WIN_CTRL_SIZE_MASK (0xFFFF << TSU_WIN_CTRL_SIZE_OFFS)
|
||||
|
||||
/* TSU windows base register. */
|
||||
#define TSU_WIN_BASE_OFFS 16
|
||||
#define TSU_WIN_BASE_MASK (0xFFFF << TSU_WIN_BASE_OFFS)
|
||||
|
||||
MV_STATUS mvTsuWinInit(void);
|
||||
|
||||
void mvTsuAddrDecShow(void);
|
||||
MV_STATUS mvTsuInit(MV_TSU_CORE_CLOCK coreClock, MV_TSU_PORTS_MODE mode,
|
||||
void *osHandle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __INCmvTsh */
|
||||
@@ -0,0 +1,497 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "ctrlEnv/sys/mvSysUsb.h"
|
||||
|
||||
MV_TARGET usbAddrDecPrioTab[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_CESA) && defined(USB_UNDERRUN_WA)
|
||||
CRYPT_ENG,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_MEM,
|
||||
#endif
|
||||
TBL_TERM
|
||||
};
|
||||
|
||||
|
||||
|
||||
MV_STATUS mvUsbInit(int dev, MV_BOOL isHost)
|
||||
{
|
||||
MV_STATUS status;
|
||||
|
||||
status = mvUsbWinInit(dev);
|
||||
if(status != MV_OK)
|
||||
return status;
|
||||
|
||||
return mvUsbHalInit(dev, isHost);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* usbWinOverlapDetect - Detect USB address windows overlapping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviur is expected in case USB address decode
|
||||
* windows overlapps.
|
||||
* This function detects USB address decode windows overlapping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlapping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS usbWinOverlapDetect(int dev, MV_U32 winNum,
|
||||
MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 winNumIndex;
|
||||
MV_DEC_WIN addrDecWin;
|
||||
|
||||
for(winNumIndex=0; winNumIndex<MV_USB_MAX_ADDR_DECODE_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvUsbWinGet(dev, winNumIndex, &addrDecWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. TargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if(addrDecWin.enable == MV_FALSE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvUsbWinSet - Set USB target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window, also known as address decode window.
|
||||
* After setting this target window, the USB will be able to access the
|
||||
* target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - USB target address decode window number.
|
||||
* pAddrDecWin - USB target window data structure.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if address window overlapps with other address decode windows.
|
||||
* MV_BAD_PARAM if base address is invalid parameter or target is
|
||||
* unknown.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvUsbWinSet(int dev, MV_U32 winNum, MV_DEC_WIN *pDecWin)
|
||||
{
|
||||
MV_DEC_WIN_PARAMS winParams;
|
||||
MV_U32 sizeReg, baseReg;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_USB_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Invalid win num %d\n",__FUNCTION__, winNum);
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
/* Check if the requested window overlapps with current windows */
|
||||
if (MV_TRUE == usbWinOverlapDetect(dev, winNum, &pDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Window %d overlap\n", __FUNCTION__, winNum);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* check if address is aligned to the size */
|
||||
if(MV_IS_NOT_ALIGN(pDecWin->addrWin.baseLow, pDecWin->addrWin.size))
|
||||
{
|
||||
mvOsPrintf("mvUsbWinSet:Error setting USB window %d to "\
|
||||
"target %s.\nAddress 0x%08x is unaligned to size 0x%x.\n",
|
||||
winNum,
|
||||
mvCtrlTargetNameGet(pDecWin->target),
|
||||
pDecWin->addrWin.baseLow,
|
||||
pDecWin->addrWin.size);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if(MV_OK != mvCtrlAddrDecToParams(pDecWin, &winParams))
|
||||
{
|
||||
mvOsPrintf("%s: mvCtrlAddrDecToParams Failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* set Size, Attributes and TargetID */
|
||||
sizeReg = (((winParams.targetId << MV_USB_WIN_TARGET_OFFSET) & MV_USB_WIN_TARGET_MASK) |
|
||||
((winParams.attrib << MV_USB_WIN_ATTR_OFFSET) & MV_USB_WIN_ATTR_MASK) |
|
||||
((winParams.size << MV_USB_WIN_SIZE_OFFSET) & MV_USB_WIN_SIZE_MASK));
|
||||
|
||||
#if defined(MV645xx) || defined(MV646xx)
|
||||
/* If window is DRAM with HW cache coherency, make sure bit2 is set */
|
||||
sizeReg &= ~MV_USB_WIN_BURST_WR_LIMIT_MASK;
|
||||
|
||||
if((MV_TARGET_IS_DRAM(pDecWin->target)) &&
|
||||
(pDecWin->addrWinAttr.cachePolicy != NO_COHERENCY))
|
||||
{
|
||||
sizeReg |= MV_USB_WIN_BURST_WR_32BIT_LIMIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
sizeReg |= MV_USB_WIN_BURST_WR_NO_LIMIT;
|
||||
}
|
||||
#endif /* MV645xx || MV646xx */
|
||||
|
||||
if (pDecWin->enable == MV_TRUE)
|
||||
{
|
||||
sizeReg |= MV_USB_WIN_ENABLE_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
sizeReg &= ~MV_USB_WIN_ENABLE_MASK;
|
||||
}
|
||||
|
||||
/* Update Base value */
|
||||
baseReg = (winParams.baseAddr & MV_USB_WIN_BASE_MASK);
|
||||
|
||||
MV_REG_WRITE( MV_USB_WIN_CTRL_REG(dev, winNum), sizeReg);
|
||||
MV_REG_WRITE( MV_USB_WIN_BASE_REG(dev, winNum), baseReg);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvUsbWinGet - Get USB peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get USB peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - USB target address decode window number.
|
||||
*
|
||||
* OUTPUT:
|
||||
* pDecWin - USB target window data structure.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvUsbWinGet(int dev, MV_U32 winNum, MV_DEC_WIN *pDecWin)
|
||||
{
|
||||
MV_DEC_WIN_PARAMS winParam;
|
||||
MV_U32 sizeReg, baseReg;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= MV_USB_MAX_ADDR_DECODE_WIN)
|
||||
{
|
||||
mvOsPrintf("%s (dev=%d): ERR. Invalid winNum %d\n",
|
||||
__FUNCTION__, dev, winNum);
|
||||
return MV_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
baseReg = MV_REG_READ( MV_USB_WIN_BASE_REG(dev, winNum) );
|
||||
sizeReg = MV_REG_READ( MV_USB_WIN_CTRL_REG(dev, winNum) );
|
||||
|
||||
/* Check if window is enabled */
|
||||
if(sizeReg & MV_USB_WIN_ENABLE_MASK)
|
||||
{
|
||||
pDecWin->enable = MV_TRUE;
|
||||
|
||||
/* Extract window parameters from registers */
|
||||
winParam.targetId = (sizeReg & MV_USB_WIN_TARGET_MASK) >> MV_USB_WIN_TARGET_OFFSET;
|
||||
winParam.attrib = (sizeReg & MV_USB_WIN_ATTR_MASK) >> MV_USB_WIN_ATTR_OFFSET;
|
||||
winParam.size = (sizeReg & MV_USB_WIN_SIZE_MASK) >> MV_USB_WIN_SIZE_OFFSET;
|
||||
winParam.baseAddr = (baseReg & MV_USB_WIN_BASE_MASK);
|
||||
|
||||
/* Translate the decode window parameters to address decode struct */
|
||||
if (MV_OK != mvCtrlParamsToAddrDec(&winParam, pDecWin))
|
||||
{
|
||||
mvOsPrintf("Failed to translate register parameters to USB address" \
|
||||
" decode window structure\n");
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pDecWin->enable = MV_FALSE;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvUsbWinInit -
|
||||
*
|
||||
* INPUT:
|
||||
*
|
||||
* OUTPUT:
|
||||
*
|
||||
* RETURN:
|
||||
* MV_ERROR if register parameters are invalid.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvUsbWinInit(int dev)
|
||||
{
|
||||
MV_STATUS status;
|
||||
MV_DEC_WIN usbWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
int winNum;
|
||||
MV_U32 winPrioIndex = 0;
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum = 0; winNum < MV_USB_MAX_ADDR_DECODE_WIN; winNum++)
|
||||
{
|
||||
MV_REG_BIT_RESET(MV_USB_WIN_CTRL_REG(dev, winNum), MV_USB_WIN_ENABLE_MASK);
|
||||
}
|
||||
|
||||
/* Go through all windows in user table until table terminator */
|
||||
winNum = 0;
|
||||
while( (usbAddrDecPrioTab[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < MV_USB_MAX_ADDR_DECODE_WIN) )
|
||||
{
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(usbAddrDecPrioTab[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if(MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. mvCpuIfTargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
usbWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
usbWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
usbWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
usbWin.enable = MV_TRUE;
|
||||
usbWin.target = usbAddrDecPrioTab[winPrioIndex];
|
||||
|
||||
#if defined(MV645xx) || defined(MV646xx)
|
||||
/* Get the default attributes for that target window */
|
||||
mvCtrlDefAttribGet(usbWin.target, &usbWin.addrWinAttr);
|
||||
#endif /* MV645xx || MV646xx */
|
||||
|
||||
if(MV_OK != mvUsbWinSet(dev, winNum, &usbWin))
|
||||
{
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex++;
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvUsbAddrDecShow - Print the USB address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the USB address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvUsbAddrDecShow(MV_VOID)
|
||||
{
|
||||
MV_DEC_WIN addrDecWin;
|
||||
int i, winNum;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "USB:\n" );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for(i=0; i<mvCtrlUsbMaxGet(); i++)
|
||||
{
|
||||
mvOsOutput( "Device %d:\n", i);
|
||||
|
||||
for(winNum = 0; winNum < MV_USB_MAX_ADDR_DECODE_WIN; winNum++)
|
||||
{
|
||||
memset(&addrDecWin, 0, sizeof(MV_DEC_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", winNum );
|
||||
|
||||
if( mvUsbWinGet(i, winNum, &addrDecWin ) == MV_OK )
|
||||
{
|
||||
if( addrDecWin.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %08x, ",
|
||||
mvCtrlTargetNameGet(addrDecWin.target), addrDecWin.addrWin.baseLow );
|
||||
|
||||
mvSizePrint( addrDecWin.addrWin.size );
|
||||
|
||||
#if defined(MV645xx) || defined(MV646xx)
|
||||
switch( addrDecWin.addrWinAttr.swapType)
|
||||
{
|
||||
case MV_BYTE_SWAP:
|
||||
mvOsOutput( "BYTE_SWAP, " );
|
||||
break;
|
||||
case MV_NO_SWAP:
|
||||
mvOsOutput( "NO_SWAP , " );
|
||||
break;
|
||||
case MV_BYTE_WORD_SWAP:
|
||||
mvOsOutput( "BYTE_WORD_SWAP, " );
|
||||
break;
|
||||
case MV_WORD_SWAP:
|
||||
mvOsOutput( "WORD_SWAP, " );
|
||||
break;
|
||||
default:
|
||||
mvOsOutput( "SWAP N/A , " );
|
||||
}
|
||||
|
||||
switch( addrDecWin.addrWinAttr.cachePolicy )
|
||||
{
|
||||
case NO_COHERENCY:
|
||||
mvOsOutput( "NO_COHERENCY , " );
|
||||
break;
|
||||
case WT_COHERENCY:
|
||||
mvOsOutput( "WT_COHERENCY , " );
|
||||
break;
|
||||
case WB_COHERENCY:
|
||||
mvOsOutput( "WB_COHERENCY , " );
|
||||
break;
|
||||
default:
|
||||
mvOsOutput( "COHERENCY N/A, " );
|
||||
}
|
||||
|
||||
switch( addrDecWin.addrWinAttr.pcixNoSnoop )
|
||||
{
|
||||
case 0:
|
||||
mvOsOutput( "PCI-X NS inactive, " );
|
||||
break;
|
||||
case 1:
|
||||
mvOsOutput( "PCI-X NS active , " );
|
||||
break;
|
||||
default:
|
||||
mvOsOutput( "PCI-X NS N/A , " );
|
||||
}
|
||||
|
||||
switch( addrDecWin.addrWinAttr.p2pReq64 )
|
||||
{
|
||||
case 0:
|
||||
mvOsOutput( "REQ64 force" );
|
||||
break;
|
||||
case 1:
|
||||
mvOsOutput( "REQ64 detect" );
|
||||
break;
|
||||
default:
|
||||
mvOsOutput( "REQ64 N/A" );
|
||||
}
|
||||
#endif /* MV645xx || MV646xx */
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvSysUsbh
|
||||
#define __INCmvSysUsbh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* includes */
|
||||
#include "usb/mvUsb.h"
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
#define MV_USB_MAX_ADDR_DECODE_WIN 4
|
||||
|
||||
/*******************************************/
|
||||
/* USB Bridge Registers */
|
||||
/*******************************************/
|
||||
#define MV_USB_BRIDGE_CTRL_REG(dev) (USB_REG_BASE(dev) + 0x300)
|
||||
|
||||
#define MV_USB_WIN_CTRL_REG(dev, win) (USB_REG_BASE(dev) + 0x320 + ((win)<<4))
|
||||
#define MV_USB_WIN_BASE_REG(dev, win) (USB_REG_BASE(dev) + 0x324 + ((win)<<4))
|
||||
|
||||
/* BITs in Windows 0-3 Control and Base Registers */
|
||||
#define MV_USB_WIN_ENABLE_BIT 0
|
||||
#define MV_USB_WIN_ENABLE_MASK (1 << MV_USB_WIN_ENABLE_BIT)
|
||||
|
||||
#define MV_USB_WIN_BURST_WR_LIMIT_BIT 1
|
||||
#define MV_USB_WIN_BURST_WR_LIMIT_MASK (1 << MV_USB_WIN_BURST_WR_LIMIT_BIT)
|
||||
#define MV_USB_WIN_BURST_WR_NO_LIMIT (0 << MV_USB_WIN_BURST_WR_LIMIT_BIT)
|
||||
#define MV_USB_WIN_BURST_WR_32BIT_LIMIT (1 << MV_USB_WIN_BURST_WR_LIMIT_BIT)
|
||||
|
||||
#define MV_USB_WIN_TARGET_OFFSET 4
|
||||
#define MV_USB_WIN_TARGET_MASK (0xF << MV_USB_WIN_TARGET_OFFSET)
|
||||
|
||||
#define MV_USB_WIN_ATTR_OFFSET 8
|
||||
#define MV_USB_WIN_ATTR_MASK (0xFF << MV_USB_WIN_ATTR_OFFSET)
|
||||
|
||||
#define MV_USB_WIN_SIZE_OFFSET 16
|
||||
#define MV_USB_WIN_SIZE_MASK (0xFFFF << MV_USB_WIN_SIZE_OFFSET)
|
||||
|
||||
#define MV_USB_WIN_BASE_OFFSET 16
|
||||
#define MV_USB_WIN_BASE_MASK (0xFFFF << MV_USB_WIN_BASE_OFFSET)
|
||||
|
||||
|
||||
#define MV_USB_BRIDGE_IPG_REG(dev) (USB_REG_BASE(dev) + 0x360)
|
||||
|
||||
|
||||
MV_STATUS mvUsbInit(int dev, MV_BOOL isHost);
|
||||
|
||||
MV_STATUS mvUsbWinInit(int dev);
|
||||
MV_STATUS mvUsbWinSet(int dev, MV_U32 winNum, MV_DEC_WIN *pAddrWin);
|
||||
MV_STATUS mvUsbWinGet(int dev, MV_U32 winNum, MV_DEC_WIN *pAddrWin);
|
||||
|
||||
void mvUsbAddrDecShow(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __INCmvUsbh */
|
||||
@@ -0,0 +1,662 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "xor/mvXor.h"
|
||||
#include "mvSysXor.h"
|
||||
|
||||
/* defines */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
|
||||
static MV_STATUS xorWinOverlapDetect(MV_U32 unit,MV_U32 winNum, MV_ADDR_WIN *pAddrWin);
|
||||
|
||||
MV_TARGET xorAddrDecPrioTap[] =
|
||||
{
|
||||
#if defined(MV_INCLUDE_DEVICE_CS0)
|
||||
DEVICE_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_PEX)
|
||||
PEX0_MEM,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS0)
|
||||
SDRAM_CS0,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS1)
|
||||
SDRAM_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS2)
|
||||
SDRAM_CS2,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_SDRAM_CS3)
|
||||
SDRAM_CS3,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS1)
|
||||
DEVICE_CS1,
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_CESA)
|
||||
CRYPT_ENG,
|
||||
#endif
|
||||
TBL_TERM
|
||||
};
|
||||
static MV_STATUS mvXorInitWinsUnit (MV_U32 unit)
|
||||
{
|
||||
MV_U32 winNum;
|
||||
MV_XOR_DEC_WIN addrDecWin;
|
||||
MV_CPU_DEC_WIN cpuAddrDecWin;
|
||||
MV_U32 status;
|
||||
MV_U32 winPrioIndex=0;
|
||||
|
||||
/* Initiate XOR address decode */
|
||||
|
||||
/* First disable all address decode windows */
|
||||
for(winNum = 0; winNum < XOR_MAX_ADDR_DEC_WIN; winNum++)
|
||||
{
|
||||
mvXorTargetWinEnable(unit,winNum, MV_FALSE);
|
||||
}
|
||||
|
||||
/* Go through all windows in user table until table terminator */
|
||||
for (winNum = 0; ((xorAddrDecPrioTap[winPrioIndex] != TBL_TERM) &&
|
||||
(winNum < XOR_MAX_ADDR_DEC_WIN));)
|
||||
{
|
||||
/* first get attributes from CPU If */
|
||||
status = mvCpuIfTargetWinGet(xorAddrDecPrioTap[winPrioIndex],
|
||||
&cpuAddrDecWin);
|
||||
|
||||
if(MV_NO_SUCH == status)
|
||||
{
|
||||
winPrioIndex++;
|
||||
continue;
|
||||
}
|
||||
if (MV_OK != status)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. mvCpuIfTargetWinGet failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
|
||||
if (cpuAddrDecWin.enable == MV_TRUE)
|
||||
{
|
||||
|
||||
addrDecWin.target = xorAddrDecPrioTap[winPrioIndex];
|
||||
addrDecWin.addrWin.baseLow = cpuAddrDecWin.addrWin.baseLow;
|
||||
addrDecWin.addrWin.baseHigh = cpuAddrDecWin.addrWin.baseHigh;
|
||||
addrDecWin.addrWin.size = cpuAddrDecWin.addrWin.size;
|
||||
addrDecWin.enable = MV_TRUE;
|
||||
|
||||
if (MV_OK != mvXorTargetWinSet(unit,winNum, &addrDecWin))
|
||||
{
|
||||
DB(mvOsPrintf("mvXorInit: ERR. mvDmaTargetWinSet failed\n"));
|
||||
return MV_ERROR;
|
||||
}
|
||||
winNum++;
|
||||
}
|
||||
winPrioIndex++;
|
||||
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorInit - Initialize XOR engine
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function initialize XOR unit. It set the default address decode
|
||||
* windows of the unit.
|
||||
* Note that if the address window is disabled in xorAddrDecMap, the
|
||||
* window parameters will be set but the window will remain disabled.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvXorInit (MV_VOID)
|
||||
{
|
||||
MV_U32 i;
|
||||
|
||||
/* Initiate XOR address decode */
|
||||
for(i = 0; i < MV_XOR_MAX_UNIT; i++)
|
||||
mvXorInitWinsUnit(i);
|
||||
|
||||
mvXorHalInit(MV_XOR_MAX_CHAN);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorTargetWinSet - Set XOR target address window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
|
||||
* address window. After setting this target window, the XOR will be
|
||||
* able to access the target within the address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - One of the possible XOR memory decode windows.
|
||||
* target - Peripheral target enumerator.
|
||||
* base - Window base address.
|
||||
* size - Window size.
|
||||
* enable - Window enable/disable.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvXorTargetWinSet(MV_U32 unit, MV_U32 winNum, MV_XOR_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS xorDecRegs;
|
||||
MV_TARGET_ATTRIB targetAttribs;
|
||||
MV_U32 chan;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= XOR_MAX_ADDR_DEC_WIN)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid win num %d\n",__FUNCTION__, winNum));
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
if (pAddrDecWin == NULL)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. pAddrDecWin is NULL pointer\n", __FUNCTION__ ));
|
||||
return MV_BAD_PTR;
|
||||
}
|
||||
/* Check if the requested window overlaps with current windows */
|
||||
if (MV_TRUE == xorWinOverlapDetect(unit, winNum, &pAddrDecWin->addrWin))
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Window %d overlap\n",__FUNCTION__,winNum));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
xorDecRegs.baseReg = MV_REG_READ(XOR_BASE_ADDR_REG(unit,winNum));
|
||||
xorDecRegs.sizeReg = MV_REG_READ(XOR_SIZE_MASK_REG(unit,winNum));
|
||||
|
||||
/* Get Base Address and size registers values */
|
||||
if(MV_OK != mvCtrlAddrDecToReg(&pAddrDecWin->addrWin, &xorDecRegs))
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid addr dec window\n",__FUNCTION__));
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
|
||||
mvCtrlAttribGet(pAddrDecWin->target,&targetAttribs);
|
||||
|
||||
/* set attributes */
|
||||
xorDecRegs.baseReg &= ~XEBARX_ATTR_MASK;
|
||||
xorDecRegs.baseReg |= targetAttribs.attrib << XEBARX_ATTR_OFFS;
|
||||
/* set target ID */
|
||||
xorDecRegs.baseReg &= ~XEBARX_TARGET_MASK;
|
||||
xorDecRegs.baseReg |= targetAttribs.targetId << XEBARX_TARGET_OFFS;
|
||||
|
||||
|
||||
/* Write to address decode Base Address Register */
|
||||
MV_REG_WRITE(XOR_BASE_ADDR_REG(unit,winNum), xorDecRegs.baseReg);
|
||||
|
||||
/* Write to Size Register */
|
||||
MV_REG_WRITE(XOR_SIZE_MASK_REG(unit,winNum), xorDecRegs.sizeReg);
|
||||
|
||||
for (chan = 0; chan < MV_XOR_MAX_CHAN_PER_UNIT; chan++)
|
||||
{
|
||||
if (pAddrDecWin->enable)
|
||||
{
|
||||
MV_REG_BIT_SET(XOR_WINDOW_CTRL_REG(unit,chan),
|
||||
XEXWCR_WIN_EN_MASK(winNum));
|
||||
}
|
||||
else
|
||||
{
|
||||
MV_REG_BIT_RESET(XOR_WINDOW_CTRL_REG(unit,chan),
|
||||
XEXWCR_WIN_EN_MASK(winNum));
|
||||
}
|
||||
}
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorTargetWinGet - Get xor peripheral target address window.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get xor peripheral target address window.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - One of the possible XOR memory decode windows.
|
||||
*
|
||||
* OUTPUT:
|
||||
* base - Window base address.
|
||||
* size - Window size.
|
||||
* enable - window enable/disable.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvXorTargetWinGet(MV_U32 unit,MV_U32 winNum, MV_XOR_DEC_WIN *pAddrDecWin)
|
||||
{
|
||||
MV_DEC_REGS xorDecRegs;
|
||||
MV_TARGET_ATTRIB targetAttrib;
|
||||
MV_U32 chan=0,chanWinEn;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= XOR_MAX_ADDR_DEC_WIN)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid win num %d\n",__FUNCTION__ , winNum));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (NULL == pAddrDecWin)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. pAddrDecWin is NULL pointer\n", __FUNCTION__ ));
|
||||
return MV_BAD_PTR;
|
||||
}
|
||||
|
||||
chanWinEn = MV_REG_READ(XOR_WINDOW_CTRL_REG(unit,0)) & XEXWCR_WIN_EN_MASK(winNum);
|
||||
|
||||
for (chan = 0; chan < MV_XOR_MAX_CHAN_PER_UNIT; chan++) /* we should scan here all channels per unit */
|
||||
{
|
||||
/* Check if enable bit is equal for all channels */
|
||||
if ((MV_REG_READ(XOR_WINDOW_CTRL_REG(unit,chan)) &
|
||||
XEXWCR_WIN_EN_MASK(winNum)) != chanWinEn)
|
||||
{
|
||||
mvOsPrintf("%s: ERR. Window enable field must be equal in "
|
||||
"all channels(chan=%d)\n",__FUNCTION__, chan);
|
||||
return MV_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
xorDecRegs.baseReg = MV_REG_READ(XOR_BASE_ADDR_REG(unit,winNum));
|
||||
xorDecRegs.sizeReg = MV_REG_READ(XOR_SIZE_MASK_REG(unit,winNum));
|
||||
|
||||
if (MV_OK != mvCtrlRegToAddrDec(&xorDecRegs, &pAddrDecWin->addrWin))
|
||||
{
|
||||
mvOsPrintf("%s: ERR. mvCtrlRegToAddrDec failed\n", __FUNCTION__);
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* attrib and targetId */
|
||||
targetAttrib.attrib =
|
||||
(xorDecRegs.baseReg & XEBARX_ATTR_MASK) >> XEBARX_ATTR_OFFS;
|
||||
targetAttrib.targetId =
|
||||
(xorDecRegs.baseReg & XEBARX_TARGET_MASK) >> XEBARX_TARGET_OFFS;
|
||||
|
||||
|
||||
pAddrDecWin->target = mvCtrlTargetGet(&targetAttrib);
|
||||
|
||||
if(chanWinEn)
|
||||
{
|
||||
pAddrDecWin->enable = MV_TRUE;
|
||||
}
|
||||
else pAddrDecWin->enable = MV_FALSE;
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorTargetWinEnable - Enable/disable a Xor address decode window
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function enable/disable a XOR address decode window.
|
||||
* if parameter 'enable' == MV_TRUE the routine will enable the
|
||||
* window, thus enabling XOR accesses (before enabling the window it is
|
||||
* tested for overlapping). Otherwise, the window will be disabled.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - Decode window number.
|
||||
* enable - Enable/disable parameter.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvXorTargetWinEnable(MV_U32 unit,MV_U32 winNum, MV_BOOL enable)
|
||||
{
|
||||
MV_XOR_DEC_WIN addrDecWin;
|
||||
MV_U32 chan;
|
||||
|
||||
/* Parameter checking */
|
||||
if (winNum >= XOR_MAX_ADDR_DEC_WIN)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid winNum%d\n", __FUNCTION__, winNum));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (enable == MV_TRUE)
|
||||
{
|
||||
/* Get current window */
|
||||
if (MV_OK != mvXorTargetWinGet(unit,winNum, &addrDecWin))
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. targetWinGet fail\n", __FUNCTION__));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* Check for overlapping */
|
||||
if (MV_TRUE == xorWinOverlapDetect(unit,winNum, &(addrDecWin.addrWin)))
|
||||
{
|
||||
/* Overlap detected */
|
||||
DB(mvOsPrintf("%s: ERR. Overlap detected\n", __FUNCTION__));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
/* No Overlap. Enable address decode target window */
|
||||
for (chan = 0; chan < MV_XOR_MAX_CHAN_PER_UNIT; chan++)
|
||||
{
|
||||
MV_REG_BIT_SET(XOR_WINDOW_CTRL_REG(unit,chan),
|
||||
XEXWCR_WIN_EN_MASK(winNum));
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Disable address decode target window */
|
||||
|
||||
for (chan = 0; chan < MV_XOR_MAX_CHAN_PER_UNIT; chan++)
|
||||
{
|
||||
MV_REG_BIT_RESET(XOR_WINDOW_CTRL_REG(unit,chan),
|
||||
XEXWCR_WIN_EN_MASK(winNum));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorSetProtWinSet - Configure access attributes of a XOR engine
|
||||
* to one of the XOR memory windows.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Each engine can be configured with access attributes for each of the
|
||||
* memory spaces. This function sets access attributes
|
||||
* to a given window for the given engine
|
||||
*
|
||||
* INPUTS:
|
||||
* chan - One of the possible engines.
|
||||
* winNum - One of the possible XOR memory spaces.
|
||||
* access - Protection access rights.
|
||||
* write - Write rights.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvXorProtWinSet (MV_U32 unit,MV_U32 chan, MV_U32 winNum, MV_BOOL access,
|
||||
MV_BOOL write)
|
||||
{
|
||||
MV_U32 temp;
|
||||
|
||||
/* Parameter checking */
|
||||
if (chan >= MV_XOR_MAX_CHAN_PER_UNIT)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid chan num %d\n", __FUNCTION__ , chan));
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
if (winNum >= XOR_MAX_ADDR_DEC_WIN)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid win num %d\n", __FUNCTION__, winNum));
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
temp = MV_REG_READ(XOR_WINDOW_CTRL_REG(unit,chan)) &
|
||||
(~XEXWCR_WIN_ACC_MASK(winNum));
|
||||
|
||||
/* if access is disable */
|
||||
if (!access)
|
||||
{
|
||||
/* disable access */
|
||||
temp |= XEXWCR_WIN_ACC_NO_ACC(winNum);
|
||||
}
|
||||
/* if access is enable */
|
||||
else
|
||||
{
|
||||
/* if write is enable */
|
||||
if (write)
|
||||
{
|
||||
/* enable write */
|
||||
temp |= XEXWCR_WIN_ACC_RW(winNum);
|
||||
}
|
||||
/* if write is disable */
|
||||
else
|
||||
{
|
||||
/* disable write */
|
||||
temp |= XEXWCR_WIN_ACC_RO(winNum);
|
||||
}
|
||||
}
|
||||
MV_REG_WRITE(XOR_WINDOW_CTRL_REG(unit,chan),temp);
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorPciRemap - Set XOR remap register for PCI address windows.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* only Windows 0-3 can be remapped.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - window number
|
||||
* pAddrDecWin - pointer to address space window structure
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvXorPciRemap(MV_U32 unit,MV_U32 winNum, MV_U32 addrHigh)
|
||||
{
|
||||
/* Parameter checking */
|
||||
if (winNum >= XOR_MAX_REMAP_WIN)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. Invalid win num %d\n", __FUNCTION__, winNum));
|
||||
return MV_BAD_PARAM;
|
||||
}
|
||||
|
||||
MV_REG_WRITE(XOR_HIGH_ADDR_REMAP_REG(unit,winNum), addrHigh);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* xorWinOverlapDetect - Detect XOR address windows overlaping
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* An unpredicted behaviour is expected in case XOR address decode
|
||||
* windows overlaps.
|
||||
* This function detects XOR address decode windows overlaping of a
|
||||
* specified window. The function does not check the window itself for
|
||||
* overlaping. The function also skipps disabled address decode windows.
|
||||
*
|
||||
* INPUT:
|
||||
* winNum - address decode window number.
|
||||
* pAddrDecWin - An address decode window struct.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_TRUE if the given address window overlap current address
|
||||
* decode map, MV_FALSE otherwise, MV_ERROR if reading invalid data
|
||||
* from registers.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static MV_STATUS xorWinOverlapDetect(MV_U32 unit,MV_U32 winNum, MV_ADDR_WIN *pAddrWin)
|
||||
{
|
||||
MV_U32 baseAddrEnableReg;
|
||||
MV_U32 winNumIndex,chan;
|
||||
MV_XOR_DEC_WIN addrDecWin;
|
||||
|
||||
if (pAddrWin == NULL)
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. pAddrWin is NULL pointer\n", __FUNCTION__ ));
|
||||
return MV_BAD_PTR;
|
||||
}
|
||||
|
||||
for (chan = 0; chan < MV_XOR_MAX_CHAN_PER_UNIT; chan++)
|
||||
{
|
||||
/* Read base address enable register. Do not check disabled windows */
|
||||
baseAddrEnableReg = MV_REG_READ(XOR_WINDOW_CTRL_REG(unit,chan));
|
||||
|
||||
for (winNumIndex = 0; winNumIndex < XOR_MAX_ADDR_DEC_WIN; winNumIndex++)
|
||||
{
|
||||
/* Do not check window itself */
|
||||
if (winNumIndex == winNum)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Do not check disabled windows */
|
||||
if ((baseAddrEnableReg & XEXWCR_WIN_EN_MASK(winNumIndex)) == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get window parameters */
|
||||
if (MV_OK != mvXorTargetWinGet(unit,winNumIndex, &addrDecWin))
|
||||
{
|
||||
DB(mvOsPrintf("%s: ERR. TargetWinGet failed\n", __FUNCTION__ ));
|
||||
return MV_ERROR;
|
||||
}
|
||||
|
||||
if (MV_TRUE == ctrlWinOverlapTest(pAddrWin, &(addrDecWin.addrWin)))
|
||||
{
|
||||
return MV_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return MV_FALSE;
|
||||
}
|
||||
|
||||
static MV_VOID mvXorAddrDecShowUnit(MV_U32 unit)
|
||||
{
|
||||
MV_XOR_DEC_WIN win;
|
||||
int i;
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
mvOsOutput( "XOR %d:\n", unit );
|
||||
mvOsOutput( "----\n" );
|
||||
|
||||
for( i = 0; i < XOR_MAX_ADDR_DEC_WIN; i++ )
|
||||
{
|
||||
memset( &win, 0, sizeof(MV_XOR_DEC_WIN) );
|
||||
|
||||
mvOsOutput( "win%d - ", i );
|
||||
|
||||
if( mvXorTargetWinGet(unit, i, &win ) == MV_OK )
|
||||
{
|
||||
if( win.enable )
|
||||
{
|
||||
mvOsOutput( "%s base %x, ",
|
||||
mvCtrlTargetNameGet(win.target), win.addrWin.baseLow );
|
||||
|
||||
mvSizePrint( win.addrWin.size );
|
||||
|
||||
mvOsOutput( "\n" );
|
||||
}
|
||||
else
|
||||
mvOsOutput( "disable\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvXorAddrDecShow - Print the XOR address decode map.
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function print the XOR address decode map.
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_VOID mvXorAddrDecShow(MV_VOID)
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < MV_XOR_MAX_UNIT; i++ )
|
||||
mvXorAddrDecShowUnit(i);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCMVSysXorh
|
||||
#define __INCMVSysXorh
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "ctrlEnv/sys/mvCpuIf.h"
|
||||
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "ctrlEnv/mvCtrlEnvAddrDec.h"
|
||||
|
||||
#define XOR_MAX_ADDR_DEC_WIN 8 /* Maximum address decode windows */
|
||||
#define XOR_MAX_REMAP_WIN 4 /* Maximum address arbiter windows */
|
||||
|
||||
/* XOR Engine Address Decoding Register Map */
|
||||
#define XOR_WINDOW_CTRL_REG(unit,chan) (XOR_UNIT_BASE(unit)+(0x240 + ((chan) * 4)))
|
||||
#define XOR_BASE_ADDR_REG(unit,winNum) (XOR_UNIT_BASE(unit)+(0x250 + ((winNum) * 4)))
|
||||
#define XOR_SIZE_MASK_REG(unit,winNum) (XOR_UNIT_BASE(unit)+(0x270 + ((winNum) * 4)))
|
||||
#define XOR_HIGH_ADDR_REMAP_REG(unit,winNum) (XOR_UNIT_BASE(unit)+(0x290 + ((winNum) * 4)))
|
||||
|
||||
/* XOR Engine [0..1] Window Control Registers (XExWCR) */
|
||||
#define XEXWCR_WIN_EN_OFFS(winNum) (winNum)
|
||||
#define XEXWCR_WIN_EN_MASK(winNum) (1 << (XEXWCR_WIN_EN_OFFS(winNum)))
|
||||
#define XEXWCR_WIN_EN_ENABLE(winNum) (1 << (XEXWCR_WIN_EN_OFFS(winNum)))
|
||||
#define XEXWCR_WIN_EN_DISABLE(winNum) (0 << (XEXWCR_WIN_EN_OFFS(winNum)))
|
||||
|
||||
#define XEXWCR_WIN_ACC_OFFS(winNum) ((2 * winNum) + 16)
|
||||
#define XEXWCR_WIN_ACC_MASK(winNum) (3 << (XEXWCR_WIN_ACC_OFFS(winNum)))
|
||||
#define XEXWCR_WIN_ACC_NO_ACC(winNum) (0 << (XEXWCR_WIN_ACC_OFFS(winNum)))
|
||||
#define XEXWCR_WIN_ACC_RO(winNum) (1 << (XEXWCR_WIN_ACC_OFFS(winNum)))
|
||||
#define XEXWCR_WIN_ACC_RW(winNum) (3 << (XEXWCR_WIN_ACC_OFFS(winNum)))
|
||||
|
||||
/* XOR Engine Base Address Registers (XEBARx) */
|
||||
#define XEBARX_TARGET_OFFS (0)
|
||||
#define XEBARX_TARGET_MASK (0xF << XEBARX_TARGET_OFFS)
|
||||
#define XEBARX_ATTR_OFFS (8)
|
||||
#define XEBARX_ATTR_MASK (0xFF << XEBARX_ATTR_OFFS)
|
||||
#define XEBARX_BASE_OFFS (16)
|
||||
#define XEBARX_BASE_MASK (0xFFFF << XEBARX_BASE_OFFS)
|
||||
|
||||
/* XOR Engine Size Mask Registers (XESMRx) */
|
||||
#define XESMRX_SIZE_MASK_OFFS (16)
|
||||
#define XESMRX_SIZE_MASK_MASK (0xFFFF << XESMRX_SIZE_MASK_OFFS)
|
||||
|
||||
/* XOR Engine High Address Remap Register (XEHARRx1) */
|
||||
#define XEHARRX_REMAP_OFFS (0)
|
||||
#define XEHARRX_REMAP_MASK (0xFFFFFFFF << XEHARRX_REMAP_OFFS)
|
||||
|
||||
typedef struct _mvXorDecWin
|
||||
{
|
||||
MV_TARGET target;
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
|
||||
}MV_XOR_DEC_WIN;
|
||||
|
||||
MV_STATUS mvXorInit (MV_VOID);
|
||||
MV_STATUS mvXorTargetWinSet(MV_U32 unit, MV_U32 winNum,
|
||||
MV_XOR_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvXorTargetWinGet(MV_U32 unit, MV_U32 winNum,
|
||||
MV_XOR_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvXorTargetWinEnable(MV_U32 unit,
|
||||
MV_U32 winNum, MV_BOOL enable);
|
||||
MV_STATUS mvXorProtWinSet (MV_U32 unit,MV_U32 chan, MV_U32 winNum, MV_BOOL access,
|
||||
MV_BOOL write);
|
||||
MV_STATUS mvXorPciRemap(MV_U32 unit, MV_U32 winNum, MV_U32 addrHigh);
|
||||
|
||||
MV_VOID mvXorAddrDecShow(MV_VOID);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,75 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "device/mvDevice.h"
|
||||
|
||||
/* defines */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDeviceH
|
||||
#define __INCmvDeviceH
|
||||
|
||||
#include "mvCommon.h"
|
||||
#include "mvOs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
#include "device/mvDeviceRegs.h"
|
||||
|
||||
|
||||
#endif /* #ifndef __INCmvDeviceH */
|
||||
@@ -0,0 +1,101 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDeviceRegsH
|
||||
#define __INCmvDeviceRegsH
|
||||
|
||||
#ifndef MV_ASMLANGUAGE
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
/* This enumerator describes the Marvell controller possible devices that */
|
||||
/* can be connected to its device interface. */
|
||||
typedef enum _mvDevice
|
||||
{
|
||||
#if defined(MV_INCLUDE_DEVICE_CS0)
|
||||
DEV_CS0 = 0, /* Device connected to dev CS[0] */
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS1)
|
||||
DEV_CS1 = 1, /* Device connected to dev CS[1] */
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS2)
|
||||
DEV_CS2 = 2, /* Device connected to dev CS[2] */
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS3)
|
||||
DEV_CS3 = 3, /* Device connected to dev CS[2] */
|
||||
#endif
|
||||
#if defined(MV_INCLUDE_DEVICE_CS4)
|
||||
DEV_CS4 = 4, /* Device connected to BOOT dev */
|
||||
#endif
|
||||
MV_DEV_MAX_CS = MV_DEVICE_MAX_CS
|
||||
}MV_DEVICE;
|
||||
|
||||
|
||||
#endif /* MV_ASMLANGUAGE */
|
||||
|
||||
|
||||
#define NAND_CTRL_REG 0x10470
|
||||
|
||||
#define NAND_ACTCEBOOT_BIT BIT1
|
||||
|
||||
|
||||
#endif /* #ifndef __INCmvDeviceRegsH */
|
||||
@@ -0,0 +1,211 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
*******************************************************************************/
|
||||
/*******************************************************************************
|
||||
* mvOsCpuArchLib.c - Marvell CPU architecture library
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This library introduce Marvell API for OS dependent CPU architecture
|
||||
* APIs. This library introduce single CPU architecture services APKI
|
||||
* cross OS.
|
||||
*
|
||||
* DEPENDENCIES:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
/* includes */
|
||||
#include <asm/processor.h>
|
||||
#include "mvOs.h"
|
||||
|
||||
static MV_U32 read_p15_c0 (void);
|
||||
|
||||
/* defines */
|
||||
#define ARM_ID_REVISION_OFFS 0
|
||||
#define ARM_ID_REVISION_MASK (0xf << ARM_ID_REVISION_OFFS)
|
||||
|
||||
#define ARM_ID_PART_NUM_OFFS 4
|
||||
#define ARM_ID_PART_NUM_MASK (0xfff << ARM_ID_PART_NUM_OFFS)
|
||||
|
||||
#define ARM_ID_ARCH_OFFS 16
|
||||
#define ARM_ID_ARCH_MASK (0xf << ARM_ID_ARCH_OFFS)
|
||||
|
||||
#define ARM_ID_VAR_OFFS 20
|
||||
#define ARM_ID_VAR_MASK (0xf << ARM_ID_VAR_OFFS)
|
||||
|
||||
#define ARM_ID_ASCII_OFFS 24
|
||||
#define ARM_ID_ASCII_MASK (0xff << ARM_ID_ASCII_OFFS)
|
||||
|
||||
|
||||
|
||||
void* mvOsIoCachedMalloc( void* osHandle, MV_U32 size, MV_ULONG* pPhyAddr,
|
||||
MV_U32 *memHandle)
|
||||
{
|
||||
void *p = kmalloc( size, GFP_KERNEL );
|
||||
*pPhyAddr = pci_map_single( osHandle, p, 0, PCI_DMA_BIDIRECTIONAL );
|
||||
return p;
|
||||
}
|
||||
void* mvOsIoUncachedMalloc( void* osHandle, MV_U32 size, MV_ULONG* pPhyAddr,
|
||||
MV_U32 *memHandle)
|
||||
{
|
||||
return pci_alloc_consistent( osHandle, size, (dma_addr_t *)pPhyAddr );
|
||||
}
|
||||
|
||||
void mvOsIoUncachedFree( void* osHandle, MV_U32 size, MV_ULONG phyAddr, void* pVirtAddr,
|
||||
MV_U32 memHandle)
|
||||
{
|
||||
return pci_free_consistent( osHandle, size, pVirtAddr, (dma_addr_t)phyAddr );
|
||||
}
|
||||
|
||||
void mvOsIoCachedFree( void* osHandle, MV_U32 size, MV_ULONG phyAddr, void* pVirtAddr,
|
||||
MV_U32 memHandle )
|
||||
{
|
||||
return kfree( pVirtAddr );
|
||||
}
|
||||
|
||||
int mvOsRand(void)
|
||||
{
|
||||
int rand;
|
||||
get_random_bytes(&rand, sizeof(rand) );
|
||||
return rand;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvOsCpuVerGet() -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit CPU Revision
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvOsCpuRevGet( MV_VOID )
|
||||
{
|
||||
return ((read_p15_c0() & ARM_ID_REVISION_MASK ) >> ARM_ID_REVISION_OFFS);
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvOsCpuPartGet() -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit CPU Part number
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvOsCpuPartGet( MV_VOID )
|
||||
{
|
||||
return ((read_p15_c0() & ARM_ID_PART_NUM_MASK ) >> ARM_ID_PART_NUM_OFFS);
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvOsCpuArchGet() -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit CPU Architicture number
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvOsCpuArchGet( MV_VOID )
|
||||
{
|
||||
return ((read_p15_c0() & ARM_ID_ARCH_MASK ) >> ARM_ID_ARCH_OFFS);
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvOsCpuVarGet() -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit CPU Variant number
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvOsCpuVarGet( MV_VOID )
|
||||
{
|
||||
return ((read_p15_c0() & ARM_ID_VAR_MASK ) >> ARM_ID_VAR_OFFS);
|
||||
}
|
||||
/*******************************************************************************
|
||||
* mvOsCpuAsciiGet() -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* INPUT:
|
||||
* None.
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* 32bit CPU Variant number
|
||||
*
|
||||
*******************************************************************************/
|
||||
MV_U32 mvOsCpuAsciiGet( MV_VOID )
|
||||
{
|
||||
return ((read_p15_c0() & ARM_ID_ASCII_MASK ) >> ARM_ID_ASCII_OFFS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
static unsigned long read_p15_c0 (void)
|
||||
*/
|
||||
/* read co-processor 15, register #0 (ID register) */
|
||||
static MV_U32 read_p15_c0 (void)
|
||||
{
|
||||
MV_U32 value;
|
||||
|
||||
__asm__ __volatile__(
|
||||
"mrc p15, 0, %0, c0, c0, 0 @ read control reg\n"
|
||||
: "=r" (value)
|
||||
:
|
||||
: "memory");
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,423 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
*******************************************************************************/
|
||||
#ifndef _MV_OS_LNX_H_
|
||||
#define _MV_OS_LNX_H_
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/* for kernel space */
|
||||
#include <linux/autoconf.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/hardirq.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
#include <linux/random.h>
|
||||
|
||||
#include "dbg-trace.h"
|
||||
|
||||
extern void mv_early_printk(char *fmt,...);
|
||||
|
||||
#define MV_ASM __asm__ __volatile__
|
||||
#define INLINE inline
|
||||
#define MV_TRC_REC TRC_REC
|
||||
#define mvOsPrintf printk
|
||||
#define mvOsEarlyPrintf mv_early_printk
|
||||
#define mvOsOutput printk
|
||||
#define mvOsSPrintf sprintf
|
||||
#define mvOsMalloc(_size_) kmalloc(_size_,GFP_ATOMIC)
|
||||
#define mvOsFree kfree
|
||||
#define mvOsMemcpy memcpy
|
||||
#define mvOsSleep(_mils_) mdelay(_mils_)
|
||||
#define mvOsTaskLock()
|
||||
#define mvOsTaskUnlock()
|
||||
#define strtol simple_strtoul
|
||||
#define mvOsDelay(x) mdelay(x)
|
||||
#define mvOsUDelay(x) udelay(x)
|
||||
#define mvCopyFromOs copy_from_user
|
||||
#define mvCopyToOs copy_to_user
|
||||
|
||||
|
||||
#include "mvTypes.h"
|
||||
#include "mvCommon.h"
|
||||
|
||||
#ifdef MV_NDEBUG
|
||||
#define mvOsAssert(cond)
|
||||
#else
|
||||
#define mvOsAssert(cond) { do { if(!(cond)) { BUG(); } }while(0); }
|
||||
#endif /* MV_NDEBUG */
|
||||
|
||||
#else /* __KERNEL__ */
|
||||
|
||||
/* for user space applications */
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#define INLINE inline
|
||||
#define mvOsPrintf printf
|
||||
#define mvOsOutput printf
|
||||
#define mvOsMalloc(_size_) malloc(_size_)
|
||||
#define mvOsFree free
|
||||
#define mvOsAssert(cond) assert(cond)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#define mvOsIoVirtToPhy(pDev, pVirtAddr) \
|
||||
pci_map_single( (pDev), (pVirtAddr), 0, PCI_DMA_BIDIRECTIONAL )
|
||||
|
||||
#define mvOsCacheClear(pDev, p, size ) \
|
||||
pci_map_single( (pDev), (p), (size), PCI_DMA_BIDIRECTIONAL)
|
||||
|
||||
#define mvOsCacheFlush(pDev, p, size ) \
|
||||
pci_map_single( (pDev), (p), (size), PCI_DMA_TODEVICE)
|
||||
|
||||
#define mvOsCacheInvalidate(pDev, p, size) \
|
||||
pci_map_single( (pDev), (p), (size), PCI_DMA_FROMDEVICE )
|
||||
|
||||
#define mvOsCacheUnmap(pDev, phys, size) \
|
||||
pci_unmap_single( (pDev), (dma_addr_t)(phys), (size), PCI_DMA_FROMDEVICE )
|
||||
|
||||
|
||||
#define CPU_PHY_MEM(x) (MV_U32)x
|
||||
#define CPU_MEMIO_CACHED_ADDR(x) (void*)x
|
||||
#define CPU_MEMIO_UNCACHED_ADDR(x) (void*)x
|
||||
|
||||
|
||||
/* CPU architecture dependent 32, 16, 8 bit read/write IO addresses */
|
||||
#define MV_MEMIO32_WRITE(addr, data) \
|
||||
((*((volatile unsigned int*)(addr))) = ((unsigned int)(data)))
|
||||
|
||||
#define MV_MEMIO32_READ(addr) \
|
||||
((*((volatile unsigned int*)(addr))))
|
||||
|
||||
#define MV_MEMIO16_WRITE(addr, data) \
|
||||
((*((volatile unsigned short*)(addr))) = ((unsigned short)(data)))
|
||||
|
||||
#define MV_MEMIO16_READ(addr) \
|
||||
((*((volatile unsigned short*)(addr))))
|
||||
|
||||
#define MV_MEMIO8_WRITE(addr, data) \
|
||||
((*((volatile unsigned char*)(addr))) = ((unsigned char)(data)))
|
||||
|
||||
#define MV_MEMIO8_READ(addr) \
|
||||
((*((volatile unsigned char*)(addr))))
|
||||
|
||||
|
||||
/* No Fast Swap implementation (in assembler) for ARM */
|
||||
#define MV_32BIT_LE_FAST(val) MV_32BIT_LE(val)
|
||||
#define MV_16BIT_LE_FAST(val) MV_16BIT_LE(val)
|
||||
#define MV_32BIT_BE_FAST(val) MV_32BIT_BE(val)
|
||||
#define MV_16BIT_BE_FAST(val) MV_16BIT_BE(val)
|
||||
|
||||
/* 32 and 16 bit read/write in big/little endian mode */
|
||||
|
||||
/* 16bit write in little endian mode */
|
||||
#define MV_MEMIO_LE16_WRITE(addr, data) \
|
||||
MV_MEMIO16_WRITE(addr, MV_16BIT_LE_FAST(data))
|
||||
|
||||
/* 16bit read in little endian mode */
|
||||
static __inline MV_U16 MV_MEMIO_LE16_READ(MV_U32 addr)
|
||||
{
|
||||
MV_U16 data;
|
||||
|
||||
data= (MV_U16)MV_MEMIO16_READ(addr);
|
||||
|
||||
return (MV_U16)MV_16BIT_LE_FAST(data);
|
||||
}
|
||||
|
||||
/* 32bit write in little endian mode */
|
||||
#define MV_MEMIO_LE32_WRITE(addr, data) \
|
||||
MV_MEMIO32_WRITE(addr, MV_32BIT_LE_FAST(data))
|
||||
|
||||
/* 32bit read in little endian mode */
|
||||
static __inline MV_U32 MV_MEMIO_LE32_READ(MV_U32 addr)
|
||||
{
|
||||
MV_U32 data;
|
||||
|
||||
data= (MV_U32)MV_MEMIO32_READ(addr);
|
||||
|
||||
return (MV_U32)MV_32BIT_LE_FAST(data);
|
||||
}
|
||||
|
||||
static __inline void mvOsBCopy(char* srcAddr, char* dstAddr, int byteCount)
|
||||
{
|
||||
while(byteCount != 0)
|
||||
{
|
||||
*dstAddr = *srcAddr;
|
||||
dstAddr++;
|
||||
srcAddr++;
|
||||
byteCount--;
|
||||
}
|
||||
}
|
||||
|
||||
static INLINE MV_U64 mvOsDivMod64(MV_U64 divided, MV_U64 divisor, MV_U64* modulu)
|
||||
{
|
||||
MV_U64 division = 0;
|
||||
|
||||
if(divisor == 1)
|
||||
return divided;
|
||||
|
||||
while(divided >= divisor)
|
||||
{
|
||||
division++;
|
||||
divided -= divisor;
|
||||
}
|
||||
if (modulu != NULL)
|
||||
*modulu = divided;
|
||||
|
||||
return division;
|
||||
}
|
||||
|
||||
#if defined(MV_BRIDGE_SYNC_REORDER)
|
||||
extern MV_U32 *mvUncachedParam;
|
||||
|
||||
static __inline void mvOsBridgeReorderWA(void)
|
||||
{
|
||||
volatile MV_U32 val = 0;
|
||||
|
||||
val = mvUncachedParam[0];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Flash APIs */
|
||||
#define MV_FL_8_READ MV_MEMIO8_READ
|
||||
#define MV_FL_16_READ MV_MEMIO_LE16_READ
|
||||
#define MV_FL_32_READ MV_MEMIO_LE32_READ
|
||||
#define MV_FL_8_DATA_READ MV_MEMIO8_READ
|
||||
#define MV_FL_16_DATA_READ MV_MEMIO16_READ
|
||||
#define MV_FL_32_DATA_READ MV_MEMIO32_READ
|
||||
#define MV_FL_8_WRITE MV_MEMIO8_WRITE
|
||||
#define MV_FL_16_WRITE MV_MEMIO_LE16_WRITE
|
||||
#define MV_FL_32_WRITE MV_MEMIO_LE32_WRITE
|
||||
#define MV_FL_8_DATA_WRITE MV_MEMIO8_WRITE
|
||||
#define MV_FL_16_DATA_WRITE MV_MEMIO16_WRITE
|
||||
#define MV_FL_32_DATA_WRITE MV_MEMIO32_WRITE
|
||||
|
||||
|
||||
/* CPU cache information */
|
||||
#define CPU_I_CACHE_LINE_SIZE 32 /* 2do: replace 32 with linux core macro */
|
||||
#define CPU_D_CACHE_LINE_SIZE 32 /* 2do: replace 32 with linux core macro */
|
||||
|
||||
#ifdef CONFIG_L2_CACHE_ENABLE
|
||||
/* Data cache flush one line */
|
||||
#define mvOsCacheLineFlushInv(handle, addr) \
|
||||
{ \
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c14, 1" : : "r" (addr));\
|
||||
__asm__ __volatile__ ("mcr p15, 1, %0, c15, c10, 1" : : "r" (addr));\
|
||||
__asm__ __volatile__ ("mcr p15, 0, r0, c7, c10, 4"); \
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Data cache flush one line */
|
||||
#define mvOsCacheLineFlushInv(handle, addr) \
|
||||
{ \
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c14, 1" : : "r" (addr));\
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" : : "r" (addr)); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_L2_CACHE_ENABLE
|
||||
#define mvOsCacheLineInv(handle,addr) \
|
||||
{ \
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c6, 1" : : "r" (addr)); \
|
||||
__asm__ __volatile__ ("mcr p15, 1, %0, c15, c11, 1" : : "r" (addr)); \
|
||||
}
|
||||
#else
|
||||
#define mvOsCacheLineInv(handle,addr) \
|
||||
{ \
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c6, 1" : : "r" (addr)); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_L2_CACHE_ENABLE
|
||||
/* Data cache flush one line */
|
||||
#define mvOsCacheLineFlush(handle, addr) \
|
||||
{ \
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 1" : : "r" (addr));\
|
||||
__asm__ __volatile__ ("mcr p15, 1, %0, c15, c9, 1" : : "r" (addr));\
|
||||
__asm__ __volatile__ ("mcr p15, 0, r0, c7, c10, 4"); \
|
||||
}
|
||||
|
||||
#else
|
||||
/* Data cache flush one line */
|
||||
#define mvOsCacheLineFlush(handle, addr) \
|
||||
{ \
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 1" : : "r" (addr));\
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" : : "r" (addr)); \
|
||||
}
|
||||
#endif
|
||||
|
||||
static __inline void mvOsPrefetch(const void *ptr)
|
||||
{
|
||||
#ifdef CONFIG_USE_DSP
|
||||
__asm__ __volatile__(
|
||||
"pld\t%0"
|
||||
:
|
||||
: "o" (*(char *)ptr)
|
||||
: "cc");
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* Flush CPU pipe */
|
||||
#define CPU_PIPE_FLUSH
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* register manipulations */
|
||||
|
||||
/******************************************************************************
|
||||
* This debug function enable the write of each register that u-boot access to
|
||||
* to an array in the DRAM, the function record only MV_REG_WRITE access.
|
||||
* The function could not be operate when booting from flash.
|
||||
* In order to print the array we use the printreg command.
|
||||
******************************************************************************/
|
||||
/* #define REG_DEBUG */
|
||||
#if defined(REG_DEBUG)
|
||||
extern int reg_arry[2048][2];
|
||||
extern int reg_arry_index;
|
||||
#endif
|
||||
|
||||
/* Marvell controller register read/write macros */
|
||||
#define MV_REG_VALUE(offset) \
|
||||
(MV_MEMIO32_READ((INTER_REGS_BASE | (offset))))
|
||||
|
||||
#define MV_REG_READ(offset) \
|
||||
(MV_MEMIO_LE32_READ(INTER_REGS_BASE | (offset)))
|
||||
|
||||
#if defined(REG_DEBUG)
|
||||
#define MV_REG_WRITE(offset, val) \
|
||||
MV_MEMIO_LE32_WRITE((INTER_REGS_BASE | (offset)), (val)); \
|
||||
{ \
|
||||
reg_arry[reg_arry_index][0] = (INTER_REGS_BASE | (offset));\
|
||||
reg_arry[reg_arry_index][1] = (val);\
|
||||
reg_arry_index++;\
|
||||
}
|
||||
#else
|
||||
#define MV_REG_WRITE(offset, val) \
|
||||
MV_MEMIO_LE32_WRITE((INTER_REGS_BASE | (offset)), (val));
|
||||
#endif
|
||||
|
||||
#define MV_REG_BYTE_READ(offset) \
|
||||
(MV_MEMIO8_READ((INTER_REGS_BASE | (offset))))
|
||||
|
||||
#if defined(REG_DEBUG)
|
||||
#define MV_REG_BYTE_WRITE(offset, val) \
|
||||
MV_MEMIO8_WRITE((INTER_REGS_BASE | (offset)), (val)); \
|
||||
{ \
|
||||
reg_arry[reg_arry_index][0] = (INTER_REGS_BASE | (offset));\
|
||||
reg_arry[reg_arry_index][1] = (val);\
|
||||
reg_arry_index++;\
|
||||
}
|
||||
#else
|
||||
#define MV_REG_BYTE_WRITE(offset, val) \
|
||||
MV_MEMIO8_WRITE((INTER_REGS_BASE | (offset)), (val))
|
||||
#endif
|
||||
|
||||
#if defined(REG_DEBUG)
|
||||
#define MV_REG_BIT_SET(offset, bitMask) \
|
||||
(MV_MEMIO32_WRITE((INTER_REGS_BASE | (offset)), \
|
||||
(MV_MEMIO32_READ(INTER_REGS_BASE | (offset)) | \
|
||||
MV_32BIT_LE_FAST(bitMask)))); \
|
||||
{ \
|
||||
reg_arry[reg_arry_index][0] = (INTER_REGS_BASE | (offset));\
|
||||
reg_arry[reg_arry_index][1] = (MV_MEMIO32_READ(INTER_REGS_BASE | (offset)));\
|
||||
reg_arry_index++;\
|
||||
}
|
||||
#else
|
||||
#define MV_REG_BIT_SET(offset, bitMask) \
|
||||
(MV_MEMIO32_WRITE((INTER_REGS_BASE | (offset)), \
|
||||
(MV_MEMIO32_READ(INTER_REGS_BASE | (offset)) | \
|
||||
MV_32BIT_LE_FAST(bitMask))))
|
||||
#endif
|
||||
|
||||
#if defined(REG_DEBUG)
|
||||
#define MV_REG_BIT_RESET(offset,bitMask) \
|
||||
(MV_MEMIO32_WRITE((INTER_REGS_BASE | (offset)), \
|
||||
(MV_MEMIO32_READ(INTER_REGS_BASE | (offset)) & \
|
||||
MV_32BIT_LE_FAST(~bitMask)))); \
|
||||
{ \
|
||||
reg_arry[reg_arry_index][0] = (INTER_REGS_BASE | (offset));\
|
||||
reg_arry[reg_arry_index][1] = (MV_MEMIO32_READ(INTER_REGS_BASE | (offset)));\
|
||||
reg_arry_index++;\
|
||||
}
|
||||
#else
|
||||
#define MV_REG_BIT_RESET(offset,bitMask) \
|
||||
(MV_MEMIO32_WRITE((INTER_REGS_BASE | (offset)), \
|
||||
(MV_MEMIO32_READ(INTER_REGS_BASE | (offset)) & \
|
||||
MV_32BIT_LE_FAST(~bitMask))))
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* ARM architecture APIs */
|
||||
MV_U32 mvOsCpuRevGet (MV_VOID);
|
||||
MV_U32 mvOsCpuPartGet (MV_VOID);
|
||||
MV_U32 mvOsCpuArchGet (MV_VOID);
|
||||
MV_U32 mvOsCpuVarGet (MV_VOID);
|
||||
MV_U32 mvOsCpuAsciiGet (MV_VOID);
|
||||
|
||||
/* Other APIs */
|
||||
void* mvOsIoCachedMalloc( void* osHandle, MV_U32 size, MV_ULONG* pPhyAddr, MV_U32 *memHandle);
|
||||
void* mvOsIoUncachedMalloc( void* osHandle, MV_U32 size, MV_ULONG* pPhyAddr, MV_U32 *memHandle );
|
||||
void mvOsIoUncachedFree( void* osHandle, MV_U32 size, MV_ULONG phyAddr, void* pVirtAddr, MV_U32 memHandle );
|
||||
void mvOsIoCachedFree( void* osHandle, MV_U32 size, MV_ULONG phyAddr, void* pVirtAddr, MV_U32 memHandle );
|
||||
int mvOsRand(void);
|
||||
|
||||
#endif /* _MV_OS_LNX_H_ */
|
||||
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
*******************************************************************************/
|
||||
/*******************************************************************************
|
||||
* mvOsLinux.h - O.S. interface header file for Linux
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This header file contains OS dependent definition under Linux
|
||||
*
|
||||
* DEPENDENCIES:
|
||||
* Linux kernel header files.
|
||||
*
|
||||
* FILE REVISION NUMBER:
|
||||
* $Revision: 1.1 $
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvOsLinuxh
|
||||
#define __INCmvOsLinuxh
|
||||
|
||||
/* Includes */
|
||||
#include <linux/autoconf.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
#include "mvOs.h"
|
||||
|
||||
|
||||
/* Definitions */
|
||||
#define MV_DEFAULT_QUEUE_DEPTH 2
|
||||
#define MV_SATA_SUPPORT_EDMA_SINGLE_DATA_REGION
|
||||
#define MV_SATA_SUPPORT_GEN2E_128_QUEUE_LEN
|
||||
|
||||
#ifdef CONFIG_MV88F6082
|
||||
#define MV_SATA_OVERRIDE_SW_QUEUE_SIZE
|
||||
#define MV_SATA_REQUESTED_SW_QUEUE_SIZE 2
|
||||
#undef MV_SATA_SUPPORT_GEN2E_128_QUEUE_LEN
|
||||
#endif
|
||||
|
||||
/* System dependent macro for flushing CPU write cache */
|
||||
#if defined (MV_BRIDGE_SYNC_REORDER)
|
||||
#define MV_CPU_WRITE_BUFFER_FLUSH() do { \
|
||||
wmb(); \
|
||||
mvOsBridgeReorderWA(); \
|
||||
} while (0)
|
||||
#else
|
||||
#define MV_CPU_WRITE_BUFFER_FLUSH() wmb()
|
||||
#endif /* CONFIG_MV78XX0 */
|
||||
|
||||
/* System dependent little endian from / to CPU conversions */
|
||||
#define MV_CPU_TO_LE16(x) cpu_to_le16(x)
|
||||
#define MV_CPU_TO_LE32(x) cpu_to_le32(x)
|
||||
|
||||
#define MV_LE16_TO_CPU(x) le16_to_cpu(x)
|
||||
#define MV_LE32_TO_CPU(x) le32_to_cpu(x)
|
||||
|
||||
#ifdef __BIG_ENDIAN_BITFIELD
|
||||
#define MV_BIG_ENDIAN_BITFIELD
|
||||
#endif
|
||||
|
||||
/* System dependent register read / write in byte/word/dword variants */
|
||||
#define MV_REG_WRITE_BYTE(base, offset, val) writeb(val, base + offset)
|
||||
#define MV_REG_WRITE_WORD(base, offset, val) writew(val, base + offset)
|
||||
#define MV_REG_WRITE_DWORD(base, offset, val) writel(val, base + offset)
|
||||
#define MV_REG_READ_BYTE(base, offset) readb(base + offset)
|
||||
#define MV_REG_READ_WORD(base, offset) readw(base + offset)
|
||||
#define MV_REG_READ_DWORD(base, offset) readl(base + offset)
|
||||
|
||||
|
||||
/* Typedefs */
|
||||
|
||||
/* System dependant typedefs */
|
||||
typedef void *MV_VOID_PTR;
|
||||
typedef u32 *MV_U32_PTR;
|
||||
typedef u16 *MV_U16_PTR;
|
||||
typedef u8 *MV_U8_PTR;
|
||||
typedef char *MV_CHAR_PTR;
|
||||
typedef void *MV_BUS_ADDR_T;
|
||||
typedef unsigned long MV_CPU_FLAGS;
|
||||
|
||||
|
||||
/* Structures */
|
||||
/* System dependent structure */
|
||||
typedef struct mvOsSemaphore
|
||||
{
|
||||
int notUsed;
|
||||
} MV_OS_SEMAPHORE;
|
||||
|
||||
|
||||
/* Functions (User implemented)*/
|
||||
|
||||
/* Semaphore init, take and release */
|
||||
#define mvOsSemInit(x) MV_TRUE
|
||||
#define mvOsSemTake(x)
|
||||
#define mvOsSemRelease(x)
|
||||
|
||||
/* Interrupt masking and unmasking functions */
|
||||
MV_CPU_FLAGS mvOsSaveFlagsAndMaskCPUInterrupts(MV_VOID);
|
||||
MV_VOID mvOsRestoreFlags(MV_CPU_FLAGS);
|
||||
|
||||
/* Delay function in micro seconds resolution */
|
||||
void mvMicroSecondsDelay(MV_VOID_PTR, MV_U32);
|
||||
|
||||
/* Typedefs */
|
||||
typedef enum mvBoolean
|
||||
{
|
||||
MV_SFALSE, MV_STRUE
|
||||
} MV_BOOLEAN;
|
||||
|
||||
/* System logging function */
|
||||
#include "mvLog.h"
|
||||
/* Enable READ/WRITE Long SCSI command only when driver is compiled for debugging */
|
||||
#ifdef MV_LOGGER
|
||||
#define MV_SATA_SUPPORT_READ_WRITE_LONG
|
||||
#endif
|
||||
|
||||
#define MV_IAL_LOG_ID 3
|
||||
|
||||
#endif /* __INCmvOsLinuxh */
|
||||
@@ -0,0 +1,375 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
|
||||
*******************************************************************************/
|
||||
/*******************************************************************************
|
||||
* mvSysHwCfg.h - Marvell system HW configuration file
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* None.
|
||||
*
|
||||
* DEPENDENCIES:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvSysHwConfigh
|
||||
#define __INCmvSysHwConfigh
|
||||
|
||||
#include "../../../../include/linux/autoconf.h"
|
||||
|
||||
#define CONFIG_MARVELL 1
|
||||
|
||||
/* includes */
|
||||
#define _1K 0x00000400
|
||||
#define _4K 0x00001000
|
||||
#define _8K 0x00002000
|
||||
#define _16K 0x00004000
|
||||
#define _32K 0x00008000
|
||||
#define _64K 0x00010000
|
||||
#define _128K 0x00020000
|
||||
#define _256K 0x00040000
|
||||
#define _512K 0x00080000
|
||||
|
||||
#define _1M 0x00100000
|
||||
#define _2M 0x00200000
|
||||
#define _4M 0x00400000
|
||||
#define _8M 0x00800000
|
||||
#define _16M 0x01000000
|
||||
#define _32M 0x02000000
|
||||
#define _64M 0x04000000
|
||||
#define _128M 0x08000000
|
||||
#define _256M 0x10000000
|
||||
#define _512M 0x20000000
|
||||
|
||||
#define _1G 0x40000000
|
||||
#define _2G 0x80000000
|
||||
|
||||
/****************************************/
|
||||
/* Soc supporeted Units definitions */
|
||||
/****************************************/
|
||||
|
||||
#ifdef CONFIG_MV_INCLUDE_PEX
|
||||
#define MV_INCLUDE_PEX
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_TWSI
|
||||
#define MV_INCLUDE_TWSI
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_CESA
|
||||
#define MV_INCLUDE_CESA
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_GIG_ETH
|
||||
#define MV_INCLUDE_GIG_ETH
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_INTEG_SATA
|
||||
#define MV_INCLUDE_INTEG_SATA
|
||||
#define MV_INCLUDE_SATA
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_USB
|
||||
#define MV_INCLUDE_USB
|
||||
#define MV_USB_VOLTAGE_FIX
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_NAND
|
||||
#define MV_INCLUDE_NAND
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_TDM
|
||||
#define MV_INCLUDE_TDM
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_XOR
|
||||
#define MV_INCLUDE_XOR
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_TWSI
|
||||
#define MV_INCLUDE_TWSI
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_UART
|
||||
#define MV_INCLUDE_UART
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_SPI
|
||||
#define MV_INCLUDE_SPI
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_SFLASH_MTD
|
||||
#define MV_INCLUDE_SFLASH_MTD
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_AUDIO
|
||||
#define MV_INCLUDE_AUDIO
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_TS
|
||||
#define MV_INCLUDE_TS
|
||||
#endif
|
||||
#ifdef CONFIG_MV_INCLUDE_SDIO
|
||||
#define MV_INCLUDE_SDIO
|
||||
#endif
|
||||
|
||||
|
||||
/* NAND flash stuff */
|
||||
#ifdef CONFIG_MV_NAND_BOOT
|
||||
#define MV_NAND_BOOT
|
||||
#endif
|
||||
#ifdef CONFIG_MV_NAND
|
||||
#define MV_NAND
|
||||
#endif
|
||||
|
||||
/* SPI flash stuff */
|
||||
#ifdef CONFIG_MV_SPI_BOOT
|
||||
#define MV_SPI_BOOT
|
||||
#endif
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/************* General configuration ********************/
|
||||
/****************************************************************/
|
||||
|
||||
/* Enable Clock Power Control */
|
||||
#define MV_INCLUDE_CLK_PWR_CNTRL
|
||||
|
||||
/* Disable the DEVICE BAR in the PEX */
|
||||
#define MV_DISABLE_PEX_DEVICE_BAR
|
||||
|
||||
/* Allow the usage of early printings during initialization */
|
||||
#define MV_INCLUDE_EARLY_PRINTK
|
||||
|
||||
/****************************************************************/
|
||||
/************* NFP configuration ********************************/
|
||||
/****************************************************************/
|
||||
#define MV_NFP_SEC_Q_SIZE 64
|
||||
#define MV_NFP_SEC_REQ_Q_SIZE 1000
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/************* CESA configuration ********************/
|
||||
/****************************************************************/
|
||||
|
||||
#ifdef MV_INCLUDE_CESA
|
||||
|
||||
#define MV_CESA_MAX_CHAN 4
|
||||
|
||||
/* Use 2K of SRAM */
|
||||
#define MV_CESA_MAX_BUF_SIZE 1600
|
||||
|
||||
#endif /* MV_INCLUDE_CESA */
|
||||
|
||||
#if defined(CONFIG_MV_INCLUDE_GIG_ETH)
|
||||
|
||||
#ifdef CONFIG_MV_NFP_STATS
|
||||
#define MV_FP_STATISTICS
|
||||
#else
|
||||
#undef MV_FP_STATISTICS
|
||||
#endif
|
||||
/* Default configuration for SKB_REUSE: 0 - Disabled, 1 - Enabled */
|
||||
#define MV_ETH_SKB_REUSE_DEFAULT 1
|
||||
/* Default configuration for TX_EN workaround: 0 - Disabled, 1 - Enabled */
|
||||
#define MV_ETH_TX_EN_DEFAULT 0
|
||||
|
||||
/* un-comment if you want to perform tx_done from within the poll function */
|
||||
/* #define ETH_TX_DONE_ISR */
|
||||
|
||||
/* put descriptors in uncached memory */
|
||||
/* #define ETH_DESCR_UNCACHED */
|
||||
|
||||
/* Descriptors location: DRAM/internal-SRAM */
|
||||
#define ETH_DESCR_IN_SDRAM
|
||||
#undef ETH_DESCR_IN_SRAM /* No integrated SRAM in 88Fxx81 devices */
|
||||
|
||||
#if defined(ETH_DESCR_IN_SRAM)
|
||||
#if defined(ETH_DESCR_UNCACHED)
|
||||
#define ETH_DESCR_CONFIG_STR "Uncached descriptors in integrated SRAM"
|
||||
#else
|
||||
#define ETH_DESCR_CONFIG_STR "Cached descriptors in integrated SRAM"
|
||||
#endif
|
||||
#elif defined(ETH_DESCR_IN_SDRAM)
|
||||
#if defined(ETH_DESCR_UNCACHED)
|
||||
#define ETH_DESCR_CONFIG_STR "Uncached descriptors in DRAM"
|
||||
#else
|
||||
#define ETH_DESCR_CONFIG_STR "Cached descriptors in DRAM"
|
||||
#endif
|
||||
#else
|
||||
#error "Ethernet descriptors location undefined"
|
||||
#endif /* ETH_DESCR_IN_SRAM or ETH_DESCR_IN_SDRAM*/
|
||||
|
||||
/* SW Sync-Barrier: not relevant for 88fxx81*/
|
||||
/* Reasnable to define this macro when descriptors in SRAM and buffers in DRAM */
|
||||
/* In RX the CPU theoretically might see himself as the descriptor owner, */
|
||||
/* although the buffer hadn't been written to DRAM yet. Performance cost. */
|
||||
/* #define INCLUDE_SYNC_BARR */
|
||||
|
||||
/* Buffers cache coherency method (buffers in DRAM) */
|
||||
#ifndef MV_CACHE_COHER_SW
|
||||
/* Taken from mvCommon.h */
|
||||
/* Memory uncached, HW or SW cache coherency is not needed */
|
||||
#define MV_UNCACHED 0
|
||||
/* Memory cached, HW cache coherency supported in WriteThrough mode */
|
||||
#define MV_CACHE_COHER_HW_WT 1
|
||||
/* Memory cached, HW cache coherency supported in WriteBack mode */
|
||||
#define MV_CACHE_COHER_HW_WB 2
|
||||
/* Memory cached, No HW cache coherency, Cache coherency must be in SW */
|
||||
#define MV_CACHE_COHER_SW 3
|
||||
|
||||
#endif
|
||||
|
||||
/* DRAM cache coherency configuration */
|
||||
#define MV_CACHE_COHERENCY MV_CACHE_COHER_SW
|
||||
|
||||
|
||||
#define ETHER_DRAM_COHER MV_CACHE_COHER_SW /* No HW coherency in 88Fxx81 devices */
|
||||
|
||||
#if (ETHER_DRAM_COHER == MV_CACHE_COHER_HW_WB)
|
||||
#define ETH_SDRAM_CONFIG_STR "DRAM HW cache coherency (write-back)"
|
||||
#elif (ETHER_DRAM_COHER == MV_CACHE_COHER_HW_WT)
|
||||
#define ETH_SDRAM_CONFIG_STR "DRAM HW cache coherency (write-through)"
|
||||
#elif (ETHER_DRAM_COHER == MV_CACHE_COHER_SW)
|
||||
#define ETH_SDRAM_CONFIG_STR "DRAM SW cache-coherency"
|
||||
#elif (ETHER_DRAM_COHER == MV_UNCACHED)
|
||||
# define ETH_SDRAM_CONFIG_STR "DRAM uncached"
|
||||
#else
|
||||
#error "Ethernet-DRAM undefined"
|
||||
#endif /* ETHER_DRAM_COHER */
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/************* Ethernet driver configuration ********************/
|
||||
/****************************************************************/
|
||||
|
||||
/* port's default queueus */
|
||||
#define ETH_DEF_TXQ 0
|
||||
#define ETH_DEF_RXQ 0
|
||||
|
||||
#define MV_ETH_RX_Q_NUM CONFIG_MV_ETH_RX_Q_NUM
|
||||
#define MV_ETH_TX_Q_NUM CONFIG_MV_ETH_TX_Q_NUM
|
||||
|
||||
/* interrupt coalescing setting */
|
||||
#define ETH_TX_COAL 200
|
||||
#define ETH_RX_COAL 200
|
||||
|
||||
/* Checksum offloading */
|
||||
#define TX_CSUM_OFFLOAD
|
||||
#define RX_CSUM_OFFLOAD
|
||||
|
||||
#endif /* CONFIG_MV_INCLUDE_GIG_ETH */
|
||||
|
||||
/****************************************************************/
|
||||
/*************** Telephony configuration ************************/
|
||||
/****************************************************************/
|
||||
#if defined(CONFIG_MV_TDM_LINEAR_MODE)
|
||||
#define MV_TDM_LINEAR_MODE
|
||||
#elif defined(CONFIG_MV_TDM_ULAW_MODE)
|
||||
#define MV_TDM_ULAW_MODE
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MV_TDM_5CHANNELS)
|
||||
#define MV_TDM_5CHANNELS
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MV_TDM_USE_EXTERNAL_PCLK_SOURCE)
|
||||
#define MV_TDM_USE_EXTERNAL_PCLK_SOURCE
|
||||
#endif
|
||||
|
||||
/* We use the following registers to store DRAM interface pre configuration */
|
||||
/* auto-detection results */
|
||||
/* IMPORTANT: We are using mask register for that purpose. Before writing */
|
||||
/* to units mask register, make sure main maks register is set to disable */
|
||||
/* all interrupts. */
|
||||
#define DRAM_BUF_REG0 0x30810 /* sdram bank 0 size */
|
||||
#define DRAM_BUF_REG1 0x30820 /* sdram config */
|
||||
#define DRAM_BUF_REG2 0x30830 /* sdram mode */
|
||||
#define DRAM_BUF_REG3 0x308c4 /* dunit control low */
|
||||
#define DRAM_BUF_REG4 0x60a90 /* sdram address control */
|
||||
#define DRAM_BUF_REG5 0x60a94 /* sdram timing control low */
|
||||
#define DRAM_BUF_REG6 0x60a98 /* sdram timing control high */
|
||||
#define DRAM_BUF_REG7 0x60a9c /* sdram ODT control low */
|
||||
#define DRAM_BUF_REG8 0x60b90 /* sdram ODT control high */
|
||||
#define DRAM_BUF_REG9 0x60b94 /* sdram Dunit ODT control */
|
||||
#define DRAM_BUF_REG10 0x60b98 /* sdram Extended Mode */
|
||||
#define DRAM_BUF_REG11 0x60b9c /* sdram Ddr2 Time Low Reg */
|
||||
#define DRAM_BUF_REG12 0x60a00 /* sdram Ddr2 Time High Reg */
|
||||
#define DRAM_BUF_REG13 0x60a04 /* dunit Ctrl High */
|
||||
#define DRAM_BUF_REG14 0x60b00 /* sdram second DIMM exist */
|
||||
|
||||
/* Following the pre-configuration registers default values restored after */
|
||||
/* auto-detection is done */
|
||||
#define DRAM_BUF_REG_DV 0
|
||||
|
||||
/* System Mapping */
|
||||
#define SDRAM_CS0_BASE 0x00000000
|
||||
#define SDRAM_CS0_SIZE _256M
|
||||
|
||||
#define SDRAM_CS1_BASE 0x10000000
|
||||
#define SDRAM_CS1_SIZE _256M
|
||||
|
||||
#define SDRAM_CS2_BASE 0x20000000
|
||||
#define SDRAM_CS2_SIZE _256M
|
||||
|
||||
#define SDRAM_CS3_BASE 0x30000000
|
||||
#define SDRAM_CS3_SIZE _256M
|
||||
|
||||
/* PEX */
|
||||
#define PEX0_MEM_BASE 0xe8000000
|
||||
#define PEX0_MEM_SIZE _128M
|
||||
|
||||
#define PEX0_IO_BASE 0xf2000000
|
||||
#define PEX0_IO_SIZE _1M
|
||||
|
||||
/* Device Chip Selects */
|
||||
#define NFLASH_CS_BASE 0xfa000000
|
||||
#define NFLASH_CS_SIZE _2M
|
||||
|
||||
#define SPI_CS_BASE 0xf4000000
|
||||
#define SPI_CS_SIZE _16M
|
||||
|
||||
#define CRYPT_ENG_BASE 0xf0000000
|
||||
#define CRYPT_ENG_SIZE _2M
|
||||
|
||||
#define BOOTDEV_CS_BASE 0xff800000
|
||||
#define BOOTDEV_CS_SIZE _8M
|
||||
|
||||
/* CS2 - BOOTROM */
|
||||
#define DEVICE_CS2_BASE 0xff900000
|
||||
#define DEVICE_CS2_SIZE _1M
|
||||
|
||||
/* PEX Work arround */
|
||||
/* the target we will use for the workarround */
|
||||
#define PEX_CONFIG_RW_WA_TARGET PEX0_MEM
|
||||
/*a flag that indicates if we are going to use the
|
||||
size and base of the target we using for the workarround
|
||||
window */
|
||||
#define PEX_CONFIG_RW_WA_USE_ORIGINAL_WIN_VALUES 1
|
||||
/* if the above flag is 0 then the following values
|
||||
will be used for the workarround window base and size,
|
||||
otherwise the following defines will be ignored */
|
||||
#define PEX_CONFIG_RW_WA_BASE 0xF3000000
|
||||
#define PEX_CONFIG_RW_WA_SIZE _16M
|
||||
|
||||
/* Internal registers: size is defined in Controllerenvironment */
|
||||
#define INTER_REGS_BASE 0xFEE00000
|
||||
|
||||
/* DRAM detection stuff */
|
||||
#define MV_DRAM_AUTO_SIZE
|
||||
|
||||
/* Board clock detection */
|
||||
#define TCLK_AUTO_DETECT /* Use Tclk auto detection */
|
||||
#define SYSCLK_AUTO_DETECT /* Use SysClk auto detection */
|
||||
#define PCLCK_AUTO_DETECT /* Use PClk auto detection */
|
||||
#define L2CLK_AUTO_DETECT /* Use L2Clk auto detection */
|
||||
|
||||
/* PEX-PCI\PCI-PCI Bridge*/
|
||||
#define PCI0_IF_PTP 0 /* Bridge exist on pciIf0*/
|
||||
|
||||
|
||||
|
||||
#endif /* __INCmvSysHwConfigh */
|
||||
|
||||
@@ -0,0 +1,376 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvCntmr.h"
|
||||
#include "cpu/mvCpu.h"
|
||||
|
||||
/* defines */
|
||||
#ifdef MV_DEBUG
|
||||
#define DB(x) x
|
||||
#else
|
||||
#define DB(x)
|
||||
#endif
|
||||
|
||||
extern unsigned int whoAmI(void);
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrLoad -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Load an init Value to a given counter/timer
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
* value - value to be loaded
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCntmrLoad(MV_U32 countNum, MV_U32 value)
|
||||
{
|
||||
if (countNum >= MV_CNTMR_MAX_COUNTER )
|
||||
{
|
||||
|
||||
mvOsPrintf(("mvCntmrLoad: Err. Illigal counter number \n"));
|
||||
return MV_BAD_PARAM;;
|
||||
|
||||
}
|
||||
|
||||
MV_REG_WRITE(CNTMR_RELOAD_REG(countNum),value);
|
||||
MV_REG_WRITE(CNTMR_VAL_REG(countNum),value);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrRead -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Returns the value of the given Counter/Timer
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_U32 counter value
|
||||
*******************************************************************************/
|
||||
MV_U32 mvCntmrRead(MV_U32 countNum)
|
||||
{
|
||||
return MV_REG_READ(CNTMR_VAL_REG(countNum));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrWrite -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Returns the value of the given Counter/Timer
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
* countVal - value to write
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* None
|
||||
*******************************************************************************/
|
||||
void mvCntmrWrite(MV_U32 countNum,MV_U32 countVal)
|
||||
{
|
||||
MV_REG_WRITE(CNTMR_VAL_REG(countNum),countVal);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrCtrlSet -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Set the Control to a given counter/timer
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
* pCtrl - pointer to MV_CNTMR_CTRL structure
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCntmrCtrlSet(MV_U32 countNum, MV_CNTMR_CTRL *pCtrl)
|
||||
{
|
||||
MV_U32 cntmrCtrl;
|
||||
|
||||
if (countNum >= MV_CNTMR_MAX_COUNTER )
|
||||
{
|
||||
|
||||
DB(mvOsPrintf(("mvCntmrCtrlSet: Err. Illigal counter number \n")));
|
||||
return MV_BAD_PARAM;;
|
||||
|
||||
}
|
||||
|
||||
/* read control register */
|
||||
cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG);
|
||||
|
||||
|
||||
if (pCtrl->enable) /* enable counter\timer */
|
||||
{
|
||||
cntmrCtrl |= CTCR_ARM_TIMER_EN(countNum);
|
||||
}
|
||||
else /* disable counter\timer */
|
||||
{
|
||||
cntmrCtrl &= ~CTCR_ARM_TIMER_EN(countNum);
|
||||
}
|
||||
|
||||
if ( pCtrl->autoEnable ) /* Auto mode */
|
||||
{
|
||||
cntmrCtrl |= CTCR_ARM_TIMER_AUTO_EN(countNum);
|
||||
|
||||
}
|
||||
else /* no auto mode */
|
||||
{
|
||||
cntmrCtrl &= ~CTCR_ARM_TIMER_AUTO_EN(countNum);
|
||||
}
|
||||
|
||||
MV_REG_WRITE(CNTMR_CTRL_REG,cntmrCtrl);
|
||||
|
||||
return MV_OK;
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrCtrlGet -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Get the Control value of a given counter/timer
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
* pCtrl - pointer to MV_CNTMR_CTRL structure
|
||||
*
|
||||
* OUTPUT:
|
||||
* Counter\Timer control value
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCntmrCtrlGet(MV_U32 countNum, MV_CNTMR_CTRL *pCtrl)
|
||||
{
|
||||
MV_U32 cntmrCtrl;
|
||||
|
||||
if (countNum >= MV_CNTMR_MAX_COUNTER )
|
||||
{
|
||||
DB(mvOsPrintf(("mvCntmrCtrlGet: Err. Illigal counter number \n")));
|
||||
return MV_BAD_PARAM;;
|
||||
}
|
||||
|
||||
/* read control register */
|
||||
cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG);
|
||||
|
||||
/* enable counter\timer */
|
||||
if (cntmrCtrl & CTCR_ARM_TIMER_EN(countNum))
|
||||
{
|
||||
pCtrl->enable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pCtrl->enable = MV_FALSE;
|
||||
}
|
||||
|
||||
/* counter mode */
|
||||
if (cntmrCtrl & CTCR_ARM_TIMER_AUTO_EN(countNum))
|
||||
{
|
||||
pCtrl->autoEnable = MV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pCtrl->autoEnable = MV_FALSE;
|
||||
}
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrEnable -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Set the Enable-Bit to logic '1' ==> starting the counter
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCntmrEnable(MV_U32 countNum)
|
||||
{
|
||||
MV_U32 cntmrCtrl;
|
||||
|
||||
if (countNum >= MV_CNTMR_MAX_COUNTER )
|
||||
{
|
||||
|
||||
DB(mvOsPrintf(("mvCntmrEnable: Err. Illigal counter number \n")));
|
||||
return MV_BAD_PARAM;;
|
||||
|
||||
}
|
||||
|
||||
/* read control register */
|
||||
cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG);
|
||||
|
||||
/* enable counter\timer */
|
||||
cntmrCtrl |= CTCR_ARM_TIMER_EN(countNum);
|
||||
|
||||
|
||||
MV_REG_WRITE(CNTMR_CTRL_REG,cntmrCtrl);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrDisable -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Stop the counter/timer running, and returns its Value
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_U32 counter\timer value
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCntmrDisable(MV_U32 countNum)
|
||||
{
|
||||
MV_U32 cntmrCtrl;
|
||||
|
||||
if (countNum >= MV_CNTMR_MAX_COUNTER )
|
||||
{
|
||||
|
||||
DB(mvOsPrintf(("mvCntmrDisable: Err. Illigal counter number \n")));
|
||||
return MV_BAD_PARAM;;
|
||||
|
||||
}
|
||||
|
||||
/* read control register */
|
||||
cntmrCtrl = MV_REG_READ(CNTMR_CTRL_REG);
|
||||
|
||||
/* disable counter\timer */
|
||||
cntmrCtrl &= ~CTCR_ARM_TIMER_EN(countNum);
|
||||
|
||||
MV_REG_WRITE(CNTMR_CTRL_REG,cntmrCtrl);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* mvCntmrStart -
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* Combined all the sub-operations above to one function: Load,setMode,Enable
|
||||
*
|
||||
* INPUT:
|
||||
* countNum - counter number
|
||||
* value - value of the counter\timer to be set
|
||||
* pCtrl - pointer to MV_CNTMR_CTRL structure
|
||||
*
|
||||
* OUTPUT:
|
||||
* None.
|
||||
*
|
||||
* RETURN:
|
||||
* MV_BAD_PARAM on bad parameters , MV_ERROR on error ,MV_OK on sucess
|
||||
*******************************************************************************/
|
||||
MV_STATUS mvCntmrStart(MV_U32 countNum, MV_U32 value,
|
||||
MV_CNTMR_CTRL *pCtrl)
|
||||
{
|
||||
|
||||
if (countNum >= MV_CNTMR_MAX_COUNTER )
|
||||
{
|
||||
|
||||
mvOsPrintf(("mvCntmrDisable: Err. Illigal counter number \n"));
|
||||
return MV_BAD_PARAM;;
|
||||
|
||||
}
|
||||
|
||||
/* load value onto counter\timer */
|
||||
mvCntmrLoad(countNum,value);
|
||||
|
||||
/* set the counter to load in the first time */
|
||||
mvCntmrWrite(countNum,value);
|
||||
|
||||
/* set control for timer \ cunter and enable */
|
||||
mvCntmrCtrlSet(countNum,pCtrl);
|
||||
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvTmrWtdgh
|
||||
#define __INCmvTmrWtdgh
|
||||
|
||||
/* includes */
|
||||
#include "mvCommon.h"
|
||||
#include "mvOs.h"
|
||||
#include "cntmr/mvCntmrRegs.h"
|
||||
#include "ctrlEnv/mvCtrlEnvSpec.h"
|
||||
|
||||
|
||||
/* This enumerator describe counters\watchdog numbers */
|
||||
typedef enum _mvCntmrID
|
||||
{
|
||||
TIMER0 = 0,
|
||||
TIMER1,
|
||||
WATCHDOG,
|
||||
TIMER2,
|
||||
TIMER3,
|
||||
}MV_CNTMR_ID;
|
||||
|
||||
|
||||
/* Counter / Timer control structure */
|
||||
typedef struct _mvCntmrCtrl
|
||||
{
|
||||
MV_BOOL enable; /* enable */
|
||||
MV_BOOL autoEnable; /* counter/Timer */
|
||||
}MV_CNTMR_CTRL;
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
||||
/* Load an init Value to a given counter/timer */
|
||||
MV_STATUS mvCntmrLoad(MV_U32 countNum, MV_U32 value);
|
||||
|
||||
/* Returns the value of the given Counter/Timer */
|
||||
MV_U32 mvCntmrRead(MV_U32 countNum);
|
||||
|
||||
/* Write a value of the given Counter/Timer */
|
||||
void mvCntmrWrite(MV_U32 countNum,MV_U32 countVal);
|
||||
|
||||
/* Set the Control to a given counter/timer */
|
||||
MV_STATUS mvCntmrCtrlSet(MV_U32 countNum, MV_CNTMR_CTRL *pCtrl);
|
||||
|
||||
/* Get the value of a given counter/timer */
|
||||
MV_STATUS mvCntmrCtrlGet(MV_U32 countNum, MV_CNTMR_CTRL *pCtrl);
|
||||
|
||||
/* Set the Enable-Bit to logic '1' ==> starting the counter. */
|
||||
MV_STATUS mvCntmrEnable(MV_U32 countNum);
|
||||
|
||||
/* Stop the counter/timer running, and returns its Value. */
|
||||
MV_STATUS mvCntmrDisable(MV_U32 countNum);
|
||||
|
||||
/* Combined all the sub-operations above to one function: Load,setMode,Enable */
|
||||
MV_STATUS mvCntmrStart(MV_U32 countNum, MV_U32 value,
|
||||
MV_CNTMR_CTRL *pCtrl);
|
||||
|
||||
#endif /* __INCmvTmrWtdgh */
|
||||
@@ -0,0 +1,121 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvTmrwtdgRegsh
|
||||
#define __INCmvTmrwtdgRegsh
|
||||
|
||||
/*******************************************/
|
||||
/* ARM Timers Registers Map */
|
||||
/*******************************************/
|
||||
|
||||
#define CNTMR_RELOAD_REG(tmrNum) (CNTMR_BASE + 0x10 + (tmrNum)*8 + \
|
||||
(((tmrNum) <= 3)?0:8))
|
||||
#define CNTMR_VAL_REG(tmrNum) (CNTMR_BASE + 0x14 + (tmrNum)*8 + \
|
||||
(((tmrNum) <= 3)?0:8))
|
||||
#define CNTMR_CTRL_REG (CNTMR_BASE)
|
||||
|
||||
/*For MV78XX0*/
|
||||
#define CNTMR_CAUSE_REG (CPU_AHB_MBUS_CAUSE_INT_REG(whoAmI()))
|
||||
#define CNTMR_MASK_REG (CPU_AHB_MBUS_MASK_INT_REG(whoAmI()))
|
||||
|
||||
/* ARM Timers Registers Map */
|
||||
/*******************************************/
|
||||
|
||||
|
||||
/* ARM Timers Control Register */
|
||||
/* CPU_TIMERS_CTRL_REG (CTCR) */
|
||||
|
||||
#define TIMER0_NUM 0
|
||||
#define TIMER1_NUM 1
|
||||
#define WATCHDOG_NUM 2
|
||||
#define TIMER2_NUM 3
|
||||
#define TIMER3_NUM 4
|
||||
|
||||
#define CTCR_ARM_TIMER_EN_OFFS(cntr) (cntr * 2)
|
||||
#define CTCR_ARM_TIMER_EN_MASK(cntr) (1 << CTCR_ARM_TIMER_EN_OFFS)
|
||||
#define CTCR_ARM_TIMER_EN(cntr) (1 << CTCR_ARM_TIMER_EN_OFFS(cntr))
|
||||
#define CTCR_ARM_TIMER_DIS(cntr) (0 << CTCR_ARM_TIMER_EN_OFFS(cntr))
|
||||
|
||||
#define CTCR_ARM_TIMER_AUTO_OFFS(cntr) ((cntr * 2) + 1)
|
||||
#define CTCR_ARM_TIMER_AUTO_MASK(cntr) BIT1
|
||||
#define CTCR_ARM_TIMER_AUTO_EN(cntr) (1 << CTCR_ARM_TIMER_AUTO_OFFS(cntr))
|
||||
#define CTCR_ARM_TIMER_AUTO_DIS(cntr) (0 << CTCR_ARM_TIMER_AUTO_OFFS(cntr))
|
||||
|
||||
|
||||
/* ARM Timer\Watchdog Reload Register */
|
||||
/* CNTMR_RELOAD_REG (TRR) */
|
||||
|
||||
#define TRG_ARM_TIMER_REL_OFFS 0
|
||||
#define TRG_ARM_TIMER_REL_MASK 0xffffffff
|
||||
|
||||
/* ARM Timer\Watchdog Register */
|
||||
/* CNTMR_VAL_REG (TVRG) */
|
||||
|
||||
#define TVR_ARM_TIMER_OFFS 0
|
||||
#define TVR_ARM_TIMER_MASK 0xffffffff
|
||||
#define TVR_ARM_TIMER_MAX 0xffffffff
|
||||
|
||||
|
||||
|
||||
#endif /* __INCmvTmrwtdgRegsh */
|
||||
@@ -0,0 +1,207 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvCpuCntrs.h"
|
||||
|
||||
|
||||
const static MV_CPU_CNTRS_OPS mvCpuCntrsOpsTbl[MV_CPU_CNTRS_NUM][MV_CPU_CNTRS_OPS_NUM] =
|
||||
{
|
||||
/*0*/
|
||||
{
|
||||
MV_CPU_CNTRS_CYCLES, MV_CPU_CNTRS_DCACHE_READ_HIT, MV_CPU_CNTRS_DCACHE_READ_MISS,
|
||||
MV_CPU_CNTRS_DCACHE_WRITE_HIT, MV_CPU_CNTRS_DCACHE_WRITE_MISS, MV_CPU_CNTRS_INSTRUCTIONS,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_MMU_READ_LATENCY, MV_CPU_CNTRS_ICACHE_READ_LATENCY, MV_CPU_CNTRS_WB_WRITE_LATENCY,
|
||||
MV_CPU_CNTRS_LDM_STM_HOLD, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_DATA_WRITE_ACCESS, MV_CPU_CNTRS_DATA_READ_ACCESS, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_BRANCH_PREDICT_COUNT,
|
||||
},
|
||||
/*1*/
|
||||
{
|
||||
MV_CPU_CNTRS_CYCLES, MV_CPU_CNTRS_ICACHE_READ_MISS, MV_CPU_CNTRS_DCACHE_READ_MISS,
|
||||
MV_CPU_CNTRS_DCACHE_WRITE_MISS, MV_CPU_CNTRS_ITLB_MISS, MV_CPU_CNTRS_SINGLE_ISSUE,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_BRANCH_RETIRED, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_MMU_READ_BEAT, MV_CPU_CNTRS_ICACHE_READ_LATENCY, MV_CPU_CNTRS_WB_WRITE_BEAT,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_IS_HOLD, MV_CPU_CNTRS_DATA_READ_ACCESS,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_INVALID,
|
||||
},
|
||||
/*2*/
|
||||
{
|
||||
MV_CPU_CNTRS_CYCLES, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_DCACHE_ACCESS,
|
||||
MV_CPU_CNTRS_DTLB_MISS, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_BRANCH_PREDICT_MISS, MV_CPU_CNTRS_WB_WRITE_BEAT,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_DCACHE_READ_LATENCY, MV_CPU_CNTRS_DCACHE_WRITE_LATENCY,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_BIU_SIMULT_ACCESS,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_INVALID,
|
||||
},
|
||||
/*3*/
|
||||
{
|
||||
MV_CPU_CNTRS_CYCLES, MV_CPU_CNTRS_DCACHE_READ_MISS, MV_CPU_CNTRS_DCACHE_WRITE_MISS,
|
||||
MV_CPU_CNTRS_TLB_MISS, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_BRANCH_TAKEN, MV_CPU_CNTRS_WB_FULL_CYCLES,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_DCACHE_READ_BEAT, MV_CPU_CNTRS_DCACHE_WRITE_BEAT,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_BIU_ANY_ACCESS,
|
||||
MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_INVALID, MV_CPU_CNTRS_DATA_WRITE_ACCESS,
|
||||
MV_CPU_CNTRS_INVALID,
|
||||
}
|
||||
};
|
||||
|
||||
MV_CPU_CNTRS_ENTRY mvCpuCntrsTbl[MV_CPU_CNTRS_NUM];
|
||||
|
||||
MV_CPU_CNTRS_EVENT* mvCpuCntrsEventTbl[128];
|
||||
|
||||
void mvCpuCntrsReset(void)
|
||||
{
|
||||
MV_U32 reg = 0;
|
||||
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 0" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 1" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 2" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 3" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 4" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 5" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 6" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c13, 7" : : "r" (reg));
|
||||
}
|
||||
|
||||
void program_counter(int counter, int op)
|
||||
{
|
||||
MV_U32 reg = (1 << op) | 0x1; /*enable*/
|
||||
|
||||
switch(counter)
|
||||
{
|
||||
case 0:
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c15, c12, 0" : : "r" (reg));
|
||||
return;
|
||||
|
||||
case 1:
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c15, c12, 1" : : "r" (reg));
|
||||
return;
|
||||
|
||||
case 2:
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c15, c12, 2" : : "r" (reg));
|
||||
return;
|
||||
|
||||
case 3:
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c15, c12, 3" : : "r" (reg));
|
||||
return;
|
||||
|
||||
default:
|
||||
mvOsPrintf("error in program_counter: bad counter number (%d)\n", counter);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void mvCpuCntrsEventClear(MV_CPU_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
{
|
||||
pEvent->counters_sum[i] = 0;
|
||||
}
|
||||
pEvent->num_of_measurements = 0;
|
||||
}
|
||||
|
||||
|
||||
MV_CPU_CNTRS_EVENT* mvCpuCntrsEventCreate(char* name, MV_U32 print_threshold)
|
||||
{
|
||||
int i;
|
||||
MV_CPU_CNTRS_EVENT* event = mvOsMalloc(sizeof(MV_CPU_CNTRS_EVENT));
|
||||
|
||||
if(event)
|
||||
{
|
||||
strncpy(event->name, name, sizeof(event->name));
|
||||
event->num_of_measurements = 0;
|
||||
event->avg_sample_count = print_threshold;
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
{
|
||||
event->counters_before[i] = 0;
|
||||
event->counters_after[i] = 0;
|
||||
event->counters_sum[i] = 0;
|
||||
}
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
void mvCpuCntrsEventDelete(MV_CPU_CNTRS_EVENT* event)
|
||||
{
|
||||
if(event != NULL)
|
||||
mvOsFree(event);
|
||||
}
|
||||
|
||||
|
||||
MV_STATUS mvCpuCntrsProgram(int counter, MV_CPU_CNTRS_OPS op,
|
||||
char* name, MV_U32 overhead)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Find required operations */
|
||||
for(i=0; i<MV_CPU_CNTRS_OPS_NUM; i++)
|
||||
{
|
||||
if( mvCpuCntrsOpsTbl[counter][i] == op)
|
||||
{
|
||||
strncpy(mvCpuCntrsTbl[counter].name, name, sizeof(mvCpuCntrsTbl[counter].name));
|
||||
mvCpuCntrsTbl[counter].operation = op;
|
||||
mvCpuCntrsTbl[counter].opIdx = i+1;
|
||||
mvCpuCntrsTbl[counter].overhead = overhead;
|
||||
program_counter(counter, mvCpuCntrsTbl[counter].opIdx);
|
||||
mvOsPrintf("Counter=%d, opIdx=%d, overhead=%d\n",
|
||||
counter, mvCpuCntrsTbl[counter].opIdx, mvCpuCntrsTbl[counter].overhead);
|
||||
return MV_OK;
|
||||
}
|
||||
}
|
||||
return MV_NOT_FOUND;
|
||||
}
|
||||
|
||||
void mvCpuCntrsShow(MV_CPU_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
MV_U64 counters_avg;
|
||||
|
||||
if(pEvent->num_of_measurements < pEvent->avg_sample_count)
|
||||
return;
|
||||
|
||||
mvOsPrintf("%16s: ", pEvent->name);
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
{
|
||||
counters_avg = mvOsDivMod64(pEvent->counters_sum[i],
|
||||
pEvent->num_of_measurements, NULL);
|
||||
if(counters_avg >= mvCpuCntrsTbl[i].overhead)
|
||||
counters_avg -= mvCpuCntrsTbl[i].overhead;
|
||||
else
|
||||
counters_avg = 0;
|
||||
|
||||
mvOsPrintf("%s=%5llu, ", mvCpuCntrsTbl[i].name, counters_avg);
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
mvCpuCntrsEventClear(pEvent);
|
||||
mvCpuCntrsReset();
|
||||
}
|
||||
|
||||
void mvCpuCntrsStatus(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
{
|
||||
mvOsPrintf("#%d: %s, overhead=%d\n",
|
||||
i, mvCpuCntrsTbl[i].name, mvCpuCntrsTbl[i].overhead);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
*******************************************************************************/
|
||||
#ifndef __mvCpuCntrs_h__
|
||||
#define __mvCpuCntrs_h__
|
||||
|
||||
#include "mvTypes.h"
|
||||
#include "mvOs.h"
|
||||
|
||||
|
||||
#define MV_CPU_CNTRS_NUM 4
|
||||
#define MV_CPU_CNTRS_OPS_NUM 32
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MV_CPU_CNTRS_INVALID = 0,
|
||||
MV_CPU_CNTRS_CYCLES,
|
||||
MV_CPU_CNTRS_ICACHE_READ_MISS,
|
||||
MV_CPU_CNTRS_DCACHE_ACCESS,
|
||||
MV_CPU_CNTRS_DCACHE_READ_MISS,
|
||||
MV_CPU_CNTRS_DCACHE_READ_HIT,
|
||||
MV_CPU_CNTRS_DCACHE_WRITE_MISS,
|
||||
MV_CPU_CNTRS_DCACHE_WRITE_HIT,
|
||||
MV_CPU_CNTRS_DTLB_MISS,
|
||||
MV_CPU_CNTRS_TLB_MISS,
|
||||
MV_CPU_CNTRS_ITLB_MISS,
|
||||
MV_CPU_CNTRS_INSTRUCTIONS,
|
||||
MV_CPU_CNTRS_SINGLE_ISSUE,
|
||||
MV_CPU_CNTRS_MMU_READ_LATENCY,
|
||||
MV_CPU_CNTRS_MMU_READ_BEAT,
|
||||
MV_CPU_CNTRS_BRANCH_RETIRED,
|
||||
MV_CPU_CNTRS_BRANCH_TAKEN,
|
||||
MV_CPU_CNTRS_BRANCH_PREDICT_MISS,
|
||||
MV_CPU_CNTRS_BRANCH_PREDICT_COUNT,
|
||||
MV_CPU_CNTRS_WB_FULL_CYCLES,
|
||||
MV_CPU_CNTRS_WB_WRITE_LATENCY,
|
||||
MV_CPU_CNTRS_WB_WRITE_BEAT,
|
||||
MV_CPU_CNTRS_ICACHE_READ_LATENCY,
|
||||
MV_CPU_CNTRS_ICACHE_READ_BEAT,
|
||||
MV_CPU_CNTRS_DCACHE_READ_LATENCY,
|
||||
MV_CPU_CNTRS_DCACHE_READ_BEAT,
|
||||
MV_CPU_CNTRS_DCACHE_WRITE_LATENCY,
|
||||
MV_CPU_CNTRS_DCACHE_WRITE_BEAT,
|
||||
MV_CPU_CNTRS_LDM_STM_HOLD,
|
||||
MV_CPU_CNTRS_IS_HOLD,
|
||||
MV_CPU_CNTRS_DATA_WRITE_ACCESS,
|
||||
MV_CPU_CNTRS_DATA_READ_ACCESS,
|
||||
MV_CPU_CNTRS_BIU_SIMULT_ACCESS,
|
||||
MV_CPU_CNTRS_BIU_ANY_ACCESS,
|
||||
|
||||
} MV_CPU_CNTRS_OPS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[16];
|
||||
MV_CPU_CNTRS_OPS operation;
|
||||
int opIdx;
|
||||
MV_U32 overhead;
|
||||
|
||||
} MV_CPU_CNTRS_ENTRY;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[16];
|
||||
MV_U32 num_of_measurements;
|
||||
MV_U32 avg_sample_count;
|
||||
MV_U64 counters_before[MV_CPU_CNTRS_NUM];
|
||||
MV_U64 counters_after[MV_CPU_CNTRS_NUM];
|
||||
MV_U64 counters_sum[MV_CPU_CNTRS_NUM];
|
||||
|
||||
} MV_CPU_CNTRS_EVENT;
|
||||
|
||||
extern MV_CPU_CNTRS_ENTRY mvCpuCntrsTbl[MV_CPU_CNTRS_NUM];
|
||||
|
||||
|
||||
MV_STATUS mvCpuCntrsProgram(int counter, MV_CPU_CNTRS_OPS op,
|
||||
char* name, MV_U32 overhead);
|
||||
void mvCpuCntrsInit(void);
|
||||
MV_CPU_CNTRS_EVENT* mvCpuCntrsEventCreate(char* name, MV_U32 print_threshold);
|
||||
void mvCpuCntrsEventDelete(MV_CPU_CNTRS_EVENT* event);
|
||||
void mvCpuCntrsReset(void);
|
||||
void mvCpuCntrsShow(MV_CPU_CNTRS_EVENT* pEvent);
|
||||
void mvCpuCntrsEventClear(MV_CPU_CNTRS_EVENT* pEvent);
|
||||
|
||||
/* internal */
|
||||
void program_counter(int counter, int op);
|
||||
|
||||
static INLINE MV_U64 mvCpuCntrsRead(const int counter)
|
||||
{
|
||||
MV_U32 low = 0, high = 0;
|
||||
MV_U32 ll = 0;
|
||||
|
||||
switch(counter)
|
||||
{
|
||||
case 0:
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c12, 0" : : "r" (ll));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 0" : "=r" (low));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 1" : "=r" (high));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c12, 1" : : "r" (ll));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 2" : "=r" (low));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 3" : "=r" (high));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c12, 2" : : "r" (ll));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 4" : "=r" (low));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 5" : "=r" (high));
|
||||
break;
|
||||
|
||||
case 3:
|
||||
MV_ASM ("mcr p15, 0, %0, c15, c12, 3" : : "r" (ll));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 6" : "=r" (low));
|
||||
MV_ASM ("mrc p15, 0, %0, c15, c13, 7" : "=r" (high));
|
||||
break;
|
||||
|
||||
default:
|
||||
mvOsPrintf("mv_cpu_cntrs_read: bad counter number (%d)\n", counter);
|
||||
}
|
||||
program_counter(counter, mvCpuCntrsTbl[counter].opIdx);
|
||||
return (((MV_U64)high << 32 ) | low);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static INLINE void mvCpuCntrsReadBefore(MV_CPU_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
#if 0
|
||||
int i;
|
||||
|
||||
/* order is important - we want to measure the cycle count last here! */
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
pEvent->counters_before[i] = mvCpuCntrsRead(i);
|
||||
#else
|
||||
pEvent->counters_before[1] = mvCpuCntrsRead(1);
|
||||
pEvent->counters_before[3] = mvCpuCntrsRead(3);
|
||||
pEvent->counters_before[0] = mvCpuCntrsRead(0);
|
||||
pEvent->counters_before[2] = mvCpuCntrsRead(2);
|
||||
#endif
|
||||
}
|
||||
|
||||
static INLINE void mvCpuCntrsReadAfter(MV_CPU_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
|
||||
#if 0
|
||||
/* order is important - we want to measure the cycle count first here! */
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
pEvent->counters_after[i] = mvCpuCntrsRead(i);
|
||||
#else
|
||||
pEvent->counters_after[2] = mvCpuCntrsRead(2);
|
||||
pEvent->counters_after[0] = mvCpuCntrsRead(0);
|
||||
pEvent->counters_after[3] = mvCpuCntrsRead(3);
|
||||
pEvent->counters_after[1] = mvCpuCntrsRead(1);
|
||||
#endif
|
||||
|
||||
for(i=0; i<MV_CPU_CNTRS_NUM; i++)
|
||||
{
|
||||
pEvent->counters_sum[i] += (pEvent->counters_after[i] - pEvent->counters_before[i]);
|
||||
}
|
||||
pEvent->num_of_measurements++;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_MV_CPU_PERF_CNTRS
|
||||
|
||||
#define MV_CPU_CNTRS_READ(counter) mvCpuCntrsRead(counter)
|
||||
|
||||
#define MV_CPU_CNTRS_START(event) mvCpuCntrsReadBefore(event)
|
||||
|
||||
#define MV_CPU_CNTRS_STOP(event) mvCpuCntrsReadAfter(event)
|
||||
|
||||
#define MV_CPU_CNTRS_SHOW(event) mvCpuCntrsShow(event)
|
||||
|
||||
#else
|
||||
|
||||
#define MV_CPU_CNTRS_READ(counter)
|
||||
#define MV_CPU_CNTRS_START(event)
|
||||
#define MV_CPU_CNTRS_STOP(event)
|
||||
#define MV_CPU_CNTRS_SHOW(event)
|
||||
|
||||
#endif /* CONFIG_MV_CPU_PERF_CNTRS */
|
||||
|
||||
|
||||
#endif /* __mvCpuCntrs_h__ */
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvCpuL2Cntrs.h"
|
||||
|
||||
|
||||
|
||||
MV_CPU_L2_CNTRS_ENTRY mvCpuL2CntrsTbl[MV_CPU_L2_CNTRS_NUM];
|
||||
|
||||
MV_CPU_L2_CNTRS_EVENT* mvCpuL2CntrsEventTbl[128];
|
||||
|
||||
void mvCpuL2CntrsReset(void)
|
||||
{
|
||||
MV_U32 reg = 0;
|
||||
|
||||
MV_ASM ("mcr p15, 6, %0, c15, c13, 0" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 6, %0, c15, c13, 1" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 6, %0, c15, c13, 2" : : "r" (reg));
|
||||
MV_ASM ("mcr p15, 6, %0, c15, c13, 3" : : "r" (reg));
|
||||
}
|
||||
|
||||
static void mvCpuL2CntrConfig(int counter, int op)
|
||||
{
|
||||
MV_U32 reg = (1 << op) | 0x1; /*enable*/
|
||||
|
||||
switch(counter)
|
||||
{
|
||||
case 0:
|
||||
MV_ASM ("mcr p15, 6, %0, c15, c12, 0" : : "r" (reg));
|
||||
return;
|
||||
|
||||
case 1:
|
||||
MV_ASM ("mcr p15, 6, %0, c15, c12, 1" : : "r" (reg));
|
||||
return;
|
||||
|
||||
default:
|
||||
mvOsPrintf("mvCpuL2CntrConfig: bad counter number (%d)\n", counter);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void mvCpuL2CntrsEventClear(MV_CPU_L2_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<MV_CPU_L2_CNTRS_NUM; i++)
|
||||
{
|
||||
pEvent->counters_sum[i] = 0;
|
||||
}
|
||||
pEvent->num_of_measurements = 0;
|
||||
}
|
||||
|
||||
|
||||
MV_CPU_L2_CNTRS_EVENT* mvCpuL2CntrsEventCreate(char* name, MV_U32 print_threshold)
|
||||
{
|
||||
int i;
|
||||
MV_CPU_L2_CNTRS_EVENT* event = mvOsMalloc(sizeof(MV_CPU_L2_CNTRS_EVENT));
|
||||
|
||||
if(event)
|
||||
{
|
||||
strncpy(event->name, name, sizeof(event->name));
|
||||
event->num_of_measurements = 0;
|
||||
event->avg_sample_count = print_threshold;
|
||||
for(i=0; i<MV_CPU_L2_CNTRS_NUM; i++)
|
||||
{
|
||||
event->counters_before[i] = 0;
|
||||
event->counters_after[i] = 0;
|
||||
event->counters_sum[i] = 0;
|
||||
}
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
void mvCpuL2CntrsEventDelete(MV_CPU_L2_CNTRS_EVENT* event)
|
||||
{
|
||||
if(event != NULL)
|
||||
mvOsFree(event);
|
||||
}
|
||||
|
||||
|
||||
MV_STATUS mvCpuL2CntrsProgram(int counter, MV_CPU_L2_CNTRS_OPS op,
|
||||
char* name, MV_U32 overhead)
|
||||
{
|
||||
strncpy(mvCpuL2CntrsTbl[counter].name, name, sizeof(mvCpuL2CntrsTbl[counter].name));
|
||||
mvCpuL2CntrsTbl[counter].operation = op;
|
||||
mvCpuL2CntrsTbl[counter].opIdx = op;
|
||||
mvCpuL2CntrsTbl[counter].overhead = overhead;
|
||||
mvCpuL2CntrConfig(counter, op);
|
||||
mvOsPrintf("CPU L2 Counter %d: operation=%d, overhead=%d\n",
|
||||
counter, op, overhead);
|
||||
return MV_OK;
|
||||
}
|
||||
|
||||
void mvCpuL2CntrsShow(MV_CPU_L2_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
MV_U64 counters_avg;
|
||||
|
||||
if(pEvent->num_of_measurements < pEvent->avg_sample_count)
|
||||
return;
|
||||
|
||||
mvOsPrintf("%16s: ", pEvent->name);
|
||||
for(i=0; i<MV_CPU_L2_CNTRS_NUM; i++)
|
||||
{
|
||||
counters_avg = mvOsDivMod64(pEvent->counters_sum[i],
|
||||
pEvent->num_of_measurements, NULL);
|
||||
|
||||
if(counters_avg >= mvCpuL2CntrsTbl[i].overhead)
|
||||
counters_avg -= mvCpuL2CntrsTbl[i].overhead;
|
||||
else
|
||||
counters_avg = 0;
|
||||
|
||||
mvOsPrintf("%s=%5llu, ", mvCpuL2CntrsTbl[i].name, counters_avg);
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
mvCpuL2CntrsEventClear(pEvent);
|
||||
mvCpuL2CntrsReset();
|
||||
}
|
||||
|
||||
void mvCpuL2CntrsStatus(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<MV_CPU_L2_CNTRS_NUM; i++)
|
||||
{
|
||||
mvOsPrintf("#%d: %s, overhead=%d\n",
|
||||
i, mvCpuL2CntrsTbl[i].name, mvCpuL2CntrsTbl[i].overhead);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
*******************************************************************************/
|
||||
#ifndef __mvCpuL2Cntrs_h__
|
||||
#define __mvCpuL2Cntrs_h__
|
||||
|
||||
#include "mvTypes.h"
|
||||
#include "mvOs.h"
|
||||
|
||||
|
||||
#define MV_CPU_L2_CNTRS_NUM 2
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MV_CPU_L2_CNTRS_ENABLE = 0,
|
||||
MV_CPU_L2_CNTRS_DATA_REQ,
|
||||
MV_CPU_L2_CNTRS_DATA_MISS_REQ,
|
||||
MV_CPU_L2_CNTRS_INST_REQ,
|
||||
MV_CPU_L2_CNTRS_INST_MISS_REQ,
|
||||
MV_CPU_L2_CNTRS_DATA_READ_REQ,
|
||||
MV_CPU_L2_CNTRS_DATA_READ_MISS_REQ,
|
||||
MV_CPU_L2_CNTRS_DATA_WRITE_REQ,
|
||||
MV_CPU_L2_CNTRS_DATA_WRITE_MISS_REQ,
|
||||
MV_CPU_L2_CNTRS_RESERVED,
|
||||
MV_CPU_L2_CNTRS_DIRTY_EVICT_REQ,
|
||||
MV_CPU_L2_CNTRS_EVICT_BUFF_STALL,
|
||||
MV_CPU_L2_CNTRS_ACTIVE_CYCLES,
|
||||
|
||||
} MV_CPU_L2_CNTRS_OPS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[16];
|
||||
MV_CPU_L2_CNTRS_OPS operation;
|
||||
int opIdx;
|
||||
MV_U32 overhead;
|
||||
|
||||
} MV_CPU_L2_CNTRS_ENTRY;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[16];
|
||||
MV_U32 num_of_measurements;
|
||||
MV_U32 avg_sample_count;
|
||||
MV_U64 counters_before[MV_CPU_L2_CNTRS_NUM];
|
||||
MV_U64 counters_after[MV_CPU_L2_CNTRS_NUM];
|
||||
MV_U64 counters_sum[MV_CPU_L2_CNTRS_NUM];
|
||||
|
||||
} MV_CPU_L2_CNTRS_EVENT;
|
||||
|
||||
|
||||
MV_STATUS mvCpuL2CntrsProgram(int counter, MV_CPU_L2_CNTRS_OPS op,
|
||||
char* name, MV_U32 overhead);
|
||||
void mvCpuL2CntrsInit(void);
|
||||
MV_CPU_L2_CNTRS_EVENT* mvCpuL2CntrsEventCreate(char* name, MV_U32 print_threshold);
|
||||
void mvCpuL2CntrsEventDelete(MV_CPU_L2_CNTRS_EVENT* event);
|
||||
void mvCpuL2CntrsReset(void);
|
||||
void mvCpuL2CntrsShow(MV_CPU_L2_CNTRS_EVENT* pEvent);
|
||||
void mvCpuL2CntrsEventClear(MV_CPU_L2_CNTRS_EVENT* pEvent);
|
||||
|
||||
static INLINE MV_U64 mvCpuL2CntrsRead(const int counter)
|
||||
{
|
||||
MV_U32 low = 0, high = 0;
|
||||
|
||||
switch(counter)
|
||||
{
|
||||
case 0:
|
||||
MV_ASM ("mrc p15, 6, %0, c15, c13, 0" : "=r" (low));
|
||||
MV_ASM ("mrc p15, 6, %0, c15, c13, 1" : "=r" (high));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
MV_ASM ("mrc p15, 6, %0, c15, c13, 2" : "=r" (low));
|
||||
MV_ASM ("mrc p15, 6, %0, c15, c13, 3" : "=r" (high));
|
||||
break;
|
||||
|
||||
default:
|
||||
mvOsPrintf("mvCpuL2CntrsRead: bad counter number (%d)\n", counter);
|
||||
}
|
||||
return (((MV_U64)high << 32 ) | low);
|
||||
|
||||
}
|
||||
|
||||
static INLINE void mvCpuL2CntrsReadBefore(MV_CPU_L2_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<MV_CPU_L2_CNTRS_NUM; i++)
|
||||
pEvent->counters_before[i] = mvCpuL2CntrsRead(i);
|
||||
}
|
||||
|
||||
static INLINE void mvCpuL2CntrsReadAfter(MV_CPU_L2_CNTRS_EVENT* pEvent)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i<MV_CPU_L2_CNTRS_NUM; i++)
|
||||
{
|
||||
pEvent->counters_after[i] = mvCpuL2CntrsRead(i);
|
||||
pEvent->counters_sum[i] += (pEvent->counters_after[i] - pEvent->counters_before[i]);
|
||||
}
|
||||
pEvent->num_of_measurements++;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_MV_CPU_L2_PERF_CNTRS
|
||||
|
||||
#define MV_CPU_L2_CNTRS_READ(counter) mvCpuL2CntrsRead(counter)
|
||||
|
||||
#define MV_CPU_L2_CNTRS_START(event) mvCpuL2CntrsReadBefore(event)
|
||||
|
||||
#define MV_CPU_L2_CNTRS_STOP(event) mvCpuL2CntrsReadAfter(event)
|
||||
|
||||
#define MV_CPU_L2_CNTRS_SHOW(event) mvCpuL2CntrsShow(event)
|
||||
|
||||
#else
|
||||
|
||||
#define MV_CPU_L2_CNTRS_READ(counter)
|
||||
#define MV_CPU_L2_CNTRS_START(event)
|
||||
#define MV_CPU_L2_CNTRS_STOP(event)
|
||||
#define MV_CPU_L2_CNTRS_SHOW(event)
|
||||
|
||||
#endif /* CONFIG_MV_CPU_L2_PERF_CNTRS */
|
||||
|
||||
|
||||
#endif /* __mvCpuL2Cntrs_h__ */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,191 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDram
|
||||
#define __INCmvDram
|
||||
|
||||
#include "ddr1_2/mvDramIf.h"
|
||||
#include "twsi/mvTwsi.h"
|
||||
|
||||
#define MAX_DIMM_NUM 2
|
||||
#define SPD_SIZE 128
|
||||
|
||||
/* Dimm spd offsets */
|
||||
#define DIMM_MEM_TYPE 2
|
||||
#define DIMM_ROW_NUM 3
|
||||
#define DIMM_COL_NUM 4
|
||||
#define DIMM_MODULE_BANK_NUM 5
|
||||
#define DIMM_DATA_WIDTH 6
|
||||
#define DIMM_VOLT_IF 8
|
||||
#define DIMM_MIN_CC_AT_MAX_CAS 9
|
||||
#define DIMM_ERR_CHECK_TYPE 11
|
||||
#define DIMM_REFRESH_INTERVAL 12
|
||||
#define DIMM_SDRAM_WIDTH 13
|
||||
#define DIMM_ERR_CHECK_DATA_WIDTH 14
|
||||
#define DIMM_MIN_CLK_DEL 15
|
||||
#define DIMM_BURST_LEN_SUP 16
|
||||
#define DIMM_DEV_BANK_NUM 17
|
||||
#define DIMM_SUP_CAL 18
|
||||
#define DIMM_DDR2_TYPE_INFORMATION 20 /* DDR2 only */
|
||||
#define DIMM_BUF_ADDR_CONT_IN 21
|
||||
#define DIMM_MIN_CC_AT_MAX_CAS_MINUS1 23
|
||||
#define DIMM_MIN_CC_AT_MAX_CAS_MINUS2 25
|
||||
#define DIMM_MIN_ROW_PRECHARGE_TIME 27
|
||||
#define DIMM_MIN_ROW_ACTIVE_TO_ROW_ACTIVE 28
|
||||
#define DIMM_MIN_RAS_TO_CAS_DELAY 29
|
||||
#define DIMM_MIN_RAS_PULSE_WIDTH 30
|
||||
#define DIMM_BANK_DENSITY 31
|
||||
#define DIMM_MIN_WRITE_RECOVERY_TIME 36
|
||||
#define DIMM_MIN_WRITE_TO_READ_CMD_DELAY 37
|
||||
#define DIMM_MIN_READ_TO_PRECH_CMD_DELAY 38
|
||||
#define DIMM_MIN_REFRESH_TO_ACTIVATE_CMD 42
|
||||
|
||||
/* Dimm Memory Type values */
|
||||
#define DIMM_MEM_TYPE_SDRAM 0x4
|
||||
#define DIMM_MEM_TYPE_DDR1 0x7
|
||||
#define DIMM_MEM_TYPE_DDR2 0x8
|
||||
|
||||
#define DIMM_MODULE_MANU_OFFS 64
|
||||
#define DIMM_MODULE_MANU_SIZE 8
|
||||
#define DIMM_MODULE_VEN_OFFS 73
|
||||
#define DIMM_MODULE_VEN_SIZE 25
|
||||
#define DIMM_MODULE_ID_OFFS 99
|
||||
#define DIMM_MODULE_ID_SIZE 18
|
||||
|
||||
/* enumeration for voltage levels. */
|
||||
typedef enum _mvDimmVoltageIf
|
||||
{
|
||||
TTL_5V_TOLERANT,
|
||||
LVTTL,
|
||||
HSTL_1_5V,
|
||||
SSTL_3_3V,
|
||||
SSTL_2_5V,
|
||||
VOLTAGE_UNKNOWN,
|
||||
} MV_DIMM_VOLTAGE_IF;
|
||||
|
||||
|
||||
/* enumaration for SDRAM CAS Latencies. */
|
||||
typedef enum _mvDimmSdramCas
|
||||
{
|
||||
SD_CL_1 =1,
|
||||
SD_CL_2,
|
||||
SD_CL_3,
|
||||
SD_CL_4,
|
||||
SD_CL_5,
|
||||
SD_CL_6,
|
||||
SD_CL_7,
|
||||
SD_FAULT
|
||||
}MV_DIMM_SDRAM_CAS;
|
||||
|
||||
|
||||
/* DIMM information structure */
|
||||
typedef struct _mvDimmInfo
|
||||
{
|
||||
MV_MEMORY_TYPE memoryType; /* DDR or SDRAM */
|
||||
|
||||
MV_U8 spdRawData[SPD_SIZE]; /* Content of SPD-EEPROM copied 1:1 */
|
||||
|
||||
/* DIMM dimensions */
|
||||
MV_U32 numOfRowAddr;
|
||||
MV_U32 numOfColAddr;
|
||||
MV_U32 numOfModuleBanks;
|
||||
MV_U32 dataWidth;
|
||||
MV_U32 errorCheckType; /* ECC , PARITY..*/
|
||||
MV_U32 sdramWidth; /* 4,8,16 or 32 */
|
||||
MV_U32 errorCheckDataWidth; /* 0 - no, 1 - Yes */
|
||||
MV_U32 burstLengthSupported;
|
||||
MV_U32 numOfBanksOnEachDevice;
|
||||
MV_U32 suportedCasLatencies;
|
||||
MV_U32 refreshInterval;
|
||||
MV_U32 dimmBankDensity;
|
||||
MV_U32 dimmTypeInfo; /* DDR2 only */
|
||||
MV_U32 dimmAttributes;
|
||||
|
||||
/* DIMM timing parameters */
|
||||
MV_U32 minCycleTimeAtMaxCasLatPs;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus1Ps;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus2Ps;
|
||||
MV_U32 minRowPrechargeTime;
|
||||
MV_U32 minRowActiveToRowActive;
|
||||
MV_U32 minRasToCasDelay;
|
||||
MV_U32 minRasPulseWidth;
|
||||
MV_U32 minWriteRecoveryTime; /* DDR2 only */
|
||||
MV_U32 minWriteToReadCmdDelay; /* DDR2 only */
|
||||
MV_U32 minReadToPrechCmdDelay; /* DDR2 only */
|
||||
MV_U32 minRefreshToActiveCmd; /* DDR2 only */
|
||||
|
||||
/* Parameters calculated from the extracted DIMM information */
|
||||
MV_U32 size; /* 16,64,128,256 or 512 MByte in MB units */
|
||||
MV_U32 deviceDensity; /* 16,64,128,256 or 512 Mbit in MB units */
|
||||
MV_U32 numberOfDevices;
|
||||
|
||||
} MV_DIMM_INFO;
|
||||
|
||||
|
||||
MV_STATUS mvDramBankInfoGet(MV_U32 bankNum, MV_DRAM_BANK_INFO *pBankInfo);
|
||||
MV_STATUS dimmSpdGet(MV_U32 dimmNum, MV_DIMM_INFO *pDimmInfo);
|
||||
MV_VOID dimmSpdPrint(MV_U32 dimmNum);
|
||||
MV_STATUS dimmSpdCpy(MV_VOID);
|
||||
|
||||
#endif /* __INCmvDram */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,179 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvDramIfh
|
||||
#define __INCmvDramIfh
|
||||
|
||||
/* includes */
|
||||
#include "ddr1_2/mvDramIfRegs.h"
|
||||
#include "ddr1_2/mvDramIfConfig.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
|
||||
/* defines */
|
||||
/* DRAM Timing parameters */
|
||||
#define SDRAM_TWR 15 /* ns tWr */
|
||||
#define SDRAM_TRFC_64_512M_AT_200MHZ 70 /* ns tRfc for dens 64-512 @ 200MHz */
|
||||
#define SDRAM_TRFC_64_512M 75 /* ns tRfc for dens 64-512 */
|
||||
#define SDRAM_TRFC_1G 120 /* ns tRfc for dens 1GB */
|
||||
#define SDRAM_TR2R_CYC 1 /* cycle for tR2r */
|
||||
#define SDRAM_TR2WW2R_CYC 1 /* cycle for tR2wW2r */
|
||||
|
||||
/* typedefs */
|
||||
|
||||
/* enumeration for memory types */
|
||||
typedef enum _mvMemoryType
|
||||
{
|
||||
MEM_TYPE_SDRAM,
|
||||
MEM_TYPE_DDR1,
|
||||
MEM_TYPE_DDR2
|
||||
}MV_MEMORY_TYPE;
|
||||
|
||||
/* enumeration for DDR1 supported CAS Latencies */
|
||||
typedef enum _mvDimmDdr1Cas
|
||||
{
|
||||
DDR1_CL_1_5 = 0x02,
|
||||
DDR1_CL_2 = 0x04,
|
||||
DDR1_CL_2_5 = 0x08,
|
||||
DDR1_CL_3 = 0x10,
|
||||
DDR1_CL_4 = 0x40,
|
||||
DDR1_CL_FAULT
|
||||
} MV_DIMM_DDR1_CAS;
|
||||
|
||||
/* enumeration for DDR2 supported CAS Latencies */
|
||||
typedef enum _mvDimmDdr2Cas
|
||||
{
|
||||
DDR2_CL_3 = 0x08,
|
||||
DDR2_CL_4 = 0x10,
|
||||
DDR2_CL_5 = 0x20,
|
||||
DDR2_CL_FAULT
|
||||
} MV_DIMM_DDR2_CAS;
|
||||
|
||||
|
||||
typedef struct _mvDramBankInfo
|
||||
{
|
||||
MV_MEMORY_TYPE memoryType; /* DDR1, DDR2 or SDRAM */
|
||||
|
||||
/* DIMM dimensions */
|
||||
MV_U32 numOfRowAddr;
|
||||
MV_U32 numOfColAddr;
|
||||
MV_U32 dataWidth;
|
||||
MV_U32 errorCheckType; /* ECC , PARITY..*/
|
||||
MV_U32 sdramWidth; /* 4,8,16 or 32 */
|
||||
MV_U32 errorCheckDataWidth; /* 0 - no, 1 - Yes */
|
||||
MV_U32 burstLengthSupported;
|
||||
MV_U32 numOfBanksOnEachDevice;
|
||||
MV_U32 suportedCasLatencies;
|
||||
MV_U32 refreshInterval;
|
||||
|
||||
/* DIMM timing parameters */
|
||||
MV_U32 minCycleTimeAtMaxCasLatPs;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus1Ps;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus2Ps;
|
||||
MV_U32 minRowPrechargeTime;
|
||||
MV_U32 minRowActiveToRowActive;
|
||||
MV_U32 minRasToCasDelay;
|
||||
MV_U32 minRasPulseWidth;
|
||||
MV_U32 minWriteRecoveryTime; /* DDR2 only */
|
||||
MV_U32 minWriteToReadCmdDelay; /* DDR2 only */
|
||||
MV_U32 minReadToPrechCmdDelay; /* DDR2 only */
|
||||
MV_U32 minRefreshToActiveCmd; /* DDR2 only */
|
||||
|
||||
/* Parameters calculated from the extracted DIMM information */
|
||||
MV_U32 size;
|
||||
MV_U32 deviceDensity; /* 16,64,128,256 or 512 Mbit */
|
||||
MV_U32 numberOfDevices;
|
||||
|
||||
/* DIMM attributes (MV_TRUE for yes) */
|
||||
MV_BOOL registeredAddrAndControlInputs;
|
||||
|
||||
}MV_DRAM_BANK_INFO;
|
||||
|
||||
/* This structure describes CPU interface address decode window */
|
||||
typedef struct _mvDramIfDecWin
|
||||
{
|
||||
MV_ADDR_WIN addrWin; /* An address window*/
|
||||
MV_BOOL enable; /* Address decode window is enabled/disabled */
|
||||
}MV_DRAM_DEC_WIN;
|
||||
|
||||
#include "ddr1_2/mvDram.h"
|
||||
|
||||
/* mvDramIf.h API list */
|
||||
MV_VOID mvDramIfBasicAsmInit(MV_VOID);
|
||||
MV_STATUS mvDramIfDetect(MV_U32 forcedCl);
|
||||
MV_VOID _mvDramIfConfig(MV_VOID);
|
||||
|
||||
MV_STATUS mvDramIfWinSet(MV_TARGET target, MV_DRAM_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvDramIfWinGet(MV_TARGET target, MV_DRAM_DEC_WIN *pAddrDecWin);
|
||||
MV_STATUS mvDramIfWinEnable(MV_TARGET target,MV_BOOL enable);
|
||||
MV_32 mvDramIfBankSizeGet(MV_U32 bankNum);
|
||||
MV_32 mvDramIfBankBaseGet(MV_U32 bankNum);
|
||||
MV_32 mvDramIfSizeGet(MV_VOID);
|
||||
|
||||
#if 0
|
||||
MV_STATUS mvDramIfMbusCtrlSet(MV_XBAR_TARGET *pPizzaArbArray);
|
||||
MV_STATUS mvDramIfMbusToutSet(MV_U32 timeout, MV_BOOL enable);
|
||||
#endif
|
||||
|
||||
#endif /* __INCmvDramIfh */
|
||||
@@ -0,0 +1,192 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvDramIfConfigh
|
||||
#define __INCmvDramIfConfigh
|
||||
|
||||
/* includes */
|
||||
|
||||
/* defines */
|
||||
|
||||
/* registers defaults values */
|
||||
|
||||
#define SDRAM_CONFIG_DV \
|
||||
(SDRAM_PERR_WRITE | \
|
||||
SDRAM_SRMODE | \
|
||||
SDRAM_SRCLK_GATED)
|
||||
|
||||
#define SDRAM_DUNIT_CTRL_LOW_DV \
|
||||
(SDRAM_CTRL_POS_RISE | \
|
||||
SDRAM_CLK1DRV_NORMAL | \
|
||||
SDRAM_LOCKEN_ENABLE)
|
||||
|
||||
#define SDRAM_ADDR_CTRL_DV 0
|
||||
|
||||
#define SDRAM_TIMING_CTRL_LOW_REG_DV \
|
||||
((0x2 << SDRAM_TRCD_OFFS) | \
|
||||
(0x2 << SDRAM_TRP_OFFS) | \
|
||||
(0x1 << SDRAM_TWR_OFFS) | \
|
||||
(0x0 << SDRAM_TWTR_OFFS) | \
|
||||
(0x5 << SDRAM_TRAS_OFFS) | \
|
||||
(0x1 << SDRAM_TRRD_OFFS))
|
||||
/* TRFC 0x27, TW2W 0x1 */
|
||||
#define SDRAM_TIMING_CTRL_HIGH_REG_DV (( 0x7 << SDRAM_TRFC_OFFS ) |\
|
||||
( 0x2 << SDRAM_TRFC_EXT_OFFS) |\
|
||||
( 0x1 << SDRAM_TW2W_OFFS))
|
||||
|
||||
#define SDRAM_OPEN_PAGES_CTRL_REG_DV SDRAM_OPEN_PAGE_EN
|
||||
|
||||
/* DDR2 ODT default register values */
|
||||
|
||||
/* Presence Ctrl Low Ctrl High Dunit Ctrl Ext Mode */
|
||||
/* CS0 0x84210000 0x00000000 0x0000780F 0x00000440 */
|
||||
/* CS0+CS1 0x84210000 0x00000000 0x0000780F 0x00000440 */
|
||||
/* CS0+CS2 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
/* CS0+CS1+CS2 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
/* CS0+CS2+CS3 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
/* CS0+CS1+CS2+CS3 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
|
||||
#define DDR2_ODT_CTRL_LOW_CS0_DV 0x84210000
|
||||
#define DDR2_ODT_CTRL_HIGH_CS0_DV 0x00000000
|
||||
#define DDR2_DUNIT_ODT_CTRL_CS0_DV 0x0000780F
|
||||
#define DDR_SDRAM_EXT_MODE_CS0_DV 0x00000440
|
||||
|
||||
#define DDR2_ODT_CTRL_LOW_CS0_CS2_DV 0x030C030C
|
||||
#define DDR2_ODT_CTRL_HIGH_CS0_CS2_DV 0x00000000
|
||||
#define DDR2_DUNIT_ODT_CTRL_CS0_CS2_DV 0x0000740F
|
||||
#define DDR_SDRAM_EXT_MODE_CS0_CS2_DV 0x00000404
|
||||
|
||||
|
||||
/* DDR SDRAM Adderss/Control and Data Pads Calibration default values */
|
||||
#define DDR1_ADDR_CTRL_PAD_STRENGTH_TYPICAL_DV \
|
||||
(1 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
#define DDR2_ADDR_CTRL_PAD_STRENGTH_TYPICAL_DV \
|
||||
(3 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
|
||||
|
||||
#define DDR1_DATA_PAD_STRENGTH_TYPICAL_DV \
|
||||
(1 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
#define DDR2_DATA_PAD_STRENGTH_TYPICAL_DV \
|
||||
(3 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
|
||||
/* DDR SDRAM Mode Register default value */
|
||||
#define DDR1_MODE_REG_DV 0x00000000
|
||||
#define DDR2_MODE_REG_DV 0x00000400
|
||||
|
||||
/* DDR SDRAM Timing parameter default values */
|
||||
#define DDR1_TIMING_LOW_DV 0x11602220
|
||||
#define DDR1_TIMING_HIGH_DV 0x0000000d
|
||||
|
||||
#define DDR2_TIMING_LOW_DV 0x11812220
|
||||
#define DDR2_TIMING_HIGH_DV 0x0000030f
|
||||
|
||||
/* For Guideline (GL# MEM-4) DQS Reference Delay Tuning */
|
||||
#define FTDLL_DDR1_166MHZ ((0x1 << 0) | \
|
||||
(0x7F<< 12) | \
|
||||
(0x1 << 22))
|
||||
|
||||
#define FTDLL_DDR1_133MHZ FTDLL_DDR1_166MHZ
|
||||
|
||||
#define FTDLL_DDR1_200MHZ ((0x1 << 0) | \
|
||||
(0x1 << 12) | \
|
||||
(0x3 << 14) | \
|
||||
(0x1 << 18) | \
|
||||
(0x1 << 22))
|
||||
|
||||
|
||||
#define FTDLL_DDR2_166MHZ ((0x1 << 0) | \
|
||||
(0x1 << 12) | \
|
||||
(0x1 << 14) | \
|
||||
(0x1 << 16) | \
|
||||
(0x1 << 19) | \
|
||||
(0xF << 20))
|
||||
|
||||
#define FTDLL_DDR2_133MHZ FTDLL_DDR2_166MHZ
|
||||
|
||||
#define FTDLL_DDR2_200MHZ ((0x1 << 0) | \
|
||||
(0x1 << 12) | \
|
||||
(0x1 << 14) | \
|
||||
(0x1 << 16) | \
|
||||
(0x1 << 19) | \
|
||||
(0xF << 20))
|
||||
|
||||
#define FTDLL_DDR2_250MHZ 0x445001
|
||||
|
||||
/* Orion 1 B1 and above */
|
||||
#define FTDLL_DDR1_166MHZ_5181_B1 0x45D001
|
||||
|
||||
/* Orion nas */
|
||||
#define FTDLL_DDR2_166MHZ_5182 0x597001
|
||||
|
||||
/* Orion 2 D0 and above */
|
||||
#define FTDLL_DDR1_166MHZ_5281_D0 0x8D0001
|
||||
#define FTDLL_DDR1_200MHZ_5281_D0 0x8D0001
|
||||
#define FTDLL_DDR2_166MHZ_5281_D0 0x485001
|
||||
#define FTDLL_DDR2_200MHZ_5281_D0 0x485001
|
||||
#define FTDLL_DDR2_250MHZ_5281_D0 0x445001
|
||||
#define FTDLL_DDR2_200MHZ_5281_D1 0x995001
|
||||
#define FTDLL_DDR2_250MHZ_5281_D1 0x984801
|
||||
|
||||
#endif /* __INCmvDramIfh */
|
||||
@@ -0,0 +1,306 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDramIfRegsh
|
||||
#define __INCmvDramIfRegsh
|
||||
|
||||
|
||||
/* DDR SDRAM Controller Address Decode Registers */
|
||||
/* SDRAM CSn Base Address Register (SCBAR) */
|
||||
#define SDRAM_BASE_ADDR_REG(csNum) (0x1500 + (csNum * 8))
|
||||
#define SCBAR_BASE_OFFS 16
|
||||
#define SCBAR_BASE_MASK (0xffff << SCBAR_BASE_OFFS)
|
||||
#define SCBAR_BASE_ALIGNMENT 0x10000
|
||||
|
||||
/* SDRAM CSn Size Register (SCSR) */
|
||||
#define SDRAM_SIZE_REG(csNum) (0x1504 + (csNum * 8))
|
||||
#define SCSR_WIN_EN BIT0
|
||||
#define SCSR_SIZE_OFFS 16
|
||||
#define SCSR_SIZE_MASK (0xffff << SCSR_SIZE_OFFS)
|
||||
#define SCSR_SIZE_ALIGNMENT 0x10000
|
||||
|
||||
/* configuration register */
|
||||
#define SDRAM_CONFIG_REG 0x1400
|
||||
#define SDRAM_REFRESH_OFFS 0
|
||||
#define SDRAM_REFRESH_MAX 0x3000
|
||||
#define SDRAM_REFRESH_MASK (SDRAM_REFRESH_MAX << SDRAM_REFRESH_OFFS)
|
||||
#define SDRAM_DWIDTH_OFFS 14
|
||||
#define SDRAM_DWIDTH_MASK (3 << SDRAM_DWIDTH_OFFS)
|
||||
#define SDRAM_DWIDTH_16BIT (1 << SDRAM_DWIDTH_OFFS)
|
||||
#define SDRAM_DWIDTH_32BIT (2 << SDRAM_DWIDTH_OFFS)
|
||||
#define SDRAM_DTYPE_OFFS 16
|
||||
#define SDRAM_DTYPE_MASK (1 << SDRAM_DTYPE_OFFS)
|
||||
#define SDRAM_DTYPE_DDR1 (0 << SDRAM_DTYPE_OFFS)
|
||||
#define SDRAM_DTYPE_DDR2 (1 << SDRAM_DTYPE_OFFS)
|
||||
#define SDRAM_REGISTERED (1 << 17)
|
||||
#define SDRAM_PERR_OFFS 18
|
||||
#define SDRAM_PERR_MASK (1 << SDRAM_PERR_OFFS)
|
||||
#define SDRAM_PERR_NO_WRITE (0 << SDRAM_PERR_OFFS)
|
||||
#define SDRAM_PERR_WRITE (1 << SDRAM_PERR_OFFS)
|
||||
#define SDRAM_DCFG_OFFS 20
|
||||
#define SDRAM_DCFG_MASK (0x3 << SDRAM_DCFG_OFFS)
|
||||
#define SDRAM_DCFG_X16_DEV (1 << SDRAM_DCFG_OFFS)
|
||||
#define SDRAM_DCFG_X8_DEV (2 << SDRAM_DCFG_OFFS)
|
||||
#define SDRAM_SRMODE (1 << 24)
|
||||
#define SDRAM_SRCLK_OFFS 25
|
||||
#define SDRAM_SRCLK_MASK (1 << SDRAM_SRCLK_OFFS)
|
||||
#define SDRAM_SRCLK_KEPT (0 << SDRAM_SRCLK_OFFS)
|
||||
#define SDRAM_SRCLK_GATED (1 << SDRAM_SRCLK_OFFS)
|
||||
#define SDRAM_CATTH_OFFS 26
|
||||
#define SDRAM_CATTHR_EN (1 << SDRAM_CATTH_OFFS)
|
||||
|
||||
|
||||
/* dunit control register */
|
||||
#define SDRAM_DUNIT_CTRL_REG 0x1404
|
||||
#define SDRAM_CTRL_POS_OFFS 6
|
||||
#define SDRAM_CTRL_POS_FALL (0 << SDRAM_CTRL_POS_OFFS)
|
||||
#define SDRAM_CTRL_POS_RISE (1 << SDRAM_CTRL_POS_OFFS)
|
||||
#define SDRAM_CLK1DRV_OFFS 12
|
||||
#define SDRAM_CLK1DRV_MASK (1 << SDRAM_CLK1DRV_OFFS)
|
||||
#define SDRAM_CLK1DRV_HIGH_Z (0 << SDRAM_CLK1DRV_OFFS)
|
||||
#define SDRAM_CLK1DRV_NORMAL (1 << SDRAM_CLK1DRV_OFFS)
|
||||
#define SDRAM_LOCKEN_OFFS 18
|
||||
#define SDRAM_LOCKEN_MASK (1 << SDRAM_LOCKEN_OFFS)
|
||||
#define SDRAM_LOCKEN_DISABLE (0 << SDRAM_LOCKEN_OFFS)
|
||||
#define SDRAM_LOCKEN_ENABLE (1 << SDRAM_LOCKEN_OFFS)
|
||||
#define SDRAM_ST_BURST_DEL_OFFS 24
|
||||
#define SDRAM_ST_BURST_DEL_MAX 0xf
|
||||
#define SDRAM_ST_BURST_DEL_MASK (SDRAM_ST_BURST_DEL_MAX<<SDRAM_ST_BURST_DEL_OFFS)
|
||||
|
||||
/* sdram timing control low register */
|
||||
#define SDRAM_TIMING_CTRL_LOW_REG 0x1408
|
||||
#define SDRAM_TRCD_OFFS 4
|
||||
#define SDRAM_TRCD_MASK (0xF << SDRAM_TRCD_OFFS)
|
||||
#define SDRAM_TRP_OFFS 8
|
||||
#define SDRAM_TRP_MASK (0xF << SDRAM_TRP_OFFS)
|
||||
#define SDRAM_TWR_OFFS 12
|
||||
#define SDRAM_TWR_MASK (0xF << SDRAM_TWR_OFFS)
|
||||
#define SDRAM_TWTR_OFFS 16
|
||||
#define SDRAM_TWTR_MASK (0xF << SDRAM_TWTR_OFFS)
|
||||
#define SDRAM_TRAS_OFFS 20
|
||||
#define SDRAM_TRAS_MASK (0xF << SDRAM_TRAS_OFFS)
|
||||
#define SDRAM_TRRD_OFFS 24
|
||||
#define SDRAM_TRRD_MASK (0xF << SDRAM_TRRD_OFFS)
|
||||
#define SDRAM_TRTP_OFFS 28
|
||||
#define SDRAM_TRTP_MASK (0xF << SDRAM_TRTP_OFFS)
|
||||
|
||||
/* sdram timing control high register */
|
||||
#define SDRAM_TIMING_CTRL_HIGH_REG 0x140c
|
||||
#define SDRAM_TRFC_OFFS 0
|
||||
#define SDRAM_TRFC_MASK (0xF << SDRAM_TRFC_OFFS)
|
||||
#define SDRAM_TR2R_OFFS 4
|
||||
#define SDRAM_TR2R_MASK (0x3 << SDRAM_TR2R_OFFS)
|
||||
#define SDRAM_TR2W_W2R_OFFS 6
|
||||
#define SDRAM_TR2W_W2R_MASK (0x3 << SDRAM_TR2W_W2R_OFFS)
|
||||
#define SDRAM_TRFC_EXT_OFFS 8
|
||||
#define SDRAM_TRFC_EXT_MASK (0x1 << SDRAM_TRFC_EXT_OFFS)
|
||||
#define SDRAM_TW2W_OFFS 10
|
||||
#define SDRAM_TW2W_MASK (0x1 << SDRAM_TW2W_OFFS)
|
||||
|
||||
/* address control register */
|
||||
#define SDRAM_ADDR_CTRL_REG 0x1410
|
||||
#define SDRAM_DSIZE_OFFS 4
|
||||
#define SDRAM_DSIZE_MASK (0x3 << SDRAM_DSIZE_OFFS)
|
||||
#define SDRAM_DSIZE_128Mb (0x0 << SDRAM_DSIZE_OFFS)
|
||||
#define SDRAM_DSIZE_256Mb (0x1 << SDRAM_DSIZE_OFFS)
|
||||
#define SDRAM_DSIZE_512Mb (0x2 << SDRAM_DSIZE_OFFS)
|
||||
|
||||
/* SDRAM Open Pages Control registers */
|
||||
#define SDRAM_OPEN_PAGE_CTRL_REG 0x1414
|
||||
#define SDRAM_OPEN_PAGE_EN (0 << 0)
|
||||
#define SDRAM_OPEN_PAGE_DIS (1 << 0)
|
||||
|
||||
/* sdram opertion register */
|
||||
#define SDRAM_OPERATION_REG 0x1418
|
||||
#define SDRAM_CMD_OFFS 0
|
||||
#define SDRAM_CMD_MASK (0x7 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_NORMAL (0x0 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_PRECHARGE_ALL (0x1 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_REFRESH_ALL (0x2 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_REG_SET_CMD (0x3 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_EXT_MODE_SET (0x4 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_NOP (0x5 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_SLF_RFRSH (0x7 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_EMRS2_CMD (0x8 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_EMRS3_CMD (0x9 << SDRAM_CMD_OFFS)
|
||||
|
||||
/* sdram mode register */
|
||||
#define SDRAM_MODE_REG 0x141c
|
||||
#define SDRAM_BURST_LEN_OFFS 0
|
||||
#define SDRAM_BURST_LEN_MASK (0x7 << SDRAM_BURST_LEN_OFFS)
|
||||
#define SDRAM_BURST_LEN_4 (0x2 << SDRAM_BURST_LEN_OFFS)
|
||||
#define SDRAM_CL_OFFS 4
|
||||
#define SDRAM_CL_MASK (0x7 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR1_CL_2 (0x2 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR1_CL_3 (0x3 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR1_CL_4 (0x4 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR1_CL_1_5 (0x5 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR1_CL_2_5 (0x6 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_3 (0x3 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_4 (0x4 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_5 (0x5 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_TM_OFFS 7
|
||||
#define SDRAM_TM_MASK (1 << SDRAM_TM_OFFS)
|
||||
#define SDRAM_TM_NORMAL (0 << SDRAM_TM_OFFS)
|
||||
#define SDRAM_TM_TEST_MODE (1 << SDRAM_TM_OFFS)
|
||||
#define SDRAM_DLL_OFFS 8
|
||||
#define SDRAM_DLL_MASK (1 << SDRAM_DLL_OFFS)
|
||||
#define SDRAM_DLL_NORMAL (0 << SDRAM_DLL_OFFS)
|
||||
#define SDRAM_DLL_RESET (1 << SDRAM_DLL_OFFS)
|
||||
#define SDRAM_WR_OFFS 11
|
||||
#define SDRAM_WR_MAX 7
|
||||
#define SDRAM_WR_MASK (SDRAM_WR_MAX << SDRAM_WR_OFFS)
|
||||
#define SDRAM_PD_OFFS 12
|
||||
#define SDRAM_PD_MASK (1 << SDRAM_PD_OFFS)
|
||||
#define SDRAM_PD_FAST_EXIT (0 << SDRAM_PD_OFFS)
|
||||
#define SDRAM_PD_SLOW_EXIT (1 << SDRAM_PD_OFFS)
|
||||
|
||||
/* DDR SDRAM Extended Mode register (DSEMR) */
|
||||
#define SDRAM_EXTENDED_MODE_REG 0x1420
|
||||
#define DSEMR_DLL_ENABLE (1 << 0)
|
||||
#define DSEMR_DS_OFFS 1
|
||||
#define DSEMR_DS_MASK (1 << DSEMR_DS_OFFS)
|
||||
#define DSEMR_DS_NORMAL (0 << DSEMR_DS_OFFS)
|
||||
#define DSEMR_DS_REDUCED (1 << DSEMR_DS_OFFS)
|
||||
#define DSEMR_RTT0_OFFS 2
|
||||
#define DSEMR_RTT1_OFFS 6
|
||||
#define DSEMR_RTT_ODT_DISABLE ((0 << DSEMR_RTT0_OFFS)||(0 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_RTT_ODT_75_OHM ((1 << DSEMR_RTT0_OFFS)||(0 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_RTT_ODT_150_OHM ((0 << DSEMR_RTT0_OFFS)||(1 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_OCD_OFFS 7
|
||||
#define DSEMR_OCD_MASK (0x7 << DSEMR_OCD_OFFS)
|
||||
#define DSEMR_OCD_EXIT_CALIB (0 << DSEMR_OCD_OFFS)
|
||||
#define DSEMR_OCD_DRIVE1 (1 << DSEMR_OCD_OFFS)
|
||||
#define DSEMR_OCD_DRIVE0 (2 << DSEMR_OCD_OFFS)
|
||||
#define DSEMR_OCD_ADJUST_MODE (4 << DSEMR_OCD_OFFS)
|
||||
#define DSEMR_OCD_CALIB_DEFAULT (7 << DSEMR_OCD_OFFS)
|
||||
#define DSEMR_DQS_OFFS 10
|
||||
#define DSEMR_DQS_MASK (1 << DSEMR_DQS_OFFS)
|
||||
#define DSEMR_DQS_DIFFERENTIAL (0 << DSEMR_DQS_OFFS)
|
||||
#define DSEMR_DQS_SINGLE_ENDED (0 << DSEMR_DQS_OFFS)
|
||||
#define DSEMR_RDQS_ENABLE (1 << 11)
|
||||
#define DSEMR_QOFF_OUTPUT_BUFF_EN (1 << 12)
|
||||
|
||||
/* DDR SDRAM Operation Control Register */
|
||||
#define SDRAM_OPERATION_CTRL_REG 0x142c
|
||||
|
||||
/* Dunit FTDLL Configuration Register */
|
||||
#define SDRAM_FTDLL_CONFIG_REG 0x1484
|
||||
|
||||
/* Pads Calibration register */
|
||||
#define SDRAM_ADDR_CTRL_PADS_CAL_REG 0x14c0
|
||||
#define SDRAM_DATA_PADS_CAL_REG 0x14c4
|
||||
#define SDRAM_DRVN_OFFS 0
|
||||
#define SDRAM_DRVN_MASK (0x3F << SDRAM_DRVN_OFFS)
|
||||
#define SDRAM_DRVP_OFFS 6
|
||||
#define SDRAM_DRVP_MASK (0x3F << SDRAM_DRVP_OFFS)
|
||||
#define SDRAM_PRE_DRIVER_STRENGTH_OFFS 12
|
||||
#define SDRAM_PRE_DRIVER_STRENGTH_MASK (3 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
#define SDRAM_TUNE_EN BIT16
|
||||
#define SDRAM_LOCK_OFFS 17
|
||||
#define SDRAM_LOCK_MAKS (0x1F << SDRAM_LOCK_OFFS)
|
||||
#define SDRAM_LOCKN_OFFS 17
|
||||
#define SDRAM_LOCKN_MAKS (0x3F << SDRAM_LOCKN_OFFS)
|
||||
#define SDRAM_LOCKP_OFFS 23
|
||||
#define SDRAM_LOCKP_MAKS (0x3F << SDRAM_LOCKP_OFFS)
|
||||
#define SDRAM_WR_EN (1 << 31)
|
||||
|
||||
/* DDR2 SDRAM ODT Control (Low) Register (DSOCLR) */
|
||||
#define DDR2_SDRAM_ODT_CTRL_LOW_REG 0x1494
|
||||
#define DSOCLR_ODT_RD_OFFS(odtNum) (odtNum * 4)
|
||||
#define DSOCLR_ODT_RD_MASK(odtNum) (0xf << DSOCLR_ODT_RD_OFFS(odtNum))
|
||||
#define DSOCLR_ODT_RD(odtNum, bank) ((1 << bank) << DSOCLR_ODT_RD_OFFS(odtNum))
|
||||
#define DSOCLR_ODT_WR_OFFS(odtNum) (16 + (odtNum * 4))
|
||||
#define DSOCLR_ODT_WR_MASK(odtNum) (0xf << DSOCLR_ODT_WR_OFFS(odtNum))
|
||||
#define DSOCLR_ODT_WD(odtNum, bank) ((1 << bank) << DSOCLR_ODT_WR_OFFS(odtNum))
|
||||
|
||||
/* DDR2 SDRAM ODT Control (High) Register (DSOCHR) */
|
||||
#define DDR2_SDRAM_ODT_CTRL_HIGH_REG 0x1498
|
||||
/* Optional control values to DSOCHR_ODT_EN macro */
|
||||
#define DDR2_ODT_CTRL_DUNIT 0
|
||||
#define DDR2_ODT_CTRL_NEVER 1
|
||||
#define DDR2_ODT_CTRL_ALWAYS 3
|
||||
#define DSOCHR_ODT_EN_OFFS(odtNum) (odtNum * 2)
|
||||
#define DSOCHR_ODT_EN_MASK(odtNum) (0x3 << DSOCHR_ODT_EN_OFFS(odtNum))
|
||||
#define DSOCHR_ODT_EN(odtNum, ctrl) ((1 << ctrl) << DSOCHR_ODT_RD_OFFS(odtNum))
|
||||
|
||||
/* DDR2 Dunit ODT Control Register (DDOCR)*/
|
||||
#define DDR2_DUNIT_ODT_CONTROL_REG 0x149c
|
||||
#define DDOCR_ODT_RD_OFFS 0
|
||||
#define DDOCR_ODT_RD_MASK (0xf << DDOCR_ODT_RD_OFFS)
|
||||
#define DDOCR_ODT_RD(bank) ((1 << bank) << DDOCR_ODT_RD_OFFS)
|
||||
#define DDOCR_ODT_WR_OFFS 4
|
||||
#define DDOCR_ODT_WR_MASK (0xf << DDOCR_ODT_WR_OFFS)
|
||||
#define DDOCR_ODT_WR(bank) ((1 << bank) << DDOCR_ODT_WR_OFFS)
|
||||
#define DSOCR_ODT_EN_OFFS 8
|
||||
#define DSOCR_ODT_EN_MASK (0x3 << DSOCR_ODT_EN_OFFS)
|
||||
#define DSOCR_ODT_EN(ctrl) ((1 << ctrl) << DSOCR_ODT_EN_OFFS)
|
||||
#define DSOCR_ODT_SEL_OFFS 10
|
||||
#define DSOCR_ODT_SEL_MASK (0x3 << DSOCR_ODT_SEL_OFFS)
|
||||
|
||||
/* DDR SDRAM Initialization Control Register (DSICR) */
|
||||
#define DDR_SDRAM_INIT_CTRL_REG 0x1480
|
||||
#define DSICR_INIT_EN (1 << 0)
|
||||
|
||||
#endif /* __INCmvDramIfRegsh */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,172 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvDramIfh
|
||||
#define __INCmvDramIfh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* includes */
|
||||
#include "ddr2/mvDramIfRegs.h"
|
||||
#include "ddr2/mvDramIfConfig.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
|
||||
/* defines */
|
||||
/* DRAM Timing parameters */
|
||||
#define SDRAM_TWR 15 /* ns tWr */
|
||||
#define SDRAM_TRFC_64_512M_AT_200MHZ 70 /* ns tRfc for dens 64-512 @ 200MHz */
|
||||
#define SDRAM_TRFC_64_512M 75 /* ns tRfc for dens 64-512 */
|
||||
#define SDRAM_TRFC_1G 120 /* ns tRfc for dens 1GB */
|
||||
#define SDRAM_TR2R_CYC 1 /* cycle for tR2r */
|
||||
|
||||
#define CAL_AUTO_DETECT 0 /* Do not force CAS latancy (mvDramIfDetect) */
|
||||
#define ECC_DISABLE 1 /* Force ECC to Disable */
|
||||
#define ECC_ENABLE 0 /* Force ECC to ENABLE */
|
||||
/* typedefs */
|
||||
|
||||
/* enumeration for memory types */
|
||||
typedef enum _mvMemoryType
|
||||
{
|
||||
MEM_TYPE_SDRAM,
|
||||
MEM_TYPE_DDR1,
|
||||
MEM_TYPE_DDR2
|
||||
}MV_MEMORY_TYPE;
|
||||
|
||||
/* enumeration for DDR2 supported CAS Latencies */
|
||||
typedef enum _mvDimmDdr2Cas
|
||||
{
|
||||
DDR2_CL_3 = 0x08,
|
||||
DDR2_CL_4 = 0x10,
|
||||
DDR2_CL_5 = 0x20,
|
||||
DDR2_CL_6 = 0x40,
|
||||
DDR2_CL_FAULT
|
||||
} MV_DIMM_DDR2_CAS;
|
||||
|
||||
|
||||
typedef struct _mvDramBankInfo
|
||||
{
|
||||
MV_MEMORY_TYPE memoryType; /* DDR1, DDR2 or SDRAM */
|
||||
|
||||
/* DIMM dimensions */
|
||||
MV_U32 numOfRowAddr;
|
||||
MV_U32 numOfColAddr;
|
||||
MV_U32 dataWidth;
|
||||
MV_U32 errorCheckType; /* ECC , PARITY..*/
|
||||
MV_U32 sdramWidth; /* 4,8,16 or 32 */
|
||||
MV_U32 errorCheckDataWidth; /* 0 - no, 1 - Yes */
|
||||
MV_U32 burstLengthSupported;
|
||||
MV_U32 numOfBanksOnEachDevice;
|
||||
MV_U32 suportedCasLatencies;
|
||||
MV_U32 refreshInterval;
|
||||
|
||||
/* DIMM timing parameters */
|
||||
MV_U32 minCycleTimeAtMaxCasLatPs;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus1Ps;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus2Ps;
|
||||
MV_U32 minRowPrechargeTime;
|
||||
MV_U32 minRowActiveToRowActive;
|
||||
MV_U32 minRasToCasDelay;
|
||||
MV_U32 minRasPulseWidth;
|
||||
MV_U32 minWriteRecoveryTime; /* DDR2 only */
|
||||
MV_U32 minWriteToReadCmdDelay; /* DDR2 only */
|
||||
MV_U32 minReadToPrechCmdDelay; /* DDR2 only */
|
||||
MV_U32 minRefreshToActiveCmd; /* DDR2 only */
|
||||
|
||||
/* Parameters calculated from the extracted DIMM information */
|
||||
MV_U32 size;
|
||||
MV_U32 deviceDensity; /* 16,64,128,256 or 512 Mbit */
|
||||
MV_U32 numberOfDevices;
|
||||
|
||||
/* DIMM attributes (MV_TRUE for yes) */
|
||||
MV_BOOL registeredAddrAndControlInputs;
|
||||
MV_BOOL registeredDQMBinputs;
|
||||
|
||||
}MV_DRAM_BANK_INFO;
|
||||
|
||||
#include "ddr2/spd/mvSpd.h"
|
||||
|
||||
/* mvDramIf.h API list */
|
||||
MV_VOID mvDramIfBasicAsmInit(MV_VOID);
|
||||
MV_STATUS mvDramIfDetect(MV_U32 forcedCl, MV_BOOL eccDisable);
|
||||
MV_VOID _mvDramIfConfig(int entryNum);
|
||||
|
||||
MV_U32 mvDramIfBankSizeGet(MV_U32 bankNum);
|
||||
MV_U32 mvDramIfBankBaseGet(MV_U32 bankNum);
|
||||
MV_U32 mvDramIfSizeGet(MV_VOID);
|
||||
MV_U32 mvDramIfCalGet(void);
|
||||
MV_STATUS mvDramIfSingleBitErrThresholdSet(MV_U32 threshold);
|
||||
MV_VOID mvDramIfSelfRefreshSet(void);
|
||||
void mvDramIfShow(void);
|
||||
MV_U32 mvDramIfGetFirstCS(void);
|
||||
MV_U32 mvDramIfGetCSorder(MV_U32 csOrder );
|
||||
MV_U32 mvDramCsSizeGet(MV_U32 csNum);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __INCmvDramIfh */
|
||||
@@ -0,0 +1,157 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvDramIfConfigh
|
||||
#define __INCmvDramIfConfigh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* includes */
|
||||
|
||||
/* defines */
|
||||
|
||||
/* registers defaults values */
|
||||
|
||||
#define SDRAM_CONFIG_DV (SDRAM_SRMODE_DRAM | BIT25 | BIT30)
|
||||
|
||||
#define SDRAM_DUNIT_CTRL_LOW_DDR2_DV \
|
||||
(SDRAM_SRCLK_KEPT | \
|
||||
SDRAM_CLK1DRV_NORMAL | \
|
||||
(BIT28 | BIT29))
|
||||
|
||||
#define SDRAM_ADDR_CTRL_DV 2
|
||||
|
||||
#define SDRAM_TIMING_CTRL_LOW_REG_DV \
|
||||
((0x2 << SDRAM_TRCD_OFFS) | \
|
||||
(0x2 << SDRAM_TRP_OFFS) | \
|
||||
(0x1 << SDRAM_TWR_OFFS) | \
|
||||
(0x0 << SDRAM_TWTR_OFFS) | \
|
||||
(0x5 << SDRAM_TRAS_OFFS) | \
|
||||
(0x1 << SDRAM_TRRD_OFFS))
|
||||
|
||||
/* Note: value of 0 in register means one cycle, 1 means two and so on */
|
||||
#define SDRAM_TIMING_CTRL_HIGH_REG_DV \
|
||||
((0x0 << SDRAM_TR2R_OFFS) | \
|
||||
(0x0 << SDRAM_TR2W_W2R_OFFS) | \
|
||||
(0x1 << SDRAM_TW2W_OFFS))
|
||||
|
||||
#define SDRAM_OPEN_PAGES_CTRL_REG_DV SDRAM_OPEN_PAGE_EN
|
||||
|
||||
/* Presence Ctrl Low Ctrl High Dunit Ctrl Ext Mode */
|
||||
/* CS0 0x84210000 0x00000000 0x0000780F 0x00000440 */
|
||||
/* CS0+CS1 0x84210000 0x00000000 0x0000780F 0x00000440 */
|
||||
/* CS0+CS2 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
/* CS0+CS1+CS2 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
/* CS0+CS2+CS3 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
/* CS0+CS1+CS2+CS3 0x030C030C 0x00000000 0x0000740F 0x00000404 */
|
||||
|
||||
#define DDR2_ODT_CTRL_LOW_CS0_CS1_DV 0x84210000
|
||||
#define DDR2_ODT_CTRL_HIGH_CS0_CS1_DV 0x00000000
|
||||
#define DDR2_DUNIT_ODT_CTRL_CS0_CS1_DV 0x0000E80F
|
||||
#ifdef MV78XX0
|
||||
#define DDR_SDRAM_EXT_MODE_CS0_CS1_DV 0x00000040
|
||||
#else
|
||||
#define DDR_SDRAM_EXT_MODE_CS0_CS1_DV 0x00000440
|
||||
#endif
|
||||
|
||||
#define DDR2_ODT_CTRL_LOW_CS0_CS1_CS2_CS3_DV 0x030C030C
|
||||
#define DDR2_ODT_CTRL_HIGH_CS0_CS1_CS2_CS3_DV 0x00000000
|
||||
#define DDR2_DUNIT_ODT_CTRL_CS0_CS1_CS2_CS3_DV 0x0000F40F
|
||||
#ifdef MV78XX0
|
||||
#define DDR_SDRAM_EXT_MODE_CS0_CS1_CS2_CS3_DV 0x00000004
|
||||
#define DDR_SDRAM_EXT_MODE_FAST_CS0_CS1_CS2_CS3_DV 0x00000044
|
||||
#else
|
||||
#define DDR_SDRAM_EXT_MODE_CS0_CS1_CS2_CS3_DV 0x00000404
|
||||
#define DDR_SDRAM_EXT_MODE_FAST_CS0_CS1_CS2_CS3_DV 0x00000444
|
||||
#endif
|
||||
|
||||
/* DDR SDRAM Adderss/Control and Data Pads Calibration default values */
|
||||
#define DDR2_ADDR_CTRL_PAD_STRENGTH_TYPICAL_DV \
|
||||
(3 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
|
||||
#define DDR2_DATA_PAD_STRENGTH_TYPICAL_DV \
|
||||
(3 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
|
||||
/* DDR SDRAM Mode Register default value */
|
||||
#define DDR2_MODE_REG_DV (SDRAM_BURST_LEN_4 | SDRAM_WR_3_CYC)
|
||||
/* DDR SDRAM Timing parameter default values */
|
||||
#define SDRAM_TIMING_CTRL_LOW_REG_DEFAULT 0x33136552
|
||||
#define SDRAM_TRFC_DEFAULT_VALUE 0x34
|
||||
#define SDRAM_TRFC_DEFAULT SDRAM_TRFC_DEFAULT_VALUE
|
||||
#define SDRAM_TW2W_DEFALT (0x1 << SDRAM_TW2W_OFFS)
|
||||
|
||||
#define SDRAM_TIMING_CTRL_HIGH_REG_DEFAULT (SDRAM_TRFC_DEFAULT | SDRAM_TW2W_DEFALT)
|
||||
|
||||
#define SDRAM_FTDLL_REG_DEFAULT_LEFT 0x88C800
|
||||
#define SDRAM_FTDLL_REG_DEFAULT_RIGHT 0x88C800
|
||||
#define SDRAM_FTDLL_REG_DEFAULT_UP 0x88C800
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __INCmvDramIfh */
|
||||
@@ -0,0 +1,423 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDramIfRegsh
|
||||
#define __INCmvDramIfRegsh
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* DDR SDRAM Controller Address Decode Registers */
|
||||
/* SDRAM CSn Base Address Register (SCBAR) */
|
||||
#define SDRAM_BASE_ADDR_REG(cpu,csNum) (0x1500 + ((csNum) * 8) + ((cpu) * 0x70))
|
||||
#define SCBAR_BASE_OFFS 16
|
||||
#define SCBAR_BASE_MASK (0xffff << SCBAR_BASE_OFFS)
|
||||
#define SCBAR_BASE_ALIGNMENT 0x10000
|
||||
|
||||
/* SDRAM CSn Size Register (SCSR) */
|
||||
#define SDRAM_SIZE_REG(cpu,csNum) (0x1504 + ((csNum) * 8) + ((cpu) * 0x70))
|
||||
#define SCSR_SIZE_OFFS 24
|
||||
#define SCSR_SIZE_MASK (0xff << SCSR_SIZE_OFFS)
|
||||
#define SCSR_SIZE_ALIGNMENT 0x1000000
|
||||
#define SCSR_WIN_EN BIT0
|
||||
|
||||
/* configuration register */
|
||||
#define SDRAM_CONFIG_REG (DRAM_BASE + 0x1400)
|
||||
#define SDRAM_REFRESH_OFFS 0
|
||||
#define SDRAM_REFRESH_MAX 0x3FFF
|
||||
#define SDRAM_REFRESH_MASK (SDRAM_REFRESH_MAX << SDRAM_REFRESH_OFFS)
|
||||
#define SDRAM_DWIDTH_OFFS 15
|
||||
#define SDRAM_DWIDTH_MASK (1 << SDRAM_DWIDTH_OFFS)
|
||||
#define SDRAM_DWIDTH_32BIT (0 << SDRAM_DWIDTH_OFFS)
|
||||
#define SDRAM_DWIDTH_64BIT (1 << SDRAM_DWIDTH_OFFS)
|
||||
#define SDRAM_REGISTERED (1 << 17)
|
||||
#define SDRAM_ECC_OFFS 18
|
||||
#define SDRAM_ECC_MASK (1 << SDRAM_ECC_OFFS)
|
||||
#define SDRAM_ECC_DIS (0 << SDRAM_ECC_OFFS)
|
||||
#define SDRAM_ECC_EN (1 << SDRAM_ECC_OFFS)
|
||||
#define SDRAM_IERR_OFFS 19
|
||||
#define SDRAM_IERR_MASK (1 << SDRAM_IERR_OFFS)
|
||||
#define SDRAM_IERR_REPORTE (0 << SDRAM_IERR_OFFS)
|
||||
#define SDRAM_IERR_IGNORE (1 << SDRAM_IERR_OFFS)
|
||||
#define SDRAM_SRMODE_OFFS 24
|
||||
#define SDRAM_SRMODE_MASK (1 << SDRAM_SRMODE_OFFS)
|
||||
#define SDRAM_SRMODE_POWER (0 << SDRAM_SRMODE_OFFS)
|
||||
#define SDRAM_SRMODE_DRAM (1 << SDRAM_SRMODE_OFFS)
|
||||
|
||||
/* dunit control low register */
|
||||
#define SDRAM_DUNIT_CTRL_REG (DRAM_BASE + 0x1404)
|
||||
#define SDRAM_2T_OFFS 4
|
||||
#define SDRAM_2T_MASK (1 << SDRAM_2T_OFFS)
|
||||
#define SDRAM_2T_MODE (1 << SDRAM_2T_OFFS)
|
||||
|
||||
#define SDRAM_SRCLK_OFFS 5
|
||||
#define SDRAM_SRCLK_MASK (1 << SDRAM_SRCLK_OFFS)
|
||||
#define SDRAM_SRCLK_KEPT (0 << SDRAM_SRCLK_OFFS)
|
||||
#define SDRAM_SRCLK_GATED (1 << SDRAM_SRCLK_OFFS)
|
||||
#define SDRAM_CTRL_POS_OFFS 6
|
||||
#define SDRAM_CTRL_POS_MASK (1 << SDRAM_CTRL_POS_OFFS)
|
||||
#define SDRAM_CTRL_POS_FALL (0 << SDRAM_CTRL_POS_OFFS)
|
||||
#define SDRAM_CTRL_POS_RISE (1 << SDRAM_CTRL_POS_OFFS)
|
||||
#define SDRAM_CLK1DRV_OFFS 12
|
||||
#define SDRAM_CLK1DRV_MASK (1 << SDRAM_CLK1DRV_OFFS)
|
||||
#define SDRAM_CLK1DRV_HIGH_Z (0 << SDRAM_CLK1DRV_OFFS)
|
||||
#define SDRAM_CLK1DRV_NORMAL (1 << SDRAM_CLK1DRV_OFFS)
|
||||
#define SDRAM_CLK2DRV_OFFS 13
|
||||
#define SDRAM_CLK2DRV_MASK (1 << SDRAM_CLK2DRV_OFFS)
|
||||
#define SDRAM_CLK2DRV_HIGH_Z (0 << SDRAM_CLK2DRV_OFFS)
|
||||
#define SDRAM_CLK2DRV_NORMAL (1 << SDRAM_CLK2DRV_OFFS)
|
||||
#define SDRAM_SB_OUT_DEL_OFFS 20
|
||||
#define SDRAM_SB_OUT_DEL_MAX 0xf
|
||||
#define SDRAM_SB_OUT_MASK (SDRAM_SB_OUT_DEL_MAX<<SDRAM_SB_OUT_DEL_OFFS)
|
||||
#define SDRAM_SB_IN_DEL_OFFS 24
|
||||
#define SDRAM_SB_IN_DEL_MAX 0xf
|
||||
#define SDRAM_SB_IN_MASK (SDRAM_SB_IN_DEL_MAX<<SDRAM_SB_IN_DEL_OFFS)
|
||||
|
||||
/* dunit control hight register */
|
||||
#define SDRAM_DUNIT_CTRL_HI_REG (DRAM_BASE + 0x1424)
|
||||
#define SDRAM__D2P_OFFS 7
|
||||
#define SDRAM__D2P_EN (1 << SDRAM__D2P_OFFS)
|
||||
#define SDRAM__P2D_OFFS 8
|
||||
#define SDRAM__P2D_EN (1 << SDRAM__P2D_OFFS)
|
||||
#define SDRAM__ADD_HALF_FCC_OFFS 9
|
||||
#define SDRAM__ADD_HALF_FCC_EN (1 << SDRAM__ADD_HALF_FCC_OFFS)
|
||||
#define SDRAM__PUP_ZERO_SKEW_OFFS 10
|
||||
#define SDRAM__PUP_ZERO_SKEW_EN (1 << SDRAM__PUP_ZERO_SKEW_OFFS)
|
||||
#define SDRAM__WR_MESH_DELAY_OFFS 11
|
||||
#define SDRAM__WR_MESH_DELAY_EN (1 << SDRAM__WR_MESH_DELAY_OFFS)
|
||||
|
||||
/* sdram timing control low register */
|
||||
#define SDRAM_TIMING_CTRL_LOW_REG (DRAM_BASE + 0x1408)
|
||||
#define SDRAM_TRCD_OFFS 4
|
||||
#define SDRAM_TRCD_MASK (0xF << SDRAM_TRCD_OFFS)
|
||||
#define SDRAM_TRP_OFFS 8
|
||||
#define SDRAM_TRP_MASK (0xF << SDRAM_TRP_OFFS)
|
||||
#define SDRAM_TWR_OFFS 12
|
||||
#define SDRAM_TWR_MASK (0xF << SDRAM_TWR_OFFS)
|
||||
#define SDRAM_TWTR_OFFS 16
|
||||
#define SDRAM_TWTR_MASK (0xF << SDRAM_TWTR_OFFS)
|
||||
#define SDRAM_TRAS_OFFS 0
|
||||
#define SDRAM_TRAS_MASK (0xF << SDRAM_TRAS_OFFS)
|
||||
#define SDRAM_EXT_TRAS_OFFS 20
|
||||
#define SDRAM_EXT_TRAS_MASK (0x1 << SDRAM_EXT_TRAS_OFFS)
|
||||
#define SDRAM_TRRD_OFFS 24
|
||||
#define SDRAM_TRRD_MASK (0xF << SDRAM_TRRD_OFFS)
|
||||
#define SDRAM_TRTP_OFFS 28
|
||||
#define SDRAM_TRTP_MASK (0xF << SDRAM_TRTP_OFFS)
|
||||
#define SDRAM_TRTP_DDR1 (0x1 << SDRAM_TRTP_OFFS)
|
||||
|
||||
/* sdram timing control high register */
|
||||
#define SDRAM_TIMING_CTRL_HIGH_REG (DRAM_BASE + 0x140c)
|
||||
#define SDRAM_TRFC_OFFS 0
|
||||
#define SDRAM_TRFC_MASK (0x3F << SDRAM_TRFC_OFFS)
|
||||
#define SDRAM_TR2R_OFFS 7
|
||||
#define SDRAM_TR2R_MASK (0x3 << SDRAM_TR2R_OFFS)
|
||||
#define SDRAM_TR2W_W2R_OFFS 9
|
||||
#define SDRAM_TR2W_W2R_MASK (0x3 << SDRAM_TR2W_W2R_OFFS)
|
||||
#define SDRAM_TW2W_OFFS 11
|
||||
#define SDRAM_TW2W_MASK (0x3 << SDRAM_TW2W_OFFS)
|
||||
|
||||
/* sdram DDR2 timing low register (SD2TLR) */
|
||||
#define SDRAM_DDR2_TIMING_LO_REG (DRAM_BASE + 0x1428)
|
||||
#define SD2TLR_TODT_ON_RD_OFFS 4
|
||||
#define SD2TLR_TODT_ON_RD_MASK (0xF << SD2TLR_TODT_ON_RD_OFFS)
|
||||
#define SD2TLR_TODT_OFF_RD_OFFS 8
|
||||
#define SD2TLR_TODT_OFF_RD_MASK (0xF << SD2TLR_TODT_OFF_RD_OFFS)
|
||||
#define SD2TLR_TODT_ON_CTRL_RD_OFFS 12
|
||||
#define SD2TLR_TODT_ON_CTRL_RD_MASK (0xF << SD2TLR_TODT_ON_CTRL_RD_OFFS)
|
||||
#define SD2TLR_TODT_OFF_CTRL_RD_OFFS 16
|
||||
#define SD2TLR_TODT_OFF_CTRL_RD_MASK (0xF << SD2TLR_TODT_OFF_CTRL_RD_OFFS)
|
||||
|
||||
/* sdram DDR2 timing high register (SD2TLR) */
|
||||
#define SDRAM_DDR2_TIMING_HI_REG (DRAM_BASE + 0x147C)
|
||||
#define SD2THR_TODT_ON_WR_OFFS 0
|
||||
#define SD2THR_TODT_ON_WR_MASK (0xF << SD2THR_TODT_ON_WR_OFFS)
|
||||
#define SD2THR_TODT_OFF_WR_OFFS 4
|
||||
#define SD2THR_TODT_OFF_WR_MASK (0xF << SD2THR_TODT_OFF_WR_OFFS)
|
||||
#define SD2THR_TODT_ON_CTRL_WR_OFFS 8
|
||||
#define SD2THR_TODT_ON_CTRL_WR_MASK (0xF << SD2THR_TODT_ON_CTRL_WR_OFFS)
|
||||
#define SD2THR_TODT_OFF_CTRL_WR_OFFS 12
|
||||
#define SD2THR_TODT_OFF_CTRL_WR_MASK (0xF << SD2THR_TODT_OFF_CTRL_WR_OFFS)
|
||||
|
||||
/* address control register */
|
||||
#define SDRAM_ADDR_CTRL_REG (DRAM_BASE + 0x1410)
|
||||
#define SDRAM_ADDRSEL_OFFS(cs) (4 * (cs))
|
||||
#define SDRAM_ADDRSEL_MASK(cs) (0x3 << SDRAM_ADDRSEL_OFFS(cs))
|
||||
#define SDRAM_ADDRSEL_X8(cs) (0x0 << SDRAM_ADDRSEL_OFFS(cs))
|
||||
#define SDRAM_ADDRSEL_X16(cs) (0x1 << SDRAM_ADDRSEL_OFFS(cs))
|
||||
#define SDRAM_DSIZE_OFFS(cs) (2 + 4 * (cs))
|
||||
#define SDRAM_DSIZE_MASK(cs) (0x3 << SDRAM_DSIZE_OFFS(cs))
|
||||
#define SDRAM_DSIZE_256Mb(cs) (0x1 << SDRAM_DSIZE_OFFS(cs))
|
||||
#define SDRAM_DSIZE_512Mb(cs) (0x2 << SDRAM_DSIZE_OFFS(cs))
|
||||
#define SDRAM_DSIZE_1Gb(cs) (0x3 << SDRAM_DSIZE_OFFS(cs))
|
||||
#define SDRAM_DSIZE_2Gb(cs) (0x0 << SDRAM_DSIZE_OFFS(cs))
|
||||
|
||||
/* SDRAM Open Pages Control registers */
|
||||
#define SDRAM_OPEN_PAGE_CTRL_REG (DRAM_BASE + 0x1414)
|
||||
#define SDRAM_OPEN_PAGE_EN (0 << 0)
|
||||
#define SDRAM_OPEN_PAGE_DIS (1 << 0)
|
||||
|
||||
/* sdram opertion register */
|
||||
#define SDRAM_OPERATION_REG (DRAM_BASE + 0x1418)
|
||||
#define SDRAM_CMD_OFFS 0
|
||||
#define SDRAM_CMD_MASK (0xF << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_NORMAL (0x0 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_PRECHARGE_ALL (0x1 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_REFRESH_ALL (0x2 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_REG_SET_CMD (0x3 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_EXT_MODE_SET (0x4 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_NOP (0x5 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_SLF_RFRSH (0x7 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_EMRS2_CMD (0x8 << SDRAM_CMD_OFFS)
|
||||
#define SDRAM_CMD_EMRS3_CMD (0x9 << SDRAM_CMD_OFFS)
|
||||
|
||||
/* sdram mode register */
|
||||
#define SDRAM_MODE_REG (DRAM_BASE + 0x141c)
|
||||
#define SDRAM_BURST_LEN_OFFS 0
|
||||
#define SDRAM_BURST_LEN_MASK (0x7 << SDRAM_BURST_LEN_OFFS)
|
||||
#define SDRAM_BURST_LEN_4 (0x2 << SDRAM_BURST_LEN_OFFS)
|
||||
#define SDRAM_CL_OFFS 4
|
||||
#define SDRAM_CL_MASK (0x7 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_3 (0x3 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_4 (0x4 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_5 (0x5 << SDRAM_CL_OFFS)
|
||||
#define SDRAM_DDR2_CL_6 (0x6 << SDRAM_CL_OFFS)
|
||||
|
||||
#define SDRAM_TM_OFFS 7
|
||||
#define SDRAM_TM_MASK (1 << SDRAM_TM_OFFS)
|
||||
#define SDRAM_TM_NORMAL (0 << SDRAM_TM_OFFS)
|
||||
#define SDRAM_TM_TEST_MODE (1 << SDRAM_TM_OFFS)
|
||||
#define SDRAM_DLL_OFFS 8
|
||||
#define SDRAM_DLL_MASK (1 << SDRAM_DLL_OFFS)
|
||||
#define SDRAM_DLL_NORMAL (0 << SDRAM_DLL_OFFS)
|
||||
#define SDRAM_DLL_RESET (1 << SDRAM_DLL_OFFS)
|
||||
#define SDRAM_WR_OFFS 9
|
||||
#define SDRAM_WR_MAX 7
|
||||
#define SDRAM_WR_MASK (SDRAM_WR_MAX << SDRAM_WR_OFFS)
|
||||
#define SDRAM_WR_2_CYC (1 << SDRAM_WR_OFFS)
|
||||
#define SDRAM_WR_3_CYC (2 << SDRAM_WR_OFFS)
|
||||
#define SDRAM_WR_4_CYC (3 << SDRAM_WR_OFFS)
|
||||
#define SDRAM_WR_5_CYC (4 << SDRAM_WR_OFFS)
|
||||
#define SDRAM_WR_6_CYC (5 << SDRAM_WR_OFFS)
|
||||
#define SDRAM_PD_OFFS 12
|
||||
#define SDRAM_PD_MASK (1 << SDRAM_PD_OFFS)
|
||||
#define SDRAM_PD_FAST_EXIT (0 << SDRAM_PD_OFFS)
|
||||
#define SDRAM_PD_SLOW_EXIT (1 << SDRAM_PD_OFFS)
|
||||
|
||||
/* DDR SDRAM Extended Mode register (DSEMR) */
|
||||
#define SDRAM_EXTENDED_MODE_REG (DRAM_BASE + 0x1420)
|
||||
#define DSEMR_DLL_ENABLE 0
|
||||
#define DSEMR_DLL_DISABLE 1
|
||||
#define DSEMR_DS_OFFS 1
|
||||
#define DSEMR_DS_MASK (1 << DSEMR_DS_OFFS)
|
||||
#define DSEMR_DS_NORMAL (0 << DSEMR_DS_OFFS)
|
||||
#define DSEMR_DS_REDUCED (1 << DSEMR_DS_OFFS)
|
||||
#define DSEMR_QOFF_OUTPUT_BUFF_EN (0 << 12)
|
||||
#define DSEMR_RTT0_OFFS 2
|
||||
#define DSEMR_RTT1_OFFS 6
|
||||
#define DSEMR_RTT_ODT_DISABLE ((0 << DSEMR_RTT0_OFFS)||(0 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_RTT_ODT_75_OHM ((1 << DSEMR_RTT0_OFFS)||(0 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_RTT_ODT_150_OHM ((0 << DSEMR_RTT0_OFFS)||(1 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_RTT_ODT_50_OHM ((1 << DSEMR_RTT0_OFFS)||(1 << DSEMR_RTT1_OFFS))
|
||||
#define DSEMR_DQS_OFFS 10
|
||||
#define DSEMR_DQS_MASK (1 << DSEMR_DQS_OFFS)
|
||||
#define DSEMR_DQS_DIFFERENTIAL (0 << DSEMR_DQS_OFFS)
|
||||
#define DSEMR_DQS_SINGLE_ENDED (1 << DSEMR_DQS_OFFS)
|
||||
#define DSEMR_RDQS_ENABLE (1 << 11)
|
||||
#define DSEMR_QOFF_OUTPUT_BUFF_EN (0 << 12)
|
||||
#define DSEMR_QOFF_OUTPUT_BUFF_DIS (1 << 12)
|
||||
|
||||
/* DDR SDRAM Operation Control Register */
|
||||
#define SDRAM_OPERATION_CTRL_REG (DRAM_BASE + 0x142c)
|
||||
|
||||
/* Dunit FTDLL Configuration Register */
|
||||
#define SDRAM_FTDLL_CONFIG_LEFT_REG (DRAM_BASE + 0x1484)
|
||||
#define SDRAM_FTDLL_CONFIG_RIGHT_REG (DRAM_BASE + 0x161C)
|
||||
#define SDRAM_FTDLL_CONFIG_UP_REG (DRAM_BASE + 0x1620)
|
||||
|
||||
/* Pads Calibration register */
|
||||
#define SDRAM_ADDR_CTRL_PADS_CAL_REG (DRAM_BASE + 0x14c0)
|
||||
#define SDRAM_DATA_PADS_CAL_REG (DRAM_BASE + 0x14c4)
|
||||
#define SDRAM_DRVN_OFFS 0
|
||||
#define SDRAM_DRVN_MASK (0x3F << SDRAM_DRVN_OFFS)
|
||||
#define SDRAM_DRVP_OFFS 6
|
||||
#define SDRAM_DRVP_MASK (0x3F << SDRAM_DRVP_OFFS)
|
||||
#define SDRAM_PRE_DRIVER_STRENGTH_OFFS 12
|
||||
#define SDRAM_PRE_DRIVER_STRENGTH_MASK (3 << SDRAM_PRE_DRIVER_STRENGTH_OFFS)
|
||||
#define SDRAM_TUNE_EN BIT16
|
||||
#define SDRAM_LOCKN_OFFS 17
|
||||
#define SDRAM_LOCKN_MAKS (0x3F << SDRAM_LOCKN_OFFS)
|
||||
#define SDRAM_LOCKP_OFFS 23
|
||||
#define SDRAM_LOCKP_MAKS (0x3F << SDRAM_LOCKP_OFFS)
|
||||
#define SDRAM_WR_EN (1 << 31)
|
||||
|
||||
/* DDR2 SDRAM ODT Control (Low) Register (DSOCLR) */
|
||||
#define DDR2_SDRAM_ODT_CTRL_LOW_REG (DRAM_BASE + 0x1494)
|
||||
#define DSOCLR_ODT_RD_OFFS(odtNum) (odtNum * 4)
|
||||
#define DSOCLR_ODT_RD_MASK(odtNum) (0xf << DSOCLR_ODT_RD_OFFS(odtNum))
|
||||
#define DSOCLR_ODT_RD(odtNum, bank) ((1 << bank) << DSOCLR_ODT_RD_OFFS(odtNum))
|
||||
#define DSOCLR_ODT_WR_OFFS(odtNum) (16 + (odtNum * 4))
|
||||
#define DSOCLR_ODT_WR_MASK(odtNum) (0xf << DSOCLR_ODT_WR_OFFS(odtNum))
|
||||
#define DSOCLR_ODT_WR(odtNum, bank) ((1 << bank) << DSOCLR_ODT_WR_OFFS(odtNum))
|
||||
|
||||
/* DDR2 SDRAM ODT Control (High) Register (DSOCHR) */
|
||||
#define DDR2_SDRAM_ODT_CTRL_HIGH_REG (DRAM_BASE + 0x1498)
|
||||
/* Optional control values to DSOCHR_ODT_EN macro */
|
||||
#define DDR2_ODT_CTRL_DUNIT 0
|
||||
#define DDR2_ODT_CTRL_NEVER 1
|
||||
#define DDR2_ODT_CTRL_ALWAYS 3
|
||||
#define DSOCHR_ODT_EN_OFFS(odtNum) (odtNum * 2)
|
||||
#define DSOCHR_ODT_EN_MASK(odtNum) (0x3 << DSOCHR_ODT_EN_OFFS(odtNum))
|
||||
#define DSOCHR_ODT_EN(odtNum, ctrl) (ctrl << DSOCHR_ODT_EN_OFFS(odtNum))
|
||||
|
||||
/* DDR2 Dunit ODT Control Register (DDOCR)*/
|
||||
#define DDR2_DUNIT_ODT_CONTROL_REG (DRAM_BASE + 0x149c)
|
||||
#define DDOCR_ODT_RD_OFFS 0
|
||||
#define DDOCR_ODT_RD_MASK (0xf << DDOCR_ODT_RD_OFFS)
|
||||
#define DDOCR_ODT_RD(bank) ((1 << bank) << DDOCR_ODT_RD_OFFS)
|
||||
#define DDOCR_ODT_WR_OFFS 4
|
||||
#define DDOCR_ODT_WR_MASK (0xf << DDOCR_ODT_WR_OFFS)
|
||||
#define DDOCR_ODT_WR(bank) ((1 << bank) << DDOCR_ODT_WR_OFFS)
|
||||
#define DSOCR_ODT_EN_OFFS 8
|
||||
#define DSOCR_ODT_EN_MASK (0x3 << DSOCR_ODT_EN_OFFS)
|
||||
/* For ctrl parameters see DDR2 SDRAM ODT Control (High) Register (0x1498) above. */
|
||||
#define DSOCR_ODT_EN(ctrl) (ctrl << DSOCR_ODT_EN_OFFS)
|
||||
#define DSOCR_ODT_SEL_DISABLE 0
|
||||
#define DSOCR_ODT_SEL_75_OHM 2
|
||||
#define DSOCR_ODT_SEL_150_OHM 1
|
||||
#define DSOCR_ODT_SEL_50_OHM 3
|
||||
#define DSOCR_DQ_ODT_SEL_OFFS 10
|
||||
#define DSOCR_DQ_ODT_SEL_MASK (0x3 << DSOCR_DQ_ODT_SEL_OFFS)
|
||||
#define DSOCR_DQ_ODT_SEL(odtSel) (odtSel << DSOCR_DQ_ODT_SEL_OFFS)
|
||||
#define DSOCR_ST_ODT_SEL_OFFS 12
|
||||
#define DSOCR_ST_ODT_SEL_MASK (0x3 << DSOCR_ST_ODT_SEL_OFFS)
|
||||
#define DSOCR_ST_ODT_SEL(odtSel) (odtSel << DSOCR_ST_ODT_SEL_OFFS)
|
||||
#define DSOCR_ST_ODT_EN (1 << 14)
|
||||
|
||||
/* DDR SDRAM Initialization Control Register (DSICR) */
|
||||
#define DDR_SDRAM_INIT_CTRL_REG (DRAM_BASE + 0x1480)
|
||||
#define DSICR_INIT_EN (1 << 0)
|
||||
#define DSICR_T200_SET (1 << 8)
|
||||
|
||||
/* sdram extended mode2 register (SEM2R) */
|
||||
#define SDRAM_EXTENDED_MODE2_REG (DRAM_BASE + 0x148C)
|
||||
#define SEM2R_EMRS2_DDR2_OFFS 0
|
||||
#define SEM2R_EMRS2_DDR2_MASK (0x7FFF << SEM2R_EMRS2_DDR2_OFFS)
|
||||
|
||||
/* sdram extended mode3 register (SEM3R) */
|
||||
#define SDRAM_EXTENDED_MODE3_REG (DRAM_BASE + 0x1490)
|
||||
#define SEM3R_EMRS3_DDR2_OFFS 0
|
||||
#define SEM3R_EMRS3_DDR2_MASK (0x7FFF << SEM3R_EMRS3_DDR2_OFFS)
|
||||
|
||||
/* sdram error registers */
|
||||
#define SDRAM_ERROR_CAUSE_REG (DRAM_BASE + 0x14d0)
|
||||
#define SDRAM_ERROR_MASK_REG (DRAM_BASE + 0x14d4)
|
||||
#define SDRAM_ERROR_DATA_LOW_REG (DRAM_BASE + 0x1444)
|
||||
#define SDRAM_ERROR_DATA_HIGH_REG (DRAM_BASE + 0x1440)
|
||||
#define SDRAM_ERROR_ADDR_REG (DRAM_BASE + 0x1450)
|
||||
#define SDRAM_ERROR_ECC_REG (DRAM_BASE + 0x1448)
|
||||
#define SDRAM_CALC_ECC_REG (DRAM_BASE + 0x144c)
|
||||
#define SDRAM_ECC_CONTROL_REG (DRAM_BASE + 0x1454)
|
||||
#define SDRAM_SINGLE_BIT_ERR_CNTR_REG (DRAM_BASE + 0x1458)
|
||||
#define SDRAM_DOUBLE_BIT_ERR_CNTR_REG (DRAM_BASE + 0x145c)
|
||||
|
||||
/* SDRAM Error Cause Register (SECR) */
|
||||
#define SECR_SINGLE_BIT_ERR BIT0
|
||||
#define SECR_DOUBLE_BIT_ERR BIT1
|
||||
#define SECR_DATA_PATH_PARITY_ERR BIT2
|
||||
/* SDRAM Error Address Register (SEAR) */
|
||||
#define SEAR_ERR_TYPE_OFFS 0
|
||||
#define SEAR_ERR_TYPE_MASK (1 << SEAR_ERR_TYPE_OFFS)
|
||||
#define SEAR_ERR_TYPE_SINGLE 0
|
||||
#define SEAR_ERR_TYPE_DOUBLE (1 << SEAR_ERR_TYPE_OFFS)
|
||||
#define SEAR_ERR_CS_OFFS 1
|
||||
#define SEAR_ERR_CS_MASK (3 << SEAR_ERR_CS_OFFS)
|
||||
#define SEAR_ERR_CS(csNum) (csNum << SEAR_ERR_CS_OFFS)
|
||||
#define SEAR_ERR_ADDR_OFFS 3
|
||||
#define SEAR_ERR_ADDR_MASK (0x1FFFFFFF << SEAR_ERR_ADDR_OFFS)
|
||||
|
||||
/* SDRAM ECC Control Register (SECR) */
|
||||
#define SECR_FORCEECC_OFFS 0
|
||||
#define SECR_FORCEECC_MASK (0xFF << SECR_FORCEECC_OFFS)
|
||||
#define SECR_FORCEEN_OFFS 8
|
||||
#define SECR_FORCEEN_MASK (1 << SECR_FORCEEN_OFFS)
|
||||
#define SECR_ECC_CALC_MASK (0 << SECR_FORCEEN_OFFS)
|
||||
#define SECR_ECC_USER_MASK (1 << SECR_FORCEEN_OFFS)
|
||||
#define SECR_PERRPROP_EN BIT9
|
||||
#define SECR_CNTMODE_OFFS 10
|
||||
#define SECR_CNTMODE_MASK (1 << SECR_CNTMODE_OFFS)
|
||||
#define SECR_ALL_IN_CS0 (0 << SECR_CNTMODE_OFFS)
|
||||
#define SECR_NORMAL_COUNTER (1 << SECR_CNTMODE_OFFS)
|
||||
#define SECR_THRECC_OFFS 16
|
||||
#define SECR_THRECC_MAX 0xFF
|
||||
#define SECR_THRECC_MASK (SECR_THRECC_MAX << SECR_THRECC_OFFS)
|
||||
#define SECR_THRECC(threshold) (threshold << SECR_THRECC_OFFS)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __INCmvDramIfRegsh */
|
||||
@@ -0,0 +1,179 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __INCmvDramIfStaticInith
|
||||
#define __INCmvDramIfStaticInith
|
||||
|
||||
#ifdef MV_STATIC_DRAM_ON_BOARD
|
||||
#define STATIC_DRAM_BANK_1
|
||||
#undef STATIC_DRAM_BANK_2
|
||||
#undef STATIC_DRAM_BANK_3
|
||||
#undef STATIC_DRAM_BANK_4
|
||||
|
||||
|
||||
#ifdef MV_DIMM_TS256MLQ72V5U
|
||||
#define STATIC_DRAM_BANK_2
|
||||
#define STATIC_DRAM_BANK_3
|
||||
#undef STATIC_DRAM_BANK_4
|
||||
|
||||
#define STATIC_SDRAM_CONFIG_REG 0x4724481A /* offset 0x1400 - DMA reg-0xf1000814 */
|
||||
#define STATIC_SDRAM_DUNIT_CTRL_REG 0x37707450 /* offset 0x1404 - DMA reg-0xf100081c */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_LOW_REG 0x11A13330 /* offset 0x1408 - DMA reg-0xf1000824 */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_HIGH_REG 0x00000601 /* offset 0x140c - DMA reg-0xf1000828 */
|
||||
#define STATIC_SDRAM_ADDR_CTRL_REG 0x00001CB2 /* offset 0x1410 - DMA reg-0xf1000820 */
|
||||
#define STATIC_SDRAM_MODE_REG 0x00000642 /* offset 0x141c - DMA reg-0xf1000818 */
|
||||
#define STATIC_SDRAM_ODT_CTRL_LOW 0x030C030C /* 0x1494 */
|
||||
#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */
|
||||
#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000740F /* 0x149c */
|
||||
#define STATIC_SDRAM_EXT_MODE 0x00000404 /* 0x1420 */
|
||||
#define STATIC_SDRAM_DDR2_TIMING_LO 0x00074410 /* 0x1428 */
|
||||
#define STATIC_SDRAM_DDR2_TIMING_HI 0x00007441 /* 0x147C */
|
||||
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM0 0x3FFF /* size bank0 dimm0 - DMA reg-0xf1000810 */
|
||||
#define STATIC_SDRAM_RANK1_SIZE_DIMM0 0x3FFF /* size bank1 dimm0 */
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM1 0x3FFF /* size bank0 dimm1 */
|
||||
#define STATIC_SDRAM_RANK1_SIZE_DIMM1 0x0 /* size bank1 dimm1 */
|
||||
|
||||
#endif /* TS256MLQ72V5U */
|
||||
|
||||
|
||||
#ifdef MV_MT9VDDT3272AG
|
||||
/* one DIMM 256M */
|
||||
#define STATIC_SDRAM_CONFIG_REG 0x5820040d /* offset 0x1400 - DMA reg-0xf1000814 */
|
||||
#define STATIC_SDRAM_DUNIT_CTRL_REG 0xC4000540 /* offset 0x1404 - DMA reg-0xf100081c */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_LOW_REG 0x01602220 /* offset 0x1408 - DMA reg-0xf1000824 */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_HIGH_REG 0x0000000b /* offset 0x140c - DMA reg-0xf1000828 */
|
||||
#define STATIC_SDRAM_ADDR_CTRL_REG 0x00000012 /* offset 0x1410 - DMA reg-0xf1000820 */
|
||||
#define STATIC_SDRAM_MODE_REG 0x00000062 /* offset 0x141c - DMA reg-0xf1000818 */
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM0 0x0fff /* size bank0 dimm0 - DMA reg-0xf1000810 */
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM1 0x0 /* size bank0 dimm1 */
|
||||
|
||||
#endif /* MV_MT9VDDT3272AG */
|
||||
|
||||
|
||||
|
||||
#ifdef MV_D27RB12P
|
||||
/*
|
||||
Two DIMM 512M + ECC enabled, Registered DIMM CAS Latency 2.5
|
||||
*/
|
||||
|
||||
#define STATIC_SDRAM_CONFIG_REG 0x6826081E /* offset 0x1400 - DMA reg-0xf1000814 */
|
||||
#define STATIC_SDRAM_DUNIT_CTRL_REG 0xC5000540 /* offset 0x1404 - DMA reg-0xf100081c */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_LOW_REG 0x01501220 /* offset 0x1408 - DMA reg-0xf1000824 */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_HIGH_REG 0x00000009 /* offset 0x140c - DMA reg-0xf1000828 */
|
||||
#define STATIC_SDRAM_ADDR_CTRL_REG 0x00000012 /* offset 0x1410 - DMA reg-0xf1000820 */
|
||||
#define STATIC_SDRAM_MODE_REG 0x00000062 /* offset 0x141c - DMA reg-0xf1000818 */
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM0 0x0FFF /* size bank0 dimm0 - DMA reg-0xf1000810 */
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM1 0x0FFF /* size bank0 dimm1 */
|
||||
|
||||
#define STATIC_DRAM_BANK_2
|
||||
|
||||
#define STATIC_DRAM_BANK_3
|
||||
#define STATIC_DRAM_BANK_4
|
||||
|
||||
#endif /* mv_D27RB12P */
|
||||
|
||||
#ifdef RD_MV645XX
|
||||
|
||||
#define STATIC_MEM_TYPE MEM_TYPE_DDR2
|
||||
#define STATIC_DIMM_INFO_BANK0_SIZE 256
|
||||
/* DDR2 boards 256 MB*/
|
||||
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM0 0x00000fff /* size bank0 dimm0 - DMA reg-0xf1000810 */
|
||||
#define STATIC_SDRAM_CONFIG_REG 0x07190618
|
||||
#define STATIC_SDRAM_MODE_REG 0x00000432
|
||||
#define STATIC_SDRAM_DUNIT_CTRL_REG 0xf4a03440
|
||||
#define STATIC_SDRAM_ADDR_CTRL_REG 0x00000022
|
||||
#define STATIC_SDRAM_TIMING_CTRL_LOW_REG 0x11712220
|
||||
#define STATIC_SDRAM_TIMING_CTRL_HIGH_REG 0x00000504
|
||||
#define STATIC_SDRAM_ODT_CTRL_LOW 0x84210000
|
||||
#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000
|
||||
#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000780f
|
||||
#define STATIC_SDRAM_EXT_MODE 0x00000440
|
||||
#define STATIC_SDRAM_DDR2_TIMING_LO 0x00063300
|
||||
#define STATIC_SDRAM_DDR2_TIMING_HI 0x00006330
|
||||
#endif /* RD_MV645XX */
|
||||
|
||||
#if MV_DIMM_M3783354CZ3_CE6
|
||||
|
||||
#define STATIC_SDRAM_RANK0_SIZE_DIMM0 0x00000FFF /* 0x2010 size bank0 dimm0 - DMA reg-0xf1000810 */
|
||||
#define STATIC_SDRAM_CONFIG_REG 0x07190618 /* 0x1400 */
|
||||
#define STATIC_SDRAM_MODE_REG 0x00000432 /* 0x141c */
|
||||
#define STATIC_SDRAM_DUNIT_CTRL_REG 0xf4a03440 /* 0x1404 */
|
||||
#define STATIC_SDRAM_ADDR_CTRL_REG 0x00000022 /* 0x1410 */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_LOW_REG 0x11712220 /* 0x1408 */
|
||||
#define STATIC_SDRAM_TIMING_CTRL_HIGH_REG 0x00000504 /* 0x140c */
|
||||
#define STATIC_SDRAM_ODT_CTRL_LOW 0x84210000 /* 0x1494 */
|
||||
#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */
|
||||
#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000780f /* 0x149c */
|
||||
#define STATIC_SDRAM_EXT_MODE 0x00000440 /* 0x1420 */
|
||||
#define STATIC_SDRAM_DDR2_TIMING_LO 0x00063300 /* 0x1428 */
|
||||
#define STATIC_SDRAM_DDR2_TIMING_HI 0x00006330 /* 0x147C */
|
||||
|
||||
#endif /* MV_DIMM_M3783354CZ3_CE6 */
|
||||
|
||||
#endif /* MV_STATIC_DRAM_ON_BOARD */
|
||||
#endif /* __INCmvDramIfStaticInith */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,192 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __INCmvDram
|
||||
#define __INCmvDram
|
||||
|
||||
#include "ddr2/mvDramIf.h"
|
||||
#include "twsi/mvTwsi.h"
|
||||
|
||||
#define MAX_DIMM_NUM 2
|
||||
#define SPD_SIZE 128
|
||||
|
||||
/* Dimm spd offsets */
|
||||
#define DIMM_MEM_TYPE 2
|
||||
#define DIMM_ROW_NUM 3
|
||||
#define DIMM_COL_NUM 4
|
||||
#define DIMM_MODULE_BANK_NUM 5
|
||||
#define DIMM_DATA_WIDTH 6
|
||||
#define DIMM_VOLT_IF 8
|
||||
#define DIMM_MIN_CC_AT_MAX_CAS 9
|
||||
#define DIMM_ERR_CHECK_TYPE 11
|
||||
#define DIMM_REFRESH_INTERVAL 12
|
||||
#define DIMM_SDRAM_WIDTH 13
|
||||
#define DIMM_ERR_CHECK_DATA_WIDTH 14
|
||||
#define DIMM_MIN_CLK_DEL 15
|
||||
#define DIMM_BURST_LEN_SUP 16
|
||||
#define DIMM_DEV_BANK_NUM 17
|
||||
#define DIMM_SUP_CAL 18
|
||||
#define DIMM_DDR2_TYPE_INFORMATION 20 /* DDR2 only */
|
||||
#define DIMM_BUF_ADDR_CONT_IN 21
|
||||
#define DIMM_MIN_CC_AT_MAX_CAS_MINUS1 23
|
||||
#define DIMM_MIN_CC_AT_MAX_CAS_MINUS2 25
|
||||
#define DIMM_MIN_ROW_PRECHARGE_TIME 27
|
||||
#define DIMM_MIN_ROW_ACTIVE_TO_ROW_ACTIVE 28
|
||||
#define DIMM_MIN_RAS_TO_CAS_DELAY 29
|
||||
#define DIMM_MIN_RAS_PULSE_WIDTH 30
|
||||
#define DIMM_BANK_DENSITY 31
|
||||
#define DIMM_MIN_WRITE_RECOVERY_TIME 36
|
||||
#define DIMM_MIN_WRITE_TO_READ_CMD_DELAY 37
|
||||
#define DIMM_MIN_READ_TO_PRECH_CMD_DELAY 38
|
||||
#define DIMM_MIN_REFRESH_TO_ACTIVATE_CMD 42
|
||||
#define DIMM_SPD_VERSION 62
|
||||
|
||||
/* Dimm Memory Type values */
|
||||
#define DIMM_MEM_TYPE_SDRAM 0x4
|
||||
#define DIMM_MEM_TYPE_DDR1 0x7
|
||||
#define DIMM_MEM_TYPE_DDR2 0x8
|
||||
|
||||
#define DIMM_MODULE_MANU_OFFS 64
|
||||
#define DIMM_MODULE_MANU_SIZE 8
|
||||
#define DIMM_MODULE_VEN_OFFS 73
|
||||
#define DIMM_MODULE_VEN_SIZE 25
|
||||
#define DIMM_MODULE_ID_OFFS 99
|
||||
#define DIMM_MODULE_ID_SIZE 18
|
||||
|
||||
/* enumeration for voltage levels. */
|
||||
typedef enum _mvDimmVoltageIf
|
||||
{
|
||||
TTL_5V_TOLERANT,
|
||||
LVTTL,
|
||||
HSTL_1_5V,
|
||||
SSTL_3_3V,
|
||||
SSTL_2_5V,
|
||||
VOLTAGE_UNKNOWN,
|
||||
} MV_DIMM_VOLTAGE_IF;
|
||||
|
||||
|
||||
/* enumaration for SDRAM CAS Latencies. */
|
||||
typedef enum _mvDimmSdramCas
|
||||
{
|
||||
SD_CL_1 =1,
|
||||
SD_CL_2,
|
||||
SD_CL_3,
|
||||
SD_CL_4,
|
||||
SD_CL_5,
|
||||
SD_CL_6,
|
||||
SD_CL_7,
|
||||
SD_FAULT
|
||||
}MV_DIMM_SDRAM_CAS;
|
||||
|
||||
|
||||
/* DIMM information structure */
|
||||
typedef struct _mvDimmInfo
|
||||
{
|
||||
MV_MEMORY_TYPE memoryType; /* DDR or SDRAM */
|
||||
|
||||
MV_U8 spdRawData[SPD_SIZE]; /* Content of SPD-EEPROM copied 1:1 */
|
||||
|
||||
/* DIMM dimensions */
|
||||
MV_U32 numOfRowAddr;
|
||||
MV_U32 numOfColAddr;
|
||||
MV_U32 numOfModuleBanks;
|
||||
MV_U32 dataWidth;
|
||||
MV_U32 errorCheckType; /* ECC , PARITY..*/
|
||||
MV_U32 sdramWidth; /* 4,8,16 or 32 */
|
||||
MV_U32 errorCheckDataWidth; /* 0 - no, 1 - Yes */
|
||||
MV_U32 burstLengthSupported;
|
||||
MV_U32 numOfBanksOnEachDevice;
|
||||
MV_U32 suportedCasLatencies;
|
||||
MV_U32 refreshInterval;
|
||||
MV_U32 dimmBankDensity;
|
||||
MV_U32 dimmTypeInfo; /* DDR2 only */
|
||||
MV_U32 dimmAttributes;
|
||||
|
||||
/* DIMM timing parameters */
|
||||
MV_U32 minCycleTimeAtMaxCasLatPs;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus1Ps;
|
||||
MV_U32 minCycleTimeAtMaxCasLatMinus2Ps;
|
||||
MV_U32 minRowPrechargeTime;
|
||||
MV_U32 minRowActiveToRowActive;
|
||||
MV_U32 minRasToCasDelay;
|
||||
MV_U32 minRasPulseWidth;
|
||||
MV_U32 minWriteRecoveryTime; /* DDR2 only */
|
||||
MV_U32 minWriteToReadCmdDelay; /* DDR2 only */
|
||||
MV_U32 minReadToPrechCmdDelay; /* DDR2 only */
|
||||
MV_U32 minRefreshToActiveCmd; /* DDR2 only */
|
||||
|
||||
/* Parameters calculated from the extracted DIMM information */
|
||||
MV_U32 size; /* 16,64,128,256 or 512 MByte in MB units */
|
||||
MV_U32 deviceDensity; /* 16,64,128,256 or 512 Mbit in MB units */
|
||||
MV_U32 numberOfDevices;
|
||||
|
||||
} MV_DIMM_INFO;
|
||||
|
||||
|
||||
MV_STATUS mvDramBankInfoGet(MV_U32 bankNum, MV_DRAM_BANK_INFO *pBankInfo);
|
||||
MV_STATUS dimmSpdGet(MV_U32 dimmNum, MV_DIMM_INFO *pDimmInfo);
|
||||
MV_VOID dimmSpdPrint(MV_U32 dimmNum);
|
||||
MV_STATUS dimmSpdCpy(MV_VOID);
|
||||
|
||||
#endif /* __INCmvDram */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,748 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* mvEthDebug.c - Source file for user friendly debug functions
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* DEPENDENCIES:
|
||||
* None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#include "mvOs.h"
|
||||
#include "mvCommon.h"
|
||||
#include "mvTypes.h"
|
||||
#include "mv802_3.h"
|
||||
#include "mvDebug.h"
|
||||
#include "ctrlEnv/mvCtrlEnvLib.h"
|
||||
#include "eth-phy/mvEthPhy.h"
|
||||
#include "eth/mvEth.h"
|
||||
#include "eth/gbe/mvEthDebug.h"
|
||||
|
||||
/* #define mvOsPrintf printf */
|
||||
|
||||
void mvEthPortShow(void* pHndl);
|
||||
void mvEthQueuesShow(void* pHndl, int rxQueue, int txQueue, int mode);
|
||||
|
||||
/******************************************************************************/
|
||||
/* Debug functions */
|
||||
/******************************************************************************/
|
||||
void ethRxCoal(int port, int usec)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthRxCoalSet(pHndl, usec);
|
||||
}
|
||||
}
|
||||
|
||||
void ethTxCoal(int port, int usec)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthTxCoalSet(pHndl, usec);
|
||||
}
|
||||
}
|
||||
|
||||
#if (MV_ETH_VERSION >= 4)
|
||||
void ethEjpModeSet(int port, int mode)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthEjpModeSet(pHndl, mode);
|
||||
}
|
||||
}
|
||||
#endif /* (MV_ETH_VERSION >= 4) */
|
||||
|
||||
void ethBpduRxQ(int port, int bpduQueue)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthBpduRxQueue(pHndl, bpduQueue);
|
||||
}
|
||||
}
|
||||
|
||||
void ethArpRxQ(int port, int arpQueue)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthArpRxQueue(pHndl, arpQueue);
|
||||
}
|
||||
}
|
||||
|
||||
void ethTcpRxQ(int port, int tcpQueue)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthTcpRxQueue(pHndl, tcpQueue);
|
||||
}
|
||||
}
|
||||
|
||||
void ethUdpRxQ(int port, int udpQueue)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthUdpRxQueue(pHndl, udpQueue);
|
||||
}
|
||||
}
|
||||
|
||||
void ethTxPolicyRegs(int port)
|
||||
{
|
||||
int queue;
|
||||
ETH_PORT_CTRL* pPortCtrl = (ETH_PORT_CTRL*)mvEthPortHndlGet(port);
|
||||
|
||||
if(pPortCtrl == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
mvOsPrintf("Port #%d TX Policy: EJP=%d, TXQs: ",
|
||||
port, pPortCtrl->portConfig.ejpMode);
|
||||
for(queue=0; queue<MV_ETH_TX_Q_NUM; queue++)
|
||||
{
|
||||
if(pPortCtrl->txQueueConfig[queue].descrNum > 0)
|
||||
mvOsPrintf("%d, ", queue);
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
|
||||
mvOsPrintf("\n\t TX policy Port #%d configuration registers\n", port);
|
||||
|
||||
mvOsPrintf("ETH_TX_QUEUE_COMMAND_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_QUEUE_COMMAND_REG(port),
|
||||
MV_REG_READ( ETH_TX_QUEUE_COMMAND_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_TX_FIXED_PRIO_CFG_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_FIXED_PRIO_CFG_REG(port),
|
||||
MV_REG_READ( ETH_TX_FIXED_PRIO_CFG_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_TX_TOKEN_RATE_CFG_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_TOKEN_RATE_CFG_REG(port),
|
||||
MV_REG_READ( ETH_TX_TOKEN_RATE_CFG_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_MAX_TRANSMIT_UNIT_REG : 0x%X = 0x%08x\n",
|
||||
ETH_MAX_TRANSMIT_UNIT_REG(port),
|
||||
MV_REG_READ( ETH_MAX_TRANSMIT_UNIT_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_TX_TOKEN_BUCKET_SIZE_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_TOKEN_BUCKET_SIZE_REG(port),
|
||||
MV_REG_READ( ETH_TX_TOKEN_BUCKET_SIZE_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_TX_TOKEN_BUCKET_COUNT_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_TOKEN_BUCKET_COUNT_REG(port),
|
||||
MV_REG_READ( ETH_TX_TOKEN_BUCKET_COUNT_REG(port) ) );
|
||||
|
||||
for(queue=0; queue<MV_ETH_MAX_TXQ; queue++)
|
||||
{
|
||||
mvOsPrintf("\n\t TX policy Port #%d, Queue #%d configuration registers\n", port, queue);
|
||||
|
||||
mvOsPrintf("ETH_TXQ_TOKEN_COUNT_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TXQ_TOKEN_COUNT_REG(port, queue),
|
||||
MV_REG_READ( ETH_TXQ_TOKEN_COUNT_REG(port, queue) ) );
|
||||
|
||||
mvOsPrintf("ETH_TXQ_TOKEN_CFG_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TXQ_TOKEN_CFG_REG(port, queue),
|
||||
MV_REG_READ( ETH_TXQ_TOKEN_CFG_REG(port, queue) ) );
|
||||
|
||||
mvOsPrintf("ETH_TXQ_ARBITER_CFG_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TXQ_ARBITER_CFG_REG(port, queue),
|
||||
MV_REG_READ( ETH_TXQ_ARBITER_CFG_REG(port, queue) ) );
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
}
|
||||
|
||||
/* Print important registers of Ethernet port */
|
||||
void ethPortRegs(int port)
|
||||
{
|
||||
mvOsPrintf("\n\t ethGiga #%d port Registers:\n", port);
|
||||
|
||||
mvOsPrintf("ETH_PORT_STATUS_REG : 0x%X = 0x%08x\n",
|
||||
ETH_PORT_STATUS_REG(port),
|
||||
MV_REG_READ( ETH_PORT_STATUS_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_PORT_SERIAL_CTRL_REG : 0x%X = 0x%08x\n",
|
||||
ETH_PORT_SERIAL_CTRL_REG(port),
|
||||
MV_REG_READ( ETH_PORT_SERIAL_CTRL_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_PORT_CONFIG_REG : 0x%X = 0x%08x\n",
|
||||
ETH_PORT_CONFIG_REG(port),
|
||||
MV_REG_READ( ETH_PORT_CONFIG_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_PORT_CONFIG_EXTEND_REG : 0x%X = 0x%08x\n",
|
||||
ETH_PORT_CONFIG_EXTEND_REG(port),
|
||||
MV_REG_READ( ETH_PORT_CONFIG_EXTEND_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_SDMA_CONFIG_REG : 0x%X = 0x%08x\n",
|
||||
ETH_SDMA_CONFIG_REG(port),
|
||||
MV_REG_READ( ETH_SDMA_CONFIG_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_TX_FIFO_URGENT_THRESH_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_FIFO_URGENT_THRESH_REG(port),
|
||||
MV_REG_READ( ETH_TX_FIFO_URGENT_THRESH_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_RX_QUEUE_COMMAND_REG : 0x%X = 0x%08x\n",
|
||||
ETH_RX_QUEUE_COMMAND_REG(port),
|
||||
MV_REG_READ( ETH_RX_QUEUE_COMMAND_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_TX_QUEUE_COMMAND_REG : 0x%X = 0x%08x\n",
|
||||
ETH_TX_QUEUE_COMMAND_REG(port),
|
||||
MV_REG_READ( ETH_TX_QUEUE_COMMAND_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_INTR_CAUSE_REG : 0x%X = 0x%08x\n",
|
||||
ETH_INTR_CAUSE_REG(port),
|
||||
MV_REG_READ( ETH_INTR_CAUSE_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_INTR_EXTEND_CAUSE_REG : 0x%X = 0x%08x\n",
|
||||
ETH_INTR_CAUSE_EXT_REG(port),
|
||||
MV_REG_READ( ETH_INTR_CAUSE_EXT_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_INTR_MASK_REG : 0x%X = 0x%08x\n",
|
||||
ETH_INTR_MASK_REG(port),
|
||||
MV_REG_READ( ETH_INTR_MASK_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_INTR_EXTEND_MASK_REG : 0x%X = 0x%08x\n",
|
||||
ETH_INTR_MASK_EXT_REG(port),
|
||||
MV_REG_READ( ETH_INTR_MASK_EXT_REG(port) ) );
|
||||
|
||||
mvOsPrintf("ETH_RX_DESCR_STAT_CMD_REG : 0x%X = 0x%08x\n",
|
||||
ETH_RX_DESCR_STAT_CMD_REG(port, 0),
|
||||
MV_REG_READ( ETH_RX_DESCR_STAT_CMD_REG(port, 0) ) );
|
||||
|
||||
mvOsPrintf("ETH_RX_BYTE_COUNT_REG : 0x%X = 0x%08x\n",
|
||||
ETH_RX_BYTE_COUNT_REG(port, 0),
|
||||
MV_REG_READ( ETH_RX_BYTE_COUNT_REG(port, 0) ) );
|
||||
|
||||
mvOsPrintf("ETH_RX_BUF_PTR_REG : 0x%X = 0x%08x\n",
|
||||
ETH_RX_BUF_PTR_REG(port, 0),
|
||||
MV_REG_READ( ETH_RX_BUF_PTR_REG(port, 0) ) );
|
||||
|
||||
mvOsPrintf("ETH_RX_CUR_DESC_PTR_REG : 0x%X = 0x%08x\n",
|
||||
ETH_RX_CUR_DESC_PTR_REG(port, 0),
|
||||
MV_REG_READ( ETH_RX_CUR_DESC_PTR_REG(port, 0) ) );
|
||||
}
|
||||
|
||||
|
||||
/* Print Giga Ethernet UNIT registers */
|
||||
void ethRegs(int port)
|
||||
{
|
||||
mvOsPrintf("ETH_PHY_ADDR_REG : 0x%X = 0x%08x\n",
|
||||
ETH_PHY_ADDR_REG(port),
|
||||
MV_REG_READ(ETH_PHY_ADDR_REG(port)) );
|
||||
|
||||
mvOsPrintf("ETH_UNIT_INTR_CAUSE_REG : 0x%X = 0x%08x\n",
|
||||
ETH_UNIT_INTR_CAUSE_REG(port),
|
||||
MV_REG_READ( ETH_UNIT_INTR_CAUSE_REG(port)) );
|
||||
|
||||
mvOsPrintf("ETH_UNIT_INTR_MASK_REG : 0x%X = 0x%08x\n",
|
||||
ETH_UNIT_INTR_MASK_REG(port),
|
||||
MV_REG_READ( ETH_UNIT_INTR_MASK_REG(port)) );
|
||||
|
||||
mvOsPrintf("ETH_UNIT_ERROR_ADDR_REG : 0x%X = 0x%08x\n",
|
||||
ETH_UNIT_ERROR_ADDR_REG(port),
|
||||
MV_REG_READ(ETH_UNIT_ERROR_ADDR_REG(port)) );
|
||||
|
||||
mvOsPrintf("ETH_UNIT_INT_ADDR_ERROR_REG : 0x%X = 0x%08x\n",
|
||||
ETH_UNIT_INT_ADDR_ERROR_REG(port),
|
||||
MV_REG_READ(ETH_UNIT_INT_ADDR_ERROR_REG(port)) );
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* MIB Counters functions */
|
||||
/******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* ethClearMibCounters - Clear all MIB counters
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* This function clears all MIB counters of a specific ethernet port.
|
||||
* A read from the MIB counter will reset the counter.
|
||||
*
|
||||
* INPUT:
|
||||
* int port - Ethernet Port number.
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void ethClearCounters(int port)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
mvEthMibCountersClear(pHndl);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* Print counters of the Ethernet port */
|
||||
void ethPortCounters(int port)
|
||||
{
|
||||
MV_U32 regValue, regValHigh;
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl == NULL)
|
||||
return;
|
||||
|
||||
mvOsPrintf("\n\t Port #%d MIB Counters\n\n", port);
|
||||
|
||||
mvOsPrintf("GoodFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_FRAMES_RECEIVED, NULL));
|
||||
mvOsPrintf("BadFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_BAD_FRAMES_RECEIVED, NULL));
|
||||
mvOsPrintf("BroadcastFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_BROADCAST_FRAMES_RECEIVED, NULL));
|
||||
mvOsPrintf("MulticastFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_MULTICAST_FRAMES_RECEIVED, NULL));
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_OCTETS_RECEIVED_LOW,
|
||||
®ValHigh);
|
||||
mvOsPrintf("GoodOctetsReceived = 0x%08x%08x\n",
|
||||
regValHigh, regValue);
|
||||
|
||||
mvOsPrintf("\n");
|
||||
mvOsPrintf("GoodFramesSent = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_FRAMES_SENT, NULL));
|
||||
mvOsPrintf("BroadcastFramesSent = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_BROADCAST_FRAMES_SENT, NULL));
|
||||
mvOsPrintf("MulticastFramesSent = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_MULTICAST_FRAMES_SENT, NULL));
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_OCTETS_SENT_LOW,
|
||||
®ValHigh);
|
||||
mvOsPrintf("GoodOctetsSent = 0x%08x%08x\n", regValHigh, regValue);
|
||||
|
||||
|
||||
mvOsPrintf("\n\t FC Control Counters\n");
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_UNREC_MAC_CONTROL_RECEIVED, NULL);
|
||||
mvOsPrintf("UnrecogMacControlReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_FC_RECEIVED, NULL);
|
||||
mvOsPrintf("GoodFCFramesReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_BAD_FC_RECEIVED, NULL);
|
||||
mvOsPrintf("BadFCFramesReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_FC_SENT, NULL);
|
||||
mvOsPrintf("FCFramesSent = %u\n", regValue);
|
||||
|
||||
|
||||
mvOsPrintf("\n\t RX Errors\n");
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_BAD_OCTETS_RECEIVED, NULL);
|
||||
mvOsPrintf("BadOctetsReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_UNDERSIZE_RECEIVED, NULL);
|
||||
mvOsPrintf("UndersizeFramesReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_FRAGMENTS_RECEIVED, NULL);
|
||||
mvOsPrintf("FragmentsReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_OVERSIZE_RECEIVED, NULL);
|
||||
mvOsPrintf("OversizeFramesReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_JABBER_RECEIVED, NULL);
|
||||
mvOsPrintf("JabbersReceived = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_MAC_RECEIVE_ERROR, NULL);
|
||||
mvOsPrintf("MacReceiveErrors = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_BAD_CRC_EVENT, NULL);
|
||||
mvOsPrintf("BadCrcReceived = %u\n", regValue);
|
||||
|
||||
mvOsPrintf("\n\t TX Errors\n");
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_INTERNAL_MAC_TRANSMIT_ERR, NULL);
|
||||
mvOsPrintf("TxMacErrors = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_EXCESSIVE_COLLISION, NULL);
|
||||
mvOsPrintf("TxExcessiveCollisions = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_COLLISION, NULL);
|
||||
mvOsPrintf("TxCollisions = %u\n", regValue);
|
||||
|
||||
regValue = mvEthMibCounterRead(pHndl, ETH_MIB_LATE_COLLISION, NULL);
|
||||
mvOsPrintf("TxLateCollisions = %u\n", regValue);
|
||||
|
||||
|
||||
mvOsPrintf("\n");
|
||||
regValue = MV_REG_READ( ETH_RX_DISCARD_PKTS_CNTR_REG(port));
|
||||
mvOsPrintf("Rx Discard packets counter = %u\n", regValue);
|
||||
|
||||
regValue = MV_REG_READ(ETH_RX_OVERRUN_PKTS_CNTR_REG(port));
|
||||
mvOsPrintf("Rx Overrun packets counter = %u\n", regValue);
|
||||
}
|
||||
|
||||
/* Print RMON counters of the Ethernet port */
|
||||
void ethPortRmonCounters(int port)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl == NULL)
|
||||
return;
|
||||
|
||||
mvOsPrintf("\n\t Port #%d RMON MIB Counters\n\n", port);
|
||||
|
||||
mvOsPrintf("64 ByteFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_64_OCTETS, NULL));
|
||||
mvOsPrintf("65...127 ByteFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_65_TO_127_OCTETS, NULL));
|
||||
mvOsPrintf("128...255 ByteFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_128_TO_255_OCTETS, NULL));
|
||||
mvOsPrintf("256...511 ByteFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_256_TO_511_OCTETS, NULL));
|
||||
mvOsPrintf("512...1023 ByteFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_512_TO_1023_OCTETS, NULL));
|
||||
mvOsPrintf("1024...Max ByteFramesReceived = %u\n",
|
||||
mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_1024_TO_MAX_OCTETS, NULL));
|
||||
}
|
||||
|
||||
/* Print port information */
|
||||
void ethPortStatus(int port)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthPortShow(pHndl);
|
||||
}
|
||||
}
|
||||
|
||||
/* Print port queues information */
|
||||
void ethPortQueues(int port, int rxQueue, int txQueue, int mode)
|
||||
{
|
||||
void* pHndl;
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvEthQueuesShow(pHndl, rxQueue, txQueue, mode);
|
||||
}
|
||||
}
|
||||
|
||||
void ethUcastSet(int port, char* macStr, int queue)
|
||||
{
|
||||
void* pHndl;
|
||||
MV_U8 macAddr[MV_MAC_ADDR_SIZE];
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvMacStrToHex(macStr, macAddr);
|
||||
mvEthMacAddrSet(pHndl, macAddr, queue);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ethPortUcastShow(int port)
|
||||
{
|
||||
MV_U32 unicastReg, macL, macH;
|
||||
int i, j;
|
||||
|
||||
macL = MV_REG_READ(ETH_MAC_ADDR_LOW_REG(port));
|
||||
macH = MV_REG_READ(ETH_MAC_ADDR_HIGH_REG(port));
|
||||
|
||||
mvOsPrintf("\n\t Port #%d Unicast MAC table: %02x:%02x:%02x:%02x:%02x:%02x\n\n",
|
||||
port, ((macH >> 24) & 0xff), ((macH >> 16) & 0xff),
|
||||
((macH >> 8) & 0xff), (macH & 0xff),
|
||||
((macL >> 8) & 0xff), (macL & 0xff) );
|
||||
|
||||
for (i=0; i<4; i++)
|
||||
{
|
||||
unicastReg = MV_REG_READ( (ETH_DA_FILTER_UCAST_BASE(port) + i*4));
|
||||
for(j=0; j<4; j++)
|
||||
{
|
||||
MV_U8 macEntry = (unicastReg >> (8*j)) & 0xFF;
|
||||
|
||||
mvOsPrintf("%X: %8s, Q = %d\n", i*4+j,
|
||||
(macEntry & BIT0) ? "Accept" : "Reject", (macEntry >> 1) & 0x7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ethMcastAdd(int port, char* macStr, int queue)
|
||||
{
|
||||
void* pHndl;
|
||||
MV_U8 macAddr[MV_MAC_ADDR_SIZE];
|
||||
|
||||
pHndl = mvEthPortHndlGet(port);
|
||||
if(pHndl != NULL)
|
||||
{
|
||||
mvMacStrToHex(macStr, macAddr);
|
||||
mvEthMcastAddrSet(pHndl, macAddr, queue);
|
||||
}
|
||||
}
|
||||
|
||||
void ethPortMcast(int port)
|
||||
{
|
||||
int tblIdx, regIdx;
|
||||
MV_U32 regVal;
|
||||
|
||||
mvOsPrintf("\n\t Port #%d Special (IP) Multicast table: 01:00:5E:00:00:XX\n\n",
|
||||
port);
|
||||
|
||||
for(tblIdx=0; tblIdx<(256/4); tblIdx++)
|
||||
{
|
||||
regVal = MV_REG_READ((ETH_DA_FILTER_SPEC_MCAST_BASE(port) + tblIdx*4));
|
||||
for(regIdx=0; regIdx<4; regIdx++)
|
||||
{
|
||||
if((regVal & (0x01 << (regIdx*8))) != 0)
|
||||
{
|
||||
mvOsPrintf("0x%02X: Accepted, rxQ = %d\n",
|
||||
tblIdx*4+regIdx, ((regVal >> (regIdx*8+1)) & 0x07));
|
||||
}
|
||||
}
|
||||
}
|
||||
mvOsPrintf("\n\t Port #%d Other Multicast table\n\n", port);
|
||||
for(tblIdx=0; tblIdx<(256/4); tblIdx++)
|
||||
{
|
||||
regVal = MV_REG_READ((ETH_DA_FILTER_OTH_MCAST_BASE(port) + tblIdx*4));
|
||||
for(regIdx=0; regIdx<4; regIdx++)
|
||||
{
|
||||
if((regVal & (0x01 << (regIdx*8))) != 0)
|
||||
{
|
||||
mvOsPrintf("Crc8=0x%02X: Accepted, rxQ = %d\n",
|
||||
tblIdx*4+regIdx, ((regVal >> (regIdx*8+1)) & 0x07));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Print status of Ethernet port */
|
||||
void mvEthPortShow(void* pHndl)
|
||||
{
|
||||
MV_U32 regValue, rxCoal, txCoal;
|
||||
int speed, queue, port;
|
||||
ETH_PORT_CTRL* pPortCtrl = (ETH_PORT_CTRL*)pHndl;
|
||||
|
||||
port = pPortCtrl->portNo;
|
||||
|
||||
regValue = MV_REG_READ( ETH_PORT_STATUS_REG(port) );
|
||||
|
||||
mvOsPrintf("\n\t ethGiga #%d port Status: 0x%04x = 0x%08x\n\n",
|
||||
port, ETH_PORT_STATUS_REG(port), regValue);
|
||||
|
||||
mvOsPrintf("descInSram=%d, descSwCoher=%d\n",
|
||||
ethDescInSram, ethDescSwCoher);
|
||||
|
||||
if(regValue & ETH_GMII_SPEED_1000_MASK)
|
||||
speed = 1000;
|
||||
else if(regValue & ETH_MII_SPEED_100_MASK)
|
||||
speed = 100;
|
||||
else
|
||||
speed = 10;
|
||||
|
||||
mvEthCoalGet(pPortCtrl, &rxCoal, &txCoal);
|
||||
|
||||
/* Link, Speed, Duplex, FlowControl */
|
||||
mvOsPrintf("Link=%s, Speed=%d, Duplex=%s, RxFlowControl=%s",
|
||||
(regValue & ETH_LINK_UP_MASK) ? "UP" : "DOWN",
|
||||
speed,
|
||||
(regValue & ETH_FULL_DUPLEX_MASK) ? "FULL" : "HALF",
|
||||
(regValue & ETH_ENABLE_RCV_FLOW_CTRL_MASK) ? "ENABLE" : "DISABLE");
|
||||
|
||||
mvOsPrintf("\n");
|
||||
|
||||
mvOsPrintf("RxCoal = %d usec, TxCoal = %d usec\n",
|
||||
rxCoal, txCoal);
|
||||
|
||||
mvOsPrintf("rxDefQ=%d, arpQ=%d, bpduQ=%d, tcpQ=%d, udpQ=%d\n\n",
|
||||
pPortCtrl->portConfig.rxDefQ, pPortCtrl->portConfig.rxArpQ,
|
||||
pPortCtrl->portConfig.rxBpduQ,
|
||||
pPortCtrl->portConfig.rxTcpQ, pPortCtrl->portConfig.rxUdpQ);
|
||||
|
||||
/* Print all RX and TX queues */
|
||||
for(queue=0; queue<MV_ETH_RX_Q_NUM; queue++)
|
||||
{
|
||||
mvOsPrintf("RX Queue #%d: base=0x%lx, free=%d\n",
|
||||
queue, (MV_ULONG)pPortCtrl->rxQueue[queue].pFirstDescr,
|
||||
mvEthRxResourceGet(pPortCtrl, queue) );
|
||||
}
|
||||
mvOsPrintf("\n");
|
||||
for(queue=0; queue<MV_ETH_TX_Q_NUM; queue++)
|
||||
{
|
||||
mvOsPrintf("TX Queue #%d: base=0x%lx, free=%d\n",
|
||||
queue, (MV_ULONG)pPortCtrl->txQueue[queue].pFirstDescr,
|
||||
mvEthTxResourceGet(pPortCtrl, queue) );
|
||||
}
|
||||
}
|
||||
|
||||
/* Print RX and TX queue of the Ethernet port */
|
||||
void mvEthQueuesShow(void* pHndl, int rxQueue, int txQueue, int mode)
|
||||
{
|
||||
ETH_PORT_CTRL *pPortCtrl = (ETH_PORT_CTRL*)pHndl;
|
||||
ETH_QUEUE_CTRL *pQueueCtrl;
|
||||
MV_U32 regValue;
|
||||
ETH_RX_DESC *pRxDescr;
|
||||
ETH_TX_DESC *pTxDescr;
|
||||
int i, port = pPortCtrl->portNo;
|
||||
|
||||
if( (rxQueue >=0) && (rxQueue < MV_ETH_RX_Q_NUM) )
|
||||
{
|
||||
pQueueCtrl = &(pPortCtrl->rxQueue[rxQueue]);
|
||||
mvOsPrintf("Port #%d, RX Queue #%d\n\n", port, rxQueue);
|
||||
|
||||
mvOsPrintf("CURR_RX_DESC_PTR : 0x%X = 0x%08x\n",
|
||||
ETH_RX_CUR_DESC_PTR_REG(port, rxQueue),
|
||||
MV_REG_READ( ETH_RX_CUR_DESC_PTR_REG(port, rxQueue)));
|
||||
|
||||
|
||||
if(pQueueCtrl->pFirstDescr != NULL)
|
||||
{
|
||||
mvOsPrintf("pFirstDescr=0x%lx, pLastDescr=0x%lx, numOfResources=%d\n",
|
||||
(MV_ULONG)pQueueCtrl->pFirstDescr, (MV_ULONG)pQueueCtrl->pLastDescr,
|
||||
pQueueCtrl->resource);
|
||||
mvOsPrintf("pCurrDescr: 0x%lx, pUsedDescr: 0x%lx\n",
|
||||
(MV_ULONG)pQueueCtrl->pCurrentDescr,
|
||||
(MV_ULONG)pQueueCtrl->pUsedDescr);
|
||||
|
||||
if(mode == 1)
|
||||
{
|
||||
pRxDescr = (ETH_RX_DESC*)pQueueCtrl->pFirstDescr;
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
mvOsPrintf("%3d. desc=%08x (%08x), cmd=%08x, data=%4d, buf=%4d, buf=%08x, pkt=%lx, os=%lx\n",
|
||||
i, (MV_U32)pRxDescr, (MV_U32)ethDescVirtToPhy(pQueueCtrl, (MV_U8*)pRxDescr),
|
||||
pRxDescr->cmdSts, pRxDescr->byteCnt, (MV_U32)pRxDescr->bufSize,
|
||||
(unsigned int)pRxDescr->bufPtr, (MV_ULONG)pRxDescr->returnInfo,
|
||||
((MV_PKT_INFO*)pRxDescr->returnInfo)->osInfo);
|
||||
|
||||
ETH_DESCR_INV(pPortCtrl, pRxDescr);
|
||||
pRxDescr = RX_NEXT_DESC_PTR(pRxDescr, pQueueCtrl);
|
||||
i++;
|
||||
} while (pRxDescr != pQueueCtrl->pFirstDescr);
|
||||
}
|
||||
}
|
||||
else
|
||||
mvOsPrintf("RX Queue #%d is NOT CREATED\n", rxQueue);
|
||||
}
|
||||
|
||||
if( (txQueue >=0) && (txQueue < MV_ETH_TX_Q_NUM) )
|
||||
{
|
||||
pQueueCtrl = &(pPortCtrl->txQueue[txQueue]);
|
||||
mvOsPrintf("Port #%d, TX Queue #%d\n\n", port, txQueue);
|
||||
|
||||
regValue = MV_REG_READ( ETH_TX_CUR_DESC_PTR_REG(port, txQueue));
|
||||
mvOsPrintf("CURR_TX_DESC_PTR : 0x%X = 0x%08x\n",
|
||||
ETH_TX_CUR_DESC_PTR_REG(port, txQueue), regValue);
|
||||
|
||||
if(pQueueCtrl->pFirstDescr != NULL)
|
||||
{
|
||||
mvOsPrintf("pFirstDescr=0x%lx, pLastDescr=0x%lx, numOfResources=%d\n",
|
||||
(MV_ULONG)pQueueCtrl->pFirstDescr,
|
||||
(MV_ULONG)pQueueCtrl->pLastDescr,
|
||||
pQueueCtrl->resource);
|
||||
mvOsPrintf("pCurrDescr: 0x%lx, pUsedDescr: 0x%lx\n",
|
||||
(MV_ULONG)pQueueCtrl->pCurrentDescr,
|
||||
(MV_ULONG)pQueueCtrl->pUsedDescr);
|
||||
|
||||
if(mode == 1)
|
||||
{
|
||||
pTxDescr = (ETH_TX_DESC*)pQueueCtrl->pFirstDescr;
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
mvOsPrintf("%3d. desc=%08x (%08x), cmd=%08x, data=%4d, buf=%08x, pkt=%lx, os=%lx\n",
|
||||
i, (MV_U32)pTxDescr, (MV_U32)ethDescVirtToPhy(pQueueCtrl, (MV_U8*)pTxDescr),
|
||||
pTxDescr->cmdSts, pTxDescr->byteCnt,
|
||||
(MV_U32)pTxDescr->bufPtr, (MV_ULONG)pTxDescr->returnInfo,
|
||||
pTxDescr->returnInfo ? (((MV_PKT_INFO*)pTxDescr->returnInfo)->osInfo) : 0x0);
|
||||
|
||||
ETH_DESCR_INV(pPortCtrl, pTxDescr);
|
||||
pTxDescr = TX_NEXT_DESC_PTR(pTxDescr, pQueueCtrl);
|
||||
i++;
|
||||
} while (pTxDescr != pQueueCtrl->pFirstDescr);
|
||||
}
|
||||
}
|
||||
else
|
||||
mvOsPrintf("TX Queue #%d is NOT CREATED\n", txQueue);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
/*******************************************************************************
|
||||
Copyright (C) Marvell International Ltd. and its affiliates
|
||||
|
||||
This software file (the "File") is owned and distributed by Marvell
|
||||
International Ltd. and/or its affiliates ("Marvell") under the following
|
||||
alternative licensing terms. Once you have made an election to distribute the
|
||||
File under one of the following license alternatives, please (i) delete this
|
||||
introductory statement regarding license alternatives, (ii) delete the two
|
||||
license alternatives that you have not elected to use and (iii) preserve the
|
||||
Marvell copyright notice above.
|
||||
|
||||
********************************************************************************
|
||||
Marvell Commercial License Option
|
||||
|
||||
If you received this File from Marvell and you have entered into a commercial
|
||||
license agreement (a "Commercial License") with Marvell, the File is licensed
|
||||
to you under the terms of the applicable Commercial License.
|
||||
|
||||
********************************************************************************
|
||||
Marvell GPL License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File in accordance with the terms and conditions of the General
|
||||
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
||||
available along with the File in the license.txt file or by writing to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
||||
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
||||
|
||||
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
||||
DISCLAIMED. The GPL License provides additional details about this warranty
|
||||
disclaimer.
|
||||
********************************************************************************
|
||||
Marvell BSD License Option
|
||||
|
||||
If you received this File from Marvell, you may opt to use, redistribute and/or
|
||||
modify this File under the following licensing terms.
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Marvell nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef __MV_ETH_DEBUG_H__
|
||||
#define __MV_ETH_DEBUG_H__
|
||||
|
||||
#if 0
|
||||
/*
|
||||
** Externs
|
||||
*/
|
||||
void ethBpduRxQ(int port, int bpduQueue);
|
||||
void ethArpRxQ(int port, int bpduQueue);
|
||||
void ethTcpRxQ(int port, int bpduQueue);
|
||||
void ethUdpRxQ(int port, int bpduQueue);
|
||||
void ethMcastAdd(int port, char* macStr, int queue);
|
||||
|
||||
#ifdef INCLUDE_MULTI_QUEUE
|
||||
void ethRxPolicy( int port);
|
||||
void ethTxPolicy( int port);
|
||||
void ethTxPolDA(int port, char* macStr, int txQ, char* headerHexStr);
|
||||
void ethRxPolMode(int port, MV_ETH_PRIO_MODE prioMode);
|
||||
void ethRxPolQ(int port, int rxQueue, int rxQuota);
|
||||
#endif /* INCLUDE_MULTI_QUEUE */
|
||||
|
||||
void print_egiga_stat(void *sc, unsigned int port);
|
||||
void ethPortStatus (int port);
|
||||
void ethPortQueues( int port, int rxQueue, int txQueue, int mode);
|
||||
void ethPortMcast(int port);
|
||||
void ethPortRegs(int port);
|
||||
void ethPortCounters(int port);
|
||||
void ethPortRmonCounters(int port);
|
||||
void ethRxCoal(int port, int usec);
|
||||
void ethTxCoal(int port, int usec);
|
||||
|
||||
void ethRegs(int port);
|
||||
void ethClearCounters(int port);
|
||||
void ethUcastSet(int port, char* macStr, int queue);
|
||||
void ethPortUcastShow(int port);
|
||||
|
||||
#ifdef CONFIG_MV_ETH_HEADER
|
||||
void run_com_header(const char *buffer);
|
||||
#endif
|
||||
|
||||
#ifdef INCLUDE_MULTI_QUEUE
|
||||
void ethRxPolMode(int port, MV_ETH_PRIO_MODE prioMode);
|
||||
void ethRxPolQ(int port, int queue, int quota);
|
||||
void ethRxPolicy(int port);
|
||||
void ethTxPolDef(int port, int txQ, char* headerHexStr);
|
||||
void ethTxPolDA(int port, char* macStr, int txQ, char* headerHexStr);
|
||||
void ethTxPolicy(int port);
|
||||
#endif /* INCLUDE_MULTI_QUEUE */
|
||||
|
||||
#if (MV_ETH_VERSION >= 4)
|
||||
void ethEjpModeSet(int port, int mode)
|
||||
#endif
|
||||
#endif /* 0 */
|
||||
|
||||
|
||||
|
||||
|
||||
void ethRxCoal(int port, int usec);
|
||||
void ethTxCoal(int port, int usec);
|
||||
#if (MV_ETH_VERSION >= 4)
|
||||
void ethEjpModeSet(int port, int mode);
|
||||
#endif /* (MV_ETH_VERSION >= 4) */
|
||||
|
||||
void ethBpduRxQ(int port, int bpduQueue);
|
||||
void ethArpRxQ(int port, int arpQueue);
|
||||
void ethTcpRxQ(int port, int tcpQueue);
|
||||
void ethUdpRxQ(int port, int udpQueue);
|
||||
void ethTxPolicyRegs(int port);
|
||||
void ethPortRegs(int port);
|
||||
void ethRegs(int port);
|
||||
void ethClearCounters(int port);
|
||||
void ethPortCounters(int port);
|
||||
void ethPortRmonCounters(int port);
|
||||
void ethPortStatus(int port);
|
||||
void ethPortQueues(int port, int rxQueue, int txQueue, int mode);
|
||||
void ethUcastSet(int port, char* macStr, int queue);
|
||||
void ethPortUcastShow(int port);
|
||||
void ethMcastAdd(int port, char* macStr, int queue);
|
||||
void ethPortMcast(int port);
|
||||
void mvEthPortShow(void* pHndl);
|
||||
void mvEthQueuesShow(void* pHndl, int rxQueue, int txQueue, int mode);
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user