/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Atheros AR71XX/AR724X/AR913X common definitions
 *
 * Copyright (C) 2015-2016 Wills Wang <wills.wang@live.com>
 * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org>
 * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
 */

#ifndef __ASM_MACH_ATH79_H
#define __ASM_MACH_ATH79_H

#include <linux/types.h>

DECLARE_GLOBAL_DATA_PTR;

enum ath79_soc_type {
	ATH79_SOC_UNKNOWN,
	ATH79_SOC_AR7130,
	ATH79_SOC_AR7141,
	ATH79_SOC_AR7161,
	ATH79_SOC_AR7240,
	ATH79_SOC_AR7241,
	ATH79_SOC_AR7242,
	ATH79_SOC_AR9130,
	ATH79_SOC_AR9132,
	ATH79_SOC_AR9330,
	ATH79_SOC_AR9331,
	ATH79_SOC_AR9341,
	ATH79_SOC_AR9342,
	ATH79_SOC_AR9344,
	ATH79_SOC_QCA9533,
	ATH79_SOC_QCA9556,
	ATH79_SOC_QCA9558,
	ATH79_SOC_TP9343,
	ATH79_SOC_QCA9561,
};

static inline int soc_is_ar71xx(void)
{
	return gd->arch.soc == ATH79_SOC_AR7130 ||
		gd->arch.soc == ATH79_SOC_AR7141 ||
		gd->arch.soc == ATH79_SOC_AR7161;
}

static inline int soc_is_ar724x(void)
{
	return gd->arch.soc == ATH79_SOC_AR7240 ||
		gd->arch.soc == ATH79_SOC_AR7241 ||
		gd->arch.soc == ATH79_SOC_AR7242;
}

static inline int soc_is_ar7240(void)
{
	return gd->arch.soc == ATH79_SOC_AR7240;
}

static inline int soc_is_ar7241(void)
{
	return gd->arch.soc == ATH79_SOC_AR7241;
}

static inline int soc_is_ar7242(void)
{
	return gd->arch.soc == ATH79_SOC_AR7242;
}

static inline int soc_is_ar913x(void)
{
	return gd->arch.soc == ATH79_SOC_AR9130 ||
		gd->arch.soc == ATH79_SOC_AR9132;
}

static inline int soc_is_ar933x(void)
{
	return gd->arch.soc == ATH79_SOC_AR9330 ||
		gd->arch.soc == ATH79_SOC_AR9331;
}

static inline int soc_is_ar9341(void)
{
	return gd->arch.soc == ATH79_SOC_AR9341;
}

static inline int soc_is_ar9342(void)
{
	return gd->arch.soc == ATH79_SOC_AR9342;
}

static inline int soc_is_ar9344(void)
{
	return gd->arch.soc == ATH79_SOC_AR9344;
}

static inline int soc_is_ar934x(void)
{
	return soc_is_ar9341() ||
		soc_is_ar9342() ||
		soc_is_ar9344();
}

static inline int soc_is_qca9533(void)
{
	return gd->arch.soc == ATH79_SOC_QCA9533;
}

static inline int soc_is_qca953x(void)
{
	return soc_is_qca9533();
}

static inline int soc_is_qca9556(void)
{
	return gd->arch.soc == ATH79_SOC_QCA9556;
}

static inline int soc_is_qca9558(void)
{
	return gd->arch.soc == ATH79_SOC_QCA9558;
}

static inline int soc_is_qca955x(void)
{
	return soc_is_qca9556() || soc_is_qca9558();
}

static inline int soc_is_tp9343(void)
{
	return gd->arch.soc == ATH79_SOC_TP9343;
}

static inline int soc_is_qca9561(void)
{
	return gd->arch.soc == ATH79_SOC_QCA9561;
}

static inline int soc_is_qca956x(void)
{
	return soc_is_tp9343() || soc_is_qca9561();
}

u32 ath79_get_bootstrap(void);
int ath79_eth_reset(void);
int ath79_usb_reset(void);

void ar934x_pll_init(const u16 cpu_mhz, const u16 ddr_mhz, const u16 ahb_mhz);
void ar934x_ddr_init(const u16 cpu_mhz, const u16 ddr_mhz, const u16 ahb_mhz);

#endif /* __ASM_MACH_ATH79_H */
