267 lines
14 KiB
Plaintext
267 lines
14 KiB
Plaintext
Qualcomm Technologies Memory Accelerator
|
|
|
|
Memory accelerator configures the power-mode (corner) for the
|
|
accelerator.
|
|
|
|
Required properties:
|
|
- compatible: Must be "qcom,mem-acc-regulator"
|
|
- regulator-name: A string used to describe the regulator
|
|
- regulator-min-microvolt: Minimum corner value as min constraint, which
|
|
should be 1 for SVS corner
|
|
- regulator-max-microvolt: Maximum corner value as max constraint, which
|
|
should be 4 for SUPER_TURBO or 3 for TURBO
|
|
|
|
Optional properties:
|
|
- reg: Register addresses for acc-sel-l1, acc-sel-l2 control, acc-en,
|
|
MEM ACC eFuse address, acc-l1-custom , acc-l2-custom,
|
|
mem-acc-type1, mem-acc-type2, mem-acc-type3, mem-acc-type4,
|
|
mem-acc-type5 and mem-acc-type6.
|
|
- reg-names: Register names. Must be "acc-sel-l1",
|
|
"acc-sel-l2", "acc-en", "efuse_addr",
|
|
"acc-l1-custom", "acc-l2-custom", "mem-acc-type1",
|
|
"mem-acc-type2", "mem-acc-type3", "mem-acc-type4",
|
|
"mem-acc-type5", "mem-acc-type6".
|
|
A given mem-acc-regulator driver must have "acc-sel-l1" or
|
|
"acc-sel-l2" or "mem-acc-type*" reg-names property and
|
|
related register address property.
|
|
- qcom,corner-acc-map Array which maps the APC (application processor)
|
|
corner value to the accelerator corner. The number of elements
|
|
in this property defines the number of accelerator corners.
|
|
Either qcom,corner-acc-map property or qcom,cornerX-reg-config
|
|
properties should be specified.
|
|
- qcom,acc-en-bit-pos Array which specifies bit positions in the
|
|
'acc-en' register. Setting these bits forces the
|
|
the acclerator to use the corner value specified
|
|
in the 'acc-sel-l1' and 'acc-sel-l2' register.
|
|
- qcom,acc-sel-l1-bit-size Integer which specifies the number of bits in
|
|
the 'acc-sel-l1' register which define each L1
|
|
select parameter. If this property is not
|
|
specified, then a default value of 2 is assumed.
|
|
- qcom,acc-sel-l1-bit-pos Array which specifies bit positions in the
|
|
'acc-sel-l1' register. Each element in this array
|
|
is the LSB of an N-bit value where 'N' is
|
|
defined by the qcom,acc-sel-l1-bit-size
|
|
property. This N-bit value specifies the corner
|
|
value used by the accelerator for the L1 cache.
|
|
- qcom,acc-sel-l2-bit-size Integer which specifies the number of bits in
|
|
the 'acc-sel-l2' register which define each L2
|
|
select parameter. If this property is not
|
|
specified, then a default value of 2 is assumed.
|
|
- qcom,acc-sel-l2-bit-pos Array which specifies bit positions in the
|
|
'acc-sel-l2' register. Each element in this array
|
|
is the LSB of an N-bit value where 'N' is
|
|
defined by the qcom,acc-sel-l2-bit-size
|
|
property. This N-bit value specifies the corner
|
|
value used by the accelerator for the L2 cache.
|
|
- qcom,l1-acc-custom-data: Array which maps APC corner values to L1 ACC custom data values.
|
|
The corresponding custom data is written into the custom register
|
|
while switching between APC corners. The custom register address
|
|
is specified by "acc-11-custom" reg-property. The length of the array
|
|
should be equal to number of APC corners.
|
|
- qcom,l2-acc-custom-data: Array which maps APC corner values to L2 ACC custom data values.
|
|
The corresponding custom data is written into the custom register
|
|
while switching between APC corners. The custom register address
|
|
is specified by "acc-l2-custom" reg-property. The length of the array
|
|
should be equal to number of APC corners.
|
|
- qcom,override-acc-fuse-sel: Array of 4 elements which specify the way to read the override fuse.
|
|
The override fuse value is used by the qcom,override-fuse-version-map
|
|
to identify the correct set of override properties.
|
|
The 4 elements with index [0..4] are:
|
|
[0] => the fuse row number of the selector
|
|
[1] => LSB bit position of the bits
|
|
[2] => number of bits
|
|
[3] => fuse reading method, 0 for direct reading or 1 for SCM reading
|
|
- qcom,override-fuse-version-map: Array of integers which each match to a override fuse value.
|
|
Any element in a tuple may use the value 0xffffffff as a wildcard.
|
|
The index of the first value (in the array) which matches the override fuse
|
|
is used to select the right tuples from the other override properties.
|
|
- qcom,override-corner-acc-map: Array of tuples which overrides the existing acc-corner map
|
|
(specified by qcom,corner-acc-map) with corner values selected
|
|
from this property. "qcom,override-corner-acc-map" must contain the
|
|
same number of tuples as "qcom,override-fuse-version-map". These tuples
|
|
are then mapped one-to-one in the order specified. If the
|
|
"qcom,override-fuse-version-map" property is not specified, then
|
|
"qcom,override-corner-acc-map" must contain a single tuple which is then
|
|
applied unconditionally.
|
|
- qcom,override-l1-acc-custom-data: Array of tuples of which overrides the existing l1-acc-custom data
|
|
(specified by qcom,l1-acc-custom-data), with values specified in this property.
|
|
The corresponding custom data is written into the custom register while
|
|
switching between APC corners. The custom register address is specified by
|
|
"acc-11-custom" reg-property. This property can only be specified if the
|
|
"qcom,l1-acc-custom-data" is already defined. If the
|
|
"qcom,override-fuse-version-map" property is specified, then
|
|
qcom,override-l1-acc-custom-data must contain the same number of tuples
|
|
as "qcom,override-fuse-version-map". These tuples are then mapped one-to-one
|
|
in the order specified. If the qcom,override-fuse-version-map property is
|
|
not specified, then "qcom,override-l1-acc-custom-data" must contain a single
|
|
tuple which is then applied unconditionally.
|
|
- qcom,override-l2-acc-custom-data: Array of tuples of which overrides the existing l1-acc-custom data
|
|
(specified by qcom,l2-acc-custom-data), with values specified in this property.
|
|
The corresponding custom data is written into the custom register while
|
|
switching between APC corners. The custom register address is specified by
|
|
"acc-12-custom" reg-property. This property can only be specified if the
|
|
"qcom,l2-acc-custom-data" is already defined. If the
|
|
"qcom,override-fuse-version-map" property is specified, then
|
|
"qcom,override-l2-acc-custom-data" must contain the same number of tuples
|
|
as "qcom,override-fuse-version-map". These tuples are then mapped one-to-one
|
|
in the order specified. If the qcom,override-fuse-version-map property is
|
|
not specified, then "qcom,override-l2-acc-custom-data" must contain a single
|
|
tuple which is then applied unconditionally.
|
|
- qcom,mem-acc-type1: Array which specifies the value to be written to the mem acc type1 register for each fuse
|
|
corner, from the lowest fuse corner to the highest fuse corner. The length of the array
|
|
must be equal to the number of APC fuse corners. This property must be present if reg names
|
|
specifies mem-acc-type1.
|
|
- qcom,mem-acc-type2: Same as qcom,mem-acc-type1 except for mem acc type2 register.
|
|
- qcom,mem-acc-type3: Same as qcom,mem-acc-type1 except for mem acc type3 register.
|
|
- qcom,mem-acc-type4: Same as qcom,mem-acc-type1 except for mem acc type4 register.
|
|
- qcom,mem-acc-type5: Same as qcom,mem-acc-type1 except for mem acc type5 register.
|
|
- qcom,mem-acc-type6: Same as qcom,mem-acc-type1 except for mem acc type6 register.
|
|
- qcom,acc-reg-addr-list: Array of register addresses which need to be programmed during any corner switch.
|
|
This property can be used when multi register configuration is needed during a corner switch.
|
|
- qcom,acc-init-reg-config: Array of tuples specify the multi register configuration sequence need to be programmed
|
|
one time during device boot.
|
|
The format of each tuple as below:
|
|
<register-address-index, value>
|
|
Where register-address-index is used as an index in to qcom,acc-reg-addr-list property
|
|
to get the required register address and the value is programmed in to the corresponding
|
|
mapped register address. This property is required if qcom,acc-corner-addr-val-map
|
|
property specified.
|
|
- qcom,cornerX-reg-config: Array of tuples specify the multi register configuration sequence need to be programmed
|
|
when switching from acc corner X to any other corner. The possible values for X are {1, N},
|
|
where N is the value defined in qcom,num-acc-corners.
|
|
The format of each tuple as below:
|
|
<register-address-index, value>
|
|
Where register-address-index is used as an index in to qcom,acc-reg-addr-list property
|
|
to get the required register address and the value is programmed in to the corresponding
|
|
mapped register address. Same index can be used multiple times when the register is
|
|
required to configure multiple times with different values in the sequence.
|
|
The number of register configuration sequences should be equal to N, where N is the
|
|
value specified in qcom,num-acc-corners property. Also, the number of tuples in each
|
|
register configuration sequence should be same and must be equal to the maximum required
|
|
register configurations in any sequence. The invalid register configuration can be
|
|
specified as <(-1) (-1)>. This property can only be specified when qcom,acc-corner-addr-val-map
|
|
property already defined. Either this property or qcom,corner-acc-map should be specified.
|
|
- qcom,num-acc-corners: The number of acc corners supported. This property is required if qcom,cornerX-reg-config
|
|
property specified.
|
|
- qcom,boot-acc-corner: The acc corner used during device boot. This property is required if qcom,cornerX-reg-config
|
|
property specified.
|
|
- qcom,override-cornerX-reg-config: A grouping of register configuration sequence lists. Each list is same as
|
|
the qcom,cornerX-reg-config property. The possible values for X are {1, N} where N is
|
|
the value defined in qcom,num-acc-corners. This property is used to specify the different
|
|
register configuration sequence lists and select one list among them based on the selected
|
|
index in qcom,override-fuse-version-map property. The selected list overrides the existing
|
|
register configuration sequence list specified in "qcom,cornerX-reg-config". If the
|
|
"qcom,override-fuse-version-map" property is specified, then
|
|
"qcom,override-cornerX-reg-config" must contain the same number of register
|
|
configuration sequence lists as the number of tuples in "qcom,override-fuse-version-map".
|
|
These register configuration sequence lists are then mapped one-to-one
|
|
in the order specified. If the qcom,override-fuse-version-map property is
|
|
not specified, then "qcom,override-cornerX-reg-config" must contain a single
|
|
register configuration sequence list which is then applied unconditionally.
|
|
This property can only be specified if qcom,cornerX-reg-config property is already defined.
|
|
|
|
mem_acc_vreg_corner: regulator@fd4aa044 {
|
|
compatible = "qcom,mem-acc-regulator";
|
|
reg = <0xfd4aa048 0x1>, <0xfd4aa044 0x1>, <0xfd4af000 0x1>,
|
|
<0x58000 0x1000>, <0x01942124 0x4>, <0xf900d084 1>,
|
|
<0xf900d088 1>, <0xf900d08c 1>, <0xf900d090 1>;
|
|
reg-names = "acc-en", "acc-sel-l1" , "acc-sel-l2",
|
|
"efuse_addr", "acc-l2-custom", "mem-acc-type1",
|
|
"mem-acc-type2", "mem-acc-type3", "mem-acc-type4";
|
|
regulator-name = "mem_acc_corner";
|
|
regulator-min-microvolt = <1>;
|
|
regulator-max-microvolt = <3>;
|
|
|
|
qcom,acc-en-bit-pos = <0>;
|
|
qcom,acc-sel-l1-bit-pos = <0>;
|
|
qcom,acc-sel-l2-bit-pos = <0>;
|
|
qcom,acc-sel-l1-bit-size = <2>;
|
|
qcom,acc-sel-l2-bit-size = <2>;
|
|
qcom,corner-acc-map = <0 1 3>;
|
|
qcom,l2-acc-custom-data = <0x0 0x3000 0x3000>;
|
|
|
|
qcom,override-acc-fuse-sel = <0 52 2 0>;
|
|
qcom,override-fuse-version-map = <0>,
|
|
<2>,
|
|
<(-1)>;
|
|
qcom,override-corner-acc-map = <0 0 1>,
|
|
<0 1 2>,
|
|
<0 1 1>;
|
|
qcom,overide-l2-acc-custom-data = <0x0 0x0 0x3000>,
|
|
<0x0 0x3000 0x3000>,
|
|
<0x0 0x0 0x0>;
|
|
qcom,mem-acc-type1 = <0x02 0x02 0x00>;
|
|
qcom,mem-acc-type2 = <0x02 0x02 0x00>;
|
|
qcom,mem-acc-type3 = <0x02 0x02 0x00>;
|
|
qcom,mem-acc-type4 = <0x02 0x02 0x00>;
|
|
|
|
qcom,acc-reg-addr-list = <0x01942130 0x01942124 0x01942120>;
|
|
qcom,acc-init-reg-config = <1 0x55> <2 0x02>;
|
|
|
|
qcom,num-acc-corners = <3>;
|
|
qcom,boot-acc-corner = <2>;
|
|
qcom,corner1-reg-config =
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 1 -> 1 */
|
|
< 1 0x155>, < 2 0x0>, < 3 0x155>, /* 1 -> 2 */
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>; /* 1 -> 3 */
|
|
|
|
qcom,corner2-reg-config =
|
|
< 1 0x155>, <(-1) (-1)>, <(-1) (-1)>, /* 2 -> 1 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 2 -> 2 */
|
|
< 1 0x155>, < 2 0x0>, < 3 0x155>; /* 2 -> 3 */
|
|
|
|
qcom,corner3-reg-config =
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>, /* 3 -> 1 */
|
|
< 1 0x155>, <(-1) (-1)>, <(-1) (-1)>, /* 3 -> 2 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>; /* 3 -> 3 */
|
|
|
|
qcom,override-corner1-reg-config =
|
|
/* 1st fuse version tuple matched */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 1 -> 1 */
|
|
< 1 0x155>, < 2 0x0>, < 3 0x155>, /* 1 -> 2 */
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>, /* 1 -> 3 */
|
|
|
|
/* 2nd fuse version tuple matched */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 1 -> 1 */
|
|
< 1 0x155>, < 2 0x0>, < 3 0x155>, /* 1 -> 2 */
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>, /* 1 -> 3 */
|
|
|
|
/* 3rd fuse version tuple matched */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 1 -> 1 */
|
|
< 1 0x155>, < 3 0x22>, < 3 0x155>, /* 1 -> 2 */
|
|
< 1 0x0>, < 2 0x155>, < 3 0x144>; /* 1 -> 3 */
|
|
|
|
qcom,override-corner2-reg-config =
|
|
/* 1st fuse version tuple matched */
|
|
< 1 0x144>, < 1 0x11>, <(-1) (-1)>, /* 2 -> 1 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 2 -> 2 */
|
|
< 1 0x155>, < 2 0x0>, < 3 0x155>, /* 2 -> 3 */
|
|
|
|
/* 2nd fuse version tuple matched */
|
|
< 1 0x144>, < 2 0x133>, <(-1) (-1)>, /* 2 -> 1 */
|
|
<(-1) (-1)>, < 1 0x33>, <(-1) (-1)>, /* 2 -> 2 */
|
|
< 1 0x133>, < 2 0x0>, < 3 0x155>, /* 2 -> 3 */
|
|
|
|
/* 3rd fuse version tuple matched */
|
|
< 1 0x144>, < 1 0x11>, <(-1) (-1)>, /* 2 -> 1 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 2 -> 2 */
|
|
< 1 0x155>, < 2 0x22>, < 3 0x155>; /* 2 -> 3 */
|
|
|
|
|
|
qcom,override-corner3-reg-config =
|
|
/* 1st fuse version tuple matched */
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>, /* 3 -> 1 */
|
|
< 1 0x155>, <(-1) (-1)>, <(-1) (-1)>, /* 3 -> 2 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 3 -> 3 */
|
|
|
|
/* 2nd fuse version tuple matched */
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>, /* 3 -> 1 */
|
|
< 1 0x155>, <(-1) (-1)>, <(-1) (-1)>, /* 3 -> 2 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>, /* 3 -> 3 */
|
|
|
|
/* 3rd fuse version tuple matched */
|
|
< 1 0x0>, < 2 0x155>, <(-1) (-1)>, /* 3 -> 1 */
|
|
< 1 0x155>, < 3 0x11>, <(-1) (-1)>, /* 3 -> 2 */
|
|
<(-1) (-1)>, <(-1) (-1)>, <(-1) (-1)>; /* 3 -> 3 */
|
|
};
|