Hi Baolin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on tip/timers/core]
[also build test WARNING on v4.14 next-20171124]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Baolin-Wang/dt-bindings-clocksource-Add-Spreadtrum-SC9860-timer/20171125-090749
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   In file included from arch/x86/include/asm/realmode.h:14:0,
                    from arch/x86/include/asm/acpi.h:33,
                    from arch/x86/include/asm/fixmap.h:19,
                    from arch/x86/include/asm/apic.h:10,
                    from arch/x86/include/asm/smp.h:12,
                    from include/linux/smp.h:63,
                    from include/linux/topology.h:33,
                    from include/linux/gfp.h:8,
                    from include/linux/idr.h:16,
                    from include/linux/kernfs.h:14,
                    from include/linux/sysfs.h:15,
                    from include/linux/kobject.h:21,
                    from include/linux/of.h:21,
                    from include/linux/clocksource.h:18,
                    from drivers/clocksource/sprd-timer.c:7:
   drivers/clocksource/sprd-timer.c: In function 'sprd_timer_update_counter':
>> drivers/clocksource/sprd-timer.c:85:24: warning: right shift count >= width 
>> of type [-Wshift-count-overflow]
     writel_relaxed(cycles >> TIMER_VALUE_HI_SHIFT,
                           ^
   arch/x86/include/asm/io.h:87:39: note: in definition of macro 
'writel_relaxed'
    #define writel_relaxed(v, a) __writel(v, a)
                                          ^

vim +85 drivers/clocksource/sprd-timer.c

   > 7  #include <linux/clocksource.h>
     8  #include <linux/clockchips.h>
     9  #include <linux/init.h>
    10  #include <linux/interrupt.h>
    11  #include <linux/sched_clock.h>
    12  #include <linux/slab.h>
    13  #include <linux/of.h>
    14  #include <linux/of_address.h>
    15  #include <linux/of_irq.h>
    16  
    17  #define TIMER_NAME              "sprd_timer"
    18  
    19  #define TIMER_LOAD_LO           0x0
    20  #define TIMER_LOAD_HI           0x4
    21  #define TIMER_VALUE_LO          0x8
    22  #define TIMER_VALUE_HI          0xc
    23  
    24  #define TIMER_CTL               0x10
    25  #define TIMER_CTL_PERIOD_MODE   BIT(0)
    26  #define TIMER_CTL_ENABLE        BIT(1)
    27  #define TIMER_CTL_64BIT_WIDTH   BIT(16)
    28  
    29  #define TIMER_INT               0x14
    30  #define TIMER_INT_EN            BIT(0)
    31  #define TIMER_INT_RAW_STS       BIT(1)
    32  #define TIMER_INT_MASK_STS      BIT(2)
    33  #define TIMER_INT_CLR           BIT(3)
    34  
    35  #define TIMER_VALUE_SHDW_LO     0x18
    36  #define TIMER_VALUE_SHDW_HI     0x1c
    37  
    38  #define TIMER_VALUE_LO_MASK     GENMASK(31, 0)
    39  #define TIMER_VALUE_HI_SHIFT    32
    40  
    41  struct sprd_timer_device {
    42          struct clock_event_device ce;
    43          void __iomem *base;
    44          u32 freq;
    45          int irq;
    46  };
    47  
    48  static inline struct sprd_timer_device *
    49  to_sprd_timer(struct clock_event_device *c)
    50  {
    51          return container_of(c, struct sprd_timer_device, ce);
    52  }
    53  
    54  static void sprd_timer_enable(struct sprd_timer_device *timer, u32 flag)
    55  {
    56          u32 val = readl_relaxed(timer->base + TIMER_CTL);
    57  
    58          val |= TIMER_CTL_ENABLE;
    59          if (flag & TIMER_CTL_64BIT_WIDTH)
    60                  val |= TIMER_CTL_64BIT_WIDTH;
    61          else
    62                  val &= ~TIMER_CTL_64BIT_WIDTH;
    63  
    64          if (flag & TIMER_CTL_PERIOD_MODE)
    65                  val |= TIMER_CTL_PERIOD_MODE;
    66          else
    67                  val &= ~TIMER_CTL_PERIOD_MODE;
    68  
    69          writel_relaxed(val, timer->base + TIMER_CTL);
    70  }
    71  
    72  static void sprd_timer_disable(struct sprd_timer_device *timer)
    73  {
    74          u32 val = readl_relaxed(timer->base + TIMER_CTL);
    75  
    76          val &= ~TIMER_CTL_ENABLE;
    77          writel_relaxed(val, timer->base + TIMER_CTL);
    78  }
    79  
    80  static void sprd_timer_update_counter(struct sprd_timer_device *timer,
    81                                        unsigned long cycles)
    82  {
    83          writel_relaxed(cycles & TIMER_VALUE_LO_MASK,
    84                         timer->base + TIMER_LOAD_LO);
  > 85          writel_relaxed(cycles >> TIMER_VALUE_HI_SHIFT,
    86                         timer->base + TIMER_LOAD_HI);
    87  }
    88  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to