@@ -64,6 +64,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
64
64
unsigned long param )
65
65
{
66
66
struct aspeed_lpc_ctrl * lpc_ctrl = file_aspeed_lpc_ctrl (file );
67
+ struct device * dev = file -> private_data ;
67
68
void __user * p = (void __user * )param ;
68
69
struct aspeed_lpc_ctrl_mapping map ;
69
70
u32 addr ;
@@ -86,6 +87,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
86
87
if (map .window_id != 0 )
87
88
return - EINVAL ;
88
89
90
+ /* If memory-region is not described in device tree */
91
+ if (!lpc_ctrl -> mem_size ) {
92
+ dev_dbg (dev , "Didn't find reserved memory\n" );
93
+ return - ENXIO ;
94
+ }
95
+
89
96
map .size = lpc_ctrl -> mem_size ;
90
97
91
98
return copy_to_user (p , & map , sizeof (map )) ? - EFAULT : 0 ;
@@ -122,9 +129,18 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
122
129
return - EINVAL ;
123
130
124
131
if (map .window_type == ASPEED_LPC_CTRL_WINDOW_FLASH ) {
132
+ if (!lpc_ctrl -> pnor_size ) {
133
+ dev_dbg (dev , "Didn't find host pnor flash\n" );
134
+ return - ENXIO ;
135
+ }
125
136
addr = lpc_ctrl -> pnor_base ;
126
137
size = lpc_ctrl -> pnor_size ;
127
138
} else if (map .window_type == ASPEED_LPC_CTRL_WINDOW_MEMORY ) {
139
+ /* If memory-region is not described in device tree */
140
+ if (!lpc_ctrl -> mem_size ) {
141
+ dev_dbg (dev , "Didn't find reserved memory\n" );
142
+ return - ENXIO ;
143
+ }
128
144
addr = lpc_ctrl -> mem_base ;
129
145
size = lpc_ctrl -> mem_size ;
130
146
} else {
@@ -192,40 +208,41 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
192
208
if (!lpc_ctrl )
193
209
return - ENOMEM ;
194
210
211
+ /* If flash is described in device tree then store */
195
212
node = of_parse_phandle (dev -> of_node , "flash" , 0 );
196
213
if (!node ) {
197
- dev_err (dev , "Didn't find host pnor flash node\n" );
198
- return - ENODEV ;
199
- }
214
+ dev_dbg (dev , "Didn't find host pnor flash node\n" );
215
+ } else {
216
+ rc = of_address_to_resource (node , 1 , & resm );
217
+ of_node_put (node );
218
+ if (rc ) {
219
+ dev_err (dev , "Couldn't address to resource for flash\n" );
220
+ return rc ;
221
+ }
200
222
201
- rc = of_address_to_resource (node , 1 , & resm );
202
- of_node_put (node );
203
- if (rc ) {
204
- dev_err (dev , "Couldn't address to resource for flash\n" );
205
- return rc ;
223
+ lpc_ctrl -> pnor_size = resource_size (& resm );
224
+ lpc_ctrl -> pnor_base = resm .start ;
206
225
}
207
226
208
- lpc_ctrl -> pnor_size = resource_size (& resm );
209
- lpc_ctrl -> pnor_base = resm .start ;
210
227
211
228
dev_set_drvdata (& pdev -> dev , lpc_ctrl );
212
229
230
+ /* If memory-region is described in device tree then store */
213
231
node = of_parse_phandle (dev -> of_node , "memory-region" , 0 );
214
232
if (!node ) {
215
- dev_err (dev , "Didn't find reserved memory\n" );
216
- return - EINVAL ;
217
- }
233
+ dev_dbg (dev , "Didn't find reserved memory\n" );
234
+ } else {
235
+ rc = of_address_to_resource (node , 0 , & resm );
236
+ of_node_put (node );
237
+ if (rc ) {
238
+ dev_err (dev , "Couldn't address to resource for reserved memory\n" );
239
+ return - ENXIO ;
240
+ }
218
241
219
- rc = of_address_to_resource (node , 0 , & resm );
220
- of_node_put (node );
221
- if (rc ) {
222
- dev_err (dev , "Couldn't address to resource for reserved memory\n" );
223
- return - ENOMEM ;
242
+ lpc_ctrl -> mem_size = resource_size (& resm );
243
+ lpc_ctrl -> mem_base = resm .start ;
224
244
}
225
245
226
- lpc_ctrl -> mem_size = resource_size (& resm );
227
- lpc_ctrl -> mem_base = resm .start ;
228
-
229
246
lpc_ctrl -> regmap = syscon_node_to_regmap (
230
247
pdev -> dev .parent -> of_node );
231
248
if (IS_ERR (lpc_ctrl -> regmap )) {
@@ -254,8 +271,6 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
254
271
goto err ;
255
272
}
256
273
257
- dev_info (dev , "Loaded at %pr\n" , & resm );
258
-
259
274
return 0 ;
260
275
261
276
err :
0 commit comments