hc
2024-02-20 e636c8d336489bf3eed5878299e6cc045bbad077
kernel/drivers/misc/mei/init.c
....@@ -1,17 +1,7 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
2
- *
3
+ * Copyright (c) 2012-2019, Intel Corporation. All rights reserved.
34 * 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
- *
155 */
166
177 #include <linux/export.h>
....@@ -133,12 +123,12 @@
133123
134124 /* enter reset flow */
135125 interrupts_enabled = state != MEI_DEV_POWER_DOWN;
136
- dev->dev_state = MEI_DEV_RESETTING;
126
+ mei_set_devstate(dev, MEI_DEV_RESETTING);
137127
138128 dev->reset_count++;
139129 if (dev->reset_count > MEI_MAX_CONSEC_RESET) {
140130 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);
142132 return -ENODEV;
143133 }
144134
....@@ -151,7 +141,7 @@
151141
152142 mei_hbm_reset(dev);
153143
154
- dev->rd_msg_hdr = 0;
144
+ memset(dev->rd_msg_hdr, 0, sizeof(dev->rd_msg_hdr));
155145
156146 if (ret) {
157147 dev_err(dev->dev, "hw_reset failed ret = %d\n", ret);
....@@ -160,7 +150,7 @@
160150
161151 if (state == MEI_DEV_POWER_DOWN) {
162152 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);
164154 return 0;
165155 }
166156
....@@ -172,11 +162,11 @@
172162
173163 dev_dbg(dev->dev, "link is established start sending messages.\n");
174164
175
- dev->dev_state = MEI_DEV_INIT_CLIENTS;
165
+ mei_set_devstate(dev, MEI_DEV_INIT_CLIENTS);
176166 ret = mei_hbm_start_req(dev);
177167 if (ret) {
178168 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);
180170 return ret;
181171 }
182172
....@@ -200,13 +190,15 @@
200190 /* acknowledge interrupt and stop interrupts */
201191 mei_clear_interrupts(dev);
202192
203
- mei_hw_config(dev);
193
+ ret = mei_hw_config(dev);
194
+ if (ret)
195
+ goto err;
204196
205197 dev_dbg(dev->dev, "reset in start the mei device.\n");
206198
207199 dev->reset_count = 0;
208200 do {
209
- dev->dev_state = MEI_DEV_INITIALIZING;
201
+ mei_set_devstate(dev, MEI_DEV_INITIALIZING);
210202 ret = mei_reset(dev);
211203
212204 if (ret == -ENODEV || dev->dev_state == MEI_DEV_DISABLED) {
....@@ -241,7 +233,7 @@
241233 return 0;
242234 err:
243235 dev_err(dev->dev, "link layer initialization failed.\n");
244
- dev->dev_state = MEI_DEV_DISABLED;
236
+ mei_set_devstate(dev, MEI_DEV_DISABLED);
245237 mutex_unlock(&dev->device_lock);
246238 return -ENODEV;
247239 }
....@@ -260,7 +252,7 @@
260252
261253 mutex_lock(&dev->device_lock);
262254
263
- dev->dev_state = MEI_DEV_POWER_UP;
255
+ mei_set_devstate(dev, MEI_DEV_POWER_UP);
264256 dev->reset_count = 0;
265257
266258 err = mei_reset(dev);
....@@ -311,7 +303,7 @@
311303 dev_dbg(dev->dev, "stopping the device.\n");
312304
313305 mutex_lock(&dev->device_lock);
314
- dev->dev_state = MEI_DEV_POWER_DOWN;
306
+ mei_set_devstate(dev, MEI_DEV_POWER_DOWN);
315307 mutex_unlock(&dev->device_lock);
316308 mei_cl_bus_remove_devices(dev);
317309
....@@ -324,7 +316,7 @@
324316
325317 mei_reset(dev);
326318 /* move device to disabled state unconditionally */
327
- dev->dev_state = MEI_DEV_DISABLED;
319
+ mei_set_devstate(dev, MEI_DEV_DISABLED);
328320
329321 mutex_unlock(&dev->device_lock);
330322 }