1*da8fa4e3SBjoern A. Zeeb /* SPDX-License-Identifier: ISC */ 2*da8fa4e3SBjoern A. Zeeb /* 3*da8fa4e3SBjoern A. Zeeb * Copyright (c) 2016 Qualcomm Atheros, Inc. All rights reserved. 4*da8fa4e3SBjoern A. Zeeb * Copyright (c) 2015 The Linux Foundation. All rights reserved. 5*da8fa4e3SBjoern A. Zeeb */ 6*da8fa4e3SBjoern A. Zeeb 7*da8fa4e3SBjoern A. Zeeb #ifndef _AHB_H_ 8*da8fa4e3SBjoern A. Zeeb #define _AHB_H_ 9*da8fa4e3SBjoern A. Zeeb 10*da8fa4e3SBjoern A. Zeeb #include <linux/platform_device.h> 11*da8fa4e3SBjoern A. Zeeb 12*da8fa4e3SBjoern A. Zeeb struct ath10k_ahb { 13*da8fa4e3SBjoern A. Zeeb struct platform_device *pdev; 14*da8fa4e3SBjoern A. Zeeb void __iomem *mem; 15*da8fa4e3SBjoern A. Zeeb unsigned long mem_len; 16*da8fa4e3SBjoern A. Zeeb void __iomem *gcc_mem; 17*da8fa4e3SBjoern A. Zeeb void __iomem *tcsr_mem; 18*da8fa4e3SBjoern A. Zeeb 19*da8fa4e3SBjoern A. Zeeb int irq; 20*da8fa4e3SBjoern A. Zeeb 21*da8fa4e3SBjoern A. Zeeb struct clk *cmd_clk; 22*da8fa4e3SBjoern A. Zeeb struct clk *ref_clk; 23*da8fa4e3SBjoern A. Zeeb struct clk *rtc_clk; 24*da8fa4e3SBjoern A. Zeeb 25*da8fa4e3SBjoern A. Zeeb struct reset_control *core_cold_rst; 26*da8fa4e3SBjoern A. Zeeb struct reset_control *radio_cold_rst; 27*da8fa4e3SBjoern A. Zeeb struct reset_control *radio_warm_rst; 28*da8fa4e3SBjoern A. Zeeb struct reset_control *radio_srif_rst; 29*da8fa4e3SBjoern A. Zeeb struct reset_control *cpu_init_rst; 30*da8fa4e3SBjoern A. Zeeb }; 31*da8fa4e3SBjoern A. Zeeb 32*da8fa4e3SBjoern A. Zeeb #ifdef CONFIG_ATH10K_AHB 33*da8fa4e3SBjoern A. Zeeb 34*da8fa4e3SBjoern A. Zeeb #define ATH10K_GCC_REG_BASE 0x1800000 35*da8fa4e3SBjoern A. Zeeb #define ATH10K_GCC_REG_SIZE 0x60000 36*da8fa4e3SBjoern A. Zeeb 37*da8fa4e3SBjoern A. Zeeb #define ATH10K_TCSR_REG_BASE 0x1900000 38*da8fa4e3SBjoern A. Zeeb #define ATH10K_TCSR_REG_SIZE 0x80000 39*da8fa4e3SBjoern A. Zeeb 40*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_GCC_FEPLL_PLL_DIV 0x2f020 41*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_WIFI_SCRATCH_5_REG 0x4f014 42*da8fa4e3SBjoern A. Zeeb 43*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_WLAN_CORE_ID_REG 0x82030 44*da8fa4e3SBjoern A. Zeeb 45*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_TCSR_WIFI0_GLB_CFG 0x49000 46*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_TCSR_WIFI1_GLB_CFG 0x49004 47*da8fa4e3SBjoern A. Zeeb #define TCSR_WIFIX_GLB_CFG_DISABLE_CORE_CLK BIT(25) 48*da8fa4e3SBjoern A. Zeeb 49*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_TCSR_WCSS0_HALTREQ 0x52000 50*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_TCSR_WCSS1_HALTREQ 0x52010 51*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_TCSR_WCSS0_HALTACK 0x52004 52*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_TCSR_WCSS1_HALTACK 0x52014 53*da8fa4e3SBjoern A. Zeeb 54*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_AXI_BUS_HALT_TIMEOUT 10 /* msec */ 55*da8fa4e3SBjoern A. Zeeb #define AHB_AXI_BUS_HALT_REQ 1 56*da8fa4e3SBjoern A. Zeeb #define AHB_AXI_BUS_HALT_ACK 1 57*da8fa4e3SBjoern A. Zeeb 58*da8fa4e3SBjoern A. Zeeb #define ATH10K_AHB_CORE_CTRL_CPU_INTR_MASK 1 59*da8fa4e3SBjoern A. Zeeb 60*da8fa4e3SBjoern A. Zeeb int ath10k_ahb_init(void); 61*da8fa4e3SBjoern A. Zeeb void ath10k_ahb_exit(void); 62*da8fa4e3SBjoern A. Zeeb 63*da8fa4e3SBjoern A. Zeeb #else /* CONFIG_ATH10K_AHB */ 64*da8fa4e3SBjoern A. Zeeb ath10k_ahb_init(void)65*da8fa4e3SBjoern A. Zeebstatic inline int ath10k_ahb_init(void) 66*da8fa4e3SBjoern A. Zeeb { 67*da8fa4e3SBjoern A. Zeeb return 0; 68*da8fa4e3SBjoern A. Zeeb } 69*da8fa4e3SBjoern A. Zeeb ath10k_ahb_exit(void)70*da8fa4e3SBjoern A. Zeebstatic inline void ath10k_ahb_exit(void) 71*da8fa4e3SBjoern A. Zeeb { 72*da8fa4e3SBjoern A. Zeeb } 73*da8fa4e3SBjoern A. Zeeb 74*da8fa4e3SBjoern A. Zeeb #endif /* CONFIG_ATH10K_AHB */ 75*da8fa4e3SBjoern A. Zeeb 76*da8fa4e3SBjoern A. Zeeb #endif /* _AHB_H_ */ 77