Commit 8010b14e authored by Dmitry Baryshkov's avatar Dmitry Baryshkov Committed by Rob Clark

drm/msm/mdp5: move iommu_domain_alloc() call close to its usage

Move iommu_domain_alloc() in front of adress space/IOMMU initialization.
This allows us to drop final bits of struct mdp5_cfg_platform which
remained from the pre-DT days.
Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/489695/
Link: https://lore.kernel.org/r/20220616081106.350262-3-dmitry.baryshkov@linaro.orgSigned-off-by: default avatarRob Clark <robdclark@chromium.org>
parent a07ea70a
...@@ -1253,8 +1253,6 @@ static const struct mdp5_cfg_handler cfg_handlers_v3[] = { ...@@ -1253,8 +1253,6 @@ static const struct mdp5_cfg_handler cfg_handlers_v3[] = {
{ .revision = 3, .config = { .hw = &sdm630_config } }, { .revision = 3, .config = { .hw = &sdm630_config } },
}; };
static struct mdp5_cfg_platform *mdp5_get_config(struct platform_device *dev);
const struct mdp5_cfg_hw *mdp5_cfg_get_hw_config(struct mdp5_cfg_handler *cfg_handler) const struct mdp5_cfg_hw *mdp5_cfg_get_hw_config(struct mdp5_cfg_handler *cfg_handler)
{ {
return cfg_handler->config.hw; return cfg_handler->config.hw;
...@@ -1279,10 +1277,8 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms, ...@@ -1279,10 +1277,8 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
uint32_t major, uint32_t minor) uint32_t major, uint32_t minor)
{ {
struct drm_device *dev = mdp5_kms->dev; struct drm_device *dev = mdp5_kms->dev;
struct platform_device *pdev = to_platform_device(dev->dev);
struct mdp5_cfg_handler *cfg_handler; struct mdp5_cfg_handler *cfg_handler;
const struct mdp5_cfg_handler *cfg_handlers; const struct mdp5_cfg_handler *cfg_handlers;
struct mdp5_cfg_platform *pconfig;
int i, ret = 0, num_handlers; int i, ret = 0, num_handlers;
cfg_handler = kzalloc(sizeof(*cfg_handler), GFP_KERNEL); cfg_handler = kzalloc(sizeof(*cfg_handler), GFP_KERNEL);
...@@ -1325,9 +1321,6 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms, ...@@ -1325,9 +1321,6 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
cfg_handler->revision = minor; cfg_handler->revision = minor;
cfg_handler->config.hw = mdp5_cfg; cfg_handler->config.hw = mdp5_cfg;
pconfig = mdp5_get_config(pdev);
memcpy(&cfg_handler->config.platform, pconfig, sizeof(*pconfig));
DBG("MDP5: %s hw config selected", mdp5_cfg->name); DBG("MDP5: %s hw config selected", mdp5_cfg->name);
return cfg_handler; return cfg_handler;
...@@ -1338,12 +1331,3 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms, ...@@ -1338,12 +1331,3 @@ struct mdp5_cfg_handler *mdp5_cfg_init(struct mdp5_kms *mdp5_kms,
return ERR_PTR(ret); return ERR_PTR(ret);
} }
static struct mdp5_cfg_platform *mdp5_get_config(struct platform_device *dev)
{
static struct mdp5_cfg_platform config = {};
config.iommu = iommu_domain_alloc(&platform_bus_type);
return &config;
}
...@@ -104,14 +104,8 @@ struct mdp5_cfg_hw { ...@@ -104,14 +104,8 @@ struct mdp5_cfg_hw {
uint32_t max_clk; uint32_t max_clk;
}; };
/* platform config data (ie. from DT, or pdata) */
struct mdp5_cfg_platform {
struct iommu_domain *iommu;
};
struct mdp5_cfg { struct mdp5_cfg {
const struct mdp5_cfg_hw *hw; const struct mdp5_cfg_hw *hw;
struct mdp5_cfg_platform platform;
}; };
struct mdp5_kms; struct mdp5_kms;
......
...@@ -558,6 +558,7 @@ static int mdp5_kms_init(struct drm_device *dev) ...@@ -558,6 +558,7 @@ static int mdp5_kms_init(struct drm_device *dev)
struct msm_gem_address_space *aspace; struct msm_gem_address_space *aspace;
int irq, i, ret; int irq, i, ret;
struct device *iommu_dev; struct device *iommu_dev;
struct iommu_domain *iommu;
ret = mdp5_init(to_platform_device(dev->dev), dev); ret = mdp5_init(to_platform_device(dev->dev), dev);
...@@ -601,14 +602,15 @@ static int mdp5_kms_init(struct drm_device *dev) ...@@ -601,14 +602,15 @@ static int mdp5_kms_init(struct drm_device *dev)
} }
mdelay(16); mdelay(16);
if (config->platform.iommu) { iommu = iommu_domain_alloc(&platform_bus_type);
if (iommu) {
struct msm_mmu *mmu; struct msm_mmu *mmu;
iommu_dev = &pdev->dev; iommu_dev = &pdev->dev;
if (!dev_iommu_fwspec_get(iommu_dev)) if (!dev_iommu_fwspec_get(iommu_dev))
iommu_dev = iommu_dev->parent; iommu_dev = iommu_dev->parent;
mmu = msm_iommu_new(iommu_dev, config->platform.iommu); mmu = msm_iommu_new(iommu_dev, iommu);
aspace = msm_gem_address_space_create(mmu, "mdp5", aspace = msm_gem_address_space_create(mmu, "mdp5",
0x1000, 0x100000000 - 0x1000); 0x1000, 0x100000000 - 0x1000);
......
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