| # SPDX-License-Identifier: GPL-2.0 |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/interconnect/samsung,exynos-bus.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Samsung Exynos SoC Bus and Interconnect |
| |
| maintainers: |
| - Chanwoo Choi <cw00.choi@samsung.com> |
| - Krzysztof Kozlowski <krzk@kernel.org> |
| |
| description: | |
| The Samsung Exynos SoC has many buses for data transfer between DRAM and |
| sub-blocks in SoC. Most Exynos SoCs share the common architecture for buses. |
| Generally, each bus of Exynos SoC includes a source clock and a power line, |
| which are able to change the clock frequency of the bus in runtime. To |
| monitor the usage of each bus in runtime, the driver uses the PPMU (Platform |
| Performance Monitoring Unit), which is able to measure the current load of |
| sub-blocks. |
| |
| The Exynos SoC includes the various sub-blocks which have the each AXI bus. |
| The each AXI bus has the owned source clock but, has not the only owned power |
| line. The power line might be shared among one more sub-blocks. So, we can |
| divide into two type of device as the role of each sub-block. There are two |
| type of bus devices as following:: |
| - parent bus device |
| - passive bus device |
| |
| Basically, parent and passive bus device share the same power line. The |
| parent bus device can only change the voltage of shared power line and the |
| rest bus devices (passive bus device) depend on the decision of the parent |
| bus device. If there are three blocks which share the VDD_xxx power line, |
| Only one block should be parent device and then the rest blocks should depend |
| on the parent device as passive device. |
| |
| VDD_xxx |--- A block (parent) |
| |--- B block (passive) |
| |--- C block (passive) |
| |
| There are a little different composition among Exynos SoC because each Exynos |
| SoC has different sub-blocks. Therefore, such difference should be specified |
| in devicetree file instead of each device driver. In result, this driver is |
| able to support the bus frequency for all Exynos SoCs. |
| |
| Detailed correlation between sub-blocks and power line according |
| to Exynos SoC:: |
| - In case of Exynos3250, there are two power line as following:: |
| VDD_MIF |--- DMC (Dynamic Memory Controller) |
| |
| VDD_INT |--- LEFTBUS (parent device) |
| |--- PERIL |
| |--- MFC |
| |--- G3D |
| |--- RIGHTBUS |
| |--- PERIR |
| |--- FSYS |
| |--- LCD0 |
| |--- PERIR |
| |--- ISP |
| |--- CAM |
| |
| - MIF bus's frequency/voltage table |
| ----------------------- |
| |Lv| Freq | Voltage | |
| ----------------------- |
| |L1| 50000 |800000 | |
| |L2| 100000 |800000 | |
| |L3| 134000 |800000 | |
| |L4| 200000 |825000 | |
| |L5| 400000 |875000 | |
| ----------------------- |
| |
| - INT bus's frequency/voltage table |
| ---------------------------------------------------------- |
| |Block|LEFTBUS|RIGHTBUS|MCUISP |ISP |PERIL ||VDD_INT | |
| | name| |LCD0 | | | || | |
| | | |FSYS | | | || | |
| | | |MFC | | | || | |
| ---------------------------------------------------------- |
| |Mode |*parent|passive |passive|passive|passive|| | |
| ---------------------------------------------------------- |
| |Lv |Frequency ||Voltage | |
| ---------------------------------------------------------- |
| |L1 |50000 |50000 |50000 |50000 |50000 ||900000 | |
| |L2 |80000 |80000 |80000 |80000 |80000 ||900000 | |
| |L3 |100000 |100000 |100000 |100000 |100000 ||1000000 | |
| |L4 |134000 |134000 |200000 |200000 | ||1000000 | |
| |L5 |200000 |200000 |400000 |300000 | ||1000000 | |
| ---------------------------------------------------------- |
| |
| - In case of Exynos4210, there is one power line as following:: |
| VDD_INT |--- DMC (parent device, Dynamic Memory Controller) |
| |--- LEFTBUS |
| |--- PERIL |
| |--- MFC(L) |
| |--- G3D |
| |--- TV |
| |--- LCD0 |
| |--- RIGHTBUS |
| |--- PERIR |
| |--- MFC(R) |
| |--- CAM |
| |--- FSYS |
| |--- GPS |
| |--- LCD0 |
| |--- LCD1 |
| |
| - In case of Exynos4x12, there are two power line as following:: |
| VDD_MIF |--- DMC (Dynamic Memory Controller) |
| |
| VDD_INT |--- LEFTBUS (parent device) |
| |--- PERIL |
| |--- MFC(L) |
| |--- G3D |
| |--- TV |
| |--- IMAGE |
| |--- RIGHTBUS |
| |--- PERIR |
| |--- MFC(R) |
| |--- CAM |
| |--- FSYS |
| |--- GPS |
| |--- LCD0 |
| |--- ISP |
| |
| - In case of Exynos5422, there are two power line as following:: |
| VDD_MIF |--- DREX 0 (parent device, DRAM EXpress controller) |
| |--- DREX 1 |
| |
| VDD_INT |--- NoC_Core (parent device) |
| |--- G2D |
| |--- G3D |
| |--- DISP1 |
| |--- NoC_WCORE |
| |--- GSCL |
| |--- MSCL |
| |--- ISP |
| |--- MFC |
| |--- GEN |
| |--- PERIS |
| |--- PERIC |
| |--- FSYS |
| |--- FSYS2 |
| |
| - In case of Exynos5433, there is VDD_INT power line as following:: |
| VDD_INT |--- G2D (parent device) |
| |--- MSCL |
| |--- GSCL |
| |--- JPEG |
| |--- MFC |
| |--- HEVC |
| |--- BUS0 |
| |--- BUS1 |
| |--- BUS2 |
| |--- PERIS (Fixed clock rate) |
| |--- PERIC (Fixed clock rate) |
| |--- FSYS (Fixed clock rate) |
| |
| properties: |
| compatible: |
| enum: |
| - samsung,exynos-bus |
| |
| clocks: |
| maxItems: 1 |
| |
| clock-names: |
| items: |
| - const: bus |
| |
| devfreq: |
| $ref: /schemas/types.yaml#/definitions/phandle |
| description: |
| Parent bus device. Valid and required only for the passive bus devices. |
| |
| devfreq-events: |
| $ref: /schemas/types.yaml#/definitions/phandle-array |
| minItems: 1 |
| maxItems: 4 |
| description: |
| Devfreq-event device to monitor the current utilization of buses. Valid |
| and required only for the parent bus devices. |
| |
| exynos,saturation-ratio: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| description: |
| Percentage value which is used to calibrate the performance count against |
| total cycle count. Valid only for the parent bus devices. |
| |
| '#interconnect-cells': |
| const: 0 |
| |
| interconnects: |
| minItems: 1 |
| maxItems: 2 |
| |
| operating-points-v2: true |
| opp-table: |
| type: object |
| |
| samsung,data-clock-ratio: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| default: 8 |
| description: |
| Ratio of the data throughput in B/s to minimum data clock frequency in |
| Hz. |
| |
| vdd-supply: |
| description: |
| Main bus power rail. Valid and required only for the parent bus devices. |
| |
| required: |
| - compatible |
| - clocks |
| - clock-names |
| - operating-points-v2 |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/clock/exynos3250.h> |
| |
| bus-dmc { |
| compatible = "samsung,exynos-bus"; |
| clocks = <&cmu_dmc CLK_DIV_DMC>; |
| clock-names = "bus"; |
| operating-points-v2 = <&bus_dmc_opp_table>; |
| devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>; |
| vdd-supply = <&buck1_reg>; |
| |
| bus_dmc_opp_table: opp-table { |
| compatible = "operating-points-v2"; |
| |
| opp-50000000 { |
| opp-hz = /bits/ 64 <50000000>; |
| opp-microvolt = <800000>; |
| }; |
| opp-100000000 { |
| opp-hz = /bits/ 64 <100000000>; |
| opp-microvolt = <800000>; |
| }; |
| opp-134000000 { |
| opp-hz = /bits/ 64 <134000000>; |
| opp-microvolt = <800000>; |
| }; |
| opp-200000000 { |
| opp-hz = /bits/ 64 <200000000>; |
| opp-microvolt = <825000>; |
| }; |
| opp-400000000 { |
| opp-hz = /bits/ 64 <400000000>; |
| opp-microvolt = <875000>; |
| }; |
| }; |
| }; |
| |
| ppmu_dmc0: ppmu@106a0000 { |
| compatible = "samsung,exynos-ppmu"; |
| reg = <0x106a0000 0x2000>; |
| events { |
| ppmu_dmc0_3: ppmu-event3-dmc0 { |
| event-name = "ppmu-event3-dmc0"; |
| }; |
| }; |
| }; |
| |
| bus_leftbus: bus-leftbus { |
| compatible = "samsung,exynos-bus"; |
| clocks = <&cmu CLK_DIV_GDL>; |
| clock-names = "bus"; |
| operating-points-v2 = <&bus_leftbus_opp_table>; |
| devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>; |
| vdd-supply = <&buck3_reg>; |
| }; |
| |
| bus-rightbus { |
| compatible = "samsung,exynos-bus"; |
| clocks = <&cmu CLK_DIV_GDR>; |
| clock-names = "bus"; |
| operating-points-v2 = <&bus_leftbus_opp_table>; |
| devfreq = <&bus_leftbus>; |
| }; |
| |
| - | |
| dmc: bus-dmc { |
| compatible = "samsung,exynos-bus"; |
| clocks = <&clock CLK_DIV_DMC>; |
| clock-names = "bus"; |
| operating-points-v2 = <&bus_dmc_opp_table>; |
| samsung,data-clock-ratio = <4>; |
| #interconnect-cells = <0>; |
| devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>; |
| vdd-supply = <&buck1_reg>; |
| }; |
| |
| leftbus: bus-leftbus { |
| compatible = "samsung,exynos-bus"; |
| clocks = <&clock CLK_DIV_GDL>; |
| clock-names = "bus"; |
| operating-points-v2 = <&bus_leftbus_opp_table>; |
| interconnects = <&dmc>; |
| #interconnect-cells = <0>; |
| devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>; |
| vdd-supply = <&buck3_reg>; |
| }; |
| |
| display: bus-display { |
| compatible = "samsung,exynos-bus"; |
| clocks = <&clock CLK_DIV_ACLK_266>; |
| clock-names = "bus"; |
| operating-points-v2 = <&bus_display_opp_table>; |
| interconnects = <&leftbus &dmc>; |
| #interconnect-cells = <0>; |
| devfreq = <&leftbus>; |
| }; |