Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-18 Thread Eric Anholt
Daniel Vetter  writes:

> On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
>> Daniel Vetter  writes:
>> 
>> > On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
>> >> This is the start of a full VC4 driver.  Right now this just supports
>> >> configuring the display using a pre-existing video mode (because
>> >> changing the pixel clock isn't available yet, and doesn't work when it
>> >> is).  However, this is enough for fbcon and bringing up X using
>> >> xf86-video-modesetting.
>> >> 
>> >> Signed-off-by: Eric Anholt 
>> >> ---
>> >>  drivers/gpu/drm/Kconfig   |   2 +
>> >>  drivers/gpu/drm/Makefile  |   1 +
>> >>  drivers/gpu/drm/vc4/Kconfig   |  14 +
>> >>  drivers/gpu/drm/vc4/Makefile  |  18 ++
>> >>  drivers/gpu/drm/vc4/vc4_bo.c  |  54 
>> >>  drivers/gpu/drm/vc4/vc4_crtc.c| 583 
>> >> ++
>> >>  drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
>> >>  drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
>> >>  drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
>> >>  drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
>> >> ++
>> >>  drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
>> >>  drivers/gpu/drm/vc4/vc4_kms.c |  84 +
>> >>  drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
>> >>  drivers/gpu/drm/vc4/vc4_regs.h| 562 
>> >>  14 files changed, 2871 insertions(+)
>> >>  create mode 100644 drivers/gpu/drm/vc4/Kconfig
>> >>  create mode 100644 drivers/gpu/drm/vc4/Makefile
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
>> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h
>> >
>> > Made a quick pass and found a few things to update to latest drm
>> > developments. Of course didn't look at the hardware details since no clue,
>> > but looks really nice overall.
>> 
>> If you have anything about the hardware that you were curious about, I'd
>> be interested in trying to explain them in the comments to the extent
>> that I can.  It's unfortunate that we haven't shipped docs for the
>> display side of things, but had to do a lot of reading of the verilog
>> just to get this far, anyway.
>
> The only thing I spotted is that you right now only register a primary and
> cursor plane. I guess the plan we once discussed about exposing piles of
> planes for -modesetting accel isn't there yet?
>
> But otherwise I really didn't go into the hardware details.

Yeah, I haven't done piles of planes because what we have right now
means I don't have to do the bandwidth limits tracking yet.


signature.asc
Description: PGP signature


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-18 Thread Eric Anholt
Daniel Vetter dan...@ffwll.ch writes:

 On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
 Daniel Vetter dan...@ffwll.ch writes:
 
  On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
  This is the start of a full VC4 driver.  Right now this just supports
  configuring the display using a pre-existing video mode (because
  changing the pixel clock isn't available yet, and doesn't work when it
  is).  However, this is enough for fbcon and bringing up X using
  xf86-video-modesetting.
  
  Signed-off-by: Eric Anholt e...@anholt.net
  ---
   drivers/gpu/drm/Kconfig   |   2 +
   drivers/gpu/drm/Makefile  |   1 +
   drivers/gpu/drm/vc4/Kconfig   |  14 +
   drivers/gpu/drm/vc4/Makefile  |  18 ++
   drivers/gpu/drm/vc4/vc4_bo.c  |  54 
   drivers/gpu/drm/vc4/vc4_crtc.c| 583 
  ++
   drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
   drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
   drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
   drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
  ++
   drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
   drivers/gpu/drm/vc4/vc4_kms.c |  84 +
   drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
   drivers/gpu/drm/vc4/vc4_regs.h| 562 
   14 files changed, 2871 insertions(+)
   create mode 100644 drivers/gpu/drm/vc4/Kconfig
   create mode 100644 drivers/gpu/drm/vc4/Makefile
   create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
   create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h
 
  Made a quick pass and found a few things to update to latest drm
  developments. Of course didn't look at the hardware details since no clue,
  but looks really nice overall.
 
 If you have anything about the hardware that you were curious about, I'd
 be interested in trying to explain them in the comments to the extent
 that I can.  It's unfortunate that we haven't shipped docs for the
 display side of things, but had to do a lot of reading of the verilog
 just to get this far, anyway.

 The only thing I spotted is that you right now only register a primary and
 cursor plane. I guess the plan we once discussed about exposing piles of
 planes for -modesetting accel isn't there yet?

 But otherwise I really didn't go into the hardware details.

Yeah, I haven't done piles of planes because what we have right now
means I don't have to do the bandwidth limits tracking yet.


signature.asc
Description: PGP signature


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-17 Thread Eric Anholt
r<#secure method=pgpmime mode=sign>
Stephen Warren  writes:

> On 08/12/2015 06:56 PM, Eric Anholt wrote:
>> This is the start of a full VC4 driver.  Right now this just supports
>> configuring the display using a pre-existing video mode (because
>> changing the pixel clock isn't available yet, and doesn't work when it
>> is).  However, this is enough for fbcon and bringing up X using
>> xf86-video-modesetting.
>
>> diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
>
>> +config DRM_VC4
>> +tristate "Broadcom VC4 Graphics"
>
>> +help
>> +  Choose this option if you have a system that has a Broadcom
>> +  VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
>> +
>> +  This driver requires that "avoid_warnings=2" be present in
>> +  the config.txt for the firmware, to keep it from smashing
>> +  our display setup.
>
> The need for "avoid_warnings=2" seems like it will trip people up. I
> don't think it's in any config.txt I've seen. Can you expand more on that?

The warnings thing is the firmware watching for undervoltage and then it
calls into dispmanx to overlay a little rainbow box on the screen.  This
of course interferes with our display setup.

I think we'll be able to wire up notifications to Linux for
undervoltage, at which point we can do something useful with that
information, ourselves.
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-17 Thread Eric Anholt
r#secure method=pgpmime mode=sign
Stephen Warren swar...@wwwdotorg.org writes:

 On 08/12/2015 06:56 PM, Eric Anholt wrote:
 This is the start of a full VC4 driver.  Right now this just supports
 configuring the display using a pre-existing video mode (because
 changing the pixel clock isn't available yet, and doesn't work when it
 is).  However, this is enough for fbcon and bringing up X using
 xf86-video-modesetting.

 diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig

 +config DRM_VC4
 +tristate Broadcom VC4 Graphics

 +help
 +  Choose this option if you have a system that has a Broadcom
 +  VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
 +
 +  This driver requires that avoid_warnings=2 be present in
 +  the config.txt for the firmware, to keep it from smashing
 +  our display setup.

 The need for avoid_warnings=2 seems like it will trip people up. I
 don't think it's in any config.txt I've seen. Can you expand more on that?

The warnings thing is the firmware watching for undervoltage and then it
calls into dispmanx to overlay a little rainbow box on the screen.  This
of course interferes with our display setup.

I think we'll be able to wire up notifications to Linux for
undervoltage, at which point we can do something useful with that
information, ourselves.
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-14 Thread Stephen Warren
On 08/12/2015 06:56 PM, Eric Anholt wrote:
> This is the start of a full VC4 driver.  Right now this just supports
> configuring the display using a pre-existing video mode (because
> changing the pixel clock isn't available yet, and doesn't work when it
> is).  However, this is enough for fbcon and bringing up X using
> xf86-video-modesetting.

> diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig

> +config DRM_VC4
> + tristate "Broadcom VC4 Graphics"

> + help
> +   Choose this option if you have a system that has a Broadcom
> +   VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
> +
> +   This driver requires that "avoid_warnings=2" be present in
> +   the config.txt for the firmware, to keep it from smashing
> +   our display setup.

The need for "avoid_warnings=2" seems like it will trip people up. I
don't think it's in any config.txt I've seen. Can you expand more on that?
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-14 Thread Stephen Warren
On 08/12/2015 06:56 PM, Eric Anholt wrote:
 This is the start of a full VC4 driver.  Right now this just supports
 configuring the display using a pre-existing video mode (because
 changing the pixel clock isn't available yet, and doesn't work when it
 is).  However, this is enough for fbcon and bringing up X using
 xf86-video-modesetting.

 diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig

 +config DRM_VC4
 + tristate Broadcom VC4 Graphics

 + help
 +   Choose this option if you have a system that has a Broadcom
 +   VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
 +
 +   This driver requires that avoid_warnings=2 be present in
 +   the config.txt for the firmware, to keep it from smashing
 +   our display setup.

The need for avoid_warnings=2 seems like it will trip people up. I
don't think it's in any config.txt I've seen. Can you expand more on that?
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Eric Anholt
Russell King - ARM Linux  writes:

> On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
>> Struct mutex is here because this code is from the V3D series, with the
>> in-kernel BO cache ripped out (it turns out that the CMA allocator is
>> slow, and you can't just userspace cache since we have to do allocations
>> within the kernel to the tune of a couple per draw and that's too much).
>
> The CMA allocator is fast until you have pinned pages in its region,
> where it becomes _very_ slow to do allocations, sometimes getting up
> to the order of seconds.
>
> The main culpret of this are GFP_HIGHUSER_MOVABLE allocations which
> then pin the page.  It doesn't take many of those to make CMA really
> inefficient.
>
> The problem is that CMA doesn't get any information back from the
> internal page migration about which pages couldn't be moved, so it
> dumbly just tries incrementing the allocation by one page (subject
> to alignment constraints) and retrying again - repeating over the
> entire CMA region.  The bigger the region, the more time this takes.

Ouch.

Since I can workaround the allocation cost, the main problem I have
right now is that I've got a set of small allocations for 3D that all
need to have the same high 4 bits of paddr, because someone cleverly
packed some address bits in a GPU-managed structure.  Any
recommendations for ways to handle this with CMA?


signature.asc
Description: PGP signature


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Russell King - ARM Linux
On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
> Struct mutex is here because this code is from the V3D series, with the
> in-kernel BO cache ripped out (it turns out that the CMA allocator is
> slow, and you can't just userspace cache since we have to do allocations
> within the kernel to the tune of a couple per draw and that's too much).

The CMA allocator is fast until you have pinned pages in its region,
where it becomes _very_ slow to do allocations, sometimes getting up
to the order of seconds.

The main culpret of this are GFP_HIGHUSER_MOVABLE allocations which
then pin the page.  It doesn't take many of those to make CMA really
inefficient.

The problem is that CMA doesn't get any information back from the
internal page migration about which pages couldn't be moved, so it
dumbly just tries incrementing the allocation by one page (subject
to alignment constraints) and retrying again - repeating over the
entire CMA region.  The bigger the region, the more time this takes.

-- 
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Daniel Vetter
On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
> Daniel Vetter  writes:
> 
> > On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
> >> This is the start of a full VC4 driver.  Right now this just supports
> >> configuring the display using a pre-existing video mode (because
> >> changing the pixel clock isn't available yet, and doesn't work when it
> >> is).  However, this is enough for fbcon and bringing up X using
> >> xf86-video-modesetting.
> >> 
> >> Signed-off-by: Eric Anholt 
> >> ---
> >>  drivers/gpu/drm/Kconfig   |   2 +
> >>  drivers/gpu/drm/Makefile  |   1 +
> >>  drivers/gpu/drm/vc4/Kconfig   |  14 +
> >>  drivers/gpu/drm/vc4/Makefile  |  18 ++
> >>  drivers/gpu/drm/vc4/vc4_bo.c  |  54 
> >>  drivers/gpu/drm/vc4/vc4_crtc.c| 583 ++
> >>  drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
> >>  drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
> >>  drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
> >>  drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
> >> ++
> >>  drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
> >>  drivers/gpu/drm/vc4/vc4_kms.c |  84 +
> >>  drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
> >>  drivers/gpu/drm/vc4/vc4_regs.h| 562 
> >>  14 files changed, 2871 insertions(+)
> >>  create mode 100644 drivers/gpu/drm/vc4/Kconfig
> >>  create mode 100644 drivers/gpu/drm/vc4/Makefile
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
> >>  create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h
> >
> > Made a quick pass and found a few things to update to latest drm
> > developments. Of course didn't look at the hardware details since no clue,
> > but looks really nice overall.
> 
> If you have anything about the hardware that you were curious about, I'd
> be interested in trying to explain them in the comments to the extent
> that I can.  It's unfortunate that we haven't shipped docs for the
> display side of things, but had to do a lot of reading of the verilog
> just to get this far, anyway.

The only thing I spotted is that you right now only register a primary and
cursor plane. I guess the plan we once discussed about exposing piles of
planes for -modesetting accel isn't there yet?

But otherwise I really didn't go into the hardware details.

> >> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> >> index c46ca31..1730a76 100644
> >> --- a/drivers/gpu/drm/Kconfig
> >> +++ b/drivers/gpu/drm/Kconfig
> >> @@ -240,3 +240,5 @@ source "drivers/gpu/drm/sti/Kconfig"
> >>  source "drivers/gpu/drm/amd/amdkfd/Kconfig"
> >>  
> >>  source "drivers/gpu/drm/imx/Kconfig"
> >> +
> >> +source "drivers/gpu/drm/vc4/Kconfig"
> >> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> >> index 5713d05..b991ac5 100644
> >> --- a/drivers/gpu/drm/Makefile
> >> +++ b/drivers/gpu/drm/Makefile
> >> @@ -42,6 +42,7 @@ obj-$(CONFIG_DRM_MGA)+= mga/
> >>  obj-$(CONFIG_DRM_I810)+= i810/
> >>  obj-$(CONFIG_DRM_I915)  += i915/
> >>  obj-$(CONFIG_DRM_MGAG200) += mgag200/
> >> +obj-$(CONFIG_DRM_VC4)  += vc4/
> >>  obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
> >>  obj-$(CONFIG_DRM_SIS)   += sis/
> >>  obj-$(CONFIG_DRM_SAVAGE)+= savage/
> >> diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
> >> new file mode 100644
> >> index 000..130cc94
> >> --- /dev/null
> >> +++ b/drivers/gpu/drm/vc4/Kconfig
> >> @@ -0,0 +1,14 @@
> >> +config DRM_VC4
> >> +  tristate "Broadcom VC4 Graphics"
> >> +  depends on ARCH_BCM2835
> >> +  depends on DRM
> >> +  select DRM_KMS_HELPER
> >> +  select DRM_KMS_FB_HELPER
> >> +  select DRM_KMS_CMA_HELPER
> >
> > drm-misc/linux-next already has Archit's patches to enable/disable fbdev
> > in the core code, so you don't need to bother about these selects here any
> > more, it'll no-op out if drm fbdev emulation isn't enabled. Since you're
> > reusing cma fbdev helpers I don't think there's any need for other changes
> > because of this.
> 
> It sounds like I should rebase on that, then?

Yeah probably simplest. I made a pull request for drm-misc and a tag and
cc'ed you on it so you have a baseline.

> >> +  help
> >> +Choose this option if you have a system that has a Broadcom
> >> +VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
> >> +
> >> +This driver requires that "avoid_warnings=2" be present in
> >> +the config.txt for the firmware, to keep it from smashing
> >> +our display setup.
> >> 

Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Eric Anholt
Daniel Vetter  writes:

> On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
>> This is the start of a full VC4 driver.  Right now this just supports
>> configuring the display using a pre-existing video mode (because
>> changing the pixel clock isn't available yet, and doesn't work when it
>> is).  However, this is enough for fbcon and bringing up X using
>> xf86-video-modesetting.
>> 
>> Signed-off-by: Eric Anholt 
>> ---
>>  drivers/gpu/drm/Kconfig   |   2 +
>>  drivers/gpu/drm/Makefile  |   1 +
>>  drivers/gpu/drm/vc4/Kconfig   |  14 +
>>  drivers/gpu/drm/vc4/Makefile  |  18 ++
>>  drivers/gpu/drm/vc4/vc4_bo.c  |  54 
>>  drivers/gpu/drm/vc4/vc4_crtc.c| 583 ++
>>  drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
>>  drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
>>  drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
>>  drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
>> ++
>>  drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
>>  drivers/gpu/drm/vc4/vc4_kms.c |  84 +
>>  drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
>>  drivers/gpu/drm/vc4/vc4_regs.h| 562 
>>  14 files changed, 2871 insertions(+)
>>  create mode 100644 drivers/gpu/drm/vc4/Kconfig
>>  create mode 100644 drivers/gpu/drm/vc4/Makefile
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
>>  create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h
>
> Made a quick pass and found a few things to update to latest drm
> developments. Of course didn't look at the hardware details since no clue,
> but looks really nice overall.
> -Daniel

If you have anything about the hardware that you were curious about, I'd
be interested in trying to explain them in the comments to the extent
that I can.  It's unfortunate that we haven't shipped docs for the
display side of things, but had to do a lot of reading of the verilog
just to get this far, anyway.

>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>> index c46ca31..1730a76 100644
>> --- a/drivers/gpu/drm/Kconfig
>> +++ b/drivers/gpu/drm/Kconfig
>> @@ -240,3 +240,5 @@ source "drivers/gpu/drm/sti/Kconfig"
>>  source "drivers/gpu/drm/amd/amdkfd/Kconfig"
>>  
>>  source "drivers/gpu/drm/imx/Kconfig"
>> +
>> +source "drivers/gpu/drm/vc4/Kconfig"
>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
>> index 5713d05..b991ac5 100644
>> --- a/drivers/gpu/drm/Makefile
>> +++ b/drivers/gpu/drm/Makefile
>> @@ -42,6 +42,7 @@ obj-$(CONFIG_DRM_MGA)  += mga/
>>  obj-$(CONFIG_DRM_I810)  += i810/
>>  obj-$(CONFIG_DRM_I915)  += i915/
>>  obj-$(CONFIG_DRM_MGAG200) += mgag200/
>> +obj-$(CONFIG_DRM_VC4)  += vc4/
>>  obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
>>  obj-$(CONFIG_DRM_SIS)   += sis/
>>  obj-$(CONFIG_DRM_SAVAGE)+= savage/
>> diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
>> new file mode 100644
>> index 000..130cc94
>> --- /dev/null
>> +++ b/drivers/gpu/drm/vc4/Kconfig
>> @@ -0,0 +1,14 @@
>> +config DRM_VC4
>> +tristate "Broadcom VC4 Graphics"
>> +depends on ARCH_BCM2835
>> +depends on DRM
>> +select DRM_KMS_HELPER
>> +select DRM_KMS_FB_HELPER
>> +select DRM_KMS_CMA_HELPER
>
> drm-misc/linux-next already has Archit's patches to enable/disable fbdev
> in the core code, so you don't need to bother about these selects here any
> more, it'll no-op out if drm fbdev emulation isn't enabled. Since you're
> reusing cma fbdev helpers I don't think there's any need for other changes
> because of this.

It sounds like I should rebase on that, then?

>> +help
>> +  Choose this option if you have a system that has a Broadcom
>> +  VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
>> +
>> +  This driver requires that "avoid_warnings=2" be present in
>> +  the config.txt for the firmware, to keep it from smashing
>> +  our display setup.
>> diff --git a/drivers/gpu/drm/vc4/Makefile b/drivers/gpu/drm/vc4/Makefile
>> new file mode 100644
>> index 000..4aa07ca
>> --- /dev/null
>> +++ b/drivers/gpu/drm/vc4/Makefile
>> @@ -0,0 +1,18 @@
>> +ccflags-y := -Iinclude/drm
>> +
>> +# Please keep these build lists sorted!
>> +
>> +# core driver code
>> +vc4-y := \
>> +vc4_bo.o \
>> +vc4_crtc.o \
>> +vc4_drv.o \
>> +vc4_kms.o \
>> +vc4_hdmi.o \
>> +vc4_hvs.o \
>> +vc4_plane.o \
>> +$()
>> +
>> +vc4-$(CONFIG_DEBUG_FS) += vc4_debugfs.o
>> +
>> +obj-$(CONFIG_DRM_VC4)  += vc4.o
>> diff --git 

Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Emil Velikov
On 13 August 2015 at 01:56, Eric Anholt  wrote:
> This is the start of a full VC4 driver.  Right now this just supports
> configuring the display using a pre-existing video mode (because
> changing the pixel clock isn't available yet, and doesn't work when it
> is).  However, this is enough for fbcon and bringing up X using
> xf86-video-modesetting.
>
> Signed-off-by: Eric Anholt 
...
> --- /dev/null
> +++ b/drivers/gpu/drm/vc4/Makefile
> @@ -0,0 +1,18 @@
> +ccflags-y := -Iinclude/drm
> +
> +# Please keep these build lists sorted!
> +
> +# core driver code
> +vc4-y := \
> +   vc4_bo.o \
> +   vc4_crtc.o \
> +   vc4_drv.o \
> +   vc4_kms.o \
> +   vc4_hdmi.o \
> +   vc4_hvs.o \
> +   vc4_plane.o \
> +   $()
> +
In case anyone is curious - this is the first sentinel in the whole
kernel (some 2000+ Makefiles) :-)

-Emil
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Daniel Vetter
On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
> This is the start of a full VC4 driver.  Right now this just supports
> configuring the display using a pre-existing video mode (because
> changing the pixel clock isn't available yet, and doesn't work when it
> is).  However, this is enough for fbcon and bringing up X using
> xf86-video-modesetting.
> 
> Signed-off-by: Eric Anholt 
> ---
>  drivers/gpu/drm/Kconfig   |   2 +
>  drivers/gpu/drm/Makefile  |   1 +
>  drivers/gpu/drm/vc4/Kconfig   |  14 +
>  drivers/gpu/drm/vc4/Makefile  |  18 ++
>  drivers/gpu/drm/vc4/vc4_bo.c  |  54 
>  drivers/gpu/drm/vc4/vc4_crtc.c| 583 ++
>  drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
>  drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
>  drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
>  drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
> ++
>  drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
>  drivers/gpu/drm/vc4/vc4_kms.c |  84 +
>  drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
>  drivers/gpu/drm/vc4/vc4_regs.h| 562 
>  14 files changed, 2871 insertions(+)
>  create mode 100644 drivers/gpu/drm/vc4/Kconfig
>  create mode 100644 drivers/gpu/drm/vc4/Makefile
>  create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
>  create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
>  create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h

Made a quick pass and found a few things to update to latest drm
developments. Of course didn't look at the hardware details since no clue,
but looks really nice overall.
-Daniel

> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index c46ca31..1730a76 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -240,3 +240,5 @@ source "drivers/gpu/drm/sti/Kconfig"
>  source "drivers/gpu/drm/amd/amdkfd/Kconfig"
>  
>  source "drivers/gpu/drm/imx/Kconfig"
> +
> +source "drivers/gpu/drm/vc4/Kconfig"
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 5713d05..b991ac5 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -42,6 +42,7 @@ obj-$(CONFIG_DRM_MGA)   += mga/
>  obj-$(CONFIG_DRM_I810)   += i810/
>  obj-$(CONFIG_DRM_I915)  += i915/
>  obj-$(CONFIG_DRM_MGAG200) += mgag200/
> +obj-$(CONFIG_DRM_VC4)  += vc4/
>  obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
>  obj-$(CONFIG_DRM_SIS)   += sis/
>  obj-$(CONFIG_DRM_SAVAGE)+= savage/
> diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
> new file mode 100644
> index 000..130cc94
> --- /dev/null
> +++ b/drivers/gpu/drm/vc4/Kconfig
> @@ -0,0 +1,14 @@
> +config DRM_VC4
> + tristate "Broadcom VC4 Graphics"
> + depends on ARCH_BCM2835
> + depends on DRM
> + select DRM_KMS_HELPER
> + select DRM_KMS_FB_HELPER
> + select DRM_KMS_CMA_HELPER

drm-misc/linux-next already has Archit's patches to enable/disable fbdev
in the core code, so you don't need to bother about these selects here any
more, it'll no-op out if drm fbdev emulation isn't enabled. Since you're
reusing cma fbdev helpers I don't think there's any need for other changes
because of this.

> + help
> +   Choose this option if you have a system that has a Broadcom
> +   VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
> +
> +   This driver requires that "avoid_warnings=2" be present in
> +   the config.txt for the firmware, to keep it from smashing
> +   our display setup.
> diff --git a/drivers/gpu/drm/vc4/Makefile b/drivers/gpu/drm/vc4/Makefile
> new file mode 100644
> index 000..4aa07ca
> --- /dev/null
> +++ b/drivers/gpu/drm/vc4/Makefile
> @@ -0,0 +1,18 @@
> +ccflags-y := -Iinclude/drm
> +
> +# Please keep these build lists sorted!
> +
> +# core driver code
> +vc4-y := \
> + vc4_bo.o \
> + vc4_crtc.o \
> + vc4_drv.o \
> + vc4_kms.o \
> + vc4_hdmi.o \
> + vc4_hvs.o \
> + vc4_plane.o \
> + $()
> +
> +vc4-$(CONFIG_DEBUG_FS) += vc4_debugfs.o
> +
> +obj-$(CONFIG_DRM_VC4)  += vc4.o
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> new file mode 100644
> index 000..fee8cac
> --- /dev/null
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -0,0 +1,54 @@
> +/*
> + *  Copyright © 2015 Broadcom
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +/* DOC: VC4 GEM BO management support.
> + *
> + * The VC4 

Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Daniel Vetter
On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
 This is the start of a full VC4 driver.  Right now this just supports
 configuring the display using a pre-existing video mode (because
 changing the pixel clock isn't available yet, and doesn't work when it
 is).  However, this is enough for fbcon and bringing up X using
 xf86-video-modesetting.
 
 Signed-off-by: Eric Anholt e...@anholt.net
 ---
  drivers/gpu/drm/Kconfig   |   2 +
  drivers/gpu/drm/Makefile  |   1 +
  drivers/gpu/drm/vc4/Kconfig   |  14 +
  drivers/gpu/drm/vc4/Makefile  |  18 ++
  drivers/gpu/drm/vc4/vc4_bo.c  |  54 
  drivers/gpu/drm/vc4/vc4_crtc.c| 583 ++
  drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
  drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
  drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
  drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
 ++
  drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
  drivers/gpu/drm/vc4/vc4_kms.c |  84 +
  drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
  drivers/gpu/drm/vc4/vc4_regs.h| 562 
  14 files changed, 2871 insertions(+)
  create mode 100644 drivers/gpu/drm/vc4/Kconfig
  create mode 100644 drivers/gpu/drm/vc4/Makefile
  create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
  create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h

Made a quick pass and found a few things to update to latest drm
developments. Of course didn't look at the hardware details since no clue,
but looks really nice overall.
-Daniel

 
 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
 index c46ca31..1730a76 100644
 --- a/drivers/gpu/drm/Kconfig
 +++ b/drivers/gpu/drm/Kconfig
 @@ -240,3 +240,5 @@ source drivers/gpu/drm/sti/Kconfig
  source drivers/gpu/drm/amd/amdkfd/Kconfig
  
  source drivers/gpu/drm/imx/Kconfig
 +
 +source drivers/gpu/drm/vc4/Kconfig
 diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
 index 5713d05..b991ac5 100644
 --- a/drivers/gpu/drm/Makefile
 +++ b/drivers/gpu/drm/Makefile
 @@ -42,6 +42,7 @@ obj-$(CONFIG_DRM_MGA)   += mga/
  obj-$(CONFIG_DRM_I810)   += i810/
  obj-$(CONFIG_DRM_I915)  += i915/
  obj-$(CONFIG_DRM_MGAG200) += mgag200/
 +obj-$(CONFIG_DRM_VC4)  += vc4/
  obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
  obj-$(CONFIG_DRM_SIS)   += sis/
  obj-$(CONFIG_DRM_SAVAGE)+= savage/
 diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
 new file mode 100644
 index 000..130cc94
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/Kconfig
 @@ -0,0 +1,14 @@
 +config DRM_VC4
 + tristate Broadcom VC4 Graphics
 + depends on ARCH_BCM2835
 + depends on DRM
 + select DRM_KMS_HELPER
 + select DRM_KMS_FB_HELPER
 + select DRM_KMS_CMA_HELPER

drm-misc/linux-next already has Archit's patches to enable/disable fbdev
in the core code, so you don't need to bother about these selects here any
more, it'll no-op out if drm fbdev emulation isn't enabled. Since you're
reusing cma fbdev helpers I don't think there's any need for other changes
because of this.

 + help
 +   Choose this option if you have a system that has a Broadcom
 +   VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
 +
 +   This driver requires that avoid_warnings=2 be present in
 +   the config.txt for the firmware, to keep it from smashing
 +   our display setup.
 diff --git a/drivers/gpu/drm/vc4/Makefile b/drivers/gpu/drm/vc4/Makefile
 new file mode 100644
 index 000..4aa07ca
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/Makefile
 @@ -0,0 +1,18 @@
 +ccflags-y := -Iinclude/drm
 +
 +# Please keep these build lists sorted!
 +
 +# core driver code
 +vc4-y := \
 + vc4_bo.o \
 + vc4_crtc.o \
 + vc4_drv.o \
 + vc4_kms.o \
 + vc4_hdmi.o \
 + vc4_hvs.o \
 + vc4_plane.o \
 + $()
 +
 +vc4-$(CONFIG_DEBUG_FS) += vc4_debugfs.o
 +
 +obj-$(CONFIG_DRM_VC4)  += vc4.o
 diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
 new file mode 100644
 index 000..fee8cac
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/vc4_bo.c
 @@ -0,0 +1,54 @@
 +/*
 + *  Copyright © 2015 Broadcom
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + */
 +
 +/* DOC: VC4 GEM BO management support.
 + *
 + * The VC4 GPU architecture (both scanout and rendering) has direct
 + * access to system memory with no MMU in between.  To 

Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Emil Velikov
On 13 August 2015 at 01:56, Eric Anholt e...@anholt.net wrote:
 This is the start of a full VC4 driver.  Right now this just supports
 configuring the display using a pre-existing video mode (because
 changing the pixel clock isn't available yet, and doesn't work when it
 is).  However, this is enough for fbcon and bringing up X using
 xf86-video-modesetting.

 Signed-off-by: Eric Anholt e...@anholt.net
...
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/Makefile
 @@ -0,0 +1,18 @@
 +ccflags-y := -Iinclude/drm
 +
 +# Please keep these build lists sorted!
 +
 +# core driver code
 +vc4-y := \
 +   vc4_bo.o \
 +   vc4_crtc.o \
 +   vc4_drv.o \
 +   vc4_kms.o \
 +   vc4_hdmi.o \
 +   vc4_hvs.o \
 +   vc4_plane.o \
 +   $()
 +
In case anyone is curious - this is the first sentinel in the whole
kernel (some 2000+ Makefiles) :-)

-Emil
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Eric Anholt
Russell King - ARM Linux li...@arm.linux.org.uk writes:

 On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
 Struct mutex is here because this code is from the V3D series, with the
 in-kernel BO cache ripped out (it turns out that the CMA allocator is
 slow, and you can't just userspace cache since we have to do allocations
 within the kernel to the tune of a couple per draw and that's too much).

 The CMA allocator is fast until you have pinned pages in its region,
 where it becomes _very_ slow to do allocations, sometimes getting up
 to the order of seconds.

 The main culpret of this are GFP_HIGHUSER_MOVABLE allocations which
 then pin the page.  It doesn't take many of those to make CMA really
 inefficient.

 The problem is that CMA doesn't get any information back from the
 internal page migration about which pages couldn't be moved, so it
 dumbly just tries incrementing the allocation by one page (subject
 to alignment constraints) and retrying again - repeating over the
 entire CMA region.  The bigger the region, the more time this takes.

Ouch.

Since I can workaround the allocation cost, the main problem I have
right now is that I've got a set of small allocations for 3D that all
need to have the same high 4 bits of paddr, because someone cleverly
packed some address bits in a GPU-managed structure.  Any
recommendations for ways to handle this with CMA?


signature.asc
Description: PGP signature


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Eric Anholt
Daniel Vetter dan...@ffwll.ch writes:

 On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
 This is the start of a full VC4 driver.  Right now this just supports
 configuring the display using a pre-existing video mode (because
 changing the pixel clock isn't available yet, and doesn't work when it
 is).  However, this is enough for fbcon and bringing up X using
 xf86-video-modesetting.
 
 Signed-off-by: Eric Anholt e...@anholt.net
 ---
  drivers/gpu/drm/Kconfig   |   2 +
  drivers/gpu/drm/Makefile  |   1 +
  drivers/gpu/drm/vc4/Kconfig   |  14 +
  drivers/gpu/drm/vc4/Makefile  |  18 ++
  drivers/gpu/drm/vc4/vc4_bo.c  |  54 
  drivers/gpu/drm/vc4/vc4_crtc.c| 583 ++
  drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
  drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
  drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
  drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
 ++
  drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
  drivers/gpu/drm/vc4/vc4_kms.c |  84 +
  drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
  drivers/gpu/drm/vc4/vc4_regs.h| 562 
  14 files changed, 2871 insertions(+)
  create mode 100644 drivers/gpu/drm/vc4/Kconfig
  create mode 100644 drivers/gpu/drm/vc4/Makefile
  create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
  create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
  create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h

 Made a quick pass and found a few things to update to latest drm
 developments. Of course didn't look at the hardware details since no clue,
 but looks really nice overall.
 -Daniel

If you have anything about the hardware that you were curious about, I'd
be interested in trying to explain them in the comments to the extent
that I can.  It's unfortunate that we haven't shipped docs for the
display side of things, but had to do a lot of reading of the verilog
just to get this far, anyway.

 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
 index c46ca31..1730a76 100644
 --- a/drivers/gpu/drm/Kconfig
 +++ b/drivers/gpu/drm/Kconfig
 @@ -240,3 +240,5 @@ source drivers/gpu/drm/sti/Kconfig
  source drivers/gpu/drm/amd/amdkfd/Kconfig
  
  source drivers/gpu/drm/imx/Kconfig
 +
 +source drivers/gpu/drm/vc4/Kconfig
 diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
 index 5713d05..b991ac5 100644
 --- a/drivers/gpu/drm/Makefile
 +++ b/drivers/gpu/drm/Makefile
 @@ -42,6 +42,7 @@ obj-$(CONFIG_DRM_MGA)  += mga/
  obj-$(CONFIG_DRM_I810)  += i810/
  obj-$(CONFIG_DRM_I915)  += i915/
  obj-$(CONFIG_DRM_MGAG200) += mgag200/
 +obj-$(CONFIG_DRM_VC4)  += vc4/
  obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
  obj-$(CONFIG_DRM_SIS)   += sis/
  obj-$(CONFIG_DRM_SAVAGE)+= savage/
 diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
 new file mode 100644
 index 000..130cc94
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/Kconfig
 @@ -0,0 +1,14 @@
 +config DRM_VC4
 +tristate Broadcom VC4 Graphics
 +depends on ARCH_BCM2835
 +depends on DRM
 +select DRM_KMS_HELPER
 +select DRM_KMS_FB_HELPER
 +select DRM_KMS_CMA_HELPER

 drm-misc/linux-next already has Archit's patches to enable/disable fbdev
 in the core code, so you don't need to bother about these selects here any
 more, it'll no-op out if drm fbdev emulation isn't enabled. Since you're
 reusing cma fbdev helpers I don't think there's any need for other changes
 because of this.

It sounds like I should rebase on that, then?

 +help
 +  Choose this option if you have a system that has a Broadcom
 +  VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
 +
 +  This driver requires that avoid_warnings=2 be present in
 +  the config.txt for the firmware, to keep it from smashing
 +  our display setup.
 diff --git a/drivers/gpu/drm/vc4/Makefile b/drivers/gpu/drm/vc4/Makefile
 new file mode 100644
 index 000..4aa07ca
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/Makefile
 @@ -0,0 +1,18 @@
 +ccflags-y := -Iinclude/drm
 +
 +# Please keep these build lists sorted!
 +
 +# core driver code
 +vc4-y := \
 +vc4_bo.o \
 +vc4_crtc.o \
 +vc4_drv.o \
 +vc4_kms.o \
 +vc4_hdmi.o \
 +vc4_hvs.o \
 +vc4_plane.o \
 +$()
 +
 +vc4-$(CONFIG_DEBUG_FS) += vc4_debugfs.o
 +
 +obj-$(CONFIG_DRM_VC4)  += vc4.o
 diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
 new file mode 100644
 index 000..fee8cac
 --- /dev/null
 +++ b/drivers/gpu/drm/vc4/vc4_bo.c
 @@ -0,0 +1,54 @@
 +/*
 + *  Copyright © 2015 Broadcom
 + 

Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Russell King - ARM Linux
On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
 Struct mutex is here because this code is from the V3D series, with the
 in-kernel BO cache ripped out (it turns out that the CMA allocator is
 slow, and you can't just userspace cache since we have to do allocations
 within the kernel to the tune of a couple per draw and that's too much).

The CMA allocator is fast until you have pinned pages in its region,
where it becomes _very_ slow to do allocations, sometimes getting up
to the order of seconds.

The main culpret of this are GFP_HIGHUSER_MOVABLE allocations which
then pin the page.  It doesn't take many of those to make CMA really
inefficient.

The problem is that CMA doesn't get any information back from the
internal page migration about which pages couldn't be moved, so it
dumbly just tries incrementing the allocation by one page (subject
to alignment constraints) and retrying again - repeating over the
entire CMA region.  The bigger the region, the more time this takes.

-- 
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.
--
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/


Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.

2015-08-13 Thread Daniel Vetter
On Thu, Aug 13, 2015 at 01:44:03PM -0700, Eric Anholt wrote:
 Daniel Vetter dan...@ffwll.ch writes:
 
  On Wed, Aug 12, 2015 at 05:56:16PM -0700, Eric Anholt wrote:
  This is the start of a full VC4 driver.  Right now this just supports
  configuring the display using a pre-existing video mode (because
  changing the pixel clock isn't available yet, and doesn't work when it
  is).  However, this is enough for fbcon and bringing up X using
  xf86-video-modesetting.
  
  Signed-off-by: Eric Anholt e...@anholt.net
  ---
   drivers/gpu/drm/Kconfig   |   2 +
   drivers/gpu/drm/Makefile  |   1 +
   drivers/gpu/drm/vc4/Kconfig   |  14 +
   drivers/gpu/drm/vc4/Makefile  |  18 ++
   drivers/gpu/drm/vc4/vc4_bo.c  |  54 
   drivers/gpu/drm/vc4/vc4_crtc.c| 583 ++
   drivers/gpu/drm/vc4/vc4_debugfs.c |  38 +++
   drivers/gpu/drm/vc4/vc4_drv.c | 249 +++
   drivers/gpu/drm/vc4/vc4_drv.h | 123 +++
   drivers/gpu/drm/vc4/vc4_hdmi.c| 651 
  ++
   drivers/gpu/drm/vc4/vc4_hvs.c | 172 ++
   drivers/gpu/drm/vc4/vc4_kms.c |  84 +
   drivers/gpu/drm/vc4/vc4_plane.c   | 320 +++
   drivers/gpu/drm/vc4/vc4_regs.h| 562 
   14 files changed, 2871 insertions(+)
   create mode 100644 drivers/gpu/drm/vc4/Kconfig
   create mode 100644 drivers/gpu/drm/vc4/Makefile
   create mode 100644 drivers/gpu/drm/vc4/vc4_bo.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_crtc.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_debugfs.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_drv.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_drv.h
   create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_hvs.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_kms.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_plane.c
   create mode 100644 drivers/gpu/drm/vc4/vc4_regs.h
 
  Made a quick pass and found a few things to update to latest drm
  developments. Of course didn't look at the hardware details since no clue,
  but looks really nice overall.
 
 If you have anything about the hardware that you were curious about, I'd
 be interested in trying to explain them in the comments to the extent
 that I can.  It's unfortunate that we haven't shipped docs for the
 display side of things, but had to do a lot of reading of the verilog
 just to get this far, anyway.

The only thing I spotted is that you right now only register a primary and
cursor plane. I guess the plan we once discussed about exposing piles of
planes for -modesetting accel isn't there yet?

But otherwise I really didn't go into the hardware details.

  diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
  index c46ca31..1730a76 100644
  --- a/drivers/gpu/drm/Kconfig
  +++ b/drivers/gpu/drm/Kconfig
  @@ -240,3 +240,5 @@ source drivers/gpu/drm/sti/Kconfig
   source drivers/gpu/drm/amd/amdkfd/Kconfig
   
   source drivers/gpu/drm/imx/Kconfig
  +
  +source drivers/gpu/drm/vc4/Kconfig
  diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
  index 5713d05..b991ac5 100644
  --- a/drivers/gpu/drm/Makefile
  +++ b/drivers/gpu/drm/Makefile
  @@ -42,6 +42,7 @@ obj-$(CONFIG_DRM_MGA)+= mga/
   obj-$(CONFIG_DRM_I810)+= i810/
   obj-$(CONFIG_DRM_I915)  += i915/
   obj-$(CONFIG_DRM_MGAG200) += mgag200/
  +obj-$(CONFIG_DRM_VC4)  += vc4/
   obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
   obj-$(CONFIG_DRM_SIS)   += sis/
   obj-$(CONFIG_DRM_SAVAGE)+= savage/
  diff --git a/drivers/gpu/drm/vc4/Kconfig b/drivers/gpu/drm/vc4/Kconfig
  new file mode 100644
  index 000..130cc94
  --- /dev/null
  +++ b/drivers/gpu/drm/vc4/Kconfig
  @@ -0,0 +1,14 @@
  +config DRM_VC4
  +  tristate Broadcom VC4 Graphics
  +  depends on ARCH_BCM2835
  +  depends on DRM
  +  select DRM_KMS_HELPER
  +  select DRM_KMS_FB_HELPER
  +  select DRM_KMS_CMA_HELPER
 
  drm-misc/linux-next already has Archit's patches to enable/disable fbdev
  in the core code, so you don't need to bother about these selects here any
  more, it'll no-op out if drm fbdev emulation isn't enabled. Since you're
  reusing cma fbdev helpers I don't think there's any need for other changes
  because of this.
 
 It sounds like I should rebase on that, then?

Yeah probably simplest. I made a pull request for drm-misc and a tag and
cc'ed you on it so you have a baseline.

  +  help
  +Choose this option if you have a system that has a Broadcom
  +VC4 GPU, such as the Raspberry Pi or other BCM2708/BCM2835.
  +
  +This driver requires that avoid_warnings=2 be present in
  +the config.txt for the firmware, to keep it from smashing
  +our display setup.
  diff --git a/drivers/gpu/drm/vc4/Makefile b/drivers/gpu/drm/vc4/Makefile
  new file mode 100644
  index 000..4aa07ca
  --- /dev/null
  +++ b/drivers/gpu/drm/vc4/Makefile
  @@ -0,0 +1,18 @@
  +ccflags-y := -Iinclude/drm
  +
  +# Please keep these