blob: 6eb91997721a22f15e7e549bac77ad6e671849d4 [file] [log] [blame]
/* linux/driver/mailbox/mailbox-exynos.h
*
* Copyright (c) 2014-2015 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* Mailbox-exynos - Mailbox register definitions
*
* 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 __ASM_DRIVER_REGS_MAILBOX_H
#define __ASM_DRIVER_REGS_MAILBOX_H __FILE__
#include <linux/mailbox_client.h>
#include <linux/mailbox_controller.h>
#define MAX_LINKS 1
#define POLL_PERIOD (100)
#define G3D_STATUS (4)
#define INT_STATUS (5)
#define MAILBOX_REG_CNT (4)
#define CM3_COUNT_MAX (10000)
#define EXYNOS_PMU_G3D_STATUS (0x4064)
#define G3D_STATUS_MASK (0xF)
#define EXYNOS_MAILBOX_TX_CON (0x00000)
#define EXYNOS_MAILBOX_TX_ADDR (0x00004)
#define EXYNOS_MAILBOX_TX_DATA (0x00008)
#define EXYNOS_MAILBOX_TX_INT (0x0000C)
#define EXYNOS_MAILBOX_TX(i) ((i) * (0x4))
#define EXYNOS_MAILBOX_MRX_SEM (0x00010)
#define EXYNOS_MAILBOX_RX_CON (0x00040)
#define EXYNOS_MAILBOX_RX_ADDR (0x00044)
#define EXYNOS_MAILBOX_RX_DATA (0x00048)
#define EXYNOS_MAILBOX_RX_INT (0x0004C)
#define EXYNOS_MAILBOX_RX(i) (0x0040 + ((i) * 0x4))
#define RX_INT_CLEAR (0xFF << 0)
#define MRX_SEM_ENABLE (0x1 << 0)
#define NOTI_INT_CLEAR (0x1 << 0)
#define CM3_STATUS1_SHIFT (31)
#define CM3_STATUS1_MASK (0x1)
#define CM3_INTERRPUT_SHIFT (0x1)
#define CM3_POLLING_SHIFT (0x1)
#define SRAM_UNSTABLE (0x0)
#define SRAM_STABLE (0x1)
/* Exynos8890 EVT1 Register */
#define EXYNOS_MAILBOX_TX_MSG0 (0x00000)
#define EXYNOS_MAILBOX_TX_MSG1 (0x00004)
#define EXYNOS_MAILBOX_TX_MSG2 (0x00008)
#define EXYNOS_MAILBOX_TX_MSG3 (0x0000C)
#define EXYNOS_MAILBOX_TX_MSG4 (0x00010)
#define EXYNOS_MAILBOX_TX_MSG5 (0x00014)
#define EXYNOS_MAILBOX_TX_MSG6 (0x00018)
#define EXYNOS_MAILBOX_TX_MSG7 (0x0001C)
#define EXYNOS_MAILBOX_TX_MSG(i) ((i) * (0x4))
#define EXYNOS_MAILBOX_RX_MSG0 (0x00080)
#define EXYNOS_MAILBOX_RX_MSG1 (0x00084)
#define EXYNOS_MAILBOX_RX_MSG2 (0x00088)
#define EXYNOS_MAILBOX_RX_MSG3 (0x0008C)
#define EXYNOS_MAILBOX_RX_MSG4 (0x00090)
#define EXYNOS_MAILBOX_RX_MSG5 (0x00094)
#define EXYNOS_MAILBOX_RX_MSG6 (0x00098)
#define EXYNOS_MAILBOX_RX_MSG7 (0x0009C)
#define EXYNOS_MAILBOX_RX_MSG(i) (0x00080 + ((i) * 0x4))
#define EXYNOS_MAILBOX_TX_IRQ0 (0x00040)
#define EXYNOS_MAILBOX_TX_IRQ1 (0x00044)
#define EXYNOS_MAILBOX_TX_IRQ2 (0x00048)
#define EXYNOS_MAILBOX_TX_IRQ3 (0x0004C)
#define EXYNOS_MAILBOX_TX_IRQ4 (0x00050)
#define EXYNOS_MAILBOX_TX_IRQ5 (0x00054)
#define EXYNOS_MAILBOX_TX_IRQ6 (0x00058)
#define EXYNOS_MAILBOX_TX_IRQ7 (0x0005C)
#define EXYNOS_MAILBOX_RX_IRQ0 (0x000C0)
#define EXYNOS_MAILBOX_RX_IRQ1 (0x000C4)
#define EXYNOS_MAILBOX_RX_IRQ2 (0x000C8)
#define EXYNOS_MAILBOX_RX_IRQ3 (0x000CC)
#define EXYNOS_MAILBOX_RX_IRQ4 (0x000D0)
#define EXYNOS_MAILBOX_RX_IRQ5 (0x000D4)
#define EXYNOS_MAILBOX_RX_IRQ6 (0x000D8)
#define EXYNOS_MAILBOX_RX_IRQ7 (0x000DC)
/* Debug */
#define ATL_VOL_SHIFT (24)
#define APO_VOL_SHIFT (16)
#define G3D_VOL_SHIFT (8)
#define MIF_VOL_SHIFT (0)
#define VOL_MASK (0xFF)
#define PMIC_STEP (6250)
#define MIN_VOL (300000)
extern int data_history(void);
extern void samsung_mbox_enable_irq(void);
extern void samsung_mbox_disable_irq(void);
struct samsung_mlink {
const char *name;
struct mbox_chan chan;
struct samsung_mbox *smc;
int irq;
int exception_irq;
void *data;
};
struct samsung_mbox {
struct device *dev;
void __iomem *mbox_base;
struct mbox_controller mbox_con;
struct mutex lock;
struct samsung_mlink samsung_link[MAX_LINKS];
};
void exynos_mbox_client_init(struct device *dev);
#endif /* __ASM_DRIVER_REGS_CLOCK_H */