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 <sqiao@codeaurora.org>
Bu işleme şunda yer alıyor:
George Shen
2021-09-15 14:09:57 -07:00
ebeveyn b30be7e544
işleme f8e8640ce2
4 değiştirilmiş dosya ile 54 ekleme ve 4 silme

Dosyayı Görüntüle

@@ -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);

Dosyayı Görüntüle

@@ -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)

Dosyayı Görüntüle

@@ -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 {

Dosyayı Görüntüle

@@ -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[] = {