Remove operations related to legacy address conversion
Signed-off-by: Ce Sun <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 248 +-----------------
.../gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c | 6 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c | 40 ---
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h | 13 -
drivers/gpu/drm/amd/amdgpu/umc_v12_0.c | 26 --
5 files changed, 12 insertions(+), 321 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index e7156b85e727..69fca6aacdc7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -2882,77 +2882,6 @@ static int amdgpu_ras_realloc_eh_data_space(struct
amdgpu_device *adev,
return 0;
}
-static int amdgpu_ras_mca2pa_by_idx(struct amdgpu_device *adev,
- struct eeprom_table_record *bps,
- struct ras_err_data *err_data)
-{
- struct ta_ras_query_address_input addr_in;
- uint32_t socket = 0;
- int ret = 0;
-
- if (adev->smuio.funcs && adev->smuio.funcs->get_socket_id)
- socket = adev->smuio.funcs->get_socket_id(adev);
-
- /* reinit err_data */
- err_data->err_addr_cnt = 0;
- err_data->err_addr_len = adev->umc.retire_unit;
-
- memset(&addr_in, 0, sizeof(addr_in));
- addr_in.ma.err_addr = bps->address;
- addr_in.ma.socket_id = socket;
- addr_in.ma.ch_inst = bps->mem_channel;
- if (!amdgpu_ras_smu_eeprom_supported(adev)) {
- /* tell RAS TA the node instance is not used */
- addr_in.ma.node_inst = TA_RAS_INV_NODE;
- } else {
- addr_in.ma.umc_inst = bps->mcumc_id;
- addr_in.ma.node_inst = bps->cu;
- }
-
- if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr)
- ret = adev->umc.ras->convert_ras_err_addr(adev, err_data,
- &addr_in, NULL, false);
-
- return ret;
-}
-
-static int amdgpu_ras_mca2pa(struct amdgpu_device *adev,
- struct eeprom_table_record *bps,
- struct ras_err_data *err_data)
-{
- struct ta_ras_query_address_input addr_in;
- uint32_t die_id, socket = 0;
-
- if (adev->smuio.funcs && adev->smuio.funcs->get_socket_id)
- socket = adev->smuio.funcs->get_socket_id(adev);
-
- /* although die id is gotten from PA in nps1 mode, the id is
- * fitable for any nps mode
- */
- if (adev->umc.ras && adev->umc.ras->get_die_id_from_pa)
- die_id = adev->umc.ras->get_die_id_from_pa(adev, bps->address,
- bps->retired_page <<
AMDGPU_GPU_PAGE_SHIFT);
- else
- return -EINVAL;
-
- /* reinit err_data */
- err_data->err_addr_cnt = 0;
- err_data->err_addr_len = adev->umc.retire_unit;
-
- memset(&addr_in, 0, sizeof(addr_in));
- addr_in.ma.err_addr = bps->address;
- addr_in.ma.ch_inst = bps->mem_channel;
- addr_in.ma.umc_inst = bps->mcumc_id;
- addr_in.ma.node_inst = die_id;
- addr_in.ma.socket_id = socket;
-
- if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr)
- return adev->umc.ras->convert_ras_err_addr(adev, err_data,
- &addr_in, NULL, false);
- else
- return -EINVAL;
-}
-
static bool __check_record_in_range(struct amdgpu_device *adev,
struct eeprom_table_record *bps, int count)
{
@@ -3013,117 +2942,13 @@ static int
__amdgpu_ras_convert_rec_array_from_rom(struct amdgpu_device *adev,
struct eeprom_table_record *bps, struct
ras_err_data *err_data,
enum amdgpu_memory_partition nps)
{
- int i = 0;
- uint64_t chan_idx_v2;
- enum amdgpu_memory_partition save_nps;
-
- save_nps = (bps[0].retired_page >> UMC_NPS_SHIFT) & UMC_NPS_MASK;
- chan_idx_v2 = bps[0].retired_page & UMC_CHANNEL_IDX_V2;
-
/*old asics just have pa in eeprom*/
- if (IP_VERSION_MAJ(amdgpu_ip_version(adev, UMC_HWIP, 0)) < 12) {
- memcpy(err_data->err_addr, bps,
- sizeof(struct eeprom_table_record) *
adev->umc.retire_unit);
- goto out;
- }
-
- for (i = 0; i < adev->umc.retire_unit; i++)
- bps[i].retired_page &= ~(UMC_NPS_MASK << UMC_NPS_SHIFT);
-
- if (save_nps || chan_idx_v2) {
- if (save_nps == nps) {
- if (amdgpu_umc_pages_in_a_row(adev, err_data,
- bps[0].retired_page <<
AMDGPU_GPU_PAGE_SHIFT))
- return -EINVAL;
- for (i = 0; i < adev->umc.retire_unit; i++) {
- err_data->err_addr[i].address = bps[0].address;
- err_data->err_addr[i].mem_channel =
bps[0].mem_channel;
- err_data->err_addr[i].bank = bps[0].bank;
- err_data->err_addr[i].err_type =
bps[0].err_type;
- err_data->err_addr[i].mcumc_id =
bps[0].mcumc_id;
- }
- } else {
- if (amdgpu_ras_mca2pa_by_idx(adev, &bps[0], err_data))
- return -EINVAL;
- }
- } else {
- if (bps[0].address == 0) {
- /* for specific old eeprom data, mca address is not
stored,
- * calc it from pa
- */
- if (amdgpu_umc_pa2mca(adev, bps[0].retired_page <<
AMDGPU_GPU_PAGE_SHIFT,
- &(bps[0].address), AMDGPU_NPS1_PARTITION_MODE))
- return -EINVAL;
- }
+ memcpy(err_data->err_addr, bps,
+ sizeof(struct eeprom_table_record) * adev->umc.retire_unit);
- if (amdgpu_ras_mca2pa(adev, &bps[0], err_data)) {
- if (nps == AMDGPU_NPS1_PARTITION_MODE)
- memcpy(err_data->err_addr, bps,
- sizeof(struct eeprom_table_record) *
adev->umc.retire_unit);
- else
- return -EOPNOTSUPP;
- }
- }
-
-out:
return __amdgpu_ras_restore_bad_pages(adev, err_data->err_addr,
adev->umc.retire_unit);
}
-static int __amdgpu_ras_convert_rec_from_rom(struct amdgpu_device *adev,
- struct eeprom_table_record *bps, struct
ras_err_data *err_data,
- enum amdgpu_memory_partition nps)
-{
- int i = 0;
- uint64_t chan_idx_v2;
- enum amdgpu_memory_partition save_nps;
-
- if (!amdgpu_ras_smu_eeprom_supported(adev)) {
- save_nps = (bps->retired_page >> UMC_NPS_SHIFT) & UMC_NPS_MASK;
- chan_idx_v2 = bps->retired_page & UMC_CHANNEL_IDX_V2;
- bps->retired_page &= ~(UMC_NPS_MASK << UMC_NPS_SHIFT);
- } else {
- /* if pmfw manages eeprom, save_nps is not stored on eeprom,
- * we should always convert mca address into physical address,
- * make save_nps different from nps
- */
- save_nps = nps + 1;
- }
-
- if (save_nps == nps) {
- if (amdgpu_umc_pages_in_a_row(adev, err_data,
- bps->retired_page << AMDGPU_GPU_PAGE_SHIFT))
- return -EINVAL;
- for (i = 0; i < adev->umc.retire_unit; i++) {
- err_data->err_addr[i].address = bps->address;
- err_data->err_addr[i].mem_channel = bps->mem_channel;
- err_data->err_addr[i].bank = bps->bank;
- err_data->err_addr[i].err_type = bps->err_type;
- err_data->err_addr[i].mcumc_id = bps->mcumc_id;
- }
- } else {
- if (save_nps || chan_idx_v2) {
- if (amdgpu_ras_mca2pa_by_idx(adev, bps, err_data))
- return -EINVAL;
- } else {
- /* for specific old eeprom data, mca address is not
stored,
- * calc it from pa
- */
- if (bps->address == 0)
- if (amdgpu_umc_pa2mca(adev,
- bps->retired_page <<
AMDGPU_GPU_PAGE_SHIFT,
- &(bps->address),
- AMDGPU_NPS1_PARTITION_MODE))
- return -EINVAL;
-
- if (amdgpu_ras_mca2pa(adev, bps, err_data))
- return -EOPNOTSUPP;
- }
- }
-
- return __amdgpu_ras_restore_bad_pages(adev, err_data->err_addr,
-
adev->umc.retire_unit);
-}
-
/* it deal with vram only. */
int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,
struct eeprom_table_record *bps, int pages, bool from_rom)
@@ -3156,8 +2981,7 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,
if (from_rom) {
/* there is no pa recs in V3, so skip pa recs processing */
- if ((control->tbl_hdr.version < RAS_TABLE_VER_V3) &&
- !amdgpu_ras_smu_eeprom_supported(adev)) {
+ if (control->tbl_hdr.version < RAS_TABLE_VER_V3) {
for (i = 0; i < pages; i++) {
if (control->ras_num_recs - i >=
adev->umc.retire_unit) {
if ((bps[i].address == bps[i +
1].address) &&
@@ -3174,10 +2998,8 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,
}
}
}
- for (; i < pages; i++) {
- ret = __amdgpu_ras_convert_rec_from_rom(adev,
- &bps[i], &err_data, nps);
- }
+ for (; i < pages; i++)
+ bps[i].retired_page &= ~(UMC_NPS_MASK << UMC_NPS_SHIFT);
con->eh_data->count_saved = con->eh_data->count;
} else {
@@ -3202,7 +3024,7 @@ int amdgpu_ras_save_bad_pages(struct amdgpu_device *adev,
struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
struct ras_err_handler_data *data;
struct amdgpu_ras_eeprom_control *control;
- int save_count, unit_num, i;
+ int save_count, unit_num;
if (!con || !con->eh_data) {
if (new_cnt)
@@ -3239,21 +3061,10 @@ int amdgpu_ras_save_bad_pages(struct amdgpu_device
*adev,
/* only new entries are saved */
if (unit_num && save_count) {
/*old asics only save pa to eeprom like before*/
- if (IP_VERSION_MAJ(amdgpu_ip_version(adev, UMC_HWIP, 0)) < 12) {
- if (amdgpu_ras_eeprom_append(control,
- &data->bps[data->count_saved],
unit_num)) {
- dev_err(adev->dev, "Failed to save EEPROM table
data!");
- return -EIO;
- }
- } else {
- for (i = 0; i < unit_num; i++) {
- if (amdgpu_ras_eeprom_append(control,
- &data->bps[data->count_saved +
- i * adev->umc.retire_unit], 1))
{
- dev_err(adev->dev, "Failed to save
EEPROM table data!");
- return -EIO;
- }
- }
+ if (amdgpu_ras_eeprom_append(control,
+ &data->bps[data->count_saved], unit_num)) {
+ dev_err(adev->dev, "Failed to save EEPROM table data!");
+ return -EIO;
}
dev_info(adev->dev, "Saved %d pages to EEPROM table.\n",
save_count);
@@ -3272,7 +3083,7 @@ static int amdgpu_ras_load_bad_pages(struct amdgpu_device
*adev)
struct amdgpu_ras_eeprom_control *control =
&adev->psp.ras_context.ras->eeprom_control;
struct eeprom_table_record *bps;
- int ret, i = 0;
+ int ret;
/* no bad page record, skip eeprom access */
if (control->ras_num_recs == 0 || amdgpu_bad_page_threshold == 0)
@@ -3286,33 +3097,6 @@ static int amdgpu_ras_load_bad_pages(struct
amdgpu_device *adev)
if (ret) {
dev_err(adev->dev, "Failed to load EEPROM table records!");
} else {
- if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr) {
- /*In V3, there is no pa recs, and some cases(when
address==0) may be parsed
- as pa recs, so add verion check to avoid it.
- */
- if ((control->tbl_hdr.version < RAS_TABLE_VER_V3) &&
- !amdgpu_ras_smu_eeprom_supported(adev)) {
- for (i = 0; i < control->ras_num_recs; i++) {
- if ((control->ras_num_recs - i) >=
adev->umc.retire_unit) {
- if ((bps[i].address == bps[i +
1].address) &&
- (bps[i].mem_channel ==
bps[i + 1].mem_channel)) {
-
control->ras_num_pa_recs += adev->umc.retire_unit;
- i +=
(adev->umc.retire_unit - 1);
- } else {
-
control->ras_num_mca_recs +=
-
(control->ras_num_recs - i);
- break;
- }
- } else {
- control->ras_num_mca_recs +=
(control->ras_num_recs - i);
- break;
- }
- }
- } else {
- control->ras_num_mca_recs =
control->ras_num_recs;
- }
- }
-
ret = amdgpu_ras_add_bad_pages(adev, bps,
control->ras_num_recs, true);
if (ret)
goto out;
@@ -3424,9 +3208,6 @@ int amdgpu_ras_init_badpage_info(struct amdgpu_device
*adev)
ret = amdgpu_ras_eeprom_init(control);
control->is_eeprom_valid = !ret;
- if (!adev->umc.ras || !adev->umc.ras->convert_ras_err_addr)
- control->ras_num_pa_recs = control->ras_num_recs;
-
if (adev->umc.ras &&
adev->umc.ras->get_retire_flip_bits)
adev->umc.ras->get_retire_flip_bits(adev);
@@ -3446,13 +3227,6 @@ int amdgpu_ras_init_badpage_info(struct amdgpu_device
*adev)
adev, control->bad_channel_bitmap);
con->update_channel_flag = false;
}
-
- /* The format action is only applied to new ASICs */
- if (IP_VERSION_MAJ(amdgpu_ip_version(adev, UMC_HWIP, 0)) >= 12
&&
- control->tbl_hdr.version < RAS_TABLE_VER_V3)
- if (!amdgpu_ras_eeprom_reset_table(control))
- if (amdgpu_ras_save_bad_pages(adev, NULL))
- dev_warn(adev->dev, "Failed to format
RAS EEPROM data in V3 version!\n");
}
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
index 36f584f05e2f..292d76021644 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
@@ -665,7 +665,6 @@ amdgpu_ras_eeprom_append_table(struct
amdgpu_ras_eeprom_control *control,
const u32 num)
{
struct amdgpu_ras *con =
amdgpu_ras_get_context(to_amdgpu_device(control));
- struct amdgpu_device *adev = to_amdgpu_device(control);
u32 a, b, i;
u8 *buf, *pp;
int res;
@@ -770,10 +769,7 @@ amdgpu_ras_eeprom_append_table(struct
amdgpu_ras_eeprom_control *control,
% control->ras_max_record_count;
/*old asics only save pa to eeprom like before*/
- if (IP_VERSION_MAJ(amdgpu_ip_version(adev, UMC_HWIP, 0)) < 12)
- control->ras_num_pa_recs += num;
- else
- control->ras_num_mca_recs += num;
+ control->ras_num_pa_recs += num;
control->ras_num_bad_pages = con->bad_page_num;
Out:
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
index 516ae7a5cfeb..a99f1bae7a8f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
@@ -501,43 +501,3 @@ int amdgpu_umc_loop_channels(struct amdgpu_device *adev,
return 0;
}
-
-int amdgpu_umc_pages_in_a_row(struct amdgpu_device *adev,
- struct ras_err_data *err_data, uint64_t pa_addr)
-{
- struct ta_ras_query_address_output addr_out;
-
- /* reinit err_data */
- err_data->err_addr_cnt = 0;
- err_data->err_addr_len = adev->umc.retire_unit;
-
- addr_out.pa.pa = pa_addr;
- if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr)
- return adev->umc.ras->convert_ras_err_addr(adev, err_data, NULL,
- &addr_out, false);
- else
- return -EINVAL;
-}
-
-int amdgpu_umc_pa2mca(struct amdgpu_device *adev,
- uint64_t pa, uint64_t *mca, enum amdgpu_memory_partition nps)
-{
- struct ta_ras_query_address_input addr_in;
- struct ta_ras_query_address_output addr_out;
- int ret;
-
- /* nps: the pa belongs to */
- addr_in.pa.pa = pa | ((uint64_t)nps << 58);
- addr_in.addr_type = TA_RAS_PA_TO_MCA;
- ret = psp_ras_query_address(&adev->psp, &addr_in, &addr_out);
- if (ret) {
- dev_warn(adev->dev, "Failed to query RAS MCA address for
0x%llx",
- pa);
-
- return ret;
- }
-
- *mca = addr_out.ma.err_addr;
-
- return 0;
-}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h
b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h
index f65f3e082c64..cdaee4a049c3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h
@@ -103,13 +103,6 @@ struct amdgpu_umc_ras {
void *ras_error_status);
bool (*check_ecc_err_status)(struct amdgpu_device *adev,
enum amdgpu_mca_error_type type, void
*ras_error_status);
- int (*convert_ras_err_addr)(struct amdgpu_device *adev,
- struct ras_err_data *err_data,
- struct ta_ras_query_address_input *addr_in,
- struct ta_ras_query_address_output *addr_out,
- bool dump_addr);
- uint32_t (*get_die_id_from_pa)(struct amdgpu_device *adev,
- uint64_t mca_addr, uint64_t retired_page);
void (*get_retire_flip_bits)(struct amdgpu_device *adev);
void (*mca_ipid_parse)(struct amdgpu_device *adev, uint64_t ipid,
uint32_t *did, uint32_t *ch, uint32_t *umc_inst,
uint32_t *sid);
@@ -179,10 +172,4 @@ int amdgpu_umc_loop_channels(struct amdgpu_device *adev,
void amdgpu_umc_handle_bad_pages(struct amdgpu_device *adev,
void *ras_error_status);
-int amdgpu_umc_pages_in_a_row(struct amdgpu_device *adev,
- struct ras_err_data *err_data, uint64_t pa_addr);
-int amdgpu_umc_lookup_bad_pages_in_a_row(struct amdgpu_device *adev,
- uint64_t pa_addr, uint64_t *pfns, int len);
-int amdgpu_umc_pa2mca(struct amdgpu_device *adev,
- uint64_t pa, uint64_t *mca, enum amdgpu_memory_partition nps);
#endif
diff --git a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
index 4d6197c0efb1..beb89b0f9f3e 100644
--- a/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
@@ -197,31 +197,6 @@ static bool umc_v12_0_check_ecc_err_status(struct
amdgpu_device *adev,
return false;
}
-static uint32_t umc_v12_0_get_die_id(struct amdgpu_device *adev,
- uint64_t mca_addr, uint64_t retired_page)
-{
- uint32_t die = 0;
-
- /* we only calculate die id for nps1 mode right now */
- die += ((((retired_page >> 12) & 0x1ULL)^
- ((retired_page >> 20) & 0x1ULL) ^
- ((retired_page >> 27) & 0x1ULL) ^
- ((retired_page >> 34) & 0x1ULL) ^
- ((retired_page >> 41) & 0x1ULL)) << 0);
-
- /* the original PA_C4 and PA_R13 may be cleared in retired_page, so
- * get them from mca_addr.
- */
- die += ((((retired_page >> 13) & 0x1ULL) ^
- ((mca_addr >> 5) & 0x1ULL) ^
- ((retired_page >> 28) & 0x1ULL) ^
- ((mca_addr >> 23) & 0x1ULL) ^
- ((retired_page >> 42) & 0x1ULL)) << 1);
- die &= 3;
-
- return die;
-}
-
static void umc_v12_0_mca_ipid_parse(struct amdgpu_device *adev, uint64_t ipid,
uint32_t *did, uint32_t *ch, uint32_t *umc_inst, uint32_t *sid)
{
@@ -240,7 +215,6 @@ struct amdgpu_umc_ras umc_v12_0_ras = {
.hw_ops = NULL,
},
.check_ecc_err_status = umc_v12_0_check_ecc_err_status,
- .get_die_id_from_pa = umc_v12_0_get_die_id,
.get_retire_flip_bits = umc_v12_0_get_retire_flip_bits,
.mca_ipid_parse = umc_v12_0_mca_ipid_parse,
};
--
2.34.1