^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * QLogic Fibre Channel HBA Driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2003-2014 QLogic Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #ifndef __QLA_NX2_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define __QLA_NX2_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define QSNT_ACK_TOV 30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define INTENT_TO_RECOVER 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define PROCEED_TO_RECOVER 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define IDC_LOCK_RECOVERY_OWNER_MASK 0x3C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define IDC_LOCK_RECOVERY_STATE_MASK 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define IDC_LOCK_RECOVERY_STATE_SHIFT_BITS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define QLA8044_DRV_LOCK_MSLEEP 200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define QLA8044_ADDR_DDR_NET (0x0000000000000000ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define QLA8044_ADDR_DDR_NET_MAX (0x000000000fffffffULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define MD_MIU_TEST_AGT_WRDATA_LO 0x410000A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define MD_MIU_TEST_AGT_WRDATA_HI 0x410000A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define MD_MIU_TEST_AGT_WRDATA_ULO 0x410000B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define MD_MIU_TEST_AGT_WRDATA_UHI 0x410000B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /* MIU_TEST_AGT_CTRL flags. work for SIU as well */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define MIU_TA_CTL_WRITE_ENABLE (MIU_TA_CTL_WRITE | MIU_TA_CTL_ENABLE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define MIU_TA_CTL_WRITE_START (MIU_TA_CTL_WRITE | MIU_TA_CTL_ENABLE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) MIU_TA_CTL_START)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define MIU_TA_CTL_START_ENABLE (MIU_TA_CTL_START | MIU_TA_CTL_ENABLE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) /* Imbus address bit used to indicate a host address. This bit is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * eliminated by the pcie bar and bar select before presentation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * over pcie. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /* host memory via IMBUS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define QLA8044_P2_ADDR_PCIE (0x0000000800000000ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define QLA8044_P3_ADDR_PCIE (0x0000008000000000ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define QLA8044_ADDR_PCIE_MAX (0x0000000FFFFFFFFFULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define QLA8044_ADDR_OCM0 (0x0000000200000000ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define QLA8044_ADDR_OCM0_MAX (0x00000002000fffffULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define QLA8044_ADDR_OCM1 (0x0000000200400000ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define QLA8044_ADDR_OCM1_MAX (0x00000002004fffffULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define QLA8044_ADDR_QDR_NET (0x0000000300000000ULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define QLA8044_P2_ADDR_QDR_NET_MAX (0x00000003001fffffULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define QLA8044_P3_ADDR_QDR_NET_MAX (0x0000000303ffffffULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define QLA8044_ADDR_QDR_NET_MAX (0x0000000307ffffffULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define QLA8044_PCI_CRBSPACE ((unsigned long)0x06000000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define QLA8044_PCI_DIRECT_CRB ((unsigned long)0x04400000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define QLA8044_PCI_CAMQM ((unsigned long)0x04800000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define QLA8044_PCI_CAMQM_MAX ((unsigned long)0x04ffffff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define QLA8044_PCI_DDR_NET ((unsigned long)0x00000000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define QLA8044_PCI_QDR_NET ((unsigned long)0x04000000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define QLA8044_PCI_QDR_NET_MAX ((unsigned long)0x043fffff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /* PCI Windowing for DDR regions. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) static inline bool addr_in_range(u64 addr, u64 low, u64 high)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) return addr <= high && addr >= low;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* Indirectly Mapped Registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define QLA8044_FLASH_SPI_STATUS 0x2808E010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define QLA8044_FLASH_SPI_CONTROL 0x2808E014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define QLA8044_FLASH_STATUS 0x42100004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define QLA8044_FLASH_CONTROL 0x42110004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define QLA8044_FLASH_ADDR 0x42110008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define QLA8044_FLASH_WRDATA 0x4211000C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define QLA8044_FLASH_RDDATA 0x42110018
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define QLA8044_FLASH_DIRECT_WINDOW 0x42110030
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define QLA8044_FLASH_DIRECT_DATA(DATA) (0x42150000 | (0x0000FFFF&DATA))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) /* Flash access regs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define QLA8044_FLASH_LOCK 0x3850
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define QLA8044_FLASH_UNLOCK 0x3854
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define QLA8044_FLASH_LOCK_ID 0x3500
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) /* Driver Lock regs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define QLA8044_DRV_LOCK 0x3868
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define QLA8044_DRV_UNLOCK 0x386C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define QLA8044_DRV_LOCK_ID 0x3504
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define QLA8044_DRV_LOCKRECOVERY 0x379C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /* IDC version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define QLA8044_IDC_VER_MAJ_VALUE 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define QLA8044_IDC_VER_MIN_VALUE 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) /* IDC Registers : Driver Coexistence Defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define QLA8044_CRB_IDC_VER_MAJOR 0x3780
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define QLA8044_CRB_IDC_VER_MINOR 0x3798
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define QLA8044_IDC_DRV_AUDIT 0x3794
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define QLA8044_SRE_SHIM_CONTROL 0x0D200284
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define QLA8044_PORT0_RXB_PAUSE_THRS 0x0B2003A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define QLA8044_PORT1_RXB_PAUSE_THRS 0x0B2013A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define QLA8044_PORT0_RXB_TC_MAX_CELL 0x0B200388
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define QLA8044_PORT1_RXB_TC_MAX_CELL 0x0B201388
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define QLA8044_PORT0_RXB_TC_STATS 0x0B20039C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define QLA8044_PORT1_RXB_TC_STATS 0x0B20139C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define QLA8044_PORT2_IFB_PAUSE_THRS 0x0B200704
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define QLA8044_PORT3_IFB_PAUSE_THRS 0x0B201704
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) /* set value to pause threshold value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define QLA8044_SET_PAUSE_VAL 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define QLA8044_SET_TC_MAX_CELL_VAL 0x03FF03FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define QLA8044_PEG_HALT_STATUS1 0x34A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define QLA8044_PEG_HALT_STATUS2 0x34AC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define QLA8044_PEG_ALIVE_COUNTER 0x34B0 /* FW_HEARTBEAT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define QLA8044_FW_CAPABILITIES 0x3528
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define QLA8044_CRB_DRV_ACTIVE 0x3788 /* IDC_DRV_PRESENCE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define QLA8044_CRB_DEV_STATE 0x3784 /* IDC_DEV_STATE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define QLA8044_CRB_DRV_STATE 0x378C /* IDC_DRV_ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define QLA8044_CRB_DRV_SCRATCH 0x3548
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define QLA8044_CRB_DEV_PART_INFO1 0x37E0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define QLA8044_CRB_DEV_PART_INFO2 0x37E4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define QLA8044_FW_VER_MAJOR 0x3550
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define QLA8044_FW_VER_MINOR 0x3554
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define QLA8044_FW_VER_SUB 0x3558
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define QLA8044_NPAR_STATE 0x359C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define QLA8044_FW_IMAGE_VALID 0x35FC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define QLA8044_CMDPEG_STATE 0x3650
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define QLA8044_ASIC_TEMP 0x37B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define QLA8044_FW_API 0x356C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define QLA8044_DRV_OP_MODE 0x3570
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define QLA8044_CRB_WIN_BASE 0x3800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define QLA8044_CRB_WIN_FUNC(f) (QLA8044_CRB_WIN_BASE+((f)*4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define QLA8044_SEM_LOCK_BASE 0x3840
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define QLA8044_SEM_UNLOCK_BASE 0x3844
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define QLA8044_SEM_LOCK_FUNC(f) (QLA8044_SEM_LOCK_BASE+((f)*8))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define QLA8044_SEM_UNLOCK_FUNC(f) (QLA8044_SEM_UNLOCK_BASE+((f)*8))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define QLA8044_LINK_STATE(f) (0x3698+((f) > 7 ? 4 : 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define QLA8044_LINK_SPEED(f) (0x36E0+(((f) >> 2) * 4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define QLA8044_MAX_LINK_SPEED(f) (0x36F0+(((f) / 4) * 4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define QLA8044_LINK_SPEED_FACTOR 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define QLA8044_FUN7_ACTIVE_INDEX 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) /* FLASH API Defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define QLA8044_FLASH_MAX_WAIT_USEC 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define QLA8044_FLASH_LOCK_TIMEOUT 10000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define QLA8044_FLASH_SECTOR_SIZE 65536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define QLA8044_DRV_LOCK_TIMEOUT 2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define QLA8044_FLASH_SECTOR_ERASE_CMD 0xdeadbeef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define QLA8044_FLASH_WRITE_CMD 0xdacdacda
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define QLA8044_FLASH_BUFFER_WRITE_CMD 0xcadcadca
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define QLA8044_FLASH_READ_RETRY_COUNT 2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define QLA8044_FLASH_STATUS_READY 0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define QLA8044_FLASH_BUFFER_WRITE_MIN 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define QLA8044_FLASH_BUFFER_WRITE_MAX 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define QLA8044_FLASH_STATUS_REG_POLL_DELAY 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define QLA8044_ERASE_MODE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define QLA8044_WRITE_MODE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define QLA8044_DWORD_WRITE_MODE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define QLA8044_GLOBAL_RESET 0x38CC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define QLA8044_WILDCARD 0x38F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define QLA8044_INFORMANT 0x38FC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define QLA8044_HOST_MBX_CTRL 0x3038
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define QLA8044_FW_MBX_CTRL 0x303C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define QLA8044_BOOTLOADER_ADDR 0x355C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define QLA8044_BOOTLOADER_SIZE 0x3560
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define QLA8044_FW_IMAGE_ADDR 0x3564
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define QLA8044_MBX_INTR_ENABLE 0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define QLA8044_MBX_INTR_MASK 0x1200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /* IDC Control Register bit defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define DONTRESET_BIT0 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define GRACEFUL_RESET_BIT1 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) /* ISP8044 PEG_HALT_STATUS1 bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define QLA8044_HALT_STATUS_INFORMATIONAL (0x1 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define QLA8044_HALT_STATUS_FW_RESET (0x2 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) #define QLA8044_HALT_STATUS_UNRECOVERABLE (0x4 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) /* Firmware image definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define QLA8044_BOOTLOADER_FLASH_ADDR 0x10000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define QLA8044_BOOT_FROM_FLASH 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define QLA8044_IDC_PARAM_ADDR 0x3e8020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* FLASH related definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define QLA8044_OPTROM_BURST_SIZE 0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #define QLA8044_MAX_OPTROM_BURST_DWORDS (QLA8044_OPTROM_BURST_SIZE / 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define QLA8044_MIN_OPTROM_BURST_DWORDS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define QLA8044_SECTOR_SIZE (64 * 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define QLA8044_FLASH_SPI_CTL 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define QLA8044_FLASH_FIRST_TEMP_VAL 0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define QLA8044_FLASH_SECOND_TEMP_VAL 0x00800001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define QLA8044_FLASH_FIRST_MS_PATTERN 0x43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define QLA8044_FLASH_SECOND_MS_PATTERN 0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define QLA8044_FLASH_LAST_MS_PATTERN 0x7D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define QLA8044_FLASH_STATUS_WRITE_DEF_SIG 0xFD0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define QLA8044_FLASH_SECOND_ERASE_MS_VAL 0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define QLA8044_FLASH_ERASE_SIG 0xFD0300
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define QLA8044_FLASH_LAST_ERASE_MS_VAL 0x3D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) /* Reset template definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define QLA8044_MAX_RESET_SEQ_ENTRIES 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define QLA8044_RESTART_TEMPLATE_SIZE 0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define QLA8044_RESET_TEMPLATE_ADDR 0x4F0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define QLA8044_RESET_SEQ_VERSION 0x0101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) /* Reset template entry opcodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define OPCODE_NOP 0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define OPCODE_WRITE_LIST 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define OPCODE_READ_WRITE_LIST 0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define OPCODE_POLL_LIST 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define OPCODE_POLL_WRITE_LIST 0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define OPCODE_READ_MODIFY_WRITE 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define OPCODE_SEQ_PAUSE 0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define OPCODE_SEQ_END 0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define OPCODE_TMPL_END 0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define OPCODE_POLL_READ_LIST 0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* Template Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define RESET_TMPLT_HDR_SIGNATURE 0xCAFE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define QLA8044_IDC_DRV_CTRL 0x3790
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define AF_8044_NO_FW_DUMP 27 /* 0x08000000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #define MINIDUMP_SIZE_36K 36864
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) struct qla8044_reset_template_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) uint16_t version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) uint16_t signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) uint16_t size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) uint16_t entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) uint16_t hdr_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) uint16_t checksum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) uint16_t init_seq_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) uint16_t start_seq_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) /* Common Entry Header. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) struct qla8044_reset_entry_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) uint16_t cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) uint16_t size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) uint16_t count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) uint16_t delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) /* Generic poll entry type. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) struct qla8044_poll {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) uint32_t test_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) uint32_t test_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) /* Read modify write entry type. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) struct qla8044_rmw {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) uint32_t test_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) uint32_t xor_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) uint32_t or_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) uint8_t shl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) uint8_t shr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) uint8_t index_a;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) uint8_t rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) /* Generic Entry Item with 2 DWords. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) struct qla8044_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) uint32_t arg1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) uint32_t arg2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) /* Generic Entry Item with 4 DWords.*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) struct qla8044_quad_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) uint32_t dr_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) uint32_t dr_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) uint32_t ar_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) uint32_t ar_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) struct qla8044_reset_template {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) int seq_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) int seq_error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) int array_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) uint32_t array[QLA8044_MAX_RESET_SEQ_ENTRIES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) uint8_t *buff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) uint8_t *stop_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) uint8_t *start_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) uint8_t *init_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) struct qla8044_reset_template_hdr *hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) uint8_t seq_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) uint8_t template_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) /* Driver_code is for driver to write some info about the entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) * currently not used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) struct qla8044_minidump_entry_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) uint32_t entry_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) uint32_t entry_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) uint32_t entry_capture_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) uint8_t entry_capture_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) uint8_t entry_code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) uint8_t driver_code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) uint8_t driver_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) } d_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) /* Read CRB entry header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) struct qla8044_minidump_entry_crb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) uint32_t addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) uint8_t addr_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) uint8_t state_index_a;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) uint16_t poll_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) } crb_strd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) uint32_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) uint8_t opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) uint8_t state_index_v;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) uint8_t shl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) uint8_t shr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) } crb_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) uint32_t value_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) uint32_t value_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) uint32_t value_3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) struct qla8044_minidump_entry_cache {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) uint32_t tag_reg_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) uint16_t tag_value_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) uint16_t init_tag_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) } addr_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) uint32_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) uint32_t control_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) uint16_t write_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) uint8_t poll_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) uint8_t poll_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) } cache_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) uint8_t read_addr_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) uint8_t read_addr_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) uint16_t rsvd_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) } read_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) /* Read OCM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) struct qla8044_minidump_entry_rdocm {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) uint32_t rsvd_0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) uint32_t rsvd_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) uint32_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) uint32_t rsvd_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) uint32_t rsvd_3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) uint32_t read_addr_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) /* Read Memory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) struct qla8044_minidump_entry_rdmem {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) uint32_t rsvd[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) uint32_t read_data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) /* Read Memory: For Pex-DMA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) struct qla8044_minidump_entry_rdmem_pex_dma {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) uint32_t desc_card_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) uint16_t dma_desc_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) uint8_t rsvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) uint32_t start_dma_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) uint8_t rsvd2[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) uint32_t read_data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) /* Read ROM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) struct qla8044_minidump_entry_rdrom {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) uint32_t rsvd[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) uint32_t read_data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) /* Mux entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) struct qla8044_minidump_entry_mux {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) uint32_t select_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) uint32_t rsvd_0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) uint32_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) uint32_t select_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) uint32_t select_value_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) uint32_t rsvd_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) /* Queue entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) struct qla8044_minidump_entry_queue {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) uint32_t select_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) uint16_t queue_id_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) uint16_t rsvd_0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) } q_strd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) uint32_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) uint32_t rsvd_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) uint32_t rsvd_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) uint8_t read_addr_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) uint8_t read_addr_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) uint16_t rsvd_3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) } rd_strd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) /* POLLRD Entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) struct qla8044_minidump_entry_pollrd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) uint32_t select_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) uint32_t select_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) uint16_t select_value_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) uint16_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) uint32_t poll_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) uint32_t poll_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) uint32_t rsvd_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) struct qla8044_minidump_entry_rddfe {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) uint32_t addr_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) uint32_t value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) uint8_t stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) uint8_t stride2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) uint16_t count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) uint32_t poll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) uint32_t mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) uint32_t modify_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) uint32_t rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) struct qla8044_minidump_entry_rdmdio {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) uint32_t addr_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) uint32_t addr_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) uint32_t value_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) uint8_t stride_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) uint8_t stride_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) uint16_t count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) uint32_t poll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) uint32_t mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) uint32_t value_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) struct qla8044_minidump_entry_pollwr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) uint32_t addr_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) uint32_t addr_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) uint32_t value_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) uint32_t value_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) uint32_t poll;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) uint32_t mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) uint32_t rsvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) /* RDMUX2 Entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) struct qla8044_minidump_entry_rdmux2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) uint32_t select_addr_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) uint32_t select_addr_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) uint32_t select_value_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) uint32_t select_value_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) uint32_t op_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) uint32_t select_value_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) uint32_t read_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) uint8_t select_value_stride;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) uint8_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) uint8_t rsvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) /* POLLRDMWR Entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) struct qla8044_minidump_entry_pollrdmwr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) struct qla8044_minidump_entry_hdr h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) uint32_t addr_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) uint32_t addr_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) uint32_t value_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) uint32_t value_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) uint32_t poll_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) uint32_t poll_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) uint32_t modify_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) uint32_t data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) /* IDC additional information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) struct qla8044_idc_information {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) uint32_t request_desc; /* IDC request descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) uint32_t info1; /* IDC additional info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) uint32_t info2; /* IDC additional info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) uint32_t info3; /* IDC additional info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) enum qla_regs {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) QLA8044_PEG_HALT_STATUS1_INDEX = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) QLA8044_PEG_HALT_STATUS2_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) QLA8044_PEG_ALIVE_COUNTER_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) QLA8044_CRB_DRV_ACTIVE_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) QLA8044_CRB_DEV_STATE_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) QLA8044_CRB_DRV_STATE_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) QLA8044_CRB_DRV_SCRATCH_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) QLA8044_CRB_DEV_PART_INFO_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) QLA8044_CRB_DRV_IDC_VERSION_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) QLA8044_FW_VERSION_MAJOR_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) QLA8044_FW_VERSION_MINOR_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) QLA8044_FW_VERSION_SUB_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) QLA8044_CRB_CMDPEG_STATE_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) QLA8044_CRB_TEMP_STATE_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) #define CRB_REG_INDEX_MAX 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) #define CRB_CMDPEG_CHECK_RETRY_COUNT 60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) #define CRB_CMDPEG_CHECK_DELAY 500
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) /* MiniDump Structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) /* Driver_code is for driver to write some info about the entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) * currently not used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) #define QLA8044_SS_OCM_WNDREG_INDEX 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) #define QLA8044_DBG_STATE_ARRAY_LEN 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) #define QLA8044_DBG_CAP_SIZE_ARRAY_LEN 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) #define QLA8044_DBG_RSVD_ARRAY_LEN 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) #define QLA8044_DBG_OCM_WNDREG_ARRAY_LEN 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) #define QLA8044_SS_PCI_INDEX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) #define QLA8044_RDDFE 38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #define QLA8044_RDMDIO 39
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) #define QLA8044_POLLWR 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) struct qla8044_minidump_template_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) uint32_t entry_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) uint32_t first_entry_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) uint32_t size_of_template;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) uint32_t capture_debug_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) uint32_t num_of_entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) uint32_t version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) uint32_t driver_timestamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) uint32_t checksum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) uint32_t driver_capture_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) uint32_t driver_info_word2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) uint32_t driver_info_word3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) uint32_t driver_info_word4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) uint32_t saved_state_array[QLA8044_DBG_STATE_ARRAY_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) uint32_t capture_size_array[QLA8044_DBG_CAP_SIZE_ARRAY_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) uint32_t ocm_window_reg[QLA8044_DBG_OCM_WNDREG_ARRAY_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) struct qla8044_pex_dma_descriptor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) uint32_t read_data_size; /* 0-23: size, 24-31: rsvd */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) uint8_t rsvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) uint16_t dma_desc_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) } cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) uint64_t src_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) uint64_t dma_bus_addr; /*0-3: desc-cmd, 4-7: pci-func, 8-15: desc-cmd*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) uint8_t rsvd[24];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) #endif