Commit ed46cdb4 authored by Marek Vasut's avatar Marek Vasut
Browse files

rcar_gen3: drivers: qos: H3: Configure DBSC QoS from a table



Convert the DBSC QoS setting function to a simple table of register-value
pairs and pass it to common rcar_qos_dbsc_setting() to write those values
to matching registers.
Signed-off-by: default avatarMarek Vasut <marek.vasut+renesas@gmail.com>
Change-Id: I62b133ea4f4129a641b779a782938976ad52fbfe
parent d875f936
...@@ -18,51 +18,50 @@ ...@@ -18,51 +18,50 @@
#include "qos_init_h3_v11_mstat.h" #include "qos_init_h3_v11_mstat.h"
static void dbsc_setting(void) struct rcar_gen3_dbsc_qos_settings h3_v11_qos[] = {
{
/* BUFCAM settings */ /* BUFCAM settings */
/* DBSC_DBCAM0CNF0 not set */ /* DBSC_DBCAM0CNF0 not set */
io_write_32(DBSC_DBCAM0CNF1, 0x00044218); { DBSC_DBCAM0CNF1, 0x00044218 },
io_write_32(DBSC_DBCAM0CNF2, 0x000000F4); { DBSC_DBCAM0CNF2, 0x000000F4 },
/* DBSC_DBCAM0CNF3 not set */ /* DBSC_DBCAM0CNF3 not set */
io_write_32(DBSC_DBSCHCNT0, 0x080F0037); { DBSC_DBSCHCNT0, 0x080F0037 },
io_write_32(DBSC_DBSCHCNT1, 0x00001010); { DBSC_DBSCHCNT1, 0x00001010 },
io_write_32(DBSC_DBSCHSZ0, 0x00000001); { DBSC_DBSCHSZ0, 0x00000001 },
io_write_32(DBSC_DBSCHRW0, 0x22421111); { DBSC_DBSCHRW0, 0x22421111 },
/* DDR3 */ /* DDR3 */
io_write_32(DBSC_SCFCTST2, 0x012F1123); { DBSC_SCFCTST2, 0x012F1123 },
/* QoS Settings */ /* QoS Settings */
io_write_32(DBSC_DBSCHQOS00, 0x0000F000); { DBSC_DBSCHQOS00, 0x0000F000 },
io_write_32(DBSC_DBSCHQOS01, 0x0000E000); { DBSC_DBSCHQOS01, 0x0000E000 },
io_write_32(DBSC_DBSCHQOS02, 0x00007000); { DBSC_DBSCHQOS02, 0x00007000 },
io_write_32(DBSC_DBSCHQOS03, 0x00000000); { DBSC_DBSCHQOS03, 0x00000000 },
io_write_32(DBSC_DBSCHQOS40, 0x00000E00); { DBSC_DBSCHQOS40, 0x00000E00 },
io_write_32(DBSC_DBSCHQOS41, 0x00000DFF); { DBSC_DBSCHQOS41, 0x00000DFF },
io_write_32(DBSC_DBSCHQOS42, 0x00000400); { DBSC_DBSCHQOS42, 0x00000400 },
io_write_32(DBSC_DBSCHQOS43, 0x00000200); { DBSC_DBSCHQOS43, 0x00000200 },
io_write_32(DBSC_DBSCHQOS90, 0x00000C00); { DBSC_DBSCHQOS90, 0x00000C00 },
io_write_32(DBSC_DBSCHQOS91, 0x00000BFF); { DBSC_DBSCHQOS91, 0x00000BFF },
io_write_32(DBSC_DBSCHQOS92, 0x00000400); { DBSC_DBSCHQOS92, 0x00000400 },
io_write_32(DBSC_DBSCHQOS93, 0x00000200); { DBSC_DBSCHQOS93, 0x00000200 },
io_write_32(DBSC_DBSCHQOS130, 0x00000980); { DBSC_DBSCHQOS130, 0x00000980 },
io_write_32(DBSC_DBSCHQOS131, 0x0000097F); { DBSC_DBSCHQOS131, 0x0000097F },
io_write_32(DBSC_DBSCHQOS132, 0x00000300); { DBSC_DBSCHQOS132, 0x00000300 },
io_write_32(DBSC_DBSCHQOS133, 0x00000180); { DBSC_DBSCHQOS133, 0x00000180 },
io_write_32(DBSC_DBSCHQOS140, 0x00000800); { DBSC_DBSCHQOS140, 0x00000800 },
io_write_32(DBSC_DBSCHQOS141, 0x000007FF); { DBSC_DBSCHQOS141, 0x000007FF },
io_write_32(DBSC_DBSCHQOS142, 0x00000300); { DBSC_DBSCHQOS142, 0x00000300 },
io_write_32(DBSC_DBSCHQOS143, 0x00000180); { DBSC_DBSCHQOS143, 0x00000180 },
io_write_32(DBSC_DBSCHQOS150, 0x000007D0); { DBSC_DBSCHQOS150, 0x000007D0 },
io_write_32(DBSC_DBSCHQOS151, 0x000007CF); { DBSC_DBSCHQOS151, 0x000007CF },
io_write_32(DBSC_DBSCHQOS152, 0x000005D0); { DBSC_DBSCHQOS152, 0x000005D0 },
io_write_32(DBSC_DBSCHQOS153, 0x000003D0); { DBSC_DBSCHQOS153, 0x000003D0 },
} };
void qos_init_h3_v11(void) void qos_init_h3_v11(void)
{ {
dbsc_setting(); rcar_qos_dbsc_setting(h3_v11_qos, ARRAY_SIZE(h3_v11_qos), false);
/* DRAM Split Address mapping */ /* DRAM Split Address mapping */
#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \ #if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
......
...@@ -61,59 +61,52 @@ ...@@ -61,59 +61,52 @@
#endif #endif
static void dbsc_setting(void) struct rcar_gen3_dbsc_qos_settings h3_v20_qos[] = {
{
/* Register write enable */
io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
/* BUFCAM settings */ /* BUFCAM settings */
io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); { DBSC_DBCAM0CNF1, 0x00043218U },
io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); { DBSC_DBCAM0CNF2, 0x000000F4U },
io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); { DBSC_DBCAM0CNF3, 0x00000000U },
io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); { DBSC_DBSCHCNT0, 0x000F0037U },
io_write_32(DBSC_DBSCHSZ0, 0x00000001U); { DBSC_DBSCHSZ0, 0x00000001U },
io_write_32(DBSC_DBSCHRW0, 0x22421111U); { DBSC_DBSCHRW0, 0x22421111U },
/* DDR3 */ /* DDR3 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U); { DBSC_SCFCTST2, 0x012F1123U },
/* QoS Settings */ /* QoS Settings */
io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); { DBSC_DBSCHQOS00, 0x00000F00U },
io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); { DBSC_DBSCHQOS01, 0x00000B00U },
io_write_32(DBSC_DBSCHQOS02, 0x00000000U); { DBSC_DBSCHQOS02, 0x00000000U },
io_write_32(DBSC_DBSCHQOS03, 0x00000000U); { DBSC_DBSCHQOS03, 0x00000000U },
io_write_32(DBSC_DBSCHQOS40, 0x00000300U); { DBSC_DBSCHQOS40, 0x00000300U },
io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); { DBSC_DBSCHQOS41, 0x000002F0U },
io_write_32(DBSC_DBSCHQOS42, 0x00000200U); { DBSC_DBSCHQOS42, 0x00000200U },
io_write_32(DBSC_DBSCHQOS43, 0x00000100U); { DBSC_DBSCHQOS43, 0x00000100U },
io_write_32(DBSC_DBSCHQOS90, 0x00000100U); { DBSC_DBSCHQOS90, 0x00000100U },
io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); { DBSC_DBSCHQOS91, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); { DBSC_DBSCHQOS92, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS93, 0x00000040U); { DBSC_DBSCHQOS93, 0x00000040U },
io_write_32(DBSC_DBSCHQOS120, 0x00000040U); { DBSC_DBSCHQOS120, 0x00000040U },
io_write_32(DBSC_DBSCHQOS121, 0x00000030U); { DBSC_DBSCHQOS121, 0x00000030U },
io_write_32(DBSC_DBSCHQOS122, 0x00000020U); { DBSC_DBSCHQOS122, 0x00000020U },
io_write_32(DBSC_DBSCHQOS123, 0x00000010U); { DBSC_DBSCHQOS123, 0x00000010U },
io_write_32(DBSC_DBSCHQOS130, 0x00000100U); { DBSC_DBSCHQOS130, 0x00000100U },
io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); { DBSC_DBSCHQOS131, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); { DBSC_DBSCHQOS132, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS133, 0x00000040U); { DBSC_DBSCHQOS133, 0x00000040U },
io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); { DBSC_DBSCHQOS140, 0x000000C0U },
io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); { DBSC_DBSCHQOS141, 0x000000B0U },
io_write_32(DBSC_DBSCHQOS142, 0x00000080U); { DBSC_DBSCHQOS142, 0x00000080U },
io_write_32(DBSC_DBSCHQOS143, 0x00000040U); { DBSC_DBSCHQOS143, 0x00000040U },
io_write_32(DBSC_DBSCHQOS150, 0x00000040U); { DBSC_DBSCHQOS150, 0x00000040U },
io_write_32(DBSC_DBSCHQOS151, 0x00000030U); { DBSC_DBSCHQOS151, 0x00000030U },
io_write_32(DBSC_DBSCHQOS152, 0x00000020U); { DBSC_DBSCHQOS152, 0x00000020U },
io_write_32(DBSC_DBSCHQOS153, 0x00000010U); { DBSC_DBSCHQOS153, 0x00000010U },
};
/* Register write protect */
io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
}
void qos_init_h3_v20(void) void qos_init_h3_v20(void)
{ {
dbsc_setting(); rcar_qos_dbsc_setting(h3_v20_qos, ARRAY_SIZE(h3_v20_qos), true);
/* DRAM Split Address mapping */ /* DRAM Split Address mapping */
#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \ #if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
......
...@@ -60,61 +60,54 @@ ...@@ -60,61 +60,54 @@
#endif #endif
static void dbsc_setting(void) struct rcar_gen3_dbsc_qos_settings h3_v30_qos[] = {
{
/* Register write enable */
io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
/* BUFCAM settings */ /* BUFCAM settings */
io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); { DBSC_DBCAM0CNF1, 0x00043218U },
io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); { DBSC_DBCAM0CNF2, 0x000000F4U },
io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); { DBSC_DBCAM0CNF3, 0x00000000U },
io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); { DBSC_DBSCHCNT0, 0x000F0037U },
io_write_32(DBSC_DBSCHSZ0, 0x00000001U); { DBSC_DBSCHSZ0, 0x00000001U },
io_write_32(DBSC_DBSCHRW0, 0x22421111U); { DBSC_DBSCHRW0, 0x22421111U },
/* DDR3 */ /* DDR3 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U); { DBSC_SCFCTST2, 0x012F1123U },
/* QoS Settings */ /* QoS Settings */
io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); { DBSC_DBSCHQOS00, 0x00000F00U },
io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); { DBSC_DBSCHQOS01, 0x00000B00U },
io_write_32(DBSC_DBSCHQOS02, 0x00000000U); { DBSC_DBSCHQOS02, 0x00000000U },
io_write_32(DBSC_DBSCHQOS03, 0x00000000U); { DBSC_DBSCHQOS03, 0x00000000U },
io_write_32(DBSC_DBSCHQOS40, 0x00000300U); { DBSC_DBSCHQOS40, 0x00000300U },
io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); { DBSC_DBSCHQOS41, 0x000002F0U },
io_write_32(DBSC_DBSCHQOS42, 0x00000200U); { DBSC_DBSCHQOS42, 0x00000200U },
io_write_32(DBSC_DBSCHQOS43, 0x00000100U); { DBSC_DBSCHQOS43, 0x00000100U },
io_write_32(DBSC_DBSCHQOS90, 0x00000100U); { DBSC_DBSCHQOS90, 0x00000100U },
io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); { DBSC_DBSCHQOS91, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); { DBSC_DBSCHQOS92, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS93, 0x00000040U); { DBSC_DBSCHQOS93, 0x00000040U },
io_write_32(DBSC_DBSCHQOS120, 0x00000040U); { DBSC_DBSCHQOS120, 0x00000040U },
io_write_32(DBSC_DBSCHQOS121, 0x00000030U); { DBSC_DBSCHQOS121, 0x00000030U },
io_write_32(DBSC_DBSCHQOS122, 0x00000020U); { DBSC_DBSCHQOS122, 0x00000020U },
io_write_32(DBSC_DBSCHQOS123, 0x00000010U); { DBSC_DBSCHQOS123, 0x00000010U },
io_write_32(DBSC_DBSCHQOS130, 0x00000100U); { DBSC_DBSCHQOS130, 0x00000100U },
io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); { DBSC_DBSCHQOS131, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); { DBSC_DBSCHQOS132, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS133, 0x00000040U); { DBSC_DBSCHQOS133, 0x00000040U },
io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); { DBSC_DBSCHQOS140, 0x000000C0U },
io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); { DBSC_DBSCHQOS141, 0x000000B0U },
io_write_32(DBSC_DBSCHQOS142, 0x00000080U); { DBSC_DBSCHQOS142, 0x00000080U },
io_write_32(DBSC_DBSCHQOS143, 0x00000040U); { DBSC_DBSCHQOS143, 0x00000040U },
io_write_32(DBSC_DBSCHQOS150, 0x00000040U); { DBSC_DBSCHQOS150, 0x00000040U },
io_write_32(DBSC_DBSCHQOS151, 0x00000030U); { DBSC_DBSCHQOS151, 0x00000030U },
io_write_32(DBSC_DBSCHQOS152, 0x00000020U); { DBSC_DBSCHQOS152, 0x00000020U },
io_write_32(DBSC_DBSCHQOS153, 0x00000010U); { DBSC_DBSCHQOS153, 0x00000010U },
};
/* Register write protect */
io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
}
void qos_init_h3_v30(void) void qos_init_h3_v30(void)
{ {
unsigned int split_area; unsigned int split_area;
dbsc_setting(); rcar_qos_dbsc_setting(h3_v30_qos, ARRAY_SIZE(h3_v30_qos), true);
#if RCAR_DRAM_LPDDR4_MEMCONF == 0 /* 1GB */ #if RCAR_DRAM_LPDDR4_MEMCONF == 0 /* 1GB */
split_area = 0x1BU; split_area = 0x1BU;
......
...@@ -60,61 +60,54 @@ ...@@ -60,61 +60,54 @@
#endif #endif
static void dbsc_setting(void) struct rcar_gen3_dbsc_qos_settings h3n_v30_qos[] = {
{
/* Register write enable */
io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
/* BUFCAM settings */ /* BUFCAM settings */
io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); { DBSC_DBCAM0CNF1, 0x00043218U },
io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); { DBSC_DBCAM0CNF2, 0x000000F4U },
io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); { DBSC_DBCAM0CNF3, 0x00000000U },
io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); { DBSC_DBSCHCNT0, 0x000F0037U },
io_write_32(DBSC_DBSCHSZ0, 0x00000001U); { DBSC_DBSCHSZ0, 0x00000001U },
io_write_32(DBSC_DBSCHRW0, 0x22421111U); { DBSC_DBSCHRW0, 0x22421111U },
/* DDR3 */ /* DDR3 */
io_write_32(DBSC_SCFCTST2, 0x012F1123U); { DBSC_SCFCTST2, 0x012F1123U },
/* QoS Settings */ /* QoS Settings */
io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); { DBSC_DBSCHQOS00, 0x00000F00U },
io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); { DBSC_DBSCHQOS01, 0x00000B00U },
io_write_32(DBSC_DBSCHQOS02, 0x00000000U); { DBSC_DBSCHQOS02, 0x00000000U },
io_write_32(DBSC_DBSCHQOS03, 0x00000000U); { DBSC_DBSCHQOS03, 0x00000000U },
io_write_32(DBSC_DBSCHQOS40, 0x00000300U); { DBSC_DBSCHQOS40, 0x00000300U },
io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); { DBSC_DBSCHQOS41, 0x000002F0U },
io_write_32(DBSC_DBSCHQOS42, 0x00000200U); { DBSC_DBSCHQOS42, 0x00000200U },
io_write_32(DBSC_DBSCHQOS43, 0x00000100U); { DBSC_DBSCHQOS43, 0x00000100U },
io_write_32(DBSC_DBSCHQOS90, 0x00000100U); { DBSC_DBSCHQOS90, 0x00000100U },
io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); { DBSC_DBSCHQOS91, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); { DBSC_DBSCHQOS92, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS93, 0x00000040U); { DBSC_DBSCHQOS93, 0x00000040U },
io_write_32(DBSC_DBSCHQOS120, 0x00000040U); { DBSC_DBSCHQOS120, 0x00000040U },
io_write_32(DBSC_DBSCHQOS121, 0x00000030U); { DBSC_DBSCHQOS121, 0x00000030U },
io_write_32(DBSC_DBSCHQOS122, 0x00000020U); { DBSC_DBSCHQOS122, 0x00000020U },
io_write_32(DBSC_DBSCHQOS123, 0x00000010U); { DBSC_DBSCHQOS123, 0x00000010U },
io_write_32(DBSC_DBSCHQOS130, 0x00000100U); { DBSC_DBSCHQOS130, 0x00000100U },
io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); { DBSC_DBSCHQOS131, 0x000000F0U },
io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); { DBSC_DBSCHQOS132, 0x000000A0U },
io_write_32(DBSC_DBSCHQOS133, 0x00000040U); { DBSC_DBSCHQOS133, 0x00000040U },
io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); { DBSC_DBSCHQOS140, 0x000000C0U },
io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); { DBSC_DBSCHQOS141, 0x000000B0U },
io_write_32(DBSC_DBSCHQOS142, 0x00000080U); { DBSC_DBSCHQOS142, 0x00000080U },
io_write_32(DBSC_DBSCHQOS143, 0x00000040U); { DBSC_DBSCHQOS143, 0x00000040U },
io_write_32(DBSC_DBSCHQOS150, 0x00000040U); { DBSC_DBSCHQOS150, 0x00000040U },
io_write_32(DBSC_DBSCHQOS151, 0x00000030U); { DBSC_DBSCHQOS151, 0x00000030U },
io_write_32(DBSC_DBSCHQOS152, 0x00000020U); { DBSC_DBSCHQOS152, 0x00000020U },
io_write_32(DBSC_DBSCHQOS153, 0x00000010U); { DBSC_DBSCHQOS153, 0x00000010U },
};
/* Register write protect */
io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
}
void qos_init_h3n_v30(void) void qos_init_h3n_v30(void)
{ {
unsigned int split_area; unsigned int split_area;
dbsc_setting(); rcar_qos_dbsc_setting(h3n_v30_qos, ARRAY_SIZE(h3n_v30_qos), true);
/* use 1(2GB) for RCAR_DRAM_LPDDR4_MEMCONF for H3N */ /* use 1(2GB) for RCAR_DRAM_LPDDR4_MEMCONF for H3N */
split_area = 0x1CU; split_area = 0x1CU;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment