dm: add RTCT memory hierarchy entries to vRTCT

Add TCC native memory hierarchy entries  to vRTCT:
   - wrap one function to get TCC RTCT data.
   - Add memory hierarchy entries from TCC
     RTCT to vRTCT.

Tracked-On: #7010
Signed-off-by: Yonghua Huang <yonghua.huang@intel.com>
Acked-by: Wang Yu1 <yu1.wang@intel.com>
This commit is contained in:
Yonghua Huang 2022-01-06 17:19:55 +03:00 committed by acrnsi-robot
parent 7aae9807b3
commit 5ff532b08c

View File

@ -306,6 +306,32 @@ static int tcc_driver_req_buffer(unsigned int region_id, unsigned int size)
return (int)req.devnode_id; return (int)req.devnode_id;
} }
/**
* @brief Read native RTCT table from TCC buffer driver.
*
* @param void
*
* @return Poiner to RTCT data buffer on success and NULL on fail.
*
* @note The returned pointer must be passed to free to avoid a memory leak.
*/
static void *tcc_driver_read_rtct(void)
{
void *buffer;
buffer = calloc(1, 4096);
if (buffer == NULL) {
pr_err("%s, calloc failed.\n", __func__);
return NULL;
}
if (ioctl(tcc_buffer_fd, TCC_GET_RTCT, (unsigned int *)buffer) < 0) {
free(buffer);
return NULL;
}
return buffer;
}
/** /**
* @brief Get file descriptor handler to TCC cache buffer. * @brief Get file descriptor handler to TCC cache buffer.
* *
@ -1036,7 +1062,40 @@ static void vrtct_add_ssram_entries(struct acpi_table_hdr *vrtct)
*/ */
static int vrtct_add_memory_hierarchy_entries(struct acpi_table_hdr *vrtct) static int vrtct_add_memory_hierarchy_entries(struct acpi_table_hdr *vrtct)
{ {
/* to be implemented. */ int rtct_ver = RTCT_V1;
struct rtct_entry *entry;
struct acpi_table_hdr *tcc_rtct;
struct rtct_entry_data_compatibility *compat;
tcc_rtct = (struct acpi_table_hdr *)tcc_driver_read_rtct();
if (tcc_rtct == NULL) {
pr_err("%s, Read TCC RTCT table failed.\n", __func__);
return -1;
}
/* get TCC RTCT version */
foreach_rtct_entry(tcc_rtct, entry) {
if (entry->type == RTCT_V2_COMPATIBILITY) {
compat = (struct rtct_entry_data_compatibility *)entry->data;
rtct_ver = compat->rtct_ver_major;
break;
}
}
/* support RTCT V2 only */
if (rtct_ver != RTCT_V2) {
pr_err("%s, Warning: Unsupported RTCT version.\n", __func__);
free(tcc_rtct);
return -1;
}
foreach_rtct_entry(tcc_rtct, entry) {
if (entry->type == RTCT_V2_MEMORY_HIERARCHY_LATENCY) {
vrtct_add_native_entry(vrtct, entry);
}
}
free(tcc_rtct);
return 0; return 0;
} }