Re: [Freedreno] [PATCH 12/21] drm/msm: remove checks for return value of drm_debugfs functions.

2020-02-27 Thread kbuild test robot
Hi Wambui,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on linus/master v5.6-rc3 next-20200227]
[cannot apply to tegra/for-next anholt/for-next]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:
https://github.com/0day-ci/linux/commits/Wambui-Karuga/drm-subsytem-wide-debugfs-functions-refactor/20200228-102633
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: arm64-defconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 7.5.0
reproduce:
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=arm64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot 

All errors (new ones prefixed by >>):

>> drivers/gpu/drm/msm/adreno/a5xx_gpu.c:1437:19: error: initialization from 
>> incompatible pointer type [-Werror=incompatible-pointer-types]
  .debugfs_init = a5xx_debugfs_init,
  ^
   drivers/gpu/drm/msm/adreno/a5xx_gpu.c:1437:19: note: (near initialization 
for 'funcs.base.debugfs_init')
   cc1: some warnings being treated as errors
--
>> drivers/gpu/drm/msm/adreno/a5xx_debugfs.c:151:6: error: conflicting types 
>> for 'a5xx_debugfs_init'
void a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor)
 ^
   In file included from drivers/gpu/drm/msm/adreno/a5xx_debugfs.c:12:0:
   drivers/gpu/drm/msm/adreno/a5xx_gpu.h:44:5: note: previous declaration of 
'a5xx_debugfs_init' was here
int a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor);
^

vim +/a5xx_debugfs_init +151 drivers/gpu/drm/msm/adreno/a5xx_debugfs.c

   149  
   150  
 > 151  void a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor)

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org


.config.gz
Description: application/gzip
___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


Re: [Freedreno] [DPU PATCH v3 3/5] drm/msm/dp: add displayPort driver support

2020-02-27 Thread Matthias Kaehlcke
On Thu, Feb 27, 2020 at 01:54:33PM -0800, Matthias Kaehlcke wrote:
> On Mon, Dec 02, 2019 at 01:48:57PM +, Chandan Uddaraju wrote:
> > Add the needed displayPort files to enable DP driver
> > on msm target.
> > 
> > "dp_display" module is the main module that calls into
> > other sub-modules. "dp_drm" file represents the interface
> > between DRM framework and DP driver.
> > 
> > changes in v2:
> > -- Update copyright markings on all relevant files.
> > -- Change pr_err() to DRM_ERROR()
> > -- Use APIs directly instead of function pointers.
> > -- Use drm_display_mode structure to store link parameters in the driver.
> > -- Use macros for register definitions instead of hardcoded values.
> > -- Replace writel_relaxed/readl_relaxed with writel/readl
> >and remove memory barriers.
> > -- Remove unnecessary NULL checks.
> > -- Use drm helper functions for dpcd read/write.
> > -- Use DRM_DEBUG_DP for debug msgs.
> > 
> > changes in V3:
> > -- Removed changes in dpu_io_util.[ch]
> > -- Added locking around "is_connected" flag and removed atomic_set()
> > -- Removed the argument validation checks in all the static functions
> >except initialization functions and few API calls across msm/dp files
> > -- Removed hardcoded values for register reads/writes
> > -- Removed vreg related generic structures.
> > -- Added return values where ever necessary.
> > -- Updated dp_ctrl_on function.
> > -- Calling the ctrl specific catalog functions directly instead of
> >function pointers.
> > -- Added seperate change that adds standard value in drm_dp_helper file.
> > -- Added separate change in this list that is used to initialize
> >displayport in DPU driver.
> > -- Added change to use drm_dp_get_adjust_request_voltage() function.
> > 
> > Signed-off-by: Chandan Uddaraju 
> > ---
> > +++ b/drivers/gpu/drm/msm/dp/dp_power.c
> >
> > ...
> >
> > +int dp_power_init(struct dp_power *dp_power, bool flip)
> > +{
> > +   int rc = 0;
> > +   struct dp_power_private *power;
> > +
> > +   if (!dp_power) {
> > +   DRM_ERROR("invalid power data\n");
> > +   rc = -EINVAL;
> > +   goto exit;
> > +   }
> 
> drive-by comment:
> 
> this would lead to calling 'pm_runtime_put_sync(>pdev->dev)'
> below with 'power' being NULL, which doesn't seem a good idea.

correction: with 'power' being uninitialized, which isn't a good idea
either.

> It is probably sane to expect that 'dp_power' is not NULL, if that's
> the case the check can be removed. Otherwise the function should just
> return -EINVAL instead of jumping to 'exit'.
> 
> > +
> > +   power = container_of(dp_power, struct dp_power_private, dp_power);
> > +
> > +   pm_runtime_get_sync(>pdev->dev);
> > +   rc = dp_power_regulator_enable(power);
> > +   if (rc) {
> > +   DRM_ERROR("failed to enable regulators, %d\n", rc);
> > +   goto exit;
> > +   }
> > +
> > +   rc = dp_power_pinctrl_set(power, true);
> > +   if (rc) {
> > +   DRM_ERROR("failed to set pinctrl state, %d\n", rc);
> > +   goto err_pinctrl;
> > +   }
> > +
> > +   rc = dp_power_config_gpios(power, flip);
> > +   if (rc) {
> > +   DRM_ERROR("failed to enable gpios, %d\n", rc);
> > +   goto err_gpio;
> > +   }
> > +
> > +   rc = dp_power_clk_enable(dp_power, DP_CORE_PM, true);
> > +   if (rc) {
> > +   DRM_ERROR("failed to enable DP core clocks, %d\n", rc);
> > +   goto err_clk;
> > +   }
> > +
> > +   return 0;
> > +
> > +err_clk:
> > +   dp_power_disable_gpios(power);
> > +err_gpio:
> > +   dp_power_pinctrl_set(power, false);
> > +err_pinctrl:
> > +   dp_power_regulator_disable(power);
> > +exit:
> > +   pm_runtime_put_sync(>pdev->dev);
> > +   return rc;
> > +}
___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


Re: [Freedreno] [DPU PATCH v3 4/5] drm/msm/dp: add support for DP PLL driver

2020-02-27 Thread Matthias Kaehlcke
On Mon, Dec 02, 2019 at 01:48:27PM +, Chandan Uddaraju wrote:
> Add the needed DP PLL specific files to support
> display port interface on msm targets.
> 
> The DP driver calls the DP PLL driver registration.
> The DP driver sets the link and pixel clock sources.
> 
> Changes in v2:
> -- Update copyright markings on all relevant files.
> -- Use DRM_DEBUG_DP for debug msgs.
> 
> Signed-off-by: Chandan Uddaraju 
> ---
> diff --git a/drivers/gpu/drm/msm/dp/pll/dp_pll_10nm.c 
> b/drivers/gpu/drm/msm/dp/pll/dp_pll_10nm.c
> new file mode 100644
> index 000..6ef2492
> --- /dev/null
> +++ b/drivers/gpu/drm/msm/dp/pll/dp_pll_10nm.c
>
> ...
>
> +static u8 dp_mux_get_parent_10nm(struct clk_hw *hw)
> +{
> + u32 auxclk_div = 0;
> + struct dp_pll_10nm_pclksel *pclksel = to_pll_10nm_pclksel(hw);
> + struct dp_pll_10nm *dp_res = pclksel->pll;
> + u8 val = 0;
> +
> + DRM_ERROR("clk_hw->init->name = %s\n", hw->init->name);

drive-by comment: DRM_ERROR doesn't seem the right level, DRM_DEBUG_DP
would probably be more adequate.

Also I found this line triggers a NULL pointer dereference on a SC7180
system, where clk_hw->init is NULL.
___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


Re: [Freedreno] [DPU PATCH v3 3/5] drm/msm/dp: add displayPort driver support

2020-02-27 Thread Matthias Kaehlcke
On Mon, Dec 02, 2019 at 01:48:57PM +, Chandan Uddaraju wrote:
> Add the needed displayPort files to enable DP driver
> on msm target.
> 
> "dp_display" module is the main module that calls into
> other sub-modules. "dp_drm" file represents the interface
> between DRM framework and DP driver.
> 
> changes in v2:
> -- Update copyright markings on all relevant files.
> -- Change pr_err() to DRM_ERROR()
> -- Use APIs directly instead of function pointers.
> -- Use drm_display_mode structure to store link parameters in the driver.
> -- Use macros for register definitions instead of hardcoded values.
> -- Replace writel_relaxed/readl_relaxed with writel/readl
>and remove memory barriers.
> -- Remove unnecessary NULL checks.
> -- Use drm helper functions for dpcd read/write.
> -- Use DRM_DEBUG_DP for debug msgs.
> 
> changes in V3:
> -- Removed changes in dpu_io_util.[ch]
> -- Added locking around "is_connected" flag and removed atomic_set()
> -- Removed the argument validation checks in all the static functions
>except initialization functions and few API calls across msm/dp files
> -- Removed hardcoded values for register reads/writes
> -- Removed vreg related generic structures.
> -- Added return values where ever necessary.
> -- Updated dp_ctrl_on function.
> -- Calling the ctrl specific catalog functions directly instead of
>function pointers.
> -- Added seperate change that adds standard value in drm_dp_helper file.
> -- Added separate change in this list that is used to initialize
>displayport in DPU driver.
> -- Added change to use drm_dp_get_adjust_request_voltage() function.
> 
> Signed-off-by: Chandan Uddaraju 
> ---
> +++ b/drivers/gpu/drm/msm/dp/dp_power.c
>
> ...
>
> +int dp_power_init(struct dp_power *dp_power, bool flip)
> +{
> + int rc = 0;
> + struct dp_power_private *power;
> +
> + if (!dp_power) {
> + DRM_ERROR("invalid power data\n");
> + rc = -EINVAL;
> + goto exit;
> + }

drive-by comment:

this would lead to calling 'pm_runtime_put_sync(>pdev->dev)'
below with 'power' being NULL, which doesn't seem a good idea.

It is probably sane to expect that 'dp_power' is not NULL, if that's
the case the check can be removed. Otherwise the function should just
return -EINVAL instead of jumping to 'exit'.

> +
> + power = container_of(dp_power, struct dp_power_private, dp_power);
> +
> + pm_runtime_get_sync(>pdev->dev);
> + rc = dp_power_regulator_enable(power);
> + if (rc) {
> + DRM_ERROR("failed to enable regulators, %d\n", rc);
> + goto exit;
> + }
> +
> + rc = dp_power_pinctrl_set(power, true);
> + if (rc) {
> + DRM_ERROR("failed to set pinctrl state, %d\n", rc);
> + goto err_pinctrl;
> + }
> +
> + rc = dp_power_config_gpios(power, flip);
> + if (rc) {
> + DRM_ERROR("failed to enable gpios, %d\n", rc);
> + goto err_gpio;
> + }
> +
> + rc = dp_power_clk_enable(dp_power, DP_CORE_PM, true);
> + if (rc) {
> + DRM_ERROR("failed to enable DP core clocks, %d\n", rc);
> + goto err_clk;
> + }
> +
> + return 0;
> +
> +err_clk:
> + dp_power_disable_gpios(power);
> +err_gpio:
> + dp_power_pinctrl_set(power, false);
> +err_pinctrl:
> + dp_power_regulator_disable(power);
> +exit:
> + pm_runtime_put_sync(>pdev->dev);
> + return rc;
> +}
___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


Re: [Freedreno] [PATCH v5 0/5] iommu/arm-smmu: Split pagetable support for arm-smmu-v2

2020-02-27 Thread Jordan Crouse
On Tue, Jan 28, 2020 at 03:00:14PM -0700, Jordan Crouse wrote:
> This is another iteration for the split pagetable support based on the
> suggestions from Robin and Will [1].
> 
> Background: In order to support per-context pagetables the GPU needs to enable
> split tables so that we can store global buffers in the TTBR1 space leaving 
> the
> GPU free to program the TTBR0 register with the address of a context specific
> pagetable.
> 
> If the DOMAIN_ATTR_SPLIT_TABLES attribute is set on the domain before 
> attaching,
> the context bank assigned to the domain will be programmed to allow 
> translations
> in the TTBR1 space. Translations in the TTBR0 region will be disallowed 
> because,
> as Robin pointe out, having a un-programmed TTBR0 register is dangerous.
> 
> The driver can determine if TTBR1 was successfully programmed by querying
> DOMAIN_ATTR_SPLIT_TABLES after attaching. The domain geometry will also be
> updated to reflect the virtual address space for the TTBR1 range.
> 
> Upcoming changes will allow auxiliary domains to be attached to the device 
> which
> will enable and program TTBR0.
> 
> This patchset is based on top of linux-next-20200127.

Quick ping for feedback so I can respin for (maybe?) 5.6.

Thanks,
Jordan

> Change log:
> 
> v4: Only program TTBR1 when split pagetables are requested. TTBR0 will be
> enabled later when an auxiliary domain is attached
> v3: Remove the implementation specific and make split pagetable support
> part of the generic configuration
> 
> [1] https://lists.linuxfoundation.org/pipermail/iommu/2020-January/041373.html
> 
> Jordan Crouse (5):
>   iommu: Add DOMAIN_ATTR_SPLIT_TABLES
>   iommu/arm-smmu: Add support for TTBR1
>   drm/msm: Attach the IOMMU device during initialization
>   drm/msm: Refactor address space initialization
>   drm/msm/a6xx: Support split pagetables
> 
>  drivers/gpu/drm/msm/adreno/a2xx_gpu.c| 16 ++
>  drivers/gpu/drm/msm/adreno/a3xx_gpu.c|  1 +
>  drivers/gpu/drm/msm/adreno/a4xx_gpu.c|  1 +
>  drivers/gpu/drm/msm/adreno/a5xx_gpu.c|  1 +
>  drivers/gpu/drm/msm/adreno/a6xx_gpu.c| 51 
> 
>  drivers/gpu/drm/msm/adreno/adreno_gpu.c  | 23 ++
>  drivers/gpu/drm/msm/adreno/adreno_gpu.h  |  8 +
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c  | 18 ---
>  drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 18 +--
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c |  4 ---
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 18 +--
>  drivers/gpu/drm/msm/msm_drv.h|  8 ++---
>  drivers/gpu/drm/msm/msm_gem_vma.c| 36 --
>  drivers/gpu/drm/msm/msm_gpu.c| 49 ++
>  drivers/gpu/drm/msm/msm_gpu.h|  4 +--
>  drivers/gpu/drm/msm/msm_gpummu.c |  6 
>  drivers/gpu/drm/msm/msm_iommu.c  | 18 ++-
>  drivers/gpu/drm/msm/msm_mmu.h|  1 -
>  drivers/iommu/arm-smmu.c | 48 +-
>  drivers/iommu/arm-smmu.h | 22 ++
>  include/linux/iommu.h|  2 ++
>  21 files changed, 198 insertions(+), 155 deletions(-)
> 
> -- 
> 2.7.4
> ___
> Freedreno mailing list
> Freedreno@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/freedreno

-- 
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


[Freedreno] [v2 2/2] drm/msm/dpu: fix reservation cleanup during modeset

2020-02-27 Thread Krishna Manikandan
Missing return statement will cause the reservations to
get released prematurely, thus messing up the allocation
for any next successive datapath reservation.

Signed-off-by: Krishna Manikandan 

Changes in v2:
- Change in commit message
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index 136e4d0..0052212 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -1084,6 +1084,8 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder 
*drm_enc,
 
dpu_enc->mode_set_complete = true;
 
+   return;
+
 error:
dpu_rm_release(_kms->rm, drm_enc);
 }
-- 
1.9.1

___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


[Freedreno] [v2 1/2] drm/msm/dpu: add DP support for sc7180 target

2020-02-27 Thread Krishna Manikandan
Add the required changes to support Display Port
for sc7180 target.

Signed-off-by: Krishna Manikandan 

Changes in v2:
- Change in commit message

This patch has dependency on the below series
https://patchwork.kernel.org/patch/11269169/
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c|  6 ++
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c |  3 ++-
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h |  4 
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c| 12 
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c |  4 
 5 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index f8ac3bf..136e4d0 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -1109,6 +1109,12 @@ static void _dpu_encoder_virt_enable_helper(struct 
drm_encoder *drm_enc)
}
 
if (dpu_enc->cur_master->hw_mdptop &&
+   (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_TMDS) &&
+   dpu_enc->cur_master->hw_mdptop->ops.intf_audio_select)
+   dpu_enc->cur_master->hw_mdptop->ops.intf_audio_select(
+   dpu_enc->cur_master->hw_mdptop);
+
+   if (dpu_enc->cur_master->hw_mdptop &&
dpu_enc->cur_master->hw_mdptop->ops.reset_ubwc)
dpu_enc->cur_master->hw_mdptop->ops.reset_ubwc(
dpu_enc->cur_master->hw_mdptop,
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index c567917..60f350f 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -109,8 +109,9 @@
{
.name = "top_0", .id = MDP_TOP,
.base = 0x0, .len = 0x494,
-   .features = 0,
+   .features = BIT(DPU_MDP_DP_PHY_SEL),
.highest_bank_bit = 0x3,
+   .dp_phy_intf_sel = 0x41,
.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
.reg_off = 0x2AC, .bit_off = 0},
.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index 09df7d8..fbcf14b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -77,6 +77,7 @@ enum {
  * @DPU_MDP_UBWC_1_0,  This chipsets supports Universal Bandwidth
  * compression initial revision
  * @DPU_MDP_UBWC_1_5,  Universal Bandwidth compression version 1.5
+ * @DPU_MDP_DP_PHY_SEL DP PHY interface select for controller
  * @DPU_MDP_MAXMaximum value
 
  */
@@ -86,6 +87,7 @@ enum {
DPU_MDP_BWC,
DPU_MDP_UBWC_1_0,
DPU_MDP_UBWC_1_5,
+   DPU_MDP_DP_PHY_SEL,
DPU_MDP_MAX
 };
 
@@ -421,6 +423,7 @@ struct dpu_clk_ctrl_reg {
  * @highest_bank_bit:  UBWC parameter
  * @ubwc_static:   ubwc static configuration
  * @ubwc_swizzle:  ubwc default swizzle setting
+ * @dp_phy_intf_sel:   dp phy interface select for controller
  * @clk_ctrls  clock control register definition
  */
 struct dpu_mdp_cfg {
@@ -428,6 +431,7 @@ struct dpu_mdp_cfg {
u32 highest_bank_bit;
u32 ubwc_static;
u32 ubwc_swizzle;
+   u32 dp_phy_intf_sel;
struct dpu_clk_ctrl_reg clk_ctrls[DPU_CLK_CTRL_MAX];
 };
 
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
index efe9a57..ae96ede 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
@@ -144,10 +144,22 @@ static void dpu_hw_intf_setup_timing_engine(struct 
dpu_hw_intf *ctx,
hsync_ctl = (hsync_period << 16) | p->hsync_pulse_width;
display_hctl = (hsync_end_x << 16) | hsync_start_x;
 
+   if (ctx->cap->type == INTF_DP) {
+   active_h_start = hsync_start_x;
+   active_h_end = active_h_start + p->xres - 1;
+   active_v_start = display_v_start;
+   active_v_end = active_v_start + (p->yres * hsync_period) - 1;
+   active_hctl = (active_h_end << 16) | active_h_start;
+   display_hctl = active_hctl;
+   }
+
den_polarity = 0;
if (ctx->cap->type == INTF_HDMI) {
hsync_polarity = p->yres >= 720 ? 0 : 1;
vsync_polarity = p->yres >= 720 ? 0 : 1;
+   } else if (ctx->cap->type == INTF_DP) {
+   hsync_polarity = p->hsync_polarity;
+   vsync_polarity = p->vsync_polarity;
} else {
hsync_polarity = 0;
vsync_polarity = 0;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
index f9af52a..9591d42 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
@@ -41,6 +41,7 @@
 #define MDP_WD_TIMER_4_CTL 

[Freedreno] [v1 1/2] msm: disp: dpu1: add DP support for sc7180 target

2020-02-27 Thread Krishna Manikandan
Add the required changes to support Display Port
for sc7180 target.

Signed-off-by: Krishna Manikandan 

This patch has dependency on DP driver changes in
https://patchwork.kernel.org/patch/11269169/
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c|  6 ++
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c |  3 ++-
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h |  4 
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c| 12 
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c |  4 
 5 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index f8ac3bf..136e4d0 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -1109,6 +1109,12 @@ static void _dpu_encoder_virt_enable_helper(struct 
drm_encoder *drm_enc)
}
 
if (dpu_enc->cur_master->hw_mdptop &&
+   (dpu_enc->disp_info.intf_type == DRM_MODE_ENCODER_TMDS) &&
+   dpu_enc->cur_master->hw_mdptop->ops.intf_audio_select)
+   dpu_enc->cur_master->hw_mdptop->ops.intf_audio_select(
+   dpu_enc->cur_master->hw_mdptop);
+
+   if (dpu_enc->cur_master->hw_mdptop &&
dpu_enc->cur_master->hw_mdptop->ops.reset_ubwc)
dpu_enc->cur_master->hw_mdptop->ops.reset_ubwc(
dpu_enc->cur_master->hw_mdptop,
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index c567917..60f350f 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -109,8 +109,9 @@
{
.name = "top_0", .id = MDP_TOP,
.base = 0x0, .len = 0x494,
-   .features = 0,
+   .features = BIT(DPU_MDP_DP_PHY_SEL),
.highest_bank_bit = 0x3,
+   .dp_phy_intf_sel = 0x41,
.clk_ctrls[DPU_CLK_CTRL_VIG0] = {
.reg_off = 0x2AC, .bit_off = 0},
.clk_ctrls[DPU_CLK_CTRL_DMA0] = {
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index 09df7d8..fbcf14b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -77,6 +77,7 @@ enum {
  * @DPU_MDP_UBWC_1_0,  This chipsets supports Universal Bandwidth
  * compression initial revision
  * @DPU_MDP_UBWC_1_5,  Universal Bandwidth compression version 1.5
+ * @DPU_MDP_DP_PHY_SEL DP PHY interface select for controller
  * @DPU_MDP_MAXMaximum value
 
  */
@@ -86,6 +87,7 @@ enum {
DPU_MDP_BWC,
DPU_MDP_UBWC_1_0,
DPU_MDP_UBWC_1_5,
+   DPU_MDP_DP_PHY_SEL,
DPU_MDP_MAX
 };
 
@@ -421,6 +423,7 @@ struct dpu_clk_ctrl_reg {
  * @highest_bank_bit:  UBWC parameter
  * @ubwc_static:   ubwc static configuration
  * @ubwc_swizzle:  ubwc default swizzle setting
+ * @dp_phy_intf_sel:   dp phy interface select for controller
  * @clk_ctrls  clock control register definition
  */
 struct dpu_mdp_cfg {
@@ -428,6 +431,7 @@ struct dpu_mdp_cfg {
u32 highest_bank_bit;
u32 ubwc_static;
u32 ubwc_swizzle;
+   u32 dp_phy_intf_sel;
struct dpu_clk_ctrl_reg clk_ctrls[DPU_CLK_CTRL_MAX];
 };
 
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
index efe9a57..ae96ede 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c
@@ -144,10 +144,22 @@ static void dpu_hw_intf_setup_timing_engine(struct 
dpu_hw_intf *ctx,
hsync_ctl = (hsync_period << 16) | p->hsync_pulse_width;
display_hctl = (hsync_end_x << 16) | hsync_start_x;
 
+   if (ctx->cap->type == INTF_DP) {
+   active_h_start = hsync_start_x;
+   active_h_end = active_h_start + p->xres - 1;
+   active_v_start = display_v_start;
+   active_v_end = active_v_start + (p->yres * hsync_period) - 1;
+   active_hctl = (active_h_end << 16) | active_h_start;
+   display_hctl = active_hctl;
+   }
+
den_polarity = 0;
if (ctx->cap->type == INTF_HDMI) {
hsync_polarity = p->yres >= 720 ? 0 : 1;
vsync_polarity = p->yres >= 720 ? 0 : 1;
+   } else if (ctx->cap->type == INTF_DP) {
+   hsync_polarity = p->hsync_polarity;
+   vsync_polarity = p->vsync_polarity;
} else {
hsync_polarity = 0;
vsync_polarity = 0;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
index f9af52a..9591d42 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
@@ -41,6 +41,7 @@
 #define MDP_WD_TIMER_4_CTL0x440
 #define MDP_WD_TIMER_4_CTL2  

[Freedreno] [v1 2/2] msm: disp: dpu1: fix reservations cleanup during modeset

2020-02-27 Thread Krishna Manikandan
Missing return statement will cause the reservations to
get released prematurely, thus messing up the allocation
for any next successive datapath reservation.

Signed-off-by: Krishna Manikandan 
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
index 136e4d0..0052212 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
@@ -1084,6 +1084,8 @@ static void dpu_encoder_virt_mode_set(struct drm_encoder 
*drm_enc,
 
dpu_enc->mode_set_complete = true;
 
+   return;
+
 error:
dpu_rm_release(_kms->rm, drm_enc);
 }
-- 
1.9.1

___
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno


Re: [Freedreno] [PATCH 12/21] drm/msm: remove checks for return value of drm_debugfs functions.

2020-02-27 Thread Daniel Vetter
On Thu, Feb 27, 2020 at 03:02:23PM +0300, Wambui Karuga wrote:
> Since commit 987d65d01356 (drm: debugfs: make
> drm_debugfs_create_files() never fail), drm_debugfs_create_files() does
> not fail, and should return void. This change therefore removes the
> checks of its return value in drm/msm and subsequent error handling.
> 
> These changes also enable the changing of various debugfs_init()
> functions to return void.
> 
> Signed-off-by: Wambui Karuga 

I think msm_kms_funcs->debugfs_init could also be made to return void. But
that's quite a bit more involved so doesn't make much sense to do that as
part of this patch series.

Also the debug/core_perf/ files look kinda funny, if I'd bet this is used
by the qualcomm hwc somewhere to make it's decisions :-) That's at least
what's been the case everywhere else I spotted something like that.
-Daniel

> ---
>  drivers/gpu/drm/msm/adreno/a5xx_debugfs.c | 18 +-
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c  | 14 +++---
>  drivers/gpu/drm/msm/msm_debugfs.c | 21 ++---
>  drivers/gpu/drm/msm/msm_debugfs.h |  2 +-
>  drivers/gpu/drm/msm/msm_gpu.h |  2 +-
>  5 files changed, 16 insertions(+), 41 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c 
> b/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
> index 075ecce4b5e0..8cae2ca4af6b 100644
> --- a/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
> +++ b/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
> @@ -148,27 +148,19 @@ reset_set(void *data, u64 val)
>  DEFINE_SIMPLE_ATTRIBUTE(reset_fops, NULL, reset_set, "%llx\n");
>  
>  
> -int a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor)
> +void a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor)
>  {
>   struct drm_device *dev;
> - int ret;
>  
>   if (!minor)
> - return 0;
> + return;
>  
>   dev = minor->dev;
>  
> - ret = drm_debugfs_create_files(a5xx_debugfs_list,
> - ARRAY_SIZE(a5xx_debugfs_list),
> - minor->debugfs_root, minor);
> -
> - if (ret) {
> - DRM_DEV_ERROR(dev->dev, "could not install 
> a5xx_debugfs_list\n");
> - return ret;
> - }
> + drm_debugfs_create_files(a5xx_debugfs_list,
> +  ARRAY_SIZE(a5xx_debugfs_list),
> +  minor->debugfs_root, minor);
>  
>   debugfs_create_file("reset", S_IWUGO, minor->debugfs_root, dev,
>   _fops);
> -
> - return 0;
>  }
> diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c 
> b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
> index 6650f478b226..41b461128bbc 100644
> --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
> +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
> @@ -259,17 +259,9 @@ static struct drm_info_list mdp5_debugfs_list[] = {
>  
>  static int mdp5_kms_debugfs_init(struct msm_kms *kms, struct drm_minor 
> *minor)
>  {
> - struct drm_device *dev = minor->dev;
> - int ret;
> -
> - ret = drm_debugfs_create_files(mdp5_debugfs_list,
> - ARRAY_SIZE(mdp5_debugfs_list),
> - minor->debugfs_root, minor);
> -
> - if (ret) {
> - DRM_DEV_ERROR(dev->dev, "could not install 
> mdp5_debugfs_list\n");
> - return ret;
> - }
> + drm_debugfs_create_files(mdp5_debugfs_list,
> +  ARRAY_SIZE(mdp5_debugfs_list),
> +  minor->debugfs_root, minor);
>  
>   return 0;
>  }
> diff --git a/drivers/gpu/drm/msm/msm_debugfs.c 
> b/drivers/gpu/drm/msm/msm_debugfs.c
> index 1c74381a4fc9..3c958f311bbc 100644
> --- a/drivers/gpu/drm/msm/msm_debugfs.c
> +++ b/drivers/gpu/drm/msm/msm_debugfs.c
> @@ -214,31 +214,22 @@ int msm_debugfs_late_init(struct drm_device *dev)
>   return ret;
>  }
>  
> -int msm_debugfs_init(struct drm_minor *minor)
> +void msm_debugfs_init(struct drm_minor *minor)
>  {
>   struct drm_device *dev = minor->dev;
>   struct msm_drm_private *priv = dev->dev_private;
> - int ret;
> + int ret = 0;
>  
> - ret = drm_debugfs_create_files(msm_debugfs_list,
> - ARRAY_SIZE(msm_debugfs_list),
> - minor->debugfs_root, minor);
> -
> - if (ret) {
> - DRM_DEV_ERROR(dev->dev, "could not install msm_debugfs_list\n");
> - return ret;
> - }
> + drm_debugfs_create_files(msm_debugfs_list,
> +  ARRAY_SIZE(msm_debugfs_list),
> +  minor->debugfs_root, minor);
>  
>   debugfs_create_file("gpu", S_IRUSR, minor->debugfs_root,
>   dev, _gpu_fops);
>  
>   if (priv->kms && priv->kms->funcs->debugfs_init) {
> - ret = priv->kms->funcs->debugfs_init(priv->kms, minor);
> - if (ret)
> - return ret;
> + priv->kms->funcs->debugfs_init(priv->kms, minor);
>   }
> -
> - return ret;
>  }
>  

[Freedreno] [PATCH 12/21] drm/msm: remove checks for return value of drm_debugfs functions.

2020-02-27 Thread Wambui Karuga
Since commit 987d65d01356 (drm: debugfs: make
drm_debugfs_create_files() never fail), drm_debugfs_create_files() does
not fail, and should return void. This change therefore removes the
checks of its return value in drm/msm and subsequent error handling.

These changes also enable the changing of various debugfs_init()
functions to return void.

Signed-off-by: Wambui Karuga 
---
 drivers/gpu/drm/msm/adreno/a5xx_debugfs.c | 18 +-
 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c  | 14 +++---
 drivers/gpu/drm/msm/msm_debugfs.c | 21 ++---
 drivers/gpu/drm/msm/msm_debugfs.h |  2 +-
 drivers/gpu/drm/msm/msm_gpu.h |  2 +-
 5 files changed, 16 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c 
b/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
index 075ecce4b5e0..8cae2ca4af6b 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_debugfs.c
@@ -148,27 +148,19 @@ reset_set(void *data, u64 val)
 DEFINE_SIMPLE_ATTRIBUTE(reset_fops, NULL, reset_set, "%llx\n");
 
 
-int a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor)
+void a5xx_debugfs_init(struct msm_gpu *gpu, struct drm_minor *minor)
 {
struct drm_device *dev;
-   int ret;
 
if (!minor)
-   return 0;
+   return;
 
dev = minor->dev;
 
-   ret = drm_debugfs_create_files(a5xx_debugfs_list,
-   ARRAY_SIZE(a5xx_debugfs_list),
-   minor->debugfs_root, minor);
-
-   if (ret) {
-   DRM_DEV_ERROR(dev->dev, "could not install 
a5xx_debugfs_list\n");
-   return ret;
-   }
+   drm_debugfs_create_files(a5xx_debugfs_list,
+ARRAY_SIZE(a5xx_debugfs_list),
+minor->debugfs_root, minor);
 
debugfs_create_file("reset", S_IWUGO, minor->debugfs_root, dev,
_fops);
-
-   return 0;
 }
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c 
b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 6650f478b226..41b461128bbc 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -259,17 +259,9 @@ static struct drm_info_list mdp5_debugfs_list[] = {
 
 static int mdp5_kms_debugfs_init(struct msm_kms *kms, struct drm_minor *minor)
 {
-   struct drm_device *dev = minor->dev;
-   int ret;
-
-   ret = drm_debugfs_create_files(mdp5_debugfs_list,
-   ARRAY_SIZE(mdp5_debugfs_list),
-   minor->debugfs_root, minor);
-
-   if (ret) {
-   DRM_DEV_ERROR(dev->dev, "could not install 
mdp5_debugfs_list\n");
-   return ret;
-   }
+   drm_debugfs_create_files(mdp5_debugfs_list,
+ARRAY_SIZE(mdp5_debugfs_list),
+minor->debugfs_root, minor);
 
return 0;
 }
diff --git a/drivers/gpu/drm/msm/msm_debugfs.c 
b/drivers/gpu/drm/msm/msm_debugfs.c
index 1c74381a4fc9..3c958f311bbc 100644
--- a/drivers/gpu/drm/msm/msm_debugfs.c
+++ b/drivers/gpu/drm/msm/msm_debugfs.c
@@ -214,31 +214,22 @@ int msm_debugfs_late_init(struct drm_device *dev)
return ret;
 }
 
-int msm_debugfs_init(struct drm_minor *minor)
+void msm_debugfs_init(struct drm_minor *minor)
 {
struct drm_device *dev = minor->dev;
struct msm_drm_private *priv = dev->dev_private;
-   int ret;
+   int ret = 0;
 
-   ret = drm_debugfs_create_files(msm_debugfs_list,
-   ARRAY_SIZE(msm_debugfs_list),
-   minor->debugfs_root, minor);
-
-   if (ret) {
-   DRM_DEV_ERROR(dev->dev, "could not install msm_debugfs_list\n");
-   return ret;
-   }
+   drm_debugfs_create_files(msm_debugfs_list,
+ARRAY_SIZE(msm_debugfs_list),
+minor->debugfs_root, minor);
 
debugfs_create_file("gpu", S_IRUSR, minor->debugfs_root,
dev, _gpu_fops);
 
if (priv->kms && priv->kms->funcs->debugfs_init) {
-   ret = priv->kms->funcs->debugfs_init(priv->kms, minor);
-   if (ret)
-   return ret;
+   priv->kms->funcs->debugfs_init(priv->kms, minor);
}
-
-   return ret;
 }
 #endif
 
diff --git a/drivers/gpu/drm/msm/msm_debugfs.h 
b/drivers/gpu/drm/msm/msm_debugfs.h
index 2b91f8c178ad..ef58f66abbb3 100644
--- a/drivers/gpu/drm/msm/msm_debugfs.h
+++ b/drivers/gpu/drm/msm/msm_debugfs.h
@@ -8,7 +8,7 @@
 #define __MSM_DEBUGFS_H__
 
 #ifdef CONFIG_DEBUG_FS
-int msm_debugfs_init(struct drm_minor *minor);
+void msm_debugfs_init(struct drm_minor *minor);
 #endif
 
 #endif /* __MSM_DEBUGFS_H__ */
diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h
index be5bc2e8425c..6ccae4ba905c 100644
--- a/drivers/gpu/drm/msm/msm_gpu.h
+++ b/drivers/gpu/drm/msm/msm_gpu.h
@@