| From 703972946a42cf1f83bf50cf389d618d61b69500 Mon Sep 17 00:00:00 2001 |
| From: Bharat Bhushan <Bharat.Bhushan@nxp.com> |
| Date: Mon, 10 Dec 2018 14:42:51 +0530 |
| Subject: [PATCH] bus: fsl-mc: Allocate mc-portal from root dprc container |
| |
| Root dprc container have allocate-able mc-portals which |
| can be allocated by kernel drivers. |
| |
| As per current design mc-portal is allocated from parent |
| dprc container if requesting device is not root-dprc. |
| This works fine if the requesting device is child of |
| root dprc container, because their parent is root-dprc |
| container. But if request device is grandchild of root |
| dprc container then it tries to allocate from it's parent |
| root dprc-container and it fails. |
| |
| Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> |
| Signed-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com> |
| --- |
| drivers/bus/fsl-mc/mc-io.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/bus/fsl-mc/mc-io.c |
| +++ b/drivers/bus/fsl-mc/mc-io.c |
| @@ -174,14 +174,16 @@ int __must_check fsl_mc_portal_allocate( |
| int error = -EINVAL; |
| struct fsl_mc_resource *resource = NULL; |
| struct fsl_mc_io *mc_io = NULL; |
| + struct device *root_dprc_dev; |
| |
| - if (mc_dev->flags & FSL_MC_IS_DPRC) { |
| + if (fsl_mc_is_root_dprc(&mc_dev->dev)) { |
| mc_bus_dev = mc_dev; |
| } else { |
| - if (!dev_is_fsl_mc(mc_dev->dev.parent)) |
| - return error; |
| + fsl_mc_get_root_dprc(&mc_dev->dev, &root_dprc_dev); |
| + if (WARN_ON(!root_dprc_dev)) |
| + return -EINVAL; |
| |
| - mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent); |
| + mc_bus_dev = to_fsl_mc_device(root_dprc_dev); |
| } |
| |
| mc_bus = to_fsl_mc_bus(mc_bus_dev); |