162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ISH registers definitions 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2012-2016, Intel Corporation. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _ISHTP_ISH_REGS_H_ 962306a36Sopenharmony_ci#define _ISHTP_ISH_REGS_H_ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/*** IPC PCI Offsets and sizes ***/ 1362306a36Sopenharmony_ci/* ISH IPC Base Address */ 1462306a36Sopenharmony_ci#define IPC_REG_BASE 0x0000 1562306a36Sopenharmony_ci/* Peripheral Interrupt Status Register */ 1662306a36Sopenharmony_ci#define IPC_REG_PISR_CHV_AB (IPC_REG_BASE + 0x00) 1762306a36Sopenharmony_ci/* Peripheral Interrupt Mask Register */ 1862306a36Sopenharmony_ci#define IPC_REG_PIMR_CHV_AB (IPC_REG_BASE + 0x04) 1962306a36Sopenharmony_ci/*BXT, CHV_K0*/ 2062306a36Sopenharmony_ci/*Peripheral Interrupt Status Register */ 2162306a36Sopenharmony_ci#define IPC_REG_PISR_BXT (IPC_REG_BASE + 0x0C) 2262306a36Sopenharmony_ci/*Peripheral Interrupt Mask Register */ 2362306a36Sopenharmony_ci#define IPC_REG_PIMR_BXT (IPC_REG_BASE + 0x08) 2462306a36Sopenharmony_ci/***********************************/ 2562306a36Sopenharmony_ci/* ISH Host Firmware status Register */ 2662306a36Sopenharmony_ci#define IPC_REG_ISH_HOST_FWSTS (IPC_REG_BASE + 0x34) 2762306a36Sopenharmony_ci/* Host Communication Register */ 2862306a36Sopenharmony_ci#define IPC_REG_HOST_COMM (IPC_REG_BASE + 0x38) 2962306a36Sopenharmony_ci/* Reset register */ 3062306a36Sopenharmony_ci#define IPC_REG_ISH_RST (IPC_REG_BASE + 0x44) 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* Inbound doorbell register Host to ISH */ 3362306a36Sopenharmony_ci#define IPC_REG_HOST2ISH_DRBL (IPC_REG_BASE + 0x48) 3462306a36Sopenharmony_ci/* Outbound doorbell register ISH to Host */ 3562306a36Sopenharmony_ci#define IPC_REG_ISH2HOST_DRBL (IPC_REG_BASE + 0x54) 3662306a36Sopenharmony_ci/* ISH to HOST message registers */ 3762306a36Sopenharmony_ci#define IPC_REG_ISH2HOST_MSG (IPC_REG_BASE + 0x60) 3862306a36Sopenharmony_ci/* HOST to ISH message registers */ 3962306a36Sopenharmony_ci#define IPC_REG_HOST2ISH_MSG (IPC_REG_BASE + 0xE0) 4062306a36Sopenharmony_ci/* REMAP2 to enable DMA (D3 RCR) */ 4162306a36Sopenharmony_ci#define IPC_REG_ISH_RMP2 (IPC_REG_BASE + 0x368) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#define IPC_REG_MAX (IPC_REG_BASE + 0x400) 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci/*** register bits - HISR ***/ 4662306a36Sopenharmony_ci/* bit corresponds HOST2ISH interrupt in PISR and PIMR registers */ 4762306a36Sopenharmony_ci#define IPC_INT_HOST2ISH_BIT (1<<0) 4862306a36Sopenharmony_ci/***********************************/ 4962306a36Sopenharmony_ci/*CHV_A0, CHV_B0*/ 5062306a36Sopenharmony_ci/* bit corresponds ISH2HOST interrupt in PISR and PIMR registers */ 5162306a36Sopenharmony_ci#define IPC_INT_ISH2HOST_BIT_CHV_AB (1<<3) 5262306a36Sopenharmony_ci/*BXT, CHV_K0*/ 5362306a36Sopenharmony_ci/* bit corresponds ISH2HOST interrupt in PISR and PIMR registers */ 5462306a36Sopenharmony_ci#define IPC_INT_ISH2HOST_BIT_BXT (1<<0) 5562306a36Sopenharmony_ci/***********************************/ 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* bit corresponds ISH2HOST busy clear interrupt in PIMR register */ 5862306a36Sopenharmony_ci#define IPC_INT_ISH2HOST_CLR_MASK_BIT (1<<11) 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci/* offset of ISH2HOST busy clear interrupt in IPC_BUSY_CLR register */ 6162306a36Sopenharmony_ci#define IPC_INT_ISH2HOST_CLR_OFFS (0) 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci/* bit corresponds ISH2HOST busy clear interrupt in IPC_BUSY_CLR register */ 6462306a36Sopenharmony_ci#define IPC_INT_ISH2HOST_CLR_BIT (1<<IPC_INT_ISH2HOST_CLR_OFFS) 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci/* bit corresponds busy bit in doorbell registers */ 6762306a36Sopenharmony_ci#define IPC_DRBL_BUSY_OFFS (31) 6862306a36Sopenharmony_ci#define IPC_DRBL_BUSY_BIT (1<<IPC_DRBL_BUSY_OFFS) 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define IPC_HOST_OWNS_MSG_OFFS (30) 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci/* 7362306a36Sopenharmony_ci * A0: bit means that host owns MSGnn registers and is reading them. 7462306a36Sopenharmony_ci * ISH FW may not write to them 7562306a36Sopenharmony_ci */ 7662306a36Sopenharmony_ci#define IPC_HOST_OWNS_MSG_BIT (1<<IPC_HOST_OWNS_MSG_OFFS) 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* 7962306a36Sopenharmony_ci * Host status bits (HOSTCOMM) 8062306a36Sopenharmony_ci */ 8162306a36Sopenharmony_ci/* bit corresponds host ready bit in Host Status Register (HOST_COMM) */ 8262306a36Sopenharmony_ci#define IPC_HOSTCOMM_READY_OFFS (7) 8362306a36Sopenharmony_ci#define IPC_HOSTCOMM_READY_BIT (1<<IPC_HOSTCOMM_READY_OFFS) 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci/***********************************/ 8662306a36Sopenharmony_ci/*CHV_A0, CHV_B0*/ 8762306a36Sopenharmony_ci#define IPC_HOSTCOMM_INT_EN_OFFS_CHV_AB (31) 8862306a36Sopenharmony_ci#define IPC_HOSTCOMM_INT_EN_BIT_CHV_AB \ 8962306a36Sopenharmony_ci (1<<IPC_HOSTCOMM_INT_EN_OFFS_CHV_AB) 9062306a36Sopenharmony_ci/*BXT, CHV_K0*/ 9162306a36Sopenharmony_ci#define IPC_PIMR_INT_EN_OFFS_BXT (0) 9262306a36Sopenharmony_ci#define IPC_PIMR_INT_EN_BIT_BXT (1<<IPC_PIMR_INT_EN_OFFS_BXT) 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci#define IPC_HOST2ISH_BUSYCLEAR_MASK_OFFS_BXT (8) 9562306a36Sopenharmony_ci#define IPC_HOST2ISH_BUSYCLEAR_MASK_BIT \ 9662306a36Sopenharmony_ci (1<<IPC_HOST2ISH_BUSYCLEAR_MASK_OFFS_BXT) 9762306a36Sopenharmony_ci/***********************************/ 9862306a36Sopenharmony_ci/* 9962306a36Sopenharmony_ci * both Host and ISH have ILUP at bit 0 10062306a36Sopenharmony_ci * bit corresponds host ready bit in both status registers 10162306a36Sopenharmony_ci */ 10262306a36Sopenharmony_ci#define IPC_ILUP_OFFS (0) 10362306a36Sopenharmony_ci#define IPC_ILUP_BIT (1<<IPC_ILUP_OFFS) 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci/* 10662306a36Sopenharmony_ci * ISH FW status bits in ISH FW Status Register 10762306a36Sopenharmony_ci */ 10862306a36Sopenharmony_ci#define IPC_ISH_FWSTS_SHIFT 12 10962306a36Sopenharmony_ci#define IPC_ISH_FWSTS_MASK GENMASK(15, 12) 11062306a36Sopenharmony_ci#define IPC_GET_ISH_FWSTS(status) \ 11162306a36Sopenharmony_ci (((status) & IPC_ISH_FWSTS_MASK) >> IPC_ISH_FWSTS_SHIFT) 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci/* 11462306a36Sopenharmony_ci * FW status bits (relevant) 11562306a36Sopenharmony_ci */ 11662306a36Sopenharmony_ci#define IPC_FWSTS_ILUP 0x1 11762306a36Sopenharmony_ci#define IPC_FWSTS_ISHTP_UP (1<<1) 11862306a36Sopenharmony_ci#define IPC_FWSTS_DMA0 (1<<16) 11962306a36Sopenharmony_ci#define IPC_FWSTS_DMA1 (1<<17) 12062306a36Sopenharmony_ci#define IPC_FWSTS_DMA2 (1<<18) 12162306a36Sopenharmony_ci#define IPC_FWSTS_DMA3 (1<<19) 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci#define IPC_ISH_IN_DMA \ 12462306a36Sopenharmony_ci (IPC_FWSTS_DMA0 | IPC_FWSTS_DMA1 | IPC_FWSTS_DMA2 | IPC_FWSTS_DMA3) 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci/* bit corresponds host ready bit in ISH FW Status Register */ 12762306a36Sopenharmony_ci#define IPC_ISH_ISHTP_READY_OFFS (1) 12862306a36Sopenharmony_ci#define IPC_ISH_ISHTP_READY_BIT (1<<IPC_ISH_ISHTP_READY_OFFS) 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci#define IPC_RMP2_DMA_ENABLED 0x1 /* Value to enable DMA, per D3 RCR */ 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci#define IPC_MSG_MAX_SIZE 0x80 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci#define IPC_HEADER_LENGTH_MASK 0x03FF 13662306a36Sopenharmony_ci#define IPC_HEADER_PROTOCOL_MASK 0x0F 13762306a36Sopenharmony_ci#define IPC_HEADER_MNG_CMD_MASK 0x0F 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci#define IPC_HEADER_LENGTH_OFFSET 0 14062306a36Sopenharmony_ci#define IPC_HEADER_PROTOCOL_OFFSET 10 14162306a36Sopenharmony_ci#define IPC_HEADER_MNG_CMD_OFFSET 16 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci#define IPC_HEADER_GET_LENGTH(drbl_reg) \ 14462306a36Sopenharmony_ci (((drbl_reg) >> IPC_HEADER_LENGTH_OFFSET)&IPC_HEADER_LENGTH_MASK) 14562306a36Sopenharmony_ci#define IPC_HEADER_GET_PROTOCOL(drbl_reg) \ 14662306a36Sopenharmony_ci (((drbl_reg) >> IPC_HEADER_PROTOCOL_OFFSET)&IPC_HEADER_PROTOCOL_MASK) 14762306a36Sopenharmony_ci#define IPC_HEADER_GET_MNG_CMD(drbl_reg) \ 14862306a36Sopenharmony_ci (((drbl_reg) >> IPC_HEADER_MNG_CMD_OFFSET)&IPC_HEADER_MNG_CMD_MASK) 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci#define IPC_IS_BUSY(drbl_reg) \ 15162306a36Sopenharmony_ci (((drbl_reg)&IPC_DRBL_BUSY_BIT) == ((uint32_t)IPC_DRBL_BUSY_BIT)) 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci/***********************************/ 15462306a36Sopenharmony_ci/*CHV_A0, CHV_B0*/ 15562306a36Sopenharmony_ci#define IPC_INT_FROM_ISH_TO_HOST_CHV_AB(drbl_reg) \ 15662306a36Sopenharmony_ci (((drbl_reg)&IPC_INT_ISH2HOST_BIT_CHV_AB) == \ 15762306a36Sopenharmony_ci ((u32)IPC_INT_ISH2HOST_BIT_CHV_AB)) 15862306a36Sopenharmony_ci/*BXT, CHV_K0*/ 15962306a36Sopenharmony_ci#define IPC_INT_FROM_ISH_TO_HOST_BXT(drbl_reg) \ 16062306a36Sopenharmony_ci (((drbl_reg)&IPC_INT_ISH2HOST_BIT_BXT) == \ 16162306a36Sopenharmony_ci ((u32)IPC_INT_ISH2HOST_BIT_BXT)) 16262306a36Sopenharmony_ci/***********************************/ 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci#define IPC_BUILD_HEADER(length, protocol, busy) \ 16562306a36Sopenharmony_ci (((busy)<<IPC_DRBL_BUSY_OFFS) | \ 16662306a36Sopenharmony_ci ((protocol) << IPC_HEADER_PROTOCOL_OFFSET) | \ 16762306a36Sopenharmony_ci ((length)<<IPC_HEADER_LENGTH_OFFSET)) 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci#define IPC_BUILD_MNG_MSG(cmd, length) \ 17062306a36Sopenharmony_ci (((1)<<IPC_DRBL_BUSY_OFFS)| \ 17162306a36Sopenharmony_ci ((IPC_PROTOCOL_MNG)<<IPC_HEADER_PROTOCOL_OFFSET)| \ 17262306a36Sopenharmony_ci ((cmd)<<IPC_HEADER_MNG_CMD_OFFSET)| \ 17362306a36Sopenharmony_ci ((length)<<IPC_HEADER_LENGTH_OFFSET)) 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci#define IPC_SET_HOST_READY(host_status) \ 17762306a36Sopenharmony_ci ((host_status) |= (IPC_HOSTCOMM_READY_BIT)) 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci#define IPC_SET_HOST_ILUP(host_status) \ 18062306a36Sopenharmony_ci ((host_status) |= (IPC_ILUP_BIT)) 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci#define IPC_CLEAR_HOST_READY(host_status) \ 18362306a36Sopenharmony_ci ((host_status) ^= (IPC_HOSTCOMM_READY_BIT)) 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci#define IPC_CLEAR_HOST_ILUP(host_status) \ 18662306a36Sopenharmony_ci ((host_status) ^= (IPC_ILUP_BIT)) 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci/* todo - temp until PIMR HW ready */ 18962306a36Sopenharmony_ci#define IPC_HOST_BUSY_READING_OFFS 6 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci/* bit corresponds host ready bit in Host Status Register (HOST_COMM) */ 19262306a36Sopenharmony_ci#define IPC_HOST_BUSY_READING_BIT (1<<IPC_HOST_BUSY_READING_OFFS) 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci#define IPC_SET_HOST_BUSY_READING(host_status) \ 19562306a36Sopenharmony_ci ((host_status) |= (IPC_HOST_BUSY_READING_BIT)) 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci#define IPC_CLEAR_HOST_BUSY_READING(host_status)\ 19862306a36Sopenharmony_ci ((host_status) ^= (IPC_HOST_BUSY_READING_BIT)) 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci#define IPC_IS_ISH_ISHTP_READY(ish_status) \ 20262306a36Sopenharmony_ci (((ish_status) & IPC_ISH_ISHTP_READY_BIT) == \ 20362306a36Sopenharmony_ci ((uint32_t)IPC_ISH_ISHTP_READY_BIT)) 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci#define IPC_IS_ISH_ILUP(ish_status) \ 20662306a36Sopenharmony_ci (((ish_status) & IPC_ILUP_BIT) == ((uint32_t)IPC_ILUP_BIT)) 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci#define IPC_PROTOCOL_ISHTP 1 21062306a36Sopenharmony_ci#define IPC_PROTOCOL_MNG 3 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci#define MNG_RX_CMPL_ENABLE 0 21362306a36Sopenharmony_ci#define MNG_RX_CMPL_DISABLE 1 21462306a36Sopenharmony_ci#define MNG_RX_CMPL_INDICATION 2 21562306a36Sopenharmony_ci#define MNG_RESET_NOTIFY 3 21662306a36Sopenharmony_ci#define MNG_RESET_NOTIFY_ACK 4 21762306a36Sopenharmony_ci#define MNG_SYNC_FW_CLOCK 5 21862306a36Sopenharmony_ci#define MNG_ILLEGAL_CMD 0xFF 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci#endif /* _ISHTP_ISH_REGS_H_ */ 221