drm/amd/pm: Extend the I2C quirk table
authorLuben Tuikov <luben.tuikov@amd.com>
Sat, 20 Feb 2021 04:37:28 +0000 (23:37 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 1 Jul 2021 04:24:40 +0000 (00:24 -0400)
Extend the I2C quirk table for SMU access
controlled I2C adapters. Let the kernel I2C layer
check that the messages all have the same address,
and that their combined size doesn't exceed the
maximum size of a SMU software I2C request.

Suggested-by: Jean Delvare <jdelvare@suse.de>
Cc: Jean Delvare <jdelvare@suse.de>
Cc: Alexander Deucher <Alexander.Deucher@amd.com>
Cc: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
Cc: Lijo Lazar <Lijo.Lazar@amd.com>
Cc: Stanley Yang <Stanley.Yang@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Luben Tuikov <luben.tuikov@amd.com>
Acked-by: Alexander Deucher <Alexander.Deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c

index 54aa48a91e6d4b09ac1cc426870a13ab166422d2..c9383d2831a4e1bedec672dafb103cc3fe826d9d 100644 (file)
@@ -2036,8 +2036,11 @@ static const struct i2c_algorithm arcturus_i2c_algo = {
 
 
 static const struct i2c_adapter_quirks arcturus_i2c_control_quirks = {
-       .max_read_len = MAX_SW_I2C_COMMANDS,
+       .flags = I2C_AQ_COMB | I2C_AQ_COMB_SAME_ADDR,
+       .max_read_len  = MAX_SW_I2C_COMMANDS,
        .max_write_len = MAX_SW_I2C_COMMANDS,
+       .max_comb_1st_msg_len = 2,
+       .max_comb_2nd_msg_len = MAX_SW_I2C_COMMANDS - 2,
 };
 
 static int arcturus_i2c_control_init(struct smu_context *smu, struct i2c_adapter *control)
index f8b194cabc0dfd21e02011ec531282d44c23e14a..77969dbc283ee3c8f6083eb0b033b3e7edb12530 100644 (file)
@@ -2834,8 +2834,11 @@ static const struct i2c_algorithm navi10_i2c_algo = {
 };
 
 static const struct i2c_adapter_quirks navi10_i2c_control_quirks = {
-       .max_read_len = MAX_SW_I2C_COMMANDS,
+       .flags = I2C_AQ_COMB | I2C_AQ_COMB_SAME_ADDR,
+       .max_read_len  = MAX_SW_I2C_COMMANDS,
        .max_write_len = MAX_SW_I2C_COMMANDS,
+       .max_comb_1st_msg_len = 2,
+       .max_comb_2nd_msg_len = MAX_SW_I2C_COMMANDS - 2,
 };
 
 static int navi10_i2c_control_init(struct smu_context *smu, struct i2c_adapter *control)
index 2444e13c4901b3675d1020d69a82263638cc2b6b..37cfe0ccd6863bb92df68316c934bec1db5cc06f 100644 (file)
@@ -3541,8 +3541,11 @@ static const struct i2c_algorithm sienna_cichlid_i2c_algo = {
 };
 
 static const struct i2c_adapter_quirks sienna_cichlid_i2c_control_quirks = {
-       .max_read_len = MAX_SW_I2C_COMMANDS,
+       .flags = I2C_AQ_COMB | I2C_AQ_COMB_SAME_ADDR,
+       .max_read_len  = MAX_SW_I2C_COMMANDS,
        .max_write_len = MAX_SW_I2C_COMMANDS,
+       .max_comb_1st_msg_len = 2,
+       .max_comb_2nd_msg_len = MAX_SW_I2C_COMMANDS - 2,
 };
 
 static int sienna_cichlid_i2c_control_init(struct smu_context *smu, struct i2c_adapter *control)