Skip to content

Commit e3a3ab2

Browse files
committed
Dtsi: Add missing levels
1 parent c25af6d commit e3a3ab2

4 files changed

Lines changed: 41 additions & 238 deletions

File tree

arch/arm64/boot/dts/exynos/exynos9820-mali_common.dtsi

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,17 @@
2424
#cooling-cells = <2>; /* min followed by max */
2525
governor = "interactive";
2626
interactive_info = <260000 94 0>;
27-
gpu_dvfs_table_size = <14 8>; /*<row col>*/
27+
gpu_dvfs_table_size = <16 8>; /*<row col>*/
2828
/* 8 columns freq down up stay mif little middle big */
2929
gpu_dvfs_table = <
30-
910000 78 100 9 2093000 1456000 0 1820000
31-
858000 78 100 9 2093000 1456000 0 1820000
32-
806000 78 100 9 2093000 1456000 0 1820000
33-
754000 78 100 9 2093000 1456000 0 1820000
30+
910000 78 100 9 2093000 1456000 0 1820000
31+
858000 78 100 9 2093000 1456000 0 1820000
32+
806000 78 100 9 2093000 1456000 0 1820000
33+
754000 78 100 9 2093000 1456000 0 1820000
3434
702000 78 100 9 2093000 1456000 0 1820000
35+
676000 78 98 5 2093000 1456000 0 2080000
3536
650000 78 98 5 2093000 1456000 0 2080000
37+
598000 78 98 5 2093000 1456000 0 2080000
3638
572000 78 98 5 1794000 0 0 0
3739
433000 78 95 1 1352000 0 0 0
3840
377000 78 90 1 1352000 0 0 0

arch/arm64/boot/dts/samsung/exynos9820-mali.dtsi

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,25 @@
1111

1212
&mali {
1313
interactive_info = <260000 94 0>;
14-
gpu_dvfs_table_size = <14 8>; /*<row col>*/
14+
gpu_dvfs_table_size = <16 8>; /*<row col>*/
1515
/* 8 columns freq down up stay mif little middle big */
1616
gpu_dvfs_table = <
17-
910000 78 100 9 2093000 1456000 0 1820000
18-
858000 78 100 9 2093000 1456000 0 1820000
19-
806000 78 100 9 2093000 1456000 0 1820000
20-
754000 78 100 9 2093000 1456000 0 1820000
21-
702000 78 100 9 2093000 1456000 0 1820000
22-
650000 78 98 5 2093000 1456000 0 2080000
23-
572000 78 98 5 1794000 0 0 0
24-
433000 78 95 1 1352000 0 0 0
25-
377000 78 90 1 1352000 0 0 0
26-
325000 78 85 1 1014000 0 0 0
27-
260000 78 85 1 676000 0 0 0
28-
200000 78 85 1 676000 0 0 0
29-
156000 0 85 1 676000 0 0 0
30-
100000 0 85 1 676000 0 0 0 >;
17+
910000 78 100 9 2093000 1456000 0 1820000
18+
858000 78 100 9 2093000 1456000 0 1820000
19+
806000 78 100 9 2093000 1456000 0 1820000
20+
754000 78 100 9 2093000 1456000 0 1820000
21+
702000 78 100 9 2093000 1456000 0 1820000
22+
676000 78 98 5 2093000 1456000 0 2080000
23+
650000 78 98 5 2093000 1456000 0 2080000
24+
598000 78 98 5 2093000 1456000 0 2080000
25+
572000 78 98 5 1794000 0 0 0
26+
433000 78 95 1 1352000 0 0 0
27+
377000 78 90 1 1352000 0 0 0
28+
325000 78 85 1 1014000 0 0 0
29+
260000 78 85 1 676000 0 0 0
30+
200000 78 85 1 676000 0 0 0
31+
156000 0 85 1 676000 0 0 0
32+
100000 0 85 1 676000 0 0 0 >;
3133
gpu_max_clock = <910000>;
3234
gpu_max_clock_limit = <910000>;
3335
gpu_min_clock = <100000>;

arch/arm64/boot/dts/samsung/exynos9820-mali_rev2.dtsi

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,25 @@
1111

1212
&mali {
1313
interactive_info = <260000 94 0>;
14-
gpu_dvfs_table_size = <14 8>; /*<row col>*/
14+
gpu_dvfs_table_size = <16 8>; /*<row col>*/
1515
/* 8 columns freq down up stay mif little middle big */
1616
gpu_dvfs_table = <
17-
910000 78 100 9 2093000 1456000 0 1820000
18-
858000 78 100 9 2093000 1456000 0 1820000
19-
806000 78 100 9 2093000 1456000 0 1820000
20-
754000 78 100 9 2093000 1456000 0 1820000
21-
702000 78 100 9 2093000 1456000 0 1820000
22-
650000 78 98 5 2093000 1456000 0 2080000
23-
572000 78 98 5 1794000 0 0 0
24-
433000 78 95 1 1352000 0 0 0
25-
377000 78 90 1 1352000 0 0 0
26-
325000 78 85 1 1014000 0 0 0
27-
260000 78 85 1 676000 0 0 0
28-
200000 78 85 1 676000 0 0 0
29-
156000 0 85 1 676000 0 0 0
30-
100000 0 85 1 676000 0 0 0 >;
17+
910000 78 100 9 2093000 1456000 0 1820000
18+
858000 78 100 9 2093000 1456000 0 1820000
19+
806000 78 100 9 2093000 1456000 0 1820000
20+
754000 78 100 9 2093000 1456000 0 1820000
21+
702000 78 100 9 2093000 1456000 0 1820000
22+
676000 78 98 5 2093000 1456000 0 2080000
23+
650000 78 98 5 2093000 1456000 0 2080000
24+
598000 78 98 5 2093000 1456000 0 2080000
25+
572000 78 98 5 1794000 0 0 0
26+
433000 78 95 1 1352000 0 0 0
27+
377000 78 90 1 1352000 0 0 0
28+
325000 78 85 1 1014000 0 0 0
29+
260000 78 85 1 676000 0 0 0
30+
200000 78 85 1 676000 0 0 0
31+
156000 0 85 1 676000 0 0 0
32+
100000 0 85 1 676000 0 0 0 >;
3133
gpu_max_clock = <910000>;
3234
gpu_max_clock_limit = <910000>;
3335
gpu_min_clock = <100000>;

drivers/soc/samsung/ect_parser.c

Lines changed: 0 additions & 203 deletions
Original file line numberDiff line numberDiff line change
@@ -2867,209 +2867,6 @@ static int ect_override_g3d_pll_table(void)
28672867
return 0;
28682868
}
28692869

2870-
static int ect_override_g3d_tables1(void)
2871-
{
2872-
void *dvfs_blk, *asv_blk, *gen_blk;
2873-
struct ect_dvfs_domain *dvfs;
2874-
struct ect_voltage_domain *asv;
2875-
struct ect_gen_param_table *margin_tbl;
2876-
2877-
int new_levels = 16;
2878-
int old_levels;
2879-
2880-
/* --- DVFS domain holen --- */
2881-
dvfs_blk = ect_get_block(BLOCK_DVFS);
2882-
if (!dvfs_blk)
2883-
return -ENODEV;
2884-
2885-
dvfs = ect_dvfs_get_domain(dvfs_blk, "dvfs_g3d");
2886-
if (!dvfs)
2887-
return -ENODEV;
2888-
2889-
old_levels = dvfs->num_of_level;
2890-
if (old_levels >= new_levels) {
2891-
pr_info("[ECT] g3d override: already %d levels\n", old_levels);
2892-
} else {
2893-
{
2894-
void *new_list_level;
2895-
u32 *p;
2896-
u32 freqs[16] = {
2897-
910000, 858000, 806000, 754000, 702000, 676000, 650000, 598000, 572000,
2898-
433000, 377000, 325000, 260000, 200000, 156000, 100000
2899-
};
2900-
int i;
2901-
2902-
new_list_level = kzalloc(sizeof(struct ect_dvfs_level) * new_levels, GFP_KERNEL);
2903-
if (!new_list_level)
2904-
return -ENOMEM;
2905-
2906-
p = (u32 *)new_list_level;
2907-
2908-
for (i = 0; i < new_levels; i++) {
2909-
size_t stride_u32 = sizeof(struct ect_dvfs_level) / sizeof(u32);
2910-
p[i * stride_u32 + 0] = freqs[i]; /* freq kHz */
2911-
p[i * stride_u32 + 1] = 1; /* enable => (O) */
2912-
}
2913-
2914-
dvfs->list_level = new_list_level;
2915-
}
2916-
2917-
{
2918-
u32 *new_map;
2919-
int c, i;
2920-
int clocks = dvfs->num_of_clock;
2921-
2922-
new_map = kzalloc(sizeof(u32) * clocks * new_levels, GFP_KERNEL);
2923-
if (!new_map)
2924-
return -ENOMEM;
2925-
2926-
for (c = 0; c < clocks; c++) {
2927-
for (i = 0; i < new_levels; i++)
2928-
new_map[c * new_levels + i] = (u32)i;
2929-
}
2930-
2931-
dvfs->list_dvfs_value = new_map;
2932-
}
2933-
2934-
dvfs->num_of_level = new_levels;
2935-
2936-
dvfs->max_frequency = 910000;
2937-
dvfs->min_frequency = 100000;
2938-
2939-
pr_info("[ECT] g3d override: DVFS levels %d -> %d\n", old_levels, new_levels);
2940-
}
2941-
2942-
/* --- ASV domain holen --- */
2943-
asv_blk = ect_get_block(BLOCK_ASV);
2944-
if (!asv_blk)
2945-
return -ENODEV;
2946-
2947-
asv = ect_asv_get_domain(asv_blk, "dvfs_g3d");
2948-
if (!asv)
2949-
return -ENODEV;
2950-
2951-
old_levels = asv->num_of_level;
2952-
if (old_levels < new_levels) {
2953-
int g = asv->num_of_group;
2954-
int t;
2955-
2956-
/* 1) level_list (MHz) neu */
2957-
{
2958-
int32_t *new_level_list;
2959-
2960-
new_level_list = kzalloc(sizeof(int32_t) * new_levels, GFP_KERNEL);
2961-
if (!new_level_list)
2962-
return -ENOMEM;
2963-
new_level_list[0] = 910;
2964-
new_level_list[1] = 858;
2965-
new_level_list[2] = 806;
2966-
new_level_list[3] = 754;
2967-
new_level_list[4] = 702;
2968-
new_level_list[5] = 676;
2969-
new_level_list[6] = 650;
2970-
new_level_list[7] = 598;
2971-
new_level_list[8] = 572;
2972-
new_level_list[9] = 433;
2973-
new_level_list[10] = 377;
2974-
new_level_list[11] = 325;
2975-
new_level_list[12] = 260;
2976-
new_level_list[13] = 200;
2977-
new_level_list[14] = 156;
2978-
new_level_list[15] = 100;
2979-
2980-
asv->level_list = new_level_list;
2981-
}
2982-
2983-
/* 2) jede TABLE VERSION aufblasen: neue Top-Row = Kopie der alten Top-Row */
2984-
for (t = 0; t < asv->num_of_table; t++) {
2985-
struct ect_voltage_table *tbl = &asv->table_list[t];
2986-
2987-
/* level_en ggf. erweitern (parser_version>=2) */
2988-
if (tbl->level_en) {
2989-
int32_t *new_en = kzalloc(sizeof(int32_t) * new_levels, GFP_KERNEL);
2990-
if (!new_en)
2991-
return -ENOMEM;
2992-
2993-
/* neue 754 übernimmt enable von alter Top-Row (702) */
2994-
new_en[0] = ((int32_t *)tbl->level_en)[0];
2995-
memcpy(&new_en[1], tbl->level_en, sizeof(int32_t) * old_levels);
2996-
tbl->level_en = new_en;
2997-
}
2998-
2999-
/* parser_version>=3: voltages_step (u8) benutzen */
3000-
if (tbl->voltages_step) {
3001-
u8 *old = (u8 *)tbl->voltages_step;
3002-
u8 *neu = kzalloc(sizeof(u8) * g * new_levels, GFP_KERNEL);
3003-
if (!neu)
3004-
return -ENOMEM;
3005-
3006-
/* neue Row 0 = alte Row 0 */
3007-
memcpy(&neu[0], &old[0], g * sizeof(u8));
3008-
/* alte 12 Rows nach unten schieben */
3009-
memcpy(&neu[g], &old[0], g * old_levels * sizeof(u8));
3010-
3011-
tbl->voltages_step = neu;
3012-
/* tbl->volt_step bleibt wie gesetzt */
3013-
}
3014-
/* parser_version<3: voltages (int32 uV) benutzen */
3015-
else if (tbl->voltages) {
3016-
int32_t *old = (int32_t *)tbl->voltages;
3017-
int32_t *neu = kzalloc(sizeof(int32_t) * g * new_levels, GFP_KERNEL);
3018-
if (!neu)
3019-
return -ENOMEM;
3020-
3021-
memcpy(&neu[0], &old[0], g * sizeof(int32_t));
3022-
memcpy(&neu[g], &old[0], g * old_levels * sizeof(int32_t));
3023-
3024-
tbl->voltages = neu;
3025-
} else {
3026-
pr_warn("[ECT] g3d override: ASV table %d has no voltage data\n", t);
3027-
}
3028-
}
3029-
3030-
asv->num_of_level = new_levels;
3031-
3032-
pr_info("[ECT] g3d override: ASV levels %d -> %d\n", old_levels, new_levels);
3033-
}
3034-
3035-
/* --- GEN_PARAM: G3D_DD_margin aufblasen --- */
3036-
gen_blk = ect_get_block(BLOCK_GEN_PARAM);
3037-
if (!gen_blk)
3038-
return 0; /* nicht fatal */
3039-
3040-
margin_tbl = ect_gen_param_get_table(gen_blk, "G3D_DD_margin");
3041-
if (margin_tbl) {
3042-
int cols = margin_tbl->num_of_col;
3043-
int rows = margin_tbl->num_of_row;
3044-
3045-
if (cols == 2 && rows == 12) {
3046-
int32_t *oldp = (int32_t *)margin_tbl->parameter;
3047-
int32_t *newp = kzalloc(sizeof(int32_t) * 2 * 13, GFP_KERNEL);
3048-
int i;
3049-
3050-
if (!newp)
3051-
return -ENOMEM;
3052-
3053-
/* neue Row für 754 (Index 0) */
3054-
newp[0] = 0;
3055-
newp[1] = 12500;
3056-
3057-
/* alte Rows 0..11 werden zu 1..12, margin übernimmt man aus alter 2. Spalte */
3058-
for (i = 0; i < 12; i++) {
3059-
newp[(i + 1) * 2 + 0] = i + 1;
3060-
newp[(i + 1) * 2 + 1] = oldp[i * 2 + 1];
3061-
}
3062-
3063-
margin_tbl->parameter = newp;
3064-
margin_tbl->num_of_row = 16;
3065-
3066-
pr_info("[ECT] g3d override: G3D_DD_margin rows 12 -> 13\n");
3067-
}
3068-
}
3069-
3070-
return 0;
3071-
}
3072-
30732870
int ect_parse_binary_header(void) {
30742871
int ret = 0;
30752872
int i, j;

0 commit comments

Comments
 (0)