1*4882a593SmuzhiyunFrom 5c0a443ba336f10a8db6a99c769aa84ad37ed4d2 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Vadim Kochan <vadim4j@gmail.com> 3*4882a593SmuzhiyunDate: Wed, 20 Feb 2019 02:48:43 +0200 4*4882a593SmuzhiyunSubject: [PATCH] meminfo: Access to io memory via pointers 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThe main reason for this is to be able compile with musl library, 7*4882a593Smuzhiyunbecause there is no support of inx/outx functions for ARM platform. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSigned-off-by: Vadim Kochan <vadim4j@gmail.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun meminfo.c | 11 ++++++----- 12*4882a593Smuzhiyun 1 file changed, 6 insertions(+), 5 deletions(-) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyundiff --git a/meminfo.c b/meminfo.c 15*4882a593Smuzhiyunindex 0b0ff23..7d9f10f 100644 16*4882a593Smuzhiyun--- a/meminfo.c 17*4882a593Smuzhiyun+++ b/meminfo.c 18*4882a593Smuzhiyun@@ -22,7 +22,6 @@ 19*4882a593Smuzhiyun #include <sys/mman.h> 20*4882a593Smuzhiyun #include <stdint.h> 21*4882a593Smuzhiyun #include <errno.h> 22*4882a593Smuzhiyun-#include <sys/io.h> 23*4882a593Smuzhiyun #include <stdbool.h> 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #include "common.h" 26*4882a593Smuzhiyun@@ -74,24 +73,26 @@ static enum sunxi_soc_version soc_version; 27*4882a593Smuzhiyun unsigned int 28*4882a593Smuzhiyun sunxi_io_read(void *base, int offset) 29*4882a593Smuzhiyun { 30*4882a593Smuzhiyun- return inl((unsigned long) (base + offset)); 31*4882a593Smuzhiyun+ unsigned long port = (unsigned long) (base + offset); 32*4882a593Smuzhiyun+ return *((volatile unsigned long *) port); 33*4882a593Smuzhiyun } 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun void 36*4882a593Smuzhiyun sunxi_io_write(void *base, int offset, unsigned int value) 37*4882a593Smuzhiyun { 38*4882a593Smuzhiyun- outl(value, (unsigned long) (base + offset)); 39*4882a593Smuzhiyun+ unsigned long port = (unsigned long) (base + offset); 40*4882a593Smuzhiyun+ *((volatile unsigned long *) port) = value; 41*4882a593Smuzhiyun } 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun void 44*4882a593Smuzhiyun sunxi_io_mask(void *base, int offset, unsigned int value, unsigned int mask) 45*4882a593Smuzhiyun { 46*4882a593Smuzhiyun- unsigned int tmp = inl((unsigned long) (base + offset)); 47*4882a593Smuzhiyun+ unsigned int tmp = sunxi_io_read(base, offset); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun tmp &= ~mask; 50*4882a593Smuzhiyun tmp |= value & mask; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun- outl(tmp, (unsigned long) (base + offset)); 53*4882a593Smuzhiyun+ sunxi_io_write(base, offset, tmp); 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun-- 58*4882a593Smuzhiyun2.14.1 59*4882a593Smuzhiyun 60