]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: use u32 for buf size in __amdgpu_eeprom_xfer
authorTao Zhou <tao.zhou1@amd.com>
Mon, 20 May 2024 08:47:32 +0000 (16:47 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 5 Jun 2024 14:57:47 +0000 (10:57 -0400)
And also make sure the value of msg[1].len should be in the range of u16.

Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c

index 09a34c7258e226d3290cdf4f61230cae1630a7e1..35fee3e8cde2b14905d6d971cf94323ea7d68c53 100644 (file)
@@ -90,7 +90,7 @@
 #define MAKE_I2C_ADDR(_aa) ((0xA << 3) | (((_aa) >> 16) & 0xF))
 
 static int __amdgpu_eeprom_xfer(struct i2c_adapter *i2c_adap, u32 eeprom_addr,
-                               u8 *eeprom_buf, u16 buf_size, bool read)
+                               u8 *eeprom_buf, u32 buf_size, bool read)
 {
        u8 eeprom_offset_buf[EEPROM_OFFSET_SIZE];
        struct i2c_msg msgs[] = {
@@ -133,15 +133,15 @@ static int __amdgpu_eeprom_xfer(struct i2c_adapter *i2c_adap, u32 eeprom_addr,
                         * cycle begins. This is implied for the
                         * "i2c_transfer()" abstraction.
                         */
-                       len = min(EEPROM_PAGE_SIZE - (eeprom_addr &
-                                                     EEPROM_PAGE_MASK),
-                                 (u32)buf_size);
+                       len = min(EEPROM_PAGE_SIZE - (eeprom_addr & EEPROM_PAGE_MASK),
+                                       buf_size);
                } else {
                        /* Reading from the EEPROM has no limitation
                         * on the number of bytes read from the EEPROM
                         * device--they are simply sequenced out.
+                        * Keep in mind that i2c_msg.len is u16 type.
                         */
-                       len = buf_size;
+                       len = min(U16_MAX, buf_size);
                }
                msgs[1].len = len;
                msgs[1].buf = eeprom_buf;