I’m trying to port TC358748 driver from L4T 23.2 to L4T 24.2.1.
When using “V4L2_MBUS_FMT_SRGGB10_1X10” or “V4L2_MBUS_FMT_SRGGB12_1X12” as tc358748_DEFAULT_DATAFMT for:
common_data->colorfmt = camera_common_find_datafmt(tc358748_DEFAULT_DATAFMT);
in “tc358748.c”, I was able to capture frames.
I tried the following 3 pixel formats, but they all caused kernel crash:
#define tc358748_DEFAULT_DATAFMT V4L2_MBUS_FMT_UYVY8_2X8 // Kernel crash
or
#define tc358748_DEFAULT_DATAFMT V4L2_MBUS_FMT_YUYV8_2X8 // Kernel crash
or
#define tc358748_DEFAULT_DATAFMT V4L2_MBUS_FMT_YUYV8_1X16 // Kernel crash
The following are from console output before crash:
[ 7.942622] vi vi: vi_probe: ++
[ 7.951806] vi vi: initialized
[ 7.959141] vi vi: parsing node /host1x/vi
[ 7.967079] vi vi: handling endpoint /host1x/vi/ports/port@0/endpoint
[ 7.977423] vi vi: parsing node /host1x/i2c@546c0000/tc35874x@0e
[ 7.987271] vi vi: handling endpoint /host1x/i2c@546c0000/tc35874x@0e/ports/port@0/endpoint
[ 7.999544] vi vi: subdev tc35874x 6-000e bound
[ 8.007943] vi vi: notify complete, all subdevs registered
[ 8.017298] vi vi: creating links for entity tc35874x 6-000e
[ 8.026804] vi vi: processing endpoint /host1x/i2c@546c0000/tc35874x@0e/ports/port@0/endpoint
[ 8.039268] vi vi: skipping channel port /host1x/i2c@546c0000/tc35874x@0e:0
[ 8.050284] vi vi: creating links for channels
[ 8.058630] vi vi: processing endpoint /host1x/vi/ports/port@0/endpoint
[ 8.069172] vi vi: creating link for channel vi-output-0
[ 8.078389] vi vi: creating tc35874x 6-000e:0 -> vi-output-0:0 link
[ 8.088496] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[ 8.100430] pgd = ffffffc00007d000
[ 8.107651] [00000000] *pgd=000000017fc05003, *pmd=000000017fc06003, *pte=00e0000050041407
[ 8.119864] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[ 8.129332] Enter nvdumper_crash_setup_regs
[ 8.137418] nvdumper: all registers are saved.
[ 8.137420] nvdumper: all registers are saved.
[ 8.137422] nvdumper: all registers are saved.
[ 8.162353] nvdumper: all registers are saved.
i.e., “Unable to handle kernel NULL pointer dereference at virtual address 00000000”
How could “common_data->colorfmt” in driver cause kernel crash?
I noticed in “camera_common.c”, only the following 3 formats are included:
static const struct camera_common_colorfmt camera_common_color_fmts = {
{
V4L2_MBUS_FMT_SRGGB12_1X12,
V4L2_COLORSPACE_SRGB,
V4L2_PIX_FMT_SRGGB12,
},
{
V4L2_MBUS_FMT_SRGGB10_1X10,
V4L2_COLORSPACE_SRGB,
V4L2_PIX_FMT_SRGGB10,
},
{
V4L2_MBUS_FMT_SRGGB8_1X8,
V4L2_COLORSPACE_SRGB,
V4L2_PIX_FMT_SRGGB8,
},
};
Thanks for troubleshooting suggestions.