Loading drivers/gpu/drm/msm/msm_smmu.c +48 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "msm_drv.h" #include "msm_gem.h" #include "msm_mmu.h" #include "sde_dbg.h" #ifndef SZ_4G #define SZ_4G (((size_t) SZ_1G) * 4) Loading Loading @@ -238,6 +239,13 @@ static int msm_smmu_map_dma_buf(struct msm_mmu *mmu, struct sg_table *sgt, return -ENOMEM; } if (sgt && sgt->sgl) { DRM_DEBUG("%pad/0x%x/0x%x/0x%lx\n", &sgt->sgl->dma_address, sgt->sgl->dma_length, dir, attrs); SDE_EVT32(sgt->sgl->dma_address, sgt->sgl->dma_length, dir, attrs); } return 0; } Loading @@ -248,6 +256,12 @@ static void msm_smmu_unmap_dma_buf(struct msm_mmu *mmu, struct sg_table *sgt, struct msm_smmu *smmu = to_msm_smmu(mmu); struct msm_smmu_client *client = msm_smmu_to_client(smmu); if (sgt && sgt->sgl) { DRM_DEBUG("%pad/0x%x/0x%x\n", &sgt->sgl->dma_address, sgt->sgl->dma_length, dir); SDE_EVT32(sgt->sgl->dma_address, sgt->sgl->dma_length, dir); } msm_dma_unmap_sg(client->dev, sgt->sgl, sgt->nents, dir, dma_buf); } Loading Loading @@ -386,6 +400,37 @@ struct msm_mmu *msm_smmu_new(struct device *dev, return &smmu->base; } static int msm_smmu_fault_handler(struct iommu_domain *domain, struct device *dev, unsigned long iova, int flags, void *token) { struct msm_smmu_client *client; int rc = -EINVAL; if (!token) { DRM_ERROR("Error: token is NULL\n"); return -EINVAL; } client = (struct msm_smmu_client *)token; /* see iommu.h for fault flags definition */ SDE_EVT32(iova, flags); DRM_ERROR("trigger dump, iova=0x%08lx, flags=0x%x\n", iova, flags); DRM_ERROR("SMMU device:%s", client->dev ? client->dev->kobj.name : ""); /* generate dump, but no panic */ SDE_DBG_DUMP("sde", "dsi0_ctrl", "dsi0_phy", "dsi1_ctrl", "dsi1_phy", "vbif", "dbg_bus", "vbif_dbg_bus"); /* * return -ENOSYS to allow smmu driver to dump out useful * debug info. */ return rc; } static int _msm_smmu_create_mapping(struct msm_smmu_client *client, const struct msm_smmu_domain *domain) { Loading @@ -411,6 +456,9 @@ static int _msm_smmu_create_mapping(struct msm_smmu_client *client, } } iommu_set_fault_handler(client->mmu_mapping->domain, msm_smmu_fault_handler, (void *)client); DRM_INFO("Created domain %s [%zx,%zx] secure=%d\n", domain->label, domain->va_start, domain->va_size, domain->secure); Loading drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c +13 −1 Original line number Diff line number Diff line Loading @@ -342,9 +342,21 @@ static void sde_encoder_phys_wb_setup_fb(struct sde_encoder_phys *phys_enc, hw_wb->ops.setup_cdp(hw_wb, cdp_cfg); } if (hw_wb->ops.setup_outaddress) if (hw_wb->ops.setup_outaddress) { SDE_EVT32(hw_wb->idx, wb_cfg->dest.width, wb_cfg->dest.height, wb_cfg->dest.plane_addr[0], wb_cfg->dest.plane_size[0], wb_cfg->dest.plane_addr[1], wb_cfg->dest.plane_size[1], wb_cfg->dest.plane_addr[2], wb_cfg->dest.plane_size[2], wb_cfg->dest.plane_addr[3], wb_cfg->dest.plane_size[3]); hw_wb->ops.setup_outaddress(hw_wb, wb_cfg); } } /** * sde_encoder_phys_wb_setup_cdp - setup chroma down prefetch block Loading drivers/gpu/drm/msm/sde/sde_plane.c +14 −1 Original line number Diff line number Diff line Loading @@ -873,10 +873,23 @@ static inline void _sde_plane_set_scanout(struct drm_plane *plane, SDE_DEBUG_PLANE(psde, "not updating same src addrs\n"); else if (ret) SDE_ERROR_PLANE(psde, "failed to get format layout, %d\n", ret); else if (psde->pipe_hw->ops.setup_sourceaddress) else if (psde->pipe_hw->ops.setup_sourceaddress) { SDE_EVT32(psde->pipe_hw->idx, pipe_cfg->layout.width, pipe_cfg->layout.height, pipe_cfg->layout.plane_addr[0], pipe_cfg->layout.plane_size[0], pipe_cfg->layout.plane_addr[1], pipe_cfg->layout.plane_size[1], pipe_cfg->layout.plane_addr[2], pipe_cfg->layout.plane_size[2], pipe_cfg->layout.plane_addr[3], pipe_cfg->layout.plane_size[3], pstate->multirect_index); psde->pipe_hw->ops.setup_sourceaddress(psde->pipe_hw, pipe_cfg, pstate->multirect_index); } } static int _sde_plane_setup_scaler3_lut(struct sde_plane *psde, struct sde_plane_state *pstate) Loading Loading
drivers/gpu/drm/msm/msm_smmu.c +48 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "msm_drv.h" #include "msm_gem.h" #include "msm_mmu.h" #include "sde_dbg.h" #ifndef SZ_4G #define SZ_4G (((size_t) SZ_1G) * 4) Loading Loading @@ -238,6 +239,13 @@ static int msm_smmu_map_dma_buf(struct msm_mmu *mmu, struct sg_table *sgt, return -ENOMEM; } if (sgt && sgt->sgl) { DRM_DEBUG("%pad/0x%x/0x%x/0x%lx\n", &sgt->sgl->dma_address, sgt->sgl->dma_length, dir, attrs); SDE_EVT32(sgt->sgl->dma_address, sgt->sgl->dma_length, dir, attrs); } return 0; } Loading @@ -248,6 +256,12 @@ static void msm_smmu_unmap_dma_buf(struct msm_mmu *mmu, struct sg_table *sgt, struct msm_smmu *smmu = to_msm_smmu(mmu); struct msm_smmu_client *client = msm_smmu_to_client(smmu); if (sgt && sgt->sgl) { DRM_DEBUG("%pad/0x%x/0x%x\n", &sgt->sgl->dma_address, sgt->sgl->dma_length, dir); SDE_EVT32(sgt->sgl->dma_address, sgt->sgl->dma_length, dir); } msm_dma_unmap_sg(client->dev, sgt->sgl, sgt->nents, dir, dma_buf); } Loading Loading @@ -386,6 +400,37 @@ struct msm_mmu *msm_smmu_new(struct device *dev, return &smmu->base; } static int msm_smmu_fault_handler(struct iommu_domain *domain, struct device *dev, unsigned long iova, int flags, void *token) { struct msm_smmu_client *client; int rc = -EINVAL; if (!token) { DRM_ERROR("Error: token is NULL\n"); return -EINVAL; } client = (struct msm_smmu_client *)token; /* see iommu.h for fault flags definition */ SDE_EVT32(iova, flags); DRM_ERROR("trigger dump, iova=0x%08lx, flags=0x%x\n", iova, flags); DRM_ERROR("SMMU device:%s", client->dev ? client->dev->kobj.name : ""); /* generate dump, but no panic */ SDE_DBG_DUMP("sde", "dsi0_ctrl", "dsi0_phy", "dsi1_ctrl", "dsi1_phy", "vbif", "dbg_bus", "vbif_dbg_bus"); /* * return -ENOSYS to allow smmu driver to dump out useful * debug info. */ return rc; } static int _msm_smmu_create_mapping(struct msm_smmu_client *client, const struct msm_smmu_domain *domain) { Loading @@ -411,6 +456,9 @@ static int _msm_smmu_create_mapping(struct msm_smmu_client *client, } } iommu_set_fault_handler(client->mmu_mapping->domain, msm_smmu_fault_handler, (void *)client); DRM_INFO("Created domain %s [%zx,%zx] secure=%d\n", domain->label, domain->va_start, domain->va_size, domain->secure); Loading
drivers/gpu/drm/msm/sde/sde_encoder_phys_wb.c +13 −1 Original line number Diff line number Diff line Loading @@ -342,9 +342,21 @@ static void sde_encoder_phys_wb_setup_fb(struct sde_encoder_phys *phys_enc, hw_wb->ops.setup_cdp(hw_wb, cdp_cfg); } if (hw_wb->ops.setup_outaddress) if (hw_wb->ops.setup_outaddress) { SDE_EVT32(hw_wb->idx, wb_cfg->dest.width, wb_cfg->dest.height, wb_cfg->dest.plane_addr[0], wb_cfg->dest.plane_size[0], wb_cfg->dest.plane_addr[1], wb_cfg->dest.plane_size[1], wb_cfg->dest.plane_addr[2], wb_cfg->dest.plane_size[2], wb_cfg->dest.plane_addr[3], wb_cfg->dest.plane_size[3]); hw_wb->ops.setup_outaddress(hw_wb, wb_cfg); } } /** * sde_encoder_phys_wb_setup_cdp - setup chroma down prefetch block Loading
drivers/gpu/drm/msm/sde/sde_plane.c +14 −1 Original line number Diff line number Diff line Loading @@ -873,10 +873,23 @@ static inline void _sde_plane_set_scanout(struct drm_plane *plane, SDE_DEBUG_PLANE(psde, "not updating same src addrs\n"); else if (ret) SDE_ERROR_PLANE(psde, "failed to get format layout, %d\n", ret); else if (psde->pipe_hw->ops.setup_sourceaddress) else if (psde->pipe_hw->ops.setup_sourceaddress) { SDE_EVT32(psde->pipe_hw->idx, pipe_cfg->layout.width, pipe_cfg->layout.height, pipe_cfg->layout.plane_addr[0], pipe_cfg->layout.plane_size[0], pipe_cfg->layout.plane_addr[1], pipe_cfg->layout.plane_size[1], pipe_cfg->layout.plane_addr[2], pipe_cfg->layout.plane_size[2], pipe_cfg->layout.plane_addr[3], pipe_cfg->layout.plane_size[3], pstate->multirect_index); psde->pipe_hw->ops.setup_sourceaddress(psde->pipe_hw, pipe_cfg, pstate->multirect_index); } } static int _sde_plane_setup_scaler3_lut(struct sde_plane *psde, struct sde_plane_state *pstate) Loading