From ed46cdb4b76ee5b6c312e6013a1479bf753f9870 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Fri, 14 Jun 2019 15:52:45 +0200 Subject: [PATCH] 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: Marek Vasut Change-Id: I62b133ea4f4129a641b779a782938976ad52fbfe --- .../renesas/rcar/qos/H3/qos_init_h3_v11.c | 69 ++++++++------- .../renesas/rcar/qos/H3/qos_init_h3_v20.c | 83 +++++++++---------- .../renesas/rcar/qos/H3/qos_init_h3_v30.c | 83 +++++++++---------- .../renesas/rcar/qos/H3/qos_init_h3n_v30.c | 83 +++++++++---------- 4 files changed, 148 insertions(+), 170 deletions(-) diff --git a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v11.c b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v11.c index 63129483..329bcb82 100644 --- a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v11.c +++ b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v11.c @@ -18,51 +18,50 @@ #include "qos_init_h3_v11_mstat.h" -static void dbsc_setting(void) -{ +struct rcar_gen3_dbsc_qos_settings h3_v11_qos[] = { /* BUFCAM settings */ /* DBSC_DBCAM0CNF0 not set */ - io_write_32(DBSC_DBCAM0CNF1, 0x00044218); - io_write_32(DBSC_DBCAM0CNF2, 0x000000F4); + { DBSC_DBCAM0CNF1, 0x00044218 }, + { DBSC_DBCAM0CNF2, 0x000000F4 }, /* DBSC_DBCAM0CNF3 not set */ - io_write_32(DBSC_DBSCHCNT0, 0x080F0037); - io_write_32(DBSC_DBSCHCNT1, 0x00001010); - io_write_32(DBSC_DBSCHSZ0, 0x00000001); - io_write_32(DBSC_DBSCHRW0, 0x22421111); + { DBSC_DBSCHCNT0, 0x080F0037 }, + { DBSC_DBSCHCNT1, 0x00001010 }, + { DBSC_DBSCHSZ0, 0x00000001 }, + { DBSC_DBSCHRW0, 0x22421111 }, /* DDR3 */ - io_write_32(DBSC_SCFCTST2, 0x012F1123); + { DBSC_SCFCTST2, 0x012F1123 }, /* QoS Settings */ - io_write_32(DBSC_DBSCHQOS00, 0x0000F000); - io_write_32(DBSC_DBSCHQOS01, 0x0000E000); - io_write_32(DBSC_DBSCHQOS02, 0x00007000); - io_write_32(DBSC_DBSCHQOS03, 0x00000000); - io_write_32(DBSC_DBSCHQOS40, 0x00000E00); - io_write_32(DBSC_DBSCHQOS41, 0x00000DFF); - io_write_32(DBSC_DBSCHQOS42, 0x00000400); - io_write_32(DBSC_DBSCHQOS43, 0x00000200); - io_write_32(DBSC_DBSCHQOS90, 0x00000C00); - io_write_32(DBSC_DBSCHQOS91, 0x00000BFF); - io_write_32(DBSC_DBSCHQOS92, 0x00000400); - io_write_32(DBSC_DBSCHQOS93, 0x00000200); - io_write_32(DBSC_DBSCHQOS130, 0x00000980); - io_write_32(DBSC_DBSCHQOS131, 0x0000097F); - io_write_32(DBSC_DBSCHQOS132, 0x00000300); - io_write_32(DBSC_DBSCHQOS133, 0x00000180); - io_write_32(DBSC_DBSCHQOS140, 0x00000800); - io_write_32(DBSC_DBSCHQOS141, 0x000007FF); - io_write_32(DBSC_DBSCHQOS142, 0x00000300); - io_write_32(DBSC_DBSCHQOS143, 0x00000180); - io_write_32(DBSC_DBSCHQOS150, 0x000007D0); - io_write_32(DBSC_DBSCHQOS151, 0x000007CF); - io_write_32(DBSC_DBSCHQOS152, 0x000005D0); - io_write_32(DBSC_DBSCHQOS153, 0x000003D0); -} + { DBSC_DBSCHQOS00, 0x0000F000 }, + { DBSC_DBSCHQOS01, 0x0000E000 }, + { DBSC_DBSCHQOS02, 0x00007000 }, + { DBSC_DBSCHQOS03, 0x00000000 }, + { DBSC_DBSCHQOS40, 0x00000E00 }, + { DBSC_DBSCHQOS41, 0x00000DFF }, + { DBSC_DBSCHQOS42, 0x00000400 }, + { DBSC_DBSCHQOS43, 0x00000200 }, + { DBSC_DBSCHQOS90, 0x00000C00 }, + { DBSC_DBSCHQOS91, 0x00000BFF }, + { DBSC_DBSCHQOS92, 0x00000400 }, + { DBSC_DBSCHQOS93, 0x00000200 }, + { DBSC_DBSCHQOS130, 0x00000980 }, + { DBSC_DBSCHQOS131, 0x0000097F }, + { DBSC_DBSCHQOS132, 0x00000300 }, + { DBSC_DBSCHQOS133, 0x00000180 }, + { DBSC_DBSCHQOS140, 0x00000800 }, + { DBSC_DBSCHQOS141, 0x000007FF }, + { DBSC_DBSCHQOS142, 0x00000300 }, + { DBSC_DBSCHQOS143, 0x00000180 }, + { DBSC_DBSCHQOS150, 0x000007D0 }, + { DBSC_DBSCHQOS151, 0x000007CF }, + { DBSC_DBSCHQOS152, 0x000005D0 }, + { DBSC_DBSCHQOS153, 0x000003D0 }, +}; 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 */ #if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \ diff --git a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v20.c b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v20.c index 2e2f426f..c20ab086 100644 --- a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v20.c +++ b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v20.c @@ -61,59 +61,52 @@ #endif -static void dbsc_setting(void) -{ - /* Register write enable */ - io_write_32(DBSC_DBSYSCNT0, 0x00001234U); - +struct rcar_gen3_dbsc_qos_settings h3_v20_qos[] = { /* BUFCAM settings */ - io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); - io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); - io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); - io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); - io_write_32(DBSC_DBSCHSZ0, 0x00000001U); - io_write_32(DBSC_DBSCHRW0, 0x22421111U); + { DBSC_DBCAM0CNF1, 0x00043218U }, + { DBSC_DBCAM0CNF2, 0x000000F4U }, + { DBSC_DBCAM0CNF3, 0x00000000U }, + { DBSC_DBSCHCNT0, 0x000F0037U }, + { DBSC_DBSCHSZ0, 0x00000001U }, + { DBSC_DBSCHRW0, 0x22421111U }, /* DDR3 */ - io_write_32(DBSC_SCFCTST2, 0x012F1123U); + { DBSC_SCFCTST2, 0x012F1123U }, /* QoS Settings */ - io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); - io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); - io_write_32(DBSC_DBSCHQOS02, 0x00000000U); - io_write_32(DBSC_DBSCHQOS03, 0x00000000U); - io_write_32(DBSC_DBSCHQOS40, 0x00000300U); - io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); - io_write_32(DBSC_DBSCHQOS42, 0x00000200U); - io_write_32(DBSC_DBSCHQOS43, 0x00000100U); - io_write_32(DBSC_DBSCHQOS90, 0x00000100U); - io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); - io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); - io_write_32(DBSC_DBSCHQOS93, 0x00000040U); - io_write_32(DBSC_DBSCHQOS120, 0x00000040U); - io_write_32(DBSC_DBSCHQOS121, 0x00000030U); - io_write_32(DBSC_DBSCHQOS122, 0x00000020U); - io_write_32(DBSC_DBSCHQOS123, 0x00000010U); - io_write_32(DBSC_DBSCHQOS130, 0x00000100U); - io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); - io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); - io_write_32(DBSC_DBSCHQOS133, 0x00000040U); - io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); - io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); - io_write_32(DBSC_DBSCHQOS142, 0x00000080U); - io_write_32(DBSC_DBSCHQOS143, 0x00000040U); - io_write_32(DBSC_DBSCHQOS150, 0x00000040U); - io_write_32(DBSC_DBSCHQOS151, 0x00000030U); - io_write_32(DBSC_DBSCHQOS152, 0x00000020U); - io_write_32(DBSC_DBSCHQOS153, 0x00000010U); - - /* Register write protect */ - io_write_32(DBSC_DBSYSCNT0, 0x00000000U); -} + { DBSC_DBSCHQOS00, 0x00000F00U }, + { DBSC_DBSCHQOS01, 0x00000B00U }, + { DBSC_DBSCHQOS02, 0x00000000U }, + { DBSC_DBSCHQOS03, 0x00000000U }, + { DBSC_DBSCHQOS40, 0x00000300U }, + { DBSC_DBSCHQOS41, 0x000002F0U }, + { DBSC_DBSCHQOS42, 0x00000200U }, + { DBSC_DBSCHQOS43, 0x00000100U }, + { DBSC_DBSCHQOS90, 0x00000100U }, + { DBSC_DBSCHQOS91, 0x000000F0U }, + { DBSC_DBSCHQOS92, 0x000000A0U }, + { DBSC_DBSCHQOS93, 0x00000040U }, + { DBSC_DBSCHQOS120, 0x00000040U }, + { DBSC_DBSCHQOS121, 0x00000030U }, + { DBSC_DBSCHQOS122, 0x00000020U }, + { DBSC_DBSCHQOS123, 0x00000010U }, + { DBSC_DBSCHQOS130, 0x00000100U }, + { DBSC_DBSCHQOS131, 0x000000F0U }, + { DBSC_DBSCHQOS132, 0x000000A0U }, + { DBSC_DBSCHQOS133, 0x00000040U }, + { DBSC_DBSCHQOS140, 0x000000C0U }, + { DBSC_DBSCHQOS141, 0x000000B0U }, + { DBSC_DBSCHQOS142, 0x00000080U }, + { DBSC_DBSCHQOS143, 0x00000040U }, + { DBSC_DBSCHQOS150, 0x00000040U }, + { DBSC_DBSCHQOS151, 0x00000030U }, + { DBSC_DBSCHQOS152, 0x00000020U }, + { DBSC_DBSCHQOS153, 0x00000010U }, +}; 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 */ #if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \ diff --git a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v30.c b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v30.c index 7147a9da..1fe6182b 100644 --- a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v30.c +++ b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3_v30.c @@ -60,61 +60,54 @@ #endif -static void dbsc_setting(void) -{ - /* Register write enable */ - io_write_32(DBSC_DBSYSCNT0, 0x00001234U); - +struct rcar_gen3_dbsc_qos_settings h3_v30_qos[] = { /* BUFCAM settings */ - io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); - io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); - io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); - io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); - io_write_32(DBSC_DBSCHSZ0, 0x00000001U); - io_write_32(DBSC_DBSCHRW0, 0x22421111U); + { DBSC_DBCAM0CNF1, 0x00043218U }, + { DBSC_DBCAM0CNF2, 0x000000F4U }, + { DBSC_DBCAM0CNF3, 0x00000000U }, + { DBSC_DBSCHCNT0, 0x000F0037U }, + { DBSC_DBSCHSZ0, 0x00000001U }, + { DBSC_DBSCHRW0, 0x22421111U }, /* DDR3 */ - io_write_32(DBSC_SCFCTST2, 0x012F1123U); + { DBSC_SCFCTST2, 0x012F1123U }, /* QoS Settings */ - io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); - io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); - io_write_32(DBSC_DBSCHQOS02, 0x00000000U); - io_write_32(DBSC_DBSCHQOS03, 0x00000000U); - io_write_32(DBSC_DBSCHQOS40, 0x00000300U); - io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); - io_write_32(DBSC_DBSCHQOS42, 0x00000200U); - io_write_32(DBSC_DBSCHQOS43, 0x00000100U); - io_write_32(DBSC_DBSCHQOS90, 0x00000100U); - io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); - io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); - io_write_32(DBSC_DBSCHQOS93, 0x00000040U); - io_write_32(DBSC_DBSCHQOS120, 0x00000040U); - io_write_32(DBSC_DBSCHQOS121, 0x00000030U); - io_write_32(DBSC_DBSCHQOS122, 0x00000020U); - io_write_32(DBSC_DBSCHQOS123, 0x00000010U); - io_write_32(DBSC_DBSCHQOS130, 0x00000100U); - io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); - io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); - io_write_32(DBSC_DBSCHQOS133, 0x00000040U); - io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); - io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); - io_write_32(DBSC_DBSCHQOS142, 0x00000080U); - io_write_32(DBSC_DBSCHQOS143, 0x00000040U); - io_write_32(DBSC_DBSCHQOS150, 0x00000040U); - io_write_32(DBSC_DBSCHQOS151, 0x00000030U); - io_write_32(DBSC_DBSCHQOS152, 0x00000020U); - io_write_32(DBSC_DBSCHQOS153, 0x00000010U); - - /* Register write protect */ - io_write_32(DBSC_DBSYSCNT0, 0x00000000U); -} + { DBSC_DBSCHQOS00, 0x00000F00U }, + { DBSC_DBSCHQOS01, 0x00000B00U }, + { DBSC_DBSCHQOS02, 0x00000000U }, + { DBSC_DBSCHQOS03, 0x00000000U }, + { DBSC_DBSCHQOS40, 0x00000300U }, + { DBSC_DBSCHQOS41, 0x000002F0U }, + { DBSC_DBSCHQOS42, 0x00000200U }, + { DBSC_DBSCHQOS43, 0x00000100U }, + { DBSC_DBSCHQOS90, 0x00000100U }, + { DBSC_DBSCHQOS91, 0x000000F0U }, + { DBSC_DBSCHQOS92, 0x000000A0U }, + { DBSC_DBSCHQOS93, 0x00000040U }, + { DBSC_DBSCHQOS120, 0x00000040U }, + { DBSC_DBSCHQOS121, 0x00000030U }, + { DBSC_DBSCHQOS122, 0x00000020U }, + { DBSC_DBSCHQOS123, 0x00000010U }, + { DBSC_DBSCHQOS130, 0x00000100U }, + { DBSC_DBSCHQOS131, 0x000000F0U }, + { DBSC_DBSCHQOS132, 0x000000A0U }, + { DBSC_DBSCHQOS133, 0x00000040U }, + { DBSC_DBSCHQOS140, 0x000000C0U }, + { DBSC_DBSCHQOS141, 0x000000B0U }, + { DBSC_DBSCHQOS142, 0x00000080U }, + { DBSC_DBSCHQOS143, 0x00000040U }, + { DBSC_DBSCHQOS150, 0x00000040U }, + { DBSC_DBSCHQOS151, 0x00000030U }, + { DBSC_DBSCHQOS152, 0x00000020U }, + { DBSC_DBSCHQOS153, 0x00000010U }, +}; void qos_init_h3_v30(void) { 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 */ split_area = 0x1BU; diff --git a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3n_v30.c b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3n_v30.c index e9f900a3..f1ee41b9 100644 --- a/drivers/staging/renesas/rcar/qos/H3/qos_init_h3n_v30.c +++ b/drivers/staging/renesas/rcar/qos/H3/qos_init_h3n_v30.c @@ -60,61 +60,54 @@ #endif -static void dbsc_setting(void) -{ - /* Register write enable */ - io_write_32(DBSC_DBSYSCNT0, 0x00001234U); - +struct rcar_gen3_dbsc_qos_settings h3n_v30_qos[] = { /* BUFCAM settings */ - io_write_32(DBSC_DBCAM0CNF1, 0x00043218U); - io_write_32(DBSC_DBCAM0CNF2, 0x000000F4U); - io_write_32(DBSC_DBCAM0CNF3, 0x00000000U); - io_write_32(DBSC_DBSCHCNT0, 0x000F0037U); - io_write_32(DBSC_DBSCHSZ0, 0x00000001U); - io_write_32(DBSC_DBSCHRW0, 0x22421111U); + { DBSC_DBCAM0CNF1, 0x00043218U }, + { DBSC_DBCAM0CNF2, 0x000000F4U }, + { DBSC_DBCAM0CNF3, 0x00000000U }, + { DBSC_DBSCHCNT0, 0x000F0037U }, + { DBSC_DBSCHSZ0, 0x00000001U }, + { DBSC_DBSCHRW0, 0x22421111U }, /* DDR3 */ - io_write_32(DBSC_SCFCTST2, 0x012F1123U); + { DBSC_SCFCTST2, 0x012F1123U }, /* QoS Settings */ - io_write_32(DBSC_DBSCHQOS00, 0x00000F00U); - io_write_32(DBSC_DBSCHQOS01, 0x00000B00U); - io_write_32(DBSC_DBSCHQOS02, 0x00000000U); - io_write_32(DBSC_DBSCHQOS03, 0x00000000U); - io_write_32(DBSC_DBSCHQOS40, 0x00000300U); - io_write_32(DBSC_DBSCHQOS41, 0x000002F0U); - io_write_32(DBSC_DBSCHQOS42, 0x00000200U); - io_write_32(DBSC_DBSCHQOS43, 0x00000100U); - io_write_32(DBSC_DBSCHQOS90, 0x00000100U); - io_write_32(DBSC_DBSCHQOS91, 0x000000F0U); - io_write_32(DBSC_DBSCHQOS92, 0x000000A0U); - io_write_32(DBSC_DBSCHQOS93, 0x00000040U); - io_write_32(DBSC_DBSCHQOS120, 0x00000040U); - io_write_32(DBSC_DBSCHQOS121, 0x00000030U); - io_write_32(DBSC_DBSCHQOS122, 0x00000020U); - io_write_32(DBSC_DBSCHQOS123, 0x00000010U); - io_write_32(DBSC_DBSCHQOS130, 0x00000100U); - io_write_32(DBSC_DBSCHQOS131, 0x000000F0U); - io_write_32(DBSC_DBSCHQOS132, 0x000000A0U); - io_write_32(DBSC_DBSCHQOS133, 0x00000040U); - io_write_32(DBSC_DBSCHQOS140, 0x000000C0U); - io_write_32(DBSC_DBSCHQOS141, 0x000000B0U); - io_write_32(DBSC_DBSCHQOS142, 0x00000080U); - io_write_32(DBSC_DBSCHQOS143, 0x00000040U); - io_write_32(DBSC_DBSCHQOS150, 0x00000040U); - io_write_32(DBSC_DBSCHQOS151, 0x00000030U); - io_write_32(DBSC_DBSCHQOS152, 0x00000020U); - io_write_32(DBSC_DBSCHQOS153, 0x00000010U); - - /* Register write protect */ - io_write_32(DBSC_DBSYSCNT0, 0x00000000U); -} + { DBSC_DBSCHQOS00, 0x00000F00U }, + { DBSC_DBSCHQOS01, 0x00000B00U }, + { DBSC_DBSCHQOS02, 0x00000000U }, + { DBSC_DBSCHQOS03, 0x00000000U }, + { DBSC_DBSCHQOS40, 0x00000300U }, + { DBSC_DBSCHQOS41, 0x000002F0U }, + { DBSC_DBSCHQOS42, 0x00000200U }, + { DBSC_DBSCHQOS43, 0x00000100U }, + { DBSC_DBSCHQOS90, 0x00000100U }, + { DBSC_DBSCHQOS91, 0x000000F0U }, + { DBSC_DBSCHQOS92, 0x000000A0U }, + { DBSC_DBSCHQOS93, 0x00000040U }, + { DBSC_DBSCHQOS120, 0x00000040U }, + { DBSC_DBSCHQOS121, 0x00000030U }, + { DBSC_DBSCHQOS122, 0x00000020U }, + { DBSC_DBSCHQOS123, 0x00000010U }, + { DBSC_DBSCHQOS130, 0x00000100U }, + { DBSC_DBSCHQOS131, 0x000000F0U }, + { DBSC_DBSCHQOS132, 0x000000A0U }, + { DBSC_DBSCHQOS133, 0x00000040U }, + { DBSC_DBSCHQOS140, 0x000000C0U }, + { DBSC_DBSCHQOS141, 0x000000B0U }, + { DBSC_DBSCHQOS142, 0x00000080U }, + { DBSC_DBSCHQOS143, 0x00000040U }, + { DBSC_DBSCHQOS150, 0x00000040U }, + { DBSC_DBSCHQOS151, 0x00000030U }, + { DBSC_DBSCHQOS152, 0x00000020U }, + { DBSC_DBSCHQOS153, 0x00000010U }, +}; void qos_init_h3n_v30(void) { 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 */ split_area = 0x1CU; -- 2.30.2