blob: 792556942d5bd4c44c266db0e42dad8c40481156 [file]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2023 MediaTek Inc.
*/
#ifndef _MT_SYNC_WRITE_H
#define _MT_SYNC_WRITE_H
#if defined(__KERNEL__)
#include <linux/io.h>
#include <asm/cacheflush.h>
/*
* Define macros.
*/
#define mt_reg_sync_writel(v, a) \
do { \
__raw_writel((v), (void __force __iomem *)((a))); \
mb(); /* ensure reg will be updated */ \
} while (0)
#define mt_reg_sync_writew(v, a) \
do { \
__raw_writew((v), (void __force __iomem *)((a))); \
mb(); /* ensure reg will be updated */ \
} while (0)
#define mt_reg_sync_writeb(v, a) \
do { \
__raw_writeb((v), (void __force __iomem *)((a))); \
mb(); /* ensure reg will be updated */ \
} while (0)
#if (CONFIG_64BIT == 1)
#define mt_reg_sync_writeq(v, a) \
do { \
__raw_writeq((v), (void __force __iomem *)((a))); \
mb(); /* ensure reg will be updated */ \
} while (0)
#endif
#else /* __KERNEL__ */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define mt_reg_sync_writel(v, a) mt65xx_reg_sync_writel(v, a)
#define mt_reg_sync_writew(v, a) mt65xx_reg_sync_writew(v, a)
#define mt_reg_sync_writeb(v, a) mt65xx_reg_sync_writeb(v, a)
/* ensure data will be updated */
#define mb() \
(__asm__ __volatile__ ("dsb" : : : "memory"))
#define mt65xx_reg_sync_writel(v, a) \
do { \
*(unsigned int *)(a) = (v); \
mb(); /*ensure reg will be updated*/ \
} while (0)
#define mt65xx_reg_sync_writew(v, a) \
do { \
*(unsigned short *)(a) = (v); \
mb(); /*ensure reg will be updated*/ \
} while (0)
#define mt65xx_reg_sync_writeb(v, a) \
do { \
*(unsigned char *)(a) = (v); \
mb(); /*ensure reg will be updated*/ \
} while (0)
#endif /* __KERNEL__ */
#endif /* !_MT_SYNC_WRITE_H */