Am 26. August 2020 23:13:01 MESZ schrieb Sean Anderson <sean...@gmail.com>: >On 8/26/20 4:29 PM, Heinrich Schuchardt wrote: >> readl() and writel() expect void *. Do not pass an integer value. >> >> Remove unused include asm/arch/timer.h. >> >> Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de> >> Reviewed-by: Bin Meng <bin.m...@windriver.com> >> --- >> v2: >> correct typo in commit message >> --- >> drivers/timer/dw-apb-timer.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/timer/dw-apb-timer.c >b/drivers/timer/dw-apb-timer.c >> index 35271b20c8..c8be4417fd 100644 >> --- a/drivers/timer/dw-apb-timer.c >> +++ b/drivers/timer/dw-apb-timer.c >> @@ -14,7 +14,6 @@ >> #include <dm/device_compat.h> >> >> #include <asm/io.h> >> -#include <asm/arch/timer.h> >> >> #define DW_APB_LOAD_VAL 0x0 >> #define DW_APB_CURR_VAL 0x4 >> @@ -34,7 +33,7 @@ static int dw_apb_timer_get_count(struct udevice >*dev, u64 *count) >> * requires the count to be incrementing. Invert the >> * result. >> */ >> - *count = timer_conv_64(~readl(priv->regs + DW_APB_CURR_VAL)); >> + *count = timer_conv_64(~readl((void *)(priv->regs + >DW_APB_CURR_VAL))); > >How about changing the type of priv.regs to void * and using >dev_read_addr_ptr instead of dev_read_addr in probe?
Adding to void* results undefined behavior in C. I know gcc currently supports it, but that does not make it recommendable. If you wanted to change the type, you could use u8*. A cleaner way would be to change regs to a pointer to a structure with all registers and to eliminate the offsets. @Marek Which way do you want it? Best regards Heinrich > >> >> return 0; >> } >> @@ -61,8 +60,8 @@ static int dw_apb_timer_probe(struct udevice *dev) >> clk_free(&clk); >> >> /* init timer */ >> - writel(0xffffffff, priv->regs + DW_APB_LOAD_VAL); >> - writel(0xffffffff, priv->regs + DW_APB_CURR_VAL); >> + writel(0xffffffff, (void *)(priv->regs + DW_APB_LOAD_VAL)); >> + writel(0xffffffff, (void *)(priv->regs + DW_APB_CURR_VAL)); >> setbits_le32(priv->regs + DW_APB_CTRL, 0x3); >> >> return 0; >> -- >> 2.27.0 >>