Просмотр исходного кода

Merge "msm: eva: Add NoC QoS setting"

qctecmdr 3 лет назад
Родитель
Сommit
29a77d790e
4 измененных файлов с 54 добавлено и 4 удалено
  1. 20 2
      msm/eva/cvp_hfi.c
  2. 13 2
      msm/eva/cvp_hfi_io.h
  3. 10 0
      msm/eva/msm_cvp_internal.h
  4. 11 0
      msm/eva/msm_cvp_platform.c

+ 20 - 2
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);

+ 13 - 2
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)

+ 10 - 0
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 {

+ 11 - 0
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[] = {