1*2025cf9eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2ae02e5d4SSrinivas Pandruvada /* 3ae02e5d4SSrinivas Pandruvada * ISH registers definitions 4ae02e5d4SSrinivas Pandruvada * 5ae02e5d4SSrinivas Pandruvada * Copyright (c) 2012-2016, Intel Corporation. 6ae02e5d4SSrinivas Pandruvada */ 7ae02e5d4SSrinivas Pandruvada 8ae02e5d4SSrinivas Pandruvada #ifndef _ISHTP_ISH_REGS_H_ 9ae02e5d4SSrinivas Pandruvada #define _ISHTP_ISH_REGS_H_ 10ae02e5d4SSrinivas Pandruvada 11ae02e5d4SSrinivas Pandruvada 12ae02e5d4SSrinivas Pandruvada /*** IPC PCI Offsets and sizes ***/ 13ae02e5d4SSrinivas Pandruvada /* ISH IPC Base Address */ 14ae02e5d4SSrinivas Pandruvada #define IPC_REG_BASE 0x0000 15ae02e5d4SSrinivas Pandruvada /* Peripheral Interrupt Status Register */ 16ae02e5d4SSrinivas Pandruvada #define IPC_REG_PISR_CHV_AB (IPC_REG_BASE + 0x00) 17ae02e5d4SSrinivas Pandruvada /* Peripheral Interrupt Mask Register */ 18ae02e5d4SSrinivas Pandruvada #define IPC_REG_PIMR_CHV_AB (IPC_REG_BASE + 0x04) 19ae02e5d4SSrinivas Pandruvada /*BXT, CHV_K0*/ 20ae02e5d4SSrinivas Pandruvada /*Peripheral Interrupt Status Register */ 21ae02e5d4SSrinivas Pandruvada #define IPC_REG_PISR_BXT (IPC_REG_BASE + 0x0C) 22ae02e5d4SSrinivas Pandruvada /*Peripheral Interrupt Mask Register */ 23ae02e5d4SSrinivas Pandruvada #define IPC_REG_PIMR_BXT (IPC_REG_BASE + 0x08) 24ae02e5d4SSrinivas Pandruvada /***********************************/ 25ae02e5d4SSrinivas Pandruvada /* ISH Host Firmware status Register */ 26ae02e5d4SSrinivas Pandruvada #define IPC_REG_ISH_HOST_FWSTS (IPC_REG_BASE + 0x34) 27ae02e5d4SSrinivas Pandruvada /* Host Communication Register */ 28ae02e5d4SSrinivas Pandruvada #define IPC_REG_HOST_COMM (IPC_REG_BASE + 0x38) 29ae02e5d4SSrinivas Pandruvada /* Reset register */ 30ae02e5d4SSrinivas Pandruvada #define IPC_REG_ISH_RST (IPC_REG_BASE + 0x44) 31ae02e5d4SSrinivas Pandruvada 32ae02e5d4SSrinivas Pandruvada /* Inbound doorbell register Host to ISH */ 33ae02e5d4SSrinivas Pandruvada #define IPC_REG_HOST2ISH_DRBL (IPC_REG_BASE + 0x48) 34ae02e5d4SSrinivas Pandruvada /* Outbound doorbell register ISH to Host */ 35ae02e5d4SSrinivas Pandruvada #define IPC_REG_ISH2HOST_DRBL (IPC_REG_BASE + 0x54) 36ae02e5d4SSrinivas Pandruvada /* ISH to HOST message registers */ 37ae02e5d4SSrinivas Pandruvada #define IPC_REG_ISH2HOST_MSG (IPC_REG_BASE + 0x60) 38ae02e5d4SSrinivas Pandruvada /* HOST to ISH message registers */ 39ae02e5d4SSrinivas Pandruvada #define IPC_REG_HOST2ISH_MSG (IPC_REG_BASE + 0xE0) 40ae02e5d4SSrinivas Pandruvada /* REMAP2 to enable DMA (D3 RCR) */ 41ae02e5d4SSrinivas Pandruvada #define IPC_REG_ISH_RMP2 (IPC_REG_BASE + 0x368) 42ae02e5d4SSrinivas Pandruvada 43ae02e5d4SSrinivas Pandruvada #define IPC_REG_MAX (IPC_REG_BASE + 0x400) 44ae02e5d4SSrinivas Pandruvada 45ae02e5d4SSrinivas Pandruvada /*** register bits - HISR ***/ 46ae02e5d4SSrinivas Pandruvada /* bit corresponds HOST2ISH interrupt in PISR and PIMR registers */ 47ae02e5d4SSrinivas Pandruvada #define IPC_INT_HOST2ISH_BIT (1<<0) 48ae02e5d4SSrinivas Pandruvada /***********************************/ 49ae02e5d4SSrinivas Pandruvada /*CHV_A0, CHV_B0*/ 50ae02e5d4SSrinivas Pandruvada /* bit corresponds ISH2HOST interrupt in PISR and PIMR registers */ 51ae02e5d4SSrinivas Pandruvada #define IPC_INT_ISH2HOST_BIT_CHV_AB (1<<3) 52ae02e5d4SSrinivas Pandruvada /*BXT, CHV_K0*/ 53ae02e5d4SSrinivas Pandruvada /* bit corresponds ISH2HOST interrupt in PISR and PIMR registers */ 54ae02e5d4SSrinivas Pandruvada #define IPC_INT_ISH2HOST_BIT_BXT (1<<0) 55ae02e5d4SSrinivas Pandruvada /***********************************/ 56ae02e5d4SSrinivas Pandruvada 57ae02e5d4SSrinivas Pandruvada /* bit corresponds ISH2HOST busy clear interrupt in PIMR register */ 58ae02e5d4SSrinivas Pandruvada #define IPC_INT_ISH2HOST_CLR_MASK_BIT (1<<11) 59ae02e5d4SSrinivas Pandruvada 60ae02e5d4SSrinivas Pandruvada /* offset of ISH2HOST busy clear interrupt in IPC_BUSY_CLR register */ 61ae02e5d4SSrinivas Pandruvada #define IPC_INT_ISH2HOST_CLR_OFFS (0) 62ae02e5d4SSrinivas Pandruvada 63ae02e5d4SSrinivas Pandruvada /* bit corresponds ISH2HOST busy clear interrupt in IPC_BUSY_CLR register */ 64ae02e5d4SSrinivas Pandruvada #define IPC_INT_ISH2HOST_CLR_BIT (1<<IPC_INT_ISH2HOST_CLR_OFFS) 65ae02e5d4SSrinivas Pandruvada 66ae02e5d4SSrinivas Pandruvada /* bit corresponds busy bit in doorbell registers */ 67ae02e5d4SSrinivas Pandruvada #define IPC_DRBL_BUSY_OFFS (31) 68ae02e5d4SSrinivas Pandruvada #define IPC_DRBL_BUSY_BIT (1<<IPC_DRBL_BUSY_OFFS) 69ae02e5d4SSrinivas Pandruvada 70ae02e5d4SSrinivas Pandruvada #define IPC_HOST_OWNS_MSG_OFFS (30) 71ae02e5d4SSrinivas Pandruvada 72ae02e5d4SSrinivas Pandruvada /* 73ae02e5d4SSrinivas Pandruvada * A0: bit means that host owns MSGnn registers and is reading them. 74ae02e5d4SSrinivas Pandruvada * ISH FW may not write to them 75ae02e5d4SSrinivas Pandruvada */ 76ae02e5d4SSrinivas Pandruvada #define IPC_HOST_OWNS_MSG_BIT (1<<IPC_HOST_OWNS_MSG_OFFS) 77ae02e5d4SSrinivas Pandruvada 78ae02e5d4SSrinivas Pandruvada /* 79ae02e5d4SSrinivas Pandruvada * Host status bits (HOSTCOMM) 80ae02e5d4SSrinivas Pandruvada */ 81ae02e5d4SSrinivas Pandruvada /* bit corresponds host ready bit in Host Status Register (HOST_COMM) */ 82ae02e5d4SSrinivas Pandruvada #define IPC_HOSTCOMM_READY_OFFS (7) 83ae02e5d4SSrinivas Pandruvada #define IPC_HOSTCOMM_READY_BIT (1<<IPC_HOSTCOMM_READY_OFFS) 84ae02e5d4SSrinivas Pandruvada 85ae02e5d4SSrinivas Pandruvada /***********************************/ 86ae02e5d4SSrinivas Pandruvada /*CHV_A0, CHV_B0*/ 87ae02e5d4SSrinivas Pandruvada #define IPC_HOSTCOMM_INT_EN_OFFS_CHV_AB (31) 88ae02e5d4SSrinivas Pandruvada #define IPC_HOSTCOMM_INT_EN_BIT_CHV_AB \ 89ae02e5d4SSrinivas Pandruvada (1<<IPC_HOSTCOMM_INT_EN_OFFS_CHV_AB) 90ae02e5d4SSrinivas Pandruvada /*BXT, CHV_K0*/ 91ae02e5d4SSrinivas Pandruvada #define IPC_PIMR_INT_EN_OFFS_BXT (0) 92ae02e5d4SSrinivas Pandruvada #define IPC_PIMR_INT_EN_BIT_BXT (1<<IPC_PIMR_INT_EN_OFFS_BXT) 93ae02e5d4SSrinivas Pandruvada 94ae02e5d4SSrinivas Pandruvada #define IPC_HOST2ISH_BUSYCLEAR_MASK_OFFS_BXT (8) 95ae02e5d4SSrinivas Pandruvada #define IPC_HOST2ISH_BUSYCLEAR_MASK_BIT \ 96ae02e5d4SSrinivas Pandruvada (1<<IPC_HOST2ISH_BUSYCLEAR_MASK_OFFS_BXT) 97ae02e5d4SSrinivas Pandruvada /***********************************/ 98ae02e5d4SSrinivas Pandruvada /* 99ae02e5d4SSrinivas Pandruvada * both Host and ISH have ILUP at bit 0 100ae02e5d4SSrinivas Pandruvada * bit corresponds host ready bit in both status registers 101ae02e5d4SSrinivas Pandruvada */ 102ae02e5d4SSrinivas Pandruvada #define IPC_ILUP_OFFS (0) 103ae02e5d4SSrinivas Pandruvada #define IPC_ILUP_BIT (1<<IPC_ILUP_OFFS) 104ae02e5d4SSrinivas Pandruvada 105ae02e5d4SSrinivas Pandruvada /* 106291e9e3fSEven Xu * ISH FW status bits in ISH FW Status Register 107291e9e3fSEven Xu */ 108291e9e3fSEven Xu #define IPC_ISH_FWSTS_SHIFT 12 109291e9e3fSEven Xu #define IPC_ISH_FWSTS_MASK GENMASK(15, 12) 110291e9e3fSEven Xu #define IPC_GET_ISH_FWSTS(status) \ 111291e9e3fSEven Xu (((status) & IPC_ISH_FWSTS_MASK) >> IPC_ISH_FWSTS_SHIFT) 112291e9e3fSEven Xu 113291e9e3fSEven Xu /* 114ae02e5d4SSrinivas Pandruvada * FW status bits (relevant) 115ae02e5d4SSrinivas Pandruvada */ 116ae02e5d4SSrinivas Pandruvada #define IPC_FWSTS_ILUP 0x1 117ae02e5d4SSrinivas Pandruvada #define IPC_FWSTS_ISHTP_UP (1<<1) 118ae02e5d4SSrinivas Pandruvada #define IPC_FWSTS_DMA0 (1<<16) 119ae02e5d4SSrinivas Pandruvada #define IPC_FWSTS_DMA1 (1<<17) 120ae02e5d4SSrinivas Pandruvada #define IPC_FWSTS_DMA2 (1<<18) 121ae02e5d4SSrinivas Pandruvada #define IPC_FWSTS_DMA3 (1<<19) 122ae02e5d4SSrinivas Pandruvada 123ae02e5d4SSrinivas Pandruvada #define IPC_ISH_IN_DMA \ 124ae02e5d4SSrinivas Pandruvada (IPC_FWSTS_DMA0 | IPC_FWSTS_DMA1 | IPC_FWSTS_DMA2 | IPC_FWSTS_DMA3) 125ae02e5d4SSrinivas Pandruvada 126ae02e5d4SSrinivas Pandruvada /* bit corresponds host ready bit in ISH FW Status Register */ 127ae02e5d4SSrinivas Pandruvada #define IPC_ISH_ISHTP_READY_OFFS (1) 128ae02e5d4SSrinivas Pandruvada #define IPC_ISH_ISHTP_READY_BIT (1<<IPC_ISH_ISHTP_READY_OFFS) 129ae02e5d4SSrinivas Pandruvada 130ae02e5d4SSrinivas Pandruvada #define IPC_RMP2_DMA_ENABLED 0x1 /* Value to enable DMA, per D3 RCR */ 131ae02e5d4SSrinivas Pandruvada 132ae02e5d4SSrinivas Pandruvada #define IPC_MSG_MAX_SIZE 0x80 133ae02e5d4SSrinivas Pandruvada 134ae02e5d4SSrinivas Pandruvada 135ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_LENGTH_MASK 0x03FF 136ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_PROTOCOL_MASK 0x0F 137ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_MNG_CMD_MASK 0x0F 138ae02e5d4SSrinivas Pandruvada 139ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_LENGTH_OFFSET 0 140ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_PROTOCOL_OFFSET 10 141ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_MNG_CMD_OFFSET 16 142ae02e5d4SSrinivas Pandruvada 143ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_GET_LENGTH(drbl_reg) \ 144ae02e5d4SSrinivas Pandruvada (((drbl_reg) >> IPC_HEADER_LENGTH_OFFSET)&IPC_HEADER_LENGTH_MASK) 145ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_GET_PROTOCOL(drbl_reg) \ 146ae02e5d4SSrinivas Pandruvada (((drbl_reg) >> IPC_HEADER_PROTOCOL_OFFSET)&IPC_HEADER_PROTOCOL_MASK) 147ae02e5d4SSrinivas Pandruvada #define IPC_HEADER_GET_MNG_CMD(drbl_reg) \ 148ae02e5d4SSrinivas Pandruvada (((drbl_reg) >> IPC_HEADER_MNG_CMD_OFFSET)&IPC_HEADER_MNG_CMD_MASK) 149ae02e5d4SSrinivas Pandruvada 150ae02e5d4SSrinivas Pandruvada #define IPC_IS_BUSY(drbl_reg) \ 151ae02e5d4SSrinivas Pandruvada (((drbl_reg)&IPC_DRBL_BUSY_BIT) == ((uint32_t)IPC_DRBL_BUSY_BIT)) 152ae02e5d4SSrinivas Pandruvada 153ae02e5d4SSrinivas Pandruvada /***********************************/ 154ae02e5d4SSrinivas Pandruvada /*CHV_A0, CHV_B0*/ 155ae02e5d4SSrinivas Pandruvada #define IPC_INT_FROM_ISH_TO_HOST_CHV_AB(drbl_reg) \ 156ae02e5d4SSrinivas Pandruvada (((drbl_reg)&IPC_INT_ISH2HOST_BIT_CHV_AB) == \ 157ae02e5d4SSrinivas Pandruvada ((u32)IPC_INT_ISH2HOST_BIT_CHV_AB)) 158ae02e5d4SSrinivas Pandruvada /*BXT, CHV_K0*/ 159ae02e5d4SSrinivas Pandruvada #define IPC_INT_FROM_ISH_TO_HOST_BXT(drbl_reg) \ 160ae02e5d4SSrinivas Pandruvada (((drbl_reg)&IPC_INT_ISH2HOST_BIT_BXT) == \ 161ae02e5d4SSrinivas Pandruvada ((u32)IPC_INT_ISH2HOST_BIT_BXT)) 162ae02e5d4SSrinivas Pandruvada /***********************************/ 163ae02e5d4SSrinivas Pandruvada 164ae02e5d4SSrinivas Pandruvada #define IPC_BUILD_HEADER(length, protocol, busy) \ 165ae02e5d4SSrinivas Pandruvada (((busy)<<IPC_DRBL_BUSY_OFFS) | \ 166ae02e5d4SSrinivas Pandruvada ((protocol) << IPC_HEADER_PROTOCOL_OFFSET) | \ 167ae02e5d4SSrinivas Pandruvada ((length)<<IPC_HEADER_LENGTH_OFFSET)) 168ae02e5d4SSrinivas Pandruvada 169ae02e5d4SSrinivas Pandruvada #define IPC_BUILD_MNG_MSG(cmd, length) \ 170ae02e5d4SSrinivas Pandruvada (((1)<<IPC_DRBL_BUSY_OFFS)| \ 171ae02e5d4SSrinivas Pandruvada ((IPC_PROTOCOL_MNG)<<IPC_HEADER_PROTOCOL_OFFSET)| \ 172ae02e5d4SSrinivas Pandruvada ((cmd)<<IPC_HEADER_MNG_CMD_OFFSET)| \ 173ae02e5d4SSrinivas Pandruvada ((length)<<IPC_HEADER_LENGTH_OFFSET)) 174ae02e5d4SSrinivas Pandruvada 175ae02e5d4SSrinivas Pandruvada 176ae02e5d4SSrinivas Pandruvada #define IPC_SET_HOST_READY(host_status) \ 177ae02e5d4SSrinivas Pandruvada ((host_status) |= (IPC_HOSTCOMM_READY_BIT)) 178ae02e5d4SSrinivas Pandruvada 179ae02e5d4SSrinivas Pandruvada #define IPC_SET_HOST_ILUP(host_status) \ 180ae02e5d4SSrinivas Pandruvada ((host_status) |= (IPC_ILUP_BIT)) 181ae02e5d4SSrinivas Pandruvada 182ae02e5d4SSrinivas Pandruvada #define IPC_CLEAR_HOST_READY(host_status) \ 183ae02e5d4SSrinivas Pandruvada ((host_status) ^= (IPC_HOSTCOMM_READY_BIT)) 184ae02e5d4SSrinivas Pandruvada 185ae02e5d4SSrinivas Pandruvada #define IPC_CLEAR_HOST_ILUP(host_status) \ 186ae02e5d4SSrinivas Pandruvada ((host_status) ^= (IPC_ILUP_BIT)) 187ae02e5d4SSrinivas Pandruvada 188ae02e5d4SSrinivas Pandruvada /* todo - temp until PIMR HW ready */ 189ae02e5d4SSrinivas Pandruvada #define IPC_HOST_BUSY_READING_OFFS 6 190ae02e5d4SSrinivas Pandruvada 191ae02e5d4SSrinivas Pandruvada /* bit corresponds host ready bit in Host Status Register (HOST_COMM) */ 192ae02e5d4SSrinivas Pandruvada #define IPC_HOST_BUSY_READING_BIT (1<<IPC_HOST_BUSY_READING_OFFS) 193ae02e5d4SSrinivas Pandruvada 194ae02e5d4SSrinivas Pandruvada #define IPC_SET_HOST_BUSY_READING(host_status) \ 195ae02e5d4SSrinivas Pandruvada ((host_status) |= (IPC_HOST_BUSY_READING_BIT)) 196ae02e5d4SSrinivas Pandruvada 197ae02e5d4SSrinivas Pandruvada #define IPC_CLEAR_HOST_BUSY_READING(host_status)\ 198ae02e5d4SSrinivas Pandruvada ((host_status) ^= (IPC_HOST_BUSY_READING_BIT)) 199ae02e5d4SSrinivas Pandruvada 200ae02e5d4SSrinivas Pandruvada 201ae02e5d4SSrinivas Pandruvada #define IPC_IS_ISH_ISHTP_READY(ish_status) \ 202ae02e5d4SSrinivas Pandruvada (((ish_status) & IPC_ISH_ISHTP_READY_BIT) == \ 203ae02e5d4SSrinivas Pandruvada ((uint32_t)IPC_ISH_ISHTP_READY_BIT)) 204ae02e5d4SSrinivas Pandruvada 205ae02e5d4SSrinivas Pandruvada #define IPC_IS_ISH_ILUP(ish_status) \ 206ae02e5d4SSrinivas Pandruvada (((ish_status) & IPC_ILUP_BIT) == ((uint32_t)IPC_ILUP_BIT)) 207ae02e5d4SSrinivas Pandruvada 208ae02e5d4SSrinivas Pandruvada 209ae02e5d4SSrinivas Pandruvada #define IPC_PROTOCOL_ISHTP 1 210ae02e5d4SSrinivas Pandruvada #define IPC_PROTOCOL_MNG 3 211ae02e5d4SSrinivas Pandruvada 212ae02e5d4SSrinivas Pandruvada #define MNG_RX_CMPL_ENABLE 0 213ae02e5d4SSrinivas Pandruvada #define MNG_RX_CMPL_DISABLE 1 214ae02e5d4SSrinivas Pandruvada #define MNG_RX_CMPL_INDICATION 2 215ae02e5d4SSrinivas Pandruvada #define MNG_RESET_NOTIFY 3 216ae02e5d4SSrinivas Pandruvada #define MNG_RESET_NOTIFY_ACK 4 217ae02e5d4SSrinivas Pandruvada #define MNG_SYNC_FW_CLOCK 5 218ae02e5d4SSrinivas Pandruvada #define MNG_ILLEGAL_CMD 0xFF 219ae02e5d4SSrinivas Pandruvada 220ae02e5d4SSrinivas Pandruvada #endif /* _ISHTP_ISH_REGS_H_ */ 221