From: kernel test robot <lkp@intel.com>
To: Dale Farnsworth <dale@farnsworth.org>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Hans Verkuil <hverkuil@kernel.org>,
Benoit Parrot <bparrot@ti.com>,
Sukrut Bellary <sbellary@baylibre.com>,
Yemike Abhilash Chandra <y-abhilashchandra@ti.com>
Subject: drivers/media/platform/ti/vpe/vip.c:3236:undefined reference to `v4l2_async_nf_unregister'
Date: Fri, 03 Jul 2026 18:58:36 +0800 [thread overview]
Message-ID: <202607031826.vOPABT39-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: d2c9a99135da931377240942d44f3dea104cedb8
commit: fc2873aa4a21355593b55eb49ff534d31f81c584 media: ti: vpe: Add the VIP driver
date: 6 months ago
config: mips-randconfig-r061-20260703 (https://download.01.org/0day-ci/archive/20260703/202607031826.vOPABT39-lkp@intel.com/config)
compiler: mips64-linux-gcc (GCC) 13.4.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260703/202607031826.vOPABT39-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: fc2873aa4a21 ("media: ti: vpe: Add the VIP driver")
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202607031826.vOPABT39-lkp@intel.com/
All errors (new ones prefixed by >>):
mips64-linux-ld: drivers/media/platform/ti/vpe/vip.o: in function `free_port':
>> drivers/media/platform/ti/vpe/vip.c:3236:(.text+0x31b8): undefined reference to `v4l2_async_nf_unregister'
>> mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3237:(.text+0x31c0): undefined reference to `v4l2_async_nf_cleanup'
>> mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3236:(.text+0x31e8): undefined reference to `v4l2_async_nf_unregister'
mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3237:(.text+0x31f0): undefined reference to `v4l2_async_nf_cleanup'
mips64-linux-ld: drivers/media/platform/ti/vpe/vip.o: in function `vip_register_subdev_notify':
>> drivers/media/platform/ti/vpe/vip.c:3339:(.text.unlikely+0x9a8): undefined reference to `v4l2_fwnode_endpoint_parse'
>> mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3346:(.text.unlikely+0xa44): undefined reference to `v4l2_async_nf_init'
>> mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3348:(.text.unlikely+0xa54): undefined reference to `__v4l2_async_nf_add_fwnode'
>> mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3352:(.text.unlikely+0xadc): undefined reference to `v4l2_async_nf_cleanup'
>> mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3357:(.text.unlikely+0xb08): undefined reference to `v4l2_async_nf_register'
mips64-linux-ld: drivers/media/platform/ti/vpe/vip.c:3360:(.text.unlikely+0xb80): undefined reference to `v4l2_async_nf_cleanup'
vim +3236 drivers/media/platform/ti/vpe/vip.c
3230
3231 static void free_port(struct vip_port *port)
3232 {
3233 if (!port)
3234 return;
3235
> 3236 v4l2_async_nf_unregister(&port->notifier);
> 3237 v4l2_async_nf_cleanup(&port->notifier);
3238 free_stream(port->cap_streams[0]);
3239 }
3240
3241 static int get_field(u32 value, u32 mask, int shift)
3242 {
3243 return (value & (mask << shift)) >> shift;
3244 }
3245
3246 static int vip_probe_complete(struct platform_device *pdev);
3247 static void vip_vpdma_fw_cb(struct platform_device *pdev)
3248 {
3249 dev_info(&pdev->dev, "VPDMA firmware loaded\n");
3250
3251 if (pdev->dev.of_node)
3252 vip_probe_complete(pdev);
3253 }
3254
3255 static int vip_create_streams(struct vip_port *port,
3256 struct v4l2_subdev *subdev)
3257 {
3258 int i;
3259
3260 for (i = 0; i < VIP_CAP_STREAMS_PER_PORT; i++)
3261 free_stream(port->cap_streams[i]);
3262
3263 if (get_subdev_active_format(port, subdev))
3264 return -ENODEV;
3265
3266 port->subdev = subdev;
3267
3268 if (port->endpoint.bus_type == V4L2_MBUS_PARALLEL) {
3269 port->flags |= FLAG_MULT_PORT;
3270 port->num_streams_configured = 1;
3271 alloc_stream(port, 0, VFL_TYPE_VIDEO);
3272 } else if (port->endpoint.bus_type == V4L2_MBUS_BT656) {
3273 port->flags |= FLAG_MULT_PORT;
3274 port->num_streams_configured = 1;
3275 alloc_stream(port, 0, VFL_TYPE_VIDEO);
3276 }
3277 return 0;
3278 }
3279
3280 static int vip_async_bound(struct v4l2_async_notifier *notifier,
3281 struct v4l2_subdev *subdev,
3282 struct v4l2_async_connection *asd)
3283 {
3284 struct vip_port *port = notifier_to_vip_port(notifier);
3285 int ret;
3286
3287 if (port->subdev) {
3288 v4l2_info(&port->dev->v4l2_dev, "Rejecting subdev %s (Already set!!)",
3289 subdev->name);
3290 return 0;
3291 }
3292
3293 v4l2_info(&port->dev->v4l2_dev, "Port %c: Using subdev %s for capture\n",
3294 port->port_id == VIP_PORTA ? 'A' : 'B', subdev->name);
3295
3296 ret = vip_create_streams(port, subdev);
3297 if (ret)
3298 return ret;
3299
3300 return 0;
3301 }
3302
3303 static int vip_async_complete(struct v4l2_async_notifier *notifier)
3304 {
3305 return 0;
3306 }
3307
3308 static const struct v4l2_async_notifier_operations vip_async_ops = {
3309 .bound = vip_async_bound,
3310 .complete = vip_async_complete,
3311 };
3312
3313 static struct fwnode_handle *
3314 fwnode_graph_get_next_endpoint_by_regs(const struct fwnode_handle *fwnode,
3315 int port_reg, int reg)
3316 {
3317 return of_fwnode_handle(of_graph_get_endpoint_by_regs(to_of_node(fwnode),
3318 port_reg, reg));
3319 }
3320
3321 static int vip_register_subdev_notify(struct vip_port *port,
3322 struct fwnode_handle *ep)
3323 {
3324 struct v4l2_async_notifier *notifier = &port->notifier;
3325 struct fwnode_handle *subdev;
3326 struct v4l2_fwnode_endpoint *vep;
3327 struct v4l2_async_connection *asd;
3328 int ret;
3329 struct vip_dev *dev = port->dev;
3330
3331 vep = &port->endpoint;
3332
3333 subdev = fwnode_graph_get_remote_port_parent(ep);
3334 if (!subdev) {
3335 v4l2_dbg(3, debug, &dev->v4l2_dev, "can't get remote parent\n");
3336 return -EINVAL;
3337 }
3338
> 3339 ret = v4l2_fwnode_endpoint_parse(ep, vep);
3340 if (ret) {
3341 v4l2_dbg(3, debug, &dev->v4l2_dev, "Failed to parse endpoint:\n");
3342 fwnode_handle_put(subdev);
3343 return -EINVAL;
3344 }
3345
> 3346 v4l2_async_nf_init(notifier, &port->dev->shared->v4l2_dev);
3347
> 3348 asd = v4l2_async_nf_add_fwnode(notifier, subdev, struct v4l2_async_connection);
3349 if (IS_ERR(asd)) {
3350 v4l2_dbg(1, debug, &dev->v4l2_dev, "Error adding asd\n");
3351 fwnode_handle_put(subdev);
> 3352 v4l2_async_nf_cleanup(notifier);
3353 return -EINVAL;
3354 }
3355
3356 notifier->ops = &vip_async_ops;
> 3357 ret = v4l2_async_nf_register(notifier);
3358 if (ret) {
3359 v4l2_dbg(1, debug, &dev->v4l2_dev, "Error registering async notifier\n");
3360 v4l2_async_nf_cleanup(notifier);
3361 ret = -EINVAL;
3362 }
3363
3364 return ret;
3365 }
3366
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-07-03 10:58 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202607031826.vOPABT39-lkp@intel.com \
--to=lkp@intel.com \
--cc=bparrot@ti.com \
--cc=dale@farnsworth.org \
--cc=hverkuil@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sbellary@baylibre.com \
--cc=y-abhilashchandra@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.