.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0 |
---|
1 | 2 | /* |
---|
2 | | - * |
---|
| 3 | + * Copyright (c) 2012-2019, Intel Corporation. All rights reserved. |
---|
3 | 4 | * Intel Management Engine Interface (Intel MEI) Linux driver |
---|
4 | | - * Copyright (c) 2003-2012, Intel Corporation. |
---|
5 | | - * |
---|
6 | | - * This program is free software; you can redistribute it and/or modify it |
---|
7 | | - * under the terms and conditions of the GNU General Public License, |
---|
8 | | - * version 2, as published by the Free Software Foundation. |
---|
9 | | - * |
---|
10 | | - * This program is distributed in the hope it will be useful, but WITHOUT |
---|
11 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
---|
12 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
---|
13 | | - * more details. |
---|
14 | | - * |
---|
15 | 5 | */ |
---|
16 | 6 | |
---|
17 | 7 | #include <linux/export.h> |
---|
.. | .. |
---|
133 | 123 | |
---|
134 | 124 | /* enter reset flow */ |
---|
135 | 125 | interrupts_enabled = state != MEI_DEV_POWER_DOWN; |
---|
136 | | - dev->dev_state = MEI_DEV_RESETTING; |
---|
| 126 | + mei_set_devstate(dev, MEI_DEV_RESETTING); |
---|
137 | 127 | |
---|
138 | 128 | dev->reset_count++; |
---|
139 | 129 | if (dev->reset_count > MEI_MAX_CONSEC_RESET) { |
---|
140 | 130 | dev_err(dev->dev, "reset: reached maximal consecutive resets: disabling the device\n"); |
---|
141 | | - dev->dev_state = MEI_DEV_DISABLED; |
---|
| 131 | + mei_set_devstate(dev, MEI_DEV_DISABLED); |
---|
142 | 132 | return -ENODEV; |
---|
143 | 133 | } |
---|
144 | 134 | |
---|
.. | .. |
---|
151 | 141 | |
---|
152 | 142 | mei_hbm_reset(dev); |
---|
153 | 143 | |
---|
154 | | - dev->rd_msg_hdr = 0; |
---|
| 144 | + memset(dev->rd_msg_hdr, 0, sizeof(dev->rd_msg_hdr)); |
---|
155 | 145 | |
---|
156 | 146 | if (ret) { |
---|
157 | 147 | dev_err(dev->dev, "hw_reset failed ret = %d\n", ret); |
---|
.. | .. |
---|
160 | 150 | |
---|
161 | 151 | if (state == MEI_DEV_POWER_DOWN) { |
---|
162 | 152 | dev_dbg(dev->dev, "powering down: end of reset\n"); |
---|
163 | | - dev->dev_state = MEI_DEV_DISABLED; |
---|
| 153 | + mei_set_devstate(dev, MEI_DEV_DISABLED); |
---|
164 | 154 | return 0; |
---|
165 | 155 | } |
---|
166 | 156 | |
---|
.. | .. |
---|
172 | 162 | |
---|
173 | 163 | dev_dbg(dev->dev, "link is established start sending messages.\n"); |
---|
174 | 164 | |
---|
175 | | - dev->dev_state = MEI_DEV_INIT_CLIENTS; |
---|
| 165 | + mei_set_devstate(dev, MEI_DEV_INIT_CLIENTS); |
---|
176 | 166 | ret = mei_hbm_start_req(dev); |
---|
177 | 167 | if (ret) { |
---|
178 | 168 | dev_err(dev->dev, "hbm_start failed ret = %d\n", ret); |
---|
179 | | - dev->dev_state = MEI_DEV_RESETTING; |
---|
| 169 | + mei_set_devstate(dev, MEI_DEV_RESETTING); |
---|
180 | 170 | return ret; |
---|
181 | 171 | } |
---|
182 | 172 | |
---|
.. | .. |
---|
200 | 190 | /* acknowledge interrupt and stop interrupts */ |
---|
201 | 191 | mei_clear_interrupts(dev); |
---|
202 | 192 | |
---|
203 | | - mei_hw_config(dev); |
---|
| 193 | + ret = mei_hw_config(dev); |
---|
| 194 | + if (ret) |
---|
| 195 | + goto err; |
---|
204 | 196 | |
---|
205 | 197 | dev_dbg(dev->dev, "reset in start the mei device.\n"); |
---|
206 | 198 | |
---|
207 | 199 | dev->reset_count = 0; |
---|
208 | 200 | do { |
---|
209 | | - dev->dev_state = MEI_DEV_INITIALIZING; |
---|
| 201 | + mei_set_devstate(dev, MEI_DEV_INITIALIZING); |
---|
210 | 202 | ret = mei_reset(dev); |
---|
211 | 203 | |
---|
212 | 204 | if (ret == -ENODEV || dev->dev_state == MEI_DEV_DISABLED) { |
---|
.. | .. |
---|
241 | 233 | return 0; |
---|
242 | 234 | err: |
---|
243 | 235 | dev_err(dev->dev, "link layer initialization failed.\n"); |
---|
244 | | - dev->dev_state = MEI_DEV_DISABLED; |
---|
| 236 | + mei_set_devstate(dev, MEI_DEV_DISABLED); |
---|
245 | 237 | mutex_unlock(&dev->device_lock); |
---|
246 | 238 | return -ENODEV; |
---|
247 | 239 | } |
---|
.. | .. |
---|
260 | 252 | |
---|
261 | 253 | mutex_lock(&dev->device_lock); |
---|
262 | 254 | |
---|
263 | | - dev->dev_state = MEI_DEV_POWER_UP; |
---|
| 255 | + mei_set_devstate(dev, MEI_DEV_POWER_UP); |
---|
264 | 256 | dev->reset_count = 0; |
---|
265 | 257 | |
---|
266 | 258 | err = mei_reset(dev); |
---|
.. | .. |
---|
311 | 303 | dev_dbg(dev->dev, "stopping the device.\n"); |
---|
312 | 304 | |
---|
313 | 305 | mutex_lock(&dev->device_lock); |
---|
314 | | - dev->dev_state = MEI_DEV_POWER_DOWN; |
---|
| 306 | + mei_set_devstate(dev, MEI_DEV_POWER_DOWN); |
---|
315 | 307 | mutex_unlock(&dev->device_lock); |
---|
316 | 308 | mei_cl_bus_remove_devices(dev); |
---|
317 | 309 | |
---|
.. | .. |
---|
324 | 316 | |
---|
325 | 317 | mei_reset(dev); |
---|
326 | 318 | /* move device to disabled state unconditionally */ |
---|
327 | | - dev->dev_state = MEI_DEV_DISABLED; |
---|
| 319 | + mei_set_devstate(dev, MEI_DEV_DISABLED); |
---|
328 | 320 | |
---|
329 | 321 | mutex_unlock(&dev->device_lock); |
---|
330 | 322 | } |
---|