Skip to content

Commit adb3aba

Browse files
Frank Wangrkhuangtao
authored andcommitted
usb: typec: tcpm: fix panic when pd disabled in dt
The pd revision can't be initialized when the 'pd-disable' property is added in DT, and the negotiated_rev becomes be invalid, which causes kernel panics. The Kernel panic has the following stack trace: [ 4.262221][ T182] Unable to handle kernel paging request at virtual address ffffffc8096bf508 [ 4.264702][ T182] Mem abort info: [ 4.265014][ T182] ESR = 0x0000000096000005 [ 4.265411][ T182] EC = 0x25: DABT (current EL), IL = 32 bits [ 4.265939][ T182] SET = 0, FnV = 0 [ 4.266271][ T182] EA = 0, S1PTW = 0 [ 4.266612][ T182] FSC = 0x05: level 1 translation fault [ 4.267107][ T182] Data abort info: [ 4.267426][ T182] ISV = 0, ISS = 0x00000005 [ 4.267823][ T182] CM = 0, WnR = 0 [ 4.268152][ T182] swapper pgtable: 4k pages, 39-bit VAs, pgdp=000000004217e000 [ 4.268802][ T182] [ffffffc8096bf508] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000 [ 4.269633][ T182] Internal error: Oops: 0000000096000005 [khadas#1] PREEMPT SMP [ 4.270250][ T182] Modules linked in: [ 4.270584][ T182] CPU: 5 PID: 182 Comm: 2-004e Not tainted 6.1.99 khadas#7 [ 4.271158][ T182] Hardware name: Rockchip RK3576 EVB1 V10 Board (DT) [ 4.271730][ T182] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 4.272402][ T182] pc : tcpm_set_state+0x6c/0x11c [ 4.272834][ T182] lr : tcpm_set_state+0x40/0x11c [ 4.273254][ T182] sp : ffffffc00beebd70 [ 4.273606][ T182] x29: ffffffc00beebd70 x28: 0000000000000000 x27: ffffffc009f59e00 [ 4.274303][ T182] x26: ffffffc009f27008 x25: 0000000000000001 x24: ffffff80c7dc7148 [ 4.274996][ T182] x23: ffffffc008c22ee8 x22: 0000000000000011 x21: 0000000000000000 [ 4.275689][ T182] x20: 0000000000000012 x19: ffffff80c4f8c040 x18: ffffffc00bd45028 [ 4.276372][ T182] x17: 3a736d61202c312d x16: ffffffffffffffff x15: 0000000000000004 [ 4.277065][ T182] x14: ffffffc009fdc100 x13: 0000000000003fff x12: 0000000000000003 [ 4.277757][ T182] x11: ffffffc0096bf510 x10: 00000000ffffffff x9 : ffffffc0096bf528 [ 4.278450][ T182] x8 : 0000000000000000 x7 : 205b5d3430323236 x6 : 322e34202020205b [ 4.279143][ T182] x5 : ffffffc00a3fb617 x4 : ffffffc00beebac7 x3 : ffffffc009ba7471 [ 4.279836][ T182] x2 : ffffffc009bc41de x1 : ffffffc00beebb30 x0 : 0000000000000058 [ 4.280528][ T182] Call trace: [ 4.280805][ T182] tcpm_set_state+0x6c/0x11c [ 4.281204][ T182] run_state_machine+0x108c/0x1908 [ 4.281645][ T182] tcpm_state_machine_work+0x84/0xcc [ 4.282097][ T182] kthread_worker_fn+0xf4/0x228 [ 4.282517][ T182] kthread+0xec/0x1b8 [ 4.282860][ T182] ret_from_fork+0x10/0x20 Signed-off-by: Frank Wang <[email protected]> Change-Id: I7039c541039e17199f1db6b42ecf23af7f317963
1 parent 559aa0e commit adb3aba

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

drivers/usb/typec/tcpm/tcpm.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6249,10 +6249,8 @@ static int tcpm_fw_get_caps(struct tcpm_port *port,
62496249
port->port_type = port->typec_caps.type;
62506250
port->pd_supported = !fwnode_property_read_bool(fwnode, "pd-disable");
62516251

6252-
if (port->pd_supported) {
6253-
ret = fwnode_property_read_u32(fwnode, "pd-revision", &pd_revision);
6254-
port->typec_caps.pd_revision = !ret ? pd_revision & 0xffff : 0x0300;
6255-
}
6252+
ret = fwnode_property_read_u32(fwnode, "pd-revision", &pd_revision);
6253+
port->typec_caps.pd_revision = !ret ? pd_revision & 0xffff : 0x0300;
62566254

62576255
port->slow_charger_loop = fwnode_property_read_bool(fwnode, "slow-charger-loop");
62586256
if (port->port_type == TYPEC_PORT_SNK)

0 commit comments

Comments
 (0)