@@ -227,6 +227,9 @@ static int sysc_wait_softreset(struct sysc *ddata)
227227 u32 sysc_mask , syss_done , rstval ;
228228 int syss_offset , error = 0 ;
229229
230+ if (ddata -> cap -> regbits -> srst_shift < 0 )
231+ return 0 ;
232+
230233 syss_offset = ddata -> offsets [SYSC_SYSSTATUS ];
231234 sysc_mask = BIT (ddata -> cap -> regbits -> srst_shift );
232235
@@ -970,9 +973,15 @@ static int sysc_enable_module(struct device *dev)
970973 return error ;
971974 }
972975 }
973- error = sysc_wait_softreset (ddata );
974- if (error )
975- dev_warn (ddata -> dev , "OCP softreset timed out\n" );
976+ /*
977+ * Some modules like i2c and hdq1w have unusable reset status unless
978+ * the module reset quirk is enabled. Skip status check on enable.
979+ */
980+ if (!(ddata -> cfg .quirks & SYSC_MODULE_QUIRK_ENA_RESETDONE )) {
981+ error = sysc_wait_softreset (ddata );
982+ if (error )
983+ dev_warn (ddata -> dev , "OCP softreset timed out\n" );
984+ }
976985 if (ddata -> cfg .quirks & SYSC_QUIRK_OPT_CLKS_IN_RESET )
977986 sysc_disable_opt_clocks (ddata );
978987
@@ -1373,17 +1382,17 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
13731382 SYSC_QUIRK ("hdmi" , 0 , 0 , 0x10 , - ENODEV , 0x50030200 , 0xffffffff ,
13741383 SYSC_QUIRK_OPT_CLKS_NEEDED ),
13751384 SYSC_QUIRK ("hdq1w" , 0 , 0 , 0x14 , 0x18 , 0x00000006 , 0xffffffff ,
1376- SYSC_MODULE_QUIRK_HDQ1W ),
1385+ SYSC_MODULE_QUIRK_HDQ1W | SYSC_MODULE_QUIRK_ENA_RESETDONE ),
13771386 SYSC_QUIRK ("hdq1w" , 0 , 0 , 0x14 , 0x18 , 0x0000000a , 0xffffffff ,
1378- SYSC_MODULE_QUIRK_HDQ1W ),
1387+ SYSC_MODULE_QUIRK_HDQ1W | SYSC_MODULE_QUIRK_ENA_RESETDONE ),
13791388 SYSC_QUIRK ("i2c" , 0 , 0 , 0x20 , 0x10 , 0x00000036 , 0x000000ff ,
1380- SYSC_MODULE_QUIRK_I2C ),
1389+ SYSC_MODULE_QUIRK_I2C | SYSC_MODULE_QUIRK_ENA_RESETDONE ),
13811390 SYSC_QUIRK ("i2c" , 0 , 0 , 0x20 , 0x10 , 0x0000003c , 0x000000ff ,
1382- SYSC_MODULE_QUIRK_I2C ),
1391+ SYSC_MODULE_QUIRK_I2C | SYSC_MODULE_QUIRK_ENA_RESETDONE ),
13831392 SYSC_QUIRK ("i2c" , 0 , 0 , 0x20 , 0x10 , 0x00000040 , 0x000000ff ,
1384- SYSC_MODULE_QUIRK_I2C ),
1393+ SYSC_MODULE_QUIRK_I2C | SYSC_MODULE_QUIRK_ENA_RESETDONE ),
13851394 SYSC_QUIRK ("i2c" , 0 , 0 , 0x10 , 0x90 , 0x5040000a , 0xfffff0f0 ,
1386- SYSC_MODULE_QUIRK_I2C ),
1395+ SYSC_MODULE_QUIRK_I2C | SYSC_MODULE_QUIRK_ENA_RESETDONE ),
13871396 SYSC_QUIRK ("gpu" , 0x50000000 , 0x14 , - ENODEV , - ENODEV , 0x00010201 , 0xffffffff , 0 ),
13881397 SYSC_QUIRK ("gpu" , 0x50000000 , 0xfe00 , 0xfe10 , - ENODEV , 0x40000000 , 0xffffffff ,
13891398 SYSC_MODULE_QUIRK_SGX ),
0 commit comments