blob: b204b167f72ab78bf5021da46305a84d59b69c8e [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright (c) 2019 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
# Registers
######################################
# High Definition Audio Memory Space #
######################################
# HDA Register Blocks
HDA_GR_BASE = 0x0000 # HDA Global Register Block
HDA_SD_BASE = 0x0080 # HDA Stream Descriptor Register Block - index 0
HDA_SPBF_BASE = 0x0700 # HDA Software Position Based FIFO Capability Structure
HDA_PPC_BASE = 0x0800 # HDA Processing Pipe Capabilities Structure
# Global Capabilities
HDA_GR_GCAP = HDA_GR_BASE + 0x0000
HDA_GR_GCAP_ISS = 0x0F00 # Number of Input Streams Supported
HDA_GR_GCAP_ISS_OFFSET = 8 # Number of Input Streams Supported Offset
HDA_GR_GCAP_OSS = 0xF000 # Number of Output Streams Supported
HDA_GR_GCAP_OSS_OFFSET = 12 # Number of Offset Streams Supported Offset
# Golbal Control
HDA_GR_GCTL = HDA_GR_BASE + 0x0008
# Stream Descriptor X Control/Status - only within the blcok
HDA_SD_CS = 0x0000
HDA_SD_CS_SRST = 0x000001 # Stream Reset
HDA_SD_CS_SRST_OFFSET = 0 # Stream Reset Offset
HDA_SD_CS_RUN = 0x000002 # Stream Run
HDA_SD_CS_RUN_OFFSET = 1 # Stream Run Offset
HDA_SD_CS_TP = 0x040000 # Traffic Priority
HDA_SD_CS_TP_OFFSET = 18 # Traffic Priority Offset
HDA_SD_CS_STRM = 0xF00000 # Stream Number
HDA_SD_CS_STRM_OFFSET = 20 # Stream Number Offset
# Stream Descriptor X Link Position in Buffer
HDA_SD_LPIB = 0x0004
# Stream Descriptor X Cyclic Buffer Length
HDA_SD_CBL = 0x0008
# Stream Descriptor X Last Valid Index
HDA_SD_LVI = 0x000C
# Stream Descriptor X FIFO Eviction Watermark
HDA_SD_FIFOW = 0x000E
# Stream Descriptor X FIFO Size
HDA_SD_FIFOS = 0x0010
# Stream Descriptor X Format
HDA_SD_FMT = 0x0012
HDA_SD_FMT_BITS = 0x00F0 # Bit Rate
HDA_SD_FMT_BITS_OFFSET = 4 # Bit Rate Offset
# Stream Descriptor X FIFO Limit
HDA_SD_FIFOL = 0x0014
# Stream Descriptor X Buffer Descriptor List Pointer Lower Base Address
HDA_SD_BDLPLBA = 0x0018
# Stream Descriptor X Buffer Descriptor List Pointer Upper Base Address
HDA_SD_BDLPUBA = 0x001C
# Stream Descriptor Size
HDA_SD_SIZE = 0x20
# Software Position Based FIFO Capability Control
HDA_SPBF_SPBFCTL = HDA_SPBF_BASE + 0x0004
HDA_SPBF_SPBFCTL_SPIBE = 0xFFFFFFFF # Software Position in Buffer Enable
HDA_SPBF_SPBFCTL_SPIBE_OFFSET = 0 # Software Position in Buffer Enable Offset
# Stream Descriptor X Software Position in Buffer
HDA_SPBF_SD_BASE = HDA_SPBF_BASE + 0x0008
HDA_SPBF_SDSPIB = 0x00
# Stream Descriptor X Max FIFO Size
HDA_SPBF_SDMAXFIFOS = 0x04
# Software Position Based FIFO Stream Descritpro Size
HDA_SPBF_SD_SIZE = 0x08
# Processing Pipe Control
HDA_PPC_PPCTL = HDA_PPC_BASE + 0x0004
HDA_PPC_PPCTL_PROCEN = 0x3FFFFFFF # Processing Enable
HDA_PPC_PPCTL_PROCEN_OFFSET = 0 # Processing Enable Offset
HDA_PPC_PPCTL_GPROCEN = 0x40000000 # Global Processing Enable
HDA_PPC_PPCTL_GPROCEN_OFFSET = 30 # Global Processing Enable Offset
# ADSP Register Blocks
ADSP_GR_BASE = 0x0000 # ADSP General DSP Registers
ADSP_IPC_BASE = 0x0040 # ADSP IPC Register
# ADSP Control & Status
ADSP_GR_ADSPCS = ADSP_GR_BASE + 0x0004
ADSP_GR_ADSPCS_CRST = 0x000000FF # Core Reset
ADSP_GR_ADSPCS_CRST_OFFSET = 0 # Core Reset Offset
ADSP_GR_ADSPCS_CSTALL = 0x0000FF00 # Core Run#/Stall
ADSP_GR_ADSPCS_CSTALL_OFFSET = 8 # Core Run#/Stall Offset
ADSP_GR_ADSPCS_SPA = 0x00FF0000 # Set Power Active
ADSP_GR_ADSPCS_SPA_OFFSET = 16 # Set Power Active Offset
ADSP_GR_ADSPCS_CPA = 0xFF000000 # Current Power Active
ADSP_GR_ADSPCS_CPA_OFFSET = 24 # Current Power Active Offset
# ADSP Interrupt Control
ADSP_GR_ADSPIC = ADSP_GR_BASE + 0x0008
ADSP_GR_ADSPIC_IPC = 0x00000001 # IPC Interrupt
ADSP_GR_ADSPIC_IPC_OFFSET = 0 # IPC Interrupt Offset
ADSP_GR_ADSPIC_CLDMA = 0x00000002 # Code Loader DMA Interrupt
ADSP_GR_ADSPIC_CLDMA_OFFSET = 1 # Code Loader DMA Interrupt Offset
# ADSP IPC DSP to Host
ADSP_IPC_HIPCT = ADSP_IPC_BASE + 0x0000
ADSP_IPC_HIPCT_BUSY = 0x80000000 # Busy
ADSP_IPC_HIPCT_BUSY_OFFSET = 31 # Busy Offset
ADSP_IPC_HIPCT_MSG = 0x7FFFFFFF # Message
ADSP_IPC_HIPCT_MSG_OFFSET = 0 # Message Offset
# ADSP IPC DSP to Host Extension
ADSP_IPC_HIPCTE = ADSP_IPC_BASE + 0x0004
ADSP_IPC_HIPCTE_MSGEXT = 0x3FFFFFFF # Message Extension
ADSP_IPC_HIPCTE_MSGEXT_OFFSET = 0 # Message Extension Offset
# ADSP IPC Host to DSP
ADSP_IPC_HIPCI = ADSP_IPC_BASE + 0x0008
ADSP_IPC_HIPCI_BUSY = 0x80000000 # Busy
ADSP_IPC_HIPCI_BUSY_OFFSET = 31 # Busy Offset
ADSP_IPC_HIPCI_MSG = 0x7FFFFFFF # Message
ADSP_IPC_HIPCI_MSG_OFFSET = 0 # Message Offset
# ADSP IPC Host to DSP Extension
ADSP_IPC_HIPCIE = ADSP_IPC_BASE + 0x000C
ADSP_IPC_HIPCIE_ERR = 0x80000000 # Error
ADSP_IPC_HIPCIE_ERR_OFFSET = 31 # Error Offset
ADSP_IPC_HIPCIE_DONE = 0x40000000 # Done
ADSP_IPC_HIPCIE_DONE_OFFSET = 30 # Done Offset
ADSP_IPC_HIPCIE_MSGEXT = 0x3FFFFFFF # Message Extension
ADSP_IPC_HIPCIE_MSGEXT_OFFSET = 0 # Message Extension Offset
# ADSP IPC Control
ADSP_IPC_HIPCCTL = ADSP_IPC_BASE + 0x0010
ADSP_IPC_HIPCCTL_IPCTBIE = 0x00000001 # IPC Target Busy Interrupt Enable
ADSP_IPC_HIPCCTL_IPCTBIE_OFFSET = 0 # IPC Target Busy Interrupt Enable Offset
ADSP_IPC_HIPCCTL_IPCIDIE = 0x00000002 # IPC Initiator Done Interrupt Enable
ADSP_IPC_HIPCCTL_IPCIDIE_OFFSET = 1 # IPC Initiator Done Interrupt Enable Offset