163a3a15fSDan Williams /* 263a3a15fSDan Williams * This file is provided under a dual BSD/GPLv2 license. When using or 363a3a15fSDan Williams * redistributing this file, you may do so under either license. 463a3a15fSDan Williams * 563a3a15fSDan Williams * GPL LICENSE SUMMARY 663a3a15fSDan Williams * 763a3a15fSDan Williams * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 863a3a15fSDan Williams * 963a3a15fSDan Williams * This program is free software; you can redistribute it and/or modify 1063a3a15fSDan Williams * it under the terms of version 2 of the GNU General Public License as 1163a3a15fSDan Williams * published by the Free Software Foundation. 1263a3a15fSDan Williams * 1363a3a15fSDan Williams * This program is distributed in the hope that it will be useful, but 1463a3a15fSDan Williams * WITHOUT ANY WARRANTY; without even the implied warranty of 1563a3a15fSDan Williams * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1663a3a15fSDan Williams * General Public License for more details. 1763a3a15fSDan Williams * 1863a3a15fSDan Williams * You should have received a copy of the GNU General Public License 1963a3a15fSDan Williams * along with this program; if not, write to the Free Software 2063a3a15fSDan Williams * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 2163a3a15fSDan Williams * The full GNU General Public License is included in this distribution 2263a3a15fSDan Williams * in the file called LICENSE.GPL. 2363a3a15fSDan Williams * 2463a3a15fSDan Williams * BSD LICENSE 2563a3a15fSDan Williams * 2663a3a15fSDan Williams * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 2763a3a15fSDan Williams * All rights reserved. 2863a3a15fSDan Williams * 2963a3a15fSDan Williams * Redistribution and use in source and binary forms, with or without 3063a3a15fSDan Williams * modification, are permitted provided that the following conditions 3163a3a15fSDan Williams * are met: 3263a3a15fSDan Williams * 3363a3a15fSDan Williams * * Redistributions of source code must retain the above copyright 3463a3a15fSDan Williams * notice, this list of conditions and the following disclaimer. 3563a3a15fSDan Williams * * Redistributions in binary form must reproduce the above copyright 3663a3a15fSDan Williams * notice, this list of conditions and the following disclaimer in 3763a3a15fSDan Williams * the documentation and/or other materials provided with the 3863a3a15fSDan Williams * distribution. 3963a3a15fSDan Williams * * Neither the name of Intel Corporation nor the names of its 4063a3a15fSDan Williams * contributors may be used to endorse or promote products derived 4163a3a15fSDan Williams * from this software without specific prior written permission. 4263a3a15fSDan Williams * 4363a3a15fSDan Williams * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 4463a3a15fSDan Williams * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 4563a3a15fSDan Williams * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 4663a3a15fSDan Williams * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 4763a3a15fSDan Williams * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 4863a3a15fSDan Williams * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 4963a3a15fSDan Williams * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 5063a3a15fSDan Williams * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 5163a3a15fSDan Williams * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 5263a3a15fSDan Williams * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 5363a3a15fSDan Williams * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 5463a3a15fSDan Williams */ 5563a3a15fSDan Williams 5663a3a15fSDan Williams #ifndef _SCU_REGISTERS_H_ 5763a3a15fSDan Williams #define _SCU_REGISTERS_H_ 5863a3a15fSDan Williams 5963a3a15fSDan Williams /** 6063a3a15fSDan Williams * This file contains the constants and structures for the SCU memory mapped 6163a3a15fSDan Williams * registers. 6263a3a15fSDan Williams * 6363a3a15fSDan Williams * 6463a3a15fSDan Williams */ 6563a3a15fSDan Williams 6663a3a15fSDan Williams #define SCU_VIIT_ENTRY_ID_MASK (0xC0000000) 6763a3a15fSDan Williams #define SCU_VIIT_ENTRY_ID_SHIFT (30) 6863a3a15fSDan Williams 6963a3a15fSDan Williams #define SCU_VIIT_ENTRY_FUNCTION_MASK (0x0FF00000) 7063a3a15fSDan Williams #define SCU_VIIT_ENTRY_FUNCTION_SHIFT (20) 7163a3a15fSDan Williams 7263a3a15fSDan Williams #define SCU_VIIT_ENTRY_IPPTMODE_MASK (0x0001F800) 7363a3a15fSDan Williams #define SCU_VIIT_ENTRY_IPPTMODE_SHIFT (12) 7463a3a15fSDan Williams 7563a3a15fSDan Williams #define SCU_VIIT_ENTRY_LPVIE_MASK (0x00000F00) 7663a3a15fSDan Williams #define SCU_VIIT_ENTRY_LPVIE_SHIFT (8) 7763a3a15fSDan Williams 7863a3a15fSDan Williams #define SCU_VIIT_ENTRY_STATUS_MASK (0x000000FF) 7963a3a15fSDan Williams #define SCU_VIIT_ENTRY_STATUS_SHIFT (0) 8063a3a15fSDan Williams 8163a3a15fSDan Williams #define SCU_VIIT_ENTRY_ID_INVALID (0 << SCU_VIIT_ENTRY_ID_SHIFT) 8263a3a15fSDan Williams #define SCU_VIIT_ENTRY_ID_VIIT (1 << SCU_VIIT_ENTRY_ID_SHIFT) 8363a3a15fSDan Williams #define SCU_VIIT_ENTRY_ID_IIT (2 << SCU_VIIT_ENTRY_ID_SHIFT) 8463a3a15fSDan Williams #define SCU_VIIT_ENTRY_ID_VIRT_EXP (3 << SCU_VIIT_ENTRY_ID_SHIFT) 8563a3a15fSDan Williams 8663a3a15fSDan Williams #define SCU_VIIT_IPPT_SSP_INITIATOR (0x01 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 8763a3a15fSDan Williams #define SCU_VIIT_IPPT_SMP_INITIATOR (0x02 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 8863a3a15fSDan Williams #define SCU_VIIT_IPPT_STP_INITIATOR (0x04 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 8963a3a15fSDan Williams #define SCU_VIIT_IPPT_INITIATOR \ 9063a3a15fSDan Williams (\ 9163a3a15fSDan Williams SCU_VIIT_IPPT_SSP_INITIATOR \ 9263a3a15fSDan Williams | SCU_VIIT_IPPT_SMP_INITIATOR \ 9363a3a15fSDan Williams | SCU_VIIT_IPPT_STP_INITIATOR \ 9463a3a15fSDan Williams ) 9563a3a15fSDan Williams 9663a3a15fSDan Williams #define SCU_VIIT_STATUS_RNC_VALID (0x01 << SCU_VIIT_ENTRY_STATUS_SHIFT) 9763a3a15fSDan Williams #define SCU_VIIT_STATUS_ADDRESS_VALID (0x02 << SCU_VIIT_ENTRY_STATUS_SHIFT) 9863a3a15fSDan Williams #define SCU_VIIT_STATUS_RNI_VALID (0x04 << SCU_VIIT_ENTRY_STATUS_SHIFT) 9963a3a15fSDan Williams #define SCU_VIIT_STATUS_ALL_VALID \ 10063a3a15fSDan Williams (\ 10163a3a15fSDan Williams SCU_VIIT_STATUS_RNC_VALID \ 10263a3a15fSDan Williams | SCU_VIIT_STATUS_ADDRESS_VALID \ 10363a3a15fSDan Williams | SCU_VIIT_STATUS_RNI_VALID \ 10463a3a15fSDan Williams ) 10563a3a15fSDan Williams 10663a3a15fSDan Williams #define SCU_VIIT_IPPT_SMP_TARGET (0x10 << SCU_VIIT_ENTRY_IPPTMODE_SHIFT) 10763a3a15fSDan Williams 10863a3a15fSDan Williams /** 10963a3a15fSDan Williams * struct scu_viit_entry - This is the SCU Virtual Initiator Table Entry 11063a3a15fSDan Williams * 11163a3a15fSDan Williams * 11263a3a15fSDan Williams */ 11363a3a15fSDan Williams struct scu_viit_entry { 11463a3a15fSDan Williams /** 11563a3a15fSDan Williams * This must be encoded as to the type of initiator that is being constructed 11663a3a15fSDan Williams * for this port. 11763a3a15fSDan Williams */ 11863a3a15fSDan Williams u32 status; 11963a3a15fSDan Williams 12063a3a15fSDan Williams /** 12163a3a15fSDan Williams * Virtual initiator high SAS Address 12263a3a15fSDan Williams */ 12363a3a15fSDan Williams u32 initiator_sas_address_hi; 12463a3a15fSDan Williams 12563a3a15fSDan Williams /** 12663a3a15fSDan Williams * Virtual initiator low SAS Address 12763a3a15fSDan Williams */ 12863a3a15fSDan Williams u32 initiator_sas_address_lo; 12963a3a15fSDan Williams 13063a3a15fSDan Williams /** 13163a3a15fSDan Williams * This must be 0 13263a3a15fSDan Williams */ 13363a3a15fSDan Williams u32 reserved; 13463a3a15fSDan Williams 13563a3a15fSDan Williams }; 13663a3a15fSDan Williams 13763a3a15fSDan Williams 13863a3a15fSDan Williams /* IIT Status Defines */ 13963a3a15fSDan Williams #define SCU_IIT_ENTRY_ID_MASK (0xC0000000) 14063a3a15fSDan Williams #define SCU_IIT_ENTRY_ID_SHIFT (30) 14163a3a15fSDan Williams 14263a3a15fSDan Williams #define SCU_IIT_ENTRY_STATUS_UPDATE_MASK (0x20000000) 14363a3a15fSDan Williams #define SCU_IIT_ENTRY_STATUS_UPDATE_SHIFT (29) 14463a3a15fSDan Williams 14563a3a15fSDan Williams #define SCU_IIT_ENTRY_LPI_MASK (0x00000F00) 14663a3a15fSDan Williams #define SCU_IIT_ENTRY_LPI_SHIFT (8) 14763a3a15fSDan Williams 14863a3a15fSDan Williams #define SCU_IIT_ENTRY_STATUS_MASK (0x000000FF) 14963a3a15fSDan Williams #define SCU_IIT_ENTRY_STATUS_SHIFT (0) 15063a3a15fSDan Williams 15163a3a15fSDan Williams /* IIT Remote Initiator Defines */ 15263a3a15fSDan Williams #define SCU_IIT_ENTRY_REMOTE_TAG_MASK (0x0000FFFF) 15363a3a15fSDan Williams #define SCU_IIT_ENTRY_REMOTE_TAG_SHIFT (0) 15463a3a15fSDan Williams 15563a3a15fSDan Williams #define SCU_IIT_ENTRY_REMOTE_RNC_MASK (0x0FFF0000) 15663a3a15fSDan Williams #define SCU_IIT_ENTRY_REMOTE_RNC_SHIFT (16) 15763a3a15fSDan Williams 15863a3a15fSDan Williams #define SCU_IIT_ENTRY_ID_INVALID (0 << SCU_IIT_ENTRY_ID_SHIFT) 15963a3a15fSDan Williams #define SCU_IIT_ENTRY_ID_VIIT (1 << SCU_IIT_ENTRY_ID_SHIFT) 16063a3a15fSDan Williams #define SCU_IIT_ENTRY_ID_IIT (2 << SCU_IIT_ENTRY_ID_SHIFT) 16163a3a15fSDan Williams #define SCU_IIT_ENTRY_ID_VIRT_EXP (3 << SCU_IIT_ENTRY_ID_SHIFT) 16263a3a15fSDan Williams 16363a3a15fSDan Williams /** 16463a3a15fSDan Williams * struct scu_iit_entry - This will be implemented later when we support 16563a3a15fSDan Williams * virtual functions 16663a3a15fSDan Williams * 16763a3a15fSDan Williams * 16863a3a15fSDan Williams */ 16963a3a15fSDan Williams struct scu_iit_entry { 17063a3a15fSDan Williams u32 status; 17163a3a15fSDan Williams u32 remote_initiator_sas_address_hi; 17263a3a15fSDan Williams u32 remote_initiator_sas_address_lo; 17363a3a15fSDan Williams u32 remote_initiator; 17463a3a15fSDan Williams 17563a3a15fSDan Williams }; 17663a3a15fSDan Williams 17763a3a15fSDan Williams /* Generate a value for an SCU register */ 17863a3a15fSDan Williams #define SCU_GEN_VALUE(name, value) \ 17963a3a15fSDan Williams (((value) << name ## _SHIFT) & (name ## _MASK)) 18063a3a15fSDan Williams 18163a3a15fSDan Williams /* 18263a3a15fSDan Williams * Generate a bit value for an SCU register 18363a3a15fSDan Williams * Make sure that the register MASK is just a single bit */ 18463a3a15fSDan Williams #define SCU_GEN_BIT(name) \ 18563a3a15fSDan Williams SCU_GEN_VALUE(name, ((u32)1)) 18663a3a15fSDan Williams 18763a3a15fSDan Williams #define SCU_SET_BIT(name, reg_value) \ 18863a3a15fSDan Williams ((reg_value) | SCU_GEN_BIT(name)) 18963a3a15fSDan Williams 19063a3a15fSDan Williams #define SCU_CLEAR_BIT(name, reg_value) \ 19163a3a15fSDan Williams ((reg_value)$ ~(SCU_GEN_BIT(name))) 19263a3a15fSDan Williams 19363a3a15fSDan Williams /* 19463a3a15fSDan Williams * ***************************************************************************** 19563a3a15fSDan Williams * Unions for bitfield definitions of SCU Registers 19663a3a15fSDan Williams * SMU Post Context Port 19763a3a15fSDan Williams * ***************************************************************************** */ 19863a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_CONTEXT_INDEX_SHIFT (0) 19963a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_CONTEXT_INDEX_MASK (0x00000FFF) 20063a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_LOGICAL_PORT_INDEX_SHIFT (12) 20163a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_LOGICAL_PORT_INDEX_MASK (0x0000F000) 20263a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_PROTOCOL_ENGINE_SHIFT (16) 20363a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_PROTOCOL_ENGINE_MASK (0x00030000) 20463a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_COMMAND_CONTEXT_SHIFT (18) 20563a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_COMMAND_CONTEXT_MASK (0x00FC0000) 20663a3a15fSDan Williams #define SMU_POST_CONTEXT_PORT_RESERVED_MASK (0xFF000000) 20763a3a15fSDan Williams 20863a3a15fSDan Williams #define SMU_PCP_GEN_VAL(name, value) \ 20963a3a15fSDan Williams SCU_GEN_VALUE(SMU_POST_CONTEXT_PORT_ ## name, value) 21063a3a15fSDan Williams 21163a3a15fSDan Williams /* ***************************************************************************** */ 21263a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_COMPLETION_SHIFT (31) 21363a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_COMPLETION_MASK (0x80000000) 21463a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_QUEUE_SUSPEND_SHIFT (1) 21563a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_QUEUE_SUSPEND_MASK (0x00000002) 21663a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_QUEUE_ERROR_SHIFT (0) 21763a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_QUEUE_ERROR_MASK (0x00000001) 21863a3a15fSDan Williams #define SMU_INTERRUPT_STATUS_RESERVED_MASK (0x7FFFFFFC) 21963a3a15fSDan Williams 22063a3a15fSDan Williams #define SMU_ISR_GEN_BIT(name) \ 22163a3a15fSDan Williams SCU_GEN_BIT(SMU_INTERRUPT_STATUS_ ## name) 22263a3a15fSDan Williams 22363a3a15fSDan Williams #define SMU_ISR_QUEUE_ERROR SMU_ISR_GEN_BIT(QUEUE_ERROR) 22463a3a15fSDan Williams #define SMU_ISR_QUEUE_SUSPEND SMU_ISR_GEN_BIT(QUEUE_SUSPEND) 22563a3a15fSDan Williams #define SMU_ISR_COMPLETION SMU_ISR_GEN_BIT(COMPLETION) 22663a3a15fSDan Williams 22763a3a15fSDan Williams /* ***************************************************************************** */ 22863a3a15fSDan Williams #define SMU_INTERRUPT_MASK_COMPLETION_SHIFT (31) 22963a3a15fSDan Williams #define SMU_INTERRUPT_MASK_COMPLETION_MASK (0x80000000) 23063a3a15fSDan Williams #define SMU_INTERRUPT_MASK_QUEUE_SUSPEND_SHIFT (1) 23163a3a15fSDan Williams #define SMU_INTERRUPT_MASK_QUEUE_SUSPEND_MASK (0x00000002) 23263a3a15fSDan Williams #define SMU_INTERRUPT_MASK_QUEUE_ERROR_SHIFT (0) 23363a3a15fSDan Williams #define SMU_INTERRUPT_MASK_QUEUE_ERROR_MASK (0x00000001) 23463a3a15fSDan Williams #define SMU_INTERRUPT_MASK_RESERVED_MASK (0x7FFFFFFC) 23563a3a15fSDan Williams 23663a3a15fSDan Williams #define SMU_IMR_GEN_BIT(name) \ 23763a3a15fSDan Williams SCU_GEN_BIT(SMU_INTERRUPT_MASK_ ## name) 23863a3a15fSDan Williams 23963a3a15fSDan Williams #define SMU_IMR_QUEUE_ERROR SMU_IMR_GEN_BIT(QUEUE_ERROR) 24063a3a15fSDan Williams #define SMU_IMR_QUEUE_SUSPEND SMU_IMR_GEN_BIT(QUEUE_SUSPEND) 24163a3a15fSDan Williams #define SMU_IMR_COMPLETION SMU_IMR_GEN_BIT(COMPLETION) 24263a3a15fSDan Williams 24363a3a15fSDan Williams /* ***************************************************************************** */ 24463a3a15fSDan Williams #define SMU_INTERRUPT_COALESCING_CONTROL_TIMER_SHIFT (0) 24563a3a15fSDan Williams #define SMU_INTERRUPT_COALESCING_CONTROL_TIMER_MASK (0x0000001F) 24663a3a15fSDan Williams #define SMU_INTERRUPT_COALESCING_CONTROL_NUMBER_SHIFT (8) 24763a3a15fSDan Williams #define SMU_INTERRUPT_COALESCING_CONTROL_NUMBER_MASK (0x0000FF00) 24863a3a15fSDan Williams #define SMU_INTERRUPT_COALESCING_CONTROL_RESERVED_MASK (0xFFFF00E0) 24963a3a15fSDan Williams 25063a3a15fSDan Williams #define SMU_ICC_GEN_VAL(name, value) \ 25163a3a15fSDan Williams SCU_GEN_VALUE(SMU_INTERRUPT_COALESCING_CONTROL_ ## name, value) 25263a3a15fSDan Williams 25363a3a15fSDan Williams /* ***************************************************************************** */ 25463a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_START_SHIFT (0) 25563a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_START_MASK (0x00000FFF) 25663a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_ENDING_SHIFT (16) 25763a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_ENDING_MASK (0x0FFF0000) 25863a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_ENABLE_SHIFT (31) 25963a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_ENABLE_MASK (0x80000000) 26063a3a15fSDan Williams #define SMU_TASK_CONTEXT_RANGE_RESERVED_MASK (0x7000F000) 26163a3a15fSDan Williams 26263a3a15fSDan Williams #define SMU_TCR_GEN_VAL(name, value) \ 26363a3a15fSDan Williams SCU_GEN_VALUE(SMU_TASK_CONTEXT_RANGE_ ## name, value) 26463a3a15fSDan Williams 26563a3a15fSDan Williams #define SMU_TCR_GEN_BIT(name, value) \ 26663a3a15fSDan Williams SCU_GEN_BIT(SMU_TASK_CONTEXT_RANGE_ ## name) 26763a3a15fSDan Williams 26863a3a15fSDan Williams /* ***************************************************************************** */ 26963a3a15fSDan Williams 27063a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_POINTER_SHIFT (0) 27163a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_POINTER_MASK (0x00003FFF) 27263a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_CYCLE_BIT_SHIFT (15) 27363a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_CYCLE_BIT_MASK (0x00008000) 27463a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_EVENT_POINTER_SHIFT (16) 27563a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_EVENT_POINTER_MASK (0x03FF0000) 27663a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_EVENT_CYCLE_BIT_SHIFT (26) 27763a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_EVENT_CYCLE_BIT_MASK (0x04000000) 27863a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_PUT_RESERVED_MASK (0xF8004000) 27963a3a15fSDan Williams 28063a3a15fSDan Williams #define SMU_CQPR_GEN_VAL(name, value) \ 28163a3a15fSDan Williams SCU_GEN_VALUE(SMU_COMPLETION_QUEUE_PUT_ ## name, value) 28263a3a15fSDan Williams 28363a3a15fSDan Williams #define SMU_CQPR_GEN_BIT(name) \ 28463a3a15fSDan Williams SCU_GEN_BIT(SMU_COMPLETION_QUEUE_PUT_ ## name) 28563a3a15fSDan Williams 28663a3a15fSDan Williams /* ***************************************************************************** */ 28763a3a15fSDan Williams 28863a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_POINTER_SHIFT (0) 28963a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_POINTER_MASK (0x00003FFF) 29063a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_CYCLE_BIT_SHIFT (15) 29163a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_CYCLE_BIT_MASK (0x00008000) 29263a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_EVENT_POINTER_SHIFT (16) 29363a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_EVENT_POINTER_MASK (0x03FF0000) 29463a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_EVENT_CYCLE_BIT_SHIFT (26) 29563a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_EVENT_CYCLE_BIT_MASK (0x04000000) 29663a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_ENABLE_SHIFT (30) 29763a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_ENABLE_MASK (0x40000000) 29863a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_EVENT_ENABLE_SHIFT (31) 29963a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_EVENT_ENABLE_MASK (0x80000000) 30063a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_GET_RESERVED_MASK (0x38004000) 30163a3a15fSDan Williams 30263a3a15fSDan Williams #define SMU_CQGR_GEN_VAL(name, value) \ 30363a3a15fSDan Williams SCU_GEN_VALUE(SMU_COMPLETION_QUEUE_GET_ ## name, value) 30463a3a15fSDan Williams 30563a3a15fSDan Williams #define SMU_CQGR_GEN_BIT(name) \ 30663a3a15fSDan Williams SCU_GEN_BIT(SMU_COMPLETION_QUEUE_GET_ ## name) 30763a3a15fSDan Williams 30863a3a15fSDan Williams #define SMU_CQGR_CYCLE_BIT \ 30963a3a15fSDan Williams SMU_CQGR_GEN_BIT(CYCLE_BIT) 31063a3a15fSDan Williams 31163a3a15fSDan Williams #define SMU_CQGR_EVENT_CYCLE_BIT \ 31263a3a15fSDan Williams SMU_CQGR_GEN_BIT(EVENT_CYCLE_BIT) 31363a3a15fSDan Williams 31463a3a15fSDan Williams #define SMU_CQGR_GET_POINTER_SET(value) \ 31563a3a15fSDan Williams SMU_CQGR_GEN_VAL(POINTER, value) 31663a3a15fSDan Williams 31763a3a15fSDan Williams 31863a3a15fSDan Williams /* ***************************************************************************** */ 31963a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_CONTROL_QUEUE_LIMIT_SHIFT (0) 32063a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_CONTROL_QUEUE_LIMIT_MASK (0x00003FFF) 32163a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_CONTROL_EVENT_LIMIT_SHIFT (16) 32263a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_CONTROL_EVENT_LIMIT_MASK (0x03FF0000) 32363a3a15fSDan Williams #define SMU_COMPLETION_QUEUE_CONTROL_RESERVED_MASK (0xFC00C000) 32463a3a15fSDan Williams 32563a3a15fSDan Williams #define SMU_CQC_GEN_VAL(name, value) \ 32663a3a15fSDan Williams SCU_GEN_VALUE(SMU_COMPLETION_QUEUE_CONTROL_ ## name, value) 32763a3a15fSDan Williams 32863a3a15fSDan Williams #define SMU_CQC_QUEUE_LIMIT_SET(value) \ 32963a3a15fSDan Williams SMU_CQC_GEN_VAL(QUEUE_LIMIT, value) 33063a3a15fSDan Williams 33163a3a15fSDan Williams #define SMU_CQC_EVENT_LIMIT_SET(value) \ 33263a3a15fSDan Williams SMU_CQC_GEN_VAL(EVENT_LIMIT, value) 33363a3a15fSDan Williams 33463a3a15fSDan Williams 33563a3a15fSDan Williams /* ***************************************************************************** */ 33663a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_SHIFT (0) 33763a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_MASK (0x00000FFF) 33863a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_SHIFT (12) 33963a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_MASK (0x00007000) 34063a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_SHIFT (15) 34163a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_MASK (0x07FF8000) 34263a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_PEG_SHIFT (27) 34363a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_MAX_PEG_MASK (0x08000000) 34463a3a15fSDan Williams #define SMU_DEVICE_CONTEXT_CAPACITY_RESERVED_MASK (0xF0000000) 34563a3a15fSDan Williams 34663a3a15fSDan Williams #define SMU_DCC_GEN_VAL(name, value) \ 34763a3a15fSDan Williams SCU_GEN_VALUE(SMU_DEVICE_CONTEXT_CAPACITY_ ## name, value) 34863a3a15fSDan Williams 34963a3a15fSDan Williams #define SMU_DCC_GET_MAX_PEG(value) \ 35063a3a15fSDan Williams (\ 35163a3a15fSDan Williams ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_PEG_MASK) \ 35263a3a15fSDan Williams >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_SHIFT \ 35363a3a15fSDan Williams ) 35463a3a15fSDan Williams 35563a3a15fSDan Williams #define SMU_DCC_GET_MAX_LP(value) \ 35663a3a15fSDan Williams (\ 35763a3a15fSDan Williams ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_MASK) \ 35863a3a15fSDan Williams >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_LP_SHIFT \ 35963a3a15fSDan Williams ) 36063a3a15fSDan Williams 36163a3a15fSDan Williams #define SMU_DCC_GET_MAX_TC(value) \ 36263a3a15fSDan Williams (\ 36363a3a15fSDan Williams ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_MASK) \ 36463a3a15fSDan Williams >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_TC_SHIFT \ 36563a3a15fSDan Williams ) 36663a3a15fSDan Williams 36763a3a15fSDan Williams #define SMU_DCC_GET_MAX_RNC(value) \ 36863a3a15fSDan Williams (\ 36963a3a15fSDan Williams ((value) & SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_MASK) \ 37063a3a15fSDan Williams >> SMU_DEVICE_CONTEXT_CAPACITY_MAX_RNC_SHIFT \ 37163a3a15fSDan Williams ) 37263a3a15fSDan Williams 373e5cc6aa4SMarcin Tomczak /* ***************************************************************************** */ 374e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_IDLE_ENABLE_SHIFT (0) 375e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_IDLE_ENABLE_MASK (0x00000001) 376e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_XCLK_ENABLE_SHIFT (1) 377e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_XCLK_ENABLE_MASK (0x00000002) 378e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_TXCLK_ENABLE_SHIFT (2) 379e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_TXCLK_ENABLE_MASK (0x00000004) 380e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_REGCLK_ENABLE_SHIFT (3) 381e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_REGCLK_ENABLE_MASK (0x00000008) 382e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_IDLE_TIMEOUT_SHIFT (16) 383e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_IDLE_TIMEOUT_MASK (0x000F0000) 384e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_FORCE_IDLE_SHIFT (31) 385e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_FORCE_IDLE_MASK (0x80000000) 386e5cc6aa4SMarcin Tomczak #define SMU_CLOCK_GATING_CONTROL_RESERVED_MASK (0x7FF0FFF0) 387e5cc6aa4SMarcin Tomczak 388e5cc6aa4SMarcin Tomczak #define SMU_CGUCR_GEN_VAL(name, value) \ 389e5cc6aa4SMarcin Tomczak SCU_GEN_VALUE(SMU_CLOCK_GATING_CONTROL_##name, value) 390e5cc6aa4SMarcin Tomczak 391e5cc6aa4SMarcin Tomczak #define SMU_CGUCR_GEN_BIT(name) \ 392e5cc6aa4SMarcin Tomczak SCU_GEN_BIT(SMU_CLOCK_GATING_CONTROL_##name) 393e5cc6aa4SMarcin Tomczak 39463a3a15fSDan Williams /* -------------------------------------------------------------------------- */ 39563a3a15fSDan Williams 39663a3a15fSDan Williams #define SMU_CONTROL_STATUS_TASK_CONTEXT_RANGE_ENABLE_SHIFT (0) 39763a3a15fSDan Williams #define SMU_CONTROL_STATUS_TASK_CONTEXT_RANGE_ENABLE_MASK (0x00000001) 39863a3a15fSDan Williams #define SMU_CONTROL_STATUS_COMPLETION_BYTE_SWAP_ENABLE_SHIFT (1) 39963a3a15fSDan Williams #define SMU_CONTROL_STATUS_COMPLETION_BYTE_SWAP_ENABLE_MASK (0x00000002) 40063a3a15fSDan Williams #define SMU_CONTROL_STATUS_CONTEXT_RAM_INIT_COMPLETED_SHIFT (16) 40163a3a15fSDan Williams #define SMU_CONTROL_STATUS_CONTEXT_RAM_INIT_COMPLETED_MASK (0x00010000) 40263a3a15fSDan Williams #define SMU_CONTROL_STATUS_SCHEDULER_RAM_INIT_COMPLETED_SHIFT (17) 40363a3a15fSDan Williams #define SMU_CONTROL_STATUS_SCHEDULER_RAM_INIT_COMPLETED_MASK (0x00020000) 40463a3a15fSDan Williams #define SMU_CONTROL_STATUS_RESERVED_MASK (0xFFFCFFFC) 40563a3a15fSDan Williams 40663a3a15fSDan Williams #define SMU_SMUCSR_GEN_BIT(name) \ 40763a3a15fSDan Williams SCU_GEN_BIT(SMU_CONTROL_STATUS_ ## name) 40863a3a15fSDan Williams 40963a3a15fSDan Williams #define SMU_SMUCSR_SCHEDULER_RAM_INIT_COMPLETED \ 41063a3a15fSDan Williams (SMU_SMUCSR_GEN_BIT(SCHEDULER_RAM_INIT_COMPLETED)) 41163a3a15fSDan Williams 41263a3a15fSDan Williams #define SMU_SMUCSR_CONTEXT_RAM_INIT_COMPLETED \ 41363a3a15fSDan Williams (SMU_SMUCSR_GEN_BIT(CONTEXT_RAM_INIT_COMPLETED)) 41463a3a15fSDan Williams 41563a3a15fSDan Williams #define SCU_RAM_INIT_COMPLETED \ 41663a3a15fSDan Williams (\ 41763a3a15fSDan Williams SMU_SMUCSR_CONTEXT_RAM_INIT_COMPLETED \ 41863a3a15fSDan Williams | SMU_SMUCSR_SCHEDULER_RAM_INIT_COMPLETED \ 41963a3a15fSDan Williams ) 42063a3a15fSDan Williams 42163a3a15fSDan Williams /* -------------------------------------------------------------------------- */ 42263a3a15fSDan Williams 42363a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE0_SHIFT (0) 42463a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE0_MASK (0x00000001) 42563a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE1_SHIFT (1) 42663a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE1_MASK (0x00000002) 42763a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE2_SHIFT (2) 42863a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE2_MASK (0x00000004) 42963a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE3_SHIFT (3) 43063a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_PE3_MASK (0x00000008) 43163a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE0_SHIFT (8) 43263a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE0_MASK (0x00000100) 43363a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE1_SHIFT (9) 43463a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE1_MASK (0x00000200) 43563a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE2_SHIFT (10) 43663a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE2_MASK (0x00000400) 43763a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE3_SHIFT (11) 43863a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_PE3_MASK (0x00000800) 43963a3a15fSDan Williams 44063a3a15fSDan Williams #define SMU_RESET_PROTOCOL_ENGINE(peg, pe) \ 44163a3a15fSDan Williams ((1 << (pe)) << ((peg) * 8)) 44263a3a15fSDan Williams 44363a3a15fSDan Williams #define SMU_RESET_PEG_PROTOCOL_ENGINES(peg) \ 44463a3a15fSDan Williams (\ 44563a3a15fSDan Williams SMU_RESET_PROTOCOL_ENGINE(peg, 0) \ 44663a3a15fSDan Williams | SMU_RESET_PROTOCOL_ENGINE(peg, 1) \ 44763a3a15fSDan Williams | SMU_RESET_PROTOCOL_ENGINE(peg, 2) \ 44863a3a15fSDan Williams | SMU_RESET_PROTOCOL_ENGINE(peg, 3) \ 44963a3a15fSDan Williams ) 45063a3a15fSDan Williams 45163a3a15fSDan Williams #define SMU_RESET_ALL_PROTOCOL_ENGINES() \ 45263a3a15fSDan Williams (\ 45363a3a15fSDan Williams SMU_RESET_PEG_PROTOCOL_ENGINES(0) \ 45463a3a15fSDan Williams | SMU_RESET_PEG_PROTOCOL_ENGINES(1) \ 45563a3a15fSDan Williams ) 45663a3a15fSDan Williams 45763a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP0_SHIFT (16) 45863a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP0_MASK (0x00010000) 45963a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP2_SHIFT (17) 46063a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG0_LP2_MASK (0x00020000) 46163a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP0_SHIFT (18) 46263a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP0_MASK (0x00040000) 46363a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP2_SHIFT (19) 46463a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_WIDE_PORT_PEG1_LP2_MASK (0x00080000) 46563a3a15fSDan Williams 46663a3a15fSDan Williams #define SMU_RESET_WIDE_PORT_QUEUE(peg, wide_port) \ 46763a3a15fSDan Williams ((1 << ((wide_port) / 2)) << ((peg) * 2) << 16) 46863a3a15fSDan Williams 46963a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_SHIFT (20) 47063a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG0_MASK (0x00100000) 47163a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_SHIFT (21) 47263a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_PEG1_MASK (0x00200000) 47363a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_SCU_SHIFT (22) 47463a3a15fSDan Williams #define SMU_SOFTRESET_CONTROL_RESET_SCU_MASK (0x00400000) 47563a3a15fSDan Williams 47663a3a15fSDan Williams /* 47763a3a15fSDan Williams * It seems to make sense that if you are going to reset the protocol 47863a3a15fSDan Williams * engine group that you would also reset all of the protocol engines */ 47963a3a15fSDan Williams #define SMU_RESET_PROTOCOL_ENGINE_GROUP(peg) \ 48063a3a15fSDan Williams (\ 48163a3a15fSDan Williams (1 << ((peg) + 20)) \ 48263a3a15fSDan Williams | SMU_RESET_WIDE_PORT_QUEUE(peg, 0) \ 48363a3a15fSDan Williams | SMU_RESET_WIDE_PORT_QUEUE(peg, 1) \ 48463a3a15fSDan Williams | SMU_RESET_PEG_PROTOCOL_ENGINES(peg) \ 48563a3a15fSDan Williams ) 48663a3a15fSDan Williams 48763a3a15fSDan Williams #define SMU_RESET_ALL_PROTOCOL_ENGINE_GROUPS() \ 48863a3a15fSDan Williams (\ 48963a3a15fSDan Williams SMU_RESET_PROTOCOL_ENGINE_GROUP(0) \ 49063a3a15fSDan Williams | SMU_RESET_PROTOCOL_ENGINE_GROUP(1) \ 49163a3a15fSDan Williams ) 49263a3a15fSDan Williams 49363a3a15fSDan Williams #define SMU_RESET_SCU() (0xFFFFFFFF) 49463a3a15fSDan Williams 49563a3a15fSDan Williams 49663a3a15fSDan Williams 49763a3a15fSDan Williams /* ***************************************************************************** */ 49863a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_STARTING_SHIFT (0) 49963a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_STARTING_MASK (0x00000FFF) 50063a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_ENDING_SHIFT (16) 50163a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_ENDING_MASK (0x0FFF0000) 50263a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_RANGE_CHECK_ENABLE_SHIFT (31) 50363a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_RANGE_CHECK_ENABLE_MASK (0x80000000) 50463a3a15fSDan Williams #define SMU_TASK_CONTEXT_ASSIGNMENT_RESERVED_MASK (0x7000F000) 50563a3a15fSDan Williams 50663a3a15fSDan Williams #define SMU_TCA_GEN_VAL(name, value) \ 50763a3a15fSDan Williams SCU_GEN_VALUE(SMU_TASK_CONTEXT_ASSIGNMENT_ ## name, value) 50863a3a15fSDan Williams 50963a3a15fSDan Williams #define SMU_TCA_GEN_BIT(name) \ 51063a3a15fSDan Williams SCU_GEN_BIT(SMU_TASK_CONTEXT_ASSIGNMENT_ ## name) 51163a3a15fSDan Williams 51263a3a15fSDan Williams /* ***************************************************************************** */ 51363a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_QUEUE_SIZE_SHIFT (0) 51463a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_QUEUE_SIZE_MASK (0x00000FFF) 51563a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_RESERVED_MASK (0xFFFFF000) 51663a3a15fSDan Williams 51763a3a15fSDan Williams #define SCU_UFQC_GEN_VAL(name, value) \ 51863a3a15fSDan Williams SCU_GEN_VALUE(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_CONTROL_ ## name, value) 51963a3a15fSDan Williams 52063a3a15fSDan Williams #define SCU_UFQC_QUEUE_SIZE_SET(value) \ 52163a3a15fSDan Williams SCU_UFQC_GEN_VAL(QUEUE_SIZE, value) 52263a3a15fSDan Williams 52363a3a15fSDan Williams /* ***************************************************************************** */ 52463a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_POINTER_SHIFT (0) 52563a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_POINTER_MASK (0x00000FFF) 52663a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_CYCLE_BIT_SHIFT (12) 52763a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_CYCLE_BIT_MASK (0x00001000) 52863a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_RESERVED_MASK (0xFFFFE000) 52963a3a15fSDan Williams 53063a3a15fSDan Williams #define SCU_UFQPP_GEN_VAL(name, value) \ 53163a3a15fSDan Williams SCU_GEN_VALUE(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_ ## name, value) 53263a3a15fSDan Williams 53363a3a15fSDan Williams #define SCU_UFQPP_GEN_BIT(name) \ 53463a3a15fSDan Williams SCU_GEN_BIT(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_PUT_ ## name) 53563a3a15fSDan Williams 53663a3a15fSDan Williams /* 53763a3a15fSDan Williams * ***************************************************************************** 53863a3a15fSDan Williams * * SDMA Registers 53963a3a15fSDan Williams * ***************************************************************************** */ 54063a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_POINTER_SHIFT (0) 54163a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_POINTER_MASK (0x00000FFF) 54263a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_CYCLE_BIT_SHIFT (12) 54363a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_CYCLE_BIT_MASK (12) 54463a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ENABLE_BIT_SHIFT (31) 54563a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ENABLE_BIT_MASK (0x80000000) 54663a3a15fSDan Williams #define SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_RESERVED_MASK (0x7FFFE000) 54763a3a15fSDan Williams 54863a3a15fSDan Williams #define SCU_UFQGP_GEN_VAL(name, value) \ 54963a3a15fSDan Williams SCU_GEN_VALUE(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ ## name, value) 55063a3a15fSDan Williams 55163a3a15fSDan Williams #define SCU_UFQGP_GEN_BIT(name) \ 55263a3a15fSDan Williams SCU_GEN_BIT(SCU_SDMA_UNSOLICITED_FRAME_QUEUE_GET_ ## name) 55363a3a15fSDan Williams 55463a3a15fSDan Williams #define SCU_UFQGP_CYCLE_BIT(value) \ 55563a3a15fSDan Williams SCU_UFQGP_GEN_BIT(CYCLE_BIT, value) 55663a3a15fSDan Williams 55763a3a15fSDan Williams #define SCU_UFQGP_GET_POINTER(value) \ 55863a3a15fSDan Williams SCU_UFQGP_GEN_VALUE(POINTER, value) 55963a3a15fSDan Williams 56063a3a15fSDan Williams #define SCU_UFQGP_ENABLE(value) \ 56163a3a15fSDan Williams (SCU_UFQGP_GEN_BIT(ENABLE) | value) 56263a3a15fSDan Williams 56363a3a15fSDan Williams #define SCU_UFQGP_DISABLE(value) \ 56463a3a15fSDan Williams (~SCU_UFQGP_GEN_BIT(ENABLE) & value) 56563a3a15fSDan Williams 56663a3a15fSDan Williams #define SCU_UFQGP_VALUE(bit, value) \ 56763a3a15fSDan Williams (SCU_UFQGP_CYCLE_BIT(bit) | SCU_UFQGP_GET_POINTER(value)) 56863a3a15fSDan Williams 56963a3a15fSDan Williams /* ***************************************************************************** */ 57063a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_SHIFT (0) 57163a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_MASK (0x0000FFFF) 57263a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_SHIFT (16) 57363a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_MASK (0x00010000) 57463a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_PCI_NO_SNOOP_ENABLE_SHIFT (17) 57563a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_PCI_NO_SNOOP_ENABLE_MASK (0x00020000) 57663a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_BYTE_SWAP_SHIFT (18) 57763a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_BYTE_SWAP_MASK (0x00040000) 57863a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_SGL_FETCH_SHIFT (19) 57963a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_SGL_FETCH_MASK (0x00080000) 58063a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_RX_HEADER_RAM_WRITE_SHIFT (20) 58163a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_RX_HEADER_RAM_WRITE_MASK (0x00100000) 58263a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_UF_ADDRESS_FETCH_SHIFT (21) 58363a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_BIG_ENDIAN_CONTROL_XPI_UF_ADDRESS_FETCH_MASK (0x00200000) 58463a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_SELECT_SHIFT (22) 58563a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_ADDRESS_MODIFIER_SELECT_MASK (0x00400000) 58663a3a15fSDan Williams #define SCU_PDMA_CONFIGURATION_RESERVED_MASK (0xFF800000) 58763a3a15fSDan Williams 58863a3a15fSDan Williams #define SCU_PDMACR_GEN_VALUE(name, value) \ 58963a3a15fSDan Williams SCU_GEN_VALUE(SCU_PDMA_CONFIGURATION_ ## name, value) 59063a3a15fSDan Williams 59163a3a15fSDan Williams #define SCU_PDMACR_GEN_BIT(name) \ 59263a3a15fSDan Williams SCU_GEN_BIT(SCU_PDMA_CONFIGURATION_ ## name) 59363a3a15fSDan Williams 59463a3a15fSDan Williams #define SCU_PDMACR_BE_GEN_BIT(name) \ 59563a3a15fSDan Williams SCU_PCMACR_GEN_BIT(BIG_ENDIAN_CONTROL_ ## name) 59663a3a15fSDan Williams 59763a3a15fSDan Williams /* ***************************************************************************** */ 59863a3a15fSDan Williams #define SCU_CDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_SHIFT (8) 59963a3a15fSDan Williams #define SCU_CDMA_CONFIGURATION_PCI_RELAXED_ORDERING_ENABLE_MASK (0x00000100) 60063a3a15fSDan Williams 60163a3a15fSDan Williams #define SCU_CDMACR_GEN_BIT(name) \ 60263a3a15fSDan Williams SCU_GEN_BIT(SCU_CDMA_CONFIGURATION_ ## name) 60363a3a15fSDan Williams 60463a3a15fSDan Williams /* 60563a3a15fSDan Williams * ***************************************************************************** 60663a3a15fSDan Williams * * SCU Link Layer Registers 60763a3a15fSDan Williams * ***************************************************************************** */ 60863a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_TIMEOUT_SHIFT (0) 60963a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_TIMEOUT_MASK (0x000000FF) 61063a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_LOCK_TIME_SHIFT (8) 61163a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_LOCK_TIME_MASK (0x0000FF00) 61263a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_RATE_CHANGE_DELAY_SHIFT (16) 61363a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_RATE_CHANGE_DELAY_MASK (0x00FF0000) 61463a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_DWORD_SYNC_TIMEOUT_SHIFT (24) 61563a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_DWORD_SYNC_TIMEOUT_MASK (0xFF000000) 61663a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NECGOIATION_TIMER_VALUES_REQUIRED_MASK (0x00000000) 61763a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NECGOIATION_TIMER_VALUES_DEFAULT_MASK (0x7D00676F) 61863a3a15fSDan Williams #define SCU_LINK_LAYER_SPEED_NECGOIATION_TIMER_VALUES_RESERVED_MASK (0x00FF0000) 61963a3a15fSDan Williams 62063a3a15fSDan Williams #define SCU_SAS_SPDTOV_GEN_VALUE(name, value) \ 62163a3a15fSDan Williams SCU_GEN_VALUE(SCU_LINK_LAYER_SPEED_NEGOTIATION_TIMER_VALUES_ ## name, value) 62263a3a15fSDan Williams 62363a3a15fSDan Williams 62463a3a15fSDan Williams #define SCU_LINK_STATUS_DWORD_SYNC_AQUIRED_SHIFT (2) 62563a3a15fSDan Williams #define SCU_LINK_STATUS_DWORD_SYNC_AQUIRED_MASK (0x00000004) 62663a3a15fSDan Williams #define SCU_LINK_STATUS_TRANSMIT_PORT_SELECTION_DONE_SHIFT (4) 62763a3a15fSDan Williams #define SCU_LINK_STATUS_TRANSMIT_PORT_SELECTION_DONE_MASK (0x00000010) 62863a3a15fSDan Williams #define SCU_LINK_STATUS_RECEIVER_CREDIT_EXHAUSTED_SHIFT (5) 62963a3a15fSDan Williams #define SCU_LINK_STATUS_RECEIVER_CREDIT_EXHAUSTED_MASK (0x00000020) 63063a3a15fSDan Williams #define SCU_LINK_STATUS_RESERVED_MASK (0xFFFFFFCD) 63163a3a15fSDan Williams 63263a3a15fSDan Williams #define SCU_SAS_LLSTA_GEN_BIT(name) \ 63363a3a15fSDan Williams SCU_GEN_BIT(SCU_LINK_STATUS_ ## name) 63463a3a15fSDan Williams 63563a3a15fSDan Williams 63663a3a15fSDan Williams /* TODO: Where is the SATA_PSELTOV register? */ 63763a3a15fSDan Williams 63863a3a15fSDan Williams /* 63963a3a15fSDan Williams * ***************************************************************************** 64063a3a15fSDan Williams * * SCU SAS Maximum Arbitration Wait Time Timeout Register 64163a3a15fSDan Williams * ***************************************************************************** */ 64263a3a15fSDan Williams #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_VALUE_SHIFT (0) 64363a3a15fSDan Williams #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_VALUE_MASK (0x00007FFF) 64463a3a15fSDan Williams #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_SCALE_SHIFT (15) 64563a3a15fSDan Williams #define SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_SCALE_MASK (0x00008000) 64663a3a15fSDan Williams 64763a3a15fSDan Williams #define SCU_SAS_MAWTTOV_GEN_VALUE(name, value) \ 64863a3a15fSDan Williams SCU_GEN_VALUE(SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_ ## name, value) 64963a3a15fSDan Williams 65063a3a15fSDan Williams #define SCU_SAS_MAWTTOV_GEN_BIT(name) \ 65163a3a15fSDan Williams SCU_GEN_BIT(SCU_SAS_MAX_ARBITRATION_WAIT_TIME_TIMEOUT_ ## name) 65263a3a15fSDan Williams 65363a3a15fSDan Williams 65463a3a15fSDan Williams /* 655*ad61dd30SStephen Boyd * TODO: Where is the SAS_LNKTOV register? 65663a3a15fSDan Williams * TODO: Where is the SAS_PHYTOV register? */ 65763a3a15fSDan Williams 65863a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_TARGET_SHIFT (1) 65963a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_TARGET_MASK (0x00000002) 66063a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_TARGET_SHIFT (2) 66163a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_TARGET_MASK (0x00000004) 66263a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_TARGET_SHIFT (3) 66363a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_TARGET_MASK (0x00000008) 66463a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_DA_SATA_HOST_SHIFT (8) 66563a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_DA_SATA_HOST_MASK (0x00000100) 66663a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_INITIATOR_SHIFT (9) 66763a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SMP_INITIATOR_MASK (0x00000200) 66863a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_INITIATOR_SHIFT (10) 66963a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_STP_INITIATOR_MASK (0x00000400) 67063a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_INITIATOR_SHIFT (11) 67163a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_SSP_INITIATOR_MASK (0x00000800) 67263a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_REASON_CODE_SHIFT (16) 67363a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_REASON_CODE_MASK (0x000F0000) 67463a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_ADDRESS_FRAME_TYPE_SHIFT (24) 67563a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_ADDRESS_FRAME_TYPE_MASK (0x0F000000) 67663a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_DEVICE_TYPE_SHIFT (28) 67763a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_DEVICE_TYPE_MASK (0x70000000) 67863a3a15fSDan Williams #define SCU_SAS_TRANSMIT_IDENTIFICATION_RESERVED_MASK (0x80F0F1F1) 67963a3a15fSDan Williams 68063a3a15fSDan Williams #define SCU_SAS_TIID_GEN_VAL(name, value) \ 68163a3a15fSDan Williams SCU_GEN_VALUE(SCU_SAS_TRANSMIT_IDENTIFICATION_ ## name, value) 68263a3a15fSDan Williams 68363a3a15fSDan Williams #define SCU_SAS_TIID_GEN_BIT(name) \ 68463a3a15fSDan Williams SCU_GEN_BIT(SCU_SAS_TRANSMIT_IDENTIFICATION_ ## name) 68563a3a15fSDan Williams 68663a3a15fSDan Williams /* SAS Identify Frame PHY Identifier Register */ 68763a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_BREAK_REPLY_CAPABLE_SHIFT (16) 68863a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_BREAK_REPLY_CAPABLE_MASK (0x00010000) 68963a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_REQUESTED_INSIDE_ZPSDS_SHIFT (17) 69063a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_REQUESTED_INSIDE_ZPSDS_MASK (0x00020000) 69163a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_INSIDE_ZPSDS_PERSISTENT_SHIFT (18) 69263a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_INSIDE_ZPSDS_PERSISTENT_MASK (0x00040000) 69363a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ID_SHIFT (24) 69463a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ID_MASK (0xFF000000) 69563a3a15fSDan Williams #define SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_RESERVED_MASK (0x00F800FF) 69663a3a15fSDan Williams 69763a3a15fSDan Williams #define SCU_SAS_TIPID_GEN_VALUE(name, value) \ 69863a3a15fSDan Williams SCU_GEN_VALUE(SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ ## name, value) 69963a3a15fSDan Williams 70063a3a15fSDan Williams #define SCU_SAS_TIPID_GEN_BIT(name) \ 70163a3a15fSDan Williams SCU_GEN_BIT(SCU_LINK_LAYER_IDENTIFY_FRAME_PHY_IDENTIFIER_ ## name) 70263a3a15fSDan Williams 70363a3a15fSDan Williams 70463a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_TX_PARITY_CHECK_SHIFT (4) 70563a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_TX_PARITY_CHECK_MASK (0x00000010) 70663a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_TX_BAD_CRC_SHIFT (6) 70763a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_TX_BAD_CRC_MASK (0x00000040) 70863a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_SCRAMBLER_SHIFT (7) 70963a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_SCRAMBLER_MASK (0x00000080) 71063a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_DESCRAMBLER_SHIFT (8) 71163a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_DESCRAMBLER_MASK (0x00000100) 71263a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_CREDIT_INSERTION_SHIFT (9) 71363a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_CREDIT_INSERTION_MASK (0x00000200) 71463a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_SUSPEND_PROTOCOL_ENGINE_SHIFT (11) 71563a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_SUSPEND_PROTOCOL_ENGINE_MASK (0x00000800) 71663a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_SATA_SPINUP_HOLD_SHIFT (12) 71763a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_SATA_SPINUP_HOLD_MASK (0x00001000) 71863a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_TRANSMIT_PORT_SELECTION_SIGNAL_SHIFT (13) 71963a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_TRANSMIT_PORT_SELECTION_SIGNAL_MASK (0x00002000) 72063a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_HARD_RESET_SHIFT (14) 72163a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_HARD_RESET_MASK (0x00004000) 72263a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_OOB_ENABLE_SHIFT (15) 72363a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_OOB_ENABLE_MASK (0x00008000) 72463a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_ENABLE_FRAME_TX_INSERT_ALIGN_SHIFT (23) 72563a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_ENABLE_FRAME_TX_INSERT_ALIGN_MASK (0x00800000) 72663a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_FORWARD_IDENTIFY_FRAME_SHIFT (27) 72763a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_FORWARD_IDENTIFY_FRAME_MASK (0x08000000) 72863a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_BYTE_TRANSPOSE_STP_FRAME_SHIFT (28) 72963a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DISABLE_BYTE_TRANSPOSE_STP_FRAME_MASK (0x10000000) 73063a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_OOB_RESET_SHIFT (29) 73163a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_OOB_RESET_MASK (0x20000000) 73263a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_THREE_IAF_ENABLE_SHIFT (30) 73363a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_THREE_IAF_ENABLE_MASK (0x40000000) 73463a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_OOB_ALIGN0_ENABLE_SHIFT (31) 73563a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_OOB_ALIGN0_ENABLE_MASK (0x80000000) 73663a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_REQUIRED_MASK (0x0100000F) 73763a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_DEFAULT_MASK (0x4180100F) 73863a3a15fSDan Williams #define SCU_SAS_PHY_CONFIGURATION_RESERVED_MASK (0x00000000) 73963a3a15fSDan Williams 74063a3a15fSDan Williams #define SCU_SAS_PCFG_GEN_BIT(name) \ 74163a3a15fSDan Williams SCU_GEN_BIT(SCU_SAS_PHY_CONFIGURATION_ ## name) 74263a3a15fSDan Williams 74363a3a15fSDan Williams #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_GENERAL_SHIFT (0) 74463a3a15fSDan Williams #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_GENERAL_MASK (0x000007FF) 74563a3a15fSDan Williams #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_CONNECTED_SHIFT (16) 74663a3a15fSDan Williams #define SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_CONNECTED_MASK (0x00ff0000) 74763a3a15fSDan Williams 74863a3a15fSDan Williams #define SCU_ALIGN_INSERTION_FREQUENCY_GEN_VAL(name, value) \ 74963a3a15fSDan Williams SCU_GEN_VALUE(SCU_LINK_LAYER_ALIGN_INSERTION_FREQUENCY_##name, value) 75063a3a15fSDan Williams 75163a3a15fSDan Williams #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_COUNT_SHIFT (0) 75263a3a15fSDan Williams #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_COUNT_MASK (0x0003FFFF) 75363a3a15fSDan Williams #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ENABLE_SHIFT (31) 75463a3a15fSDan Williams #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ENABLE_MASK (0x80000000) 75563a3a15fSDan Williams #define SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_RESERVED_MASK (0x7FFC0000) 75663a3a15fSDan Williams 75763a3a15fSDan Williams #define SCU_ENSPINUP_GEN_VAL(name, value) \ 75863a3a15fSDan Williams SCU_GEN_VALUE(SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ ## name, value) 75963a3a15fSDan Williams 76063a3a15fSDan Williams #define SCU_ENSPINUP_GEN_BIT(name) \ 76163a3a15fSDan Williams SCU_GEN_BIT(SCU_LINK_LAYER_ENABLE_SPINUP_CONTROL_ ## name) 76263a3a15fSDan Williams 76363a3a15fSDan Williams 76463a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_TXSSCTYPE_SHIFT (1) 76563a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_TXSSCTYPE_MASK (0x00000002) 76663a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_RLLRATE_SHIFT (4) 76763a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_RLLRATE_MASK (0x000000F0) 76863a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO15GBPS_SHIFT (8) 76963a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO15GBPS_MASK (0x00000100) 77063a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW15GBPS_SHIFT (9) 77163a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW15GBPS_MASK (0x00000201) 77263a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO30GBPS_SHIFT (10) 77363a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO30GBPS_MASK (0x00000401) 77463a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW30GBPS_SHIFT (11) 77563a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW30GBPS_MASK (0x00000801) 77663a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO60GBPS_SHIFT (12) 77763a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SWO60GBPS_MASK (0x00001001) 77863a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW60GBPS_SHIFT (13) 77963a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_SW60GBPS_MASK (0x00002001) 78063a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_EVEN_PARITY_SHIFT (31) 78163a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_EVEN_PARITY_MASK (0x80000000) 78263a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_DEFAULT_MASK (0x00003F01) 78363a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_REQUIRED_MASK (0x00000001) 78463a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_CAPABILITIES_RESERVED_MASK (0x7FFFC00D) 78563a3a15fSDan Williams 78663a3a15fSDan Williams #define SCU_SAS_PHYCAP_GEN_VAL(name, value) \ 78763a3a15fSDan Williams SCU_GEN_VALUE(SCU_LINK_LAYER_PHY_CAPABILITIES_ ## name, value) 78863a3a15fSDan Williams 78963a3a15fSDan Williams #define SCU_SAS_PHYCAP_GEN_BIT(name) \ 79063a3a15fSDan Williams SCU_GEN_BIT(SCU_LINK_LAYER_PHY_CAPABILITIES_ ## name) 79163a3a15fSDan Williams 79263a3a15fSDan Williams 79363a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_VIRTUAL_EXPANDER_PHY_ZONE_GROUP_SHIFT (0) 79463a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_VIRTUAL_EXPANDER_PHY_ZONE_GROUP_MASK (0x000000FF) 79563a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_INSIDE_SOURCE_ZONE_GROUP_SHIFT (31) 79663a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_INSIDE_SOURCE_ZONE_GROUP_MASK (0x80000000) 79763a3a15fSDan Williams #define SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_RESERVED_MASK (0x7FFFFF00) 79863a3a15fSDan Williams 79963a3a15fSDan Williams #define SCU_PSZGCR_GEN_VAL(name, value) \ 80063a3a15fSDan Williams SCU_GEN_VALUE(SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_ ## name, value) 80163a3a15fSDan Williams 80263a3a15fSDan Williams #define SCU_PSZGCR_GEN_BIT(name) \ 80363a3a15fSDan Williams SCU_GEN_BIT(SCU_LINK_LAYER_PHY_SOURCE_ZONE_GROUP_CONTROL_ ## name) 80463a3a15fSDan Williams 80563a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_LOCKED_SHIFT (1) 80663a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_LOCKED_MASK (0x00000002) 80763a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_UPDATING_SHIFT (2) 80863a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE0_UPDATING_MASK (0x00000004) 80963a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_LOCKED_SHIFT (4) 81063a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_LOCKED_MASK (0x00000010) 81163a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_UPDATING_SHIFT (5) 81263a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZONE1_UPDATING_MASK (0x00000020) 81363a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE0_SHIFT (16) 81463a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE0_MASK (0x00030000) 81563a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE0_SHIFT (19) 81663a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE0_MASK (0x00080000) 81763a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE1_SHIFT (20) 81863a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE1_MASK (0x00300000) 81963a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE1_SHIFT (23) 82063a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE1_MASK (0x00800000) 82163a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE2_SHIFT (24) 82263a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE2_MASK (0x03000000) 82363a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE2_SHIFT (27) 82463a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE2_MASK (0x08000000) 82563a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE3_SHIFT (28) 82663a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ZPT_ASSOCIATION_PE3_MASK (0x30000000) 82763a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE3_SHIFT (31) 82863a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_AIP_ENABLE_PE3_MASK (0x80000000) 82963a3a15fSDan Williams #define SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_RESERVED_MASK (0x4444FFC9) 83063a3a15fSDan Williams 83163a3a15fSDan Williams #define SCU_PEG_SCUVZECR_GEN_VAL(name, val) \ 83263a3a15fSDan Williams SCU_GEN_VALUE(SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ ## name, val) 83363a3a15fSDan Williams 83463a3a15fSDan Williams #define SCU_PEG_SCUVZECR_GEN_BIT(name) \ 83563a3a15fSDan Williams SCU_GEN_BIT(SCU_PROTOCOL_ENGINE_GROUP_VIRTUAL_ZONING_EXPANDER_CONTROL_ ## name) 83663a3a15fSDan Williams 83763a3a15fSDan Williams 83863a3a15fSDan Williams /* 83963a3a15fSDan Williams * ***************************************************************************** 84063a3a15fSDan Williams * * Port Task Scheduler registers shift and mask values 84163a3a15fSDan Williams * ***************************************************************************** */ 84263a3a15fSDan Williams #define SCU_PTSG_CONTROL_IT_NEXUS_TIMEOUT_SHIFT (0) 84363a3a15fSDan Williams #define SCU_PTSG_CONTROL_IT_NEXUS_TIMEOUT_MASK (0x0000FFFF) 84463a3a15fSDan Williams #define SCU_PTSG_CONTROL_TASK_TIMEOUT_SHIFT (16) 84563a3a15fSDan Williams #define SCU_PTSG_CONTROL_TASK_TIMEOUT_MASK (0x00FF0000) 84663a3a15fSDan Williams #define SCU_PTSG_CONTROL_PTSG_ENABLE_SHIFT (24) 84763a3a15fSDan Williams #define SCU_PTSG_CONTROL_PTSG_ENABLE_MASK (0x01000000) 84863a3a15fSDan Williams #define SCU_PTSG_CONTROL_ETM_ENABLE_SHIFT (25) 84963a3a15fSDan Williams #define SCU_PTSG_CONTROL_ETM_ENABLE_MASK (0x02000000) 85063a3a15fSDan Williams #define SCU_PTSG_CONTROL_DEFAULT_MASK (0x00020002) 85163a3a15fSDan Williams #define SCU_PTSG_CONTROL_REQUIRED_MASK (0x00000000) 85263a3a15fSDan Williams #define SCU_PTSG_CONTROL_RESERVED_MASK (0xFC000000) 85363a3a15fSDan Williams 85463a3a15fSDan Williams #define SCU_PTSGCR_GEN_VAL(name, val) \ 85563a3a15fSDan Williams SCU_GEN_VALUE(SCU_PTSG_CONTROL_ ## name, val) 85663a3a15fSDan Williams 85763a3a15fSDan Williams #define SCU_PTSGCR_GEN_BIT(name) \ 85863a3a15fSDan Williams SCU_GEN_BIT(SCU_PTSG_CONTROL_ ## name) 85963a3a15fSDan Williams 86063a3a15fSDan Williams 86163a3a15fSDan Williams /* ***************************************************************************** */ 86263a3a15fSDan Williams #define SCU_PTSG_REAL_TIME_CLOCK_SHIFT (0) 86363a3a15fSDan Williams #define SCU_PTSG_REAL_TIME_CLOCK_MASK (0x0000FFFF) 86463a3a15fSDan Williams #define SCU_PTSG_REAL_TIME_CLOCK_RESERVED_MASK (0xFFFF0000) 86563a3a15fSDan Williams 86663a3a15fSDan Williams #define SCU_RTCR_GEN_VAL(name, val) \ 86763a3a15fSDan Williams SCU_GEN_VALUE(SCU_PTSG_ ## name, val) 86863a3a15fSDan Williams 86963a3a15fSDan Williams 87063a3a15fSDan Williams #define SCU_PTSG_REAL_TIME_CLOCK_CONTROL_PRESCALER_VALUE_SHIFT (0) 87163a3a15fSDan Williams #define SCU_PTSG_REAL_TIME_CLOCK_CONTROL_PRESCALER_VALUE_MASK (0x00FFFFFF) 87263a3a15fSDan Williams #define SCU_PTSG_REAL_TIME_CLOCK_CONTROL_RESERVED_MASK (0xFF000000) 87363a3a15fSDan Williams 87463a3a15fSDan Williams #define SCU_RTCCR_GEN_VAL(name, val) \ 87563a3a15fSDan Williams SCU_GEN_VALUE(SCU_PTSG_REAL_TIME_CLOCK_CONTROL_ ## name, val) 87663a3a15fSDan Williams 87763a3a15fSDan Williams 87863a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_SUSPEND_SHIFT (0) 87963a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_SUSPEND_MASK (0x00000001) 88063a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_ENABLE_SHIFT (1) 88163a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_ENABLE_MASK (0x00000002) 88263a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_RESERVED_MASK (0xFFFFFFFC) 88363a3a15fSDan Williams 88463a3a15fSDan Williams #define SCU_PTSxCR_GEN_BIT(name) \ 88563a3a15fSDan Williams SCU_GEN_BIT(SCU_PTSG_PORT_TASK_SCHEDULER_CONTROL_ ## name) 88663a3a15fSDan Williams 88763a3a15fSDan Williams 88863a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_NEXT_RN_VALID_SHIFT (0) 88963a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_NEXT_RN_VALID_MASK (0x00000001) 89063a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_ACTIVE_RNSC_LIST_VALID_SHIFT (1) 89163a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_ACTIVE_RNSC_LIST_VALID_MASK (0x00000002) 89263a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_PTS_SUSPENDED_SHIFT (2) 89363a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_PTS_SUSPENDED_MASK (0x00000004) 89463a3a15fSDan Williams #define SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_RESERVED_MASK (0xFFFFFFF8) 89563a3a15fSDan Williams 89663a3a15fSDan Williams #define SCU_PTSxSR_GEN_BIT(name) \ 89763a3a15fSDan Williams SCU_GEN_BIT(SCU_PTSG_PORT_TASK_SCHEDULER_STATUS_ ## name) 89863a3a15fSDan Williams 89963a3a15fSDan Williams /* 90063a3a15fSDan Williams * ***************************************************************************** 90163a3a15fSDan Williams * * SMU Registers 90263a3a15fSDan Williams * ***************************************************************************** */ 90363a3a15fSDan Williams 90463a3a15fSDan Williams /* 90563a3a15fSDan Williams * ---------------------------------------------------------------------------- 90663a3a15fSDan Williams * SMU Registers 90763a3a15fSDan Williams * These registers are based off of BAR0 90863a3a15fSDan Williams * 90963a3a15fSDan Williams * To calculate the offset for other functions use 91063a3a15fSDan Williams * BAR0 + FN# * SystemPageSize * 2 91163a3a15fSDan Williams * 91263a3a15fSDan Williams * The TCA is only accessable from FN#0 (Physical Function) and each 91363a3a15fSDan Williams * is programmed by (BAR0 + SCU_SMU_TCA_OFFSET + (FN# * 0x04)) or 91463a3a15fSDan Williams * TCA0 for FN#0 is at BAR0 + 0x0400 91563a3a15fSDan Williams * TCA1 for FN#1 is at BAR0 + 0x0404 91663a3a15fSDan Williams * etc. 91763a3a15fSDan Williams * ---------------------------------------------------------------------------- 91863a3a15fSDan Williams * Accessable to all FN#s */ 91963a3a15fSDan Williams #define SCU_SMU_PCP_OFFSET 0x0000 92063a3a15fSDan Williams #define SCU_SMU_AMR_OFFSET 0x0004 92163a3a15fSDan Williams #define SCU_SMU_ISR_OFFSET 0x0010 92263a3a15fSDan Williams #define SCU_SMU_IMR_OFFSET 0x0014 92363a3a15fSDan Williams #define SCU_SMU_ICC_OFFSET 0x0018 92463a3a15fSDan Williams #define SCU_SMU_HTTLBAR_OFFSET 0x0020 92563a3a15fSDan Williams #define SCU_SMU_HTTUBAR_OFFSET 0x0024 92663a3a15fSDan Williams #define SCU_SMU_TCR_OFFSET 0x0028 92763a3a15fSDan Williams #define SCU_SMU_CQLBAR_OFFSET 0x0030 92863a3a15fSDan Williams #define SCU_SMU_CQUBAR_OFFSET 0x0034 92963a3a15fSDan Williams #define SCU_SMU_CQPR_OFFSET 0x0040 93063a3a15fSDan Williams #define SCU_SMU_CQGR_OFFSET 0x0044 93163a3a15fSDan Williams #define SCU_SMU_CQC_OFFSET 0x0048 93263a3a15fSDan Williams /* Accessable to FN#0 only */ 93363a3a15fSDan Williams #define SCU_SMU_RNCLBAR_OFFSET 0x0080 93463a3a15fSDan Williams #define SCU_SMU_RNCUBAR_OFFSET 0x0084 93563a3a15fSDan Williams #define SCU_SMU_DCC_OFFSET 0x0090 93663a3a15fSDan Williams #define SCU_SMU_DFC_OFFSET 0x0094 93763a3a15fSDan Williams #define SCU_SMU_SMUCSR_OFFSET 0x0098 93863a3a15fSDan Williams #define SCU_SMU_SCUSRCR_OFFSET 0x009C 93963a3a15fSDan Williams #define SCU_SMU_SMAW_OFFSET 0x00A0 94063a3a15fSDan Williams #define SCU_SMU_SMDW_OFFSET 0x00A4 94163a3a15fSDan Williams /* Accessable to FN#0 only */ 94263a3a15fSDan Williams #define SCU_SMU_TCA_OFFSET 0x0400 94363a3a15fSDan Williams /* Accessable to all FN#s */ 94463a3a15fSDan Williams #define SCU_SMU_MT_MLAR0_OFFSET 0x2000 94563a3a15fSDan Williams #define SCU_SMU_MT_MUAR0_OFFSET 0x2004 94663a3a15fSDan Williams #define SCU_SMU_MT_MDR0_OFFSET 0x2008 94763a3a15fSDan Williams #define SCU_SMU_MT_VCR0_OFFSET 0x200C 94863a3a15fSDan Williams #define SCU_SMU_MT_MLAR1_OFFSET 0x2010 94963a3a15fSDan Williams #define SCU_SMU_MT_MUAR1_OFFSET 0x2014 95063a3a15fSDan Williams #define SCU_SMU_MT_MDR1_OFFSET 0x2018 95163a3a15fSDan Williams #define SCU_SMU_MT_VCR1_OFFSET 0x201C 95263a3a15fSDan Williams #define SCU_SMU_MPBA_OFFSET 0x3000 95363a3a15fSDan Williams 95463a3a15fSDan Williams /** 95563a3a15fSDan Williams * struct smu_registers - These are the SMU registers 95663a3a15fSDan Williams * 95763a3a15fSDan Williams * 95863a3a15fSDan Williams */ 95963a3a15fSDan Williams struct smu_registers { 96063a3a15fSDan Williams /* 0x0000 PCP */ 96163a3a15fSDan Williams u32 post_context_port; 96263a3a15fSDan Williams /* 0x0004 AMR */ 96363a3a15fSDan Williams u32 address_modifier; 96463a3a15fSDan Williams u32 reserved_08; 96563a3a15fSDan Williams u32 reserved_0C; 96663a3a15fSDan Williams /* 0x0010 ISR */ 96763a3a15fSDan Williams u32 interrupt_status; 96863a3a15fSDan Williams /* 0x0014 IMR */ 96963a3a15fSDan Williams u32 interrupt_mask; 97063a3a15fSDan Williams /* 0x0018 ICC */ 97163a3a15fSDan Williams u32 interrupt_coalesce_control; 97263a3a15fSDan Williams u32 reserved_1C; 97363a3a15fSDan Williams /* 0x0020 HTTLBAR */ 97463a3a15fSDan Williams u32 host_task_table_lower; 97563a3a15fSDan Williams /* 0x0024 HTTUBAR */ 97663a3a15fSDan Williams u32 host_task_table_upper; 97763a3a15fSDan Williams /* 0x0028 TCR */ 97863a3a15fSDan Williams u32 task_context_range; 97963a3a15fSDan Williams u32 reserved_2C; 98063a3a15fSDan Williams /* 0x0030 CQLBAR */ 98163a3a15fSDan Williams u32 completion_queue_lower; 98263a3a15fSDan Williams /* 0x0034 CQUBAR */ 98363a3a15fSDan Williams u32 completion_queue_upper; 98463a3a15fSDan Williams u32 reserved_38; 98563a3a15fSDan Williams u32 reserved_3C; 98663a3a15fSDan Williams /* 0x0040 CQPR */ 98763a3a15fSDan Williams u32 completion_queue_put; 98863a3a15fSDan Williams /* 0x0044 CQGR */ 98963a3a15fSDan Williams u32 completion_queue_get; 99063a3a15fSDan Williams /* 0x0048 CQC */ 99163a3a15fSDan Williams u32 completion_queue_control; 99263a3a15fSDan Williams u32 reserved_4C; 99363a3a15fSDan Williams u32 reserved_5x[4]; 99463a3a15fSDan Williams u32 reserved_6x[4]; 99563a3a15fSDan Williams u32 reserved_7x[4]; 99663a3a15fSDan Williams /* 99763a3a15fSDan Williams * Accessable to FN#0 only 99863a3a15fSDan Williams * 0x0080 RNCLBAR */ 99963a3a15fSDan Williams u32 remote_node_context_lower; 100063a3a15fSDan Williams /* 0x0084 RNCUBAR */ 100163a3a15fSDan Williams u32 remote_node_context_upper; 100263a3a15fSDan Williams u32 reserved_88; 100363a3a15fSDan Williams u32 reserved_8C; 100463a3a15fSDan Williams /* 0x0090 DCC */ 100563a3a15fSDan Williams u32 device_context_capacity; 100663a3a15fSDan Williams /* 0x0094 DFC */ 100763a3a15fSDan Williams u32 device_function_capacity; 100863a3a15fSDan Williams /* 0x0098 SMUCSR */ 100963a3a15fSDan Williams u32 control_status; 101063a3a15fSDan Williams /* 0x009C SCUSRCR */ 101163a3a15fSDan Williams u32 soft_reset_control; 101263a3a15fSDan Williams /* 0x00A0 SMAW */ 101363a3a15fSDan Williams u32 mmr_address_window; 101463a3a15fSDan Williams /* 0x00A4 SMDW */ 101563a3a15fSDan Williams u32 mmr_data_window; 1016e5cc6aa4SMarcin Tomczak /* 0x00A8 CGUCR */ 1017e5cc6aa4SMarcin Tomczak u32 clock_gating_control; 1018e5cc6aa4SMarcin Tomczak /* 0x00AC CGUPC */ 1019e5cc6aa4SMarcin Tomczak u32 clock_gating_performance; 102063a3a15fSDan Williams /* A whole bunch of reserved space */ 102163a3a15fSDan Williams u32 reserved_Bx[4]; 102263a3a15fSDan Williams u32 reserved_Cx[4]; 102363a3a15fSDan Williams u32 reserved_Dx[4]; 102463a3a15fSDan Williams u32 reserved_Ex[4]; 102563a3a15fSDan Williams u32 reserved_Fx[4]; 102663a3a15fSDan Williams u32 reserved_1xx[64]; 102763a3a15fSDan Williams u32 reserved_2xx[64]; 102863a3a15fSDan Williams u32 reserved_3xx[64]; 102963a3a15fSDan Williams /* 103063a3a15fSDan Williams * Accessable to FN#0 only 103163a3a15fSDan Williams * 0x0400 TCA */ 103263a3a15fSDan Williams u32 task_context_assignment[256]; 103363a3a15fSDan Williams /* MSI-X registers not included */ 103463a3a15fSDan Williams }; 103563a3a15fSDan Williams 103663a3a15fSDan Williams /* 103763a3a15fSDan Williams * ***************************************************************************** 103863a3a15fSDan Williams * SDMA Registers 103963a3a15fSDan Williams * ***************************************************************************** */ 104063a3a15fSDan Williams #define SCU_SDMA_BASE 0x6000 104163a3a15fSDan Williams #define SCU_SDMA_PUFATLHAR_OFFSET 0x0000 104263a3a15fSDan Williams #define SCU_SDMA_PUFATUHAR_OFFSET 0x0004 104363a3a15fSDan Williams #define SCU_SDMA_UFLHBAR_OFFSET 0x0008 104463a3a15fSDan Williams #define SCU_SDMA_UFUHBAR_OFFSET 0x000C 104563a3a15fSDan Williams #define SCU_SDMA_UFQC_OFFSET 0x0010 104663a3a15fSDan Williams #define SCU_SDMA_UFQPP_OFFSET 0x0014 104763a3a15fSDan Williams #define SCU_SDMA_UFQGP_OFFSET 0x0018 104863a3a15fSDan Williams #define SCU_SDMA_PDMACR_OFFSET 0x001C 104963a3a15fSDan Williams #define SCU_SDMA_CDMACR_OFFSET 0x0080 105063a3a15fSDan Williams 105163a3a15fSDan Williams /** 105263a3a15fSDan Williams * struct scu_sdma_registers - These are the SCU SDMA Registers 105363a3a15fSDan Williams * 105463a3a15fSDan Williams * 105563a3a15fSDan Williams */ 105663a3a15fSDan Williams struct scu_sdma_registers { 105763a3a15fSDan Williams /* 0x0000 PUFATLHAR */ 105863a3a15fSDan Williams u32 uf_address_table_lower; 105963a3a15fSDan Williams /* 0x0004 PUFATUHAR */ 106063a3a15fSDan Williams u32 uf_address_table_upper; 106163a3a15fSDan Williams /* 0x0008 UFLHBAR */ 106263a3a15fSDan Williams u32 uf_header_base_address_lower; 106363a3a15fSDan Williams /* 0x000C UFUHBAR */ 106463a3a15fSDan Williams u32 uf_header_base_address_upper; 106563a3a15fSDan Williams /* 0x0010 UFQC */ 106663a3a15fSDan Williams u32 unsolicited_frame_queue_control; 106763a3a15fSDan Williams /* 0x0014 UFQPP */ 106863a3a15fSDan Williams u32 unsolicited_frame_put_pointer; 106963a3a15fSDan Williams /* 0x0018 UFQGP */ 107063a3a15fSDan Williams u32 unsolicited_frame_get_pointer; 107163a3a15fSDan Williams /* 0x001C PDMACR */ 107263a3a15fSDan Williams u32 pdma_configuration; 107363a3a15fSDan Williams /* Reserved until offset 0x80 */ 107463a3a15fSDan Williams u32 reserved_0020_007C[0x18]; 107563a3a15fSDan Williams /* 0x0080 CDMACR */ 107663a3a15fSDan Williams u32 cdma_configuration; 107763a3a15fSDan Williams /* Remainder SDMA register space */ 107863a3a15fSDan Williams u32 reserved_0084_0400[0xDF]; 107963a3a15fSDan Williams 108063a3a15fSDan Williams }; 108163a3a15fSDan Williams 108263a3a15fSDan Williams /* 108363a3a15fSDan Williams * ***************************************************************************** 108463a3a15fSDan Williams * * SCU Link Registers 108563a3a15fSDan Williams * ***************************************************************************** */ 108663a3a15fSDan Williams #define SCU_PEG0_OFFSET 0x0000 108763a3a15fSDan Williams #define SCU_PEG1_OFFSET 0x8000 108863a3a15fSDan Williams 108963a3a15fSDan Williams #define SCU_TL0_OFFSET 0x0000 109063a3a15fSDan Williams #define SCU_TL1_OFFSET 0x0400 109163a3a15fSDan Williams #define SCU_TL2_OFFSET 0x0800 109263a3a15fSDan Williams #define SCU_TL3_OFFSET 0x0C00 109363a3a15fSDan Williams 109463a3a15fSDan Williams #define SCU_LL_OFFSET 0x0080 109563a3a15fSDan Williams #define SCU_LL0_OFFSET (SCU_TL0_OFFSET + SCU_LL_OFFSET) 109663a3a15fSDan Williams #define SCU_LL1_OFFSET (SCU_TL1_OFFSET + SCU_LL_OFFSET) 109763a3a15fSDan Williams #define SCU_LL2_OFFSET (SCU_TL2_OFFSET + SCU_LL_OFFSET) 109863a3a15fSDan Williams #define SCU_LL3_OFFSET (SCU_TL3_OFFSET + SCU_LL_OFFSET) 109963a3a15fSDan Williams 110063a3a15fSDan Williams /* Transport Layer Offsets (PEG + TL) */ 110163a3a15fSDan Williams #define SCU_TLCR_OFFSET 0x0000 110263a3a15fSDan Williams #define SCU_TLADTR_OFFSET 0x0004 110363a3a15fSDan Williams #define SCU_TLTTMR_OFFSET 0x0008 110463a3a15fSDan Williams #define SCU_TLEECR0_OFFSET 0x000C 110563a3a15fSDan Williams #define SCU_STPTLDARNI_OFFSET 0x0010 110663a3a15fSDan Williams 110763a3a15fSDan Williams 110863a3a15fSDan Williams #define SCU_TLCR_HASH_SAS_CHECKING_ENABLE_SHIFT (0) 110963a3a15fSDan Williams #define SCU_TLCR_HASH_SAS_CHECKING_ENABLE_MASK (0x00000001) 111063a3a15fSDan Williams #define SCU_TLCR_CLEAR_TCI_NCQ_MAPPING_TABLE_SHIFT (1) 111163a3a15fSDan Williams #define SCU_TLCR_CLEAR_TCI_NCQ_MAPPING_TABLE_MASK (0x00000002) 111263a3a15fSDan Williams #define SCU_TLCR_STP_WRITE_DATA_PREFETCH_SHIFT (3) 111363a3a15fSDan Williams #define SCU_TLCR_STP_WRITE_DATA_PREFETCH_MASK (0x00000008) 111463a3a15fSDan Williams #define SCU_TLCR_CMD_NAK_STATUS_CODE_SHIFT (4) 111563a3a15fSDan Williams #define SCU_TLCR_CMD_NAK_STATUS_CODE_MASK (0x00000010) 111663a3a15fSDan Williams #define SCU_TLCR_RESERVED_MASK (0xFFFFFFEB) 111763a3a15fSDan Williams 111863a3a15fSDan Williams #define SCU_TLCR_GEN_BIT(name) \ 111963a3a15fSDan Williams SCU_GEN_BIT(SCU_TLCR_ ## name) 112063a3a15fSDan Williams 112163a3a15fSDan Williams /** 112263a3a15fSDan Williams * struct scu_transport_layer_registers - These are the SCU Transport Layer 112363a3a15fSDan Williams * registers 112463a3a15fSDan Williams * 112563a3a15fSDan Williams * 112663a3a15fSDan Williams */ 112763a3a15fSDan Williams struct scu_transport_layer_registers { 112863a3a15fSDan Williams /* 0x0000 TLCR */ 112963a3a15fSDan Williams u32 control; 113063a3a15fSDan Williams /* 0x0004 TLADTR */ 113163a3a15fSDan Williams u32 arbitration_delay_timer; 113263a3a15fSDan Williams /* 0x0008 TLTTMR */ 113363a3a15fSDan Williams u32 timer_test_mode; 113463a3a15fSDan Williams /* 0x000C reserved */ 113563a3a15fSDan Williams u32 reserved_0C; 113663a3a15fSDan Williams /* 0x0010 STPTLDARNI */ 113763a3a15fSDan Williams u32 stp_rni; 113863a3a15fSDan Williams /* 0x0014 TLFEWPORCTRL */ 113963a3a15fSDan Williams u32 tlfe_wpo_read_control; 114063a3a15fSDan Williams /* 0x0018 TLFEWPORDATA */ 114163a3a15fSDan Williams u32 tlfe_wpo_read_data; 114263a3a15fSDan Williams /* 0x001C RXTLSSCSR1 */ 114363a3a15fSDan Williams u32 rxtl_single_step_control_status_1; 114463a3a15fSDan Williams /* 0x0020 RXTLSSCSR2 */ 114563a3a15fSDan Williams u32 rxtl_single_step_control_status_2; 114663a3a15fSDan Williams /* 0x0024 AWTRDDCR */ 114763a3a15fSDan Williams u32 tlfe_awt_retry_delay_debug_control; 114863a3a15fSDan Williams /* Remainder of TL memory space */ 114963a3a15fSDan Williams u32 reserved_0028_007F[0x16]; 115063a3a15fSDan Williams 115163a3a15fSDan Williams }; 115263a3a15fSDan Williams 115363a3a15fSDan Williams /* Protocol Engine Group Registers */ 115463a3a15fSDan Williams #define SCU_SCUVZECRx_OFFSET 0x1080 115563a3a15fSDan Williams 115663a3a15fSDan Williams /* Link Layer Offsets (PEG + TL + LL) */ 115763a3a15fSDan Williams #define SCU_SAS_SPDTOV_OFFSET 0x0000 115863a3a15fSDan Williams #define SCU_SAS_LLSTA_OFFSET 0x0004 115963a3a15fSDan Williams #define SCU_SATA_PSELTOV_OFFSET 0x0008 116063a3a15fSDan Williams #define SCU_SAS_TIMETOV_OFFSET 0x0010 116163a3a15fSDan Williams #define SCU_SAS_LOSTOT_OFFSET 0x0014 116263a3a15fSDan Williams #define SCU_SAS_LNKTOV_OFFSET 0x0018 116363a3a15fSDan Williams #define SCU_SAS_PHYTOV_OFFSET 0x001C 116463a3a15fSDan Williams #define SCU_SAS_AFERCNT_OFFSET 0x0020 116563a3a15fSDan Williams #define SCU_SAS_WERCNT_OFFSET 0x0024 116663a3a15fSDan Williams #define SCU_SAS_TIID_OFFSET 0x0028 116763a3a15fSDan Williams #define SCU_SAS_TIDNH_OFFSET 0x002C 116863a3a15fSDan Williams #define SCU_SAS_TIDNL_OFFSET 0x0030 116963a3a15fSDan Williams #define SCU_SAS_TISSAH_OFFSET 0x0034 117063a3a15fSDan Williams #define SCU_SAS_TISSAL_OFFSET 0x0038 117163a3a15fSDan Williams #define SCU_SAS_TIPID_OFFSET 0x003C 117263a3a15fSDan Williams #define SCU_SAS_TIRES2_OFFSET 0x0040 117363a3a15fSDan Williams #define SCU_SAS_ADRSTA_OFFSET 0x0044 117463a3a15fSDan Williams #define SCU_SAS_MAWTTOV_OFFSET 0x0048 117563a3a15fSDan Williams #define SCU_SAS_FRPLDFIL_OFFSET 0x0054 117663a3a15fSDan Williams #define SCU_SAS_RFCNT_OFFSET 0x0060 117763a3a15fSDan Williams #define SCU_SAS_TFCNT_OFFSET 0x0064 117863a3a15fSDan Williams #define SCU_SAS_RFDCNT_OFFSET 0x0068 117963a3a15fSDan Williams #define SCU_SAS_TFDCNT_OFFSET 0x006C 118063a3a15fSDan Williams #define SCU_SAS_LERCNT_OFFSET 0x0070 118163a3a15fSDan Williams #define SCU_SAS_RDISERRCNT_OFFSET 0x0074 118263a3a15fSDan Williams #define SCU_SAS_CRERCNT_OFFSET 0x0078 118363a3a15fSDan Williams #define SCU_STPCTL_OFFSET 0x007C 118463a3a15fSDan Williams #define SCU_SAS_PCFG_OFFSET 0x0080 118563a3a15fSDan Williams #define SCU_SAS_CLKSM_OFFSET 0x0084 118663a3a15fSDan Williams #define SCU_SAS_TXCOMWAKE_OFFSET 0x0088 118763a3a15fSDan Williams #define SCU_SAS_TXCOMINIT_OFFSET 0x008C 118863a3a15fSDan Williams #define SCU_SAS_TXCOMSAS_OFFSET 0x0090 118963a3a15fSDan Williams #define SCU_SAS_COMINIT_OFFSET 0x0094 119063a3a15fSDan Williams #define SCU_SAS_COMWAKE_OFFSET 0x0098 119163a3a15fSDan Williams #define SCU_SAS_COMSAS_OFFSET 0x009C 119263a3a15fSDan Williams #define SCU_SAS_SFERCNT_OFFSET 0x00A0 119363a3a15fSDan Williams #define SCU_SAS_CDFERCNT_OFFSET 0x00A4 119463a3a15fSDan Williams #define SCU_SAS_DNFERCNT_OFFSET 0x00A8 119563a3a15fSDan Williams #define SCU_SAS_PRSTERCNT_OFFSET 0x00AC 119663a3a15fSDan Williams #define SCU_SAS_CNTCTL_OFFSET 0x00B0 119763a3a15fSDan Williams #define SCU_SAS_SSPTOV_OFFSET 0x00B4 119863a3a15fSDan Williams #define SCU_FTCTL_OFFSET 0x00B8 119963a3a15fSDan Williams #define SCU_FRCTL_OFFSET 0x00BC 120063a3a15fSDan Williams #define SCU_FTWMRK_OFFSET 0x00C0 120163a3a15fSDan Williams #define SCU_ENSPINUP_OFFSET 0x00C4 120263a3a15fSDan Williams #define SCU_SAS_TRNTOV_OFFSET 0x00C8 120363a3a15fSDan Williams #define SCU_SAS_PHYCAP_OFFSET 0x00CC 120463a3a15fSDan Williams #define SCU_SAS_PHYCTL_OFFSET 0x00D0 120563a3a15fSDan Williams #define SCU_SAS_LLCTL_OFFSET 0x00D8 120663a3a15fSDan Williams #define SCU_AFE_XCVRCR_OFFSET 0x00DC 120763a3a15fSDan Williams #define SCU_AFE_LUTCR_OFFSET 0x00E0 120863a3a15fSDan Williams 1209985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_ALIGN_DETECTION_SHIFT (0UL) 1210985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_ALIGN_DETECTION_MASK (0x000000FFUL) 1211985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_HOT_PLUG_SHIFT (8UL) 1212985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_HOT_PLUG_MASK (0x0000FF00UL) 1213985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_COMSAS_DETECTION_SHIFT (16UL) 1214985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_COMSAS_DETECTION_MASK (0x00FF0000UL) 1215985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_RATE_CHANGE_SHIFT (24UL) 1216985af6f7SMarcin Tomczak #define SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_RATE_CHANGE_MASK (0xFF000000UL) 1217985af6f7SMarcin Tomczak 1218985af6f7SMarcin Tomczak #define SCU_SAS_PHYTOV_GEN_VAL(name, value) \ 1219985af6f7SMarcin Tomczak SCU_GEN_VALUE(SCU_SAS_PHY_TIMER_TIMEOUT_VALUES_##name, value) 1220985af6f7SMarcin Tomczak 122163a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_SHIFT (0) 122263a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_MASK (0x00000003) 122363a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN1 (0) 122463a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN2 (1) 122563a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_MAX_LINK_RATE_GEN3 (2) 122663a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_BROADCAST_PRIMITIVE_SHIFT (2) 122763a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_BROADCAST_PRIMITIVE_MASK (0x000003FC) 122863a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_ACTIVE_TASK_DISABLE_SHIFT (16) 122963a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_ACTIVE_TASK_DISABLE_MASK (0x00010000) 123063a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_OUTBOUND_TASK_DISABLE_SHIFT (17) 123163a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_CLOSE_NO_OUTBOUND_TASK_DISABLE_MASK (0x00020000) 123263a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_NO_OUTBOUND_TASK_TIMEOUT_SHIFT (24) 123363a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_NO_OUTBOUND_TASK_TIMEOUT_MASK (0xFF000000) 123463a3a15fSDan Williams #define SCU_SAS_LINK_LAYER_CONTROL_RESERVED (0x00FCFC00) 123563a3a15fSDan Williams 123663a3a15fSDan Williams #define SCU_SAS_LLCTL_GEN_VAL(name, value) \ 123763a3a15fSDan Williams SCU_GEN_VALUE(SCU_SAS_LINK_LAYER_CONTROL_ ## name, value) 123863a3a15fSDan Williams 123963a3a15fSDan Williams #define SCU_SAS_LLCTL_GEN_BIT(name) \ 124063a3a15fSDan Williams SCU_GEN_BIT(SCU_SAS_LINK_LAYER_CONTROL_ ## name) 124163a3a15fSDan Williams 12426119908fSAndrzej Jakowski #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_DEFAULT (0xF0) 12436119908fSAndrzej Jakowski #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_EXTENDED (0x1FF) 12446119908fSAndrzej Jakowski #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_SHIFT (0) 12456119908fSAndrzej Jakowski #define SCU_SAS_LINK_LAYER_TXCOMSAS_NEGTIME_MASK (0x3FF) 12466119908fSAndrzej Jakowski 12476119908fSAndrzej Jakowski #define SCU_SAS_LLTXCOMSAS_GEN_VAL(name, value) \ 12486119908fSAndrzej Jakowski SCU_GEN_VALUE(SCU_SAS_LINK_LAYER_TXCOMSAS_ ## name, value) 12496119908fSAndrzej Jakowski 125063a3a15fSDan Williams 125163a3a15fSDan Williams /* #define SCU_FRXHECR_DCNT_OFFSET 0x00B0 */ 125263a3a15fSDan Williams #define SCU_PSZGCR_OFFSET 0x00E4 125363a3a15fSDan Williams #define SCU_SAS_RECPHYCAP_OFFSET 0x00E8 125463a3a15fSDan Williams /* #define SCU_TX_LUTSEL_OFFSET 0x00B8 */ 125563a3a15fSDan Williams 125663a3a15fSDan Williams #define SCU_SAS_PTxC_OFFSET 0x00D4 /* Same offset as SAS_TCTSTM */ 125763a3a15fSDan Williams 125863a3a15fSDan Williams /** 125963a3a15fSDan Williams * struct scu_link_layer_registers - SCU Link Layer Registers 126063a3a15fSDan Williams * 126163a3a15fSDan Williams * 126263a3a15fSDan Williams */ 126363a3a15fSDan Williams struct scu_link_layer_registers { 126463a3a15fSDan Williams /* 0x0000 SAS_SPDTOV */ 126563a3a15fSDan Williams u32 speed_negotiation_timers; 126663a3a15fSDan Williams /* 0x0004 SAS_LLSTA */ 126763a3a15fSDan Williams u32 link_layer_status; 126863a3a15fSDan Williams /* 0x0008 SATA_PSELTOV */ 126963a3a15fSDan Williams u32 port_selector_timeout; 127063a3a15fSDan Williams u32 reserved0C; 127163a3a15fSDan Williams /* 0x0010 SAS_TIMETOV */ 127263a3a15fSDan Williams u32 timeout_unit_value; 127363a3a15fSDan Williams /* 0x0014 SAS_RCDTOV */ 127463a3a15fSDan Williams u32 rcd_timeout; 127563a3a15fSDan Williams /* 0x0018 SAS_LNKTOV */ 127663a3a15fSDan Williams u32 link_timer_timeouts; 127763a3a15fSDan Williams /* 0x001C SAS_PHYTOV */ 127863a3a15fSDan Williams u32 sas_phy_timeouts; 127963a3a15fSDan Williams /* 0x0020 SAS_AFERCNT */ 128063a3a15fSDan Williams u32 received_address_frame_error_counter; 128163a3a15fSDan Williams /* 0x0024 SAS_WERCNT */ 128263a3a15fSDan Williams u32 invalid_dword_counter; 128363a3a15fSDan Williams /* 0x0028 SAS_TIID */ 128463a3a15fSDan Williams u32 transmit_identification; 128563a3a15fSDan Williams /* 0x002C SAS_TIDNH */ 128663a3a15fSDan Williams u32 sas_device_name_high; 128763a3a15fSDan Williams /* 0x0030 SAS_TIDNL */ 128863a3a15fSDan Williams u32 sas_device_name_low; 128963a3a15fSDan Williams /* 0x0034 SAS_TISSAH */ 129063a3a15fSDan Williams u32 source_sas_address_high; 129163a3a15fSDan Williams /* 0x0038 SAS_TISSAL */ 129263a3a15fSDan Williams u32 source_sas_address_low; 129363a3a15fSDan Williams /* 0x003C SAS_TIPID */ 129463a3a15fSDan Williams u32 identify_frame_phy_id; 129563a3a15fSDan Williams /* 0x0040 SAS_TIRES2 */ 129663a3a15fSDan Williams u32 identify_frame_reserved; 129763a3a15fSDan Williams /* 0x0044 SAS_ADRSTA */ 129863a3a15fSDan Williams u32 received_address_frame; 129963a3a15fSDan Williams /* 0x0048 SAS_MAWTTOV */ 130063a3a15fSDan Williams u32 maximum_arbitration_wait_timer_timeout; 130163a3a15fSDan Williams /* 0x004C SAS_PTxC */ 130263a3a15fSDan Williams u32 transmit_primitive; 130363a3a15fSDan Williams /* 0x0050 SAS_RORES */ 130463a3a15fSDan Williams u32 error_counter_event_notification_control; 130563a3a15fSDan Williams /* 0x0054 SAS_FRPLDFIL */ 130663a3a15fSDan Williams u32 frxq_payload_fill_threshold; 130763a3a15fSDan Williams /* 0x0058 SAS_LLHANG_TOT */ 130863a3a15fSDan Williams u32 link_layer_hang_detection_timeout; 130963a3a15fSDan Williams u32 reserved_5C; 131063a3a15fSDan Williams /* 0x0060 SAS_RFCNT */ 131163a3a15fSDan Williams u32 received_frame_count; 131263a3a15fSDan Williams /* 0x0064 SAS_TFCNT */ 131363a3a15fSDan Williams u32 transmit_frame_count; 131463a3a15fSDan Williams /* 0x0068 SAS_RFDCNT */ 131563a3a15fSDan Williams u32 received_dword_count; 131663a3a15fSDan Williams /* 0x006C SAS_TFDCNT */ 131763a3a15fSDan Williams u32 transmit_dword_count; 131863a3a15fSDan Williams /* 0x0070 SAS_LERCNT */ 131963a3a15fSDan Williams u32 loss_of_sync_error_count; 132063a3a15fSDan Williams /* 0x0074 SAS_RDISERRCNT */ 132163a3a15fSDan Williams u32 running_disparity_error_count; 132263a3a15fSDan Williams /* 0x0078 SAS_CRERCNT */ 132363a3a15fSDan Williams u32 received_frame_crc_error_count; 132463a3a15fSDan Williams /* 0x007C STPCTL */ 132563a3a15fSDan Williams u32 stp_control; 132663a3a15fSDan Williams /* 0x0080 SAS_PCFG */ 132763a3a15fSDan Williams u32 phy_configuration; 132863a3a15fSDan Williams /* 0x0084 SAS_CLKSM */ 132963a3a15fSDan Williams u32 clock_skew_management; 133063a3a15fSDan Williams /* 0x0088 SAS_TXCOMWAKE */ 133163a3a15fSDan Williams u32 transmit_comwake_signal; 133263a3a15fSDan Williams /* 0x008C SAS_TXCOMINIT */ 133363a3a15fSDan Williams u32 transmit_cominit_signal; 133463a3a15fSDan Williams /* 0x0090 SAS_TXCOMSAS */ 133563a3a15fSDan Williams u32 transmit_comsas_signal; 133663a3a15fSDan Williams /* 0x0094 SAS_COMINIT */ 133763a3a15fSDan Williams u32 cominit_control; 133863a3a15fSDan Williams /* 0x0098 SAS_COMWAKE */ 133963a3a15fSDan Williams u32 comwake_control; 134063a3a15fSDan Williams /* 0x009C SAS_COMSAS */ 134163a3a15fSDan Williams u32 comsas_control; 134263a3a15fSDan Williams /* 0x00A0 SAS_SFERCNT */ 134363a3a15fSDan Williams u32 received_short_frame_count; 134463a3a15fSDan Williams /* 0x00A4 SAS_CDFERCNT */ 134563a3a15fSDan Williams u32 received_frame_without_credit_count; 134663a3a15fSDan Williams /* 0x00A8 SAS_DNFERCNT */ 134763a3a15fSDan Williams u32 received_frame_after_done_count; 134863a3a15fSDan Williams /* 0x00AC SAS_PRSTERCNT */ 134963a3a15fSDan Williams u32 phy_reset_problem_count; 135063a3a15fSDan Williams /* 0x00B0 SAS_CNTCTL */ 135163a3a15fSDan Williams u32 counter_control; 135263a3a15fSDan Williams /* 0x00B4 SAS_SSPTOV */ 135363a3a15fSDan Williams u32 ssp_timer_timeout_values; 135463a3a15fSDan Williams /* 0x00B8 FTCTL */ 135563a3a15fSDan Williams u32 ftx_control; 135663a3a15fSDan Williams /* 0x00BC FRCTL */ 135763a3a15fSDan Williams u32 frx_control; 135863a3a15fSDan Williams /* 0x00C0 FTWMRK */ 135963a3a15fSDan Williams u32 ftx_watermark; 136063a3a15fSDan Williams /* 0x00C4 ENSPINUP */ 136163a3a15fSDan Williams u32 notify_enable_spinup_control; 136263a3a15fSDan Williams /* 0x00C8 SAS_TRNTOV */ 136363a3a15fSDan Williams u32 sas_training_sequence_timer_values; 136463a3a15fSDan Williams /* 0x00CC SAS_PHYCAP */ 136563a3a15fSDan Williams u32 phy_capabilities; 136663a3a15fSDan Williams /* 0x00D0 SAS_PHYCTL */ 136763a3a15fSDan Williams u32 phy_control; 136863a3a15fSDan Williams u32 reserved_d4; 136963a3a15fSDan Williams /* 0x00D8 LLCTL */ 137063a3a15fSDan Williams u32 link_layer_control; 137163a3a15fSDan Williams /* 0x00DC AFE_XCVRCR */ 137263a3a15fSDan Williams u32 afe_xcvr_control; 137363a3a15fSDan Williams /* 0x00E0 AFE_LUTCR */ 137463a3a15fSDan Williams u32 afe_lookup_table_control; 137563a3a15fSDan Williams /* 0x00E4 PSZGCR */ 137663a3a15fSDan Williams u32 phy_source_zone_group_control; 137763a3a15fSDan Williams /* 0x00E8 SAS_RECPHYCAP */ 137863a3a15fSDan Williams u32 receive_phycap; 137963a3a15fSDan Williams u32 reserved_ec; 138063a3a15fSDan Williams /* 0x00F0 SNAFERXRSTCTL */ 138163a3a15fSDan Williams u32 speed_negotiation_afe_rx_reset_control; 138263a3a15fSDan Williams /* 0x00F4 SAS_SSIPMCTL */ 138363a3a15fSDan Williams u32 power_management_control; 138463a3a15fSDan Williams /* 0x00F8 SAS_PSPREQ_PRIM */ 138563a3a15fSDan Williams u32 sas_pm_partial_request_primitive; 138663a3a15fSDan Williams /* 0x00FC SAS_PSSREQ_PRIM */ 138763a3a15fSDan Williams u32 sas_pm_slumber_request_primitive; 138863a3a15fSDan Williams /* 0x0100 SAS_PPSACK_PRIM */ 138963a3a15fSDan Williams u32 sas_pm_ack_primitive_register; 139063a3a15fSDan Williams /* 0x0104 SAS_PSNAK_PRIM */ 139163a3a15fSDan Williams u32 sas_pm_nak_primitive_register; 139263a3a15fSDan Williams /* 0x0108 SAS_SSIPMTOV */ 139363a3a15fSDan Williams u32 sas_primitive_timeout; 139463a3a15fSDan Williams u32 reserved_10c; 139563a3a15fSDan Williams /* 0x0110 - 0x011C PLAPRDCTRLxREG */ 139663a3a15fSDan Williams u32 pla_product_control[4]; 139763a3a15fSDan Williams /* 0x0120 PLAPRDSUMREG */ 139863a3a15fSDan Williams u32 pla_product_sum; 139963a3a15fSDan Williams /* 0x0124 PLACONTROLREG */ 140063a3a15fSDan Williams u32 pla_control; 140163a3a15fSDan Williams /* Remainder of memory space 896 bytes */ 140263a3a15fSDan Williams u32 reserved_0128_037f[0x96]; 140363a3a15fSDan Williams 140463a3a15fSDan Williams }; 140563a3a15fSDan Williams 140663a3a15fSDan Williams /* 140763a3a15fSDan Williams * 0x00D4 // Same offset as SAS_TCTSTM SAS_PTxC 140863a3a15fSDan Williams * u32 primitive_transmit_control; */ 140963a3a15fSDan Williams 141063a3a15fSDan Williams /* 141163a3a15fSDan Williams * ---------------------------------------------------------------------------- 141263a3a15fSDan Williams * SGPIO 141363a3a15fSDan Williams * ---------------------------------------------------------------------------- */ 141463a3a15fSDan Williams #define SCU_SGPIO_OFFSET 0x1400 141563a3a15fSDan Williams 141663a3a15fSDan Williams /* #define SCU_SGPIO_OFFSET 0x6000 // later moves to 0x1400 see HSD 652625 */ 141763a3a15fSDan Williams #define SCU_SGPIO_SGICR_OFFSET 0x0000 141863a3a15fSDan Williams #define SCU_SGPIO_SGPBR_OFFSET 0x0004 141963a3a15fSDan Williams #define SCU_SGPIO_SGSDLR_OFFSET 0x0008 142063a3a15fSDan Williams #define SCU_SGPIO_SGSDUR_OFFSET 0x000C 142163a3a15fSDan Williams #define SCU_SGPIO_SGSIDLR_OFFSET 0x0010 142263a3a15fSDan Williams #define SCU_SGPIO_SGSIDUR_OFFSET 0x0014 142363a3a15fSDan Williams #define SCU_SGPIO_SGVSCR_OFFSET 0x0018 142463a3a15fSDan Williams /* Address from 0x0820 to 0x083C */ 142563a3a15fSDan Williams #define SCU_SGPIO_SGODSR_OFFSET 0x0020 142663a3a15fSDan Williams 142763a3a15fSDan Williams /** 142863a3a15fSDan Williams * struct scu_sgpio_registers - SCU SGPIO Registers 142963a3a15fSDan Williams * 143063a3a15fSDan Williams * 143163a3a15fSDan Williams */ 143263a3a15fSDan Williams struct scu_sgpio_registers { 143363a3a15fSDan Williams /* 0x0000 SGPIO_SGICR */ 143463a3a15fSDan Williams u32 interface_control; 143563a3a15fSDan Williams /* 0x0004 SGPIO_SGPBR */ 143663a3a15fSDan Williams u32 blink_rate; 143763a3a15fSDan Williams /* 0x0008 SGPIO_SGSDLR */ 143863a3a15fSDan Williams u32 start_drive_lower; 143963a3a15fSDan Williams /* 0x000C SGPIO_SGSDUR */ 144063a3a15fSDan Williams u32 start_drive_upper; 144163a3a15fSDan Williams /* 0x0010 SGPIO_SGSIDLR */ 144263a3a15fSDan Williams u32 serial_input_lower; 144363a3a15fSDan Williams /* 0x0014 SGPIO_SGSIDUR */ 144463a3a15fSDan Williams u32 serial_input_upper; 144563a3a15fSDan Williams /* 0x0018 SGPIO_SGVSCR */ 144663a3a15fSDan Williams u32 vendor_specific_code; 144713257cfbSDan Williams /* 0x001C Reserved */ 144813257cfbSDan Williams u32 reserved_001c; 144963a3a15fSDan Williams /* 0x0020 SGPIO_SGODSR */ 145013257cfbSDan Williams u32 output_data_select[8]; 145163a3a15fSDan Williams /* Remainder of memory space 256 bytes */ 145213257cfbSDan Williams u32 reserved_1444_14ff[0x30]; 145363a3a15fSDan Williams 145463a3a15fSDan Williams }; 145563a3a15fSDan Williams 145663a3a15fSDan Williams /* 145763a3a15fSDan Williams * ***************************************************************************** 145863a3a15fSDan Williams * * Defines for VIIT entry offsets 145963a3a15fSDan Williams * * Access additional entries by SCU_VIIT_BASE + index * 0x10 146063a3a15fSDan Williams * ***************************************************************************** */ 146163a3a15fSDan Williams #define SCU_VIIT_BASE 0x1c00 146263a3a15fSDan Williams 146363a3a15fSDan Williams struct scu_viit_registers { 146463a3a15fSDan Williams u32 registers[256]; 146563a3a15fSDan Williams }; 146663a3a15fSDan Williams 146763a3a15fSDan Williams /* 146863a3a15fSDan Williams * ***************************************************************************** 146963a3a15fSDan Williams * * SCU PORT TASK SCHEDULER REGISTERS 147063a3a15fSDan Williams * ***************************************************************************** */ 147163a3a15fSDan Williams 147263a3a15fSDan Williams #define SCU_PTSG_BASE 0x1000 147363a3a15fSDan Williams 147463a3a15fSDan Williams #define SCU_PTSG_PTSGCR_OFFSET 0x0000 147563a3a15fSDan Williams #define SCU_PTSG_RTCR_OFFSET 0x0004 147663a3a15fSDan Williams #define SCU_PTSG_RTCCR_OFFSET 0x0008 147763a3a15fSDan Williams #define SCU_PTSG_PTS0CR_OFFSET 0x0010 147863a3a15fSDan Williams #define SCU_PTSG_PTS0SR_OFFSET 0x0014 147963a3a15fSDan Williams #define SCU_PTSG_PTS1CR_OFFSET 0x0018 148063a3a15fSDan Williams #define SCU_PTSG_PTS1SR_OFFSET 0x001C 148163a3a15fSDan Williams #define SCU_PTSG_PTS2CR_OFFSET 0x0020 148263a3a15fSDan Williams #define SCU_PTSG_PTS2SR_OFFSET 0x0024 148363a3a15fSDan Williams #define SCU_PTSG_PTS3CR_OFFSET 0x0028 148463a3a15fSDan Williams #define SCU_PTSG_PTS3SR_OFFSET 0x002C 148563a3a15fSDan Williams #define SCU_PTSG_PCSPE0CR_OFFSET 0x0030 148663a3a15fSDan Williams #define SCU_PTSG_PCSPE1CR_OFFSET 0x0034 148763a3a15fSDan Williams #define SCU_PTSG_PCSPE2CR_OFFSET 0x0038 148863a3a15fSDan Williams #define SCU_PTSG_PCSPE3CR_OFFSET 0x003C 148963a3a15fSDan Williams #define SCU_PTSG_ETMTSCCR_OFFSET 0x0040 149063a3a15fSDan Williams #define SCU_PTSG_ETMRNSCCR_OFFSET 0x0044 149163a3a15fSDan Williams 149263a3a15fSDan Williams /** 149363a3a15fSDan Williams * struct scu_port_task_scheduler_registers - These are the control/stats pairs 149463a3a15fSDan Williams * for each Port Task Scheduler. 149563a3a15fSDan Williams * 149663a3a15fSDan Williams * 149763a3a15fSDan Williams */ 149863a3a15fSDan Williams struct scu_port_task_scheduler_registers { 149963a3a15fSDan Williams u32 control; 150063a3a15fSDan Williams u32 status; 150163a3a15fSDan Williams }; 150263a3a15fSDan Williams 150363a3a15fSDan Williams /** 150463a3a15fSDan Williams * struct scu_port_task_scheduler_group_registers - These are the PORT Task 150563a3a15fSDan Williams * Scheduler registers 150663a3a15fSDan Williams * 150763a3a15fSDan Williams * 150863a3a15fSDan Williams */ 150963a3a15fSDan Williams struct scu_port_task_scheduler_group_registers { 151063a3a15fSDan Williams /* 0x0000 PTSGCR */ 151163a3a15fSDan Williams u32 control; 151263a3a15fSDan Williams /* 0x0004 RTCR */ 151363a3a15fSDan Williams u32 real_time_clock; 151463a3a15fSDan Williams /* 0x0008 RTCCR */ 151563a3a15fSDan Williams u32 real_time_clock_control; 151663a3a15fSDan Williams /* 0x000C */ 151763a3a15fSDan Williams u32 reserved_0C; 151863a3a15fSDan Williams /* 151963a3a15fSDan Williams * 0x0010 PTS0CR 152063a3a15fSDan Williams * 0x0014 PTS0SR 152163a3a15fSDan Williams * 0x0018 PTS1CR 152263a3a15fSDan Williams * 0x001C PTS1SR 152363a3a15fSDan Williams * 0x0020 PTS2CR 152463a3a15fSDan Williams * 0x0024 PTS2SR 152563a3a15fSDan Williams * 0x0028 PTS3CR 152663a3a15fSDan Williams * 0x002C PTS3SR */ 152763a3a15fSDan Williams struct scu_port_task_scheduler_registers port[4]; 152863a3a15fSDan Williams /* 152963a3a15fSDan Williams * 0x0030 PCSPE0CR 153063a3a15fSDan Williams * 0x0034 PCSPE1CR 153163a3a15fSDan Williams * 0x0038 PCSPE2CR 153263a3a15fSDan Williams * 0x003C PCSPE3CR */ 153363a3a15fSDan Williams u32 protocol_engine[4]; 153463a3a15fSDan Williams /* 0x0040 ETMTSCCR */ 153563a3a15fSDan Williams u32 tc_scanning_interval_control; 153663a3a15fSDan Williams /* 0x0044 ETMRNSCCR */ 153763a3a15fSDan Williams u32 rnc_scanning_interval_control; 153863a3a15fSDan Williams /* Remainder of memory space 128 bytes */ 153963a3a15fSDan Williams u32 reserved_1048_107f[0x0E]; 154063a3a15fSDan Williams 154163a3a15fSDan Williams }; 154263a3a15fSDan Williams 154363a3a15fSDan Williams #define SCU_PTSG_SCUVZECR_OFFSET 0x003C 154463a3a15fSDan Williams 154563a3a15fSDan Williams /* 154663a3a15fSDan Williams * ***************************************************************************** 154763a3a15fSDan Williams * * AFE REGISTERS 154863a3a15fSDan Williams * ***************************************************************************** */ 154963a3a15fSDan Williams #define SCU_AFE_MMR_BASE 0xE000 155063a3a15fSDan Williams 155163a3a15fSDan Williams /* 155263a3a15fSDan Williams * AFE 0 is at offset 0x0800 155363a3a15fSDan Williams * AFE 1 is at offset 0x0900 155463a3a15fSDan Williams * AFE 2 is at offset 0x0a00 155563a3a15fSDan Williams * AFE 3 is at offset 0x0b00 */ 155663a3a15fSDan Williams struct scu_afe_transceiver { 155763a3a15fSDan Williams /* 0x0000 AFE_XCVR_CTRL0 */ 155863a3a15fSDan Williams u32 afe_xcvr_control0; 155963a3a15fSDan Williams /* 0x0004 AFE_XCVR_CTRL1 */ 156063a3a15fSDan Williams u32 afe_xcvr_control1; 156163a3a15fSDan Williams /* 0x0008 */ 156263a3a15fSDan Williams u32 reserved_0008; 156363a3a15fSDan Williams /* 0x000c afe_dfx_rx_control0 */ 156463a3a15fSDan Williams u32 afe_dfx_rx_control0; 156563a3a15fSDan Williams /* 0x0010 AFE_DFX_RX_CTRL1 */ 156663a3a15fSDan Williams u32 afe_dfx_rx_control1; 156763a3a15fSDan Williams /* 0x0014 */ 156863a3a15fSDan Williams u32 reserved_0014; 156963a3a15fSDan Williams /* 0x0018 AFE_DFX_RX_STS0 */ 157063a3a15fSDan Williams u32 afe_dfx_rx_status0; 157163a3a15fSDan Williams /* 0x001c AFE_DFX_RX_STS1 */ 157263a3a15fSDan Williams u32 afe_dfx_rx_status1; 157363a3a15fSDan Williams /* 0x0020 */ 157463a3a15fSDan Williams u32 reserved_0020; 157563a3a15fSDan Williams /* 0x0024 AFE_TX_CTRL */ 157663a3a15fSDan Williams u32 afe_tx_control; 157763a3a15fSDan Williams /* 0x0028 AFE_TX_AMP_CTRL0 */ 157863a3a15fSDan Williams u32 afe_tx_amp_control0; 157963a3a15fSDan Williams /* 0x002c AFE_TX_AMP_CTRL1 */ 158063a3a15fSDan Williams u32 afe_tx_amp_control1; 158163a3a15fSDan Williams /* 0x0030 AFE_TX_AMP_CTRL2 */ 158263a3a15fSDan Williams u32 afe_tx_amp_control2; 158363a3a15fSDan Williams /* 0x0034 AFE_TX_AMP_CTRL3 */ 158463a3a15fSDan Williams u32 afe_tx_amp_control3; 158563a3a15fSDan Williams /* 0x0038 afe_tx_ssc_control */ 158663a3a15fSDan Williams u32 afe_tx_ssc_control; 158763a3a15fSDan Williams /* 0x003c */ 158863a3a15fSDan Williams u32 reserved_003c; 158963a3a15fSDan Williams /* 0x0040 AFE_RX_SSC_CTRL0 */ 159063a3a15fSDan Williams u32 afe_rx_ssc_control0; 159163a3a15fSDan Williams /* 0x0044 AFE_RX_SSC_CTRL1 */ 159263a3a15fSDan Williams u32 afe_rx_ssc_control1; 159363a3a15fSDan Williams /* 0x0048 AFE_RX_SSC_CTRL2 */ 159463a3a15fSDan Williams u32 afe_rx_ssc_control2; 159563a3a15fSDan Williams /* 0x004c AFE_RX_EQ_STS0 */ 159663a3a15fSDan Williams u32 afe_rx_eq_status0; 159763a3a15fSDan Williams /* 0x0050 AFE_RX_EQ_STS1 */ 159863a3a15fSDan Williams u32 afe_rx_eq_status1; 159963a3a15fSDan Williams /* 0x0054 AFE_RX_CDR_STS */ 160063a3a15fSDan Williams u32 afe_rx_cdr_status; 160163a3a15fSDan Williams /* 0x0058 */ 160263a3a15fSDan Williams u32 reserved_0058; 160363a3a15fSDan Williams /* 0x005c AFE_CHAN_CTRL */ 160463a3a15fSDan Williams u32 afe_channel_control; 160563a3a15fSDan Williams /* 0x0060-0x006c */ 160663a3a15fSDan Williams u32 reserved_0060_006c[0x04]; 160763a3a15fSDan Williams /* 0x0070 AFE_XCVR_EC_STS0 */ 160863a3a15fSDan Williams u32 afe_xcvr_error_capture_status0; 160963a3a15fSDan Williams /* 0x0074 AFE_XCVR_EC_STS1 */ 161063a3a15fSDan Williams u32 afe_xcvr_error_capture_status1; 161163a3a15fSDan Williams /* 0x0078 AFE_XCVR_EC_STS2 */ 161263a3a15fSDan Williams u32 afe_xcvr_error_capture_status2; 161363a3a15fSDan Williams /* 0x007c afe_xcvr_ec_status3 */ 161463a3a15fSDan Williams u32 afe_xcvr_error_capture_status3; 161563a3a15fSDan Williams /* 0x0080 AFE_XCVR_EC_STS4 */ 161663a3a15fSDan Williams u32 afe_xcvr_error_capture_status4; 161763a3a15fSDan Williams /* 0x0084 AFE_XCVR_EC_STS5 */ 161863a3a15fSDan Williams u32 afe_xcvr_error_capture_status5; 161963a3a15fSDan Williams /* 0x0088-0x00fc */ 162063a3a15fSDan Williams u32 reserved_008c_00fc[0x1e]; 162163a3a15fSDan Williams }; 162263a3a15fSDan Williams 162363a3a15fSDan Williams /** 162463a3a15fSDan Williams * struct scu_afe_registers - AFE Regsiters 162563a3a15fSDan Williams * 162663a3a15fSDan Williams * 162763a3a15fSDan Williams */ 162863a3a15fSDan Williams /* Uaoa AFE registers */ 162963a3a15fSDan Williams struct scu_afe_registers { 163063a3a15fSDan Williams /* 0Xe000 AFE_BIAS_CTRL */ 163163a3a15fSDan Williams u32 afe_bias_control; 163263a3a15fSDan Williams u32 reserved_0004; 163363a3a15fSDan Williams /* 0x0008 AFE_PLL_CTRL0 */ 163463a3a15fSDan Williams u32 afe_pll_control0; 163563a3a15fSDan Williams /* 0x000c AFE_PLL_CTRL1 */ 163663a3a15fSDan Williams u32 afe_pll_control1; 163763a3a15fSDan Williams /* 0x0010 AFE_PLL_CTRL2 */ 163863a3a15fSDan Williams u32 afe_pll_control2; 163963a3a15fSDan Williams /* 0x0014 AFE_CB_STS */ 164063a3a15fSDan Williams u32 afe_common_block_status; 164163a3a15fSDan Williams /* 0x0018-0x007c */ 164263a3a15fSDan Williams u32 reserved_18_7c[0x1a]; 164363a3a15fSDan Williams /* 0x0080 AFE_PMSN_MCTRL0 */ 164463a3a15fSDan Williams u32 afe_pmsn_master_control0; 164563a3a15fSDan Williams /* 0x0084 AFE_PMSN_MCTRL1 */ 164663a3a15fSDan Williams u32 afe_pmsn_master_control1; 164763a3a15fSDan Williams /* 0x0088 AFE_PMSN_MCTRL2 */ 164863a3a15fSDan Williams u32 afe_pmsn_master_control2; 164963a3a15fSDan Williams /* 0x008C-0x00fc */ 165063a3a15fSDan Williams u32 reserved_008c_00fc[0x1D]; 165163a3a15fSDan Williams /* 0x0100 AFE_DFX_MST_CTRL0 */ 165263a3a15fSDan Williams u32 afe_dfx_master_control0; 165363a3a15fSDan Williams /* 0x0104 AFE_DFX_MST_CTRL1 */ 165463a3a15fSDan Williams u32 afe_dfx_master_control1; 165563a3a15fSDan Williams /* 0x0108 AFE_DFX_DCL_CTRL */ 165663a3a15fSDan Williams u32 afe_dfx_dcl_control; 165763a3a15fSDan Williams /* 0x010c AFE_DFX_DMON_CTRL */ 165863a3a15fSDan Williams u32 afe_dfx_digital_monitor_control; 165963a3a15fSDan Williams /* 0x0110 AFE_DFX_AMONP_CTRL */ 166063a3a15fSDan Williams u32 afe_dfx_analog_p_monitor_control; 166163a3a15fSDan Williams /* 0x0114 AFE_DFX_AMONN_CTRL */ 166263a3a15fSDan Williams u32 afe_dfx_analog_n_monitor_control; 166363a3a15fSDan Williams /* 0x0118 AFE_DFX_NTL_STS */ 166463a3a15fSDan Williams u32 afe_dfx_ntl_status; 166563a3a15fSDan Williams /* 0x011c AFE_DFX_FIFO_STS0 */ 166663a3a15fSDan Williams u32 afe_dfx_fifo_status0; 166763a3a15fSDan Williams /* 0x0120 AFE_DFX_FIFO_STS1 */ 166863a3a15fSDan Williams u32 afe_dfx_fifo_status1; 166963a3a15fSDan Williams /* 0x0124 AFE_DFX_MPAT_CTRL */ 167063a3a15fSDan Williams u32 afe_dfx_master_pattern_control; 167163a3a15fSDan Williams /* 0x0128 AFE_DFX_P0_CTRL */ 167263a3a15fSDan Williams u32 afe_dfx_p0_control; 167363a3a15fSDan Williams /* 0x012c-0x01a8 AFE_DFX_P0_DRx */ 167463a3a15fSDan Williams u32 afe_dfx_p0_data[32]; 167563a3a15fSDan Williams /* 0x01ac */ 167663a3a15fSDan Williams u32 reserved_01ac; 167763a3a15fSDan Williams /* 0x01b0-0x020c AFE_DFX_P0_IRx */ 167863a3a15fSDan Williams u32 afe_dfx_p0_instruction[24]; 167963a3a15fSDan Williams /* 0x0210 */ 168063a3a15fSDan Williams u32 reserved_0210; 168163a3a15fSDan Williams /* 0x0214 AFE_DFX_P1_CTRL */ 168263a3a15fSDan Williams u32 afe_dfx_p1_control; 168363a3a15fSDan Williams /* 0x0218-0x245 AFE_DFX_P1_DRx */ 168463a3a15fSDan Williams u32 afe_dfx_p1_data[16]; 168563a3a15fSDan Williams /* 0x0258-0x029c */ 168663a3a15fSDan Williams u32 reserved_0258_029c[0x12]; 168763a3a15fSDan Williams /* 0x02a0-0x02bc AFE_DFX_P1_IRx */ 168863a3a15fSDan Williams u32 afe_dfx_p1_instruction[8]; 168963a3a15fSDan Williams /* 0x02c0-0x2fc */ 169063a3a15fSDan Williams u32 reserved_02c0_02fc[0x10]; 169163a3a15fSDan Williams /* 0x0300 AFE_DFX_TX_PMSN_CTRL */ 169263a3a15fSDan Williams u32 afe_dfx_tx_pmsn_control; 169363a3a15fSDan Williams /* 0x0304 AFE_DFX_RX_PMSN_CTRL */ 169463a3a15fSDan Williams u32 afe_dfx_rx_pmsn_control; 169563a3a15fSDan Williams u32 reserved_0308; 169663a3a15fSDan Williams /* 0x030c AFE_DFX_NOA_CTRL0 */ 169763a3a15fSDan Williams u32 afe_dfx_noa_control0; 169863a3a15fSDan Williams /* 0x0310 AFE_DFX_NOA_CTRL1 */ 169963a3a15fSDan Williams u32 afe_dfx_noa_control1; 170063a3a15fSDan Williams /* 0x0314 AFE_DFX_NOA_CTRL2 */ 170163a3a15fSDan Williams u32 afe_dfx_noa_control2; 170263a3a15fSDan Williams /* 0x0318 AFE_DFX_NOA_CTRL3 */ 170363a3a15fSDan Williams u32 afe_dfx_noa_control3; 170463a3a15fSDan Williams /* 0x031c AFE_DFX_NOA_CTRL4 */ 170563a3a15fSDan Williams u32 afe_dfx_noa_control4; 170663a3a15fSDan Williams /* 0x0320 AFE_DFX_NOA_CTRL5 */ 170763a3a15fSDan Williams u32 afe_dfx_noa_control5; 170863a3a15fSDan Williams /* 0x0324 AFE_DFX_NOA_CTRL6 */ 170963a3a15fSDan Williams u32 afe_dfx_noa_control6; 171063a3a15fSDan Williams /* 0x0328 AFE_DFX_NOA_CTRL7 */ 171163a3a15fSDan Williams u32 afe_dfx_noa_control7; 171263a3a15fSDan Williams /* 0x032c-0x07fc */ 171363a3a15fSDan Williams u32 reserved_032c_07fc[0x135]; 171463a3a15fSDan Williams 171563a3a15fSDan Williams /* 0x0800-0x0bfc */ 171663a3a15fSDan Williams struct scu_afe_transceiver scu_afe_xcvr[4]; 171763a3a15fSDan Williams 171863a3a15fSDan Williams /* 0x0c00-0x0ffc */ 171963a3a15fSDan Williams u32 reserved_0c00_0ffc[0x0100]; 172063a3a15fSDan Williams }; 172163a3a15fSDan Williams 172263a3a15fSDan Williams struct scu_protocol_engine_group_registers { 172363a3a15fSDan Williams u32 table[0xE0]; 172463a3a15fSDan Williams }; 172563a3a15fSDan Williams 172663a3a15fSDan Williams 172763a3a15fSDan Williams struct scu_viit_iit { 172863a3a15fSDan Williams u32 table[256]; 172963a3a15fSDan Williams }; 173063a3a15fSDan Williams 173163a3a15fSDan Williams /** 173263a3a15fSDan Williams * Placeholder for the ZONE Partition Table information ZONING will not be 173363a3a15fSDan Williams * included in the 1.1 release. 173463a3a15fSDan Williams * 173563a3a15fSDan Williams * 173663a3a15fSDan Williams */ 173763a3a15fSDan Williams struct scu_zone_partition_table { 173863a3a15fSDan Williams u32 table[2048]; 173963a3a15fSDan Williams }; 174063a3a15fSDan Williams 174163a3a15fSDan Williams /** 174263a3a15fSDan Williams * Placeholder for the CRAM register since I am not sure if we need to 174363a3a15fSDan Williams * read/write to these registers as yet. 174463a3a15fSDan Williams * 174563a3a15fSDan Williams * 174663a3a15fSDan Williams */ 174763a3a15fSDan Williams struct scu_completion_ram { 174863a3a15fSDan Williams u32 ram[128]; 174963a3a15fSDan Williams }; 175063a3a15fSDan Williams 175163a3a15fSDan Williams /** 175263a3a15fSDan Williams * Placeholder for the FBRAM registers since I am not sure if we need to 175363a3a15fSDan Williams * read/write to these registers as yet. 175463a3a15fSDan Williams * 175563a3a15fSDan Williams * 175663a3a15fSDan Williams */ 175763a3a15fSDan Williams struct scu_frame_buffer_ram { 175863a3a15fSDan Williams u32 ram[128]; 175963a3a15fSDan Williams }; 176063a3a15fSDan Williams 176163a3a15fSDan Williams #define scu_scratch_ram_SIZE_IN_DWORDS 256 176263a3a15fSDan Williams 176363a3a15fSDan Williams /** 176463a3a15fSDan Williams * Placeholder for the scratch RAM registers. 176563a3a15fSDan Williams * 176663a3a15fSDan Williams * 176763a3a15fSDan Williams */ 176863a3a15fSDan Williams struct scu_scratch_ram { 176963a3a15fSDan Williams u32 ram[scu_scratch_ram_SIZE_IN_DWORDS]; 177063a3a15fSDan Williams }; 177163a3a15fSDan Williams 177263a3a15fSDan Williams /** 177363a3a15fSDan Williams * Placeholder since I am not yet sure what these registers are here for. 177463a3a15fSDan Williams * 177563a3a15fSDan Williams * 177663a3a15fSDan Williams */ 177763a3a15fSDan Williams struct noa_protocol_engine_partition { 177863a3a15fSDan Williams u32 reserved[64]; 177963a3a15fSDan Williams }; 178063a3a15fSDan Williams 178163a3a15fSDan Williams /** 178263a3a15fSDan Williams * Placeholder since I am not yet sure what these registers are here for. 178363a3a15fSDan Williams * 178463a3a15fSDan Williams * 178563a3a15fSDan Williams */ 178663a3a15fSDan Williams struct noa_hub_partition { 178763a3a15fSDan Williams u32 reserved[64]; 178863a3a15fSDan Williams }; 178963a3a15fSDan Williams 179063a3a15fSDan Williams /** 179163a3a15fSDan Williams * Placeholder since I am not yet sure what these registers are here for. 179263a3a15fSDan Williams * 179363a3a15fSDan Williams * 179463a3a15fSDan Williams */ 179563a3a15fSDan Williams struct noa_host_interface_partition { 179663a3a15fSDan Williams u32 reserved[64]; 179763a3a15fSDan Williams }; 179863a3a15fSDan Williams 179963a3a15fSDan Williams /** 180063a3a15fSDan Williams * struct transport_link_layer_pair - The SCU Hardware pairs up the TL 180163a3a15fSDan Williams * registers with the LL registers so we must place them adjcent to make the 180263a3a15fSDan Williams * array of registers in the PEG. 180363a3a15fSDan Williams * 180463a3a15fSDan Williams * 180563a3a15fSDan Williams */ 180663a3a15fSDan Williams struct transport_link_layer_pair { 180763a3a15fSDan Williams struct scu_transport_layer_registers tl; 180863a3a15fSDan Williams struct scu_link_layer_registers ll; 180963a3a15fSDan Williams }; 181063a3a15fSDan Williams 181163a3a15fSDan Williams /** 181263a3a15fSDan Williams * struct scu_peg_registers - SCU Protocol Engine Memory mapped register space. 181363a3a15fSDan Williams * These registers are unique to each protocol engine group. There can be 181463a3a15fSDan Williams * at most two PEG for a single SCU part. 181563a3a15fSDan Williams * 181663a3a15fSDan Williams * 181763a3a15fSDan Williams */ 181863a3a15fSDan Williams struct scu_peg_registers { 181963a3a15fSDan Williams struct transport_link_layer_pair pe[4]; 182063a3a15fSDan Williams struct scu_port_task_scheduler_group_registers ptsg; 182163a3a15fSDan Williams struct scu_protocol_engine_group_registers peg; 182263a3a15fSDan Williams struct scu_sgpio_registers sgpio; 182363a3a15fSDan Williams u32 reserved_01500_1BFF[0x1C0]; 182463a3a15fSDan Williams struct scu_viit_entry viit[64]; 182563a3a15fSDan Williams struct scu_zone_partition_table zpt0; 182663a3a15fSDan Williams struct scu_zone_partition_table zpt1; 182763a3a15fSDan Williams }; 182863a3a15fSDan Williams 182963a3a15fSDan Williams /** 1830*ad61dd30SStephen Boyd * struct scu_registers - SCU registers including both PEG registers if we turn 183163a3a15fSDan Williams * on that compile option. All of these registers are in the memory mapped 183263a3a15fSDan Williams * space returned from BAR1. 183363a3a15fSDan Williams * 183463a3a15fSDan Williams * 183563a3a15fSDan Williams */ 183663a3a15fSDan Williams struct scu_registers { 183763a3a15fSDan Williams /* 0x0000 - PEG 0 */ 183863a3a15fSDan Williams struct scu_peg_registers peg0; 183963a3a15fSDan Williams 184063a3a15fSDan Williams /* 0x6000 - SDMA and Miscellaneous */ 184163a3a15fSDan Williams struct scu_sdma_registers sdma; 184263a3a15fSDan Williams struct scu_completion_ram cram; 184363a3a15fSDan Williams struct scu_frame_buffer_ram fbram; 184463a3a15fSDan Williams u32 reserved_6800_69FF[0x80]; 184563a3a15fSDan Williams struct noa_protocol_engine_partition noa_pe; 184663a3a15fSDan Williams struct noa_hub_partition noa_hub; 184763a3a15fSDan Williams struct noa_host_interface_partition noa_if; 184863a3a15fSDan Williams u32 reserved_6d00_7fff[0x4c0]; 184963a3a15fSDan Williams 185063a3a15fSDan Williams /* 0x8000 - PEG 1 */ 185163a3a15fSDan Williams struct scu_peg_registers peg1; 185263a3a15fSDan Williams 185363a3a15fSDan Williams /* 0xE000 - AFE Registers */ 185463a3a15fSDan Williams struct scu_afe_registers afe; 185563a3a15fSDan Williams 185663a3a15fSDan Williams /* 0xF000 - reserved */ 185763a3a15fSDan Williams u32 reserved_f000_211fff[0x80c00]; 185863a3a15fSDan Williams 185963a3a15fSDan Williams /* 0x212000 - scratch RAM */ 186063a3a15fSDan Williams struct scu_scratch_ram scratch_ram; 186163a3a15fSDan Williams }; 186263a3a15fSDan Williams 186363a3a15fSDan Williams #endif /* _SCU_REGISTERS_HEADER_ */ 1864