* the code. At least it does so with a recent GCC (4.6.3).
  */
 static __always_inline
-void arch_timer_reg_write_cp15(int access, enum arch_timer_reg reg, u32 val)
+void arch_timer_reg_write_cp15(int access, enum arch_timer_reg reg, u64 val)
 {
        if (access == ARCH_TIMER_PHYS_ACCESS) {
                switch (reg) {
                case ARCH_TIMER_REG_CTRL:
-                       asm volatile("mcr p15, 0, %0, c14, c2, 1" : : "r" (val));
+                       asm volatile("mcr p15, 0, %0, c14, c2, 1" : : "r" ((u32)val));
                        break;
                case ARCH_TIMER_REG_TVAL:
-                       asm volatile("mcr p15, 0, %0, c14, c2, 0" : : "r" (val));
+                       asm volatile("mcr p15, 0, %0, c14, c2, 0" : : "r" ((u32)val));
                        break;
                default:
                        BUILD_BUG();
        } else if (access == ARCH_TIMER_VIRT_ACCESS) {
                switch (reg) {
                case ARCH_TIMER_REG_CTRL:
-                       asm volatile("mcr p15, 0, %0, c14, c3, 1" : : "r" (val));
+                       asm volatile("mcr p15, 0, %0, c14, c3, 1" : : "r" ((u32)val));
                        break;
                case ARCH_TIMER_REG_TVAL:
-                       asm volatile("mcr p15, 0, %0, c14, c3, 0" : : "r" (val));
+                       asm volatile("mcr p15, 0, %0, c14, c3, 0" : : "r" ((u32)val));
                        break;
                default:
                        BUILD_BUG();
 
  */
 
 static __always_inline
-void arch_timer_reg_write(int access, enum arch_timer_reg reg, u32 val,
+void arch_timer_reg_write(int access, enum arch_timer_reg reg, u64 val,
                          struct clock_event_device *clk)
 {
        if (access == ARCH_TIMER_MEM_PHYS_ACCESS) {
                struct arch_timer *timer = to_arch_timer(clk);
                switch (reg) {
                case ARCH_TIMER_REG_CTRL:
-                       writel_relaxed(val, timer->base + CNTP_CTL);
+                       writel_relaxed((u32)val, timer->base + CNTP_CTL);
                        break;
                case ARCH_TIMER_REG_TVAL:
-                       writel_relaxed(val, timer->base + CNTP_TVAL);
+                       writel_relaxed((u32)val, timer->base + CNTP_TVAL);
                        break;
                default:
                        BUILD_BUG();
                struct arch_timer *timer = to_arch_timer(clk);
                switch (reg) {
                case ARCH_TIMER_REG_CTRL:
-                       writel_relaxed(val, timer->base + CNTV_CTL);
+                       writel_relaxed((u32)val, timer->base + CNTV_CTL);
                        break;
                case ARCH_TIMER_REG_TVAL:
-                       writel_relaxed(val, timer->base + CNTV_TVAL);
+                       writel_relaxed((u32)val, timer->base + CNTV_TVAL);
                        break;
                default:
                        BUILD_BUG();