diff options
Diffstat (limited to 'target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr2/mvDramIfBasicInit.S')
-rw-r--r-- | target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr2/mvDramIfBasicInit.S | 986 |
1 files changed, 0 insertions, 986 deletions
diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr2/mvDramIfBasicInit.S b/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr2/mvDramIfBasicInit.S deleted file mode 100644 index 7672381..0000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr2/mvDramIfBasicInit.S +++ /dev/null @@ -1,986 +0,0 @@ -/******************************************************************************* -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. - -*******************************************************************************/ - -#define _ASMLANGUAGE -#define MV_ASMLANGUAGE -#include "mvSysHwConfig.h" -#include "mvOsAsm.h" -#include "boardEnv/mvBoardEnvSpec.h" -#include "ctrlEnv/sys/mvCpuIfRegs.h" -#include "mvDramIfConfig.h" -#include "mvDramIfRegs.h" -#include "pex/mvPexRegs.h" -#include "ctrlEnv/mvCtrlEnvSpec.h" -#include "ctrlEnv/mvCtrlEnvAsm.h" -#include "mvCommon.h" - -/* defines */ - -#if defined(MV_STATIC_DRAM_ON_BOARD) -.globl dramBoot1 -dramBoot1: - .word 0 - -/****************************************************************************** -* -* -* -* -*******************************************************************************/ -#if defined(DB_MV78XX0) || defined(DB_MV88F632X) -/* DDR2 boards 512MB 333MHz */ -#define STATIC_SDRAM0_BANK0_SIZE 0x1ffffff1 /* 0x1504 */ -#define STATIC_SDRAM_CONFIG 0x43048C30 /* 0x1400 */ -#define STATIC_SDRAM_MODE 0x00000652 /* 0x141c */ -#define STATIC_DUNIT_CTRL_LOW 0x38543000 /* 0x1404 */ -#define STATIC_DUNIT_CTRL_HI 0x0000FFFF /* 0x1424 */ -#define STATIC_SDRAM_ADDR_CTRL 0x00000088 /* 0x1410 */ -#define STATIC_SDRAM_TIME_CTRL_LOW 0x22125441 /* 0x1408 */ -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000A29 /* 0x140c */ -#define STATIC_SDRAM_ODT_CTRL_LOW 0x84210000 /* 0x1494 */ -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */ -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000E80F /* 0x149c */ -#define STATIC_SDRAM_EXT_MODE 0x00000040 /* 0x1420 */ -#define STATIC_SDRAM_DDR2_TIMING_LO 0x00085520 /* 0x1428 */ -#define STATIC_SDRAM_DDR2_TIMING_HI 0x00008552 /* 0x147C */ - -#elif defined(RD_MV78XX0_AMC) -/* On board DDR2 512MB 400MHz CL5 */ -#define STATIC_SDRAM0_BANK0_SIZE 0x1ffffff1 /* 0x1504 */ -#define STATIC_SDRAM_CONFIG 0x43008C30 /* 0x1400 */ -#define STATIC_SDRAM_MODE 0x00000652 /* 0x141c */ -#define STATIC_DUNIT_CTRL_LOW 0x38543000 /* 0x1404 */ -#define STATIC_DUNIT_CTRL_HI 0x0000F07F /* 0x1424 */ -#define STATIC_SDRAM_ADDR_CTRL 0x000000DD /* 0x1410 */ -#define STATIC_SDRAM_TIME_CTRL_LOW 0x23135441 /* 0x1408 */ -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000A32 /* 0x140c */ -#define STATIC_SDRAM_ODT_CTRL_LOW 0x84210000 /* 0x1494 */ -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */ -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000EB0F /* 0x149c */ -#define STATIC_SDRAM_EXT_MODE 0x00000040 /* 0x1420 */ -#define STATIC_SDRAM_DDR2_TIMING_LO 0x00085520 /* 0x1428 */ -#define STATIC_SDRAM_DDR2_TIMING_HI 0x00008552 /* 0x147C */ - -#elif defined(RD_MV78XX0_H3C) -/* DDR2 boards 512MB 333MHz */ -#define STATIC_SDRAM0_BANK0_SIZE 0x1ffffff1 /* 0x1504 */ -#define STATIC_SDRAM_CONFIG 0x43048a25 /* 0x1400 */ -#define STATIC_SDRAM_MODE 0x00000652 /* 0x141c */ -#define STATIC_DUNIT_CTRL_LOW 0x38543000 /* 0x1404 */ -#define STATIC_DUNIT_CTRL_HI 0x0000F07F /* 0x1424 */ -#define STATIC_SDRAM_ADDR_CTRL 0x00000088 /* 0x1410 */ -#define STATIC_SDRAM_TIME_CTRL_LOW 0x2202444e /* 0x1408 */ -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000A22 /* 0x140c */ -#define STATIC_SDRAM_ODT_CTRL_LOW 0x84210000 /* 0x1494 */ -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */ -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000EB0F /* 0x149c */ -#define STATIC_SDRAM_EXT_MODE 0x00000040 /* 0x1420 */ -#define STATIC_SDRAM_DDR2_TIMING_LO 0x00085520 /* 0x1428 */ -#define STATIC_SDRAM_DDR2_TIMING_HI 0x00008552 /* 0x147C */ - -#elif defined(RD_MV78XX0_PCAC) -/* DDR2 boards 256MB 200MHz */ -#define STATIC_SDRAM0_BANK0_SIZE 0x0ffffff1 /* 0x1504 */ -#define STATIC_SDRAM_CONFIG 0x43000a25 /* 0x1400 */ -#define STATIC_SDRAM_MODE 0x00000652 /* 0x141c */ -#define STATIC_DUNIT_CTRL_LOW 0x38543000 /* 0x1404 */ -#define STATIC_DUNIT_CTRL_HI 0x0000F07F /* 0x1424 */ -#define STATIC_SDRAM_ADDR_CTRL 0x000000DD /* 0x1410 */ -#define STATIC_SDRAM_TIME_CTRL_LOW 0x2202444e /* 0x1408 */ -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000822 /* 0x140c */ -#define STATIC_SDRAM_ODT_CTRL_LOW 0x84210000 /* 0x1494 */ -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */ -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000EB0F /* 0x149c */ -#define STATIC_SDRAM_EXT_MODE 0x00000040 /* 0x1420 */ -#define STATIC_SDRAM_DDR2_TIMING_LO 0x00085520 /* 0x1428 */ -#define STATIC_SDRAM_DDR2_TIMING_HI 0x00008552 /* 0x147C */ - -#else -/* DDR2 MV88F6281 boards 256MB 400MHz */ -#define STATIC_SDRAM0_BANK0_SIZE 0x0FFFFFF1 /* 0x1504 */ -#define STATIC_SDRAM_CONFIG 0x43000c30 /* 0x1400 */ -#define STATIC_SDRAM_MODE 0x00000C52 /* 0x141c */ -#define STATIC_DUNIT_CTRL_LOW 0x39543000 /* 0x1404 */ -#define STATIC_DUNIT_CTRL_HI 0x0000F1FF /* 0x1424 */ -#define STATIC_SDRAM_ADDR_CTRL 0x000000cc /* 0x1410 */ -#define STATIC_SDRAM_TIME_CTRL_LOW 0x22125451 /* 0x1408 */ -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000A33 /* 0x140c */ -#define STATIC_SDRAM_ODT_CTRL_LOW 0x003C0000 /* 0x1494 */ -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000000 /* 0x1498 */ -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0000F80F /* 0x149c */ -#define STATIC_SDRAM_EXT_MODE 0x00000042 /* 0x1420 */ -#define STATIC_SDRAM_DDR2_TIMING_LO 0x00085520 /* 0x1428 */ -#define STATIC_SDRAM_DDR2_TIMING_HI 0x00008552 /* 0x147C */ -#endif /* MV78XX0 */ - - .globl _mvDramIfStaticInit -_mvDramIfStaticInit: - - mov r11, LR /* Save link register */ - mov r10, r2 - -#ifdef MV78XX0 - MV_REG_READ_ASM (r6, r5, SDRAM_DUNIT_CTRL_REG) - orr r6, r6, #BIT4 /* Enable 2T mode */ - bic r6, r6, #BIT6 /* clear ctrlPos */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_DUNIT_CTRL_REG) -#endif - - /*DDR SDRAM Initialization Control */ - ldr r6, =DSICR_INIT_EN - MV_REG_WRITE_ASM (r6, r1, DDR_SDRAM_INIT_CTRL_REG) -2: MV_REG_READ_ASM (r6, r1, DDR_SDRAM_INIT_CTRL_REG) - and r6, r6, #DSICR_INIT_EN - cmp r6, #0 - bne 2b - - /* If we boot from NAND jump to DRAM address */ - mov r5, #1 - ldr r6, =dramBoot1 - str r5, [r6] /* We started executing from DRAM */ - - ldr r6, dramBoot1 - cmp r6, #0 - bne 1f - - /* set all dram windows to 0 */ - mov r6, #0 - MV_REG_WRITE_ASM(r6, r5, SDRAM_SIZE_REG(0,0)) - MV_REG_WRITE_ASM(r6, r5, SDRAM_SIZE_REG(0,1)) - MV_REG_WRITE_ASM(r6, r5, SDRAM_SIZE_REG(0,2)) - MV_REG_WRITE_ASM(r6, r5, SDRAM_SIZE_REG(0,3)) - ldr r6, = STATIC_SDRAM0_BANK0_SIZE - MV_REG_WRITE_ASM(r6, r5, SDRAM_SIZE_REG(0,0)) - - - /* set all dram configuration in temp registers */ - ldr r6, = STATIC_SDRAM0_BANK0_SIZE - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG0) - ldr r6, = STATIC_SDRAM_CONFIG - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG1) - ldr r6, = STATIC_SDRAM_MODE - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG2) - ldr r6, = STATIC_DUNIT_CTRL_LOW - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG3) - ldr r6, = STATIC_SDRAM_ADDR_CTRL - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG4) - ldr r6, = STATIC_SDRAM_TIME_CTRL_LOW - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG5) - ldr r6, = STATIC_SDRAM_TIME_CTRL_HI - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG6) - ldr r6, = STATIC_SDRAM_ODT_CTRL_LOW - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG7) - ldr r6, = STATIC_SDRAM_ODT_CTRL_HI - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG8) - ldr r6, = STATIC_SDRAM_DUNIT_ODT_CTRL - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG9) - ldr r6, = STATIC_SDRAM_EXT_MODE - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG10) - ldr r6, = STATIC_SDRAM_DDR2_TIMING_LO - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG11) - ldr r6, = STATIC_SDRAM_DDR2_TIMING_HI - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG12) -#ifndef MV_NAND_BOOT - ldr r6, = STATIC_DUNIT_CTRL_HI - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG13) -#endif - - ldr sp,=0 - bl _mvDramIfConfig - ldr r0, =0 -#ifdef MV78XX0 - bl _mvDramIfEccMemInit -#endif -1: - mov r2, r10 - mov PC, r11 /* r11 is saved link register */ - -#else /* #if defined(MV_STATIC_DRAM_ON_BOARD) */ - -.globl dramBoot1 -dramBoot1: - .word 0 - -/******************************************************************************* -* mvDramIfBasicInit - Basic initialization of DRAM interface -* -* DESCRIPTION: -* The function will initialize the DRAM for basic usage. The function -* will use the TWSI assembly API to extract DIMM parameters according -* to which DRAM interface will be initialized. -* The function referes to the following DRAM parameters: -* 1) DIMM is registered or not. -* 2) DIMM width detection. -* 3) DIMM density. -* -* INPUT: -* r3 - required size for initial DRAM. -* -* OUTPUT: -* None. -* -* RETURN: -* None. -* -* Note: -* r4 holds I2C EEPROM address -* r5 holds SDRAM register base address -* r7 holds returned values -* r8 holds SDRAM various configuration registers value. -* r11 holds return function address. -*******************************************************************************/ -/* Setting the offsets of the I2C registers */ -#define DIMM_TYPE_OFFSET 2 -#define NUM_OF_ROWS_OFFSET 3 -#define NUM_OF_COLS_OFFSET 4 -#define NUM_OF_RANKS 5 -#define DIMM_CONFIG_TYPE 11 -#define SDRAM_WIDTH_OFFSET 13 -#define NUM_OF_BANKS_OFFSET 17 -#define SUPPORTED_CL_OFFSET 18 -#define DIMM_TYPE_INFO_OFFSET 20 /* DDR2 only */ -#define SDRAM_MODULES_ATTR_OFFSET 21 -#define RANK_SIZE_OFFSET 31 - -#define DRAM_DEV_DENSITY_128M 128 -#define DRAM_DEV_DENSITY_256M 256 -#define DRAM_DEV_DENSITY_512M 512 -#define DRAM_DEV_DENSITY_1G 1024 -#define DRAM_DEV_DENSITY_2G 2048 - -#define DRAM_RANK_DENSITY_128M 0x20 -#define DRAM_RANK_DENSITY_256M 0x40 -#define DRAM_RANK_DENSITY_512M 0x80 -#define DRAM_RANK_DENSITY_1G 0x1 -#define DRAM_RANK_DENSITY_2G 0x2 - - .globl _mvDramIfBasicInit - .extern _i2cInit -_mvDramIfBasicInit: - - mov r11, LR /* Save link register */ - - /* Set Dunit high control register */ - MV_REG_READ_ASM (r6, r5, SDRAM_DUNIT_CTRL_HI_REG) - orr r6, r6, #BIT7 /* SDRAM__D2P_EN */ - orr r6, r6, #BIT8 /* SDRAM__P2D_EN */ -#ifdef MV78XX0 - orr r6, r6, #BIT9 /* SDRAM__ADD_HALF_FCC_EN */ - orr r6, r6, #BIT10 /* SDRAM__PUP_ZERO_SKEW_EN */ - orr r6, r6, #BIT11 /* SDRAM__WR_MASH_DELAY_EN */ -#endif - MV_REG_WRITE_ASM (r6, r5, SDRAM_DUNIT_CTRL_HI_REG) - -#ifdef MV78XX0 - MV_REG_READ_ASM (r6, r5, SDRAM_DUNIT_CTRL_REG) - orr r6, r6, #BIT4 /* Enable 2T mode */ - bic r6, r6, #BIT6 /* clear ctrlPos */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_DUNIT_CTRL_REG) -#endif - - /*DDR SDRAM Initialization Control */ - ldr r6, =DSICR_INIT_EN - MV_REG_WRITE_ASM (r6, r1, DDR_SDRAM_INIT_CTRL_REG) -2: MV_REG_READ_ASM (r6, r1, DDR_SDRAM_INIT_CTRL_REG) - and r6, r6, #DSICR_INIT_EN - cmp r6, #0 - bne 2b - - mov r5, #1 - ldr r8, =dramBoot1 - str r5, [r8] /* We started executing from DRAM */ - - /* If we boot from NAND jump to DRAM address */ - ldr r8, dramBoot1 - cmp r8, #0 - movne pc, r11 - - bl _i2cInit /* Initialize TWSI master */ - - /* Check if we have more then 1 dimm */ - ldr r6, =0 - MV_REG_WRITE_ASM (r6, r1, DRAM_BUF_REG14) -#ifdef MV78XX0 - bl _is_Second_Dimm_Exist - beq single_dimm - ldr r6, =1 - MV_REG_WRITE_ASM (r6, r1, DRAM_BUF_REG14) -single_dimm: - bl _i2cInit /* Initialize TWSI master */ -#endif - - /* Get default SDRAM Config values */ - MV_REG_READ_ASM (r8, r5, SDRAM_CONFIG_REG) - - /* Get registered/non registered info from DIMM */ - bl _is_Registered - beq nonRegistered - -setRegistered: - orr r8, r8, #SDRAM_REGISTERED /* Set registered bit(17) */ -nonRegistered: -#ifdef MV78XX0 - /* Get ECC/non ECC info from DIMM */ - bl _is_Ecc - beq setConfigReg - -setEcc: - orr r8, r8, #SDRAM_ECC_EN /* Set ecc bit(18) */ -#endif -setConfigReg: - MV_REG_WRITE_ASM (r8, r5, DRAM_BUF_REG1) - - /* Set maximum CL supported by DIMM */ - bl _get_CAL - - /* r7 is DIMM supported CAS (e.g: 3 --> 0x1C) */ - clz r6, r7 - rsb r6, r6, #31 /* r6 = the bit number of MAX CAS supported */ - -casDdr2: - ldr r7, =0x41 /* stBurstInDel|stBurstOutDel field value */ - ldr r3, =0x53 /* stBurstInDel|stBurstOutDel registered value*/ - ldr r8, =0x32 /* Assuming MAX CL = 3 */ - cmp r6, #3 /* If CL = 3 break */ - beq casDdr2Cont - - ldr r7, =0x53 /* stBurstInDel|stBurstOutDel field value */ - ldr r3, =0x65 /* stBurstInDel|stBurstOutDel registered value*/ - ldr r8, =0x42 /* Assuming MAX CL = 4 */ - cmp r6, #4 /* If CL = 4 break */ - beq casDdr2Cont - - ldr r7, =0x65 /* stBurstInDel|stBurstOutDel field value */ - ldr r3, =0x77 /* stBurstInDel|stBurstOutDel registered value*/ - ldr r8, =0x52 /* Assuming MAX CL = 5 */ - cmp r6, #5 /* If CL = 5 break */ - beq casDdr2Cont - - ldr r7, =0x77 /* stBurstInDel|stBurstOutDel field value */ - ldr r3, =0x89 /* stBurstInDel|stBurstOutDel registered value*/ - ldr r8, =0x62 /* Assuming MAX CL = 6 */ - cmp r6, #6 /* If CL = 5 break */ - beq casDdr2Cont - - /* This is an error. return */ - b exit_ddrAutoConfig /* This is an error !! */ -casDdr2Cont: - - /* Get default SDRAM Mode values */ - MV_REG_READ_ASM (r6, r5, SDRAM_MODE_REG) - bic r6, r6, #(BIT6 | BIT5 | BIT4) /* Clear CL filed */ - orr r6, r6, r8 - MV_REG_WRITE_ASM (r6, r5, DRAM_BUF_REG2) - - /* Set Dunit control register according to max CL detected */ - MV_REG_READ_ASM (r6, r5, DRAM_BUF_REG1) - tst r6, #SDRAM_REGISTERED - beq setDunitReg - mov r7, r3 - -setDunitReg: -#ifdef MV78XX0 - /* Set SDRAM Extended Mode register for double DIMM */ - /* Check DRAM frequency for more then 267MHz set ODT Rtt to 50ohm */ - - MV_REG_READ_ASM (r4, r5, CPU_RESET_SAMPLE_L_REG) - ldr r5, =MSAR_SYSCLCK_MASK - and r4, r4, r5 - ldr r5, =MSAR_SYSCLCK_333 - cmp r4, r5 - ble Clock333 - add r7, r7, #0x10 -Clock333: -#endif - - MV_REG_READ_ASM (r6, r5, SDRAM_DUNIT_CTRL_REG) - bic r6, r6, #(0xff << 20) /* Clear SBout and SBin */ - orr r6, r6, #BIT4 /* Enable 2T mode */ - bic r6, r6, #BIT6 /* clear ctrlPos */ - orr r6, r6, r7, LSL #20 - MV_REG_WRITE_ASM (r6, r5, DRAM_BUF_REG3) - - /* Set Dunit high control register */ - MV_REG_READ_ASM (r6, r5, SDRAM_DUNIT_CTRL_HI_REG) - orr r6, r6, #BIT7 /* SDRAM__D2P_EN */ - orr r6, r6, #BIT8 /* SDRAM__P2D_EN */ -#ifdef MV78XX0 - orr r6, r6, #BIT9 /* SDRAM__ADD_HALF_FCC_EN */ - orr r6, r6, #BIT10 /* SDRAM__PUP_ZERO_SKEW_EN */ - orr r6, r6, #BIT11 /* SDRAM__WR_MASH_DELAY_EN */ -#endif - MV_REG_WRITE_ASM (r6, r5, DRAM_BUF_REG13) - - /* DIMM density configuration*/ - /* Density = (1 << (rowNum + colNum)) * dramWidth * dramBankNum */ -Density: - /* Get bank 0 and 1 density */ - ldr r6, =0 - bl _getDensity - - mov r8, r7 - mov r8, r8, LSR #20 /* Move density 20 bits to the right */ - /* For example 0x10000000 --> 0x1000 */ - - mov r3, #(SDRAM_DSIZE_256Mb(0) | SDRAM_DSIZE_256Mb(1)) - cmp r8, #DRAM_DEV_DENSITY_256M - beq get_bank_2_density - - mov r3, #(SDRAM_DSIZE_512Mb(0) | SDRAM_DSIZE_512Mb(1)) - cmp r8, #DRAM_DEV_DENSITY_512M - beq get_bank_2_density - - mov r3, #(SDRAM_DSIZE_1Gb(0) | SDRAM_DSIZE_1Gb(1)) - cmp r8, #DRAM_DEV_DENSITY_1G - beq get_bank_2_density - - mov r3, #(SDRAM_DSIZE_2Gb(0) | SDRAM_DSIZE_2Gb(1)) - cmp r8, #DRAM_DEV_DENSITY_2G - beq get_bank_2_density - - /* This is an error. return */ - b exit_ddrAutoConfig - -get_bank_2_density: - /* Check for second dimm */ - MV_REG_READ_ASM (r6, r1, DRAM_BUF_REG14) - cmp r6, #1 - bne get_width - - /* Get bank 2 and 3 density */ - ldr r6, =2 - bl _getDensity - - mov r8, r7 - mov r8, r8, LSR #20 /* Move density 20 bits to the right */ - /* For example 0x10000000 --> 0x1000 */ - - orr r3, r3, #(SDRAM_DSIZE_256Mb(2) | SDRAM_DSIZE_256Mb(3)) - cmp r8, #DRAM_DEV_DENSITY_256M - beq get_width - - and r3, r3, #~(SDRAM_DSIZE_MASK(2) | SDRAM_DSIZE_MASK(3)) - orr r3, r3, #(SDRAM_DSIZE_512Mb(2) | SDRAM_DSIZE_512Mb(3)) - cmp r8, #DRAM_DEV_DENSITY_512M - beq get_width - - and r3, r3, #~(SDRAM_DSIZE_MASK(2) | SDRAM_DSIZE_MASK(3)) - orr r3, r3, #(SDRAM_DSIZE_1Gb(2) | SDRAM_DSIZE_1Gb(3)) - cmp r8, #DRAM_DEV_DENSITY_1G - beq get_width - - and r3, r3, #~(SDRAM_DSIZE_MASK(2) | SDRAM_DSIZE_MASK(3)) - orr r3, r3, #(SDRAM_DSIZE_2Gb(2) | SDRAM_DSIZE_2Gb(3)) - cmp r8, #DRAM_DEV_DENSITY_2G - beq get_width - - /* This is an error. return */ - b exit_ddrAutoConfig - - /* Get SDRAM width */ -get_width: - /* Get bank 0 and 1 width */ - ldr r6, =0 - bl _get_width - - cmp r7, #8 /* x8 devices */ - beq get_bank_2_width - - orr r3, r3, #(SDRAM_ADDRSEL_X16(0) | SDRAM_ADDRSEL_X16(1)) /* x16 devices */ - cmp r7, #16 - beq get_bank_2_width - - /* This is an error. return */ - b exit_ddrAutoConfig - -get_bank_2_width: - /* Check for second dimm */ - MV_REG_READ_ASM (r6, r1, DRAM_BUF_REG14) - cmp r6, #1 - bne densCont - - /* Get bank 2 and 3 width */ - ldr r6, =2 - bl _get_width - - cmp r7, #8 /* x8 devices */ - beq densCont - - orr r3, r3, #(SDRAM_ADDRSEL_X16(2) | SDRAM_ADDRSEL_X16(3)) /* x16 devices */ - cmp r7, #16 - beq densCont - - /* This is an error. return */ - b exit_ddrAutoConfig - -densCont: - MV_REG_WRITE_ASM (r3, r5, DRAM_BUF_REG4) - - /* Set SDRAM timing control low register */ - ldr r4, =SDRAM_TIMING_CTRL_LOW_REG_DEFAULT - /* MV_REG_READ_ASM (r4, r5, SDRAM_TIMING_CTRL_LOW_REG) */ - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG5) - - /* Set SDRAM timing control high register */ - ldr r6, =SDRAM_TIMING_CTRL_HIGH_REG_DEFAULT - - MV_REG_READ_ASM (r4, r5, CPU_RESET_SAMPLE_L_REG) - ldr r5, =MSAR_SYSCLCK_MASK - and r4, r4, r5 - ldr r5, =MSAR_SYSCLCK_333 - cmp r4, r5 - blt timingHighClock333 - orr r6, r6, #BIT9 - -timingHighClock333: - /* MV_REG_READ_ASM (r6, r5, SDRAM_TIMING_CTRL_HIGH_REG) */ - MV_REG_WRITE_ASM(r6, r5, DRAM_BUF_REG6) - - /* Check for second dimm */ - MV_REG_READ_ASM (r6, r1, DRAM_BUF_REG14) - cmp r6, #1 - bne single_dimm_odt - - /* Set SDRAM ODT control low register for double DIMM*/ - ldr r4, =DDR2_ODT_CTRL_LOW_CS0_CS1_CS2_CS3_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG7) - - /* Set DUNIT ODT control register for double DIMM */ - ldr r4, =DDR2_DUNIT_ODT_CTRL_CS0_CS1_CS2_CS3_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG9) - -#ifdef MV78XX0 - /* Set SDRAM Extended Mode register for double DIMM */ - /* Check DRAM frequency for more then 267MHz set ODT Rtt to 50ohm */ - - MV_REG_READ_ASM (r4, r5, CPU_RESET_SAMPLE_L_REG) - ldr r5, =MSAR_SYSCLCK_MASK - and r4, r4, r5 - ldr r5, =MSAR_SYSCLCK_267 - cmp r4, r5 - beq slow_dram_clock_rtt - ldr r5, =MSAR_SYSCLCK_300 - cmp r4, r5 - beq slow_dram_clock_rtt - ldr r5, =MSAR_SYSCLCK_333 - cmp r4, r5 - beq fast_dram_clock_rtt - ldr r5, =MSAR_SYSCLCK_400 - cmp r4, r5 - beq fast_dram_clock_rtt - - b slow_dram_clock_rtt - -fast_dram_clock_rtt: - ldr r4, =DDR_SDRAM_EXT_MODE_FAST_CS0_CS1_CS2_CS3_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG10) - b odt_config_end -#endif -slow_dram_clock_rtt: - ldr r4, =DDR_SDRAM_EXT_MODE_CS0_CS1_CS2_CS3_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG10) - b odt_config_end - -single_dimm_odt: - /* Set SDRAM ODT control low register */ - ldr r4, =DDR2_ODT_CTRL_LOW_CS0_CS1_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG7) - - /* Set DUNIT ODT control register */ - ldr r4, =DDR2_DUNIT_ODT_CTRL_CS0_CS1_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG9) - - /* Set SDRAM Extended Mode register */ - ldr r4, =DDR_SDRAM_EXT_MODE_CS0_CS1_DV - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG10) - -odt_config_end: - /* SDRAM ODT control high register is left as default */ - MV_REG_READ_ASM (r4, r5, DDR2_SDRAM_ODT_CTRL_HIGH_REG) - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG8) - - /*Read CL and set the DDR2 registers accordingly */ - MV_REG_READ_ASM (r6, r5, DRAM_BUF_REG2) - and r6, r6, #SDRAM_CL_MASK - mov r4, r6 - orr r4, r4, r6, LSL #4 - orr r4, r4, r6, LSL #8 - orr r4, r4, r6, LSL #12 - mov r5, #0x30000 - add r4, r4, r5 - sub r4, r4, #0x30 - /* Set SDRAM Ddr2 Timing Low register */ - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG11) - - /* Set SDRAM Ddr2 Timing High register */ - mov r4, r4, LSR #4 - MV_REG_WRITE_ASM(r4, r5, DRAM_BUF_REG12) - -timeParamDone: - /* Close all windows */ - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,0)) - and r6, r6,#~SCSR_SIZE_MASK - and r6, r6,#~1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,0)) - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,1)) - and r6, r6,#~SCSR_SIZE_MASK - and r6, r6,#~1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,1)) - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,2)) - and r6, r6,#~SCSR_SIZE_MASK - and r6, r6,#~1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,2)) - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,3)) - and r6, r6,#~SCSR_SIZE_MASK - and r6, r6,#~1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,3)) - - /* Set sdram bank 0 size and enable it */ - ldr r6, =0 - bl _mvDramIfGetDimmSizeFromSpd -#ifdef MV78XX0 - /* Check DRAM width */ - MV_REG_READ_ASM (r4, r5, SDRAM_CONFIG_REG) - ldr r5, =SDRAM_DWIDTH_MASK - and r4, r4, r5 - ldr r5, =SDRAM_DWIDTH_64BIT - cmp r4, r5 - beq dram_64bit_width - /* Utilize only 32bit width */ - mov r8, r8, LSR #1 -#else - /* Utilize only 16bit width */ - mov r8, r8, LSR #2 -#endif -dram_64bit_width: - /* Update first dimm size return value R8 */ - MV_REG_READ_ASM (r5, r6, SDRAM_SIZE_REG(0,0)) - ldr r6, =~SCSR_SIZE_MASK - and r5, r5, r6 - orr r5, r5, r8 - MV_REG_WRITE_ASM(r5, r8, SDRAM_SIZE_REG(0,0)) - - /* Clear bank 2 size */ - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,2)) - and r6, r6,#~SCSR_SIZE_MASK - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,2)) - - /* Check for second dimm */ - MV_REG_READ_ASM (r6, r1, DRAM_BUF_REG14) - cmp r6, #1 - bne defualt_order - - /* Set sdram bank 2 size */ - ldr r6, =2 - bl _mvDramIfGetDimmSizeFromSpd -#ifdef MV78XX0 - /* Check DRAM width */ - MV_REG_READ_ASM (r4, r5, SDRAM_CONFIG_REG) - ldr r5, =SDRAM_DWIDTH_MASK - and r4, r4, r5 - ldr r5, =SDRAM_DWIDTH_64BIT - cmp r4, r5 - beq dram_64bit_width2 - /* Utilize only 32bit width */ - mov r8, r8, LSR #1 -#else - /* Utilize only 16bit width */ - mov r8, r8, LSR #2 -#endif -dram_64bit_width2: - /* Update first dimm size return value R8 */ - MV_REG_READ_ASM (r5, r6, SDRAM_SIZE_REG(0,2)) - ldr r6, =~SCSR_SIZE_MASK - and r5, r5, r6 - orr r5, r5, r8 - MV_REG_WRITE_ASM(r5, r8, SDRAM_SIZE_REG(0,2)) - - /* Close windows 1 and 3 */ - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,1)) - and r6, r6,#~1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,1)) - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,3)) - and r6, r6,#~1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,3)) - - /* Check dimm size for setting dram bank order */ - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,0)) - MV_REG_READ_ASM (r4, r5, SDRAM_SIZE_REG(0,2)) - and r6, r6,#SCSR_SIZE_MASK - and r4, r4,#SCSR_SIZE_MASK - cmp r6, r4 - bge defualt_order - - /* Bank 2 is biger then bank 0 */ - ldr r6,=0 - MV_REG_WRITE_ASM (r6, r5, SDRAM_BASE_ADDR_REG(0,2)) - - /* Open win 2 */ - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,2)) - orr r6, r6,#1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,2)) - - ldr sp,=0 - bl _mvDramIfConfig -#ifdef MV78XX0 - /* Init ECC on CS 2 */ - ldr r0, =2 - bl _mvDramIfEccMemInit -#endif - mov PC, r11 /* r11 is saved link register */ - -defualt_order: - - /* Open win 0 */ - MV_REG_READ_ASM (r6, r5, SDRAM_SIZE_REG(0,0)) - orr r6, r6,#1 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(0,0)) - - ldr sp,=0 - bl _mvDramIfConfig -#ifdef MV78XX0 - /* Init ECC on CS 0 */ - ldr r0, =0 - bl _mvDramIfEccMemInit -#endif -exit_ddrAutoConfig: - mov PC, r11 /* r11 is saved link register */ - - -/***************************************************************************************/ -/* r4 holds I2C EEPROM address - * r7 holds I2C EEPROM offset parameter for i2cRead and its --> returned value - * r8 holds SDRAM various configuration registers value. - * r13 holds Link register - */ -/**************************/ -_getDensity: - mov r13, LR /* Save link register */ - - /* Read SPD rank size from DIMM0 */ - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - - cmp r6, #0 - beq 1f - - /* Read SPD rank size from DIMM1 */ - mov r4, #MV_BOARD_DIMM1_I2C_ADDR /* reading from DIMM1 */ - -1: - mov r7, #NUM_OF_ROWS_OFFSET /* offset 3 */ - bl _i2cRead - mov r8, r7 /* r8 save number of rows */ - - mov r7, #NUM_OF_COLS_OFFSET /* offset 4 */ - bl _i2cRead - add r8, r8, r7 /* r8 = number of rows + number of col */ - - mov r7, #0x1 - mov r8, r7, LSL r8 /* r8 = (1 << r8) */ - - mov r7, #SDRAM_WIDTH_OFFSET /* offset 13 */ - bl _i2cRead - mul r8, r7, r8 - - mov r7, #NUM_OF_BANKS_OFFSET /* offset 17 */ - bl _i2cRead - mul r7, r8, r7 - - mov PC, r13 - -/**************************/ -_get_width: - mov r13, LR /* Save link register */ - - /* Read SPD rank size from DIMM0 */ - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - - cmp r6, #0 - beq 1f - - /* Read SPD rank size from DIMM1 */ - mov r4, #MV_BOARD_DIMM1_I2C_ADDR /* reading from DIMM1 */ - -1: - /* Get SDRAM width (SPD offset 13) */ - mov r7, #SDRAM_WIDTH_OFFSET - bl _i2cRead /* result in r7 */ - - mov PC, r13 - -/**************************/ -_get_CAL: - mov r13, LR /* Save link register */ - - /* Set maximum CL supported by DIMM */ - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - mov r7, #SUPPORTED_CL_OFFSET /* offset 18 */ - bl _i2cRead - - mov PC, r13 - -/**************************/ -/* R8 - sdram configuration register. - * Return value in flag if no-registered then Z-flag is set - */ -_is_Registered: - mov r13, LR /* Save link register */ -#if defined(MV645xx) - /* Get registered/non registered info from DIMM */ - tst r8, #SDRAM_DTYPE_DDR2 - bne regDdr2 - -regDdr1: - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - mov r7, #SDRAM_MODULES_ATTR_OFFSET - bl _i2cRead /* result in r7 */ - - tst r7, #0x2 - b exit -#endif -regDdr2: - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - mov r7, #DIMM_TYPE_INFO_OFFSET - bl _i2cRead /* result in r7 */ - - tst r7, #0x11 /* DIMM type = regular RDIMM (0x01) */ - /* or Mini-RDIMM (0x10) */ -exit: - mov PC, r13 - - -/**************************/ -/* Return value in flag if no-Ecc then Z-flag is set */ -_is_Ecc: - mov r13, LR /* Save link register */ - - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - mov r7, #DIMM_CONFIG_TYPE - bl _i2cRead /* result in r7 */ - - tst r7, #0x2 /* bit 1 -> Data ECC */ - mov PC, r13 - -/**************************/ -/* Return value in flag if no second DIMM then Z-flag is set */ -_is_Second_Dimm_Exist: - mov r13, LR /* Save link register */ - - mov r4, #MV_BOARD_DIMM1_I2C_ADDR /* reading from DIMM0 */ - mov r7, #DIMM_TYPE_OFFSET - bl _i2cRead /* result in r7 */ - - tst r7, #0x8 /* bit3 is '1' -> DDR 2 */ - mov PC, r13 - -/******************************************************************************* -* _mvDramIfGetDimmSizeFromSpd - read bank 0 dram's size -* -* DESCRIPTION: -* The function will read the bank 0 dram size(SPD version 1.0 and above ) -* -* INPUT: -* r6 - dram bank number. -* -* OUTPUT: -* none -*/ -_mvDramIfGetDimmSizeFromSpd: - - mov r13, LR /* Save link register */ - - /* Read SPD rank size from DIMM0 */ - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - - cmp r6, #0 - beq 1f - - /* Read SPD rank size from DIMM1 */ - mov r4, #MV_BOARD_DIMM1_I2C_ADDR /* reading from DIMM1 */ - -1: - mov r7, #RANK_SIZE_OFFSET /* offset 31 */ - bl _i2cRead - -pass_read: - ldr r8, =(0x7 << SCSR_SIZE_OFFS) - cmp r7, #DRAM_RANK_DENSITY_128M - beq endDimmSize - - ldr r8, =(0xf << SCSR_SIZE_OFFS) - cmp r7, #DRAM_RANK_DENSITY_256M - beq endDimmSize - - ldr r8, =(0x1f << SCSR_SIZE_OFFS) - cmp r7, #DRAM_RANK_DENSITY_512M - beq endDimmSize - - ldr r8, =(0x3f << SCSR_SIZE_OFFS) - cmp r7, #DRAM_RANK_DENSITY_1G - beq endDimmSize - - ldr r8, =(0x7f << SCSR_SIZE_OFFS) /* DRAM_RANK_DENSITY_2G */ -endDimmSize: - mov PC, r13 -#endif |