1d4a67d9dSGabor Juhos /* 2d4a67d9dSGabor Juhos * Atheros AR71XX/AR724X/AR913X common definitions 3d4a67d9dSGabor Juhos * 4d4a67d9dSGabor Juhos * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> 5d4a67d9dSGabor Juhos * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 6d4a67d9dSGabor Juhos * 7d4a67d9dSGabor Juhos * Parts of this file are based on Atheros' 2.6.15 BSP 8d4a67d9dSGabor Juhos * 9d4a67d9dSGabor Juhos * This program is free software; you can redistribute it and/or modify it 10d4a67d9dSGabor Juhos * under the terms of the GNU General Public License version 2 as published 11d4a67d9dSGabor Juhos * by the Free Software Foundation. 12d4a67d9dSGabor Juhos */ 13d4a67d9dSGabor Juhos 14d4a67d9dSGabor Juhos #ifndef __ASM_MACH_ATH79_H 15d4a67d9dSGabor Juhos #define __ASM_MACH_ATH79_H 16d4a67d9dSGabor Juhos 17d4a67d9dSGabor Juhos #include <linux/types.h> 18d4a67d9dSGabor Juhos #include <linux/io.h> 19d4a67d9dSGabor Juhos 20d4a67d9dSGabor Juhos enum ath79_soc_type { 21d4a67d9dSGabor Juhos ATH79_SOC_UNKNOWN, 22d4a67d9dSGabor Juhos ATH79_SOC_AR7130, 23d4a67d9dSGabor Juhos ATH79_SOC_AR7141, 24d4a67d9dSGabor Juhos ATH79_SOC_AR7161, 25d4a67d9dSGabor Juhos ATH79_SOC_AR7240, 26d4a67d9dSGabor Juhos ATH79_SOC_AR7241, 27d4a67d9dSGabor Juhos ATH79_SOC_AR7242, 28d4a67d9dSGabor Juhos ATH79_SOC_AR9130, 296d1c8fdeSGabor Juhos ATH79_SOC_AR9132, 306d1c8fdeSGabor Juhos ATH79_SOC_AR9330, 316d1c8fdeSGabor Juhos ATH79_SOC_AR9331, 32d8411466SGabor Juhos ATH79_SOC_AR9341, 33d8411466SGabor Juhos ATH79_SOC_AR9342, 34d8411466SGabor Juhos ATH79_SOC_AR9344, 35af2d1b52SMatthias Schiffer ATH79_SOC_QCA9533, 362e6c91e3SGabor Juhos ATH79_SOC_QCA9556, 372e6c91e3SGabor Juhos ATH79_SOC_QCA9558, 38af2d1b52SMatthias Schiffer ATH79_SOC_TP9343, 39af2d1b52SMatthias Schiffer ATH79_SOC_QCA956X, 40d4a67d9dSGabor Juhos }; 41d4a67d9dSGabor Juhos 42d4a67d9dSGabor Juhos extern enum ath79_soc_type ath79_soc; 43be5f3623SGabor Juhos extern unsigned int ath79_soc_rev; 44d4a67d9dSGabor Juhos 45d4a67d9dSGabor Juhos static inline int soc_is_ar71xx(void) 46d4a67d9dSGabor Juhos { 47d4a67d9dSGabor Juhos return (ath79_soc == ATH79_SOC_AR7130 || 48d4a67d9dSGabor Juhos ath79_soc == ATH79_SOC_AR7141 || 49d4a67d9dSGabor Juhos ath79_soc == ATH79_SOC_AR7161); 50d4a67d9dSGabor Juhos } 51d4a67d9dSGabor Juhos 52d4a67d9dSGabor Juhos static inline int soc_is_ar724x(void) 53d4a67d9dSGabor Juhos { 54d4a67d9dSGabor Juhos return (ath79_soc == ATH79_SOC_AR7240 || 55d4a67d9dSGabor Juhos ath79_soc == ATH79_SOC_AR7241 || 56d4a67d9dSGabor Juhos ath79_soc == ATH79_SOC_AR7242); 57d4a67d9dSGabor Juhos } 58d4a67d9dSGabor Juhos 59d4a67d9dSGabor Juhos static inline int soc_is_ar7240(void) 60d4a67d9dSGabor Juhos { 61d4a67d9dSGabor Juhos return (ath79_soc == ATH79_SOC_AR7240); 62d4a67d9dSGabor Juhos } 63d4a67d9dSGabor Juhos 64d4a67d9dSGabor Juhos static inline int soc_is_ar7241(void) 65d4a67d9dSGabor Juhos { 66d4a67d9dSGabor Juhos return (ath79_soc == ATH79_SOC_AR7241); 67d4a67d9dSGabor Juhos } 68d4a67d9dSGabor Juhos 69d4a67d9dSGabor Juhos static inline int soc_is_ar7242(void) 70d4a67d9dSGabor Juhos { 71d4a67d9dSGabor Juhos return (ath79_soc == ATH79_SOC_AR7242); 72d4a67d9dSGabor Juhos } 73d4a67d9dSGabor Juhos 74d4a67d9dSGabor Juhos static inline int soc_is_ar913x(void) 75d4a67d9dSGabor Juhos { 76d4a67d9dSGabor Juhos return (ath79_soc == ATH79_SOC_AR9130 || 77d4a67d9dSGabor Juhos ath79_soc == ATH79_SOC_AR9132); 78d4a67d9dSGabor Juhos } 79d4a67d9dSGabor Juhos 8004225e1dSGabor Juhos static inline int soc_is_ar933x(void) 8104225e1dSGabor Juhos { 8204225e1dSGabor Juhos return (ath79_soc == ATH79_SOC_AR9330 || 8304225e1dSGabor Juhos ath79_soc == ATH79_SOC_AR9331); 8404225e1dSGabor Juhos } 8504225e1dSGabor Juhos 86d8411466SGabor Juhos static inline int soc_is_ar9341(void) 87d8411466SGabor Juhos { 88d8411466SGabor Juhos return (ath79_soc == ATH79_SOC_AR9341); 89d8411466SGabor Juhos } 90d8411466SGabor Juhos 91d8411466SGabor Juhos static inline int soc_is_ar9342(void) 92d8411466SGabor Juhos { 93d8411466SGabor Juhos return (ath79_soc == ATH79_SOC_AR9342); 94d8411466SGabor Juhos } 95d8411466SGabor Juhos 96d8411466SGabor Juhos static inline int soc_is_ar9344(void) 97d8411466SGabor Juhos { 98d8411466SGabor Juhos return (ath79_soc == ATH79_SOC_AR9344); 99d8411466SGabor Juhos } 100d8411466SGabor Juhos 101d8411466SGabor Juhos static inline int soc_is_ar934x(void) 102d8411466SGabor Juhos { 103d8411466SGabor Juhos return soc_is_ar9341() || soc_is_ar9342() || soc_is_ar9344(); 104d8411466SGabor Juhos } 105d8411466SGabor Juhos 106af2d1b52SMatthias Schiffer static inline int soc_is_qca9533(void) 107af2d1b52SMatthias Schiffer { 108af2d1b52SMatthias Schiffer return ath79_soc == ATH79_SOC_QCA9533; 109af2d1b52SMatthias Schiffer } 110af2d1b52SMatthias Schiffer 111af2d1b52SMatthias Schiffer static inline int soc_is_qca953x(void) 112af2d1b52SMatthias Schiffer { 113af2d1b52SMatthias Schiffer return soc_is_qca9533(); 114af2d1b52SMatthias Schiffer } 115af2d1b52SMatthias Schiffer 1162e6c91e3SGabor Juhos static inline int soc_is_qca9556(void) 1172e6c91e3SGabor Juhos { 1182e6c91e3SGabor Juhos return ath79_soc == ATH79_SOC_QCA9556; 1192e6c91e3SGabor Juhos } 1202e6c91e3SGabor Juhos 1212e6c91e3SGabor Juhos static inline int soc_is_qca9558(void) 1222e6c91e3SGabor Juhos { 1232e6c91e3SGabor Juhos return ath79_soc == ATH79_SOC_QCA9558; 1242e6c91e3SGabor Juhos } 1252e6c91e3SGabor Juhos 1262e6c91e3SGabor Juhos static inline int soc_is_qca955x(void) 1272e6c91e3SGabor Juhos { 1282e6c91e3SGabor Juhos return soc_is_qca9556() || soc_is_qca9558(); 1292e6c91e3SGabor Juhos } 1302e6c91e3SGabor Juhos 131af2d1b52SMatthias Schiffer static inline int soc_is_tp9343(void) 132af2d1b52SMatthias Schiffer { 133af2d1b52SMatthias Schiffer return ath79_soc == ATH79_SOC_TP9343; 134af2d1b52SMatthias Schiffer } 135af2d1b52SMatthias Schiffer 136af2d1b52SMatthias Schiffer static inline int soc_is_qca9561(void) 137af2d1b52SMatthias Schiffer { 138af2d1b52SMatthias Schiffer return ath79_soc == ATH79_SOC_QCA956X; 139af2d1b52SMatthias Schiffer } 140af2d1b52SMatthias Schiffer 141af2d1b52SMatthias Schiffer static inline int soc_is_qca9563(void) 142af2d1b52SMatthias Schiffer { 143af2d1b52SMatthias Schiffer return ath79_soc == ATH79_SOC_QCA956X; 144af2d1b52SMatthias Schiffer } 145af2d1b52SMatthias Schiffer 146af2d1b52SMatthias Schiffer static inline int soc_is_qca956x(void) 147af2d1b52SMatthias Schiffer { 148af2d1b52SMatthias Schiffer return soc_is_qca9561() || soc_is_qca9563(); 149af2d1b52SMatthias Schiffer } 150af2d1b52SMatthias Schiffer 151c166fe78SAlban Bedel void ath79_ddr_wb_flush(unsigned int reg); 15224b0e3e8SAlban Bedel void ath79_ddr_set_pci_windows(void); 15324b0e3e8SAlban Bedel 154d4a67d9dSGabor Juhos extern void __iomem *ath79_pll_base; 155d4a67d9dSGabor Juhos extern void __iomem *ath79_reset_base; 156d4a67d9dSGabor Juhos 157d4a67d9dSGabor Juhos static inline void ath79_pll_wr(unsigned reg, u32 val) 158d4a67d9dSGabor Juhos { 159d4a67d9dSGabor Juhos __raw_writel(val, ath79_pll_base + reg); 160d4a67d9dSGabor Juhos } 161d4a67d9dSGabor Juhos 162d4a67d9dSGabor Juhos static inline u32 ath79_pll_rr(unsigned reg) 163d4a67d9dSGabor Juhos { 164d4a67d9dSGabor Juhos return __raw_readl(ath79_pll_base + reg); 165d4a67d9dSGabor Juhos } 166d4a67d9dSGabor Juhos 167d4a67d9dSGabor Juhos static inline void ath79_reset_wr(unsigned reg, u32 val) 168d4a67d9dSGabor Juhos { 169d4a67d9dSGabor Juhos __raw_writel(val, ath79_reset_base + reg); 170f8a7bfe1SFelix Fietkau (void) __raw_readl(ath79_reset_base + reg); /* flush */ 171d4a67d9dSGabor Juhos } 172d4a67d9dSGabor Juhos 173d4a67d9dSGabor Juhos static inline u32 ath79_reset_rr(unsigned reg) 174d4a67d9dSGabor Juhos { 175d4a67d9dSGabor Juhos return __raw_readl(ath79_reset_base + reg); 176d4a67d9dSGabor Juhos } 177d4a67d9dSGabor Juhos 178d4a67d9dSGabor Juhos void ath79_device_reset_set(u32 mask); 179d4a67d9dSGabor Juhos void ath79_device_reset_clear(u32 mask); 180d4a67d9dSGabor Juhos 18181ffb18cSAlban Bedel void ath79_cpu_irq_init(unsigned irq_wb_chan2, unsigned irq_wb_chan3); 18207ba4b06SAlban Bedel void ath79_misc_irq_init(void __iomem *regs, int irq, 18307ba4b06SAlban Bedel int irq_base, bool is_ar71xx); 18407ba4b06SAlban Bedel 185d4a67d9dSGabor Juhos #endif /* __ASM_MACH_ATH79_H */ 186