1*f1df9364SStefan Roese /* 2*f1df9364SStefan Roese * Copyright (C) Marvell International Ltd. and its affiliates 3*f1df9364SStefan Roese * 4*f1df9364SStefan Roese * SPDX-License-Identifier: GPL-2.0 5*f1df9364SStefan Roese */ 6*f1df9364SStefan Roese 7*f1df9364SStefan Roese #ifndef _DDR3_TRAINING_IP_DEF_H 8*f1df9364SStefan Roese #define _DDR3_TRAINING_IP_DEF_H 9*f1df9364SStefan Roese 10*f1df9364SStefan Roese #include "silicon_if.h" 11*f1df9364SStefan Roese 12*f1df9364SStefan Roese #define PATTERN_55 0x55555555 13*f1df9364SStefan Roese #define PATTERN_AA 0xaaaaaaaa 14*f1df9364SStefan Roese #define PATTERN_80 0x80808080 15*f1df9364SStefan Roese #define PATTERN_20 0x20202020 16*f1df9364SStefan Roese #define PATTERN_01 0x01010101 17*f1df9364SStefan Roese #define PATTERN_FF 0xffffffff 18*f1df9364SStefan Roese #define PATTERN_00 0x00000000 19*f1df9364SStefan Roese 20*f1df9364SStefan Roese /* 16bit bus width patterns */ 21*f1df9364SStefan Roese #define PATTERN_55AA 0x5555aaaa 22*f1df9364SStefan Roese #define PATTERN_00FF 0x0000ffff 23*f1df9364SStefan Roese #define PATTERN_0080 0x00008080 24*f1df9364SStefan Roese 25*f1df9364SStefan Roese #define INVALID_VALUE 0xffffffff 26*f1df9364SStefan Roese #define MAX_NUM_OF_DUNITS 32 27*f1df9364SStefan Roese /* 28*f1df9364SStefan Roese * length *2 = length in words of pattern, first low address, 29*f1df9364SStefan Roese * second high address 30*f1df9364SStefan Roese */ 31*f1df9364SStefan Roese #define TEST_PATTERN_LENGTH 4 32*f1df9364SStefan Roese #define KILLER_PATTERN_DQ_NUMBER 8 33*f1df9364SStefan Roese #define SSO_DQ_NUMBER 4 34*f1df9364SStefan Roese #define PATTERN_MAXIMUM_LENGTH 64 35*f1df9364SStefan Roese #define ADLL_TX_LENGTH 64 36*f1df9364SStefan Roese #define ADLL_RX_LENGTH 32 37*f1df9364SStefan Roese 38*f1df9364SStefan Roese #define PARAM_NOT_CARE 0 39*f1df9364SStefan Roese 40*f1df9364SStefan Roese #define READ_LEVELING_PHY_OFFSET 2 41*f1df9364SStefan Roese #define WRITE_LEVELING_PHY_OFFSET 0 42*f1df9364SStefan Roese 43*f1df9364SStefan Roese #define MASK_ALL_BITS 0xffffffff 44*f1df9364SStefan Roese 45*f1df9364SStefan Roese #define CS_BIT_MASK 0xf 46*f1df9364SStefan Roese 47*f1df9364SStefan Roese /* DFX access */ 48*f1df9364SStefan Roese #define BROADCAST_ID 28 49*f1df9364SStefan Roese #define MULTICAST_ID 29 50*f1df9364SStefan Roese 51*f1df9364SStefan Roese #define XSB_BASE_ADDR 0x00004000 52*f1df9364SStefan Roese #define XSB_CTRL_0_REG 0x00000000 53*f1df9364SStefan Roese #define XSB_CTRL_1_REG 0x00000004 54*f1df9364SStefan Roese #define XSB_CMD_REG 0x00000008 55*f1df9364SStefan Roese #define XSB_ADDRESS_REG 0x0000000c 56*f1df9364SStefan Roese #define XSB_DATA_REG 0x00000010 57*f1df9364SStefan Roese #define PIPE_ENABLE_ADDR 0x000f8000 58*f1df9364SStefan Roese #define ENABLE_DDR_TUNING_ADDR 0x000f829c 59*f1df9364SStefan Roese 60*f1df9364SStefan Roese #define CLIENT_BASE_ADDR 0x00002000 61*f1df9364SStefan Roese #define CLIENT_CTRL_REG 0x00000000 62*f1df9364SStefan Roese 63*f1df9364SStefan Roese #define TARGET_INT 0x1801 64*f1df9364SStefan Roese #define TARGET_EXT 0x180e 65*f1df9364SStefan Roese #define BYTE_EN 0 66*f1df9364SStefan Roese #define CMD_READ 0 67*f1df9364SStefan Roese #define CMD_WRITE 1 68*f1df9364SStefan Roese 69*f1df9364SStefan Roese #define INTERNAL_ACCESS_PORT 1 70*f1df9364SStefan Roese #define EXECUTING 1 71*f1df9364SStefan Roese #define ACCESS_EXT 1 72*f1df9364SStefan Roese #define CS2_EXIST_BIT 2 73*f1df9364SStefan Roese #define TRAINING_ID 0xf 74*f1df9364SStefan Roese #define EXT_TRAINING_ID 1 75*f1df9364SStefan Roese #define EXT_MODE 0x4 76*f1df9364SStefan Roese 77*f1df9364SStefan Roese #define GET_RESULT_STATE(res) (res) 78*f1df9364SStefan Roese #define SET_RESULT_STATE(res, state) (res = state) 79*f1df9364SStefan Roese 80*f1df9364SStefan Roese #define _1K 0x00000400 81*f1df9364SStefan Roese #define _4K 0x00001000 82*f1df9364SStefan Roese #define _8K 0x00002000 83*f1df9364SStefan Roese #define _16K 0x00004000 84*f1df9364SStefan Roese #define _32K 0x00008000 85*f1df9364SStefan Roese #define _64K 0x00010000 86*f1df9364SStefan Roese #define _128K 0x00020000 87*f1df9364SStefan Roese #define _256K 0x00040000 88*f1df9364SStefan Roese #define _512K 0x00080000 89*f1df9364SStefan Roese 90*f1df9364SStefan Roese #define _1M 0x00100000 91*f1df9364SStefan Roese #define _2M 0x00200000 92*f1df9364SStefan Roese #define _4M 0x00400000 93*f1df9364SStefan Roese #define _8M 0x00800000 94*f1df9364SStefan Roese #define _16M 0x01000000 95*f1df9364SStefan Roese #define _32M 0x02000000 96*f1df9364SStefan Roese #define _64M 0x04000000 97*f1df9364SStefan Roese #define _128M 0x08000000 98*f1df9364SStefan Roese #define _256M 0x10000000 99*f1df9364SStefan Roese #define _512M 0x20000000 100*f1df9364SStefan Roese 101*f1df9364SStefan Roese #define _1G 0x40000000 102*f1df9364SStefan Roese #define _2G 0x80000000 103*f1df9364SStefan Roese 104*f1df9364SStefan Roese #define ADDR_SIZE_512MB 0x04000000 105*f1df9364SStefan Roese #define ADDR_SIZE_1GB 0x08000000 106*f1df9364SStefan Roese #define ADDR_SIZE_2GB 0x10000000 107*f1df9364SStefan Roese #define ADDR_SIZE_4GB 0x20000000 108*f1df9364SStefan Roese #define ADDR_SIZE_8GB 0x40000000 109*f1df9364SStefan Roese 110*f1df9364SStefan Roese enum hws_edge_compare { 111*f1df9364SStefan Roese EDGE_PF, 112*f1df9364SStefan Roese EDGE_FP, 113*f1df9364SStefan Roese EDGE_FPF, 114*f1df9364SStefan Roese EDGE_PFP 115*f1df9364SStefan Roese }; 116*f1df9364SStefan Roese 117*f1df9364SStefan Roese enum hws_control_element { 118*f1df9364SStefan Roese HWS_CONTROL_ELEMENT_ADLL, /* per bit 1 edge */ 119*f1df9364SStefan Roese HWS_CONTROL_ELEMENT_DQ_SKEW, 120*f1df9364SStefan Roese HWS_CONTROL_ELEMENT_DQS_SKEW 121*f1df9364SStefan Roese }; 122*f1df9364SStefan Roese 123*f1df9364SStefan Roese enum hws_search_dir { 124*f1df9364SStefan Roese HWS_LOW2HIGH, 125*f1df9364SStefan Roese HWS_HIGH2LOW, 126*f1df9364SStefan Roese HWS_SEARCH_DIR_LIMIT 127*f1df9364SStefan Roese }; 128*f1df9364SStefan Roese 129*f1df9364SStefan Roese enum hws_page_size { 130*f1df9364SStefan Roese PAGE_SIZE_1K, 131*f1df9364SStefan Roese PAGE_SIZE_2K 132*f1df9364SStefan Roese }; 133*f1df9364SStefan Roese 134*f1df9364SStefan Roese enum hws_operation { 135*f1df9364SStefan Roese OPERATION_READ = 0, 136*f1df9364SStefan Roese OPERATION_WRITE = 1 137*f1df9364SStefan Roese }; 138*f1df9364SStefan Roese 139*f1df9364SStefan Roese enum hws_training_ip_stat { 140*f1df9364SStefan Roese HWS_TRAINING_IP_STATUS_FAIL, 141*f1df9364SStefan Roese HWS_TRAINING_IP_STATUS_SUCCESS, 142*f1df9364SStefan Roese HWS_TRAINING_IP_STATUS_TIMEOUT 143*f1df9364SStefan Roese }; 144*f1df9364SStefan Roese 145*f1df9364SStefan Roese enum hws_ddr_cs { 146*f1df9364SStefan Roese CS_SINGLE, 147*f1df9364SStefan Roese CS_NON_SINGLE 148*f1df9364SStefan Roese }; 149*f1df9364SStefan Roese 150*f1df9364SStefan Roese enum hws_ddr_phy { 151*f1df9364SStefan Roese DDR_PHY_DATA = 0, 152*f1df9364SStefan Roese DDR_PHY_CONTROL = 1 153*f1df9364SStefan Roese }; 154*f1df9364SStefan Roese 155*f1df9364SStefan Roese enum hws_dir { 156*f1df9364SStefan Roese OPER_WRITE, 157*f1df9364SStefan Roese OPER_READ, 158*f1df9364SStefan Roese OPER_WRITE_AND_READ 159*f1df9364SStefan Roese }; 160*f1df9364SStefan Roese 161*f1df9364SStefan Roese enum hws_wl_supp { 162*f1df9364SStefan Roese PHASE_SHIFT, 163*f1df9364SStefan Roese CLOCK_SHIFT, 164*f1df9364SStefan Roese ALIGN_SHIFT 165*f1df9364SStefan Roese }; 166*f1df9364SStefan Roese 167*f1df9364SStefan Roese struct reg_data { 168*f1df9364SStefan Roese u32 reg_addr; 169*f1df9364SStefan Roese u32 reg_data; 170*f1df9364SStefan Roese u32 reg_mask; 171*f1df9364SStefan Roese }; 172*f1df9364SStefan Roese 173*f1df9364SStefan Roese #endif /* _DDR3_TRAINING_IP_DEF_H */ 174