diff options
| author | Mister Oyster <oysterized@gmail.com> | 2017-01-02 12:44:35 +0100 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-01-02 12:44:35 +0100 |
| commit | a184d985bf43d3fe6eeba971bc6b32f79ea38b37 (patch) | |
| tree | 6f6e56e090777cc149bc1ab39e5987cc2b03e867 /kernel-headers/sync_write.h | |
initial releasecm-13.0
Diffstat (limited to 'kernel-headers/sync_write.h')
| -rw-r--r-- | kernel-headers/sync_write.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/kernel-headers/sync_write.h b/kernel-headers/sync_write.h new file mode 100644 index 0000000..e4c6e85 --- /dev/null +++ b/kernel-headers/sync_write.h @@ -0,0 +1,80 @@ +#ifndef __MT65XX_SYNC_WRITE_H__ +#define __MT65XX_SYNC_WRITE_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) + +#if defined(__KERNEL__) + +#include <linux/io.h> +#include <asm/cacheflush.h> +#include <asm/system.h> + +/* + * Define macros. + */ + +#define mt65xx_reg_sync_writel(v, a) \ + do { \ + writel((v), (a)); \ + dsb(); \ + } while (0) + +#define mt65xx_reg_sync_writew(v, a) \ + do { \ + writew((v), (a)); \ + dsb(); \ + } while (0) + +#define mt65xx_reg_sync_writeb(v, a) \ + do { \ + writeb((v), (a)); \ + dsb(); \ + } while (0) + +#else /* __KERNEL__ */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> + +#define dsb() \ + do { \ + __asm__ __volatile__ ("dsb sy" : : : "memory"); \ + } while (0) + +#define outer_sync() \ + do { \ + int fd; \ + char buf[] = "1"; \ + fd = open("/sys/bus/platform/drivers/outercache/outer_sync", O_WRONLY); \ + if (fd != -1) { \ + write(fd, buf, strlen(buf)); \ + close(fd); \ + } \ + } while (0) + +#define mt65xx_reg_sync_writel(v, a) \ + do { \ + *(volatile unsigned int *)(a) = (v); \ + dsb(); \ + } while (0) + +#define mt65xx_reg_sync_writew(v, a) \ + do { \ + *(volatile unsigned short *)(a) = (v); \ + dsb(); \ + } while (0) + +#define mt65xx_reg_sync_writeb(v, a) \ + do { \ + *(volatile unsigned char *)(a) = (v); \ + dsb(); \ + } while (0) + +#endif /* __KERNEL__ */ + +#endif /* !__MT65XX_SYNC_WRITE_H__ */ |
