diff --git a/gpu/sun-gpu.dtsi b/gpu/sun-gpu.dtsi index 34c90a61..a3e97828 100644 --- a/gpu/sun-gpu.dtsi +++ b/gpu/sun-gpu.dtsi @@ -83,6 +83,9 @@ , /* TURBO_L1 index=10 */ ; /* TURBO_L3 index=11 */ + nvmem-cells = <&gpu_speed_bin>; + nvmem-cell-names = "speed_bin"; + zap-shader { memory-region = <&gpu_microcode_mem>; }; diff --git a/gpu/sun-v2-gpu-pwrlevels.dtsi b/gpu/sun-v2-gpu-pwrlevels.dtsi index 7a70ac8d..c299542b 100644 --- a/gpu/sun-v2-gpu-pwrlevels.dtsi +++ b/gpu/sun-v2-gpu-pwrlevels.dtsi @@ -4,19 +4,18 @@ */ /* ACD Control register values */ -#define ACD_LEVEL_TURBO_L3 0x882a5ffd -#define ACD_LEVEL_TURBO_L1 0x882a5ffd -#define ACD_LEVEL_NOM_L1 0x882b5ffd -#define ACD_LEVEL_NOM 0x882b5ffd -#define ACD_LEVEL_SVS_L2 0x882b5ffd -#define ACD_LEVEL_SVS_L1 0xa82b5ffd -#define ACD_LEVEL_SVS_L0 0x882d5ffd +#define ACD_LEVEL_TURBO_L4 0x88295ffd +#define ACD_LEVEL_TURBO_L3 0x88295ffd +#define ACD_LEVEL_TURBO_L1 0xa8295ffd +#define ACD_LEVEL_NOM_L1 0x882a5ffd +#define ACD_LEVEL_NOM 0x882a5ffd +#define ACD_LEVEL_SVS_L2 0x882a5ffd +#define ACD_LEVEL_SVS_L1 0xa82a5ffd +#define ACD_LEVEL_SVS_L0 0x882c5ffd #define ACD_LEVEL_SVS 0xa82e5ffd -#define ACD_LEVEL_LOW_SVS_L1 0xc0285ffd -#define ACD_LEVEL_LOW_SVS 0xe02d5ffd -#define ACD_LEVEL_LOW_SVS_D0 0xe02f5ffd -#define ACD_LEVEL_LOW_SVS_D1 0xe8285ffd -#define ACD_LEVEL_LOW_SVS_D2 0xe82f5ffd +#define ACD_LEVEL_LOW_SVS_L1 0xc02e5ffd +#define ACD_LEVEL_LOW_SVS 0xc02e5ffd +#define ACD_LEVEL_LOW_SVS_D0 0xc8285ffd &msm_gpu { /* Power levels */ @@ -26,12 +25,16 @@ compatible = "qcom,gpu-pwrlevels-bins"; + /* + * The bins need to match based on speed bin first and then SKU. + * Keep pwrlevel bins sorted in ascending order of the fmax of the bins. + */ qcom,gpu-pwrlevels-0 { #address-cells = <1>; #size-cells = <0>; qcom,initial-pwrlevel = <10>; - qcom,sku-codes = ; + qcom,speed-bin = <0xbe>; /* NOM */ qcom,gpu-pwrlevel@0 { @@ -146,8 +149,6 @@ qcom,bus-freq = <3>; qcom,bus-min = <2>; qcom,bus-max = <3>; - - qcom,acd-level = ; }; /* Low_SVS_D2 */ @@ -159,8 +160,6 @@ qcom,bus-freq = <3>; qcom,bus-min = <2>; qcom,bus-max = <3>; - - qcom,acd-level = ; }; /* Low_SVS_D3 */ @@ -180,7 +179,7 @@ #size-cells = <0>; qcom,initial-pwrlevel = <12>; - qcom,sku-codes = ; + qcom,speed-bin = <0xdd>; /* TURBO_L1 */ qcom,gpu-pwrlevel@0 { @@ -321,8 +320,6 @@ qcom,bus-freq = <3>; qcom,bus-min = <2>; qcom,bus-max = <3>; - - qcom,acd-level = ; }; /* Low_SVS_D2 */ @@ -334,8 +331,6 @@ qcom,bus-freq = <3>; qcom,bus-min = <2>; qcom,bus-max = <3>; - - qcom,acd-level = ; }; /* Low_SVS_D3 */ @@ -354,8 +349,350 @@ #address-cells = <1>; #size-cells = <0>; + qcom,initial-pwrlevel = <12>; + qcom,speed-bin = <0xe8>; + + /* TURBO_L3 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1100000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* NOM_L1 */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <967000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <900000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <7>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L2 */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <832000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <7>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <734000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L0 */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <660000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <4>; + qcom,bus-max = <7>; + + qcom,acd-level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <607000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <4>; + qcom,bus-max = <7>; + + qcom,acd-level = ; + }; + + /* Low_SVS_L1 */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <525000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS */ + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <443000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS_D0 */ + qcom,gpu-pwrlevel@9 { + reg = <9>; + qcom,gpu-freq = <389000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS_D1 */ + qcom,gpu-pwrlevel@10 { + reg = <10>; + qcom,gpu-freq = <342000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + + /* Low_SVS_D2 */ + qcom,gpu-pwrlevel@11 { + reg = <11>; + qcom,gpu-freq = <222000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + + /* Low_SVS_D3 */ + qcom,gpu-pwrlevel@12 { + reg = <12>; + qcom,gpu-freq = <160000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + }; + + qcom,gpu-pwrlevels-3 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,initial-pwrlevel = <12>; + qcom,sku-codes = ; + + /* TURBO_L3 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1100000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* NOM_L1 */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <967000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <900000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <7>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L2 */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <832000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <7>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <734000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L0 */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <660000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <4>; + qcom,bus-max = <7>; + + qcom,acd-level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <607000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <4>; + qcom,bus-max = <7>; + + qcom,acd-level = ; + }; + + /* Low_SVS_L1 */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <525000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS */ + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <443000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS_D0 */ + qcom,gpu-pwrlevel@9 { + reg = <9>; + qcom,gpu-freq = <389000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS_D1 */ + qcom,gpu-pwrlevel@10 { + reg = <10>; + qcom,gpu-freq = <342000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + + /* Low_SVS_D2 */ + qcom,gpu-pwrlevel@11 { + reg = <11>; + qcom,gpu-freq = <222000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + + /* Low_SVS_D3 */ + qcom,gpu-pwrlevel@12 { + reg = <12>; + qcom,gpu-freq = <160000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + }; + + qcom,gpu-pwrlevels-4 { + #address-cells = <1>; + #size-cells = <0>; + qcom,initial-pwrlevel = <13>; - qcom,sku-codes = ; + qcom,speed-bin = <0xf2>; /* TURBO_L3 */ qcom,gpu-pwrlevel@0 { @@ -389,8 +726,8 @@ qcom,gpu-freq = <967000000>; qcom,level = ; - qcom,bus-freq = <10>; - qcom,bus-min = <10>; + qcom,bus-freq = <11>; + qcom,bus-min = <11>; qcom,bus-max = <11>; qcom,acd-level = ; @@ -509,8 +846,6 @@ qcom,bus-freq = <3>; qcom,bus-min = <2>; qcom,bus-max = <3>; - - qcom,acd-level = ; }; /* Low_SVS_D2 */ @@ -522,8 +857,6 @@ qcom,bus-freq = <3>; qcom,bus-min = <2>; qcom,bus-max = <3>; - - qcom,acd-level = ; }; /* Low_SVS_D3 */ @@ -537,5 +870,203 @@ qcom,bus-max = <3>; }; }; + + qcom,gpu-pwrlevels-5 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,initial-pwrlevel = <14>; + qcom,sku-codes = ; + + /* TURBO_L4 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1200000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* TURBO_L3 */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <1100000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <1050000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* NOM_L1 */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <967000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + + qcom,acd-level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <900000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <7>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L2 */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <832000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <7>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <734000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <10>; + + qcom,acd-level = ; + }; + + /* SVS_L0 */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <660000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <4>; + qcom,bus-max = <7>; + + qcom,acd-level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <607000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <4>; + qcom,bus-max = <7>; + + qcom,acd-level = ; + }; + + /* Low_SVS_L1 */ + qcom,gpu-pwrlevel@9 { + reg = <9>; + qcom,gpu-freq = <525000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS */ + qcom,gpu-pwrlevel@10 { + reg = <10>; + qcom,gpu-freq = <443000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS_D0 */ + qcom,gpu-pwrlevel@11 { + reg = <11>; + qcom,gpu-freq = <389000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <6>; + + qcom,acd-level = ; + }; + + /* Low_SVS_D1 */ + qcom,gpu-pwrlevel@12 { + reg = <12>; + qcom,gpu-freq = <342000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + + /* Low_SVS_D2 */ + qcom,gpu-pwrlevel@13 { + reg = <13>; + qcom,gpu-freq = <222000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + + /* Low_SVS_D3 */ + qcom,gpu-pwrlevel@14 { + reg = <14>; + qcom,gpu-freq = <160000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <3>; + }; + }; }; };