1/* 2 * DDR SDRAM initialization - alter with care 3 * This file is intended to be included from other assembler files 4 * 5 * Note: This file may not modify r8 or r9 because they are used to 6 * carry information from the decompresser to the kernel 7 * 8 * Copyright (C) 2005-2007 Axis Communications AB 9 * 10 * Authors: Mikael Starvik <starvik@axis.com> 11 */ 12 13/* Just to be certain the config file is included, we include it here 14 * explicitely instead of depending on it being included in the file that 15 * uses this code. 16 */ 17 18#include <hwregs/asm/reg_map_asm.h> 19#include <hwregs/asm/ddr2_defs_asm.h> 20 21 ;; WARNING! The registers r8 and r9 are used as parameters carrying 22 ;; information from the decompressor (if the kernel was compressed). 23 ;; They should not be used in the code below. 24 25 ;; Refer to ddr2 MDS for initialization sequence 26 27 ; Start clock 28 move.d REG_ADDR(ddr2, regi_ddr2_ctrl, rw_phy_cfg), $r0 29 move.d REG_STATE(ddr2, rw_phy_cfg, en, yes), $r1 30 move.d $r1, [$r0] 31 32 ; Reset phy and start calibration 33 move.d REG_ADDR(ddr2, regi_ddr2_ctrl, rw_phy_ctrl), $r0 34 move.d REG_STATE(ddr2, rw_phy_ctrl, rst, yes) | \ 35 REG_STATE(ddr2, rw_phy_ctrl, cal_rst, yes), $r1 36 move.d $r1, [$r0] 37 move.d REG_STATE(ddr2, rw_phy_ctrl, cal_start, yes), $r1 38 move.d $r1, [$r0] 39 40 ; 2. Wait 200us 41 move.d 10000, $r2 421: bne 1b 43 subq 1, $r2 44 45 ; Issue commands 46 move.d REG_ADDR(ddr2, regi_ddr2_ctrl, rw_ctrl), $r0 47 move.d sdram_commands_start, $r2 48command_loop: 49 movu.b [$r2+], $r1 50 movu.w [$r2+], $r3 51do_cmd: 52 lslq 16, $r1 53 or.d $r3, $r1 54 move.d $r1, [$r0] 55 cmp.d sdram_commands_end, $r2 56 blo command_loop 57 nop 58 59 ; Set timing 60 move.d REG_ADDR(ddr2, regi_ddr2_ctrl, rw_timing), $r0 61 move.d CONFIG_ETRAX_DDR2_TIMING, $r1 62 move.d $r1, [$r0] 63 64 ; Set latency 65 move.d REG_ADDR(ddr2, regi_ddr2_ctrl, rw_latency), $r0 66 move.d 0x13, $r1 67 move.d $r1, [$r0] 68 69 ; Set configuration 70 move.d REG_ADDR(ddr2, regi_ddr2_ctrl, rw_cfg), $r0 71 move.d CONFIG_ETRAX_DDR2_CONFIG, $r1 72 move.d $r1, [$r0] 73 74 ba after_sdram_commands 75 nop 76 77sdram_commands_start: 78 .byte regk_ddr2_deselect 79 .word 0 80 .byte regk_ddr2_pre 81 .word regk_ddr2_pre_all 82 .byte regk_ddr2_emrs2 83 .word 0 84 .byte regk_ddr2_emrs3 85 .word 0 86 .byte regk_ddr2_emrs 87 .word regk_ddr2_dll_en 88 .byte regk_ddr2_mrs 89 .word regk_ddr2_dll_rst 90 .byte regk_ddr2_pre 91 .word regk_ddr2_pre_all 92 .byte regk_ddr2_ref 93 .word 0 94 .byte regk_ddr2_ref 95 .word 0 96 .byte regk_ddr2_mrs 97 .word CONFIG_ETRAX_DDR2_MRS & 0xffff 98 .byte regk_ddr2_emrs 99 .word regk_ddr2_ocd_default | regk_ddr2_dll_en 100 .byte regk_ddr2_emrs 101 .word regk_ddr2_ocd_exit | regk_ddr2_dll_en | (CONFIG_ETRAX_DDR2_MRS >> 16) 102sdram_commands_end: 103 .align 1 104after_sdram_commands: 105