* [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H
@ 2025-11-11 16:34 Daniel Scally
2025-11-11 16:34 ` [PATCH v6 1/3] dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block Daniel Scally
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Daniel Scally @ 2025-11-11 16:34 UTC (permalink / raw)
To: linux-media, devicetree, linux-renesas-soc
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Geert Uytterhoeven, Magnus Damm, Philipp Zabel, jacopo.mondi,
biju.das.jz, laurent.pinchart, Krzysztof Kozlowski, Daniel Scally,
Jacopo Mondi
Hello all
This series adds a driver for the Input Video Control Block in the
RZ/V2H SoC. The IVC block transmits input image data from memory to
the ISP core (on this SoC, a Mali-C55 ISP). The driver registers an
output video device for userspace to queue image buffers to. One
noteworthy feature is that - because it is not a part of the main ISP
drive - the IVC driver also registers a subdevice, which connects to
the media device created by the ISP driver through the usual v4l2
async framework. This requires delaying the registration of the video
device until the .registered() callback of the subdevice, so that the
struct v4l2_dev pointer the subdevice connected to can be set to the
video device.
This version of the driver drops the reliance on the new media
framework that was posted recently [1], so can be merged without it
and updated later. The series is also based on top of the latest
version of the Mali-C55 driver [2].
Thanks
Dan
[1] https://lore.kernel.org/linux-media/20250624-media-jobs-v2-0-8e649b069a96@ideasonboard.com/T/#t
[2] https://lore.kernel.org/linux-media/20251111-c55-v13-0-3dc581355e3a@ideasonboard.com/T/#t
---
Changes in v6:
- No series level changes.
- Link to v5: https://lore.kernel.org/r/20251002-ivc-v5-0-192c663fa70b@ideasonboard.com
Changes in v5:
- No series level changes.
- Link to v4: https://lore.kernel.org/r/20250714-ivc-v4-0-534ea488c738@ideasonboard.com
Changes in v4:
- Dropped the mc / V4L2 helper patches - they're in the C55 series instead, the aim
being to avoid creating a circular dependency between the two sets
- Link to v3: https://lore.kernel.org/r/20250704-ivc-v3-0-5c45d936ef2e@ideasonboard.com
Changes in v3:
- Added two new patches that create helpers in V4L2 and mc core that
the driver then consumes.
- Link to v2: https://lore.kernel.org/r/20250624-ivc-v2-0-e4ecdddb0a96@ideasonboard.com
The rest of this message is the v4l2-compliance report for the video
device and subdevice:
v4l2-compliance 1.31.0-5380, 64 bits, 64-bit time_t
v4l2-compliance SHA: 1cc84dfb41d8 2025-07-08 08:28:16
Compliance test for device /dev/v4l-subdev3:
Driver Info:
Driver version : 6.15.0
Capabilities : 0x00000000
Client Capabilities: 0x0000000000000003
streams interval-uses-which
Required ioctls:
test VIDIOC_SUDBEV_QUERYCAP: OK
test invalid ioctls: OK
Allow for multiple opens:
test second /dev/v4l-subdev3 open: OK
test VIDIOC_SUBDEV_QUERYCAP: OK
test for unlimited opens: OK
Debug ioctls:
test VIDIOC_LOG_STATUS: OK (Not Supported)
Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 0 Audio Inputs: 0 Tuners: 0
Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0
Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)
Control ioctls:
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
test VIDIOC_QUERYCTRL: OK (Not Supported)
test VIDIOC_G/S_CTRL: OK (Not Supported)
test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 0 Private Controls: 0
Format ioctls:
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
test VIDIOC_G/S_PARM: OK (Not Supported)
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK (Not Supported)
test VIDIOC_TRY_FMT: OK (Not Supported)
test VIDIOC_S_FMT: OK (Not Supported)
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK (Not Supported)
test Scaling: OK (Not Supported)
Codec ioctls:
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
Buffer ioctls:
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
test CREATE_BUFS maximum buffers: OK
test VIDIOC_REMOVE_BUFS: OK
test VIDIOC_EXPBUF: OK (Not Supported)
test Requests: OK (Not Supported)
test blocking wait: OK (Not Supported)
Total for device /dev/v4l-subdev3: 46, Succeeded: 46, Failed: 0, Warnings: 0
v4l2-compliance 1.31.0-5380, 64 bits, 64-bit time_t
v4l2-compliance SHA: 1cc84dfb41d8 2025-07-08 08:28:16
Compliance test for rzv2h-ivc device /dev/video3:
Driver Info:
Driver name : rzv2h-ivc
Card type : Renesas Input Video Control
Bus info : platform:16080000.isp
Driver version : 6.15.0
Capabilities : 0x84202000
Video Output Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04202000
Video Output Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name : mali-c55
Model : ARM Mali-C55 ISP
Serial :
Bus info : platform:16080000.isp
Media version : 6.15.0
Hardware revision: 0x01d982d6 (31032022)
Driver version : 6.15.0
Interface Info:
ID : 0x0300002a
Type : V4L Video
Entity Info:
ID : 0x00000028 (40)
Name : rzv2h-ivc
Function : V4L2 I/O
Pad 0x01000029 : 0: Source
Link 0x0200002c: to remote pad 0x1000026 of entity 'rzv2h ivc block' (Video Pixel Formatter): Data, Enabled, Immutable
Required ioctls:
test MC information (see 'Media Driver Info' above): OK
test VIDIOC_QUERYCAP: OK
test invalid ioctls: OK
Allow for multiple opens:
test second /dev/video3 open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK
Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK (Not Supported)
Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 0 Audio Inputs: 0 Tuners: 0
Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0
Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)
Control ioctls:
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
test VIDIOC_QUERYCTRL: OK (Not Supported)
test VIDIOC_G/S_CTRL: OK (Not Supported)
test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 0 Private Controls: 0
Format ioctls:
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
test VIDIOC_G/S_PARM: OK (Not Supported)
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK
test VIDIOC_TRY_FMT: OK
test VIDIOC_S_FMT: OK
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK (Not Supported)
test Scaling: OK
Codec ioctls:
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
Buffer ioctls:
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test CREATE_BUFS maximum buffers: OK
test VIDIOC_REMOVE_BUFS: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)
test blocking wait: OK
Total for rzv2h-ivc device /dev/video3: 49, Succeeded: 49, Failed: 0, Warnings: 0
To: linux-media@vger.kernel.org
To: devicetree@vger.kernel.org
To: linux-renesas-soc@vger.kernel.org
Cc: Rob Herring <robh@kernel.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: jacopo.mondi@ideasonboard.com
Cc: biju.das.jz@bp.renesas.com
Cc: laurent.pinchart@ideasonboard.com
---
Daniel Scally (3):
dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block
media: platform: Add Renesas Input Video Control block driver
MAINTAINERS: Add entry for rzv2h-ivc driver
.../bindings/media/renesas,r9a09g057-ivc.yaml | 103 ++++
MAINTAINERS | 7 +
drivers/media/platform/renesas/Kconfig | 1 +
drivers/media/platform/renesas/Makefile | 1 +
drivers/media/platform/renesas/rzv2h-ivc/Kconfig | 18 +
drivers/media/platform/renesas/rzv2h-ivc/Makefile | 5 +
.../platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c | 250 ++++++++++
.../platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c | 375 +++++++++++++++
.../platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c | 533 +++++++++++++++++++++
.../media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h | 130 +++++
10 files changed, 1423 insertions(+)
---
base-commit: b4fbb13db86adb0bae1d7f968b61ea8dc9635e33
change-id: 20250624-ivc-833d24376167
prerequisite-change-id: 20250701-extensible-parameters-validation-c831f7f5cc0b:v9
prerequisite-patch-id: d44c7373dcea611df59477495ba7335a04cee0cd
prerequisite-patch-id: 34e9f43b412e5018366864837b59cee72a05abd3
prerequisite-patch-id: a015f2e8c5fee026c0bbc29e99e6967e03e75941
prerequisite-patch-id: cf9d39047475b461e07831bc4504c06b63a9f225
prerequisite-patch-id: b0781eb6976b35e01381ac9a12ac7caa6d90822b
prerequisite-patch-id: 4cf6f480b8d4c4cd8d392d096f7fae26b206edee
prerequisite-patch-id: 03df5085a95aff837c10ac02e9fdb1234a829738
prerequisite-patch-id: a775e4a3a9873b5b42516a32429705c853747a5a
prerequisite-change-id: 20250624-c55-b3c36b2e1d8c:v13
prerequisite-patch-id: b44c6d392d3ea0b7c926dcb64dcfe81bc5cc994a
prerequisite-patch-id: 67cf7e8a5eb3ce4ab41ff3b30f37860e462fbc3e
prerequisite-patch-id: e9274bd7447362f042e23c1666bf87a2a512b3ee
prerequisite-patch-id: 97449fd348447738649d1b30a929807a1dc8cf15
prerequisite-patch-id: 1fd966be1cdd0591f176ed757eb12e6949ddcac2
prerequisite-patch-id: 0e0ca3e62a0ab6454623d1cd89884364175e7ec8
prerequisite-patch-id: 029256a1349a0eb17238382b1c3786f810395d4f
prerequisite-patch-id: 6536b37b979941aba91b7ce7bb25d6297781c4bd
prerequisite-patch-id: 93dd387b8f2394519f9cb07448b3e3d5693a67dc
prerequisite-patch-id: a149fa4aa6909c201d46f66ba67ac585207ff184
prerequisite-patch-id: 937e2edd8e3cba32d47568aca12b6362afe8257c
prerequisite-patch-id: 5e500c54544191247fb0f0e9893dff50adcd6e42
prerequisite-patch-id: 9a5cfd77ceb15f54243a193fcb0ade0068039e23
prerequisite-patch-id: 2aff188403971106027ec240ecdf31e9ce8c1924
prerequisite-patch-id: 11cdcdc963756d7cea8bacaa5e6bec82e84c8b60
prerequisite-patch-id: ef6d9391a49d677b32fc47db68076bb83a88d00b
prerequisite-patch-id: e2957393ecffdc80ce6d8e3f68ae6114fc129637
prerequisite-patch-id: 9a72c93f06f65159fe9200e676d86c9ee2a12d44
prerequisite-patch-id: a552b8bcc14e9ffe0d666218bf959b8d6071df0f
prerequisite-patch-id: aa271c5071344848a6d31a01e412718a0686bbbe
prerequisite-patch-id: 0e3b19ab6a65dc3da0c8a527b0f2f147328d434e
prerequisite-patch-id: 1ca0738fbcd3800fb1bbca783eab35fd93982676
prerequisite-patch-id: aeb73522fbec9069b9a7743bd27a61e1913f4f84
prerequisite-patch-id: 30989729886eab6cb0187c82240fdb9350cd70d0
prerequisite-patch-id: 54129945022314c14b8189414f9c0b11ad06ef70
prerequisite-patch-id: b4f08ad396087292a19c77b5ed6f18a4adbd412a
prerequisite-patch-id: e58132a9f7ddb1834b3f954192060a30c0117322
prerequisite-patch-id: 2284290c5021a6efe82f911f0d86311b3f0c5794
prerequisite-patch-id: 228921911bf7e43fb4edfe3bf1ee5d7538e28c49
prerequisite-patch-id: f2b6fd05b822f3bb6a13b58ee3fc06adb1fef315
prerequisite-patch-id: df7d3bcd3d0167c84933e090b997493deed2e6c2
prerequisite-patch-id: f0caaf5bd9d2cd1799fb4ebdf9e0cafab9bf5154
prerequisite-patch-id: ab495bf70020c09e7566db0f78a2814a602e033f
prerequisite-patch-id: 9186f7e1f45383ac5d268c868437fcd8b5644f5b
prerequisite-patch-id: c848f55978dd0fb337e7a4c7f10960ffbec0dd0d
prerequisite-patch-id: 012b29d1a2a965628fa9fbf6f50b4c480c1ad2b4
prerequisite-patch-id: 296a3075ff954b33f335304a530a2555a3ae8565
prerequisite-patch-id: fec42ea4d2ce80643fa288812e90ae652c05451a
prerequisite-patch-id: 0cd037b4c8483ba97a45a46c9a6b4b9cc21452bd
prerequisite-patch-id: 1aede0a0e19cfead4349415b8cb614d070a92b97
prerequisite-patch-id: b68d520f10eb8988512523ec22fde41dc58878b2
prerequisite-patch-id: 3c82693836ee2576b2da72fe8f0d544c84a20850
prerequisite-patch-id: cd34ef524f7b5e2c6c5bc23ca7e088450f1e00a0
prerequisite-patch-id: d607b042b9f26ff973e11946a260ff388cbe3bb8
prerequisite-patch-id: 12043ab558e621fa31886e1181b58082a4820355
prerequisite-patch-id: aefb1a203ec889dfcb85692b6891d9c17b5f25b1
prerequisite-patch-id: 53294b21e3a7e13eb2f0962d68c95107c4152539
prerequisite-patch-id: d8adecb0f86baa4f6ef5d041b6c727a133e156c3
prerequisite-patch-id: 8c10add5b4536b0d17d0983e02b9280ae618628c
prerequisite-patch-id: 20ef82587c45da9ca1cf37a38770483ec85132eb
prerequisite-patch-id: 5952ebe0042c78bd59deb819a08b38bf2c8a6b0a
prerequisite-patch-id: eef21ebe23e72527992a9163e70add905a679a0c
prerequisite-patch-id: b42a126655cb0392b31e7e0f294e6023f5578eb8
prerequisite-patch-id: 26efbccac2c4ca6e694c6f6839b75d5dbf5dcecc
prerequisite-patch-id: 7f91856ff1f9b87a4fcaf69134fc715a706cb86a
prerequisite-patch-id: ec31dde2c3ab010619d483ec23b4ee513da90072
prerequisite-patch-id: 2e278c3a121fc3e741c3a77586a57aa87180788c
prerequisite-patch-id: ffff93114bcbe709a52eae2c12ae98f5eca7cf4b
prerequisite-patch-id: c7acec57c76a69220fd7766599b33ed0975450bc
prerequisite-patch-id: c961fc1330af81fd3135ed17997fc470984b32d5
prerequisite-patch-id: 5658d046126a61c8bd41e75e38eeae730ceb0c9f
prerequisite-patch-id: ecca906b43bd9836cba51d35a72ca09b24afcb62
prerequisite-patch-id: ebeecb7a2620424b9cdd9a1d0daeb2a33baf39c9
prerequisite-patch-id: e10263239ee987198af4e90345fd0c0499878c0a
prerequisite-patch-id: 48837ce463773807427541659ed6a2119c9fabbc
prerequisite-patch-id: 8ad4a533af8dbedb9442562897b9dd79f81e7f93
prerequisite-patch-id: 87ab2b87df3392dd32ae3c9fefd62a74ed92aa34
prerequisite-patch-id: 43305afdec94a0320d79bdd7535b94e556b9c34e
prerequisite-patch-id: 7f6a6eb926164f47a0aa0bd55648ca272f69cd3c
prerequisite-patch-id: a2baf23fcd354808099b5b5d8fb95ce6f5f72ee5
prerequisite-patch-id: db985bf4ff07a07eab1fdb9953f2e4f2f3b70cd2
prerequisite-patch-id: dc677c33d5b50b12b41419175c259f3d04990ce0
prerequisite-patch-id: 2212fc21f551ec2e441482c003084516b0609c88
prerequisite-patch-id: 305b9d6f01b9e87fb35e84237426ef86fd3aee1a
prerequisite-patch-id: 37384a78592a44a3be6ead5befe6012b6fdbc7b2
prerequisite-patch-id: e441532a202669cda239125468cc5d2da09d2131
prerequisite-patch-id: b0e4da673aeec9cd2218975ee801fa0ce8b0059b
prerequisite-patch-id: c4896f3eedb47eb5282a33696664a4c797b3ddea
prerequisite-patch-id: bf121ac69e42e3658b3e866e63d022a8a5662028
prerequisite-patch-id: db0ad82b8260c9124aa9a2da7224964eb7d3353d
prerequisite-patch-id: 80bca3385fde57b21a82f0e4f17f4320d34729db
prerequisite-patch-id: 6756b81573d93df41cc629f5f4e048d507ad3918
prerequisite-patch-id: e1642d538d56c46819094c10b88536980f0611ba
prerequisite-patch-id: 837d7ece78934e0cfbf1a0cc9c18de0fb11d8689
prerequisite-patch-id: 854e6300aabc5ee6ea1f442357dc5dd026cf3e77
prerequisite-patch-id: 4c00a0bc4b95250ca80111f314152811a033a5ce
prerequisite-patch-id: 2772a4ec23ae816ceeedebec16de5af970d1612e
prerequisite-patch-id: 94f7ea298b60e6cd126c6e1251c97b0d5c3e1d3b
prerequisite-patch-id: ca1a366a15cfa6840cb64be5c4acb4b8583b22bb
prerequisite-patch-id: a5951397ac7164c5153b67fa2761d4379e5bbd62
prerequisite-patch-id: e1a902479cb146c37057e019f7e963dde9019981
prerequisite-patch-id: 3e49b0ac4610f95b6c626d50f9864eef7b318357
prerequisite-patch-id: 9459dd9c12e4f2b54795c7761da8e9c47c277217
prerequisite-patch-id: d918f907d0ca4263199eef2c31366ccce400b3eb
prerequisite-patch-id: d5d1590fbd57b2a7601af81be5d8889bff61c12b
prerequisite-patch-id: 4be4287a8febed334216ec45782a48c984c1adf8
prerequisite-patch-id: 4cc10e8fc920a744520690dd2d7a3230b896cf9b
prerequisite-patch-id: 85bd99791683cebebbf6c0242182e3745c39cb66
prerequisite-patch-id: 1f5cb194656b2a640633f4ef4d78c4dffd3df9d6
prerequisite-patch-id: 620c73ade02d15d29827a97ae91af6fd12e79fa1
prerequisite-patch-id: dfb7ea4e1eb28eb7544951fdc6bda1c5b3b8002b
prerequisite-patch-id: 71f29cd45ba563169d2837e236e9a5af10eba8d7
prerequisite-patch-id: 20564ebc10c53b5fb3514e3f456b4d2006ee1db8
prerequisite-patch-id: 2848992d688295efe969f5373ab4f2b73e278b1e
prerequisite-patch-id: 30f3356eb804482b97b78c657e989c6de9b21629
prerequisite-patch-id: 8cb5df16789b48e6ffab456f0b50098fe59bbe31
prerequisite-patch-id: 7e09e6f1695fc289d6633b00a98146610840648d
prerequisite-patch-id: 39df9cf6fedd55b3e3176fd45b50a7f8720fb03b
prerequisite-patch-id: b84ebd86dc903c2e4fe6f8643a8af5d100b629ff
prerequisite-patch-id: 2573b0a64c7468309b2f4b4f8702714d2c4e891b
prerequisite-patch-id: 1e466a227763e112be3e0eba23f54b46e1868bc1
prerequisite-patch-id: 8181cee329d7b3cdc4d9cbcd6c10888c4c925c26
prerequisite-patch-id: 74c9830da112397b6a81f13b5aa2b9fe6a298e57
prerequisite-patch-id: f0c6b3ab76fa4e383bd7302db7e1a56f6acc8fe8
prerequisite-patch-id: fa0e8ecdbb2a88f10f7fd28a3a3b3d3878377802
prerequisite-patch-id: b5d2386f92afe5a5fd3a866c042ae06ea6a4c61f
prerequisite-patch-id: 4ee6686d543b2968316ef88230173d2495b18912
prerequisite-patch-id: 25e5ca9785d28bc2a08e0b46769f414f5937ea3f
prerequisite-patch-id: 23c53b67df520bcd3edb4363741b2c365086473b
prerequisite-patch-id: 39752109dd57313ec8ea15067f315227db793795
prerequisite-patch-id: be6d10df8a43745b18c8b2948f741b1c652f44a3
prerequisite-patch-id: 6d3bbe0c532c6ba728e809b5c5b1035419c32734
prerequisite-patch-id: 2311fd00e95647b8f977276e7e9867b1cfe97fc2
prerequisite-patch-id: f90b085e981d28366e2e42dc425f7d9d6a776f91
prerequisite-patch-id: c6f34fa376e35a8960f236064c3033505b2d3642
prerequisite-patch-id: 6c340a4cd218b31efb9118b47f85bd6d7a985fb8
prerequisite-patch-id: 32dcf3aae627357583b964689fd19746f715b549
prerequisite-patch-id: 98aebace371b9d857fcdf15649dba5a059fb23cc
prerequisite-patch-id: 7b447199429c7b64b67145a448dbd6386e3d23e0
prerequisite-patch-id: 11f191d9e17bdb0405fe9e247fe0182e1d01cb51
prerequisite-patch-id: bf3a627a3f41c5652909a6ea449fa03945a55f29
prerequisite-patch-id: 70853eeed6576bfcc6579333875ba3eeeef0cef8
prerequisite-patch-id: 3f3714d32e15eef8054bb2375c9e4fb5adaef2d1
prerequisite-patch-id: 7ca2fa7d525255f5fa48735870e4bcc8eb327280
prerequisite-patch-id: d5716a401571dfc4a928b960d976b0317d03c22f
prerequisite-patch-id: 8bac7f764dc4d3b1860a9ea812e08ec76514e2b6
prerequisite-patch-id: 31225ba242d1773299cbf4f165e52b66ebd437d8
prerequisite-patch-id: e847dc4e55ce214c4badc67adc59484c5afb025a
prerequisite-patch-id: 1e17cfeb8127e6f366ad653bd5b232a9dab79702
prerequisite-patch-id: b230f4e1efa7272b787502e095ed200580f304ef
prerequisite-patch-id: e27565adf6f5b1510d1614f73afb302b94d9917e
prerequisite-patch-id: 09052a97197aef658ef43210823643178cc79b10
prerequisite-patch-id: 43bf7b62b7d957009ac34d8e5b53a74c7ef68595
prerequisite-patch-id: defc342d0cc1160330832b543c3e97ff20b38f0b
prerequisite-patch-id: 6cbe2d7e787f3965516672637309e9ce8f692a49
prerequisite-patch-id: 9a6a5a4a5a10a7836dd6bef0121ae067f89767e7
prerequisite-patch-id: ea8507b1ec426eeed80f8c1bbd5206e7ff92ef3c
prerequisite-patch-id: b2be17e9ee03926c00b7a8e47495c211bec1f603
prerequisite-patch-id: b4b7d103520f0db86f9f90c6c7cb3eb2f87a8f97
prerequisite-patch-id: 9ec1343d7829efddb8e110008988daf651c6d28d
prerequisite-patch-id: 7d6c9d73fdb29a6899a4631786a7d11d8fd75fc3
prerequisite-patch-id: 728cbc1d981986ebebf939a7f09f4cca3d0f7536
prerequisite-patch-id: 647449b5c2729985f080cf66ec4d082ec28b6b13
prerequisite-patch-id: 8568617d52538f483c5ad5a931fe168b89f9e005
prerequisite-patch-id: 25db20489e41187905ab0ce5cee3e39427f81453
prerequisite-patch-id: be4273aa57947915280d9db525990c1299aba67e
prerequisite-patch-id: dd45dc136bbbb7e143a2ac2c8a7f53c948b77837
prerequisite-patch-id: 7ddcb71426c7d2d1be27f4030874631b862d0964
prerequisite-patch-id: 7c5d5c4212a4bb46551866ee8c1c7d9a98d3be79
prerequisite-patch-id: 31049cd929119eeaba776c38c3575bd88bf77fb4
prerequisite-patch-id: 690e38d62a6094c785281ed4e4c6ef93173aee3c
prerequisite-patch-id: 5f19bbb28e92bd151fb987d15852fb92940321ea
prerequisite-patch-id: ef76bfc2007cb95a3e166426604d71ea052fbfc9
prerequisite-patch-id: 3c6eb6a9aee413e51fdb70898c309b5da8409924
prerequisite-patch-id: a8daad95229643a1e8c8f3c587fa4171c0facdd8
prerequisite-patch-id: f6d1e66a3f6b4beaefc7cdc0a2598ea9e1448bf3
prerequisite-patch-id: 7674957b24391761705bc3d80a86d70ff25b1a2b
prerequisite-patch-id: 866bb125754bd895c91848e849d780dde8d2b14e
prerequisite-patch-id: 3d9163f333f80bde13339b4791c8946aa96dfec8
prerequisite-patch-id: a94bad269af095540461b4b930075dc4337dc605
prerequisite-patch-id: c1bcfe2a4df7f23dab3255fa506b21a77da912f7
prerequisite-patch-id: 7a385e1656c7cdfffc95615cbfa2aa5307296110
prerequisite-patch-id: f72c9e9926ea23cac24a6e98ab65f94c06261773
prerequisite-patch-id: 3b73836f03b3c0fc6c393b4311877f7618d6b783
prerequisite-patch-id: c50977faa1efbde6ca0736c52c39e9924fa9a2e3
prerequisite-patch-id: a13e0afa81dc5bbde559b3563388d1cfd2adbf16
prerequisite-patch-id: 051750102f32905936538b0d19d64758e080c6ba
prerequisite-patch-id: 485ce66205d02879dcb8e40a88504618beef6f2c
prerequisite-patch-id: 8a7529d1a2e4dded84c87b2af41040c3d1e645ee
prerequisite-patch-id: b7e4f1908ddefac193e235012f3bfd1d6e12f6c0
prerequisite-patch-id: ebf446fae4718c3e708e6b7dfeb58eed7f16a429
prerequisite-patch-id: 70fb1f0426a85351171afd0d78c8980f03e669ac
prerequisite-patch-id: 7e803ee6b883691e2cc118a881c97c412dc828a4
prerequisite-patch-id: 26d33b3e46afc56478810e33fa08064c47ac249e
prerequisite-patch-id: 8b0c687b6be1b2f2be3d7e1e35db9fd7eae7cf1c
prerequisite-patch-id: 15424b710d6d19e4c18cc325661d78f4001cf4b8
prerequisite-patch-id: 8cdeeb2dd2ff0ccfdb8f735af565b2cfc66bffda
prerequisite-patch-id: 67df34431e9f963241fd02d11963df59bdba79a8
prerequisite-patch-id: e2ba31f935afd87f158ec5caab17897f9c89ce23
prerequisite-patch-id: ebf82917965fd313cdf5cc377041084a12e2196a
prerequisite-patch-id: eb24019324fe3ae11a1572baa45e13204dbdaa9a
prerequisite-patch-id: c5ba491eccbd16f3fa9655cf0ad46f6c4c95daf3
prerequisite-patch-id: d576056ab2a40d54aac8eac45c014ff339909f80
prerequisite-patch-id: 0acb6bcd8c9392ecad6ae070494ce70afb0af5fe
prerequisite-patch-id: e39d5334fd9357ed6a0d858d4b49c33be6906e21
prerequisite-patch-id: c853f677277c05f534c270255398614dc0b9d63c
prerequisite-patch-id: 920ea314f2305eaefe851389e717f70eec881634
prerequisite-patch-id: c8ab4fdf8c16fc261cb7a5b4253db02a38e14ed3
prerequisite-patch-id: b621b741072c4b6571ab7e4f733e058a99478374
prerequisite-patch-id: f396597611c944de6ece4e9206cdae686e8c1b08
prerequisite-patch-id: 79a788d212888c162aefa3213a9b97e95de2d7c1
prerequisite-patch-id: 1f30297179a0abbf3633f25afa79c820d82db5a5
prerequisite-patch-id: c6644a4cfa8772171d53add86d6845e9aefe0250
prerequisite-patch-id: ea04ea6b42b6f76519690f0d814ee8619d83e093
prerequisite-patch-id: 11aaf40b9df122388d10a8727ad988ff50fd28ad
prerequisite-patch-id: e390c0e3f554f9071ba23795f3e89efc0c56e402
prerequisite-patch-id: 3af286b67557824c22e6c0b69a4fd7f71a3a5e44
prerequisite-patch-id: 3b5954348028a1cf286aab88b195ad58e86bf818
prerequisite-patch-id: 991d224d627df821facf0ccea3ef117fb5876b97
prerequisite-patch-id: 90a9a3d51c3714021f24a6238bbc4a58e3fa7099
prerequisite-patch-id: d31f482ffd6cefc201e9e748bf643dae6be37253
prerequisite-patch-id: d463da0b0ff32f4d6149323f20c86146a56bb8c2
prerequisite-patch-id: 77622bf5aa13366da6f42eaee17c99dad27f87e3
prerequisite-patch-id: 9961910a95f1f09f9a33ac8b53aa30749869f9f3
prerequisite-patch-id: ff80043e541fcf8a9b214af6d6e0815d1870a046
prerequisite-patch-id: bc008d2fced480ffae1e331233e471cd6a930b61
prerequisite-patch-id: 064db6c4326b8d65605607db33d873317eeae5c9
prerequisite-patch-id: 4724e9a52ba6b74d90f83e7fc733df41ba3d3379
prerequisite-patch-id: 20f61811071effaf803d91211e9868cca41205c9
prerequisite-patch-id: e0ecd006c2a079c33d4faef3d356cf66b21f267c
prerequisite-patch-id: 9936613917607f64a8bfe8481b153271e4b413b8
prerequisite-patch-id: 56784e1b64572f830153f43361ea22587096e449
prerequisite-patch-id: a482941cab679888d697341e6429d28a37054198
prerequisite-patch-id: 8060200fae329414067f2d450fec7b01d5aec4b3
prerequisite-patch-id: 6a8123da11c560380408fe084b0913427b29be81
prerequisite-patch-id: 1891adbc820553d454e98085861d1192344bdf6c
prerequisite-patch-id: 0b55a939c2e61f5bdcc3dc70fb6bf620a190a03f
prerequisite-patch-id: d2e0373aa7f9518049edd7b66b84e565720c8ef9
prerequisite-patch-id: dcdcf55933a003cf5bd852eed1623a24ad1167c8
prerequisite-patch-id: 3be02ca4a12784254a5aa7c58c048f273ceb6931
prerequisite-patch-id: 143028d564a838b61be9440931f3203e3bd3df85
prerequisite-patch-id: dcf40e8b880dbe5a9ec809e1bf8ab84ecc45177f
prerequisite-patch-id: 869bafbd39268af6ba3ea0e55b57392188f137de
prerequisite-patch-id: 73ac29ef58df43147f6d8b30c89c0f4ac121c9c5
prerequisite-patch-id: faae6cb14a44ab03651ca3495789c82744329652
prerequisite-patch-id: f4cb3ec5271a8999776fe377bacbb5f9ddc0e251
prerequisite-patch-id: a85038bb895dbf768acfd83db86acb7c07e52282
prerequisite-patch-id: 67a1d8120994e14faeb093b5fa9f776d7e4f644a
prerequisite-patch-id: eb320b975722c458316bac7e43901a1b0fb10f2f
prerequisite-patch-id: 374a5b67ae30be177c475dab78eaf5c2b8b827f8
prerequisite-patch-id: 61f3db09e8c494b66b1a100c4af1c76b19e094a0
prerequisite-patch-id: 984326c0633131dc559bc97a8040993207319786
prerequisite-patch-id: a2919dae0a95cfffb64622a7f8bc314354674595
prerequisite-patch-id: 579104a1e95cf2e7483a6c52b5592c9e19b18be4
prerequisite-patch-id: 537134cd170519636588f898fb55bf7255962fa1
prerequisite-patch-id: d62b7579ecaa9b5b0bd631f8711ae8bf3e0c4439
prerequisite-patch-id: a060d88b02e0c7809fc313177261683344275e34
prerequisite-patch-id: 21d90a6f996f467f931a45c0f64ab120a5eb3973
prerequisite-patch-id: 7ee1a7ea0497a3e9441a562fd8e1190c447ee928
prerequisite-patch-id: 55cb5c7bc5f5e9c1d8d72e1a3e1ad67c67c9cba2
prerequisite-patch-id: 05df40a7917637a33b36c8bc2864c9ef18acb474
prerequisite-patch-id: 7085d51d6782d51c9257033c6104ceb3e0e15097
prerequisite-patch-id: bda1d4f9676607d6cb72f46149aa3885a679ce37
prerequisite-patch-id: 0855db8607392f0eda070618622560f67f97860b
prerequisite-patch-id: 4231acf87f45767e9d76a7a6b9b3345512c637be
prerequisite-patch-id: 6d59ebe9aebcf3da8bc3b01431a7a8efd0f43393
prerequisite-patch-id: bbdba25bd7e1a08069085f6882d60408480d17aa
prerequisite-patch-id: ae4239097557521d3c54bd3da9db14c2a2434acf
prerequisite-patch-id: b5477df69e47ee7f567c579776efe59a6564cd7a
prerequisite-patch-id: 0789fabd3b3d399d9a64ad7aee270c16a9494556
prerequisite-patch-id: 7589bf9f71ca66b710642c29edaecf92a7941e33
prerequisite-patch-id: 255e9eaf6c77f6aae79ad42f682d1a3589200761
prerequisite-patch-id: c37d3e27d828991d5b8df62120f74529263ef0d1
prerequisite-patch-id: ac2b8a794be19be839591708ca8d637caf869b3d
prerequisite-patch-id: 5fbbd2b5858db631eb1d18ccd20b1654ef465f80
prerequisite-patch-id: 075394322e3322fd35fe03042b0c23f998c8f2c6
prerequisite-patch-id: 14ced2b512d0e020ab4b312421d0ea89bd2d1acc
prerequisite-patch-id: bf737dfb17eb4c553576db82a77cbaa373a80208
prerequisite-patch-id: 3b8d29520b91b020d6cf744471787e78b58c3048
prerequisite-patch-id: 7461da4b907818bf61e0115983c4062650687f20
prerequisite-patch-id: 88dde8792f47cad1c4b95f29f52607169972cb1c
prerequisite-patch-id: a6c6980b029d4f337fb0843d0181a2e52686b2a9
prerequisite-patch-id: b2476ebd7d9790144c6c37c8fd67a93381785fec
prerequisite-patch-id: ba9a67b42652cde7fb76f57c70785d76d8e9ed13
prerequisite-patch-id: 92a7c5624384d86a0b2a05d3abca3471c8cc555f
prerequisite-patch-id: 0dc5cd4a79cb037b75595ffc60374d37373b5b1d
prerequisite-patch-id: b123297e99e20f35de0244a554667f3d08015f4a
prerequisite-patch-id: cdfa4896573250c5d052bf1a0bc0f50583855fce
prerequisite-patch-id: f88a2014b66d855c395cac89ce76dc00b7e0db9b
prerequisite-patch-id: dd0ccd49f74237d48d64b538688b58eeb5d0a42b
prerequisite-patch-id: 2530ade2d5e5f859810e6f0cb3ed4eb340ffc3fd
prerequisite-patch-id: b608cd34e769150ea9eee8dbfa5b7448908bf261
prerequisite-patch-id: d84e4165bb98d1144d7decdb8e0a9dd3a178255e
prerequisite-patch-id: 41bb1510fb3bf36df2bcb75710642a2a01578232
prerequisite-patch-id: 1a18cca7f5057b3fefa8098d2366dddb323c436e
prerequisite-patch-id: 0e2b2ccda52317a4845db1e26c304318b5816189
prerequisite-patch-id: 63babaac329d55946c8240e3b926457f792202fe
prerequisite-patch-id: a1341583e71a6e2b78df1765de53ad177653a8e0
prerequisite-patch-id: a08b5db3ec36333493ddbd94822fd433a2324c1c
prerequisite-patch-id: cc561395407a41293d2a55f8c1c2dd39912412b2
prerequisite-patch-id: 6cbdb180679e5bef2dcea369c8c0b3571eba5c7a
prerequisite-patch-id: 31b01a1d5cbfa4d488d259605494a81b0a5f1570
prerequisite-patch-id: 38b22137e2f9b5dff51649fed0e6e820a89d2121
prerequisite-patch-id: be876d0cad26e47ebc00df3bd1dcecc24d09cb48
prerequisite-patch-id: 00a9e0e97c1cb747dd8ee87a596e80c938948309
prerequisite-patch-id: 9ad1ecb74b3660e501387b3f01705a012489ef0f
prerequisite-patch-id: db08adafcb9580884ae2fc9e2799fdb29d436c87
prerequisite-patch-id: e2c922fcfe55520fe055e300df79ed0bb26fd5cb
prerequisite-patch-id: f01d7c88f65625c0a2e81423fd38cf3999ed1728
prerequisite-patch-id: ea4ba4fbe6f932b6e9798258ba2f066478e1e3e7
prerequisite-patch-id: 8341d8a886b9ec379a70b7eb3cbfa5af64791aa7
prerequisite-patch-id: 317a25f10ac79991c3673ed9b9f4f1792acfce55
prerequisite-patch-id: a5afa3c978fb0988470f024801cf34ab226d238d
prerequisite-patch-id: 173137729a43ff61d2ae7e11c8adb51ed69088fa
prerequisite-patch-id: 015b245aa68f2f495730798b0cabd1ddfdb0dd34
prerequisite-patch-id: 498099182780efa32d549b0a5d8cca737c0996df
prerequisite-patch-id: 1e395d9d5bc3621e676f825d4aa18368f20d0c22
prerequisite-patch-id: c450212c2c882ae793740ddd8133572392437d11
prerequisite-patch-id: dd7fe7ff9ee02ec5fbe578f9aefa51c7aba2fa99
prerequisite-patch-id: cc4b07c7d922f3162574e562c73c7c9e54e18cde
prerequisite-patch-id: b07f4d00a21b4027c01c1f26de256042a047b15e
prerequisite-patch-id: d612d492dc46b0290ffbbf48ff878748abd18d3d
prerequisite-patch-id: c723ae3fad8a29e325af8d0c3e4a13fc5e10d91a
prerequisite-patch-id: e5bde884cae2b8eba74f3fed72f17a03cef9a6d7
prerequisite-patch-id: 2451898b4c136918d666ee756c07800f54c2a1db
prerequisite-patch-id: c217fce92fea0c1366604d27e281f5a4d1bd1c67
prerequisite-patch-id: 91e6d0b063f4defa7b9981b9d7c7ea320d689517
prerequisite-patch-id: be9b9249f8fdf4d047c25083f13823265af964a5
prerequisite-patch-id: 3e38b46c81e8c7e499e88614feadf887f376452a
prerequisite-patch-id: dabe595a852f2e69b7cc17222fce2c26eaa2c678
prerequisite-patch-id: 5afcf6e4559c0d2568062465fc9f8e86e3e96268
prerequisite-patch-id: bef138561378a03b47b3ddffd8f4134caf8d387f
prerequisite-patch-id: 3b6cabac220e10c5eb46542c6e39ccc34a99f86f
prerequisite-patch-id: 1bea39ff4dd99a1db65f049ed578b6d11694f96d
prerequisite-patch-id: 262c5e5c6ca80b45c370ae9f0696280268bf139b
prerequisite-patch-id: a29743d7e5d732319662d4d664b8f918ab560b55
prerequisite-patch-id: 36422aa8b726f046ba894955a0f7dabb5e09ec93
prerequisite-patch-id: d62962372776140a487f6d23d02b5bc386b602b0
prerequisite-patch-id: 47db08b3de5e6c083913255a3c42e8b522f26da9
prerequisite-patch-id: b59a13dee7bc05da29de3b3c4be5fc788bea628e
prerequisite-patch-id: d2a3880b4b8c67b1e39f49871f9d3d4894e1a491
prerequisite-patch-id: b5fdb0887f1c700856b547988f614bc62e3fce34
prerequisite-patch-id: eacd36384ffefa32ff059d44acf9c4b31b553150
prerequisite-patch-id: 62bbccb8c84ffc2dae6b4a13cfac7f71a1a009d9
prerequisite-patch-id: e7e55c4cdaed1d3c6537f3f3542a1174b1d2cc30
prerequisite-patch-id: 30b764db1f8ad6ff8db462660f656001dcb3ceab
prerequisite-patch-id: b2f8b93d7038578f118e5d63d742784533cf3867
prerequisite-patch-id: 00bea5e1b486eedfaf0753c71f87dfa5788937e8
prerequisite-patch-id: 8110ec66ab1720d4619099efe40c5b0bd25bf233
prerequisite-patch-id: dbc00a49cece87e4b1205822368cea55decefbf4
prerequisite-patch-id: a3c69e1a9dec6ae421e8aa5fabee45fa6ee661c6
prerequisite-patch-id: 2be0fa1063a7f41c316bc97349e0320d230d1ec5
prerequisite-patch-id: b1036a35119d75ed9f4a1c66e43a225713087c2e
prerequisite-patch-id: 8fc4662814ef14b93e5ecdc04857d5436a1b0a5d
prerequisite-patch-id: 3e16c29f37cc6bf46fcbe55012bbe97473cab2de
prerequisite-patch-id: 084ee99ce41dd1aa7f6c163dc9cd32d8149ff9e9
prerequisite-patch-id: fa96f7779e59f610c999e0a2c00094a3ff63e076
prerequisite-patch-id: 8de809b3e93087c02fb92645d1b9db7ec6461605
prerequisite-patch-id: 2f13e7b652ec52e1a4d2ca4c1f51780211357ff4
prerequisite-patch-id: ed75567635ebbf056302d09b029ded129f00afa8
prerequisite-patch-id: e63850287af152a6bb38d7f24f810623f9a7e46a
prerequisite-patch-id: 215a4cfd614e0c56a71afba7bc020bcf0c6a53b5
prerequisite-patch-id: 11e19466777324cc3b86ae1c01aa63903122a470
prerequisite-patch-id: aface0468f0ec0113a4c5e234d83a80f1565ed2e
prerequisite-patch-id: 6c8b891540d2c478a070800a5f91d082868eca0c
prerequisite-patch-id: a489a02c7d6b5fea5cc4158afdb89a559d12be76
prerequisite-patch-id: 74af80d27db50c3c88a244245ba9cad1ddd85afd
prerequisite-patch-id: 1b368a494be48f5325c63ab8e46460704802064a
prerequisite-patch-id: 8e572d81c51771a837e92a162ca3de2479f2ecc3
prerequisite-patch-id: d13bb91a5716132bdfb85054f7fb0568bbd9920a
prerequisite-patch-id: 1db2f658003bd8b84467062b73af67e69be39e6a
prerequisite-patch-id: b12d7093025e119a7b6fb2f794f0dbc349e627c0
prerequisite-patch-id: f017eb1ec684eee3954a15df2b1e43181475006b
prerequisite-patch-id: 61dd569d77f0b5b36e257138ed8e6bc65676e8c7
prerequisite-patch-id: 33b457ee1af37c206690e2c7cf88c78b2490be3a
prerequisite-patch-id: 7ad2db8a75ea138577c569732ba14ebc19fc1c7e
prerequisite-patch-id: a16fd20a839e2147cfe676dd54c002c1d49fbb31
prerequisite-patch-id: 54dcd98da9655909a5204ba644910ca633d1eaca
prerequisite-patch-id: 43c885c1fe6ef8f87ff8c368d65ce9c1470cf946
prerequisite-patch-id: 2573d603c89cd4229a03d855bdf6892a6d0699e6
prerequisite-patch-id: adde5dc1f5a21eb26287a8a91937afbfd4c08d18
prerequisite-patch-id: 05d54ddf7c6fff52ee63bae8078c753c7e7da71a
prerequisite-patch-id: ad8a1033d1f4843b16ca06039bc8d48dd4f11c8d
prerequisite-patch-id: d4e4a523d7f2d78e92d30d1a2785d2bd292f49a9
prerequisite-patch-id: 0818573849763d642c7e35c9c62e22c37caa216e
prerequisite-patch-id: d42a51e03301e7924420e8c96e84b9aa7832d97c
prerequisite-patch-id: 982cf689fa523ee28efdd48f83031f934c608c49
prerequisite-patch-id: 583be0cecf5879d46adf4486c5ad5afb82ea5be7
prerequisite-patch-id: edf210b702a3e165dc229faacd70107582b4c600
prerequisite-patch-id: 4cfe1ecf596591fb169eaa678a203afed7d2fc75
prerequisite-patch-id: 17914284400753a436491fc4fa1eb3e33208e25f
prerequisite-patch-id: 98c10a9e88fe8f9765ac21aed536621d936e5e1a
prerequisite-patch-id: ba5472c85ee0637983eada9ea7dcb8e47d14f3be
prerequisite-patch-id: 19cdead3aff2a43980d0dc80ad891e87772697a7
prerequisite-patch-id: 90626ae160be5ede4d3aa4d82014bc6135159bfe
prerequisite-patch-id: 08ca6e9774f5d99104604e65f797c3d2e975b416
prerequisite-patch-id: eac7ad4e1c8d32e67667375a0d7fad3a451219d9
prerequisite-patch-id: b16c6d9e4b587e18ff55009f5e2152e1d9c39f90
prerequisite-patch-id: edf0a0ee61378957c5ec1b1fdc21d74577142c56
prerequisite-patch-id: e668fec274468fc9d48474bd86b199e2c15ab721
prerequisite-patch-id: f0bd53e4cb4a6c011a8bacc58d89e88af658cb39
prerequisite-patch-id: bc39ae857ad751ecf65a269b0df1aaa4c8b87388
prerequisite-patch-id: ac861e78dfb6e2cf88da2c6e182ba7408194a61a
prerequisite-patch-id: 3b7235ab21d8d59653f9db45407f9f21cf6bb55b
prerequisite-patch-id: 402d3d20cba43b8f20a882fd4ec242c789c2e9ac
prerequisite-patch-id: e0e11343821eab0d0c3a1422ca740301d4d54b48
prerequisite-patch-id: f8d6969840104add8bb34a8b5e2b5f342203bbfc
prerequisite-patch-id: 3ca89024292f944a2d1ed2e7bff42f2e3eabca1e
prerequisite-patch-id: 0c54af3f76897d62f12b21a3799514de949e9726
prerequisite-patch-id: 978912307bcb9b9c47a1cad36bad00682d4add0c
prerequisite-patch-id: bb171df6e0ec64c2f09e0c45e1b9abbb98a1bdb0
prerequisite-patch-id: fbe6a5b0947b7b5f1db12b2f9859501a065db586
prerequisite-patch-id: 9df5fa0a5351ad54df9a3fb41a1f92ac60770ec6
prerequisite-patch-id: ec470a663d4090426b5a271726afb5150c59d374
prerequisite-patch-id: 3471767be352f66b58dab6356f312d25f7f7e82a
prerequisite-patch-id: 33529a978874ec47e3f1b9202aee3b9aa295c777
prerequisite-patch-id: ab0d340f3a621b9e00084c6f3d5ca3a4e7a5ebc5
prerequisite-patch-id: 860115c73b3cc2a54e0a1ec1f2de4c297894bef4
prerequisite-patch-id: cc98a078fbe85a940d64b1e19dae0331d6ddc028
prerequisite-patch-id: 09babbc4b36f03ac1ef6c8caf1d126bc3f201828
prerequisite-patch-id: e1062578a308a32d80cc15aaccb38495caaf5492
prerequisite-patch-id: 73fa0e2fbb10fa1c86bcddd0e63e3278ce6f5b6a
prerequisite-patch-id: 7cb0059cfefbb264706144b4b703894a3ddb157b
prerequisite-patch-id: 141e9e859dd69bc10f8288509345897dd6f1df89
prerequisite-patch-id: 48b7d35032cc2807390970f45028d40642d68898
prerequisite-patch-id: 30634d8dc6871fd65b5cc4083d9f54948e6a13aa
prerequisite-patch-id: cac4467d23080d3f9e49c2666179ba92a8606352
prerequisite-patch-id: 61c1bf24b57b3cd1469adccb7af6872a5075e47b
prerequisite-patch-id: 533b774178966ce688ad94e705eb9b7551ea3e9b
prerequisite-patch-id: a969eae006d3482cdfe093faa518e7c526f778b5
prerequisite-patch-id: db40a310784ecd346c33829ad60097f2644f0785
prerequisite-patch-id: 6793ae8007788b78d15595727f3b10acef077c43
prerequisite-patch-id: f4cc2e6fd653fce4671d152c0432deb14a4580e5
prerequisite-patch-id: 65184efa6ef962918e13af8dd5dd682360ba428f
prerequisite-patch-id: cb93e9bb743ecdf584b9d56bfa8def5893249844
prerequisite-patch-id: b1304278b53f30766e52171915f22f23b5525bc0
prerequisite-patch-id: 55fc5b9408accd3ed9691758bbbc03fa79dd5239
prerequisite-patch-id: f0d96e759ded38e8dccbdec80478ec62f193e452
prerequisite-patch-id: 4cb63001baba418ba83837cda555045bf8fe3d92
prerequisite-patch-id: 313496b68a5a59ecb67104cfb5b442b0eedfeca2
prerequisite-patch-id: db8a5dfe7037b038f0d5666f645e1bf94ba1c1d3
prerequisite-patch-id: 2627c42209ca99ec23d79c2729d03f8aa52e46fe
prerequisite-patch-id: c2d2a59e88e3cee039b44c22ba9267abfe1db256
prerequisite-patch-id: 71cc22d32e4a00953e6906b1ec25841a3d9613af
prerequisite-patch-id: 52cd9c23cec5dcead22a74d2a2bde787c1bc74fe
prerequisite-patch-id: e4a35ef1ad7633f571344f093a2bbe6cf43b5382
prerequisite-patch-id: d8fbf1b225cf393a99ce693c455aa70c0c929b37
prerequisite-patch-id: 276eb6c987216f12f13309b10f0cd65ea5d25c4a
prerequisite-patch-id: 14f8c1ba1a8b8dbcbb23f1af71586dc90225c66b
prerequisite-patch-id: e3d0a44dc268d3dd779168b541e958a5a6b3ace4
prerequisite-patch-id: bf25e3afc3811f32af29d160e362480e75ba3eb4
prerequisite-patch-id: 1d73f661b185b8f2dcb7b1ba76441beb01214e9b
prerequisite-patch-id: 9602869808390aa21f33d561968132ddf8a0eef7
prerequisite-patch-id: 2f3ca1d8240d87e9fccd59b233a8f710ffa08b2f
prerequisite-patch-id: 21b8420ac5622e2ef29f529b41e997b239a66777
prerequisite-patch-id: 9b55e11000b71208c9c00d214309cc09fc90e444
prerequisite-patch-id: 59463d53d99d7b30ca271c9ef9c3c8accc134352
prerequisite-patch-id: f48d39f712ca3bf081ef17fe57e5d77d5ccb551b
prerequisite-patch-id: 8ac73b39b7d4940eb6b3e0e8e983144a91ec89dd
prerequisite-patch-id: b0415f45f6696ae33b9878d7b62e4476c10cddd3
prerequisite-patch-id: 9d911ee1d76815db37ee11a692fc6bcf5dae58a8
prerequisite-patch-id: 8fa433afac07701249bea630b3cf059269acd719
prerequisite-patch-id: bb98f672ac6934c9b1c25c66243445fe1ec21faa
prerequisite-patch-id: e74bf1a307e20bcb7e00b7d50d0e7658688fb493
prerequisite-patch-id: 9f381419d589ba79259bb195e94b4aa9faf3e91d
prerequisite-patch-id: 21d3492f3f5ad83e89e6c61a2b9a2ff17b832a39
prerequisite-patch-id: 34dc8173dd6996366490ce604be1468092a4c176
prerequisite-patch-id: 44ee4a613dfe5b40158c09dc2365dc84348c1ad6
prerequisite-patch-id: fb0bc76be9c3ab20c5deeffa3eb11d9a53fd028b
prerequisite-patch-id: f56ea8e848810b6d114a7af3d6e64d0cbd46aab9
prerequisite-patch-id: 0845344b68bd75156e4a888c2bfc19e23d77ff7d
prerequisite-patch-id: 0f853e23c2fc65d9c8559b8ec2f31fb63305dd69
prerequisite-patch-id: 8d4b46c46356e95972140e55007f03116290d270
prerequisite-patch-id: 42088928f3ee73b68068b35c997fab73faa92a23
prerequisite-patch-id: 8c31054e5df24992adc4e6e56427b4183dfacfb7
prerequisite-patch-id: 2d81c2de6f0a2bf485a7583fb5f37f3c70209fb6
prerequisite-patch-id: bdd021bb97718be33ffc28a82cc264975b758033
prerequisite-patch-id: 3c67a3033590c511bc96819aa2fdc6376c2799e1
prerequisite-patch-id: 522faac8139bd43c0b7b0d3c9bcbb232bc36088d
prerequisite-patch-id: 3f919cd1573be50f3e839ab886ab88d03ebfec33
prerequisite-patch-id: ba6905ec779dbe8402567bddca9ff04380b49534
prerequisite-patch-id: c2d67cdfe3b2b250aa014835df850327f95671dc
prerequisite-patch-id: 6f3077ee2dfc5fd992ed7d0752e06be30a2bcdef
prerequisite-patch-id: 5d458a61e2f8723d6150269fd985230517fae289
prerequisite-patch-id: 0ce139991adf51dd72dd1ed2a5c65f07d2ed9170
prerequisite-patch-id: b5e3c3cdf3933ef5f4cd668753a44ebf2f50cce5
prerequisite-patch-id: d5ac9982b153bd2694fe0713b9d20adb6645dcd3
prerequisite-patch-id: 1df08a69e873f99793fd707988ce253d089de358
prerequisite-patch-id: 54bf85383ebab763f099b16032c8abaabacaebd0
prerequisite-patch-id: 700280401fef37638a345bb45230ec59bf065acc
prerequisite-patch-id: bcd3cc0f6c1fb8d03fcfea4b9e02d48e353eb1cd
prerequisite-patch-id: ec304ac4d9aa7bb141be19d61bb2b476507798d9
prerequisite-patch-id: 47ec32de02741d507737c793c5b9b1a2e2c6e97d
prerequisite-patch-id: 10803aaae550c02d5a89f188f816e862c1160138
prerequisite-patch-id: 34792281f364e06d44fade83c273e452ce750794
prerequisite-patch-id: 2f8ee186f9a210e2409c8947adcf2e169d946e28
prerequisite-patch-id: a84ec93dd710baee70378ae0498f43efb871d970
prerequisite-patch-id: 004b134f497cdc1f2613aa03ba2385862043fb2c
prerequisite-patch-id: 3d4f42a6c50c653800f0e763e0940df217b92784
prerequisite-patch-id: 7e471b7c811a8048ce35833c17fc0b6e316427ad
prerequisite-patch-id: 9f1e935e6771d526ed8d3b7442572a362b40c6f8
prerequisite-patch-id: 7a7006219f64b69e221aa72b90b6c693c0481737
prerequisite-patch-id: d405ac213ee0a65beb108e6c972f2d29d6fa9557
prerequisite-patch-id: bebddd18d1098c02e97dea3afccac86c7c1ed668
prerequisite-patch-id: 6c75d480c7fb6489813cd7bb29f7beac988d91db
prerequisite-patch-id: 0c1a9d242dfe1041931c212728c8922da60c7636
prerequisite-patch-id: 3ad9a1fa69bb6cd344ca98ddf9f5e4289efee02e
prerequisite-patch-id: 05a2fbcccf0ae6856127b2359996c053add0d12a
prerequisite-patch-id: 24967f29736c0b65389dcb29a8fc405e2e36b5d6
prerequisite-patch-id: 0e493f8534bc23a7c19c744695cce552f76a3c11
prerequisite-patch-id: e3e1a9ea43db06cafdf91e39d7b4c25db767b489
prerequisite-patch-id: 0e143573aacf18be639bc3d5bab5c4bc5989848c
prerequisite-patch-id: 04731712173f95989e65e40ece2a131d0ee7daff
prerequisite-patch-id: bab466312858b1e806ffaa7a0da499a1f6092a61
prerequisite-patch-id: b079cad7a8e1126f4880376454f709912af75a6b
prerequisite-patch-id: 464bcd7ce61f3991c45eb9e3ef9ad472dff2a946
prerequisite-patch-id: eb56b285dd23e847ea1119ffbf30ccab2c9010a2
prerequisite-patch-id: 640e23ba3024968de551f6fa546b7b0aa5e42069
prerequisite-patch-id: 3a1efb1e80508ce32264cd578965bb56b159fe4d
prerequisite-patch-id: 4979172427888c43b323721b4ed7dead105928d7
prerequisite-patch-id: f841be4da9ab723d32d93390bb7c0c4afab3ea18
prerequisite-patch-id: c3ba1dcb19cd324955b2713fb771374421df3e50
prerequisite-patch-id: cc9180e4934725ea5dca0f7ef7d89c933a5d914c
prerequisite-patch-id: d64cd540524371c2b8ded9b599ec8e0d97121c7b
prerequisite-patch-id: a3fbafc0d086dfe77204ecd1de05bb9977fe9623
prerequisite-patch-id: a0f7745059960b7d950b66998f093c9eda649673
prerequisite-patch-id: 7b62b181707a1632f461ad8cc265c7d6e5960012
prerequisite-patch-id: 6bd75c08b63c04bcfb17bcb9788df35259bf6dd1
prerequisite-patch-id: 6566bd4f3a9f94cefec928d04e5bcc7874fc6f32
prerequisite-patch-id: ca90180c2d0b0ea1acb9bb49efbd85f8a07a32c7
prerequisite-patch-id: 1e70e35c795c6aebbd820904aba3fb2cc71cd916
prerequisite-patch-id: 36bc3785254eac5f09ecca268ff96e43185402cf
prerequisite-patch-id: e85ac7246bc99e2c827c37ea3ffe30b36bebc4dd
prerequisite-patch-id: ff69dcc451ce87eb8102eeaf52d8aa418bddf07d
prerequisite-patch-id: c514f495d5bdebc0764a7c51536129d58e210040
prerequisite-patch-id: e1295c5783210f0ed00aa1d08fccbddf15cce17e
prerequisite-patch-id: d766a719f4a2193afcd6d4cc0c3562bc2e3044ef
prerequisite-patch-id: 9acbefd4caf7e6adb266eaa32e77b3d7bd8797db
prerequisite-patch-id: 32e05876eba86a6181f7f2cbc538f2fb73e63528
prerequisite-patch-id: afc6380a4528e839e0ccd3f377b288fa7efa7659
prerequisite-patch-id: 4bd5388d612eee6b1279004712f12c0948b41393
prerequisite-patch-id: 29d928911fe1e4d410f84902575cc8325d32fea0
prerequisite-patch-id: 39e7ac6b9bc138a5a15fe6781e590d46cfc7824c
prerequisite-patch-id: 1233e7289977141760b36d1618456bf45fd63efb
prerequisite-patch-id: 7c04cd8c600c13b666688c7d9100eb1d4078a91a
prerequisite-patch-id: d27571860a5091aecc0d515be1e2e19095cf6ce5
prerequisite-patch-id: f1ee1e41c75aa19885a274a9cd47218c1b606f21
prerequisite-patch-id: b58ce70b97e7a32ece122e05d43b6ccc79fb6fef
prerequisite-patch-id: 4f17ec906c0327904370bd08f2108fa846244511
prerequisite-patch-id: b7f64731b6b2863497bbe255ae32fd4e270e2f7a
prerequisite-patch-id: 1121544e3c96b374d54e365720c65c2e36b88202
prerequisite-patch-id: b4c71dd72df41ac6eac7f2441e5341343c05f86c
prerequisite-patch-id: 2bc97df7f6071df18931c9480cc7faffcaa8bc45
prerequisite-patch-id: c3bd83a23c70f7ab2f2cfc792f746917047b75d6
prerequisite-patch-id: 704b9b0f694670c1dfecdeee22f380b0477fd847
prerequisite-patch-id: 3ee16cad2f5afd2a76f7bcc4272d425d75df7b13
prerequisite-patch-id: cdb28a4b358341112f543c488f66f441381042bb
prerequisite-patch-id: 71ec44a08aa3a79b426a475dfa65acafb1aa64f2
prerequisite-patch-id: 9e47cb475894f3ee8954cdabfd705798fa4d6531
prerequisite-patch-id: ab9c5609c40b03151bb90f85d4216410b08b6885
prerequisite-patch-id: d989d3d7723884a7e055fc9e7f175e5b072a99be
prerequisite-patch-id: 97adf3ad40d26283d651a058f2ff7229e0218a2c
prerequisite-patch-id: 1eb949476736555f30f6af20a5f382027e5875f1
prerequisite-patch-id: 6c59bbb211dbcfa3b57628c0e5e590e0cbb81916
prerequisite-patch-id: 9f422df7312d0b84e3ac8e67849f41455fb6c8ad
prerequisite-patch-id: c5410d6084a79afa6e010298ae49699c0d6941de
prerequisite-patch-id: 199ff67fdea8cf45247aff4d7c2624d176f6bedd
prerequisite-patch-id: ab42ec2cee91d4df2acfacacbe867c180b8d1baa
prerequisite-patch-id: 088d2b9333dc78b26f5d293d35dcae2818fec005
prerequisite-patch-id: 40e782c4679a47acbe2ceccce4205b7bbbf7e5ec
prerequisite-patch-id: e76b5c1e393ec5eb72c6ef9dc9982dcaea03920d
prerequisite-patch-id: 1e6750e9dfea42df5c7c665b5c9a00e155863404
prerequisite-patch-id: 295734ac4b0391f9ce8ac7e7b6dea7cd565e4a6f
prerequisite-patch-id: 1b6be9123f53906f24aa8b352d03c15ff8e17f58
prerequisite-patch-id: 29fb2df1f2901885aa7e0e51137ebc6eea7e4064
prerequisite-patch-id: 369142eced10315ec4a8abbc5aeb9ddd6094469d
prerequisite-patch-id: 2da47a164072200d9174d9b959a793b6c18915b2
prerequisite-patch-id: a80755a915a1a07bcc6a10acc5c02f1d30ce6588
prerequisite-patch-id: 55aa7eb623eb635529803578812818ea283318c7
prerequisite-patch-id: c1be46c2f02c5ae1e231d6f0ea9f3620371a63a9
prerequisite-patch-id: 97af3b234d785baf05aa8cbc08939505d80860bf
prerequisite-patch-id: 5d5724586b5167d0f79de6cb58532d06a239a088
prerequisite-patch-id: 9275cc740e936673bcac74c14a11c2bb4afa2af6
prerequisite-patch-id: f08227ffbbd4153802c8bda15b97c2c81c880d7b
prerequisite-patch-id: d7a49d0819580373c748969caa33263d17733b9f
prerequisite-patch-id: fe3dbd3f3bab51de8cb557bf9bac50d47a7f8013
prerequisite-patch-id: a556691d71c6382701208d92502fbfde2e60e0b8
prerequisite-patch-id: d7949dd3c93b109137bf30b451113da4b9cc04eb
prerequisite-patch-id: 21fbf3b79f17118e7583de6ed6d06e5bdc7445ff
prerequisite-patch-id: c4b04a1dd2371fa2430b011e233736d686a00fe6
prerequisite-patch-id: 8265f9e3657acec1eb367af523057ee509f38b0d
prerequisite-patch-id: b846d41ab1f247592b88dbc714048339687a8a20
prerequisite-patch-id: 4a13756e0dd0332a6736905214d2b49b4a450998
prerequisite-patch-id: 0afc896a7e2fbfababbca007cbe671d6c8580c47
prerequisite-patch-id: 5f4604b28de9043bf78b84fed9e2e4a9d8a0f7ef
prerequisite-patch-id: 2a89b63ff751806dff2bde3ed60a6662a7711072
prerequisite-patch-id: 5c702e08f41f7dd968a02dd52caa5cfc2e3d1f49
prerequisite-patch-id: 9d4e2636202b9dc9b063bc90f816546b6e9c9a5f
prerequisite-patch-id: afb764ed9d90c10506cdb586a7e14ff1614b5239
prerequisite-patch-id: 350493ddf88126f519f67e870e6508b1da2dec3d
prerequisite-patch-id: 9491150d794d292c579465c0a74e2aeb5dbaf86a
prerequisite-patch-id: e2728785111dd641676f6ad12de02aecf9d5fd55
prerequisite-patch-id: 5f9d75bf71485a258518fc3d00f301375b0982bf
prerequisite-patch-id: e2a399b4a46a4c40d34b0d70ceff23b8c239a779
prerequisite-patch-id: 909e52877d9a4d215c9bc6953249f9a7820ef412
prerequisite-patch-id: c91c840d129d14f49034e241ee71a15738e0d79d
prerequisite-patch-id: eb3633265db047519bfcdc1512fba9a2d0a2e117
prerequisite-patch-id: 5d7a3447de1960026e6472938a2e25c0b19fc3eb
prerequisite-patch-id: 8d97c53382c9a4eef47d04a2d66416470dccadcc
prerequisite-patch-id: 71a8e479496dd19a145c21a71014f1a3bf458be3
prerequisite-patch-id: 9f76b88408fcf2edb2cfa3d30179a8c1ad53bb02
prerequisite-patch-id: 18d55a7c64281a2ee9773c0d07113f502ecec898
prerequisite-patch-id: f6a6c72ab3b20769bd8e53625747c5dfc1eb0e57
prerequisite-patch-id: 7c391d9d37e660d4ab7f2fe8b3ea43358272e555
prerequisite-patch-id: 1c19bee3382567ddfa2e5a79f9e539e726c79b1d
prerequisite-patch-id: ba2b8c238055338dc7441330571f32b9b038bf68
prerequisite-patch-id: c551f0592135ada773d467d14421cc2ee855e566
prerequisite-patch-id: 0790d09906b67bd5f64ac2b3cf0c65e80c118576
prerequisite-patch-id: 192b37c5d1daf4a31e39f5118613043353b84851
prerequisite-patch-id: 8e6ce0b73b26bb7874312f7bc5b43d47dbff9d1e
prerequisite-patch-id: 002a58b876b30e5981e9f984def7208a5a0be841
prerequisite-patch-id: a9a6bbd82925bf5778092ee5f986a29182b7870e
prerequisite-patch-id: 9b5e479e89b53ee8b4930f652bccc172d3f57b35
prerequisite-patch-id: 0bddc7e001670e9bda9f6756d98beaff3bb900b5
prerequisite-patch-id: 059b34410ba368c20edfe9013aa31636787ad808
prerequisite-patch-id: de1b5ea5e75a738fcad1d710b7d04b93a29ebbaa
prerequisite-patch-id: 45e205358b38e38f46f9855699665c4465eded2c
prerequisite-patch-id: b3a9ce12ca8efdf4c31b4c7d294d9139f4d8b2a0
prerequisite-patch-id: ccde614447e2cf05201c73e7cd3afbbb0d05e7e1
prerequisite-patch-id: 740e5c9eba182662bd46956af3dffb2dcc9c4ad1
prerequisite-patch-id: f6900beda4a36b3d15ed6f0daa52ac7b42e58012
prerequisite-patch-id: 6e6ff41adbdf3f89bcd15f52e5df2fd0fee91c0f
prerequisite-patch-id: 84a7d6b43d83e37b3bf9416b5b00bd3366eab8b4
prerequisite-patch-id: ece5e2c65e627f0fce66420f3f51ea4176b4bc7b
prerequisite-patch-id: 0b2b2e16ee4daf22fa6554bc9efa2a7570a7131e
prerequisite-patch-id: 27fa6d85573dfe48e95d9df73910645eaa0f21cd
prerequisite-patch-id: 803cc655d115f803cca5d3e71228f597ae3309f4
prerequisite-patch-id: acd32e537230384d037c1663b55eb6dd2e01b2e5
prerequisite-patch-id: 72ce22f267054b561510be9d43763df55112d8a0
prerequisite-patch-id: c536cad24b4dc07498432bd139076429e1076cdb
prerequisite-patch-id: 7a421a1b40fa2ce9ef4a4e68fda5cb2002aa0449
prerequisite-patch-id: 2853059fd8dfdc28792e6f5db61fca2db52e1b8b
prerequisite-patch-id: e5edb1c30d7a5cdcc9a73fd715e677b73f36b795
prerequisite-patch-id: dfcb291c72df0cad425e9af91c7bd20d36f70038
prerequisite-patch-id: e30e30666eff4fcfe24fbea66f501ad7504e429b
prerequisite-patch-id: 8bbe2b62afd014c1080af7fb89704f7066a9b9e8
prerequisite-patch-id: f7732a197f08a3d09415d13b54a99db196784bf1
prerequisite-patch-id: 796e251a186c5600d879db20ca8fee1701223fe8
prerequisite-patch-id: 12cadab462f05e6a989b61219c1f83263bedc9eb
prerequisite-patch-id: 6d9671b708493f0916017e34e263da551cb6feed
prerequisite-patch-id: 930404af4f604becc29080d96e3a142dddc4e99e
prerequisite-patch-id: 334a3f17b39d4ad40e6f3ec653a60f63c9ffc504
prerequisite-patch-id: 8ce82439a3ff6d55d82ec78744308cd04f23c322
prerequisite-patch-id: ca5222ed797be9c8039b57fa426df7707b503292
prerequisite-patch-id: b3aebaba81e10a5bd86370292522d97d27fedc3a
prerequisite-patch-id: 29a9484dd12a95e0ecce936007618190a5c50329
prerequisite-patch-id: 887b6ce44ff86e7ea70dc42466f3721e4e4c3e1c
prerequisite-patch-id: 429eb224c966424b458a7179e10e1f3172408eb8
prerequisite-patch-id: 8ada12defe02635909e5be8116a23e95ec17bcd8
prerequisite-patch-id: b53d1aa72f063784602c9d616b79632d7b890537
prerequisite-patch-id: e9aa338b8d60a1e32d06c985394607531e9183e7
prerequisite-patch-id: ee8da85daaeef613a776bbd56cbefd896d8ffdcd
prerequisite-patch-id: fc8d24edae0956903a8b2f89c868fab1313b229a
prerequisite-patch-id: d6e8b199ec857a4463cc3c7484d2f516cec05ce7
prerequisite-patch-id: f2690ca5cff85c9e944356df0f31a4f28ccabe4f
prerequisite-patch-id: a39b9ace23ef14411e7604aee1dbfd7315269553
prerequisite-patch-id: ff4f2e4c97ad5320b17b715a5ce52847d6c61206
prerequisite-patch-id: 8c97e4056670aa703d392a352718ad52568d4ab9
prerequisite-patch-id: ab43d49b462afba5e05c1a810b71ab18776e0791
prerequisite-patch-id: 3f8b8048467462aa32c946c018bd7a24ed4b8d29
prerequisite-patch-id: 8b649e7065f003d337101dec7e1bf471ef3d11e2
prerequisite-patch-id: 6d3867ac4612ae83f21320f30644627c77ef55ef
prerequisite-patch-id: 40d37dfd044c7b17c75126062a23710572d0f71a
prerequisite-patch-id: c7efa4456856436f65455a2bfcf266c39d72b733
prerequisite-patch-id: b699deea0b78e6d13399433347ae6d1590d2f1f4
prerequisite-patch-id: f7d1810099a8c6f7fa68e954ab724340b1fe93c1
prerequisite-patch-id: e265f2aa17a6f9f0c6a25cd857bbd847e693ac0c
prerequisite-patch-id: 8b8d8eba0b56185b8b6e7c29350af5e66b53d268
prerequisite-patch-id: e7991ce1293c0fb177eff982ff7ff381fee7c2d2
prerequisite-patch-id: facd83dcf2138d8f36898793f5927d5aab7caa35
prerequisite-patch-id: f3704dad8b6c7f4b181c309e21662895f822394c
prerequisite-patch-id: d65cfb402cb6a8af5c64e8a3296be1241158a92b
prerequisite-patch-id: 03efeaea5e0254641c077a0da700698313c13b62
prerequisite-patch-id: 16e6a6f22ca8e594717fce22390ff7b61bab27eb
prerequisite-patch-id: 37c48f751ca1955cf67be755ace6f8956cdfc63a
prerequisite-patch-id: afeef260b886fdb05186635b5989861a392a76e3
prerequisite-patch-id: 19f33c84be6e37ff81fb4e1175ca2ade349c81af
prerequisite-patch-id: a66b1dceab550b9ffd851bbd7894680c8b2f526c
prerequisite-patch-id: 8770ae3565ddaaeb3d209d1b95bc7d49c1a0843e
prerequisite-patch-id: 0247f7a705f7bfd3b2e9f6c6e3c14d20ea0d69af
prerequisite-patch-id: 02ccfe998b4d2cb3d827ae803bcd111015dee245
prerequisite-patch-id: f9d8342efc52c51da36208ceb5dbd94128d7ea19
prerequisite-patch-id: e71cc70487ea23255303190fcc9ce878b8bc4cf2
prerequisite-patch-id: c9c10b969dbea747242786ed2d06f17070509430
prerequisite-patch-id: a1d161a65b32b91dde40cc696d974afa0546d52f
prerequisite-patch-id: 45b3da319212bc272e82f4ab61c0b18e051becff
prerequisite-patch-id: 23f404ad56ee86437c0ee446746f0f657a76455b
prerequisite-patch-id: b825aebd0ad04b6cabb4ec4a6a5ff791e316c7e9
prerequisite-patch-id: 2d46c2af489edfc0fe48116a8a2289c581ea1062
prerequisite-patch-id: da001fe4e0bb85bba9428545686ac34e6a653ff0
prerequisite-patch-id: f9c29386ba9b85378e79fd55004b6b6353d317e3
prerequisite-patch-id: 3507cdb0be31e044f0a2fcec164b0608838326a3
prerequisite-patch-id: b1e536375ef296df16233fd1b645b39f5a1f3266
prerequisite-patch-id: 6a06365249d624f255a2df5b9f6eaea9654557be
prerequisite-patch-id: 65aec5499ee38c7e2e87388458a0cdcf54e7a4c7
prerequisite-patch-id: f610714fb76f7c38dceca092a4a78fe849475492
prerequisite-patch-id: 9f044e5dbd1615ad3c1b16497507ddd722ca1213
prerequisite-patch-id: 0abb772e1d6dcd5a2d5acdb3cb653e1c91d96a1f
prerequisite-patch-id: d479a40bcb0915c2443fa9c9a720a6d17e091310
prerequisite-patch-id: 8fa852444b8ca71202292b438ae9125c3434da8a
prerequisite-patch-id: 2f12c3ab0fd4a87aa1a3a15453f543b8ce055e65
prerequisite-patch-id: 87223123a0d0ddfd8d6eeef96d01098ecfb49c9f
prerequisite-patch-id: d7cd9a4284976ea1eb92195aef9b11a84e06c7f5
prerequisite-patch-id: a8f267a78af429a74e2970a663e852d6b894b1b1
prerequisite-patch-id: 3853cc0b81e6454d9459bf34b867ff3a76346ab8
prerequisite-patch-id: c7d4fbe267543d84c7e7682980b16d1355a5848f
prerequisite-patch-id: 280ae9f18ecfb659c5fe7e62a7d0a23c0ad09927
prerequisite-patch-id: df4f2343a92b5c638cb8a41b1239c680b6b1533e
prerequisite-patch-id: aebacd838c35a8f2c501d9324a2d7b058cab5951
prerequisite-patch-id: 192332d06a334614fd35ee65f316b65006809f5b
prerequisite-patch-id: 7d8595e37ac77564cf8b358d37c2d5ed40957175
prerequisite-patch-id: ccbd7797651d3b9343a16ec479390731d322eff7
prerequisite-patch-id: e72feb7c651dd45d8a4d89e57be1066a0007d0d4
prerequisite-patch-id: 35a1e0358e0af81c865652d98ade64bd102b54ae
prerequisite-patch-id: 62675389e7f8ae6cd5bcf23ca9b10e965f0ede02
prerequisite-patch-id: 412b23ced23d6c4a6f8643c977a1a1b3451114cc
prerequisite-patch-id: a4eb7305398cec7e7c362db6ad42447da759a894
prerequisite-patch-id: 8c27908c6e9462179f1535b47f95d10b6a409144
prerequisite-patch-id: 776d8b0e9efff8fc28713740d0e2aff23ce332bc
prerequisite-patch-id: dd23b681d0fda3e7e4559c129afa5dc28cc8eaaf
prerequisite-patch-id: 3125157c96193c4583897a583f6611cc38b5a6c5
prerequisite-patch-id: d3ba515bca1ece728d390da122f97fb29dfe5563
prerequisite-patch-id: c97c77c37ed3bc2658bf015db2b654a2b90148b4
prerequisite-patch-id: 2500ad1831b258a65e20e9977ff0dfde8befd2c6
prerequisite-patch-id: 9f8f1b3093476636229cd588f3908527c16b6825
prerequisite-patch-id: f9b2818626999c60ac2588a4a56a5ff86e912ad0
prerequisite-patch-id: 81f260e267c74beae02eb5911dcddfe4bc15fd21
prerequisite-patch-id: 2f54b830c86b5a5bc71f19b1a473f5cb5bb873d0
prerequisite-patch-id: 6a3f831f8ac5e38409f1a96da20562fdfc130d5e
prerequisite-patch-id: 382f8b28128b4ab2158f9e60649dd46da38601e7
prerequisite-patch-id: 61604c9628f1bf21d38cb40064a3ebfb3e8e3fcf
prerequisite-patch-id: 0b92a9812c9aeabad899c748753586666d7be1ec
prerequisite-patch-id: 83a9d2dc40d20790c06db2ebeaa5957b026eb1b5
prerequisite-patch-id: 780a28b07341dba1154841f73caab369be2d448a
prerequisite-patch-id: 0fcfcdb91a98c0b8a2fcc5a78a75ff36fd1a4078
prerequisite-patch-id: 5ed6c825ee1595c9980752dcbc8860391babbc26
prerequisite-patch-id: 734ea246d9b3c3f08b8dc31f2b2740bd9e1fb167
prerequisite-patch-id: 31ab98cedb3ab4732a7446dba4a2368b1705a3c5
prerequisite-patch-id: 04138ac0763a6f727c30759dae53d70a5e6b810e
prerequisite-patch-id: 56616c5fba873280c0d0e15cf206d8baab705fa9
prerequisite-patch-id: 04d24b1c4ae1fa35e4d2f1be17a5cac9ac26efb8
prerequisite-patch-id: c3f4eda5d0bc5e105b80b1caa2cd3d0a3fbd3c76
prerequisite-patch-id: 9651f96d3a501ec346f0459bab409c5dfbe9e2da
prerequisite-patch-id: 9041dc3bda93617bc8c7a6eeb249ef7ff2c20499
prerequisite-patch-id: 3834c7343097ff26653cc63250897b2e70778dae
prerequisite-patch-id: 36fd2bd6cda465032a3d3f6a0fe7a55618822d53
prerequisite-patch-id: 1f43e505ecab2b47cce5a737db11f04202c6b907
prerequisite-patch-id: 8e3993c65811e7c3fd4ea641babd6fd258b505d6
prerequisite-patch-id: 059f3bba97a8a8d0d7fbeb712754f9ef876a8cff
prerequisite-patch-id: d88c0e632a1605b9973288c400fc9b3b9793231c
prerequisite-patch-id: 0d6e5ca1ae5ff4834e009a15a015c1a4c8177f03
prerequisite-patch-id: 9adc92656b39b7abae5685ce087060a2529deab7
prerequisite-patch-id: 6491c39d2fa63d7a15aff3dc553ba138c5ab1a79
prerequisite-patch-id: 6ee8a12a5be888ea01c2cf966922b05183971615
prerequisite-patch-id: ee3b20ef68de047d2d798e8bc13f78ac4ce52007
prerequisite-patch-id: 843376ff57bb6b020405ca5bc0d5a58bb8e01403
prerequisite-patch-id: 968a9c5814c348b6c7039b0fa383b04099cb5d65
prerequisite-patch-id: c786dd3885a4227f6861975f921c108691344fd4
prerequisite-patch-id: 344cd4573b34cecf81ea4dc4774f2ba1f0f0ca00
prerequisite-patch-id: f0b7f83bc86156a11c745391eda0d85de41b14df
prerequisite-patch-id: b1f38ec18a880da2366f51f9fc05182ba9bb8007
prerequisite-patch-id: 7fe7632bf2ae2f17e4e0e7fcbed03872b31b3525
prerequisite-patch-id: 37ad1da62ecd884ebc9db3634021625cff1b8549
prerequisite-patch-id: 71e1797790bdf34ebd503479667a2eaf63e71f33
prerequisite-patch-id: 1fb5ce9d3d74d50ee51a3a1855131d543fdc3006
prerequisite-patch-id: 9838ccafc7fa1427b2540a44ae40c4206d3fa714
prerequisite-patch-id: dbfaaeda77d0879107bc50835e7dc03e6e07eeff
prerequisite-patch-id: bf1d5e9c83e32953a501b3b4b794ae96e4503dd3
prerequisite-patch-id: 26bcee53fc067822a29eec953a9fb4574c22962f
prerequisite-patch-id: cdd40e8d1cf38265da4526bd309787b07e559015
prerequisite-patch-id: 8617755104853d9c1599999603459f44f3c01288
prerequisite-patch-id: f0b201f0da2ee70e1c1ec5d4d309417d330e3f3f
prerequisite-patch-id: 9ed83733b6e78e0888126260bc0f0651b9f60566
prerequisite-patch-id: c350244b97b0cd0d7ca08489341c87ffc574e97a
prerequisite-patch-id: 17138459573b0dc6b42036b489bb6e04a407680c
prerequisite-patch-id: d52c4c05c187353951b3db23d87874a5c8346370
prerequisite-patch-id: ae594b80c2106bd27f21a42a7a2a6967a71de9f6
prerequisite-patch-id: 502e5d4e291865a147c3a38441af945577d77f91
prerequisite-patch-id: ae53b3e97e285f28d0508a9d82e403a0e7d0e8fd
prerequisite-patch-id: f48f7c99dc656f167d1fa99b0ccd623fc33f8d7e
prerequisite-patch-id: ba2a10e8bf7341bfef225d7662d67777d40209d2
prerequisite-patch-id: d489cb7a82f22bbc94272dac5f39b84155683a0d
prerequisite-patch-id: 0f03436680062292128b24870e95caeb9a61cd7a
prerequisite-patch-id: fbc0fe8e21af230c98585e4266023483c0e0042c
prerequisite-patch-id: 6f058d18f69b3edc64759e1b7ca6eb08bda69acd
prerequisite-patch-id: eb7dd88350af17efecf65a18ad074e1bef5baadb
prerequisite-patch-id: 66e3707d7e5dc2084dba4015ad478d376f5617c4
prerequisite-patch-id: 0edea4a3bbb50fb0061f3320365cc49dc8a0f4b0
prerequisite-patch-id: b479b9c1eca14c3b377dbc7a2c1fbf663093a8f4
prerequisite-patch-id: fc4055ea17b9c5760a07e41713b1c2e954cf80e6
prerequisite-patch-id: 03b75832b31d0f55bd73fa6b1a45be3b78025aa0
prerequisite-patch-id: 7124236abd036e49cc99e7577fa70456ae9e6b15
prerequisite-patch-id: 88180c6053810d8dacaf85b1c03894938db7e86a
prerequisite-patch-id: 7d66e7a58bb58d95d7d05d3616073f6408db0908
prerequisite-patch-id: 00fd4f8652b8e9e246f2f925b5c3a6c10f594f6e
prerequisite-patch-id: 4945ab6ecfea40aa33c7dc524ad487b746598130
prerequisite-patch-id: 7b2bf1ceff11a44d897fd84d49872243aa5e18bb
prerequisite-patch-id: 22ce329922106fae750822395178e3abe7a3d573
prerequisite-patch-id: c78143bae4dc28b47f7c509473ad56e7e36c35d0
prerequisite-patch-id: 425702899a914fc3e6e741959452e39b686bd4d0
prerequisite-patch-id: 310fb3227ab3df3d778d0ac06b5c41f385744f53
prerequisite-patch-id: 490706d61b49ebd7413068114b5b9fd4d2cbdddf
prerequisite-patch-id: 6ceaeb295b4028acc55c6ef5fcd87469ce571863
prerequisite-patch-id: 2844d95fbd6d68d4ff8b8146b4cf6887187d9597
prerequisite-patch-id: 004112c85e0e2f708ebfac01d8efd482ab0d62b9
prerequisite-patch-id: d95c09b33d945ee2199147f7de631bcba50e037e
prerequisite-patch-id: 071584e2436f0c43e6dcab87ed9508a0b61b0b88
prerequisite-patch-id: b7ad87cf3b76bb10696ffac0bebcca68c091fc22
prerequisite-patch-id: 2fa8dd21c366959d518c521b81ee1967ac2f168c
prerequisite-patch-id: 73c936cdf82d7cabaaa42f765038df6295c5e041
prerequisite-patch-id: 1d26a424e51584a8ced98051442226e8d4d35c16
prerequisite-patch-id: 581b0a38c80a9b3ab5aac8d7ecd116681f8661b4
prerequisite-patch-id: 1aae8360a613c10a7223acfaada4a4d0c1e11c6e
prerequisite-patch-id: 0dd1314a152d223b48c60f167d77463fb283a106
prerequisite-patch-id: efeeb18ea1664f55bb2f238b308702ee7fb012ed
prerequisite-patch-id: 05ad231111e4028d230edf82f8b12af7eb0aa289
prerequisite-patch-id: 7da11e5c09d0ebba35c5fdc88102350247cf5d78
prerequisite-patch-id: 6b3bdab29c9b06ec3bffa2e1513e2087d28bbebe
prerequisite-patch-id: 98b49e51296762975bc79f07671550992f242a38
prerequisite-patch-id: a07ac3e31f44c632132603d3222e45a2a3fed97d
prerequisite-patch-id: 0b148baaa76c43ef021e71730223f0f684ab640d
prerequisite-patch-id: 524dfc337ee7bebf971937d558e152bdd6c87d7b
prerequisite-patch-id: 746dcf750901536307cbbf79711100c3f37a936c
prerequisite-patch-id: b2d48fecc6a7d1a6f6ba367cbb1db0aeeaf04368
prerequisite-patch-id: 867df27b388a059a40bb855a8dece1e8d87ba856
prerequisite-patch-id: 60937ddca0ce96e73f36419c4fc503a229f7c015
prerequisite-patch-id: e90caccd5650fcecf5de88ffdd6af161d7fa335a
prerequisite-patch-id: 18247a202cd667303f955381573de77295b5e3a7
prerequisite-patch-id: 7c4a484a5002fb862018e62b6c3213d23d858152
prerequisite-patch-id: dc8e15b86fda821548ead410e0386d7cdb245078
prerequisite-patch-id: 7ef9803f4db598b3cc19db7d4976f78143933e20
prerequisite-patch-id: c0bbdf1888ec32f563041dbd87e6ddb7883316ce
prerequisite-patch-id: 027aa791c8953d651300b12eca537a41478f3c64
prerequisite-patch-id: 292a29240b0f2d83ba220ea268c2bfc675ca466f
prerequisite-patch-id: e4f612a923405ddcc298366a93d665ee6c90d4e1
prerequisite-patch-id: 6fe67fd7b8f9f677079f09433d1a95eabc54ccdf
prerequisite-patch-id: d161d37ff2d47604d5eba4735162cd04912b6ff3
prerequisite-patch-id: 8d233bb6b9e8334aeb5ec88f8453ec9e5369f10d
prerequisite-patch-id: 7decc4fda453b9fc0a17261e90eebe2b65e079cc
prerequisite-patch-id: 9d7c3c2bfad16f9ecb36270f18032732f72386d8
prerequisite-patch-id: 242aad1f5b6be16fbd75a55b8f23178afb38882b
prerequisite-patch-id: bd1a057eb83ce316b284355734a25a68273400f4
prerequisite-patch-id: 1ebb8b02210de3d812ca225bc8ff3e3cd7e1685d
prerequisite-patch-id: 30ac8ccde615c85d8b56481f8ad4c66471c8d17c
prerequisite-patch-id: 5cea091e81697fce390e99f00d7aeb1258f06a9b
prerequisite-patch-id: ee54d0e4cee711c987ecd80191745a8583d4df32
prerequisite-patch-id: 0611c97a7f2389296ab4886823d6066cfe0d7510
prerequisite-patch-id: b3041894868b2c18b0a45043d19fa90bf44ea057
prerequisite-patch-id: fbbbeb7bd30fb8de7cded38b5710591d2095f18a
prerequisite-patch-id: e46b47baea51294ed55ed810e66d3c647d638f87
prerequisite-patch-id: 1aa199c9152454ee53699d9dd88a7116757c71bc
prerequisite-patch-id: be149e8e461c0a4a9c2606c4b94c8e98b5f4e7d9
prerequisite-patch-id: 70a329b45e2147d068bd40cb62d44bab2223dadb
prerequisite-patch-id: d348c680d527e82d971d08e37c5c6d38e6b9e0e8
prerequisite-patch-id: 47185a0eff393ce3593a8504ebdfbdc473405261
prerequisite-patch-id: 9758e4551a602e2e9218a719365e00f7401c5fef
prerequisite-patch-id: c25463c880b7bd4e067a13bd48dc28fbb3aaf850
prerequisite-patch-id: d8dae41195bd4c8daa32ad0b99393d5d0fbd4910
prerequisite-patch-id: e82bfb0b8e9d068ce131cfcc226dc966ff2b8fbf
prerequisite-patch-id: 30e7182dbe0f2221b4fc47220e246ba4dee893e2
prerequisite-patch-id: 27d201079edb1fbff5e20838fb46c7efc5d37db7
prerequisite-patch-id: d169925dcfe93e521dace77d800c334428c81d6d
prerequisite-patch-id: d7e7484362948bfeb462c6abbe5dae4fbee8a6ef
prerequisite-patch-id: 92aacf75398f5feade6d4e25a78d2ce8342443e4
prerequisite-patch-id: ebaa368b230879dc9a3cbfbcea57095a714e35e4
prerequisite-patch-id: e0ff02c58f6e614dd41d260009497447403f4043
prerequisite-patch-id: 06e5a5c0bd2c505655dc0d550a20a58a066afa5e
prerequisite-patch-id: 22650eafb26241db0511eaa3d64949c1fe541727
prerequisite-patch-id: 11e364cd047acbfa6a29a1825f5942a8de145915
prerequisite-patch-id: 40d0a554b9cf260bc01a048f92fb6628ea1e4277
prerequisite-patch-id: 1c7262dd5080c84f2754a7250a78b667fee0558d
prerequisite-patch-id: 668dd69f11e27932be040073f5d7698e83c814e0
prerequisite-patch-id: 525354a3686e2258223749875005fd0bf7dce5a9
prerequisite-patch-id: 4ca87034a00faeb5298fd00547f5967203a58a85
prerequisite-patch-id: ca182b37427db80586012ebb88503d752f321dea
prerequisite-patch-id: a21ae41f88175c5e7103927c17fda88431013ad3
prerequisite-patch-id: 1437ed157a0189f63bf8943e88c443e011fd6e7a
prerequisite-patch-id: f8fe6628a374927837c50542770c48965f0ed491
prerequisite-patch-id: 3ac7a393ea076c4a9586e0dc2602458efdd4ed7b
prerequisite-patch-id: 3c7d806d5044c959acff7d1eb9273ed3417bfc79
prerequisite-patch-id: 459ab8a2289859b1b71bbd954e3acb14e3ccc6c7
prerequisite-patch-id: 53b32799713f39fd2a9aaa51521b01a0dad4abda
prerequisite-patch-id: 3557ef813b7887ca42db25a8e26772fd1ffc6ae4
prerequisite-patch-id: 99b07bbf86569c28dc847078e4aeae6cae6021c0
prerequisite-patch-id: 0c54f067336d5886917895240d9bec1653d250b9
prerequisite-patch-id: b00059942a3521b33e44dff9f1e331e9a8d8577e
prerequisite-patch-id: 78620ce83474c055e17efd5dfeff3f44b2414dec
prerequisite-patch-id: 27cef45edcdc35bad1219dee76fc2c6c26d0dfad
prerequisite-patch-id: f946be883b63e71b7ff48c6c3772d6b4f877901e
prerequisite-patch-id: 60d3dff7b2534e612d2cb67b17ac4eb733ca8b14
prerequisite-patch-id: 87333f5828ef6395eebf5241c012f32fae4153bd
prerequisite-patch-id: 1635f031576e348f51363cbc511cac8514bfada7
prerequisite-patch-id: d11951ad9826c3e22acbee66903c6e3bd7788ef7
prerequisite-patch-id: 973c6dbac0279769cf50718f613219d0627fecc4
prerequisite-patch-id: 4bf071dc61742a1053a313c9bf42b011ff26d3f3
prerequisite-patch-id: 9ea756f5ff40c512b1b6630e55a8e80db122cd2e
prerequisite-patch-id: 019c3f4674e46ee7b6d5b9257704b9f53192ce34
prerequisite-patch-id: e44da21c817282434cc8468e55eb2a80a5e349fa
prerequisite-patch-id: c9e42b4c1aa878245895624ef19aa45658a7d53a
prerequisite-patch-id: 0e68b8be28e096a21bae8aaf3b026a9bee33ec84
prerequisite-patch-id: 7aad40fe162f9be9c7dc9fecf31b3367654a398a
prerequisite-patch-id: 8ad68bba1f526247ab8c5c63400a7f18ae497794
prerequisite-patch-id: 32393b89e594a337b74f3aea831ca819a39da01c
prerequisite-patch-id: ad0fd7951334acf3eeccd9f868cdc76865f4708f
prerequisite-patch-id: 65f4bbb0a17605aed22c3b5106c4e1946f828911
prerequisite-patch-id: 04f6d259011084b5a474a333c79e9f808d2f5fd0
prerequisite-patch-id: 9d927d04f762fe3f9c0256feeb36267dfdbb43a1
prerequisite-patch-id: 1f8f574fd138c055cd704ed1f8d0f3c58cd42e7a
prerequisite-patch-id: 46effca82efdd0aada0b16a69b303b2053ae8371
prerequisite-patch-id: 9a655afe654e864faec658ae27f7e899847584df
prerequisite-patch-id: 59090a00ec4eaba592846697b8a32f20560429d9
prerequisite-patch-id: 27dd1fc536549f3c65907b53a7cc49663ac56b14
prerequisite-patch-id: 00207b344c9fd888494974ebe0989bda0039ae1c
prerequisite-patch-id: 512fb2fa65c7f244a97609c49df65e75d430a9ff
prerequisite-patch-id: d916f7b9ddca8a7c84f5179fc45b2cee2006be57
prerequisite-patch-id: 04e86fb57b61452fde35fd10f7ddf64ddda3c285
prerequisite-patch-id: 5ab3a2a222f767d765ee8bdad76b492ce7039ae0
prerequisite-patch-id: 84751925a48d6893449daca589d23a8e6a7fe68f
prerequisite-patch-id: 3c19710fb266755917d00dc0ca468770b20502ff
prerequisite-patch-id: 46c3539ba4078db503d6a32955b594b7deec7752
prerequisite-patch-id: 7efc8701c793ae5f35222e1c5f678bcc441928d8
prerequisite-patch-id: 069d60dcc904b10ba5b102488dc682abcd9a1f71
prerequisite-patch-id: 11efd22ac6f3b8149272a763178d610983946a62
prerequisite-patch-id: a380e199ad685e8bae23b85a01b00c089a73a3aa
prerequisite-patch-id: 85f55294dcfb943405117451b6e259d6c256851b
prerequisite-patch-id: 0feaa3dcdf241a8eed83bf8d17872e67d81062e4
prerequisite-patch-id: 5abb1f9fe2df098b1675c4d051f32c20fdcc8e18
prerequisite-patch-id: eb5b2fe1403b0a285cf5580b53490ddf3b7fe5b6
prerequisite-patch-id: 727e26f0716db18beebe22f11eae524cbd6d18e4
prerequisite-patch-id: 3cd27a2bb5e26f4d44c0d80c718ae3977febb6c4
prerequisite-patch-id: ec1365bfca3786e3a0f5e9cf0b9afafd24f0548c
prerequisite-patch-id: 565a5adc5ace09075078c696296161d352cb78e8
prerequisite-patch-id: 8cfc2f2e9dd0b13107f7913fa9e0865f442f34c8
prerequisite-patch-id: 7cdccb7e467fc5d95c70717c3c903d2b5bcb2a77
prerequisite-patch-id: 617d20e6142db76dbf575ba58a1dc996ed13e53b
prerequisite-patch-id: 5401c5c3bb024602cd5cfd15d119c85479d97dd9
prerequisite-patch-id: dea56eb3bbf9277e21bcafb32f695f13e0b0c99b
prerequisite-patch-id: 01566fd19f8e7c49b6d042640cd8aa1b1ca8087b
prerequisite-patch-id: 2e456e70bd535f453437a2413ca72ba17c2633ef
prerequisite-patch-id: 38d27c3887354af36e0852bc4abc6f7ac37a3607
prerequisite-patch-id: d951e07b04b1e9940f3d9284a3a2793be64f8d75
prerequisite-patch-id: a22223134a3f2be3beb3314012f501ae47ef6ac7
prerequisite-patch-id: 3ca11fd88eab46e8fba2424f09fb0677975b4eca
prerequisite-patch-id: d5b298ed4f3ec93c3291990243b7e6d731296567
prerequisite-patch-id: c9d3262305079c14d7506fe8e9aaeca4f9951af1
prerequisite-patch-id: 7d1ccc1577aa7ae90cc142e93f2bc7ae03c1e040
prerequisite-patch-id: bd99890c1b096f9de0ba0cad6d159d7c3a280184
prerequisite-patch-id: 744a005f4e03ba8387a20f58787707efd6420624
prerequisite-patch-id: 5d8df83f2a68ea6288b7f2453495b9f50ec9b56c
prerequisite-patch-id: 4d47b8e2c6d09769f482e1dd6c67a2e19c1b7e48
prerequisite-patch-id: 174af0ce1c6d18237cec1bcdc07bed8bc8d290c7
prerequisite-patch-id: a8e98124646ec3cb7322a934069aff078f56da8e
prerequisite-patch-id: 656ad7879c5b26dd7c10d995a8168ec3cd2d0610
prerequisite-patch-id: 5e814fc37943167ad14b6cec84ab688889a7c6ba
prerequisite-patch-id: 5b6892a6469325a2bc04bada7701b0c30ce0d583
prerequisite-patch-id: 55f4c7e9e6ba44d2a085e08465be92fb65fcdabb
prerequisite-patch-id: 8ed9d006dc2067a8d1d0e737db79f1c29aafcbad
prerequisite-patch-id: 847b56b5d1c5c9edbd64ef3c31953b44dbbcd36c
prerequisite-patch-id: 15490d96af9ee45109375cc6b514815f614a90e5
prerequisite-patch-id: 40895cb78bbec76c1fca03f277cc7feffed809bd
prerequisite-patch-id: 000f1f743c9623199553c6c55e6488285f84a69a
prerequisite-patch-id: 64d2dd1ee3c2acba895a6a359717d125605ca40b
prerequisite-patch-id: 88a8b798ebcc5b68764d0648883a835656f2976d
prerequisite-patch-id: 7981eafe4191df2a3a6b75305800d26a7512a99d
prerequisite-patch-id: 4cabfd870fc08bb42ca9f2a28f4dc3ef5ab10cdb
prerequisite-patch-id: 6461aab4dea29511b57c4c5748ff75dc0cd91bce
prerequisite-patch-id: 527b62ba400a6f4bb8471cb78fbf9e994c36c425
prerequisite-patch-id: bb6dc7672919c6e69b72acf7e5f9a82f3a244b78
prerequisite-patch-id: 194e84f4aa373b2ab07558ae11a13e04b5ab7c83
prerequisite-patch-id: de30b29102d8348bc0b6be169668e79f72c2870f
prerequisite-patch-id: a74d8d1f066d7ee741e7a408fc9469898cb23dd2
prerequisite-patch-id: af76af0b90679af3c77e6f7f67ba612ff586d1cb
prerequisite-patch-id: 6f600cf9c3f1af06af3339c8c0fb02e266a94449
prerequisite-patch-id: c221cae1f46ff3d9f33a98dc9b8bda16781f2825
prerequisite-patch-id: 9dc5d879f7eae91eeede0953ccedd98f12c85426
prerequisite-patch-id: 64f1d47b4fd771c649b02d65c27ee5d081e60407
prerequisite-patch-id: cfed62b131ffdd56a4dbef5bdaab53d29738f788
prerequisite-patch-id: eabbe2b3ab22e77b94fb48c5532f0f89670c06eb
prerequisite-patch-id: c2ec77368e174d72a99375a358e68b59c7c58a89
prerequisite-patch-id: eb817ffb84bcbc8943db7af7745fb57f07af68a1
prerequisite-patch-id: 72ae07abd5ff51fd173c4c844c4237862f8e556f
prerequisite-patch-id: 9a91d55bacfa96c5f0a83794c959a60664866a03
prerequisite-patch-id: 946c360b6a60c15625b9a2c5f4d6a5290fc045f7
prerequisite-patch-id: 6e7e5afd25439eb017922f41d0c1f6437f98fd43
prerequisite-patch-id: f425c8286a72c65ba8b6e0b9e1467d30e1a4811f
prerequisite-patch-id: f3910f84eb35c865963255eaa0737048a1c27f40
prerequisite-patch-id: d58adda10d0a843a8389013289a5923231804d79
prerequisite-patch-id: a981f471b99beb2f906f2625967ddb07e1a7453d
prerequisite-patch-id: 729276c87210c3885fc48efeb0856ecdbff06fc3
prerequisite-patch-id: 94c69003708d65e4e26fe597239ae482a81178d1
prerequisite-patch-id: b0cbf5d6d2fe6986888e1316bfb13d0c174ae397
prerequisite-patch-id: 6cb0fb8081ad615698b11fcb192d7d1a04f909fb
prerequisite-patch-id: 0c9c8c42dd49303a1088c1740cbfb975ddaf0ac7
prerequisite-patch-id: 879d6cfe153f92febc06531e354dedcc0e2407b6
prerequisite-patch-id: 2df973b849d0ddc313d09aad9a0e4a682cc07fef
prerequisite-patch-id: 5ffa7390af803fc57d77139807ea10a9366ef9ce
prerequisite-patch-id: 7b42d26e957bf45aaa0b8e72fee03b7cc5dea85e
prerequisite-patch-id: 7771bf0c9b072a7a5dbd66b06ac6b09927d5e733
prerequisite-patch-id: e84f87c7da28de7dde5faddb8784ee583222aafb
prerequisite-patch-id: 3aa46ea7bd70fb6178e826ffc59d4e48c8b90384
prerequisite-patch-id: 06bbe9f23146a9ad173dd1ae342c0df9b9112903
prerequisite-patch-id: 09240cfa91c14dc8752820c883855b04c9ab7e65
prerequisite-patch-id: 7e724038426545c714fbde7d68240b4edabedf6f
prerequisite-patch-id: f3c6567c4db5ccd60e2a96eca5e4435f8bb80d65
prerequisite-patch-id: 05a11f3168d2a107b950cde0180086643b73e564
prerequisite-patch-id: 29571b1568b4fa54068857c5766c64dcc60a7e02
prerequisite-patch-id: bbc5783b2df37a4892f9a4baf75fad225917a600
prerequisite-patch-id: ef10c509b820ad222ed488b6d58ed85e2d06e3d6
prerequisite-patch-id: 8f1ca17555ff477bbbbd691c811fde1edee4cf8b
prerequisite-patch-id: 1eecbb6ddf333440a0a71882b41335f59bd458b2
prerequisite-patch-id: 8a9babf4ae144e996f2c1c171741e20d5848bc54
prerequisite-patch-id: cac90d9ecf858a9f5adb469fec2bcc9fb3ae9d23
prerequisite-patch-id: 2c125271b28e8932f45edde2c634f0675d8ea4ba
prerequisite-patch-id: f3e15e86a9d9415074dd9b60c962442651102ea4
prerequisite-patch-id: 2b74c8644fe75dfa22407ac14a1496d90a068f35
prerequisite-patch-id: eb60ebf5374887dec3aa747a1f4a804b2a261a9b
prerequisite-patch-id: a295a1c2cb92f51b35f58405ce6ea270f80f2fd9
prerequisite-patch-id: 63fa9059c2286a906239fd2e40bd82ffc8d623e2
prerequisite-patch-id: b0b9b939d664d4f7b27e06adf36c46f95f7ae913
prerequisite-patch-id: d44c7373dcea611df59477495ba7335a04cee0cd
prerequisite-patch-id: 34e9f43b412e5018366864837b59cee72a05abd3
prerequisite-patch-id: a015f2e8c5fee026c0bbc29e99e6967e03e75941
prerequisite-patch-id: cf9d39047475b461e07831bc4504c06b63a9f225
prerequisite-patch-id: b0781eb6976b35e01381ac9a12ac7caa6d90822b
prerequisite-patch-id: 4cf6f480b8d4c4cd8d392d096f7fae26b206edee
prerequisite-patch-id: 03df5085a95aff837c10ac02e9fdb1234a829738
prerequisite-patch-id: a775e4a3a9873b5b42516a32429705c853747a5a
prerequisite-patch-id: ecc5483454fc52289c093e711d5423e1cdd8bc3b
prerequisite-patch-id: 1aea6316a2a4a7b56316dbef3ca6034de6ec1672
prerequisite-patch-id: f5519a80f9cf972665b8accb34869e81d007deb2
prerequisite-patch-id: f870d63dae8bdac89711527b4cb02d69e40a2958
prerequisite-patch-id: a57488257a6c96111c3b23d465929cce0131ef1e
prerequisite-patch-id: dff49267a0db686172ae90cee86ad82af985b292
prerequisite-patch-id: 8b5b0ff8043abbe1eb15c005697a91171365e272
prerequisite-patch-id: 67c6aaf1985cc437c3a82ab88e1b5fbd14bb0737
prerequisite-patch-id: d91ab2db3361217f60008ea2faf28eecc475b53a
prerequisite-patch-id: 5e25ca1deb481b36df30d0764193eea423ed1350
prerequisite-patch-id: 089929b7d0f8a11020e317e891ca60d51ea4c3f0
prerequisite-patch-id: 8f4c5c8f7aca170aa951b0ce02a6720a47a231da
prerequisite-patch-id: 2d8150f755701f593e776132665bbcd20c7b5249
prerequisite-patch-id: 37aa0a7a2e6c499b420eaae4dd80aeacf8978cf8
prerequisite-patch-id: 35a6d2109bc7023c93e847a9da88b1fe284d7c8a
Best regards,
--
Daniel Scally <dan.scally@ideasonboard.com>
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v6 1/3] dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block 2025-11-11 16:34 [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Daniel Scally @ 2025-11-11 16:34 ` Daniel Scally 2025-11-11 16:34 ` [PATCH v6 2/3] media: platform: Add Renesas Input Video Control block driver Daniel Scally ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Daniel Scally @ 2025-11-11 16:34 UTC (permalink / raw) To: linux-media, devicetree, linux-renesas-soc Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, Philipp Zabel, jacopo.mondi, biju.das.jz, laurent.pinchart, Krzysztof Kozlowski, Daniel Scally The RZ/V2H(P) SoC has a block called the Input Video Control block which feeds image data into the Image Signal Processor. Add dt bindings to describe the IVC. Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> --- Chagnes in v6: - Add # RZ/V2H(P) after compatible string enum Changes in v5: - Rename RZ/V2H to RZ/V2H(P) Changes in v3: - Rename from rzv2h-ivc.yaml to r9a09g057-ivc.yaml - Update clock and reset names Changes in v2: - compatible matches filename - Added power-domains - Aligned clock and reset entries on opening "<" - Removed status = "okay"; from example --- .../bindings/media/renesas,r9a09g057-ivc.yaml | 103 +++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/Documentation/devicetree/bindings/media/renesas,r9a09g057-ivc.yaml b/Documentation/devicetree/bindings/media/renesas,r9a09g057-ivc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c09cbd8c9e3597e1d3d1f83cbd9abd5d17cc0262 --- /dev/null +++ b/Documentation/devicetree/bindings/media/renesas,r9a09g057-ivc.yaml @@ -0,0 +1,103 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/renesas,r9a09g057-ivc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas RZ/V2H(P) Input Video Control Block + +maintainers: + - Daniel Scally <dan.scally@ideasonboard.com> + +description: + The IVC block is a module that takes video frames from memory and feeds them + to the Image Signal Processor for processing. + +properties: + compatible: + const: renesas,r9a09g057-ivc # RZ/V2H(P) + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + items: + - description: Input Video Control block register access clock + - description: Video input data AXI bus clock + - description: ISP system clock + + clock-names: + items: + - const: reg + - const: axi + - const: isp + + power-domains: + maxItems: 1 + + resets: + items: + - description: Input Video Control block register access reset + - description: Video input data AXI bus reset + - description: ISP core reset + + reset-names: + items: + - const: reg + - const: axi + - const: isp + + port: + $ref: /schemas/graph.yaml#/properties/port + description: Output parallel video bus + + properties: + endpoint: + $ref: /schemas/graph.yaml#/properties/endpoint + +required: + - compatible + - reg + - interrupts + - clocks + - clock-names + - power-domains + - resets + - reset-names + - port + +additionalProperties: false + +examples: + - | + #include <dt-bindings/clock/renesas,r9a09g057-cpg.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + isp-input@16040000 { + compatible = "renesas,r9a09g057-ivc"; + reg = <0x16040000 0x230>; + + clocks = <&cpg CPG_MOD 0xe3>, + <&cpg CPG_MOD 0xe4>, + <&cpg CPG_MOD 0xe5>; + clock-names = "reg", "axi", "isp"; + + power-domains = <&cpg>; + + resets = <&cpg 0xd4>, + <&cpg 0xd1>, + <&cpg 0xd3>; + reset-names = "reg", "axi", "isp"; + + interrupts = <GIC_SPI 861 IRQ_TYPE_EDGE_RISING>; + + port { + ivc_out: endpoint { + remote-endpoint = <&isp_in>; + }; + }; + }; +... -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v6 2/3] media: platform: Add Renesas Input Video Control block driver 2025-11-11 16:34 [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Daniel Scally 2025-11-11 16:34 ` [PATCH v6 1/3] dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block Daniel Scally @ 2025-11-11 16:34 ` Daniel Scally 2025-11-14 14:46 ` Hans Verkuil 2025-11-11 16:34 ` [PATCH v6 3/3] MAINTAINERS: Add entry for rzv2h-ivc driver Daniel Scally 2025-11-17 10:57 ` [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Lad, Prabhakar 3 siblings, 1 reply; 6+ messages in thread From: Daniel Scally @ 2025-11-11 16:34 UTC (permalink / raw) To: linux-media, devicetree, linux-renesas-soc Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, Philipp Zabel, jacopo.mondi, biju.das.jz, laurent.pinchart, Jacopo Mondi, Daniel Scally Add a driver for the Input Video Control block in an RZ/V2H(P) SoC which feeds data into the Arm Mali-C55 ISP. [ivc: Remove check on buffers list in start_streaming] [ivc: put_autosuspend() implies mark_last_busy()] [media: rzv2h-ivc: Do not delay frame completion] Signed-off-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> --- Changes in latest version: - Requested irq at very end of runtime resume callback and not the beginning. - Switch to devm_mutex_init() - Disable runtime pm in probe() error path Changes in v7: - Returned buffers to userspace as soon as the first interrupt is received instead of waiting until the second - Fixes to the pm runtime invocations - Some minor formatting changes Changes in v6: - Minor formatting changes - Dropped CONFIG_ prefix from Kconfig symbols - Collected tags - Replaced "RZ/V2H" with "RZ/V2H(P)" - Reformatted probe function - Removed leftover reference to media job scheduler - Drop the .pipeline_started() and .pipeline_stopped() media entity operations to remove a dependency for the set. Changes in v5: - Fixed .enum_frame_sizes() to properly check that the given mbus_code matches the source pads format. - Tidy up extra space in Kconfig - Revise Kconfig option message - Don't mark functions inline - Fixup misleading comment - select CONFIG_PM - Use the new pm_sleep_ptr() functionality - Minor formatting Changes in v4: - Update the compatible to renesas,r9a09g057-ivc - Dropped the media jobs / scheduler functionality, and re worked the driver to have its own workqueue pushing frames - Fix .enum_mbus_code() to return 20-bit output for source pad. - Fix some alignment issues - Make the forwarding of sink to source pad format a more explicit operation. - Rename rzv2h_initialise_video_device_and_queue() - Reversed order of v4l2_subdev_init_finalize() and v4l2_async_register_subdev() to make sure everything is finished initialising before registering the subdev. - Change function to MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER - Use a parametised macro for min vblank - Minor formatting - Use the DEFAULT macros for quantization / ycbcr_enc values - Switch to using the mplane API - Dropped select RESET_CONTROLLER - Used the new helpers for starting a media pipeline - Switch from threaded irq to normal with driver workqueue and revised startup routine Changes in v3: - Account for the renamed CRU pixel formats Changes in v2: - Added selects and depends statements to Kconfig entry - Fixed copyright year - Stopped including in .c files headers already included in .h - Fixed uninitialized variable in iterator - Only check vvalid member in interrupt function and wait unconditionally elsewhere - __maybe_unused for the PM ops - Initialise the subdevice after setting up PM - Fixed the remove function for the driver to actually do something. - Some minor formatting changes - Fixed the quantization member for the format - Changes accounting for the v2 of the media jobs framework - Change min_queued_buffers to 0 --- drivers/media/platform/renesas/Kconfig | 1 + drivers/media/platform/renesas/Makefile | 1 + drivers/media/platform/renesas/rzv2h-ivc/Kconfig | 18 + drivers/media/platform/renesas/rzv2h-ivc/Makefile | 5 + .../platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c | 250 ++++++++++ .../platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c | 375 +++++++++++++++ .../platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c | 533 +++++++++++++++++++++ .../media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h | 130 +++++ 8 files changed, 1313 insertions(+) diff --git a/drivers/media/platform/renesas/Kconfig b/drivers/media/platform/renesas/Kconfig index 27a54fa7908384f2e8200f0f7283a82b0ae8435c..bd8247c0b8aa734d2b412438e694f3908d910b25 100644 --- a/drivers/media/platform/renesas/Kconfig +++ b/drivers/media/platform/renesas/Kconfig @@ -42,6 +42,7 @@ config VIDEO_SH_VOU source "drivers/media/platform/renesas/rcar-isp/Kconfig" source "drivers/media/platform/renesas/rcar-vin/Kconfig" source "drivers/media/platform/renesas/rzg2l-cru/Kconfig" +source "drivers/media/platform/renesas/rzv2h-ivc/Kconfig" # Mem2mem drivers diff --git a/drivers/media/platform/renesas/Makefile b/drivers/media/platform/renesas/Makefile index 1127259c09d6a51b70803e76c495918e06777f67..b6b4abf01db246aaf8269b8027efee9b0b32083a 100644 --- a/drivers/media/platform/renesas/Makefile +++ b/drivers/media/platform/renesas/Makefile @@ -6,6 +6,7 @@ obj-y += rcar-isp/ obj-y += rcar-vin/ obj-y += rzg2l-cru/ +obj-y += rzv2h-ivc/ obj-y += vsp1/ obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o diff --git a/drivers/media/platform/renesas/rzv2h-ivc/Kconfig b/drivers/media/platform/renesas/rzv2h-ivc/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..b30702489d380902bfdcff57f0d70498c85e1d24 --- /dev/null +++ b/drivers/media/platform/renesas/rzv2h-ivc/Kconfig @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0-only + +config VIDEO_RZV2H_IVC + tristate "Renesas RZ/V2H(P) Input Video Control block driver" + depends on V4L_PLATFORM_DRIVERS + depends on VIDEO_DEV + depends on ARCH_RENESAS || COMPILE_TEST + depends on OF + select PM + select VIDEOBUF2_DMA_CONTIG + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API + help + Support for the Renesas RZ/V2H(P) Input Video Control Block + (IVC). + + To compile this driver as a module, choose M here: the + module will be called rzv2h-ivc. diff --git a/drivers/media/platform/renesas/rzv2h-ivc/Makefile b/drivers/media/platform/renesas/rzv2h-ivc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..080ee3570f09c236d87abeaea5d8dd578fefb6d3 --- /dev/null +++ b/drivers/media/platform/renesas/rzv2h-ivc/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +rzv2h-ivc-y := rzv2h-ivc-dev.o rzv2h-ivc-subdev.o rzv2h-ivc-video.o + +obj-$(CONFIG_VIDEO_RZV2H_IVC) += rzv2h-ivc.o diff --git a/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c new file mode 100644 index 0000000000000000000000000000000000000000..658e8615416b8f2bea8357d2703c630d6cbccfdf --- /dev/null +++ b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Renesas RZ/V2H(P) Input Video Control Block driver + * + * Copyright (C) 2025 Ideas on Board Oy + */ + +#include "rzv2h-ivc.h" + +#include <linux/device.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/reset.h> + +void rzv2h_ivc_write(struct rzv2h_ivc *ivc, u32 addr, u32 val) +{ + writel(val, ivc->base + addr); +} + +void rzv2h_ivc_update_bits(struct rzv2h_ivc *ivc, unsigned int addr, + u32 mask, u32 val) +{ + u32 orig, new; + + orig = readl(ivc->base + addr); + + new = orig & ~mask; + new |= val & mask; + + if (new != orig) + writel(new, ivc->base + addr); +} + +static int rzv2h_ivc_get_hardware_resources(struct rzv2h_ivc *ivc, + struct platform_device *pdev) +{ + static const char * const resource_names[RZV2H_IVC_NUM_HW_RESOURCES] = { + "reg", + "axi", + "isp", + }; + struct resource *res; + int ret; + + ivc->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); + if (IS_ERR(ivc->base)) + return dev_err_probe(ivc->dev, PTR_ERR(ivc->base), + "failed to map IO memory\n"); + + for (unsigned int i = 0; i < ARRAY_SIZE(resource_names); i++) + ivc->clks[i].id = resource_names[i]; + + ret = devm_clk_bulk_get(ivc->dev, ARRAY_SIZE(resource_names), ivc->clks); + if (ret) + return dev_err_probe(ivc->dev, ret, "failed to acquire clks\n"); + + for (unsigned int i = 0; i < ARRAY_SIZE(resource_names); i++) + ivc->resets[i].id = resource_names[i]; + + ret = devm_reset_control_bulk_get_optional_shared( + ivc->dev, ARRAY_SIZE(resource_names), ivc->resets); + if (ret) + return dev_err_probe(ivc->dev, ret, "failed to acquire resets\n"); + + return 0; +} + +static void rzv2h_ivc_global_config(struct rzv2h_ivc *ivc) +{ + /* Currently we only support single-exposure input */ + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_PLNUM, RZV2H_IVC_ONE_EXPOSURE); + + /* + * Datasheet says we should disable the interrupts before changing mode + * to avoid spurious IFP interrupt. + */ + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_FM_INT_EN, 0x0); + + /* + * RZ/V2H(P) documentation says software controlled single context mode + * is not supported, and currently the driver does not support the + * multi-context mode. That being so we just set single context sw-hw + * mode. + */ + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_FM_CONTEXT, + RZV2H_IVC_SINGLE_CONTEXT_SW_HW_CFG); + + /* + * We enable the frame end interrupt so that we know when we should send + * follow-up frames. + */ + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_FM_INT_EN, RZV2H_IVC_VVAL_IFPE); +} + +static irqreturn_t rzv2h_ivc_isr(int irq, void *context) +{ + struct device *dev = context; + struct rzv2h_ivc *ivc = dev_get_drvdata(dev); + + guard(spinlock)(&ivc->spinlock); + + /* IRQ should never be triggered before vvalid_ifp has been reset to 2 */ + if (WARN_ON(!ivc->vvalid_ifp)) + return IRQ_HANDLED; + + /* + * The first interrupt indicates that the buffer transfer has been + * completed. + */ + if (--ivc->vvalid_ifp) { + rzv2h_ivc_buffer_done(ivc); + return IRQ_HANDLED; + } + + /* + * The second interrupt indicates that the post-frame transfer VBLANK + * has completed, we can now schedule a new frame transfer, if any. + */ + queue_work(ivc->buffers.async_wq, &ivc->buffers.work); + + return IRQ_HANDLED; +} + +static int rzv2h_ivc_runtime_resume(struct device *dev) +{ + struct rzv2h_ivc *ivc = dev_get_drvdata(dev); + int ret; + + ret = clk_bulk_prepare_enable(ARRAY_SIZE(ivc->clks), ivc->clks); + if (ret) { + dev_err(ivc->dev, "failed to enable clocks\n"); + return ret; + } + + ret = reset_control_bulk_deassert(ARRAY_SIZE(ivc->resets), ivc->resets); + if (ret) { + dev_err(ivc->dev, "failed to deassert resets\n"); + goto err_disable_clks; + } + + rzv2h_ivc_global_config(ivc); + + ret = request_irq(ivc->irqnum, rzv2h_ivc_isr, 0, dev_driver_string(dev), + dev); + if (ret) { + dev_err(dev, "failed to request irq\n"); + goto err_assert_resets; + } + + return 0; + +err_assert_resets: + reset_control_bulk_assert(ARRAY_SIZE(ivc->resets), ivc->resets); +err_disable_clks: + clk_bulk_disable_unprepare(ARRAY_SIZE(ivc->clks), ivc->clks); + + return ret; +} + +static int rzv2h_ivc_runtime_suspend(struct device *dev) +{ + struct rzv2h_ivc *ivc = dev_get_drvdata(dev); + + reset_control_bulk_assert(ARRAY_SIZE(ivc->resets), ivc->resets); + clk_bulk_disable_unprepare(ARRAY_SIZE(ivc->clks), ivc->clks); + free_irq(ivc->irqnum, dev); + + return 0; +} + +static const struct dev_pm_ops rzv2h_ivc_pm_ops = { + SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume) + RUNTIME_PM_OPS(rzv2h_ivc_runtime_suspend, rzv2h_ivc_runtime_resume, + NULL) +}; + +static int rzv2h_ivc_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct rzv2h_ivc *ivc; + int ret; + + ivc = devm_kzalloc(dev, sizeof(*ivc), GFP_KERNEL); + if (!ivc) + return -ENOMEM; + + ivc->dev = dev; + platform_set_drvdata(pdev, ivc); + + ret = devm_mutex_init(dev, &ivc->lock); + if (ret) + return ret; + + spin_lock_init(&ivc->spinlock); + + ret = rzv2h_ivc_get_hardware_resources(ivc, pdev); + if (ret) + return ret; + + pm_runtime_set_autosuspend_delay(dev, 2000); + pm_runtime_use_autosuspend(dev); + pm_runtime_enable(dev); + + ivc->irqnum = platform_get_irq(pdev, 0); + if (ivc->irqnum < 0) + return ivc->irqnum; + + ret = rzv2h_ivc_initialise_subdevice(ivc); + if (ret) + goto err_disable_pm_runtime; + + return 0; + +err_disable_pm_runtime: + pm_runtime_disable(dev); + + return ret; +} + +static void rzv2h_ivc_remove(struct platform_device *pdev) +{ + struct rzv2h_ivc *ivc = platform_get_drvdata(pdev); + + rzv2h_deinit_video_dev_and_queue(ivc); + rzv2h_ivc_deinit_subdevice(ivc); +} + +static const struct of_device_id rzv2h_ivc_of_match[] = { + { .compatible = "renesas,r9a09g057-ivc", }, + { /* Sentinel */ } +}; +MODULE_DEVICE_TABLE(of, rzv2h_ivc_of_match); + +static struct platform_driver rzv2h_ivc_driver = { + .driver = { + .name = "rzv2h-ivc", + .of_match_table = rzv2h_ivc_of_match, + .pm = &rzv2h_ivc_pm_ops, + }, + .probe = rzv2h_ivc_probe, + .remove = rzv2h_ivc_remove, +}; + +module_platform_driver(rzv2h_ivc_driver); + +MODULE_AUTHOR("Daniel Scally <dan.scally@ideasonboard.com>"); +MODULE_DESCRIPTION("Renesas RZ/V2H(P) Input Video Control Block driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c new file mode 100644 index 0000000000000000000000000000000000000000..5b7bebc0f7e72bc1aee4247d7d15820705bb6b15 --- /dev/null +++ b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c @@ -0,0 +1,375 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Renesas RZ/V2H(P) Input Video Control Block driver + * + * Copyright (C) 2025 Ideas on Board Oy + */ + +#include "rzv2h-ivc.h" + +#include <linux/media.h> +#include <linux/media-bus-format.h> +#include <linux/v4l2-mediabus.h> + +#include <media/v4l2-async.h> +#include <media/v4l2-ctrls.h> +#include <media/v4l2-dev.h> +#include <media/v4l2-event.h> + +#define RZV2H_IVC_N_INPUTS_PER_OUTPUT 6 + +/* + * We support 8/10/12/14/16/20 bit input in any bayer order, but the output + * format is fixed at 20-bits with the same order as the input. + */ +static const struct { + u32 inputs[RZV2H_IVC_N_INPUTS_PER_OUTPUT]; + u32 output; +} rzv2h_ivc_formats[] = { + { + .inputs = { + MEDIA_BUS_FMT_SBGGR8_1X8, + MEDIA_BUS_FMT_SBGGR10_1X10, + MEDIA_BUS_FMT_SBGGR12_1X12, + MEDIA_BUS_FMT_SBGGR14_1X14, + MEDIA_BUS_FMT_SBGGR16_1X16, + MEDIA_BUS_FMT_SBGGR20_1X20, + }, + .output = MEDIA_BUS_FMT_SBGGR20_1X20 + }, + { + .inputs = { + MEDIA_BUS_FMT_SGBRG8_1X8, + MEDIA_BUS_FMT_SGBRG10_1X10, + MEDIA_BUS_FMT_SGBRG12_1X12, + MEDIA_BUS_FMT_SGBRG14_1X14, + MEDIA_BUS_FMT_SGBRG16_1X16, + MEDIA_BUS_FMT_SGBRG20_1X20, + }, + .output = MEDIA_BUS_FMT_SGBRG20_1X20 + }, + { + .inputs = { + MEDIA_BUS_FMT_SGRBG8_1X8, + MEDIA_BUS_FMT_SGRBG10_1X10, + MEDIA_BUS_FMT_SGRBG12_1X12, + MEDIA_BUS_FMT_SGRBG14_1X14, + MEDIA_BUS_FMT_SGRBG16_1X16, + MEDIA_BUS_FMT_SGRBG20_1X20, + }, + .output = MEDIA_BUS_FMT_SGRBG20_1X20 + }, + { + .inputs = { + MEDIA_BUS_FMT_SRGGB8_1X8, + MEDIA_BUS_FMT_SRGGB10_1X10, + MEDIA_BUS_FMT_SRGGB12_1X12, + MEDIA_BUS_FMT_SRGGB14_1X14, + MEDIA_BUS_FMT_SRGGB16_1X16, + MEDIA_BUS_FMT_SRGGB20_1X20, + }, + .output = MEDIA_BUS_FMT_SRGGB20_1X20 + }, +}; + +static u32 rzv2h_ivc_get_mbus_output_from_input(u32 mbus_code) +{ + unsigned int i, j; + + for (i = 0; i < ARRAY_SIZE(rzv2h_ivc_formats); i++) { + for (j = 0; j < RZV2H_IVC_N_INPUTS_PER_OUTPUT; j++) { + if (rzv2h_ivc_formats[i].inputs[j] == mbus_code) + return rzv2h_ivc_formats[i].output; + } + } + + return 0; +} + +static int rzv2h_ivc_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_mbus_code_enum *code) +{ + const struct v4l2_mbus_framefmt *fmt; + unsigned int order_index; + unsigned int index; + + /* + * On the source pad, only the 20-bit format corresponding to the sink + * pad format's bayer order is supported. + */ + if (code->pad == RZV2H_IVC_SUBDEV_SOURCE_PAD) { + if (code->index) + return -EINVAL; + + fmt = v4l2_subdev_state_get_format(state, + RZV2H_IVC_SUBDEV_SINK_PAD); + code->code = rzv2h_ivc_get_mbus_output_from_input(fmt->code); + + return 0; + } + + if (code->index >= ARRAY_SIZE(rzv2h_ivc_formats) * + RZV2H_IVC_N_INPUTS_PER_OUTPUT) + return -EINVAL; + + order_index = code->index / RZV2H_IVC_N_INPUTS_PER_OUTPUT; + index = code->index % RZV2H_IVC_N_INPUTS_PER_OUTPUT; + + code->code = rzv2h_ivc_formats[order_index].inputs[index]; + + return 0; +} + +static int rzv2h_ivc_enum_frame_size(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_frame_size_enum *fse) +{ + const struct v4l2_mbus_framefmt *fmt; + + if (fse->index > 0) + return -EINVAL; + + if (fse->pad == RZV2H_IVC_SUBDEV_SOURCE_PAD) { + fmt = v4l2_subdev_state_get_format(state, + RZV2H_IVC_SUBDEV_SINK_PAD); + + if (fse->code != rzv2h_ivc_get_mbus_output_from_input(fmt->code)) + return -EINVAL; + + fse->min_width = fmt->width; + fse->max_width = fmt->width; + fse->min_height = fmt->height; + fse->max_height = fmt->height; + + return 0; + } + + if (!rzv2h_ivc_get_mbus_output_from_input(fse->code)) + return -EINVAL; + + fse->min_width = RZV2H_IVC_MIN_WIDTH; + fse->max_width = RZV2H_IVC_MAX_WIDTH; + fse->min_height = RZV2H_IVC_MIN_HEIGHT; + fse->max_height = RZV2H_IVC_MAX_HEIGHT; + + return 0; +} + +static int rzv2h_ivc_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_format *format) +{ + struct v4l2_mbus_framefmt *fmt = &format->format; + struct v4l2_mbus_framefmt *src_fmt, *sink_fmt; + + if (format->pad == RZV2H_IVC_SUBDEV_SOURCE_PAD) + return v4l2_subdev_get_fmt(sd, state, format); + + sink_fmt = v4l2_subdev_state_get_format(state, + RZV2H_IVC_SUBDEV_SINK_PAD); + + sink_fmt->code = rzv2h_ivc_get_mbus_output_from_input(fmt->code) ? + fmt->code : rzv2h_ivc_formats[0].inputs[0]; + + sink_fmt->width = clamp(fmt->width, RZV2H_IVC_MIN_WIDTH, + RZV2H_IVC_MAX_WIDTH); + sink_fmt->height = clamp(fmt->height, RZV2H_IVC_MIN_HEIGHT, + RZV2H_IVC_MAX_HEIGHT); + + *fmt = *sink_fmt; + + src_fmt = v4l2_subdev_state_get_format(state, + RZV2H_IVC_SUBDEV_SOURCE_PAD); + *src_fmt = *sink_fmt; + src_fmt->code = rzv2h_ivc_get_mbus_output_from_input(sink_fmt->code); + + return 0; +} + +static int rzv2h_ivc_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) +{ + /* + * We have a single source pad, which has a single stream. V4L2 core has + * already validated those things. The actual power-on and programming + * of registers will be done through the video device's .vidioc_streamon + * so there's nothing to actually do here... + */ + + return 0; +} + +static int rzv2h_ivc_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, u32 pad, + u64 streams_mask) +{ + return 0; +} + +static const struct v4l2_subdev_pad_ops rzv2h_ivc_pad_ops = { + .enum_mbus_code = rzv2h_ivc_enum_mbus_code, + .enum_frame_size = rzv2h_ivc_enum_frame_size, + .get_fmt = v4l2_subdev_get_fmt, + .set_fmt = rzv2h_ivc_set_fmt, + .enable_streams = rzv2h_ivc_enable_streams, + .disable_streams = rzv2h_ivc_disable_streams, +}; + +static const struct v4l2_subdev_core_ops rzv2h_ivc_core_ops = { + .subscribe_event = v4l2_ctrl_subdev_subscribe_event, + .unsubscribe_event = v4l2_event_subdev_unsubscribe, +}; + +static const struct v4l2_subdev_ops rzv2h_ivc_subdev_ops = { + .core = &rzv2h_ivc_core_ops, + .pad = &rzv2h_ivc_pad_ops, +}; + +static int rzv2h_ivc_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) +{ + struct v4l2_mbus_framefmt *sink_fmt, *src_fmt; + + sink_fmt = v4l2_subdev_state_get_format(state, + RZV2H_IVC_SUBDEV_SINK_PAD); + sink_fmt->width = RZV2H_IVC_DEFAULT_WIDTH; + sink_fmt->height = RZV2H_IVC_DEFAULT_HEIGHT; + sink_fmt->field = V4L2_FIELD_NONE; + sink_fmt->code = MEDIA_BUS_FMT_SRGGB16_1X16; + sink_fmt->colorspace = V4L2_COLORSPACE_RAW; + sink_fmt->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(sink_fmt->colorspace); + sink_fmt->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(sink_fmt->colorspace); + sink_fmt->quantization = V4L2_MAP_QUANTIZATION_DEFAULT( + true, sink_fmt->colorspace, sink_fmt->ycbcr_enc); + + src_fmt = v4l2_subdev_state_get_format(state, + RZV2H_IVC_SUBDEV_SOURCE_PAD); + + *src_fmt = *sink_fmt; + src_fmt->code = MEDIA_BUS_FMT_SRGGB20_1X20; + + return 0; +} + +static int rzv2h_ivc_registered(struct v4l2_subdev *sd) +{ + struct rzv2h_ivc *ivc = container_of(sd, struct rzv2h_ivc, subdev.sd); + + return rzv2h_ivc_init_vdev(ivc, sd->v4l2_dev); +} + +static const struct v4l2_subdev_internal_ops rzv2h_ivc_subdev_internal_ops = { + .init_state = rzv2h_ivc_init_state, + .registered = rzv2h_ivc_registered, +}; + +static int rzv2h_ivc_link_validate(struct media_link *link) +{ + struct video_device *vdev = + media_entity_to_video_device(link->source->entity); + struct rzv2h_ivc *ivc = video_get_drvdata(vdev); + struct v4l2_subdev *sd = + media_entity_to_v4l2_subdev(link->sink->entity); + const struct rzv2h_ivc_format *fmt; + const struct v4l2_pix_format_mplane *pix; + struct v4l2_subdev_state *state; + struct v4l2_mbus_framefmt *mf; + unsigned int i; + int ret = 0; + + state = v4l2_subdev_lock_and_get_active_state(sd); + mf = v4l2_subdev_state_get_format(state, link->sink->index); + + pix = &ivc->format.pix; + fmt = ivc->format.fmt; + + if (mf->width != pix->width || mf->height != pix->height) { + dev_dbg(ivc->dev, + "link '%s':%u -> '%s':%u not valid: %ux%u != %ux%u\n", + link->source->entity->name, link->source->index, + link->sink->entity->name, link->sink->index, + mf->width, mf->height, pix->width, pix->height); + ret = -EPIPE; + } + + for (i = 0; i < ARRAY_SIZE(fmt->mbus_codes); i++) + if (mf->code == fmt->mbus_codes[i]) + break; + + if (i == ARRAY_SIZE(fmt->mbus_codes)) { + dev_dbg(ivc->dev, + "link '%s':%u -> '%s':%u not valid: pixel format %p4cc cannot produce mbus_code 0x%04x\n", + link->source->entity->name, link->source->index, + link->sink->entity->name, link->sink->index, + &pix->pixelformat, mf->code); + ret = -EPIPE; + } + + v4l2_subdev_unlock_state(state); + + return ret; +} + +static const struct media_entity_operations rzv2h_ivc_media_ops = { + .link_validate = rzv2h_ivc_link_validate, +}; + +int rzv2h_ivc_initialise_subdevice(struct rzv2h_ivc *ivc) +{ + struct v4l2_subdev *sd; + int ret; + + /* Initialise subdevice */ + sd = &ivc->subdev.sd; + sd->dev = ivc->dev; + v4l2_subdev_init(sd, &rzv2h_ivc_subdev_ops); + sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS; + sd->entity.function = MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER; + sd->internal_ops = &rzv2h_ivc_subdev_internal_ops; + sd->entity.ops = &rzv2h_ivc_media_ops; + + ivc->subdev.pads[RZV2H_IVC_SUBDEV_SINK_PAD].flags = MEDIA_PAD_FL_SINK; + ivc->subdev.pads[RZV2H_IVC_SUBDEV_SOURCE_PAD].flags = MEDIA_PAD_FL_SOURCE; + + snprintf(sd->name, sizeof(sd->name), "rzv2h ivc block"); + + ret = media_entity_pads_init(&sd->entity, RZV2H_IVC_NUM_SUBDEV_PADS, + ivc->subdev.pads); + if (ret) { + dev_err(ivc->dev, "failed to initialise media entity\n"); + return ret; + } + + ret = v4l2_subdev_init_finalize(sd); + if (ret) { + dev_err(ivc->dev, "failed to finalize subdev init\n"); + goto err_cleanup_subdev_entity; + } + + ret = v4l2_async_register_subdev(sd); + if (ret) { + dev_err(ivc->dev, "failed to register subdevice\n"); + goto err_cleanup_subdev; + } + + return 0; + +err_cleanup_subdev: + v4l2_subdev_cleanup(sd); +err_cleanup_subdev_entity: + media_entity_cleanup(&sd->entity); + + return ret; +} + +void rzv2h_ivc_deinit_subdevice(struct rzv2h_ivc *ivc) +{ + struct v4l2_subdev *sd = &ivc->subdev.sd; + + v4l2_subdev_cleanup(sd); + media_entity_remove_links(&sd->entity); + v4l2_async_unregister_subdev(sd); + media_entity_cleanup(&sd->entity); +} diff --git a/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c new file mode 100644 index 0000000000000000000000000000000000000000..b7fb2ef1964f882d49dce6cf7aa5c6d99ff450b0 --- /dev/null +++ b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c @@ -0,0 +1,533 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Renesas RZ/V2H(P) Input Video Control Block driver + * + * Copyright (C) 2025 Ideas on Board Oy + */ + +#include "rzv2h-ivc.h" + +#include <linux/cleanup.h> +#include <linux/iopoll.h> +#include <linux/lockdep.h> +#include <linux/media-bus-format.h> +#include <linux/minmax.h> +#include <linux/mutex.h> +#include <linux/pm_runtime.h> + +#include <media/mipi-csi2.h> +#include <media/v4l2-ctrls.h> +#include <media/v4l2-dev.h> +#include <media/v4l2-event.h> +#include <media/v4l2-fh.h> +#include <media/v4l2-ioctl.h> +#include <media/videobuf2-dma-contig.h> + +#define RZV2H_IVC_FIXED_HBLANK 0x20 +#define RZV2H_IVC_MIN_VBLANK(hts) max(0x1b, 15 + (120501 / (hts))) + +struct rzv2h_ivc_buf { + struct vb2_v4l2_buffer vb; + struct list_head queue; + dma_addr_t addr; +}; + +#define to_rzv2h_ivc_buf(vbuf) \ + container_of(vbuf, struct rzv2h_ivc_buf, vb) + +static const struct rzv2h_ivc_format rzv2h_ivc_formats[] = { + { + .fourcc = V4L2_PIX_FMT_SBGGR8, + .mbus_codes = { + MEDIA_BUS_FMT_SBGGR8_1X8, + }, + .dtype = MIPI_CSI2_DT_RAW8, + }, + { + .fourcc = V4L2_PIX_FMT_SGBRG8, + .mbus_codes = { + MEDIA_BUS_FMT_SGBRG8_1X8, + }, + .dtype = MIPI_CSI2_DT_RAW8, + }, + { + .fourcc = V4L2_PIX_FMT_SGRBG8, + .mbus_codes = { + MEDIA_BUS_FMT_SGRBG8_1X8, + }, + .dtype = MIPI_CSI2_DT_RAW8, + }, + { + .fourcc = V4L2_PIX_FMT_SRGGB8, + .mbus_codes = { + MEDIA_BUS_FMT_SRGGB8_1X8, + }, + .dtype = MIPI_CSI2_DT_RAW8, + }, + { + .fourcc = V4L2_PIX_FMT_RAW_CRU10, + .mbus_codes = { + MEDIA_BUS_FMT_SBGGR10_1X10, + MEDIA_BUS_FMT_SGBRG10_1X10, + MEDIA_BUS_FMT_SGRBG10_1X10, + MEDIA_BUS_FMT_SRGGB10_1X10 + }, + .dtype = MIPI_CSI2_DT_RAW10, + }, + { + .fourcc = V4L2_PIX_FMT_RAW_CRU12, + .mbus_codes = { + MEDIA_BUS_FMT_SBGGR12_1X12, + MEDIA_BUS_FMT_SGBRG12_1X12, + MEDIA_BUS_FMT_SGRBG12_1X12, + MEDIA_BUS_FMT_SRGGB12_1X12 + }, + .dtype = MIPI_CSI2_DT_RAW12, + }, + { + .fourcc = V4L2_PIX_FMT_RAW_CRU14, + .mbus_codes = { + MEDIA_BUS_FMT_SBGGR14_1X14, + MEDIA_BUS_FMT_SGBRG14_1X14, + MEDIA_BUS_FMT_SGRBG14_1X14, + MEDIA_BUS_FMT_SRGGB14_1X14 + }, + .dtype = MIPI_CSI2_DT_RAW14, + }, + { + .fourcc = V4L2_PIX_FMT_SBGGR16, + .mbus_codes = { + MEDIA_BUS_FMT_SBGGR16_1X16, + }, + .dtype = MIPI_CSI2_DT_RAW16, + }, + { + .fourcc = V4L2_PIX_FMT_SGBRG16, + .mbus_codes = { + MEDIA_BUS_FMT_SGBRG16_1X16, + }, + .dtype = MIPI_CSI2_DT_RAW16, + }, + { + .fourcc = V4L2_PIX_FMT_SGRBG16, + .mbus_codes = { + MEDIA_BUS_FMT_SGRBG16_1X16, + }, + .dtype = MIPI_CSI2_DT_RAW16, + }, + { + .fourcc = V4L2_PIX_FMT_SRGGB16, + .mbus_codes = { + MEDIA_BUS_FMT_SRGGB16_1X16, + }, + .dtype = MIPI_CSI2_DT_RAW16, + }, +}; + +void rzv2h_ivc_buffer_done(struct rzv2h_ivc *ivc) +{ + struct rzv2h_ivc_buf *buf; + + lockdep_assert_in_irq(); + + scoped_guard(spinlock, &ivc->buffers.lock) { + if (!ivc->buffers.curr) + return; + + buf = ivc->buffers.curr; + ivc->buffers.curr = NULL; + } + + buf->vb.sequence = ivc->buffers.sequence++; + vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); +} + +static void rzv2h_ivc_transfer_buffer(struct work_struct *work) +{ + struct rzv2h_ivc *ivc = container_of(work, struct rzv2h_ivc, + buffers.work); + struct rzv2h_ivc_buf *buf; + + /* Setup buffers */ + scoped_guard(spinlock_irqsave, &ivc->buffers.lock) { + buf = list_first_entry_or_null(&ivc->buffers.queue, + struct rzv2h_ivc_buf, queue); + } + + if (!buf) + return; + + list_del(&buf->queue); + + ivc->buffers.curr = buf; + buf->addr = vb2_dma_contig_plane_dma_addr(&buf->vb.vb2_buf, 0); + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_SADDL_P0, buf->addr); + + scoped_guard(spinlock_irqsave, &ivc->spinlock) { + ivc->vvalid_ifp = 2; + } + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_FM_FRCON, 0x1); +} + +static int rzv2h_ivc_queue_setup(struct vb2_queue *q, unsigned int *num_buffers, + unsigned int *num_planes, unsigned int sizes[], + struct device *alloc_devs[]) +{ + struct rzv2h_ivc *ivc = vb2_get_drv_priv(q); + + if (*num_planes && *num_planes > 1) + return -EINVAL; + + if (sizes[0] && sizes[0] < ivc->format.pix.plane_fmt[0].sizeimage) + return -EINVAL; + + *num_planes = 1; + + if (!sizes[0]) + sizes[0] = ivc->format.pix.plane_fmt[0].sizeimage; + + return 0; +} + +static void rzv2h_ivc_buf_queue(struct vb2_buffer *vb) +{ + struct rzv2h_ivc *ivc = vb2_get_drv_priv(vb->vb2_queue); + struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); + struct rzv2h_ivc_buf *buf = to_rzv2h_ivc_buf(vbuf); + + scoped_guard(spinlock_irq, &ivc->buffers.lock) { + list_add_tail(&buf->queue, &ivc->buffers.queue); + } + + scoped_guard(spinlock_irq, &ivc->spinlock) { + if (vb2_is_streaming(vb->vb2_queue) && !ivc->vvalid_ifp) + queue_work(ivc->buffers.async_wq, &ivc->buffers.work); + } +} + +static void rzv2h_ivc_format_configure(struct rzv2h_ivc *ivc) +{ + const struct rzv2h_ivc_format *fmt = ivc->format.fmt; + struct v4l2_pix_format_mplane *pix = &ivc->format.pix; + unsigned int vblank; + unsigned int hts; + + /* Currently only CRU packed pixel formats are supported */ + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_PXFMT, + RZV2H_IVC_INPUT_FMT_CRU_PACKED); + + rzv2h_ivc_update_bits(ivc, RZV2H_IVC_REG_AXIRX_PXFMT, + RZV2H_IVC_PXFMT_DTYPE, fmt->dtype); + + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_HSIZE, pix->width); + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_VSIZE, pix->height); + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_STRD, + pix->plane_fmt[0].bytesperline); + + /* + * The ISP has minimum vertical blanking requirements that must be + * adhered to by the IVC. The minimum is a function of the Iridix blocks + * clocking requirements and the width of the image and horizontal + * blanking, but if we assume the worst case then it boils down to the + * below (plus one to the numerator to ensure the answer is rounded up) + */ + + hts = pix->width + RZV2H_IVC_FIXED_HBLANK; + vblank = RZV2H_IVC_MIN_VBLANK(hts); + + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_AXIRX_BLANK, + RZV2H_IVC_VBLANK(vblank)); +} + +static void rzv2h_ivc_return_buffers(struct rzv2h_ivc *ivc, + enum vb2_buffer_state state) +{ + struct rzv2h_ivc_buf *buf, *tmp; + + guard(spinlock_irqsave)(&ivc->buffers.lock); + + if (ivc->buffers.curr) { + vb2_buffer_done(&ivc->buffers.curr->vb.vb2_buf, state); + ivc->buffers.curr = NULL; + } + + list_for_each_entry_safe(buf, tmp, &ivc->buffers.queue, queue) { + list_del(&buf->queue); + vb2_buffer_done(&buf->vb.vb2_buf, state); + } +} + +static int rzv2h_ivc_start_streaming(struct vb2_queue *q, unsigned int count) +{ + struct rzv2h_ivc *ivc = vb2_get_drv_priv(q); + int ret; + + ivc->buffers.sequence = 0; + ivc->vvalid_ifp = 0; + + ret = pm_runtime_resume_and_get(ivc->dev); + if (ret) + goto err_return_buffers; + + ret = video_device_pipeline_alloc_start(&ivc->vdev.dev); + if (ret) { + dev_err(ivc->dev, "failed to start media pipeline\n"); + goto err_pm_runtime_put; + } + + rzv2h_ivc_format_configure(ivc); + + queue_work(ivc->buffers.async_wq, &ivc->buffers.work); + + return 0; + +err_pm_runtime_put: + pm_runtime_put(ivc->dev); +err_return_buffers: + rzv2h_ivc_return_buffers(ivc, VB2_BUF_STATE_QUEUED); + + return ret; +} + +static void rzv2h_ivc_stop_streaming(struct vb2_queue *q) +{ + struct rzv2h_ivc *ivc = vb2_get_drv_priv(q); + u32 val = 0; + + rzv2h_ivc_write(ivc, RZV2H_IVC_REG_FM_STOP, 0x1); + readl_poll_timeout(ivc->base + RZV2H_IVC_REG_FM_STOP, + val, !val, 10 * USEC_PER_MSEC, 250 * USEC_PER_MSEC); + + rzv2h_ivc_return_buffers(ivc, VB2_BUF_STATE_ERROR); + video_device_pipeline_stop(&ivc->vdev.dev); + pm_runtime_put_autosuspend(ivc->dev); +} + +static const struct vb2_ops rzv2h_ivc_vb2_ops = { + .queue_setup = &rzv2h_ivc_queue_setup, + .buf_queue = &rzv2h_ivc_buf_queue, + .wait_prepare = vb2_ops_wait_prepare, + .wait_finish = vb2_ops_wait_finish, + .start_streaming = &rzv2h_ivc_start_streaming, + .stop_streaming = &rzv2h_ivc_stop_streaming, +}; + +static const struct rzv2h_ivc_format * +rzv2h_ivc_format_from_pixelformat(u32 fourcc) +{ + for (unsigned int i = 0; i < ARRAY_SIZE(rzv2h_ivc_formats); i++) + if (fourcc == rzv2h_ivc_formats[i].fourcc) + return &rzv2h_ivc_formats[i]; + + return &rzv2h_ivc_formats[0]; +} + +static int rzv2h_ivc_enum_fmt_vid_out(struct file *file, void *fh, + struct v4l2_fmtdesc *f) +{ + if (f->index >= ARRAY_SIZE(rzv2h_ivc_formats)) + return -EINVAL; + + f->pixelformat = rzv2h_ivc_formats[f->index].fourcc; + return 0; +} + +static int rzv2h_ivc_g_fmt_vid_out(struct file *file, void *fh, + struct v4l2_format *f) +{ + struct rzv2h_ivc *ivc = video_drvdata(file); + + f->fmt.pix_mp = ivc->format.pix; + + return 0; +} + +static void rzv2h_ivc_try_fmt(struct v4l2_pix_format_mplane *pix, + const struct rzv2h_ivc_format *fmt) +{ + pix->pixelformat = fmt->fourcc; + + pix->width = clamp(pix->width, RZV2H_IVC_MIN_WIDTH, + RZV2H_IVC_MAX_WIDTH); + pix->height = clamp(pix->height, RZV2H_IVC_MIN_HEIGHT, + RZV2H_IVC_MAX_HEIGHT); + + pix->field = V4L2_FIELD_NONE; + pix->colorspace = V4L2_COLORSPACE_RAW; + pix->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(pix->colorspace); + pix->quantization = V4L2_MAP_QUANTIZATION_DEFAULT(true, + pix->colorspace, + pix->ycbcr_enc); + + v4l2_fill_pixfmt_mp(pix, pix->pixelformat, pix->width, pix->height); +} + +static void rzv2h_ivc_set_format(struct rzv2h_ivc *ivc, + struct v4l2_pix_format_mplane *pix) +{ + const struct rzv2h_ivc_format *fmt; + + fmt = rzv2h_ivc_format_from_pixelformat(pix->pixelformat); + + rzv2h_ivc_try_fmt(pix, fmt); + ivc->format.pix = *pix; + ivc->format.fmt = fmt; +} + +static int rzv2h_ivc_s_fmt_vid_out(struct file *file, void *fh, + struct v4l2_format *f) +{ + struct rzv2h_ivc *ivc = video_drvdata(file); + struct v4l2_pix_format_mplane *pix = &f->fmt.pix_mp; + + if (vb2_is_busy(&ivc->vdev.vb2q)) + return -EBUSY; + + rzv2h_ivc_set_format(ivc, pix); + + return 0; +} + +static int rzv2h_ivc_try_fmt_vid_out(struct file *file, void *fh, + struct v4l2_format *f) +{ + const struct rzv2h_ivc_format *fmt; + + fmt = rzv2h_ivc_format_from_pixelformat(f->fmt.pix.pixelformat); + rzv2h_ivc_try_fmt(&f->fmt.pix_mp, fmt); + + return 0; +} + +static int rzv2h_ivc_querycap(struct file *file, void *fh, + struct v4l2_capability *cap) +{ + strscpy(cap->driver, "rzv2h-ivc", sizeof(cap->driver)); + strscpy(cap->card, "Renesas Input Video Control", sizeof(cap->card)); + + return 0; +} + +static const struct v4l2_ioctl_ops rzv2h_ivc_v4l2_ioctl_ops = { + .vidioc_reqbufs = vb2_ioctl_reqbufs, + .vidioc_querybuf = vb2_ioctl_querybuf, + .vidioc_create_bufs = vb2_ioctl_create_bufs, + .vidioc_qbuf = vb2_ioctl_qbuf, + .vidioc_expbuf = vb2_ioctl_expbuf, + .vidioc_dqbuf = vb2_ioctl_dqbuf, + .vidioc_prepare_buf = vb2_ioctl_prepare_buf, + .vidioc_streamon = vb2_ioctl_streamon, + .vidioc_streamoff = vb2_ioctl_streamoff, + .vidioc_enum_fmt_vid_out = rzv2h_ivc_enum_fmt_vid_out, + .vidioc_g_fmt_vid_out_mplane = rzv2h_ivc_g_fmt_vid_out, + .vidioc_s_fmt_vid_out_mplane = rzv2h_ivc_s_fmt_vid_out, + .vidioc_try_fmt_vid_out_mplane = rzv2h_ivc_try_fmt_vid_out, + .vidioc_querycap = rzv2h_ivc_querycap, + .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, + .vidioc_unsubscribe_event = v4l2_event_unsubscribe, +}; + +static const struct v4l2_file_operations rzv2h_ivc_v4l2_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = video_ioctl2, + .open = v4l2_fh_open, + .release = vb2_fop_release, + .poll = vb2_fop_poll, + .mmap = vb2_fop_mmap, +}; + +int rzv2h_ivc_init_vdev(struct rzv2h_ivc *ivc, struct v4l2_device *v4l2_dev) +{ + struct v4l2_pix_format_mplane pix = { }; + struct video_device *vdev; + struct vb2_queue *vb2q; + int ret; + + spin_lock_init(&ivc->buffers.lock); + INIT_LIST_HEAD(&ivc->buffers.queue); + INIT_WORK(&ivc->buffers.work, rzv2h_ivc_transfer_buffer); + + ivc->buffers.async_wq = alloc_workqueue("rzv2h-ivc", 0, 0); + if (!ivc->buffers.async_wq) + return -EINVAL; + + /* Initialise vb2 queue */ + vb2q = &ivc->vdev.vb2q; + vb2q->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; + vb2q->io_modes = VB2_MMAP | VB2_DMABUF; + vb2q->drv_priv = ivc; + vb2q->mem_ops = &vb2_dma_contig_memops; + vb2q->ops = &rzv2h_ivc_vb2_ops; + vb2q->buf_struct_size = sizeof(struct rzv2h_ivc_buf); + vb2q->min_queued_buffers = 0; + vb2q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; + vb2q->lock = &ivc->lock; + vb2q->dev = ivc->dev; + + ret = vb2_queue_init(vb2q); + if (ret) { + dev_err(ivc->dev, "vb2 queue init failed\n"); + goto err_destroy_workqueue; + } + + /* Initialise Video Device */ + vdev = &ivc->vdev.dev; + strscpy(vdev->name, "rzv2h-ivc", sizeof(vdev->name)); + vdev->release = video_device_release_empty; + vdev->fops = &rzv2h_ivc_v4l2_fops; + vdev->ioctl_ops = &rzv2h_ivc_v4l2_ioctl_ops; + vdev->lock = &ivc->lock; + vdev->v4l2_dev = v4l2_dev; + vdev->queue = vb2q; + vdev->device_caps = V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_STREAMING; + vdev->vfl_dir = VFL_DIR_TX; + video_set_drvdata(vdev, ivc); + + pix.pixelformat = V4L2_PIX_FMT_SRGGB16; + pix.width = RZV2H_IVC_DEFAULT_WIDTH; + pix.height = RZV2H_IVC_DEFAULT_HEIGHT; + rzv2h_ivc_set_format(ivc, &pix); + + ivc->vdev.pad.flags = MEDIA_PAD_FL_SOURCE; + ret = media_entity_pads_init(&ivc->vdev.dev.entity, 1, &ivc->vdev.pad); + if (ret) + goto err_release_vb2q; + + ret = video_register_device(vdev, VFL_TYPE_VIDEO, -1); + if (ret) { + dev_err(ivc->dev, "failed to register IVC video device\n"); + goto err_cleanup_vdev_entity; + } + + ret = media_create_pad_link(&vdev->entity, 0, &ivc->subdev.sd.entity, + RZV2H_IVC_SUBDEV_SINK_PAD, + MEDIA_LNK_FL_ENABLED | + MEDIA_LNK_FL_IMMUTABLE); + if (ret) { + dev_err(ivc->dev, "failed to create media link\n"); + goto err_unregister_vdev; + } + + return 0; + +err_unregister_vdev: + video_unregister_device(vdev); +err_cleanup_vdev_entity: + media_entity_cleanup(&vdev->entity); +err_release_vb2q: + vb2_queue_release(vb2q); +err_destroy_workqueue: + destroy_workqueue(ivc->buffers.async_wq); + + return ret; +} + +void rzv2h_deinit_video_dev_and_queue(struct rzv2h_ivc *ivc) +{ + struct video_device *vdev = &ivc->vdev.dev; + struct vb2_queue *vb2q = &ivc->vdev.vb2q; + + vb2_video_unregister_device(vdev); + media_entity_cleanup(&vdev->entity); + vb2_queue_release(vb2q); +} diff --git a/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h new file mode 100644 index 0000000000000000000000000000000000000000..64e4993209030df4dab187157dcf55996cbaf69b --- /dev/null +++ b/drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h @@ -0,0 +1,130 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Renesas RZ/V2H(P) Input Video Control Block driver + * + * Copyright (C) 2025 Ideas on Board Oy + */ + +#include <linux/clk.h> +#include <linux/list.h> +#include <linux/mutex.h> +#include <linux/reset.h> +#include <linux/spinlock.h> +#include <linux/types.h> +#include <linux/videodev2.h> +#include <linux/workqueue.h> + +#include <media/media-entity.h> +#include <media/v4l2-device.h> +#include <media/v4l2-subdev.h> +#include <media/videobuf2-core.h> +#include <media/videobuf2-v4l2.h> + +#define RZV2H_IVC_REG_AXIRX_PLNUM 0x0000 +#define RZV2H_IVC_ONE_EXPOSURE 0x00 +#define RZV2H_IVC_TWO_EXPOSURE 0x01 +#define RZV2H_IVC_REG_AXIRX_PXFMT 0x0004 +#define RZV2H_IVC_INPUT_FMT_MIPI (0 << 16) +#define RZV2H_IVC_INPUT_FMT_CRU_PACKED (1 << 16) +#define RZV2H_IVC_PXFMT_DTYPE GENMASK(7, 0) +#define RZV2H_IVC_REG_AXIRX_SADDL_P0 0x0010 +#define RZV2H_IVC_REG_AXIRX_SADDH_P0 0x0014 +#define RZV2H_IVC_REG_AXIRX_SADDL_P1 0x0018 +#define RZV2H_IVC_REG_AXIRX_SADDH_P1 0x001c +#define RZV2H_IVC_REG_AXIRX_HSIZE 0x0020 +#define RZV2H_IVC_REG_AXIRX_VSIZE 0x0024 +#define RZV2H_IVC_REG_AXIRX_BLANK 0x0028 +#define RZV2H_IVC_VBLANK(x) ((x) << 16) +#define RZV2H_IVC_REG_AXIRX_STRD 0x0030 +#define RZV2H_IVC_REG_AXIRX_ISSU 0x0040 +#define RZV2H_IVC_REG_AXIRX_ERACT 0x0048 +#define RZV2H_IVC_REG_FM_CONTEXT 0x0100 +#define RZV2H_IVC_SOFTWARE_CFG 0x00 +#define RZV2H_IVC_SINGLE_CONTEXT_SW_HW_CFG BIT(0) +#define RZV2H_IVC_MULTI_CONTEXT_SW_HW_CFG BIT(1) +#define RZV2H_IVC_REG_FM_MCON 0x0104 +#define RZV2H_IVC_REG_FM_FRCON 0x0108 +#define RZV2H_IVC_REG_FM_STOP 0x010c +#define RZV2H_IVC_REG_FM_INT_EN 0x0120 +#define RZV2H_IVC_VVAL_IFPE BIT(0) +#define RZV2H_IVC_REG_FM_INT_STA 0x0124 +#define RZV2H_IVC_REG_AXIRX_FIFOCAP0 0x0208 +#define RZV2H_IVC_REG_CORE_CAPCON 0x020c +#define RZV2H_IVC_REG_CORE_FIFOCAP0 0x0228 +#define RZV2H_IVC_REG_CORE_FIFOCAP1 0x022c + +#define RZV2H_IVC_MIN_WIDTH 640 +#define RZV2H_IVC_MAX_WIDTH 4096 +#define RZV2H_IVC_MIN_HEIGHT 480 +#define RZV2H_IVC_MAX_HEIGHT 4096 +#define RZV2H_IVC_DEFAULT_WIDTH 1920 +#define RZV2H_IVC_DEFAULT_HEIGHT 1080 + +#define RZV2H_IVC_NUM_HW_RESOURCES 3 + +struct device; + +enum rzv2h_ivc_subdev_pads { + RZV2H_IVC_SUBDEV_SINK_PAD, + RZV2H_IVC_SUBDEV_SOURCE_PAD, + RZV2H_IVC_NUM_SUBDEV_PADS +}; + +struct rzv2h_ivc_format { + u32 fourcc; + /* + * The CRU packed pixel formats are bayer-order agnostic, so each could + * support any one of the 4 possible media bus formats. + */ + u32 mbus_codes[4]; + u8 dtype; +}; + +struct rzv2h_ivc { + struct device *dev; + void __iomem *base; + struct clk_bulk_data clks[RZV2H_IVC_NUM_HW_RESOURCES]; + struct reset_control_bulk_data resets[RZV2H_IVC_NUM_HW_RESOURCES]; + int irqnum; + u8 vvalid_ifp; + + struct { + struct video_device dev; + struct vb2_queue vb2q; + struct media_pad pad; + } vdev; + + struct { + struct v4l2_subdev sd; + struct media_pad pads[RZV2H_IVC_NUM_SUBDEV_PADS]; + } subdev; + + struct { + /* Spinlock to guard buffer queue */ + spinlock_t lock; + struct workqueue_struct *async_wq; + struct work_struct work; + struct list_head queue; + struct rzv2h_ivc_buf *curr; + unsigned int sequence; + } buffers; + + struct { + struct v4l2_pix_format_mplane pix; + const struct rzv2h_ivc_format *fmt; + } format; + + /* Mutex to provide to vb2 */ + struct mutex lock; + /* Lock to protect the interrupt counter */ + spinlock_t spinlock; +}; + +int rzv2h_ivc_init_vdev(struct rzv2h_ivc *ivc, struct v4l2_device *v4l2_dev); +void rzv2h_deinit_video_dev_and_queue(struct rzv2h_ivc *ivc); +void rzv2h_ivc_buffer_done(struct rzv2h_ivc *ivc); +int rzv2h_ivc_initialise_subdevice(struct rzv2h_ivc *ivc); +void rzv2h_ivc_deinit_subdevice(struct rzv2h_ivc *ivc); +void rzv2h_ivc_write(struct rzv2h_ivc *ivc, u32 addr, u32 val); +void rzv2h_ivc_update_bits(struct rzv2h_ivc *ivc, unsigned int addr, + u32 mask, u32 val); -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v6 2/3] media: platform: Add Renesas Input Video Control block driver 2025-11-11 16:34 ` [PATCH v6 2/3] media: platform: Add Renesas Input Video Control block driver Daniel Scally @ 2025-11-14 14:46 ` Hans Verkuil 0 siblings, 0 replies; 6+ messages in thread From: Hans Verkuil @ 2025-11-14 14:46 UTC (permalink / raw) To: Daniel Scally, linux-media, devicetree, linux-renesas-soc Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, Philipp Zabel, jacopo.mondi, biju.das.jz, laurent.pinchart, Jacopo Mondi Hi Dan, On 11/11/2025 17:34, Daniel Scally wrote: > Add a driver for the Input Video Control block in an RZ/V2H(P) SoC > which feeds data into the Arm Mali-C55 ISP. > > [ivc: Remove check on buffers list in start_streaming] > [ivc: put_autosuspend() implies mark_last_busy()] > [media: rzv2h-ivc: Do not delay frame completion] > Signed-off-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com> > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> > --- > Changes in latest version: > > - Requested irq at very end of runtime resume callback and > not the beginning. > - Switch to devm_mutex_init() > - Disable runtime pm in probe() error path > > Changes in v7: > > - Returned buffers to userspace as soon as the first > interrupt is received instead of waiting until the > second > - Fixes to the pm runtime invocations > - Some minor formatting changes > > Changes in v6: > > - Minor formatting changes > - Dropped CONFIG_ prefix from Kconfig symbols > - Collected tags > - Replaced "RZ/V2H" with "RZ/V2H(P)" > - Reformatted probe function > - Removed leftover reference to media job scheduler > - Drop the .pipeline_started() and .pipeline_stopped() > media entity operations to remove a dependency for the > set. > > Changes in v5: > > - Fixed .enum_frame_sizes() to properly check that the > given mbus_code matches the source pads format. > - Tidy up extra space in Kconfig > - Revise Kconfig option message > - Don't mark functions inline > - Fixup misleading comment > - select CONFIG_PM > - Use the new pm_sleep_ptr() functionality > - Minor formatting > > Changes in v4: > > - Update the compatible to renesas,r9a09g057-ivc > - Dropped the media jobs / scheduler functionality, and re > worked the driver to have its own workqueue pushing frames > - Fix .enum_mbus_code() to return 20-bit output for source > pad. > - Fix some alignment issues > - Make the forwarding of sink to source pad format a more > explicit operation. > - Rename rzv2h_initialise_video_device_and_queue() > - Reversed order of v4l2_subdev_init_finalize() and > v4l2_async_register_subdev() to make sure everything is > finished initialising before registering the subdev. > - Change function to MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER > - Use a parametised macro for min vblank > - Minor formatting > - Use the DEFAULT macros for quantization / ycbcr_enc values > - Switch to using the mplane API > - Dropped select RESET_CONTROLLER > - Used the new helpers for starting a media pipeline > - Switch from threaded irq to normal with driver workqueue > and revised startup routine > > Changes in v3: > > - Account for the renamed CRU pixel formats > > Changes in v2: > > - Added selects and depends statements to Kconfig entry > - Fixed copyright year > - Stopped including in .c files headers already included in .h > - Fixed uninitialized variable in iterator > - Only check vvalid member in interrupt function and wait > unconditionally elsewhere > - __maybe_unused for the PM ops > - Initialise the subdevice after setting up PM > - Fixed the remove function for the driver to actually do > something. > - Some minor formatting changes > - Fixed the quantization member for the format > - Changes accounting for the v2 of the media jobs framework > - Change min_queued_buffers to 0 > --- > drivers/media/platform/renesas/Kconfig | 1 + > drivers/media/platform/renesas/Makefile | 1 + > drivers/media/platform/renesas/rzv2h-ivc/Kconfig | 18 + > drivers/media/platform/renesas/rzv2h-ivc/Makefile | 5 + > .../platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c | 250 ++++++++++ > .../platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c | 375 +++++++++++++++ > .../platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c | 533 +++++++++++++++++++++ > .../media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h | 130 +++++ > 8 files changed, 1313 insertions(+) > > diff --git a/drivers/media/platform/renesas/Kconfig b/drivers/media/platform/renesas/Kconfig > index 27a54fa7908384f2e8200f0f7283a82b0ae8435c..bd8247c0b8aa734d2b412438e694f3908d910b25 100644 > --- a/drivers/media/platform/renesas/Kconfig > +++ b/drivers/media/platform/renesas/Kconfig > @@ -42,6 +42,7 @@ config VIDEO_SH_VOU > source "drivers/media/platform/renesas/rcar-isp/Kconfig" > source "drivers/media/platform/renesas/rcar-vin/Kconfig" > source "drivers/media/platform/renesas/rzg2l-cru/Kconfig" > +source "drivers/media/platform/renesas/rzv2h-ivc/Kconfig" > > # Mem2mem drivers > > diff --git a/drivers/media/platform/renesas/Makefile b/drivers/media/platform/renesas/Makefile > index 1127259c09d6a51b70803e76c495918e06777f67..b6b4abf01db246aaf8269b8027efee9b0b32083a 100644 > --- a/drivers/media/platform/renesas/Makefile > +++ b/drivers/media/platform/renesas/Makefile > @@ -6,6 +6,7 @@ > obj-y += rcar-isp/ > obj-y += rcar-vin/ > obj-y += rzg2l-cru/ > +obj-y += rzv2h-ivc/ > obj-y += vsp1/ > > obj-$(CONFIG_VIDEO_RCAR_CSI2) += rcar-csi2.o > diff --git a/drivers/media/platform/renesas/rzv2h-ivc/Kconfig b/drivers/media/platform/renesas/rzv2h-ivc/Kconfig > new file mode 100644 > index 0000000000000000000000000000000000000000..b30702489d380902bfdcff57f0d70498c85e1d24 > --- /dev/null > +++ b/drivers/media/platform/renesas/rzv2h-ivc/Kconfig > @@ -0,0 +1,18 @@ > +# SPDX-License-Identifier: GPL-2.0-only > + > +config VIDEO_RZV2H_IVC > + tristate "Renesas RZ/V2H(P) Input Video Control block driver" > + depends on V4L_PLATFORM_DRIVERS > + depends on VIDEO_DEV > + depends on ARCH_RENESAS || COMPILE_TEST > + depends on OF > + select PM Is it OK if I change this to "depends on PM"? It's what we use in the media subsystem. This also makes it easier for our CI since one of the tests is to disable PM and checks that everything still compiles. Regards, Hans > + select VIDEOBUF2_DMA_CONTIG > + select MEDIA_CONTROLLER > + select VIDEO_V4L2_SUBDEV_API > + help > + Support for the Renesas RZ/V2H(P) Input Video Control Block > + (IVC). > + > + To compile this driver as a module, choose M here: the > + module will be called rzv2h-ivc. Regards, Hans ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v6 3/3] MAINTAINERS: Add entry for rzv2h-ivc driver 2025-11-11 16:34 [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Daniel Scally 2025-11-11 16:34 ` [PATCH v6 1/3] dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block Daniel Scally 2025-11-11 16:34 ` [PATCH v6 2/3] media: platform: Add Renesas Input Video Control block driver Daniel Scally @ 2025-11-11 16:34 ` Daniel Scally 2025-11-17 10:57 ` [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Lad, Prabhakar 3 siblings, 0 replies; 6+ messages in thread From: Daniel Scally @ 2025-11-11 16:34 UTC (permalink / raw) To: linux-media, devicetree, linux-renesas-soc Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, Philipp Zabel, jacopo.mondi, biju.das.jz, laurent.pinchart, Daniel Scally Add an entry to the MAINTAINERS file for the rzv2h-ivc driver Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> --- Changes in v6: - Fixed binding path to match new filename Changes in v2: - None --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 82f175f45de33dd2f139f1f50d04ceb6409fb3ef..25c6e6b30b3441c09a57d204d166ab844c406513 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -21538,6 +21538,13 @@ S: Maintained F: Documentation/devicetree/bindings/net/renesas,rzv2h-gbeth.yaml F: drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c +RENESAS RZ/V2H(P) INPUT VIDEO CONTROL BLOCK DRIVER +M: Daniel Scally <dan.scally@ideasonboard.com> +L: linux-media@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/media/renesas,r9a09g057-ivc.yaml +F: drivers/media/platform/renesas/rzv2h-ivc/ + RENESAS RZ/V2H(P) RSPI DRIVER M: Fabrizio Castro <fabrizio.castro.jz@renesas.com> L: linux-spi@vger.kernel.org -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H 2025-11-11 16:34 [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Daniel Scally ` (2 preceding siblings ...) 2025-11-11 16:34 ` [PATCH v6 3/3] MAINTAINERS: Add entry for rzv2h-ivc driver Daniel Scally @ 2025-11-17 10:57 ` Lad, Prabhakar 3 siblings, 0 replies; 6+ messages in thread From: Lad, Prabhakar @ 2025-11-17 10:57 UTC (permalink / raw) To: Daniel Scally Cc: linux-media, devicetree, linux-renesas-soc, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Geert Uytterhoeven, Magnus Damm, Philipp Zabel, jacopo.mondi, biju.das.jz, laurent.pinchart, Krzysztof Kozlowski, Jacopo Mondi Hi Daniel, Thank you for the series. On Tue, Nov 11, 2025 at 4:38 PM Daniel Scally <dan.scally@ideasonboard.com> wrote: > > Hello all > > This series adds a driver for the Input Video Control Block in the > RZ/V2H SoC. The IVC block transmits input image data from memory to > the ISP core (on this SoC, a Mali-C55 ISP). The driver registers an > output video device for userspace to queue image buffers to. One > noteworthy feature is that - because it is not a part of the main ISP > drive - the IVC driver also registers a subdevice, which connects to > the media device created by the ISP driver through the usual v4l2 > async framework. This requires delaying the registration of the video > device until the .registered() callback of the subdevice, so that the > struct v4l2_dev pointer the subdevice connected to can be set to the > video device. > > This version of the driver drops the reliance on the new media > framework that was posted recently [1], so can be merged without it > and updated later. The series is also based on top of the latest > version of the Mali-C55 driver [2]. > > Thanks > Dan > > [1] https://lore.kernel.org/linux-media/20250624-media-jobs-v2-0-8e649b069a96@ideasonboard.com/T/#t > [2] https://lore.kernel.org/linux-media/20251111-c55-v13-0-3dc581355e3a@ideasonboard.com/T/#t > > --- > Changes in v6: > - No series level changes. > - Link to v5: https://lore.kernel.org/r/20251002-ivc-v5-0-192c663fa70b@ideasonboard.com > > Changes in v5: > - No series level changes. > - Link to v4: https://lore.kernel.org/r/20250714-ivc-v4-0-534ea488c738@ideasonboard.com > > Changes in v4: > - Dropped the mc / V4L2 helper patches - they're in the C55 series instead, the aim > being to avoid creating a circular dependency between the two sets > - Link to v3: https://lore.kernel.org/r/20250704-ivc-v3-0-5c45d936ef2e@ideasonboard.com > > Changes in v3: > - Added two new patches that create helpers in V4L2 and mc core that > the driver then consumes. > > - Link to v2: https://lore.kernel.org/r/20250624-ivc-v2-0-e4ecdddb0a96@ideasonboard.com > > The rest of this message is the v4l2-compliance report for the video > device and subdevice: > > v4l2-compliance 1.31.0-5380, 64 bits, 64-bit time_t > v4l2-compliance SHA: 1cc84dfb41d8 2025-07-08 08:28:16 > > Compliance test for device /dev/v4l-subdev3: > > Driver Info: > Driver version : 6.15.0 > Capabilities : 0x00000000 > Client Capabilities: 0x0000000000000003 > streams interval-uses-which > Required ioctls: > test VIDIOC_SUDBEV_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/v4l-subdev3 open: OK > test VIDIOC_SUBDEV_QUERYCAP: OK > test for unlimited opens: OK > > Debug ioctls: > test VIDIOC_LOG_STATUS: OK (Not Supported) > > Input ioctls: > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > test VIDIOC_ENUMAUDIO: OK (Not Supported) > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) > test VIDIOC_G/S_AUDIO: OK (Not Supported) > Inputs: 0 Audio Inputs: 0 Tuners: 0 > > Output ioctls: > test VIDIOC_G/S_MODULATOR: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_ENUMAUDOUT: OK (Not Supported) > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 Audio Outputs: 0 Modulators: 0 > > Input/Output configuration ioctls: > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) > test VIDIOC_G/S_EDID: OK (Not Supported) > > Control ioctls: > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported) > test VIDIOC_QUERYCTRL: OK (Not Supported) > test VIDIOC_G/S_CTRL: OK (Not Supported) > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported) > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported) > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 0 Private Controls: 0 > > Format ioctls: > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported) > test VIDIOC_G/S_PARM: OK (Not Supported) > test VIDIOC_G_FBUF: OK (Not Supported) > test VIDIOC_G_FMT: OK (Not Supported) > test VIDIOC_TRY_FMT: OK (Not Supported) > test VIDIOC_S_FMT: OK (Not Supported) > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK (Not Supported) > test Composing: OK (Not Supported) > test Scaling: OK (Not Supported) > > Codec ioctls: > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls: > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported) > test CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK (Not Supported) > test Requests: OK (Not Supported) > test blocking wait: OK (Not Supported) > > Total for device /dev/v4l-subdev3: 46, Succeeded: 46, Failed: 0, Warnings: 0 > > v4l2-compliance 1.31.0-5380, 64 bits, 64-bit time_t > v4l2-compliance SHA: 1cc84dfb41d8 2025-07-08 08:28:16 > > Compliance test for rzv2h-ivc device /dev/video3: > > Driver Info: > Driver name : rzv2h-ivc > Card type : Renesas Input Video Control > Bus info : platform:16080000.isp > Driver version : 6.15.0 > Capabilities : 0x84202000 > Video Output Multiplanar > Streaming > Extended Pix Format > Device Capabilities > Device Caps : 0x04202000 > Video Output Multiplanar > Streaming > Extended Pix Format > Media Driver Info: > Driver name : mali-c55 > Model : ARM Mali-C55 ISP > Serial : > Bus info : platform:16080000.isp > Media version : 6.15.0 > Hardware revision: 0x01d982d6 (31032022) > Driver version : 6.15.0 > Interface Info: > ID : 0x0300002a > Type : V4L Video > Entity Info: > ID : 0x00000028 (40) > Name : rzv2h-ivc > Function : V4L2 I/O > Pad 0x01000029 : 0: Source > Link 0x0200002c: to remote pad 0x1000026 of entity 'rzv2h ivc block' (Video Pixel Formatter): Data, Enabled, Immutable > > Required ioctls: > test MC information (see 'Media Driver Info' above): OK > test VIDIOC_QUERYCAP: OK > test invalid ioctls: OK > > Allow for multiple opens: > test second /dev/video3 open: OK > test VIDIOC_QUERYCAP: OK > test VIDIOC_G/S_PRIORITY: OK > test for unlimited opens: OK > > Debug ioctls: > test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) > test VIDIOC_LOG_STATUS: OK (Not Supported) > > Input ioctls: > test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > test VIDIOC_ENUMAUDIO: OK (Not Supported) > test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) > test VIDIOC_G/S_AUDIO: OK (Not Supported) > Inputs: 0 Audio Inputs: 0 Tuners: 0 > > Output ioctls: > test VIDIOC_G/S_MODULATOR: OK (Not Supported) > test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > test VIDIOC_ENUMAUDOUT: OK (Not Supported) > test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > test VIDIOC_G/S_AUDOUT: OK (Not Supported) > Outputs: 0 Audio Outputs: 0 Modulators: 0 > > Input/Output configuration ioctls: > test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) > test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) > test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) > test VIDIOC_G/S_EDID: OK (Not Supported) > > Control ioctls: > test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported) > test VIDIOC_QUERYCTRL: OK (Not Supported) > test VIDIOC_G/S_CTRL: OK (Not Supported) > test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported) > test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported) > test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > Standard Controls: 0 Private Controls: 0 > > Format ioctls: > test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > test VIDIOC_G/S_PARM: OK (Not Supported) > test VIDIOC_G_FBUF: OK (Not Supported) > test VIDIOC_G_FMT: OK > test VIDIOC_TRY_FMT: OK > test VIDIOC_S_FMT: OK > test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > test Cropping: OK (Not Supported) > test Composing: OK (Not Supported) > test Scaling: OK > > Codec ioctls: > test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > test VIDIOC_G_ENC_INDEX: OK (Not Supported) > test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > Buffer ioctls: > test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > test CREATE_BUFS maximum buffers: OK > test VIDIOC_REMOVE_BUFS: OK > test VIDIOC_EXPBUF: OK > test Requests: OK (Not Supported) > test blocking wait: OK > > Total for rzv2h-ivc device /dev/video3: 49, Succeeded: 49, Failed: 0, Warnings: 0 > > To: linux-media@vger.kernel.org > To: devicetree@vger.kernel.org > To: linux-renesas-soc@vger.kernel.org > Cc: Rob Herring <robh@kernel.org> > Cc: Krzysztof Kozlowski <krzk+dt@kernel.org> > Cc: Conor Dooley <conor+dt@kernel.org> > Cc: Geert Uytterhoeven <geert+renesas@glider.be> > Cc: Magnus Damm <magnus.damm@gmail.com> > Cc: Philipp Zabel <p.zabel@pengutronix.de> > Cc: jacopo.mondi@ideasonboard.com > Cc: biju.das.jz@bp.renesas.com > Cc: laurent.pinchart@ideasonboard.com > > --- > Daniel Scally (3): > dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block > media: platform: Add Renesas Input Video Control block driver > MAINTAINERS: Add entry for rzv2h-ivc driver > I tested it on RZ/V2H EVK with RPI camera so, Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Cheers, Prabhakar > .../bindings/media/renesas,r9a09g057-ivc.yaml | 103 ++++ > MAINTAINERS | 7 + > drivers/media/platform/renesas/Kconfig | 1 + > drivers/media/platform/renesas/Makefile | 1 + > drivers/media/platform/renesas/rzv2h-ivc/Kconfig | 18 + > drivers/media/platform/renesas/rzv2h-ivc/Makefile | 5 + > .../platform/renesas/rzv2h-ivc/rzv2h-ivc-dev.c | 250 ++++++++++ > .../platform/renesas/rzv2h-ivc/rzv2h-ivc-subdev.c | 375 +++++++++++++++ > .../platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c | 533 +++++++++++++++++++++ > .../media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h | 130 +++++ > 10 files changed, 1423 insertions(+) > --- > base-commit: b4fbb13db86adb0bae1d7f968b61ea8dc9635e33 > change-id: 20250624-ivc-833d24376167 > prerequisite-change-id: 20250701-extensible-parameters-validation-c831f7f5cc0b:v9 > prerequisite-patch-id: d44c7373dcea611df59477495ba7335a04cee0cd > prerequisite-patch-id: 34e9f43b412e5018366864837b59cee72a05abd3 > prerequisite-patch-id: a015f2e8c5fee026c0bbc29e99e6967e03e75941 > prerequisite-patch-id: cf9d39047475b461e07831bc4504c06b63a9f225 > prerequisite-patch-id: b0781eb6976b35e01381ac9a12ac7caa6d90822b > prerequisite-patch-id: 4cf6f480b8d4c4cd8d392d096f7fae26b206edee > prerequisite-patch-id: 03df5085a95aff837c10ac02e9fdb1234a829738 > prerequisite-patch-id: a775e4a3a9873b5b42516a32429705c853747a5a > prerequisite-change-id: 20250624-c55-b3c36b2e1d8c:v13 > prerequisite-patch-id: b44c6d392d3ea0b7c926dcb64dcfe81bc5cc994a > prerequisite-patch-id: 67cf7e8a5eb3ce4ab41ff3b30f37860e462fbc3e > prerequisite-patch-id: e9274bd7447362f042e23c1666bf87a2a512b3ee > prerequisite-patch-id: 97449fd348447738649d1b30a929807a1dc8cf15 > prerequisite-patch-id: 1fd966be1cdd0591f176ed757eb12e6949ddcac2 > prerequisite-patch-id: 0e0ca3e62a0ab6454623d1cd89884364175e7ec8 > prerequisite-patch-id: 029256a1349a0eb17238382b1c3786f810395d4f > prerequisite-patch-id: 6536b37b979941aba91b7ce7bb25d6297781c4bd > prerequisite-patch-id: 93dd387b8f2394519f9cb07448b3e3d5693a67dc > prerequisite-patch-id: a149fa4aa6909c201d46f66ba67ac585207ff184 > prerequisite-patch-id: 937e2edd8e3cba32d47568aca12b6362afe8257c > prerequisite-patch-id: 5e500c54544191247fb0f0e9893dff50adcd6e42 > prerequisite-patch-id: 9a5cfd77ceb15f54243a193fcb0ade0068039e23 > prerequisite-patch-id: 2aff188403971106027ec240ecdf31e9ce8c1924 > prerequisite-patch-id: 11cdcdc963756d7cea8bacaa5e6bec82e84c8b60 > prerequisite-patch-id: ef6d9391a49d677b32fc47db68076bb83a88d00b > prerequisite-patch-id: e2957393ecffdc80ce6d8e3f68ae6114fc129637 > prerequisite-patch-id: 9a72c93f06f65159fe9200e676d86c9ee2a12d44 > prerequisite-patch-id: a552b8bcc14e9ffe0d666218bf959b8d6071df0f > prerequisite-patch-id: aa271c5071344848a6d31a01e412718a0686bbbe > prerequisite-patch-id: 0e3b19ab6a65dc3da0c8a527b0f2f147328d434e > prerequisite-patch-id: 1ca0738fbcd3800fb1bbca783eab35fd93982676 > prerequisite-patch-id: aeb73522fbec9069b9a7743bd27a61e1913f4f84 > prerequisite-patch-id: 30989729886eab6cb0187c82240fdb9350cd70d0 > prerequisite-patch-id: 54129945022314c14b8189414f9c0b11ad06ef70 > prerequisite-patch-id: b4f08ad396087292a19c77b5ed6f18a4adbd412a > prerequisite-patch-id: e58132a9f7ddb1834b3f954192060a30c0117322 > prerequisite-patch-id: 2284290c5021a6efe82f911f0d86311b3f0c5794 > prerequisite-patch-id: 228921911bf7e43fb4edfe3bf1ee5d7538e28c49 > prerequisite-patch-id: f2b6fd05b822f3bb6a13b58ee3fc06adb1fef315 > prerequisite-patch-id: df7d3bcd3d0167c84933e090b997493deed2e6c2 > prerequisite-patch-id: f0caaf5bd9d2cd1799fb4ebdf9e0cafab9bf5154 > prerequisite-patch-id: ab495bf70020c09e7566db0f78a2814a602e033f > prerequisite-patch-id: 9186f7e1f45383ac5d268c868437fcd8b5644f5b > prerequisite-patch-id: c848f55978dd0fb337e7a4c7f10960ffbec0dd0d > prerequisite-patch-id: 012b29d1a2a965628fa9fbf6f50b4c480c1ad2b4 > prerequisite-patch-id: 296a3075ff954b33f335304a530a2555a3ae8565 > prerequisite-patch-id: fec42ea4d2ce80643fa288812e90ae652c05451a > prerequisite-patch-id: 0cd037b4c8483ba97a45a46c9a6b4b9cc21452bd > prerequisite-patch-id: 1aede0a0e19cfead4349415b8cb614d070a92b97 > prerequisite-patch-id: b68d520f10eb8988512523ec22fde41dc58878b2 > prerequisite-patch-id: 3c82693836ee2576b2da72fe8f0d544c84a20850 > prerequisite-patch-id: cd34ef524f7b5e2c6c5bc23ca7e088450f1e00a0 > prerequisite-patch-id: d607b042b9f26ff973e11946a260ff388cbe3bb8 > prerequisite-patch-id: 12043ab558e621fa31886e1181b58082a4820355 > prerequisite-patch-id: aefb1a203ec889dfcb85692b6891d9c17b5f25b1 > prerequisite-patch-id: 53294b21e3a7e13eb2f0962d68c95107c4152539 > prerequisite-patch-id: d8adecb0f86baa4f6ef5d041b6c727a133e156c3 > prerequisite-patch-id: 8c10add5b4536b0d17d0983e02b9280ae618628c > prerequisite-patch-id: 20ef82587c45da9ca1cf37a38770483ec85132eb > prerequisite-patch-id: 5952ebe0042c78bd59deb819a08b38bf2c8a6b0a > prerequisite-patch-id: eef21ebe23e72527992a9163e70add905a679a0c > prerequisite-patch-id: b42a126655cb0392b31e7e0f294e6023f5578eb8 > prerequisite-patch-id: 26efbccac2c4ca6e694c6f6839b75d5dbf5dcecc > prerequisite-patch-id: 7f91856ff1f9b87a4fcaf69134fc715a706cb86a > prerequisite-patch-id: ec31dde2c3ab010619d483ec23b4ee513da90072 > prerequisite-patch-id: 2e278c3a121fc3e741c3a77586a57aa87180788c > prerequisite-patch-id: ffff93114bcbe709a52eae2c12ae98f5eca7cf4b > prerequisite-patch-id: c7acec57c76a69220fd7766599b33ed0975450bc > prerequisite-patch-id: c961fc1330af81fd3135ed17997fc470984b32d5 > prerequisite-patch-id: 5658d046126a61c8bd41e75e38eeae730ceb0c9f > prerequisite-patch-id: ecca906b43bd9836cba51d35a72ca09b24afcb62 > prerequisite-patch-id: ebeecb7a2620424b9cdd9a1d0daeb2a33baf39c9 > prerequisite-patch-id: e10263239ee987198af4e90345fd0c0499878c0a > prerequisite-patch-id: 48837ce463773807427541659ed6a2119c9fabbc > prerequisite-patch-id: 8ad4a533af8dbedb9442562897b9dd79f81e7f93 > prerequisite-patch-id: 87ab2b87df3392dd32ae3c9fefd62a74ed92aa34 > prerequisite-patch-id: 43305afdec94a0320d79bdd7535b94e556b9c34e > prerequisite-patch-id: 7f6a6eb926164f47a0aa0bd55648ca272f69cd3c > prerequisite-patch-id: a2baf23fcd354808099b5b5d8fb95ce6f5f72ee5 > prerequisite-patch-id: db985bf4ff07a07eab1fdb9953f2e4f2f3b70cd2 > prerequisite-patch-id: dc677c33d5b50b12b41419175c259f3d04990ce0 > prerequisite-patch-id: 2212fc21f551ec2e441482c003084516b0609c88 > prerequisite-patch-id: 305b9d6f01b9e87fb35e84237426ef86fd3aee1a > prerequisite-patch-id: 37384a78592a44a3be6ead5befe6012b6fdbc7b2 > prerequisite-patch-id: e441532a202669cda239125468cc5d2da09d2131 > prerequisite-patch-id: b0e4da673aeec9cd2218975ee801fa0ce8b0059b > prerequisite-patch-id: c4896f3eedb47eb5282a33696664a4c797b3ddea > prerequisite-patch-id: bf121ac69e42e3658b3e866e63d022a8a5662028 > prerequisite-patch-id: db0ad82b8260c9124aa9a2da7224964eb7d3353d > prerequisite-patch-id: 80bca3385fde57b21a82f0e4f17f4320d34729db > prerequisite-patch-id: 6756b81573d93df41cc629f5f4e048d507ad3918 > prerequisite-patch-id: e1642d538d56c46819094c10b88536980f0611ba > prerequisite-patch-id: 837d7ece78934e0cfbf1a0cc9c18de0fb11d8689 > prerequisite-patch-id: 854e6300aabc5ee6ea1f442357dc5dd026cf3e77 > prerequisite-patch-id: 4c00a0bc4b95250ca80111f314152811a033a5ce > prerequisite-patch-id: 2772a4ec23ae816ceeedebec16de5af970d1612e > prerequisite-patch-id: 94f7ea298b60e6cd126c6e1251c97b0d5c3e1d3b > prerequisite-patch-id: ca1a366a15cfa6840cb64be5c4acb4b8583b22bb > prerequisite-patch-id: a5951397ac7164c5153b67fa2761d4379e5bbd62 > prerequisite-patch-id: e1a902479cb146c37057e019f7e963dde9019981 > prerequisite-patch-id: 3e49b0ac4610f95b6c626d50f9864eef7b318357 > prerequisite-patch-id: 9459dd9c12e4f2b54795c7761da8e9c47c277217 > prerequisite-patch-id: d918f907d0ca4263199eef2c31366ccce400b3eb > prerequisite-patch-id: d5d1590fbd57b2a7601af81be5d8889bff61c12b > prerequisite-patch-id: 4be4287a8febed334216ec45782a48c984c1adf8 > prerequisite-patch-id: 4cc10e8fc920a744520690dd2d7a3230b896cf9b > prerequisite-patch-id: 85bd99791683cebebbf6c0242182e3745c39cb66 > prerequisite-patch-id: 1f5cb194656b2a640633f4ef4d78c4dffd3df9d6 > prerequisite-patch-id: 620c73ade02d15d29827a97ae91af6fd12e79fa1 > prerequisite-patch-id: dfb7ea4e1eb28eb7544951fdc6bda1c5b3b8002b > prerequisite-patch-id: 71f29cd45ba563169d2837e236e9a5af10eba8d7 > prerequisite-patch-id: 20564ebc10c53b5fb3514e3f456b4d2006ee1db8 > prerequisite-patch-id: 2848992d688295efe969f5373ab4f2b73e278b1e > prerequisite-patch-id: 30f3356eb804482b97b78c657e989c6de9b21629 > prerequisite-patch-id: 8cb5df16789b48e6ffab456f0b50098fe59bbe31 > prerequisite-patch-id: 7e09e6f1695fc289d6633b00a98146610840648d > prerequisite-patch-id: 39df9cf6fedd55b3e3176fd45b50a7f8720fb03b > prerequisite-patch-id: b84ebd86dc903c2e4fe6f8643a8af5d100b629ff > prerequisite-patch-id: 2573b0a64c7468309b2f4b4f8702714d2c4e891b > prerequisite-patch-id: 1e466a227763e112be3e0eba23f54b46e1868bc1 > prerequisite-patch-id: 8181cee329d7b3cdc4d9cbcd6c10888c4c925c26 > prerequisite-patch-id: 74c9830da112397b6a81f13b5aa2b9fe6a298e57 > prerequisite-patch-id: f0c6b3ab76fa4e383bd7302db7e1a56f6acc8fe8 > prerequisite-patch-id: fa0e8ecdbb2a88f10f7fd28a3a3b3d3878377802 > prerequisite-patch-id: b5d2386f92afe5a5fd3a866c042ae06ea6a4c61f > prerequisite-patch-id: 4ee6686d543b2968316ef88230173d2495b18912 > prerequisite-patch-id: 25e5ca9785d28bc2a08e0b46769f414f5937ea3f > prerequisite-patch-id: 23c53b67df520bcd3edb4363741b2c365086473b > prerequisite-patch-id: 39752109dd57313ec8ea15067f315227db793795 > prerequisite-patch-id: be6d10df8a43745b18c8b2948f741b1c652f44a3 > prerequisite-patch-id: 6d3bbe0c532c6ba728e809b5c5b1035419c32734 > prerequisite-patch-id: 2311fd00e95647b8f977276e7e9867b1cfe97fc2 > prerequisite-patch-id: f90b085e981d28366e2e42dc425f7d9d6a776f91 > prerequisite-patch-id: c6f34fa376e35a8960f236064c3033505b2d3642 > prerequisite-patch-id: 6c340a4cd218b31efb9118b47f85bd6d7a985fb8 > prerequisite-patch-id: 32dcf3aae627357583b964689fd19746f715b549 > prerequisite-patch-id: 98aebace371b9d857fcdf15649dba5a059fb23cc > prerequisite-patch-id: 7b447199429c7b64b67145a448dbd6386e3d23e0 > prerequisite-patch-id: 11f191d9e17bdb0405fe9e247fe0182e1d01cb51 > prerequisite-patch-id: bf3a627a3f41c5652909a6ea449fa03945a55f29 > prerequisite-patch-id: 70853eeed6576bfcc6579333875ba3eeeef0cef8 > prerequisite-patch-id: 3f3714d32e15eef8054bb2375c9e4fb5adaef2d1 > prerequisite-patch-id: 7ca2fa7d525255f5fa48735870e4bcc8eb327280 > prerequisite-patch-id: d5716a401571dfc4a928b960d976b0317d03c22f > prerequisite-patch-id: 8bac7f764dc4d3b1860a9ea812e08ec76514e2b6 > prerequisite-patch-id: 31225ba242d1773299cbf4f165e52b66ebd437d8 > prerequisite-patch-id: e847dc4e55ce214c4badc67adc59484c5afb025a > prerequisite-patch-id: 1e17cfeb8127e6f366ad653bd5b232a9dab79702 > prerequisite-patch-id: b230f4e1efa7272b787502e095ed200580f304ef > prerequisite-patch-id: e27565adf6f5b1510d1614f73afb302b94d9917e > prerequisite-patch-id: 09052a97197aef658ef43210823643178cc79b10 > prerequisite-patch-id: 43bf7b62b7d957009ac34d8e5b53a74c7ef68595 > prerequisite-patch-id: defc342d0cc1160330832b543c3e97ff20b38f0b > prerequisite-patch-id: 6cbe2d7e787f3965516672637309e9ce8f692a49 > prerequisite-patch-id: 9a6a5a4a5a10a7836dd6bef0121ae067f89767e7 > prerequisite-patch-id: ea8507b1ec426eeed80f8c1bbd5206e7ff92ef3c > prerequisite-patch-id: b2be17e9ee03926c00b7a8e47495c211bec1f603 > prerequisite-patch-id: b4b7d103520f0db86f9f90c6c7cb3eb2f87a8f97 > prerequisite-patch-id: 9ec1343d7829efddb8e110008988daf651c6d28d > prerequisite-patch-id: 7d6c9d73fdb29a6899a4631786a7d11d8fd75fc3 > prerequisite-patch-id: 728cbc1d981986ebebf939a7f09f4cca3d0f7536 > prerequisite-patch-id: 647449b5c2729985f080cf66ec4d082ec28b6b13 > prerequisite-patch-id: 8568617d52538f483c5ad5a931fe168b89f9e005 > prerequisite-patch-id: 25db20489e41187905ab0ce5cee3e39427f81453 > prerequisite-patch-id: be4273aa57947915280d9db525990c1299aba67e > prerequisite-patch-id: dd45dc136bbbb7e143a2ac2c8a7f53c948b77837 > prerequisite-patch-id: 7ddcb71426c7d2d1be27f4030874631b862d0964 > prerequisite-patch-id: 7c5d5c4212a4bb46551866ee8c1c7d9a98d3be79 > prerequisite-patch-id: 31049cd929119eeaba776c38c3575bd88bf77fb4 > prerequisite-patch-id: 690e38d62a6094c785281ed4e4c6ef93173aee3c > prerequisite-patch-id: 5f19bbb28e92bd151fb987d15852fb92940321ea > prerequisite-patch-id: ef76bfc2007cb95a3e166426604d71ea052fbfc9 > prerequisite-patch-id: 3c6eb6a9aee413e51fdb70898c309b5da8409924 > prerequisite-patch-id: a8daad95229643a1e8c8f3c587fa4171c0facdd8 > prerequisite-patch-id: f6d1e66a3f6b4beaefc7cdc0a2598ea9e1448bf3 > prerequisite-patch-id: 7674957b24391761705bc3d80a86d70ff25b1a2b > prerequisite-patch-id: 866bb125754bd895c91848e849d780dde8d2b14e > prerequisite-patch-id: 3d9163f333f80bde13339b4791c8946aa96dfec8 > prerequisite-patch-id: a94bad269af095540461b4b930075dc4337dc605 > prerequisite-patch-id: c1bcfe2a4df7f23dab3255fa506b21a77da912f7 > prerequisite-patch-id: 7a385e1656c7cdfffc95615cbfa2aa5307296110 > prerequisite-patch-id: f72c9e9926ea23cac24a6e98ab65f94c06261773 > prerequisite-patch-id: 3b73836f03b3c0fc6c393b4311877f7618d6b783 > prerequisite-patch-id: c50977faa1efbde6ca0736c52c39e9924fa9a2e3 > prerequisite-patch-id: a13e0afa81dc5bbde559b3563388d1cfd2adbf16 > prerequisite-patch-id: 051750102f32905936538b0d19d64758e080c6ba > prerequisite-patch-id: 485ce66205d02879dcb8e40a88504618beef6f2c > prerequisite-patch-id: 8a7529d1a2e4dded84c87b2af41040c3d1e645ee > prerequisite-patch-id: b7e4f1908ddefac193e235012f3bfd1d6e12f6c0 > prerequisite-patch-id: ebf446fae4718c3e708e6b7dfeb58eed7f16a429 > prerequisite-patch-id: 70fb1f0426a85351171afd0d78c8980f03e669ac > prerequisite-patch-id: 7e803ee6b883691e2cc118a881c97c412dc828a4 > prerequisite-patch-id: 26d33b3e46afc56478810e33fa08064c47ac249e > prerequisite-patch-id: 8b0c687b6be1b2f2be3d7e1e35db9fd7eae7cf1c > prerequisite-patch-id: 15424b710d6d19e4c18cc325661d78f4001cf4b8 > prerequisite-patch-id: 8cdeeb2dd2ff0ccfdb8f735af565b2cfc66bffda > prerequisite-patch-id: 67df34431e9f963241fd02d11963df59bdba79a8 > prerequisite-patch-id: e2ba31f935afd87f158ec5caab17897f9c89ce23 > prerequisite-patch-id: ebf82917965fd313cdf5cc377041084a12e2196a > prerequisite-patch-id: eb24019324fe3ae11a1572baa45e13204dbdaa9a > prerequisite-patch-id: c5ba491eccbd16f3fa9655cf0ad46f6c4c95daf3 > prerequisite-patch-id: d576056ab2a40d54aac8eac45c014ff339909f80 > prerequisite-patch-id: 0acb6bcd8c9392ecad6ae070494ce70afb0af5fe > prerequisite-patch-id: e39d5334fd9357ed6a0d858d4b49c33be6906e21 > prerequisite-patch-id: c853f677277c05f534c270255398614dc0b9d63c > prerequisite-patch-id: 920ea314f2305eaefe851389e717f70eec881634 > prerequisite-patch-id: c8ab4fdf8c16fc261cb7a5b4253db02a38e14ed3 > prerequisite-patch-id: b621b741072c4b6571ab7e4f733e058a99478374 > prerequisite-patch-id: f396597611c944de6ece4e9206cdae686e8c1b08 > prerequisite-patch-id: 79a788d212888c162aefa3213a9b97e95de2d7c1 > prerequisite-patch-id: 1f30297179a0abbf3633f25afa79c820d82db5a5 > prerequisite-patch-id: c6644a4cfa8772171d53add86d6845e9aefe0250 > prerequisite-patch-id: ea04ea6b42b6f76519690f0d814ee8619d83e093 > prerequisite-patch-id: 11aaf40b9df122388d10a8727ad988ff50fd28ad > prerequisite-patch-id: e390c0e3f554f9071ba23795f3e89efc0c56e402 > prerequisite-patch-id: 3af286b67557824c22e6c0b69a4fd7f71a3a5e44 > prerequisite-patch-id: 3b5954348028a1cf286aab88b195ad58e86bf818 > prerequisite-patch-id: 991d224d627df821facf0ccea3ef117fb5876b97 > prerequisite-patch-id: 90a9a3d51c3714021f24a6238bbc4a58e3fa7099 > prerequisite-patch-id: d31f482ffd6cefc201e9e748bf643dae6be37253 > prerequisite-patch-id: d463da0b0ff32f4d6149323f20c86146a56bb8c2 > prerequisite-patch-id: 77622bf5aa13366da6f42eaee17c99dad27f87e3 > prerequisite-patch-id: 9961910a95f1f09f9a33ac8b53aa30749869f9f3 > prerequisite-patch-id: ff80043e541fcf8a9b214af6d6e0815d1870a046 > prerequisite-patch-id: bc008d2fced480ffae1e331233e471cd6a930b61 > prerequisite-patch-id: 064db6c4326b8d65605607db33d873317eeae5c9 > prerequisite-patch-id: 4724e9a52ba6b74d90f83e7fc733df41ba3d3379 > prerequisite-patch-id: 20f61811071effaf803d91211e9868cca41205c9 > prerequisite-patch-id: e0ecd006c2a079c33d4faef3d356cf66b21f267c > prerequisite-patch-id: 9936613917607f64a8bfe8481b153271e4b413b8 > prerequisite-patch-id: 56784e1b64572f830153f43361ea22587096e449 > prerequisite-patch-id: a482941cab679888d697341e6429d28a37054198 > prerequisite-patch-id: 8060200fae329414067f2d450fec7b01d5aec4b3 > prerequisite-patch-id: 6a8123da11c560380408fe084b0913427b29be81 > prerequisite-patch-id: 1891adbc820553d454e98085861d1192344bdf6c > prerequisite-patch-id: 0b55a939c2e61f5bdcc3dc70fb6bf620a190a03f > prerequisite-patch-id: d2e0373aa7f9518049edd7b66b84e565720c8ef9 > prerequisite-patch-id: dcdcf55933a003cf5bd852eed1623a24ad1167c8 > prerequisite-patch-id: 3be02ca4a12784254a5aa7c58c048f273ceb6931 > prerequisite-patch-id: 143028d564a838b61be9440931f3203e3bd3df85 > prerequisite-patch-id: dcf40e8b880dbe5a9ec809e1bf8ab84ecc45177f > prerequisite-patch-id: 869bafbd39268af6ba3ea0e55b57392188f137de > prerequisite-patch-id: 73ac29ef58df43147f6d8b30c89c0f4ac121c9c5 > prerequisite-patch-id: faae6cb14a44ab03651ca3495789c82744329652 > prerequisite-patch-id: f4cb3ec5271a8999776fe377bacbb5f9ddc0e251 > prerequisite-patch-id: a85038bb895dbf768acfd83db86acb7c07e52282 > prerequisite-patch-id: 67a1d8120994e14faeb093b5fa9f776d7e4f644a > prerequisite-patch-id: eb320b975722c458316bac7e43901a1b0fb10f2f > prerequisite-patch-id: 374a5b67ae30be177c475dab78eaf5c2b8b827f8 > prerequisite-patch-id: 61f3db09e8c494b66b1a100c4af1c76b19e094a0 > prerequisite-patch-id: 984326c0633131dc559bc97a8040993207319786 > prerequisite-patch-id: a2919dae0a95cfffb64622a7f8bc314354674595 > prerequisite-patch-id: 579104a1e95cf2e7483a6c52b5592c9e19b18be4 > prerequisite-patch-id: 537134cd170519636588f898fb55bf7255962fa1 > prerequisite-patch-id: d62b7579ecaa9b5b0bd631f8711ae8bf3e0c4439 > prerequisite-patch-id: a060d88b02e0c7809fc313177261683344275e34 > prerequisite-patch-id: 21d90a6f996f467f931a45c0f64ab120a5eb3973 > prerequisite-patch-id: 7ee1a7ea0497a3e9441a562fd8e1190c447ee928 > prerequisite-patch-id: 55cb5c7bc5f5e9c1d8d72e1a3e1ad67c67c9cba2 > prerequisite-patch-id: 05df40a7917637a33b36c8bc2864c9ef18acb474 > prerequisite-patch-id: 7085d51d6782d51c9257033c6104ceb3e0e15097 > prerequisite-patch-id: bda1d4f9676607d6cb72f46149aa3885a679ce37 > prerequisite-patch-id: 0855db8607392f0eda070618622560f67f97860b > prerequisite-patch-id: 4231acf87f45767e9d76a7a6b9b3345512c637be > prerequisite-patch-id: 6d59ebe9aebcf3da8bc3b01431a7a8efd0f43393 > prerequisite-patch-id: bbdba25bd7e1a08069085f6882d60408480d17aa > prerequisite-patch-id: ae4239097557521d3c54bd3da9db14c2a2434acf > prerequisite-patch-id: b5477df69e47ee7f567c579776efe59a6564cd7a > prerequisite-patch-id: 0789fabd3b3d399d9a64ad7aee270c16a9494556 > prerequisite-patch-id: 7589bf9f71ca66b710642c29edaecf92a7941e33 > prerequisite-patch-id: 255e9eaf6c77f6aae79ad42f682d1a3589200761 > prerequisite-patch-id: c37d3e27d828991d5b8df62120f74529263ef0d1 > prerequisite-patch-id: ac2b8a794be19be839591708ca8d637caf869b3d > prerequisite-patch-id: 5fbbd2b5858db631eb1d18ccd20b1654ef465f80 > prerequisite-patch-id: 075394322e3322fd35fe03042b0c23f998c8f2c6 > prerequisite-patch-id: 14ced2b512d0e020ab4b312421d0ea89bd2d1acc > prerequisite-patch-id: bf737dfb17eb4c553576db82a77cbaa373a80208 > prerequisite-patch-id: 3b8d29520b91b020d6cf744471787e78b58c3048 > prerequisite-patch-id: 7461da4b907818bf61e0115983c4062650687f20 > prerequisite-patch-id: 88dde8792f47cad1c4b95f29f52607169972cb1c > prerequisite-patch-id: a6c6980b029d4f337fb0843d0181a2e52686b2a9 > prerequisite-patch-id: b2476ebd7d9790144c6c37c8fd67a93381785fec > prerequisite-patch-id: ba9a67b42652cde7fb76f57c70785d76d8e9ed13 > prerequisite-patch-id: 92a7c5624384d86a0b2a05d3abca3471c8cc555f > prerequisite-patch-id: 0dc5cd4a79cb037b75595ffc60374d37373b5b1d > prerequisite-patch-id: b123297e99e20f35de0244a554667f3d08015f4a > prerequisite-patch-id: cdfa4896573250c5d052bf1a0bc0f50583855fce > prerequisite-patch-id: f88a2014b66d855c395cac89ce76dc00b7e0db9b > prerequisite-patch-id: dd0ccd49f74237d48d64b538688b58eeb5d0a42b > prerequisite-patch-id: 2530ade2d5e5f859810e6f0cb3ed4eb340ffc3fd > prerequisite-patch-id: b608cd34e769150ea9eee8dbfa5b7448908bf261 > prerequisite-patch-id: d84e4165bb98d1144d7decdb8e0a9dd3a178255e > prerequisite-patch-id: 41bb1510fb3bf36df2bcb75710642a2a01578232 > prerequisite-patch-id: 1a18cca7f5057b3fefa8098d2366dddb323c436e > prerequisite-patch-id: 0e2b2ccda52317a4845db1e26c304318b5816189 > prerequisite-patch-id: 63babaac329d55946c8240e3b926457f792202fe > prerequisite-patch-id: a1341583e71a6e2b78df1765de53ad177653a8e0 > prerequisite-patch-id: a08b5db3ec36333493ddbd94822fd433a2324c1c > prerequisite-patch-id: cc561395407a41293d2a55f8c1c2dd39912412b2 > prerequisite-patch-id: 6cbdb180679e5bef2dcea369c8c0b3571eba5c7a > prerequisite-patch-id: 31b01a1d5cbfa4d488d259605494a81b0a5f1570 > prerequisite-patch-id: 38b22137e2f9b5dff51649fed0e6e820a89d2121 > prerequisite-patch-id: be876d0cad26e47ebc00df3bd1dcecc24d09cb48 > prerequisite-patch-id: 00a9e0e97c1cb747dd8ee87a596e80c938948309 > prerequisite-patch-id: 9ad1ecb74b3660e501387b3f01705a012489ef0f > prerequisite-patch-id: db08adafcb9580884ae2fc9e2799fdb29d436c87 > prerequisite-patch-id: e2c922fcfe55520fe055e300df79ed0bb26fd5cb > prerequisite-patch-id: f01d7c88f65625c0a2e81423fd38cf3999ed1728 > prerequisite-patch-id: ea4ba4fbe6f932b6e9798258ba2f066478e1e3e7 > prerequisite-patch-id: 8341d8a886b9ec379a70b7eb3cbfa5af64791aa7 > prerequisite-patch-id: 317a25f10ac79991c3673ed9b9f4f1792acfce55 > prerequisite-patch-id: a5afa3c978fb0988470f024801cf34ab226d238d > prerequisite-patch-id: 173137729a43ff61d2ae7e11c8adb51ed69088fa > prerequisite-patch-id: 015b245aa68f2f495730798b0cabd1ddfdb0dd34 > prerequisite-patch-id: 498099182780efa32d549b0a5d8cca737c0996df > prerequisite-patch-id: 1e395d9d5bc3621e676f825d4aa18368f20d0c22 > prerequisite-patch-id: c450212c2c882ae793740ddd8133572392437d11 > prerequisite-patch-id: dd7fe7ff9ee02ec5fbe578f9aefa51c7aba2fa99 > prerequisite-patch-id: cc4b07c7d922f3162574e562c73c7c9e54e18cde > prerequisite-patch-id: b07f4d00a21b4027c01c1f26de256042a047b15e > prerequisite-patch-id: d612d492dc46b0290ffbbf48ff878748abd18d3d > prerequisite-patch-id: c723ae3fad8a29e325af8d0c3e4a13fc5e10d91a > prerequisite-patch-id: e5bde884cae2b8eba74f3fed72f17a03cef9a6d7 > prerequisite-patch-id: 2451898b4c136918d666ee756c07800f54c2a1db > prerequisite-patch-id: c217fce92fea0c1366604d27e281f5a4d1bd1c67 > prerequisite-patch-id: 91e6d0b063f4defa7b9981b9d7c7ea320d689517 > prerequisite-patch-id: be9b9249f8fdf4d047c25083f13823265af964a5 > prerequisite-patch-id: 3e38b46c81e8c7e499e88614feadf887f376452a > prerequisite-patch-id: dabe595a852f2e69b7cc17222fce2c26eaa2c678 > prerequisite-patch-id: 5afcf6e4559c0d2568062465fc9f8e86e3e96268 > prerequisite-patch-id: bef138561378a03b47b3ddffd8f4134caf8d387f > prerequisite-patch-id: 3b6cabac220e10c5eb46542c6e39ccc34a99f86f > prerequisite-patch-id: 1bea39ff4dd99a1db65f049ed578b6d11694f96d > prerequisite-patch-id: 262c5e5c6ca80b45c370ae9f0696280268bf139b > prerequisite-patch-id: a29743d7e5d732319662d4d664b8f918ab560b55 > prerequisite-patch-id: 36422aa8b726f046ba894955a0f7dabb5e09ec93 > prerequisite-patch-id: d62962372776140a487f6d23d02b5bc386b602b0 > prerequisite-patch-id: 47db08b3de5e6c083913255a3c42e8b522f26da9 > prerequisite-patch-id: b59a13dee7bc05da29de3b3c4be5fc788bea628e > prerequisite-patch-id: d2a3880b4b8c67b1e39f49871f9d3d4894e1a491 > prerequisite-patch-id: b5fdb0887f1c700856b547988f614bc62e3fce34 > prerequisite-patch-id: eacd36384ffefa32ff059d44acf9c4b31b553150 > prerequisite-patch-id: 62bbccb8c84ffc2dae6b4a13cfac7f71a1a009d9 > prerequisite-patch-id: e7e55c4cdaed1d3c6537f3f3542a1174b1d2cc30 > prerequisite-patch-id: 30b764db1f8ad6ff8db462660f656001dcb3ceab > prerequisite-patch-id: b2f8b93d7038578f118e5d63d742784533cf3867 > prerequisite-patch-id: 00bea5e1b486eedfaf0753c71f87dfa5788937e8 > prerequisite-patch-id: 8110ec66ab1720d4619099efe40c5b0bd25bf233 > prerequisite-patch-id: dbc00a49cece87e4b1205822368cea55decefbf4 > prerequisite-patch-id: a3c69e1a9dec6ae421e8aa5fabee45fa6ee661c6 > prerequisite-patch-id: 2be0fa1063a7f41c316bc97349e0320d230d1ec5 > prerequisite-patch-id: b1036a35119d75ed9f4a1c66e43a225713087c2e > prerequisite-patch-id: 8fc4662814ef14b93e5ecdc04857d5436a1b0a5d > prerequisite-patch-id: 3e16c29f37cc6bf46fcbe55012bbe97473cab2de > prerequisite-patch-id: 084ee99ce41dd1aa7f6c163dc9cd32d8149ff9e9 > prerequisite-patch-id: fa96f7779e59f610c999e0a2c00094a3ff63e076 > prerequisite-patch-id: 8de809b3e93087c02fb92645d1b9db7ec6461605 > prerequisite-patch-id: 2f13e7b652ec52e1a4d2ca4c1f51780211357ff4 > prerequisite-patch-id: ed75567635ebbf056302d09b029ded129f00afa8 > prerequisite-patch-id: e63850287af152a6bb38d7f24f810623f9a7e46a > prerequisite-patch-id: 215a4cfd614e0c56a71afba7bc020bcf0c6a53b5 > prerequisite-patch-id: 11e19466777324cc3b86ae1c01aa63903122a470 > prerequisite-patch-id: aface0468f0ec0113a4c5e234d83a80f1565ed2e > prerequisite-patch-id: 6c8b891540d2c478a070800a5f91d082868eca0c > prerequisite-patch-id: a489a02c7d6b5fea5cc4158afdb89a559d12be76 > prerequisite-patch-id: 74af80d27db50c3c88a244245ba9cad1ddd85afd > prerequisite-patch-id: 1b368a494be48f5325c63ab8e46460704802064a > prerequisite-patch-id: 8e572d81c51771a837e92a162ca3de2479f2ecc3 > prerequisite-patch-id: d13bb91a5716132bdfb85054f7fb0568bbd9920a > prerequisite-patch-id: 1db2f658003bd8b84467062b73af67e69be39e6a > prerequisite-patch-id: b12d7093025e119a7b6fb2f794f0dbc349e627c0 > prerequisite-patch-id: f017eb1ec684eee3954a15df2b1e43181475006b > prerequisite-patch-id: 61dd569d77f0b5b36e257138ed8e6bc65676e8c7 > prerequisite-patch-id: 33b457ee1af37c206690e2c7cf88c78b2490be3a > prerequisite-patch-id: 7ad2db8a75ea138577c569732ba14ebc19fc1c7e > prerequisite-patch-id: a16fd20a839e2147cfe676dd54c002c1d49fbb31 > prerequisite-patch-id: 54dcd98da9655909a5204ba644910ca633d1eaca > prerequisite-patch-id: 43c885c1fe6ef8f87ff8c368d65ce9c1470cf946 > prerequisite-patch-id: 2573d603c89cd4229a03d855bdf6892a6d0699e6 > prerequisite-patch-id: adde5dc1f5a21eb26287a8a91937afbfd4c08d18 > prerequisite-patch-id: 05d54ddf7c6fff52ee63bae8078c753c7e7da71a > prerequisite-patch-id: ad8a1033d1f4843b16ca06039bc8d48dd4f11c8d > prerequisite-patch-id: d4e4a523d7f2d78e92d30d1a2785d2bd292f49a9 > prerequisite-patch-id: 0818573849763d642c7e35c9c62e22c37caa216e > prerequisite-patch-id: d42a51e03301e7924420e8c96e84b9aa7832d97c > prerequisite-patch-id: 982cf689fa523ee28efdd48f83031f934c608c49 > prerequisite-patch-id: 583be0cecf5879d46adf4486c5ad5afb82ea5be7 > prerequisite-patch-id: edf210b702a3e165dc229faacd70107582b4c600 > prerequisite-patch-id: 4cfe1ecf596591fb169eaa678a203afed7d2fc75 > prerequisite-patch-id: 17914284400753a436491fc4fa1eb3e33208e25f > prerequisite-patch-id: 98c10a9e88fe8f9765ac21aed536621d936e5e1a > prerequisite-patch-id: ba5472c85ee0637983eada9ea7dcb8e47d14f3be > prerequisite-patch-id: 19cdead3aff2a43980d0dc80ad891e87772697a7 > prerequisite-patch-id: 90626ae160be5ede4d3aa4d82014bc6135159bfe > prerequisite-patch-id: 08ca6e9774f5d99104604e65f797c3d2e975b416 > prerequisite-patch-id: eac7ad4e1c8d32e67667375a0d7fad3a451219d9 > prerequisite-patch-id: b16c6d9e4b587e18ff55009f5e2152e1d9c39f90 > prerequisite-patch-id: edf0a0ee61378957c5ec1b1fdc21d74577142c56 > prerequisite-patch-id: e668fec274468fc9d48474bd86b199e2c15ab721 > prerequisite-patch-id: f0bd53e4cb4a6c011a8bacc58d89e88af658cb39 > prerequisite-patch-id: bc39ae857ad751ecf65a269b0df1aaa4c8b87388 > prerequisite-patch-id: ac861e78dfb6e2cf88da2c6e182ba7408194a61a > prerequisite-patch-id: 3b7235ab21d8d59653f9db45407f9f21cf6bb55b > prerequisite-patch-id: 402d3d20cba43b8f20a882fd4ec242c789c2e9ac > prerequisite-patch-id: e0e11343821eab0d0c3a1422ca740301d4d54b48 > prerequisite-patch-id: f8d6969840104add8bb34a8b5e2b5f342203bbfc > prerequisite-patch-id: 3ca89024292f944a2d1ed2e7bff42f2e3eabca1e > prerequisite-patch-id: 0c54af3f76897d62f12b21a3799514de949e9726 > prerequisite-patch-id: 978912307bcb9b9c47a1cad36bad00682d4add0c > prerequisite-patch-id: bb171df6e0ec64c2f09e0c45e1b9abbb98a1bdb0 > prerequisite-patch-id: fbe6a5b0947b7b5f1db12b2f9859501a065db586 > prerequisite-patch-id: 9df5fa0a5351ad54df9a3fb41a1f92ac60770ec6 > prerequisite-patch-id: ec470a663d4090426b5a271726afb5150c59d374 > prerequisite-patch-id: 3471767be352f66b58dab6356f312d25f7f7e82a > prerequisite-patch-id: 33529a978874ec47e3f1b9202aee3b9aa295c777 > prerequisite-patch-id: ab0d340f3a621b9e00084c6f3d5ca3a4e7a5ebc5 > prerequisite-patch-id: 860115c73b3cc2a54e0a1ec1f2de4c297894bef4 > prerequisite-patch-id: cc98a078fbe85a940d64b1e19dae0331d6ddc028 > prerequisite-patch-id: 09babbc4b36f03ac1ef6c8caf1d126bc3f201828 > prerequisite-patch-id: e1062578a308a32d80cc15aaccb38495caaf5492 > prerequisite-patch-id: 73fa0e2fbb10fa1c86bcddd0e63e3278ce6f5b6a > prerequisite-patch-id: 7cb0059cfefbb264706144b4b703894a3ddb157b > prerequisite-patch-id: 141e9e859dd69bc10f8288509345897dd6f1df89 > prerequisite-patch-id: 48b7d35032cc2807390970f45028d40642d68898 > prerequisite-patch-id: 30634d8dc6871fd65b5cc4083d9f54948e6a13aa > prerequisite-patch-id: cac4467d23080d3f9e49c2666179ba92a8606352 > prerequisite-patch-id: 61c1bf24b57b3cd1469adccb7af6872a5075e47b > prerequisite-patch-id: 533b774178966ce688ad94e705eb9b7551ea3e9b > prerequisite-patch-id: a969eae006d3482cdfe093faa518e7c526f778b5 > prerequisite-patch-id: db40a310784ecd346c33829ad60097f2644f0785 > prerequisite-patch-id: 6793ae8007788b78d15595727f3b10acef077c43 > prerequisite-patch-id: f4cc2e6fd653fce4671d152c0432deb14a4580e5 > prerequisite-patch-id: 65184efa6ef962918e13af8dd5dd682360ba428f > prerequisite-patch-id: cb93e9bb743ecdf584b9d56bfa8def5893249844 > prerequisite-patch-id: b1304278b53f30766e52171915f22f23b5525bc0 > prerequisite-patch-id: 55fc5b9408accd3ed9691758bbbc03fa79dd5239 > prerequisite-patch-id: f0d96e759ded38e8dccbdec80478ec62f193e452 > prerequisite-patch-id: 4cb63001baba418ba83837cda555045bf8fe3d92 > prerequisite-patch-id: 313496b68a5a59ecb67104cfb5b442b0eedfeca2 > prerequisite-patch-id: db8a5dfe7037b038f0d5666f645e1bf94ba1c1d3 > prerequisite-patch-id: 2627c42209ca99ec23d79c2729d03f8aa52e46fe > prerequisite-patch-id: c2d2a59e88e3cee039b44c22ba9267abfe1db256 > prerequisite-patch-id: 71cc22d32e4a00953e6906b1ec25841a3d9613af > prerequisite-patch-id: 52cd9c23cec5dcead22a74d2a2bde787c1bc74fe > prerequisite-patch-id: e4a35ef1ad7633f571344f093a2bbe6cf43b5382 > prerequisite-patch-id: d8fbf1b225cf393a99ce693c455aa70c0c929b37 > prerequisite-patch-id: 276eb6c987216f12f13309b10f0cd65ea5d25c4a > prerequisite-patch-id: 14f8c1ba1a8b8dbcbb23f1af71586dc90225c66b > prerequisite-patch-id: e3d0a44dc268d3dd779168b541e958a5a6b3ace4 > prerequisite-patch-id: bf25e3afc3811f32af29d160e362480e75ba3eb4 > prerequisite-patch-id: 1d73f661b185b8f2dcb7b1ba76441beb01214e9b > prerequisite-patch-id: 9602869808390aa21f33d561968132ddf8a0eef7 > prerequisite-patch-id: 2f3ca1d8240d87e9fccd59b233a8f710ffa08b2f > prerequisite-patch-id: 21b8420ac5622e2ef29f529b41e997b239a66777 > prerequisite-patch-id: 9b55e11000b71208c9c00d214309cc09fc90e444 > prerequisite-patch-id: 59463d53d99d7b30ca271c9ef9c3c8accc134352 > prerequisite-patch-id: f48d39f712ca3bf081ef17fe57e5d77d5ccb551b > prerequisite-patch-id: 8ac73b39b7d4940eb6b3e0e8e983144a91ec89dd > prerequisite-patch-id: b0415f45f6696ae33b9878d7b62e4476c10cddd3 > prerequisite-patch-id: 9d911ee1d76815db37ee11a692fc6bcf5dae58a8 > prerequisite-patch-id: 8fa433afac07701249bea630b3cf059269acd719 > prerequisite-patch-id: bb98f672ac6934c9b1c25c66243445fe1ec21faa > prerequisite-patch-id: e74bf1a307e20bcb7e00b7d50d0e7658688fb493 > prerequisite-patch-id: 9f381419d589ba79259bb195e94b4aa9faf3e91d > prerequisite-patch-id: 21d3492f3f5ad83e89e6c61a2b9a2ff17b832a39 > prerequisite-patch-id: 34dc8173dd6996366490ce604be1468092a4c176 > prerequisite-patch-id: 44ee4a613dfe5b40158c09dc2365dc84348c1ad6 > prerequisite-patch-id: fb0bc76be9c3ab20c5deeffa3eb11d9a53fd028b > prerequisite-patch-id: f56ea8e848810b6d114a7af3d6e64d0cbd46aab9 > prerequisite-patch-id: 0845344b68bd75156e4a888c2bfc19e23d77ff7d > prerequisite-patch-id: 0f853e23c2fc65d9c8559b8ec2f31fb63305dd69 > prerequisite-patch-id: 8d4b46c46356e95972140e55007f03116290d270 > prerequisite-patch-id: 42088928f3ee73b68068b35c997fab73faa92a23 > prerequisite-patch-id: 8c31054e5df24992adc4e6e56427b4183dfacfb7 > prerequisite-patch-id: 2d81c2de6f0a2bf485a7583fb5f37f3c70209fb6 > prerequisite-patch-id: bdd021bb97718be33ffc28a82cc264975b758033 > prerequisite-patch-id: 3c67a3033590c511bc96819aa2fdc6376c2799e1 > prerequisite-patch-id: 522faac8139bd43c0b7b0d3c9bcbb232bc36088d > prerequisite-patch-id: 3f919cd1573be50f3e839ab886ab88d03ebfec33 > prerequisite-patch-id: ba6905ec779dbe8402567bddca9ff04380b49534 > prerequisite-patch-id: c2d67cdfe3b2b250aa014835df850327f95671dc > prerequisite-patch-id: 6f3077ee2dfc5fd992ed7d0752e06be30a2bcdef > prerequisite-patch-id: 5d458a61e2f8723d6150269fd985230517fae289 > prerequisite-patch-id: 0ce139991adf51dd72dd1ed2a5c65f07d2ed9170 > prerequisite-patch-id: b5e3c3cdf3933ef5f4cd668753a44ebf2f50cce5 > prerequisite-patch-id: d5ac9982b153bd2694fe0713b9d20adb6645dcd3 > prerequisite-patch-id: 1df08a69e873f99793fd707988ce253d089de358 > prerequisite-patch-id: 54bf85383ebab763f099b16032c8abaabacaebd0 > prerequisite-patch-id: 700280401fef37638a345bb45230ec59bf065acc > prerequisite-patch-id: bcd3cc0f6c1fb8d03fcfea4b9e02d48e353eb1cd > prerequisite-patch-id: ec304ac4d9aa7bb141be19d61bb2b476507798d9 > prerequisite-patch-id: 47ec32de02741d507737c793c5b9b1a2e2c6e97d > prerequisite-patch-id: 10803aaae550c02d5a89f188f816e862c1160138 > prerequisite-patch-id: 34792281f364e06d44fade83c273e452ce750794 > prerequisite-patch-id: 2f8ee186f9a210e2409c8947adcf2e169d946e28 > prerequisite-patch-id: a84ec93dd710baee70378ae0498f43efb871d970 > prerequisite-patch-id: 004b134f497cdc1f2613aa03ba2385862043fb2c > prerequisite-patch-id: 3d4f42a6c50c653800f0e763e0940df217b92784 > prerequisite-patch-id: 7e471b7c811a8048ce35833c17fc0b6e316427ad > prerequisite-patch-id: 9f1e935e6771d526ed8d3b7442572a362b40c6f8 > prerequisite-patch-id: 7a7006219f64b69e221aa72b90b6c693c0481737 > prerequisite-patch-id: d405ac213ee0a65beb108e6c972f2d29d6fa9557 > prerequisite-patch-id: bebddd18d1098c02e97dea3afccac86c7c1ed668 > prerequisite-patch-id: 6c75d480c7fb6489813cd7bb29f7beac988d91db > prerequisite-patch-id: 0c1a9d242dfe1041931c212728c8922da60c7636 > prerequisite-patch-id: 3ad9a1fa69bb6cd344ca98ddf9f5e4289efee02e > prerequisite-patch-id: 05a2fbcccf0ae6856127b2359996c053add0d12a > prerequisite-patch-id: 24967f29736c0b65389dcb29a8fc405e2e36b5d6 > prerequisite-patch-id: 0e493f8534bc23a7c19c744695cce552f76a3c11 > prerequisite-patch-id: e3e1a9ea43db06cafdf91e39d7b4c25db767b489 > prerequisite-patch-id: 0e143573aacf18be639bc3d5bab5c4bc5989848c > prerequisite-patch-id: 04731712173f95989e65e40ece2a131d0ee7daff > prerequisite-patch-id: bab466312858b1e806ffaa7a0da499a1f6092a61 > prerequisite-patch-id: b079cad7a8e1126f4880376454f709912af75a6b > prerequisite-patch-id: 464bcd7ce61f3991c45eb9e3ef9ad472dff2a946 > prerequisite-patch-id: eb56b285dd23e847ea1119ffbf30ccab2c9010a2 > prerequisite-patch-id: 640e23ba3024968de551f6fa546b7b0aa5e42069 > prerequisite-patch-id: 3a1efb1e80508ce32264cd578965bb56b159fe4d > prerequisite-patch-id: 4979172427888c43b323721b4ed7dead105928d7 > prerequisite-patch-id: f841be4da9ab723d32d93390bb7c0c4afab3ea18 > prerequisite-patch-id: c3ba1dcb19cd324955b2713fb771374421df3e50 > prerequisite-patch-id: cc9180e4934725ea5dca0f7ef7d89c933a5d914c > prerequisite-patch-id: d64cd540524371c2b8ded9b599ec8e0d97121c7b > prerequisite-patch-id: a3fbafc0d086dfe77204ecd1de05bb9977fe9623 > prerequisite-patch-id: a0f7745059960b7d950b66998f093c9eda649673 > prerequisite-patch-id: 7b62b181707a1632f461ad8cc265c7d6e5960012 > prerequisite-patch-id: 6bd75c08b63c04bcfb17bcb9788df35259bf6dd1 > prerequisite-patch-id: 6566bd4f3a9f94cefec928d04e5bcc7874fc6f32 > prerequisite-patch-id: ca90180c2d0b0ea1acb9bb49efbd85f8a07a32c7 > prerequisite-patch-id: 1e70e35c795c6aebbd820904aba3fb2cc71cd916 > prerequisite-patch-id: 36bc3785254eac5f09ecca268ff96e43185402cf > prerequisite-patch-id: e85ac7246bc99e2c827c37ea3ffe30b36bebc4dd > prerequisite-patch-id: ff69dcc451ce87eb8102eeaf52d8aa418bddf07d > prerequisite-patch-id: c514f495d5bdebc0764a7c51536129d58e210040 > prerequisite-patch-id: e1295c5783210f0ed00aa1d08fccbddf15cce17e > prerequisite-patch-id: d766a719f4a2193afcd6d4cc0c3562bc2e3044ef > prerequisite-patch-id: 9acbefd4caf7e6adb266eaa32e77b3d7bd8797db > prerequisite-patch-id: 32e05876eba86a6181f7f2cbc538f2fb73e63528 > prerequisite-patch-id: afc6380a4528e839e0ccd3f377b288fa7efa7659 > prerequisite-patch-id: 4bd5388d612eee6b1279004712f12c0948b41393 > prerequisite-patch-id: 29d928911fe1e4d410f84902575cc8325d32fea0 > prerequisite-patch-id: 39e7ac6b9bc138a5a15fe6781e590d46cfc7824c > prerequisite-patch-id: 1233e7289977141760b36d1618456bf45fd63efb > prerequisite-patch-id: 7c04cd8c600c13b666688c7d9100eb1d4078a91a > prerequisite-patch-id: d27571860a5091aecc0d515be1e2e19095cf6ce5 > prerequisite-patch-id: f1ee1e41c75aa19885a274a9cd47218c1b606f21 > prerequisite-patch-id: b58ce70b97e7a32ece122e05d43b6ccc79fb6fef > prerequisite-patch-id: 4f17ec906c0327904370bd08f2108fa846244511 > prerequisite-patch-id: b7f64731b6b2863497bbe255ae32fd4e270e2f7a > prerequisite-patch-id: 1121544e3c96b374d54e365720c65c2e36b88202 > prerequisite-patch-id: b4c71dd72df41ac6eac7f2441e5341343c05f86c > prerequisite-patch-id: 2bc97df7f6071df18931c9480cc7faffcaa8bc45 > prerequisite-patch-id: c3bd83a23c70f7ab2f2cfc792f746917047b75d6 > prerequisite-patch-id: 704b9b0f694670c1dfecdeee22f380b0477fd847 > prerequisite-patch-id: 3ee16cad2f5afd2a76f7bcc4272d425d75df7b13 > prerequisite-patch-id: cdb28a4b358341112f543c488f66f441381042bb > prerequisite-patch-id: 71ec44a08aa3a79b426a475dfa65acafb1aa64f2 > prerequisite-patch-id: 9e47cb475894f3ee8954cdabfd705798fa4d6531 > prerequisite-patch-id: ab9c5609c40b03151bb90f85d4216410b08b6885 > prerequisite-patch-id: d989d3d7723884a7e055fc9e7f175e5b072a99be > prerequisite-patch-id: 97adf3ad40d26283d651a058f2ff7229e0218a2c > prerequisite-patch-id: 1eb949476736555f30f6af20a5f382027e5875f1 > prerequisite-patch-id: 6c59bbb211dbcfa3b57628c0e5e590e0cbb81916 > prerequisite-patch-id: 9f422df7312d0b84e3ac8e67849f41455fb6c8ad > prerequisite-patch-id: c5410d6084a79afa6e010298ae49699c0d6941de > prerequisite-patch-id: 199ff67fdea8cf45247aff4d7c2624d176f6bedd > prerequisite-patch-id: ab42ec2cee91d4df2acfacacbe867c180b8d1baa > prerequisite-patch-id: 088d2b9333dc78b26f5d293d35dcae2818fec005 > prerequisite-patch-id: 40e782c4679a47acbe2ceccce4205b7bbbf7e5ec > prerequisite-patch-id: e76b5c1e393ec5eb72c6ef9dc9982dcaea03920d > prerequisite-patch-id: 1e6750e9dfea42df5c7c665b5c9a00e155863404 > prerequisite-patch-id: 295734ac4b0391f9ce8ac7e7b6dea7cd565e4a6f > prerequisite-patch-id: 1b6be9123f53906f24aa8b352d03c15ff8e17f58 > prerequisite-patch-id: 29fb2df1f2901885aa7e0e51137ebc6eea7e4064 > prerequisite-patch-id: 369142eced10315ec4a8abbc5aeb9ddd6094469d > prerequisite-patch-id: 2da47a164072200d9174d9b959a793b6c18915b2 > prerequisite-patch-id: a80755a915a1a07bcc6a10acc5c02f1d30ce6588 > prerequisite-patch-id: 55aa7eb623eb635529803578812818ea283318c7 > prerequisite-patch-id: c1be46c2f02c5ae1e231d6f0ea9f3620371a63a9 > prerequisite-patch-id: 97af3b234d785baf05aa8cbc08939505d80860bf > prerequisite-patch-id: 5d5724586b5167d0f79de6cb58532d06a239a088 > prerequisite-patch-id: 9275cc740e936673bcac74c14a11c2bb4afa2af6 > prerequisite-patch-id: f08227ffbbd4153802c8bda15b97c2c81c880d7b > prerequisite-patch-id: d7a49d0819580373c748969caa33263d17733b9f > prerequisite-patch-id: fe3dbd3f3bab51de8cb557bf9bac50d47a7f8013 > prerequisite-patch-id: a556691d71c6382701208d92502fbfde2e60e0b8 > prerequisite-patch-id: d7949dd3c93b109137bf30b451113da4b9cc04eb > prerequisite-patch-id: 21fbf3b79f17118e7583de6ed6d06e5bdc7445ff > prerequisite-patch-id: c4b04a1dd2371fa2430b011e233736d686a00fe6 > prerequisite-patch-id: 8265f9e3657acec1eb367af523057ee509f38b0d > prerequisite-patch-id: b846d41ab1f247592b88dbc714048339687a8a20 > prerequisite-patch-id: 4a13756e0dd0332a6736905214d2b49b4a450998 > prerequisite-patch-id: 0afc896a7e2fbfababbca007cbe671d6c8580c47 > prerequisite-patch-id: 5f4604b28de9043bf78b84fed9e2e4a9d8a0f7ef > prerequisite-patch-id: 2a89b63ff751806dff2bde3ed60a6662a7711072 > prerequisite-patch-id: 5c702e08f41f7dd968a02dd52caa5cfc2e3d1f49 > prerequisite-patch-id: 9d4e2636202b9dc9b063bc90f816546b6e9c9a5f > prerequisite-patch-id: afb764ed9d90c10506cdb586a7e14ff1614b5239 > prerequisite-patch-id: 350493ddf88126f519f67e870e6508b1da2dec3d > prerequisite-patch-id: 9491150d794d292c579465c0a74e2aeb5dbaf86a > prerequisite-patch-id: e2728785111dd641676f6ad12de02aecf9d5fd55 > prerequisite-patch-id: 5f9d75bf71485a258518fc3d00f301375b0982bf > prerequisite-patch-id: e2a399b4a46a4c40d34b0d70ceff23b8c239a779 > prerequisite-patch-id: 909e52877d9a4d215c9bc6953249f9a7820ef412 > prerequisite-patch-id: c91c840d129d14f49034e241ee71a15738e0d79d > prerequisite-patch-id: eb3633265db047519bfcdc1512fba9a2d0a2e117 > prerequisite-patch-id: 5d7a3447de1960026e6472938a2e25c0b19fc3eb > prerequisite-patch-id: 8d97c53382c9a4eef47d04a2d66416470dccadcc > prerequisite-patch-id: 71a8e479496dd19a145c21a71014f1a3bf458be3 > prerequisite-patch-id: 9f76b88408fcf2edb2cfa3d30179a8c1ad53bb02 > prerequisite-patch-id: 18d55a7c64281a2ee9773c0d07113f502ecec898 > prerequisite-patch-id: f6a6c72ab3b20769bd8e53625747c5dfc1eb0e57 > prerequisite-patch-id: 7c391d9d37e660d4ab7f2fe8b3ea43358272e555 > prerequisite-patch-id: 1c19bee3382567ddfa2e5a79f9e539e726c79b1d > prerequisite-patch-id: ba2b8c238055338dc7441330571f32b9b038bf68 > prerequisite-patch-id: c551f0592135ada773d467d14421cc2ee855e566 > prerequisite-patch-id: 0790d09906b67bd5f64ac2b3cf0c65e80c118576 > prerequisite-patch-id: 192b37c5d1daf4a31e39f5118613043353b84851 > prerequisite-patch-id: 8e6ce0b73b26bb7874312f7bc5b43d47dbff9d1e > prerequisite-patch-id: 002a58b876b30e5981e9f984def7208a5a0be841 > prerequisite-patch-id: a9a6bbd82925bf5778092ee5f986a29182b7870e > prerequisite-patch-id: 9b5e479e89b53ee8b4930f652bccc172d3f57b35 > prerequisite-patch-id: 0bddc7e001670e9bda9f6756d98beaff3bb900b5 > prerequisite-patch-id: 059b34410ba368c20edfe9013aa31636787ad808 > prerequisite-patch-id: de1b5ea5e75a738fcad1d710b7d04b93a29ebbaa > prerequisite-patch-id: 45e205358b38e38f46f9855699665c4465eded2c > prerequisite-patch-id: b3a9ce12ca8efdf4c31b4c7d294d9139f4d8b2a0 > prerequisite-patch-id: ccde614447e2cf05201c73e7cd3afbbb0d05e7e1 > prerequisite-patch-id: 740e5c9eba182662bd46956af3dffb2dcc9c4ad1 > prerequisite-patch-id: f6900beda4a36b3d15ed6f0daa52ac7b42e58012 > prerequisite-patch-id: 6e6ff41adbdf3f89bcd15f52e5df2fd0fee91c0f > prerequisite-patch-id: 84a7d6b43d83e37b3bf9416b5b00bd3366eab8b4 > prerequisite-patch-id: ece5e2c65e627f0fce66420f3f51ea4176b4bc7b > prerequisite-patch-id: 0b2b2e16ee4daf22fa6554bc9efa2a7570a7131e > prerequisite-patch-id: 27fa6d85573dfe48e95d9df73910645eaa0f21cd > prerequisite-patch-id: 803cc655d115f803cca5d3e71228f597ae3309f4 > prerequisite-patch-id: acd32e537230384d037c1663b55eb6dd2e01b2e5 > prerequisite-patch-id: 72ce22f267054b561510be9d43763df55112d8a0 > prerequisite-patch-id: c536cad24b4dc07498432bd139076429e1076cdb > prerequisite-patch-id: 7a421a1b40fa2ce9ef4a4e68fda5cb2002aa0449 > prerequisite-patch-id: 2853059fd8dfdc28792e6f5db61fca2db52e1b8b > prerequisite-patch-id: e5edb1c30d7a5cdcc9a73fd715e677b73f36b795 > prerequisite-patch-id: dfcb291c72df0cad425e9af91c7bd20d36f70038 > prerequisite-patch-id: e30e30666eff4fcfe24fbea66f501ad7504e429b > prerequisite-patch-id: 8bbe2b62afd014c1080af7fb89704f7066a9b9e8 > prerequisite-patch-id: f7732a197f08a3d09415d13b54a99db196784bf1 > prerequisite-patch-id: 796e251a186c5600d879db20ca8fee1701223fe8 > prerequisite-patch-id: 12cadab462f05e6a989b61219c1f83263bedc9eb > prerequisite-patch-id: 6d9671b708493f0916017e34e263da551cb6feed > prerequisite-patch-id: 930404af4f604becc29080d96e3a142dddc4e99e > prerequisite-patch-id: 334a3f17b39d4ad40e6f3ec653a60f63c9ffc504 > prerequisite-patch-id: 8ce82439a3ff6d55d82ec78744308cd04f23c322 > prerequisite-patch-id: ca5222ed797be9c8039b57fa426df7707b503292 > prerequisite-patch-id: b3aebaba81e10a5bd86370292522d97d27fedc3a > prerequisite-patch-id: 29a9484dd12a95e0ecce936007618190a5c50329 > prerequisite-patch-id: 887b6ce44ff86e7ea70dc42466f3721e4e4c3e1c > prerequisite-patch-id: 429eb224c966424b458a7179e10e1f3172408eb8 > prerequisite-patch-id: 8ada12defe02635909e5be8116a23e95ec17bcd8 > prerequisite-patch-id: b53d1aa72f063784602c9d616b79632d7b890537 > prerequisite-patch-id: e9aa338b8d60a1e32d06c985394607531e9183e7 > prerequisite-patch-id: ee8da85daaeef613a776bbd56cbefd896d8ffdcd > prerequisite-patch-id: fc8d24edae0956903a8b2f89c868fab1313b229a > prerequisite-patch-id: d6e8b199ec857a4463cc3c7484d2f516cec05ce7 > prerequisite-patch-id: f2690ca5cff85c9e944356df0f31a4f28ccabe4f > prerequisite-patch-id: a39b9ace23ef14411e7604aee1dbfd7315269553 > prerequisite-patch-id: ff4f2e4c97ad5320b17b715a5ce52847d6c61206 > prerequisite-patch-id: 8c97e4056670aa703d392a352718ad52568d4ab9 > prerequisite-patch-id: ab43d49b462afba5e05c1a810b71ab18776e0791 > prerequisite-patch-id: 3f8b8048467462aa32c946c018bd7a24ed4b8d29 > prerequisite-patch-id: 8b649e7065f003d337101dec7e1bf471ef3d11e2 > prerequisite-patch-id: 6d3867ac4612ae83f21320f30644627c77ef55ef > prerequisite-patch-id: 40d37dfd044c7b17c75126062a23710572d0f71a > prerequisite-patch-id: c7efa4456856436f65455a2bfcf266c39d72b733 > prerequisite-patch-id: b699deea0b78e6d13399433347ae6d1590d2f1f4 > prerequisite-patch-id: f7d1810099a8c6f7fa68e954ab724340b1fe93c1 > prerequisite-patch-id: e265f2aa17a6f9f0c6a25cd857bbd847e693ac0c > prerequisite-patch-id: 8b8d8eba0b56185b8b6e7c29350af5e66b53d268 > prerequisite-patch-id: e7991ce1293c0fb177eff982ff7ff381fee7c2d2 > prerequisite-patch-id: facd83dcf2138d8f36898793f5927d5aab7caa35 > prerequisite-patch-id: f3704dad8b6c7f4b181c309e21662895f822394c > prerequisite-patch-id: d65cfb402cb6a8af5c64e8a3296be1241158a92b > prerequisite-patch-id: 03efeaea5e0254641c077a0da700698313c13b62 > prerequisite-patch-id: 16e6a6f22ca8e594717fce22390ff7b61bab27eb > prerequisite-patch-id: 37c48f751ca1955cf67be755ace6f8956cdfc63a > prerequisite-patch-id: afeef260b886fdb05186635b5989861a392a76e3 > prerequisite-patch-id: 19f33c84be6e37ff81fb4e1175ca2ade349c81af > prerequisite-patch-id: a66b1dceab550b9ffd851bbd7894680c8b2f526c > prerequisite-patch-id: 8770ae3565ddaaeb3d209d1b95bc7d49c1a0843e > prerequisite-patch-id: 0247f7a705f7bfd3b2e9f6c6e3c14d20ea0d69af > prerequisite-patch-id: 02ccfe998b4d2cb3d827ae803bcd111015dee245 > prerequisite-patch-id: f9d8342efc52c51da36208ceb5dbd94128d7ea19 > prerequisite-patch-id: e71cc70487ea23255303190fcc9ce878b8bc4cf2 > prerequisite-patch-id: c9c10b969dbea747242786ed2d06f17070509430 > prerequisite-patch-id: a1d161a65b32b91dde40cc696d974afa0546d52f > prerequisite-patch-id: 45b3da319212bc272e82f4ab61c0b18e051becff > prerequisite-patch-id: 23f404ad56ee86437c0ee446746f0f657a76455b > prerequisite-patch-id: b825aebd0ad04b6cabb4ec4a6a5ff791e316c7e9 > prerequisite-patch-id: 2d46c2af489edfc0fe48116a8a2289c581ea1062 > prerequisite-patch-id: da001fe4e0bb85bba9428545686ac34e6a653ff0 > prerequisite-patch-id: f9c29386ba9b85378e79fd55004b6b6353d317e3 > prerequisite-patch-id: 3507cdb0be31e044f0a2fcec164b0608838326a3 > prerequisite-patch-id: b1e536375ef296df16233fd1b645b39f5a1f3266 > prerequisite-patch-id: 6a06365249d624f255a2df5b9f6eaea9654557be > prerequisite-patch-id: 65aec5499ee38c7e2e87388458a0cdcf54e7a4c7 > prerequisite-patch-id: f610714fb76f7c38dceca092a4a78fe849475492 > prerequisite-patch-id: 9f044e5dbd1615ad3c1b16497507ddd722ca1213 > prerequisite-patch-id: 0abb772e1d6dcd5a2d5acdb3cb653e1c91d96a1f > prerequisite-patch-id: d479a40bcb0915c2443fa9c9a720a6d17e091310 > prerequisite-patch-id: 8fa852444b8ca71202292b438ae9125c3434da8a > prerequisite-patch-id: 2f12c3ab0fd4a87aa1a3a15453f543b8ce055e65 > prerequisite-patch-id: 87223123a0d0ddfd8d6eeef96d01098ecfb49c9f > prerequisite-patch-id: d7cd9a4284976ea1eb92195aef9b11a84e06c7f5 > prerequisite-patch-id: a8f267a78af429a74e2970a663e852d6b894b1b1 > prerequisite-patch-id: 3853cc0b81e6454d9459bf34b867ff3a76346ab8 > prerequisite-patch-id: c7d4fbe267543d84c7e7682980b16d1355a5848f > prerequisite-patch-id: 280ae9f18ecfb659c5fe7e62a7d0a23c0ad09927 > prerequisite-patch-id: df4f2343a92b5c638cb8a41b1239c680b6b1533e > prerequisite-patch-id: aebacd838c35a8f2c501d9324a2d7b058cab5951 > prerequisite-patch-id: 192332d06a334614fd35ee65f316b65006809f5b > prerequisite-patch-id: 7d8595e37ac77564cf8b358d37c2d5ed40957175 > prerequisite-patch-id: ccbd7797651d3b9343a16ec479390731d322eff7 > prerequisite-patch-id: e72feb7c651dd45d8a4d89e57be1066a0007d0d4 > prerequisite-patch-id: 35a1e0358e0af81c865652d98ade64bd102b54ae > prerequisite-patch-id: 62675389e7f8ae6cd5bcf23ca9b10e965f0ede02 > prerequisite-patch-id: 412b23ced23d6c4a6f8643c977a1a1b3451114cc > prerequisite-patch-id: a4eb7305398cec7e7c362db6ad42447da759a894 > prerequisite-patch-id: 8c27908c6e9462179f1535b47f95d10b6a409144 > prerequisite-patch-id: 776d8b0e9efff8fc28713740d0e2aff23ce332bc > prerequisite-patch-id: dd23b681d0fda3e7e4559c129afa5dc28cc8eaaf > prerequisite-patch-id: 3125157c96193c4583897a583f6611cc38b5a6c5 > prerequisite-patch-id: d3ba515bca1ece728d390da122f97fb29dfe5563 > prerequisite-patch-id: c97c77c37ed3bc2658bf015db2b654a2b90148b4 > prerequisite-patch-id: 2500ad1831b258a65e20e9977ff0dfde8befd2c6 > prerequisite-patch-id: 9f8f1b3093476636229cd588f3908527c16b6825 > prerequisite-patch-id: f9b2818626999c60ac2588a4a56a5ff86e912ad0 > prerequisite-patch-id: 81f260e267c74beae02eb5911dcddfe4bc15fd21 > prerequisite-patch-id: 2f54b830c86b5a5bc71f19b1a473f5cb5bb873d0 > prerequisite-patch-id: 6a3f831f8ac5e38409f1a96da20562fdfc130d5e > prerequisite-patch-id: 382f8b28128b4ab2158f9e60649dd46da38601e7 > prerequisite-patch-id: 61604c9628f1bf21d38cb40064a3ebfb3e8e3fcf > prerequisite-patch-id: 0b92a9812c9aeabad899c748753586666d7be1ec > prerequisite-patch-id: 83a9d2dc40d20790c06db2ebeaa5957b026eb1b5 > prerequisite-patch-id: 780a28b07341dba1154841f73caab369be2d448a > prerequisite-patch-id: 0fcfcdb91a98c0b8a2fcc5a78a75ff36fd1a4078 > prerequisite-patch-id: 5ed6c825ee1595c9980752dcbc8860391babbc26 > prerequisite-patch-id: 734ea246d9b3c3f08b8dc31f2b2740bd9e1fb167 > prerequisite-patch-id: 31ab98cedb3ab4732a7446dba4a2368b1705a3c5 > prerequisite-patch-id: 04138ac0763a6f727c30759dae53d70a5e6b810e > prerequisite-patch-id: 56616c5fba873280c0d0e15cf206d8baab705fa9 > prerequisite-patch-id: 04d24b1c4ae1fa35e4d2f1be17a5cac9ac26efb8 > prerequisite-patch-id: c3f4eda5d0bc5e105b80b1caa2cd3d0a3fbd3c76 > prerequisite-patch-id: 9651f96d3a501ec346f0459bab409c5dfbe9e2da > prerequisite-patch-id: 9041dc3bda93617bc8c7a6eeb249ef7ff2c20499 > prerequisite-patch-id: 3834c7343097ff26653cc63250897b2e70778dae > prerequisite-patch-id: 36fd2bd6cda465032a3d3f6a0fe7a55618822d53 > prerequisite-patch-id: 1f43e505ecab2b47cce5a737db11f04202c6b907 > prerequisite-patch-id: 8e3993c65811e7c3fd4ea641babd6fd258b505d6 > prerequisite-patch-id: 059f3bba97a8a8d0d7fbeb712754f9ef876a8cff > prerequisite-patch-id: d88c0e632a1605b9973288c400fc9b3b9793231c > prerequisite-patch-id: 0d6e5ca1ae5ff4834e009a15a015c1a4c8177f03 > prerequisite-patch-id: 9adc92656b39b7abae5685ce087060a2529deab7 > prerequisite-patch-id: 6491c39d2fa63d7a15aff3dc553ba138c5ab1a79 > prerequisite-patch-id: 6ee8a12a5be888ea01c2cf966922b05183971615 > prerequisite-patch-id: ee3b20ef68de047d2d798e8bc13f78ac4ce52007 > prerequisite-patch-id: 843376ff57bb6b020405ca5bc0d5a58bb8e01403 > prerequisite-patch-id: 968a9c5814c348b6c7039b0fa383b04099cb5d65 > prerequisite-patch-id: c786dd3885a4227f6861975f921c108691344fd4 > prerequisite-patch-id: 344cd4573b34cecf81ea4dc4774f2ba1f0f0ca00 > prerequisite-patch-id: f0b7f83bc86156a11c745391eda0d85de41b14df > prerequisite-patch-id: b1f38ec18a880da2366f51f9fc05182ba9bb8007 > prerequisite-patch-id: 7fe7632bf2ae2f17e4e0e7fcbed03872b31b3525 > prerequisite-patch-id: 37ad1da62ecd884ebc9db3634021625cff1b8549 > prerequisite-patch-id: 71e1797790bdf34ebd503479667a2eaf63e71f33 > prerequisite-patch-id: 1fb5ce9d3d74d50ee51a3a1855131d543fdc3006 > prerequisite-patch-id: 9838ccafc7fa1427b2540a44ae40c4206d3fa714 > prerequisite-patch-id: dbfaaeda77d0879107bc50835e7dc03e6e07eeff > prerequisite-patch-id: bf1d5e9c83e32953a501b3b4b794ae96e4503dd3 > prerequisite-patch-id: 26bcee53fc067822a29eec953a9fb4574c22962f > prerequisite-patch-id: cdd40e8d1cf38265da4526bd309787b07e559015 > prerequisite-patch-id: 8617755104853d9c1599999603459f44f3c01288 > prerequisite-patch-id: f0b201f0da2ee70e1c1ec5d4d309417d330e3f3f > prerequisite-patch-id: 9ed83733b6e78e0888126260bc0f0651b9f60566 > prerequisite-patch-id: c350244b97b0cd0d7ca08489341c87ffc574e97a > prerequisite-patch-id: 17138459573b0dc6b42036b489bb6e04a407680c > prerequisite-patch-id: d52c4c05c187353951b3db23d87874a5c8346370 > prerequisite-patch-id: ae594b80c2106bd27f21a42a7a2a6967a71de9f6 > prerequisite-patch-id: 502e5d4e291865a147c3a38441af945577d77f91 > prerequisite-patch-id: ae53b3e97e285f28d0508a9d82e403a0e7d0e8fd > prerequisite-patch-id: f48f7c99dc656f167d1fa99b0ccd623fc33f8d7e > prerequisite-patch-id: ba2a10e8bf7341bfef225d7662d67777d40209d2 > prerequisite-patch-id: d489cb7a82f22bbc94272dac5f39b84155683a0d > prerequisite-patch-id: 0f03436680062292128b24870e95caeb9a61cd7a > prerequisite-patch-id: fbc0fe8e21af230c98585e4266023483c0e0042c > prerequisite-patch-id: 6f058d18f69b3edc64759e1b7ca6eb08bda69acd > prerequisite-patch-id: eb7dd88350af17efecf65a18ad074e1bef5baadb > prerequisite-patch-id: 66e3707d7e5dc2084dba4015ad478d376f5617c4 > prerequisite-patch-id: 0edea4a3bbb50fb0061f3320365cc49dc8a0f4b0 > prerequisite-patch-id: b479b9c1eca14c3b377dbc7a2c1fbf663093a8f4 > prerequisite-patch-id: fc4055ea17b9c5760a07e41713b1c2e954cf80e6 > prerequisite-patch-id: 03b75832b31d0f55bd73fa6b1a45be3b78025aa0 > prerequisite-patch-id: 7124236abd036e49cc99e7577fa70456ae9e6b15 > prerequisite-patch-id: 88180c6053810d8dacaf85b1c03894938db7e86a > prerequisite-patch-id: 7d66e7a58bb58d95d7d05d3616073f6408db0908 > prerequisite-patch-id: 00fd4f8652b8e9e246f2f925b5c3a6c10f594f6e > prerequisite-patch-id: 4945ab6ecfea40aa33c7dc524ad487b746598130 > prerequisite-patch-id: 7b2bf1ceff11a44d897fd84d49872243aa5e18bb > prerequisite-patch-id: 22ce329922106fae750822395178e3abe7a3d573 > prerequisite-patch-id: c78143bae4dc28b47f7c509473ad56e7e36c35d0 > prerequisite-patch-id: 425702899a914fc3e6e741959452e39b686bd4d0 > prerequisite-patch-id: 310fb3227ab3df3d778d0ac06b5c41f385744f53 > prerequisite-patch-id: 490706d61b49ebd7413068114b5b9fd4d2cbdddf > prerequisite-patch-id: 6ceaeb295b4028acc55c6ef5fcd87469ce571863 > prerequisite-patch-id: 2844d95fbd6d68d4ff8b8146b4cf6887187d9597 > prerequisite-patch-id: 004112c85e0e2f708ebfac01d8efd482ab0d62b9 > prerequisite-patch-id: d95c09b33d945ee2199147f7de631bcba50e037e > prerequisite-patch-id: 071584e2436f0c43e6dcab87ed9508a0b61b0b88 > prerequisite-patch-id: b7ad87cf3b76bb10696ffac0bebcca68c091fc22 > prerequisite-patch-id: 2fa8dd21c366959d518c521b81ee1967ac2f168c > prerequisite-patch-id: 73c936cdf82d7cabaaa42f765038df6295c5e041 > prerequisite-patch-id: 1d26a424e51584a8ced98051442226e8d4d35c16 > prerequisite-patch-id: 581b0a38c80a9b3ab5aac8d7ecd116681f8661b4 > prerequisite-patch-id: 1aae8360a613c10a7223acfaada4a4d0c1e11c6e > prerequisite-patch-id: 0dd1314a152d223b48c60f167d77463fb283a106 > prerequisite-patch-id: efeeb18ea1664f55bb2f238b308702ee7fb012ed > prerequisite-patch-id: 05ad231111e4028d230edf82f8b12af7eb0aa289 > prerequisite-patch-id: 7da11e5c09d0ebba35c5fdc88102350247cf5d78 > prerequisite-patch-id: 6b3bdab29c9b06ec3bffa2e1513e2087d28bbebe > prerequisite-patch-id: 98b49e51296762975bc79f07671550992f242a38 > prerequisite-patch-id: a07ac3e31f44c632132603d3222e45a2a3fed97d > prerequisite-patch-id: 0b148baaa76c43ef021e71730223f0f684ab640d > prerequisite-patch-id: 524dfc337ee7bebf971937d558e152bdd6c87d7b > prerequisite-patch-id: 746dcf750901536307cbbf79711100c3f37a936c > prerequisite-patch-id: b2d48fecc6a7d1a6f6ba367cbb1db0aeeaf04368 > prerequisite-patch-id: 867df27b388a059a40bb855a8dece1e8d87ba856 > prerequisite-patch-id: 60937ddca0ce96e73f36419c4fc503a229f7c015 > prerequisite-patch-id: e90caccd5650fcecf5de88ffdd6af161d7fa335a > prerequisite-patch-id: 18247a202cd667303f955381573de77295b5e3a7 > prerequisite-patch-id: 7c4a484a5002fb862018e62b6c3213d23d858152 > prerequisite-patch-id: dc8e15b86fda821548ead410e0386d7cdb245078 > prerequisite-patch-id: 7ef9803f4db598b3cc19db7d4976f78143933e20 > prerequisite-patch-id: c0bbdf1888ec32f563041dbd87e6ddb7883316ce > prerequisite-patch-id: 027aa791c8953d651300b12eca537a41478f3c64 > prerequisite-patch-id: 292a29240b0f2d83ba220ea268c2bfc675ca466f > prerequisite-patch-id: e4f612a923405ddcc298366a93d665ee6c90d4e1 > prerequisite-patch-id: 6fe67fd7b8f9f677079f09433d1a95eabc54ccdf > prerequisite-patch-id: d161d37ff2d47604d5eba4735162cd04912b6ff3 > prerequisite-patch-id: 8d233bb6b9e8334aeb5ec88f8453ec9e5369f10d > prerequisite-patch-id: 7decc4fda453b9fc0a17261e90eebe2b65e079cc > prerequisite-patch-id: 9d7c3c2bfad16f9ecb36270f18032732f72386d8 > prerequisite-patch-id: 242aad1f5b6be16fbd75a55b8f23178afb38882b > prerequisite-patch-id: bd1a057eb83ce316b284355734a25a68273400f4 > prerequisite-patch-id: 1ebb8b02210de3d812ca225bc8ff3e3cd7e1685d > prerequisite-patch-id: 30ac8ccde615c85d8b56481f8ad4c66471c8d17c > prerequisite-patch-id: 5cea091e81697fce390e99f00d7aeb1258f06a9b > prerequisite-patch-id: ee54d0e4cee711c987ecd80191745a8583d4df32 > prerequisite-patch-id: 0611c97a7f2389296ab4886823d6066cfe0d7510 > prerequisite-patch-id: b3041894868b2c18b0a45043d19fa90bf44ea057 > prerequisite-patch-id: fbbbeb7bd30fb8de7cded38b5710591d2095f18a > prerequisite-patch-id: e46b47baea51294ed55ed810e66d3c647d638f87 > prerequisite-patch-id: 1aa199c9152454ee53699d9dd88a7116757c71bc > prerequisite-patch-id: be149e8e461c0a4a9c2606c4b94c8e98b5f4e7d9 > prerequisite-patch-id: 70a329b45e2147d068bd40cb62d44bab2223dadb > prerequisite-patch-id: d348c680d527e82d971d08e37c5c6d38e6b9e0e8 > prerequisite-patch-id: 47185a0eff393ce3593a8504ebdfbdc473405261 > prerequisite-patch-id: 9758e4551a602e2e9218a719365e00f7401c5fef > prerequisite-patch-id: c25463c880b7bd4e067a13bd48dc28fbb3aaf850 > prerequisite-patch-id: d8dae41195bd4c8daa32ad0b99393d5d0fbd4910 > prerequisite-patch-id: e82bfb0b8e9d068ce131cfcc226dc966ff2b8fbf > prerequisite-patch-id: 30e7182dbe0f2221b4fc47220e246ba4dee893e2 > prerequisite-patch-id: 27d201079edb1fbff5e20838fb46c7efc5d37db7 > prerequisite-patch-id: d169925dcfe93e521dace77d800c334428c81d6d > prerequisite-patch-id: d7e7484362948bfeb462c6abbe5dae4fbee8a6ef > prerequisite-patch-id: 92aacf75398f5feade6d4e25a78d2ce8342443e4 > prerequisite-patch-id: ebaa368b230879dc9a3cbfbcea57095a714e35e4 > prerequisite-patch-id: e0ff02c58f6e614dd41d260009497447403f4043 > prerequisite-patch-id: 06e5a5c0bd2c505655dc0d550a20a58a066afa5e > prerequisite-patch-id: 22650eafb26241db0511eaa3d64949c1fe541727 > prerequisite-patch-id: 11e364cd047acbfa6a29a1825f5942a8de145915 > prerequisite-patch-id: 40d0a554b9cf260bc01a048f92fb6628ea1e4277 > prerequisite-patch-id: 1c7262dd5080c84f2754a7250a78b667fee0558d > prerequisite-patch-id: 668dd69f11e27932be040073f5d7698e83c814e0 > prerequisite-patch-id: 525354a3686e2258223749875005fd0bf7dce5a9 > prerequisite-patch-id: 4ca87034a00faeb5298fd00547f5967203a58a85 > prerequisite-patch-id: ca182b37427db80586012ebb88503d752f321dea > prerequisite-patch-id: a21ae41f88175c5e7103927c17fda88431013ad3 > prerequisite-patch-id: 1437ed157a0189f63bf8943e88c443e011fd6e7a > prerequisite-patch-id: f8fe6628a374927837c50542770c48965f0ed491 > prerequisite-patch-id: 3ac7a393ea076c4a9586e0dc2602458efdd4ed7b > prerequisite-patch-id: 3c7d806d5044c959acff7d1eb9273ed3417bfc79 > prerequisite-patch-id: 459ab8a2289859b1b71bbd954e3acb14e3ccc6c7 > prerequisite-patch-id: 53b32799713f39fd2a9aaa51521b01a0dad4abda > prerequisite-patch-id: 3557ef813b7887ca42db25a8e26772fd1ffc6ae4 > prerequisite-patch-id: 99b07bbf86569c28dc847078e4aeae6cae6021c0 > prerequisite-patch-id: 0c54f067336d5886917895240d9bec1653d250b9 > prerequisite-patch-id: b00059942a3521b33e44dff9f1e331e9a8d8577e > prerequisite-patch-id: 78620ce83474c055e17efd5dfeff3f44b2414dec > prerequisite-patch-id: 27cef45edcdc35bad1219dee76fc2c6c26d0dfad > prerequisite-patch-id: f946be883b63e71b7ff48c6c3772d6b4f877901e > prerequisite-patch-id: 60d3dff7b2534e612d2cb67b17ac4eb733ca8b14 > prerequisite-patch-id: 87333f5828ef6395eebf5241c012f32fae4153bd > prerequisite-patch-id: 1635f031576e348f51363cbc511cac8514bfada7 > prerequisite-patch-id: d11951ad9826c3e22acbee66903c6e3bd7788ef7 > prerequisite-patch-id: 973c6dbac0279769cf50718f613219d0627fecc4 > prerequisite-patch-id: 4bf071dc61742a1053a313c9bf42b011ff26d3f3 > prerequisite-patch-id: 9ea756f5ff40c512b1b6630e55a8e80db122cd2e > prerequisite-patch-id: 019c3f4674e46ee7b6d5b9257704b9f53192ce34 > prerequisite-patch-id: e44da21c817282434cc8468e55eb2a80a5e349fa > prerequisite-patch-id: c9e42b4c1aa878245895624ef19aa45658a7d53a > prerequisite-patch-id: 0e68b8be28e096a21bae8aaf3b026a9bee33ec84 > prerequisite-patch-id: 7aad40fe162f9be9c7dc9fecf31b3367654a398a > prerequisite-patch-id: 8ad68bba1f526247ab8c5c63400a7f18ae497794 > prerequisite-patch-id: 32393b89e594a337b74f3aea831ca819a39da01c > prerequisite-patch-id: ad0fd7951334acf3eeccd9f868cdc76865f4708f > prerequisite-patch-id: 65f4bbb0a17605aed22c3b5106c4e1946f828911 > prerequisite-patch-id: 04f6d259011084b5a474a333c79e9f808d2f5fd0 > prerequisite-patch-id: 9d927d04f762fe3f9c0256feeb36267dfdbb43a1 > prerequisite-patch-id: 1f8f574fd138c055cd704ed1f8d0f3c58cd42e7a > prerequisite-patch-id: 46effca82efdd0aada0b16a69b303b2053ae8371 > prerequisite-patch-id: 9a655afe654e864faec658ae27f7e899847584df > prerequisite-patch-id: 59090a00ec4eaba592846697b8a32f20560429d9 > prerequisite-patch-id: 27dd1fc536549f3c65907b53a7cc49663ac56b14 > prerequisite-patch-id: 00207b344c9fd888494974ebe0989bda0039ae1c > prerequisite-patch-id: 512fb2fa65c7f244a97609c49df65e75d430a9ff > prerequisite-patch-id: d916f7b9ddca8a7c84f5179fc45b2cee2006be57 > prerequisite-patch-id: 04e86fb57b61452fde35fd10f7ddf64ddda3c285 > prerequisite-patch-id: 5ab3a2a222f767d765ee8bdad76b492ce7039ae0 > prerequisite-patch-id: 84751925a48d6893449daca589d23a8e6a7fe68f > prerequisite-patch-id: 3c19710fb266755917d00dc0ca468770b20502ff > prerequisite-patch-id: 46c3539ba4078db503d6a32955b594b7deec7752 > prerequisite-patch-id: 7efc8701c793ae5f35222e1c5f678bcc441928d8 > prerequisite-patch-id: 069d60dcc904b10ba5b102488dc682abcd9a1f71 > prerequisite-patch-id: 11efd22ac6f3b8149272a763178d610983946a62 > prerequisite-patch-id: a380e199ad685e8bae23b85a01b00c089a73a3aa > prerequisite-patch-id: 85f55294dcfb943405117451b6e259d6c256851b > prerequisite-patch-id: 0feaa3dcdf241a8eed83bf8d17872e67d81062e4 > prerequisite-patch-id: 5abb1f9fe2df098b1675c4d051f32c20fdcc8e18 > prerequisite-patch-id: eb5b2fe1403b0a285cf5580b53490ddf3b7fe5b6 > prerequisite-patch-id: 727e26f0716db18beebe22f11eae524cbd6d18e4 > prerequisite-patch-id: 3cd27a2bb5e26f4d44c0d80c718ae3977febb6c4 > prerequisite-patch-id: ec1365bfca3786e3a0f5e9cf0b9afafd24f0548c > prerequisite-patch-id: 565a5adc5ace09075078c696296161d352cb78e8 > prerequisite-patch-id: 8cfc2f2e9dd0b13107f7913fa9e0865f442f34c8 > prerequisite-patch-id: 7cdccb7e467fc5d95c70717c3c903d2b5bcb2a77 > prerequisite-patch-id: 617d20e6142db76dbf575ba58a1dc996ed13e53b > prerequisite-patch-id: 5401c5c3bb024602cd5cfd15d119c85479d97dd9 > prerequisite-patch-id: dea56eb3bbf9277e21bcafb32f695f13e0b0c99b > prerequisite-patch-id: 01566fd19f8e7c49b6d042640cd8aa1b1ca8087b > prerequisite-patch-id: 2e456e70bd535f453437a2413ca72ba17c2633ef > prerequisite-patch-id: 38d27c3887354af36e0852bc4abc6f7ac37a3607 > prerequisite-patch-id: d951e07b04b1e9940f3d9284a3a2793be64f8d75 > prerequisite-patch-id: a22223134a3f2be3beb3314012f501ae47ef6ac7 > prerequisite-patch-id: 3ca11fd88eab46e8fba2424f09fb0677975b4eca > prerequisite-patch-id: d5b298ed4f3ec93c3291990243b7e6d731296567 > prerequisite-patch-id: c9d3262305079c14d7506fe8e9aaeca4f9951af1 > prerequisite-patch-id: 7d1ccc1577aa7ae90cc142e93f2bc7ae03c1e040 > prerequisite-patch-id: bd99890c1b096f9de0ba0cad6d159d7c3a280184 > prerequisite-patch-id: 744a005f4e03ba8387a20f58787707efd6420624 > prerequisite-patch-id: 5d8df83f2a68ea6288b7f2453495b9f50ec9b56c > prerequisite-patch-id: 4d47b8e2c6d09769f482e1dd6c67a2e19c1b7e48 > prerequisite-patch-id: 174af0ce1c6d18237cec1bcdc07bed8bc8d290c7 > prerequisite-patch-id: a8e98124646ec3cb7322a934069aff078f56da8e > prerequisite-patch-id: 656ad7879c5b26dd7c10d995a8168ec3cd2d0610 > prerequisite-patch-id: 5e814fc37943167ad14b6cec84ab688889a7c6ba > prerequisite-patch-id: 5b6892a6469325a2bc04bada7701b0c30ce0d583 > prerequisite-patch-id: 55f4c7e9e6ba44d2a085e08465be92fb65fcdabb > prerequisite-patch-id: 8ed9d006dc2067a8d1d0e737db79f1c29aafcbad > prerequisite-patch-id: 847b56b5d1c5c9edbd64ef3c31953b44dbbcd36c > prerequisite-patch-id: 15490d96af9ee45109375cc6b514815f614a90e5 > prerequisite-patch-id: 40895cb78bbec76c1fca03f277cc7feffed809bd > prerequisite-patch-id: 000f1f743c9623199553c6c55e6488285f84a69a > prerequisite-patch-id: 64d2dd1ee3c2acba895a6a359717d125605ca40b > prerequisite-patch-id: 88a8b798ebcc5b68764d0648883a835656f2976d > prerequisite-patch-id: 7981eafe4191df2a3a6b75305800d26a7512a99d > prerequisite-patch-id: 4cabfd870fc08bb42ca9f2a28f4dc3ef5ab10cdb > prerequisite-patch-id: 6461aab4dea29511b57c4c5748ff75dc0cd91bce > prerequisite-patch-id: 527b62ba400a6f4bb8471cb78fbf9e994c36c425 > prerequisite-patch-id: bb6dc7672919c6e69b72acf7e5f9a82f3a244b78 > prerequisite-patch-id: 194e84f4aa373b2ab07558ae11a13e04b5ab7c83 > prerequisite-patch-id: de30b29102d8348bc0b6be169668e79f72c2870f > prerequisite-patch-id: a74d8d1f066d7ee741e7a408fc9469898cb23dd2 > prerequisite-patch-id: af76af0b90679af3c77e6f7f67ba612ff586d1cb > prerequisite-patch-id: 6f600cf9c3f1af06af3339c8c0fb02e266a94449 > prerequisite-patch-id: c221cae1f46ff3d9f33a98dc9b8bda16781f2825 > prerequisite-patch-id: 9dc5d879f7eae91eeede0953ccedd98f12c85426 > prerequisite-patch-id: 64f1d47b4fd771c649b02d65c27ee5d081e60407 > prerequisite-patch-id: cfed62b131ffdd56a4dbef5bdaab53d29738f788 > prerequisite-patch-id: eabbe2b3ab22e77b94fb48c5532f0f89670c06eb > prerequisite-patch-id: c2ec77368e174d72a99375a358e68b59c7c58a89 > prerequisite-patch-id: eb817ffb84bcbc8943db7af7745fb57f07af68a1 > prerequisite-patch-id: 72ae07abd5ff51fd173c4c844c4237862f8e556f > prerequisite-patch-id: 9a91d55bacfa96c5f0a83794c959a60664866a03 > prerequisite-patch-id: 946c360b6a60c15625b9a2c5f4d6a5290fc045f7 > prerequisite-patch-id: 6e7e5afd25439eb017922f41d0c1f6437f98fd43 > prerequisite-patch-id: f425c8286a72c65ba8b6e0b9e1467d30e1a4811f > prerequisite-patch-id: f3910f84eb35c865963255eaa0737048a1c27f40 > prerequisite-patch-id: d58adda10d0a843a8389013289a5923231804d79 > prerequisite-patch-id: a981f471b99beb2f906f2625967ddb07e1a7453d > prerequisite-patch-id: 729276c87210c3885fc48efeb0856ecdbff06fc3 > prerequisite-patch-id: 94c69003708d65e4e26fe597239ae482a81178d1 > prerequisite-patch-id: b0cbf5d6d2fe6986888e1316bfb13d0c174ae397 > prerequisite-patch-id: 6cb0fb8081ad615698b11fcb192d7d1a04f909fb > prerequisite-patch-id: 0c9c8c42dd49303a1088c1740cbfb975ddaf0ac7 > prerequisite-patch-id: 879d6cfe153f92febc06531e354dedcc0e2407b6 > prerequisite-patch-id: 2df973b849d0ddc313d09aad9a0e4a682cc07fef > prerequisite-patch-id: 5ffa7390af803fc57d77139807ea10a9366ef9ce > prerequisite-patch-id: 7b42d26e957bf45aaa0b8e72fee03b7cc5dea85e > prerequisite-patch-id: 7771bf0c9b072a7a5dbd66b06ac6b09927d5e733 > prerequisite-patch-id: e84f87c7da28de7dde5faddb8784ee583222aafb > prerequisite-patch-id: 3aa46ea7bd70fb6178e826ffc59d4e48c8b90384 > prerequisite-patch-id: 06bbe9f23146a9ad173dd1ae342c0df9b9112903 > prerequisite-patch-id: 09240cfa91c14dc8752820c883855b04c9ab7e65 > prerequisite-patch-id: 7e724038426545c714fbde7d68240b4edabedf6f > prerequisite-patch-id: f3c6567c4db5ccd60e2a96eca5e4435f8bb80d65 > prerequisite-patch-id: 05a11f3168d2a107b950cde0180086643b73e564 > prerequisite-patch-id: 29571b1568b4fa54068857c5766c64dcc60a7e02 > prerequisite-patch-id: bbc5783b2df37a4892f9a4baf75fad225917a600 > prerequisite-patch-id: ef10c509b820ad222ed488b6d58ed85e2d06e3d6 > prerequisite-patch-id: 8f1ca17555ff477bbbbd691c811fde1edee4cf8b > prerequisite-patch-id: 1eecbb6ddf333440a0a71882b41335f59bd458b2 > prerequisite-patch-id: 8a9babf4ae144e996f2c1c171741e20d5848bc54 > prerequisite-patch-id: cac90d9ecf858a9f5adb469fec2bcc9fb3ae9d23 > prerequisite-patch-id: 2c125271b28e8932f45edde2c634f0675d8ea4ba > prerequisite-patch-id: f3e15e86a9d9415074dd9b60c962442651102ea4 > prerequisite-patch-id: 2b74c8644fe75dfa22407ac14a1496d90a068f35 > prerequisite-patch-id: eb60ebf5374887dec3aa747a1f4a804b2a261a9b > prerequisite-patch-id: a295a1c2cb92f51b35f58405ce6ea270f80f2fd9 > prerequisite-patch-id: 63fa9059c2286a906239fd2e40bd82ffc8d623e2 > prerequisite-patch-id: b0b9b939d664d4f7b27e06adf36c46f95f7ae913 > prerequisite-patch-id: d44c7373dcea611df59477495ba7335a04cee0cd > prerequisite-patch-id: 34e9f43b412e5018366864837b59cee72a05abd3 > prerequisite-patch-id: a015f2e8c5fee026c0bbc29e99e6967e03e75941 > prerequisite-patch-id: cf9d39047475b461e07831bc4504c06b63a9f225 > prerequisite-patch-id: b0781eb6976b35e01381ac9a12ac7caa6d90822b > prerequisite-patch-id: 4cf6f480b8d4c4cd8d392d096f7fae26b206edee > prerequisite-patch-id: 03df5085a95aff837c10ac02e9fdb1234a829738 > prerequisite-patch-id: a775e4a3a9873b5b42516a32429705c853747a5a > prerequisite-patch-id: ecc5483454fc52289c093e711d5423e1cdd8bc3b > prerequisite-patch-id: 1aea6316a2a4a7b56316dbef3ca6034de6ec1672 > prerequisite-patch-id: f5519a80f9cf972665b8accb34869e81d007deb2 > prerequisite-patch-id: f870d63dae8bdac89711527b4cb02d69e40a2958 > prerequisite-patch-id: a57488257a6c96111c3b23d465929cce0131ef1e > prerequisite-patch-id: dff49267a0db686172ae90cee86ad82af985b292 > prerequisite-patch-id: 8b5b0ff8043abbe1eb15c005697a91171365e272 > prerequisite-patch-id: 67c6aaf1985cc437c3a82ab88e1b5fbd14bb0737 > prerequisite-patch-id: d91ab2db3361217f60008ea2faf28eecc475b53a > prerequisite-patch-id: 5e25ca1deb481b36df30d0764193eea423ed1350 > prerequisite-patch-id: 089929b7d0f8a11020e317e891ca60d51ea4c3f0 > prerequisite-patch-id: 8f4c5c8f7aca170aa951b0ce02a6720a47a231da > prerequisite-patch-id: 2d8150f755701f593e776132665bbcd20c7b5249 > prerequisite-patch-id: 37aa0a7a2e6c499b420eaae4dd80aeacf8978cf8 > prerequisite-patch-id: 35a6d2109bc7023c93e847a9da88b1fe284d7c8a > > Best regards, > -- > Daniel Scally <dan.scally@ideasonboard.com> > > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-11-17 10:58 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-11 16:34 [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Daniel Scally 2025-11-11 16:34 ` [PATCH v6 1/3] dt-bindings: media: Add bindings for the RZ/V2H(P) IVC block Daniel Scally 2025-11-11 16:34 ` [PATCH v6 2/3] media: platform: Add Renesas Input Video Control block driver Daniel Scally 2025-11-14 14:46 ` Hans Verkuil 2025-11-11 16:34 ` [PATCH v6 3/3] MAINTAINERS: Add entry for rzv2h-ivc driver Daniel Scally 2025-11-17 10:57 ` [PATCH v6 0/3] Add Input Video Control Block driver for RZ/V2H Lad, Prabhakar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).