diff options
Diffstat (limited to 'target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr1_2/mvDramIfBasicInit.S')
-rw-r--r-- | target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr1_2/mvDramIfBasicInit.S | 988 |
1 files changed, 0 insertions, 988 deletions
diff --git a/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr1_2/mvDramIfBasicInit.S b/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr1_2/mvDramIfBasicInit.S deleted file mode 100644 index f2a9365..0000000 --- a/target/linux/generic/files/crypto/ocf/kirkwood/mvHal/mv_hal/ddr1_2/mvDramIfBasicInit.S +++ /dev/null @@ -1,988 +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 MV_ASMLANGUAGE -#include "mvSysHwConfig.h" -#include "mvOsAsm.h" -#include "mvBoardEnvSpec.h" -#include "mvCpuIfRegs.h" -#include "mvDramIfConfig.h" -#include "mvDramIfRegs.h" -#include "pex/mvPexRegs.h" -#include "pci/mvPciRegs.h" -#include "mvCtrlEnvSpec.h" -#include "mvCtrlEnvAsm.h" -#include "cpu/mvCpuArm.h" -#include "mvCommon.h" - -/* defines */ - -#if !defined(MV_INC_BOARD_DDIM) -.globl dramBoot1 -dramBoot1: - .word 0 - -/****************************************************************************** -* -* -* -* -*******************************************************************************/ -#if defined(DB_PRPMC) || defined(DB_PEX_PCI) || defined(DB_MNG) - -/* PEX_PCI and PRPMC boards 256 MB*/ -#define STATIC_SDRAM0_BANK0_SIZE 0x0fff0001 -#define STATIC_SDRAM_CONFIG 0x03248400 -#define STATIC_SDRAM_MODE 0x62 -#define STATIC_DUNIT_CTRL_LOW 0x4041000 -#define STATIC_SDRAM_ADDR_CTRL 0x00000020 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11602220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x0000030F -#define STATIC_SDRAM_ODT_CTRL_LOW 0x0 -#define STATIC_SDRAM_ODT_CTRL_HI 0x0 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0 -#define STATIC_SDRAM_EXT_MODE 0x0 - -#elif defined(DB_FPGA) - -/* FPGA DC boards 256 MB*/ -#define STATIC_SDRAM0_BANK0_SIZE 0x0fff0001 -#define STATIC_SDRAM_CONFIG 0x03208400 /* 32bit */ -#define STATIC_SDRAM_MODE 0x22 -#define STATIC_DUNIT_CTRL_LOW 0x03041000 -#define STATIC_SDRAM_ADDR_CTRL 0x00000020 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11112220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x0000000D -#define STATIC_SDRAM_ODT_CTRL_LOW 0x0 -#define STATIC_SDRAM_ODT_CTRL_HI 0x0 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0 -#define STATIC_SDRAM_EXT_MODE 0x1 - -#elif defined(RD_88F6183GP) || defined(DB_CUSTOMER) - -/* Customer 1 DDR2 2 devices 512Mbit by 16 bit */ -#define STATIC_SDRAM0_BANK0_SIZE 0x07ff0001 -#define STATIC_SDRAM_CONFIG 0x03158400 -#define STATIC_SDRAM_MODE 0x452 -#define STATIC_DUNIT_CTRL_LOW 0x06041000 -#define STATIC_SDRAM_ADDR_CTRL 0x00000020 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11912220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000502 -#define STATIC_SDRAM_ODT_CTRL_LOW 0x00010000 -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000002 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x00000601 -#define STATIC_SDRAM_EXT_MODE 0x00000440 - - -#elif defined(RD_88F6183AP) - -/* DDR2 1 devices 512Mbit by 16 bit */ -#define STATIC_SDRAM0_BANK0_SIZE 0x03ff0001 -#define STATIC_SDRAM_CONFIG 0x1f154400 -#define STATIC_SDRAM_MODE 0x432 -#define STATIC_DUNIT_CTRL_LOW 0x04041000 -#define STATIC_SDRAM_ADDR_CTRL 0x00000020 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11912220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000502 -#define STATIC_SDRAM_ODT_CTRL_LOW 0x00010000 -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000002 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x00000601 -#define STATIC_SDRAM_EXT_MODE 0x00000440 - -/* 6082L MARVELL DIMM */ -#elif defined(DB_88F6082LBP) -#define STATIC_SDRAM0_BANK0_SIZE 0x07ff0001 -#define STATIC_SDRAM_CONFIG 0x7f158400 -#define STATIC_SDRAM_MODE 0x432 -#define STATIC_DUNIT_CTRL_LOW 0x04041040 -#define STATIC_SDRAM_ADDR_CTRL 0x00000020 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11612220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x00000501 -#define STATIC_SDRAM_ODT_CTRL_LOW 0x00010000 -#define STATIC_SDRAM_ODT_CTRL_HI 0x00000002 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x00000a01 -#define STATIC_SDRAM_EXT_MODE 0x00000440 - -#elif defined(RD_88W8660_AP82S) - -/* Shark RD */ - -#if defined(MV_DRAM_32M) -#define STATIC_SDRAM0_BANK0_SIZE 0x01ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x00000010 -#elif defined(MV_DRAM_16M) - -#define STATIC_SDRAM0_BANK0_SIZE 0x00ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x00000000 - -#else -#error "NO DDR size selected" -#endif - -#define STATIC_SDRAM_CONFIG 0x03144400 -#define STATIC_SDRAM_MODE 0x62 -#define STATIC_DUNIT_CTRL_LOW 0x4041000 - -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11602220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x0000040b -#define STATIC_SDRAM_ODT_CTRL_LOW 0x0 -#define STATIC_SDRAM_ODT_CTRL_HI 0x0 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0 -#define STATIC_SDRAM_EXT_MODE 0x0 - -#elif defined(RD_88W8660) - -/* Shark RD */ -#define STATIC_SDRAM0_BANK0_SIZE 0x03ff0001 -#define STATIC_SDRAM_CONFIG 0x03144400 -#define STATIC_SDRAM_MODE 0x62 -#define STATIC_DUNIT_CTRL_LOW 0x4041000 -#define STATIC_SDRAM_ADDR_CTRL 0x00000010 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11602220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x0000040b -#define STATIC_SDRAM_ODT_CTRL_LOW 0x0 -#define STATIC_SDRAM_ODT_CTRL_HI 0x0 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0 -#define STATIC_SDRAM_EXT_MODE 0x0 - -#else /* NAS */ - - -#if defined(RD_88F5182) - -#if defined(MV_88F5082) -#define STATIC_SDRAM0_BANK0_SIZE 0x3ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x20 -#else -#define STATIC_SDRAM0_BANK0_SIZE 0x7ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x20 -#endif - -#elif defined(RD_88F5182_3) - -#if defined(MV_88F5082) -#define STATIC_SDRAM0_BANK0_SIZE 0x3ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x20 -#else -#define STATIC_SDRAM0_BANK0_SIZE 0x7ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x20 -#endif - -#else - -#define STATIC_SDRAM0_BANK0_SIZE 0x1ff0001 -#define STATIC_SDRAM_ADDR_CTRL 0x0 - -#endif - -#if defined(MV_88F5082) -#define STATIC_SDRAM_CONFIG 0x3144400 -#else -#define STATIC_SDRAM_CONFIG 0x3148400 -#endif -#define STATIC_SDRAM_MODE 0x62 -#define STATIC_DUNIT_CTRL_LOW 0x4041000 -#define STATIC_SDRAM_TIME_CTRL_LOW 0x11602220 -#define STATIC_SDRAM_TIME_CTRL_HI 0x40c -#define STATIC_SDRAM_ODT_CTRL_LOW 0x0 -#define STATIC_SDRAM_ODT_CTRL_HI 0x0 -#define STATIC_SDRAM_DUNIT_ODT_CTRL 0x0 -#define STATIC_SDRAM_EXT_MODE 0x0 - -#endif - - .globl _mvDramIfStaticInit -_mvDramIfStaticInit: - - mov r11, LR /* Save link register */ - mov r10, r2 - - /* If we boot from NAND jump to DRAM sddress */ - - 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, 0x1504) - MV_REG_WRITE_ASM(r6, r5, 0x150c) - MV_REG_WRITE_ASM(r6, r5, 0x1514) - MV_REG_WRITE_ASM(r6, r5, 0x151c) - - /* 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) - - mov sp, #0 - bl _mvDramIfConfig -1: - mov r2, r10 - mov PC, r11 /* r11 is saved link register */ - -#else /* #if !defined(MV_INC_BOARD_DDIM) */ - -.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 NUM_OF_ROWS_OFFSET 3 -#define NUM_OF_COLS_OFFSET 4 -#define NUM_OF_RANKS 5 -#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 DRAM_DEV_DENSITY_128M 0x080 -#define DRAM_DEV_DENSITY_256M 0x100 -#define DRAM_DEV_DENSITY_512M 0x200 - .globl _mvDramIfBasicInit - .extern _i2cInit - -_mvDramIfBasicInit: - - mov r11, LR /* Save link register */ - - mov r5, #1 - ldr r8, =dramBoot1 - str r5, [r8] /* We started executing from DRAM */ - - /* If we boot from NAND jump to DRAM sddress */ - ldr r8, dramBoot1 - cmp r8, #0 - movne pc, r11 - - - - bl _i2cInit /* Initialize TWSI master */ - - /* Get default SDRAM Config values */ - MV_REG_READ_ASM (r8, r5, SDRAM_CONFIG_REG) - bic r8, r8, #SDRAM_DCFG_MASK - - - /* Read device ID */ - MV_CTRL_MODEL_GET_ASM(r4, r5); - - /* Return if OrionN */ - ldr r5, =MV_5180_DEV_ID - cmp r4, r5 - beq cat_through_end - - /* Return if Orion1 */ - ldr r5, =MV_5181_DEV_ID - cmp r4, r5 - beq cat_through_end - - /* Return if Nas */ - ldr r5, =MV_5182_DEV_ID - cmp r4, r5 - beq cat_through_end - - /* Return if Shark */ - ldr r5, =MV_8660_DEV_ID - cmp r4, r5 - beq cat_through_end - - /* goto calcConfigReg if bigger than Orion2*/ - ldr r5, =MV_5281_DEV_ID - cmp r4, r5 - bne cat_through - -cat_through: - /* set cat through - for better performance - in orion2 b0 and higher*/ - orr r8, r8, #SDRAM_CATTHR_EN - -cat_through_end: - - - /* Get registered/non registered info from DIMM */ - bl _is_Registered - beq nonRegistered - -setRegistered: - orr r8, r8, #SDRAM_REGISTERED /* Set registered bit(17) */ - -nonRegistered: - /* Get SDRAM width */ - bl _get_width - - orr r6, r8, #SDRAM_DCFG_X16_DEV /* x16 devices */ - cmp r7, #16 - beq setConfigReg - - orr r6, r8, #SDRAM_DCFG_X8_DEV /* x8 devices */ - cmp r7, #8 - beq setConfigReg - - /* This is an error. return */ - b exit_ddrAutoConfig - -setConfigReg: - mov r8, r6 - ldr r6, =SDRAM_CONFIG_DV - orr r8, r8, r6 /* Add default settings */ - mov r6, r8 /* Do not swap r8 content */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_CONFIG_REG) - - /* 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 */ - - /* Check the DDR version */ - tst r8, #SDRAM_DTYPE_DDR2 - bne casDdr2 - -casDdr1: - ldr r7, =3 /* stBurstDel field value */ - ldr r8, =0x52 /* Assuming MAX CL = 1.5 */ - cmp r6, #1 /* If CL = 1.5 break */ - beq setModeReg - - ldr r7, =3 /* stBurstDel field value */ - ldr r8, =0x22 /* Assuming MAX CL = 2 */ - cmp r6, #2 /* If CL = 2 break */ - beq setModeReg - - ldr r7, =4 /* stBurstDel field value */ - ldr r8, =0x62 /* Assuming MAX CL = 2.5 */ - cmp r6, #3 /* If CL = 2.5 break */ - beq setModeReg - - ldr r7, =4 /* stBurstDel field value */ - ldr r8, =0x32 /* Assuming MAX CL = 3 */ - cmp r6, #4 /* If CL = 3 break */ - beq setModeReg - - ldr r7, =5 /* stBurstDel field value */ - ldr r8, =0x42 /* Assuming MAX CL = 4 */ - cmp r6, #6 /* If CL = 4 break */ - b setModeReg - - b exit_ddrAutoConfig /* This is an error !! */ - -casDdr2: - ldr r7, =4 /* stBurstDel field value */ - ldr r8, =0x32 /* Assuming MAX CL = 3 */ - cmp r6, #3 /* If CL = 3 break */ - beq casDdr2Cont - - ldr r7, =5 /* stBurstDel field value */ - ldr r8, =0x42 /* Assuming MAX CL = 4 */ - cmp r6, #4 /* If CL = 4 break */ - beq casDdr2Cont - - /* CL 5 currently unsupported. We use CL 4 instead */ - ldr r7, =5 /* stBurstDel field value */ - ldr r8, =0x42 /* Assuming MAX CL = 5 */ - cmp r6, #5 /* If CL = 5 break */ - beq casDdr2Cont - - b exit_ddrAutoConfig /* This is an error !! */ -casDdr2Cont: - /* Write recovery for auto-precharge relevant only in DDR2 */ - orr r8, r8, #0x400 /* Default value */ - -setModeReg: - /* The CPU must not attempt to change the SDRAM Mode register setting */ - /* prior to DRAM controller completion of the DRAM initialization */ - /* sequence. To guarantee this restriction, it is recommended that */ - /* the CPU sets the SDRAM Operation register to NOP command, performs */ - /* read polling until the register is back in Normal operation value, */ - /* and then sets SDRAM Mode register to it's new value. */ - - /* write 'nop' to SDRAM operation */ - mov r6, #0x5 /* 'NOP' command */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_OPERATION_REG) - - /* poll SDRAM operation. Make sure its back to normal operation */ -_sdramOpPoll1: - ldr r6, [r5] - cmp r6, #0 /* '0' = Normal SDRAM Mode */ - bne _sdramOpPoll1 - - /* Now its safe to write new value to SDRAM Mode register */ - MV_REG_WRITE_ASM (r8, r5, SDRAM_MODE_REG) - - /* Make the Dunit write the DRAM its new mode */ - mov r6, #0x3 /* Mode Register Set command */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_OPERATION_REG) - - /* poll SDRAM operation. Make sure its back to normal operation */ -_sdramOpPoll2: - ldr r6, [r5] - cmp r6, #0 /* '0' = Normal SDRAM Mode */ - bne _sdramOpPoll2 - - /* Set Dunit control register according to max CL detected */ - /* If we use registered DIMM, add 1 to stBurstDel */ - MV_REG_READ_ASM (r6, r5, SDRAM_CONFIG_REG) - tst r6, #SDRAM_REGISTERED - beq setDunitReg - add r7, r7, #1 - -setDunitReg: - ldr r6, =SDRAM_DUNIT_CTRL_LOW_DV - orr r6, r6, r7, LSL #SDRAM_ST_BURST_DEL_OFFS - MV_REG_WRITE_ASM (r6, r5, SDRAM_DUNIT_CTRL_REG) - - - /* DIMM density configuration*/ - /* Density = (1 << (rowNum + colNum)) * dramWidth * dramBankNum */ -Density: - bl _getDensity - mov r8, r7 - mov r8, r8, LSR #20 /* Move density 20 bits to the right */ - /* For example 0x10000000 --> 0x1000 */ - - mov r6, #0x00 - cmp r8, #DRAM_DEV_DENSITY_128M - beq densCont - - mov r6, #0x10 - cmp r8, #DRAM_DEV_DENSITY_256M - beq densCont - - mov r6, #0x20 - cmp r8, #DRAM_DEV_DENSITY_512M - beq densCont - - /* This is an error. return */ - b exit_ddrAutoConfig - -densCont: - MV_REG_WRITE_ASM (r6, r5, SDRAM_ADDR_CTRL_REG) - - /* Config DDR2 registers (Extended mode, ODTs and pad calibration) */ - MV_REG_READ_ASM (r8, r5, SDRAM_CONFIG_REG) - tst r8, #SDRAM_DTYPE_DDR2 - beq _extModeODTEnd - - - /* Set DDR Extended Mode register for working with CS[0] */ - /* write 'nop' to SDRAM operation */ - mov r6, #0x5 /* 'NOP' command */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_OPERATION_REG) - - /* poll SDRAM operation. Make sure its back to normal operation */ -_sdramOpPoll3: - ldr r6, [r5] - cmp r6, #0 /* '0' = Normal SDRAM Mode */ - bne _sdramOpPoll3 - - /* Now its safe to write new value to SDRAM Extended Mode register */ - ldr r6, =DDR_SDRAM_EXT_MODE_CS0_DV - MV_REG_WRITE_ASM (r6, r5, SDRAM_EXTENDED_MODE_REG) - - /* Make the Dunit write the DRAM its new extended mode */ - mov r6, #0x4 /* Extended Mode Register Set command */ - MV_REG_WRITE_ASM (r6, r5, SDRAM_OPERATION_REG) - - /* poll SDRAM operation. Make sure its back to normal operation */ -_sdramOpPoll4: - ldr r6, [r5] - cmp r6, #0 /* '0' = Normal SDRAM Mode */ - bne _sdramOpPoll4 - - /* ODT configuration is done for single bank CS[0] only */ - /* Config DDR2 On Die Termination (ODT) registers */ - ldr r6, =DDR2_ODT_CTRL_LOW_CS0_DV - MV_REG_WRITE_ASM (r6, r5, DDR2_SDRAM_ODT_CTRL_LOW_REG) - - ldr r6, =DDR2_ODT_CTRL_HIGH_CS0_DV - MV_REG_WRITE_ASM (r6, r5, DDR2_SDRAM_ODT_CTRL_HIGH_REG) - - ldr r6, =DDR2_DUNIT_ODT_CTRL_CS0_DV - MV_REG_WRITE_ASM (r6, r5, DDR2_DUNIT_ODT_CONTROL_REG) - - - /* we will check what device we are running and perform - Initialization according to device value */ - -_extModeODTEnd: - - /* Implement Guideline (GL# MEM-2) P_CAL Automatic Calibration */ - /* Does Not Work for Address/Control and Data Pads. */ - /* Relevant for: 88F5181-A1/B0 and 88F5281-A0 */ - - /* Read device ID */ - MV_CTRL_MODEL_GET_ASM(r6, r5); - /* Read device revision */ - MV_CTRL_REV_GET_ASM(r8, r5); - - /* Continue if OrionN */ - ldr r5, =MV_5180_DEV_ID - cmp r6, r5 - bne 1f - b glMem2End -1: - - /* Continue if Orion1 and device revision B1 */ - ldr r5, =MV_5181_DEV_ID - cmp r6, r5 - bne 1f - - cmp r8, #MV_5181_B1_REV - bge glMem2End - b glMem2Start -1: - - /* Orion NAS */ - ldr r5, =MV_5182_DEV_ID - cmp r6, r5 - beq glMem2Start - - /* Orion Shark */ - ldr r5, =MV_8660_DEV_ID - cmp r6, r5 - beq glMem2Start - - b glMem2End - -glMem2Start: - - /* DDR SDRAM Address/Control Pads Calibration */ - MV_REG_READ_ASM (r6, r5, SDRAM_ADDR_CTRL_PADS_CAL_REG) - - /* Set Bit [31] to make the register writable */ - orr r8, r6, #SDRAM_WR_EN - - MV_REG_WRITE_ASM (r8, r5, SDRAM_ADDR_CTRL_PADS_CAL_REG) - - bic r6, r6, #SDRAM_WR_EN /* Make register read-only */ - bic r6, r6, #SDRAM_TUNE_EN /* Disable auto calibration */ - bic r6, r6, #SDRAM_DRVN_MASK /* Clear r5[5:0]<DrvN> */ - bic r6, r6, #SDRAM_DRVP_MASK /* Clear r5[11:6]<DrvP> */ - - /* Get the final N locked value of driving strength [22:17] */ - mov r5, r6 - mov r5, r5, LSL #9 - mov r5, r5, LSR #26 /* r5[5:0]<DrvN> = r6[22:17]<LockN> */ - orr r5, r5, r5, LSL #6 /* r5[11:6]<DrvP> = r5[5:0]<DrvN> */ - - /* Write to both <DrvN> bits [5:0] and <DrvP> bits [11:6] */ - orr r6, r6, r5 - - MV_REG_WRITE_ASM (r6, r5, SDRAM_ADDR_CTRL_PADS_CAL_REG) - - - /* DDR SDRAM Data Pads Calibration */ - MV_REG_READ_ASM (r6, r5, SDRAM_DATA_PADS_CAL_REG) - - /* Set Bit [31] to make the register writable */ - orr r8, r6, #SDRAM_WR_EN - - MV_REG_WRITE_ASM (r8, r5, SDRAM_DATA_PADS_CAL_REG) - - bic r6, r6, #SDRAM_WR_EN /* Make register read-only */ - bic r6, r6, #SDRAM_TUNE_EN /* Disable auto calibration */ - bic r6, r6, #SDRAM_DRVN_MASK /* Clear r5[5:0]<DrvN> */ - bic r6, r6, #SDRAM_DRVP_MASK /* Clear r5[11:6]<DrvP> */ - - /* Get the final N locked value of driving strength [22:17] */ - mov r5, r6 - mov r5, r5, LSL #9 - mov r5, r5, LSR #26 - orr r5, r5, r5, LSL #6 /* r5[5:0] = r6[22:17]<LockN> */ - - /* Write to both <DrvN> bits [5:0] and <DrvP> bits [11:6] */ - orr r6, r6, r5 - - MV_REG_WRITE_ASM (r6, r5, SDRAM_DATA_PADS_CAL_REG) - -glMem2End: - /* Implement Guideline (GL# MEM-3) Drive Strength Value */ - /* Relevant for: 88F5181-A1/B0/B1 and 88F5281-A0/B0 */ - - /* Get SDRAM Config value */ - MV_REG_READ_ASM (r8, r5, SDRAM_CONFIG_REG) - - /* Get DIMM type */ - tst r8, #SDRAM_DTYPE_DDR2 - beq ddr1StrengthVal - -ddr2StrengthVal: - ldr r4, =DDR2_ADDR_CTRL_PAD_STRENGTH_TYPICAL_DV - ldr r8, =DDR2_DATA_PAD_STRENGTH_TYPICAL_DV - b setDrvStrength -ddr1StrengthVal: - ldr r4, =DDR1_ADDR_CTRL_PAD_STRENGTH_TYPICAL_DV - ldr r8, =DDR1_DATA_PAD_STRENGTH_TYPICAL_DV - -setDrvStrength: - /* DDR SDRAM Address/Control Pads Calibration */ - MV_REG_READ_ASM (r6, r5, SDRAM_ADDR_CTRL_PADS_CAL_REG) - - orr r6, r6, #SDRAM_WR_EN /* Make register writeable */ - - MV_REG_WRITE_ASM (r6, r5, SDRAM_ADDR_CTRL_PADS_CAL_REG) - HTOLL(r6,r5) - - bic r6, r6, #SDRAM_WR_EN /* Make register read-only */ - bic r6, r6, #SDRAM_PRE_DRIVER_STRENGTH_MASK - orr r6, r4, r6 /* Set default value for DDR */ - - MV_REG_WRITE_ASM (r6, r5, SDRAM_ADDR_CTRL_PADS_CAL_REG) - - - /* DDR SDRAM Data Pads Calibration */ - MV_REG_READ_ASM (r6, r5, SDRAM_DATA_PADS_CAL_REG) - - orr r6, r6, #SDRAM_WR_EN /* Make register writeable */ - - MV_REG_WRITE_ASM (r6, r5, SDRAM_DATA_PADS_CAL_REG) - HTOLL(r6,r5) - - bic r6, r6, #SDRAM_WR_EN /* Make register read-only */ - bic r6, r6, #SDRAM_PRE_DRIVER_STRENGTH_MASK - orr r6, r8, r6 /* Set default value for DDR */ - - MV_REG_WRITE_ASM (r6, r5, SDRAM_DATA_PADS_CAL_REG) - - - /* Implement Guideline (GL# MEM-4) DQS Reference Delay Tuning */ - /* Relevant for: 88F5181-A1/B0/B1 and 88F5281-A0/B0 */ - /* Get the "sample on reset" register for the DDR frequancy */ - -#if defined(MV_RUN_FROM_FLASH) - /* Calc the absolute address of the _cpuARMDDRCLK[] in the boot flash */ - ldr r7, = _cpuARMDDRCLK - ldr r4, =_start - ldr r4, [r4] - sub r7, r7, r4 - ldr r4, = Lrom_start_of_data - ldr r4, [r4] - add r7, r4, r7 -#else - /* Calc the absolute address of the _cpuARMDDRCLK[] in the boot flash */ - ldr r7, = _cpuARMDDRCLK - ldr r4, =_start - sub r7, r7, r4 - add r7, r7, #CFG_MONITOR_BASE -#endif - /* Get the "sample on reset" register for the DDR frequancy */ - MV_REG_READ_ASM (r4, r5, MPP_SAMPLE_AT_RESET) - ldr r5, =MSAR_ARMDDRCLCK_MASK - and r5, r4, r5 -#if 0 /* YOTAM TO BE FIX */ - mov r5, r5, LSR #MSAR_ARMDDRCLCK_OFFS -#endif - - /* Read device ID */ - MV_CTRL_MODEL_GET_ASM(r6, r8); - - /* Continue if TC90 */ - ldr r8, =MV_1281_DEV_ID - cmp r6, r6 - beq armClkMsb - - /* Continue if Orion2 */ - ldr r8, =MV_5281_DEV_ID - cmp r6, r8 -#if 0 /* YOTAM TO BE FIX */ - bne 1f -#endif - -armClkMsb: -#if 0 /* YOTAM TO BE FIX */ - tst r4, #MSAR_ARMDDRCLCK_H_MASK - beq 1f - orr r5, r5, #BIT4 -1: - ldr r4, =MV_CPU_ARM_CLK_ELM_SIZE - mul r5, r4, r5 - add r7, r7, r5 - add r7, r7, #MV_CPU_ARM_CLK_DDR_OFF - ldr r5, [r7] -#endif - - /* Get SDRAM Config value */ - MV_REG_READ_ASM (r8, r4, SDRAM_CONFIG_REG) - - /* Get DIMM type */ - tst r8, #SDRAM_DTYPE_DDR2 - beq ddr1FtdllVal - -ddr2FtdllVal: - ldr r4, =FTDLL_DDR2_250MHZ - ldr r7, =_250MHz - cmp r5, r7 - beq setFtdllReg - ldr r4, =FTDLL_DDR2_200MHZ - ldr r7, =_200MHz - cmp r5, r7 - beq setFtdllReg - ldr r4, =FTDLL_DDR2_166MHZ - ldr r7, =_166MHz - cmp r5, r7 - beq setFtdllReg - ldr r4, =FTDLL_DDR2_133MHZ - b setFtdllReg - -ddr1FtdllVal: - ldr r4, =FTDLL_DDR1_200MHZ - ldr r7, =_200MHz - cmp r5, r7 - beq setFtdllReg - ldr r4, =FTDLL_DDR1_166MHZ - ldr r7, =_166MHz - cmp r5, r7 - beq setFtdllReg - ldr r4, =FTDLL_DDR1_133MHZ - ldr r7, =_133MHz - cmp r5, r7 - beq setFtdllReg - ldr r4, =0 - -setFtdllReg: - -#if !defined(MV_88W8660) && !defined(MV_88F6183) && !defined(MV_88F6183L) - MV_REG_READ_ASM (r8, r5, SDRAM_FTDLL_CONFIG_REG) - orr r8, r8, r4 - MV_REG_WRITE_ASM (r8, r5, SDRAM_FTDLL_CONFIG_REG) - bic r8, r8, #1 - MV_REG_WRITE_ASM (r8, r5, SDRAM_FTDLL_CONFIG_REG) -#endif /* !defined(MV_88W8660) && !defined(MV_88F6183) && !defined(MV_88F6183L)*/ - - -setTimingReg: - /* Set default Timing parameters */ - MV_REG_READ_ASM (r8, r5, SDRAM_CONFIG_REG) - tst r8, #SDRAM_DTYPE_DDR2 - bne ddr2TimeParam - -ddr1TimeParam: - ldr r6, =DDR1_TIMING_LOW_DV - MV_REG_WRITE_ASM (r6, r5, SDRAM_TIMING_CTRL_LOW_REG) - ldr r6, =DDR1_TIMING_HIGH_DV - MV_REG_WRITE_ASM (r6, r5, SDRAM_TIMING_CTRL_HIGH_REG) - b timeParamDone - -ddr2TimeParam: - ldr r6, =DDR2_TIMING_LOW_DV - MV_REG_WRITE_ASM (r6, r5, SDRAM_TIMING_CTRL_LOW_REG) - ldr r6, =DDR2_TIMING_HIGH_DV - MV_REG_WRITE_ASM (r6, r5, SDRAM_TIMING_CTRL_HIGH_REG) - -timeParamDone: - /* Open CS[0] window to requested size and enable it. Disable other */ - /* windows */ - ldr r6, =SCBAR_BASE_MASK - sub r3, r3, #1 - and r3, r3, r6 - orr r3, r3, #1 /* Enable bank */ - MV_REG_WRITE_ASM (r3, r5, SDRAM_SIZE_REG(0)) - ldr r6, =0 - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(1)) - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(2)) - MV_REG_WRITE_ASM (r6, r5, SDRAM_SIZE_REG(3)) - -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 */ - - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - mov r7, #NUM_OF_ROWS_OFFSET /* offset 3 */ - bl _i2cRead - mov r8, r7 /* r8 save number of rows */ - - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - 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 r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - mov r7, #SDRAM_WIDTH_OFFSET /* offset 13 */ - bl _i2cRead - mul r8, r7, r8 - - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - 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 */ - - /* Get SDRAM width (SPD offset 13) */ - mov r4, #MV_BOARD_DIMM0_I2C_ADDR /* reading from DIMM0 */ - 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 */ - - /* 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 -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 - - -#endif |