Lines Matching +full:parent +full:- +full:locked
1 // SPDX-License-Identifier: GPL-2.0
25 * One-time writable lock bit. If set forbids
39 #define INTEL_OC_WDT_CTRL_REG(wdt) ((wdt)->ctrl_res->start)
45 bool locked; member
62 if (oc_wdt->locked) in intel_oc_wdt_start()
96 outl((inl(INTEL_OC_WDT_CTRL_REG(oc_wdt)) & ~INTEL_OC_WDT_TOV) | (t - 1), in intel_oc_wdt_set_timeout()
99 wdd->timeout = t; in intel_oc_wdt_set_timeout()
124 oc_wdt->wdd.bootstatus |= WDIOF_CARDRESET; in intel_oc_wdt_setup()
126 oc_wdt->locked = !!(val & INTEL_OC_WDT_CTL_LCK); in intel_oc_wdt_setup()
134 set_bit(WDOG_HW_RUNNING, &oc_wdt->wdd.status); in intel_oc_wdt_setup()
136 if (oc_wdt->locked) { in intel_oc_wdt_setup()
143 * If we are locked read the current timeout value in intel_oc_wdt_setup()
146 oc_wdt->wdd.timeout = (val & INTEL_OC_WDT_TOV) + 1; in intel_oc_wdt_setup()
147 oc_wdt->info.options &= ~WDIOF_SETTIMEOUT; in intel_oc_wdt_setup()
149 dev_info(oc_wdt->wdd.parent, in intel_oc_wdt_setup()
150 "Register access locked, heartbeat fixed at: %u s\n", in intel_oc_wdt_setup()
151 oc_wdt->wdd.timeout); in intel_oc_wdt_setup()
153 } else if (oc_wdt->locked) { in intel_oc_wdt_setup()
155 * In case the watchdog is disabled and locked there in intel_oc_wdt_setup()
158 return -EACCES; in intel_oc_wdt_setup()
162 outl(val | (oc_wdt->wdd.timeout - 1), INTEL_OC_WDT_CTRL_REG(oc_wdt)); in intel_oc_wdt_setup()
169 struct device *dev = &pdev->dev; in intel_oc_wdt_probe()
174 oc_wdt = devm_kzalloc(&pdev->dev, sizeof(*oc_wdt), GFP_KERNEL); in intel_oc_wdt_probe()
176 return -ENOMEM; in intel_oc_wdt_probe()
178 oc_wdt->ctrl_res = platform_get_resource(pdev, IORESOURCE_IO, 0); in intel_oc_wdt_probe()
179 if (!oc_wdt->ctrl_res) { in intel_oc_wdt_probe()
180 dev_err(&pdev->dev, "missing I/O resource\n"); in intel_oc_wdt_probe()
181 return -ENODEV; in intel_oc_wdt_probe()
184 if (!devm_request_region(&pdev->dev, oc_wdt->ctrl_res->start, in intel_oc_wdt_probe()
185 resource_size(oc_wdt->ctrl_res), pdev->name)) { in intel_oc_wdt_probe()
187 oc_wdt->ctrl_res); in intel_oc_wdt_probe()
188 return -EBUSY; in intel_oc_wdt_probe()
191 wdd = &oc_wdt->wdd; in intel_oc_wdt_probe()
192 wdd->min_timeout = INTEL_OC_WDT_MIN_TOV; in intel_oc_wdt_probe()
193 wdd->max_timeout = INTEL_OC_WDT_MAX_TOV; in intel_oc_wdt_probe()
194 wdd->timeout = INTEL_OC_WDT_DEF_TOV; in intel_oc_wdt_probe()
195 oc_wdt->info = intel_oc_wdt_info; in intel_oc_wdt_probe()
196 wdd->info = &oc_wdt->info; in intel_oc_wdt_probe()
197 wdd->ops = &intel_oc_wdt_ops; in intel_oc_wdt_probe()
198 wdd->parent = dev; in intel_oc_wdt_probe()