mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-24 22:42:53 +00:00
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:
parent
7aae9807b3
commit
5ff532b08c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user