diff --git a/qcom/graphics/Kbuild b/qcom/graphics/Kbuild new file mode 100644 index 00000000..65408a75 --- /dev/null +++ b/qcom/graphics/Kbuild @@ -0,0 +1,29 @@ +ifeq ($(CONFIG_ARCH_WAIPIO), y) +dtbo-y += gpu/waipio-gpu.dtbo \ + gpu/waipio-v2-gpu.dtbo +endif + +ifeq ($(CONFIG_ARCH_KALAMA), y) +dtbo-y += gpu/kalama-gpu.dtbo \ + gpu/kalama-v2-gpu.dtbo \ + gpu/kalamap-hhg-gpu.dtbo +endif + +ifeq ($(CONFIG_ARCH_SA8155), y) +dtbo-y += gpu/sa8155-v2-gpu.dtbo +endif + +ifeq ($(CONFIG_ARCH_KHAJE), y) +dtbo-y += gpu/khaje-gpu.dtbo \ + gpu/khajep-gpu.dtbo \ + gpu/khajeq-gpu.dtbo \ + gpu/khajeg-gpu.dtbo +endif + +ifeq ($(CONFIG_ARCH_SA8195), y) +dtbo-y += gpu/sa8195p-gpu.dtbo +endif + +always-y := $(dtb-y) $(dtbo-y) +subdir-y := $(dts-dirs) +clean-files := *.dtb *.dtbo diff --git a/qcom/graphics/Makefile b/qcom/graphics/Makefile new file mode 100644 index 00000000..b1e0dfe9 --- /dev/null +++ b/qcom/graphics/Makefile @@ -0,0 +1,9 @@ +KBUILD_OPTIONS+=KBUILD_EXTMOD_DTS=. + +all: dtbs + +clean: + $(MAKE) -C $(KERNEL_SRC) M=$(M) clean + +%: + $(MAKE) -C $(KERNEL_SRC) M=$(M) $@ $(KBUILD_OPTIONS) diff --git a/qcom/graphics/bindings/adreno-busmon.txt b/qcom/graphics/bindings/adreno-busmon.txt new file mode 100644 index 00000000..b4d0757e --- /dev/null +++ b/qcom/graphics/bindings/adreno-busmon.txt @@ -0,0 +1,16 @@ +Adreno bus monitor device + +kgsl-busmon is a pseudo device that represents a devfreq bus bandwidth +governor. If this device is present then two different governors are used +for GPU DCVS and bus DCVS. + +Required properties: +- compatible: Must be "qcom,kgsl-busmon" +- label: Device name used for sysfs entry. + +Example: + +qcom,kgsl-busmon { + compatible = "qcom,kgsl-busmon"; + label = "kgsl-busmon"; +}; diff --git a/qcom/graphics/bindings/adreno-gmu.txt b/qcom/graphics/bindings/adreno-gmu.txt new file mode 100644 index 00000000..a5544793 --- /dev/null +++ b/qcom/graphics/bindings/adreno-gmu.txt @@ -0,0 +1,115 @@ +Qualcomm Technologies, Inc. GPU Graphics Management Unit (GMU) + +Required properties: +- compatible : + - "qcom,gpu-gmu" + - "qcom,gpu-gmu-hwsched" + - "qcom,gpu-rgmu" + - "qcom,gen7-gmu" + - "qcom,gen7-gmu-hwsched" +- reg: Specifies the GMU register base address and size. +- reg-names: Resource names used for the physical address + and length of GMU registers. +- interrupts: Interrupt mapping for GMU and HFI IRQs. +- interrupt-names: String property to describe the name of each interrupt. + +Bus Scaling Data: +qcom,msm-bus,name: String property to describe the name of bus client. +qcom,msm-bus,num-cases: This is the the number of Bus Scaling use cases defined in the vectors property. +qcom,msm-bus,num-paths: This represents the number of paths in each Bus Scaling Usecase. +qcom,msm-bus,vectors-KBps: A series of 4 cell properties, format of which is: + , , // For Bus Scaling Usecase 1 + , , // For Bus Scaling Usecase 2 + <.. .. .. ..>, <.. .. .. ..>; // For Bus Scaling Usecase n + This property is a series of all vectors for all Bus Scaling Usecases. + Each set of vectors for each usecase describes bandwidth votes for a combination + of src/dst ports. The driver will set the desired use case based on the selected + power level and the desired bandwidth vote will be registered for the port pairs. + +GMU GDSC/regulators: +- regulator-names: List of regulator name strings +- vddcx-supply: Phandle for vddcx regulator device node. +- vdd-supply: Phandle for vdd regulator device node. + +- clock: List of clocks to be used for GMU register access and DCVS. See + Documentation/devicetree/bindings/clock/clock-bindings.txt + for information about the format. For each clock specified + here, there must be a corresponding entry in clock-names + (see below). + +- clock-names: List of clock names corresponding to the clocks specified in + the "clocks" property (above). See + Documentation/devicetree/bindings/clock/clock-bindings.txt + for more info. Currently GMU required these clock names: + "gmu_clk", "ahb_clk", "cxo_clk", "axi_clk", "memnoc_clk", + "rbcpr_clk" + +- qcom,gmu-freq-table: List of frequencies the GMU clock can run at with their corresponding + voltage levels. + +- List of sub nodes, one for each of the translation context banks needed + for GMU to access system memory in different operating mode. Currently + supported names are: + - gmu_user: used for GMU 'user' mode address space. + - gmu_kernel: used for GMU 'kernel' mode address space. + Each sub node has the following required properties: + + - compatible : "qcom,smmu-gmu-user-cb" or "qcom,smmu-gmu-kernel-cb" + - iommus : Specifies the SID's used by this context bank, this + needs to be pair, kgsl_smmu is the string + parsed by iommu driver to match this context bank with the + kgsl_smmu device defined in iommu device tree. On targets + where the msm iommu driver is used rather than the arm smmu + driver, this property may be absent. + +- qcom,ipc-core: + baseAddr - base address of the IPC region + size - size of the IPC region + + +Example: + +gmu: qcom,gmu@2c6a000 { + label = "kgsl-gmu"; + compatible = "qcom,gpu-gmu"; + + reg = <0x2c6a000 0x30000>; + reg-names = "kgsl_gmu_reg"; + + interrupts = <0 304 0>, <0 305 0>; + interrupt-names = "kgsl_gmu_irq", "kgsl_hfi_irq"; + + qcom,msm-bus,name = "cnoc"; + qcom,msm-bus,num-cases = <2>; + qcom,msm-bus,num-paths = <1>; + qcom,msm-bus,vectors-KBps = + <26 10036 0 0>, // CNOC off + <26 10036 0 100>; // CNOC on + + regulator-name = "vddcx", "vdd"; + vddcx-supply = <&gpu_cx_gdsc>; + vdd-supply = <&gpu_gx_gdsc>; + + clocks = <&clock_gpugcc clk_gcc_gmu_clk>, + <&clock_gcc GCC_GPU_CFG_AHB_CLK>, + <&clock_gpucc GPU_CC_CXO_CLK>, + <&clock_gcc GCC_DDRSS_GPU_AXI_CLK>, + <&clock_gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&clock_gpucc GPU_CC_RBCPR_CLK>; + + clock-names = "gmu_clk", "ahb_clk", "cxo_clk", + "axi_clk", "memnoc_clk", "rbcpr_clk"; + + qcom,gmu-freq-table = <200000000 RPMH_REGULATOR_LEVEL_LOW_SVS>, + <500000000 RPMH_REGULATOR_LEVEL_SVS>; + + gmu_user: gmu_user { + compatible = "qcom,smmu-gmu-user-cb"; + iommus = <&kgsl_smmu 4>; + }; + + gmu_kernel: gmu_kernel { + compatible = "qcom,smmu-gmu-kernel-cb"; + iommus = <&kgsl_smmu 5>; + }; +}; diff --git a/qcom/graphics/bindings/adreno-iommu.txt b/qcom/graphics/bindings/adreno-iommu.txt new file mode 100644 index 00000000..fef7515c --- /dev/null +++ b/qcom/graphics/bindings/adreno-iommu.txt @@ -0,0 +1,81 @@ +Qualcomm Technologies, Inc. GPU IOMMU + +Required properties: + +Required properties: +- compatible : one of: + - "qcom,kgsl-smmu-v1" + - "qcom,kgsl-smmu-v2" + +- reg : Base address and size of the SMMU. + +- clocks : List of clocks to be used during SMMU register access. See + Documentation/devicetree/bindings/clock/clock-bindings.txt + for information about the format. For each clock specified + here, there must be a corresponding entry in clock-names + (see below). + +- clock-names : List of clock names corresponding to the clocks specified in + the "clocks" property (above). See + Documentation/devicetree/bindings/clock/clock-bindings.txt + for more info. +- qcom,protect : The GPU register region which must be protected by a CP + protected mode. On some targets this region must cover + the entire SMMU register space, on others there + is a separate aperture for CP to program context banks. + +Optional properties: +- qcom,retention : A boolean specifying if retention is supported on this target +- qcom,global_pt : A boolean specifying if global pagetable should be used. + When not set we use per process pagetables +- qcom,hyp_secure_alloc : A bool specifying if the hypervisor is used on this target + for secure buffer allocation + +- List of sub nodes, one for each of the translation context banks supported. + The driver uses the names of these nodes to determine how they are used, + currently supported names are: + - gfx3d_user : Used for the 'normal' GPU address space. + - gfx3d_secure : Used for the content protection address space. + - gfx3d_secure_alt : Used for the content protection address space for alternative SID. + + Each sub node has the following required properties: + + - compatible : "qcom,smmu-kgsl-cb" + - iommus : Specifies the SID's used by this context bank, this needs to be + pair, kgsl_smmu is the string parsed by iommu + driver to match this context bank with the kgsl_smmu device + defined in iommu device tree. On targets where the msm iommu + driver is used rather than the arm smmu driver, this property + may be absent. + +Example: + +msm_iommu: qcom,kgsl-iommu@2ca0000 { + compatible = "qcom,kgsl-smmu-v2"; + reg = <0x2ca0000 0x10000>; + qcom,protect = <0xa0000 0xc000>; + clocks = <&clock_mmss clk_gpu_ahb_clk>, + <&clock_gcc clk_gcc_mmss_bimc_gfx_clk>, + <&clock_mmss clk_mmss_mmagic_ahb_clk>, + <&clock_mmss clk_mmss_mmagic_cfg_ahb_clk>; + clock-names = "gpu_ahb_clk", "bimc_gfx_clk", "mmagic_ahb_clk", "mmagic_cfg_ahb_clk"; + qcom,secure_align_mask = <0xfff>; + qcom,retention; + qcom,global_pt; + + gfx3d_user: gfx3d_user { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0>, + <&kgsl_smmu 1>; + }; + + gfx3d_secure: gfx3d_secure { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 2>; + }; + + gfx3d_secure_alt: gfx3d_secure_alt { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 2>, <&kgsl_smmu 1>; + }; +}; diff --git a/qcom/graphics/bindings/adreno-pwrlevels.txt b/qcom/graphics/bindings/adreno-pwrlevels.txt new file mode 100644 index 00000000..43175535 --- /dev/null +++ b/qcom/graphics/bindings/adreno-pwrlevels.txt @@ -0,0 +1,94 @@ +Qualcomm Technologies, Inc. GPU powerlevels + +Powerlevels are defined in sets by qcom,gpu-pwrlevels. Multiple sets (bins) +can be defined within qcom,gpu-pwrelvel-bins. Each powerlevel defines a +voltage, bus, bandwidth level, and a DVM value. + +- qcom,gpu-pwrlevel-bins: Contains one or more qcom,gpu-pwrlevels sets + +Properties: +- compatible: Must be qcom,gpu-pwrlevel-bins +- qcom,gpu-pwrlevels: Defines a set of powerlevels + +Properties: +- qcom,speed-bin: Speed bin identifier for the set - if present + must match the value read from the hardware + +- qcom,sku-codes: List of SKU versions specified by P-Code and + Feature Code that can support this set of + powerlevels. An entry of 0 in this list matches + any SKU and can be used as a fallback if other + powerlevel sets are not matched + +- qcom,initial-pwrlevel: GPU wakeup powerlevel +- qcom,initial-min-pwrlevel: Initial minimum available GPU powerlevel + +- qcom,gpu-pwrlevel: A single powerlevel + +- qcom,ca-target-pwrlevel: + This value indicates which qcom,gpu-pwrlevel + to jump on in case of context aware power level + jump. +Required Properties: +- reg: Index of the powerlevel (0 = highest perf) +- qcom,gpu-freq GPU frequency for the powerlevel (in Hz) +- qcom,bus-freq Index to a bus level (defined by the bus + settings). + +- qcom,bus-freq-ddrX If specified, define the DDR specific bus + frequency for the power level. X will be the + return value from of_fdt_get_ddrtype(). + +Optional Properties: +- qcom,bus-min Minimum bus level to set for the power level + +- qcom,bus-min-ddrX If specified, define the DDR specific minimum + bus level for the power level. X will be the + return value from of_fdt_get_ddrtype(). + +- qcom,bus-max maximum bus level to set for the power level + +- qcom,bus-max-ddrX If specified, define the DDR specific maximum + bus level for the power level. X will be the + return value from of_fdt_get_ddrtype(). + +- qcom,acd-level: Value that is used as a register setting for + the ACD power feature. It helps to determine + the threshold for when ACD activates. Zero is + the default value, and the setting where ACD + will never activate. + +- qcom,cx-level: Specifies the CX vote required for each GPU power + level. + +Example: + +qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,acd-level = <0xffffffff>; + qcom,cx-level = ; +}; + +Example for DDR4/DDR5 specific part: + +qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <480000000>; + qcom,cx-level = ; + + /* DDR5 */ + qcom,bus-freq-ddr8 = <10>; + qcom,bus-min-ddr8 = <9>; + qcom,bus-max-ddr8 = <11>; + + /* DDR 4 */ + qcom,bus-freq-ddr7 = <9>; + qcom,bus-min-ddr7 = <7>; + qcom,bus-max-ddr7 = <9>; + + qcom,acd-level = <0xffffffff>; +}; diff --git a/qcom/graphics/bindings/adreno.txt b/qcom/graphics/bindings/adreno.txt new file mode 100644 index 00000000..5c50499a --- /dev/null +++ b/qcom/graphics/bindings/adreno.txt @@ -0,0 +1,528 @@ +Qualcomm Technologies, Inc. GPU + +Qualcomm Technologies, Inc. Adreno GPU + +Required properties: +- compatible: Must be "qcom,kgsl-3d0". + May also includes "qcom,adreno-gpu-*" for few targets. + Must include "qcom,adreno-gpu-a619-holi" for Holi target. + Must include "qcom,adreno-gpu-a621" for Neo target. + Must include "qcom,adreno-gpu-a660-shima" for Shima target. + Must include "qcom,adreno-gpu-gen7-0-0" for Waipio target. + Must include "qcom,adreno-gpu-gen7-0-1" for Waipio V2 target. + Must include "qcom,adreno-gpu-gen7-2-0" for Kalama target. + Must include "qcom,adreno-gpu-gen7-2-1" for Kalama V2 target. + Must include "qcom,adreno-gpu-gen7-4-0" for Cape target. + Must include "qcom,adreno-gpu-gen7-3-0" for Parrot target. + Must include "qcom,adreno-gpu-gen7-9-0" for Pineapple target. + Must include "qcom,adreno-gpu-gen7-9-1" for Pineapple V2 target. +- reg: Specifies the list of register regions for the device. +- reg-names: Resource names used for the register regions specified + in reg. +- interrupts: Interrupt mapping for GPU nterrupts. +- interrupt-names: String property to describe the names of the interrupts. +- qcom,gpu-bimc-interface-clk-freq: + GPU-BIMC interface clock needs to set to this value for + targets where B/W requirements does not meet GPU Turbo + use cases. +- clocks: List of phandle and clock specifier pairs, one pair + for each clock input to the device. +- clock-names: List of clock input name strings sorted in the same + order as the clocks property. + +- qcom,base-leakage-coefficient: Dynamic leakage coefficient. +- qcom,lm-limit: Current limit for GPU limit management. +- qcom,isense-clk-on-level: below or equal this power level isense clock is at XO rate, + above this powerlevel isense clock is at working frequency. + +Bus Scaling Data: +- qcom,gpu-bus-table: Defines a bus voting table with the below properties. Multiple sets of bus + voting tables can be defined for given platform based on the type of ddr system. + +Properties: +- compatible: Must be "qcom,gpu-bus-table". Additionally, "qcom,gpu-bus-table-ddr" must also + be provided, with the ddr type value(integer) appended to the string. +- qcom,msm-bus,name: String property to describe the name of the 3D graphics processor. +- qcom,msm-bus,num-cases: This is the the number of Bus Scaling use cases defined in the vectors property. +- qcom,msm-bus,active-only: A boolean flag indicating if it is active only. +- qcom,msm-bus,num-paths: This represents the number of paths in each Bus Scaling Usecase. +- qcom,msm-bus,vectors-KBps: A series of 4 cell properties, format of which is: + , , // For Bus Scaling Usecase 1 + , , // For Bus Scaling Usecase 2 + <.. .. .. ..>, <.. .. .. ..>; // For Bus Scaling Usecase n + This property is a series of all vectors for all Bus Scaling Usecases. + Each set of vectors for each usecase describes bandwidth votes for a combination + of src/dst ports. The driver will set the desired use case based on the selected + power level and the desired bandwidth vote will be registered for the port pairs. + Current values of src are: + 0 = MSM_BUS_MASTER_GRAPHICS_3D + 1 = MSM_BUS_MASTER_GRAPHICS_3D_PORT1 + 2 = MSM_BUS_MASTER_V_OCMEM_GFX3D + Current values of dst are: + 0 = MSM_BUS_SLAVE_EBI_CH0 + 1 = MSM_BUS_SLAVE_OCMEM + ab: Represents aggregated bandwidth. This value is 0 for Graphics. + ib: Represents instantaneous bandwidth. This value has a range <0 8000 MB/s> + +- qcom,ocmem-bus-client: Container for another set of bus scaling properties + qcom,msm-bus,name + qcom,msm-bus,num-cases + qcom,msm-bus,num-paths + qcom,msm-bus,vectors-KBps + to be used by ocmem msm bus scaling client. + +GDSC Oxili Regulators: +- regulator-names: List of regulator name strings sorted in power-on order +- vddcx-supply: Phandle for vddcx regulator device node. +- vdd-supply: Phandle for vdd regulator device node. + +IOMMU Data: +- iommu: Phandle for the KGSL IOMMU device node + +GPU Power levels: +- qcom,gpu-pwrlevel-bins: Container for sets of GPU power levels (see + adreno-pwrlevels.txt) +DCVS Core info +- qcom,dcvs-core-info Container for the DCVS core info (see + dcvs-core-info.txt) + +Optional Properties: +- qcom,initial-powerlevel: This value indicates which qcom,gpu-pwrlevel should be used at start time + and when coming back out of resume +- qcom,throttle-pwrlevel: This value indicates which qcom,gpu-pwrlevel LM throttling + may start to occur +- qcom,bus-control: Boolean. Enables an independent bus vote from the gpu frequency +- qcom,bus-width: Bus width in number of bytes. This enables dynamic AB bus voting based on + bus width and actual bus transactions. +- qcom,bus-accesses: Parameter for tuning bus dcvs. +- qcom,bus-accesses-ddrX: Parameter for tuning bus dcvs for each DDR configuration where + X will be the return value from of_fdt_get_ddrtype(). +- qcom,gpubw-dev: a phandle to a device representing bus bandwidth requirements + (see devdw.txt) +- qcom,idle-timeout: This property represents the time in milliseconds for idle timeout. +- qcom,no-nap: If it exists software clockgating will be disabled at boot time. +- qcom,chipid: If it exists this property is used to replace + the chip identification read from the GPU hardware. + This is used to override faulty hardware readings. +- qcom,gpu-model: If it exists this property is used for GPU model name. +- qcom,vk-device-id: If it exists this property is used to specify vulkan device ID. +- qcom,disable-wake-on-touch: Boolean. Disables the GPU power up on a touch input event. +- qcom,disable-busy-time-burst: + Boolean. Disables the busy time burst to avoid switching + of power level for large frames based on the busy time limit. + +- qcom,pm-qos-active-latency: + Right after GPU wakes up from sleep, driver votes for + acceptable maximum latency to the pm-qos driver. This + voting demands that the system can not go into any + power save state *if* the latency to bring system back + into active state is more than this value. + Value is in microseconds. +- qcom,pm-qos-wakeup-latency: + Similar to the above. Driver votes against deep low + power modes right before GPU wakes up from sleep. +- qcom,l2pc-cpu-mask-latency: + The CPU mask latency in microseconds to avoid L2PC + on masked CPUs. + +- qcom,gpu-cx-ipeak: + CX Ipeak is a mitigation scheme which throttles cDSP frequency + if all the clients are running at their respective threshold + frequencies to limit CX peak current. + + phandle - phandle of CX Ipeak device node + bit - Every bit corresponds to a client of CX Ipeak + driver in the relevant register. +- qcom, gpu-cx-ipeak-freq: + GPU frequency threshold for CX Ipeak voting. GPU votes + to CX Ipeak driver when GPU clock crosses this threshold. + CX Ipeak can limit peak current based on voting from other clients. + +- qcom,force-32bit: + Force the GPU to use 32 bit data sizes even if + it is capable of doing 64 bit. + +- qcom,gpu-speed-bin: GPU speed bin information in the format + + offset - offset of the efuse register from the base. + mask - mask for the relevant bits in the efuse register. + shift - number of bits to right shift to get the speed bin + value. +- qcom,gpu-disable-fuse: GPU disable fuse + + offset - offset of the efuse register from the base. + mask - mask for the relevant bits in the efuse register. + shift - number of bits to right shift to get the disable_gpu + fuse bit value. + +- qcom,soc-hw-rev-efuse: SOC hardware revision fuse information in the format + + offset - offset of the efuse register from the base. + bit_position - hardware revision starting bit in the efuse register. + mask - mask for the relevant bits in the efuse register. + +- qcom,highest-bank-bit: + Specify the bit of the highest DDR bank. This + is programmed into protected registers and also + passed to the user as a property. +- qcom,min-access-length: + Specify the minimum access length for the chip. + Either 32 or 64 bytes. + Based on the above options, program the appropriate bit into + certain protected registers and also pass to the user as + a property. +- qcom,ubwc-mode: + Specify the ubwc mode for this chip. + 1: UBWC 1.0 + 2: UBWC 2.0 + 3: UBWC 3.0 + Based on the ubwc mode, program the appropriate bit into + certain protected registers and also pass to the user as + a property. +- qcom,l2pc-cpu-mask: + Disables L2PC on masked CPUto the string.rendering thread is running on masked CPUs. + Bit 0 is for CPU-0, bit 1 is for CPU-1... + +- qcom,l2pc-update-queue: + Disables L2PC on masked CPUs at queue time when it's true. + +- qcom,snapshot-size: + Specify the size of snapshot in bytes. This will override + snapshot size defined in the driver code. + +- qcom,enable-ca-jump: + Boolean. Enables use of context aware DCVS +- qcom,ca-busy-penalty: + This property represents the time in microseconds required to + initiate context aware power level jump. +- qcom,ca-target-pwrlevel: + This value indicates which qcom,gpu-pwrlevel to jump on in case + of context aware power level jump. + +- qcom,gpu-qdss-stm: + + baseAddr - base address of the gpu channels in the qdss stm memory region + size - size of the gpu stm region + +- qcom,gpu-timer: + + baseAddr - base address of the qtimer memory region + size - size of the qtimer region + +- qcom,tzone-names: + Specify the names of GPU thermal zones. These will be used + to get gpu temperature from the thermal driver API. + + nvmem-cells: + A phandle to the configuration data such as gpu speed bin, gpu gaming mode, + gpu model name provided by a nvmem device. If unspecified default values shall be used. + nvmem-cell-names: + Should be "speed_bin", "gaming_bin", "gpu_model" + +GPU Quirks: +- qcom,gpu-quirk-two-pass-use-wfi: + Signal the GPU to set Set TWOPASSUSEWFI bit in + PC_DBG_ECO_CNTL (5XX and 6XX only) +- qcom,gpu-quirk-critical-packets: + Submit a set of critical PM4 packets when the GPU wakes up +- qcom,gpu-quirk-fault-detect-mask: + Mask out RB1-3 activity signals from HW hang + detection logic +- qcom,gpu-quirk-dp2clockgating-disable: + Disable RB sampler data path clock gating optimization +- qcom,gpu-quirk-lmloadkill-disable: + Use register setting to disable local memory(LM) feature + to avoid corner case error +- qcom,gpu-quirk-hfi-use-reg: + Use registers to replace DCVS HFI message to avoid GMU failure + to access system memory during IFPC +- qcom,gpu-quirk-limit-uche-gbif-rw: + Limit number of read and write transactions from UCHE block to + GBIF to avoid possible deadlock between GBIF, SMMU and MEMNOC. +- qcom,gpu-quirk-mmu-secure-cb-alt: + Select alternate secure context bank to generate SID1 for + secure playback. + +KGSL Memory Pools: +- qcom,gpu-mempools: Container for sets of GPU mempools.Multiple sets + (pools) can be defined within qcom,gpu-mempools. + Each mempool defines a pool order, reserved pages, + allocation allowed. +Properties: +- compatible: Must be qcom,gpu-mempools. +- qcom,mempool-max-pages: Max pages for all mempools, If not defined there is no limit. +- qcom,gpu-mempool: Defines a set of mempools. + +Properties: +- reg: Index of the pool (0 = lowest pool order). +- qcom,mempool-page-size: Size of page. +- qcom,mempool-reserved: Number of pages reserved at init time for a pool. +- qcom,mempool-allocate: Allocate memory from the system memory when the + reserved pool exhausted. +- qcom,mempool-max-pages: Limit on max pages this pool can hold, If not defined + there is no limit. +GPU model configuration: +- qcom,gpu-models: + Container of sets of GPU model names specified by qcom,gpu-models. +Properties: +- compatible: + Must be qcom,gpu-models. + +- qcom,gpu-model: + Defines a GPU model name for specific GPU model ID. + +Properties: +- compatible: + May also include "qcom,adreno-gpu-*" for few targets. +- qcom,gpu-model-id: + Identifier for the specific GPU hardware configuration - must match the value read + from the hardware. +- qcom,gpu-model: + GPU model name for a specific GPU hardware. + +- qcom,vk-device-id: + Vulkan device id unique for specific GPU hardware model. +SOC Hardware revisions: +- qcom,soc-hw-revisions: + Container of sets of SOC hardware revisions specified by + qcom,soc-hw-revision. +Properties: +- compatible: + Must be qcom,soc-hw-revisions. + +- qcom,soc-hw-revision: + Defines a SOC hardware revision. + +Properties: +- qcom,soc-hw-revision: + Identifier for the hardware revision - must match the value read + from the hardware. +- qcom,chipid: + GPU Chip ID to be used for this hardware revision. +- qcom,gpu-quirk-*: + GPU quirks applicable for this hardware revision. + +GPU LLC slice info: +- cache-slice-names: List of LLC cache slices for GPU transactions + and pagetable walk. +- cache-slices: phandle to the system LLC driver, cache slice index. + +L3 Power levels: +- qcom,l3-pwrlevels: Container for sets of L3 power levels, the + L3 frequency is adjusted according to the + performance hint received from userspace. + +Properties: +- compatible: Must be qcom,l3-pwrlevels +- qcom,l3-pwrlevel: A single L3 powerlevel + +Properties: +- reg: Index of the L3 powerlevel + 0 = powerlevel for no L3 vote + 1 = powerlevel for medium L3 vote + 2 = powerlevel for maximum L3 vote +- qcom,l3-freq: The L3 frequency for the powerlevel (in Hz) + +GPU coresight info: +The following properties are optional as collecting data via coresight might +not be supported for every chipset. The documentation for coresight +properties can be found in: +Documentation/devicetree/bindings/coresight/coresight.txt + +- qcom,gpu-coresights: Container for sets of GPU coresight sources. +- coresight-id: Unique integer identifier for the bus. +- coresight-name: Unique descriptive name of the bus. +- coresight-nr-inports: Number of input ports on the bus. +- coresight-outports: List of output port numbers on the bus. +- coresight-child-list: List of phandles pointing to the children of this + component. +- coresight-child-ports: List of input port numbers of the children. +- coresight-atid: The unique ATID value of the coresight device + +Example of A330 GPU in MSM8916: + +&soc { + msm_gpu: qcom,kgsl-3d0@1c00000 { + label = "kgsl-3d0"; + compatible = "qcom,kgsl-3d0", "qcom,kgsl-3d"; + reg = <0x1c00000 0x10000 + 0x1c20000 0x20000>; + reg-names = "kgsl_3d0_reg_memory" , "kgsl_3d0_shader_memory"; + interrupts = <0 33 0>; + interrupt-names = "kgsl_3d0_irq"; + qcom,id = <0>; + + qcom,chipid = <0x03000600>; + + qcom,initial-pwrlevel = <1>; + + /* Idle Timeout = HZ/12 */ + qcom,idle-timeout = <8>; + qcom,strtstp-sleepwake; + + clocks = <&clock_gcc clk_gcc_oxili_gfx3d_clk>, + <&clock_gcc clk_gcc_oxili_ahb_clk>, + <&clock_gcc clk_gcc_oxili_gmem_clk>, + <&clock_gcc clk_gcc_bimc_gfx_clk>, + <&clock_gcc clk_gcc_bimc_gpu_clk>; + clock-names = "core_clk", "iface_clk", "mem_clk", + "mem_iface_clk", "alt_mem_iface_clk"; + + /* Bus Scale Settings */ + qcom, gpu-bus-table { + compatible="qcom,gpu-bus-table","qcom,gpu-bus-table-ddr7"; + qcom,msm-bus,name = "grp3d"; + qcom,msm-bus,num-cases = <4>; + qcom,msm-bus,num-paths = <1>; + qcom,msm-bus,vectors-KBps = + <26 512 0 0>, + <26 512 0 1600000>, + <26 512 0 3200000>, + <26 512 0 4264000>; + }; + + /* GDSC oxili regulators */ + vdd-supply = <&gdsc_oxili_gx>; + + nvmem-cells = <&gpu_speed_bin>, <&gpu_gaming_bin>, <&gpu_model_bin>; + nvmem-cell-names = "speed_bin", "gaming_bin","gpu_model"; + + /* IOMMU Data */ + iommu = <&gfx_iommu>; + + /* Trace bus */ + coresight-id = <67>; + coresight-name = "coresight-gfx"; + coresight-nr-inports = <0>; + coresight-outports = <0>; + coresight-child-list = <&funnel_in0>; + coresight-child-ports = <5>; + + /* Enable context aware freq. scaling */ + qcom,enable-ca-jump; + + /* Context aware jump busy penalty in us */ + qcom,ca-busy-penalty = <12000>; + + /* Context aware jump target power level */ + qcom,ca-target-pwrlevel = <1>; + + qcom,soc-hw-revisions { + #address-cells = <1>; + #size-cells = <0>; + + compatible="qcom,soc-hw-revisions"; + + qcom,soc-hw-revision@0 { + reg = <0>; + + qcom,chipid = <0x06010500>; + qcom,gpu-quirk-hfi-use-reg; + qcom,gpu-quirk-limit-uche-gbif-rw; + }; + + qcom,soc-hw-revision@1 { + reg = <1>; + + qcom,chipid = <0x06010501>; + qcom,gpu-quirk-hfi-use-reg; + }; + }; + + qcom,gpu-models { + #address-cells = <1>; + #size-cells = <0>; + compatible="qcom,gpu-models"; + + qcom,gpu-model@0 { + compatible="qcom,adreno-gpu-a642l"; + qcom,gpu-model-id = <0>; + qcom,gpu-model = "Adreno642Lv1"; + qcom,vk-device-id= <0x06030500>; + }; + qcom,gpu-model@1 { + compatible="qcom,adreno-gpu-a645"; + qcom,gpu-model-id = <190>; + qcom,gpu-model = "Adreno645"; + qcom,vk-device-id= <0x06030500>; + }; + } + + /* GPU Mempools */ + qcom,gpu-mempools { + #address-cells= <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-reserved = <2048>; + qcom,mempool-allocate; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-reserved = <1024>; + qcom,mempool-allocate; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-reserved = <256>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-reserved = <32>; + }; + }; + + /* Power levels */ + qcom,gpu-pwrlevels-bins { + #address-cells = <1>; + #size-cells = <0>; + + qcom,gpu-pwrlevels-0 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <0>; + qcom,ca-target-pwrlevel = <1>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <400000000>; + qcom,bus-freq = <3>; + qcom,io-fraction = <33>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <310000000>; + qcom,bus-freq = <2>; + qcom,io-fraction = <66>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <200000000>; + qcom,bus-freq = <1>; + qcom,io-fraction = <100>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <27000000>; + qcom,bus-freq = <0>; + qcom,io-fraction = <0>; + }; + }; + }; + + }; +}; diff --git a/qcom/graphics/gpu/bengal-gpu.dtsi b/qcom/graphics/gpu/bengal-gpu.dtsi new file mode 100644 index 00000000..9dccacba --- /dev/null +++ b/qcom/graphics/gpu/bengal-gpu.dtsi @@ -0,0 +1,677 @@ +#define MHZ_TO_KBPS(mhz, w) ((mhz * 1000000 * w) / (1024)) + +&msm_gpu { + label = "kgsl-3d0"; + compatible = "qcom,kgsl-3d0", "qcom,kgsl-3d"; + status = "ok"; + + reg = <0x5900000 0x90000>, + <0x5961000 0x800>; + reg-names = "kgsl_3d0_reg_memory", "cx_dbgc"; + + interrupts = <0 177 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_3d0_irq"; + + qcom,id = <0>; + qcom,chipid = <0x06010000>; + + qcom,initial-pwrlevel = <6>; + + qcom,ubwc-mode = <1>; + qcom,min-access-length = <64>; + + /* base addr, size */ + qcom,gpu-qdss-stm = <0xe1c0000 0x40000>; + #cooling-cells = <2>; + + clocks = <&gpucc GPU_CC_GX_GFX3D_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_BIMC_GPU_AXI_CLK>, + <&gpucc GPU_CC_AHB_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK>, + <&rpmcc RPM_SMD_QDSS_CLK>; + + clock-names = "core_clk", "rbbmtimer_clk", "iface_clk", + "ahb_clk", "mem_clk", "gmu_clk", + "smmu_vote", "apb_pclk"; + + interconnects = <&bimc MASTER_GRAPHICS_3D &bimc SLAVE_EBI_CH0>; + interconnect-names = "gpu_icc_path"; + + qcom,bus-table-cnoc = + <0>, /* Off */ + <100>; /* On */ + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + , /* index=9 */ + , /* index=10 */ + ; /* index=11 */ + + + /* GDSC regulator names */ + regulator-names = "vddcx", "vdd"; + /* GDSC oxili regulators */ + vddcx-supply = <&gpu_cx_gdsc>; + vdd-supply = <&gpu_gx_gdsc>; + + /* CPU latency parameter */ + qcom,pm-qos-active-latency = <422>; + qcom,pm-qos-wakeup-latency = <422>; + + /* Enable context aware freq. scaling */ + qcom,enable-ca-jump; + /* Context aware jump busy penalty in us */ + qcom,ca-busy-penalty = <12000>; + /* Context aware jump target power level */ + qcom,ca-target-pwrlevel = <5>; + + nvmem-cells = <&gpu_speed_bin>, <&gpu_gaming_bin>; + nvmem-cell-names = "speed_bin", "gaming_bin"; + + qcom,gpu-cx-ipeak { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-cx-ipeak"; + + qcom,gpu-cx-ipeak@0 { + qcom,gpu-cx-ipeak = <&cx_ipeak_lm 10>; + qcom,gpu-cx-ipeak-freq = <950000000>; + }; + + qcom,gpu-cx-ipeak@1 { + qcom,gpu-cx-ipeak = <&cx_ipeak_lm 1>; + qcom,gpu-cx-ipeak-freq = <900000000>; + }; + }; + + /* ZAP Shader memory */ + zap-shader { + memory-region = <&pil_gpu_mem>; + }; + + /* GPU Mempools */ + qcom,gpu-mempools { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-allocate; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-allocate; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-reserved = <256>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-reserved = <32>; + }; + }; + + /* GPU Mempool configuration for low memory SKUs */ + qcom,gpu-mempools-lowmem { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools-lowmem"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-allocate; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-allocate; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-allocate; + qcom,mempool-max-pages = <256>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-allocate; + qcom,mempool-max-pages = <32>; + }; + }; + + /* + * Speed-bin zero is default speed bin. + * For rest of the speed bins, speed-bin value + * is calculated as FMAX/4.8 MHz round up to zero + * decimal places plus two margin to account for + * clock jitters. + */ + qcom,gpu-pwrlevel-bins { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevel-bins"; + + qcom,gpu-pwrlevels-0 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <0>; + + qcom,initial-pwrlevel = <6>; + qcom,ca-target-pwrlevel = <5>; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <980000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* TURBO */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <900000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* NOM_L1 */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <820000000>; + qcom,bus-freq = <10>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <745000000>; + qcom,bus-freq = <9>; + qcom,bus-min = <8>; + qcom,bus-max = <10>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <8>; + qcom,bus-min = <8>; + qcom,bus-max = <9>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + qcom,gpu-pwrlevels-1 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <206>; + + qcom,initial-pwrlevel = <6>; + qcom,ca-target-pwrlevel = <5>; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <980000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* TURBO */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <900000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* NOM_L1 */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <820000000>; + qcom,bus-freq = <10>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <745000000>; + qcom,bus-freq = <9>; + qcom,bus-min = <8>; + qcom,bus-max = <10>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <8>; + qcom,bus-min = <8>; + qcom,bus-max = <9>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + qcom,gpu-pwrlevels-2 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <200>; + + qcom,initial-pwrlevel = <6>; + qcom,ca-target-pwrlevel = <5>; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <950000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* TURBO */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <900000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* NOM_L1 */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <820000000>; + qcom,bus-freq = <10>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <745000000>; + qcom,bus-freq = <9>; + qcom,bus-min = <8>; + qcom,bus-max = <10>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <8>; + qcom,bus-min = <8>; + qcom,bus-max = <9>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + qcom,gpu-pwrlevels-3 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <157>; + + qcom,initial-pwrlevel = <3>; + qcom,ca-target-pwrlevel = <2>; + + /* NOM */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <745000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <9>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <8>; + qcom,bus-min = <8>; + qcom,bus-max = <10>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + qcom,gpu-pwrlevels-4 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <127>; + + qcom,initial-pwrlevel = <2>; + qcom,ca-target-pwrlevel = <1>; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <11>; + qcom,bus-min = <8>; + qcom,bus-max = <11>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + }; +}; + + +&soc { + gpu_opp_table: gpu-opp-table { + compatible = "operating-points-v2"; + + opp-980000000 { + opp-hz = /bits/ 64 <980000000>; + opp-microvolt = ; + }; + + opp-950000000 { + opp-hz = /bits/ 64 <950000000>; + opp-microvolt = ; + }; + + opp-900000000 { + opp-hz = /bits/ 64 <900000000>; + opp-microvolt = ; + }; + + opp-820000000 { + opp-hz = /bits/ 64 <820000000>; + opp-microvolt = ; + }; + + opp-745000000 { + opp-hz = /bits/ 64 <745000000>; + opp-microvolt = ; + }; + + opp-600000000 { + opp-hz = /bits/ 64 <600000000>; + opp-microvolt = ; + }; + + opp-465000000 { + opp-hz = /bits/ 64 <465000000>; + opp-microvolt = ; + }; + + opp-320000000 { + opp-hz = /bits/ 64 <320000000>; + opp-microvolt = ; + }; + }; + + gpu_bw_tbl: gpu-bw-tbl { + compatible = "operating-points-v2"; + + opp-0 { opp-hz = /bits/ 64 < 0 >; }; /* OFF */ + + opp-100 { opp-hz = /bits/ 64 < 762 >; }; /* 1.100 MHz */ + + opp-200 { opp-hz = /bits/ 64 < 1525 >; }; /* 2.200 MHz */ + + opp-300 { opp-hz = /bits/ 64 < 2288 >; }; /* 3.300 MHz */ + + opp-451 { opp-hz = /bits/ 64 < 3440 >; }; /* 4.451 MHz */ + + opp-547 { opp-hz = /bits/ 64 < 4173 >; }; /* 5.547 MHz */ + + opp-681 { opp-hz = /bits/ 64 < 5195 >; }; /* 6.681 MHz */ + + opp-768 { opp-hz = /bits/ 64 < 5859 >; }; /* 7.768 MHz */ + + opp-1017 { opp-hz = /bits/ 64 < 7759 >; }; /* 8.1017 MHz */ + + opp-1353 { opp-hz = /bits/ 64 < 10322 >; }; /* 9.1353 MHz */ + + opp-1555 { opp-hz = /bits/ 64 < 11863 >; }; /* 10.1555 MHz */ + + opp-1804 { opp-hz = /bits/ 64 < 13763 >; }; /* 11.1804 MHz */ + }; + + gpubw: qcom,gpubw { + compatible = "qcom,devbw"; + governor = "bw_vbif"; + qcom,src-dst-ports = <26 512>; + operating-points-v2 = <&gpu_bw_tbl>; + }; + + kgsl_msm_iommu: qcom,kgsl-iommu@59a0000 { + compatible = "qcom,kgsl-smmu-v2"; + + reg = <0x59a0000 0x10000>; + qcom,protect = <0xa0000 0x10000>; + + vddcx-supply = <&gpu_cx_gdsc>; + clocks = <&gcc GCC_BIMC_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK>; + + clock-names = "mem_clk", "mem_iface_clk", "smmu_vote"; + + qcom,retention; + qcom,hyp_secure_alloc; + + gfx3d_user: gfx3d_user { + compatible = "qcom,smmu-kgsl-cb"; + label = "gfx3d_user"; + iommus = <&kgsl_smmu 0 1>; + qcom,iommu-dma = "disabled"; + qcom,gpu-offset = <0xa8000>; + }; + + gfx3d_secure: gfx3d_secure { + compatible = "qcom,smmu-kgsl-cb"; + label = "gfx3d_secure"; + iommus = <&kgsl_smmu 2 0>; + qcom,iommu-dma = "disabled"; + }; + }; +}; diff --git a/qcom/graphics/gpu/kalama-gpu-pwrlevels.dtsi b/qcom/graphics/gpu/kalama-gpu-pwrlevels.dtsi new file mode 100644 index 00000000..5ac4dcd8 --- /dev/null +++ b/qcom/graphics/gpu/kalama-gpu-pwrlevels.dtsi @@ -0,0 +1,208 @@ +&msm_gpu { + /* Power levels */ + qcom,gpu-pwrlevel-bins { + compatible="qcom,gpu-pwrlevel-bins"; + + #address-cells = <1>; + #size-cells = <0>; + + qcom,gpu-pwrlevels-0 { + + #address-cells = <1>; + #size-cells = <0>; + + qcom,sku-codes = ; + + qcom,initial-pwrlevel = <9>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <746000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <9>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882b5ffd>; + }; + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <719000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0x882b5ffd>; + }; + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <680000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0x882c5ffd>; + }; + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <615000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0x882c5ffd>; + }; + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <550000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xa82d5ffd>; + }; + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <475000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xa82d5ffd>; + }; + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <401000000>; + qcom,level = ; + + qcom,bus-freq = <5>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + + qcom,acd-level = <0x882e5ffd>; + }; + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <348000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + }; + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <295000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xc02c5ffd>; + }; + qcom,gpu-pwrlevel@9 { + reg = <9>; + qcom,gpu-freq = <220000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + }; + }; + + qcom,gpu-pwrlevels-1 { + + #address-cells = <1>; + #size-cells = <0>; + + qcom,sku-codes = ; + + qcom,initial-pwrlevel = <5>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <550000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <6>; + qcom,bus-max = <9>; + + qcom,acd-level = <0xa82d5ffd>; + }; + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <475000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xa82d5ffd>; + }; + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <401000000>; + qcom,level = ; + + qcom,bus-freq = <5>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + + qcom,acd-level = <0x882e5ffd>; + }; + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <348000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + }; + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <295000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xc02c5ffd>; + }; + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <220000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + }; + }; + }; +}; diff --git a/qcom/graphics/gpu/kalama-gpu.dts b/qcom/graphics/gpu/kalama-gpu.dts new file mode 100644 index 00000000..76e88411 --- /dev/null +++ b/qcom/graphics/gpu/kalama-gpu.dts @@ -0,0 +1,22 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kalama-gpu.dtsi" +#include "kalama-gpu-pwrlevels.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Kalama"; + compatible = "qcom,kalama"; + qcom,msm-id = <519 0x10000>, <536 0x10000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/kalama-gpu.dtsi b/qcom/graphics/gpu/kalama-gpu.dtsi new file mode 100644 index 00000000..fe5eb087 --- /dev/null +++ b/qcom/graphics/gpu/kalama-gpu.dtsi @@ -0,0 +1,270 @@ + +#define MHZ_TO_KBPS(mhz, w) ((mhz * 1000000 * w) / (1024)) + +/* External feature codes */ +#define FC_UNKNOWN 0x0 +#define FC_AA 0x1 +#define FC_AB 0x2 +#define FC_AC 0x3 +#define FC_AD 0x4 +#define FC_AE 0x5 +#define FC_AF 0x6 +#define FC_AG 0x7 +#define FC_AH 0x8 + +/* Internal feature codes */ +#define FC_Y0 0x00f1 +#define FC_Y1 0x00f2 +#define FC_Y2 0x00f3 +#define FC_Y3 0x00f4 +#define FC_Y4 0x00f5 +#define FC_Y5 0x00f6 +#define FC_Y6 0x00f7 +#define FC_Y7 0x00f8 +#define FC_Y8 0x00f9 +#define FC_Y9 0x00fa +#define FC_YA 0x00fb +#define FC_YB 0x00fc +#define FC_YC 0x00fd +#define FC_YD 0x00fe +#define FC_YE 0x00ff +#define FC_YF 0x0100 + +/* Pcodes */ +#define PCODE_UNKNOWN 0 +#define PCODE_0 1 +#define PCODE_1 2 +#define PCODE_2 3 +#define PCODE_3 4 +#define PCODE_4 5 +#define PCODE_5 6 +#define PCODE_6 7 +#define PCODE_7 8 +#define PCODE_8 9 + +#define SKU_CODE(pcode, featurecode) ((pcode << 16) + featurecode) + +&msm_gpu { + compatible = "qcom,adreno-gpu-gen7-2-0", "qcom,kgsl-3d0"; + status = "ok"; + reg = <0x3d00000 0x40000>, <0x3d61000 0x800>, + <0x03d50000 0x10000>, <0x3d8b000 0x2000>, + <0x03d9e000 0x1000>, <0x10900000 0x80000>, + <0x10048000 0x8000>, <0x10b05000 0x1000>; + reg-names = "kgsl_3d0_reg_memory", "cx_dbgc", "rscc", + "isense_cntl", "cx_misc", "qdss_gfx", "qdss_etr", + "qdss_tmc"; + interrupts = <0 300 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_3d0_irq"; + + clocks = <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gcc GCC_GPU_SNOC_DVM_GFX_CLK>, + <&gpucc GPU_CC_AHB_CLK>, + <&aoss_qmp QDSS_CLK>; + clock-names = "gcc_gpu_memnoc_gfx", + "gcc_gpu_snoc_dvm_gfx", + "gpu_cc_ahb", "apb_pclk"; + + qcom,gpu-model = "Adreno740"; + + qcom,chipid = <0x43050a00>; + + qcom,no-nap; + + qcom,min-access-length = <32>; + + qcom,ubwc-mode = <4>; + + qcom,gpu-qdss-stm = <0x161c0000 0x40000>; /* base addr, size */ + + qcom,tzone-names = "gpuss-0", "gpuss-1", "gpuss-2", "gpuss-3", + "gpuss-4", "gpuss-5", "gpuss-6", "gpuss-7"; + + interconnects = <&gem_noc MASTER_GFX3D &mc_virt SLAVE_EBI1>; + interconnect-names = "gpu_icc_path"; + + qcom,bus-table-cnoc = + <0>, /* Off */ + <100>; /* On */ + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + ; /* index=9 */ + + zap-shader { + memory-region = <&gpu_micro_code_mem>; + }; + + qcom,gpu-mempools { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-reserved = <2048>; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-reserved = <1024>; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-reserved = <256>; + }; + /* 128K Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <131072>; + qcom,mempool-reserved = <128>; + }; + /* 256K Page Pool configuration */ + qcom,gpu-mempool@4 { + reg = <4>; + qcom,mempool-page-size = <262144>; + qcom,mempool-reserved = <80>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@5 { + reg = <5>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-reserved = <32>; + }; + }; +}; + +&soc { + kgsl_msm_iommu: qcom,kgsl-iommu@3da0000 { + compatible = "qcom,kgsl-smmu-v2"; + reg = <0x03da0000 0x40000>; + + vddcx-supply = <&gpu_cc_cx_gdsc>; + + gfx3d_user: gfx3d_user { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0x0 0x000>; + qcom,iommu-dma = "disabled"; + }; + + gfx3d_lpac: gfx3d_lpac { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0x1 0x000>; + qcom,iommu-dma = "disabled"; + }; + + gfx3d_secure: gfx3d_secure { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0x2 0x000>; + qcom,iommu-dma = "disabled"; + }; + }; + + gmu: qcom,gmu@3d69000 { + compatible = "qcom,gen7-gmu"; + + reg = <0x3d68000 0x37000>, + <0xb280000 0x10000>, + <0x03D40000 0x10000>; + + reg-names = "gmu", "gmu_pdc", "gmu_ao_blk_dec0"; + + interrupts = <0 304 IRQ_TYPE_LEVEL_HIGH>, + <0 305 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "hfi", "gmu"; + + regulator-names = "vddcx", "vdd"; + + vddcx-supply = <&gpu_cc_cx_gdsc>; + vdd-supply = <&gpu_cc_gx_gdsc>; + + clocks = <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_DDRSS_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_AHB_CLK>, + <&gpucc GPU_CC_HUB_CX_INT_CLK>; + + clock-names = "gmu_clk", "cxo_clk", "axi_clk", + "memnoc_clk", "ahb_clk", "hub_clk"; + + qcom,gmu-freq-table = <220000000 RPMH_REGULATOR_LEVEL_LOW_SVS>, + <550000000 RPMH_REGULATOR_LEVEL_SVS>; + + iommus = <&kgsl_smmu 0x5 0x000>; + qcom,iommu-dma = "disabled"; + + mboxes = <&qmp_aop 0>; + mbox-names = "aop"; + + qcom,ipc-core = <0x00400000 0x100000>; + }; + + coresight_cx_dgbc: qcom,gpu-coresight-cx { + compatible = "qcom,gpu-coresight-cx"; + + coresight-name = "coresight-gfx-cx"; + coresight-atid = <52>; + + out-ports { + port { + cx_dbgc_out_funnel_gfx: endpoint { + remote-endpoint = + <&funnel_gfx_in_cx_dbgc>; + }; + }; + }; + }; + + coresight_gx_dgbc: qcom,gpu-coresight-gx { + compatible = "qcom,gpu-coresight-gx"; + + coresight-name = "coresight-gfx"; + coresight-atid = <53>; + + out-ports { + port { + gx_dbgc_out_funnel_gfx: endpoint { + remote-endpoint = + <&funnel_gfx_in_gx_dbgc>; + }; + }; + }; + }; +}; + +&funnel_gfx { + in-ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + funnel_gfx_in_gx_dbgc: endpoint { + remote-endpoint = + <&gx_dbgc_out_funnel_gfx>; + }; + }; + + port@1 { + reg = <1>; + funnel_gfx_in_cx_dbgc: endpoint { + remote-endpoint = + <&cx_dbgc_out_funnel_gfx>; + }; + }; + }; +}; diff --git a/qcom/graphics/gpu/kalama-hhg-gpu-pwrlevels.dtsi b/qcom/graphics/gpu/kalama-hhg-gpu-pwrlevels.dtsi new file mode 100644 index 00000000..0ecc4827 --- /dev/null +++ b/qcom/graphics/gpu/kalama-hhg-gpu-pwrlevels.dtsi @@ -0,0 +1,180 @@ +&msm_gpu { + qcom,initial-pwrlevel = <13>; + + /* Power levels */ + qcom,gpu-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevels"; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1000000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <9>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882d5ffd>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <860000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882d5ffd>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <827000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + + qcom,acd-level = <0xa82d5ffd>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <794000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <9>; + + qcom,acd-level = <0xa82d5ffd>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <746000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <719000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <680000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <8>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <615000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xa82f5ffd>; + }; + + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <550000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xe0285ffd>; + }; + + qcom,gpu-pwrlevel@9 { + reg = <9>; + qcom,gpu-freq = <475000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <5>; + + qcom,acd-level = <0xe0285ffd>; + }; + + qcom,gpu-pwrlevel@10 { + reg = <10>; + qcom,gpu-freq = <401000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <4>; + + qcom,acd-level = <0xc02a5ffd>; + }; + + qcom,gpu-pwrlevel@11 { + reg = <11>; + qcom,gpu-freq = <348000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xe02b5ffd>; + }; + + qcom,gpu-pwrlevel@12 { + reg = <12>; + qcom,gpu-freq = <295000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xe02d5ffd>; + }; + + qcom,gpu-pwrlevel@13 { + reg = <13>; + qcom,gpu-freq = <220000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xc02f5ffd>; + }; + }; +}; + diff --git a/qcom/graphics/gpu/kalama-v2-gpu-pwrlevels.dtsi b/qcom/graphics/gpu/kalama-v2-gpu-pwrlevels.dtsi new file mode 100644 index 00000000..ce49f807 --- /dev/null +++ b/qcom/graphics/gpu/kalama-v2-gpu-pwrlevels.dtsi @@ -0,0 +1,227 @@ +&msm_gpu { + /* Power levels */ + qcom,gpu-pwrlevel-bins { + compatible="qcom,gpu-pwrlevel-bins"; + + #address-cells = <1>; + #size-cells = <0>; + + qcom,gpu-pwrlevels-0 { + + #address-cells = <1>; + #size-cells = <0>; + + qcom,sku-codes = ; + + qcom,initial-pwrlevel = <8>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <719000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <9>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <680000000>; + qcom,level = ; + + qcom,bus-freq = <7>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <615000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <3>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xa82f5ffd>; + }; + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <550000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xe0285ffd>; + }; + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <475000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <5>; + + qcom,acd-level = <0xe0285ffd>; + }; + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <401000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <4>; + + qcom,acd-level = <0xc02a5ffd>; + }; + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <348000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xe02b5ffd>; + }; + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <295000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xe02d5ffd>; + }; + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <220000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xc02f5ffd>; + }; + }; + + qcom,gpu-pwrlevels-1 { + + #address-cells = <1>; + #size-cells = <0>; + + qcom,sku-codes = ; + + qcom,initial-pwrlevel = <7>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <680000000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <9>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <615000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <3>; + qcom,bus-max = <9>; + + qcom,acd-level = <0xa82f5ffd>; + }; + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <550000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <7>; + + qcom,acd-level = <0xe0285ffd>; + }; + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <475000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <5>; + + qcom,acd-level = <0xe0285ffd>; + }; + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <401000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <4>; + + qcom,acd-level = <0xc02a5ffd>; + }; + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <348000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xe02b5ffd>; + }; + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <295000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xe02d5ffd>; + }; + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <220000000>; + qcom,level = ; + + qcom,bus-freq = <1>; + qcom,bus-min = <1>; + qcom,bus-max = <3>; + + qcom,acd-level = <0xc02f5ffd>; + }; + }; + }; +}; diff --git a/qcom/graphics/gpu/kalama-v2-gpu.dts b/qcom/graphics/gpu/kalama-v2-gpu.dts new file mode 100644 index 00000000..19ebd108 --- /dev/null +++ b/qcom/graphics/gpu/kalama-v2-gpu.dts @@ -0,0 +1,22 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kalama-v2-gpu.dtsi" +#include "kalama-v2-gpu-pwrlevels.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Kalama v2"; + compatible = "qcom,kalama"; + qcom,msm-id = <519 0x20000>, <536 0x20000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/kalama-v2-gpu.dtsi b/qcom/graphics/gpu/kalama-v2-gpu.dtsi new file mode 100644 index 00000000..2357e479 --- /dev/null +++ b/qcom/graphics/gpu/kalama-v2-gpu.dtsi @@ -0,0 +1,9 @@ +#include "kalama-gpu.dtsi" + +&msm_gpu { + compatible = "qcom,adreno-gpu-gen7-2-1", "qcom,kgsl-3d0"; + + qcom,gpu-model = "Adreno740v2"; + + qcom,chipid = <0x43050a01>; +}; diff --git a/qcom/graphics/gpu/kalamap-hhg-gpu.dts b/qcom/graphics/gpu/kalamap-hhg-gpu.dts new file mode 100644 index 00000000..13273df9 --- /dev/null +++ b/qcom/graphics/gpu/kalamap-hhg-gpu.dts @@ -0,0 +1,22 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "kalama-v2-gpu.dtsi" +#include "kalama-hhg-gpu-pwrlevels.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Kalama HHG"; + compatible = "qcom,kalamap-hhg"; + qcom,msm-id = <600 0x20000>, <601 0x20000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/khaje-gpu.dts b/qcom/graphics/gpu/khaje-gpu.dts new file mode 100644 index 00000000..ccc520b0 --- /dev/null +++ b/qcom/graphics/gpu/khaje-gpu.dts @@ -0,0 +1,23 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "khaje-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Khaje SoC"; + compatible = "qcom,khaje", "qcom,khaje-qrd", + "qcom,khaje-atp", "qcom,khaje-idp"; + qcom,msm-id = <518 0x10000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/khaje-gpu.dtsi b/qcom/graphics/gpu/khaje-gpu.dtsi new file mode 100644 index 00000000..a9892e4b --- /dev/null +++ b/qcom/graphics/gpu/khaje-gpu.dtsi @@ -0,0 +1,270 @@ +#include "bengal-gpu.dtsi" + +&msm_gpu { + qcom,chipid = <0x06010001>; + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + ; /* index=7 */ + + /delete-node/ qcom,gpu-pwrlevel-bins; + /* + * Speed-bin zero is default speed bin. + * For rest of the speed bins, speed-bin value + * is calculated as FMAX/4.8 MHz round up to zero + * decimal places plus two margin to account for + * clock jitters. + */ + qcom,gpu-pwrlevel-bins { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevel-bins"; + + qcom,gpu-pwrlevels-0 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <0>; + + qcom,initial-pwrlevel = <6>; + qcom,ca-target-pwrlevel = <5>; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1260000000>; + qcom,bus-freq = <7>; + qcom,bus-min = <7>; + qcom,bus-max = <7>; + qcom,level = ; + }; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <1114800000>; + qcom,bus-freq = <7>; + qcom,bus-min = <7>; + qcom,bus-max = <7>; + qcom,level = ; + }; + + /* TURBO */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <1025000000>; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <7>; + qcom,level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <785000000>; + qcom,bus-freq = <5>; + qcom,bus-min = <4>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <4>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <2>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + qcom,gpu-pwrlevels-1 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <235>; + + qcom,initial-pwrlevel = <5>; + qcom,ca-target-pwrlevel = <4>; + + /* TURBO_L1 */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1114800000>; + qcom,bus-freq = <7>; + qcom,bus-min = <7>; + qcom,bus-max = <7>; + qcom,level = ; + }; + + /* TURBO */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <1025000000>; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <7>; + qcom,level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <785000000>; + qcom,bus-freq = <5>; + qcom,bus-min = <4>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <4>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <2>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + + qcom,gpu-pwrlevels-2 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <216>; + + qcom,initial-pwrlevel = <4>; + qcom,ca-target-pwrlevel = <3>; + + /* TURBO */ + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <1025000000>; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <7>; + qcom,level = ; + }; + + /* NOM */ + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <785000000>; + qcom,bus-freq = <5>; + qcom,bus-min = <4>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* SVS_L1 */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <600000000>; + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + qcom,level = ; + }; + + /* SVS */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <465000000>; + qcom,bus-freq = <3>; + qcom,bus-min = <2>; + qcom,bus-max = <4>; + qcom,level = ; + }; + + /* LOW SVS */ + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <320000000>; + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <2>; + qcom,level = ; + }; + + /* XO */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <0>; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + qcom,level = ; + }; + }; + }; +}; diff --git a/qcom/graphics/gpu/khajeg-gpu.dts b/qcom/graphics/gpu/khajeg-gpu.dts new file mode 100644 index 00000000..92ce3350 --- /dev/null +++ b/qcom/graphics/gpu/khajeg-gpu.dts @@ -0,0 +1,23 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "khaje-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Khajeg SoC"; + compatible = "qcom,khajeg", "qcom,khajeg-qrd", + "qcom,khajeg-atp", "qcom,khajeg-idp"; + qcom,msm-id = <585 0x10000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/khajep-gpu.dts b/qcom/graphics/gpu/khajep-gpu.dts new file mode 100644 index 00000000..72552899 --- /dev/null +++ b/qcom/graphics/gpu/khajep-gpu.dts @@ -0,0 +1,23 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "khaje-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Khajep SoC"; + compatible = "qcom,khajep", "qcom,khajep-qrd", + "qcom,khajep-atp", "qcom,khajep-idp"; + qcom,msm-id = <561 0x10000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/khajeq-gpu.dts b/qcom/graphics/gpu/khajeq-gpu.dts new file mode 100644 index 00000000..57eb1f4f --- /dev/null +++ b/qcom/graphics/gpu/khajeq-gpu.dts @@ -0,0 +1,23 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "khaje-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Khajeq SoC"; + compatible = "qcom,khajeq", "qcom,khajeq-qrd", + "qcom,khajeq-atp", "qcom,khajeq-idp"; + qcom,msm-id = <562 0x10000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/sa8155-v2-gpu.dts b/qcom/graphics/gpu/sa8155-v2-gpu.dts new file mode 100644 index 00000000..93f04f23 --- /dev/null +++ b/qcom/graphics/gpu/sa8155-v2-gpu.dts @@ -0,0 +1,20 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sa8155-v2-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. SA8155 SoC"; + qcom,msm-name = "SA8155 V2"; + qcom,msm-id = <362 0x20000>, <367 0x20000>; + qcom,board-id = <0 0>; +}; diff --git a/qcom/graphics/gpu/sa8155-v2-gpu.dtsi b/qcom/graphics/gpu/sa8155-v2-gpu.dtsi new file mode 100644 index 00000000..937cf238 --- /dev/null +++ b/qcom/graphics/gpu/sa8155-v2-gpu.dtsi @@ -0,0 +1,180 @@ +#include "sm8150-gpu.dtsi" + +/* GPU power level overrides */ +&msm_gpu { + /* Updated chip ID */ + qcom,chipid = <0x06040001>; + + /* Power level to start throttling */ + qcom,throttle-pwrlevel = <0>; + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + , /* index=9 */ + , /* index=10 */ + ; /* index=11 */ + + /delete-property/qcom,initial-pwrlevel; + /delete-node/qcom,gpu-pwrlevels; + /delete-node/qcom,gpu-pwrlevel-bins; + + qcom,gpu-pwrlevel-bins { + #address-cells = <1>; + #size-cells = <0>; + + compatible="qcom,gpu-pwrlevel-bins"; + qcom,gpu-pwrlevels-0 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <0>; + qcom,initial-pwrlevel = <4>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <700000000>; + qcom,level = ; + qcom,bus-freq = <10>; + qcom,bus-min = <8>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <675000000>; + qcom,level = ; + qcom,bus-freq = <8>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <585000000>; + qcom,level = ; + qcom,bus-freq = <7>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <500000000>; + qcom,level = ; + qcom,bus-freq = <7>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <427000000>; + qcom,level = ; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + }; + + /* Vote for SVS_L1 voltage for 345MHz instead of SVS */ + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <345000000>; + qcom,level = ; + qcom,bus-freq = <3>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + }; + + /* Vote for SVS_L1 voltage for 257MHz instead of LOW_SVS */ + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <257000000>; + qcom,level = ; + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <8>; + }; + + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <0>; + qcom,level = ; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + }; + }; + + qcom,gpu-pwrlevels-1 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <1>; + qcom,initial-pwrlevel = <2>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <500000000>; + qcom,level = ; + qcom,bus-freq = <7>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <427000000>; + qcom,level = ; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + }; + + /* Vote for SVS_L1 voltage for 345MHz instead of SVS */ + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <345000000>; + qcom,level = ; + qcom,bus-freq = <3>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + }; + + /* Vote for SVS_L1 voltage for 257MHz instead of LOW_SVS */ + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <257000000>; + qcom,level = ; + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <8>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <0>; + qcom,level = ; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + }; + }; + }; +}; + +&gmu { + reg = <0x2c6a000 0x30000>, + <0xb290000 0x10000>, + <0xb490000 0x10000>; + reg-names = "kgsl_gmu_reg", + "kgsl_gmu_pdc_cfg", + "kgsl_gmu_pdc_seq"; +}; diff --git a/qcom/graphics/gpu/sa8195p-gpu.dts b/qcom/graphics/gpu/sa8195p-gpu.dts new file mode 100644 index 00000000..2fa490e7 --- /dev/null +++ b/qcom/graphics/gpu/sa8195p-gpu.dts @@ -0,0 +1,17 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include + +#include "sa8195p-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. SA8195P SoC"; + qcom,msm-name = "SA8195P"; + qcom,msm-id = <405 0x20000>; + qcom,board-id = <0 0>; +}; diff --git a/qcom/graphics/gpu/sa8195p-gpu.dtsi b/qcom/graphics/gpu/sa8195p-gpu.dtsi new file mode 100644 index 00000000..31ba12a5 --- /dev/null +++ b/qcom/graphics/gpu/sa8195p-gpu.dtsi @@ -0,0 +1,255 @@ +#include "sdmshrike-gpu.dtsi" + +&msm_gpu { + /* Updated chip ID */ + qcom,chipid = <0x6080001>; + + /* Power level to start throttling */ + qcom,throttle-pwrlevel = <3>; + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + , /* index=9 */ + , /* index=10 */ + ; /* index=11 */ + + qcom,bus-table-cnoc = + <0>, /* Off */ + <100>; /* On */ + + nvmem-cells = <&gpu_speed_bin>; + nvmem-cell-names = "speed_bin"; + + /delete-property/qcom,initial-pwrlevel; + /delete-node/qcom,gpu-pwrlevels; + /delete-node/qcom,gpu-pwrlevel-bins; + qcom,gpu-pwrlevel-bins { + #address-cells = <1>; + #size-cells = <0>; + + compatible="qcom,gpu-pwrlevel-bins"; + qcom,gpu-pwrlevels-0 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <0>; + qcom,initial-pwrlevel = <1>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <530000000>; + qcom,level = ; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <392000000>; + qcom,level = ; + qcom,bus-freq = <3>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + }; + }; + + qcom,gpu-pwrlevels-1 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <1>; + qcom,initial-pwrlevel = <4>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <670000000>; + qcom,level = ; + qcom,bus-freq = <10>; + qcom,bus-min = <8>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <625000000>; + qcom,level = ; + qcom,bus-freq = <8>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <595000000>; + qcom,level = ; + qcom,bus-freq = <7>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <530000000>; + qcom,level = ; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <392000000>; + qcom,level = ; + qcom,bus-freq = <3>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + }; + }; + + qcom,gpu-pwrlevels-2 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <2>; + qcom,initial-pwrlevel = <4>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <670000000>; + qcom,level = ; + qcom,bus-freq = <10>; + qcom,bus-min = <8>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <625000000>; + qcom,level = ; + qcom,bus-freq = <8>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <595000000>; + qcom,level = ; + qcom,bus-freq = <7>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <530000000>; + qcom,level = ; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <392000000>; + qcom,level = ; + qcom,bus-freq = <3>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + }; + }; + + qcom,gpu-pwrlevels-3 { + #address-cells = <1>; + #size-cells = <0>; + + qcom,speed-bin = <3>; + qcom,initial-pwrlevel = <4>; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <670000000>; + qcom,level = ; + qcom,bus-freq = <10>; + qcom,bus-min = <8>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <625000000>; + qcom,level = ; + qcom,bus-freq = <8>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <595000000>; + qcom,level = ; + qcom,bus-freq = <7>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <530000000>; + qcom,level = ; + qcom,bus-freq = <6>; + qcom,bus-min = <5>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <392000000>; + qcom,level = ; + qcom,bus-freq = <3>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + }; + }; + }; + + qcom,l3-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,l3-pwrlevels"; + + qcom,l3-pwrlevel@0 { + reg = <0>; + qcom,l3-freq = <0>; + }; + + qcom,l3-pwrlevel@1 { + reg = <1>; + qcom,l3-freq = <1344000000>; + }; + + qcom,l3-pwrlevel@2 { + reg = <2>; + qcom,l3-freq = <1612800000>; + }; + }; +}; + +&gmu { + reg = <0x2c6a000 0x30000>, + <0xb290000 0x10000>, + <0xb490000 0x10000>; + reg-names = "kgsl_gmu_reg", + "kgsl_gmu_pdc_cfg", + "kgsl_gmu_pdc_seq"; +}; diff --git a/qcom/graphics/gpu/sdmshrike-gpu.dtsi b/qcom/graphics/gpu/sdmshrike-gpu.dtsi new file mode 100644 index 00000000..fd534b33 --- /dev/null +++ b/qcom/graphics/gpu/sdmshrike-gpu.dtsi @@ -0,0 +1,231 @@ + +#define MHZ_TO_KBPS(mhz, w) ((mhz * 1000000 * w) / (1024)) + +&soc { + msm_gpu: qcom,kgsl-3d0@2c00000 { + label = "kgsl-3d0"; + compatible = "qcom,kgsl-3d0", "qcom,kgsl-3d"; + status = "ok"; + reg = <0x2c00000 0x40000>, <0x780000 0x6fff>; + reg-names = "kgsl_3d0_reg_memory", "qfprom_memory"; + + interrupts = <0 300 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_3d0_irq"; + qcom,id = <0>; + + qcom,chipid = <0x6080000>; + + qcom,initial-pwrlevel = <5>; + + qcom,gpu-quirk-secvid-set-once; + qcom,gpu-quirk-cx-gdsc; + + qcom,idle-timeout = <80>; /* msecs */ + qcom,no-nap; + + qcom,highest-bank-bit = <16>; + + qcom,min-access-length = <32>; + + qcom,ubwc-mode = <3>; + + qcom,macrotiling-channels = <8>; + + qcom,gpu-qdss-stm = <0x161c0000 0x40000>; /* base addr, size */ + + #cooling-cells = <2>; + + clocks = <&gcc GCC_GPU_CFG_AHB_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_DDRSS_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_AHB_CLK>; + + clock-names = "gcc_gpu_ahb", "rbbmtimer_clk", + "gcc_gpu_axi_clk", "gcc_gpu_memnoc_gfx", + "gmu_clk", "gpu_cc_ahb"; + + qcom,isense-clk-on-level = <1>; + + interconnects = <&gem_noc MASTER_GFX3D &mc_virt SLAVE_EBI1>; + interconnect-names = "gpu_icc_path"; + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + , /* index=9 */ + , /* index=10 */ + , /* index=11 */ + ; /* index=12 */ + + qcom,bus-table-cnoc = + <0>, /* Off */ + <100>; /* On */ + + + /* GDSC regulator names */ + regulator-names = "vddcx", "vdd"; + /* GDSC oxili regulators */ + vddcx-supply = <&gpu_cx_gdsc>; + vdd-supply = <&gpu_gx_gdsc>; + + zap-shader { + memory-region = <&gpu_micro_code_mem>; + }; + + + /* GPU Mempools */ + qcom,gpu-mempools { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-reserved = <2048>; + qcom,mempool-allocate; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-reserved = <1024>; + qcom,mempool-allocate; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-reserved = <256>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-reserved = <32>; + }; + }; + + /* Power levels */ + qcom,gpu-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevels"; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <514000000>; + qcom,level = ; + qcom,bus-freq = <12>; + qcom,bus-min = <11>; + qcom,bus-max = <12>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <500000000>; + qcom,level = ; + qcom,bus-freq = <12>; + qcom,bus-min = <10>; + qcom,bus-max = <12>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <461000000>; + qcom,level = ; + qcom,bus-freq = <10>; + qcom,bus-min = <9>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <405000000>; + qcom,level = ; + qcom,bus-freq = <9>; + qcom,bus-min = <8>; + qcom,bus-max = <10>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <315000000>; + qcom,level = ; + qcom,bus-freq = <8>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <0>; + qcom,level = ; + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + }; + }; + }; + + kgsl_msm_iommu: qcom,kgsl-iommu@2ca0000 { + compatible = "qcom,kgsl-smmu-v2"; + + reg = <0x2ca0000 0x10000>; + + qcom,secure-size = <0x20000000>; /* 512MB */ + + gfx3d_user: gfx3d_user { + compatible = "qcom,smmu-kgsl-cb"; + label = "gfx3d_user"; + iommus = <&kgsl_smmu 0x0 0xC01>; + qcom,iommu-dma = "disabled"; + }; + + gfx3d_secure: gfx3d_secure { + compatible = "qcom,smmu-kgsl-cb"; + label = "gfx3d_secure"; + iommus = <&kgsl_smmu 0x2 0xC00>; + qcom,iommu-dma = "disabled"; + }; + }; + + gmu: qcom,gmu@2c6a000 { + compatible = "qcom,gpu-gmu"; + + reg = <0x2c6a000 0x30000>, <0xb200000 0x300000>; + reg-names = "kgsl_gmu_reg", "kgsl_gmu_pdc_reg"; + + interrupts = <0 304 IRQ_TYPE_LEVEL_HIGH>, + <0 305 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_hfi_irq", "kgsl_gmu_irq"; + + regulator-names = "vddcx", "vdd"; + + iommus = <&kgsl_smmu 0x5 0xc00>; + qcom,iommu-dma = "disabled"; + + vddcx-supply = <&gpu_cx_gdsc>; + vdd-supply = <&gpu_gx_gdsc>; + + clocks = <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_DDRSS_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_AHB_CLK>; + + clock-names = "gmu_clk", "cxo_clk", "axi_clk", + "gcc_gpu_memnoc_gfx_clk", "gpu_cc_ahb"; + }; +}; diff --git a/qcom/graphics/gpu/sm8150-gpu.dtsi b/qcom/graphics/gpu/sm8150-gpu.dtsi new file mode 100644 index 00000000..22ef87fc --- /dev/null +++ b/qcom/graphics/gpu/sm8150-gpu.dtsi @@ -0,0 +1,276 @@ + +#define MHZ_TO_KBPS(mhz, w) ((mhz * 1000000 * w) / (1024)) + +&soc { + + msm_gpu: qcom,kgsl-3d0@2c00000 { + label = "kgsl-3d0"; + compatible = "qcom,kgsl-3d0", "qcom,kgsl-3d"; + status = "ok"; + reg = <0x2c00000 0x40000>, <0x2c61000 0x800>, + <0x6900000 0x44000>, <0x780000 0x6fff>; + reg-names = "kgsl_3d0_reg_memory", "cx_dbgc", + "qdss_gfx", "qfprom_memory"; + interrupts = <0 300 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_3d0_irq"; + qcom,id = <0>; + + qcom,chipid = <0x06040000>; + + qcom,initial-pwrlevel = <5>; + + qcom,gpu-quirk-secvid-set-once; + qcom,gpu-quirk-cx-gdsc; + + qcom,idle-timeout = <80>; //msecs + qcom,no-nap; + + qcom,highest-bank-bit = <15>; + + qcom,min-access-length = <32>; + + qcom,ubwc-mode = <3>; + + qcom,gpu-qdss-stm = <0x161c0000 0x40000>; // base addr, size + + #cooling-cells = <2>; + + clocks = <&gcc GCC_GPU_CFG_AHB_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_DDRSS_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_AHB_CLK>; + + clock-names = "gcc_gpu_ahb", "rbbmtimer_clk", + "gcc_gpu_axi_clk", "gcc_gpu_memnoc_gfx", + "gmu_clk", "gpu_cc_ahb"; + + qcom,isense-clk-on-level = <1>; + + interconnects = <&gem_noc MASTER_GFX3D &mc_virt SLAVE_EBI1>; + interconnect-names = "gpu_icc_path"; + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + , /* index=9 */ + , /* index=10 */ + , /* index=11 */ + ; /* index=12 */ + + qcom,bus-table-cnoc = + <0>, /* Off */ + <100>; /* On */ + + + /* GDSC regulator names */ + regulator-names = "vddcx", "vdd"; + /* GDSC oxili regulators */ + vddcx-supply = <&gpu_cx_gdsc>; + vdd-supply = <&gpu_gx_gdsc>; + + zap-shader { + memory-region = <&gpu_micro_code_mem>; + }; + + qcom,l3-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,l3-pwrlevels"; + + qcom,l3-pwrlevel@0 { + reg = <0>; + qcom,l3-freq = <0>; + }; + + qcom,l3-pwrlevel@1 { + reg = <1>; + qcom,l3-freq = <864000000>; + }; + + qcom,l3-pwrlevel@2 { + reg = <2>; + qcom,l3-freq = <1344000000>; + }; + }; + + /* GPU Mempools */ + qcom,gpu-mempools { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-reserved = <2048>; + qcom,mempool-allocate; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-reserved = <1024>; + qcom,mempool-allocate; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-reserved = <256>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-reserved = <32>; + }; + }; + + /* Power levels */ + qcom,gpu-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevels"; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <600000000>; + qcom,level = ; + + qcom,bus-freq = <12>; + qcom,bus-min = <10>; + qcom,bus-max = <12>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <553850000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <9>; + qcom,bus-max = <11>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <486460000>; + qcom,level = ; + + qcom,bus-freq = <9>; + qcom,bus-min = <8>; + qcom,bus-max = <10>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <379650000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <7>; + qcom,bus-max = <9>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <309110000>; + qcom,level = ; + + qcom,bus-freq = <5>; + qcom,bus-min = <5>; + qcom,bus-max = <7>; + }; + + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <215000000>; + qcom,level = ; + + qcom,bus-freq = <4>; + qcom,bus-min = <3>; + qcom,bus-max = <5>; + }; + + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <0>; + qcom,level = ; + + qcom,bus-freq = <0>; + qcom,bus-min = <0>; + qcom,bus-max = <0>; + }; + }; + + }; + + kgsl_msm_iommu: qcom,kgsl-iommu@2ca0000 { + compatible = "qcom,kgsl-smmu-v2"; + + reg = <0x2ca0000 0x10000>; + + gfx3d_user: gfx3d_user { + compatible = "qcom,smmu-kgsl-cb"; + label = "gfx3d_user"; + iommus = <&kgsl_smmu 0x0 0x401>; + qcom,iommu-dma = "disabled"; + }; + + gfx3d_secure: gfx3d_secure { + compatible = "qcom,smmu-kgsl-cb"; + label = "gfx3d_secure"; + iommus = <&kgsl_smmu 0x2 0x400>; + qcom,iommu-dma = "disabled"; + }; + }; + + gmu: qcom,gmu@2c6a000 { + compatible = "qcom,gpu-gmu"; + + reg = <0x2c6a000 0x30000>, + <0xb280000 0x10000>, + <0xb480000 0x10000>; + reg-names = "kgsl_gmu_reg", + "kgsl_gmu_pdc_cfg", + "kgsl_gmu_pdc_seq"; + + interrupts = <0 304 IRQ_TYPE_LEVEL_HIGH>, + <0 305 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_hfi_irq", "kgsl_gmu_irq"; + + regulator-names = "vddcx", "vdd"; + + iommus = <&kgsl_smmu 0x5 0x400>; + qcom,iommu-dma = "disabled"; + + vddcx-supply = <&gpu_cx_gdsc>; + vdd-supply = <&gpu_gx_gdsc>; + + clocks = <&gpucc GPU_CC_CX_GMU_CLK>, + <&gpucc GPU_CC_CXO_CLK>, + <&gcc GCC_DDRSS_GPU_AXI_CLK>, + <&gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&gpucc GPU_CC_AHB_CLK>; + + clock-names = "gmu_clk", "cxo_clk", "axi_clk", + "gcc_gpu_memnoc_gfx_clk", "gpu_cc_ahb"; + + /* AOP mailbox for sending ACD enable and disable messages */ + mboxes = <&qmp_aop 0>; + mbox-names = "aop"; + + }; +}; diff --git a/qcom/graphics/gpu/waipio-gpu.dts b/qcom/graphics/gpu/waipio-gpu.dts new file mode 100644 index 00000000..b004b97a --- /dev/null +++ b/qcom/graphics/gpu/waipio-gpu.dts @@ -0,0 +1,22 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "waipio-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Waipio SoC"; + compatible = "qcom,waipio"; + qcom,msm-id = <457 0x10000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/waipio-gpu.dtsi b/qcom/graphics/gpu/waipio-gpu.dtsi new file mode 100644 index 00000000..d6a09584 --- /dev/null +++ b/qcom/graphics/gpu/waipio-gpu.dtsi @@ -0,0 +1,286 @@ + +#define MHZ_TO_KBPS(mhz, w) ((mhz * 1000000 * w) / (1024)) + +&soc { + msm_gpu: qcom,kgsl-3d0@3d00000 { + compatible = "qcom,adreno-gpu-gen7-0-0", "qcom,kgsl-3d0"; + status = "ok"; + reg = <0x3d00000 0x40000>, <0x3d61000 0x800>, + <0x03d50000 0x10000>, <0x3d8b000 0x2000>, + <0x03d9e000 0x1000>, <0x10900000 0x80000>; + reg-names = "kgsl_3d0_reg_memory", "cx_dbgc", "rscc", + "isense_cntl", "cx_misc", "qdss_gfx"; + interrupts = <0 300 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "kgsl_3d0_irq"; + + clocks = <&clock_gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&clock_gcc GCC_GPU_SNOC_DVM_GFX_CLK>, + <&clock_gpucc GPU_CC_AHB_CLK>, + <&aoss_qmp QDSS_CLK>; + clock-names = "gcc_gpu_memnoc_gfx", + "gcc_gpu_snoc_dvm_gfx", + "gpu_cc_ahb", "apb_pclk"; + + qcom,gpu-model = "Adreno730v1"; + + qcom,chipid = <0x07030000>; + + qcom,initial-pwrlevel = <8>; + + qcom,no-nap; + + qcom,min-access-length = <32>; + + qcom,ubwc-mode = <4>; + + qcom,gpu-qdss-stm = <0x161c0000 0x40000>; /* base addr, size */ + + qcom,tzone-names = "gpuss-0", "gpuss-1"; + + interconnects = <&gem_noc MASTER_GFX3D &mc_virt SLAVE_EBI1>; + interconnect-names = "gpu_icc_path"; + + qcom,bus-table-cnoc = + <0>, /* Off */ + <100>; /* On */ + + qcom,bus-table-ddr = + , /* index=0 */ + , /* index=1 */ + , /* index=2 */ + , /* index=3 */ + , /* index=4 */ + , /* index=5 */ + , /* index=6 */ + , /* index=7 */ + , /* index=8 */ + , /* index=9 */ + , /* index=10 */ + ; /* index=11 */ + + zap-shader { + memory-region = <&gpu_micro_code_mem>; + }; + + /* Power levels */ + qcom,gpu-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevels"; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <818000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = <0x882c5ffd>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <791000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + + qcom,acd-level = <0x882c5ffd>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <734000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <9>; + qcom,bus-max = <11>; + + qcom,acd-level = <0x882d5ffd>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <640000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + + qcom,acd-level = <0xa82d5ffd>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <599000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <545000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <492000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <6>; + qcom,bus-max = <8>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <421000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + + qcom,acd-level = <0xa82e5ffd>; + }; + + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <350000000>; + qcom,level = ; + + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <6>; + + qcom,acd-level = <0x882f5ffd>; + }; + }; + + qcom,gpu-mempools { + #address-cells = <1>; + #size-cells = <0>; + compatible = "qcom,gpu-mempools"; + + /* 4K Page Pool configuration */ + qcom,gpu-mempool@0 { + reg = <0>; + qcom,mempool-page-size = <4096>; + qcom,mempool-reserved = <2048>; + }; + /* 8K Page Pool configuration */ + qcom,gpu-mempool@1 { + reg = <1>; + qcom,mempool-page-size = <8192>; + qcom,mempool-reserved = <1024>; + }; + /* 64K Page Pool configuration */ + qcom,gpu-mempool@2 { + reg = <2>; + qcom,mempool-page-size = <65536>; + qcom,mempool-reserved = <256>; + }; + /* 128K Page Pool configuration */ + qcom,gpu-mempool@3 { + reg = <3>; + qcom,mempool-page-size = <131072>; + qcom,mempool-reserved = <128>; + }; + /* 256K Page Pool configuration */ + qcom,gpu-mempool@4 { + reg = <4>; + qcom,mempool-page-size = <262144>; + qcom,mempool-reserved = <80>; + }; + /* 1M Page Pool configuration */ + qcom,gpu-mempool@5 { + reg = <5>; + qcom,mempool-page-size = <1048576>; + qcom,mempool-reserved = <32>; + }; + }; + }; + + kgsl_msm_iommu: qcom,kgsl-iommu@3da0000 { + compatible = "qcom,kgsl-smmu-v2"; + reg = <0x03da0000 0x40000>; + + vddcx-supply = <&gpu_cc_cx_gdsc>; + + gfx3d_user: gfx3d_user { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0x0 0x400>; + qcom,iommu-dma = "disabled"; + }; + + gfx3d_lpac: gfx3d_lpac { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0x1 0x400>; + qcom,iommu-dma = "disabled"; + }; + + gfx3d_secure: gfx3d_secure { + compatible = "qcom,smmu-kgsl-cb"; + iommus = <&kgsl_smmu 0x2 0x400>; + qcom,iommu-dma = "disabled"; + }; + }; + + gmu: qcom,gmu@3d69000 { + compatible = "qcom,gen7-gmu"; + + reg = <0x3d68000 0x37000>, + <0xb290000 0x10000>, + <0x03D40000 0x10000>; + + reg-names = "gmu", "gmu_pdc", "gmu_ao_blk_dec0"; + + interrupts = <0 304 IRQ_TYPE_LEVEL_HIGH>, + <0 305 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "hfi", "gmu"; + + regulator-names = "vddcx", "vdd"; + + vddcx-supply = <&gpu_cc_cx_gdsc>; + vdd-supply = <&gpu_cc_gx_gdsc>; + + clocks = <&clock_gpucc GPU_CC_CX_GMU_CLK>, + <&clock_gpucc GPU_CC_CXO_CLK>, + <&clock_gcc GCC_DDRSS_GPU_AXI_CLK>, + <&clock_gcc GCC_GPU_MEMNOC_GFX_CLK>, + <&clock_gpucc GPU_CC_AHB_CLK>, + <&clock_gpucc GPU_CC_HUB_CX_INT_CLK>, + <&aoss_qmp>; + + clock-names = "gmu_clk", "cxo_clk", "axi_clk", + "memnoc_clk", "ahb_clk", "hub_clk", "apb_pclk"; + + + iommus = <&kgsl_smmu 0x5 0x400>; + qcom,iommu-dma = "disabled"; + + mboxes = <&qmp_aop 0>; + mbox-names = "aop"; + }; +}; diff --git a/qcom/graphics/gpu/waipio-v2-gpu.dts b/qcom/graphics/gpu/waipio-v2-gpu.dts new file mode 100644 index 00000000..554e1e05 --- /dev/null +++ b/qcom/graphics/gpu/waipio-v2-gpu.dts @@ -0,0 +1,22 @@ +/dts-v1/; +/plugin/; + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "waipio-v2-gpu.dtsi" + +/ { + model = "Qualcomm Technologies, Inc. Waipio v2 SoC"; + compatible = "qcom,waipio"; + qcom,msm-id = <457 0x20000>; + qcom,board-id = <0 0>; +}; + diff --git a/qcom/graphics/gpu/waipio-v2-gpu.dtsi b/qcom/graphics/gpu/waipio-v2-gpu.dtsi new file mode 100644 index 00000000..6112ace0 --- /dev/null +++ b/qcom/graphics/gpu/waipio-v2-gpu.dtsi @@ -0,0 +1,137 @@ +&msm_gpu { + + compatible = "qcom,adreno-gpu-gen7-0-1", "qcom,kgsl-3d0"; + + qcom,initial-pwrlevel = <9>; + + qcom,gpu-model = "Adreno730v2"; + + qcom,chipid = <0x07030001>; + + qcom,gpu-pwrlevels { + #address-cells = <1>; + #size-cells = <0>; + + compatible = "qcom,gpu-pwrlevels"; + + qcom,gpu-pwrlevel@0 { + reg = <0>; + qcom,gpu-freq = <818000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <11>; + qcom,bus-max = <11>; + + qcom,acd-level = <0x882c5ffd>; + }; + + qcom,gpu-pwrlevel@1 { + reg = <1>; + qcom,gpu-freq = <791000000>; + qcom,level = ; + + qcom,bus-freq = <11>; + qcom,bus-min = <10>; + qcom,bus-max = <11>; + + qcom,acd-level = <0x882c5ffd>; + }; + + qcom,gpu-pwrlevel@2 { + reg = <2>; + qcom,gpu-freq = <734000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <9>; + qcom,bus-max = <11>; + + qcom,acd-level = <0x882d5ffd>; + }; + + qcom,gpu-pwrlevel@3 { + reg = <3>; + qcom,gpu-freq = <640000000>; + qcom,level = ; + + qcom,bus-freq = <10>; + qcom,bus-min = <6>; + qcom,bus-max = <11>; + + qcom,acd-level = <0xa82d5ffd>; + }; + + qcom,gpu-pwrlevel@4 { + reg = <4>; + qcom,gpu-freq = <599000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@5 { + reg = <5>; + qcom,gpu-freq = <545000000>; + qcom,level = ; + + qcom,bus-freq = <8>; + qcom,bus-min = <6>; + qcom,bus-max = <9>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@6 { + reg = <6>; + qcom,gpu-freq = <492000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <6>; + qcom,bus-max = <8>; + + qcom,acd-level = <0x882e5ffd>; + }; + + qcom,gpu-pwrlevel@7 { + reg = <7>; + qcom,gpu-freq = <421000000>; + qcom,level = ; + + qcom,bus-freq = <6>; + qcom,bus-min = <3>; + qcom,bus-max = <8>; + + qcom,acd-level = <0xa82e5ffd>; + }; + + qcom,gpu-pwrlevel@8 { + reg = <8>; + qcom,gpu-freq = <350000000>; + qcom,level = ; + + qcom,bus-freq = <3>; + qcom,bus-min = <1>; + qcom,bus-max = <6>; + + qcom,acd-level = <0x882f5ffd>; + }; + + qcom,gpu-pwrlevel@9 { + reg = <9>; + qcom,gpu-freq = <285000000>; + qcom,level = ; + + qcom,bus-freq = <2>; + qcom,bus-min = <1>; + qcom,bus-max = <5>; + + qcom,acd-level = <0x882f5ffd>; + }; + }; +};