Re: [PATCH v2 1/1] i2c: designware: Fix wrong setting for {ss,fs,hs}_{h,l}cnt registers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/2/24 4:01 PM, Adrian Huang wrote:
From: Adrian Huang <ahuang12@xxxxxxxxxx>

When disabling CONFIG_X86_AMD_PLATFORM_DEVICE option, the driver
'drivers/acpi/acpi_apd.c' won't be compiled. This leads to a situation
where BMC (Baseboard Management Controller) cannot retrieve the memory
temperature via the i2c interface after i2c DW driver is loaded. Note
that BMC can retrieve the memory temperature before booting into OS.

[Debugging Detail]
   1. dev->pclk and dev->clk are NULL when calling devm_clk_get_optional()
      in dw_i2c_plat_probe().

   2. The callings of i2c_dw_scl_hcnt() in i2c_dw_set_timings_master()
      return 65528 (-8 in integer format) or 65533 (-3 in integer format).
      The following log shows SS's HCNT/LCNT:

        i2c_designware AMDI0010:01: Standard Mode HCNT:LCNT = 65533:65535

   3. The callings of i2c_dw_scl_lcnt() in i2c_dw_set_timings_master()
      return 65535 (-1 in integer format). The following log shows SS's
      HCNT/LCNT:

        i2c_designware AMDI0010:01: Fast Mode HCNT:LCNT = 65533:65535

   4. i2c_dw_init_master() configures the register IC_SS_SCL_HCNT with
      the value 65533. However, the DW i2c databook mentioned the value
      cannot be higher than 65525. Quote from the DW i2c databook:

        NOTE: This register must not be programmed to a value higher than
              65525, because DW_apb_i2c uses a 16-bit counter to flag an
              I2C bus idle condition when this counter reaches a value of
              IC_SS_SCL_HCNT + 10.

   5. Since ss_hcnt, ss_lcnt, fs_hcnt, and fs_lcnt are the invalid
      values, we should not write the corresponding registers.

Fix the issue by reading dev->{ss,fs,hs}_hcnt and dev->{ss,fs,hs}_lcnt
from HW registers if ic_clk is not set.

Link: https://lore.kernel.org/linux-i2c/8295cbe1-a7c5-4a35-a189-5d0bff51ede6@xxxxxxxxxxxxxxx/
Suggested-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx>
Signed-off-by: Adrian Huang <ahuang12@xxxxxxxxxx>
Reported-by: Dong Wang <wangdong28@xxxxxxxxxx>
Tested-by: Dong Wang <wangdong28@xxxxxxxxxx>

Acked-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx>




[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux