Print this page
    
NEX-5717 import QLogic 16G FC drivers
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/fibre-channel/fca/qlc/ql_nx.h
          +++ new/usr/src/uts/common/sys/fibre-channel/fca/qlc/ql_nx.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  
    | 
      ↓ open down ↓ | 
    12 lines elided | 
    
      ↑ open up ↑ | 
  
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23      - * Copyright 2010 QLogic Corporation.  All rights reserved.
  24      - * Use is subject to license terms.
       23 + * Copyright (c) 2015 QLogic Corporation.  All rights reserved.
  25   24   */
  26   25  
  27   26  #ifndef _QL_NX_H
  28   27  #define _QL_NX_H
  29   28  
  30   29  /*
  31   30   * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
  32   31   *
  33   32   * ***********************************************************************
  34   33   * *                                                                    **
  35   34   * *                            NOTICE                                  **
  36      - * *            COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION              **
       35 + * *            COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION              **
  37   36   * *                    ALL RIGHTS RESERVED                             **
  38   37   * *                                                                    **
  39   38   * ***********************************************************************
  40   39   *
  41   40   */
  42   41  
  43   42  #ifdef  __cplusplus
  44   43  extern "C" {
  45   44  #endif
  46   45  
  47   46  #define NX_P3_A0        0x30
  48   47  #define NX_P3_A2        0x32
  49   48  #define NX_P3_B0        0x40
  50   49  #define NX_P3_B1        0x41
  51   50  #define NX_P3_B2        0x42
  52   51  #define NX_P3P_A0       0x50
  53   52  #define NX_P3P_B0       0x54
  54   53  
  55      -#define NX_IS_REVISION_P3(REVISION)     (REVISION >= NX_P3_A0)
  56      -#define NX_IS_REVISION_P3PLUS(REVISION) (REVISION >= NX_P3P_A0)
       54 +#define NX_IS_REVISION_P3(REVISION)             (REVISION >= NX_P3_A0)
       55 +#define NX_IS_REVISION_P3PLUS(REVISION)         (REVISION >= NX_P3P_A0)
       56 +#define NX_IS_REVISION_P3PLUS_B0(REVISION)      (REVISION >= NX_P3P_B0)
  57   57  
  58   58  /*
  59   59   * Following are the states of the Phantom. Phantom will set them and
  60   60   * Host will read to check if the fields are correct.
  61   61   */
  62   62  #define PHAN_INITIALIZE_START           0xff00
  63   63  #define PHAN_INITIALIZE_FAILED          0xffff
  64   64  #define PHAN_INITIALIZE_COMPLETE        0xff01
  65   65  
  66   66  /* Host writes the following to notify that it has done the init-handshake */
  67   67  #define PHAN_INITIALIZE_ACK             0xf00f
  68   68  #define PHAN_PEG_RCV_INITIALIZED        0xff01
  69   69  #define PHAN_PEG_RCV_START_INITIALIZE   0xff00
  70   70  
  71   71  /* CRB_RELATED */
  72   72  #define NIC_CRB_BASE            (UNM_CAM_RAM(0x200))
  73   73  #define NIC_CRB_BASE_2          (UNM_CAM_RAM(0x700))
  74   74  #define UNM_NIC_REG(X)          (NIC_CRB_BASE + (X))
  
    | 
      ↓ open down ↓ | 
    8 lines elided | 
    
      ↑ open up ↑ | 
  
  75   75  #define UNM_NIC_REG_2(X)        (NIC_CRB_BASE_2 + (X))
  76   76  
  77   77  #define CRB_CUT_THRU_PAGE_SIZE  (UNM_CAM_RAM(0x170))
  78   78  
  79   79  #define CRB_DEV_PARTITION_INFO  (UNM_CAM_RAM(0x14c))
  80   80  #define CRB_DEV_STATE           (UNM_CAM_RAM(0x140))
  81   81  #define CRB_DRV_IDC_VERSION     (UNM_CAM_RAM(0x174))
  82   82  #define CRB_DRV_ACTIVE          (UNM_CAM_RAM(0x138))
  83   83  #define CRB_DRV_STATE           (UNM_CAM_RAM(0x144))
  84   84  #define CRB_DRV_SCRATCH         (UNM_CAM_RAM(0x148))
  85      -#define CRB_FCOE_PORT_0_REQIN   (UNM_CAM_RAM(0x1b8))
  86      -#define CRB_FCOE_PORT_1_REQIN   (UNM_CAM_RAM(0x1bc))
       85 +#define CRB_PORT_0_REQIN        (UNM_CAM_RAM(0x1b8))
       86 +#define CRB_PORT_1_REQIN        (UNM_CAM_RAM(0x1bc))
  87   87  
  88   88  /* Every driver should use these Device State */
       89 +#define NX_DEV_POLL             0
  89   90  #define NX_DEV_COLD             1
  90      -#define NX_DEV_INITIALIZING     2
       91 +#define NX_DEV_INITIALIZING     2
  91   92  #define NX_DEV_READY            3
  92   93  #define NX_DEV_NEED_RESET       4
  93      -#define NX_DEV_NEED_QUIESCENT   5
       94 +#define NX_DEV_NEED_QUIESCENT   5
  94   95  #define NX_DEV_FAILED           6
  95   96  #define NX_DEV_QUIESCENT        7
       97 +#define NX_DEV_BADOBADO         0xbad0bad0
  96   98  
  97   99  #define NX_IDC_VERSION          0x1
  98  100  
  99  101  #define CRB_CMD_PRODUCER_OFFSET (UNM_NIC_REG(0x08))
 100  102  #define CRB_CMD_CONSUMER_OFFSET (UNM_NIC_REG(0x0c))
 101  103  #define CRB_PAUSE_ADDR_LO       (UNM_NIC_REG(0x10)) /* C0 EPG BUG  */
 102  104  #define CRB_PAUSE_ADDR_HI       (UNM_NIC_REG(0x14))
 103  105  #define NX_CDRP_CRB_OFFSET      (UNM_NIC_REG(0x18))
 104  106  #define NX_ARG1_CRB_OFFSET      (UNM_NIC_REG(0x1c))
 105  107  #define NX_ARG2_CRB_OFFSET      (UNM_NIC_REG(0x20))
 106  108  #define NX_ARG3_CRB_OFFSET      (UNM_NIC_REG(0x24))
 107  109  #define NX_SIGN_CRB_OFFSET      (UNM_NIC_REG(0x28))
 108  110  #define CRB_CMDPEG_CMDRING      (UNM_NIC_REG(0x38))
 109  111  #define CRB_HOST_DUMMY_BUF_ADDR_HI      (UNM_NIC_REG(0x3c))
 110  112  #define CRB_HOST_DUMMY_BUF_ADDR_LO      (UNM_NIC_REG(0x40))
 111  113  #define CRB_CMDPEG_STATE        (UNM_NIC_REG(0x50))
 112  114  #define BOOT_LOADER_DIMM_STATUS (UNM_NIC_REG(0x54))
 113  115  #define CRB_GLOBAL_INT_COAL     (UNM_NIC_REG(0x64)) /* intrt coalescing */
 114  116  #define CRB_INT_COAL_MODE       (UNM_NIC_REG(0x68))
 115  117  #define CRB_MAX_RCV_BUFS        (UNM_NIC_REG(0x6c))
 116  118  #define CRB_TX_INT_THRESHOLD    (UNM_NIC_REG(0x70))
 117  119  #define CRB_RX_PKT_TIMER        (UNM_NIC_REG(0x74))
 118  120  #define CRB_TX_PKT_TIMER        (UNM_NIC_REG(0x78))
 119  121  #define CRB_RX_PKT_CNT          (UNM_NIC_REG(0x7c))
 120  122  #define CRB_RX_TMR_CNT          (UNM_NIC_REG(0x80))
 121  123  #define CRB_RCV_INTR_COUNT      (UNM_NIC_REG(0x84))
 122  124  #define CRB_XG_STATE            (UNM_NIC_REG(0x94)) /* XG Link status */
 123  125  #define CRB_XG_STATE_P3         (UNM_NIC_REG(0x98)) /* XG PF Link status */
 124  126  #define CRB_TX_STATE            (UNM_NIC_REG(0xac)) /* Debug -performance */
 125  127  #define CRB_TX_COUNT            (UNM_NIC_REG(0xb0))
 126  128  #define CRB_RX_STATE            (UNM_NIC_REG(0xb4))
 127  129  #define CRB_RX_PERF_DEBUG_1     (UNM_NIC_REG(0xb8))
 128  130  #define CRB_RX_LRO_CONTROL      (UNM_NIC_REG(0xbc)) /* LRO On/OFF */
 129  131  #define CRB_MPORT_MODE          (UNM_NIC_REG(0xc4)) /* Multiport Mode */
 130  132  #define CRB_DMA_SHIFT           (UNM_NIC_REG(0xcc)) /* DMA mask extension */
 131  133  #define CRB_INT_VECTOR          (UNM_NIC_REG(0xd4))
 132  134  #define CRB_PF_LINK_SPEED_1     (UNM_NIC_REG(0xe8))
 133  135  #define CRB_PF_LINK_SPEED_2     (UNM_NIC_REG(0xec))
 134  136  #define CRB_PF_MAX_LINK_SPEED_1 (UNM_NIC_REG(0xf0))
 135  137  #define CRB_PF_MAX_LINK_SPEED_2 (UNM_NIC_REG(0xf4))
 136  138  #define CRB_HOST_DUMMY_BUF      (UNM_NIC_REG(0xfc))
 137  139  
 138  140  /* used for ethtool tests */
 139  141  #define CRB_SCRATCHPAD_TEST     (UNM_NIC_REG(0x280))
 140  142  
 141  143  #define CRB_RCVPEG_STATE        (UNM_NIC_REG(0x13c))
 142  144  
 143  145  #define UNM_PEG_HALT_STATUS1    (UNM_CAM_RAM(0xa8))
 144  146  #define UNM_PEG_HALT_STATUS2    (UNM_CAM_RAM(0xac))
 145  147  #define UNM_PEG_ALIVE_COUNTER   (UNM_CAM_RAM(0x0b0))
 146  148  #define UNM_FW_CAPABILITIES_1   (UNM_CAM_RAM(0x128))
 147  149  
 148  150  /* 12 registers to store MAC addresses for 8 PCI functions */
 149  151  #define CRB_MAC_BLOCK_START             (UNM_CAM_RAM(0x1c0))
 150  152  
 151  153  #define CRB_CMD_PRODUCER_OFFSET_1       (UNM_NIC_REG(0x1ac))
 152  154  #define CRB_CMD_CONSUMER_OFFSET_1       (UNM_NIC_REG(0x1b0))
 153  155  #define CRB_TEMP_STATE                  (UNM_NIC_REG(0x1b4))
 154  156  #define CRB_CMD_PRODUCER_OFFSET_2       (UNM_NIC_REG(0x1b8))
 155  157  #define CRB_CMD_CONSUMER_OFFSET_2       (UNM_NIC_REG(0x1bc))
 156  158  
 157  159  #define CRB_CMD_PRODUCER_OFFSET_3       (UNM_NIC_REG(0x1d0))
 158  160  #define CRB_CMD_CONSUMER_OFFSET_3       (UNM_NIC_REG(0x1d4))
 159  161  /* sw int status/mask registers */
 160  162  #define CRB_SW_INT_MASK_OFFSET_0        0x1d8
 161  163  #define CRB_SW_INT_MASK_OFFSET_1        0x1e0
 162  164  #define CRB_SW_INT_MASK_OFFSET_2        0x1e4
 163  165  #define CRB_SW_INT_MASK_OFFSET_3        0x1e8
 164  166  #define CRB_SW_INT_MASK_OFFSET_4        0x450
 165  167  #define CRB_SW_INT_MASK_OFFSET_5        0x454
 166  168  #define CRB_SW_INT_MASK_OFFSET_6        0x458
 167  169  #define CRB_SW_INT_MASK_OFFSET_7        0x45c
 168  170  #define CRB_SW_INT_MASK_0               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_0))
 169  171  #define CRB_SW_INT_MASK_1               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_1))
 170  172  #define CRB_SW_INT_MASK_2               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_2))
 171  173  #define CRB_SW_INT_MASK_3               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_3))
 172  174  #define CRB_SW_INT_MASK_4               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_4))
 173  175  #define CRB_SW_INT_MASK_5               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_5))
 174  176  #define CRB_SW_INT_MASK_6               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_6))
 175  177  #define CRB_SW_INT_MASK_7               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_7))
 176  178  
 177  179  #define CRB_NIC_DEBUG_STRUCT_BASE       (UNM_NIC_REG(0x288))
 178  180  
 179  181  #define CRB_NIC_CAPABILITIES_HOST       (UNM_NIC_REG(0x1a8))
 180  182  #define CRB_NIC_CAPABILITIES_FW         (UNM_NIC_REG(0x1dc))
 181  183  #define CRB_NIC_MSI_MODE_HOST           (UNM_NIC_REG(0x270))
 182  184  #define CRB_NIC_MSI_MODE_FW             (UNM_NIC_REG(0x274))
 183  185  
 184  186  #define INTR_SCHEME_PERPORT             0x1
 185  187  #define MSI_MODE_MULTIFUNC              0x1
 186  188  
 187  189  #define CRB_EPG_QUEUE_BUSY_COUNT        (UNM_NIC_REG(0x200))
 188  190  
 189  191  #define CRB_V2P_0                       (UNM_NIC_REG(0x290))
 190  192  #define CRB_V2P_1                       (UNM_NIC_REG(0x294))
 191  193  #define CRB_V2P_2                       (UNM_NIC_REG(0x298))
 192  194  #define CRB_V2P_3                       (UNM_NIC_REG(0x29c))
 193  195  #define CRB_V2P(port)                   (CRB_V2P_0 + ((port) * 4))
 194  196  #define CRB_DRIVER_VERSION              (UNM_NIC_REG(0x2a0))
 195  197  
 196  198  #define CRB_CNT_DBG1                    (UNM_NIC_REG(0x2a4))
 197  199  #define CRB_CNT_DBG2                    (UNM_NIC_REG(0x2a8))
 198  200  #define CRB_CNT_DBG3                    (UNM_NIC_REG(0x2ac))
 199  201  
 200  202  /* ends here */
 201  203  #define UNM_HW_H0_CH_HUB_ADR    0x05
 202  204  #define UNM_HW_H1_CH_HUB_ADR    0x0E
 203  205  #define UNM_HW_H2_CH_HUB_ADR    0x03
 204  206  #define UNM_HW_H3_CH_HUB_ADR    0x01
 205  207  #define UNM_HW_H4_CH_HUB_ADR    0x06
 206  208  #define UNM_HW_H5_CH_HUB_ADR    0x07
 207  209  #define UNM_HW_H6_CH_HUB_ADR    0x08
 208  210  /*
 209  211   * WARNING:  pex_tgt_adr.v assumes if MSB of hub adr is set then it is an
 210  212   * ILLEGAL hub!!!!!
 211  213   */
 212  214  
 213  215  /* Hub 0 */
 214  216  #define UNM_HW_MN_CRB_AGT_ADR   0x15
 215  217  #define UNM_HW_MS_CRB_AGT_ADR   0x25
 216  218  
 217  219  /* Hub 1 */
 218  220  #define UNM_HW_PS_CRB_AGT_ADR           0x73
 219  221  #define UNM_HW_SS_CRB_AGT_ADR           0x20
 220  222  #define UNM_HW_RPMX3_CRB_AGT_ADR        0x0b
 221  223  #define UNM_HW_QMS_CRB_AGT_ADR          0x00
 222  224  #define UNM_HW_SQGS0_CRB_AGT_ADR        0x01
 223  225  #define UNM_HW_SQGS1_CRB_AGT_ADR        0x02
 224  226  #define UNM_HW_SQGS2_CRB_AGT_ADR        0x03
 225  227  #define UNM_HW_SQGS3_CRB_AGT_ADR        0x04
 226  228  #define UNM_HW_C2C0_CRB_AGT_ADR         0x58
 227  229  #define UNM_HW_C2C1_CRB_AGT_ADR         0x59
 228  230  #define UNM_HW_C2C2_CRB_AGT_ADR         0x5a
 229  231  #define UNM_HW_RPMX2_CRB_AGT_ADR        0x0a
 230  232  #define UNM_HW_RPMX4_CRB_AGT_ADR        0x0c
 231  233  #define UNM_HW_RPMX7_CRB_AGT_ADR        0x0f
 232  234  #define UNM_HW_RPMX9_CRB_AGT_ADR        0x12
 233  235  #define UNM_HW_SMB_CRB_AGT_ADR          0x18
 234  236  
 235  237  /* Hub 2 */
 236  238  #define UNM_HW_NIU_CRB_AGT_ADR          0x31
 237  239  #define UNM_HW_I2C0_CRB_AGT_ADR         0x19
 238  240  #define UNM_HW_I2C1_CRB_AGT_ADR         0x29
 239  241  
 240  242  #define UNM_HW_SN_CRB_AGT_ADR           0x10
 241  243  #define UNM_HW_I2Q_CRB_AGT_ADR          0x20
 242  244  #define UNM_HW_LPC_CRB_AGT_ADR          0x22
 243  245  #define UNM_HW_ROMUSB_CRB_AGT_ADR       0x21
 244  246  #define UNM_HW_QM_CRB_AGT_ADR           0x66
 245  247  #define UNM_HW_SQG0_CRB_AGT_ADR         0x60
 246  248  #define UNM_HW_SQG1_CRB_AGT_ADR         0x61
 247  249  #define UNM_HW_SQG2_CRB_AGT_ADR         0x62
 248  250  #define UNM_HW_SQG3_CRB_AGT_ADR         0x63
 249  251  #define UNM_HW_RPMX1_CRB_AGT_ADR        0x09
 250  252  #define UNM_HW_RPMX5_CRB_AGT_ADR        0x0d
 251  253  #define UNM_HW_RPMX6_CRB_AGT_ADR        0x0e
 252  254  #define UNM_HW_RPMX8_CRB_AGT_ADR        0x11
 253  255  
 254  256  /* Hub 3 */
 255  257  #define UNM_HW_PH_CRB_AGT_ADR           0x1A
 256  258  #define UNM_HW_SRE_CRB_AGT_ADR          0x50
 257  259  #define UNM_HW_EG_CRB_AGT_ADR           0x51
 258  260  #define UNM_HW_RPMX0_CRB_AGT_ADR        0x08
 259  261  
 260  262  /* Hub 4 */
 261  263  #define UNM_HW_PEGN0_CRB_AGT_ADR        0x40
 262  264  #define UNM_HW_PEGN1_CRB_AGT_ADR        0x41
 263  265  #define UNM_HW_PEGN2_CRB_AGT_ADR        0x42
 264  266  #define UNM_HW_PEGN3_CRB_AGT_ADR        0x43
 265  267  #define UNM_HW_PEGNI_CRB_AGT_ADR        0x44
 266  268  #define UNM_HW_PEGND_CRB_AGT_ADR        0x45
 267  269  #define UNM_HW_PEGNC_CRB_AGT_ADR        0x46
 268  270  #define UNM_HW_PEGR0_CRB_AGT_ADR        0x47
 269  271  #define UNM_HW_PEGR1_CRB_AGT_ADR        0x48
 270  272  #define UNM_HW_PEGR2_CRB_AGT_ADR        0x49
 271  273  #define UNM_HW_PEGR3_CRB_AGT_ADR        0x4a
 272  274  #define UNM_HW_PEGN4_CRB_AGT_ADR        0x4b
 273  275  
 274  276  /* Hub 5 */
 275  277  #define UNM_HW_PEGS0_CRB_AGT_ADR        0x40
 276  278  #define UNM_HW_PEGS1_CRB_AGT_ADR        0x41
 277  279  #define UNM_HW_PEGS2_CRB_AGT_ADR        0x42
 278  280  #define UNM_HW_PEGS3_CRB_AGT_ADR        0x43
 279  281  #define UNM_HW_PEGSI_CRB_AGT_ADR        0x44
 280  282  #define UNM_HW_PEGSD_CRB_AGT_ADR        0x45
 281  283  #define UNM_HW_PEGSC_CRB_AGT_ADR        0x46
 282  284  
 283  285  /* Hub 6 */
 284  286  #define UNM_HW_CAS0_CRB_AGT_ADR         0x46
 285  287  #define UNM_HW_CAS1_CRB_AGT_ADR         0x47
 286  288  #define UNM_HW_CAS2_CRB_AGT_ADR         0x48
 287  289  #define UNM_HW_CAS3_CRB_AGT_ADR         0x49
 288  290  #define UNM_HW_NCM_CRB_AGT_ADR          0x16
 289  291  #define UNM_HW_TMR_CRB_AGT_ADR          0x17
 290  292  #define UNM_HW_XDMA_CRB_AGT_ADR         0x05
 291  293  #define UNM_HW_OCM0_CRB_AGT_ADR         0x06
 292  294  #define UNM_HW_OCM1_CRB_AGT_ADR         0x07
 293  295  
 294  296  /* This field defines PCI/X adr [25:20] of agents on the CRB */
 295  297  
 296  298  #define UNM_HW_PX_MAP_CRB_PH    0
 297  299  #define UNM_HW_PX_MAP_CRB_PS    1
 298  300  #define UNM_HW_PX_MAP_CRB_MN    2
 299  301  #define UNM_HW_PX_MAP_CRB_MS    3
 300  302  #define UNM_HW_PX_MAP_CRB_SRE   5
 301  303  #define UNM_HW_PX_MAP_CRB_NIU   6
 302  304  #define UNM_HW_PX_MAP_CRB_QMN   7
 303  305  #define UNM_HW_PX_MAP_CRB_SQN0  8
 304  306  #define UNM_HW_PX_MAP_CRB_SQN1  9
 305  307  #define UNM_HW_PX_MAP_CRB_SQN2  10
 306  308  #define UNM_HW_PX_MAP_CRB_SQN3  11
 307  309  #define UNM_HW_PX_MAP_CRB_QMS   12
 308  310  #define UNM_HW_PX_MAP_CRB_SQS0  13
 309  311  #define UNM_HW_PX_MAP_CRB_SQS1  14
 310  312  #define UNM_HW_PX_MAP_CRB_SQS2  15
 311  313  #define UNM_HW_PX_MAP_CRB_SQS3  16
 312  314  #define UNM_HW_PX_MAP_CRB_PGN0  17
 313  315  #define UNM_HW_PX_MAP_CRB_PGN1  18
 314  316  #define UNM_HW_PX_MAP_CRB_PGN2  19
 315  317  #define UNM_HW_PX_MAP_CRB_PGN3  20
 316  318  #define UNM_HW_PX_MAP_CRB_PGN4  (UNM_HW_PX_MAP_CRB_SQS2)
 317  319  #define UNM_HW_PX_MAP_CRB_PGND  21
 318  320  #define UNM_HW_PX_MAP_CRB_PGNI  22
 319  321  #define UNM_HW_PX_MAP_CRB_PGS0  23
 320  322  #define UNM_HW_PX_MAP_CRB_PGS1  24
 321  323  #define UNM_HW_PX_MAP_CRB_PGS2  25
 322  324  #define UNM_HW_PX_MAP_CRB_PGS3  26
 323  325  #define UNM_HW_PX_MAP_CRB_PGSD  27
 324  326  #define UNM_HW_PX_MAP_CRB_PGSI  28
 325  327  #define UNM_HW_PX_MAP_CRB_SN    29
 326  328  #define UNM_HW_PX_MAP_CRB_EG    31
 327  329  #define UNM_HW_PX_MAP_CRB_PH2   32
 328  330  #define UNM_HW_PX_MAP_CRB_PS2   33
 329  331  #define UNM_HW_PX_MAP_CRB_CAM   34
 330  332  #define UNM_HW_PX_MAP_CRB_CAS0  35
 331  333  #define UNM_HW_PX_MAP_CRB_CAS1  36
 332  334  #define UNM_HW_PX_MAP_CRB_CAS2  37
 333  335  #define UNM_HW_PX_MAP_CRB_C2C0  38
 334  336  #define UNM_HW_PX_MAP_CRB_C2C1  39
 335  337  #define UNM_HW_PX_MAP_CRB_TIMR  40
 336  338  /*
 337  339   * #define PX_MAP_CRB_SS      41
 338  340   */
 339  341  #define UNM_HW_PX_MAP_CRB_RPMX1         42
 340  342  #define UNM_HW_PX_MAP_CRB_RPMX2         43
 341  343  #define UNM_HW_PX_MAP_CRB_RPMX3         44
 342  344  #define UNM_HW_PX_MAP_CRB_RPMX4         45
 343  345  #define UNM_HW_PX_MAP_CRB_RPMX5         46
 344  346  #define UNM_HW_PX_MAP_CRB_RPMX6         47
 345  347  #define UNM_HW_PX_MAP_CRB_RPMX7         48
 346  348  #define UNM_HW_PX_MAP_CRB_XDMA          49
 347  349  #define UNM_HW_PX_MAP_CRB_I2Q           50
 348  350  #define UNM_HW_PX_MAP_CRB_ROMUSB        51
 349  351  #define UNM_HW_PX_MAP_CRB_CAS3          52
 350  352  #define UNM_HW_PX_MAP_CRB_RPMX0         53
 351  353  #define UNM_HW_PX_MAP_CRB_RPMX8         54
 352  354  #define UNM_HW_PX_MAP_CRB_RPMX9         55
 353  355  #define UNM_HW_PX_MAP_CRB_OCM0          56
 354  356  #define UNM_HW_PX_MAP_CRB_OCM1          57
 355  357  #define UNM_HW_PX_MAP_CRB_SMB           58
 356  358  #define UNM_HW_PX_MAP_CRB_I2C0          59
 357  359  #define UNM_HW_PX_MAP_CRB_I2C1          60
 358  360  #define UNM_HW_PX_MAP_CRB_LPC           61
 359  361  #define UNM_HW_PX_MAP_CRB_PGNC          62
 360  362  #define UNM_HW_PX_MAP_CRB_PGR0          63
 361  363  #define UNM_HW_PX_MAP_CRB_PGR1          4
 362  364  #define UNM_HW_PX_MAP_CRB_PGR2          30
 363  365  #define UNM_HW_PX_MAP_CRB_PGR3          41
 364  366  
 365  367  /*  This field defines CRB adr [31:20] of the agents */
 366  368  
 367  369  #define UNM_HW_CRB_HUB_AGT_ADR_MN       ((UNM_HW_H0_CH_HUB_ADR << 7) | \
 368  370      UNM_HW_MN_CRB_AGT_ADR)
 369  371  #define UNM_HW_CRB_HUB_AGT_ADR_PH       ((UNM_HW_H0_CH_HUB_ADR << 7) | \
 370  372      UNM_HW_PH_CRB_AGT_ADR)
 371  373  #define UNM_HW_CRB_HUB_AGT_ADR_MS       ((UNM_HW_H0_CH_HUB_ADR << 7) | \
 372  374      UNM_HW_MS_CRB_AGT_ADR)
 373  375  
 374  376  #define UNM_HW_CRB_HUB_AGT_ADR_PS       ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 375  377      UNM_HW_PS_CRB_AGT_ADR)
 376  378  #define UNM_HW_CRB_HUB_AGT_ADR_SS       ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 377  379      UNM_HW_SS_CRB_AGT_ADR)
 378  380  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX3    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 379  381      UNM_HW_RPMX3_CRB_AGT_ADR)
 380  382  #define UNM_HW_CRB_HUB_AGT_ADR_QMS      ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 381  383      UNM_HW_QMS_CRB_AGT_ADR)
 382  384  #define UNM_HW_CRB_HUB_AGT_ADR_SQS0     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 383  385      UNM_HW_SQGS0_CRB_AGT_ADR)
 384  386  #define UNM_HW_CRB_HUB_AGT_ADR_SQS1     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 385  387      UNM_HW_SQGS1_CRB_AGT_ADR)
 386  388  #define UNM_HW_CRB_HUB_AGT_ADR_SQS2     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 387  389      UNM_HW_SQGS2_CRB_AGT_ADR)
 388  390  #define UNM_HW_CRB_HUB_AGT_ADR_SQS3     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 389  391      UNM_HW_SQGS3_CRB_AGT_ADR)
 390  392  #define UNM_HW_CRB_HUB_AGT_ADR_C2C0     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 391  393      UNM_HW_C2C0_CRB_AGT_ADR)
 392  394  #define UNM_HW_CRB_HUB_AGT_ADR_C2C1     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 393  395      UNM_HW_C2C1_CRB_AGT_ADR)
 394  396  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX2    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 395  397      UNM_HW_RPMX2_CRB_AGT_ADR)
 396  398  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX4    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 397  399      UNM_HW_RPMX4_CRB_AGT_ADR)
 398  400  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX7    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 399  401      UNM_HW_RPMX7_CRB_AGT_ADR)
 400  402  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX9    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 401  403      UNM_HW_RPMX9_CRB_AGT_ADR)
 402  404  #define UNM_HW_CRB_HUB_AGT_ADR_SMB      ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 403  405      UNM_HW_SMB_CRB_AGT_ADR)
 404  406  
 405  407  #define UNM_HW_CRB_HUB_AGT_ADR_NIU      ((UNM_HW_H2_CH_HUB_ADR << 7) | \
 406  408      UNM_HW_NIU_CRB_AGT_ADR)
 407  409  #define UNM_HW_CRB_HUB_AGT_ADR_I2C0     ((UNM_HW_H2_CH_HUB_ADR << 7) | \
 408  410      UNM_HW_I2C0_CRB_AGT_ADR)
 409  411  #define UNM_HW_CRB_HUB_AGT_ADR_I2C1     ((UNM_HW_H2_CH_HUB_ADR << 7) | \
 410  412      UNM_HW_I2C1_CRB_AGT_ADR)
 411  413  
 412  414  #define UNM_HW_CRB_HUB_AGT_ADR_SRE      ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 413  415      UNM_HW_SRE_CRB_AGT_ADR)
 414  416  #define UNM_HW_CRB_HUB_AGT_ADR_EG       ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 415  417      UNM_HW_EG_CRB_AGT_ADR)
 416  418  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX0    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 417  419      UNM_HW_RPMX0_CRB_AGT_ADR)
 418  420  #define UNM_HW_CRB_HUB_AGT_ADR_QMN      ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 419  421      UNM_HW_QM_CRB_AGT_ADR)
 420  422  #define UNM_HW_CRB_HUB_AGT_ADR_SQN0     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 421  423      UNM_HW_SQG0_CRB_AGT_ADR)
 422  424  #define UNM_HW_CRB_HUB_AGT_ADR_SQN1     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 423  425      UNM_HW_SQG1_CRB_AGT_ADR)
 424  426  #define UNM_HW_CRB_HUB_AGT_ADR_SQN2     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 425  427      UNM_HW_SQG2_CRB_AGT_ADR)
 426  428  #define UNM_HW_CRB_HUB_AGT_ADR_SQN3     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 427  429      UNM_HW_SQG3_CRB_AGT_ADR)
 428  430  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX1    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 429  431      UNM_HW_RPMX1_CRB_AGT_ADR)
 430  432  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX5    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 431  433      UNM_HW_RPMX5_CRB_AGT_ADR)
 432  434  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX6    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 433  435      UNM_HW_RPMX6_CRB_AGT_ADR)
 434  436  #define UNM_HW_CRB_HUB_AGT_ADR_RPMX8    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 435  437      UNM_HW_RPMX8_CRB_AGT_ADR)
 436  438  #define UNM_HW_CRB_HUB_AGT_ADR_CAS0     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 437  439      UNM_HW_CAS0_CRB_AGT_ADR)
 438  440  #define UNM_HW_CRB_HUB_AGT_ADR_CAS1     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 439  441      UNM_HW_CAS1_CRB_AGT_ADR)
 440  442  #define UNM_HW_CRB_HUB_AGT_ADR_CAS2     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 441  443      UNM_HW_CAS2_CRB_AGT_ADR)
 442  444  #define UNM_HW_CRB_HUB_AGT_ADR_CAS3     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 443  445      UNM_HW_CAS3_CRB_AGT_ADR)
 444  446  
 445  447  #define UNM_HW_CRB_HUB_AGT_ADR_PGNI     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 446  448      UNM_HW_PEGNI_CRB_AGT_ADR)
 447  449  #define UNM_HW_CRB_HUB_AGT_ADR_PGND     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 448  450      UNM_HW_PEGND_CRB_AGT_ADR)
 449  451  #define UNM_HW_CRB_HUB_AGT_ADR_PGN0     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 450  452      UNM_HW_PEGN0_CRB_AGT_ADR)
 451  453  #define UNM_HW_CRB_HUB_AGT_ADR_PGN1     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 452  454      UNM_HW_PEGN1_CRB_AGT_ADR)
 453  455  #define UNM_HW_CRB_HUB_AGT_ADR_PGN2     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 454  456      UNM_HW_PEGN2_CRB_AGT_ADR)
 455  457  #define UNM_HW_CRB_HUB_AGT_ADR_PGN3     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 456  458      UNM_HW_PEGN3_CRB_AGT_ADR)
 457  459  #define UNM_HW_CRB_HUB_AGT_ADR_PGN4     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 458  460      UNM_HW_PEGN4_CRB_AGT_ADR)
 459  461  
 460  462  #define UNM_HW_CRB_HUB_AGT_ADR_PGNC     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 461  463      UNM_HW_PEGNC_CRB_AGT_ADR)
 462  464  #define UNM_HW_CRB_HUB_AGT_ADR_PGR0     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 463  465      UNM_HW_PEGR0_CRB_AGT_ADR)
 464  466  #define UNM_HW_CRB_HUB_AGT_ADR_PGR1     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 465  467      UNM_HW_PEGR1_CRB_AGT_ADR)
 466  468  #define UNM_HW_CRB_HUB_AGT_ADR_PGR2     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 467  469      UNM_HW_PEGR2_CRB_AGT_ADR)
 468  470  #define UNM_HW_CRB_HUB_AGT_ADR_PGR3     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 469  471      UNM_HW_PEGR3_CRB_AGT_ADR)
 470  472  
 471  473  #define UNM_HW_CRB_HUB_AGT_ADR_PGSI     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 472  474      UNM_HW_PEGSI_CRB_AGT_ADR)
 473  475  #define UNM_HW_CRB_HUB_AGT_ADR_PGSD     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 474  476      UNM_HW_PEGSD_CRB_AGT_ADR)
 475  477  #define UNM_HW_CRB_HUB_AGT_ADR_PGS0     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 476  478      UNM_HW_PEGS0_CRB_AGT_ADR)
 477  479  #define UNM_HW_CRB_HUB_AGT_ADR_PGS1     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 478  480      UNM_HW_PEGS1_CRB_AGT_ADR)
 479  481  #define UNM_HW_CRB_HUB_AGT_ADR_PGS2     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 480  482      UNM_HW_PEGS2_CRB_AGT_ADR)
 481  483  #define UNM_HW_CRB_HUB_AGT_ADR_PGS3     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 482  484      UNM_HW_PEGS3_CRB_AGT_ADR)
 483  485  #define UNM_HW_CRB_HUB_AGT_ADR_PGSC     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 484  486      UNM_HW_PEGSC_CRB_AGT_ADR)
 485  487  
 486  488  #define UNM_HW_CRB_HUB_AGT_ADR_CAM      ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 487  489      UNM_HW_NCM_CRB_AGT_ADR)
 488  490  #define UNM_HW_CRB_HUB_AGT_ADR_TIMR     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 489  491      UNM_HW_TMR_CRB_AGT_ADR)
 490  492  #define UNM_HW_CRB_HUB_AGT_ADR_XDMA     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 491  493      UNM_HW_XDMA_CRB_AGT_ADR)
 492  494  #define UNM_HW_CRB_HUB_AGT_ADR_SN       ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 493  495      UNM_HW_SN_CRB_AGT_ADR)
 494  496  #define UNM_HW_CRB_HUB_AGT_ADR_I2Q      ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 495  497      UNM_HW_I2Q_CRB_AGT_ADR)
 496  498  #define UNM_HW_CRB_HUB_AGT_ADR_ROMUSB   ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 497  499      UNM_HW_ROMUSB_CRB_AGT_ADR)
 498  500  #define UNM_HW_CRB_HUB_AGT_ADR_OCM0     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 499  501      UNM_HW_OCM0_CRB_AGT_ADR)
 500  502  #define UNM_HW_CRB_HUB_AGT_ADR_OCM1     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 501  503      UNM_HW_OCM1_CRB_AGT_ADR)
 502  504  #define UNM_HW_CRB_HUB_AGT_ADR_LPC      ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 503  505      UNM_HW_LPC_CRB_AGT_ADR)
 504  506  
 505  507  /*
 506  508   * ROM USB CRB space is divided into 4 regions depending on decode of
 507  509   * address bits [19:16]
 508  510   */
 509  511  #define ROMUSB_GLB              (UNM_CRB_ROMUSB + 0x00000)
 510  512  #define ROMUSB_ROM              (UNM_CRB_ROMUSB + 0x10000)
 511  513  #define ROMUSB_USB              (UNM_CRB_ROMUSB + 0x20000)
 512  514  #define ROMUSB_DIRECT_ROM       (UNM_CRB_ROMUSB + 0x30000)
 513  515  #define ROMUSB_TAP              (UNM_CRB_ROMUSB + 0x40000)
 514  516  
 515  517  /* ROMUSB  GLB register definitions */
 516  518  #define UNM_ROMUSB_GLB_CONTROL          (ROMUSB_GLB + 0x0000)
 517  519  #define UNM_ROMUSB_GLB_STATUS           (ROMUSB_GLB + 0x0004)
 518  520  #define UNM_ROMUSB_GLB_SW_RESET         (ROMUSB_GLB + 0x0008)
 519  521  #define UNM_ROMUSB_GLB_PAD_GPIO_I       (ROMUSB_GLB + 0x000c)
 520  522  #define UNM_ROMUSB_GLB_RNG_PLL_CTL      (ROMUSB_GLB + 0x0010)
 521  523  #define UNM_ROMUSB_GLB_TEST_MUX_O       (ROMUSB_GLB + 0x0014)
 522  524  #define UNM_ROMUSB_GLB_PLL0_CTRL        (ROMUSB_GLB + 0x0018)
 523  525  #define UNM_ROMUSB_GLB_PLL1_CTRL        (ROMUSB_GLB + 0x001c)
 524  526  #define UNM_ROMUSB_GLB_PLL2_CTRL        (ROMUSB_GLB + 0x0020)
 525  527  #define UNM_ROMUSB_GLB_PLL3_CTRL        (ROMUSB_GLB + 0x0024)
 526  528  #define UNM_ROMUSB_GLB_PLL_LOCK         (ROMUSB_GLB + 0x0028)
 527  529  #define UNM_ROMUSB_GLB_EXTERN_INT       (ROMUSB_GLB + 0x002c)
 528  530  #define UNM_ROMUSB_GLB_PH_RST           (ROMUSB_GLB + 0x0030)
 529  531  #define UNM_ROMUSB_GLB_PS_RST           (ROMUSB_GLB + 0x0034)
 530  532  #define UNM_ROMUSB_GLB_CAS_RST          (ROMUSB_GLB + 0x0038)
 531  533  #define UNM_ROMUSB_GLB_MIU_RST          (ROMUSB_GLB + 0x003c)
 532  534  #define UNM_ROMUSB_GLB_CRB_RST          (ROMUSB_GLB + 0x0040)
 533  535  #define UNM_ROMUSB_GLB_TEST_MUX_SEL     (ROMUSB_GLB + 0x0044)
 534  536  #define UNM_ROMUSB_GLB_MN_COM_A2T       (ROMUSB_GLB + 0x0050)
 535  537  #define UNM_ROMUSB_GLB_MN_COM_A2T       (ROMUSB_GLB + 0x0050)
 536  538  #define UNM_ROMUSB_GLB_REV_ID           (ROMUSB_GLB + 0x0054)
 537  539  #define UNM_ROMUSB_GLB_PEGTUNE_DONE     (ROMUSB_GLB + 0x005c)
 538  540  #define UNM_ROMUSB_GLB_VENDOR_DEV_ID    (ROMUSB_GLB + 0x0058)
 539  541  #define UNM_ROMUSB_GLB_CHIP_CLK_CTRL    (ROMUSB_GLB + 0x00a8)
 540  542  
 541  543  #define UNM_ROMUSB_GPIO(n) ((n) <= 15 ? (ROMUSB_GLB + 0x60 + (4 * (n))): \
 542  544          ((n) <= 18) ? (ROMUSB_GLB + 0x70 + (4 * (n))) : \
 543  545          (ROMUSB_GLB + 0x70 + (4 * (19))))
 544  546  
 545  547  #define UNM_ROMUSB_ROM_CONTROL          (ROMUSB_ROM + 0x0000)
 546  548  #define UNM_ROMUSB_ROM_INSTR_OPCODE     (ROMUSB_ROM + 0x0004)
 547  549  #define UNM_ROMUSB_ROM_ADDRESS          (ROMUSB_ROM + 0x0008)
 548  550  #define UNM_ROMUSB_ROM_WDATA            (ROMUSB_ROM + 0x000c)
 549  551  #define UNM_ROMUSB_ROM_ABYTE_CNT        (ROMUSB_ROM + 0x0010)
 550  552  #define UNM_ROMUSB_ROM_DUMMY_BYTE_CNT   (ROMUSB_ROM + 0x0014)
 551  553  #define UNM_ROMUSB_ROM_RDATA            (ROMUSB_ROM + 0x0018)
 552  554  #define UNM_ROMUSB_ROM_AGT_TAG          (ROMUSB_ROM + 0x001c)
 553  555  #define UNM_ROMUSB_ROM_TIME_PARM        (ROMUSB_ROM + 0x0020)
 554  556  #define UNM_ROMUSB_ROM_CLK_DIV          (ROMUSB_ROM + 0x0024)
 555  557  #define UNM_ROMUSB_ROM_MISS_INSTR       (ROMUSB_ROM + 0x0028)
 556  558  
 557  559  #define UNM_ROMUSB_ROM_WRSR_INSTR       0x01
 558  560  #define UNM_ROMUSB_ROM_PP_INSTR         0x02
 559  561  #define UNM_ROMUSB_ROM_READ_INSTR       0x03
 560  562  #define UNM_ROMUSB_ROM_WRDI_INSTR       0x04
 561  563  #define UNM_ROMUSB_ROM_RDSR_INSTR       0x05
 562  564  #define UNM_ROMUSB_ROM_WREN_INSTR       0x06
 563  565  #define UNM_ROMUSB_ROM_FAST_RD_INSTR    0x0B
 564  566  #define UNM_ROMUSB_ROM_RES_INSTR        0xAB
 565  567  #define UNM_ROMUSB_ROM_BE_INSTR         0xC7
 566  568  #define UNM_ROMUSB_ROM_DP_INSTR         0xC9
 567  569  #define UNM_ROMUSB_ROM_SE_INSTR         0xD8
 568  570  
 569  571  /* Lock IDs for ROM lock */
 570  572  #define ROM_LOCK_DRIVER         0x0d417340
 571  573  
 572  574  /* Lock IDs for PHY lock */
 573  575  #define PHY_LOCK_DRIVER         0x44524956
 574  576  
 575  577  #define UNM_PCI_CRB_WINDOWSIZE  0x00100000    /* all are 1MB windows */
 576  578  #define UNM_PCI_CRB_WINDOW(A)   (UNM_PCI_CRBSPACE + (A)*UNM_PCI_CRB_WINDOWSIZE)
 577  579  #define UNM_CRB_C2C_0           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C0))
 578  580  #define UNM_CRB_C2C_1           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C1))
 579  581  #define UNM_CRB_C2C_2           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C2))
 580  582  #define UNM_CRB_CAM             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAM))
 581  583  #define UNM_CRB_CASPER          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS))
 582  584  #define UNM_CRB_CASPER_0        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS0))
 583  585  #define UNM_CRB_CASPER_1        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS1))
 584  586  #define UNM_CRB_CASPER_2        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS2))
 585  587  #define UNM_CRB_DDR_MD          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_MS))
 586  588  #define UNM_CRB_DDR_NET         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_MN))
 587  589  #define UNM_CRB_EPG             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_EG))
 588  590  #define UNM_CRB_I2Q             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2Q))
 589  591  #define UNM_CRB_NIU             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_NIU))
 590  592  /* HACK upon HACK upon HACK (for PCIE builds) */
 591  593  #define UNM_CRB_PCIX_HOST       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PH))
 592  594  #define UNM_CRB_PCIX_HOST2      (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PH2))
 593  595  #define UNM_CRB_PCIX_MD         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PS))
 594  596  #define UNM_CRB_PCIE            (UNM_CRB_PCIX_MD)
 595  597  /* window 1 pcie slot */
 596  598  #define UNM_CRB_PCIE2           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PS2))
 597  599  
 598  600  #define UNM_CRB_PEG_MD_0        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS0))
 599  601  #define UNM_CRB_PEG_MD_1        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS1))
 600  602  #define UNM_CRB_PEG_MD_2        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS2))
 601  603  #define UNM_CRB_PEG_MD_3        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS3))
 602  604  #define UNM_CRB_PEG_MD_3        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS3))
 603  605  #define UNM_CRB_PEG_MD_D        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGSD))
 604  606  #define UNM_CRB_PEG_MD_I        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGSI))
 605  607  #define UNM_CRB_PEG_NET_0       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN0))
 606  608  #define UNM_CRB_PEG_NET_1       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN1))
 607  609  #define UNM_CRB_PEG_NET_2       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN2))
 608  610  #define UNM_CRB_PEG_NET_3       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN3))
 609  611  #define UNM_CRB_PEG_NET_4       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN4))
 610  612  #define UNM_CRB_PEG_NET_D       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGND))
 611  613  #define UNM_CRB_PEG_NET_I       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGNI))
 612  614  #define UNM_CRB_PQM_MD          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_QMS))
 613  615  #define UNM_CRB_PQM_NET         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_QMN))
 614  616  #define UNM_CRB_QDR_MD          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SS))
 615  617  #define UNM_CRB_QDR_NET         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SN))
 616  618  #define UNM_CRB_ROMUSB          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_ROMUSB))
 617  619  #define UNM_CRB_RPMX_0          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX0))
 618  620  #define UNM_CRB_RPMX_1          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX1))
 619  621  #define UNM_CRB_RPMX_2          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX2))
 620  622  #define UNM_CRB_RPMX_3          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX3))
 621  623  #define UNM_CRB_RPMX_4          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX4))
 622  624  #define UNM_CRB_RPMX_5          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX5))
 623  625  #define UNM_CRB_RPMX_6          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX6))
 624  626  #define UNM_CRB_RPMX_7          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX7))
 625  627  #define UNM_CRB_SQM_MD_0        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS0))
 626  628  #define UNM_CRB_SQM_MD_1        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS1))
 627  629  #define UNM_CRB_SQM_MD_2        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS2))
 628  630  #define UNM_CRB_SQM_MD_3        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS3))
 629  631  #define UNM_CRB_SQM_NET_0       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN0))
 630  632  #define UNM_CRB_SQM_NET_1       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN1))
 631  633  #define UNM_CRB_SQM_NET_2       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN2))
 632  634  #define UNM_CRB_SQM_NET_3       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN3))
 633  635  #define UNM_CRB_SRE             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SRE))
 634  636  #define UNM_CRB_TIMER           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_TIMR))
 635  637  #define UNM_CRB_XDMA            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_XDMA))
 636  638  #define UNM_CRB_I2C0            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2C0))
 637  639  #define UNM_CRB_I2C1            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2C1))
 638  640  #define UNM_CRB_OCM0            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_OCM0))
 639  641  #define UNM_CRB_SMB             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SMB))
 640  642  
 641  643  #define UNM_CRB_MAX             (UNM_PCI_CRB_WINDOW(64))
 642  644  
 643  645  /*
 644  646   * ====================== BASE ADDRESSES ON-CHIP ======================
 645  647   * Base addresses of major components on-chip.
 646  648   * ====================== BASE ADDRESSES ON-CHIP ======================
 647  649   */
 648  650  #define UNM_ADDR_DDR_NET        0x0000000000000000
 649  651  #define UNM_ADDR_DDR_NET_MAX    0x000000000fffffff
 650  652  
 651  653  /*
 652  654   * Imbus address bit used to indicate a host address. This bit is
 653  655   * eliminated by the pcie bar and bar select before presentation
 654  656   * over pcie.
 655  657   */
 656  658  /* host memory via IMBUS */
 657  659  #define NX_P2_ADDR_PCIE         0x0000000800000000
 658  660  #define NX_P3_ADDR_PCIE         0x0000008000000000
 659  661  #define UNM_ADDR_PCIE_MAX       0x0000000FFFFFFFFF
 660  662  #define UNM_ADDR_OCM0           0x0000000200000000
 661  663  #define UNM_ADDR_OCM0_MAX       0x00000002000fffff
 662  664  #define UNM_ADDR_OCM1           0x0000000200400000
 663  665  #define UNM_ADDR_OCM1_MAX       0x00000002004fffff
 664  666  #define UNM_ADDR_QDR_NET        0x0000000300000000
 665  667  
 666  668  #define NX_P2_ADDR_QDR_NET_MAX  0x00000003001fffff
 667  669  #define NX_P3_ADDR_QDR_NET_MAX  0x0000000303ffffff
 668  670  /*
 669  671   * The ifdef at the bottom should go. All drivers should start using the above
 670  672   * 2 defines.
 671  673   */
 672  674  #ifdef P3
 673  675  #define UNM_ADDR_QDR_NET_MAX    (NX_P3_ADDR_QDR_NET_MAX)
 674  676  #else
 675  677  #define UNM_ADDR_QDR_NET_MAX    (NX_P2_ADDR_QDR_NET_MAX)
 676  678  #endif
 677  679  
 678  680  #define D3_CRB_REG_FUN0         (UNM_PCIX_PS_REG(0x0084))
 679  681  #define D3_CRB_REG_FUN1         (UNM_PCIX_PS_REG(0x1084))
 680  682  #define D3_CRB_REG_FUN2         (UNM_PCIX_PS_REG(0x2084))
 681  683  #define D3_CRB_REG_FUN3         (UNM_PCIX_PS_REG(0x3084))
 682  684  
 683  685  
 684  686  #define ISR_I2Q_CLR_PCI_LO      (UNM_PCIX_PS_REG(UNM_I2Q_CLR_PCI_LO))
 685  687  #define ISR_I2Q_CLR_PCI_HI      (UNM_PCIX_PS_REG(UNM_I2Q_CLR_PCI_HI))
 686  688  #define UNM_PCI_ARCH_CRB_BASE   (UNM_PCI_DIRECT_CRB)
 687  689  
 688  690  #define UNM_PCI_MAPSIZE         128 /* we're mapping 128MB of mem on PCI bus */
 689  691  #define UNM_PCI_DDR_NET         0x00000000
 690  692  #define UNM_PCI_DDR_NET_MAX     0x01ffffff
 691  693  #define UNM_PCI_DDR_MD          0x02000000
 692  694  #define UNM_PCI_DDR_MD_MAX      0x03ffffff
 693  695  #define UNM_PCI_QDR_NET         0x04000000
 694  696  #define UNM_PCI_QDR_NET_MAX     0x043fffff
 695  697  #define UNM_PCI_DIRECT_CRB      0x04400000
 696  698  #define UNM_PCI_DIRECT_CRB_MAX  0x047fffff
 697  699  #define UNM_PCI_CAMQM           0x04800000
 698  700  #define UNM_PCI_CAMQM_MAX       0x04ffffff
 699  701  #define UNM_PCI_OCM0            0x05000000
 700  702  #define UNM_PCI_OCM0_MAX        0x050fffff
 701  703  #define UNM_PCI_OCM1            0x05100000
 702  704  #define UNM_PCI_OCM1_MAX        0x051fffff
 703  705  #define UNM_PCI_CRBSPACE        0x06000000
 704  706  #define UNM_PCI_CRBSPACE_MAX    0x07ffffff
 705  707  #define UNM_PCI_128MB_SIZE      0x08000000
 706  708  #define UNM_PCI_32MB_SIZE       0x02000000
 707  709  #define UNM_PCI_2MB_SIZE        0x00200000
 708  710  
 709  711  /*
 710  712   * Definitions relating to access/control of the Network Interface Unit
 711  713   * h/w block.
 712  714   */
 713  715  /*
 714  716   * Configuration registers.
 715  717   */
 716  718  #define UNM_NIU_MODE            (UNM_CRB_NIU + 0x00000)
 717  719  
 718  720  /*
 719  721   *   Register offsets for MN
 720  722   */
 721  723  #define MIU_CONTROL                     (0x000)
 722  724  #define MIU_TAG                         (0x004)
 723  725  #define MIU_TEST_AGT_CTRL               (0x090)
 724  726  #define MIU_TEST_AGT_ADDR_LO            (0x094)
 725  727  #define MIU_TEST_AGT_ADDR_HI            (0x098)
 726  728  #define MIU_TEST_AGT_WRDATA_LO          (0x0a0)
 727  729  #define MIU_TEST_AGT_WRDATA_HI          (0x0a4)
 728  730  #define MIU_TEST_AGT_WRDATA(i)          (0x0a0 + (4 * (i)))
 729  731  #define MIU_TEST_AGT_RDDATA_LO          (0x0a8)
 730  732  #define MIU_TEST_AGT_RDDATA_HI          (0x0ac)
 731  733  #define MIU_TEST_AGT_WRDATA_UPPER_LO    (0x0b0)
 732  734  #define MIU_TEST_AGT_WRDATA_UPPER_HI    (0x0b4)
 733  735  #define MIU_TEST_AGT_RDDATA_UPPER_LO    (0x0b8)
 734  736  #define MIU_TEST_AGT_RDDATA_UPPER_HI    (0x0bc)
 735  737  #define MIU_TEST_AGT_RDDATA(i)          (0x0a8 + (4 * (i)))
 736  738  #define MIU_TEST_AGT_ADDR_MASK          0xfffffff8
 737  739  #define MIU_TEST_AGT_UPPER_ADDR(off)    (0)
 738  740  
 739  741  /* MIU_TEST_AGT_CTRL flags. work for SIU as well */
 740  742  #define MIU_TA_CTL_START        1
 741  743  #define MIU_TA_CTL_ENABLE       2
 742  744  #define MIU_TA_CTL_WRITE        4
 743  745  #define MIU_TA_CTL_BUSY         8
 744  746  
 745  747  #define SIU_TEST_AGT_CTRL       (0x060)
 746  748  #define SIU_TEST_AGT_ADDR_LO    (0x064)
 747  749  #define SIU_TEST_AGT_ADDR_HI    (0x078)
 748  750  #define SIU_TEST_AGT_WRDATA_LO  (0x068)
 749  751  #define SIU_TEST_AGT_WRDATA_HI  (0x06c)
 750  752  #define SIU_TEST_AGT_WRDATA(i)  (0x068 + (4 * (i)))
 751  753  #define SIU_TEST_AGT_RDDATA_LO  (0x070)
 752  754  #define SIU_TEST_AGT_RDDATA_HI  (0x074)
 753  755  #define SIU_TEST_AGT_RDDATA(i)  (0x070 + (4 * (i)))
 754  756  
 755  757  #define SIU_TEST_AGT_ADDR_MASK  0x3ffff8
 756  758  #define SIU_TEST_AGT_UPPER_ADDR(off)    ((off) >> 22)
 757  759  #define XG_LINK_UP              0x10
 758  760  
 759  761  
 760  762  /* ======================  Configuration Constants ======================== */
 761  763  #define UNM_NIU_PHY_WAITLEN     200000    /* 200ms delay in each loop */
 762  764  #define UNM_NIU_PHY_WAITMAX     50    /* 10 seconds before we give up */
  
    | 
      ↓ open down ↓ | 
    657 lines elided | 
    
      ↑ open up ↑ | 
  
 763  765  #define UNM_NIU_MAX_GBE_PORTS   4
 764  766  #define UNM_NIU_MAX_XG_PORTS    2
 765  767  #define MIN_CORE_CLK_SPEED      200
 766  768  #define MAX_CORE_CLK_SPEED      400
 767  769  #define ACCEPTABLE_CORE_CLK_RANGE(speed) ((speed >= MIN_CORE_CLK_SPEED) && \
 768  770          (speed <= MAX_CORE_CLK_SPEED))
 769  771  
 770  772  #define P2_TICKS_PER_SEC        2048
 771  773  #define P2_MIN_TICKS_PER_SEC    (P2_TICKS_PER_SEC - 10)
 772  774  #define P2_MAX_TICKS_PER_SEC    (P2_TICKS_PER_SEC + 10)
 773      -#define CHECK_TICKS_PER_SEC(ticks)      ((ticks >= P2_MIN_TICKS_PER_SEC) &&  \
      775 +#define CHECK_TICKS_PER_SEC(ticks)      ((ticks >= P2_MIN_TICKS_PER_SEC) && \
 774  776          (ticks <= P2_MAX_TICKS_PER_SEC))
 775  777  
 776  778  /* CAM RAM */
 777  779  #define UNM_CAM_RAM_BASE         (UNM_CRB_CAM + 0x02000)
 778  780  #define UNM_CAM_RAM(reg)         (UNM_CAM_RAM_BASE + (reg))
 779  781  
 780  782  #define UNM_PORT_MODE_NONE              0
 781  783  #define UNM_PORT_MODE_XG                1
 782  784  #define UNM_PORT_MODE_GB                2
 783  785  #define UNM_PORT_MODE_802_3_AP          3
 784  786  #define UNM_PORT_MODE_AUTO_NEG          4
 785  787  #define UNM_PORT_MODE_AUTO_NEG_1G       5
 786  788  #define UNM_PORT_MODE_AUTO_NEG_XG       6
 787  789  #define UNM_PORT_MODE_ADDR              (UNM_CAM_RAM(0x24))
 788  790  #define UNM_FW_PORT_MODE_ADDR           (UNM_CAM_RAM(0x28))
 789  791  #define UNM_WOL_PORT_MODE               (UNM_CAM_RAM(0x198))
 790  792  #define UNM_RAM_COLD_BOOT               (UNM_CAM_RAM(0x1fc))
 791  793  #define UNM_BUS_DEV_NO                  (UNM_CAM_RAM(0x114))
 792  794  
 793  795  #define NX_PEG_TUNE_MN_SPD_ZEROED       0x80000000
 794      -#define NX_BOOT_LOADER_MN_OTHER         0x100   /* other problem with DIMM */
      796 +#define NX_BOOT_LOADER_MN_OTHER         0x100   /* other problem with DIMM */
 795  797  #define NX_BOOT_LOADER_MN_NOT_DDR2      0x80    /* not a DDR2 DIMM */
 796  798  #define NX_BOOT_LOADER_MN_NO_ECC        0x40    /* ECC not supported */
 797  799  #define NX_BOOT_LOADER_MN_WRONG_CAS     0x20    /* CL 5 not supported */
 798  800  #define NX_BOOT_LOADER_MN_NOT_REG       0x10    /* not a registered DIMM */
 799  801  #define NX_BOOT_LOADER_MN_ISSUE         0xff00ffff
 800  802  #define NX_PEG_TUNE_MN_PRESENT          0x1
 801  803  #define NX_PEG_TUNE_CAPABILITY          (UNM_CAM_RAM(0x02c))
 802  804  
 803  805  #define UNM_ROM_LOCK_ID                 (UNM_CAM_RAM(0x100))
 804  806  #define UNM_I2C_ROM_LOCK_ID             (UNM_CAM_RAM(0x104))
 805  807  #define UNM_PHY_LOCK_ID                 (UNM_CAM_RAM(0x120))
 806  808  #define UNM_CRB_WIN_LOCK_ID             (UNM_CAM_RAM(0x124))
 807  809  #define CAM_RAM_DMA_WATCHDOG_CTRL       0x14    /* See dma_watchdog_ctrl_t */
 808  810  #define UNM_EFUSE_CHIP_ID_HIGH          (UNM_CAM_RAM(0x18))
 809  811  #define UNM_EFUSE_CHIP_ID_LOW           (UNM_CAM_RAM(0x1c))
 810  812  
 811  813  #define UNM_FW_VERSION_MAJOR            (UNM_CAM_RAM(0x150))
 812  814  #define UNM_FW_VERSION_MINOR            (UNM_CAM_RAM(0x154))
 813  815  #define UNM_FW_VERSION_SUB              (UNM_CAM_RAM(0x158))
 814  816  #define UNM_TCP_FW_VERSION_MAJOR_ADDR   (UNM_CAM_RAM(0x15c))
 815  817  #define UNM_TCP_FW_VERSION_MINOR_ADDR   (UNM_CAM_RAM(0x160))
 816  818  #define UNM_TCP_FW_VERSION_SUB_ADDR     (UNM_CAM_RAM(0x164))
 817  819  #define UNM_FW_VERSION_BUILD            (UNM_CAM_RAM(0x168))
 818  820  #define UNM_PCIE_REG(reg)               (UNM_CRB_PCIE + (reg))
 819  821  
 820  822  #define PCIE_DCR                (0x00d8)
 821  823  #define PCIE_DB_DATA2           (0x10070)
 822  824  #define PCIE_DB_CTRL            (0x100a0)
 823  825  #define PCIE_DB_ADDR            (0x100a4)
 824  826  #define PCIE_DB_DATA            (0x100a8)
 825  827  #define PCIE_IMBUS_CONTROL      (0x101b8)
 826  828  #define PCIE_SETUP_FUNCTION     (0x12040)
 827  829  #define PCIE_SETUP_FUNCTION2    (0x12048)
 828  830  #define PCIE_TGT_SPLIT_CHICKEN  (0x12080)
 829  831  #define PCIE_CHICKEN3           (0x120c8)
 830  832  #define PCIE_MAX_MASTER_SPLIT   (0x14048)
 831  833  #define PCIE_MAX_DMA_XFER_SIZE  (0x1404c)
 832  834  #define UNM_WOL_WAKE            (UNM_CAM_RAM(0x180))
 833  835  #define UNM_WOL_CONFIG_NV       (UNM_CAM_RAM(0x184))
 834  836  #define UNM_WOL_CONFIG          (UNM_CAM_RAM(0x188))
 835  837  #define UNM_PRE_WOL_RX_ENABLE   (UNM_CAM_RAM(0x18c))
 836  838  #define UNM_FW_RESET            (UNM_CAM_RAM(0x138))
 837  839  /*
 838  840   * Following define address space withing PCIX CRB space to talk with
 839  841   * devices on the storage side PCI bus.
 840  842   */
 841  843  #define PCIX_PS_MEM_SPACE       (0x90000)
 842  844  
 843  845  #define UNM_PCIX_PH_REG(reg)    (UNM_CRB_PCIE + (reg))
 844  846  
 845  847  /*
 846  848   * Configuration registers. These are the same offsets on both host and
 847  849   * storage side PCI blocks.
 848  850   */
 849  851  #define PCIX_PS_OP_ADDR_LO      (0x10000) /* Used for PS PCI Memory access */
 850  852  #define PCIX_PS_OP_ADDR_HI      (0x10004) /* via CRB  (PS side only) */
 851  853  
 852  854  #define PCIX_MS_WINDOW          (0x10204) /* UNUSED */
 853  855  
 854  856  #define PCIX_CRB_WINDOW         (0x10210)
 855  857  #define PCIX_CRB_WINDOW_F0      (0x10210)
 856  858  #define PCIX_CRB_WINDOW_F1      (0x10230)
 857  859  #define PCIX_CRB_WINDOW_F2      (0x10250)
 858  860  #define PCIX_CRB_WINDOW_F3      (0x10270)
 859  861  #define PCIX_CRB_WINDOW_F4      (0x102ac)
 860  862  #define PCIX_CRB_WINDOW_F5      (0x102bc)
 861  863  #define PCIX_CRB_WINDOW_F6      (0x102cc)
 862  864  #define PCIX_CRB_WINDOW_F7      (0x102dc)
 863  865  #define PCIE_CRB_WINDOW_REG(func)       (((func) < 4) ? \
 864  866          (PCIX_CRB_WINDOW_F0 + (0x20 * (func))) : \
 865  867          (PCIX_CRB_WINDOW_F4 + (0x10 * ((func) - 4))))
 866  868  
 867  869  #define PCIX_MN_WINDOW          (0x10200)
 868  870  #define PCIX_MN_WINDOW_F0       (0x10200)
 869  871  #define PCIX_MN_WINDOW_F1       (0x10220)
 870  872  #define PCIX_MN_WINDOW_F2       (0x10240)
 871  873  #define PCIX_MN_WINDOW_F3       (0x10260)
 872  874  #define PCIX_MN_WINDOW_F4       (0x102a0)
 873  875  #define PCIX_MN_WINDOW_F5       (0x102b0)
 874  876  #define PCIX_MN_WINDOW_F6       (0x102c0)
 875  877  #define PCIX_MN_WINDOW_F7       (0x102d0)
 876  878  #define PCIE_MN_WINDOW_REG(func)        (((func) < 4) ? \
 877  879          (PCIX_MN_WINDOW_F0 + (0x20 * (func))) : \
 878  880          (PCIX_MN_WINDOW_F4 + (0x10 * ((func) - 4))))
 879  881  
 880  882  #define PCIX_SN_WINDOW          (0x10208)
 881  883  #define PCIX_SN_WINDOW_F0       (0x10208)
 882  884  #define PCIX_SN_WINDOW_F1       (0x10228)
 883  885  #define PCIX_SN_WINDOW_F2       (0x10248)
 884  886  #define PCIX_SN_WINDOW_F3       (0x10268)
 885  887  #define PCIX_SN_WINDOW_F4       (0x102a8)
 886  888  #define PCIX_SN_WINDOW_F5       (0x102b8)
 887  889  #define PCIX_SN_WINDOW_F6       (0x102c8)
 888  890  #define PCIX_SN_WINDOW_F7       (0x102d8)
 889  891  #define PCIE_SN_WINDOW_REG(func)        (((func) < 4) ? \
 890  892          (PCIX_SN_WINDOW_F0 + (0x20 * (func))) : \
 891  893          (PCIX_SN_WINDOW_F4 + (0x10 * ((func) - 4))))
 892  894  
 893  895  #define UNM_PCIX_PS_REG(reg)    (UNM_CRB_PCIX_MD + (reg))
 894  896  #define UNM_PCIX_PS2_REG(reg)   (UNM_CRB_PCIE2 + (reg))
 895  897  #define MANAGEMENT_COMMAND_REG  (UNM_CRB_PCIE + (4))
 896  898  
 897  899  #define UNM_PH_INT_MASK         (UNM_CRB_PCIE + PCIX_INT_MASK)
 898  900  
 899  901  /*
 900  902   * Definitions relating to access/control of the I2Q h/w block.
 901  903   */
 902  904  /*
 903  905   * Configuration registers.
 904  906   */
 905  907  #define UNM_I2Q_CONFIG          (UNM_CRB_I2Q + 0x00000)
 906  908  #define UNM_I2Q_ENA_PCI_LO      (UNM_CRB_I2Q + 0x00010)
 907  909  #define UNM_I2Q_ENA_PCI_HI      (UNM_CRB_I2Q + 0x00014)
 908  910  #define UNM_I2Q_ENA_CASPER_LO   (UNM_CRB_I2Q + 0x00018)
 909  911  #define UNM_I2Q_ENA_CASPER_HI   (UNM_CRB_I2Q + 0x0001c)
 910  912  #define UNM_I2Q_ENA_QM_LO       (UNM_CRB_I2Q + 0x00020)
 911  913  #define UNM_I2Q_ENA_QM_HI       (UNM_CRB_I2Q + 0x00024)
 912  914  #define UNM_I2Q_CLR_PCI_LO      (UNM_CRB_I2Q + 0x00030)
 913  915  #define UNM_I2Q_CLR_PCI_HI      (UNM_CRB_I2Q + 0x00034)
 914  916  #define UNM_I2Q_CLR_CASPER_LO   (UNM_CRB_I2Q + 0x00038)
 915  917  #define UNM_I2Q_CLR_CASPER_HI   (UNM_CRB_I2Q + 0x0003c)
 916  918  #define UNM_I2Q_MSG_HDR_LO(I)   (UNM_CRB_I2Q + 0x00100 + (I) * 0x8)
 917  919  #define UNM_I2Q_MSG_HDR_HI(I)   (UNM_CRB_I2Q + 0x00104 + (I) * 0x8)
 918  920  
 919  921  #ifdef PCIX
 920  922  #define UNM_DMA_BASE(U)         (UNM_CRB_PCIX_HOST + 0x20000 + ((U) << 16))
 921  923  #else
 922  924  #define UNM_DMA_BASE(U)         (UNM_CRB_PCIX_MD + 0x20000 + ((U) << 6))
 923  925  #endif
 924  926  #define UNM_DMA_COMMAND(U)      (UNM_DMA_BASE(U) + 0x00008)
 925  927  
 926  928  #define PCIE_SEM2_LOCK          (0x1c010)       /* Flash lock */
 927  929  #define PCIE_SEM2_UNLOCK        (0x1c014)       /* Flash unlock */
 928  930  #define PCIE_SEM3_LOCK          (0x1c018)       /* Phy lock */
 929  931  #define PCIE_SEM3_UNLOCK        (0x1c01c)       /* Phy unlock */
 930  932  #define PCIE_SEM4_LOCK          (0x1c020)       /* I2C lock */
 931  933  #define PCIE_SEM4_UNLOCK        (0x1c024)       /* I2C unlock */
 932  934  #define PCIE_SEM5_LOCK          (0x1c028)       /* API lock */
 933  935  #define PCIE_SEM5_UNLOCK        (0x1c02c)       /* API unlock */
 934  936  #define PCIE_SEM6_LOCK          (0x1c030)       /* sw lock */
 935  937  #define PCIE_SEM6_UNLOCK        (0x1c034)       /* sw unlock */
 936  938  #define PCIE_SEM7_LOCK          (0x1c038)       /* crb win lock */
 937  939  #define PCIE_SEM7_UNLOCK        (0x1c03c)       /* crbwin unlock */
 938  940  
 939  941  #define PCIE_PS_STRAP_RESET     (0x18000)
 940  942  
 941  943  #define M25P_INSTR_WREN         0x06
 942  944  #define M25P_INSTR_RDSR         0x05
 943  945  #define M25P_INSTR_PP           0x02
 944  946  #define M25P_INSTR_SE           0xd8
 945  947  #define CAM_RAM_P2I_ENABLE      0xc
 946  948  #define CAM_RAM_P2D_ENABLE      0x8
 947  949  #define PCIX_IMBTAG             (0x18004)
 948  950  
 949  951  #define CAM_RAM_PEG_ENABLES     0x4
  
    | 
      ↓ open down ↓ | 
    145 lines elided | 
    
      ↑ open up ↑ | 
  
 950  952  
 951  953  /*
 952  954   * The PCI VendorID and DeviceID for our board.
 953  955   */
 954  956  #define PCI_VENDOR_ID_NX8021            0x4040
 955  957  #define PCI_DEVICE_ID_NX8021_FC         0x0101
 956  958  
 957  959  /* ISP 3031 related declarations  */
 958  960  
 959  961  #define NX_MSIX_MEM_REGION_THRESHOLD    0x2000000
 960      -#define UNM_MSIX_TBL_SPACE              8192
      962 +#define UNM_MSIX_TBL_SPACE              8192
 961  963  #define UNM_PCI_REG_MSIX_TBL            0x44
 962  964  #define NX_PCI_MSIX_CONTROL             0x40
 963  965  
 964  966  typedef struct {
 965  967          uint32_t        valid;
 966  968          uint32_t        start_128M;
 967  969          uint32_t        end_128M;
 968  970          uint32_t        start_2M;
 969  971  } crb_128M_2M_sub_block_map_t;
 970  972  
 971  973  typedef struct {
 972  974          crb_128M_2M_sub_block_map_t sub_block[16];
 973  975  } crb_128M_2M_block_map_t;
 974  976  
 975  977  struct crb_addr_pair {
 976  978          uint32_t        addr;
 977  979          uint32_t        data;
 978  980  };
 979  981  
 980  982  #define ADDR_ERROR      ((unsigned long) 0xffffffff)
 981  983  #define MAX_CTL_CHECK   1000
 982  984  
 983  985  /*
 984  986   * ************************************************************************
 985  987   *              PCI related defines.
 986  988   * ************************************************************************
 987  989   */
 988  990  
 989  991  /*
 990  992   * Interrupt related defines.
 991  993   */
 992  994  #define PCIX_TARGET_STATUS      (0x10118)
 993  995  #define PCIX_TARGET_STATUS_F1   (0x10160)
 994  996  #define PCIX_TARGET_STATUS_F2   (0x10164)
 995  997  #define PCIX_TARGET_STATUS_F3   (0x10168)
 996  998  #define PCIX_TARGET_STATUS_F4   (0x10360)
 997  999  #define PCIX_TARGET_STATUS_F5   (0x10364)
 998 1000  #define PCIX_TARGET_STATUS_F6   (0x10368)
 999 1001  #define PCIX_TARGET_STATUS_F7   (0x1036c)
1000 1002  
1001 1003  #define PCIX_TARGET_MASK        (0x10128)
1002 1004  #define PCIX_TARGET_MASK_F1     (0x10170)
1003 1005  #define PCIX_TARGET_MASK_F2     (0x10174)
1004 1006  #define PCIX_TARGET_MASK_F3     (0x10178)
1005 1007  #define PCIX_TARGET_MASK_F4     (0x10370)
1006 1008  #define PCIX_TARGET_MASK_F5     (0x10374)
1007 1009  #define PCIX_TARGET_MASK_F6     (0x10378)
1008 1010  #define PCIX_TARGET_MASK_F7     (0x1037c)
1009 1011  
1010 1012  /*
1011 1013   * Message Signaled Interrupts
1012 1014   */
1013 1015  #define PCIX_MSI_F0             (0x13000)
1014 1016  #define PCIX_MSI_F1             (0x13004)
1015 1017  #define PCIX_MSI_F2             (0x13008)
1016 1018  #define PCIX_MSI_F3             (0x1300c)
1017 1019  #define PCIX_MSI_F4             (0x13010)
1018 1020  #define PCIX_MSI_F5             (0x13014)
1019 1021  #define PCIX_MSI_F6             (0x13018)
1020 1022  #define PCIX_MSI_F7             (0x1301c)
1021 1023  #define PCIX_MSI_F(FUNC)        (0x13000 +((FUNC) * 4))
1022 1024  
1023 1025  /*
1024 1026   *
1025 1027   */
1026 1028  #define PCIX_INT_VECTOR         (0x10100)
1027 1029  #define PCIX_INT_MASK           (0x10104)
1028 1030  
1029 1031  /*
1030 1032   * Interrupt state machine and other bits.
1031 1033   */
1032 1034  #define PCIE_MISCCFG_RC         (0x1206c)
1033 1035  
1034 1036  
1035 1037  #define ISR_INT_TARGET_STATUS           (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS))
1036 1038  #define ISR_INT_TARGET_STATUS_F1        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F1))
1037 1039  #define ISR_INT_TARGET_STATUS_F2        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F2))
1038 1040  #define ISR_INT_TARGET_STATUS_F3        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F3))
1039 1041  #define ISR_INT_TARGET_STATUS_F4        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F4))
1040 1042  #define ISR_INT_TARGET_STATUS_F5        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F5))
1041 1043  #define ISR_INT_TARGET_STATUS_F6        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F6))
1042 1044  #define ISR_INT_TARGET_STATUS_F7        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F7))
1043 1045  
1044 1046  #define ISR_INT_TARGET_MASK             (UNM_PCIX_PS_REG(PCIX_TARGET_MASK))
1045 1047  #define ISR_INT_TARGET_MASK_F1          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F1))
1046 1048  #define ISR_INT_TARGET_MASK_F2          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F2))
1047 1049  #define ISR_INT_TARGET_MASK_F3          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F3))
1048 1050  #define ISR_INT_TARGET_MASK_F4          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F4))
1049 1051  #define ISR_INT_TARGET_MASK_F5          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F5))
1050 1052  #define ISR_INT_TARGET_MASK_F6          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F6))
1051 1053  #define ISR_INT_TARGET_MASK_F7          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F7))
1052 1054  
1053 1055  #define ISR_INT_VECTOR                  (UNM_PCIX_PS_REG(PCIX_INT_VECTOR))
1054 1056  #define ISR_INT_MASK                    (UNM_PCIX_PS_REG(PCIX_INT_MASK))
1055 1057  #define ISR_INT_STATE_REG               (UNM_PCIX_PS_REG(PCIE_MISCCFG_RC))
1056 1058  
1057 1059  #define ISR_MSI_INT_TRIGGER(FUNC)       (UNM_PCIX_PS_REG(PCIX_MSI_F(FUNC)))
1058 1060  
1059 1061  
1060 1062  #define ISR_IS_LEGACY_INTR_IDLE(VAL)            (((VAL) & 0x300) == 0)
1061 1063  #define ISR_IS_LEGACY_INTR_TRIGGERED(VAL)       (((VAL) & 0x300) == 0x200)
1062 1064  
1063 1065  /*
1064 1066   * PCI Interrupt Vector Values.
  
    | 
      ↓ open down ↓ | 
    94 lines elided | 
    
      ↑ open up ↑ | 
  
1065 1067   */
1066 1068  #define PCIX_INT_VECTOR_BIT_F0  0x0080
1067 1069  #define PCIX_INT_VECTOR_BIT_F1  0x0100
1068 1070  #define PCIX_INT_VECTOR_BIT_F2  0x0200
1069 1071  #define PCIX_INT_VECTOR_BIT_F3  0x0400
1070 1072  #define PCIX_INT_VECTOR_BIT_F4  0x0800
1071 1073  #define PCIX_INT_VECTOR_BIT_F5  0x1000
1072 1074  #define PCIX_INT_VECTOR_BIT_F6  0x2000
1073 1075  #define PCIX_INT_VECTOR_BIT_F7  0x4000
1074 1076  
1075      -#define NX_LEGACY_INTR_CONFIG                                   \
1076      -{                                                               \
1077      -        {                                                       \
1078      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F0,       \
1079      -                .tgt_status_reg = ISR_INT_TARGET_STATUS,        \
1080      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK,          \
1081      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(0) },     \
     1077 +#define NX_LEGACY_INTR_CONFIG                                   \
     1078 +{                                                               \
     1079 +        {                                                       \
     1080 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F0,       \
     1081 +                .tgt_status_reg = ISR_INT_TARGET_STATUS,        \
     1082 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK,          \
     1083 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(0) },     \
1082 1084                                                                  \
1083      -        {                                                       \
1084      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F1,       \
1085      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F1,     \
1086      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F1,       \
1087      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(1) },     \
     1085 +        {                                                       \
     1086 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F1,       \
     1087 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F1,     \
     1088 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F1,       \
     1089 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(1) },     \
1088 1090                                                                  \
1089      -        {                                                       \
1090      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F2,       \
1091      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F2,     \
1092      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F2,       \
1093      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(2) },     \
     1091 +        {                                                       \
     1092 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F2,       \
     1093 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F2,     \
     1094 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F2,       \
     1095 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(2) },     \
1094 1096                                                                  \
1095      -        {                                                       \
1096      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F3,       \
1097      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F3,     \
1098      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F3,       \
1099      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(3) },     \
1100      -                                                                \
1101      -        {                                                       \
1102      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F4,       \
1103      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F4,     \
1104      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F4,       \
1105      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(4) },     \
     1097 +        {                                                       \
     1098 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F3,       \
     1099 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F3,     \
     1100 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F3,       \
     1101 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(3) },     \
1106 1102                                                                  \
1107      -        {                                                       \
1108      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F5,       \
1109      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F5,     \
1110      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F5,       \
1111      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(5) },     \
     1103 +        {                                                       \
     1104 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F4,       \
     1105 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F4,     \
     1106 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F4,       \
     1107 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(4) },     \
1112 1108                                                                  \
1113      -        {                                                       \
1114      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F6,       \
1115      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F6,     \
1116      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F6,       \
1117      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(6) },     \
     1109 +        {                                                       \
     1110 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F5,       \
     1111 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F5,     \
     1112 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F5,       \
     1113 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(5) },     \
1118 1114                                                                  \
1119      -        {                                                       \
1120      -                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F7,       \
1121      -                .tgt_status_reg = ISR_INT_TARGET_STATUS_F7,     \
1122      -                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F7,       \
1123      -                .pci_int_reg    = ISR_MSI_INT_TRIGGER(7) },     \
     1115 +        {                                                       \
     1116 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F6,       \
     1117 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F6,     \
     1118 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F6,       \
     1119 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(6) },     \
     1120 +                                                                \
     1121 +        {                                                       \
     1122 +                .int_vec_bit    = PCIX_INT_VECTOR_BIT_F7,       \
     1123 +                .tgt_status_reg = ISR_INT_TARGET_STATUS_F7,     \
     1124 +                .tgt_mask_reg   = ISR_INT_TARGET_MASK_F7,       \
     1125 +                .pci_int_reg    = ISR_MSI_INT_TRIGGER(7) },     \
1124 1126  }
1125 1127  
1126 1128  #define BOOTLD_START            0x10000
1127 1129  #define IMAGE_START             0x43000
1128 1130  
1129 1131  /* Magic number to let user know flash is programmed */
1130 1132  #define UNM_BDINFO_MAGIC        0x12345678
1131 1133  #define FW_SIZE_OFFSET          0x3e840c
1132 1134  
1133 1135  #define PCI_CAP_ID_GEN          0x10
1134 1136  #define PCI_CAP_ID_PCI_E        0x10    /* PCI Express supported */
1135 1137  #define PCI_CAP_ID_EXP          0x10    /* PCI Express */
1136 1138  #define PCI_EXP_LNKSTA          18      /* Link Status */
1137 1139  #define MAX_CRB_XFORM           60
1138 1140  #define MTU_FUDGE_FACTOR        100
1139 1141  
1140 1142  #define crb_addr_transform(name) \
1141 1143          (crb_addr_xform[UNM_HW_PX_MAP_CRB_##name] = \
1142 1144          UNM_HW_CRB_HUB_AGT_ADR_##name << 20)
1143 1145  
1144 1146  #define MASK(n)         ((1ULL << (n)) - 1)
1145 1147  #define MN_WIN(addr)    (((addr & 0x1fc0000) >> 1) | ((addr >> 25) & 0x3ff))
1146 1148  /* 64K? */
1147 1149  #define OCM_WIN(addr)   (((addr & 0x1ff0000) >> 1) | ((addr >> 25) & 0x3ff))
1148 1150  
1149 1151  #define MS_WIN(addr)            (addr & 0x0ffc0000)
1150 1152  #define UNM_PCI_MN_2M           (0)
1151 1153  #define UNM_PCI_MS_2M           (0x80000)
1152 1154  #define UNM_PCI_OCM0_2M         (0xc0000)
1153 1155  #define VALID_OCM_ADDR(addr)    (((addr) & 0x3f800) != 0x3f800)
1154 1156  #define GET_MEM_OFFS_2M(addr)   (addr & MASK(18))
1155 1157  
1156 1158  #define UNM_BOARDTYPE           0x4008
1157 1159  #define UNM_BOARDNUM            0x400c
1158 1160  #define UNM_CHIPNUM             0x4010
1159 1161  
1160 1162  /* CRB window related */
1161 1163  #define CRB_BLK(off)            ((off >> 20) & 0x3f)
1162 1164  #define CRB_SUBBLK(off)         ((off >> 16) & 0xf)
  
    | 
      ↓ open down ↓ | 
    29 lines elided | 
    
      ↑ open up ↑ | 
  
1163 1165  #define CRB_WINDOW_2M           (0x130060)
1164 1166  #define UNM_PCI_CAMQM_2M_END    (0x04800800UL)
1165 1167  #define CRB_HI(off)             ((crb_hub_agt[CRB_BLK(off)] << 20) | \
1166 1168          ((off) & 0xf0000))
1167 1169  #define UNM_PCI_CAMQM_2M_BASE   (0x000ff800UL)
1168 1170  #define CRB_INDIRECT_2M         (0x1e0000UL)
1169 1171  /* #define      ADDR_ERROR ((unsigned long ) 0xffffffff) */
1170 1172  
1171 1173  /* PCI Windowing for DDR regions.  */
1172 1174  #define QL_8021_ADDR_IN_RANGE(addr, low, high)  \
1173      -        (((addr) <= (high)) && ((addr) >= (low)))
     1175 +        (((addr) <= (high)) && ((int64_t)(addr) >= (low)))
1174 1176  
1175 1177  #define CRB_WIN_LOCK_TIMEOUT    100000000
1176 1178  #define ROM_LOCK_TIMEOUT        100
1177 1179  #define ROM_MAX_TIMEOUT         100
1178 1180  #define IDC_LOCK_TIMEOUT        100000000
1179 1181  
1180 1182  /*
1181      - * IDC parameters are defined in “user area” in the flash
     1183 + * IDC parameters are defined in "user area" in the flash
1182 1184   */
1183 1185  #define ROM_DEV_INIT_TIMEOUT            0x3e885c
1184 1186  #define ROM_DRV_RESET_ACK_TIMEOUT       0x3e8860
1185 1187  
     1188 +/* ****************************************************************** */
     1189 +/* ******************* NetXen MiniDump Defines ********************** */
     1190 +/* ****************************************************************** */
     1191 +
1186 1192  /*
     1193 + * Get MBC_GET_DUMP_TEMPLATE Command Options
     1194 + */
     1195 +#define GTO_TEMPLATE_SIZE       0
     1196 +#define GTO_TEMPLATE            1
     1197 +
     1198 +/*
     1199 + * Entry Type Defines
     1200 + */
     1201 +#define RDNOP            0
     1202 +#define RDCRB            1
     1203 +#define RDMUX            2
     1204 +#define QUEUE            3
     1205 +#define BOARD            4
     1206 +#define RDSRE            5
     1207 +#define RDOCM            6
     1208 +#define PREGS            7
     1209 +#define L1DTG            8
     1210 +#define L1ITG            9
     1211 +#define CACHE           10
     1212 +#define L1DAT           11
     1213 +#define L1INS           12
     1214 +#define RDSTK           13
     1215 +#define RDCON           14
     1216 +#define L2DTG           21
     1217 +#define L2ITG           22
     1218 +#define L2DAT           23
     1219 +#define L2INS           24
     1220 +#define RDOC3           25
     1221 +#define MEMBK           32
     1222 +#define RDROM           71
     1223 +#define RDMEM           72
     1224 +#define INFOR           81
     1225 +#define CNTRL           98
     1226 +#define TLHDR           99
     1227 +#define RDEND           255
     1228 +#define PRIMQ           103
     1229 +#define SQG2Q           104
     1230 +#define SQG3Q           105
     1231 +#define ISCSI_EVENT_LOG 201
     1232 +
     1233 +/*
     1234 + * Minidump Template Header
     1235 + * Parts of the template header can be modified by the driver.
     1236 + * These include the saved_state_array, capture_debug_level, driver_timestamp
     1237 + * The driver_info_wordX is used to add info about the drivers environment.
     1238 + * It is important that drivers add identication and system info in these
     1239 + * fields.
     1240 + */
     1241 +
     1242 +#define QL_DBG_STATE_ARRAY_LEN          16
     1243 +#define QL_DBG_CAP_SIZE_ARRAY_LEN       8
     1244 +#define QL_DBG_RSVD_ARRAY_LEN           8
     1245 +
     1246 +typedef struct md_template_hdr {
     1247 +        uint32_t        entry_type;
     1248 +        uint32_t        first_entry_offset;
     1249 +        uint32_t        size_of_template;
     1250 +        uint32_t        capture_debug_level;
     1251 +        uint32_t        num_of_entries;
     1252 +        uint32_t        version;
     1253 +        uint32_t        driver_timestamp;
     1254 +        uint32_t        checksum;
     1255 +        uint32_t        driver_capture_mask;
     1256 +        uint32_t        driver_info_word1;
     1257 +        uint32_t        driver_info_word2;
     1258 +        uint32_t        driver_info_word3;
     1259 +        uint32_t        saved_state_array[QL_DBG_STATE_ARRAY_LEN];
     1260 +        uint32_t        capture_size_array[QL_DBG_CAP_SIZE_ARRAY_LEN];
     1261 +
     1262 +        /* markers_array used to capture some special locations on board */
     1263 +        uint32_t        markers_array[QL_DBG_RSVD_ARRAY_LEN];
     1264 +        uint32_t        num_of_free_entries;    /* For internal use */
     1265 +        uint32_t        free_entry_offset;      /* For internal use */
     1266 +        uint32_t        total_table_size;       /* For internal use */
     1267 +        uint32_t        bkup_table_offset;      /* For internal use */
     1268 +} md_template_hdr_t;
     1269 +
     1270 +/*
     1271 + * Driver Flags
     1272 + */
     1273 +#define QL_DBG_SKIPPED_FLAG     0x80    /* driver skipped this entry  */
     1274 +#define QL_DBG_SIZE_ERR_FLAG    0x40    /* entry siz vs capture siz mismatch */
     1275 +
     1276 +/*
     1277 + * Minidump Entry Header
     1278 + */
     1279 +typedef struct md_entry_hdr {
     1280 +        uint32_t        entry_type;
     1281 +        uint32_t        entry_size;
     1282 +        uint32_t        entry_capture_size;
     1283 +        union {
     1284 +                struct {
     1285 +#ifdef _BIG_ENDIAN
     1286 +                        uint8_t driver_flags;
     1287 +                        uint8_t driver_code;
     1288 +                        uint8_t entry_code;
     1289 +                        uint8_t entry_capture_mask;
     1290 +#else
     1291 +                        uint8_t entry_capture_mask;
     1292 +                        uint8_t entry_code;
     1293 +                        uint8_t driver_code;
     1294 +                        uint8_t driver_flags;
     1295 +#endif
     1296 +                } ecw;
     1297 +                uint32_t        entry_ctrl_word;
     1298 +        } a;
     1299 +} md_entry_hdr_t;
     1300 +
     1301 +/*
     1302 + * Minidump Entry Including Header
     1303 + */
     1304 +typedef struct md_entry {
     1305 +        md_entry_hdr_t  h;
     1306 +        uint32_t        entry_data00;
     1307 +        uint32_t        entry_data01;
     1308 +        uint32_t        entry_data02;
     1309 +        uint32_t        entry_data03;
     1310 +        uint32_t        entry_data04;
     1311 +        uint32_t        entry_data05;
     1312 +        uint32_t        entry_data06;
     1313 +        uint32_t        entry_data07;
     1314 +} md_entry_t;
     1315 +
     1316 +/*
     1317 + *  Minidump Read CRB Entry Header
     1318 + */
     1319 +typedef struct md_entry_rdcrb {
     1320 +        md_entry_hdr_t  h;
     1321 +        uint32_t        addr;
     1322 +        union {
     1323 +                struct {
     1324 +#ifdef _BIG_ENDIAN
     1325 +                        uint8_t rsvd_1[2];
     1326 +                        uint8_t rsvd_0;
     1327 +                        uint8_t addr_stride;
     1328 +#else
     1329 +                        uint8_t addr_stride;
     1330 +                        uint8_t rsvd_0;
     1331 +                        uint8_t rsvd_1[2];
     1332 +#endif
     1333 +                } ac;
     1334 +                uint32_t        addr_cntrl;
     1335 +        } a;
     1336 +        uint32_t        data_size;
     1337 +        uint32_t        op_count;
     1338 +        uint32_t        rsvd_2;
     1339 +        uint32_t        rsvd_3;
     1340 +        uint32_t        rsvd_4;
     1341 +        uint32_t        rsvd_5;
     1342 +} md_entry_rdcrb_t;
     1343 +
     1344 +/*
     1345 + * Minidump Cache Entry Header
     1346 + */
     1347 +typedef struct ql_md_entry_cache {
     1348 +        md_entry_hdr_t  h;
     1349 +        uint32_t        tag_reg_addr;
     1350 +        union {
     1351 +                struct {
     1352 +#ifdef _BIG_ENDIAN
     1353 +                        uint8_t init_tag_value[2];
     1354 +                        uint8_t tag_value_stride[2];
     1355 +#else
     1356 +                        uint8_t tag_value_stride[2];
     1357 +                        uint8_t init_tag_value[2];
     1358 +#endif
     1359 +                } sac;
     1360 +                uint32_t        select_addr_cntrl;
     1361 +        } a;
     1362 +        uint32_t        data_size;
     1363 +        uint32_t        op_count;
     1364 +        uint32_t        control_addr;
     1365 +        union {
     1366 +                struct {
     1367 +#ifdef _BIG_ENDIAN
     1368 +                        uint8_t poll_wait;
     1369 +                        uint8_t poll_mask;
     1370 +                        uint8_t write_value[2];
     1371 +#else
     1372 +                        uint8_t write_value[2];
     1373 +                        uint8_t poll_mask;
     1374 +                        uint8_t poll_wait;
     1375 +#endif
     1376 +                } cv;
     1377 +                uint32_t        control_value;
     1378 +        } b;
     1379 +        uint32_t        read_addr;
     1380 +        union {
     1381 +                struct {
     1382 +#ifdef _BIG_ENDIAN
     1383 +                        uint8_t rsvd_1[2];
     1384 +                        uint8_t read_addr_cnt;
     1385 +                        uint8_t read_addr_stride;
     1386 +#else
     1387 +                        uint8_t read_addr_stride;
     1388 +                        uint8_t read_addr_cnt;
     1389 +                        uint8_t rsvd_1[2];
     1390 +#endif
     1391 +                } rac;
     1392 +                uint32_t        read_addr_cntrl;
     1393 +        } c;
     1394 +} md_entry_cache_t;
     1395 +
     1396 +/*
     1397 + * Minidump Read OCM Entry Header
     1398 + */
     1399 +typedef struct md_entry_rdocm {
     1400 +        md_entry_hdr_t  h;
     1401 +        uint32_t        rsvd_0;
     1402 +        uint32_t        rsvd_1;
     1403 +        uint32_t        data_size;
     1404 +        uint32_t        op_count;
     1405 +        uint32_t        rsvd_2;
     1406 +        uint32_t        rsvd_3;
     1407 +        uint32_t        read_addr;
     1408 +        uint32_t        read_addr_stride;
     1409 +} md_entry_rdocm_t;
     1410 +
     1411 +/*
     1412 + * Minidump Read MEM Entry Header
     1413 + */
     1414 +typedef struct md_entry_rdmem {
     1415 +        md_entry_hdr_t  h;
     1416 +        uint32_t        rsvd_0[6];
     1417 +        uint32_t        read_addr;
     1418 +        uint32_t        read_data_size;
     1419 +} md_entry_rdmem_t;
     1420 +/*
     1421 + * Minidump MIU AGENT ADDRESSES.
     1422 + */
     1423 +#define MD_TA_CTL_ENABLE                0x2
     1424 +#define MD_TA_CTL_START                 0x1
     1425 +#define MD_TA_CTL_BUSY                  0x8
     1426 +#define MD_TA_CTL_CHECK                 1000
     1427 +#define MD_MIU_TEST_AGT_CTRL            0x41000090
     1428 +#define MD_MIU_TEST_AGT_ADDR_LO         0x41000094
     1429 +#define MD_MIU_TEST_AGT_ADDR_HI         0x41000098
     1430 +#define MD_MIU_TEST_AGT_RDDATA_0_31     0x410000A8
     1431 +#define MD_MIU_TEST_AGT_RDDATA_32_63    0x410000AC
     1432 +#define MD_MIU_TEST_AGT_RDDATA_64_95    0x410000B8
     1433 +#define MD_MIU_TEST_AGT_RDDATA_96_127   0x410000BC
     1434 +#define MD_MIU_TEST_AGT_WRDATA_0_31     0x410000A0
     1435 +#define MD_MIU_TEST_AGT_WRDATA_32_63    0x410000A4
     1436 +#define MD_MIU_TEST_AGT_WRDATA_64_95    0x410000B0
     1437 +#define MD_MIU_TEST_AGT_WRDATA_96_127   0x410000B4
     1438 +
     1439 +/*
     1440 + * Minidump Read ROM Entry Header
     1441 + */
     1442 +typedef struct md_entry_rdrom {
     1443 +        md_entry_hdr_t  h;
     1444 +        uint32_t        rsvd_0[6];
     1445 +        uint32_t        read_addr;
     1446 +        uint32_t        read_data_size;
     1447 +} md_entry_rdrom_t;
     1448 +/*
     1449 + *  Minidump ROM Read Address
     1450 + */
     1451 +#define MD_DIRECT_ROM_WINDOW    0x42110030
     1452 +#define MD_DIRECT_ROM_READ_BASE 0x42150000
     1453 +
     1454 +/*
     1455 + * Minidump Read MUX Entry Header
     1456 + */
     1457 +typedef struct md_entry_mux {
     1458 +        md_entry_hdr_t  h;
     1459 +        uint32_t        select_addr;
     1460 +        union {
     1461 +                struct {
     1462 +                        uint32_t        rsvd_0;
     1463 +                } sac;
     1464 +                uint32_t        select_addr_cntrl;
     1465 +        } a;
     1466 +        uint32_t        data_size;
     1467 +        uint32_t        op_count;
     1468 +        uint32_t        select_value;
     1469 +        uint32_t        select_value_stride;
     1470 +        uint32_t        read_addr;
     1471 +        uint32_t        rsvd_1;
     1472 +} md_entry_mux_t;
     1473 +
     1474 +/*
     1475 + * Minidump Read QUEUE Entry Header
     1476 + */
     1477 +typedef struct md_entry_queue {
     1478 +        md_entry_hdr_t  h;
     1479 +        uint32_t        select_addr;
     1480 +        union {
     1481 +                struct {
     1482 +#ifdef _BIG_ENDIAN
     1483 +                        uint8_t rsvd_0[2];
     1484 +                        uint8_t queue_id_stride[2];
     1485 +#else
     1486 +                        uint8_t queue_id_stride[2];
     1487 +                        uint8_t rsvd_0[2];
     1488 +#endif
     1489 +                } sac;
     1490 +                uint32_t        select_addr_cntrl;
     1491 +        } a;
     1492 +        uint32_t        data_size;
     1493 +        uint32_t        op_count;
     1494 +        uint32_t        rsvd_1;
     1495 +        uint32_t        rsvd_2;
     1496 +        uint32_t        read_addr;
     1497 +        union {
     1498 +                struct {
     1499 +#ifdef _BIG_ENDIAN
     1500 +                        uint8_t rsvd_3[2];
     1501 +                        uint8_t read_addr_cnt;
     1502 +                        uint8_t read_addr_stride;
     1503 +#else
     1504 +                        uint8_t read_addr_stride;
     1505 +                        uint8_t read_addr_cnt;
     1506 +                        uint8_t rsvd_3[2];
     1507 +#endif
     1508 +                } rac;
     1509 +                uint32_t        read_addr_cntrl;
     1510 +        } b;
     1511 +} md_entry_queue_t;
     1512 +
     1513 +/*
     1514 + * Minidump Control Entry Header
     1515 + */
     1516 +typedef struct md_entry_cntrl {
     1517 +        md_entry_hdr_t  h;
     1518 +        uint32_t        addr;
     1519 +        union {
     1520 +                struct {
     1521 +#ifdef _BIG_ENDIAN
     1522 +                        uint8_t poll_timeout[2];
     1523 +                        uint8_t state_index_a;
     1524 +                        uint8_t addr_stride;
     1525 +#else
     1526 +                        uint8_t addr_stride;
     1527 +                        uint8_t state_index_a;
     1528 +                        uint8_t poll_timeout[2];
     1529 +#endif
     1530 +                } ac;
     1531 +                uint32_t        addr_cntrl;
     1532 +        } a;
     1533 +        uint32_t        data_size;
     1534 +        uint32_t        op_count;
     1535 +        union {
     1536 +                struct {
     1537 +#ifdef _BIG_ENDIAN
     1538 +                        uint8_t shr;
     1539 +                        uint8_t shl;
     1540 +                        uint8_t state_index_v;
     1541 +                        uint8_t opcode;
     1542 +#else
     1543 +                        uint8_t opcode;
     1544 +                        uint8_t state_index_v;
     1545 +                        uint8_t shl;
     1546 +                        uint8_t shr;
     1547 +#endif
     1548 +                } cv;
     1549 +                uint32_t        control_value;
     1550 +        } b;
     1551 +        uint32_t        value_1;
     1552 +        uint32_t        value_2;
     1553 +        uint32_t        value_3;
     1554 +} md_entry_cntrl_t;
     1555 +
     1556 +/*
     1557 + * Opcodes for Control Entries.
     1558 + * These Flags are bit fields.
     1559 + */
     1560 +#define QL_DBG_OPCODE_WR        0x01
     1561 +#define QL_DBG_OPCODE_RW        0x02
     1562 +#define QL_DBG_OPCODE_AND       0x04
     1563 +#define QL_DBG_OPCODE_OR        0x08
     1564 +#define QL_DBG_OPCODE_POLL      0x10
     1565 +#define QL_DBG_OPCODE_RDSTATE   0x20
     1566 +#define QL_DBG_OPCODE_WRSTATE   0x40
     1567 +#define QL_DBG_OPCODE_MDSTATE   0x80
     1568 +
     1569 +/*
1187 1570   * Global Data in ql_nx.c source file.
1188 1571   */
1189 1572  
1190 1573  /*
1191 1574   * Global Function Prototypes in ql_nx.c source file.
1192 1575   */
     1576 +void ql_8021_wr_32(ql_adapter_state_t *, uint64_t, uint32_t);
     1577 +void ql_8021_rd_32(ql_adapter_state_t *, uint64_t, uint32_t *);
1193 1578  void ql_8021_reset_chip(ql_adapter_state_t *);
1194      -int ql_8021_load_risc(ql_adapter_state_t *);
     1579 +int ql_8021_fw_reload(ql_adapter_state_t *);
1195 1580  void ql_8021_clr_hw_intr(ql_adapter_state_t *);
1196 1581  void ql_8021_clr_fw_intr(ql_adapter_state_t *);
1197 1582  void ql_8021_enable_intrs(ql_adapter_state_t *);
1198 1583  void ql_8021_disable_intrs(ql_adapter_state_t *);
1199 1584  void ql_8021_update_crb_int_ptr(ql_adapter_state_t *);
1200 1585  int ql_8021_rom_read(ql_adapter_state_t *, uint32_t, uint32_t *);
1201 1586  int ql_8021_rom_write(ql_adapter_state_t *, uint32_t, uint32_t);
1202 1587  int ql_8021_rom_erase(ql_adapter_state_t *, uint32_t);
1203 1588  int ql_8021_rom_wrsr(ql_adapter_state_t *, uint32_t);
1204 1589  void ql_8021_set_drv_active(ql_adapter_state_t *);
1205 1590  void ql_8021_clr_drv_active(ql_adapter_state_t *);
1206      -uint32_t ql_8021_idc_handler(ql_adapter_state_t *);
     1591 +int ql_8021_idc_handler(ql_adapter_state_t *, uint32_t);
     1592 +void ql_8021_wr_req_in(ql_adapter_state_t *, uint32_t);
     1593 +void ql_8021_idc_poll(ql_adapter_state_t *);
     1594 +int ql_8021_reset_fw(ql_adapter_state_t *);
     1595 +int ql_8021_fw_chk(ql_adapter_state_t *);
     1596 +int ql_8021_get_md_template(ql_adapter_state_t *);
1207 1597  
1208 1598  #ifdef __cplusplus
1209 1599  }
1210 1600  #endif
1211 1601  
1212 1602  #endif /* _QL_NX_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX