/* arch/arm/mach-exynos/cal_bts.h
 *
 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
 *              http://www.samsung.com/
 *
 * EXYNOS - BTS CAL code.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __BTSCAL_H__
#define __BTSCAL_H__

#if defined(CONFIG_EXYNOS7420_BTS)
#include <linux/io.h>

#define Outp32(addr, data)      (__raw_writel(data, addr))
#define Inp32(addr)             (__raw_readl(addr))
typedef void __iomem *addr_u32;

#else
typedef unsigned long u32;
typedef unsigned long addr_u32;
#define Outp32(addr, data) (*(volatile unsigned int *)(addr) = (data))
#define Inp32(addr) (*(volatile unsigned int *)(addr))

#endif

/* for BTS V2.1 Register */
#define BTS_RCON			0x100
#define BTS_RMODE			0x104
#define BTS_WCON			0x180
#define BTS_WMODE			0x184
#define BTS_PRIORITY			0x200
#define BTS_TOKENMAX			0x204
#define BTS_BWUPBOUND			0x20C
#define BTS_BWLOBOUND			0x210
#define BTS_INITTKN			0x214
#define BTS_RSTCLK			0x218
#define BTS_RSTTKN			0x21C
#define BTS_DEMWIN			0x220
#define BTS_DEMTKN			0x224
#define BTS_DEFWIN			0x228
#define BTS_DEFTKN			0x22C
#define BTS_PRMWIN			0x230
#define BTS_PRMTKN			0x234
#define BTS_MOUPBOUND			0x240
#define BTS_MOLOBOUND			0x244
#define BTS_FLEXIBLE			0x280
#define BTS_POLARITY			0x284
#define BTS_FBMGRP0ADRS			0x290
#define BTS_FBMGRP0ADRE			0x294
#define BTS_FBMGRP1ADRS			0x298
#define BTS_FBMGRP1ADRE			0x29C
#define BTS_FBMGRP2ADRS			0x2A0
#define BTS_FBMGRP2ADRE			0x2A4
#define BTS_FBMGRP3ADRS			0x2A8
#define BTS_FBMGRP3ADRE			0x2AC
#define BTS_FBMGRP4ADRS			0x2B0
#define BTS_FBMGRP4ADRE			0x2B4
#define BTS_EMERGENTRID			0x2C0
#define BTS_EMERGENTWID			0x3C0
#define BTS_RISINGTH			0x2C4
#define BTS_FALLINGTH			0x2C8
#define BTS_FALLINGMO			0x2CC
#define BTS_MOCOUNTER			0x2F0
#define BTS_STATUS				0x2F4
#define BTS_BWMONLOW			0x2F8
#define BTS_BWMONUP				0x2FC

#define WOFFSET				0x100

/* for TREX_BTS Register */
#define TBTS_CON				0x000
#define TBTS_TKNUPBOUND			0x010
#define TBTS_TKNLOBOUND			0x014
#define TBTS_LOADUP				0x020
#define TBTS_LOADDOWN			0x024
#define TBTS_TKNINC0			0x040
#define TBTS_TKNINC1			0x044
#define TBTS_TKNINC2			0x048
#define TBTS_TKNINC3			0x04C
#define TBTS_TKNINC4			0x050
#define TBTS_TKNINC5			0x054
#define TBTS_TKNINC6			0x058
#define TBTS_TKNINC7			0x05C
#define TBTS_DEMTH				0x070
#define TBTS_PRMTH				0x074
#define TBTS_DEMQOS				0x080
#define TBTS_DEFQOS				0x084
#define TBTS_PRMQOS				0x088
#define TBTS_TIMEOUT			0x090
#define TBTS_QURGUPTH			0x0D0
#define TBTS_QURGDOWNTH			0x0D4
#define TBTS_SELIDMASK			0x0E0
#define TBTS_SELIDVAL			0x0E4
#define TBTS_RCON				0x100
#define TBTS_RTKNINIT			0x110
#define TBTS_RTKNDEC			0x120
#define TBTS_WCON				0x200
#define TBTS_WTKNINIT			0x210
#define TBTS_WTKNDEC			0x220
#define TBTS_EMERGENTID			0x2014
#define TBTS_MASK				0x2010

#define MAX_MO_LIMIT			0x80

void bts_setqos(addr_u32 base, unsigned int priority);
void bts_setqos_bw(addr_u32 base, unsigned int priority,
			unsigned int window, unsigned int token);
void bts_setqos_mo(addr_u32 base, unsigned int priority,
			unsigned int rmo, unsigned int wmo);
void bts_setqos_fbmbw(addr_u32 base, unsigned int priority, unsigned int window,
			unsigned int token, unsigned int fbm);
void bts_disable(addr_u32 base);
void bts_settrexqos(addr_u32 base, unsigned int priority);
void bts_settrexqos_mo(addr_u32 base, unsigned int priority, unsigned int mo);
void bts_settrexqos_bw(addr_u32 base, unsigned int priority, unsigned int decval);
void bts_settrexqos_fbmbw(addr_u32 base, unsigned int priority);
void bts_trexdisable(addr_u32 base);
void bts_setnsp(addr_u32 base, unsigned int nsp);

#endif
