@@ -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-
30732870int ect_parse_binary_header (void ) {
30742871 int ret = 0 ;
30752872 int i , j ;
0 commit comments