1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * This file is provided under a dual BSD/GPLv2 license. When using or 3*4882a593Smuzhiyun * redistributing this file, you may do so under either license. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * GPL LICENSE SUMMARY 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 10*4882a593Smuzhiyun * it under the terms of version 2 of the GNU General Public License as 11*4882a593Smuzhiyun * published by the Free Software Foundation. 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but 14*4882a593Smuzhiyun * WITHOUT ANY WARRANTY; without even the implied warranty of 15*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16*4882a593Smuzhiyun * General Public License for more details. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * You should have received a copy of the GNU General Public License 19*4882a593Smuzhiyun * along with this program; if not, write to the Free Software 20*4882a593Smuzhiyun * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21*4882a593Smuzhiyun * The full GNU General Public License is included in this distribution 22*4882a593Smuzhiyun * in the file called LICENSE.GPL. 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * BSD LICENSE 25*4882a593Smuzhiyun * 26*4882a593Smuzhiyun * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27*4882a593Smuzhiyun * All rights reserved. 28*4882a593Smuzhiyun * 29*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 30*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 31*4882a593Smuzhiyun * are met: 32*4882a593Smuzhiyun * 33*4882a593Smuzhiyun * * Redistributions of source code must retain the above copyright 34*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer. 35*4882a593Smuzhiyun * * Redistributions in binary form must reproduce the above copyright 36*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 37*4882a593Smuzhiyun * the documentation and/or other materials provided with the 38*4882a593Smuzhiyun * distribution. 39*4882a593Smuzhiyun * * Neither the name of Intel Corporation nor the names of its 40*4882a593Smuzhiyun * contributors may be used to endorse or promote products derived 41*4882a593Smuzhiyun * from this software without specific prior written permission. 42*4882a593Smuzhiyun * 43*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 44*4882a593Smuzhiyun * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 45*4882a593Smuzhiyun * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 46*4882a593Smuzhiyun * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 47*4882a593Smuzhiyun * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 48*4882a593Smuzhiyun * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 49*4882a593Smuzhiyun * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 50*4882a593Smuzhiyun * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 51*4882a593Smuzhiyun * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 52*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 53*4882a593Smuzhiyun * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #ifndef _SCU_REGISTERS_H_ 57*4882a593Smuzhiyun #define _SCU_REGISTERS_H_ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /** 60*4882a593Smuzhiyun * This file contains the constants and structures for the SCU memory mapped 61*4882a593Smuzhiyun * registers. 62*4882a593Smuzhiyun * 63*4882a593Smuzhiyun * 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_ID_MASK (0xC0000000) 67*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_ID_SHIFT (30) 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_FUNCTION_MASK (0x0FF00000) 70*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_FUNCTION_SHIFT (20) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_IPPTMODE_MASK (0x0001F800) 73*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_IPPTMODE_SHIFT (12) 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_LPVIE_MASK (0x00000F00) 76*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_LPVIE_SHIFT (8) 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_STATUS_MASK (0x000000FF) 79*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_STATUS_SHIFT (0) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_ID_INVALID (0 << SCU_VIIT_ENTRY_ID_SHIFT) 82*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_ID_VIIT (1 << SCU_VIIT_ENTRY_ID_SHIFT) 83*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_ID_IIT (2 << SCU_VIIT_ENTRY_ID_SHIFT) 84*4882a593Smuzhiyun #define SCU_VIIT_ENTRY_ID_VIRT_EXP (3 << SCU_VIIT_ENTRY_ID_SHIFT) 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define SCU_VIIT_IPPT_SSP_INITIATOR (0x01 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 87*4882a593Smuzhiyun #define SCU_VIIT_IPPT_SMP_INITIATOR (0x02 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 88*4882a593Smuzhiyun #define SCU_VIIT_IPPT_STP_INITIATOR (0x04 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 89*4882a593Smuzhiyun #define SCU_VIIT_IPPT_INITIATOR \ 90*4882a593Smuzhiyun (\ 91*4882a593Smuzhiyun SCU_VIIT_IPPT_SSP_INITIATOR \ 92*4882a593Smuzhiyun | SCU_VIIT_IPPT_SMP_INITIATOR \ 93*4882a593Smuzhiyun | SCU_VIIT_IPPT_STP_INITIATOR \ 94*4882a593Smuzhiyun ) 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #define SCU_VIIT_STATUS_RNC_VALID (0x01 << SCU_VIIT_ENTRY_STATUS_SHIFT) 97*4882a593Smuzhiyun #define SCU_VIIT_STATUS_ADDRESS_VALID (0x02 << SCU_VIIT_ENTRY_STATUS_SHIFT) 98*4882a593Smuzhiyun #define SCU_VIIT_STATUS_RNI_VALID (0x04 << SCU_VIIT_ENTRY_STATUS_SHIFT) 99*4882a593Smuzhiyun #define SCU_VIIT_STATUS_ALL_VALID \ 100*4882a593Smuzhiyun (\ 101*4882a593Smuzhiyun SCU_VIIT_STATUS_RNC_VALID \ 102*4882a593Smuzhiyun | SCU_VIIT_STATUS_ADDRESS_VALID \ 103*4882a593Smuzhiyun | SCU_VIIT_STATUS_RNI_VALID \ 104*4882a593Smuzhiyun ) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun #define SCU_VIIT_IPPT_SMP_TARGET (0x10 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun /** 109*4882a593Smuzhiyun * struct scu_viit_entry - This is the SCU Virtual Initiator Table Entry 110*4882a593Smuzhiyun * 111*4882a593Smuzhiyun * 112*4882a593Smuzhiyun */ 113*4882a593Smuzhiyun struct scu_viit_entry { 114*4882a593Smuzhiyun /** 115*4882a593Smuzhiyun * This must be encoded as to the type of initiator that is being constructed 116*4882a593Smuzhiyun * for this port. 117*4882a593Smuzhiyun */ 118*4882a593Smuzhiyun u32 status; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /** 121*4882a593Smuzhiyun * Virtual initiator high SAS Address 122*4882a593Smuzhiyun */ 123*4882a593Smuzhiyun u32 initiator_sas_address_hi; 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /** 126*4882a593Smuzhiyun * Virtual initiator low SAS Address 127*4882a593Smuzhiyun */ 128*4882a593Smuzhiyun u32 initiator_sas_address_lo; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /** 131*4882a593Smuzhiyun * This must be 0 132*4882a593Smuzhiyun */ 133*4882a593Smuzhiyun u32 reserved; 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun }; 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun /* IIT Status Defines */ 139*4882a593Smuzhiyun #define SCU_IIT_ENTRY_ID_MASK (0xC0000000) 140*4882a593Smuzhiyun #define SCU_IIT_ENTRY_ID_SHIFT (30) 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun #define SCU_IIT_ENTRY_STATUS_UPDATE_MASK (0x20000000) 143*4882a593Smuzhiyun #define SCU_IIT_ENTRY_STATUS_UPDATE_SHIFT (29) 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun #define SCU_IIT_ENTRY_LPI_MASK (0x00000F00) 146*4882a593Smuzhiyun #define SCU_IIT_ENTRY_LPI_SHIFT (8) 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun #define SCU_IIT_ENTRY_STATUS_MASK (0x000000FF) 149*4882a593Smuzhiyun #define SCU_IIT_ENTRY_STATUS_SHIFT (0) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* IIT Remote Initiator Defines */ 152*4882a593Smuzhiyun #define SCU_IIT_ENTRY_REMOTE_TAG_MASK (0x0000FFFF) 153*4882a593Smuzhiyun #define SCU_IIT_ENTRY_REMOTE_TAG_SHIFT (0) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun #define SCU_IIT_ENTRY_REMOTE_RNC_MASK (0x0FFF0000) 156*4882a593Smuzhiyun #define SCU_IIT_ENTRY_REMOTE_RNC_SHIFT (16) 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #define SCU_IIT_ENTRY_ID_INVALID (0 << SCU_IIT_ENTRY_ID_SHIFT) 159*4882a593Smuzhiyun #define SCU_IIT_ENTRY_ID_VIIT (1 << SCU_IIT_ENTRY_ID_SHIFT) 160*4882a593Smuzhiyun #define SCU_IIT_ENTRY_ID_IIT (2 << SCU_IIT_ENTRY_ID_SHIFT) 161*4882a593Smuzhiyun #define SCU_IIT_ENTRY_ID_VIRT_EXP (3 << SCU_IIT_ENTRY_ID_SHIFT) 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun /** 164*4882a593Smuzhiyun * struct scu_iit_entry - This will be implemented later when we support 165*4882a593Smuzhiyun * virtual functions 166*4882a593Smuzhiyun * 167*4882a593Smuzhiyun * 168*4882a593Smuzhiyun */ 169*4882a593Smuzhiyun struct scu_iit_entry { 170*4882a593Smuzhiyun u32 status; 171*4882a593Smuzhiyun u32 remote_initiator_sas_address_hi; 172*4882a593Smuzhiyun u32 remote_initiator_sas_address_lo; 173*4882a593Smuzhiyun u32 remote_initiator; 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun }; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* Generate a value for an SCU register */ 178*4882a593Smuzhiyun #define SCU_GEN_VALUE(name, value) \ 179*4882a593Smuzhiyun (((value) << name ## _SHIFT) & (name ## _MASK)) 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun /* 182*4882a593Smuzhiyun * Generate a bit value for an SCU register 183*4882a593Smuzhiyun * Make sure that the register MASK is just a single bit */ 184*4882a593Smuzhiyun #define SCU_GEN_BIT(name) \ 185*4882a593Smuzhiyun SCU_GEN_VALUE(name, ((u32)1)) 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun #define SCU_SET_BIT(name, reg_value) \ 188*4882a593Smuzhiyun ((reg_value) | SCU_GEN_BIT(name)) 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun #define SCU_CLEAR_BIT(name, reg_value) \ 191*4882a593Smuzhiyun ((reg_value)$ ~(SCU_GEN_BIT(name))) 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* 194*4882a593Smuzhiyun * ***************************************************************************** 195*4882a593Smuzhiyun * Unions for bitfield definitions of SCU Registers 196*4882a593Smuzhiyun * SMU Post Context Port 197*4882a593Smuzhiyun * ***************************************************************************** */ 198*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_CONTEXT_INDEX_SHIFT (0) 199*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_CONTEXT_INDEX_MASK (0x00000FFF) 200*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_LOGICAL_PORT_INDEX_SHIFT (12) 201*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_LOGICAL_PORT_INDEX_MASK (0x0000F000) 202*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_PROTOCOL_ENGINE_SHIFT (16) 203*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_PROTOCOL_ENGINE_MASK (0x00030000) 204*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_COMMAND_CONTEXT_SHIFT (18) 205*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_COMMAND_CONTEXT_MASK (0x00FC0000) 206*4882a593Smuzhiyun #define SMU_POST_CONTEXT_PORT_RESERVED_MASK (0xFF000000) 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define SMU_PCP_GEN_VAL(name, value) \ 209*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_POST_CONTEXT_PORT_ ## name, value) 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun /* ***************************************************************************** */ 212*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_COMPLETION_SHIFT (31) 213*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_COMPLETION_MASK (0x80000000) 214*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_QUEUE_SUSPEND_SHIFT (1) 215*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_QUEUE_SUSPEND_MASK (0x00000002) 216*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_QUEUE_ERROR_SHIFT (0) 217*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_QUEUE_ERROR_MASK (0x00000001) 218*4882a593Smuzhiyun #define SMU_INTERRUPT_STATUS_RESERVED_MASK (0x7FFFFFFC) 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun #define SMU_ISR_GEN_BIT(name) \ 221*4882a593Smuzhiyun SCU_GEN_BIT(SMU_INTERRUPT_STATUS_ ## name) 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun #define SMU_ISR_QUEUE_ERROR SMU_ISR_GEN_BIT(QUEUE_ERROR) 224*4882a593Smuzhiyun #define SMU_ISR_QUEUE_SUSPEND SMU_ISR_GEN_BIT(QUEUE_SUSPEND) 225*4882a593Smuzhiyun #define SMU_ISR_COMPLETION SMU_ISR_GEN_BIT(COMPLETION) 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun /* ***************************************************************************** */ 228*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_COMPLETION_SHIFT (31) 229*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_COMPLETION_MASK (0x80000000) 230*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_QUEUE_SUSPEND_SHIFT (1) 231*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_QUEUE_SUSPEND_MASK (0x00000002) 232*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_QUEUE_ERROR_SHIFT (0) 233*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_QUEUE_ERROR_MASK (0x00000001) 234*4882a593Smuzhiyun #define SMU_INTERRUPT_MASK_RESERVED_MASK (0x7FFFFFFC) 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define SMU_IMR_GEN_BIT(name) \ 237*4882a593Smuzhiyun SCU_GEN_BIT(SMU_INTERRUPT_MASK_ ## name) 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun #define SMU_IMR_QUEUE_ERROR SMU_IMR_GEN_BIT(QUEUE_ERROR) 240*4882a593Smuzhiyun #define SMU_IMR_QUEUE_SUSPEND SMU_IMR_GEN_BIT(QUEUE_SUSPEND) 241*4882a593Smuzhiyun #define SMU_IMR_COMPLETION SMU_IMR_GEN_BIT(COMPLETION) 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun /* ***************************************************************************** */ 244*4882a593Smuzhiyun #define SMU_INTERRUPT_COALESCING_CONTROL_TIMER_SHIFT (0) 245*4882a593Smuzhiyun #define SMU_INTERRUPT_COALESCING_CONTROL_TIMER_MASK (0x0000001F) 246*4882a593Smuzhiyun #define SMU_INTERRUPT_COALESCING_CONTROL_NUMBER_SHIFT (8) 247*4882a593Smuzhiyun #define SMU_INTERRUPT_COALESCING_CONTROL_NUMBER_MASK (0x0000FF00) 248*4882a593Smuzhiyun #define SMU_INTERRUPT_COALESCING_CONTROL_RESERVED_MASK (0xFFFF00E0) 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun #define SMU_ICC_GEN_VAL(name, value) \ 251*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_INTERRUPT_COALESCING_CONTROL_ ## name, value) 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun /* ***************************************************************************** */ 254*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_START_SHIFT (0) 255*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_START_MASK (0x00000FFF) 256*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_ENDING_SHIFT (16) 257*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_ENDING_MASK (0x0FFF0000) 258*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_ENABLE_SHIFT (31) 259*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_ENABLE_MASK (0x80000000) 260*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_RANGE_RESERVED_MASK (0x7000F000) 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun #define SMU_TCR_GEN_VAL(name, value) \ 263*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_TASK_CONTEXT_RANGE_ ## name, value) 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun #define SMU_TCR_GEN_BIT(name, value) \ 266*4882a593Smuzhiyun SCU_GEN_BIT(SMU_TASK_CONTEXT_RANGE_ ## name) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun /* ***************************************************************************** */ 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_POINTER_SHIFT (0) 271*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_POINTER_MASK (0x00003FFF) 272*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_CYCLE_BIT_SHIFT (15) 273*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_CYCLE_BIT_MASK (0x00008000) 274*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_EVENT_POINTER_SHIFT (16) 275*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_EVENT_POINTER_MASK (0x03FF0000) 276*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_EVENT_CYCLE_BIT_SHIFT (26) 277*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_EVENT_CYCLE_BIT_MASK (0x04000000) 278*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_PUT_RESERVED_MASK (0xF8004000) 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun #define SMU_CQPR_GEN_VAL(name, value) \ 281*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_COMPLETION_QUEUE_PUT_ ## name, value) 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun #define SMU_CQPR_GEN_BIT(name) \ 284*4882a593Smuzhiyun SCU_GEN_BIT(SMU_COMPLETION_QUEUE_PUT_ ## name) 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun /* ***************************************************************************** */ 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_POINTER_SHIFT (0) 289*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_POINTER_MASK (0x00003FFF) 290*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_CYCLE_BIT_SHIFT (15) 291*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_CYCLE_BIT_MASK (0x00008000) 292*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_EVENT_POINTER_SHIFT (16) 293*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_EVENT_POINTER_MASK (0x03FF0000) 294*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_EVENT_CYCLE_BIT_SHIFT (26) 295*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_EVENT_CYCLE_BIT_MASK (0x04000000) 296*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_ENABLE_SHIFT (30) 297*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_ENABLE_MASK (0x40000000) 298*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_EVENT_ENABLE_SHIFT (31) 299*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_EVENT_ENABLE_MASK (0x80000000) 300*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_GET_RESERVED_MASK (0x38004000) 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun #define SMU_CQGR_GEN_VAL(name, value) \ 303*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_COMPLETION_QUEUE_GET_ ## name, value) 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun #define SMU_CQGR_GEN_BIT(name) \ 306*4882a593Smuzhiyun SCU_GEN_BIT(SMU_COMPLETION_QUEUE_GET_ ## name) 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun #define SMU_CQGR_CYCLE_BIT \ 309*4882a593Smuzhiyun SMU_CQGR_GEN_BIT(CYCLE_BIT) 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun #define SMU_CQGR_EVENT_CYCLE_BIT \ 312*4882a593Smuzhiyun SMU_CQGR_GEN_BIT(EVENT_CYCLE_BIT) 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun #define SMU_CQGR_GET_POINTER_SET(value) \ 315*4882a593Smuzhiyun SMU_CQGR_GEN_VAL(POINTER, value) 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun /* ***************************************************************************** */ 319*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_CONTROL_QUEUE_LIMIT_SHIFT (0) 320*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_CONTROL_QUEUE_LIMIT_MASK (0x00003FFF) 321*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_CONTROL_EVENT_LIMIT_SHIFT (16) 322*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_CONTROL_EVENT_LIMIT_MASK (0x03FF0000) 323*4882a593Smuzhiyun #define SMU_COMPLETION_QUEUE_CONTROL_RESERVED_MASK (0xFC00C000) 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun #define SMU_CQC_GEN_VAL(name, value) \ 326*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_COMPLETION_QUEUE_CONTROL_ ## name, value) 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun #define SMU_CQC_QUEUE_LIMIT_SET(value) \ 329*4882a593Smuzhiyun SMU_CQC_GEN_VAL(QUEUE_LIMIT, value) 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun #define SMU_CQC_EVENT_LIMIT_SET(value) \ 332*4882a593Smuzhiyun SMU_CQC_GEN_VAL(EVENT_LIMIT, value) 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun /* ***************************************************************************** */ 336*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_SHIFT (0) 337*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_MASK (0x00000FFF) 338*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_SHIFT (12) 339*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_MASK (0x00007000) 340*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_SHIFT (15) 341*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_MASK (0x07FF8000) 342*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_PEG_SHIFT (27) 343*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_PEG_MASK (0x08000000) 344*4882a593Smuzhiyun #define SMU_DEVICE_CONTEXT_CAPACITY_RESERVED_MASK (0xF0000000) 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun #define SMU_DCC_GEN_VAL(name, value) \ 347*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_DEVICE_CONTEXT_CAPACITY_ ## name, value) 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun #define SMU_DCC_GET_MAX_PEG(value) \ 350*4882a593Smuzhiyun (\ 351*4882a593Smuzhiyun ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_PEG_MASK) \ 352*4882a593Smuzhiyun >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_SHIFT \ 353*4882a593Smuzhiyun ) 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun #define SMU_DCC_GET_MAX_LP(value) \ 356*4882a593Smuzhiyun (\ 357*4882a593Smuzhiyun ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_MASK) \ 358*4882a593Smuzhiyun >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_SHIFT \ 359*4882a593Smuzhiyun ) 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun #define SMU_DCC_GET_MAX_TC(value) \ 362*4882a593Smuzhiyun (\ 363*4882a593Smuzhiyun ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_MASK) \ 364*4882a593Smuzhiyun >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_SHIFT \ 365*4882a593Smuzhiyun ) 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun #define SMU_DCC_GET_MAX_RNC(value) \ 368*4882a593Smuzhiyun (\ 369*4882a593Smuzhiyun ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_MASK) \ 370*4882a593Smuzhiyun >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_SHIFT \ 371*4882a593Smuzhiyun ) 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /* ***************************************************************************** */ 374*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_IDLE_ENABLE_SHIFT (0) 375*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_IDLE_ENABLE_MASK (0x00000001) 376*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_XCLK_ENABLE_SHIFT (1) 377*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_XCLK_ENABLE_MASK (0x00000002) 378*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_TXCLK_ENABLE_SHIFT (2) 379*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_TXCLK_ENABLE_MASK (0x00000004) 380*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_REGCLK_ENABLE_SHIFT (3) 381*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_REGCLK_ENABLE_MASK (0x00000008) 382*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_IDLE_TIMEOUT_SHIFT (16) 383*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_IDLE_TIMEOUT_MASK (0x000F0000) 384*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_FORCE_IDLE_SHIFT (31) 385*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_FORCE_IDLE_MASK (0x80000000) 386*4882a593Smuzhiyun #define SMU_CLOCK_GATING_CONTROL_RESERVED_MASK (0x7FF0FFF0) 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun #define SMU_CGUCR_GEN_VAL(name, value) \ 389*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_CLOCK_GATING_CONTROL_##name, value) 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun #define SMU_CGUCR_GEN_BIT(name) \ 392*4882a593Smuzhiyun SCU_GEN_BIT(SMU_CLOCK_GATING_CONTROL_##name) 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* -------------------------------------------------------------------------- */ 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_TASK_CONTEXT_RANGE_ENABLE_SHIFT (0) 397*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_TASK_CONTEXT_RANGE_ENABLE_MASK (0x00000001) 398*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_COMPLETION_BYTE_SWAP_ENABLE_SHIFT (1) 399*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_COMPLETION_BYTE_SWAP_ENABLE_MASK (0x00000002) 400*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_CONTEXT_RAM_INIT_COMPLETED_SHIFT (16) 401*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_CONTEXT_RAM_INIT_COMPLETED_MASK (0x00010000) 402*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_SCHEDULER_RAM_INIT_COMPLETED_SHIFT (17) 403*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_SCHEDULER_RAM_INIT_COMPLETED_MASK (0x00020000) 404*4882a593Smuzhiyun #define SMU_CONTROL_STATUS_RESERVED_MASK (0xFFFCFFFC) 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun #define SMU_SMUCSR_GEN_BIT(name) \ 407*4882a593Smuzhiyun SCU_GEN_BIT(SMU_CONTROL_STATUS_ ## name) 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun #define SMU_SMUCSR_SCHEDULER_RAM_INIT_COMPLETED \ 410*4882a593Smuzhiyun (SMU_SMUCSR_GEN_BIT(SCHEDULER_RAM_INIT_COMPLETED)) 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun #define SMU_SMUCSR_CONTEXT_RAM_INIT_COMPLETED \ 413*4882a593Smuzhiyun (SMU_SMUCSR_GEN_BIT(CONTEXT_RAM_INIT_COMPLETED)) 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun #define SCU_RAM_INIT_COMPLETED \ 416*4882a593Smuzhiyun (\ 417*4882a593Smuzhiyun SMU_SMUCSR_CONTEXT_RAM_INIT_COMPLETED \ 418*4882a593Smuzhiyun | SMU_SMUCSR_SCHEDULER_RAM_INIT_COMPLETED \ 419*4882a593Smuzhiyun ) 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /* -------------------------------------------------------------------------- */ 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE0_SHIFT (0) 424*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE0_MASK (0x00000001) 425*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE1_SHIFT (1) 426*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE1_MASK (0x00000002) 427*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE2_SHIFT (2) 428*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE2_MASK (0x00000004) 429*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE3_SHIFT (3) 430*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE3_MASK (0x00000008) 431*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE0_SHIFT (8) 432*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE0_MASK (0x00000100) 433*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE1_SHIFT (9) 434*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE1_MASK (0x00000200) 435*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE2_SHIFT (10) 436*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE2_MASK (0x00000400) 437*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE3_SHIFT (11) 438*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE3_MASK (0x00000800) 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun #define SMU_RESET_PROTOCOL_ENGINE(peg, pe) \ 441*4882a593Smuzhiyun ((1 << (pe)) << ((peg) * 8)) 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun #define SMU_RESET_PEG_PROTOCOL_ENGINES(peg) \ 444*4882a593Smuzhiyun (\ 445*4882a593Smuzhiyun SMU_RESET_PROTOCOL_ENGINE(peg, 0) \ 446*4882a593Smuzhiyun | SMU_RESET_PROTOCOL_ENGINE(peg, 1) \ 447*4882a593Smuzhiyun | SMU_RESET_PROTOCOL_ENGINE(peg, 2) \ 448*4882a593Smuzhiyun | SMU_RESET_PROTOCOL_ENGINE(peg, 3) \ 449*4882a593Smuzhiyun ) 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun #define SMU_RESET_ALL_PROTOCOL_ENGINES() \ 452*4882a593Smuzhiyun (\ 453*4882a593Smuzhiyun SMU_RESET_PEG_PROTOCOL_ENGINES(0) \ 454*4882a593Smuzhiyun | SMU_RESET_PEG_PROTOCOL_ENGINES(1) \ 455*4882a593Smuzhiyun ) 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP0_SHIFT (16) 458*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP0_MASK (0x00010000) 459*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP2_SHIFT (17) 460*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP2_MASK (0x00020000) 461*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP0_SHIFT (18) 462*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP0_MASK (0x00040000) 463*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP2_SHIFT (19) 464*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP2_MASK (0x00080000) 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun #define SMU_RESET_WIDE_PORT_QUEUE(peg, wide_port) \ 467*4882a593Smuzhiyun ((1 << ((wide_port) / 2)) << ((peg) * 2) << 16) 468*4882a593Smuzhiyun 469*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_SHIFT (20) 470*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG0_MASK (0x00100000) 471*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_SHIFT (21) 472*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_PEG1_MASK (0x00200000) 473*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_SCU_SHIFT (22) 474*4882a593Smuzhiyun #define SMU_SOFTRESET_CONTROL_RESET_SCU_MASK (0x00400000) 475*4882a593Smuzhiyun 476*4882a593Smuzhiyun /* 477*4882a593Smuzhiyun * It seems to make sense that if you are going to reset the protocol 478*4882a593Smuzhiyun * engine group that you would also reset all of the protocol engines */ 479*4882a593Smuzhiyun #define SMU_RESET_PROTOCOL_ENGINE_GROUP(peg) \ 480*4882a593Smuzhiyun (\ 481*4882a593Smuzhiyun (1 << ((peg) + 20)) \ 482*4882a593Smuzhiyun | SMU_RESET_WIDE_PORT_QUEUE(peg, 0) \ 483*4882a593Smuzhiyun | SMU_RESET_WIDE_PORT_QUEUE(peg, 1) \ 484*4882a593Smuzhiyun | SMU_RESET_PEG_PROTOCOL_ENGINES(peg) \ 485*4882a593Smuzhiyun ) 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun #define SMU_RESET_ALL_PROTOCOL_ENGINE_GROUPS() \ 488*4882a593Smuzhiyun (\ 489*4882a593Smuzhiyun SMU_RESET_PROTOCOL_ENGINE_GROUP(0) \ 490*4882a593Smuzhiyun | SMU_RESET_PROTOCOL_ENGINE_GROUP(1) \ 491*4882a593Smuzhiyun ) 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun #define SMU_RESET_SCU() (0xFFFFFFFF) 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun /* ***************************************************************************** */ 498*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_STARTING_SHIFT (0) 499*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_STARTING_MASK (0x00000FFF) 500*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_ENDING_SHIFT (16) 501*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_ENDING_MASK (0x0FFF0000) 502*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_RANGE_CHECK_ENABLE_SHIFT (31) 503*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_RANGE_CHECK_ENABLE_MASK (0x80000000) 504*4882a593Smuzhiyun #define SMU_TASK_CONTEXT_ASSIGNMENT_RESERVED_MASK (0x7000F000) 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun #define SMU_TCA_GEN_VAL(name, value) \ 507*4882a593Smuzhiyun SCU_GEN_VALUE(SMU_TASK_CONTEXT_ASSIGNMENT_ ## name, value) 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun #define SMU_TCA_GEN_BIT(name) \ 510*4882a593Smuzhiyun SCU_GEN_BIT(SMU_TASK_CONTEXT_ASSIGNMENT_ ## name) 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun /* ***************************************************************************** */ 513*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_QUEUE_SIZE_SHIFT (0) 514*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_QUEUE_SIZE_MASK (0x00000FFF) 515*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_RESERVED_MASK (0xFFFFF000) 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun #define SCU_UFQC_GEN_VAL(name, value) \ 518*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_ ## name, value) 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun #define SCU_UFQC_QUEUE_SIZE_SET(value) \ 521*4882a593Smuzhiyun SCU_UFQC_GEN_VAL(QUEUE_SIZE, value) 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun /* ***************************************************************************** */ 524*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_POINTER_SHIFT (0) 525*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_POINTER_MASK (0x00000FFF) 526*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_CYCLE_BIT_SHIFT (12) 527*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_CYCLE_BIT_MASK (0x00001000) 528*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_RESERVED_MASK (0xFFFFE000) 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun #define SCU_UFQPP_GEN_VAL(name, value) \ 531*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_ ## name, value) 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun #define SCU_UFQPP_GEN_BIT(name) \ 534*4882a593Smuzhiyun SCU_GEN_BIT(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_ ## name) 535*4882a593Smuzhiyun 536*4882a593Smuzhiyun /* 537*4882a593Smuzhiyun * ***************************************************************************** 538*4882a593Smuzhiyun * * SDMA Registers 539*4882a593Smuzhiyun * ***************************************************************************** */ 540*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_POINTER_SHIFT (0) 541*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_POINTER_MASK (0x00000FFF) 542*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_CYCLE_BIT_SHIFT (12) 543*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_CYCLE_BIT_MASK (12) 544*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ENABLE_BIT_SHIFT (31) 545*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ENABLE_BIT_MASK (0x80000000) 546*4882a593Smuzhiyun #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_RESERVED_MASK (0x7FFFE000) 547*4882a593Smuzhiyun 548*4882a593Smuzhiyun #define SCU_UFQGP_GEN_VAL(name, value) \ 549*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ ## name, value) 550*4882a593Smuzhiyun 551*4882a593Smuzhiyun #define SCU_UFQGP_GEN_BIT(name) \ 552*4882a593Smuzhiyun SCU_GEN_BIT(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ ## name) 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun #define SCU_UFQGP_CYCLE_BIT(value) \ 555*4882a593Smuzhiyun SCU_UFQGP_GEN_BIT(CYCLE_BIT, value) 556*4882a593Smuzhiyun 557*4882a593Smuzhiyun #define SCU_UFQGP_GET_POINTER(value) \ 558*4882a593Smuzhiyun SCU_UFQGP_GEN_VALUE(POINTER, value) 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun #define SCU_UFQGP_ENABLE(value) \ 561*4882a593Smuzhiyun (SCU_UFQGP_GEN_BIT(ENABLE) | value) 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun #define SCU_UFQGP_DISABLE(value) \ 564*4882a593Smuzhiyun (~SCU_UFQGP_GEN_BIT(ENABLE) & value) 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun #define SCU_UFQGP_VALUE(bit, value) \ 567*4882a593Smuzhiyun (SCU_UFQGP_CYCLE_BIT(bit) | SCU_UFQGP_GET_POINTER(value)) 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun /* ***************************************************************************** */ 570*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_SHIFT (0) 571*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_MASK (0x0000FFFF) 572*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_SHIFT (16) 573*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_MASK (0x00010000) 574*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_PCI_NO_SNOOP_ENABLE_SHIFT (17) 575*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_PCI_NO_SNOOP_ENABLE_MASK (0x00020000) 576*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_BYTE_SWAP_SHIFT (18) 577*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_BYTE_SWAP_MASK (0x00040000) 578*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_SGL_FETCH_SHIFT (19) 579*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_SGL_FETCH_MASK (0x00080000) 580*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_RX_HEADER_RAM_WRITE_SHIFT (20) 581*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_RX_HEADER_RAM_WRITE_MASK (0x00100000) 582*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_UF_ADDRESS_FETCH_SHIFT (21) 583*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_UF_ADDRESS_FETCH_MASK (0x00200000) 584*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_SELECT_SHIFT (22) 585*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_SELECT_MASK (0x00400000) 586*4882a593Smuzhiyun #define SCU_PDMA_CONFIGURATION_RESERVED_MASK (0xFF800000) 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun #define SCU_PDMACR_GEN_VALUE(name, value) \ 589*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_PDMA_CONFIGURATION_ ## name, value) 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun #define SCU_PDMACR_GEN_BIT(name) \ 592*4882a593Smuzhiyun SCU_GEN_BIT(SCU_PDMA_CONFIGURATION_ ## name) 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun #define SCU_PDMACR_BE_GEN_BIT(name) \ 595*4882a593Smuzhiyun SCU_PCMACR_GEN_BIT(BIG_ENDIAN_CONTROL_ ## name) 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun /* ***************************************************************************** */ 598*4882a593Smuzhiyun #define SCU_CDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_SHIFT (8) 599*4882a593Smuzhiyun #define SCU_CDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_MASK (0x00000100) 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun #define SCU_CDMACR_GEN_BIT(name) \ 602*4882a593Smuzhiyun SCU_GEN_BIT(SCU_CDMA_CONFIGURATION_ ## name) 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun /* 605*4882a593Smuzhiyun * ***************************************************************************** 606*4882a593Smuzhiyun * * SCU Link Layer Registers 607*4882a593Smuzhiyun * ***************************************************************************** */ 608*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_TIMEOUT_SHIFT (0) 609*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_TIMEOUT_MASK (0x000000FF) 610*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_LOCK_TIME_SHIFT (8) 611*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_LOCK_TIME_MASK (0x0000FF00) 612*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_RATE_CHANGE_DELAY_SHIFT (16) 613*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_RATE_CHANGE_DELAY_MASK (0x00FF0000) 614*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_DWORD_SYNC_TIMEOUT_SHIFT (24) 615*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_DWORD_SYNC_TIMEOUT_MASK (0xFF000000) 616*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NECGOIATION_TIMER_VALUES_REQUIRED_MASK (0x00000000) 617*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NECGOIATION_TIMER_VALUES_DEFAULT_MASK (0x7D00676F) 618*4882a593Smuzhiyun #define SCU_LINK_LAYER_SPEED_NECGOIATION_TIMER_VALUES_RESERVED_MASK (0x00FF0000) 619*4882a593Smuzhiyun 620*4882a593Smuzhiyun #define SCU_SAS_SPDTOV_GEN_VALUE(name, value) \ 621*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_ ## name, value) 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun #define SCU_LINK_STATUS_DWORD_SYNC_AQUIRED_SHIFT (2) 625*4882a593Smuzhiyun #define SCU_LINK_STATUS_DWORD_SYNC_AQUIRED_MASK (0x00000004) 626*4882a593Smuzhiyun #define SCU_LINK_STATUS_TRANSMIT_PORT_SELECTION_DONE_SHIFT (4) 627*4882a593Smuzhiyun #define SCU_LINK_STATUS_TRANSMIT_PORT_SELECTION_DONE_MASK (0x00000010) 628*4882a593Smuzhiyun #define SCU_LINK_STATUS_RECEIVER_CREDIT_EXHAUSTED_SHIFT (5) 629*4882a593Smuzhiyun #define SCU_LINK_STATUS_RECEIVER_CREDIT_EXHAUSTED_MASK (0x00000020) 630*4882a593Smuzhiyun #define SCU_LINK_STATUS_RESERVED_MASK (0xFFFFFFCD) 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun #define SCU_SAS_LLSTA_GEN_BIT(name) \ 633*4882a593Smuzhiyun SCU_GEN_BIT(SCU_LINK_STATUS_ ## name) 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun /* TODO: Where is the SATA_PSELTOV register? */ 637*4882a593Smuzhiyun 638*4882a593Smuzhiyun /* 639*4882a593Smuzhiyun * ***************************************************************************** 640*4882a593Smuzhiyun * * SCU SAS Maximum Arbitration Wait Time Timeout Register 641*4882a593Smuzhiyun * ***************************************************************************** */ 642*4882a593Smuzhiyun #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_VALUE_SHIFT (0) 643*4882a593Smuzhiyun #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_VALUE_MASK (0x00007FFF) 644*4882a593Smuzhiyun #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_SCALE_SHIFT (15) 645*4882a593Smuzhiyun #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_SCALE_MASK (0x00008000) 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun #define SCU_SAS_MAWTTOV_GEN_VALUE(name, value) \ 648*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_ ## name, value) 649*4882a593Smuzhiyun 650*4882a593Smuzhiyun #define SCU_SAS_MAWTTOV_GEN_BIT(name) \ 651*4882a593Smuzhiyun SCU_GEN_BIT(SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_ ## name) 652*4882a593Smuzhiyun 653*4882a593Smuzhiyun 654*4882a593Smuzhiyun /* 655*4882a593Smuzhiyun * TODO: Where is the SAS_LNKTOV register? 656*4882a593Smuzhiyun * TODO: Where is the SAS_PHYTOV register? */ 657*4882a593Smuzhiyun 658*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_TARGET_SHIFT (1) 659*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_TARGET_MASK (0x00000002) 660*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_TARGET_SHIFT (2) 661*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_TARGET_MASK (0x00000004) 662*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_TARGET_SHIFT (3) 663*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_TARGET_MASK (0x00000008) 664*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_DA_SATA_HOST_SHIFT (8) 665*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_DA_SATA_HOST_MASK (0x00000100) 666*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_INITIATOR_SHIFT (9) 667*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_INITIATOR_MASK (0x00000200) 668*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_INITIATOR_SHIFT (10) 669*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_INITIATOR_MASK (0x00000400) 670*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_INITIATOR_SHIFT (11) 671*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_INITIATOR_MASK (0x00000800) 672*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_REASON_CODE_SHIFT (16) 673*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_REASON_CODE_MASK (0x000F0000) 674*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_ADDRESS_FRAME_TYPE_SHIFT (24) 675*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_ADDRESS_FRAME_TYPE_MASK (0x0F000000) 676*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_DEVICE_TYPE_SHIFT (28) 677*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_DEVICE_TYPE_MASK (0x70000000) 678*4882a593Smuzhiyun #define SCU_SAS_TRANSMIT_IDENTIFICATION_RESERVED_MASK (0x80F0F1F1) 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun #define SCU_SAS_TIID_GEN_VAL(name, value) \ 681*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SAS_TRANSMIT_IDENTIFICATION_ ## name, value) 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun #define SCU_SAS_TIID_GEN_BIT(name) \ 684*4882a593Smuzhiyun SCU_GEN_BIT(SCU_SAS_TRANSMIT_IDENTIFICATION_ ## name) 685*4882a593Smuzhiyun 686*4882a593Smuzhiyun /* SAS Identify Frame PHY Identifier Register */ 687*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_BREAK_REPLY_CAPABLE_SHIFT (16) 688*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_BREAK_REPLY_CAPABLE_MASK (0x00010000) 689*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_REQUESTED_INSIDE_ZPSDS_SHIFT (17) 690*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_REQUESTED_INSIDE_ZPSDS_MASK (0x00020000) 691*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_INSIDE_ZPSDS_PERSISTENT_SHIFT (18) 692*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_INSIDE_ZPSDS_PERSISTENT_MASK (0x00040000) 693*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ID_SHIFT (24) 694*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ID_MASK (0xFF000000) 695*4882a593Smuzhiyun #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_RESERVED_MASK (0x00F800FF) 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun #define SCU_SAS_TIPID_GEN_VALUE(name, value) \ 698*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ ## name, value) 699*4882a593Smuzhiyun 700*4882a593Smuzhiyun #define SCU_SAS_TIPID_GEN_BIT(name) \ 701*4882a593Smuzhiyun SCU_GEN_BIT(SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ ## name) 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun 704*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_TX_PARITY_CHECK_SHIFT (4) 705*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_TX_PARITY_CHECK_MASK (0x00000010) 706*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_TX_BAD_CRC_SHIFT (6) 707*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_TX_BAD_CRC_MASK (0x00000040) 708*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_SCRAMBLER_SHIFT (7) 709*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_SCRAMBLER_MASK (0x00000080) 710*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_DESCRAMBLER_SHIFT (8) 711*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_DESCRAMBLER_MASK (0x00000100) 712*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_CREDIT_INSERTION_SHIFT (9) 713*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_CREDIT_INSERTION_MASK (0x00000200) 714*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_SUSPEND_PROTOCOL_ENGINE_SHIFT (11) 715*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_SUSPEND_PROTOCOL_ENGINE_MASK (0x00000800) 716*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_SATA_SPINUP_HOLD_SHIFT (12) 717*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_SATA_SPINUP_HOLD_MASK (0x00001000) 718*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_TRANSMIT_PORT_SELECTION_SIGNAL_SHIFT (13) 719*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_TRANSMIT_PORT_SELECTION_SIGNAL_MASK (0x00002000) 720*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_HARD_RESET_SHIFT (14) 721*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_HARD_RESET_MASK (0x00004000) 722*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_OOB_ENABLE_SHIFT (15) 723*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_OOB_ENABLE_MASK (0x00008000) 724*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_ENABLE_FRAME_TX_INSERT_ALIGN_SHIFT (23) 725*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_ENABLE_FRAME_TX_INSERT_ALIGN_MASK (0x00800000) 726*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_FORWARD_IDENTIFY_FRAME_SHIFT (27) 727*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_FORWARD_IDENTIFY_FRAME_MASK (0x08000000) 728*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_BYTE_TRANSPOSE_STP_FRAME_SHIFT (28) 729*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DISABLE_BYTE_TRANSPOSE_STP_FRAME_MASK (0x10000000) 730*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_OOB_RESET_SHIFT (29) 731*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_OOB_RESET_MASK (0x20000000) 732*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_THREE_IAF_ENABLE_SHIFT (30) 733*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_THREE_IAF_ENABLE_MASK (0x40000000) 734*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_OOB_ALIGN0_ENABLE_SHIFT (31) 735*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_OOB_ALIGN0_ENABLE_MASK (0x80000000) 736*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_REQUIRED_MASK (0x0100000F) 737*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_DEFAULT_MASK (0x4180100F) 738*4882a593Smuzhiyun #define SCU_SAS_PHY_CONFIGURATION_RESERVED_MASK (0x00000000) 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun #define SCU_SAS_PCFG_GEN_BIT(name) \ 741*4882a593Smuzhiyun SCU_GEN_BIT(SCU_SAS_PHY_CONFIGURATION_ ## name) 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_GENERAL_SHIFT (0) 744*4882a593Smuzhiyun #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_GENERAL_MASK (0x000007FF) 745*4882a593Smuzhiyun #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_CONNECTED_SHIFT (16) 746*4882a593Smuzhiyun #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_CONNECTED_MASK (0x00ff0000) 747*4882a593Smuzhiyun 748*4882a593Smuzhiyun #define SCU_ALIGN_INSERTION_FREQUENCY_GEN_VAL(name, value) \ 749*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_##name, value) 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_COUNT_SHIFT (0) 752*4882a593Smuzhiyun #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_COUNT_MASK (0x0003FFFF) 753*4882a593Smuzhiyun #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ENABLE_SHIFT (31) 754*4882a593Smuzhiyun #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ENABLE_MASK (0x80000000) 755*4882a593Smuzhiyun #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_RESERVED_MASK (0x7FFC0000) 756*4882a593Smuzhiyun 757*4882a593Smuzhiyun #define SCU_ENSPINUP_GEN_VAL(name, value) \ 758*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ ## name, value) 759*4882a593Smuzhiyun 760*4882a593Smuzhiyun #define SCU_ENSPINUP_GEN_BIT(name) \ 761*4882a593Smuzhiyun SCU_GEN_BIT(SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ ## name) 762*4882a593Smuzhiyun 763*4882a593Smuzhiyun 764*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_TXSSCTYPE_SHIFT (1) 765*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_TXSSCTYPE_MASK (0x00000002) 766*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_RLLRATE_SHIFT (4) 767*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_RLLRATE_MASK (0x000000F0) 768*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO15GBPS_SHIFT (8) 769*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO15GBPS_MASK (0x00000100) 770*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW15GBPS_SHIFT (9) 771*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW15GBPS_MASK (0x00000201) 772*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO30GBPS_SHIFT (10) 773*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO30GBPS_MASK (0x00000401) 774*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW30GBPS_SHIFT (11) 775*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW30GBPS_MASK (0x00000801) 776*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO60GBPS_SHIFT (12) 777*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO60GBPS_MASK (0x00001001) 778*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW60GBPS_SHIFT (13) 779*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW60GBPS_MASK (0x00002001) 780*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_EVEN_PARITY_SHIFT (31) 781*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_EVEN_PARITY_MASK (0x80000000) 782*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_DEFAULT_MASK (0x00003F01) 783*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_REQUIRED_MASK (0x00000001) 784*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_CAPABILITIES_RESERVED_MASK (0x7FFFC00D) 785*4882a593Smuzhiyun 786*4882a593Smuzhiyun #define SCU_SAS_PHYCAP_GEN_VAL(name, value) \ 787*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_LINK_LAYER_PHY_CAPABILITIES_ ## name, value) 788*4882a593Smuzhiyun 789*4882a593Smuzhiyun #define SCU_SAS_PHYCAP_GEN_BIT(name) \ 790*4882a593Smuzhiyun SCU_GEN_BIT(SCU_LINK_LAYER_PHY_CAPABILITIES_ ## name) 791*4882a593Smuzhiyun 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_VIRTUAL_EXPANDER_PHY_ZONE_GROUP_SHIFT (0) 794*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_VIRTUAL_EXPANDER_PHY_ZONE_GROUP_MASK (0x000000FF) 795*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_INSIDE_SOURCE_ZONE_GROUP_SHIFT (31) 796*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_INSIDE_SOURCE_ZONE_GROUP_MASK (0x80000000) 797*4882a593Smuzhiyun #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_RESERVED_MASK (0x7FFFFF00) 798*4882a593Smuzhiyun 799*4882a593Smuzhiyun #define SCU_PSZGCR_GEN_VAL(name, value) \ 800*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_ ## name, value) 801*4882a593Smuzhiyun 802*4882a593Smuzhiyun #define SCU_PSZGCR_GEN_BIT(name) \ 803*4882a593Smuzhiyun SCU_GEN_BIT(SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_ ## name) 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_LOCKED_SHIFT (1) 806*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_LOCKED_MASK (0x00000002) 807*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_UPDATING_SHIFT (2) 808*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_UPDATING_MASK (0x00000004) 809*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_LOCKED_SHIFT (4) 810*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_LOCKED_MASK (0x00000010) 811*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_UPDATING_SHIFT (5) 812*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_UPDATING_MASK (0x00000020) 813*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE0_SHIFT (16) 814*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE0_MASK (0x00030000) 815*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE0_SHIFT (19) 816*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE0_MASK (0x00080000) 817*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE1_SHIFT (20) 818*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE1_MASK (0x00300000) 819*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE1_SHIFT (23) 820*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE1_MASK (0x00800000) 821*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE2_SHIFT (24) 822*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE2_MASK (0x03000000) 823*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE2_SHIFT (27) 824*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE2_MASK (0x08000000) 825*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE3_SHIFT (28) 826*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE3_MASK (0x30000000) 827*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE3_SHIFT (31) 828*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE3_MASK (0x80000000) 829*4882a593Smuzhiyun #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_RESERVED_MASK (0x4444FFC9) 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun #define SCU_PEG_SCUVZECR_GEN_VAL(name, val) \ 832*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ ## name, val) 833*4882a593Smuzhiyun 834*4882a593Smuzhiyun #define SCU_PEG_SCUVZECR_GEN_BIT(name) \ 835*4882a593Smuzhiyun SCU_GEN_BIT(SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ ## name) 836*4882a593Smuzhiyun 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun /* 839*4882a593Smuzhiyun * ***************************************************************************** 840*4882a593Smuzhiyun * * Port Task Scheduler registers shift and mask values 841*4882a593Smuzhiyun * ***************************************************************************** */ 842*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_IT_NEXUS_TIMEOUT_SHIFT (0) 843*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_IT_NEXUS_TIMEOUT_MASK (0x0000FFFF) 844*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_TASK_TIMEOUT_SHIFT (16) 845*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_TASK_TIMEOUT_MASK (0x00FF0000) 846*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_PTSG_ENABLE_SHIFT (24) 847*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_PTSG_ENABLE_MASK (0x01000000) 848*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_ETM_ENABLE_SHIFT (25) 849*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_ETM_ENABLE_MASK (0x02000000) 850*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_DEFAULT_MASK (0x00020002) 851*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_REQUIRED_MASK (0x00000000) 852*4882a593Smuzhiyun #define SCU_PTSG_CONTROL_RESERVED_MASK (0xFC000000) 853*4882a593Smuzhiyun 854*4882a593Smuzhiyun #define SCU_PTSGCR_GEN_VAL(name, val) \ 855*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_PTSG_CONTROL_ ## name, val) 856*4882a593Smuzhiyun 857*4882a593Smuzhiyun #define SCU_PTSGCR_GEN_BIT(name) \ 858*4882a593Smuzhiyun SCU_GEN_BIT(SCU_PTSG_CONTROL_ ## name) 859*4882a593Smuzhiyun 860*4882a593Smuzhiyun 861*4882a593Smuzhiyun /* ***************************************************************************** */ 862*4882a593Smuzhiyun #define SCU_PTSG_REAL_TIME_CLOCK_SHIFT (0) 863*4882a593Smuzhiyun #define SCU_PTSG_REAL_TIME_CLOCK_MASK (0x0000FFFF) 864*4882a593Smuzhiyun #define SCU_PTSG_REAL_TIME_CLOCK_RESERVED_MASK (0xFFFF0000) 865*4882a593Smuzhiyun 866*4882a593Smuzhiyun #define SCU_RTCR_GEN_VAL(name, val) \ 867*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_PTSG_ ## name, val) 868*4882a593Smuzhiyun 869*4882a593Smuzhiyun 870*4882a593Smuzhiyun #define SCU_PTSG_REAL_TIME_CLOCK_CONTROL_PRESCALER_VALUE_SHIFT (0) 871*4882a593Smuzhiyun #define SCU_PTSG_REAL_TIME_CLOCK_CONTROL_PRESCALER_VALUE_MASK (0x00FFFFFF) 872*4882a593Smuzhiyun #define SCU_PTSG_REAL_TIME_CLOCK_CONTROL_RESERVED_MASK (0xFF000000) 873*4882a593Smuzhiyun 874*4882a593Smuzhiyun #define SCU_RTCCR_GEN_VAL(name, val) \ 875*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_PTSG_REAL_TIME_CLOCK_CONTROL_ ## name, val) 876*4882a593Smuzhiyun 877*4882a593Smuzhiyun 878*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_SUSPEND_SHIFT (0) 879*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_SUSPEND_MASK (0x00000001) 880*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_ENABLE_SHIFT (1) 881*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_ENABLE_MASK (0x00000002) 882*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_RESERVED_MASK (0xFFFFFFFC) 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun #define SCU_PTSxCR_GEN_BIT(name) \ 885*4882a593Smuzhiyun SCU_GEN_BIT(SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_ ## name) 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun 888*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_NEXT_RN_VALID_SHIFT (0) 889*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_NEXT_RN_VALID_MASK (0x00000001) 890*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_ACTIVE_RNSC_LIST_VALID_SHIFT (1) 891*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_ACTIVE_RNSC_LIST_VALID_MASK (0x00000002) 892*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_PTS_SUSPENDED_SHIFT (2) 893*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_PTS_SUSPENDED_MASK (0x00000004) 894*4882a593Smuzhiyun #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_RESERVED_MASK (0xFFFFFFF8) 895*4882a593Smuzhiyun 896*4882a593Smuzhiyun #define SCU_PTSxSR_GEN_BIT(name) \ 897*4882a593Smuzhiyun SCU_GEN_BIT(SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_ ## name) 898*4882a593Smuzhiyun 899*4882a593Smuzhiyun /* 900*4882a593Smuzhiyun * ***************************************************************************** 901*4882a593Smuzhiyun * * SMU Registers 902*4882a593Smuzhiyun * ***************************************************************************** */ 903*4882a593Smuzhiyun 904*4882a593Smuzhiyun /* 905*4882a593Smuzhiyun * ---------------------------------------------------------------------------- 906*4882a593Smuzhiyun * SMU Registers 907*4882a593Smuzhiyun * These registers are based off of BAR0 908*4882a593Smuzhiyun * 909*4882a593Smuzhiyun * To calculate the offset for other functions use 910*4882a593Smuzhiyun * BAR0 + FN# * SystemPageSize * 2 911*4882a593Smuzhiyun * 912*4882a593Smuzhiyun * The TCA is only accessable from FN#0 (Physical Function) and each 913*4882a593Smuzhiyun * is programmed by (BAR0 + SCU_SMU_TCA_OFFSET + (FN# * 0x04)) or 914*4882a593Smuzhiyun * TCA0 for FN#0 is at BAR0 + 0x0400 915*4882a593Smuzhiyun * TCA1 for FN#1 is at BAR0 + 0x0404 916*4882a593Smuzhiyun * etc. 917*4882a593Smuzhiyun * ---------------------------------------------------------------------------- 918*4882a593Smuzhiyun * Accessable to all FN#s */ 919*4882a593Smuzhiyun #define SCU_SMU_PCP_OFFSET 0x0000 920*4882a593Smuzhiyun #define SCU_SMU_AMR_OFFSET 0x0004 921*4882a593Smuzhiyun #define SCU_SMU_ISR_OFFSET 0x0010 922*4882a593Smuzhiyun #define SCU_SMU_IMR_OFFSET 0x0014 923*4882a593Smuzhiyun #define SCU_SMU_ICC_OFFSET 0x0018 924*4882a593Smuzhiyun #define SCU_SMU_HTTLBAR_OFFSET 0x0020 925*4882a593Smuzhiyun #define SCU_SMU_HTTUBAR_OFFSET 0x0024 926*4882a593Smuzhiyun #define SCU_SMU_TCR_OFFSET 0x0028 927*4882a593Smuzhiyun #define SCU_SMU_CQLBAR_OFFSET 0x0030 928*4882a593Smuzhiyun #define SCU_SMU_CQUBAR_OFFSET 0x0034 929*4882a593Smuzhiyun #define SCU_SMU_CQPR_OFFSET 0x0040 930*4882a593Smuzhiyun #define SCU_SMU_CQGR_OFFSET 0x0044 931*4882a593Smuzhiyun #define SCU_SMU_CQC_OFFSET 0x0048 932*4882a593Smuzhiyun /* Accessable to FN#0 only */ 933*4882a593Smuzhiyun #define SCU_SMU_RNCLBAR_OFFSET 0x0080 934*4882a593Smuzhiyun #define SCU_SMU_RNCUBAR_OFFSET 0x0084 935*4882a593Smuzhiyun #define SCU_SMU_DCC_OFFSET 0x0090 936*4882a593Smuzhiyun #define SCU_SMU_DFC_OFFSET 0x0094 937*4882a593Smuzhiyun #define SCU_SMU_SMUCSR_OFFSET 0x0098 938*4882a593Smuzhiyun #define SCU_SMU_SCUSRCR_OFFSET 0x009C 939*4882a593Smuzhiyun #define SCU_SMU_SMAW_OFFSET 0x00A0 940*4882a593Smuzhiyun #define SCU_SMU_SMDW_OFFSET 0x00A4 941*4882a593Smuzhiyun /* Accessable to FN#0 only */ 942*4882a593Smuzhiyun #define SCU_SMU_TCA_OFFSET 0x0400 943*4882a593Smuzhiyun /* Accessable to all FN#s */ 944*4882a593Smuzhiyun #define SCU_SMU_MT_MLAR0_OFFSET 0x2000 945*4882a593Smuzhiyun #define SCU_SMU_MT_MUAR0_OFFSET 0x2004 946*4882a593Smuzhiyun #define SCU_SMU_MT_MDR0_OFFSET 0x2008 947*4882a593Smuzhiyun #define SCU_SMU_MT_VCR0_OFFSET 0x200C 948*4882a593Smuzhiyun #define SCU_SMU_MT_MLAR1_OFFSET 0x2010 949*4882a593Smuzhiyun #define SCU_SMU_MT_MUAR1_OFFSET 0x2014 950*4882a593Smuzhiyun #define SCU_SMU_MT_MDR1_OFFSET 0x2018 951*4882a593Smuzhiyun #define SCU_SMU_MT_VCR1_OFFSET 0x201C 952*4882a593Smuzhiyun #define SCU_SMU_MPBA_OFFSET 0x3000 953*4882a593Smuzhiyun 954*4882a593Smuzhiyun /** 955*4882a593Smuzhiyun * struct smu_registers - These are the SMU registers 956*4882a593Smuzhiyun * 957*4882a593Smuzhiyun * 958*4882a593Smuzhiyun */ 959*4882a593Smuzhiyun struct smu_registers { 960*4882a593Smuzhiyun /* 0x0000 PCP */ 961*4882a593Smuzhiyun u32 post_context_port; 962*4882a593Smuzhiyun /* 0x0004 AMR */ 963*4882a593Smuzhiyun u32 address_modifier; 964*4882a593Smuzhiyun u32 reserved_08; 965*4882a593Smuzhiyun u32 reserved_0C; 966*4882a593Smuzhiyun /* 0x0010 ISR */ 967*4882a593Smuzhiyun u32 interrupt_status; 968*4882a593Smuzhiyun /* 0x0014 IMR */ 969*4882a593Smuzhiyun u32 interrupt_mask; 970*4882a593Smuzhiyun /* 0x0018 ICC */ 971*4882a593Smuzhiyun u32 interrupt_coalesce_control; 972*4882a593Smuzhiyun u32 reserved_1C; 973*4882a593Smuzhiyun /* 0x0020 HTTLBAR */ 974*4882a593Smuzhiyun u32 host_task_table_lower; 975*4882a593Smuzhiyun /* 0x0024 HTTUBAR */ 976*4882a593Smuzhiyun u32 host_task_table_upper; 977*4882a593Smuzhiyun /* 0x0028 TCR */ 978*4882a593Smuzhiyun u32 task_context_range; 979*4882a593Smuzhiyun u32 reserved_2C; 980*4882a593Smuzhiyun /* 0x0030 CQLBAR */ 981*4882a593Smuzhiyun u32 completion_queue_lower; 982*4882a593Smuzhiyun /* 0x0034 CQUBAR */ 983*4882a593Smuzhiyun u32 completion_queue_upper; 984*4882a593Smuzhiyun u32 reserved_38; 985*4882a593Smuzhiyun u32 reserved_3C; 986*4882a593Smuzhiyun /* 0x0040 CQPR */ 987*4882a593Smuzhiyun u32 completion_queue_put; 988*4882a593Smuzhiyun /* 0x0044 CQGR */ 989*4882a593Smuzhiyun u32 completion_queue_get; 990*4882a593Smuzhiyun /* 0x0048 CQC */ 991*4882a593Smuzhiyun u32 completion_queue_control; 992*4882a593Smuzhiyun u32 reserved_4C; 993*4882a593Smuzhiyun u32 reserved_5x[4]; 994*4882a593Smuzhiyun u32 reserved_6x[4]; 995*4882a593Smuzhiyun u32 reserved_7x[4]; 996*4882a593Smuzhiyun /* 997*4882a593Smuzhiyun * Accessable to FN#0 only 998*4882a593Smuzhiyun * 0x0080 RNCLBAR */ 999*4882a593Smuzhiyun u32 remote_node_context_lower; 1000*4882a593Smuzhiyun /* 0x0084 RNCUBAR */ 1001*4882a593Smuzhiyun u32 remote_node_context_upper; 1002*4882a593Smuzhiyun u32 reserved_88; 1003*4882a593Smuzhiyun u32 reserved_8C; 1004*4882a593Smuzhiyun /* 0x0090 DCC */ 1005*4882a593Smuzhiyun u32 device_context_capacity; 1006*4882a593Smuzhiyun /* 0x0094 DFC */ 1007*4882a593Smuzhiyun u32 device_function_capacity; 1008*4882a593Smuzhiyun /* 0x0098 SMUCSR */ 1009*4882a593Smuzhiyun u32 control_status; 1010*4882a593Smuzhiyun /* 0x009C SCUSRCR */ 1011*4882a593Smuzhiyun u32 soft_reset_control; 1012*4882a593Smuzhiyun /* 0x00A0 SMAW */ 1013*4882a593Smuzhiyun u32 mmr_address_window; 1014*4882a593Smuzhiyun /* 0x00A4 SMDW */ 1015*4882a593Smuzhiyun u32 mmr_data_window; 1016*4882a593Smuzhiyun /* 0x00A8 CGUCR */ 1017*4882a593Smuzhiyun u32 clock_gating_control; 1018*4882a593Smuzhiyun /* 0x00AC CGUPC */ 1019*4882a593Smuzhiyun u32 clock_gating_performance; 1020*4882a593Smuzhiyun /* A whole bunch of reserved space */ 1021*4882a593Smuzhiyun u32 reserved_Bx[4]; 1022*4882a593Smuzhiyun u32 reserved_Cx[4]; 1023*4882a593Smuzhiyun u32 reserved_Dx[4]; 1024*4882a593Smuzhiyun u32 reserved_Ex[4]; 1025*4882a593Smuzhiyun u32 reserved_Fx[4]; 1026*4882a593Smuzhiyun u32 reserved_1xx[64]; 1027*4882a593Smuzhiyun u32 reserved_2xx[64]; 1028*4882a593Smuzhiyun u32 reserved_3xx[64]; 1029*4882a593Smuzhiyun /* 1030*4882a593Smuzhiyun * Accessable to FN#0 only 1031*4882a593Smuzhiyun * 0x0400 TCA */ 1032*4882a593Smuzhiyun u32 task_context_assignment[256]; 1033*4882a593Smuzhiyun /* MSI-X registers not included */ 1034*4882a593Smuzhiyun }; 1035*4882a593Smuzhiyun 1036*4882a593Smuzhiyun /* 1037*4882a593Smuzhiyun * ***************************************************************************** 1038*4882a593Smuzhiyun * SDMA Registers 1039*4882a593Smuzhiyun * ***************************************************************************** */ 1040*4882a593Smuzhiyun #define SCU_SDMA_BASE 0x6000 1041*4882a593Smuzhiyun #define SCU_SDMA_PUFATLHAR_OFFSET 0x0000 1042*4882a593Smuzhiyun #define SCU_SDMA_PUFATUHAR_OFFSET 0x0004 1043*4882a593Smuzhiyun #define SCU_SDMA_UFLHBAR_OFFSET 0x0008 1044*4882a593Smuzhiyun #define SCU_SDMA_UFUHBAR_OFFSET 0x000C 1045*4882a593Smuzhiyun #define SCU_SDMA_UFQC_OFFSET 0x0010 1046*4882a593Smuzhiyun #define SCU_SDMA_UFQPP_OFFSET 0x0014 1047*4882a593Smuzhiyun #define SCU_SDMA_UFQGP_OFFSET 0x0018 1048*4882a593Smuzhiyun #define SCU_SDMA_PDMACR_OFFSET 0x001C 1049*4882a593Smuzhiyun #define SCU_SDMA_CDMACR_OFFSET 0x0080 1050*4882a593Smuzhiyun 1051*4882a593Smuzhiyun /** 1052*4882a593Smuzhiyun * struct scu_sdma_registers - These are the SCU SDMA Registers 1053*4882a593Smuzhiyun * 1054*4882a593Smuzhiyun * 1055*4882a593Smuzhiyun */ 1056*4882a593Smuzhiyun struct scu_sdma_registers { 1057*4882a593Smuzhiyun /* 0x0000 PUFATLHAR */ 1058*4882a593Smuzhiyun u32 uf_address_table_lower; 1059*4882a593Smuzhiyun /* 0x0004 PUFATUHAR */ 1060*4882a593Smuzhiyun u32 uf_address_table_upper; 1061*4882a593Smuzhiyun /* 0x0008 UFLHBAR */ 1062*4882a593Smuzhiyun u32 uf_header_base_address_lower; 1063*4882a593Smuzhiyun /* 0x000C UFUHBAR */ 1064*4882a593Smuzhiyun u32 uf_header_base_address_upper; 1065*4882a593Smuzhiyun /* 0x0010 UFQC */ 1066*4882a593Smuzhiyun u32 unsolicited_frame_queue_control; 1067*4882a593Smuzhiyun /* 0x0014 UFQPP */ 1068*4882a593Smuzhiyun u32 unsolicited_frame_put_pointer; 1069*4882a593Smuzhiyun /* 0x0018 UFQGP */ 1070*4882a593Smuzhiyun u32 unsolicited_frame_get_pointer; 1071*4882a593Smuzhiyun /* 0x001C PDMACR */ 1072*4882a593Smuzhiyun u32 pdma_configuration; 1073*4882a593Smuzhiyun /* Reserved until offset 0x80 */ 1074*4882a593Smuzhiyun u32 reserved_0020_007C[0x18]; 1075*4882a593Smuzhiyun /* 0x0080 CDMACR */ 1076*4882a593Smuzhiyun u32 cdma_configuration; 1077*4882a593Smuzhiyun /* Remainder SDMA register space */ 1078*4882a593Smuzhiyun u32 reserved_0084_0400[0xDF]; 1079*4882a593Smuzhiyun 1080*4882a593Smuzhiyun }; 1081*4882a593Smuzhiyun 1082*4882a593Smuzhiyun /* 1083*4882a593Smuzhiyun * ***************************************************************************** 1084*4882a593Smuzhiyun * * SCU Link Registers 1085*4882a593Smuzhiyun * ***************************************************************************** */ 1086*4882a593Smuzhiyun #define SCU_PEG0_OFFSET 0x0000 1087*4882a593Smuzhiyun #define SCU_PEG1_OFFSET 0x8000 1088*4882a593Smuzhiyun 1089*4882a593Smuzhiyun #define SCU_TL0_OFFSET 0x0000 1090*4882a593Smuzhiyun #define SCU_TL1_OFFSET 0x0400 1091*4882a593Smuzhiyun #define SCU_TL2_OFFSET 0x0800 1092*4882a593Smuzhiyun #define SCU_TL3_OFFSET 0x0C00 1093*4882a593Smuzhiyun 1094*4882a593Smuzhiyun #define SCU_LL_OFFSET 0x0080 1095*4882a593Smuzhiyun #define SCU_LL0_OFFSET (SCU_TL0_OFFSET + SCU_LL_OFFSET) 1096*4882a593Smuzhiyun #define SCU_LL1_OFFSET (SCU_TL1_OFFSET + SCU_LL_OFFSET) 1097*4882a593Smuzhiyun #define SCU_LL2_OFFSET (SCU_TL2_OFFSET + SCU_LL_OFFSET) 1098*4882a593Smuzhiyun #define SCU_LL3_OFFSET (SCU_TL3_OFFSET + SCU_LL_OFFSET) 1099*4882a593Smuzhiyun 1100*4882a593Smuzhiyun /* Transport Layer Offsets (PEG + TL) */ 1101*4882a593Smuzhiyun #define SCU_TLCR_OFFSET 0x0000 1102*4882a593Smuzhiyun #define SCU_TLADTR_OFFSET 0x0004 1103*4882a593Smuzhiyun #define SCU_TLTTMR_OFFSET 0x0008 1104*4882a593Smuzhiyun #define SCU_TLEECR0_OFFSET 0x000C 1105*4882a593Smuzhiyun #define SCU_STPTLDARNI_OFFSET 0x0010 1106*4882a593Smuzhiyun 1107*4882a593Smuzhiyun 1108*4882a593Smuzhiyun #define SCU_TLCR_HASH_SAS_CHECKING_ENABLE_SHIFT (0) 1109*4882a593Smuzhiyun #define SCU_TLCR_HASH_SAS_CHECKING_ENABLE_MASK (0x00000001) 1110*4882a593Smuzhiyun #define SCU_TLCR_CLEAR_TCI_NCQ_MAPPING_TABLE_SHIFT (1) 1111*4882a593Smuzhiyun #define SCU_TLCR_CLEAR_TCI_NCQ_MAPPING_TABLE_MASK (0x00000002) 1112*4882a593Smuzhiyun #define SCU_TLCR_STP_WRITE_DATA_PREFETCH_SHIFT (3) 1113*4882a593Smuzhiyun #define SCU_TLCR_STP_WRITE_DATA_PREFETCH_MASK (0x00000008) 1114*4882a593Smuzhiyun #define SCU_TLCR_CMD_NAK_STATUS_CODE_SHIFT (4) 1115*4882a593Smuzhiyun #define SCU_TLCR_CMD_NAK_STATUS_CODE_MASK (0x00000010) 1116*4882a593Smuzhiyun #define SCU_TLCR_RESERVED_MASK (0xFFFFFFEB) 1117*4882a593Smuzhiyun 1118*4882a593Smuzhiyun #define SCU_TLCR_GEN_BIT(name) \ 1119*4882a593Smuzhiyun SCU_GEN_BIT(SCU_TLCR_ ## name) 1120*4882a593Smuzhiyun 1121*4882a593Smuzhiyun /** 1122*4882a593Smuzhiyun * struct scu_transport_layer_registers - These are the SCU Transport Layer 1123*4882a593Smuzhiyun * registers 1124*4882a593Smuzhiyun * 1125*4882a593Smuzhiyun * 1126*4882a593Smuzhiyun */ 1127*4882a593Smuzhiyun struct scu_transport_layer_registers { 1128*4882a593Smuzhiyun /* 0x0000 TLCR */ 1129*4882a593Smuzhiyun u32 control; 1130*4882a593Smuzhiyun /* 0x0004 TLADTR */ 1131*4882a593Smuzhiyun u32 arbitration_delay_timer; 1132*4882a593Smuzhiyun /* 0x0008 TLTTMR */ 1133*4882a593Smuzhiyun u32 timer_test_mode; 1134*4882a593Smuzhiyun /* 0x000C reserved */ 1135*4882a593Smuzhiyun u32 reserved_0C; 1136*4882a593Smuzhiyun /* 0x0010 STPTLDARNI */ 1137*4882a593Smuzhiyun u32 stp_rni; 1138*4882a593Smuzhiyun /* 0x0014 TLFEWPORCTRL */ 1139*4882a593Smuzhiyun u32 tlfe_wpo_read_control; 1140*4882a593Smuzhiyun /* 0x0018 TLFEWPORDATA */ 1141*4882a593Smuzhiyun u32 tlfe_wpo_read_data; 1142*4882a593Smuzhiyun /* 0x001C RXTLSSCSR1 */ 1143*4882a593Smuzhiyun u32 rxtl_single_step_control_status_1; 1144*4882a593Smuzhiyun /* 0x0020 RXTLSSCSR2 */ 1145*4882a593Smuzhiyun u32 rxtl_single_step_control_status_2; 1146*4882a593Smuzhiyun /* 0x0024 AWTRDDCR */ 1147*4882a593Smuzhiyun u32 tlfe_awt_retry_delay_debug_control; 1148*4882a593Smuzhiyun /* Remainder of TL memory space */ 1149*4882a593Smuzhiyun u32 reserved_0028_007F[0x16]; 1150*4882a593Smuzhiyun 1151*4882a593Smuzhiyun }; 1152*4882a593Smuzhiyun 1153*4882a593Smuzhiyun /* Protocol Engine Group Registers */ 1154*4882a593Smuzhiyun #define SCU_SCUVZECRx_OFFSET 0x1080 1155*4882a593Smuzhiyun 1156*4882a593Smuzhiyun /* Link Layer Offsets (PEG + TL + LL) */ 1157*4882a593Smuzhiyun #define SCU_SAS_SPDTOV_OFFSET 0x0000 1158*4882a593Smuzhiyun #define SCU_SAS_LLSTA_OFFSET 0x0004 1159*4882a593Smuzhiyun #define SCU_SATA_PSELTOV_OFFSET 0x0008 1160*4882a593Smuzhiyun #define SCU_SAS_TIMETOV_OFFSET 0x0010 1161*4882a593Smuzhiyun #define SCU_SAS_LOSTOT_OFFSET 0x0014 1162*4882a593Smuzhiyun #define SCU_SAS_LNKTOV_OFFSET 0x0018 1163*4882a593Smuzhiyun #define SCU_SAS_PHYTOV_OFFSET 0x001C 1164*4882a593Smuzhiyun #define SCU_SAS_AFERCNT_OFFSET 0x0020 1165*4882a593Smuzhiyun #define SCU_SAS_WERCNT_OFFSET 0x0024 1166*4882a593Smuzhiyun #define SCU_SAS_TIID_OFFSET 0x0028 1167*4882a593Smuzhiyun #define SCU_SAS_TIDNH_OFFSET 0x002C 1168*4882a593Smuzhiyun #define SCU_SAS_TIDNL_OFFSET 0x0030 1169*4882a593Smuzhiyun #define SCU_SAS_TISSAH_OFFSET 0x0034 1170*4882a593Smuzhiyun #define SCU_SAS_TISSAL_OFFSET 0x0038 1171*4882a593Smuzhiyun #define SCU_SAS_TIPID_OFFSET 0x003C 1172*4882a593Smuzhiyun #define SCU_SAS_TIRES2_OFFSET 0x0040 1173*4882a593Smuzhiyun #define SCU_SAS_ADRSTA_OFFSET 0x0044 1174*4882a593Smuzhiyun #define SCU_SAS_MAWTTOV_OFFSET 0x0048 1175*4882a593Smuzhiyun #define SCU_SAS_FRPLDFIL_OFFSET 0x0054 1176*4882a593Smuzhiyun #define SCU_SAS_RFCNT_OFFSET 0x0060 1177*4882a593Smuzhiyun #define SCU_SAS_TFCNT_OFFSET 0x0064 1178*4882a593Smuzhiyun #define SCU_SAS_RFDCNT_OFFSET 0x0068 1179*4882a593Smuzhiyun #define SCU_SAS_TFDCNT_OFFSET 0x006C 1180*4882a593Smuzhiyun #define SCU_SAS_LERCNT_OFFSET 0x0070 1181*4882a593Smuzhiyun #define SCU_SAS_RDISERRCNT_OFFSET 0x0074 1182*4882a593Smuzhiyun #define SCU_SAS_CRERCNT_OFFSET 0x0078 1183*4882a593Smuzhiyun #define SCU_STPCTL_OFFSET 0x007C 1184*4882a593Smuzhiyun #define SCU_SAS_PCFG_OFFSET 0x0080 1185*4882a593Smuzhiyun #define SCU_SAS_CLKSM_OFFSET 0x0084 1186*4882a593Smuzhiyun #define SCU_SAS_TXCOMWAKE_OFFSET 0x0088 1187*4882a593Smuzhiyun #define SCU_SAS_TXCOMINIT_OFFSET 0x008C 1188*4882a593Smuzhiyun #define SCU_SAS_TXCOMSAS_OFFSET 0x0090 1189*4882a593Smuzhiyun #define SCU_SAS_COMINIT_OFFSET 0x0094 1190*4882a593Smuzhiyun #define SCU_SAS_COMWAKE_OFFSET 0x0098 1191*4882a593Smuzhiyun #define SCU_SAS_COMSAS_OFFSET 0x009C 1192*4882a593Smuzhiyun #define SCU_SAS_SFERCNT_OFFSET 0x00A0 1193*4882a593Smuzhiyun #define SCU_SAS_CDFERCNT_OFFSET 0x00A4 1194*4882a593Smuzhiyun #define SCU_SAS_DNFERCNT_OFFSET 0x00A8 1195*4882a593Smuzhiyun #define SCU_SAS_PRSTERCNT_OFFSET 0x00AC 1196*4882a593Smuzhiyun #define SCU_SAS_CNTCTL_OFFSET 0x00B0 1197*4882a593Smuzhiyun #define SCU_SAS_SSPTOV_OFFSET 0x00B4 1198*4882a593Smuzhiyun #define SCU_FTCTL_OFFSET 0x00B8 1199*4882a593Smuzhiyun #define SCU_FRCTL_OFFSET 0x00BC 1200*4882a593Smuzhiyun #define SCU_FTWMRK_OFFSET 0x00C0 1201*4882a593Smuzhiyun #define SCU_ENSPINUP_OFFSET 0x00C4 1202*4882a593Smuzhiyun #define SCU_SAS_TRNTOV_OFFSET 0x00C8 1203*4882a593Smuzhiyun #define SCU_SAS_PHYCAP_OFFSET 0x00CC 1204*4882a593Smuzhiyun #define SCU_SAS_PHYCTL_OFFSET 0x00D0 1205*4882a593Smuzhiyun #define SCU_SAS_LLCTL_OFFSET 0x00D8 1206*4882a593Smuzhiyun #define SCU_AFE_XCVRCR_OFFSET 0x00DC 1207*4882a593Smuzhiyun #define SCU_AFE_LUTCR_OFFSET 0x00E0 1208*4882a593Smuzhiyun 1209*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_ALIGN_DETECTION_SHIFT (0UL) 1210*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_ALIGN_DETECTION_MASK (0x000000FFUL) 1211*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_HOT_PLUG_SHIFT (8UL) 1212*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_HOT_PLUG_MASK (0x0000FF00UL) 1213*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_COMSAS_DETECTION_SHIFT (16UL) 1214*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_COMSAS_DETECTION_MASK (0x00FF0000UL) 1215*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_RATE_CHANGE_SHIFT (24UL) 1216*4882a593Smuzhiyun #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_RATE_CHANGE_MASK (0xFF000000UL) 1217*4882a593Smuzhiyun 1218*4882a593Smuzhiyun #define SCU_SAS_PHYTOV_GEN_VAL(name, value) \ 1219*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_##name, value) 1220*4882a593Smuzhiyun 1221*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_SHIFT (0) 1222*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_MASK (0x00000003) 1223*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN1 (0) 1224*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN2 (1) 1225*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN3 (2) 1226*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_BROADCAST_PRIMITIVE_SHIFT (2) 1227*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_BROADCAST_PRIMITIVE_MASK (0x000003FC) 1228*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_ACTIVE_TASK_DISABLE_SHIFT (16) 1229*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_ACTIVE_TASK_DISABLE_MASK (0x00010000) 1230*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_OUTBOUND_TASK_DISABLE_SHIFT (17) 1231*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_OUTBOUND_TASK_DISABLE_MASK (0x00020000) 1232*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_NO_OUTBOUND_TASK_TIMEOUT_SHIFT (24) 1233*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_NO_OUTBOUND_TASK_TIMEOUT_MASK (0xFF000000) 1234*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_CONTROL_RESERVED (0x00FCFC00) 1235*4882a593Smuzhiyun 1236*4882a593Smuzhiyun #define SCU_SAS_LLCTL_GEN_VAL(name, value) \ 1237*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SAS_LINK_LAYER_CONTROL_ ## name, value) 1238*4882a593Smuzhiyun 1239*4882a593Smuzhiyun #define SCU_SAS_LLCTL_GEN_BIT(name) \ 1240*4882a593Smuzhiyun SCU_GEN_BIT(SCU_SAS_LINK_LAYER_CONTROL_ ## name) 1241*4882a593Smuzhiyun 1242*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_DEFAULT (0xF0) 1243*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_EXTENDED (0x1FF) 1244*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_SHIFT (0) 1245*4882a593Smuzhiyun #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_MASK (0x3FF) 1246*4882a593Smuzhiyun 1247*4882a593Smuzhiyun #define SCU_SAS_LLTXCOMSAS_GEN_VAL(name, value) \ 1248*4882a593Smuzhiyun SCU_GEN_VALUE(SCU_SAS_LINK_LAYER_TXCOMSAS_ ## name, value) 1249*4882a593Smuzhiyun 1250*4882a593Smuzhiyun 1251*4882a593Smuzhiyun /* #define SCU_FRXHECR_DCNT_OFFSET 0x00B0 */ 1252*4882a593Smuzhiyun #define SCU_PSZGCR_OFFSET 0x00E4 1253*4882a593Smuzhiyun #define SCU_SAS_RECPHYCAP_OFFSET 0x00E8 1254*4882a593Smuzhiyun /* #define SCU_TX_LUTSEL_OFFSET 0x00B8 */ 1255*4882a593Smuzhiyun 1256*4882a593Smuzhiyun #define SCU_SAS_PTxC_OFFSET 0x00D4 /* Same offset as SAS_TCTSTM */ 1257*4882a593Smuzhiyun 1258*4882a593Smuzhiyun /** 1259*4882a593Smuzhiyun * struct scu_link_layer_registers - SCU Link Layer Registers 1260*4882a593Smuzhiyun * 1261*4882a593Smuzhiyun * 1262*4882a593Smuzhiyun */ 1263*4882a593Smuzhiyun struct scu_link_layer_registers { 1264*4882a593Smuzhiyun /* 0x0000 SAS_SPDTOV */ 1265*4882a593Smuzhiyun u32 speed_negotiation_timers; 1266*4882a593Smuzhiyun /* 0x0004 SAS_LLSTA */ 1267*4882a593Smuzhiyun u32 link_layer_status; 1268*4882a593Smuzhiyun /* 0x0008 SATA_PSELTOV */ 1269*4882a593Smuzhiyun u32 port_selector_timeout; 1270*4882a593Smuzhiyun u32 reserved0C; 1271*4882a593Smuzhiyun /* 0x0010 SAS_TIMETOV */ 1272*4882a593Smuzhiyun u32 timeout_unit_value; 1273*4882a593Smuzhiyun /* 0x0014 SAS_RCDTOV */ 1274*4882a593Smuzhiyun u32 rcd_timeout; 1275*4882a593Smuzhiyun /* 0x0018 SAS_LNKTOV */ 1276*4882a593Smuzhiyun u32 link_timer_timeouts; 1277*4882a593Smuzhiyun /* 0x001C SAS_PHYTOV */ 1278*4882a593Smuzhiyun u32 sas_phy_timeouts; 1279*4882a593Smuzhiyun /* 0x0020 SAS_AFERCNT */ 1280*4882a593Smuzhiyun u32 received_address_frame_error_counter; 1281*4882a593Smuzhiyun /* 0x0024 SAS_WERCNT */ 1282*4882a593Smuzhiyun u32 invalid_dword_counter; 1283*4882a593Smuzhiyun /* 0x0028 SAS_TIID */ 1284*4882a593Smuzhiyun u32 transmit_identification; 1285*4882a593Smuzhiyun /* 0x002C SAS_TIDNH */ 1286*4882a593Smuzhiyun u32 sas_device_name_high; 1287*4882a593Smuzhiyun /* 0x0030 SAS_TIDNL */ 1288*4882a593Smuzhiyun u32 sas_device_name_low; 1289*4882a593Smuzhiyun /* 0x0034 SAS_TISSAH */ 1290*4882a593Smuzhiyun u32 source_sas_address_high; 1291*4882a593Smuzhiyun /* 0x0038 SAS_TISSAL */ 1292*4882a593Smuzhiyun u32 source_sas_address_low; 1293*4882a593Smuzhiyun /* 0x003C SAS_TIPID */ 1294*4882a593Smuzhiyun u32 identify_frame_phy_id; 1295*4882a593Smuzhiyun /* 0x0040 SAS_TIRES2 */ 1296*4882a593Smuzhiyun u32 identify_frame_reserved; 1297*4882a593Smuzhiyun /* 0x0044 SAS_ADRSTA */ 1298*4882a593Smuzhiyun u32 received_address_frame; 1299*4882a593Smuzhiyun /* 0x0048 SAS_MAWTTOV */ 1300*4882a593Smuzhiyun u32 maximum_arbitration_wait_timer_timeout; 1301*4882a593Smuzhiyun /* 0x004C SAS_PTxC */ 1302*4882a593Smuzhiyun u32 transmit_primitive; 1303*4882a593Smuzhiyun /* 0x0050 SAS_RORES */ 1304*4882a593Smuzhiyun u32 error_counter_event_notification_control; 1305*4882a593Smuzhiyun /* 0x0054 SAS_FRPLDFIL */ 1306*4882a593Smuzhiyun u32 frxq_payload_fill_threshold; 1307*4882a593Smuzhiyun /* 0x0058 SAS_LLHANG_TOT */ 1308*4882a593Smuzhiyun u32 link_layer_hang_detection_timeout; 1309*4882a593Smuzhiyun u32 reserved_5C; 1310*4882a593Smuzhiyun /* 0x0060 SAS_RFCNT */ 1311*4882a593Smuzhiyun u32 received_frame_count; 1312*4882a593Smuzhiyun /* 0x0064 SAS_TFCNT */ 1313*4882a593Smuzhiyun u32 transmit_frame_count; 1314*4882a593Smuzhiyun /* 0x0068 SAS_RFDCNT */ 1315*4882a593Smuzhiyun u32 received_dword_count; 1316*4882a593Smuzhiyun /* 0x006C SAS_TFDCNT */ 1317*4882a593Smuzhiyun u32 transmit_dword_count; 1318*4882a593Smuzhiyun /* 0x0070 SAS_LERCNT */ 1319*4882a593Smuzhiyun u32 loss_of_sync_error_count; 1320*4882a593Smuzhiyun /* 0x0074 SAS_RDISERRCNT */ 1321*4882a593Smuzhiyun u32 running_disparity_error_count; 1322*4882a593Smuzhiyun /* 0x0078 SAS_CRERCNT */ 1323*4882a593Smuzhiyun u32 received_frame_crc_error_count; 1324*4882a593Smuzhiyun /* 0x007C STPCTL */ 1325*4882a593Smuzhiyun u32 stp_control; 1326*4882a593Smuzhiyun /* 0x0080 SAS_PCFG */ 1327*4882a593Smuzhiyun u32 phy_configuration; 1328*4882a593Smuzhiyun /* 0x0084 SAS_CLKSM */ 1329*4882a593Smuzhiyun u32 clock_skew_management; 1330*4882a593Smuzhiyun /* 0x0088 SAS_TXCOMWAKE */ 1331*4882a593Smuzhiyun u32 transmit_comwake_signal; 1332*4882a593Smuzhiyun /* 0x008C SAS_TXCOMINIT */ 1333*4882a593Smuzhiyun u32 transmit_cominit_signal; 1334*4882a593Smuzhiyun /* 0x0090 SAS_TXCOMSAS */ 1335*4882a593Smuzhiyun u32 transmit_comsas_signal; 1336*4882a593Smuzhiyun /* 0x0094 SAS_COMINIT */ 1337*4882a593Smuzhiyun u32 cominit_control; 1338*4882a593Smuzhiyun /* 0x0098 SAS_COMWAKE */ 1339*4882a593Smuzhiyun u32 comwake_control; 1340*4882a593Smuzhiyun /* 0x009C SAS_COMSAS */ 1341*4882a593Smuzhiyun u32 comsas_control; 1342*4882a593Smuzhiyun /* 0x00A0 SAS_SFERCNT */ 1343*4882a593Smuzhiyun u32 received_short_frame_count; 1344*4882a593Smuzhiyun /* 0x00A4 SAS_CDFERCNT */ 1345*4882a593Smuzhiyun u32 received_frame_without_credit_count; 1346*4882a593Smuzhiyun /* 0x00A8 SAS_DNFERCNT */ 1347*4882a593Smuzhiyun u32 received_frame_after_done_count; 1348*4882a593Smuzhiyun /* 0x00AC SAS_PRSTERCNT */ 1349*4882a593Smuzhiyun u32 phy_reset_problem_count; 1350*4882a593Smuzhiyun /* 0x00B0 SAS_CNTCTL */ 1351*4882a593Smuzhiyun u32 counter_control; 1352*4882a593Smuzhiyun /* 0x00B4 SAS_SSPTOV */ 1353*4882a593Smuzhiyun u32 ssp_timer_timeout_values; 1354*4882a593Smuzhiyun /* 0x00B8 FTCTL */ 1355*4882a593Smuzhiyun u32 ftx_control; 1356*4882a593Smuzhiyun /* 0x00BC FRCTL */ 1357*4882a593Smuzhiyun u32 frx_control; 1358*4882a593Smuzhiyun /* 0x00C0 FTWMRK */ 1359*4882a593Smuzhiyun u32 ftx_watermark; 1360*4882a593Smuzhiyun /* 0x00C4 ENSPINUP */ 1361*4882a593Smuzhiyun u32 notify_enable_spinup_control; 1362*4882a593Smuzhiyun /* 0x00C8 SAS_TRNTOV */ 1363*4882a593Smuzhiyun u32 sas_training_sequence_timer_values; 1364*4882a593Smuzhiyun /* 0x00CC SAS_PHYCAP */ 1365*4882a593Smuzhiyun u32 phy_capabilities; 1366*4882a593Smuzhiyun /* 0x00D0 SAS_PHYCTL */ 1367*4882a593Smuzhiyun u32 phy_control; 1368*4882a593Smuzhiyun u32 reserved_d4; 1369*4882a593Smuzhiyun /* 0x00D8 LLCTL */ 1370*4882a593Smuzhiyun u32 link_layer_control; 1371*4882a593Smuzhiyun /* 0x00DC AFE_XCVRCR */ 1372*4882a593Smuzhiyun u32 afe_xcvr_control; 1373*4882a593Smuzhiyun /* 0x00E0 AFE_LUTCR */ 1374*4882a593Smuzhiyun u32 afe_lookup_table_control; 1375*4882a593Smuzhiyun /* 0x00E4 PSZGCR */ 1376*4882a593Smuzhiyun u32 phy_source_zone_group_control; 1377*4882a593Smuzhiyun /* 0x00E8 SAS_RECPHYCAP */ 1378*4882a593Smuzhiyun u32 receive_phycap; 1379*4882a593Smuzhiyun u32 reserved_ec; 1380*4882a593Smuzhiyun /* 0x00F0 SNAFERXRSTCTL */ 1381*4882a593Smuzhiyun u32 speed_negotiation_afe_rx_reset_control; 1382*4882a593Smuzhiyun /* 0x00F4 SAS_SSIPMCTL */ 1383*4882a593Smuzhiyun u32 power_management_control; 1384*4882a593Smuzhiyun /* 0x00F8 SAS_PSPREQ_PRIM */ 1385*4882a593Smuzhiyun u32 sas_pm_partial_request_primitive; 1386*4882a593Smuzhiyun /* 0x00FC SAS_PSSREQ_PRIM */ 1387*4882a593Smuzhiyun u32 sas_pm_slumber_request_primitive; 1388*4882a593Smuzhiyun /* 0x0100 SAS_PPSACK_PRIM */ 1389*4882a593Smuzhiyun u32 sas_pm_ack_primitive_register; 1390*4882a593Smuzhiyun /* 0x0104 SAS_PSNAK_PRIM */ 1391*4882a593Smuzhiyun u32 sas_pm_nak_primitive_register; 1392*4882a593Smuzhiyun /* 0x0108 SAS_SSIPMTOV */ 1393*4882a593Smuzhiyun u32 sas_primitive_timeout; 1394*4882a593Smuzhiyun u32 reserved_10c; 1395*4882a593Smuzhiyun /* 0x0110 - 0x011C PLAPRDCTRLxREG */ 1396*4882a593Smuzhiyun u32 pla_product_control[4]; 1397*4882a593Smuzhiyun /* 0x0120 PLAPRDSUMREG */ 1398*4882a593Smuzhiyun u32 pla_product_sum; 1399*4882a593Smuzhiyun /* 0x0124 PLACONTROLREG */ 1400*4882a593Smuzhiyun u32 pla_control; 1401*4882a593Smuzhiyun /* Remainder of memory space 896 bytes */ 1402*4882a593Smuzhiyun u32 reserved_0128_037f[0x96]; 1403*4882a593Smuzhiyun 1404*4882a593Smuzhiyun }; 1405*4882a593Smuzhiyun 1406*4882a593Smuzhiyun /* 1407*4882a593Smuzhiyun * 0x00D4 // Same offset as SAS_TCTSTM SAS_PTxC 1408*4882a593Smuzhiyun * u32 primitive_transmit_control; */ 1409*4882a593Smuzhiyun 1410*4882a593Smuzhiyun /* 1411*4882a593Smuzhiyun * ---------------------------------------------------------------------------- 1412*4882a593Smuzhiyun * SGPIO 1413*4882a593Smuzhiyun * ---------------------------------------------------------------------------- */ 1414*4882a593Smuzhiyun #define SCU_SGPIO_OFFSET 0x1400 1415*4882a593Smuzhiyun 1416*4882a593Smuzhiyun /* #define SCU_SGPIO_OFFSET 0x6000 // later moves to 0x1400 see HSD 652625 */ 1417*4882a593Smuzhiyun #define SCU_SGPIO_SGICR_OFFSET 0x0000 1418*4882a593Smuzhiyun #define SCU_SGPIO_SGPBR_OFFSET 0x0004 1419*4882a593Smuzhiyun #define SCU_SGPIO_SGSDLR_OFFSET 0x0008 1420*4882a593Smuzhiyun #define SCU_SGPIO_SGSDUR_OFFSET 0x000C 1421*4882a593Smuzhiyun #define SCU_SGPIO_SGSIDLR_OFFSET 0x0010 1422*4882a593Smuzhiyun #define SCU_SGPIO_SGSIDUR_OFFSET 0x0014 1423*4882a593Smuzhiyun #define SCU_SGPIO_SGVSCR_OFFSET 0x0018 1424*4882a593Smuzhiyun /* Address from 0x0820 to 0x083C */ 1425*4882a593Smuzhiyun #define SCU_SGPIO_SGODSR_OFFSET 0x0020 1426*4882a593Smuzhiyun 1427*4882a593Smuzhiyun /** 1428*4882a593Smuzhiyun * struct scu_sgpio_registers - SCU SGPIO Registers 1429*4882a593Smuzhiyun * 1430*4882a593Smuzhiyun * 1431*4882a593Smuzhiyun */ 1432*4882a593Smuzhiyun struct scu_sgpio_registers { 1433*4882a593Smuzhiyun /* 0x0000 SGPIO_SGICR */ 1434*4882a593Smuzhiyun u32 interface_control; 1435*4882a593Smuzhiyun /* 0x0004 SGPIO_SGPBR */ 1436*4882a593Smuzhiyun u32 blink_rate; 1437*4882a593Smuzhiyun /* 0x0008 SGPIO_SGSDLR */ 1438*4882a593Smuzhiyun u32 start_drive_lower; 1439*4882a593Smuzhiyun /* 0x000C SGPIO_SGSDUR */ 1440*4882a593Smuzhiyun u32 start_drive_upper; 1441*4882a593Smuzhiyun /* 0x0010 SGPIO_SGSIDLR */ 1442*4882a593Smuzhiyun u32 serial_input_lower; 1443*4882a593Smuzhiyun /* 0x0014 SGPIO_SGSIDUR */ 1444*4882a593Smuzhiyun u32 serial_input_upper; 1445*4882a593Smuzhiyun /* 0x0018 SGPIO_SGVSCR */ 1446*4882a593Smuzhiyun u32 vendor_specific_code; 1447*4882a593Smuzhiyun /* 0x001C Reserved */ 1448*4882a593Smuzhiyun u32 reserved_001c; 1449*4882a593Smuzhiyun /* 0x0020 SGPIO_SGODSR */ 1450*4882a593Smuzhiyun u32 output_data_select[8]; 1451*4882a593Smuzhiyun /* Remainder of memory space 256 bytes */ 1452*4882a593Smuzhiyun u32 reserved_1444_14ff[0x30]; 1453*4882a593Smuzhiyun 1454*4882a593Smuzhiyun }; 1455*4882a593Smuzhiyun 1456*4882a593Smuzhiyun /* 1457*4882a593Smuzhiyun * ***************************************************************************** 1458*4882a593Smuzhiyun * * Defines for VIIT entry offsets 1459*4882a593Smuzhiyun * * Access additional entries by SCU_VIIT_BASE + index * 0x10 1460*4882a593Smuzhiyun * ***************************************************************************** */ 1461*4882a593Smuzhiyun #define SCU_VIIT_BASE 0x1c00 1462*4882a593Smuzhiyun 1463*4882a593Smuzhiyun struct scu_viit_registers { 1464*4882a593Smuzhiyun u32 registers[256]; 1465*4882a593Smuzhiyun }; 1466*4882a593Smuzhiyun 1467*4882a593Smuzhiyun /* 1468*4882a593Smuzhiyun * ***************************************************************************** 1469*4882a593Smuzhiyun * * SCU PORT TASK SCHEDULER REGISTERS 1470*4882a593Smuzhiyun * ***************************************************************************** */ 1471*4882a593Smuzhiyun 1472*4882a593Smuzhiyun #define SCU_PTSG_BASE 0x1000 1473*4882a593Smuzhiyun 1474*4882a593Smuzhiyun #define SCU_PTSG_PTSGCR_OFFSET 0x0000 1475*4882a593Smuzhiyun #define SCU_PTSG_RTCR_OFFSET 0x0004 1476*4882a593Smuzhiyun #define SCU_PTSG_RTCCR_OFFSET 0x0008 1477*4882a593Smuzhiyun #define SCU_PTSG_PTS0CR_OFFSET 0x0010 1478*4882a593Smuzhiyun #define SCU_PTSG_PTS0SR_OFFSET 0x0014 1479*4882a593Smuzhiyun #define SCU_PTSG_PTS1CR_OFFSET 0x0018 1480*4882a593Smuzhiyun #define SCU_PTSG_PTS1SR_OFFSET 0x001C 1481*4882a593Smuzhiyun #define SCU_PTSG_PTS2CR_OFFSET 0x0020 1482*4882a593Smuzhiyun #define SCU_PTSG_PTS2SR_OFFSET 0x0024 1483*4882a593Smuzhiyun #define SCU_PTSG_PTS3CR_OFFSET 0x0028 1484*4882a593Smuzhiyun #define SCU_PTSG_PTS3SR_OFFSET 0x002C 1485*4882a593Smuzhiyun #define SCU_PTSG_PCSPE0CR_OFFSET 0x0030 1486*4882a593Smuzhiyun #define SCU_PTSG_PCSPE1CR_OFFSET 0x0034 1487*4882a593Smuzhiyun #define SCU_PTSG_PCSPE2CR_OFFSET 0x0038 1488*4882a593Smuzhiyun #define SCU_PTSG_PCSPE3CR_OFFSET 0x003C 1489*4882a593Smuzhiyun #define SCU_PTSG_ETMTSCCR_OFFSET 0x0040 1490*4882a593Smuzhiyun #define SCU_PTSG_ETMRNSCCR_OFFSET 0x0044 1491*4882a593Smuzhiyun 1492*4882a593Smuzhiyun /** 1493*4882a593Smuzhiyun * struct scu_port_task_scheduler_registers - These are the control/stats pairs 1494*4882a593Smuzhiyun * for each Port Task Scheduler. 1495*4882a593Smuzhiyun * 1496*4882a593Smuzhiyun * 1497*4882a593Smuzhiyun */ 1498*4882a593Smuzhiyun struct scu_port_task_scheduler_registers { 1499*4882a593Smuzhiyun u32 control; 1500*4882a593Smuzhiyun u32 status; 1501*4882a593Smuzhiyun }; 1502*4882a593Smuzhiyun 1503*4882a593Smuzhiyun /** 1504*4882a593Smuzhiyun * struct scu_port_task_scheduler_group_registers - These are the PORT Task 1505*4882a593Smuzhiyun * Scheduler registers 1506*4882a593Smuzhiyun * 1507*4882a593Smuzhiyun * 1508*4882a593Smuzhiyun */ 1509*4882a593Smuzhiyun struct scu_port_task_scheduler_group_registers { 1510*4882a593Smuzhiyun /* 0x0000 PTSGCR */ 1511*4882a593Smuzhiyun u32 control; 1512*4882a593Smuzhiyun /* 0x0004 RTCR */ 1513*4882a593Smuzhiyun u32 real_time_clock; 1514*4882a593Smuzhiyun /* 0x0008 RTCCR */ 1515*4882a593Smuzhiyun u32 real_time_clock_control; 1516*4882a593Smuzhiyun /* 0x000C */ 1517*4882a593Smuzhiyun u32 reserved_0C; 1518*4882a593Smuzhiyun /* 1519*4882a593Smuzhiyun * 0x0010 PTS0CR 1520*4882a593Smuzhiyun * 0x0014 PTS0SR 1521*4882a593Smuzhiyun * 0x0018 PTS1CR 1522*4882a593Smuzhiyun * 0x001C PTS1SR 1523*4882a593Smuzhiyun * 0x0020 PTS2CR 1524*4882a593Smuzhiyun * 0x0024 PTS2SR 1525*4882a593Smuzhiyun * 0x0028 PTS3CR 1526*4882a593Smuzhiyun * 0x002C PTS3SR */ 1527*4882a593Smuzhiyun struct scu_port_task_scheduler_registers port[4]; 1528*4882a593Smuzhiyun /* 1529*4882a593Smuzhiyun * 0x0030 PCSPE0CR 1530*4882a593Smuzhiyun * 0x0034 PCSPE1CR 1531*4882a593Smuzhiyun * 0x0038 PCSPE2CR 1532*4882a593Smuzhiyun * 0x003C PCSPE3CR */ 1533*4882a593Smuzhiyun u32 protocol_engine[4]; 1534*4882a593Smuzhiyun /* 0x0040 ETMTSCCR */ 1535*4882a593Smuzhiyun u32 tc_scanning_interval_control; 1536*4882a593Smuzhiyun /* 0x0044 ETMRNSCCR */ 1537*4882a593Smuzhiyun u32 rnc_scanning_interval_control; 1538*4882a593Smuzhiyun /* Remainder of memory space 128 bytes */ 1539*4882a593Smuzhiyun u32 reserved_1048_107f[0x0E]; 1540*4882a593Smuzhiyun 1541*4882a593Smuzhiyun }; 1542*4882a593Smuzhiyun 1543*4882a593Smuzhiyun #define SCU_PTSG_SCUVZECR_OFFSET 0x003C 1544*4882a593Smuzhiyun 1545*4882a593Smuzhiyun /* 1546*4882a593Smuzhiyun * ***************************************************************************** 1547*4882a593Smuzhiyun * * AFE REGISTERS 1548*4882a593Smuzhiyun * ***************************************************************************** */ 1549*4882a593Smuzhiyun #define SCU_AFE_MMR_BASE 0xE000 1550*4882a593Smuzhiyun 1551*4882a593Smuzhiyun /* 1552*4882a593Smuzhiyun * AFE 0 is at offset 0x0800 1553*4882a593Smuzhiyun * AFE 1 is at offset 0x0900 1554*4882a593Smuzhiyun * AFE 2 is at offset 0x0a00 1555*4882a593Smuzhiyun * AFE 3 is at offset 0x0b00 */ 1556*4882a593Smuzhiyun struct scu_afe_transceiver { 1557*4882a593Smuzhiyun /* 0x0000 AFE_XCVR_CTRL0 */ 1558*4882a593Smuzhiyun u32 afe_xcvr_control0; 1559*4882a593Smuzhiyun /* 0x0004 AFE_XCVR_CTRL1 */ 1560*4882a593Smuzhiyun u32 afe_xcvr_control1; 1561*4882a593Smuzhiyun /* 0x0008 */ 1562*4882a593Smuzhiyun u32 reserved_0008; 1563*4882a593Smuzhiyun /* 0x000c afe_dfx_rx_control0 */ 1564*4882a593Smuzhiyun u32 afe_dfx_rx_control0; 1565*4882a593Smuzhiyun /* 0x0010 AFE_DFX_RX_CTRL1 */ 1566*4882a593Smuzhiyun u32 afe_dfx_rx_control1; 1567*4882a593Smuzhiyun /* 0x0014 */ 1568*4882a593Smuzhiyun u32 reserved_0014; 1569*4882a593Smuzhiyun /* 0x0018 AFE_DFX_RX_STS0 */ 1570*4882a593Smuzhiyun u32 afe_dfx_rx_status0; 1571*4882a593Smuzhiyun /* 0x001c AFE_DFX_RX_STS1 */ 1572*4882a593Smuzhiyun u32 afe_dfx_rx_status1; 1573*4882a593Smuzhiyun /* 0x0020 */ 1574*4882a593Smuzhiyun u32 reserved_0020; 1575*4882a593Smuzhiyun /* 0x0024 AFE_TX_CTRL */ 1576*4882a593Smuzhiyun u32 afe_tx_control; 1577*4882a593Smuzhiyun /* 0x0028 AFE_TX_AMP_CTRL0 */ 1578*4882a593Smuzhiyun u32 afe_tx_amp_control0; 1579*4882a593Smuzhiyun /* 0x002c AFE_TX_AMP_CTRL1 */ 1580*4882a593Smuzhiyun u32 afe_tx_amp_control1; 1581*4882a593Smuzhiyun /* 0x0030 AFE_TX_AMP_CTRL2 */ 1582*4882a593Smuzhiyun u32 afe_tx_amp_control2; 1583*4882a593Smuzhiyun /* 0x0034 AFE_TX_AMP_CTRL3 */ 1584*4882a593Smuzhiyun u32 afe_tx_amp_control3; 1585*4882a593Smuzhiyun /* 0x0038 afe_tx_ssc_control */ 1586*4882a593Smuzhiyun u32 afe_tx_ssc_control; 1587*4882a593Smuzhiyun /* 0x003c */ 1588*4882a593Smuzhiyun u32 reserved_003c; 1589*4882a593Smuzhiyun /* 0x0040 AFE_RX_SSC_CTRL0 */ 1590*4882a593Smuzhiyun u32 afe_rx_ssc_control0; 1591*4882a593Smuzhiyun /* 0x0044 AFE_RX_SSC_CTRL1 */ 1592*4882a593Smuzhiyun u32 afe_rx_ssc_control1; 1593*4882a593Smuzhiyun /* 0x0048 AFE_RX_SSC_CTRL2 */ 1594*4882a593Smuzhiyun u32 afe_rx_ssc_control2; 1595*4882a593Smuzhiyun /* 0x004c AFE_RX_EQ_STS0 */ 1596*4882a593Smuzhiyun u32 afe_rx_eq_status0; 1597*4882a593Smuzhiyun /* 0x0050 AFE_RX_EQ_STS1 */ 1598*4882a593Smuzhiyun u32 afe_rx_eq_status1; 1599*4882a593Smuzhiyun /* 0x0054 AFE_RX_CDR_STS */ 1600*4882a593Smuzhiyun u32 afe_rx_cdr_status; 1601*4882a593Smuzhiyun /* 0x0058 */ 1602*4882a593Smuzhiyun u32 reserved_0058; 1603*4882a593Smuzhiyun /* 0x005c AFE_CHAN_CTRL */ 1604*4882a593Smuzhiyun u32 afe_channel_control; 1605*4882a593Smuzhiyun /* 0x0060-0x006c */ 1606*4882a593Smuzhiyun u32 reserved_0060_006c[0x04]; 1607*4882a593Smuzhiyun /* 0x0070 AFE_XCVR_EC_STS0 */ 1608*4882a593Smuzhiyun u32 afe_xcvr_error_capture_status0; 1609*4882a593Smuzhiyun /* 0x0074 AFE_XCVR_EC_STS1 */ 1610*4882a593Smuzhiyun u32 afe_xcvr_error_capture_status1; 1611*4882a593Smuzhiyun /* 0x0078 AFE_XCVR_EC_STS2 */ 1612*4882a593Smuzhiyun u32 afe_xcvr_error_capture_status2; 1613*4882a593Smuzhiyun /* 0x007c afe_xcvr_ec_status3 */ 1614*4882a593Smuzhiyun u32 afe_xcvr_error_capture_status3; 1615*4882a593Smuzhiyun /* 0x0080 AFE_XCVR_EC_STS4 */ 1616*4882a593Smuzhiyun u32 afe_xcvr_error_capture_status4; 1617*4882a593Smuzhiyun /* 0x0084 AFE_XCVR_EC_STS5 */ 1618*4882a593Smuzhiyun u32 afe_xcvr_error_capture_status5; 1619*4882a593Smuzhiyun /* 0x0088-0x00fc */ 1620*4882a593Smuzhiyun u32 reserved_008c_00fc[0x1e]; 1621*4882a593Smuzhiyun }; 1622*4882a593Smuzhiyun 1623*4882a593Smuzhiyun /** 1624*4882a593Smuzhiyun * struct scu_afe_registers - AFE Regsiters 1625*4882a593Smuzhiyun * 1626*4882a593Smuzhiyun * 1627*4882a593Smuzhiyun */ 1628*4882a593Smuzhiyun /* Uaoa AFE registers */ 1629*4882a593Smuzhiyun struct scu_afe_registers { 1630*4882a593Smuzhiyun /* 0Xe000 AFE_BIAS_CTRL */ 1631*4882a593Smuzhiyun u32 afe_bias_control; 1632*4882a593Smuzhiyun u32 reserved_0004; 1633*4882a593Smuzhiyun /* 0x0008 AFE_PLL_CTRL0 */ 1634*4882a593Smuzhiyun u32 afe_pll_control0; 1635*4882a593Smuzhiyun /* 0x000c AFE_PLL_CTRL1 */ 1636*4882a593Smuzhiyun u32 afe_pll_control1; 1637*4882a593Smuzhiyun /* 0x0010 AFE_PLL_CTRL2 */ 1638*4882a593Smuzhiyun u32 afe_pll_control2; 1639*4882a593Smuzhiyun /* 0x0014 AFE_CB_STS */ 1640*4882a593Smuzhiyun u32 afe_common_block_status; 1641*4882a593Smuzhiyun /* 0x0018-0x007c */ 1642*4882a593Smuzhiyun u32 reserved_18_7c[0x1a]; 1643*4882a593Smuzhiyun /* 0x0080 AFE_PMSN_MCTRL0 */ 1644*4882a593Smuzhiyun u32 afe_pmsn_master_control0; 1645*4882a593Smuzhiyun /* 0x0084 AFE_PMSN_MCTRL1 */ 1646*4882a593Smuzhiyun u32 afe_pmsn_master_control1; 1647*4882a593Smuzhiyun /* 0x0088 AFE_PMSN_MCTRL2 */ 1648*4882a593Smuzhiyun u32 afe_pmsn_master_control2; 1649*4882a593Smuzhiyun /* 0x008C-0x00fc */ 1650*4882a593Smuzhiyun u32 reserved_008c_00fc[0x1D]; 1651*4882a593Smuzhiyun /* 0x0100 AFE_DFX_MST_CTRL0 */ 1652*4882a593Smuzhiyun u32 afe_dfx_master_control0; 1653*4882a593Smuzhiyun /* 0x0104 AFE_DFX_MST_CTRL1 */ 1654*4882a593Smuzhiyun u32 afe_dfx_master_control1; 1655*4882a593Smuzhiyun /* 0x0108 AFE_DFX_DCL_CTRL */ 1656*4882a593Smuzhiyun u32 afe_dfx_dcl_control; 1657*4882a593Smuzhiyun /* 0x010c AFE_DFX_DMON_CTRL */ 1658*4882a593Smuzhiyun u32 afe_dfx_digital_monitor_control; 1659*4882a593Smuzhiyun /* 0x0110 AFE_DFX_AMONP_CTRL */ 1660*4882a593Smuzhiyun u32 afe_dfx_analog_p_monitor_control; 1661*4882a593Smuzhiyun /* 0x0114 AFE_DFX_AMONN_CTRL */ 1662*4882a593Smuzhiyun u32 afe_dfx_analog_n_monitor_control; 1663*4882a593Smuzhiyun /* 0x0118 AFE_DFX_NTL_STS */ 1664*4882a593Smuzhiyun u32 afe_dfx_ntl_status; 1665*4882a593Smuzhiyun /* 0x011c AFE_DFX_FIFO_STS0 */ 1666*4882a593Smuzhiyun u32 afe_dfx_fifo_status0; 1667*4882a593Smuzhiyun /* 0x0120 AFE_DFX_FIFO_STS1 */ 1668*4882a593Smuzhiyun u32 afe_dfx_fifo_status1; 1669*4882a593Smuzhiyun /* 0x0124 AFE_DFX_MPAT_CTRL */ 1670*4882a593Smuzhiyun u32 afe_dfx_master_pattern_control; 1671*4882a593Smuzhiyun /* 0x0128 AFE_DFX_P0_CTRL */ 1672*4882a593Smuzhiyun u32 afe_dfx_p0_control; 1673*4882a593Smuzhiyun /* 0x012c-0x01a8 AFE_DFX_P0_DRx */ 1674*4882a593Smuzhiyun u32 afe_dfx_p0_data[32]; 1675*4882a593Smuzhiyun /* 0x01ac */ 1676*4882a593Smuzhiyun u32 reserved_01ac; 1677*4882a593Smuzhiyun /* 0x01b0-0x020c AFE_DFX_P0_IRx */ 1678*4882a593Smuzhiyun u32 afe_dfx_p0_instruction[24]; 1679*4882a593Smuzhiyun /* 0x0210 */ 1680*4882a593Smuzhiyun u32 reserved_0210; 1681*4882a593Smuzhiyun /* 0x0214 AFE_DFX_P1_CTRL */ 1682*4882a593Smuzhiyun u32 afe_dfx_p1_control; 1683*4882a593Smuzhiyun /* 0x0218-0x245 AFE_DFX_P1_DRx */ 1684*4882a593Smuzhiyun u32 afe_dfx_p1_data[16]; 1685*4882a593Smuzhiyun /* 0x0258-0x029c */ 1686*4882a593Smuzhiyun u32 reserved_0258_029c[0x12]; 1687*4882a593Smuzhiyun /* 0x02a0-0x02bc AFE_DFX_P1_IRx */ 1688*4882a593Smuzhiyun u32 afe_dfx_p1_instruction[8]; 1689*4882a593Smuzhiyun /* 0x02c0-0x2fc */ 1690*4882a593Smuzhiyun u32 reserved_02c0_02fc[0x10]; 1691*4882a593Smuzhiyun /* 0x0300 AFE_DFX_TX_PMSN_CTRL */ 1692*4882a593Smuzhiyun u32 afe_dfx_tx_pmsn_control; 1693*4882a593Smuzhiyun /* 0x0304 AFE_DFX_RX_PMSN_CTRL */ 1694*4882a593Smuzhiyun u32 afe_dfx_rx_pmsn_control; 1695*4882a593Smuzhiyun u32 reserved_0308; 1696*4882a593Smuzhiyun /* 0x030c AFE_DFX_NOA_CTRL0 */ 1697*4882a593Smuzhiyun u32 afe_dfx_noa_control0; 1698*4882a593Smuzhiyun /* 0x0310 AFE_DFX_NOA_CTRL1 */ 1699*4882a593Smuzhiyun u32 afe_dfx_noa_control1; 1700*4882a593Smuzhiyun /* 0x0314 AFE_DFX_NOA_CTRL2 */ 1701*4882a593Smuzhiyun u32 afe_dfx_noa_control2; 1702*4882a593Smuzhiyun /* 0x0318 AFE_DFX_NOA_CTRL3 */ 1703*4882a593Smuzhiyun u32 afe_dfx_noa_control3; 1704*4882a593Smuzhiyun /* 0x031c AFE_DFX_NOA_CTRL4 */ 1705*4882a593Smuzhiyun u32 afe_dfx_noa_control4; 1706*4882a593Smuzhiyun /* 0x0320 AFE_DFX_NOA_CTRL5 */ 1707*4882a593Smuzhiyun u32 afe_dfx_noa_control5; 1708*4882a593Smuzhiyun /* 0x0324 AFE_DFX_NOA_CTRL6 */ 1709*4882a593Smuzhiyun u32 afe_dfx_noa_control6; 1710*4882a593Smuzhiyun /* 0x0328 AFE_DFX_NOA_CTRL7 */ 1711*4882a593Smuzhiyun u32 afe_dfx_noa_control7; 1712*4882a593Smuzhiyun /* 0x032c-0x07fc */ 1713*4882a593Smuzhiyun u32 reserved_032c_07fc[0x135]; 1714*4882a593Smuzhiyun 1715*4882a593Smuzhiyun /* 0x0800-0x0bfc */ 1716*4882a593Smuzhiyun struct scu_afe_transceiver scu_afe_xcvr[4]; 1717*4882a593Smuzhiyun 1718*4882a593Smuzhiyun /* 0x0c00-0x0ffc */ 1719*4882a593Smuzhiyun u32 reserved_0c00_0ffc[0x0100]; 1720*4882a593Smuzhiyun }; 1721*4882a593Smuzhiyun 1722*4882a593Smuzhiyun struct scu_protocol_engine_group_registers { 1723*4882a593Smuzhiyun u32 table[0xE0]; 1724*4882a593Smuzhiyun }; 1725*4882a593Smuzhiyun 1726*4882a593Smuzhiyun 1727*4882a593Smuzhiyun struct scu_viit_iit { 1728*4882a593Smuzhiyun u32 table[256]; 1729*4882a593Smuzhiyun }; 1730*4882a593Smuzhiyun 1731*4882a593Smuzhiyun /** 1732*4882a593Smuzhiyun * Placeholder for the ZONE Partition Table information ZONING will not be 1733*4882a593Smuzhiyun * included in the 1.1 release. 1734*4882a593Smuzhiyun * 1735*4882a593Smuzhiyun * 1736*4882a593Smuzhiyun */ 1737*4882a593Smuzhiyun struct scu_zone_partition_table { 1738*4882a593Smuzhiyun u32 table[2048]; 1739*4882a593Smuzhiyun }; 1740*4882a593Smuzhiyun 1741*4882a593Smuzhiyun /** 1742*4882a593Smuzhiyun * Placeholder for the CRAM register since I am not sure if we need to 1743*4882a593Smuzhiyun * read/write to these registers as yet. 1744*4882a593Smuzhiyun * 1745*4882a593Smuzhiyun * 1746*4882a593Smuzhiyun */ 1747*4882a593Smuzhiyun struct scu_completion_ram { 1748*4882a593Smuzhiyun u32 ram[128]; 1749*4882a593Smuzhiyun }; 1750*4882a593Smuzhiyun 1751*4882a593Smuzhiyun /** 1752*4882a593Smuzhiyun * Placeholder for the FBRAM registers since I am not sure if we need to 1753*4882a593Smuzhiyun * read/write to these registers as yet. 1754*4882a593Smuzhiyun * 1755*4882a593Smuzhiyun * 1756*4882a593Smuzhiyun */ 1757*4882a593Smuzhiyun struct scu_frame_buffer_ram { 1758*4882a593Smuzhiyun u32 ram[128]; 1759*4882a593Smuzhiyun }; 1760*4882a593Smuzhiyun 1761*4882a593Smuzhiyun #define scu_scratch_ram_SIZE_IN_DWORDS 256 1762*4882a593Smuzhiyun 1763*4882a593Smuzhiyun /** 1764*4882a593Smuzhiyun * Placeholder for the scratch RAM registers. 1765*4882a593Smuzhiyun * 1766*4882a593Smuzhiyun * 1767*4882a593Smuzhiyun */ 1768*4882a593Smuzhiyun struct scu_scratch_ram { 1769*4882a593Smuzhiyun u32 ram[scu_scratch_ram_SIZE_IN_DWORDS]; 1770*4882a593Smuzhiyun }; 1771*4882a593Smuzhiyun 1772*4882a593Smuzhiyun /** 1773*4882a593Smuzhiyun * Placeholder since I am not yet sure what these registers are here for. 1774*4882a593Smuzhiyun * 1775*4882a593Smuzhiyun * 1776*4882a593Smuzhiyun */ 1777*4882a593Smuzhiyun struct noa_protocol_engine_partition { 1778*4882a593Smuzhiyun u32 reserved[64]; 1779*4882a593Smuzhiyun }; 1780*4882a593Smuzhiyun 1781*4882a593Smuzhiyun /** 1782*4882a593Smuzhiyun * Placeholder since I am not yet sure what these registers are here for. 1783*4882a593Smuzhiyun * 1784*4882a593Smuzhiyun * 1785*4882a593Smuzhiyun */ 1786*4882a593Smuzhiyun struct noa_hub_partition { 1787*4882a593Smuzhiyun u32 reserved[64]; 1788*4882a593Smuzhiyun }; 1789*4882a593Smuzhiyun 1790*4882a593Smuzhiyun /** 1791*4882a593Smuzhiyun * Placeholder since I am not yet sure what these registers are here for. 1792*4882a593Smuzhiyun * 1793*4882a593Smuzhiyun * 1794*4882a593Smuzhiyun */ 1795*4882a593Smuzhiyun struct noa_host_interface_partition { 1796*4882a593Smuzhiyun u32 reserved[64]; 1797*4882a593Smuzhiyun }; 1798*4882a593Smuzhiyun 1799*4882a593Smuzhiyun /** 1800*4882a593Smuzhiyun * struct transport_link_layer_pair - The SCU Hardware pairs up the TL 1801*4882a593Smuzhiyun * registers with the LL registers so we must place them adjcent to make the 1802*4882a593Smuzhiyun * array of registers in the PEG. 1803*4882a593Smuzhiyun * 1804*4882a593Smuzhiyun * 1805*4882a593Smuzhiyun */ 1806*4882a593Smuzhiyun struct transport_link_layer_pair { 1807*4882a593Smuzhiyun struct scu_transport_layer_registers tl; 1808*4882a593Smuzhiyun struct scu_link_layer_registers ll; 1809*4882a593Smuzhiyun }; 1810*4882a593Smuzhiyun 1811*4882a593Smuzhiyun /** 1812*4882a593Smuzhiyun * struct scu_peg_registers - SCU Protocol Engine Memory mapped register space. 1813*4882a593Smuzhiyun * These registers are unique to each protocol engine group. There can be 1814*4882a593Smuzhiyun * at most two PEG for a single SCU part. 1815*4882a593Smuzhiyun * 1816*4882a593Smuzhiyun * 1817*4882a593Smuzhiyun */ 1818*4882a593Smuzhiyun struct scu_peg_registers { 1819*4882a593Smuzhiyun struct transport_link_layer_pair pe[4]; 1820*4882a593Smuzhiyun struct scu_port_task_scheduler_group_registers ptsg; 1821*4882a593Smuzhiyun struct scu_protocol_engine_group_registers peg; 1822*4882a593Smuzhiyun struct scu_sgpio_registers sgpio; 1823*4882a593Smuzhiyun u32 reserved_01500_1BFF[0x1C0]; 1824*4882a593Smuzhiyun struct scu_viit_entry viit[64]; 1825*4882a593Smuzhiyun struct scu_zone_partition_table zpt0; 1826*4882a593Smuzhiyun struct scu_zone_partition_table zpt1; 1827*4882a593Smuzhiyun }; 1828*4882a593Smuzhiyun 1829*4882a593Smuzhiyun /** 1830*4882a593Smuzhiyun * struct scu_registers - SCU registers including both PEG registers if we turn 1831*4882a593Smuzhiyun * on that compile option. All of these registers are in the memory mapped 1832*4882a593Smuzhiyun * space returned from BAR1. 1833*4882a593Smuzhiyun * 1834*4882a593Smuzhiyun * 1835*4882a593Smuzhiyun */ 1836*4882a593Smuzhiyun struct scu_registers { 1837*4882a593Smuzhiyun /* 0x0000 - PEG 0 */ 1838*4882a593Smuzhiyun struct scu_peg_registers peg0; 1839*4882a593Smuzhiyun 1840*4882a593Smuzhiyun /* 0x6000 - SDMA and Miscellaneous */ 1841*4882a593Smuzhiyun struct scu_sdma_registers sdma; 1842*4882a593Smuzhiyun struct scu_completion_ram cram; 1843*4882a593Smuzhiyun struct scu_frame_buffer_ram fbram; 1844*4882a593Smuzhiyun u32 reserved_6800_69FF[0x80]; 1845*4882a593Smuzhiyun struct noa_protocol_engine_partition noa_pe; 1846*4882a593Smuzhiyun struct noa_hub_partition noa_hub; 1847*4882a593Smuzhiyun struct noa_host_interface_partition noa_if; 1848*4882a593Smuzhiyun u32 reserved_6d00_7fff[0x4c0]; 1849*4882a593Smuzhiyun 1850*4882a593Smuzhiyun /* 0x8000 - PEG 1 */ 1851*4882a593Smuzhiyun struct scu_peg_registers peg1; 1852*4882a593Smuzhiyun 1853*4882a593Smuzhiyun /* 0xE000 - AFE Registers */ 1854*4882a593Smuzhiyun struct scu_afe_registers afe; 1855*4882a593Smuzhiyun 1856*4882a593Smuzhiyun /* 0xF000 - reserved */ 1857*4882a593Smuzhiyun u32 reserved_f000_211fff[0x80c00]; 1858*4882a593Smuzhiyun 1859*4882a593Smuzhiyun /* 0x212000 - scratch RAM */ 1860*4882a593Smuzhiyun struct scu_scratch_ram scratch_ram; 1861*4882a593Smuzhiyun }; 1862*4882a593Smuzhiyun 1863*4882a593Smuzhiyun #endif /* _SCU_REGISTERS_HEADER_ */ 1864