xref: /openbmc/linux/drivers/scsi/isci/registers.h (revision a976c2951d8f376112361830aa7762beff83a205)
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