ASPEED SoC updates for 5.3
LPC control driver changes and a fix. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+nHMAt9PCBDH63wBa3ZZB4FHcJ4FAl0N2bQACgkQa3ZZB4FH cJ4RoA/+IBClZauu9bGp6kdyGRtcNzjh3DmqIBx7veHqSD9X/+cU6wXw19FBDMps CShWgRaCShT/ITG7mIPaY6iiuQKuTOtBQp8S0xBvb+fvoLDHDhZ3BeAEQlg95qWL dZpfvhdNIJKGI4ZQsN/QcGJRLA6tooPFmTUS5tpH2ZjY8Rp3EKAm0l/yKfw6qzLx WbadEf0oFqpR7Ij35w19WEzT2guZAu5a+CTDudf/AFyOX5aPIKTGoBIKTlbLFsuS 9gdejjso11IAZsS2rICLAdrmnkJOlJAWmaFxguIdCQGIzlgRyPnH1HtkI0SDfILn QddQZRIg31nOU9OBGELk+JMJAkRzM+pkynbbr1mSy4mlExKBow/oLcO9ZSeeWTni UiyW+3Duy/3WBDy2tfVEG9+b2df0Ow0hItolcCLKJK5JmqUROOWT82Tq2BiYRpbp EQmLYP4e5P2g6X7heUgtJtkL+HL2Wny3h60pv6XYJ63Y4waryXr9u0CmdvKeGv6I /YZESY/h/9n8kv6cdKKmV9IW/iiBHKphnqHoQjJpkudyQIoqEPGHFM9GKddOtKVi 0cHN4cfhITDCKjJH0jt5Ke64JtGfCMpCVzecIPOuJ88xYBetK1CI+tINHVNshUtU vrdeo4MpR7uuV8v9nMICEtRImfs/dZGyQc3tl9kv/yDIAbEfdfQ= =N3Jm -----END PGP SIGNATURE----- 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 <olof@lixom.net>
This commit is contained in:
Коммит
0aa447e5ce
|
@ -64,6 +64,7 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
|
|||
unsigned long param)
|
||||
{
|
||||
struct aspeed_lpc_ctrl *lpc_ctrl = file_aspeed_lpc_ctrl(file);
|
||||
struct device *dev = file->private_data;
|
||||
void __user *p = (void __user *)param;
|
||||
struct aspeed_lpc_ctrl_mapping map;
|
||||
u32 addr;
|
||||
|
@ -86,6 +87,12 @@ static long aspeed_lpc_ctrl_ioctl(struct file *file, unsigned int cmd,
|
|||
if (map.window_id != 0)
|
||||
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;
|
||||
|
||||
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,
|
|||
return -EINVAL;
|
||||
|
||||
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;
|
||||
size = lpc_ctrl->pnor_size;
|
||||
} 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;
|
||||
size = lpc_ctrl->mem_size;
|
||||
} else {
|
||||
|
@ -192,40 +208,41 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
|
|||
if (!lpc_ctrl)
|
||||
return -ENOMEM;
|
||||
|
||||
/* If flash is described in device tree then store */
|
||||
node = of_parse_phandle(dev->of_node, "flash", 0);
|
||||
if (!node) {
|
||||
dev_err(dev, "Didn't find host pnor flash node\n");
|
||||
return -ENODEV;
|
||||
dev_dbg(dev, "Didn't find host pnor flash node\n");
|
||||
} else {
|
||||
rc = of_address_to_resource(node, 1, &resm);
|
||||
of_node_put(node);
|
||||
if (rc) {
|
||||
dev_err(dev, "Couldn't address to resource for flash\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
lpc_ctrl->pnor_size = resource_size(&resm);
|
||||
lpc_ctrl->pnor_base = resm.start;
|
||||
}
|
||||
|
||||
rc = of_address_to_resource(node, 1, &resm);
|
||||
of_node_put(node);
|
||||
if (rc) {
|
||||
dev_err(dev, "Couldn't address to resource for flash\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
lpc_ctrl->pnor_size = resource_size(&resm);
|
||||
lpc_ctrl->pnor_base = resm.start;
|
||||
|
||||
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);
|
||||
if (!node) {
|
||||
dev_err(dev, "Didn't find reserved memory\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
dev_dbg(dev, "Didn't find reserved memory\n");
|
||||
} 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);
|
||||
of_node_put(node);
|
||||
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->mem_size = resource_size(&resm);
|
||||
lpc_ctrl->mem_base = resm.start;
|
||||
|
||||
lpc_ctrl->regmap = syscon_node_to_regmap(
|
||||
pdev->dev.parent->of_node);
|
||||
if (IS_ERR(lpc_ctrl->regmap)) {
|
||||
|
@ -254,8 +271,6 @@ static int aspeed_lpc_ctrl_probe(struct platform_device *pdev)
|
|||
goto err;
|
||||
}
|
||||
|
||||
dev_info(dev, "Loaded at %pr\n", &resm);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
|
Загрузка…
Ссылка в новой задаче