> On 20 Feb 2025, at 3:46 PM, Thomas Zimmermann <tzimmerm...@suse.de> wrote:
> 
> Hi
> 
>> Am 20.02.25 um 11:11 schrieb Aditya Garg:
>> Hi
>> 
>> 
>>> 
>>>> + ret = drm_dev_register(drm, 0);
>>>> + if (ret)
>>>> + return dev_err_probe(dev, ret, "Failed to register DRM device\n");
>>> This call does not belong to the mode-setting pipeline and belongs into 
>>> appletbdrm_probe().
>>> 
>>>> +
>>>> + return 0;
>>>> +}
>>>> +
>>>> +static int appletbdrm_probe(struct usb_interface *intf,
>>>> +     const struct usb_device_id *id)
>>>> +{
>>>> + struct usb_endpoint_descriptor *bulk_in, *bulk_out;
>>>> + struct device *dev = &intf->dev;
>>>> + struct appletbdrm_device *adev;
>>>> + int ret;
>>>> +
>>>> + ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, 
>>>> &bulk_out, NULL, NULL);
>>>> + if (ret)
>>>> + return dev_err_probe(dev, ret, "Failed to find bulk endpoints\n");
>>>> +
>>>> + adev = devm_drm_dev_alloc(dev, &appletbdrm_drm_driver, struct 
>>>> appletbdrm_device, drm);
>>>> + if (IS_ERR(adev))
>>>> + return PTR_ERR(adev);
>>>> +
>>>> + adev->dev = dev;
>>>> + adev->in_ep = bulk_in->bEndpointAddress;
>>>> + adev->out_ep = bulk_out->bEndpointAddress;
>>>> +
>>>> + usb_set_intfdata(intf, adev);
>>> Rather set the DRM device here and fetch it in the callbacks below. At some 
>>> point, we might be able to share some of those helpers among drivers.
>>> 
>> FWIW
>> 
>> Moving register drm device here results in these errors in journalctl:
>> 
>> Feb 20 15:02:46 MacBook kernel: appletbdrm: loading out-of-tree module 
>> taints kernel.
>> Feb 20 15:02:46 MacBook kernel: appletbdrm: module verification failed: 
>> signature and/or required key missing - tainting kernel
>> Feb 20 15:02:46 MacBook kernel: BUG: kernel NULL pointer dereference, 
>> address: 0000000000000030
>> Feb 20 15:02:46 MacBook kernel: #PF: supervisor read access in kernel mode
>> Feb 20 15:02:46 MacBook kernel: #PF: error_code(0x0000) - not-present page
>> Feb 20 15:02:46 MacBook kernel: PGD 0 P4D 0
>> Feb 20 15:02:46 MacBook kernel: Oops: Oops: 0000 [#1] PREEMPT SMP PTI
>> Feb 20 15:02:46 MacBook kernel: CPU: 10 UID: 0 PID: 3530 Comm: modprobe 
>> Tainted: G         C OE      6.13.3-1-t2-noble #1
>> Feb 20 15:02:46 MacBook kernel: Tainted: [C]=CRAP, [O]=OOT_MODULE, 
>> [E]=UNSIGNED_MODULE
>> Feb 20 15:02:46 MacBook kernel: Hardware name: Apple Inc. 
>> MacBookPro16,1/Mac-E1008331FDC96864, BIOS 2069.80.3.0.0 (iBridge: 
>> 22.16.13051.0.0,0) 01/07/2025
>> Feb 20 15:02:46 MacBook kernel: RIP: 0010:drm_dev_register+0x1c/0x290
>> Feb 20 15:02:46 MacBook kernel: Code: 90 90 90 90 90 90 90 90 90 90 90 90 90 
>> 90 0f 1f 44 00 00 55 48 89 e5 41 57 41 56 41 55 49 89 f5 41 54 53 48 89 fb 
>> 48 83 ec 08 <4c> 8b 77 30 49 83 3e 00 0f 84 09 02 00 00 48 83 7b 20 00 0f 84 
>> 0e
>> Feb 20 15:02:46 MacBook kernel: RSP: 0018:ffffbf4344cbb670 EFLAGS: 00010282
>> Feb 20 15:02:46 MacBook kernel: RAX: 0000000000000000 RBX: 0000000000000000 
>> RCX: 0000000000000000
>> Feb 20 15:02:46 MacBook kernel: RDX: 0000000000000000 RSI: 0000000000000000 
>> RDI: 0000000000000000
>> Feb 20 15:02:46 MacBook kernel: RBP: ffffbf4344cbb6a0 R08: 0000000000000000 
>> R09: 0000000000000000
>> Feb 20 15:02:46 MacBook kernel: R10: 0000000000000000 R11: 0000000000000000 
>> R12: ffff992a8f114020
>> Feb 20 15:02:46 MacBook kernel: R13: 0000000000000000 R14: ffff992a8f115ad8 
>> R15: ffff992a8f114000
>> Feb 20 15:02:46 MacBook kernel: FS:  000073572877c080(0000) 
>> GS:ffff992deed00000(0000) knlGS:0000000000000000
>> Feb 20 15:02:46 MacBook kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 
>> 0000000080050033
>> Feb 20 15:02:46 MacBook kernel: CR2: 0000000000000030 CR3: 000000011dd12003 
>> CR4: 00000000003726f0
>> Feb 20 15:02:46 MacBook kernel: Call Trace:
>> Feb 20 15:02:46 MacBook kernel:  <TASK>
>> Feb 20 15:02:46 MacBook kernel:  ? show_regs+0x6c/0x80
>> Feb 20 15:02:46 MacBook kernel:  ? __die+0x24/0x80
>> Feb 20 15:02:46 MacBook kernel:  ? page_fault_oops+0x175/0x5d0
>> Feb 20 15:02:46 MacBook kernel:  ? do_user_addr_fault+0x4b2/0x870
>> Feb 20 15:02:46 MacBook kernel:  ? exc_page_fault+0x85/0x1c0
>> Feb 20 15:02:46 MacBook kernel:  ? asm_exc_page_fault+0x27/0x30
>> Feb 20 15:02:46 MacBook kernel:  ? drm_dev_register+0x1c/0x290
>> Feb 20 15:02:46 MacBook kernel:  appletbdrm_probe+0x4eb/0x5f0 [appletbdrm]
>> Feb 20 15:02:46 MacBook kernel:  usb_probe_interface+0x168/0x3d0
>> Feb 20 15:02:46 MacBook kernel:  really_probe+0xee/0x3c0
>> Feb 20 15:02:46 MacBook kernel:  __driver_probe_device+0x8c/0x180
>> Feb 20 15:02:46 MacBook kernel:  driver_probe_device+0x24/0xd0
>> Feb 20 15:02:46 MacBook kernel:  __driver_attach+0x10b/0x210
>> Feb 20 15:02:46 MacBook kernel:  ? __pfx___driver_attach+0x10/0x10
>> Feb 20 15:02:46 MacBook kernel:  bus_for_each_dev+0x8a/0xf0
>> Feb 20 15:02:46 MacBook kernel:  driver_attach+0x1e/0x30
>> Feb 20 15:02:46 MacBook kernel:  bus_add_driver+0x14e/0x290
>> Feb 20 15:02:46 MacBook kernel:  driver_register+0x5e/0x130
>> Feb 20 15:02:46 MacBook kernel:  usb_register_driver+0x87/0x170
>> Feb 20 15:02:46 MacBook kernel:  ? 
>> __pfx_appletbdrm_usb_driver_init+0x10/0x10 [appletbdrm]
>> Feb 20 15:02:46 MacBook kernel:  appletbdrm_usb_driver_init+0x23/0xff0 
>> [appletbdrm]
>> Feb 20 15:02:46 MacBook kernel:  do_one_initcall+0x5b/0x340
>> Feb 20 15:02:46 MacBook kernel:  do_init_module+0x97/0x2a0
>> Feb 20 15:02:46 MacBook kernel:  load_module+0x2293/0x25c0
>> Feb 20 15:02:46 MacBook kernel:  init_module_from_file+0x97/0xe0
>> Feb 20 15:02:46 MacBook kernel:  ? init_module_from_file+0x97/0xe0
>> Feb 20 15:02:46 MacBook kernel:  idempotent_init_module+0x110/0x300
>> Feb 20 15:02:46 MacBook kernel:  __x64_sys_finit_module+0x77/0x100
>> Feb 20 15:02:46 MacBook kernel:  x64_sys_call+0x1f37/0x2650
>> Feb 20 15:02:46 MacBook kernel:  do_syscall_64+0x7e/0x170
>> Feb 20 15:02:46 MacBook kernel:  ? ksys_read+0x72/0xf0
>> Feb 20 15:02:46 MacBook kernel:  ? 
>> arch_exit_to_user_mode_prepare.isra.0+0x22/0xd0
>> Feb 20 15:02:46 MacBook kernel:  ? syscall_exit_to_user_mode+0x38/0x1d0
>> Feb 20 15:02:46 MacBook kernel:  ? do_syscall_64+0x8a/0x170
>> Feb 20 15:02:46 MacBook kernel:  ? __do_sys_newfstatat+0x44/0x90
>> Feb 20 15:02:46 MacBook kernel:  ? ext4_llseek+0xc0/0x120
>> Feb 20 15:02:46 MacBook kernel:  ? 
>> arch_exit_to_user_mode_prepare.isra.0+0x22/0xd0
>> Feb 20 15:02:46 MacBook kernel:  ? syscall_exit_to_user_mode+0x38/0x1d0
>> Feb 20 15:02:46 MacBook kernel:  ? do_syscall_64+0x8a/0x170
>> Feb 20 15:02:46 MacBook kernel:  ? do_syscall_64+0x8a/0x170
>> Feb 20 15:02:46 MacBook kernel:  ? count_memcg_events.constprop.0+0x2a/0x50
>> Feb 20 15:02:46 MacBook kernel:  ? handle_mm_fault+0xaf/0x2e0
>> Feb 20 15:02:46 MacBook kernel:  ? do_user_addr_fault+0x5d5/0x870
>> Feb 20 15:02:46 MacBook kernel:  ? 
>> arch_exit_to_user_mode_prepare.isra.0+0x22/0xd0
>> Feb 20 15:02:46 MacBook kernel:  ? irqentry_exit_to_user_mode+0x2d/0x1d0
>> Feb 20 15:02:46 MacBook kernel:  ? irqentry_exit+0x43/0x50
>> Feb 20 15:02:46 MacBook kernel:  ? exc_page_fault+0x96/0x1c0
>> Feb 20 15:02:46 MacBook kernel:  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>> Feb 20 15:02:46 MacBook kernel: RIP: 0033:0x735727f2725d
>> Feb 20 15:02:46 MacBook kernel: Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 
>> f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 
>> 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 8b bb 0d 00 f7 d8 64 89 01 
>> 48
>> Feb 20 15:02:46 MacBook kernel: RSP: 002b:00007fffd9f88d18 EFLAGS: 00000246 
>> ORIG_RAX: 0000000000000139
>> Feb 20 15:02:46 MacBook kernel: RAX: ffffffffffffffda RBX: 000062610c6eb8e0 
>> RCX: 0000735727f2725d
>> Feb 20 15:02:46 MacBook kernel: RDX: 0000000000000000 RSI: 00006260e7b3be52 
>> RDI: 0000000000000003
>> Feb 20 15:02:46 MacBook kernel: RBP: 00007fffd9f88dd0 R08: 0000000000000040 
>> R09: 00007fffd9f88e50
>> Feb 20 15:02:46 MacBook kernel: R10: 0000735728003b20 R11: 0000000000000246 
>> R12: 00006260e7b3be52
>> Feb 20 15:02:46 MacBook kernel: R13: 0000000000040000 R14: 000062610c6e4920 
>> R15: 0000000000000000
>> Feb 20 15:02:46 MacBook kernel:  </TASK>
>> 
>> The following change was done:
>> 
>> @@ -13,6 +13,7 @@
>>    #include <drm/drm_atomic.h>
>>  #include <drm/drm_atomic_helper.h>
>> +#include <drm/drm_client_setup.h>
>>  #include <drm/drm_crtc.h>
>>  #include <drm/drm_damage_helper.h>
>>  #include <drm/drm_drv.h>
>> @@ -596,7 +597,6 @@ static int appletbdrm_setup_mode_config(struct 
>> appletbdrm_device *adev)
>>       * as the height is actually the width of the framebuffer and vice
>>       * versa
>>       */
>> -
>>      drm->mode_config.min_width = 0;
>>      drm->mode_config.min_height = 0;
>>      drm->mode_config.max_width = max(adev->height, 
>> DRM_SHADOW_PLANE_MAX_WIDTH);
>> @@ -635,10 +635,6 @@ static int appletbdrm_setup_mode_config(struct 
>> appletbdrm_device *adev)
>>        drm_mode_config_reset(drm);
>>  -    ret = drm_dev_register(drm, 0);
>> -    if (ret)
>> -        return dev_err_probe(dev, ret, "Failed to register DRM device\n");
>> -
>>      return 0;
>>  }
>>  @@ -648,6 +644,7 @@ static int appletbdrm_probe(struct usb_interface *intf,
>>      struct usb_endpoint_descriptor *bulk_in, *bulk_out;
>>      struct device *dev = &intf->dev;
>>      struct appletbdrm_device *adev;
>> +    struct drm_device *drm;
> 
> Because you apparently never initialize this variable.

Mb, works now. Thanks.
> 
>>      int ret;
>>        ret = usb_find_common_endpoints(intf->cur_altsetting, &bulk_in, 
>> &bulk_out, NULL, NULL);
>> @@ -676,7 +673,17 @@ static int appletbdrm_probe(struct usb_interface *intf,
>>      if (ret)
>>          return dev_err_probe(dev, ret, "Failed to clear display\n");
>>  -    return appletbdrm_setup_mode_config(adev);
>> +    ret = appletbdrm_setup_mode_config(adev);
>> +    if (ret)
>> +        return ret;
>> +
>> +    ret = drm_dev_register(drm, 0);
>> +    if (ret)
>> +        return dev_err_probe(dev, ret, "Failed to register DRM device\n");
>> +
>> +    drm_client_setup(drm, NULL);
> 
> You won't need a DRM client on the touch bar. Just clearing the display 
> should be enough.

Ah alright then

Reply via email to