* Re: [syzbot] [input?] INFO: task hung in __input_unregister_device (5)
From: Ricardo B. Marliere @ 2023-09-18 20:12 UTC (permalink / raw)
To: syzbot
Cc: dmitry.torokhov, linux-input, linux-kernel, linux-usb, rydberg,
syzkaller-bugs
In-Reply-To: <0000000000003d63410605a18363@google.com>
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git next-20230918
^ permalink raw reply
* Re: [syzbot] [input?] INFO: task hung in __input_unregister_device (5)
From: syzbot @ 2023-09-18 20:27 UTC (permalink / raw)
To: dmitry.torokhov, linux-input, linux-kernel, linux-usb, ricardo,
rydberg, syzkaller-bugs
In-Reply-To: <xjg3ozpednanoykpepnnnhvxlqwiwice3qrgrokmrhdutk426q@qxyryc3tygbl>
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
INFO: rcu detected stall in sys_openat
rcu: INFO: rcu_preempt detected expedited stalls on CPUs/tasks: {
1-....
} 2685 jiffies s: 937 root: 0x2/.
rcu: blocking rcu_node structures (internal RCU debug):
Sending NMI from CPU 0 to CPUs 1:
lowmem_reserve[]: 0 2814 6738 6738
NMI backtrace for cpu 1
CPU: 1 PID: 2385 Comm: udevd Not tainted 6.6.0-rc2-next-20230918-syzkaller-g7fc7222d9680 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/04/2023
RIP: 0010:io_serial_out+0x8f/0xb0 drivers/tty/serial/8250/8250_port.c:424
Code: 48 8d 7d 40 44 89 e1 48 b8 00 00 00 00 00 fc ff df 48 89 fa d3 e3 48 c1 ea 03 80 3c 02 00 75 18 66 03 5d 40 44 89 e8 89 da ee <5b> 5d 41 5c 41 5d c3 e8 25 ac 14 ff eb a4 e8 7e ac 14 ff eb e1 66
RSP: 0018:ffffc900001983a8 EFLAGS: 00000002
RAX: 0000000000000020 RBX: 00000000000003f8 RCX: 0000000000000000
RDX: 00000000000003f8 RSI: ffffffff82858b85 RDI: ffffffff8c15b0a0
RBP: ffffffff8c15b060 R08: 0000000000000001 R09: 000000000000001f
R10: 0000000000000000 R11: 205d314320202020 R12: 0000000000000000
R13: 0000000000000020 R14: ffffffff82858b20 R15: 0000000000000000
FS: 00007f32d1a12c80(0000) GS:ffff8881f6700000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000555557178da8 CR3: 000000010d711000 CR4: 00000000003506e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<NMI>
</NMI>
<IRQ>
serial_out drivers/tty/serial/8250/8250.h:122 [inline]
serial8250_console_fifo_write drivers/tty/serial/8250/8250_port.c:3378 [inline]
serial8250_console_write+0xd29/0x1060 drivers/tty/serial/8250/8250_port.c:3449
console_emit_next_record kernel/printk/printk.c:2910 [inline]
console_flush_all+0x4eb/0xfb0 kernel/printk/printk.c:2966
console_unlock+0x10c/0x260 kernel/printk/printk.c:3035
vprintk_emit+0x17f/0x5f0 kernel/printk/printk.c:2307
vprintk+0x7b/0x90 kernel/printk/printk_safe.c:45
_printk+0xc8/0x100 kernel/printk/printk.c:2332
show_free_areas+0x1257/0x2140 mm/show_mem.c:350
__show_mem+0x34/0x140 mm/show_mem.c:406
k_spec drivers/tty/vt/keyboard.c:667 [inline]
k_spec+0xea/0x140 drivers/tty/vt/keyboard.c:656
kbd_keycode drivers/tty/vt/keyboard.c:1524 [inline]
kbd_event+0xcc8/0x17c0 drivers/tty/vt/keyboard.c:1543
input_to_handler+0x382/0x4c0 drivers/input/input.c:132
input_pass_values.part.0+0x52f/0x7a0 drivers/input/input.c:161
input_pass_values drivers/input/input.c:148 [inline]
input_event_dispose+0x5ee/0x770 drivers/input/input.c:378
input_handle_event+0x11c/0xd80 drivers/input/input.c:406
input_repeat_key+0x251/0x340 drivers/input/input.c:2263
call_timer_fn+0x193/0x580 kernel/time/timer.c:1700
expire_timers kernel/time/timer.c:1751 [inline]
__run_timers+0x764/0xb10 kernel/time/timer.c:2022
run_timer_softirq+0x58/0xd0 kernel/time/timer.c:2035
__do_softirq+0x20a/0x94b kernel/softirq.c:553
invoke_softirq kernel/softirq.c:427 [inline]
__irq_exit_rcu kernel/softirq.c:632 [inline]
irq_exit_rcu+0xa7/0x110 kernel/softirq.c:644
sysvec_apic_timer_interrupt+0x8e/0xb0 arch/x86/kernel/apic/apic.c:1074
</IRQ>
<TASK>
asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:645
RIP: 0010:write_comp_data+0x3c/0x90 kernel/kcov.c:236
Code: 01 00 00 49 89 f8 65 48 8b 14 25 00 ab 03 00 a9 00 01 ff 00 74 0e 85 f6 74 59 8b 82 34 15 00 00 85 c0 74 4f 8b 82 10 15 00 00 <83> f8 03 75 44 48 8b 82 18 15 00 00 8b 92 14 15 00 00 48 8b 38 48
RSP: 0018:ffffc900005df948 EFLAGS: 00000246
RAX: 0000000000000000 RBX: ffff88811a524eb0 RCX: ffffffff81c38634
RDX: ffff88811555ba00 RSI: 0000000000000000 RDI: 0000000000000001
RBP: ffff8881063cce80 R08: 0000000000000001 R09: 0000000000000000
R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000001
R13: ffff8881063cceb0 R14: ffff8881016578d8 R15: ffffc900005dfc40
kernfs_dop_revalidate+0x104/0x5a0 fs/kernfs/dir.c:1141
d_revalidate fs/namei.c:861 [inline]
d_revalidate fs/namei.c:858 [inline]
lookup_fast+0x232/0x520 fs/namei.c:1654
walk_component+0x5b/0x5a0 fs/namei.c:1997
link_path_walk.part.0.constprop.0+0x71f/0xce0 fs/namei.c:2328
link_path_walk fs/namei.c:2253 [inline]
path_openat+0x231/0x29c0 fs/namei.c:3773
do_filp_open+0x1de/0x430 fs/namei.c:3804
do_sys_openat2+0x176/0x1e0 fs/open.c:1422
do_sys_open fs/open.c:1437 [inline]
__do_sys_openat fs/open.c:1453 [inline]
__se_sys_openat fs/open.c:1448 [inline]
__x64_sys_openat+0x175/0x210 fs/open.c:1448
do_syscall_x64 arch/x86/entry/common.c:51 [inline]
do_syscall_64+0x38/0xb0 arch/x86/entry/common.c:81
entry_SYSCALL_64_after_hwframe+0x63/0xcd
RIP: 0033:0x7f32d1b3d9a4
Code: 24 20 48 8d 44 24 30 48 89 44 24 28 64 8b 04 25 18 00 00 00 85 c0 75 2c 44 89 e2 48 89 ee bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> 3d 00 f0 ff ff 76 60 48 8b 15 55 a4 0d 00 f7 d8 64 89 02 48 83
RSP: 002b:00007ffddeb937a0 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
RAX: ffffffffffffffda RBX: 0000000000000008 RCX: 00007f32d1b3d9a4
RDX: 0000000000080000 RSI: 00007ffddeb938d8 RDI: 00000000ffffff9c
RBP: 00007ffddeb938d8 R08: 0000000000000008 R09: 0000000000000001
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000080000
R13: 0000561f3ccb1b42 R14: 0000000000000001 R15: 0000000000000000
</TASK>
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249728kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5424kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 226*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249728kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51762 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:66095
mapped:6906 shmem:167 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536646 free_pcp:2271 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:668kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249728kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5396kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 226*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249728kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51762 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:66123
mapped:6906 shmem:167 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2307 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:668kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5520kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51762 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:66123
mapped:6906 shmem:167 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2296 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:680kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5496kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51765 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:66134
mapped:6906 shmem:170 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2282 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:680kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6288kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51765 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:65943
mapped:6906 shmem:170 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2484 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:680kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6248kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51765 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:65943
mapped:6906 shmem:170 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2470 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:680kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6168kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51768 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:65963
mapped:6906 shmem:173 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2459 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:692kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6148kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51768 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:65989
mapped:6906 shmem:173 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2436 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:692kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6032kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51768 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:65989
mapped:6906 shmem:173 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2424 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:692kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6008kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51768 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:97 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:19 writeback:0
slab_reclaimable:4677 slab_unreclaimable:66018
mapped:6906 shmem:173 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536586 free_pcp:2401 free_cma:0
Node 0 active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:76kB writeback:0kB shmem:692kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249488kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:388kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:76kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5912kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 766*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249488kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51771 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66024
mapped:6906 shmem:176 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536523 free_pcp:2457 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:704kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249236kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6140kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249236kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51771 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66024
mapped:6906 shmem:176 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536523 free_pcp:2443 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:704kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3249236kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6060kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 211*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3249236kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51771 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66056
mapped:6906 shmem:176 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2482 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:704kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6240kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51771 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66056
mapped:6906 shmem:176 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2467 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:704kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6160kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51775 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66081
mapped:6906 shmem:180 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2460 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:720kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6152kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51775 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66081
mapped:6906 shmem:180 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2438 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:720kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6040kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51775 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66108
mapped:6906 shmem:180 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2425 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:720kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6012kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51775 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66136
mapped:6906 shmem:180 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2403 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:720kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5900kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51779 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66142
mapped:6906 shmem:184 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2392 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:736kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5880kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51779 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:66142
mapped:6906 shmem:184 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2377 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:736kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:5812kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51779 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:65925
mapped:6906 shmem:184 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2612 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:736kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6744kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51779 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:65929
mapped:6906 shmem:186 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2606 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:744kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6736kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51781 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:65929
mapped:6906 shmem:186 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2591 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:744kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6656kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51781 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:65957
mapped:6906 shmem:186 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536463 free_pcp:2572 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:744kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248996kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6600kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 196*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248996kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51781 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:111 inactive_anon:9444 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:65957
mapped:6906 shmem:186 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536403 free_pcp:2617 free_cma:0
Node 0 active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:744kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248756kB boost:0kB min:6108kB low:10124kB high:14140kB reserved_highatomic:0KB active_anon:444kB inactive_anon:37776kB active_file:33248kB inactive_file:173132kB unevictable:0kB writepending:28kB present:5242880kB managed:4018384kB mlocked:0kB bounce:0kB free_pcp:6760kB local_pcp:2016kB free_cma:0kB
lowmem_reserve[]: 0 0 0 0
Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 1*1024kB (U) 1*2048kB (M) 3*4096kB (M) = 15360kB
Node 0 DMA32: 2*4kB (M) 0*8kB 1*16kB (M) 2*32kB (M) 2*64kB (M) 2*128kB (M) 2*256kB (M) 2*512kB (M) 2*1024kB (M) 1*2048kB (M) 702*4096kB (M) = 2881496kB
Node 0 Normal: 703*4kB (UME) 973*8kB (UM) 181*16kB (UM) 18*32kB (UME) 10*64kB (UM) 2*128kB (UM) 0*256kB 2*512kB (UE) 1*1024kB (M) 2*2048kB (UM) 788*4096kB (M) = 3248756kB
Node 0 hugepages_total=4 hugepages_free=4 hugepages_surp=0 hugepages_size=2048kB
51785 total pagecache pages
0 pages in swap cache
Free swap = 124996kB
Total swap = 124996kB
2097051 pages RAM
0 pages HighMem/MovableOnly
367319 pages reserved
Mem-Info:
active_anon:125 inactive_anon:9445 isolated_anon:0
active_file:8312 inactive_file:43283 isolated_file:0
unevictable:0 dirty:0 writeback:7
slab_reclaimable:4677 slab_unreclaimable:65981
mapped:6906 shmem:190 pagetables:484
sec_pagetables:0 bounce:0
kernel_misc_reclaimable:0
free:1536403 free_pcp:2597 free_cma:0
Node 0 active_anon:500kB inactive_anon:37780kB active_file:33248kB inactive_file:173132kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:27624kB dirty:0kB writeback:28kB shmem:760kB writeback_tmp:0kB kernel_stack:4572kB pagetables:1936kB sec_pagetables:0kB all_unreclaimable? no
Node 0 DMA free:15360kB boost:0kB min:20kB low:32kB high:44kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15992kB managed:15360kB mlocked:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
lowmem_reserve[]: 0 2814 6738 6738
Node 0 DMA32 free:2881496kB boost:0kB min:4380kB low:7260kB high:10140kB reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:3129332kB managed:2885184kB mlocked:0kB bounce:0kB free_pcp:3688kB local_pcp:2728kB free_cma:0kB
lowmem_reserve[]: 0 0 3924 3924
Node 0 Normal free:3248756kB boost:0kB min:6108kB low:10
Tested on:
commit: 7fc7222d Add linux-next specific files for 20230918
git tree: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git next-20230918
console output: https://syzkaller.appspot.com/x/log.txt?x=15d2c528680000
kernel config: https://syzkaller.appspot.com/x/.config?x=bf7477d42462473a
dashboard link: https://syzkaller.appspot.com/bug?extid=78e2288f58b881ed3c45
compiler: gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
Note: no patches were applied.
^ permalink raw reply
* Re: [PATCH] Input: powermate - fix use-after-free in powermate_config_complete
From: Dmitry Torokhov @ 2023-09-18 22:10 UTC (permalink / raw)
To: Javier Carrasco Cruz
Cc: linux-input, linux-kernel, syzbot+0434ac83f907a1dbdd1e
In-Reply-To: <CAPnbTwKqNghcoPj-FGQQxo0xr-AYTm8pYBYCUgyKT6VxZpZCOA@mail.gmail.com>
On Mon, Sep 18, 2023 at 06:51:49AM +0200, Javier Carrasco Cruz wrote:
> Hi,
>
> There's an obvious error in the patch I introduced when cleaningup
> (urb->status should be used instead of just status). I will send a v2.
I think what we need is call to usb_kill_urb(pm->config) in
powermate_disconnect(), right after call to input_unregister_device().
Thanks.
--
Dmitry
^ permalink raw reply
* [PATCH V2 0/2] HID: touchscreen: add himax hid-over-spi driver
From: Tylor Yang @ 2023-09-19 2:49 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, jikos,
benjamin.tissoires, linux-input, devicetree, linux-kernel
Cc: poyuan_chang, jingliang, hbarnor, Tylor Yang
Hello,
This patch series adds the driver for Himax HID-over-SPI touchscreen ICs.
This driver takes a position in [1], it intends to take advantage of SPI
transfer speed and HID interface. The userspace program [2] can use ioctl
through general hidraw interface provided by kernel HID sub-system to
control touch IC without creating special file nodes.
Patch 1 adds the Maintainer and devicetree bindings document for driver.
Patch 2 adds the driver itself, Kconfig and Makefiles.
[1] Overview:
+--------------------------------+
| himax hid-over-spi TPIC driver |
+--------------------------------+
| +-----------+ +-----------+ | +-----------+ +-----------+
| | Device #1 | | Device #i | | | Device #j | | Device #k |
| +-----------+ +-----------+ | +-----------+ +-----------+
| \\ // | \\ //
| +------------+ | +------------+
| | I/O Driver | | | I/O Driver |
| +------------+ | +------------+
| || | ||
| +------------------+ | +------------------+
| | Transport Driver | | | Transport Driver |
| +------------------+ | +------------------+
| \___ | ___/
+--------------------------------+ /
\ /
+----------------+
| HID Core |
+----------------+
/ | | \
/ | | \
____________/ | | \_________________
/ | | \
/ | | \
+----------------+ +-----------+ +------------------+ +------------------+
| Generic Driver | | MT Driver | | Custom Driver #1 | | Custom Driver #2 |
+----------------+ +-----------+ +------------------+ +------------------+
[2] https://github.com/HimaxSoftware/hx_hid_util/tree/hid_func
version 2 changes
-rename bindings name from himax,hid-over-hx-spi to himax,hid-over-spi
-remove "himax,fw_size", "himax,heatmap_16bits", "himax,fw_in_flash", "himax,pid"
and "himax,boot_time_fw_upgrade" items from dt-bindings and related code
-add "himax,id-gpios" for user to specify hardware id pins
-rename "himax,ic_det_delay" to "himax,ic-det-delay-ms" and
"himax,ic_resume_delay" to "himax,ic-resume-delay-ms"
-MAINTAINER position adjust: move info to the position by letter order
-Kconfig add HX_HID_HAS_FLASH option to replace "himax,fw_in_flash"
-HIMAX_DRIVER_VER upadte from 0.0.10 to 0.0.11
-remove unused includes and description in hx_hid.c
-add code to map id-gpios value to PID
-correct variable naming style and misspellings in hx_ic_core.c/h
-remove unnecessary global varaible debug_flag
Tylor Yang (2):
dt-bindings: input: Introduce Himax HID-over-SPI device
HID: touchscreen: Add initial support for Himax HID-over-SPI
.../bindings/input/himax,hid-over-spi.yaml | 109 +
MAINTAINERS | 7 +
drivers/hid/Kconfig | 2 +
drivers/hid/Makefile | 2 +
drivers/hid/hx-hid/Kconfig | 55 +
drivers/hid/hx-hid/Makefile | 35 +
drivers/hid/hx-hid/hx_acpi.c | 96 +
drivers/hid/hx-hid/hx_core.c | 1626 ++++++++
drivers/hid/hx-hid/hx_core.h | 487 +++
drivers/hid/hx-hid/hx_hid.c | 757 ++++
drivers/hid/hx-hid/hx_hid.h | 96 +
drivers/hid/hx-hid/hx_ic_83102j.c | 345 ++
drivers/hid/hx-hid/hx_ic_83102j.h | 42 +
drivers/hid/hx-hid/hx_ic_core.c | 3260 +++++++++++++++++
drivers/hid/hx-hid/hx_ic_core.h | 792 ++++
drivers/hid/hx-hid/hx_inspect.c | 652 ++++
drivers/hid/hx-hid/hx_inspect.h | 104 +
drivers/hid/hx-hid/hx_of.c | 171 +
drivers/hid/hx-hid/hx_plat.c | 480 +++
drivers/hid/hx-hid/hx_plat.h | 30 +
20 files changed, 9148 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
create mode 100644 drivers/hid/hx-hid/Kconfig
create mode 100644 drivers/hid/hx-hid/Makefile
create mode 100644 drivers/hid/hx-hid/hx_acpi.c
create mode 100644 drivers/hid/hx-hid/hx_core.c
create mode 100644 drivers/hid/hx-hid/hx_core.h
create mode 100644 drivers/hid/hx-hid/hx_hid.c
create mode 100644 drivers/hid/hx-hid/hx_hid.h
create mode 100644 drivers/hid/hx-hid/hx_ic_83102j.c
create mode 100644 drivers/hid/hx-hid/hx_ic_83102j.h
create mode 100644 drivers/hid/hx-hid/hx_ic_core.c
create mode 100644 drivers/hid/hx-hid/hx_ic_core.h
create mode 100644 drivers/hid/hx-hid/hx_inspect.c
create mode 100644 drivers/hid/hx-hid/hx_inspect.h
create mode 100644 drivers/hid/hx-hid/hx_of.c
create mode 100644 drivers/hid/hx-hid/hx_plat.c
create mode 100644 drivers/hid/hx-hid/hx_plat.h
--
2.25.1
^ permalink raw reply
* [PATCH V2 1/2] dt-bindings: input: Introduce Himax HID-over-SPI device
From: Tylor Yang @ 2023-09-19 2:49 UTC (permalink / raw)
To: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, jikos,
benjamin.tissoires, linux-input, devicetree, linux-kernel
Cc: poyuan_chang, jingliang, hbarnor, Tylor Yang
In-Reply-To: <20230919024943.3088916-1-tylor_yang@himax.corp-partner.google.com>
The Himax HID-over-SPI framework support for Himax touchscreen ICs
that report HID packet through SPI bus. The driver core need reset
pin to meet reset timing spec. of IC. An interrupt pin to disable
and enable interrupt when suspend/resume. An optional power control
pin if target board needed. Panel id pins for identify panel is also
an option.
Additional optional arguments:
ic-det-delay-ms and ic-resume-delay-ms are using to solve runtime
conditions.
This patch also add maintainer of this driver.
Signed-off-by: Tylor Yang <tylor_yang@himax.corp-partner.google.com>
---
.../bindings/input/himax,hid-over-spi.yaml | 109 ++++++++++++++++++
MAINTAINERS | 6 +
2 files changed, 115 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
diff --git a/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml b/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
new file mode 100644
index 000000000000..3ee3a89842ac
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
@@ -0,0 +1,109 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/input/himax,hid-over-spi.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Himax TDDI devices using SPI to send HID packets
+
+maintainers:
+ - Tylor Yang <tylor_yang@himax.corp-partner.google.com>
+
+description: |
+ Support the Himax TDDI devices which using SPI interface to acquire
+ HID packets from the device. The device needs to be initialized using
+ Himax protocol before it start sending HID packets.
+
+properties:
+ compatible:
+ const: himax,hid-over-spi
+
+ reg:
+ maxItems: 1
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 0
+
+ interrupts:
+ maxItems: 1
+
+ himax,rst-gpio:
+ maxItems: 1
+ description: Reset device, active low signal.
+
+ himax,irq-gpio:
+ maxItems: 1
+ description: Interrupt request, active low signal.
+
+ himax,3v3-gpio:
+ maxItems: 1
+ description: GPIO to control 3.3V power supply.
+
+ himax,id-gpios:
+ maxItems: 8
+ description: GPIOs to read physical Panel ID. Optional.
+
+ spi-cpha: true
+ spi-cpol: true
+
+ himax,ic-det-delay-ms:
+ description:
+ Due to TDDI properties, the TPIC detection timing must after the
+ display panel initialized. This property is used to specify the
+ delay time when TPIC detection and display panel initialization
+ timing are overlapped. How much milliseconds to delay before TPIC
+ detection start.
+
+ himax,ic-resume-delay-ms:
+ description:
+ Due to TDDI properties, the TPIC resume timing must after the
+ display panel resumed. This property is used to specify the
+ delay time when TPIC resume and display panel resume
+ timing are overlapped. How much milliseconds to delay before TPIC
+ resume start.
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - himax,rst-gpio
+ - himax,irq-gpio
+
+unevaluatedProperties: false
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ #include <dt-bindings/gpio/gpio.h>
+
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ touchscreen@0 {
+ compatible = "himax,hid-over-spi";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0x0>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&touch_pins>;
+ pinctrl-names = "default";
+
+ spi-max-frequency = <12500000>;
+ spi-cpha;
+ spi-cpol;
+
+ himax,rst-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
+ himax,irq-gpio = <&gpio1 7 GPIO_ACTIVE_LOW>;
+ himax,3v3-gpio = <&gpio1 6 GPIO_ACTIVE_HIGH>;
+ himax,ic-det-delay-ms = <500>;
+ himax,ic-resume-delay-ms = <100>;
+ };
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index bf0f54c24f81..452701261bec 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9323,6 +9323,12 @@ L: linux-kernel@vger.kernel.org
S: Maintained
F: drivers/misc/hisi_hikey_usb.c
+HIMAX HID OVER SPI TOUCHSCREEN SUPPORT
+M: Tylor Yang <tylor_yang@himax.corp-partner.google.com>
+L: linux-input@vger.kernel.org
+S: Supported
+F: Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
+
HIMAX HX83112B TOUCHSCREEN SUPPORT
M: Job Noorman <job@noorman.info>
L: linux-input@vger.kernel.org
--
2.25.1
^ permalink raw reply related
* Re: [PATCH] HID: i2c-hid: fix handling of unpopulated devices
From: Johan Hovold @ 2023-09-19 7:07 UTC (permalink / raw)
To: Doug Anderson
Cc: Johan Hovold, Jiri Kosina, Benjamin Tissoires, linux-input,
linux-kernel, Maxime Ripard, Dmitry Torokhov, LinusW, Rob Herring,
Krzysztof Kozlowski, Conor Dooley,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:GPIO SUBSYSTEM
In-Reply-To: <CAD=FV=Wfwvp-SbGrdO5VJcjG42njkApJPB7wnY-YYa1_-O0JWQ@mail.gmail.com>
On Mon, Sep 18, 2023 at 08:00:15AM -0700, Doug Anderson wrote:
> On Mon, Sep 18, 2023 at 6:00 AM Johan Hovold <johan+linaro@kernel.org> wrote:
> > A recent commit reordered probe so that the interrupt line is now
> > requested before making sure that the device exists.
> >
> > This breaks machines like the Lenovo ThinkPad X13s which rely on the
> > HID driver to probe second-source devices and only register the variant
> > that is actually populated. Specifically, the interrupt line may now
> > already be (temporarily) claimed when doing asynchronous probing of the
> > touchpad:
> >
> > genirq: Flags mismatch irq 191. 00082008 (hid-over-i2c) vs. 00082008 (hid-over-i2c)
> > i2c_hid_of 21-0015: Could not register for hid-over-i2c interrupt, irq = 191, ret = -16
> > i2c_hid_of: probe of 21-0015 failed with error -16
> >
> > Fix this by restoring the old behaviour of first making sure the device
> > exists before requesting the interrupt line.
> Ugh, sorry for the regression. :( It actually turns out that I've been
> digging into this same issue on a different device (see
> mt8173-elm-hana). I hadn't realized that it was a regression caused by
> my recent change, though.
>
> I haven't yet reviewed your change in detail, but to me it seems like
> at most a short term fix. Specifically, I think the way that this has
> been working has been partially via hacks and partially via luck. Let
> me explain...
>
> Currently, to make this work the `sc8280xp-lenovo-thinkpad-x13s.dts`
> file has a hack in it. You can see that the `tpad_default` pinctrl
> entry has been moved up to the i2c bus level even though it doesn't
> belong there (it should be in each trackpad). This is because,
> otherwise, you would have run into similar type problems as the device
> core would have failed to claim the pin for one of the devices.
Ḯ'm well aware of that and it was mentioned in the commit message for
4367d763698c ("arm64: dts: qcom: sc8280xp-x13s: enable alternate
touchpad") as well as discussed briefly with Rob here:
https://lore.kernel.org/all/Y3teH14YduOQQkNn@hovoldconsulting.com/
> Currently, we're getting a bit lucky with
> `sc8280xp-lenovo-thinkpad-x13s.dts` that there are no other shared
> resources between the two devices besides the interrupt. Specifically
> a number of trackpads / touchscreens also have a "reset" GPIO that
> needs to be power sequenced properly in order to talk to the
> touchscreen. In this case we'll be stuck again because both instances
> would need to grab the "reset" GPIO before being able to confirm if
> the device is there.
Right, this will only work for fairly simple cases, but we do have a few
of those in tree since some years back.
> This is an old problem. The first I remember running into it was back
> in 2015 on rk3288-veryron-minnie. We had a downstream hack to make
> this work with -EPROBE_DEFER. https://crrev.com/c/266224. By the time
> we shipped, though, we decided not to do the 2nd sourcing. After that
> I always NAKed HW designs like this, but I guess that didn't help with
> Mediatek hardware I wasn't involved with. :( ...and, of course, it
> didn't help with devices that aren't Chromebooks like the Thinkpad
> X13S.
>
> FWIW: as a short term solution, we ended up forcing synchronous probe
> in <https://crrev.com/c/4857566>. This has some pretty serious boot
> time implications, but it's also very simple.
>
>
> I'm actively working on coming up with a better solution here. My
> current thought is that that maybe we want to do:
>
> 1. Undo the hack in the device tree and have each "2nd source" have
> its own pinctrl entry.
>
> 2. In core pinctrl / device probing code detect the pinctrl conflict
> and only probe one of the devices at a time.
>
> ...that sounds like a nice/elegant solution and I'm trying to make it
> work, though it does have some downsides. Namely:
>
> a) It requires "dts" changes to work. Namely we've got to undo the
> hack that pushed the pinctrl up to the controller level (or, in the
> case of mt8173-elm-hana, that just totally skipped the "pinctrl" entry
> altogether). Unfortunately those same "dts" changes will actually make
> things _worse_ if you don't have the code change. :(
Right, a proper solution will likely require an updated DT.
> b) It only handles the case where the resources shared by 2nd sourcing
> are expressed by pinctrl. In a practical sense this seems to be most
> cases, but conceivably you could imagine running into this situation
> with a non-pin-related shared resource.
Indeed.
> c) To solve this in the core, we have to make sure we properly handle
> (without hanging/failing) multiple partially-conflicting devices and
> devices that might acquire resources in arbitrary orders.
>
> Though the above solution detecting the pinctrl conflicts sounds
> appealing and I'm currently working on prototyping it, I'm still not
> 100% convinced. I'm worried about the above downsides.
Yes, I agree that we'd need to take a broader look at this and not just
focus on the immediate pinctrl issue.
> Personally, I feel like we could add information to the device tree
> that would help us out. The question is: is this an abuse of device
> tree for something that Linux ought to be able to figure out on its
> own, or is it OK? To make it concrete, I was thinking about something
> like this:
>
> / {
> tp_ex_group: trackpad-exclusion-group {
> members = <&tp1>, <&tp2>, <&tp3>;
> };
> };
>
> &i2c_bus {
> tp1: trackpad@10 {
> ...
> mutual-exclusion-group = <&tp_ex_group>;
> };
> tp2: trackpad@20 {
> ...
> mutual-exclusion-group = <&tp_ex_group>;
> };
> tp3: trackpad@30 {
> ...
> mutual-exclusion-group = <&tp_ex_group>;
> };
> };
>
> Then the device core would know not to probe devices in the same
> "mutual-exclusion-group" at the same time.
>
> If DT folks are OK with the "mutual-exclusion-group" idea then I'll
> probably backburner my attempt to make this work on the pinctrl level
> and go with that.
I expressed something along these lines in the thread above:
It seems we'd need some way to describe the devices as mutually
exclusive...
but given that we had prior art for handling simple cases and due to
lack of time, I left it on the ever-growing todo list.
But regardless of what a long-term proper solution to this may look
like, we need to fix the regression in 6.6-rc1 by restoring the old
behaviour.
Johan
^ permalink raw reply
* Re: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB wakeup
From: Kai-Heng Feng @ 2023-09-19 7:36 UTC (permalink / raw)
To: srinivas pandruvada
Cc: Xu, Even, jikos@kernel.org, benjamin.tissoires@redhat.com,
linux-pm@vger.kernel.org, linux-pci@vger.kernel.org,
Lee, Jian Hui, Zhang, Lixu, Ba, Najumon,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <bbbf36724d63f7532696a960a9d56d7ccd5a5bee.camel@linux.intel.com>
On Mon, Sep 18, 2023 at 11:57 PM srinivas pandruvada
<srinivas.pandruvada@linux.intel.com> wrote:
>
> Hi Kai-Heng,
> On Mon, 2023-09-18 at 09:17 +0800, Kai-Heng Feng wrote:
> > Hi Even,
> >
> > On Mon, Sep 18, 2023 at 8:33 AM Xu, Even <even.xu@intel.com> wrote:
> > >
> > > Hi, Kai-Heng,
> > >
> > > I just got feedback, for testing EHL S5 wakeup feature, you need
> > > several steps to setup and access
> > > "https://portal.devicewise.com/things/browse" to trigger wake.
> > > But currently, our test account of this website are all out of
> > > data.
> > > So maybe you need double check with the team who required you
> > > preparing the patch for the verification.
> >
> > The patch is to solve the GPE refcount overflow, while maintaining S5
> > wakeup. I don't have any mean to test S5 wake.
> >
> The issue is not calling acpi_disable_gpe(). To reduce the scope of
> change can we just add that instead of a adding new callbacks. This way
> scope is reduced.
This patch does exactly the same thing by letting PCI and ACPI handle
the PME and GPE.
Though the change seems to be bigger, it actually reduces the duped
code, while keep the S5 wakeup ability intact.
Kai-Heng
>
> Something like the attached
>
> Thanks,
> Srinivas
>
>
>
>
>
>
> > So if you also don't have ways to verify S5 wake functionality, maybe
> > we can simply revert 2e23a70edabe ("HID: intel-ish-hid: ipc: finish
> > power flow for EHL OOB") as alternative?
> >
> > Kai-Heng
> >
> > > Thanks!
> > >
> > > Best Regards,
> > > Even Xu
> > >
> > > -----Original Message-----
> > > From: Xu, Even
> > > Sent: Friday, September 15, 2023 3:27 PM
> > > To: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > Cc: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>;
> > > jikos@kernel.org; benjamin.tissoires@redhat.com;
> > > linux-pm@vger.kernel.org; linux-pci@vger.kernel.org; Lee, Jian Hui
> > > <jianhui.lee@canonical.com>; Zhang, Lixu <Lixu.Zhang@intel.com>;
> > > Ba, Najumon <najumon.ba@intel.com>; linux-input@vger.kernel.org;
> > > linux-kernel@vger.kernel.org
> > > Subject: RE: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB wakeup
> > >
> > > Hi, Kai-Heng,
> > >
> > > I am also not familiar with this S5 wakeup test case.
> > > I already sent out mails to ask for help on it.
> > > Will come back to you once I get feedback.
> > > Thanks!
> > >
> > > Best Regards,
> > > Even Xu
> > >
> > > -----Original Message-----
> > > From: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > Sent: Friday, September 15, 2023 2:01 PM
> > > To: Xu, Even <even.xu@intel.com>
> > > Cc: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>;
> > > jikos@kernel.org; benjamin.tissoires@redhat.com;
> > > linux-pm@vger.kernel.org; linux-pci@vger.kernel.org; Lee, Jian Hui
> > > <jianhui.lee@canonical.com>; Zhang, Lixu <lixu.zhang@intel.com>;
> > > Ba, Najumon <najumon.ba@intel.com>; linux-input@vger.kernel.org;
> > > linux-kernel@vger.kernel.org
> > > Subject: Re: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB wakeup
> > >
> > > Hi Even,
> > >
> > > On Fri, Sep 15, 2023 at 1:31 PM Xu, Even <even.xu@intel.com> wrote:
> > > >
> > > > Hi, Srinivas,
> > > >
> > > > Sure, I will test it.
> > > > As long term not working on EHL, I doesn't have EHL board on hand
> > > > right now, I can test this patch on other ISH related platforms.
> > > > From the patch, it's focus on EHL platform, I assume Kai-Heng
> > > > already verified the function on EHL board.
> > >
> > > I only made sure the GPE overflow issue is fixed by the patch, but
> > > I didn't test the S5 wakeup.
> > > That's because I don't know how to test it on the EHL system I
> > > have.
> > > I'll test it if you can let me know how to test the S5 wakeup.
> > >
> > > Kai-Heng
> > >
> > > > I don't think it will take effect on other platforms, anyway, I
> > > > will test it on the platforms I have to provide cross platform
> > > > verification.
> > > >
> > > > Thanks!
> > > >
> > > > Best Regards,
> > > > Even Xu
> > > >
> > > > -----Original Message-----
> > > > From: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>
> > > > Sent: Friday, September 15, 2023 12:11 AM
> > > > To: Kai-Heng Feng <kai.heng.feng@canonical.com>;
> > > > jikos@kernel.org;
> > > > benjamin.tissoires@redhat.com
> > > > Cc: linux-pm@vger.kernel.org; linux-pci@vger.kernel.org; Lee,
> > > > Jian Hui
> > > > <jianhui.lee@canonical.com>; Xu, Even <even.xu@intel.com>; Zhang,
> > > > Lixu
> > > > <lixu.zhang@intel.com>; Ba, Najumon <najumon.ba@intel.com>;
> > > > linux-input@vger.kernel.org; linux-kernel@vger.kernel.org
> > > > Subject: Re: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB
> > > > wakeup
> > > >
> > > > Hi Even,
> > > >
> > > > On Thu, 2023-09-14 at 12:18 +0800, Kai-Heng Feng wrote:
> > > > > System cannot suspend more than 255 times because the driver
> > > > > doesn't
> > > > > have corresponding acpi_disable_gpe() for acpi_enable_gpe(), so
> > > > > the
> > > > > GPE refcount overflows.
> > > > >
> > > > > Since PCI core and ACPI core already handles PCI PME wake and
> > > > > GPE
> > > > > wake when the device has wakeup capability, use
> > > > > device_init_wakeup()
> > > > > to let them do the wakeup setting work.
> > > > >
> > > > > Also add a shutdown callback which uses pci_prepare_to_sleep()
> > > > > to
> > > > > let PCI and ACPI set OOB wakeup for S5.
> > > > >
> > > > Please test this change.
> > > >
> > > > Thanks,
> > > > Srinivas
> > > >
> > > > > Fixes: 2e23a70edabe ("HID: intel-ish-hid: ipc: finish power
> > > > > flow for
> > > > > EHL OOB")
> > > > > Cc: Jian Hui Lee <jianhui.lee@canonical.com>
> > > > > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > > > ---
> > > > > drivers/hid/intel-ish-hid/ipc/pci-ish.c | 59
> > > > > +++++++----------------
> > > > > --
> > > > > 1 file changed, 15 insertions(+), 44 deletions(-)
> > > > >
> > > > > diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > index 55cb25038e63..65e7eeb2fa64 100644
> > > > > --- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > +++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > @@ -119,42 +119,6 @@ static inline bool
> > > > > ish_should_leave_d0i3(struct
> > > > > pci_dev *pdev)
> > > > > return !pm_resume_via_firmware() || pdev->device ==
> > > > > CHV_DEVICE_ID; }
> > > > >
> > > > > -static int enable_gpe(struct device *dev) -{ -#ifdef
> > > > > CONFIG_ACPI
> > > > > - acpi_status acpi_sts;
> > > > > - struct acpi_device *adev;
> > > > > - struct acpi_device_wakeup *wakeup;
> > > > > -
> > > > > - adev = ACPI_COMPANION(dev);
> > > > > - if (!adev) {
> > > > > - dev_err(dev, "get acpi handle failed\n");
> > > > > - return -ENODEV;
> > > > > - }
> > > > > - wakeup = &adev->wakeup;
> > > > > -
> > > > > - acpi_sts = acpi_enable_gpe(wakeup->gpe_device, wakeup-
> > > > > > gpe_number);
> > > > > - if (ACPI_FAILURE(acpi_sts)) {
> > > > > - dev_err(dev, "enable ose_gpe failed\n");
> > > > > - return -EIO;
> > > > > - }
> > > > > -
> > > > > - return 0;
> > > > > -#else
> > > > > - return -ENODEV;
> > > > > -#endif
> > > > > -}
> > > > > -
> > > > > -static void enable_pme_wake(struct pci_dev *pdev) -{
> > > > > - if ((pci_pme_capable(pdev, PCI_D0) ||
> > > > > - pci_pme_capable(pdev, PCI_D3hot) ||
> > > > > - pci_pme_capable(pdev, PCI_D3cold)) &&
> > > > > !enable_gpe(&pdev-
> > > > > > dev)) {
> > > > > - pci_pme_active(pdev, true);
> > > > > - dev_dbg(&pdev->dev, "ish ipc driver pme wake
> > > > > enabled\n");
> > > > > - }
> > > > > -}
> > > > > -
> > > > > /**
> > > > > * ish_probe() - PCI driver probe callback
> > > > > * @pdev: pci device
> > > > > @@ -225,7 +189,7 @@ static int ish_probe(struct pci_dev *pdev,
> > > > > const
> > > > > struct pci_device_id *ent)
> > > > >
> > > > > /* Enable PME for EHL */
> > > > > if (pdev->device == EHL_Ax_DEVICE_ID)
> > > > > - enable_pme_wake(pdev);
> > > > > + device_init_wakeup(dev, true);
> > > > >
> > > > > ret = ish_init(ishtp);
> > > > > if (ret)
> > > > > @@ -248,6 +212,19 @@ static void ish_remove(struct pci_dev
> > > > > *pdev)
> > > > > ish_device_disable(ishtp_dev); }
> > > > >
> > > > > +
> > > > > +/**
> > > > > + * ish_shutdown() - PCI driver shutdown callback
> > > > > + * @pdev: pci device
> > > > > + *
> > > > > + * This function sets up wakeup for S5 */ static void
> > > > > +ish_shutdown(struct pci_dev *pdev) {
> > > > > + if (pdev->device == EHL_Ax_DEVICE_ID)
> > > > > + pci_prepare_to_sleep(pdev); }
> > > > > +
> > > > > static struct device __maybe_unused *ish_resume_device;
> > > > >
> > > > > /* 50ms to get resume response */
> > > > > @@ -370,13 +347,6 @@ static int __maybe_unused
> > > > > ish_resume(struct
> > > > > device *device)
> > > > > struct pci_dev *pdev = to_pci_dev(device);
> > > > > struct ishtp_device *dev = pci_get_drvdata(pdev);
> > > > >
> > > > > - /* add this to finish power flow for EHL */
> > > > > - if (dev->pdev->device == EHL_Ax_DEVICE_ID) {
> > > > > - pci_set_power_state(pdev, PCI_D0);
> > > > > - enable_pme_wake(pdev);
> > > > > - dev_dbg(dev->devc, "set power state to D0 for
> > > > > ehl\n");
> > > > > - }
> > > > > -
> > > > > ish_resume_device = device;
> > > > > dev->resume_flag = 1;
> > > > >
> > > > > @@ -392,6 +362,7 @@ static struct pci_driver ish_driver = {
> > > > > .id_table = ish_pci_tbl,
> > > > > .probe = ish_probe,
> > > > > .remove = ish_remove,
> > > > > + .shutdown = ish_shutdown,
> > > > > .driver.pm = &ish_pm_ops,
> > > > > };
> > > > >
> > > >
>
^ permalink raw reply
* Pytanie o samochód
From: Jakub Lemczak @ 2023-09-19 7:35 UTC (permalink / raw)
To: linux-input
Dzień dobry,
Czy interesuje Państwa rozwiązanie umożliwiające monitorowanie samochodów firmowych oraz optymalizację kosztów ich utrzymania?
Pozdrawiam
Jakub Lemczak
^ permalink raw reply
* [PATCH v2 0/9] Support light color temperature and chromaticity
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
This series adds support for light color temperature and chromaticity.
v1->v2:
*Rename the series.
*Rename als_illum to als channel as it supports other channels.
*Update patch description to include same reading for the two existing
channels to use channel index to support more hub attributes.
*Keep line length under 80chars in hid-sensor-als.
*Add new channel type IIO_COLORTEMP.
*Update patch description and its subject to add channel type for
chromaticity.
Basavaraj Natikar (9):
iio: hid-sensor-als: Use channel index to support more hub attributes
iio: Add channel type light color temperature
iio: hid-sensor-als: Add light color temperature support
HID: amd_sfh: Add support for light color temperature
HID: amd_sfh: Add support for SFH1.1 light color temperature
iio: Add channel type for chromaticity
iio: hid-sensor-als: Add light chromaticity support
HID: amd_sfh: Add light chromaticity support
HID: amd_sfh: Add light chromaticity for SFH1.1
Documentation/ABI/testing/sysfs-bus-iio | 15 ++
.../hid_descriptor/amd_sfh_hid_desc.c | 7 +
.../hid_descriptor/amd_sfh_hid_desc.h | 3 +
.../hid_descriptor/amd_sfh_hid_report_desc.h | 21 +++
drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c | 9 ++
.../amd-sfh-hid/sfh1_1/amd_sfh_interface.h | 15 ++
drivers/iio/industrialio-core.c | 2 +
drivers/iio/light/hid-sensor-als.c | 130 +++++++++++++++---
include/linux/hid-sensor-ids.h | 4 +
include/uapi/linux/iio/types.h | 2 +
tools/iio/iio_event_monitor.c | 3 +
11 files changed, 195 insertions(+), 16 deletions(-)
--
2.25.1
^ permalink raw reply
* [PATCH v2 1/9] iio: hid-sensor-als: Use channel index to support more hub attributes
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
Sensor hub attributes can be extended to support more channels. Repeat
the reading for the two existing channels and store them separately. It
still operates in the same manner as before where there was just one
entry. So in order to support more sensor hub attributes for ALS use
channel index to get specific sensor hub attributes.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
drivers/iio/light/hid-sensor-als.c | 38 ++++++++++++++++--------------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
index eb1aedad7edc..efb1f8862b28 100644
--- a/drivers/iio/light/hid-sensor-als.c
+++ b/drivers/iio/light/hid-sensor-als.c
@@ -24,7 +24,7 @@ enum {
struct als_state {
struct hid_sensor_hub_callbacks callbacks;
struct hid_sensor_common common_attributes;
- struct hid_sensor_hub_attribute_info als_illum;
+ struct hid_sensor_hub_attribute_info als[CHANNEL_SCAN_INDEX_MAX];
struct {
u32 illum[CHANNEL_SCAN_INDEX_MAX];
u64 timestamp __aligned(8);
@@ -99,8 +99,8 @@ static int als_read_raw(struct iio_dev *indio_dev,
switch (chan->scan_index) {
case CHANNEL_SCAN_INDEX_INTENSITY:
case CHANNEL_SCAN_INDEX_ILLUM:
- report_id = als_state->als_illum.report_id;
- min = als_state->als_illum.logical_minimum;
+ report_id = als_state->als[chan->scan_index].report_id;
+ min = als_state->als[chan->scan_index].logical_minimum;
address = HID_USAGE_SENSOR_LIGHT_ILLUM;
break;
default:
@@ -242,22 +242,24 @@ static int als_parse_report(struct platform_device *pdev,
struct als_state *st)
{
int ret;
+ int i;
+
+ for (i = 0; i <= CHANNEL_SCAN_INDEX_ILLUM; ++i) {
+ ret = sensor_hub_input_get_attribute_info(hsdev,
+ HID_INPUT_REPORT,
+ usage_id,
+ HID_USAGE_SENSOR_LIGHT_ILLUM,
+ &st->als[i]);
+ if (ret < 0)
+ return ret;
+ als_adjust_channel_bit_mask(channels, i, st->als[i].size);
+
+ dev_dbg(&pdev->dev, "als %x:%x\n", st->als[i].index,
+ st->als[i].report_id);
+ }
- ret = sensor_hub_input_get_attribute_info(hsdev, HID_INPUT_REPORT,
- usage_id,
- HID_USAGE_SENSOR_LIGHT_ILLUM,
- &st->als_illum);
- if (ret < 0)
- return ret;
- als_adjust_channel_bit_mask(channels, CHANNEL_SCAN_INDEX_INTENSITY,
- st->als_illum.size);
- als_adjust_channel_bit_mask(channels, CHANNEL_SCAN_INDEX_ILLUM,
- st->als_illum.size);
-
- dev_dbg(&pdev->dev, "als %x:%x\n", st->als_illum.index,
- st->als_illum.report_id);
-
- st->scale_precision = hid_sensor_format_scale(usage_id, &st->als_illum,
+ st->scale_precision = hid_sensor_format_scale(usage_id,
+ &st->als[CHANNEL_SCAN_INDEX_INTENSITY],
&st->scale_pre_decml, &st->scale_post_decml);
return ret;
--
2.25.1
^ permalink raw reply related
* [PATCH v2 2/9] iio: Add channel type light color temperature
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support light color
temperature, which is measured in kelvin. Thus, add channel type light
color temperature.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
Documentation/ABI/testing/sysfs-bus-iio | 7 +++++++
drivers/iio/industrialio-core.c | 1 +
include/uapi/linux/iio/types.h | 1 +
tools/iio/iio_event_monitor.c | 2 ++
4 files changed, 11 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
index a2854dc9a839..4cf7ed9ca57b 100644
--- a/Documentation/ABI/testing/sysfs-bus-iio
+++ b/Documentation/ABI/testing/sysfs-bus-iio
@@ -2179,3 +2179,10 @@ Contact: linux-iio@vger.kernel.org
Description:
Number of conditions that must occur, during a running
period, before an event is generated.
+
+What: /sys/bus/iio/devices/iio:deviceX/in_colortemp_raw
+KernelVersion: 6.7
+Contact: linux-iio@vger.kernel.org
+Description:
+ Represents light color temperature, which measures light color
+ temperature in Kelvin.
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index d752e9c0499b..cba942cadf97 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -90,6 +90,7 @@ static const char * const iio_chan_type_name_spec[] = {
[IIO_POSITIONRELATIVE] = "positionrelative",
[IIO_PHASE] = "phase",
[IIO_MASSCONCENTRATION] = "massconcentration",
+ [IIO_COLORTEMP] = "colortemp",
};
static const char * const iio_modifier_names[] = {
diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h
index c79f2f046a0b..08c20e540c13 100644
--- a/include/uapi/linux/iio/types.h
+++ b/include/uapi/linux/iio/types.h
@@ -47,6 +47,7 @@ enum iio_chan_type {
IIO_POSITIONRELATIVE,
IIO_PHASE,
IIO_MASSCONCENTRATION,
+ IIO_COLORTEMP,
};
enum iio_modifier {
diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c
index 0a5c2bb60030..a63741e43ddf 100644
--- a/tools/iio/iio_event_monitor.c
+++ b/tools/iio/iio_event_monitor.c
@@ -59,6 +59,7 @@ static const char * const iio_chan_type_name_spec[] = {
[IIO_POSITIONRELATIVE] = "positionrelative",
[IIO_PHASE] = "phase",
[IIO_MASSCONCENTRATION] = "massconcentration",
+ [IIO_COLORTEMP] = "colortemp",
};
static const char * const iio_ev_type_text[] = {
@@ -173,6 +174,7 @@ static bool event_is_known(struct iio_event_data *event)
case IIO_POSITIONRELATIVE:
case IIO_PHASE:
case IIO_MASSCONCENTRATION:
+ case IIO_COLORTEMP:
break;
default:
return false;
--
2.25.1
^ permalink raw reply related
* [PATCH v2 3/9] iio: hid-sensor-als: Add light color temperature support
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support light color temperature.
As a result, add support of light color temperature.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
drivers/iio/light/hid-sensor-als.c | 37 ++++++++++++++++++++++++++++--
include/linux/hid-sensor-ids.h | 1 +
2 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
index efb1f8862b28..16a3f1941c27 100644
--- a/drivers/iio/light/hid-sensor-als.c
+++ b/drivers/iio/light/hid-sensor-als.c
@@ -14,8 +14,9 @@
#include "../common/hid-sensors/hid-sensor-trigger.h"
enum {
- CHANNEL_SCAN_INDEX_INTENSITY = 0,
- CHANNEL_SCAN_INDEX_ILLUM = 1,
+ CHANNEL_SCAN_INDEX_INTENSITY,
+ CHANNEL_SCAN_INDEX_ILLUM,
+ CHANNEL_SCAN_INDEX_COLOR_TEMP,
CHANNEL_SCAN_INDEX_MAX
};
@@ -65,6 +66,16 @@ static const struct iio_chan_spec als_channels[] = {
BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE),
.scan_index = CHANNEL_SCAN_INDEX_ILLUM,
},
+ {
+ .type = IIO_COLORTEMP,
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
+ BIT(IIO_CHAN_INFO_SCALE) |
+ BIT(IIO_CHAN_INFO_SAMP_FREQ) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE),
+ .scan_index = CHANNEL_SCAN_INDEX_COLOR_TEMP,
+ },
IIO_CHAN_SOFT_TIMESTAMP(CHANNEL_SCAN_INDEX_TIMESTAMP)
};
@@ -103,6 +114,11 @@ static int als_read_raw(struct iio_dev *indio_dev,
min = als_state->als[chan->scan_index].logical_minimum;
address = HID_USAGE_SENSOR_LIGHT_ILLUM;
break;
+ case CHANNEL_SCAN_INDEX_COLOR_TEMP:
+ report_id = als_state->als[chan->scan_index].report_id;
+ min = als_state->als[chan->scan_index].logical_minimum;
+ address = HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE;
+ break;
default:
report_id = -1;
break;
@@ -223,6 +239,10 @@ static int als_capture_sample(struct hid_sensor_hub_device *hsdev,
als_state->scan.illum[CHANNEL_SCAN_INDEX_ILLUM] = sample_data;
ret = 0;
break;
+ case HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE:
+ als_state->scan.illum[CHANNEL_SCAN_INDEX_COLOR_TEMP] = sample_data;
+ ret = 0;
+ break;
case HID_USAGE_SENSOR_TIME_TIMESTAMP:
als_state->timestamp = hid_sensor_convert_timestamp(&als_state->common_attributes,
*(s64 *)raw_data);
@@ -258,6 +278,19 @@ static int als_parse_report(struct platform_device *pdev,
st->als[i].report_id);
}
+ ret = sensor_hub_input_get_attribute_info(hsdev, HID_INPUT_REPORT,
+ usage_id,
+ HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE,
+ &st->als[CHANNEL_SCAN_INDEX_COLOR_TEMP]);
+ if (ret < 0)
+ return ret;
+ als_adjust_channel_bit_mask(channels, CHANNEL_SCAN_INDEX_COLOR_TEMP,
+ st->als[CHANNEL_SCAN_INDEX_COLOR_TEMP].size);
+
+ dev_dbg(&pdev->dev, "als %x:%x\n",
+ st->als[CHANNEL_SCAN_INDEX_COLOR_TEMP].index,
+ st->als[CHANNEL_SCAN_INDEX_COLOR_TEMP].report_id);
+
st->scale_precision = hid_sensor_format_scale(usage_id,
&st->als[CHANNEL_SCAN_INDEX_INTENSITY],
&st->scale_pre_decml, &st->scale_post_decml);
diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h
index 13b1e65fbdcc..8af4fb3e0254 100644
--- a/include/linux/hid-sensor-ids.h
+++ b/include/linux/hid-sensor-ids.h
@@ -21,6 +21,7 @@
#define HID_USAGE_SENSOR_ALS 0x200041
#define HID_USAGE_SENSOR_DATA_LIGHT 0x2004d0
#define HID_USAGE_SENSOR_LIGHT_ILLUM 0x2004d1
+#define HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE 0x2004d2
/* PROX (200011) */
#define HID_USAGE_SENSOR_PROX 0x200011
--
2.25.1
^ permalink raw reply related
* [PATCH v2 4/9] HID: amd_sfh: Add support for light color temperature
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support light color temperature.
As a result, add support of light color temperature.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c | 4 ++++
drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h | 1 +
.../amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h | 7 +++++++
3 files changed, 12 insertions(+)
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
index 8716a05950c8..b7e732ec4806 100644
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
@@ -257,6 +257,10 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id,
else
als_input.illuminance_value =
(int)sensor_virt_addr[0] / AMD_SFH_FW_MULTIPLIER;
+
+ if (sensor_idx == ACS_IDX)
+ als_input.light_color_temp = sensor_virt_addr[1];
+
report_size = sizeof(als_input);
memcpy(input_report, &als_input, sizeof(als_input));
break;
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
index ebd55675eb62..a7fc50deca4d 100644
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
@@ -99,6 +99,7 @@ struct als_input_report {
struct common_input_property common_property;
/* values specific to this sensor */
int illuminance_value;
+ int light_color_temp;
} __packed;
struct hpd_feature_report {
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
index 697f2791ea9c..26e994e54ded 100644
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
@@ -641,6 +641,13 @@ static const u8 als_report_descriptor[] = {
0x75, 32, /* HID report size(32) */
0x95, 1, /* HID report count (1) */
0X81, 0x02, /* HID Input (Data_Arr_Abs) */
+0x0A, 0xD2, 0x04, /* HID usage sensor data light temperature */
+0x17, 0x00, 0x00, 0x01, 0x80, /* HID logical Min_32 */
+0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* HID logical Max_32 */
+0x55, 0x0, /* HID unit exponent(0x0) */
+0x75, 32, /* HID report size(32) */
+0x95, 1, /* HID report count (1) */
+0X81, 0x02, /* HID Input (Data_Arr_Abs) */
0xC0 /* HID end collection */
};
--
2.25.1
^ permalink raw reply related
* [PATCH v2 5/9] HID: amd_sfh: Add support for SFH1.1 light color temperature
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support light color temperature.
As a result, add support of light color temperature for SFH1.1.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c | 6 ++++++
drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h | 13 +++++++++++++
2 files changed, 19 insertions(+)
diff --git a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c
index 06bdcf072d10..f100aaafa167 100644
--- a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c
+++ b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c
@@ -188,6 +188,7 @@ static u8 get_input_rep(u8 current_index, int sensor_idx, int report_id,
struct sfh_mag_data mag_data;
struct sfh_als_data als_data;
struct hpd_status hpdstatus;
+ struct sfh_base_info binfo;
void __iomem *sensoraddr;
u8 report_size = 0;
@@ -235,6 +236,11 @@ static u8 get_input_rep(u8 current_index, int sensor_idx, int report_id,
memcpy_fromio(&als_data, sensoraddr, sizeof(struct sfh_als_data));
get_common_inputs(&als_input.common_property, report_id);
als_input.illuminance_value = float_to_int(als_data.lux);
+
+ memcpy_fromio(&binfo, mp2->vsbase, sizeof(struct sfh_base_info));
+ if (binfo.sbase.s_prop[ALS_IDX].sf.feat & 0x2)
+ als_input.light_color_temp = als_data.light_color_temp;
+
report_size = sizeof(als_input);
memcpy(input_report, &als_input, sizeof(als_input));
break;
diff --git a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h
index 9d31d5b510eb..6f6f5db150c3 100644
--- a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h
+++ b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h
@@ -88,6 +88,16 @@ struct sfh_sensor_list {
};
};
+struct sfh_sensor_prop {
+ union {
+ u32 sprop;
+ struct {
+ u32 elist : 16;
+ u32 feat : 16;
+ } sf;
+ };
+};
+
struct sfh_base_info {
union {
u32 sfh_base[24];
@@ -95,6 +105,8 @@ struct sfh_base_info {
struct sfh_platform_info plat_info;
struct sfh_firmware_info fw_info;
struct sfh_sensor_list s_list;
+ u32 rsvd;
+ struct sfh_sensor_prop s_prop[16];
} sbase;
};
};
@@ -134,6 +146,7 @@ struct sfh_mag_data {
struct sfh_als_data {
struct sfh_common_data commondata;
u32 lux;
+ u32 light_color_temp;
};
struct hpd_status {
--
2.25.1
^ permalink raw reply related
* [PATCH v2 6/9] iio: Add channel type for chromaticity
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support the x and y light
colors, which represent the coordinates on the CIE 1931 chromaticity
diagram. Thus, add channel type for chromaticity.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
Documentation/ABI/testing/sysfs-bus-iio | 8 ++++++++
drivers/iio/industrialio-core.c | 1 +
include/uapi/linux/iio/types.h | 1 +
tools/iio/iio_event_monitor.c | 1 +
4 files changed, 11 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
index 4cf7ed9ca57b..0c9389ad3709 100644
--- a/Documentation/ABI/testing/sysfs-bus-iio
+++ b/Documentation/ABI/testing/sysfs-bus-iio
@@ -2186,3 +2186,11 @@ Contact: linux-iio@vger.kernel.org
Description:
Represents light color temperature, which measures light color
temperature in Kelvin.
+
+What: /sys/bus/iio/devices/iio:deviceX/in_chromaticity_x_raw
+What: /sys/bus/iio/devices/iio:deviceX/in_chromaticity_y_raw
+KernelVersion: 6.7
+Contact: linux-iio@vger.kernel.org
+Description:
+ The x and y light color coordinate on the CIE 1931 chromaticity
+ diagram.
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index cba942cadf97..6dc4d2b296bb 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -91,6 +91,7 @@ static const char * const iio_chan_type_name_spec[] = {
[IIO_PHASE] = "phase",
[IIO_MASSCONCENTRATION] = "massconcentration",
[IIO_COLORTEMP] = "colortemp",
+ [IIO_CHROMATICITY] = "chromaticity",
};
static const char * const iio_modifier_names[] = {
diff --git a/include/uapi/linux/iio/types.h b/include/uapi/linux/iio/types.h
index 08c20e540c13..4832c611c027 100644
--- a/include/uapi/linux/iio/types.h
+++ b/include/uapi/linux/iio/types.h
@@ -48,6 +48,7 @@ enum iio_chan_type {
IIO_PHASE,
IIO_MASSCONCENTRATION,
IIO_COLORTEMP,
+ IIO_CHROMATICITY,
};
enum iio_modifier {
diff --git a/tools/iio/iio_event_monitor.c b/tools/iio/iio_event_monitor.c
index a63741e43ddf..5edacc358c5d 100644
--- a/tools/iio/iio_event_monitor.c
+++ b/tools/iio/iio_event_monitor.c
@@ -175,6 +175,7 @@ static bool event_is_known(struct iio_event_data *event)
case IIO_PHASE:
case IIO_MASSCONCENTRATION:
case IIO_COLORTEMP:
+ case IIO_CHROMATICITY:
break;
default:
return false;
--
2.25.1
^ permalink raw reply related
* [PATCH v2 7/9] iio: hid-sensor-als: Add light chromaticity support
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support the x and y light
colors, which represent the coordinates on the CIE 1931 chromaticity
diagram. Thus, add light chromaticity x and y.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
drivers/iio/light/hid-sensor-als.c | 63 ++++++++++++++++++++++++++++++
include/linux/hid-sensor-ids.h | 3 ++
2 files changed, 66 insertions(+)
diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
index 16a3f1941c27..c9d114ff080a 100644
--- a/drivers/iio/light/hid-sensor-als.c
+++ b/drivers/iio/light/hid-sensor-als.c
@@ -17,6 +17,8 @@ enum {
CHANNEL_SCAN_INDEX_INTENSITY,
CHANNEL_SCAN_INDEX_ILLUM,
CHANNEL_SCAN_INDEX_COLOR_TEMP,
+ CHANNEL_SCAN_INDEX_CHROMATICITY_X,
+ CHANNEL_SCAN_INDEX_CHROMATICITY_Y,
CHANNEL_SCAN_INDEX_MAX
};
@@ -76,6 +78,30 @@ static const struct iio_chan_spec als_channels[] = {
BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE),
.scan_index = CHANNEL_SCAN_INDEX_COLOR_TEMP,
},
+ {
+ .type = IIO_CHROMATICITY,
+ .modified = 1,
+ .channel2 = IIO_MOD_X,
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
+ BIT(IIO_CHAN_INFO_SCALE) |
+ BIT(IIO_CHAN_INFO_SAMP_FREQ) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE),
+ .scan_index = CHANNEL_SCAN_INDEX_CHROMATICITY_X,
+ },
+ {
+ .type = IIO_CHROMATICITY,
+ .modified = 1,
+ .channel2 = IIO_MOD_Y,
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |
+ BIT(IIO_CHAN_INFO_SCALE) |
+ BIT(IIO_CHAN_INFO_SAMP_FREQ) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS) |
+ BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE),
+ .scan_index = CHANNEL_SCAN_INDEX_CHROMATICITY_Y,
+ },
IIO_CHAN_SOFT_TIMESTAMP(CHANNEL_SCAN_INDEX_TIMESTAMP)
};
@@ -119,6 +145,16 @@ static int als_read_raw(struct iio_dev *indio_dev,
min = als_state->als[chan->scan_index].logical_minimum;
address = HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE;
break;
+ case CHANNEL_SCAN_INDEX_CHROMATICITY_X:
+ report_id = als_state->als[chan->scan_index].report_id;
+ min = als_state->als[chan->scan_index].logical_minimum;
+ address = HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X;
+ break;
+ case CHANNEL_SCAN_INDEX_CHROMATICITY_Y:
+ report_id = als_state->als[chan->scan_index].report_id;
+ min = als_state->als[chan->scan_index].logical_minimum;
+ address = HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y;
+ break;
default:
report_id = -1;
break;
@@ -243,6 +279,14 @@ static int als_capture_sample(struct hid_sensor_hub_device *hsdev,
als_state->scan.illum[CHANNEL_SCAN_INDEX_COLOR_TEMP] = sample_data;
ret = 0;
break;
+ case HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X:
+ als_state->scan.illum[CHANNEL_SCAN_INDEX_CHROMATICITY_X] = sample_data;
+ ret = 0;
+ break;
+ case HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y:
+ als_state->scan.illum[CHANNEL_SCAN_INDEX_CHROMATICITY_Y] = sample_data;
+ ret = 0;
+ break;
case HID_USAGE_SENSOR_TIME_TIMESTAMP:
als_state->timestamp = hid_sensor_convert_timestamp(&als_state->common_attributes,
*(s64 *)raw_data);
@@ -291,6 +335,25 @@ static int als_parse_report(struct platform_device *pdev,
st->als[CHANNEL_SCAN_INDEX_COLOR_TEMP].index,
st->als[CHANNEL_SCAN_INDEX_COLOR_TEMP].report_id);
+ for (i = 0; i < 2; i++) {
+ int next_scan_index = CHANNEL_SCAN_INDEX_CHROMATICITY_X + i;
+
+ ret = sensor_hub_input_get_attribute_info(hsdev,
+ HID_INPUT_REPORT, usage_id,
+ HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X + i,
+ &st->als[next_scan_index]);
+ if (ret < 0)
+ return ret;
+
+ als_adjust_channel_bit_mask(channels,
+ CHANNEL_SCAN_INDEX_CHROMATICITY_X + i,
+ st->als[next_scan_index].size);
+
+ dev_dbg(&pdev->dev, "als %x:%x\n",
+ st->als[next_scan_index].index,
+ st->als[next_scan_index].report_id);
+ }
+
st->scale_precision = hid_sensor_format_scale(usage_id,
&st->als[CHANNEL_SCAN_INDEX_INTENSITY],
&st->scale_pre_decml, &st->scale_post_decml);
diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h
index 8af4fb3e0254..6730ee900ee1 100644
--- a/include/linux/hid-sensor-ids.h
+++ b/include/linux/hid-sensor-ids.h
@@ -22,6 +22,9 @@
#define HID_USAGE_SENSOR_DATA_LIGHT 0x2004d0
#define HID_USAGE_SENSOR_LIGHT_ILLUM 0x2004d1
#define HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE 0x2004d2
+#define HID_USAGE_SENSOR_LIGHT_CHROMATICITY 0x2004d3
+#define HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X 0x2004d4
+#define HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y 0x2004d5
/* PROX (200011) */
#define HID_USAGE_SENSOR_PROX 0x200011
--
2.25.1
^ permalink raw reply related
* [PATCH v2 8/9] HID: amd_sfh: Add light chromaticity support
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support the x and y light
colors, which represent the coordinates on the CIE 1931 chromaticity
diagram. Thus, add light chromaticity x and y.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
.../amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c | 5 ++++-
.../amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h | 2 ++
.../hid_descriptor/amd_sfh_hid_report_desc.h | 14 ++++++++++++++
3 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
index b7e732ec4806..ef1f9be8b893 100644
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
@@ -258,8 +258,11 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id,
als_input.illuminance_value =
(int)sensor_virt_addr[0] / AMD_SFH_FW_MULTIPLIER;
- if (sensor_idx == ACS_IDX)
+ if (sensor_idx == ACS_IDX) {
als_input.light_color_temp = sensor_virt_addr[1];
+ als_input.chromaticity_x_value = sensor_virt_addr[2];
+ als_input.chromaticity_y_value = sensor_virt_addr[3];
+ }
report_size = sizeof(als_input);
memcpy(input_report, &als_input, sizeof(als_input));
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
index a7fc50deca4d..882434b1501f 100644
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
@@ -100,6 +100,8 @@ struct als_input_report {
/* values specific to this sensor */
int illuminance_value;
int light_color_temp;
+ int chromaticity_x_value;
+ int chromaticity_y_value;
} __packed;
struct hpd_feature_report {
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
index 26e994e54ded..67ec2d6a417d 100644
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
@@ -648,6 +648,20 @@ static const u8 als_report_descriptor[] = {
0x75, 32, /* HID report size(32) */
0x95, 1, /* HID report count (1) */
0X81, 0x02, /* HID Input (Data_Arr_Abs) */
+0x0A, 0xD4, 0x04, /* HID usage sensor data light chromaticity_x */
+0x17, 0x00, 0x00, 0x01, 0x80, /* HID logical Min_32 */
+0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* HID logical Max_32 */
+0x55, 0x0, /* HID unit exponent(0x0) */
+0x75, 32, /* HID report size(32) */
+0x95, 1, /* HID report count(1) */
+0X81, 0x02, /* HID Input (Data_Var_Abs) */
+0x0A, 0xD5, 0x04, /* HID usage sensor data light chromaticity_y */
+0x17, 0x00, 0x00, 0x01, 0x80, /* HID logical Min_32 */
+0x27, 0xFF, 0xFF, 0xFF, 0x7F, /* HID logical Max_32 */
+0x55, 0x0, /* HID unit exponent(0x0) */
+0x75, 32, /* HID report size(32) */
+0x95, 1, /* HID report count (1) */
+0X81, 0x02, /* HID Input (Data_Var_Abs) */
0xC0 /* HID end collection */
};
--
2.25.1
^ permalink raw reply related
* [PATCH v2 9/9] HID: amd_sfh: Add light chromaticity for SFH1.1
From: Basavaraj Natikar @ 2023-09-19 8:10 UTC (permalink / raw)
To: jikos, benjamin.tissoires, jic23, lars, srinivas.pandruvada,
linux-input, linux-iio
Cc: Basavaraj Natikar
In-Reply-To: <20230919081054.2050714-1-Basavaraj.Natikar@amd.com>
In most cases, ambient color sensors also support the x and y light
colors, which represent the coordinates on the CIE 1931 chromaticity
diagram. Thus, add light chromaticity x and y for SFH1.1.
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
---
drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c | 5 ++++-
drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h | 2 ++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c
index f100aaafa167..8a037de08e92 100644
--- a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c
+++ b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_desc.c
@@ -238,8 +238,11 @@ static u8 get_input_rep(u8 current_index, int sensor_idx, int report_id,
als_input.illuminance_value = float_to_int(als_data.lux);
memcpy_fromio(&binfo, mp2->vsbase, sizeof(struct sfh_base_info));
- if (binfo.sbase.s_prop[ALS_IDX].sf.feat & 0x2)
+ if (binfo.sbase.s_prop[ALS_IDX].sf.feat & 0x2) {
als_input.light_color_temp = als_data.light_color_temp;
+ als_input.chromaticity_x_value = float_to_int(als_data.chromaticity_x);
+ als_input.chromaticity_y_value = float_to_int(als_data.chromaticity_y);
+ }
report_size = sizeof(als_input);
memcpy(input_report, &als_input, sizeof(als_input));
diff --git a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h
index 6f6f5db150c3..656c3e95ef8c 100644
--- a/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h
+++ b/drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_interface.h
@@ -147,6 +147,8 @@ struct sfh_als_data {
struct sfh_common_data commondata;
u32 lux;
u32 light_color_temp;
+ u32 chromaticity_x;
+ u32 chromaticity_y;
};
struct hpd_status {
--
2.25.1
^ permalink raw reply related
* Re: [PATCH V2 1/2] dt-bindings: input: Introduce Himax HID-over-SPI device
From: Conor Dooley @ 2023-09-19 8:41 UTC (permalink / raw)
To: Tylor Yang
Cc: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, jikos,
benjamin.tissoires, linux-input, devicetree, linux-kernel,
poyuan_chang, jingliang, hbarnor
In-Reply-To: <20230919024943.3088916-2-tylor_yang@himax.corp-partner.google.com>
[-- Attachment #1: Type: text/plain, Size: 5836 bytes --]
Hey,
On Tue, Sep 19, 2023 at 10:49:42AM +0800, Tylor Yang wrote:
> The Himax HID-over-SPI framework support for Himax touchscreen ICs
> that report HID packet through SPI bus. The driver core need reset
> pin to meet reset timing spec. of IC. An interrupt pin to disable
> and enable interrupt when suspend/resume. An optional power control
> pin if target board needed. Panel id pins for identify panel is also
> an option.
>
> Additional optional arguments:
> ic-det-delay-ms and ic-resume-delay-ms are using to solve runtime
> conditions.
Runtime conditions? Aren't thєse properties of the panel & therefore
fixed? If they were runtime conditions, then setting them statically in
your DT is not going to work, right?
>
> This patch also add maintainer of this driver.
>
> Signed-off-by: Tylor Yang <tylor_yang@himax.corp-partner.google.com>
It looks like you deleted all of the properties from the previous
submission of these changes. I don't really understand that, it kinda
feels just like appeasement, as you must have needed those properties
to do the firmware loading etc. How are you filling the gap those
properties have left, when you still only have a single compatible
string in thㄟs binding? Is there a way to do runtime detection of which
chip you're dealing with that you are now using?
Confused,
Conor.
> ---
> .../bindings/input/himax,hid-over-spi.yaml | 109 ++++++++++++++++++
> MAINTAINERS | 6 +
> 2 files changed, 115 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
>
> diff --git a/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml b/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> new file mode 100644
> index 000000000000..3ee3a89842ac
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> @@ -0,0 +1,109 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/input/himax,hid-over-spi.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Himax TDDI devices using SPI to send HID packets
> +
> +maintainers:
> + - Tylor Yang <tylor_yang@himax.corp-partner.google.com>
> +
> +description: |
> + Support the Himax TDDI devices which using SPI interface to acquire
> + HID packets from the device. The device needs to be initialized using
> + Himax protocol before it start sending HID packets.
> +
> +properties:
> + compatible:
> + const: himax,hid-over-spi
> +
> + reg:
> + maxItems: 1
> +
> + '#address-cells':
> + const: 1
> +
> + '#size-cells':
> + const: 0
> +
> + interrupts:
> + maxItems: 1
> +
> + himax,rst-gpio:
> + maxItems: 1
> + description: Reset device, active low signal.
> +
> + himax,irq-gpio:
> + maxItems: 1
> + description: Interrupt request, active low signal.
> +
> + himax,3v3-gpio:
> + maxItems: 1
> + description: GPIO to control 3.3V power supply.
> +
> + himax,id-gpios:
> + maxItems: 8
> + description: GPIOs to read physical Panel ID. Optional.
> +
> + spi-cpha: true
> + spi-cpol: true
> +
> + himax,ic-det-delay-ms:
> + description:
> + Due to TDDI properties, the TPIC detection timing must after the
> + display panel initialized. This property is used to specify the
> + delay time when TPIC detection and display panel initialization
> + timing are overlapped. How much milliseconds to delay before TPIC
> + detection start.
> +
> + himax,ic-resume-delay-ms:
> + description:
> + Due to TDDI properties, the TPIC resume timing must after the
> + display panel resumed. This property is used to specify the
> + delay time when TPIC resume and display panel resume
> + timing are overlapped. How much milliseconds to delay before TPIC
> + resume start.
> +
> +required:
> + - compatible
> + - reg
> + - interrupts
> + - himax,rst-gpio
> + - himax,irq-gpio
> +
> +unevaluatedProperties: false
> +
> +allOf:
> + - $ref: /schemas/spi/spi-peripheral-props.yaml#
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + #include <dt-bindings/gpio/gpio.h>
> +
> + spi {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + touchscreen@0 {
> + compatible = "himax,hid-over-spi";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0>;
> + interrupt-parent = <&gpio1>;
> + interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
> + pinctrl-0 = <&touch_pins>;
> + pinctrl-names = "default";
> +
> + spi-max-frequency = <12500000>;
> + spi-cpha;
> + spi-cpol;
> +
> + himax,rst-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
> + himax,irq-gpio = <&gpio1 7 GPIO_ACTIVE_LOW>;
> + himax,3v3-gpio = <&gpio1 6 GPIO_ACTIVE_HIGH>;
> + himax,ic-det-delay-ms = <500>;
> + himax,ic-resume-delay-ms = <100>;
> + };
> + };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index bf0f54c24f81..452701261bec 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -9323,6 +9323,12 @@ L: linux-kernel@vger.kernel.org
> S: Maintained
> F: drivers/misc/hisi_hikey_usb.c
>
> +HIMAX HID OVER SPI TOUCHSCREEN SUPPORT
> +M: Tylor Yang <tylor_yang@himax.corp-partner.google.com>
> +L: linux-input@vger.kernel.org
> +S: Supported
> +F: Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> +
> HIMAX HX83112B TOUCHSCREEN SUPPORT
> M: Job Noorman <job@noorman.info>
> L: linux-input@vger.kernel.org
> --
> 2.25.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply
* Re: [PATCH V2 1/2] dt-bindings: input: Introduce Himax HID-over-SPI device
From: Conor Dooley @ 2023-09-19 11:09 UTC (permalink / raw)
To: yang tylor
Cc: dmitry.torokhov, robh+dt, krzysztof.kozlowski+dt, conor+dt, jikos,
benjamin.tissoires, linux-input, devicetree, linux-kernel,
poyuan_chang, jingliang, hbarnor
In-Reply-To: <CAGD2q_anfBP78jck6AbMNtgAggjOgaB3P6dkmq9tONHP45adFA@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 9929 bytes --]
On Tue, Sep 19, 2023 at 05:31:29PM +0800, yang tylor wrote:
> Hi Conor,
>
> > > Additional optional arguments:
> > > ic-det-delay-ms and ic-resume-delay-ms are using to solve runtime
> > > conditions.
>
> > Runtime conditions? Aren't thєse properties of the panel & therefore
> > fixed? If they were runtime conditions, then setting them statically in
> > your DT is not going to work, right?
>
> Because each platform's display driver ready time is different. TP part
> need to avoid this timing by measuring the waveform of LCD reset pin
> low period and TP probe timing. For example, if LCD rst pin low from
> timestamp 100 to 800, TP driver probe at 600. TP probe will fail. Then
> user should set ic-det-delay-ms bigger than 200, to avoid LCD rst low
> timing. As you can see, the timing needs to be measured at runtime to
> decide how long it should be. Then, if the condition is not changed, the
> value could keep the same.
That sounds to me like something you would test once for a given
platform and then the values are static. If you are actually changing it
at *runtime*, how is doing it through DT suitable? Does your firmware do
the tests & then set the values in DT dynamically?
>
> > It looks like you deleted all of the properties from the previous
> > submission of these changes. I don't really understand that, it kinda
> > feels just like appeasement, as you must have needed those properties
> > to do the firmware loading etc. How are you filling the gap those
> > properties have left, when you still only have a single compatible
> > string in thㄟs binding? Is there a way to do runtime detection of which
> > chip you're dealing with that you are now using?
>
> After reviewing, I found the properties could go to IC driver settings :
> "himax,heatmap_16bits" because it depends on IC's ability;
How do you detect the IC's abilities?
> Some
> could remove and use default values: "himax,fw_size",
> "himax,boot_time_fw_upgrade". "himax,fw_size" has a default value in
> IC settings, and likely won't change in this IC.
Okay.
> The behavior of "himax,boot_time_fw_upgrade" seems not stable and
> should be removed. "himax,fw_in_flash", I use the kernel config for
> user to select.
That seems like a bad idea, we want to be able to build one kernel that
works for all hardware at the same time.
> "himax,pid" could be remove and use default firmware name
> "himax_i2chid.bin" to load. It was added because users may desire to
> choose a special name like "himax_i2chid_{pid}.bin" instead of the default
> one.
> It also could be replaced with newly added "himax",id-gpios" which is still
> experimental.
Also, pleae don't top post, but instead reply in-line with my comments,
as I have done here.
> Btw, I encounter an error of patch [2/2], which says:
> BOUNCE linux-input@vger.kernel.org: Message too long (>100000 chars)
> and the patch didn't appear at patchwork.kernel.org. What should I do to
> deal with this problem?
No idea. Maybe try to split it into multiple patches?
The other option is to also cc patches@lists.linux.dev as that has some
higher capacities, but that's not going to be a silver bullet.
Thanks,
Conor.
>
>
> Thanks,
> Tylor
>
>
> On Tue, Sep 19, 2023 at 4:41 PM Conor Dooley <conor@kernel.org> wrote:
>
> > Hey,
> >
> >
> > On Tue, Sep 19, 2023 at 10:49:42AM +0800, Tylor Yang wrote:
> > > The Himax HID-over-SPI framework support for Himax touchscreen ICs
> > > that report HID packet through SPI bus. The driver core need reset
> > > pin to meet reset timing spec. of IC. An interrupt pin to disable
> > > and enable interrupt when suspend/resume. An optional power control
> > > pin if target board needed. Panel id pins for identify panel is also
> > > an option.
> > >
> > > Additional optional arguments:
> > > ic-det-delay-ms and ic-resume-delay-ms are using to solve runtime
> > > conditions.
> >
> > Runtime conditions? Aren't thєse properties of the panel & therefore
> > fixed? If they were runtime conditions, then setting them statically in
> > your DT is not going to work, right?
> >
> > >
> > > This patch also add maintainer of this driver.
> > >
> > > Signed-off-by: Tylor Yang <tylor_yang@himax.corp-partner.google.com>
> >
> > It looks like you deleted all of the properties from the previous
> > submission of these changes. I don't really understand that, it kinda
> > feels just like appeasement, as you must have needed those properties
> > to do the firmware loading etc. How are you filling the gap those
> > properties have left, when you still only have a single compatible
> > string in thㄟs binding? Is there a way to do runtime detection of which
> > chip you're dealing with that you are now using?
> >
> > Confused,
> > Conor.
> >
> > > ---
> > > .../bindings/input/himax,hid-over-spi.yaml | 109 ++++++++++++++++++
> > > MAINTAINERS | 6 +
> > > 2 files changed, 115 insertions(+)
> > > create mode 100644
> > Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> > >
> > > diff --git
> > a/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> > b/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> > > new file mode 100644
> > > index 000000000000..3ee3a89842ac
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> > > @@ -0,0 +1,109 @@
> > > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/input/himax,hid-over-spi.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: Himax TDDI devices using SPI to send HID packets
> > > +
> > > +maintainers:
> > > + - Tylor Yang <tylor_yang@himax.corp-partner.google.com>
> > > +
> > > +description: |
> > > + Support the Himax TDDI devices which using SPI interface to acquire
> > > + HID packets from the device. The device needs to be initialized using
> > > + Himax protocol before it start sending HID packets.
> > > +
> > > +properties:
> > > + compatible:
> > > + const: himax,hid-over-spi
> > > +
> > > + reg:
> > > + maxItems: 1
> > > +
> > > + '#address-cells':
> > > + const: 1
> > > +
> > > + '#size-cells':
> > > + const: 0
> > > +
> > > + interrupts:
> > > + maxItems: 1
> > > +
> > > + himax,rst-gpio:
> > > + maxItems: 1
> > > + description: Reset device, active low signal.
> > > +
> > > + himax,irq-gpio:
> > > + maxItems: 1
> > > + description: Interrupt request, active low signal.
> > > +
> > > + himax,3v3-gpio:
> > > + maxItems: 1
> > > + description: GPIO to control 3.3V power supply.
> > > +
> > > + himax,id-gpios:
> > > + maxItems: 8
> > > + description: GPIOs to read physical Panel ID. Optional.
> > > +
> > > + spi-cpha: true
> > > + spi-cpol: true
> > > +
> > > + himax,ic-det-delay-ms:
> > > + description:
> > > + Due to TDDI properties, the TPIC detection timing must after the
> > > + display panel initialized. This property is used to specify the
> > > + delay time when TPIC detection and display panel initialization
> > > + timing are overlapped. How much milliseconds to delay before TPIC
> > > + detection start.
> > > +
> > > + himax,ic-resume-delay-ms:
> > > + description:
> > > + Due to TDDI properties, the TPIC resume timing must after the
> > > + display panel resumed. This property is used to specify the
> > > + delay time when TPIC resume and display panel resume
> > > + timing are overlapped. How much milliseconds to delay before TPIC
> > > + resume start.
> > > +
> > > +required:
> > > + - compatible
> > > + - reg
> > > + - interrupts
> > > + - himax,rst-gpio
> > > + - himax,irq-gpio
> > > +
> > > +unevaluatedProperties: false
> > > +
> > > +allOf:
> > > + - $ref: /schemas/spi/spi-peripheral-props.yaml#
> > > +
> > > +examples:
> > > + - |
> > > + #include <dt-bindings/interrupt-controller/irq.h>
> > > + #include <dt-bindings/gpio/gpio.h>
> > > +
> > > + spi {
> > > + #address-cells = <1>;
> > > + #size-cells = <0>;
> > > +
> > > + touchscreen@0 {
> > > + compatible = "himax,hid-over-spi";
> > > + #address-cells = <1>;
> > > + #size-cells = <0>;
> > > + reg = <0x0>;
> > > + interrupt-parent = <&gpio1>;
> > > + interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
> > > + pinctrl-0 = <&touch_pins>;
> > > + pinctrl-names = "default";
> > > +
> > > + spi-max-frequency = <12500000>;
> > > + spi-cpha;
> > > + spi-cpol;
> > > +
> > > + himax,rst-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
> > > + himax,irq-gpio = <&gpio1 7 GPIO_ACTIVE_LOW>;
> > > + himax,3v3-gpio = <&gpio1 6 GPIO_ACTIVE_HIGH>;
> > > + himax,ic-det-delay-ms = <500>;
> > > + himax,ic-resume-delay-ms = <100>;
> > > + };
> > > + };
> > > diff --git a/MAINTAINERS b/MAINTAINERS
> > > index bf0f54c24f81..452701261bec 100644
> > > --- a/MAINTAINERS
> > > +++ b/MAINTAINERS
> > > @@ -9323,6 +9323,12 @@ L: linux-kernel@vger.kernel.org
> > > S: Maintained
> > > F: drivers/misc/hisi_hikey_usb.c
> > >
> > > +HIMAX HID OVER SPI TOUCHSCREEN SUPPORT
> > > +M: Tylor Yang <tylor_yang@himax.corp-partner.google.com>
> > > +L: linux-input@vger.kernel.org
> > > +S: Supported
> > > +F: Documentation/devicetree/bindings/input/himax,hid-over-spi.yaml
> > > +
> > > HIMAX HX83112B TOUCHSCREEN SUPPORT
> > > M: Job Noorman <job@noorman.info>
> > > L: linux-input@vger.kernel.org
> > > --
> > > 2.25.1
> > >
> >
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply
* Re: [PATCH] Input: add driver for TouchNetix aXiom touchscreen
From: Marco Felsch @ 2023-09-19 12:30 UTC (permalink / raw)
To: Kamel Bouhara
Cc: bartp, kernel, bsp-development.geo, Gregory Clement,
Thomas Petazzoni, linux-input, pedro.torruella, hannah.rossiter,
mark.satterthwaite
In-Reply-To: <20230918193833.kphbb5guk74aofcf@pengutronix.de>
Hi Kamel,
On 23-09-18, Marco Felsch wrote:
> On 23-09-08, Kamel Bouhara wrote:
> > Add a new driver for the TouchNetix's aXiom family of
> > multi-touch controller. This driver only support i2c
> > and can be later adapted for SPI and USB support.
> >
> > Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
> > ---
> > .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> > MAINTAINERS | 7 +
> > drivers/input/touchscreen/Kconfig | 11 +
> > drivers/input/touchscreen/Makefile | 1 +
> > drivers/input/touchscreen/axiom_core.c | 382 ++++++++++++++++++
> > drivers/input/touchscreen/axiom_core.h | 140 +++++++
> > drivers/input/touchscreen/axiom_i2c.c | 349 ++++++++++++++++
> > 7 files changed, 892 insertions(+)
> > create mode 100644 drivers/input/touchscreen/axiom_core.c
> > create mode 100644 drivers/input/touchscreen/axiom_core.h
> > create mode 100644 drivers/input/touchscreen/axiom_i2c.c
...
> > +/* Enables the raw data for up to 4 force channels to be sent to the input subsystem */
> > +#define U46_ENABLE_RAW_FORCE_DATA
> > +
> > +/**
> > + * u31 has 2 pages for usage table entries.
> > + * (2 * AX_COMMS_PAGE_SIZE) / U31_BYTES_PER_USAGE = 85
> > + */
> > +#define U31_MAX_USAGES (85U)
> > +#define U41_MAX_TARGETS (10U)
> > +#define U46_AUX_CHANNELS (4U)
> > +#define U46_AUX_MASK (0xFFFU)
> > +#define U31_BYTES_PER_USAGE (6U)
> > +#define USAGE_2DCTS_REPORT_ID (0x41U)
> > +#define USAGE_2AUX_REPORT_ID (0x46U)
> > +#define USAGE_2HB_REPORT_ID (0x01U)
> > +#define PROX_LEVEL (-128)
> > +#define AX_U31_PAGE0_LENGTH (0x0C)
> > +#define AX_COMMS_WRITE (0x00U)
> > +#define AX_COMMS_READ (0x80U)
> > +#define AX_COMMS_BYTES_MASK (0xFFU)
> > +
> > +#define DEVINFO_USAGE_ID 0x31
> > +#define REPORT_USAGE_ID 0x34
> > +
> > +#define REBASELINE_CMD 0x03
> > +
> > +#define COMMS_MAX_USAGE_PAGES (3)
> > +#define AX_COMMS_PAGE_SIZE (256)
> > +
> > +#define COMMS_OVERFLOW_MSK (0x80)
> > +#define COMMS_REPORT_LEN_MSK (0x7F)
>
> The defines look not good, please use proper kernel coding style. Also
> I'm not sure if we should follow the downstream solution here. Of course
> there is this concept of usages, pages and offsets:
>
> / reg0 (0x0)
> / page-0 (0x0) -------+ reg1 (0x1)
> | | ...
> u(sage)31 --+ page-1 (0x1) \ reg127 (0xff)
> |
> \ page-2 (0x2)
>
> But in the end it is just a 16bit register and we can access is
> partially. We only need to know the register, the len-bytes we have to
> read/write and the reg-mask we may need to apply.
>
> #define AXIOM_PAGE_MASK GENMASK(15, 8)
> #define AXIOM_PAGE_OFFSET_MASK GENMASK(7, 0)
>
> struct axiom_reg {
> u16 reg;
> u16 len;
> u32 mask;
> }
>
> #define AXIOM_REG(_page, _offset_bytes, _len_bytes, _mask) { \
> .reg = FIELD_PREP(AXIOM_PAGE_MASK, _page) | \
> FIELD_PREP(AXIOM_PAGE_OFFSET_MASK, _offset_bytes), \
> .len = _len_bytes, \
> .mask =_ mask, \
> }
>
> enum axiom_reg_desc {
> AXIOM_U31_DEVICE_ID,
> AXIOM_U31_MODE,
> AXIOM_U31_RUTNIME_FW_VARIANT,
> AXIOM_U31_RUTNIME_FW_STATUS,
> };
>
> static struct axiom_reg axiom_reg[] = {
> [AXIOM_U31_DEVICE_ID] = AXIOM_REG(0, 0, 2, GENMASK(14, 0)),
> [AXIOM_U31_MODE] = AXIOM_REG(0, 1, 1, BIT(7)),
> [AXIOM_U31_RUTNIME_FW_VARIANT] = AXIOM_REG(0, 4, 1, GENMASK(6, 0)),
> [AXIOM_U31_RUTNIME_FW_STATUS] = AXIOM_REG(0, 4, 1, BIT(7)),
> };
>
> Of course this does not cover the event read case but all the other
> cases and would simplify the decoding or just use the common pattern
> like:
>
> #define AXIOM_REG(page, offset) \
> (FIELD_PREP(AXIOM_PAGE_MASK, (page)) | \
> FIELD_PREP(AXIOM_PAGE_OFFSET_MASK, (offset)))
>
> #define AXIOM_U31_DEVICE_ID_REG AXIOM_REG(0, 0)
> #define AXIOM_U31_DEVICE_ID_MASK GEMASK(14, 0)
>
> #define AXIOM_U31_MODE_REG AXIOM_REG(0, 1)
> #define AXIOM_U31_MODE_MASK BIT(7)
>
> #define AXIOM_U31_RUTNIME_FW_REG AXIOM_REG(0, 4)
> #define AXIOM_U31_RUTNIME_FW_STATUS_MASK BIT(7)
> #define AXIOM_U31_RUTNIME_FW_VARIANT_MASK GENMASK(6, 0)
>
> so in the end we can could use:
>
> - axiom_read(priv, AXIOM_U31_DEVICE_ID) or
> - axiom_read(priv, AXIOM_U31_DEVICE_ID_REG, 2);
After getting a bit more into the details I saw that this can't be used
as I suggested since a few commands require parameters and an
i2c-stop/start cycle in between corrupt the command. So we really need
to use AXIOM_Uxx pages/registers. For this I still suggest to not bang
on buffers like:
bootloader_fw_ver_major = data[offset]
bootloader_fw_ver_minor = data[offset++]
Instead we should add headers to access/prepare the data more
user-friendly.
Regards,
Marco
^ permalink raw reply
* Re: (subset) [PATCH v5 02/37] dt-bindings: mfd: qcom-pm8xxx: add missing child nodes
From: Lee Jones @ 2023-09-19 15:11 UTC (permalink / raw)
To: devicetree, Lee Jones, Rob Herring, Krzysztof Kozlowski,
Dmitry Baryshkov
Cc: Andy Gross, Bjorn Andersson, Konrad Dybcio, linux-arm-msm,
Jonathan Cameron, Lars-Peter Clausen, linux-iio, Dmitry Torokhov,
linux-input, Pavel Machek, linux-leds, Satya Priya,
Krzysztof Kozlowski
In-Reply-To: <20230827132525.951475-3-dmitry.baryshkov@linaro.org>
On Sun, 27 Aug 2023 16:24:50 +0300, Dmitry Baryshkov wrote:
> Add gpio, keypad, led, mpps, pwrkey, vibrator and xoadc as possible
> child nodes of qcom,pm8xxx, referencing existint schema files.
>
>
Applied, thanks!
[02/37] dt-bindings: mfd: qcom-pm8xxx: add missing child nodes
commit: 2c09766cb133ee4d57d19f56c6a0035b0d9eb034
--
Lee Jones [李琼斯]
^ permalink raw reply
* Re: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB wakeup
From: srinivas pandruvada @ 2023-09-19 16:54 UTC (permalink / raw)
To: Kai-Heng Feng
Cc: Xu, Even, jikos@kernel.org, benjamin.tissoires@redhat.com,
linux-pm@vger.kernel.org, linux-pci@vger.kernel.org,
Lee, Jian Hui, Zhang, Lixu, Ba, Najumon,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <CAAd53p6MA9YLbcXxpC8=YEtbO6frFJk1LQ1BNUgPk=r1_uR8iw@mail.gmail.com>
On Tue, 2023-09-19 at 15:36 +0800, Kai-Heng Feng wrote:
> On Mon, Sep 18, 2023 at 11:57 PM srinivas pandruvada
> <srinivas.pandruvada@linux.intel.com> wrote:
> >
> > Hi Kai-Heng,
> > On Mon, 2023-09-18 at 09:17 +0800, Kai-Heng Feng wrote:
> > > Hi Even,
> > >
> > > On Mon, Sep 18, 2023 at 8:33 AM Xu, Even <even.xu@intel.com>
> > > wrote:
> > > >
> > > > Hi, Kai-Heng,
> > > >
> > > > I just got feedback, for testing EHL S5 wakeup feature, you
> > > > need
> > > > several steps to setup and access
> > > > "https://portal.devicewise.com/things/browse" to trigger wake.
> > > > But currently, our test account of this website are all out of
> > > > data.
> > > > So maybe you need double check with the team who required you
> > > > preparing the patch for the verification.
> > >
> > > The patch is to solve the GPE refcount overflow, while
> > > maintaining S5
> > > wakeup. I don't have any mean to test S5 wake.
> > >
> > The issue is not calling acpi_disable_gpe(). To reduce the scope of
> > change can we just add that instead of a adding new callbacks. This
> > way
> > scope is reduced.
>
> This patch does exactly the same thing by letting PCI and ACPI handle
> the PME and GPE.
> Though the change seems to be bigger, it actually reduces the duped
> code, while keep the S5 wakeup ability intact.
It may be doing the same. But with long chain of calls without
verification, I am not comfortable.
This can be another patch by itself to use the framework.
But you are targeting a fix for overflow issue, which is separate from
the use of PCI/ACPI framework.
Thanks,
Srinivas
>
> Kai-Heng
>
> >
> > Something like the attached
> >
> > Thanks,
> > Srinivas
> >
> >
> >
> >
> >
> >
> > > So if you also don't have ways to verify S5 wake functionality,
> > > maybe
> > > we can simply revert 2e23a70edabe ("HID: intel-ish-hid: ipc:
> > > finish
> > > power flow for EHL OOB") as alternative?
> > >
> > > Kai-Heng
> > >
> > > > Thanks!
> > > >
> > > > Best Regards,
> > > > Even Xu
> > > >
> > > > -----Original Message-----
> > > > From: Xu, Even
> > > > Sent: Friday, September 15, 2023 3:27 PM
> > > > To: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > > Cc: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>;
> > > > jikos@kernel.org; benjamin.tissoires@redhat.com;
> > > > linux-pm@vger.kernel.org; linux-pci@vger.kernel.org; Lee, Jian
> > > > Hui
> > > > <jianhui.lee@canonical.com>; Zhang, Lixu
> > > > <Lixu.Zhang@intel.com>;
> > > > Ba, Najumon <najumon.ba@intel.com>;
> > > > linux-input@vger.kernel.org;
> > > > linux-kernel@vger.kernel.org
> > > > Subject: RE: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB
> > > > wakeup
> > > >
> > > > Hi, Kai-Heng,
> > > >
> > > > I am also not familiar with this S5 wakeup test case.
> > > > I already sent out mails to ask for help on it.
> > > > Will come back to you once I get feedback.
> > > > Thanks!
> > > >
> > > > Best Regards,
> > > > Even Xu
> > > >
> > > > -----Original Message-----
> > > > From: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > > Sent: Friday, September 15, 2023 2:01 PM
> > > > To: Xu, Even <even.xu@intel.com>
> > > > Cc: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>;
> > > > jikos@kernel.org; benjamin.tissoires@redhat.com;
> > > > linux-pm@vger.kernel.org; linux-pci@vger.kernel.org; Lee, Jian
> > > > Hui
> > > > <jianhui.lee@canonical.com>; Zhang, Lixu
> > > > <lixu.zhang@intel.com>;
> > > > Ba, Najumon <najumon.ba@intel.com>;
> > > > linux-input@vger.kernel.org;
> > > > linux-kernel@vger.kernel.org
> > > > Subject: Re: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB
> > > > wakeup
> > > >
> > > > Hi Even,
> > > >
> > > > On Fri, Sep 15, 2023 at 1:31 PM Xu, Even <even.xu@intel.com>
> > > > wrote:
> > > > >
> > > > > Hi, Srinivas,
> > > > >
> > > > > Sure, I will test it.
> > > > > As long term not working on EHL, I doesn't have EHL board on
> > > > > hand
> > > > > right now, I can test this patch on other ISH related
> > > > > platforms.
> > > > > From the patch, it's focus on EHL platform, I assume Kai-Heng
> > > > > already verified the function on EHL board.
> > > >
> > > > I only made sure the GPE overflow issue is fixed by the patch,
> > > > but
> > > > I didn't test the S5 wakeup.
> > > > That's because I don't know how to test it on the EHL system I
> > > > have.
> > > > I'll test it if you can let me know how to test the S5 wakeup.
> > > >
> > > > Kai-Heng
> > > >
> > > > > I don't think it will take effect on other platforms, anyway,
> > > > > I
> > > > > will test it on the platforms I have to provide cross
> > > > > platform
> > > > > verification.
> > > > >
> > > > > Thanks!
> > > > >
> > > > > Best Regards,
> > > > > Even Xu
> > > > >
> > > > > -----Original Message-----
> > > > > From: srinivas pandruvada
> > > > > <srinivas.pandruvada@linux.intel.com>
> > > > > Sent: Friday, September 15, 2023 12:11 AM
> > > > > To: Kai-Heng Feng <kai.heng.feng@canonical.com>;
> > > > > jikos@kernel.org;
> > > > > benjamin.tissoires@redhat.com
> > > > > Cc: linux-pm@vger.kernel.org; linux-pci@vger.kernel.org; Lee,
> > > > > Jian Hui
> > > > > <jianhui.lee@canonical.com>; Xu, Even <even.xu@intel.com>;
> > > > > Zhang,
> > > > > Lixu
> > > > > <lixu.zhang@intel.com>; Ba, Najumon <najumon.ba@intel.com>;
> > > > > linux-input@vger.kernel.org; linux-kernel@vger.kernel.org
> > > > > Subject: Re: [PATCH] HID: intel-ish-hid: ipc: Rework EHL OOB
> > > > > wakeup
> > > > >
> > > > > Hi Even,
> > > > >
> > > > > On Thu, 2023-09-14 at 12:18 +0800, Kai-Heng Feng wrote:
> > > > > > System cannot suspend more than 255 times because the
> > > > > > driver
> > > > > > doesn't
> > > > > > have corresponding acpi_disable_gpe() for
> > > > > > acpi_enable_gpe(), so
> > > > > > the
> > > > > > GPE refcount overflows.
> > > > > >
> > > > > > Since PCI core and ACPI core already handles PCI PME wake
> > > > > > and
> > > > > > GPE
> > > > > > wake when the device has wakeup capability, use
> > > > > > device_init_wakeup()
> > > > > > to let them do the wakeup setting work.
> > > > > >
> > > > > > Also add a shutdown callback which uses
> > > > > > pci_prepare_to_sleep()
> > > > > > to
> > > > > > let PCI and ACPI set OOB wakeup for S5.
> > > > > >
> > > > > Please test this change.
> > > > >
> > > > > Thanks,
> > > > > Srinivas
> > > > >
> > > > > > Fixes: 2e23a70edabe ("HID: intel-ish-hid: ipc: finish power
> > > > > > flow for
> > > > > > EHL OOB")
> > > > > > Cc: Jian Hui Lee <jianhui.lee@canonical.com>
> > > > > > Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> > > > > > ---
> > > > > > drivers/hid/intel-ish-hid/ipc/pci-ish.c | 59
> > > > > > +++++++----------------
> > > > > > --
> > > > > > 1 file changed, 15 insertions(+), 44 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > > b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > > index 55cb25038e63..65e7eeb2fa64 100644
> > > > > > --- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > > +++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
> > > > > > @@ -119,42 +119,6 @@ static inline bool
> > > > > > ish_should_leave_d0i3(struct
> > > > > > pci_dev *pdev)
> > > > > > return !pm_resume_via_firmware() || pdev->device ==
> > > > > > CHV_DEVICE_ID; }
> > > > > >
> > > > > > -static int enable_gpe(struct device *dev) -{ -#ifdef
> > > > > > CONFIG_ACPI
> > > > > > - acpi_status acpi_sts;
> > > > > > - struct acpi_device *adev;
> > > > > > - struct acpi_device_wakeup *wakeup;
> > > > > > -
> > > > > > - adev = ACPI_COMPANION(dev);
> > > > > > - if (!adev) {
> > > > > > - dev_err(dev, "get acpi handle failed\n");
> > > > > > - return -ENODEV;
> > > > > > - }
> > > > > > - wakeup = &adev->wakeup;
> > > > > > -
> > > > > > - acpi_sts = acpi_enable_gpe(wakeup->gpe_device,
> > > > > > wakeup-
> > > > > > > gpe_number);
> > > > > > - if (ACPI_FAILURE(acpi_sts)) {
> > > > > > - dev_err(dev, "enable ose_gpe failed\n");
> > > > > > - return -EIO;
> > > > > > - }
> > > > > > -
> > > > > > - return 0;
> > > > > > -#else
> > > > > > - return -ENODEV;
> > > > > > -#endif
> > > > > > -}
> > > > > > -
> > > > > > -static void enable_pme_wake(struct pci_dev *pdev) -{
> > > > > > - if ((pci_pme_capable(pdev, PCI_D0) ||
> > > > > > - pci_pme_capable(pdev, PCI_D3hot) ||
> > > > > > - pci_pme_capable(pdev, PCI_D3cold)) &&
> > > > > > !enable_gpe(&pdev-
> > > > > > > dev)) {
> > > > > > - pci_pme_active(pdev, true);
> > > > > > - dev_dbg(&pdev->dev, "ish ipc driver pme
> > > > > > wake
> > > > > > enabled\n");
> > > > > > - }
> > > > > > -}
> > > > > > -
> > > > > > /**
> > > > > > * ish_probe() - PCI driver probe callback
> > > > > > * @pdev: pci device
> > > > > > @@ -225,7 +189,7 @@ static int ish_probe(struct pci_dev
> > > > > > *pdev,
> > > > > > const
> > > > > > struct pci_device_id *ent)
> > > > > >
> > > > > > /* Enable PME for EHL */
> > > > > > if (pdev->device == EHL_Ax_DEVICE_ID)
> > > > > > - enable_pme_wake(pdev);
> > > > > > + device_init_wakeup(dev, true);
> > > > > >
> > > > > > ret = ish_init(ishtp);
> > > > > > if (ret)
> > > > > > @@ -248,6 +212,19 @@ static void ish_remove(struct pci_dev
> > > > > > *pdev)
> > > > > > ish_device_disable(ishtp_dev); }
> > > > > >
> > > > > > +
> > > > > > +/**
> > > > > > + * ish_shutdown() - PCI driver shutdown callback
> > > > > > + * @pdev: pci device
> > > > > > + *
> > > > > > + * This function sets up wakeup for S5 */ static void
> > > > > > +ish_shutdown(struct pci_dev *pdev) {
> > > > > > + if (pdev->device == EHL_Ax_DEVICE_ID)
> > > > > > + pci_prepare_to_sleep(pdev); }
> > > > > > +
> > > > > > static struct device __maybe_unused *ish_resume_device;
> > > > > >
> > > > > > /* 50ms to get resume response */
> > > > > > @@ -370,13 +347,6 @@ static int __maybe_unused
> > > > > > ish_resume(struct
> > > > > > device *device)
> > > > > > struct pci_dev *pdev = to_pci_dev(device);
> > > > > > struct ishtp_device *dev = pci_get_drvdata(pdev);
> > > > > >
> > > > > > - /* add this to finish power flow for EHL */
> > > > > > - if (dev->pdev->device == EHL_Ax_DEVICE_ID) {
> > > > > > - pci_set_power_state(pdev, PCI_D0);
> > > > > > - enable_pme_wake(pdev);
> > > > > > - dev_dbg(dev->devc, "set power state to D0
> > > > > > for
> > > > > > ehl\n");
> > > > > > - }
> > > > > > -
> > > > > > ish_resume_device = device;
> > > > > > dev->resume_flag = 1;
> > > > > >
> > > > > > @@ -392,6 +362,7 @@ static struct pci_driver ish_driver = {
> > > > > > .id_table = ish_pci_tbl,
> > > > > > .probe = ish_probe,
> > > > > > .remove = ish_remove,
> > > > > > + .shutdown = ish_shutdown,
> > > > > > .driver.pm = &ish_pm_ops,
> > > > > > };
> > > > > >
> > > > >
> >
^ permalink raw reply
* Re: [PATCH v3 1/1] backlight: hid_bl: Add VESA VCP HID backlight driver
From: Julius Zint @ 2023-09-19 17:46 UTC (permalink / raw)
To: Hans de Goede
Cc: Thomas Weißschuh, Lee Jones, Daniel Thompson, Jingoo Han,
Jiri Kosina, Benjamin Tissoires, Helge Deller, linux-kernel,
dri-devel, linux-input, linux-fbdev
In-Reply-To: <f95da7ff-06dd-2c0e-d563-7e5ad61c3bcc@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3882 bytes --]
On Wed, 6 Sep 2023, Hans de Goede wrote:
> Hi Julius,
>
> On 9/4/23 21:02, Julius Zint wrote:
> >
> >
> > On Mon, 4 Sep 2023, Thomas Weißschuh wrote:
> >
> >> +Cc Hans who ins involved with the backlight subsystem
> >>
> >> Hi Julius,
> >>
> >> today I stumbled upon a mail from Hans [0], which explains that the
> >> backlight subsystem is not actually a good fit (yet?) for external
> >> displays.
> >>
> >> It seems a new API is in the works that would better fit, but I'm not
> >> sure about the state of this API. Maybe Hans can clarify.
> >>
> >> This also ties back to my review question how userspace can figure out
> >> to which display a backlight devices applies. So far it can not.
> >>
> >> [0] https://lore.kernel.org/lkml/7f2d88de-60c5-e2ff-9b22-acba35cfdfb6@redhat.com/
> >>
> >
> > Hi Thomas,
> >
> > thanks for the hint. I will make sure to give this a proper read and
> > see, if it fits my use case better then the current backlight subsystem.
>
> Note the actual proposal for the new usespace API for display brightness
> control is here:
>
> https://lore.kernel.org/dri-devel/b61d3eeb-6213-afac-2e70-7b9791c86d2e@redhat.com/
>
> I have finished / stabilized the backlight code refactor which I landed
> in 6.1, which is a prerequisite for the above proposal. But I have not
> been able to make time to actually implement the above proposal; and
> I don't know when I will be able to make time for this.
>
> > Especially since I wasnt able to properly address your other review
> > comments for now. You are right that the name should align better with
> > the kernel module and also, that it is possible for multiple displays to
> > be attached.
> >
> > In its current state, this would mean that you could only control the
> > backlight for the first HID device (enough for me :-).
> >
> > The systemd-backlight@.service uses not only the file name, but also the
> > full bus path for storing/restoring backlights. I did not yet get around
> > to see how the desktops handle brightness control, but since the
> > systemd-backlight@.service already uses the name, its important to stay
> > the same over multiple boots.
> >
> > I would be able to get a handle on the underlying USB device and use the
> > serial to uniquely (and persistently) name the backlight. But it does
> > feel hacky doing it this way.
>
> So mutter (gnome-shell compositor library) has a similar issue when saving
> monitor layouts and I can tell you beforehand that monitor serial numbers
> by themselves are not unique enough. Some models just report 123456789
> as serial and if you have a dual-monitor setup with 2 such monitors
> and name the backlight class device <serial>-vcp-hid or something like that
> you will still end up with 2 identical names.
>
> To avoid this when saving monitor layouts mutter saves both the port
> to which the monitor is attached (e.g. DP-1 DP-2) and the serialnumber
> and on startup / monitor hotplug when it checks to see if it has saved
> layout info for the monitor it checks the port+serialnr combination.
>
> So what I think you should do is figure out a way to map which
> VCP HID device maps to which drm-connector and then use
> the connector-name + serial-nr to generate the backlight device name.
>
> We will need the mapping the a drm-connector object anyway for
> the new brightness API proposal from above.
>
> Note this does NOT solve the fact that registering a new backlight
> class device for an external monitor on a laptop will hopelessly
> confuse userspace, see:
>
> https://lore.kernel.org/lkml/7f2d88de-60c5-e2ff-9b22-acba35cfdfb6@redhat.com/
>
> Regards,
>
> Hans
>
Thank you for all this additional information. I have watched the talks
and read up upon the mail threads you`ve linked.
I will see if I can make the mapping to the DRM connector and plan to
update this patchset.
Thanks,
Julius
^ permalink raw reply
* [PATCH 01/49] iio: accel: hid-sensor-accel-3d: Convert to platform remove callback returning void
From: Uwe Kleine-König @ 2023-09-19 17:48 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Jiri Kosina, Srinivas Pandruvada, Lars-Peter Clausen, linux-input,
linux-iio, kernel
In-Reply-To: <20230919174931.1417681-1-u.kleine-koenig@pengutronix.de>
The .remove() callback for a platform driver returns an int which makes
many driver authors wrongly assume it's possible to do error handling by
returning an error code. However the value returned is ignored (apart
from emitting a warning) and this typically results in resource leaks.
To improve here there is a quest to make the remove callback return
void. In the first step of this quest all drivers are converted to
.remove_new() which already returns void. Eventually after all drivers
are converted, .remove_new() will be renamed to .remove().
Trivially convert this driver from always returning zero in the remove
callback to the void returning variant.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/iio/accel/hid-sensor-accel-3d.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c
index 5eac7ea19993..9b7a73a4c48a 100644
--- a/drivers/iio/accel/hid-sensor-accel-3d.c
+++ b/drivers/iio/accel/hid-sensor-accel-3d.c
@@ -422,7 +422,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
}
/* Function to deinitialize the processing for usage id */
-static int hid_accel_3d_remove(struct platform_device *pdev)
+static void hid_accel_3d_remove(struct platform_device *pdev)
{
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
@@ -431,8 +431,6 @@ static int hid_accel_3d_remove(struct platform_device *pdev)
sensor_hub_remove_callback(hsdev, hsdev->usage);
iio_device_unregister(indio_dev);
hid_sensor_remove_trigger(indio_dev, &accel_state->common_attributes);
-
- return 0;
}
static const struct platform_device_id hid_accel_3d_ids[] = {
@@ -454,7 +452,7 @@ static struct platform_driver hid_accel_3d_platform_driver = {
.pm = &hid_sensor_pm_ops,
},
.probe = hid_accel_3d_probe,
- .remove = hid_accel_3d_remove,
+ .remove_new = hid_accel_3d_remove,
};
module_platform_driver(hid_accel_3d_platform_driver);
--
2.40.1
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox