Commit e4272af4 authored by Vijay Khemka's avatar Vijay Khemka Committed by Joel Stanley

soc: aspeed: lpc-ctrl: make parameter optional

Making memory-region and flash as optional parameter in device
tree if user needs to use these parameter through ioctl then
need to define in devicetree.
Signed-off-by: default avatarVijay Khemka <vijaykhemka@fb.com>
Reviewed-by: default avatarAndrew Jeffery <andrew@aj.id.au>
Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
parent a188339c
...@@ -68,6 +68,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd, ...@@ -68,6 +68,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
unsigned long param) unsigned long param)
{ {
struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file); struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file);
struct device *dev = file->private_data;
void __user *p = (void __user *)param; void __user *p = (void __user *)param;
struct aspeed_lpc_ctrl_mapping map; struct aspeed_lpc_ctrl_mapping map;
u32 addr; u32 addr;
...@@ -90,6 +91,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd, ...@@ -90,6 +91,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
if (map.window_id != 0) if (map.window_id != 0)
return -EINVAL; return -EINVAL;
/* If memory-region is not described in device tree */
if (!lpc_ctrl->mem_size) {
dev_dbg(dev, "Didn't find reserved memory\n");
return -ENXIO;
}
map.size = lpc_ctrl->mem_size; map.size = lpc_ctrl->mem_size;
return copy_to_user(p, &map, sizeof(map)) ? -EFAULT : 0; return copy_to_user(p, &map, sizeof(map)) ? -EFAULT : 0;
...@@ -126,9 +133,18 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd, ...@@ -126,9 +133,18 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
return -EINVAL; return -EINVAL;
if (map.window_type == ASPEED_LPC_CTRL_WINDOW_FLASH) { if (map.window_type == ASPEED_LPC_CTRL_WINDOW_FLASH) {
if (!lpc_ctrl->pnor_size) {
dev_dbg(dev, "Didn't find host pnor flash\n");
return -ENXIO;
}
addr = lpc_ctrl->pnor_base; addr = lpc_ctrl->pnor_base;
size = lpc_ctrl->pnor_size; size = lpc_ctrl->pnor_size;
} else if (map.window_type == ASPEED_LPC_CTRL_WINDOW_MEMORY) { } else if (map.window_type == ASPEED_LPC_CTRL_WINDOW_MEMORY) {
/* If memory-region is not described in device tree */
if (!lpc_ctrl->mem_size) {
dev_dbg(dev, "Didn't find reserved memory\n");
return -ENXIO;
}
addr = lpc_ctrl->mem_base; addr = lpc_ctrl->mem_base;
size = lpc_ctrl->mem_size; size = lpc_ctrl->mem_size;
} else { } else {
...@@ -196,17 +212,17 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev) ...@@ -196,17 +212,17 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
if (!lpc_ctrl) if (!lpc_ctrl)
return -ENOMEM; return -ENOMEM;
/* If flash is described in device tree then store */
node = of_parse_phandle(dev->of_node, "flash", 0); node = of_parse_phandle(dev->of_node, "flash", 0);
if (!node) { if (!node) {
dev_err(dev, "Didn't find host pnor flash node\n"); dev_dbg(dev, "Didn't find host pnor flash node\n");
return -ENODEV; } else {
} rc = of_address_to_resource(node, 1, &resm);
of_node_put(node);
rc = of_address_to_resource(node, 1, &resm); if (rc) {
of_node_put(node); dev_err(dev, "Couldn't address to resource for flash\n");
if (rc) { return rc;
dev_err(dev, "Couldn't address to resource for flash\n"); }
return rc;
} }
lpc_ctrl->pnor_size = resource_size(&resm); lpc_ctrl->pnor_size = resource_size(&resm);
...@@ -214,22 +230,22 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev) ...@@ -214,22 +230,22 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
dev_set_drvdata(&pdev->dev, lpc_ctrl); dev_set_drvdata(&pdev->dev, lpc_ctrl);
/* If memory-region is described in device tree then store */
node = of_parse_phandle(dev->of_node, "memory-region", 0); node = of_parse_phandle(dev->of_node, "memory-region", 0);
if (!node) { if (!node) {
dev_err(dev, "Didn't find reserved memory\n"); dev_dbg(dev, "Didn't find reserved memory\n");
return -EINVAL; } else {
} rc = of_address_to_resource(node, 0, &resm);
of_node_put(node);
if (rc) {
dev_err(dev, "Couldn't address to resource for reserved memory\n");
return -ENXIO;
}
rc = of_address_to_resource(node, 0, &resm); lpc_ctrl->mem_size = resource_size(&resm);
of_node_put(node); lpc_ctrl->mem_base = resm.start;
if (rc) {
dev_err(dev, "Couldn't address to resource for reserved memory\n");
return -ENOMEM;
} }
lpc_ctrl->mem_size = resource_size(&resm);
lpc_ctrl->mem_base = resm.start;
lpc_ctrl->regmap = syscon_node_to_regmap( lpc_ctrl->regmap = syscon_node_to_regmap(
pdev->dev.parent->of_node); pdev->dev.parent->of_node);
if (IS_ERR(lpc_ctrl->regmap)) { if (IS_ERR(lpc_ctrl->regmap)) {
...@@ -258,8 +274,6 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev) ...@@ -258,8 +274,6 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
goto err; goto err;
} }
dev_info(dev, "Loaded at %pr\n", &resm);
return 0; return 0;
err: err:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment