Skip to content

Commit 0aa447e

Browse files
committed
Merge tag 'aspeed-5.3-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/aspeed into arm/drivers
ASPEED SoC updates for 5.3 LPC control driver changes and a fix. * tag 'aspeed-5.3-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/aspeed: soc: aspeed: lpc-ctrl: Fix probe error handling soc: aspeed: lpc-ctrl: make parameter optional Signed-off-by: Olof Johansson <[email protected]>
2 parents 761d3d2 + c8a3b9b commit 0aa447e

File tree

1 file changed

+38
-23
lines changed

1 file changed

+38
-23
lines changed

drivers/soc/aspeed/aspeed-lpc-ctrl.c

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
6464
unsigned long param)
6565
{
6666
struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file);
67+
struct device *dev = file->private_data;
6768
void __user *p = (void __user *)param;
6869
struct aspeed_lpc_ctrl_mapping map;
6970
u32 addr;
@@ -86,6 +87,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
8687
if (map.window_id != 0)
8788
return -EINVAL;
8889

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+
8996
map.size = lpc_ctrl->mem_size;
9097

9198
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,
122129
return -EINVAL;
123130

124131
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+
}
125136
addr = lpc_ctrl->pnor_base;
126137
size = lpc_ctrl->pnor_size;
127138
} 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+
}
128144
addr = lpc_ctrl->mem_base;
129145
size = lpc_ctrl->mem_size;
130146
} else {
@@ -192,40 +208,41 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
192208
if (!lpc_ctrl)
193209
return -ENOMEM;
194210

211+
/* If flash is described in device tree then store */
195212
node = of_parse_phandle(dev->of_node, "flash", 0);
196213
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+
}
200222

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;
206225
}
207226

208-
lpc_ctrl->pnor_size = resource_size(&resm);
209-
lpc_ctrl->pnor_base = resm.start;
210227

211228
dev_set_drvdata(&pdev->dev, lpc_ctrl);
212229

230+
/* If memory-region is described in device tree then store */
213231
node = of_parse_phandle(dev->of_node, "memory-region", 0);
214232
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+
}
218241

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;
224244
}
225245

226-
lpc_ctrl->mem_size = resource_size(&resm);
227-
lpc_ctrl->mem_base = resm.start;
228-
229246
lpc_ctrl->regmap = syscon_node_to_regmap(
230247
pdev->dev.parent->of_node);
231248
if (IS_ERR(lpc_ctrl->regmap)) {
@@ -254,8 +271,6 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
254271
goto err;
255272
}
256273

257-
dev_info(dev, "Loaded at %pr\n", &resm);
258-
259274
return 0;
260275

261276
err:

0 commit comments

Comments
 (0)