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:
@@ -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);
|
||||
|
@@ -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)
|
||||
|
@@ -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 {
|
||||
|
@@ -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[] = {
|
||||
|
Yeni konuda referans
Bir kullanıcı engelle