Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
[PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.
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 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 + 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 support it, we + * use the GEM CMA helper functions to allocate contiguous ranges of + * physical memory for our BOs. + */ + +#include "vc4_drv.h" + +struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t size) +{ + struct drm_gem_cma_object *cma_obj; + + cma_obj = drm_gem_cma_create(dev, size); + if (IS_ERR(cma_obj)) + return NULL; + else + return to_vc4_bo(_obj->base); +} + +int vc4_dumb_create(struct drm_file *file_priv, + struct drm_device *dev, + struct drm_mode_create_dumb *args) +{ + int min_pitch = DIV_ROUND_UP(args->width * args->bpp, 8); +
[PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi.
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 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 + 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 support it, we + * use the GEM CMA helper functions to allocate contiguous ranges of + * physical memory for our BOs. + */ + +#include vc4_drv.h + +struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t size) +{ + struct drm_gem_cma_object *cma_obj; + + cma_obj = drm_gem_cma_create(dev, size); + if (IS_ERR(cma_obj)) + return NULL; + else + return to_vc4_bo(cma_obj-base); +} + +int vc4_dumb_create(struct drm_file *file_priv, + struct drm_device *dev, + struct drm_mode_create_dumb *args) +{ + int min_pitch = DIV_ROUND_UP(args-width * args-bpp, 8); +