|
27 | 27 | static struct ect_info ect_list[]; |
28 | 28 |
|
29 | 29 | #define G3D_TOP_LEVEL_KHZ 754000 |
30 | | -#define G3D_TOP_LEVEL_MHZ 754 |
31 | 30 |
|
32 | 31 | static char ect_signature[] = "PARA"; |
33 | 32 |
|
@@ -2692,7 +2691,7 @@ static int ect_extend_g3d_asv(void) |
2692 | 2691 | goto err_table_pointers; |
2693 | 2692 | } |
2694 | 2693 |
|
2695 | | - level_list[0] = G3D_TOP_LEVEL_MHZ; |
| 2694 | + level_list[0] = G3D_TOP_LEVEL_KHZ; |
2696 | 2695 | memcpy(&level_list[1], domain->level_list, sizeof(*level_list) * num_of_level); |
2697 | 2696 |
|
2698 | 2697 | for (i = 0; i < num_of_table; ++i) { |
@@ -2781,49 +2780,69 @@ static int ect_extend_g3d_asv(void) |
2781 | 2780 | return ret; |
2782 | 2781 | } |
2783 | 2782 |
|
2784 | | -static int ect_extend_g3d_dd_margin_genparam(void) |
| 2783 | +static int ect_extend_g3d_margin(void) |
2785 | 2784 | { |
2786 | | - void *gen_block; |
2787 | | - struct ect_gen_param_table *table; |
2788 | | - int32_t *oldp, *newp; |
2789 | | - int i; |
2790 | | - |
2791 | | - gen_block = ect_get_block(BLOCK_GEN_PARAM); |
2792 | | - if (!gen_block) |
2793 | | - return -EINVAL; |
| 2785 | + int i, j; |
| 2786 | + void *margin_block; |
| 2787 | + struct ect_margin_domain *domain; |
| 2788 | + int num_of_level, num_of_group; |
2794 | 2789 |
|
2795 | | - table = ect_gen_param_get_table(gen_block, "G3D_DD_margin"); |
2796 | | - if (!table) |
| 2790 | + margin_block = ect_get_block(BLOCK_MARGIN); |
| 2791 | + if (!margin_block) |
2797 | 2792 | return -EINVAL; |
2798 | 2793 |
|
2799 | | - if (table->num_of_col != 2) |
| 2794 | + domain = ect_margin_get_domain(margin_block, "G3D_DD_margin"); |
| 2795 | + if (!domain) |
2800 | 2796 | return -EINVAL; |
2801 | 2797 |
|
2802 | | - if (table->num_of_row >= 13) |
| 2798 | + if (domain->num_of_level >= 13) |
2803 | 2799 | return 0; |
2804 | 2800 |
|
2805 | | - if (!table->parameter) |
| 2801 | + num_of_level = domain->num_of_level; |
| 2802 | + num_of_group = domain->num_of_group; |
| 2803 | + |
| 2804 | + if (!num_of_group) |
2806 | 2805 | return -EINVAL; |
2807 | 2806 |
|
2808 | | - oldp = (int32_t *)table->parameter; /* 2 * 12 ints */ |
2809 | | - newp = kzalloc(sizeof(*newp) * 2 * 13, GFP_KERNEL); |
2810 | | - if (!newp) |
2811 | | - return -ENOMEM; |
| 2807 | + if (domain->offset_compact) { |
| 2808 | + unsigned char *offset = kzalloc( |
| 2809 | + sizeof(unsigned char) * (num_of_level + 1) * num_of_group, GFP_KERNEL); |
| 2810 | + |
| 2811 | + if (!offset) |
| 2812 | + return -ENOMEM; |
2812 | 2813 |
|
2813 | | - /* new row 0 for 754: index 0, margin as old level 0 */ |
2814 | | - newp[0] = 0; |
2815 | | - newp[1] = oldp[1]; |
| 2814 | + memcpy(offset, domain->offset_compact, |
| 2815 | + sizeof(unsigned char) * num_of_group); |
2816 | 2816 |
|
2817 | | - /* old rows 0..11 -> new rows 1..12 */ |
2818 | | - for (i = 0; i < 12; i++) { |
2819 | | - newp[(i + 1) * 2 + 0] = i + 1; |
2820 | | - newp[(i + 1) * 2 + 1] = oldp[i * 2 + 1]; |
2821 | | - } |
| 2817 | + for (i = 0; i < num_of_level; ++i) { |
| 2818 | + for (j = 0; j < num_of_group; ++j) |
| 2819 | + offset[(i + 1) * num_of_group + j] = |
| 2820 | + domain->offset_compact[i * num_of_group + j]; |
| 2821 | + } |
2822 | 2822 |
|
2823 | | - table->parameter = newp; |
2824 | | - table->num_of_row = 13; |
| 2823 | + domain->offset_compact = offset; |
| 2824 | + } else if (domain->offset) { |
| 2825 | + unsigned int *offset = kzalloc( |
| 2826 | + sizeof(unsigned int) * (num_of_level + 1) * num_of_group, GFP_KERNEL); |
2825 | 2827 |
|
2826 | | - kfree(oldp); |
| 2828 | + if (!offset) |
| 2829 | + return -ENOMEM; |
| 2830 | + |
| 2831 | + memcpy(offset, domain->offset, |
| 2832 | + sizeof(unsigned int) * num_of_group); |
| 2833 | + |
| 2834 | + for (i = 0; i < num_of_level; ++i) { |
| 2835 | + for (j = 0; j < num_of_group; ++j) |
| 2836 | + offset[(i + 1) * num_of_group + j] = |
| 2837 | + domain->offset[i * num_of_group + j]; |
| 2838 | + } |
| 2839 | + |
| 2840 | + domain->offset = offset; |
| 2841 | + } else { |
| 2842 | + return -EINVAL; |
| 2843 | + } |
| 2844 | + |
| 2845 | + domain->num_of_level = num_of_level + 1; |
2827 | 2846 |
|
2828 | 2847 | return 0; |
2829 | 2848 | } |
@@ -2884,7 +2903,7 @@ int ect_parse_binary_header(void) { |
2884 | 2903 | pr_warn("[ECT] : failed to extend dvfs_g3d levels\n"); |
2885 | 2904 | if (ect_extend_g3d_asv()) |
2886 | 2905 | pr_warn("[ECT] : failed to extend asv dvfs_g3d levels\n"); |
2887 | | - if (ect_extend_g3d_dd_margin_genparam()) |
| 2906 | + if (ect_extend_g3d_margin()) |
2888 | 2907 | pr_warn("[ECT] : failed to extend G3D_DD_margin levels\n"); |
2889 | 2908 |
|
2890 | 2909 | ect_header_info.block_handle = ect_header; |
|
0 commit comments