Re: [PATCH] drm/hisilicon/hibmc: Move drm_fbdev_generic_setup() down to avoid the splat

2020-07-08 Thread Xinliang Liu
Hi Zenghui,
Thanks for fixing this.
Applied to drm-misc-fixes.

Best,
-Xinliang

On Mon, 6 Jul 2020 at 22:53, Zenghui Yu  wrote:
>
> The HiSilicon hibmc driver triggers a splat at boot time as below
>
> [   14.137806] [ cut here ]
> [   14.142405] hibmc-drm :0a:00.0: Device has not been registered.
> [   14.148661] WARNING: CPU: 0 PID: 496 at 
> drivers/gpu/drm/drm_fb_helper.c:2233 drm_fbdev_generic_setup+0x15c/0x1b8
> [   14.158787] [...]
> [   14.278307] Call trace:
> [   14.280742]  drm_fbdev_generic_setup+0x15c/0x1b8
> [   14.285337]  hibmc_pci_probe+0x354/0x418
> [   14.289242]  local_pci_probe+0x44/0x98
> [   14.292974]  work_for_cpu_fn+0x20/0x30
> [   14.296708]  process_one_work+0x1c4/0x4e0
> [   14.300698]  worker_thread+0x2c8/0x528
> [   14.304431]  kthread+0x138/0x140
> [   14.307646]  ret_from_fork+0x10/0x18
> [   14.311205] ---[ end trace a2000ec2d838af4d ]---
>
> This turned out to be due to the fbdev device hasn't been registered when
> drm_fbdev_generic_setup() is invoked. Let's fix the splat by moving it down
> after drm_dev_register() which will follow the "Display driver example"
> documented by commit de99f0600a79 ("drm/drv: DOC: Add driver example
> code").
>
> Signed-off-by: Zenghui Yu 
> ---
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c 
> b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> index a6fd0c29e5b8..544b9993c99e 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> @@ -307,8 +307,6 @@ static int hibmc_load(struct drm_device *dev)
> /* reset all the states of crtc/plane/encoder/connector */
> drm_mode_config_reset(dev);
>
> -   drm_fbdev_generic_setup(dev, dev->mode_config.preferred_depth);
> -
> return 0;
>
>  err:
> @@ -355,6 +353,9 @@ static int hibmc_pci_probe(struct pci_dev *pdev,
>   ret);
> goto err_unload;
> }
> +
> +   drm_fbdev_generic_setup(dev, dev->mode_config.preferred_depth);
> +
> return 0;
>
>  err_unload:
> --
> 2.19.1
>


Re: [RESEND PATCH] drm/hisilicon: Ensure LDI regs are properly configured.

2017-08-28 Thread Xinliang Liu
Hi Daniel,

On 28 August 2017 at 16:51, Daniel Vetter  wrote:
> On Mon, Aug 28, 2017 at 04:44:30PM +0800, Xinliang Liu wrote:
>> Hi,
>>
>> On 15 August 2017 at 22:14, Peter Griffin  wrote:
>>
>> > This patch fixes the following soft lockup:
>> >   BUG: soft lockup - CPU#0 stuck for 23s! [weston:307]
>> >
>> > On weston idle-timeout the IP is powered down and reset
>> > asserted. On weston resume we get a massive vblank
>> > IRQ storm due to the LDI registers having lost some state.
>> >
>> > This state loss is caused by ade_crtc_atomic_begin() not
>> > calling ade_ldi_set_mode(). With this patch applied
>> > resuming from Weston idle-timeout works well.
>> >
>> > Signed-off-by: Peter Griffin 
>> > Tested-by: John Stultz 
>> >
>>
>> Thanks Peter,
>> This patch looks good to me.
>> Reviewed-by: Xinliang Liu 
>>
>> @Sean, could you please help to apply to drm-misc if others has no more
>> comments, thanks.
>
> hisilicon isn't maintained in drm-misc, and you're the maintainer. This is
> not how it works. So either
> a) pick up the patch and send out a pull request to Dave Airlie
> b) move hisilicon over to drm-misc and become a drm-misc maintainer
> yourself. This needs a MAINTAINERS update to point the git tree at
> drm-misc.
>
> drm-misc maintainers don't maintain everyone else's driver as a service,
> that simply doesn't scale.

Sorry for my misunderstanding and thanks for pointing out that how
drm-misc works.
So I will pick up the patch and send a pull request.

Thanks,
Xinliang

>
> Thanks, Daniel
>
>>
>> Thanks,
>> Xinliang
>>
>>
>> > Cc: sta...@vger.kernel.org
>> > ---
>> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 3 +++
>> >  1 file changed, 3 insertions(+)
>> >
>> > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
>> > b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
>> > index c96c228..72c6357 100644
>> > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
>> > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
>> > @@ -519,9 +519,12 @@ static void ade_crtc_atomic_begin(struct drm_crtc
>> > *crtc,
>> >  {
>> > struct ade_crtc *acrtc = to_ade_crtc(crtc);
>> > struct ade_hw_ctx *ctx = acrtc->ctx;
>> > +   struct drm_display_mode *mode = &crtc->state->mode;
>> > +   struct drm_display_mode *adj_mode = &crtc->state->adjusted_mode;
>> >
>> > if (!ctx->power_on)
>> > (void)ade_power_up(ctx);
>> > +   ade_ldi_set_mode(acrtc, mode, adj_mode);
>> >  }
>> >
>> >  static void ade_crtc_atomic_flush(struct drm_crtc *crtc,
>> > --
>> > 2.7.4
>> >
>> > ___
>> > dri-devel mailing list
>> > dri-de...@lists.freedesktop.org
>> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>> >
>
>> ___
>> dri-devel mailing list
>> dri-de...@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch


Re: [PATCH] reset: hi6220: Set module license so that it can be loaded

2017-04-09 Thread Xinliang Liu
On 8 April 2017 at 15:18, Jeremy Linton  wrote:
> The hi6220_reset driver can be built as a standalone module
> yet it cannot be loaded because it depends on GPL exported symbols.
>
> Lets set the module license so that the module loads, and things like
> the on-board kirin drm starts working.
>
> Signed-off-by: Jeremy Linton 

reviewed-by: Xinliang Liu 

Thanks,
-xinliang

> ---
>  drivers/reset/hisilicon/hi6220_reset.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/reset/hisilicon/hi6220_reset.c 
> b/drivers/reset/hisilicon/hi6220_reset.c
> index 35ce53e..d5e5229 100644
> --- a/drivers/reset/hisilicon/hi6220_reset.c
> +++ b/drivers/reset/hisilicon/hi6220_reset.c
> @@ -155,3 +155,5 @@ static int __init hi6220_reset_init(void)
>  }
>
>  postcore_initcall(hi6220_reset_init);
> +
> +MODULE_LICENSE("GPL v2");
> --
> 2.10.2
>


Re: [PATCH -next] drm/hisilicon: Fix error handling of ade_power_up()

2016-07-25 Thread Xinliang Liu
On 19 July 2016 at 19:30, Wei Yongjun  wrote:
> From: Wei Yongjun 
>
> Fix the reset_control_deassert() fail and clk_prepare_enable() fail
> error handling of ade_power_up().
>
> Signed-off-by: Wei Yongjun 

Applied, thanks.

-xinliang

> ---
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 10 --
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c 
> b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index c3707d4..e2bd1e6 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -258,18 +258,24 @@ static int ade_power_up(struct ade_hw_ctx *ctx)
> ret = reset_control_deassert(ctx->reset);
> if (ret) {
> DRM_ERROR("failed to deassert reset\n");
> -   return ret;
> +   goto err_reset;
> }
>
> ret = clk_prepare_enable(ctx->ade_core_clk);
> if (ret) {
> DRM_ERROR("failed to enable ade_core_clk (%d)\n", ret);
> -   return ret;
> +   goto err_prepare_enable;
> }
>
> ade_init(ctx);
> ctx->power_on = true;
> return 0;
> +
> +err_prepare_enable:
> +   reset_control_assert(ctx->reset);
> +err_reset:
> +   clk_disable_unprepare(ctx->media_noc_clk);
> +   return ret;
>  }
>
>  static void ade_power_down(struct ade_hw_ctx *ctx)
>
>
> ___
> dri-devel mailing list
> dri-de...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH -next] drm/hisilicon: Fix return value check in ade_dts_parse()

2016-07-17 Thread Xinliang Liu
On 13 July 2016 at 20:43,   wrote:
> From: Wei Yongjun 
>
> In case of error, the function devm_clk_get() returns ERR_PTR()
> and never returns NULL. The NULL test in the return value check
> should be replaced with IS_ERR().
>
> Signed-off-by: Wei Yongjun 

Hi, thanks. This patch had already applied to drm-hisilicon-next.

> ---
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 12 ++--
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c 
> b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index 805f432..c3707d4 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -967,21 +967,21 @@ static int ade_dts_parse(struct platform_device *pdev, 
> struct ade_hw_ctx *ctx)
> }
>
> ctx->ade_core_clk = devm_clk_get(dev, "clk_ade_core");
> -   if (!ctx->ade_core_clk) {
> +   if (IS_ERR(ctx->ade_core_clk)) {
> DRM_ERROR("failed to parse clk ADE_CORE\n");
> -   return -ENODEV;
> +   return PTR_ERR(ctx->ade_core_clk);
> }
>
> ctx->media_noc_clk = devm_clk_get(dev, "clk_codec_jpeg");
> -   if (!ctx->media_noc_clk) {
> +   if (IS_ERR(ctx->media_noc_clk)) {
> DRM_ERROR("failed to parse clk CODEC_JPEG\n");
> -   return -ENODEV;
> +   return PTR_ERR(ctx->media_noc_clk);
> }
>
> ctx->ade_pix_clk = devm_clk_get(dev, "clk_ade_pix");
> -   if (!ctx->ade_pix_clk) {
> +   if (IS_ERR(ctx->ade_pix_clk)) {
> DRM_ERROR("failed to parse clk ADE_PIX\n");
> -   return -ENODEV;
> +   return PTR_ERR(ctx->ade_pix_clk);
> }
>
> return 0;
>
>
> ___
> dri-devel mailing list
> dri-de...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH -next] drm/hisilicon: Remove redundant dev_err call in ade_dts_parse()

2016-07-17 Thread Xinliang Liu
Hi, thanks. This patch had already applied to drm-hisilicon-next.


On 13 July 2016 at 20:44,   wrote:
> From: Wei Yongjun 
>
> There is a error message within devm_ioremap_resource
> already, so remove the dev_err call to avoid redundant
> error message.
>
> Signed-off-by: Wei Yongjun 
> ---
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c 
> b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index 805f432..3aea3bb 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -944,10 +944,8 @@ static int ade_dts_parse(struct platform_device *pdev, 
> struct ade_hw_ctx *ctx)
>
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> ctx->base = devm_ioremap_resource(dev, res);
> -   if (IS_ERR(ctx->base)) {
> -   DRM_ERROR("failed to remap ade io base\n");
> +   if (IS_ERR(ctx->base))
> return  PTR_ERR(ctx->base);
> -   }
>
> ctx->reset = devm_reset_control_get(dev, NULL);
> if (IS_ERR(ctx->reset))
>
>
>
>
> ___
> dri-devel mailing list
> dri-de...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH -next] drm/hisilicon: Fix non static symbol warning

2016-07-17 Thread Xinliang Liu
On 13 July 2016 at 20:43,   wrote:
> From: Wei Yongjun 
>
> Fixes the following sparse warning:
>
> drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c:107:5: warning:
>  symbol 'ade_get_channel_formats' was not declared. Should it be static?
>
> Signed-off-by: Wei Yongjun 

Thanks, applied to drm-hisilicon-next.

> ---
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c 
> b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index 805f432..2a913cc 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -104,7 +104,7 @@ static const u32 channel_formats1[] = {
> DRM_FORMAT_ABGR
>  };
>
> -u32 ade_get_channel_formats(u8 ch, const u32 **formats)
> +static u32 ade_get_channel_formats(u8 ch, const u32 **formats)
>  {
> switch (ch) {
> case ADE_CH1:
>
>
>
>
> ___
> dri-devel mailing list
> dri-de...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH v3 1/4] reset: hisilicon: Add media reset controller binding

2016-06-20 Thread Xinliang Liu
On 20 June 2016 at 20:07, Philipp Zabel  wrote:
> Am Montag, den 20.06.2016, 11:50 +0800 schrieb Xinliang Liu:
>>
>>  Required properties:
>> -- compatible: may be "hisilicon,hi6220-sysctrl"
>> +- compatible: should be one of the following:
>> +  - "hisilicon,hi6220-sysctrl", "syscon" : For peripheral reset controller.
>> +  - "hisilicon,hi6220-mediactrl", "syscon" : For media reset controller.
>>  - reg: should be register base and length as documented in the
>>datasheet
>>  - #reset-cells: 1, see below
>
> Thanks, I've applied all four patches to my reset/next branch.

Thanks, Philipp.

>
> You should eventually add the "syscon" compatible where it is still
> missing in Documentation/devicetree/bindings/arm/hisilicon/hisilicon.txt
> and Documentation/devicetree/bindings/clock/hi6220-clock.txt.

Will add the missing patches at other thread.

Thanks,
-xinliang

>
> regards
> Philipp
>


[PATCH v3 2/4] arm64: dts: hi6220: Add media subsystem reset dts

2016-06-19 Thread Xinliang Liu
Add media subsystem reset dts support.

Signed-off-by: Chen Feng 
Signed-off-by: Xinliang Liu 
---
 arch/arm64/boot/dts/hisilicon/hi6220.dtsi  | 2 ++
 include/dt-bindings/reset/hisi,hi6220-resets.h | 8 
 2 files changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi 
b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
index 189d21541f9c..c19b82799a34 100644
--- a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
+++ b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
@@ -5,6 +5,7 @@
  */
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -252,6 +253,7 @@
compatible = "hisilicon,hi6220-mediactrl", "syscon";
reg = <0x0 0xf441 0x0 0x1000>;
#clock-cells = <1>;
+   #reset-cells = <1>;
};
 
pm_ctrl: pm_ctrl@f7032000 {
diff --git a/include/dt-bindings/reset/hisi,hi6220-resets.h 
b/include/dt-bindings/reset/hisi,hi6220-resets.h
index ca08a7e5248e..322ec5335b65 100644
--- a/include/dt-bindings/reset/hisi,hi6220-resets.h
+++ b/include/dt-bindings/reset/hisi,hi6220-resets.h
@@ -64,4 +64,12 @@
 #define PERIPH_RSDIST9_CARM_SOCDBG  0x507
 #define PERIPH_RSDIST9_CARM_ETM 0x508
 
+#define MEDIA_G3D   0
+#define MEDIA_CODEC_VPU 2
+#define MEDIA_CODEC_JPEG3
+#define MEDIA_ISP   4
+#define MEDIA_ADE   5
+#define MEDIA_MMU   6
+#define MEDIA_XG2RAM1   7
+
 #endif /*_DT_BINDINGS_RESET_CONTROLLER_HI6220*/
-- 
2.8.3



[PATCH v3 1/4] reset: hisilicon: Add media reset controller binding

2016-06-19 Thread Xinliang Liu
Add compatible for media reset controller.

Actually, there are two reset controllers in hi6220 SoC:
The peripheral reset controller bits are part of sysctrl registers.
The media reset controller bits are part of mediactrl registers.
So for the compatible part, it should contain "syscon" for both peripheral
and media reset controller.

Signed-off-by: Xinliang Liu 
---
 Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt 
b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
index e0b185a944ba..c25da39df707 100644
--- a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
+++ b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
@@ -8,7 +8,9 @@ The reset controller registers are part of the system-ctl block 
on
 hi6220 SoC.
 
 Required properties:
-- compatible: may be "hisilicon,hi6220-sysctrl"
+- compatible: should be one of the following:
+  - "hisilicon,hi6220-sysctrl", "syscon" : For peripheral reset controller.
+  - "hisilicon,hi6220-mediactrl", "syscon" : For media reset controller.
 - reg: should be register base and length as documented in the
   datasheet
 - #reset-cells: 1, see below
-- 
2.8.3



[PATCH v3 3/4] reset: hisilicon: Change to syscon register access

2016-06-19 Thread Xinliang Liu
From: Chen Feng 

There are two reset controllers in hi6220 SoC:
The peripheral reset controller bits are part of sysctrl registers.
The media reset controller bits are part of mediactrl registers.

So change register access to syscon way.
And rename current reset controller to peripheral one.

Signed-off-by: Chen Feng 
Signed-off-by: Xia Qing 
Signed-off-by: Xinliang Liu 
---
 drivers/reset/hisilicon/hi6220_reset.c | 85 ++
 1 file changed, 45 insertions(+), 40 deletions(-)

diff --git a/drivers/reset/hisilicon/hi6220_reset.c 
b/drivers/reset/hisilicon/hi6220_reset.c
index 8f55fd4a2630..686fea9e2c54 100644
--- a/drivers/reset/hisilicon/hi6220_reset.c
+++ b/drivers/reset/hisilicon/hi6220_reset.c
@@ -1,7 +1,8 @@
 /*
  * Hisilicon Hi6220 reset controller driver
  *
- * Copyright (c) 2015 Hisilicon Limited.
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2015-2016 Hisilicon Limited.
  *
  * Author: Feng Chen 
  *
@@ -15,81 +16,85 @@
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
 #include 
 #include 
 #include 
 
-#define ASSERT_OFFSET0x300
-#define DEASSERT_OFFSET  0x304
-#define MAX_INDEX0x509
+#define PERIPH_ASSERT_OFFSET  0x300
+#define PERIPH_DEASSERT_OFFSET0x304
+#define PERIPH_MAX_INDEX  0x509
 
 #define to_reset_data(x) container_of(x, struct hi6220_reset_data, rc_dev)
 
 struct hi6220_reset_data {
-   void __iomem*assert_base;
-   void __iomem*deassert_base;
-   struct reset_controller_dev rc_dev;
+   struct reset_controller_dev rc_dev;
+   struct regmap *regmap;
 };
 
-static int hi6220_reset_assert(struct reset_controller_dev *rc_dev,
-  unsigned long idx)
+static int hi6220_peripheral_assert(struct reset_controller_dev *rc_dev,
+   unsigned long idx)
 {
struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
+   u32 bank = idx >> 8;
+   u32 offset = idx & 0xff;
+   u32 reg = PERIPH_ASSERT_OFFSET + bank * 0x10;
 
-   int bank = idx >> 8;
-   int offset = idx & 0xff;
-
-   writel(BIT(offset), data->assert_base + (bank * 0x10));
-
-   return 0;
+   return regmap_write(regmap, reg, BIT(offset));
 }
 
-static int hi6220_reset_deassert(struct reset_controller_dev *rc_dev,
-unsigned long idx)
+static int hi6220_peripheral_deassert(struct reset_controller_dev *rc_dev,
+ unsigned long idx)
 {
struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
+   u32 bank = idx >> 8;
+   u32 offset = idx & 0xff;
+   u32 reg = PERIPH_DEASSERT_OFFSET + bank * 0x10;
 
-   int bank = idx >> 8;
-   int offset = idx & 0xff;
-
-   writel(BIT(offset), data->deassert_base + (bank * 0x10));
-
-   return 0;
+   return regmap_write(regmap, reg, BIT(offset));
 }
 
-static const struct reset_control_ops hi6220_reset_ops = {
-   .assert = hi6220_reset_assert,
-   .deassert = hi6220_reset_deassert,
+static const struct reset_control_ops hi6220_peripheral_reset_ops = {
+   .assert = hi6220_peripheral_assert,
+   .deassert = hi6220_peripheral_deassert,
 };
 
 static int hi6220_reset_probe(struct platform_device *pdev)
 {
+   struct device_node *np = pdev->dev.of_node;
+   struct device *dev = &pdev->dev;
struct hi6220_reset_data *data;
-   struct resource *res;
-   void __iomem *src_base;
+   struct regmap *regmap;
 
-   data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+   data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
if (!data)
return -ENOMEM;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   src_base = devm_ioremap_resource(&pdev->dev, res);
-   if (IS_ERR(src_base))
-   return PTR_ERR(src_base);
+   regmap = syscon_node_to_regmap(np);
+   if (IS_ERR(regmap)) {
+   dev_err(dev, "failed to get reset controller regmap\n");
+   return PTR_ERR(regmap);
+   }
 
-   data->assert_base = src_base + ASSERT_OFFSET;
-   data->deassert_base = src_base + DEASSERT_OFFSET;
-   data->rc_dev.nr_resets = MAX_INDEX;
-   data->rc_dev.ops = &hi6220_reset_ops;
-   data->rc_dev.of_node = pdev->dev.of_node;
+   data->regmap = regmap;
+   data->rc_dev.of_node = np;
+   data->rc_dev.ops = &hi6220_peripheral_reset_ops;
+   data->rc_dev.nr_resets = PERIPH_MAX_INDEX;
 
return reset_controller_register(&data->rc_dev);
 }
 
 static const struct of_device_id hi6220_reset_match[] = {
-   { .compatible = "hisilicon,hi6220-sysctrl" },
- 

[PATCH v3 0/4] Add hi6220 media subsystem reset controller driver

2016-06-19 Thread Xinliang Liu
This patch set adds support for HiSilicon hi6220 SoC media subsystem
reset controller.

Change history:
v3:
- Split regmap register access change and mediactrl support.

v2:
- Update binding document for media reset controller.
- Separate peripheral and media reset controller ops.

Chen Feng (1):
  reset: hisilicon: Change to syscon register access

Xinliang Liu (3):
  reset: hisilicon: Add media reset controller binding
  arm64: dts: hi6220: Add media subsystem reset dts
  reset: hisilicon: Add hi6220 media subsystem reset support

 .../bindings/reset/hisilicon,hi6220-reset.txt  |   4 +-
 arch/arm64/boot/dts/hisilicon/hi6220.dtsi  |   2 +
 drivers/reset/hisilicon/hi6220_reset.c | 122 +++--
 include/dt-bindings/reset/hisi,hi6220-resets.h |   8 ++
 4 files changed, 99 insertions(+), 37 deletions(-)

-- 
2.8.3



[PATCH v3 4/4] reset: hisilicon: Add hi6220 media subsystem reset support

2016-06-19 Thread Xinliang Liu
Add hi6220 media subsystem reset controller.

Signed-off-by: Chen Feng 
Signed-off-by: Xia Qing 
Signed-off-by: Xinliang Liu 
---
 drivers/reset/hisilicon/hi6220_reset.c | 49 --
 1 file changed, 47 insertions(+), 2 deletions(-)

diff --git a/drivers/reset/hisilicon/hi6220_reset.c 
b/drivers/reset/hisilicon/hi6220_reset.c
index 686fea9e2c54..35ce53edabf9 100644
--- a/drivers/reset/hisilicon/hi6220_reset.c
+++ b/drivers/reset/hisilicon/hi6220_reset.c
@@ -27,8 +27,17 @@
 #define PERIPH_DEASSERT_OFFSET0x304
 #define PERIPH_MAX_INDEX  0x509
 
+#define SC_MEDIA_RSTEN0x052C
+#define SC_MEDIA_RSTDIS   0x0530
+#define MEDIA_MAX_INDEX   8
+
 #define to_reset_data(x) container_of(x, struct hi6220_reset_data, rc_dev)
 
+enum hi6220_reset_ctrl_type {
+   PERIPHERAL,
+   MEDIA,
+};
+
 struct hi6220_reset_data {
struct reset_controller_dev rc_dev;
struct regmap *regmap;
@@ -63,10 +72,34 @@ static const struct reset_control_ops 
hi6220_peripheral_reset_ops = {
.deassert = hi6220_peripheral_deassert,
 };
 
+static int hi6220_media_assert(struct reset_controller_dev *rc_dev,
+  unsigned long idx)
+{
+   struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
+
+   return regmap_write(regmap, SC_MEDIA_RSTEN, BIT(idx));
+}
+
+static int hi6220_media_deassert(struct reset_controller_dev *rc_dev,
+unsigned long idx)
+{
+   struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
+
+   return regmap_write(regmap, SC_MEDIA_RSTDIS, BIT(idx));
+}
+
+static const struct reset_control_ops hi6220_media_reset_ops = {
+   .assert = hi6220_media_assert,
+   .deassert = hi6220_media_deassert,
+};
+
 static int hi6220_reset_probe(struct platform_device *pdev)
 {
struct device_node *np = pdev->dev.of_node;
struct device *dev = &pdev->dev;
+   enum hi6220_reset_ctrl_type type;
struct hi6220_reset_data *data;
struct regmap *regmap;
 
@@ -74,6 +107,8 @@ static int hi6220_reset_probe(struct platform_device *pdev)
if (!data)
return -ENOMEM;
 
+   type = (enum hi6220_reset_ctrl_type)of_device_get_match_data(dev);
+
regmap = syscon_node_to_regmap(np);
if (IS_ERR(regmap)) {
dev_err(dev, "failed to get reset controller regmap\n");
@@ -82,8 +117,13 @@ static int hi6220_reset_probe(struct platform_device *pdev)
 
data->regmap = regmap;
data->rc_dev.of_node = np;
-   data->rc_dev.ops = &hi6220_peripheral_reset_ops;
-   data->rc_dev.nr_resets = PERIPH_MAX_INDEX;
+   if (type == MEDIA) {
+   data->rc_dev.ops = &hi6220_media_reset_ops;
+   data->rc_dev.nr_resets = MEDIA_MAX_INDEX;
+   } else {
+   data->rc_dev.ops = &hi6220_peripheral_reset_ops;
+   data->rc_dev.nr_resets = PERIPH_MAX_INDEX;
+   }
 
return reset_controller_register(&data->rc_dev);
 }
@@ -91,6 +131,11 @@ static int hi6220_reset_probe(struct platform_device *pdev)
 static const struct of_device_id hi6220_reset_match[] = {
{
.compatible = "hisilicon,hi6220-sysctrl",
+   .data = (void *)PERIPHERAL,
+   },
+   {
+   .compatible = "hisilicon,hi6220-mediactrl",
+   .data = (void *)MEDIA,
},
{ /* sentinel */ },
 };
-- 
2.8.3



Re: [PATCH -next] drm/hisilicon: Fix return value check in ade_dts_parse()

2016-06-19 Thread Xinliang Liu
Hi,

On 18 June 2016 at 02:29,   wrote:
> From: Wei Yongjun 
>
> In case of error, the function devm_clk_get() returns ERR_PTR()
> and never returns NULL. The NULL test in the return value check
> should be replaced with IS_ERR().
>
> Signed-off-by: Wei Yongjun 

Applied to drm-hisilicon-next. Thanks.

-xinliang

> ---
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 12 ++--
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c 
> b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index ed76baad..16834f4 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -965,21 +965,21 @@ static int ade_dts_parse(struct platform_device *pdev, 
> struct ade_hw_ctx *ctx)
> }
>
> ctx->ade_core_clk = devm_clk_get(dev, "clk_ade_core");
> -   if (!ctx->ade_core_clk) {
> +   if (IS_ERR(ctx->ade_core_clk)) {
> DRM_ERROR("failed to parse clk ADE_CORE\n");
> -   return -ENODEV;
> +   return PTR_ERR(ctx->ade_core_clk);
> }
>
> ctx->media_noc_clk = devm_clk_get(dev, "clk_codec_jpeg");
> -   if (!ctx->media_noc_clk) {
> +   if (IS_ERR(ctx->media_noc_clk)) {
> DRM_ERROR("failed to parse clk CODEC_JPEG\n");
> -   return -ENODEV;
> +   return PTR_ERR(ctx->media_noc_clk);
> }
>
> ctx->ade_pix_clk = devm_clk_get(dev, "clk_ade_pix");
> -   if (!ctx->ade_pix_clk) {
> +   if (IS_ERR(ctx->ade_pix_clk)) {
> DRM_ERROR("failed to parse clk ADE_PIX\n");
> -   return -ENODEV;
> +   return PTR_ERR(ctx->ade_pix_clk);
> }
>
> return 0;
>
>
>
>
>
> ___
> dri-devel mailing list
> dri-de...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH v2 3/3] reset: hisilicon: Add hi6220 media subsystem reset support

2016-06-16 Thread Xinliang Liu
Hi,

On 16 June 2016 at 18:52, Philipp Zabel  wrote:
> Am Donnerstag, den 16.06.2016, 18:30 +0800 schrieb Xinliang Liu:
>> From: Chen Feng 
>>
>> Add media subsystem reset support for hi6220.
>
> Please split the regmap register access change and the addition of
> mediactrl support into separate patches.

OK, will do this in next version patch.

Thanks,
-xinliang

>
> regards
> Philipp
>


Re: [PATCH v2 1/3] reset: hisilicon: Add media reset controller binding

2016-06-16 Thread Xinliang Liu
Hi,

On 16 June 2016 at 18:46, Philipp Zabel  wrote:
> Am Donnerstag, den 16.06.2016, 18:29 +0800 schrieb Xinliang Liu:
>> Add compatible for media reset controller.
>>
>> Signed-off-by: Xinliang Liu 
>> ---
>>  Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt | 4 +++-
>>  1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git 
>> a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt 
>> b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
>> index e0b185a944ba..c25da39df707 100644
>> --- a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
>> +++ b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
>> @@ -8,7 +8,9 @@ The reset controller registers are part of the system-ctl 
>> block on
>>  hi6220 SoC.
>>
>>  Required properties:
>> -- compatible: may be "hisilicon,hi6220-sysctrl"
>> +- compatible: should be one of the following:
>> +  - "hisilicon,hi6220-sysctrl", "syscon" : For peripheral reset controller.
>> +  - "hisilicon,hi6220-mediactrl", "syscon" : For media reset controller.
>
> This does more than the commit message says. Why do you add syscon here?
> Do the sysctrl and mediactrl register ranges have bits other than reset
> controls that will be used by other drivers via the syscon mechanism?

yes, that's right. Actually, ahead of the Required properties part,
there is the sentence description "The reset controller registers are
part of the system-ctl block"
has said that reset bits are inside system controller.

Thanks,
-xinliang

>
> regards
> Philipp
>


[PATCH v2 2/3] arm64: dts: hi6220: Add media subsystem reset dts

2016-06-16 Thread Xinliang Liu
Add media subsystem reset support.

Signed-off-by: Chen Feng 
Signed-off-by: Xinliang Liu 
---
 arch/arm64/boot/dts/hisilicon/hi6220.dtsi  | 2 ++
 include/dt-bindings/reset/hisi,hi6220-resets.h | 8 
 2 files changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi 
b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
index 189d21541f9c..c19b82799a34 100644
--- a/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
+++ b/arch/arm64/boot/dts/hisilicon/hi6220.dtsi
@@ -5,6 +5,7 @@
  */
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -252,6 +253,7 @@
compatible = "hisilicon,hi6220-mediactrl", "syscon";
reg = <0x0 0xf441 0x0 0x1000>;
#clock-cells = <1>;
+   #reset-cells = <1>;
};
 
pm_ctrl: pm_ctrl@f7032000 {
diff --git a/include/dt-bindings/reset/hisi,hi6220-resets.h 
b/include/dt-bindings/reset/hisi,hi6220-resets.h
index ca08a7e5248e..322ec5335b65 100644
--- a/include/dt-bindings/reset/hisi,hi6220-resets.h
+++ b/include/dt-bindings/reset/hisi,hi6220-resets.h
@@ -64,4 +64,12 @@
 #define PERIPH_RSDIST9_CARM_SOCDBG  0x507
 #define PERIPH_RSDIST9_CARM_ETM 0x508
 
+#define MEDIA_G3D   0
+#define MEDIA_CODEC_VPU 2
+#define MEDIA_CODEC_JPEG3
+#define MEDIA_ISP   4
+#define MEDIA_ADE   5
+#define MEDIA_MMU   6
+#define MEDIA_XG2RAM1   7
+
 #endif /*_DT_BINDINGS_RESET_CONTROLLER_HI6220*/
-- 
2.8.3



[PATCH v2 1/3] reset: hisilicon: Add media reset controller binding

2016-06-16 Thread Xinliang Liu
Add compatible for media reset controller.

Signed-off-by: Xinliang Liu 
---
 Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt 
b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
index e0b185a944ba..c25da39df707 100644
--- a/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
+++ b/Documentation/devicetree/bindings/reset/hisilicon,hi6220-reset.txt
@@ -8,7 +8,9 @@ The reset controller registers are part of the system-ctl block 
on
 hi6220 SoC.
 
 Required properties:
-- compatible: may be "hisilicon,hi6220-sysctrl"
+- compatible: should be one of the following:
+  - "hisilicon,hi6220-sysctrl", "syscon" : For peripheral reset controller.
+  - "hisilicon,hi6220-mediactrl", "syscon" : For media reset controller.
 - reg: should be register base and length as documented in the
   datasheet
 - #reset-cells: 1, see below
-- 
2.8.3



[PATCH v2 0/3] Add hi6220 media subsystem reset controller driver

2016-06-16 Thread Xinliang Liu
This patch set adds support for HiSilicon hi6220 SoC media subsystem
reset controller.

This v2 patch set is based on previous v1 patch set:
https://lkml.org/lkml/2016/2/21/238

Change history:
v2:
- Update binding document for media reset controller.
- Separate peripheral and media reset controller ops.

Chen Feng (1):
  reset: hisilicon: Add hi6220 media subsystem reset support

Xinliang Liu (2):
  reset: hisilicon: Add media reset controller binding
  arm64: dts: hi6220: Add media subsystem reset dts

 .../bindings/reset/hisilicon,hi6220-reset.txt  |   4 +-
 arch/arm64/boot/dts/hisilicon/hi6220.dtsi  |   2 +
 drivers/reset/hisilicon/hi6220_reset.c | 122 +++--
 include/dt-bindings/reset/hisi,hi6220-resets.h |   8 ++
 4 files changed, 99 insertions(+), 37 deletions(-)

-- 
2.8.3



[PATCH v2 3/3] reset: hisilicon: Add hi6220 media subsystem reset support

2016-06-16 Thread Xinliang Liu
From: Chen Feng 

Add media subsystem reset support for hi6220.

Signed-off-by: Chen Feng 
Signed-off-by: Xia Qing 
Signed-off-by: Xinliang Liu 
---
 drivers/reset/hisilicon/hi6220_reset.c | 122 +++--
 1 file changed, 86 insertions(+), 36 deletions(-)

diff --git a/drivers/reset/hisilicon/hi6220_reset.c 
b/drivers/reset/hisilicon/hi6220_reset.c
index 8f55fd4a2630..35ce53edabf9 100644
--- a/drivers/reset/hisilicon/hi6220_reset.c
+++ b/drivers/reset/hisilicon/hi6220_reset.c
@@ -1,7 +1,8 @@
 /*
  * Hisilicon Hi6220 reset controller driver
  *
- * Copyright (c) 2015 Hisilicon Limited.
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2015-2016 Hisilicon Limited.
  *
  * Author: Feng Chen 
  *
@@ -15,81 +16,130 @@
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
 #include 
 #include 
 #include 
 
-#define ASSERT_OFFSET0x300
-#define DEASSERT_OFFSET  0x304
-#define MAX_INDEX0x509
+#define PERIPH_ASSERT_OFFSET  0x300
+#define PERIPH_DEASSERT_OFFSET0x304
+#define PERIPH_MAX_INDEX  0x509
+
+#define SC_MEDIA_RSTEN0x052C
+#define SC_MEDIA_RSTDIS   0x0530
+#define MEDIA_MAX_INDEX   8
 
 #define to_reset_data(x) container_of(x, struct hi6220_reset_data, rc_dev)
 
+enum hi6220_reset_ctrl_type {
+   PERIPHERAL,
+   MEDIA,
+};
+
 struct hi6220_reset_data {
-   void __iomem*assert_base;
-   void __iomem*deassert_base;
-   struct reset_controller_dev rc_dev;
+   struct reset_controller_dev rc_dev;
+   struct regmap *regmap;
 };
 
-static int hi6220_reset_assert(struct reset_controller_dev *rc_dev,
-  unsigned long idx)
+static int hi6220_peripheral_assert(struct reset_controller_dev *rc_dev,
+   unsigned long idx)
 {
struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
+   u32 bank = idx >> 8;
+   u32 offset = idx & 0xff;
+   u32 reg = PERIPH_ASSERT_OFFSET + bank * 0x10;
 
-   int bank = idx >> 8;
-   int offset = idx & 0xff;
+   return regmap_write(regmap, reg, BIT(offset));
+}
 
-   writel(BIT(offset), data->assert_base + (bank * 0x10));
+static int hi6220_peripheral_deassert(struct reset_controller_dev *rc_dev,
+ unsigned long idx)
+{
+   struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
+   u32 bank = idx >> 8;
+   u32 offset = idx & 0xff;
+   u32 reg = PERIPH_DEASSERT_OFFSET + bank * 0x10;
 
-   return 0;
+   return regmap_write(regmap, reg, BIT(offset));
 }
 
-static int hi6220_reset_deassert(struct reset_controller_dev *rc_dev,
-unsigned long idx)
+static const struct reset_control_ops hi6220_peripheral_reset_ops = {
+   .assert = hi6220_peripheral_assert,
+   .deassert = hi6220_peripheral_deassert,
+};
+
+static int hi6220_media_assert(struct reset_controller_dev *rc_dev,
+  unsigned long idx)
 {
struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
 
-   int bank = idx >> 8;
-   int offset = idx & 0xff;
+   return regmap_write(regmap, SC_MEDIA_RSTEN, BIT(idx));
+}
 
-   writel(BIT(offset), data->deassert_base + (bank * 0x10));
+static int hi6220_media_deassert(struct reset_controller_dev *rc_dev,
+unsigned long idx)
+{
+   struct hi6220_reset_data *data = to_reset_data(rc_dev);
+   struct regmap *regmap = data->regmap;
 
-   return 0;
+   return regmap_write(regmap, SC_MEDIA_RSTDIS, BIT(idx));
 }
 
-static const struct reset_control_ops hi6220_reset_ops = {
-   .assert = hi6220_reset_assert,
-   .deassert = hi6220_reset_deassert,
+static const struct reset_control_ops hi6220_media_reset_ops = {
+   .assert = hi6220_media_assert,
+   .deassert = hi6220_media_deassert,
 };
 
 static int hi6220_reset_probe(struct platform_device *pdev)
 {
+   struct device_node *np = pdev->dev.of_node;
+   struct device *dev = &pdev->dev;
+   enum hi6220_reset_ctrl_type type;
struct hi6220_reset_data *data;
-   struct resource *res;
-   void __iomem *src_base;
+   struct regmap *regmap;
 
-   data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+   data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
if (!data)
return -ENOMEM;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   src_base = devm_ioremap_resource(&pdev->dev, res);
-   if (IS_ERR(src_base))
-   return PTR_ERR(src_base);
+   type = (enum hi6220_reset_ctrl_type)of_device_get_match_data(dev);
+
+   regmap = syscon_node_to_reg

Re: [path v2 0/7] Add DRM driver for Hisilicon Hibmc

2016-05-29 Thread Xinliang Liu
Hi Rongrong,

It seems that you haven't run the checkpatch script.
Please run this script to check your patches before you send them. Like bellow:
$ cd yourkerneldir
$ ./scripts/checkpatch.pl --strict yourpatches

Thanks,
-xinliang

On 29 May 2016 at 17:40, Rongrong Zou  wrote:
> This patch set adds a new drm driver for Hisilicon Hibmc. Hibmc is a
> base board management controller, usually it is used on server for
> Out-of-band management purpose. In this patch set, we just support basic
> function for Hibmc display subsystem. Hibmc display subsystem is connected
> to host CPU by PCIe as blow:
>
> +--+   +--+
> |  | PCIe  |  Hibmc   |
> |host CPU( |<->| display  |
> |arm64,x86)|   |subsystem |
> +--+   +--+
>
> Hardware Detail for Hibmc display subsystem
> ---
>
>   The display subsystem of Hibmc is show as bellow:
>   ++  ++  ++ ++
>   ||  ||  || ||
>   | FB |->| DE |->|VDAC|>|external|
>   ||  ||  || | VGA|
>   ++  ++  ++ ++
>
>   -DE(Display Engine) is the display controller.
>   -VDAC(Video Digital-to-Analog converter) converts the RGB diaital data
>   stream from DE to VGA analog signals.
>
> Change History
> 
>
> Changes in v2:
>   -Remove self-defined macros for bit operations.
>   -Remove unused register.
>   -Replace those deprecated functions with new version of them.
>   -use drm_connector_register_all() to register connector after
>drm_dev_register().
>
> The patch v1 is at
> https://lists.freedesktop.org/archives/dri-devel/2016-February/101921.html
> Sorry for too late sending.
>
>
> Rongrong Zou (7):
>   idrm/hisilicon/hibmc: Add hisilicon hibmc drm master driver
>   drm/hisilicon/hibmc: Add plane for DE
>   drm/hisilicon/hibmc: Add crtc for DE
>   drm/hisilicon/hibmc: Add encoder for VDAC
>   drm/hisilicon/hibmc: Add connector for VDAC
>   drm/hisilicon/hibmc: Add support for frame buffer
>   drm/hisilicon/hibmc: Add maintainer for Hibmc DRM
>
>  MAINTAINERS   |   7 +
>  drivers/gpu/drm/hisilicon/Kconfig |   1 +
>  drivers/gpu/drm/hisilicon/Makefile|   3 +-
>  drivers/gpu/drm/hisilicon/hibmc/Kconfig   |  13 +
>  drivers/gpu/drm/hisilicon/hibmc/Makefile  |   4 +
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c| 477 
> ++
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.h|  29 ++
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c   | 399 ++
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   |  64 +++
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 286 +
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_power.c |  91 +
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_power.h |  28 ++
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h  | 214 ++
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c  | 174 
>  14 files changed, 1789 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/Kconfig
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/Makefile
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.h
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_power.c
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_power.h
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h
>  create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
>
> --
> 1.9.1
>


Re: [path v2 7/7] drm/hisilicon/hibmc: Add maintainer for Hibmc DRM

2016-05-29 Thread Xinliang Liu
On 29 May 2016 at 17:40, Rongrong Zou  wrote:
> Signed-off-by: Rongrong Zou 
> Signed-off-by: Jianhua Li 
> ---
>  MAINTAINERS | 7 +++
>  1 file changed, 7 insertions(+)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index f466673..a8a62e0 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3957,6 +3957,13 @@ T:   git git://github.com/patjak/drm-gma500
>  S: Maintained
>  F: drivers/gpu/drm/gma500/
>
> +DRM DRIVERS FOR HIBMC
> +M: lijianhua 
> +M: Rongrong Zou 
> +L: dri-de...@lists.freedesktop.org
> +S: Maintained
> +F: drivers/gpu/drm/hisilicon/hibmc

Please add a "/" ad the end of this line.
And move this part into DRM DRIVERS FOR HISILICON

Thanks,
-xinliang

> +
>  DRM DRIVERS FOR HISILICON
>  M: Xinliang Liu 
>  R: Xinwei Kong 
> --
> 1.9.1
>


Re: [PATCH v7 0/5] Add mipi dsi support for rk3288

2016-02-24 Thread Xinliang Liu
On 8 February 2016 at 18:12, Archit Taneja  wrote:
> Hi,
>
> On 01/06/2016 09:33 AM, Chris Zhong wrote:
>>
>>
>> The rk3288 MIPI DSI is a Synopsys DesignWare MIPI DSI host controller
>> IP. This series adds support for a Synopsys DesignWare MIPI DSI host
>> controller DRM driver.
>>
>> The MIPI DSI feature is tested on rk3288 evb board, backport them to
>> chrome os kernel chrome_v3.14, and it can display normally.
>>
>> This patchset is base on the patchset from ying@freescale.com.
>> 
>>
>> According to the suggestion from Thierry, I have get rid of the bridge,
>> and register the encoder & connecter in drm/rockchip/dw-mipi-dsi.c.
>
>
> I've raised this question too late, but what was the reason to not
> implement the DSI block as a bridge driver?
>
> The drm/hisilicon IP seems to use a very similar DSI Designware IP (the
> register offsets seems to be the same). There is a good potential of
> re-use here by different kms drivers here the way it's already done for
> DW HDMI and the analogix DP driver that's in review process.

yes, Hisilicon's hi6220 SoC use a Designware DSI Controller IP similar
to rockchip.
Maybe the version number is different.
I notice this recently when I am doing the upstream of hi6220's DRM driver.

And I have a look at Ying liu's original patches. It seems that it is
implemented in bridge.
His patches were sent in the early of last year, I can't get all the
background easily.
I wonder why his patches was not accecpted? What's the problem? And
why Thierry suggested get rid of bridge?

Thanks,
-xinliang

>
> Archit
>
>
>> After backport below patches from linux-next, I can merge this serial into
>> Dave's drm-next branch.
>>
>> 94d5d6a0fbf3 clk: rockchip: add an id for rk3288 crypto clk
>> c6d49fbcfcc4 clk: rockchip: add id for mipidsi sclk on rk3288
>> a2f4c560f18e clk: rockchip: add mipidsi clock on rk3288
>> 69c923743640 ARM: dts: rockchip: correct the name of REG8 for
>> rk3288-evb-act8846
>> 662513a14c9d ARM: dts: rockchip: add 2 regulators for rk3288-evb-act8846
>> b04061e6599b ARM: dts: rockchip: move the public part to rk3288-evb common
>>
>>
>> Changes in v7:
>> - modify the config to tristate for modules build (Mark Yao)
>> - Pass NULL 'name' to drm_encoder_init() to fix compile err (Mark Yao)
>> - Move the lcd_en control to act8846 dts
>>
>> Changes in v6:
>> - update the document, since the bridge device has been deleted.
>> - move the mipi_en gate to ockchip_drm_crtc_mode_config
>> - Remove the atomic feature check (Mark Yao)
>> - Add atomic API support (Heiko Stübne)
>> - Do not use bridge driver (Thierry Reding)
>> - Optimization the phy init sequence
>>
>> Changes in v5:
>> - modify the clk name to SCLK_MIPIDSI_24M
>> - add a blank line befor lcd_en
>>
>> Changes in v4:
>> - use clk_round_rate to check the clock rate in vop_crtc_mode_fixup
>>
>> Changes in v3:
>> - move dw_mipi_dsi_rockchip.txt to bindings/display/rockchip/
>>
>> Chris Zhong (5):
>>drm/rockchip: return a true clock rate to adjusted_mode
>>Documentation: dt-bindings: Add bindings for rk3288 DW MIPI DSI driver
>>drm: rockchip: Support Synopsys DW MIPI DSI
>>ARM: dts: rockchip: add rk3288 mipi_dsi nodes
>>ARM: dts: rockchip: add support mipi panel tv080wum-nl0
>>
>>   .../display/rockchip/dw_mipi_dsi_rockchip.txt  |   60 +
>>   arch/arm/boot/dts/rk3288-evb-act8846.dts   |2 +
>>   arch/arm/boot/dts/rk3288-evb.dtsi  |   12 +-
>>   arch/arm/boot/dts/rk3288.dtsi  |   39 +
>>   drivers/gpu/drm/rockchip/Kconfig   |   10 +
>>   drivers/gpu/drm/rockchip/Makefile  |1 +
>>   drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 1196
>> 
>>   drivers/gpu/drm/rockchip/rockchip_drm_vop.c|8 +
>>   8 files changed, 1327 insertions(+), 1 deletion(-)
>>   create mode 100644
>> Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt
>>   create mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi.c
>>
>
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> hosted by The Linux Foundation


[PATCH] drm/cma-helper: Add multi buffer support for cma fbdev

2015-09-14 Thread Xinliang Liu
This patch add a config to support to create multi buffer for cma fbdev. Such as
double buffer and triple buffer.

Cma fbdev is convient to add a legency fbdev. And still many Android devices use
fbdev now and at least double buffer is needed for these Android devices, so
that a buffer flip can be operated. It will need some time for Android device
vendors to abondon legency fbdev. So multi buffer for fbdev is needed.

Signed-off-by: Xinliang Liu 
---
 drivers/gpu/drm/Kconfig | 8 
 drivers/gpu/drm/drm_fb_cma_helper.c | 8 +++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 1a0a8df..577f790 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -97,6 +97,14 @@ config DRM_KMS_CMA_HELPER
help
  Choose this if you need the KMS CMA helper functions
 
+config DRM_CMA_FBDEV_BUFFER_NUM
+   int "Cma Fbdev Buffer Number"
+   depends on DRM_KMS_CMA_HELPER
+   default 1
+   help
+ Defines the buffer number of cma fbdev.  Default is one buffer.
+ For double buffer please set to 2 and 3 for triple buffer.
+
 source "drivers/gpu/drm/i2c/Kconfig"
 
 config DRM_TDFX
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c 
b/drivers/gpu/drm/drm_fb_cma_helper.c
index c19a625..26051b8 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -25,6 +25,12 @@
 #include 
 #include 
 
+#ifdef CONFIG_DRM_CMA_FBDEV_BUFFER_NUM
+#define FBDEV_BUFFER_NUM CONFIG_DRM_CMA_FBDEV_BUFFER_NUM
+#else
+#define FBDEV_BUFFER_NUM 1
+#endif
+
 struct drm_fb_cma {
struct drm_framebuffer  fb;
struct drm_gem_cma_object   *obj[4];
@@ -253,7 +259,7 @@ static int drm_fbdev_cma_create(struct drm_fb_helper 
*helper,
bytes_per_pixel = DIV_ROUND_UP(sizes->surface_bpp, 8);
 
mode_cmd.width = sizes->surface_width;
-   mode_cmd.height = sizes->surface_height;
+   mode_cmd.height = sizes->surface_height * FBDEV_BUFFER_NUM;
mode_cmd.pitches[0] = sizes->surface_width * bytes_per_pixel;
mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp,
sizes->surface_depth);
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] drm/crtc: Add a helper func to get a registered crtc from its index

2015-08-24 Thread Xinliang Liu
This patch add a helper func to get a registered crtc from its index.
In some case, where we know the crtc's index and we want to know the
crtc too.

For example, the enable_vblank func of struct drm_driver:
In the implementation of this func, we know the index of the crtc but
we want to know the crtc. This helper func can get the crtc easily.
A sample impelmentation of enable_vblank is as shown as bellow:

int hisi_drm_crtc_enable_vblank(struct drm_device *dev, int c)
{
struct drm_crtc *crtc = drm_get_crtc_from_index(dev, c);
struct hisi_crtc *hcrtc = to_hisi_crtc(crtc);
struct hisi_crtc_ops *ops = hcrtc->ops;
int ret = 0;

if (ops->enable_vblank)
ret = ops->enable_vblank(hcrtc);

return ret;
}

Signed-off-by: Xinliang Liu 
---
 drivers/gpu/drm/drm_crtc.c | 25 +
 include/drm/drm_crtc.h |  2 ++
 2 files changed, 27 insertions(+)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index b9ba061..8764765 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -747,6 +747,31 @@ unsigned int drm_crtc_index(struct drm_crtc *crtc)
 }
 EXPORT_SYMBOL(drm_crtc_index);
 
+/**
+ * drm_get_crtc_from_index - find a registered CRTC from the index
+ * @dev: DRM device
+ * @index: index of a registered CRTC
+ *
+ * Given a index, return the registered CRTC within a DRM
+ * device's list of CRTCs.
+ */
+struct drm_crtc *drm_get_crtc_from_index(struct drm_device *dev,
+unsigned int index)
+{
+   unsigned int index_tmp = 0;
+   struct drm_crtc *crtc;
+
+   list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+   if (index_tmp == index)
+   return crtc;
+
+   index_tmp++;
+   }
+
+   BUG();
+}
+EXPORT_SYMBOL(drm_get_crtc_from_index);
+
 /*
  * drm_mode_remove - remove and free a mode
  * @connector: connector list to modify
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 57ca8cc..3a46d39d 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1225,6 +1225,8 @@ extern int drm_crtc_init_with_planes(struct drm_device 
*dev,
 const struct drm_crtc_funcs *funcs);
 extern void drm_crtc_cleanup(struct drm_crtc *crtc);
 extern unsigned int drm_crtc_index(struct drm_crtc *crtc);
+extern struct drm_crtc *drm_get_crtc_from_index(struct drm_device *dev,
+   unsigned int index);
 
 /**
  * drm_crtc_mask - find the mask of a registered CRTC
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/