Hi Kieran, I've finished reviewing the series. For your convenience, I've rebased it on top of the BRU/BRS dynamic allocation patches, and pushed the result to git://linuxtv.org/pinchartl/media.git v4l2/vsp1/tlb-optimise (Please note it has been compile-tested only) I have also taken the liberty to incorporate both my review comments and my Reviewed-by line for the patches that have received a conditional Reviewed-by, that is patches 1/8, 5/8 and 7/8. Patches 3/8, 4/8, 6/8 and 8/8 have open questions so I haven't touched them. Please don't despair, v8 might well be the last version we will need :-) On Thursday, 8 March 2018 02:05:23 EEST Kieran Bingham wrote: > Each display list currently allocates an area of DMA memory to store > register settings for the VSP1 to process. Each of these allocations adds > pressure to the IPMMU TLB entries. > > We can reduce the pressure by pre-allocating larger areas and dividing the > area across multiple bodies represented as a pool. > > With this reconfiguration of bodies, we can adapt the configuration code to > separate out constant hardware configuration and cache it for re-use. > > The patches provided in this series can be found at: > git://git.kernel.org/pub/scm/linux/kernel/git/kbingham/rcar.git > tags/vsp1/tlb-optimise/v7 > > I hope that this series is at a stage where it could be integrated now. It > has had some thorough testing and is already integrated in both > renesas-drivers and renesas-bsp. (except for the minor changes in v7 that > is...) > > Please note that checkpatch complains on patch 6/8 in this series: > > v7-0006-media-vsp1-Refactor-display-list-configure-operations.patch > ---------------------------------------------------------------------------- > -------------------------- WARNING: function definition argument 'struct > vsp1_entity *' should also have an identifier name #290: FILE: > drivers/media/platform/vsp1/vsp1_entity.h:82: > + void (*configure_stream)(struct vsp1_entity *, struct vsp1_pipeline > *, > > However - this complaint is regarding pre-existing code. I have only renamed > the function pointers. I do also disagree with checkpatch here - as there > is no need to provide an identifier name, and it does not improve > readability in this instance to state: > ...(vsp1_entity *entity, struct vsp1_pipeline *pipe) > > Thus - I have ignored these warnings. > > > Changelog: > ---------- > > v7: > - Rebased on to linux-media/master (v4.16-rc4) > - Clean up the formatting of the vsp1_dl_list_add_body() > - Fix formatting and white space > - s/prepare/configure_stream/ > - s/configure/configure_frame/ > > v6: > - Rebased on to linux-media/master (v4.16-rc1) > - Removed DRM/UIF (DISCOM/ColorKey) updates > > v5: > - Rebased on to renesas-drivers-2018-01-09-v4.15-rc7 to fix conflicts > with DRM and UIF updates on VSP1 driver > > v4: > - Rebased to v4.14 > * v4l: vsp1: Use reference counting for bodies > - Fix up reference handling comments > > * v4l: vsp1: Provide a body pool > - Provide comment explaining extra allocation on body pool > highlighting area for optimisation later. > > * v4l: vsp1: Refactor display list configure operations > - Fix up comment to describe yuv_mode caching rather than format > > * vsp1: Adapt entities to configure into a body > - Rename vsp1_dl_list_get_body() to vsp1_dl_list_get_body0() > > * v4l: vsp1: Move video configuration to a cached dlb > - Adjust pipe configured flag to be reset on resume rather than suspend > - rename dl_child, dl_next > > Testing: > -------- > The VSP unit tests have been run on this patch set with the following > results: > > --- Test loop 1 --- > - vsp-unit-test-0000.sh > Test Conditions: > Platform Renesas Salvator-X 2nd version board based on r8a7795 > ES2.0+ Kernel release 4.16.0-rc4-arm64-renesas-01067-g397eb3811ec0 > convert /usr/bin/convert > compare /usr/bin/compare > killall /usr/bin/killall > raw2rgbpnm /usr/bin/raw2rgbpnm > stress /usr/bin/stress > yavta /usr/bin/yavta > - vsp-unit-test-0001.sh > Testing WPF packing in RGB332: pass > Testing WPF packing in ARGB555: pass > Testing WPF packing in XRGB555: pass > Testing WPF packing in RGB565: pass > Testing WPF packing in BGR24: pass > Testing WPF packing in RGB24: pass > Testing WPF packing in ABGR32: pass > Testing WPF packing in ARGB32: pass > Testing WPF packing in XBGR32: pass > Testing WPF packing in XRGB32: pass > - vsp-unit-test-0002.sh > Testing WPF packing in NV12M: pass > Testing WPF packing in NV16M: pass > Testing WPF packing in NV21M: pass > Testing WPF packing in NV61M: pass > Testing WPF packing in UYVY: pass > Testing WPF packing in VYUY: skip > Testing WPF packing in YUV420M: pass > Testing WPF packing in YUV422M: pass > Testing WPF packing in YUV444M: pass > Testing WPF packing in YVU420M: pass > Testing WPF packing in YVU422M: pass > Testing WPF packing in YVU444M: pass > Testing WPF packing in YUYV: pass > Testing WPF packing in YVYU: pass > - vsp-unit-test-0003.sh > Testing scaling from 640x640 to 640x480 in RGB24: pass > Testing scaling from 1024x768 to 640x480 in RGB24: pass > Testing scaling from 640x480 to 1024x768 in RGB24: pass > Testing scaling from 640x640 to 640x480 in YUV444M: pass > Testing scaling from 1024x768 to 640x480 in YUV444M: pass > Testing scaling from 640x480 to 1024x768 in YUV444M: pass > - vsp-unit-test-0004.sh > Testing histogram in RGB24: pass > Testing histogram in YUV444M: pass > - vsp-unit-test-0005.sh > Testing RPF.0: pass > Testing RPF.1: pass > Testing RPF.2: pass > Testing RPF.3: pass > Testing RPF.4: pass > - vsp-unit-test-0006.sh > Testing invalid pipeline with no RPF: pass > Testing invalid pipeline with no WPF: pass > - vsp-unit-test-0007.sh > Testing BRU in RGB24 with 1 inputs: pass > Testing BRU in RGB24 with 2 inputs: pass > Testing BRU in RGB24 with 3 inputs: pass > Testing BRU in RGB24 with 4 inputs: pass > Testing BRU in RGB24 with 5 inputs: pass > Testing BRU in YUV444M with 1 inputs: pass > Testing BRU in YUV444M with 2 inputs: pass > Testing BRU in YUV444M with 3 inputs: pass > Testing BRU in YUV444M with 4 inputs: pass > Testing BRU in YUV444M with 5 inputs: pass > - vsp-unit-test-0008.sh > Test requires unavailable feature set `bru rpf.0 uds wpf.0': skipped > - vsp-unit-test-0009.sh > Test requires unavailable feature set `rpf.0 wpf.0 wpf.1': skipped > - vsp-unit-test-0010.sh > Testing CLU in RGB24 with zero configuration: pass > Testing CLU in RGB24 with identity configuration: pass > Testing CLU in RGB24 with wave configuration: pass > Testing CLU in YUV444M with zero configuration: pass > Testing CLU in YUV444M with identity configuration: pass > Testing CLU in YUV444M with wave configuration: pass > Testing LUT in RGB24 with zero configuration: pass > Testing LUT in RGB24 with identity configuration: pass > Testing LUT in RGB24 with gamma configuration: pass > Testing LUT in YUV444M with zero configuration: pass > Testing LUT in YUV444M with identity configuration: pass > Testing LUT in YUV444M with gamma configuration: pass > - vsp-unit-test-0011.sh > Testing hflip=0 vflip=0 rotate=0: pass > Testing hflip=1 vflip=0 rotate=0: pass > Testing hflip=0 vflip=1 rotate=0: pass > Testing hflip=1 vflip=1 rotate=0: pass > Testing hflip=0 vflip=0 rotate=90: pass > Testing hflip=1 vflip=0 rotate=90: pass > Testing hflip=0 vflip=1 rotate=90: pass > Testing hflip=1 vflip=1 rotate=90: pass > - vsp-unit-test-0012.sh > Testing hflip: pass > Testing vflip: pass > - vsp-unit-test-0013.sh > Testing RPF unpacking in RGB332: pass > Testing RPF unpacking in ARGB555: pass > Testing RPF unpacking in XRGB555: pass > Testing RPF unpacking in RGB565: pass > Testing RPF unpacking in BGR24: pass > Testing RPF unpacking in RGB24: pass > Testing RPF unpacking in ABGR32: pass > Testing RPF unpacking in ARGB32: pass > Testing RPF unpacking in XBGR32: pass > Testing RPF unpacking in XRGB32: pass > - vsp-unit-test-0014.sh > Testing RPF unpacking in NV12M: pass > Testing RPF unpacking in NV16M: pass > Testing RPF unpacking in NV21M: pass > Testing RPF unpacking in NV61M: pass > Testing RPF unpacking in UYVY: pass > Testing RPF unpacking in VYUY: skip > Testing RPF unpacking in YUV420M: pass > Testing RPF unpacking in YUV422M: pass > Testing RPF unpacking in YUV444M: pass > Testing RPF unpacking in YVU420M: pass > Testing RPF unpacking in YVU422M: pass > Testing RPF unpacking in YVU444M: pass > Testing RPF unpacking in YUYV: pass > Testing RPF unpacking in YVYU: pass > - vsp-unit-test-0015.sh > Testing SRU scaling from 1024x768 to 1024x768 in RGB24: pass > Testing SRU scaling from 1024x768 to 2048x1536 in RGB24: pass > Testing SRU scaling from 1024x768 to 1024x768 in YUV444M: pass > Testing SRU scaling from 1024x768 to 2048x1536 in YUV444M: pass > - vsp-unit-test-0016.sh > Testing hflip=0 vflip=0 rotate=0 640x480 -> 640x480: pass > Testing hflip=0 vflip=0 rotate=0 640x480 -> 1024x768: pass > Testing hflip=0 vflip=0 rotate=0 1024x768 -> 640x480: pass > Testing hflip=1 vflip=0 rotate=0 640x480 -> 640x480: pass > Testing hflip=1 vflip=0 rotate=0 640x480 -> 1024x768: pass > Testing hflip=1 vflip=0 rotate=0 1024x768 -> 640x480: pass > Testing hflip=0 vflip=1 rotate=0 640x480 -> 640x480: pass > Testing hflip=0 vflip=1 rotate=0 640x480 -> 1024x768: pass > Testing hflip=0 vflip=1 rotate=0 1024x768 -> 640x480: pass > Testing hflip=1 vflip=1 rotate=0 640x480 -> 640x480: pass > Testing hflip=1 vflip=1 rotate=0 640x480 -> 1024x768: pass > Testing hflip=1 vflip=1 rotate=0 1024x768 -> 640x480: pass > Testing hflip=0 vflip=0 rotate=90 640x480 -> 640x480: pass > Testing hflip=0 vflip=0 rotate=90 640x480 -> 1024x768: pass > Testing hflip=0 vflip=0 rotate=90 1024x768 -> 640x480: pass > Testing hflip=1 vflip=0 rotate=90 640x480 -> 640x480: pass > Testing hflip=1 vflip=0 rotate=90 640x480 -> 1024x768: pass > Testing hflip=1 vflip=0 rotate=90 1024x768 -> 640x480: pass > Testing hflip=0 vflip=1 rotate=90 640x480 -> 640x480: pass > Testing hflip=0 vflip=1 rotate=90 640x480 -> 1024x768: pass > Testing hflip=0 vflip=1 rotate=90 1024x768 -> 640x480: pass > Testing hflip=1 vflip=1 rotate=90 640x480 -> 640x480: pass > Testing hflip=1 vflip=1 rotate=90 640x480 -> 1024x768: pass > Testing hflip=1 vflip=1 rotate=90 1024x768 -> 640x480: pass > - vsp-unit-test-0017.sh > - vsp-unit-test-0018.sh > Testing RPF crop from (0,0)/512x384: pass > Testing RPF crop from (32,32)/512x384: pass > Testing RPF crop from (32,64)/512x384: pass > Testing RPF crop from (64,32)/512x384: pass > - vsp-unit-test-0019.sh > - vsp-unit-test-0020.sh > - vsp-unit-test-0021.sh > Testing WPF packing in RGB332 during stress testing: pass > Testing WPF packing in ARGB555 during stress testing: pass > Testing WPF packing in XRGB555 during stress testing: pass > Testing WPF packing in RGB565 during stress testing: pass > Testing WPF packing in BGR24 during stress testing: pass > Testing WPF packing in RGB24 during stress testing: pass > Testing WPF packing in ABGR32 during stress testing: pass > Testing WPF packing in ARGB32 during stress testing: pass > Testing WPF packing in XBGR32 during stress testing: pass > Testing WPF packing in XRGB32 during stress testing: pass > ./vsp-unit-test-0021.sh: line 34: 4489 Killed stress --cpu > 8 --io 4 --vm 2 --vm-bytes 128M - vsp-unit-test-0022.sh > Testing long duration pipelines under stress: pass > ./vsp-unit-test-0022.sh: line 38: 6457 Killed stress --cpu > 8 --io 4 --vm 2 --vm-bytes 128M - vsp-unit-test-0023.sh > Testing histogram HGT with hue areas > 0,255,255,255,255,255,255,255,255,255,255,255: pass Testing histogram HGT > with hue areas 0,40,40,80,80,120,120,160,160,200,200,255: pass Testing > histogram HGT with hue areas 220,40,40,80,80,120,120,160,160,200,200,220: > pass Testing histogram HGT with hue areas > 0,10,50,60,100,110,150,160,200,210,250,255: pass Testing histogram HGT with > hue areas 10,20,50,60,100,110,150,160,200,210,230,240: pass Testing > histogram HGT with hue areas 240,20,60,80,100,120,140,160,180,200,210,220: > pass - vsp-unit-test-0024.sh > Test requires unavailable feature set `rpf.0 rpf.1 brs wpf.0': skipped > 158 tests: 142 passed, 0 failed, 3 skipped > > Kieran Bingham (8): > media: vsp1: Reword uses of 'fragment' as 'body' > media: vsp1: Protect bodies against overflow > media: vsp1: Provide a body pool > media: vsp1: Convert display lists to use new body pool > media: vsp1: Use reference counting for bodies > media: vsp1: Refactor display list configure operations > media: vsp1: Adapt entities to configure into a body > media: vsp1: Move video configuration to a cached dlb > > drivers/media/platform/vsp1/vsp1_bru.c | 32 +-- > drivers/media/platform/vsp1/vsp1_clu.c | 102 +++--- > drivers/media/platform/vsp1/vsp1_clu.h | 1 +- > drivers/media/platform/vsp1/vsp1_dl.c | 393 +++++++++++++---------- > drivers/media/platform/vsp1/vsp1_dl.h | 19 +- > drivers/media/platform/vsp1/vsp1_drm.c | 35 +-- > drivers/media/platform/vsp1/vsp1_entity.c | 26 +- > drivers/media/platform/vsp1/vsp1_entity.h | 38 +- > drivers/media/platform/vsp1/vsp1_hgo.c | 26 +-- > drivers/media/platform/vsp1/vsp1_hgt.c | 28 +-- > drivers/media/platform/vsp1/vsp1_hsit.c | 20 +- > drivers/media/platform/vsp1/vsp1_lif.c | 25 +- > drivers/media/platform/vsp1/vsp1_lut.c | 77 +++-- > drivers/media/platform/vsp1/vsp1_lut.h | 1 +- > drivers/media/platform/vsp1/vsp1_pipe.c | 11 +- > drivers/media/platform/vsp1/vsp1_pipe.h | 7 +- > drivers/media/platform/vsp1/vsp1_rpf.c | 183 +++++------ > drivers/media/platform/vsp1/vsp1_sru.c | 24 +- > drivers/media/platform/vsp1/vsp1_uds.c | 75 ++-- > drivers/media/platform/vsp1/vsp1_uds.h | 2 +- > drivers/media/platform/vsp1/vsp1_video.c | 82 ++--- > drivers/media/platform/vsp1/vsp1_video.h | 2 +- > drivers/media/platform/vsp1/vsp1_wpf.c | 327 +++++++++---------- > 23 files changed, 845 insertions(+), 691 deletions(-) > > base-commit: 8514509ba5933f4e4ade0d5d81be117f18c1ebd2 -- Regards, Laurent Pinchart