Hi Luis, [auto build test WARNING on v4.3-rc5 -- if it's inappropriate base, please suggest rules for selecting the more suitable base] url: https://github.com/0day-ci/linux/commits/Luis-de-Bethencourt/watchdog-Compile-possible-drivers-with-COMPILE_TEST/20151013-044814 reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) >> drivers/watchdog/sirfsoc_wdt.c:48:18: sparse: incorrect type in assignment (different address spaces) drivers/watchdog/sirfsoc_wdt.c:48:18: expected void [noderef] <asn:2>*wdt_base drivers/watchdog/sirfsoc_wdt.c:48:18: got void * drivers/watchdog/sirfsoc_wdt.c:64:18: sparse: incorrect type in assignment (different address spaces) drivers/watchdog/sirfsoc_wdt.c:64:18: expected void [noderef] <asn:2>*wdt_base drivers/watchdog/sirfsoc_wdt.c:64:18: got void * >> drivers/watchdog/sirfsoc_wdt.c:82:54: sparse: incorrect type in initializer (different address spaces) drivers/watchdog/sirfsoc_wdt.c:82:54: expected void [noderef] <asn:2>*wdt_base drivers/watchdog/sirfsoc_wdt.c:82:54: got void * drivers/watchdog/sirfsoc_wdt.c:99:54: sparse: incorrect type in initializer (different address spaces) drivers/watchdog/sirfsoc_wdt.c:99:54: expected void [noderef] <asn:2>*wdt_base drivers/watchdog/sirfsoc_wdt.c:99:54: got void * >> drivers/watchdog/sirfsoc_wdt.c:153:44: sparse: incorrect type in argument 2 (different address spaces) drivers/watchdog/sirfsoc_wdt.c:153:44: expected void *data drivers/watchdog/sirfsoc_wdt.c:153:44: got void [noderef] <asn:2>*[assigned] base vim +48 drivers/watchdog/sirfsoc_wdt.c f0fcbdbf Xianglong Du 2013-10-02 42 static unsigned int sirfsoc_wdt_gettimeleft(struct watchdog_device *wdd) f0fcbdbf Xianglong Du 2013-10-02 43 { f0fcbdbf Xianglong Du 2013-10-02 44 u32 counter, match; f0fcbdbf Xianglong Du 2013-10-02 45 void __iomem *wdt_base; f0fcbdbf Xianglong Du 2013-10-02 46 int time_left; f0fcbdbf Xianglong Du 2013-10-02 47 f0fcbdbf Xianglong Du 2013-10-02 @48 wdt_base = watchdog_get_drvdata(wdd); f0fcbdbf Xianglong Du 2013-10-02 49 counter = readl(wdt_base + SIRFSOC_TIMER_COUNTER_LO); f0fcbdbf Xianglong Du 2013-10-02 50 match = readl(wdt_base + f0fcbdbf Xianglong Du 2013-10-02 51 SIRFSOC_TIMER_MATCH_0 + (SIRFSOC_TIMER_WDT_INDEX << 2)); f0fcbdbf Xianglong Du 2013-10-02 52 f0fcbdbf Xianglong Du 2013-10-02 53 time_left = match - counter; f0fcbdbf Xianglong Du 2013-10-02 54 b0df38dd Uwe Kleine-König 2013-11-11 55 return time_left / CLOCK_FREQ; f0fcbdbf Xianglong Du 2013-10-02 56 } f0fcbdbf Xianglong Du 2013-10-02 57 f0fcbdbf Xianglong Du 2013-10-02 58 static int sirfsoc_wdt_updatetimeout(struct watchdog_device *wdd) f0fcbdbf Xianglong Du 2013-10-02 59 { f0fcbdbf Xianglong Du 2013-10-02 60 u32 counter, timeout_ticks; f0fcbdbf Xianglong Du 2013-10-02 61 void __iomem *wdt_base; f0fcbdbf Xianglong Du 2013-10-02 62 b0df38dd Uwe Kleine-König 2013-11-11 63 timeout_ticks = wdd->timeout * CLOCK_FREQ; f0fcbdbf Xianglong Du 2013-10-02 @64 wdt_base = watchdog_get_drvdata(wdd); f0fcbdbf Xianglong Du 2013-10-02 65 f0fcbdbf Xianglong Du 2013-10-02 66 /* Enable the latch before reading the LATCH_LO register */ f0fcbdbf Xianglong Du 2013-10-02 67 writel(1, wdt_base + SIRFSOC_TIMER_LATCH); f0fcbdbf Xianglong Du 2013-10-02 68 f0fcbdbf Xianglong Du 2013-10-02 69 /* Set the TO value */ f0fcbdbf Xianglong Du 2013-10-02 70 counter = readl(wdt_base + SIRFSOC_TIMER_LATCHED_LO); f0fcbdbf Xianglong Du 2013-10-02 71 f0fcbdbf Xianglong Du 2013-10-02 72 counter += timeout_ticks; f0fcbdbf Xianglong Du 2013-10-02 73 f0fcbdbf Xianglong Du 2013-10-02 74 writel(counter, wdt_base + f0fcbdbf Xianglong Du 2013-10-02 75 SIRFSOC_TIMER_MATCH_0 + (SIRFSOC_TIMER_WDT_INDEX << 2)); f0fcbdbf Xianglong Du 2013-10-02 76 f0fcbdbf Xianglong Du 2013-10-02 77 return 0; f0fcbdbf Xianglong Du 2013-10-02 78 } f0fcbdbf Xianglong Du 2013-10-02 79 f0fcbdbf Xianglong Du 2013-10-02 80 static int sirfsoc_wdt_enable(struct watchdog_device *wdd) f0fcbdbf Xianglong Du 2013-10-02 81 { f0fcbdbf Xianglong Du 2013-10-02 @82 void __iomem *wdt_base = watchdog_get_drvdata(wdd); f0fcbdbf Xianglong Du 2013-10-02 83 sirfsoc_wdt_updatetimeout(wdd); f0fcbdbf Xianglong Du 2013-10-02 84 f0fcbdbf Xianglong Du 2013-10-02 85 /* f0fcbdbf Xianglong Du 2013-10-02 86 * NOTE: If interrupt is not enabled f0fcbdbf Xianglong Du 2013-10-02 87 * then WD-Reset doesn't get generated at all. f0fcbdbf Xianglong Du 2013-10-02 88 */ f0fcbdbf Xianglong Du 2013-10-02 89 writel(readl(wdt_base + SIRFSOC_TIMER_INT_EN) f0fcbdbf Xianglong Du 2013-10-02 90 | (1 << SIRFSOC_TIMER_WDT_INDEX), f0fcbdbf Xianglong Du 2013-10-02 91 wdt_base + SIRFSOC_TIMER_INT_EN); f0fcbdbf Xianglong Du 2013-10-02 92 writel(1, wdt_base + SIRFSOC_TIMER_WATCHDOG_EN); f0fcbdbf Xianglong Du 2013-10-02 93 f0fcbdbf Xianglong Du 2013-10-02 94 return 0; f0fcbdbf Xianglong Du 2013-10-02 95 } f0fcbdbf Xianglong Du 2013-10-02 96 f0fcbdbf Xianglong Du 2013-10-02 97 static int sirfsoc_wdt_disable(struct watchdog_device *wdd) f0fcbdbf Xianglong Du 2013-10-02 98 { f0fcbdbf Xianglong Du 2013-10-02 99 void __iomem *wdt_base = watchdog_get_drvdata(wdd); f0fcbdbf Xianglong Du 2013-10-02 100 f0fcbdbf Xianglong Du 2013-10-02 101 writel(0, wdt_base + SIRFSOC_TIMER_WATCHDOG_EN); f0fcbdbf Xianglong Du 2013-10-02 102 writel(readl(wdt_base + SIRFSOC_TIMER_INT_EN) f0fcbdbf Xianglong Du 2013-10-02 103 & (~(1 << SIRFSOC_TIMER_WDT_INDEX)), f0fcbdbf Xianglong Du 2013-10-02 104 wdt_base + SIRFSOC_TIMER_INT_EN); f0fcbdbf Xianglong Du 2013-10-02 105 f0fcbdbf Xianglong Du 2013-10-02 106 return 0; f0fcbdbf Xianglong Du 2013-10-02 107 } f0fcbdbf Xianglong Du 2013-10-02 108 f0fcbdbf Xianglong Du 2013-10-02 109 static int sirfsoc_wdt_settimeout(struct watchdog_device *wdd, unsigned int to) f0fcbdbf Xianglong Du 2013-10-02 110 { f0fcbdbf Xianglong Du 2013-10-02 111 wdd->timeout = to; f0fcbdbf Xianglong Du 2013-10-02 112 sirfsoc_wdt_updatetimeout(wdd); f0fcbdbf Xianglong Du 2013-10-02 113 f0fcbdbf Xianglong Du 2013-10-02 114 return 0; f0fcbdbf Xianglong Du 2013-10-02 115 } f0fcbdbf Xianglong Du 2013-10-02 116 f0fcbdbf Xianglong Du 2013-10-02 117 #define OPTIONS (WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE) f0fcbdbf Xianglong Du 2013-10-02 118 f0fcbdbf Xianglong Du 2013-10-02 119 static const struct watchdog_info sirfsoc_wdt_ident = { f0fcbdbf Xianglong Du 2013-10-02 120 .options = OPTIONS, f0fcbdbf Xianglong Du 2013-10-02 121 .firmware_version = 0, f0fcbdbf Xianglong Du 2013-10-02 122 .identity = "SiRFSOC Watchdog", f0fcbdbf Xianglong Du 2013-10-02 123 }; f0fcbdbf Xianglong Du 2013-10-02 124 f0fcbdbf Xianglong Du 2013-10-02 125 static struct watchdog_ops sirfsoc_wdt_ops = { f0fcbdbf Xianglong Du 2013-10-02 126 .owner = THIS_MODULE, f0fcbdbf Xianglong Du 2013-10-02 127 .start = sirfsoc_wdt_enable, f0fcbdbf Xianglong Du 2013-10-02 128 .stop = sirfsoc_wdt_disable, f0fcbdbf Xianglong Du 2013-10-02 129 .get_timeleft = sirfsoc_wdt_gettimeleft, f0fcbdbf Xianglong Du 2013-10-02 130 .ping = sirfsoc_wdt_updatetimeout, f0fcbdbf Xianglong Du 2013-10-02 131 .set_timeout = sirfsoc_wdt_settimeout, f0fcbdbf Xianglong Du 2013-10-02 132 }; f0fcbdbf Xianglong Du 2013-10-02 133 f0fcbdbf Xianglong Du 2013-10-02 134 static struct watchdog_device sirfsoc_wdd = { f0fcbdbf Xianglong Du 2013-10-02 135 .info = &sirfsoc_wdt_ident, f0fcbdbf Xianglong Du 2013-10-02 136 .ops = &sirfsoc_wdt_ops, f0fcbdbf Xianglong Du 2013-10-02 137 .timeout = SIRFSOC_WDT_DEFAULT_TIMEOUT, f0fcbdbf Xianglong Du 2013-10-02 138 .min_timeout = SIRFSOC_WDT_MIN_TIMEOUT, f0fcbdbf Xianglong Du 2013-10-02 139 .max_timeout = SIRFSOC_WDT_MAX_TIMEOUT, f0fcbdbf Xianglong Du 2013-10-02 140 }; f0fcbdbf Xianglong Du 2013-10-02 141 f0fcbdbf Xianglong Du 2013-10-02 142 static int sirfsoc_wdt_probe(struct platform_device *pdev) f0fcbdbf Xianglong Du 2013-10-02 143 { f0fcbdbf Xianglong Du 2013-10-02 144 struct resource *res; f0fcbdbf Xianglong Du 2013-10-02 145 int ret; f0fcbdbf Xianglong Du 2013-10-02 146 void __iomem *base; f0fcbdbf Xianglong Du 2013-10-02 147 f0fcbdbf Xianglong Du 2013-10-02 148 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); f0fcbdbf Xianglong Du 2013-10-02 149 base = devm_ioremap_resource(&pdev->dev, res); f0fcbdbf Xianglong Du 2013-10-02 150 if (IS_ERR(base)) f0fcbdbf Xianglong Du 2013-10-02 151 return PTR_ERR(base); f0fcbdbf Xianglong Du 2013-10-02 152 f0fcbdbf Xianglong Du 2013-10-02 @153 watchdog_set_drvdata(&sirfsoc_wdd, base); f0fcbdbf Xianglong Du 2013-10-02 154 f0fcbdbf Xianglong Du 2013-10-02 155 watchdog_init_timeout(&sirfsoc_wdd, timeout, &pdev->dev); f0fcbdbf Xianglong Du 2013-10-02 156 watchdog_set_nowayout(&sirfsoc_wdd, nowayout); :::::: The code at line 48 was first introduced by commit :::::: f0fcbdbf202e2be36c8eb6d1f5c01f95805777de watchdog: sirf: add watchdog driver of CSR SiRFprimaII and SiRFatlasVI :::::: TO: Xianglong Du <Xianglong.Du@xxxxxxx> :::::: CC: Wim Van Sebroeck <wim@xxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation -- To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html