FAILED: patch "[PATCH] drm/amdgpu: set RAS EEPROM address from VBIOS" failed to apply to 5.13-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.13-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 39932ef75897bfcb8ba1120e7b09d615d74762fd Mon Sep 17 00:00:00 2001
From: John Clements <[email protected]>
Date: Wed, 4 Aug 2021 17:11:40 +0800
Subject: [PATCH] drm/amdgpu: set RAS EEPROM address from VBIOS
update to latest atombios fw table
[Backport to 5.14 - Alex]
Signed-off-by John Clements <[email protected]>
Reviewed-by Hawking Zhang <[email protected]>.
Signed-off-by Alex Deucher <[email protected]>
drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c +40 -0
@@ -468,6 +468,46 @@ bool amdgpu_atomfirmware_dynamic_boot_config_supported(struct amdgpu_device *adereturn (fw_cap &ATOM_FIRMWARE_CAP_DYNAMIC_BOOT_CFG_ENABLE ) ? true : false; } +/* +* Helper function to query RAS EEPROM address +* +* @adev: amdgpu_device pointer +* +* Return true if vbios supports ras rom address reporting +*/ +bool amdgpu_atomfirmware_ras_rom_addr (struct amdgpu_device *adev,uint8_t * i2c_address) +{ +struct amdgpu_mode_info *mode_info = &adev->mode_info; +int index; +u16 data_offset, size; +union firmware_info *firmware_info; +u8 frev, crev; + +if (i2c_address ==NULL ) +return false; + + *i2c_address =0 ; + + index =get_index_into_master_table (atom_master_list_of_data_tables_v2_1, + firmwareinfo); + +if (amdgpu_atom_parse_data_header (adev->mode_info.atom_context, + index, &size, &frev, &crev, &data_offset)) { +/* support firmware_info 3.4 + */ +if ((frev ==3 && crev >=4 ) || (frev >3 )) { + firmware_info = (union firmware_info *) + (mode_info->atom_context->bios + data_offset); + *i2c_address = firmware_info->v34.ras_rom_i2c_slave_addr; + } + } + +if (*i2c_address !=0 ) +return true; + +return false; +} + +union smu_info {struct atom_smu_info_v3_1 v31; };
drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h +1 -0
@@ -36,6 +36,7 @@ int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);int amdgpu_atomfirmware_get_gfx_info (struct amdgpu_device *adev);bool amdgpu_atomfirmware_mem_ecc_supported (struct amdgpu_device *adev);bool amdgpu_atomfirmware_sram_ecc_supported (struct amdgpu_device *adev); +bool amdgpu_atomfirmware_ras_rom_addr (struct amdgpu_device *adev,uint8_t * i2c_address);bool amdgpu_atomfirmware_mem_training_supported (struct amdgpu_device *adev);bool amdgpu_atomfirmware_dynamic_boot_config_supported (struct amdgpu_device *adev);int amdgpu_atomfirmware_get_fw_reserved_fb_size (struct amdgpu_device *adev);
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c +4 -0
@@ -26,6 +26,7 @@#include "amdgpu_ras.h" #include <linux/bits.h> #include "atom.h" +#include "amdgpu_atomfirmware.h" #define EEPROM_I2C_TARGET_ADDR_VEGA20 0xA0#define EEPROM_I2C_TARGET_ADDR_ARCTURUS 0xA8
@@ -96,6 +97,9 @@ static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev,if (!i2c_addr)return false; +if (amdgpu_atomfirmware_ras_rom_addr (adev, (uint8_t *)i2c_addr)) +return true; +switch (adev->asic_type) {case CHIP_VEGA20 : *i2c_addr =EEPROM_I2C_TARGET_ADDR_VEGA20 ;
drivers/gpu/drm/amd/include/atomfirmware.h +1 -1
@@ -590,7 +590,7 @@ struct atom_firmware_info_v3_4 {uint8_t board_i2c_feature_id;// enum of atom_board_i2c_feature_id_def uint8_t board_i2c_feature_gpio_id;// i2c id find in gpio_lut data table gpio_id uint8_t board_i2c_feature_slave_addr; -uint8_t reserved3; +uint8_t ras_rom_i2c_slave_addr;uint16_t bootup_mvddq_mv;uint16_t bootup_mvpp_mv;uint32_t zfbstartaddrin16mb;