2017-08-30 14:45:44 +05:30
|
|
|
/*
|
2018-05-21 10:50:59 -07:00
|
|
|
* Copyright (c) 2018 Intel Corporation
|
2017-08-30 14:45:44 +05:30
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __INC_SOC_H
|
|
|
|
#define __INC_SOC_H
|
|
|
|
|
2017-10-12 18:32:23 +05:30
|
|
|
/* macros related to interrupt handling */
|
|
|
|
#define XTENSA_IRQ_NUM_SHIFT 0
|
|
|
|
#define CAVS_IRQ_NUM_SHIFT 8
|
|
|
|
#define INTR_CNTL_IRQ_NUM_SHIFT 16
|
|
|
|
#define XTENSA_IRQ_NUM_MASK 0xff
|
|
|
|
#define CAVS_IRQ_NUM_MASK 0xff
|
|
|
|
#define INTR_CNTL_IRQ_NUM_MASK 0xff
|
|
|
|
|
|
|
|
/*
|
|
|
|
* IRQs are mapped on 3 levels. 4th level is left 0x00.
|
|
|
|
*
|
|
|
|
* 1. Peripheral Register bit offset.
|
|
|
|
* 2. CAVS logic bit offset.
|
|
|
|
* 3. Core interrupt number.
|
|
|
|
*/
|
|
|
|
#define XTENSA_IRQ_NUMBER(_irq) \
|
|
|
|
((_irq >> XTENSA_IRQ_NUM_SHIFT) & XTENSA_IRQ_NUM_MASK)
|
|
|
|
#define CAVS_IRQ_NUMBER(_irq) \
|
|
|
|
(((_irq >> CAVS_IRQ_NUM_SHIFT) & CAVS_IRQ_NUM_MASK) - 1)
|
|
|
|
#define INTR_CNTL_IRQ_NUM(_irq) \
|
|
|
|
(((_irq >> INTR_CNTL_IRQ_NUM_SHIFT) & INTR_CNTL_IRQ_NUM_MASK) - 1)
|
|
|
|
|
2018-03-13 19:25:51 +05:30
|
|
|
#define IOAPIC_EDGE 0
|
|
|
|
#define IOAPIC_HIGH 0
|
|
|
|
|
2017-10-12 18:32:23 +05:30
|
|
|
/* DW interrupt controller */
|
|
|
|
#define DW_ICTL_IRQ_CAVS_OFFSET CAVS_IRQ_NUMBER(DW_ICTL_IRQ)
|
|
|
|
#define DW_ICTL_NUM_IRQS 9
|
|
|
|
|
2017-10-08 08:44:24 +05:30
|
|
|
/* GPIO */
|
|
|
|
#define GPIO_DW_0_BASE_ADDR 0x00080C00
|
|
|
|
#define GPIO_DW_0_BITS 32
|
|
|
|
#define GPIO_DW_PORT_0_INT_MASK 0
|
|
|
|
#define GPIO_DW_0_IRQ_FLAGS 0
|
2017-10-12 18:32:23 +05:30
|
|
|
#define GPIO_DW_0_IRQ 0x00040706
|
|
|
|
#define GPIO_DW_0_IRQ_ICTL_OFFSET INTR_CNTL_IRQ_NUM(GPIO_DW_0_IRQ)
|
2017-10-08 08:44:24 +05:30
|
|
|
|
2018-01-12 13:20:27 +05:30
|
|
|
/* low power DMACs */
|
|
|
|
#define LP_GP_DMA_SIZE 0x00001000
|
|
|
|
#define DW_DMA0_BASE_ADDR 0x0007C000
|
|
|
|
#define DW_DMA1_BASE_ADDR (0x0007C000 +\
|
|
|
|
1 * LP_GP_DMA_SIZE)
|
|
|
|
#define DW_DMA2_BASE_ADDR (0x0007C000 +\
|
|
|
|
2 * LP_GP_DMA_SIZE)
|
|
|
|
|
|
|
|
#define DW_DMA0_IRQ 0x00001110
|
|
|
|
#define DW_DMA1_IRQ 0x0000010A
|
|
|
|
#define DW_DMA2_IRQ 0x0000010D
|
|
|
|
|
2018-01-04 11:53:51 +05:30
|
|
|
/* address of DMA ownership register. We need to properly configure
|
|
|
|
* this register in order to access the DMA registers.
|
|
|
|
*/
|
|
|
|
#define CAVS_DMA0_OWNERSHIP_REG (0x00071A60)
|
|
|
|
#define CAVS_DMA1_OWNERSHIP_REG (0x00071A62)
|
|
|
|
#define CAVS_DMA2_OWNERSHIP_REG (0x00071A64)
|
|
|
|
|
2018-01-12 13:20:27 +05:30
|
|
|
#define DMA_HANDSHAKE_SSP0_TX 2
|
|
|
|
#define DMA_HANDSHAKE_SSP0_RX 3
|
|
|
|
#define DMA_HANDSHAKE_SSP1_TX 4
|
|
|
|
#define DMA_HANDSHAKE_SSP1_RX 5
|
|
|
|
#define DMA_HANDSHAKE_SSP2_TX 6
|
|
|
|
#define DMA_HANDSHAKE_SSP2_RX 7
|
|
|
|
#define DMA_HANDSHAKE_SSP3_TX 8
|
|
|
|
#define DMA_HANDSHAKE_SSP3_RX 9
|
|
|
|
|
2018-02-28 15:50:20 +05:30
|
|
|
/* I2S */
|
|
|
|
#define I2S0_CAVS_IRQ 0x00000010
|
|
|
|
#define I2S1_CAVS_IRQ 0x00000110
|
|
|
|
#define I2S2_CAVS_IRQ 0x00000210
|
|
|
|
#define I2S3_CAVS_IRQ 0x00000310
|
|
|
|
|
|
|
|
#define SSP_SIZE 0x0000200
|
|
|
|
#define SSP_BASE(x) (0x00077000 + (x) * SSP_SIZE)
|
2018-05-30 08:19:59 -07:00
|
|
|
#define SSP_MN_DIV_SIZE (8)
|
|
|
|
#define SSP_MN_DIV_BASE(x) (0x00078D00 + ((x) * SSP_MN_DIV_SIZE))
|
2018-02-28 15:50:20 +05:30
|
|
|
|
|
|
|
#define SOC_INTEL_S1000_MCK_XTAL_FREQ_HZ 38400000
|
|
|
|
|
|
|
|
/* address of I2S ownership register. We need to properly configure
|
|
|
|
* this register in order to access the I2S registers.
|
|
|
|
*/
|
|
|
|
#define SUE_DSP_RES_ALLOC_REG_BASE 0x00071A60
|
|
|
|
#define SUE_DSPIOPO_REG (SUE_DSP_RES_ALLOC_REG_BASE + 0x08)
|
|
|
|
#define I2S_OWNSEL(x) (0x1 << (8 + (x)))
|
2018-05-30 08:19:59 -07:00
|
|
|
|
|
|
|
/* Address and bit field definition for general ownership register */
|
|
|
|
#define DSP_RES_ALLOC_GEN_OWNER (SUE_DSP_RES_ALLOC_REG_BASE + 0x0C)
|
|
|
|
#define DSP_RES_ALLOC_GENO_DIOPTOSEL (BIT(2))
|
|
|
|
#define DSP_RES_ALLOC_GENO_MDIVOSEL (BIT(1))
|
|
|
|
|
2018-03-13 19:25:51 +05:30
|
|
|
#define USB_DW_BASE 0x000A0000
|
|
|
|
#define USB_DW_IRQ 0x00000806
|
2018-02-28 15:50:20 +05:30
|
|
|
|
2018-05-21 10:50:59 -07:00
|
|
|
/* Global Control registers */
|
|
|
|
#define SOC_S1000_GLB_CTRL_BASE (0x00081C00)
|
|
|
|
|
|
|
|
#define SOC_S1000_GLB_CTRL_STRAPS (SOC_S1000_GLB_CTRL_BASE + 0x40)
|
|
|
|
#define SOC_S1000_STRAP_REF_CLK (BIT_MASK(2) << 3)
|
|
|
|
#define SOC_S1000_STRAP_REF_CLK_38P4 (0 << 3)
|
|
|
|
#define SOC_S1000_STRAP_REF_CLK_19P2 (1 << 3)
|
|
|
|
#define SOC_S1000_STRAP_REF_CLK_24P576 (2 << 3)
|
|
|
|
|
2017-10-12 18:32:23 +05:30
|
|
|
extern void _soc_irq_enable(u32_t irq);
|
|
|
|
extern void _soc_irq_disable(u32_t irq);
|
2018-01-04 11:53:51 +05:30
|
|
|
extern void setup_ownership_dma0(void);
|
|
|
|
extern void setup_ownership_dma1(void);
|
|
|
|
extern void setup_ownership_dma2(void);
|
2018-01-12 13:20:27 +05:30
|
|
|
extern void dcache_writeback_region(void *addr, size_t size);
|
2018-02-28 15:50:20 +05:30
|
|
|
extern void setup_ownership_i2s(void);
|
2018-05-21 10:50:59 -07:00
|
|
|
extern u32_t soc_get_ref_clk_freq(void);
|
2017-10-12 18:32:23 +05:30
|
|
|
|
2017-08-30 14:45:44 +05:30
|
|
|
#endif /* __INC_SOC_H */
|