• Home
  • Raw
  • Download

Lines Matching full:p

73 #define TCOBASE(p)	((p)->tco_res->start)  argument
75 #define SMI_EN(p) ((p)->smi_res->start) argument
77 #define TCO_RLD(p) (TCOBASE(p) + 0x00) /* TCO Timer Reload/Curr. Value */ argument
78 #define TCOv1_TMR(p) (TCOBASE(p) + 0x01) /* TCOv1 Timer Initial Value*/ argument
79 #define TCO_DAT_IN(p) (TCOBASE(p) + 0x02) /* TCO Data In Register */ argument
80 #define TCO_DAT_OUT(p) (TCOBASE(p) + 0x03) /* TCO Data Out Register */ argument
81 #define TCO1_STS(p) (TCOBASE(p) + 0x04) /* TCO1 Status Register */ argument
82 #define TCO2_STS(p) (TCOBASE(p) + 0x06) /* TCO2 Status Register */ argument
83 #define TCO1_CNT(p) (TCOBASE(p) + 0x08) /* TCO1 Control Register */ argument
84 #define TCO2_CNT(p) (TCOBASE(p) + 0x0a) /* TCO2 Control Register */ argument
85 #define TCOv2_TMR(p) (TCOBASE(p) + 0x12) /* TCOv2 Timer Initial Value*/ argument
110 int (*update_no_reboot_bit)(void *p, bool set);
141 static inline unsigned int seconds_to_ticks(struct iTCO_wdt_private *p, in seconds_to_ticks() argument
144 return p->iTCO_version == 3 ? secs : (secs * 10) / 6; in seconds_to_ticks()
147 static inline unsigned int ticks_to_seconds(struct iTCO_wdt_private *p, in ticks_to_seconds() argument
150 return p->iTCO_version == 3 ? ticks : (ticks * 6) / 10; in ticks_to_seconds()
153 static inline u32 no_reboot_bit(struct iTCO_wdt_private *p) in no_reboot_bit() argument
157 switch (p->iTCO_version) { in no_reboot_bit()
182 struct iTCO_wdt_private *p = priv; in update_no_reboot_bit_pci() local
185 pci_read_config_dword(p->pci_dev, 0xd4, &val32); in update_no_reboot_bit_pci()
187 val32 |= no_reboot_bit(p); in update_no_reboot_bit_pci()
189 val32 &= ~no_reboot_bit(p); in update_no_reboot_bit_pci()
190 pci_write_config_dword(p->pci_dev, 0xd4, val32); in update_no_reboot_bit_pci()
191 pci_read_config_dword(p->pci_dev, 0xd4, &newval32); in update_no_reboot_bit_pci()
202 struct iTCO_wdt_private *p = priv; in update_no_reboot_bit_mem() local
205 val32 = readl(p->gcs_pmc); in update_no_reboot_bit_mem()
207 val32 |= no_reboot_bit(p); in update_no_reboot_bit_mem()
209 val32 &= ~no_reboot_bit(p); in update_no_reboot_bit_mem()
210 writel(val32, p->gcs_pmc); in update_no_reboot_bit_mem()
211 newval32 = readl(p->gcs_pmc); in update_no_reboot_bit_mem()
222 struct iTCO_wdt_private *p = priv; in update_no_reboot_bit_cnt() local
225 val = inw(TCO1_CNT(p)); in update_no_reboot_bit_cnt()
230 outw(val, TCO1_CNT(p)); in update_no_reboot_bit_cnt()
231 newval = inw(TCO1_CNT(p)); in update_no_reboot_bit_cnt()
246 static void iTCO_wdt_no_reboot_bit_setup(struct iTCO_wdt_private *p, in iTCO_wdt_no_reboot_bit_setup() argument
253 p->update_no_reboot_bit = update_no_reboot_bit_pmc; in iTCO_wdt_no_reboot_bit_setup()
254 p->no_reboot_priv = pmc; in iTCO_wdt_no_reboot_bit_setup()
258 if (p->iTCO_version >= 6) in iTCO_wdt_no_reboot_bit_setup()
259 p->update_no_reboot_bit = update_no_reboot_bit_cnt; in iTCO_wdt_no_reboot_bit_setup()
260 else if (p->iTCO_version >= 2) in iTCO_wdt_no_reboot_bit_setup()
261 p->update_no_reboot_bit = update_no_reboot_bit_mem; in iTCO_wdt_no_reboot_bit_setup()
262 else if (p->iTCO_version == 1) in iTCO_wdt_no_reboot_bit_setup()
263 p->update_no_reboot_bit = update_no_reboot_bit_pci; in iTCO_wdt_no_reboot_bit_setup()
265 p->update_no_reboot_bit = update_no_reboot_bit_def; in iTCO_wdt_no_reboot_bit_setup()
267 p->no_reboot_priv = p; in iTCO_wdt_no_reboot_bit_setup()
272 struct iTCO_wdt_private *p = watchdog_get_drvdata(wd_dev); in iTCO_wdt_start() local
275 spin_lock(&p->io_lock); in iTCO_wdt_start()
277 iTCO_vendor_pre_start(p->smi_res, wd_dev->timeout); in iTCO_wdt_start()
280 if (p->update_no_reboot_bit(p->no_reboot_priv, false)) { in iTCO_wdt_start()
281 spin_unlock(&p->io_lock); in iTCO_wdt_start()
288 if (p->iTCO_version >= 2) in iTCO_wdt_start()
289 outw(0x01, TCO_RLD(p)); in iTCO_wdt_start()
290 else if (p->iTCO_version == 1) in iTCO_wdt_start()
291 outb(0x01, TCO_RLD(p)); in iTCO_wdt_start()
294 val = inw(TCO1_CNT(p)); in iTCO_wdt_start()
296 outw(val, TCO1_CNT(p)); in iTCO_wdt_start()
297 val = inw(TCO1_CNT(p)); in iTCO_wdt_start()
298 spin_unlock(&p->io_lock); in iTCO_wdt_start()
307 struct iTCO_wdt_private *p = watchdog_get_drvdata(wd_dev); in iTCO_wdt_stop() local
310 spin_lock(&p->io_lock); in iTCO_wdt_stop()
312 iTCO_vendor_pre_stop(p->smi_res); in iTCO_wdt_stop()
315 val = inw(TCO1_CNT(p)); in iTCO_wdt_stop()
317 outw(val, TCO1_CNT(p)); in iTCO_wdt_stop()
318 val = inw(TCO1_CNT(p)); in iTCO_wdt_stop()
321 p->update_no_reboot_bit(p->no_reboot_priv, true); in iTCO_wdt_stop()
323 spin_unlock(&p->io_lock); in iTCO_wdt_stop()
332 struct iTCO_wdt_private *p = watchdog_get_drvdata(wd_dev); in iTCO_wdt_ping() local
334 spin_lock(&p->io_lock); in iTCO_wdt_ping()
337 if (p->iTCO_version >= 2) { in iTCO_wdt_ping()
338 outw(0x01, TCO_RLD(p)); in iTCO_wdt_ping()
339 } else if (p->iTCO_version == 1) { in iTCO_wdt_ping()
342 outw(0x0008, TCO1_STS(p)); /* write 1 to clear bit */ in iTCO_wdt_ping()
344 outb(0x01, TCO_RLD(p)); in iTCO_wdt_ping()
347 spin_unlock(&p->io_lock); in iTCO_wdt_ping()
353 struct iTCO_wdt_private *p = watchdog_get_drvdata(wd_dev); in iTCO_wdt_set_timeout() local
358 tmrval = seconds_to_ticks(p, t); in iTCO_wdt_set_timeout()
361 if (p->iTCO_version == 1) in iTCO_wdt_set_timeout()
368 if ((p->iTCO_version >= 2 && tmrval > 0x3ff) || in iTCO_wdt_set_timeout()
369 (p->iTCO_version == 1 && tmrval > 0x03f)) in iTCO_wdt_set_timeout()
373 if (p->iTCO_version >= 2) { in iTCO_wdt_set_timeout()
374 spin_lock(&p->io_lock); in iTCO_wdt_set_timeout()
375 val16 = inw(TCOv2_TMR(p)); in iTCO_wdt_set_timeout()
378 outw(val16, TCOv2_TMR(p)); in iTCO_wdt_set_timeout()
379 val16 = inw(TCOv2_TMR(p)); in iTCO_wdt_set_timeout()
380 spin_unlock(&p->io_lock); in iTCO_wdt_set_timeout()
384 } else if (p->iTCO_version == 1) { in iTCO_wdt_set_timeout()
385 spin_lock(&p->io_lock); in iTCO_wdt_set_timeout()
386 val8 = inb(TCOv1_TMR(p)); in iTCO_wdt_set_timeout()
389 outb(val8, TCOv1_TMR(p)); in iTCO_wdt_set_timeout()
390 val8 = inb(TCOv1_TMR(p)); in iTCO_wdt_set_timeout()
391 spin_unlock(&p->io_lock); in iTCO_wdt_set_timeout()
403 struct iTCO_wdt_private *p = watchdog_get_drvdata(wd_dev); in iTCO_wdt_get_timeleft() local
409 if (p->iTCO_version >= 2) { in iTCO_wdt_get_timeleft()
410 spin_lock(&p->io_lock); in iTCO_wdt_get_timeleft()
411 val16 = inw(TCO_RLD(p)); in iTCO_wdt_get_timeleft()
413 spin_unlock(&p->io_lock); in iTCO_wdt_get_timeleft()
415 time_left = ticks_to_seconds(p, val16); in iTCO_wdt_get_timeleft()
416 } else if (p->iTCO_version == 1) { in iTCO_wdt_get_timeleft()
417 spin_lock(&p->io_lock); in iTCO_wdt_get_timeleft()
418 val8 = inb(TCO_RLD(p)); in iTCO_wdt_get_timeleft()
420 if (!(inw(TCO1_STS(p)) & 0x0008)) in iTCO_wdt_get_timeleft()
421 val8 += (inb(TCOv1_TMR(p)) & 0x3f); in iTCO_wdt_get_timeleft()
422 spin_unlock(&p->io_lock); in iTCO_wdt_get_timeleft()
424 time_left = ticks_to_seconds(p, val8); in iTCO_wdt_get_timeleft()
458 struct iTCO_wdt_private *p; in iTCO_wdt_probe() local
465 p = devm_kzalloc(dev, sizeof(*p), GFP_KERNEL); in iTCO_wdt_probe()
466 if (!p) in iTCO_wdt_probe()
469 spin_lock_init(&p->io_lock); in iTCO_wdt_probe()
471 p->tco_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_TCO); in iTCO_wdt_probe()
472 if (!p->tco_res) in iTCO_wdt_probe()
475 p->iTCO_version = pdata->version; in iTCO_wdt_probe()
476 p->pci_dev = to_pci_dev(dev->parent); in iTCO_wdt_probe()
478 p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI); in iTCO_wdt_probe()
479 if (p->smi_res) { in iTCO_wdt_probe()
481 if (!devm_request_region(dev, p->smi_res->start, in iTCO_wdt_probe()
482 resource_size(p->smi_res), in iTCO_wdt_probe()
485 (u64)SMI_EN(p)); in iTCO_wdt_probe()
489 turn_SMI_watchdog_clear_off >= p->iTCO_version) { in iTCO_wdt_probe()
494 iTCO_wdt_no_reboot_bit_setup(p, pdev, pdata); in iTCO_wdt_probe()
500 if (p->iTCO_version >= 2 && p->iTCO_version < 6 && in iTCO_wdt_probe()
502 p->gcs_pmc_res = platform_get_resource(pdev, in iTCO_wdt_probe()
505 p->gcs_pmc = devm_ioremap_resource(dev, p->gcs_pmc_res); in iTCO_wdt_probe()
506 if (IS_ERR(p->gcs_pmc)) in iTCO_wdt_probe()
507 return PTR_ERR(p->gcs_pmc); in iTCO_wdt_probe()
511 if (p->update_no_reboot_bit(p->no_reboot_priv, false) && in iTCO_wdt_probe()
518 p->update_no_reboot_bit(p->no_reboot_priv, true); in iTCO_wdt_probe()
520 if (turn_SMI_watchdog_clear_off >= p->iTCO_version) { in iTCO_wdt_probe()
525 val32 = inl(SMI_EN(p)); in iTCO_wdt_probe()
527 outl(val32, SMI_EN(p)); in iTCO_wdt_probe()
530 if (!devm_request_region(dev, p->tco_res->start, in iTCO_wdt_probe()
531 resource_size(p->tco_res), in iTCO_wdt_probe()
534 (u64)TCOBASE(p)); in iTCO_wdt_probe()
539 pdata->name, pdata->version, (u64)TCOBASE(p)); in iTCO_wdt_probe()
542 switch (p->iTCO_version) { in iTCO_wdt_probe()
546 outw(0x0008, TCO1_STS(p)); /* Clear the Time Out Status bit */ in iTCO_wdt_probe()
547 outw(0x0002, TCO2_STS(p)); /* Clear SECOND_TO_STS bit */ in iTCO_wdt_probe()
550 outl(0x20008, TCO1_STS(p)); in iTCO_wdt_probe()
555 outw(0x0008, TCO1_STS(p)); /* Clear the Time Out Status bit */ in iTCO_wdt_probe()
556 outw(0x0002, TCO2_STS(p)); /* Clear SECOND_TO_STS bit */ in iTCO_wdt_probe()
557 outw(0x0004, TCO2_STS(p)); /* Clear BOOT_STS bit */ in iTCO_wdt_probe()
561 p->wddev.info = &ident, in iTCO_wdt_probe()
562 p->wddev.ops = &iTCO_wdt_ops, in iTCO_wdt_probe()
563 p->wddev.bootstatus = 0; in iTCO_wdt_probe()
564 p->wddev.timeout = WATCHDOG_TIMEOUT; in iTCO_wdt_probe()
565 watchdog_set_nowayout(&p->wddev, nowayout); in iTCO_wdt_probe()
566 p->wddev.parent = dev; in iTCO_wdt_probe()
568 watchdog_set_drvdata(&p->wddev, p); in iTCO_wdt_probe()
569 platform_set_drvdata(pdev, p); in iTCO_wdt_probe()
572 iTCO_wdt_stop(&p->wddev); in iTCO_wdt_probe()
576 if (iTCO_wdt_set_timeout(&p->wddev, heartbeat)) { in iTCO_wdt_probe()
577 iTCO_wdt_set_timeout(&p->wddev, WATCHDOG_TIMEOUT); in iTCO_wdt_probe()
582 watchdog_stop_on_reboot(&p->wddev); in iTCO_wdt_probe()
583 watchdog_stop_on_unregister(&p->wddev); in iTCO_wdt_probe()
584 ret = devm_watchdog_register_device(dev, &p->wddev); in iTCO_wdt_probe()
614 struct iTCO_wdt_private *p = dev_get_drvdata(dev); in iTCO_wdt_suspend_noirq() local
617 p->suspended = false; in iTCO_wdt_suspend_noirq()
618 if (watchdog_active(&p->wddev) && need_suspend()) { in iTCO_wdt_suspend_noirq()
619 ret = iTCO_wdt_stop(&p->wddev); in iTCO_wdt_suspend_noirq()
621 p->suspended = true; in iTCO_wdt_suspend_noirq()
628 struct iTCO_wdt_private *p = dev_get_drvdata(dev); in iTCO_wdt_resume_noirq() local
630 if (p->suspended) in iTCO_wdt_resume_noirq()
631 iTCO_wdt_start(&p->wddev); in iTCO_wdt_resume_noirq()