From f8e8640ce2340aacc1bc246eddc449132489e6ae Mon Sep 17 00:00:00 2001 From: George Shen Date: Wed, 15 Sep 2021 14:09:57 -0700 Subject: [PATCH] msm: eva: Add NoC QoS setting The setting will be target specific and used to set correct priority of EVA DDR traffic. Change-Id: I165a761393bf9dfb4ef08482d1439959cd46baa4 Signed-off-by: George Shen --- msm/eva/cvp_hfi.c | 22 ++++++++++++++++++++-- msm/eva/cvp_hfi_io.h | 15 +++++++++++++-- msm/eva/msm_cvp_internal.h | 10 ++++++++++ msm/eva/msm_cvp_platform.c | 11 +++++++++++ 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/msm/eva/cvp_hfi.c b/msm/eva/cvp_hfi.c index 4ea32f2438..2a13a4cc9a 100644 --- a/msm/eva/cvp_hfi.c +++ b/msm/eva/cvp_hfi.c @@ -745,6 +745,8 @@ static int __read_register(struct iris_hfi_device *device, u32 reg) static void __set_registers(struct iris_hfi_device *device) { + struct msm_cvp_core *core; + struct msm_cvp_platform_data *pdata; struct reg_set *reg_set; int i; @@ -754,6 +756,9 @@ static void __set_registers(struct iris_hfi_device *device) return; } + core = list_first_entry(&cvp_driver->cores, struct msm_cvp_core, list); + pdata = core->platform_data; + reg_set = &device->res->reg_set; for (i = 0; i < reg_set->count; i++) { __write_register(device, reg_set->reg_tbl[i].reg, @@ -762,6 +767,19 @@ static void __set_registers(struct iris_hfi_device *device) reg_set->reg_tbl[i].reg, reg_set->reg_tbl[i].value); } + + __write_register(device, CVP_CPU_CS_AXI4_QOS, + pdata->noc_qos->axi_qos); + __write_register(device, CVP_NOC_PRIORITYLUT_LOW, + pdata->noc_qos->prioritylut_low); + __write_register(device, CVP_NOC_PRIORITYLUT_HIGH, + pdata->noc_qos->prioritylut_high); + __write_register(device, CVP_NOC_URGENCY_LOW, + pdata->noc_qos->urgency_low); + __write_register(device, CVP_NOC_DANGERLUT_LOW, + pdata->noc_qos->dangerlut_low); + __write_register(device, CVP_NOC_SAFELUT_LOW, + pdata->noc_qos->safelut_low); } /* @@ -3889,11 +3907,11 @@ static int __power_off_controller(struct iris_hfi_device *device) __write_register(device, CVP_CPU_CS_X2RPMh, 0x3); /* HPG 6.2.2 Step 2, noc to low power */ - __write_register(device, CVP_AON_WRAPPER_MVP_NOC_LPI_CONTROL, 0x1); + __write_register(device, CVP_AON_WRAPPER_CVP_NOC_LPI_CONTROL, 0x1); while (!reg_status && count < max_count) { lpi_status = __read_register(device, - CVP_AON_WRAPPER_MVP_NOC_LPI_STATUS); + CVP_AON_WRAPPER_CVP_NOC_LPI_STATUS); reg_status = lpi_status & BIT(0); /* Wait for Core noc lpi status to be set */ usleep_range(50, 100); diff --git a/msm/eva/cvp_hfi_io.h b/msm/eva/cvp_hfi_io.h index 67bcc5cf34..2dc935278a 100644 --- a/msm/eva/cvp_hfi_io.h +++ b/msm/eva/cvp_hfi_io.h @@ -24,6 +24,7 @@ #define CVP_CPU_CS_VMIMSGAG2 (CVP_CPU_BASE_OFFS + 0x40) #define CVP_CPU_CS_VMIMSGAG3 (CVP_CPU_BASE_OFFS + 0x44) #define CVP_CPU_CS_SCIACMD (CVP_CPU_BASE_OFFS + 0x48) +#define CVP_CPU_CS_AXI4_QOS (CVP_CPU_BASE_OFFS + 0x13C) #define CVP_CPU_CS_H2XSOFTINTEN (CVP_CPU_BASE_OFFS + 0x148) /* CVP_CTRL_STATUS */ @@ -221,14 +222,24 @@ (CVP_NOC_CORE_BASE_OFFS + 0x1238) #define CVP_NOC_CORE_ERR_ERRLOG3_HIGH_OFFS \ (CVP_NOC_CORE_BASE_OFFS + 0x123C) +#define CVP_NOC_PRIORITYLUT_LOW \ + (CVP_NOC_CORE_BASE_OFFS + 0x3030) +#define CVP_NOC_PRIORITYLUT_HIGH \ + (CVP_NOC_CORE_BASE_OFFS + 0x3034) +#define CVP_NOC_URGENCY_LOW \ + (CVP_NOC_CORE_BASE_OFFS + 0x3038) +#define CVP_NOC_DANGERLUT_LOW \ + (CVP_NOC_CORE_BASE_OFFS + 0x3040) +#define CVP_NOC_SAFELUT_LOW \ + (CVP_NOC_CORE_BASE_OFFS + 0x3048) #define CVP_NOC_RESET_REQ \ (CVP_NOC_CORE_BASE_OFFS + 0xf000) #define CVP_NOC_RESET_ACK \ (CVP_NOC_CORE_BASE_OFFS + 0xf004) -#define CVP_AON_WRAPPER_MVP_NOC_LPI_CONTROL (CVP_AON_BASE_OFFS) -#define CVP_AON_WRAPPER_MVP_NOC_LPI_STATUS (CVP_AON_BASE_OFFS + 0x4) +#define CVP_AON_WRAPPER_CVP_NOC_LPI_CONTROL (CVP_AON_BASE_OFFS + 0x8) +#define CVP_AON_WRAPPER_CVP_NOC_LPI_STATUS (CVP_AON_BASE_OFFS + 0xC) #define CVP_CC_BASE_OFFS 0x000F8000 #define CVP_CC_MVS1C_GDSCR (CVP_CC_BASE_OFFS + 0x74) diff --git a/msm/eva/msm_cvp_internal.h b/msm/eva/msm_cvp_internal.h index ef94cd4724..6938886965 100644 --- a/msm/eva/msm_cvp_internal.h +++ b/msm/eva/msm_cvp_internal.h @@ -121,12 +121,22 @@ struct msm_cvp_ubwc_config_data { u32 bank_spreading; }; +struct msm_cvp_qos_setting { + u32 axi_qos; + u32 prioritylut_low; + u32 prioritylut_high; + u32 urgency_low; + u32 dangerlut_low; + u32 safelut_low; +}; + struct msm_cvp_platform_data { struct msm_cvp_common_data *common_data; unsigned int common_data_length; unsigned int sku_version; uint32_t vpu_ver; struct msm_cvp_ubwc_config_data *ubwc_config; + struct msm_cvp_qos_setting *noc_qos; }; struct msm_cvp_drv { diff --git a/msm/eva/msm_cvp_platform.c b/msm/eva/msm_cvp_platform.c index 302f563951..d4176f81ad 100644 --- a/msm/eva/msm_cvp_platform.c +++ b/msm/eva/msm_cvp_platform.c @@ -162,6 +162,14 @@ static struct msm_cvp_ubwc_config_data kona_ubwc_data[] = { UBWC_CONFIG(1, 1, 1, 0, 0, 0, 8, 32, 16, 0, 0), }; +static struct msm_cvp_qos_setting waipio_noc_qos = { + .axi_qos = 0x99, + .prioritylut_low = 0x22222222, + .prioritylut_high = 0x33333333, + .urgency_low = 0x1022, + .dangerlut_low = 0x0, + .safelut_low = 0xffff, +}; static struct msm_cvp_platform_data default_data = { .common_data = default_common_data, @@ -169,6 +177,7 @@ static struct msm_cvp_platform_data default_data = { .sku_version = 0, .vpu_ver = VPU_VERSION_5, .ubwc_config = 0x0, + .noc_qos = 0x0, }; static struct msm_cvp_platform_data sm8450_data = { @@ -177,6 +186,7 @@ static struct msm_cvp_platform_data sm8450_data = { .sku_version = 0, .vpu_ver = VPU_VERSION_5, .ubwc_config = kona_ubwc_data, + .noc_qos = &waipio_noc_qos, }; static struct msm_cvp_platform_data sm8550_data = { @@ -185,6 +195,7 @@ static struct msm_cvp_platform_data sm8550_data = { .sku_version = 0, .vpu_ver = VPU_VERSION_5, .ubwc_config = kona_ubwc_data, + .noc_qos = 0x0, }; static const struct of_device_id msm_cvp_dt_match[] = {