mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
Merge tag 'drm-msm-next-2025-11-18' of https://gitlab.freedesktop.org/drm/msm into drm-next
Changes for v6.19: GPU: - Gen8 support: A840 (Kaanapali) and X2-85 (Glymur) - A612 support - A few NULL check fixes MDSS: - Added support for Glymur and QCS8300 platforms DPU: - Enabled Quad-Pipe support, unlocking higher resolutions support - Added support for Glymur platform - Documented DPU on QCS8300 platform as supported - Misc small fixes DisplayPort: - Added support for Glymur platform - Added support lame remapping inside DP block - Documented DisplayPort controller on QCS8300 and SM6150/QCS615 as supported Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rob Clark <rob.clark@oss.qualcomm.com> Link: https://patch.msgid.link/CACSVV00sFi65XrZipHCU3C0bYji7vgu7OgWvLeOQ1Cg475_pUA@mail.gmail.com
This commit is contained in:
commit
ee31621316
|
|
@ -18,6 +18,7 @@ properties:
|
|||
compatible:
|
||||
oneOf:
|
||||
- enum:
|
||||
- qcom,glymur-dp
|
||||
- qcom,sa8775p-dp
|
||||
- qcom,sc7180-dp
|
||||
- qcom,sc7280-dp
|
||||
|
|
@ -31,6 +32,11 @@ properties:
|
|||
- qcom,sm8650-dp
|
||||
- qcom,x1e80100-dp
|
||||
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,qcs8300-dp
|
||||
- const: qcom,sa8775p-dp
|
||||
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sm6350-dp
|
||||
|
|
@ -53,6 +59,12 @@ properties:
|
|||
- qcom,sm8550-dp
|
||||
- const: qcom,sm8350-dp
|
||||
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sm6150-dp
|
||||
- const: qcom,sm8150-dp
|
||||
- const: qcom,sm8350-dp
|
||||
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sm8750-dp
|
||||
|
|
@ -195,9 +207,11 @@ allOf:
|
|||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,glymur-dp
|
||||
- qcom,sa8775p-dp
|
||||
- qcom,x1e80100-dp
|
||||
then:
|
||||
$ref: /schemas/sound/dai-common.yaml#
|
||||
oneOf:
|
||||
- required:
|
||||
- aux-bus
|
||||
|
|
@ -239,6 +253,7 @@ allOf:
|
|||
enum:
|
||||
# these platforms support 2 streams MST on some interfaces,
|
||||
# others are SST only
|
||||
- qcom,glymur-dp
|
||||
- qcom,sc8280xp-dp
|
||||
- qcom,x1e80100-dp
|
||||
then:
|
||||
|
|
@ -295,7 +310,7 @@ allOf:
|
|||
minItems: 6
|
||||
maxItems: 8
|
||||
|
||||
additionalProperties: false
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ properties:
|
|||
compatible:
|
||||
oneOf:
|
||||
- items:
|
||||
- pattern: '^qcom,adreno-gmu-[67][0-9][0-9]\.[0-9]$'
|
||||
- pattern: '^qcom,adreno-gmu-[6-8][0-9][0-9]\.[0-9]$'
|
||||
- const: qcom,adreno-gmu
|
||||
- items:
|
||||
- pattern: '^qcom,adreno-gmu-x[1-9][0-9][0-9]\.[0-9]$'
|
||||
|
|
@ -299,6 +299,64 @@ allOf:
|
|||
required:
|
||||
- qcom,qmp
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,adreno-gmu-840.1
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
items:
|
||||
- description: Core GMU registers
|
||||
reg-names:
|
||||
items:
|
||||
- const: gmu
|
||||
clocks:
|
||||
items:
|
||||
- description: GPU AHB clock
|
||||
- description: GMU clock
|
||||
- description: GPU CX clock
|
||||
- description: GPU MEMNOC clock
|
||||
- description: GMU HUB clock
|
||||
clock-names:
|
||||
items:
|
||||
- const: ahb
|
||||
- const: gmu
|
||||
- const: cxo
|
||||
- const: memnoc
|
||||
- const: hub
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,adreno-gmu-x285.1
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
items:
|
||||
- description: Core GMU registers
|
||||
reg-names:
|
||||
items:
|
||||
- const: gmu
|
||||
clocks:
|
||||
items:
|
||||
- description: GPU AHB clock
|
||||
- description: GMU clock
|
||||
- description: GPU CX clock
|
||||
- description: GPU MEMNOC clock
|
||||
- description: GMU HUB clock
|
||||
- description: GMU RSCC HUB clock
|
||||
clock-names:
|
||||
items:
|
||||
- const: ahb
|
||||
- const: gmu
|
||||
- const: cxo
|
||||
- const: memnoc
|
||||
- const: hub
|
||||
- const: rscc
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,264 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/msm/qcom,glymur-mdss.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm Glymur Display MDSS
|
||||
|
||||
maintainers:
|
||||
- Abel Vesa <abel.vesa@linaro.org>
|
||||
|
||||
description:
|
||||
Glymur MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
|
||||
DPU display controller, DP interfaces, etc.
|
||||
|
||||
$ref: /schemas/display/msm/mdss-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,glymur-mdss
|
||||
|
||||
clocks:
|
||||
items:
|
||||
- description: Display AHB
|
||||
- description: Display hf AXI
|
||||
- description: Display core
|
||||
|
||||
iommus:
|
||||
maxItems: 1
|
||||
|
||||
interconnects:
|
||||
items:
|
||||
- description: Interconnect path from mdp0 port to the data bus
|
||||
- description: Interconnect path from CPU to the reg bus
|
||||
|
||||
interconnect-names:
|
||||
items:
|
||||
- const: mdp0-mem
|
||||
- const: cpu-cfg
|
||||
|
||||
patternProperties:
|
||||
"^display-controller@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,glymur-dpu
|
||||
|
||||
"^displayport-controller@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,glymur-dp
|
||||
|
||||
"^phy@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,glymur-dp-phy
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/qcom,rpmh.h>
|
||||
#include <dt-bindings/interconnect/qcom,icc.h>
|
||||
#include <dt-bindings/interconnect/qcom,glymur-rpmh.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/phy/phy-qcom-qmp.h>
|
||||
#include <dt-bindings/power/qcom,rpmhpd.h>
|
||||
|
||||
display-subsystem@ae00000 {
|
||||
compatible = "qcom,glymur-mdss";
|
||||
reg = <0x0ae00000 0x1000>;
|
||||
reg-names = "mdss";
|
||||
|
||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
clocks = <&dispcc_ahb_clk>,
|
||||
<&gcc_disp_hf_axi_clk>,
|
||||
<&dispcc_mdp_clk>;
|
||||
clock-names = "bus", "nrt_bus", "core";
|
||||
|
||||
interconnects = <&mmss_noc MASTER_MDP QCOM_ICC_TAG_ALWAYS
|
||||
&mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
|
||||
<&hsc_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
|
||||
&config_noc SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
|
||||
interconnect-names = "mdp0-mem",
|
||||
"cpu-cfg";
|
||||
|
||||
resets = <&disp_cc_mdss_core_bcr>;
|
||||
|
||||
power-domains = <&mdss_gdsc>;
|
||||
|
||||
iommus = <&apps_smmu 0x1c00 0x2>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
display-controller@ae01000 {
|
||||
compatible = "qcom,glymur-dpu";
|
||||
reg = <0x0ae01000 0x8f000>,
|
||||
<0x0aeb0000 0x2008>;
|
||||
reg-names = "mdp", "vbif";
|
||||
|
||||
clocks = <&gcc_axi_clk>,
|
||||
<&dispcc_ahb_clk>,
|
||||
<&dispcc_mdp_lut_clk>,
|
||||
<&dispcc_mdp_clk>,
|
||||
<&dispcc_mdp_vsync_clk>;
|
||||
clock-names = "nrt_bus",
|
||||
"iface",
|
||||
"lut",
|
||||
"core",
|
||||
"vsync";
|
||||
|
||||
assigned-clocks = <&dispcc_mdp_vsync_clk>;
|
||||
assigned-clock-rates = <19200000>;
|
||||
|
||||
operating-points-v2 = <&mdp_opp_table>;
|
||||
power-domains = <&rpmhpd RPMHPD_MMCX>;
|
||||
|
||||
interrupt-parent = <&mdss>;
|
||||
interrupts = <0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dpu_intf1_out: endpoint {
|
||||
remote-endpoint = <&dsi0_in>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
dpu_intf2_out: endpoint {
|
||||
remote-endpoint = <&dsi1_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdp_opp_table: opp-table {
|
||||
compatible = "operating-points-v2";
|
||||
|
||||
opp-200000000 {
|
||||
opp-hz = /bits/ 64 <200000000>;
|
||||
required-opps = <&rpmhpd_opp_low_svs>;
|
||||
};
|
||||
|
||||
opp-325000000 {
|
||||
opp-hz = /bits/ 64 <325000000>;
|
||||
required-opps = <&rpmhpd_opp_svs>;
|
||||
};
|
||||
|
||||
opp-375000000 {
|
||||
opp-hz = /bits/ 64 <375000000>;
|
||||
required-opps = <&rpmhpd_opp_svs_l1>;
|
||||
};
|
||||
|
||||
opp-514000000 {
|
||||
opp-hz = /bits/ 64 <514000000>;
|
||||
required-opps = <&rpmhpd_opp_nom>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
displayport-controller@ae90000 {
|
||||
compatible = "qcom,glymur-dp";
|
||||
reg = <0xae90000 0x200>,
|
||||
<0xae90200 0x200>,
|
||||
<0xae90400 0x600>,
|
||||
<0xae91000 0x400>,
|
||||
<0xae91400 0x400>;
|
||||
|
||||
interrupt-parent = <&mdss>;
|
||||
interrupts = <12>;
|
||||
|
||||
clocks = <&dispcc_mdss_ahb_clk>,
|
||||
<&dispcc_dptx0_aux_clk>,
|
||||
<&dispcc_dptx0_link_clk>,
|
||||
<&dispcc_dptx0_link_intf_clk>,
|
||||
<&dispcc_dptx0_pixel0_clk>,
|
||||
<&dispcc_dptx0_pixel1_clk>;
|
||||
clock-names = "core_iface",
|
||||
"core_aux",
|
||||
"ctrl_link",
|
||||
"ctrl_link_iface",
|
||||
"stream_pixel",
|
||||
"stream_1_pixel";
|
||||
|
||||
assigned-clocks = <&dispcc_mdss_dptx0_link_clk_src>,
|
||||
<&dispcc_mdss_dptx0_pixel0_clk_src>,
|
||||
<&dispcc_mdss_dptx0_pixel1_clk_src>;
|
||||
assigned-clock-parents = <&usb_1_ss0_qmpphy QMP_USB43DP_DP_LINK_CLK>,
|
||||
<&usb_1_ss0_qmpphy QMP_USB43DP_DP_VCO_DIV_CLK>,
|
||||
<&usb_1_ss0_qmpphy QMP_USB43DP_DP_VCO_DIV_CLK>;
|
||||
|
||||
operating-points-v2 = <&mdss_dp0_opp_table>;
|
||||
|
||||
power-domains = <&rpmhpd RPMHPD_MMCX>;
|
||||
|
||||
phys = <&usb_1_ss0_qmpphy QMP_USB43DP_DP_PHY>;
|
||||
phy-names = "dp";
|
||||
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
|
||||
mdss_dp0_in: endpoint {
|
||||
remote-endpoint = <&mdss_intf0_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
|
||||
mdss_dp0_out: endpoint {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdss_dp0_opp_table: opp-table {
|
||||
compatible = "operating-points-v2";
|
||||
|
||||
opp-160000000 {
|
||||
opp-hz = /bits/ 64 <160000000>;
|
||||
required-opps = <&rpmhpd_opp_low_svs>;
|
||||
};
|
||||
|
||||
opp-270000000 {
|
||||
opp-hz = /bits/ 64 <270000000>;
|
||||
required-opps = <&rpmhpd_opp_svs>;
|
||||
};
|
||||
|
||||
opp-540000000 {
|
||||
opp-hz = /bits/ 64 <540000000>;
|
||||
required-opps = <&rpmhpd_opp_svs_l1>;
|
||||
};
|
||||
|
||||
opp-810000000 {
|
||||
opp-hz = /bits/ 64 <810000000>;
|
||||
required-opps = <&rpmhpd_opp_nom>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
|
|
@ -0,0 +1,286 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/msm/qcom,qcs8300-mdss.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm Technologies, Inc. QCS8300 Display MDSS
|
||||
|
||||
maintainers:
|
||||
- Yongxing Mou <yongxing.mou@oss.qualcomm.com>
|
||||
|
||||
description:
|
||||
QCS8300 MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
|
||||
DPU display controller, DP interfaces and EDP etc.
|
||||
|
||||
$ref: /schemas/display/msm/mdss-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,qcs8300-mdss
|
||||
|
||||
clocks:
|
||||
items:
|
||||
- description: Display AHB
|
||||
- description: Display hf AXI
|
||||
- description: Display core
|
||||
|
||||
iommus:
|
||||
maxItems: 1
|
||||
|
||||
interconnects:
|
||||
maxItems: 3
|
||||
|
||||
interconnect-names:
|
||||
maxItems: 3
|
||||
|
||||
patternProperties:
|
||||
"^display-controller@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,qcs8300-dpu
|
||||
|
||||
"^displayport-controller@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,qcs8300-dp
|
||||
|
||||
"^phy@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,qcs8300-edp-phy
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interconnect/qcom,icc.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/clock/qcom,qcs8300-gcc.h>
|
||||
#include <dt-bindings/clock/qcom,sa8775p-dispcc.h>
|
||||
#include <dt-bindings/interconnect/qcom,qcs8300-rpmh.h>
|
||||
#include <dt-bindings/power/qcom,rpmhpd.h>
|
||||
#include <dt-bindings/power/qcom-rpmpd.h>
|
||||
|
||||
mdss: display-subsystem@ae00000 {
|
||||
compatible = "qcom,qcs8300-mdss";
|
||||
reg = <0x0ae00000 0x1000>;
|
||||
reg-names = "mdss";
|
||||
|
||||
interconnects = <&mmss_noc MASTER_MDP0 QCOM_ICC_TAG_ACTIVE_ONLY
|
||||
&mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ACTIVE_ONLY>,
|
||||
<&mmss_noc MASTER_MDP1 QCOM_ICC_TAG_ACTIVE_ONLY
|
||||
&mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ACTIVE_ONLY>,
|
||||
<&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
|
||||
&config_noc SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
|
||||
interconnect-names = "mdp0-mem",
|
||||
"mdp1-mem",
|
||||
"cpu-cfg";
|
||||
|
||||
resets = <&dispcc_core_bcr>;
|
||||
power-domains = <&dispcc_gdsc>;
|
||||
|
||||
clocks = <&dispcc_ahb_clk>,
|
||||
<&gcc GCC_DISP_HF_AXI_CLK>,
|
||||
<&dispcc_mdp_clk>;
|
||||
|
||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
iommus = <&apps_smmu 0x1000 0x402>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
display-controller@ae01000 {
|
||||
compatible = "qcom,qcs8300-dpu", "qcom,sa8775p-dpu";
|
||||
reg = <0x0ae01000 0x8f000>,
|
||||
<0x0aeb0000 0x2008>;
|
||||
reg-names = "mdp", "vbif";
|
||||
|
||||
clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_AHB_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_MDP_LUT_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_MDP_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_VSYNC_CLK>;
|
||||
clock-names = "nrt_bus",
|
||||
"iface",
|
||||
"lut",
|
||||
"core",
|
||||
"vsync";
|
||||
|
||||
assigned-clocks = <&dispcc0 MDSS_DISP_CC_MDSS_VSYNC_CLK>;
|
||||
assigned-clock-rates = <19200000>;
|
||||
operating-points-v2 = <&mdp_opp_table>;
|
||||
power-domains = <&rpmhpd RPMHPD_MMCX>;
|
||||
|
||||
interrupt-parent = <&mdss>;
|
||||
interrupts = <0>;
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
|
||||
dpu_intf0_out: endpoint {
|
||||
remote-endpoint = <&mdss_dp0_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdp_opp_table: opp-table {
|
||||
compatible = "operating-points-v2";
|
||||
|
||||
opp-375000000 {
|
||||
opp-hz = /bits/ 64 <375000000>;
|
||||
required-opps = <&rpmhpd_opp_svs_l1>;
|
||||
};
|
||||
|
||||
opp-500000000 {
|
||||
opp-hz = /bits/ 64 <500000000>;
|
||||
required-opps = <&rpmhpd_opp_nom>;
|
||||
};
|
||||
|
||||
opp-575000000 {
|
||||
opp-hz = /bits/ 64 <575000000>;
|
||||
required-opps = <&rpmhpd_opp_turbo>;
|
||||
};
|
||||
|
||||
opp-650000000 {
|
||||
opp-hz = /bits/ 64 <650000000>;
|
||||
required-opps = <&rpmhpd_opp_turbo_l1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdss_dp0_phy: phy@aec2a00 {
|
||||
compatible = "qcom,qcs8300-edp-phy", "qcom,sa8775p-edp-phy";
|
||||
|
||||
reg = <0x0aec2a00 0x200>,
|
||||
<0x0aec2200 0xd0>,
|
||||
<0x0aec2600 0xd0>,
|
||||
<0x0aec2000 0x1c8>;
|
||||
|
||||
clocks = <&dispcc MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK>,
|
||||
<&dispcc MDSS_DISP_CC_MDSS_AHB_CLK>;
|
||||
clock-names = "aux",
|
||||
"cfg_ahb";
|
||||
|
||||
#clock-cells = <1>;
|
||||
#phy-cells = <0>;
|
||||
|
||||
vdda-phy-supply = <&vreg_l1c>;
|
||||
vdda-pll-supply = <&vreg_l4a>;
|
||||
};
|
||||
|
||||
displayport-controller@af54000 {
|
||||
compatible = "qcom,qcs8300-dp", "qcom,sa8775p-dp";
|
||||
|
||||
pinctrl-0 = <&dp_hot_plug_det>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
reg = <0xaf54000 0x104>,
|
||||
<0xaf54200 0x0c0>,
|
||||
<0xaf55000 0x770>,
|
||||
<0xaf56000 0x09c>,
|
||||
<0xaf57000 0x09c>,
|
||||
<0xaf58000 0x09c>,
|
||||
<0xaf59000 0x09c>,
|
||||
<0xaf5a000 0x23c>,
|
||||
<0xaf5b000 0x23c>;
|
||||
|
||||
interrupt-parent = <&mdss>;
|
||||
interrupts = <12>;
|
||||
clocks = <&dispcc0 MDSS_DISP_CC_MDSS_AHB_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_AUX_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_LINK_INTF_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK>;
|
||||
clock-names = "core_iface",
|
||||
"core_aux",
|
||||
"ctrl_link",
|
||||
"ctrl_link_iface",
|
||||
"stream_pixel",
|
||||
"stream_1_pixel",
|
||||
"stream_2_pixel",
|
||||
"stream_3_pixel";
|
||||
assigned-clocks = <&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_LINK_CLK_SRC>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL2_CLK_SRC>,
|
||||
<&dispcc0 MDSS_DISP_CC_MDSS_DPTX0_PIXEL3_CLK_SRC>;
|
||||
assigned-clock-parents = <&mdss_dp0_phy 0>,
|
||||
<&mdss_dp0_phy 1>,
|
||||
<&mdss_dp0_phy 1>,
|
||||
<&mdss_dp0_phy 1>;
|
||||
phys = <&mdss_dp0_phy>;
|
||||
phy-names = "dp";
|
||||
operating-points-v2 = <&dp_opp_table>;
|
||||
power-domains = <&rpmhpd RPMHPD_MMCX>;
|
||||
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
|
||||
mdss_dp0_in: endpoint {
|
||||
remote-endpoint = <&dpu_intf0_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
|
||||
mdss_dp_out: endpoint { };
|
||||
};
|
||||
};
|
||||
|
||||
dp_opp_table: opp-table {
|
||||
compatible = "operating-points-v2";
|
||||
|
||||
opp-160000000 {
|
||||
opp-hz = /bits/ 64 <160000000>;
|
||||
required-opps = <&rpmhpd_opp_low_svs>;
|
||||
};
|
||||
|
||||
opp-270000000 {
|
||||
opp-hz = /bits/ 64 <270000000>;
|
||||
required-opps = <&rpmhpd_opp_svs>;
|
||||
};
|
||||
|
||||
opp-540000000 {
|
||||
opp-hz = /bits/ 64 <540000000>;
|
||||
required-opps = <&rpmhpd_opp_svs_l1>;
|
||||
};
|
||||
|
||||
opp-810000000 {
|
||||
opp-hz = /bits/ 64 <810000000>;
|
||||
required-opps = <&rpmhpd_opp_nom>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
|
|
@ -51,6 +51,14 @@ patternProperties:
|
|||
compatible:
|
||||
const: qcom,sm6150-dpu
|
||||
|
||||
"^displayport-controller@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,sm6150-dp
|
||||
|
||||
"^dsi@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
|
|
@ -130,35 +138,37 @@ examples:
|
|||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dpu_intf0_out: endpoint {
|
||||
};
|
||||
reg = <0>;
|
||||
|
||||
dpu_intf0_out: endpoint {
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
dpu_intf1_out: endpoint {
|
||||
remote-endpoint = <&mdss_dsi0_in>;
|
||||
};
|
||||
reg = <1>;
|
||||
|
||||
dpu_intf1_out: endpoint {
|
||||
remote-endpoint = <&mdss_dsi0_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdp_opp_table: opp-table {
|
||||
compatible = "operating-points-v2";
|
||||
|
||||
opp-19200000 {
|
||||
opp-hz = /bits/ 64 <19200000>;
|
||||
required-opps = <&rpmhpd_opp_low_svs>;
|
||||
opp-192000000 {
|
||||
opp-hz = /bits/ 64 <192000000>;
|
||||
required-opps = <&rpmhpd_opp_low_svs>;
|
||||
};
|
||||
|
||||
opp-25600000 {
|
||||
opp-hz = /bits/ 64 <25600000>;
|
||||
required-opps = <&rpmhpd_opp_svs>;
|
||||
opp-256000000 {
|
||||
opp-hz = /bits/ 64 <256000000>;
|
||||
required-opps = <&rpmhpd_opp_svs>;
|
||||
};
|
||||
|
||||
opp-307200000 {
|
||||
opp-hz = /bits/ 64 <307200000>;
|
||||
required-opps = <&rpmhpd_opp_nom>;
|
||||
opp-hz = /bits/ 64 <307200000>;
|
||||
required-opps = <&rpmhpd_opp_nom>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,11 +13,17 @@ $ref: /schemas/display/msm/dpu-common.yaml#
|
|||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,sa8775p-dpu
|
||||
- qcom,sm8650-dpu
|
||||
- qcom,sm8750-dpu
|
||||
- qcom,x1e80100-dpu
|
||||
oneOf:
|
||||
- enum:
|
||||
- qcom,glymur-dpu
|
||||
- qcom,sa8775p-dpu
|
||||
- qcom,sm8650-dpu
|
||||
- qcom,sm8750-dpu
|
||||
- qcom,x1e80100-dpu
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,qcs8300-dpu
|
||||
- const: qcom,sa8775p-dpu
|
||||
|
||||
reg:
|
||||
items:
|
||||
|
|
|
|||
|
|
@ -89,6 +89,8 @@ properties:
|
|||
- description: Qcom Adreno GPUs implementing "qcom,smmu-500" and "arm,mmu-500"
|
||||
items:
|
||||
- enum:
|
||||
- qcom,glymur-smmu-500
|
||||
- qcom,kaanapali-smmu-500
|
||||
- qcom,milos-smmu-500
|
||||
- qcom,qcm2290-smmu-500
|
||||
- qcom,qcs615-smmu-500
|
||||
|
|
|
|||
|
|
@ -7887,6 +7887,7 @@ DRM DRIVER for Qualcomm Adreno GPUs
|
|||
M: Rob Clark <robin.clark@oss.qualcomm.com>
|
||||
R: Sean Paul <sean@poorly.run>
|
||||
R: Konrad Dybcio <konradybcio@kernel.org>
|
||||
R: Akhil P Oommen <akhilpo@oss.qualcomm.com>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
L: freedreno@lists.freedesktop.org
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ adreno-y := \
|
|||
adreno/a6xx_gmu.o \
|
||||
adreno/a6xx_hfi.o \
|
||||
adreno/a6xx_preempt.o \
|
||||
adreno/a8xx_gpu.o \
|
||||
|
||||
adreno-$(CONFIG_DEBUG_FS) += adreno/a5xx_debugfs.o \
|
||||
|
||||
|
|
@ -201,6 +202,7 @@ ADRENO_HEADERS = \
|
|||
generated/a6xx_perfcntrs.xml.h \
|
||||
generated/a7xx_enums.xml.h \
|
||||
generated/a7xx_perfcntrs.xml.h \
|
||||
generated/a8xx_enums.xml.h \
|
||||
generated/a6xx_gmu.xml.h \
|
||||
generated/adreno_common.xml.h \
|
||||
generated/adreno_pm4.xml.h \
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "adreno_gpu.h"
|
||||
#include "a2xx_gpu.h"
|
||||
|
||||
static const struct adreno_info a2xx_gpus[] = {
|
||||
{
|
||||
|
|
@ -19,7 +20,7 @@ static const struct adreno_info a2xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_256K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a2xx_gpu_init,
|
||||
.funcs = &a2xx_gpu_funcs,
|
||||
}, { /* a200 on i.mx51 has only 128kib gmem */
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x02000001),
|
||||
.family = ADRENO_2XX_GEN1,
|
||||
|
|
@ -30,7 +31,7 @@ static const struct adreno_info a2xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_128K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a2xx_gpu_init,
|
||||
.funcs = &a2xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x02020000),
|
||||
.family = ADRENO_2XX_GEN2,
|
||||
|
|
@ -41,7 +42,7 @@ static const struct adreno_info a2xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_512K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a2xx_gpu_init,
|
||||
.funcs = &a2xx_gpu_funcs,
|
||||
}
|
||||
};
|
||||
DECLARE_ADRENO_GPULIST(a2xx);
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ static int a2xx_hw_init(struct msm_gpu *gpu)
|
|||
* word (0x20xxxx for A200, 0x220xxx for A220, 0x225xxx for A225).
|
||||
* Older firmware files, which lack protection support, have 0 instead.
|
||||
*/
|
||||
if (ptr[1] == 0) {
|
||||
if (ptr[1] == 0 && !a2xx_gpu->protection_disabled) {
|
||||
dev_warn(gpu->dev->dev,
|
||||
"Legacy firmware detected, disabling protection support\n");
|
||||
a2xx_gpu->protection_disabled = true;
|
||||
|
|
@ -486,39 +486,18 @@ static u32 a2xx_get_rptr(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
|||
return ring->memptrs->rptr;
|
||||
}
|
||||
|
||||
static const struct adreno_gpu_funcs funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a2xx_hw_init,
|
||||
.pm_suspend = msm_gpu_pm_suspend,
|
||||
.pm_resume = msm_gpu_pm_resume,
|
||||
.recover = a2xx_recover,
|
||||
.submit = a2xx_submit,
|
||||
.active_ring = adreno_active_ring,
|
||||
.irq = a2xx_irq,
|
||||
.destroy = a2xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = adreno_show,
|
||||
#endif
|
||||
.gpu_state_get = a2xx_gpu_state_get,
|
||||
.gpu_state_put = adreno_gpu_state_put,
|
||||
.create_vm = a2xx_create_vm,
|
||||
.get_rptr = a2xx_get_rptr,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct msm_gpu_perfcntr perfcntrs[] = {
|
||||
/* TODO */
|
||||
};
|
||||
|
||||
struct msm_gpu *a2xx_gpu_init(struct drm_device *dev)
|
||||
static struct msm_gpu *a2xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct a2xx_gpu *a2xx_gpu = NULL;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
struct msm_gpu *gpu;
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct adreno_platform_config *config = pdev->dev.platform_data;
|
||||
int ret;
|
||||
|
||||
if (!pdev) {
|
||||
|
|
@ -539,7 +518,7 @@ struct msm_gpu *a2xx_gpu_init(struct drm_device *dev)
|
|||
gpu->perfcntrs = perfcntrs;
|
||||
gpu->num_perfcntrs = ARRAY_SIZE(perfcntrs);
|
||||
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, 1);
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, config->info->funcs, 1);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
|
|
@ -558,3 +537,26 @@ struct msm_gpu *a2xx_gpu_init(struct drm_device *dev)
|
|||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
const struct adreno_gpu_funcs a2xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a2xx_hw_init,
|
||||
.pm_suspend = msm_gpu_pm_suspend,
|
||||
.pm_resume = msm_gpu_pm_resume,
|
||||
.recover = a2xx_recover,
|
||||
.submit = a2xx_submit,
|
||||
.active_ring = adreno_active_ring,
|
||||
.irq = a2xx_irq,
|
||||
.destroy = a2xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = adreno_show,
|
||||
#endif
|
||||
.gpu_state_get = a2xx_gpu_state_get,
|
||||
.gpu_state_put = adreno_gpu_state_put,
|
||||
.create_vm = a2xx_create_vm,
|
||||
.get_rptr = a2xx_get_rptr,
|
||||
},
|
||||
.init = a2xx_gpu_init,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ struct a2xx_gpu {
|
|||
};
|
||||
#define to_a2xx_gpu(x) container_of(x, struct a2xx_gpu, base)
|
||||
|
||||
extern const struct adreno_gpu_funcs a2xx_gpu_funcs;
|
||||
|
||||
struct msm_mmu *a2xx_gpummu_new(struct device *dev, struct msm_gpu *gpu);
|
||||
void a2xx_gpummu_params(struct msm_mmu *mmu, dma_addr_t *pt_base,
|
||||
dma_addr_t *tran_error);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "adreno_gpu.h"
|
||||
#include "a3xx_gpu.h"
|
||||
|
||||
static const struct adreno_info a3xx_gpus[] = {
|
||||
{
|
||||
|
|
@ -18,7 +19,7 @@ static const struct adreno_info a3xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_128K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a3xx_gpu_init,
|
||||
.funcs = &a3xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x03000520),
|
||||
.family = ADRENO_3XX,
|
||||
|
|
@ -29,7 +30,7 @@ static const struct adreno_info a3xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_256K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a3xx_gpu_init,
|
||||
.funcs = &a3xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x03000600),
|
||||
.family = ADRENO_3XX,
|
||||
|
|
@ -40,7 +41,7 @@ static const struct adreno_info a3xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_128K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a3xx_gpu_init,
|
||||
.funcs = &a3xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x03000620),
|
||||
.family = ADRENO_3XX,
|
||||
|
|
@ -51,7 +52,7 @@ static const struct adreno_info a3xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_128K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a3xx_gpu_init,
|
||||
.funcs = &a3xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(
|
||||
0x03020000,
|
||||
|
|
@ -66,7 +67,7 @@ static const struct adreno_info a3xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_512K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a3xx_gpu_init,
|
||||
.funcs = &a3xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(
|
||||
0x03030000,
|
||||
|
|
@ -81,7 +82,7 @@ static const struct adreno_info a3xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_1M,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a3xx_gpu_init,
|
||||
.funcs = &a3xx_gpu_funcs,
|
||||
}
|
||||
};
|
||||
DECLARE_ADRENO_GPULIST(a3xx);
|
||||
|
|
|
|||
|
|
@ -508,29 +508,6 @@ static u32 a3xx_get_rptr(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
|||
return ring->memptrs->rptr;
|
||||
}
|
||||
|
||||
static const struct adreno_gpu_funcs funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a3xx_hw_init,
|
||||
.pm_suspend = msm_gpu_pm_suspend,
|
||||
.pm_resume = msm_gpu_pm_resume,
|
||||
.recover = a3xx_recover,
|
||||
.submit = a3xx_submit,
|
||||
.active_ring = adreno_active_ring,
|
||||
.irq = a3xx_irq,
|
||||
.destroy = a3xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = adreno_show,
|
||||
#endif
|
||||
.gpu_busy = a3xx_gpu_busy,
|
||||
.gpu_state_get = a3xx_gpu_state_get,
|
||||
.gpu_state_put = adreno_gpu_state_put,
|
||||
.create_vm = adreno_create_vm,
|
||||
.get_rptr = a3xx_get_rptr,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct msm_gpu_perfcntr perfcntrs[] = {
|
||||
{ REG_A3XX_SP_PERFCOUNTER6_SELECT, REG_A3XX_RBBM_PERFCTR_SP_6_LO,
|
||||
SP_ALU_ACTIVE_CYCLES, "ALUACTIVE" },
|
||||
|
|
@ -538,13 +515,14 @@ static const struct msm_gpu_perfcntr perfcntrs[] = {
|
|||
SP_FS_FULL_ALU_INSTRUCTIONS, "ALUFULL" },
|
||||
};
|
||||
|
||||
struct msm_gpu *a3xx_gpu_init(struct drm_device *dev)
|
||||
static struct msm_gpu *a3xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct a3xx_gpu *a3xx_gpu = NULL;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
struct msm_gpu *gpu;
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct adreno_platform_config *config = pdev->dev.platform_data;
|
||||
struct icc_path *ocmem_icc_path;
|
||||
struct icc_path *icc_path;
|
||||
int ret;
|
||||
|
|
@ -569,7 +547,7 @@ struct msm_gpu *a3xx_gpu_init(struct drm_device *dev)
|
|||
|
||||
adreno_gpu->registers = a3xx_registers;
|
||||
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, 1);
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, config->info->funcs, 1);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
|
|
@ -613,3 +591,27 @@ struct msm_gpu *a3xx_gpu_init(struct drm_device *dev)
|
|||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
const struct adreno_gpu_funcs a3xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a3xx_hw_init,
|
||||
.pm_suspend = msm_gpu_pm_suspend,
|
||||
.pm_resume = msm_gpu_pm_resume,
|
||||
.recover = a3xx_recover,
|
||||
.submit = a3xx_submit,
|
||||
.active_ring = adreno_active_ring,
|
||||
.irq = a3xx_irq,
|
||||
.destroy = a3xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = adreno_show,
|
||||
#endif
|
||||
.gpu_busy = a3xx_gpu_busy,
|
||||
.gpu_state_get = a3xx_gpu_state_get,
|
||||
.gpu_state_put = adreno_gpu_state_put,
|
||||
.create_vm = adreno_create_vm,
|
||||
.get_rptr = a3xx_get_rptr,
|
||||
},
|
||||
.init = a3xx_gpu_init,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,4 +23,6 @@ struct a3xx_gpu {
|
|||
};
|
||||
#define to_a3xx_gpu(x) container_of(x, struct a3xx_gpu, base)
|
||||
|
||||
extern const struct adreno_gpu_funcs a3xx_gpu_funcs;
|
||||
|
||||
#endif /* __A3XX_GPU_H__ */
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "adreno_gpu.h"
|
||||
#include "a4xx_gpu.h"
|
||||
|
||||
static const struct adreno_info a4xx_gpus[] = {
|
||||
{
|
||||
|
|
@ -19,7 +20,7 @@ static const struct adreno_info a4xx_gpus[] = {
|
|||
},
|
||||
.gmem = SZ_256K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a4xx_gpu_init,
|
||||
.funcs = &a4xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x04020000),
|
||||
.family = ADRENO_4XX,
|
||||
|
|
@ -30,7 +31,7 @@ static const struct adreno_info a4xx_gpus[] = {
|
|||
},
|
||||
.gmem = (SZ_1M + SZ_512K),
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a4xx_gpu_init,
|
||||
.funcs = &a4xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x04030002),
|
||||
.family = ADRENO_4XX,
|
||||
|
|
@ -41,7 +42,7 @@ static const struct adreno_info a4xx_gpus[] = {
|
|||
},
|
||||
.gmem = (SZ_1M + SZ_512K),
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a4xx_gpu_init,
|
||||
.funcs = &a4xx_gpu_funcs,
|
||||
}
|
||||
};
|
||||
DECLARE_ADRENO_GPULIST(a4xx);
|
||||
|
|
|
|||
|
|
@ -627,37 +627,14 @@ static u32 a4xx_get_rptr(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
|||
return ring->memptrs->rptr;
|
||||
}
|
||||
|
||||
static const struct adreno_gpu_funcs funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a4xx_hw_init,
|
||||
.pm_suspend = a4xx_pm_suspend,
|
||||
.pm_resume = a4xx_pm_resume,
|
||||
.recover = a4xx_recover,
|
||||
.submit = a4xx_submit,
|
||||
.active_ring = adreno_active_ring,
|
||||
.irq = a4xx_irq,
|
||||
.destroy = a4xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = adreno_show,
|
||||
#endif
|
||||
.gpu_busy = a4xx_gpu_busy,
|
||||
.gpu_state_get = a4xx_gpu_state_get,
|
||||
.gpu_state_put = adreno_gpu_state_put,
|
||||
.create_vm = adreno_create_vm,
|
||||
.get_rptr = a4xx_get_rptr,
|
||||
},
|
||||
.get_timestamp = a4xx_get_timestamp,
|
||||
};
|
||||
|
||||
struct msm_gpu *a4xx_gpu_init(struct drm_device *dev)
|
||||
static struct msm_gpu *a4xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct a4xx_gpu *a4xx_gpu = NULL;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
struct msm_gpu *gpu;
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct adreno_platform_config *config = pdev->dev.platform_data;
|
||||
struct icc_path *ocmem_icc_path;
|
||||
struct icc_path *icc_path;
|
||||
int ret;
|
||||
|
|
@ -680,7 +657,7 @@ struct msm_gpu *a4xx_gpu_init(struct drm_device *dev)
|
|||
gpu->perfcntrs = NULL;
|
||||
gpu->num_perfcntrs = 0;
|
||||
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, 1);
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, config->info->funcs, 1);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
|
|
@ -726,3 +703,28 @@ struct msm_gpu *a4xx_gpu_init(struct drm_device *dev)
|
|||
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
const struct adreno_gpu_funcs a4xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a4xx_hw_init,
|
||||
.pm_suspend = a4xx_pm_suspend,
|
||||
.pm_resume = a4xx_pm_resume,
|
||||
.recover = a4xx_recover,
|
||||
.submit = a4xx_submit,
|
||||
.active_ring = adreno_active_ring,
|
||||
.irq = a4xx_irq,
|
||||
.destroy = a4xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = adreno_show,
|
||||
#endif
|
||||
.gpu_busy = a4xx_gpu_busy,
|
||||
.gpu_state_get = a4xx_gpu_state_get,
|
||||
.gpu_state_put = adreno_gpu_state_put,
|
||||
.create_vm = adreno_create_vm,
|
||||
.get_rptr = a4xx_get_rptr,
|
||||
},
|
||||
.init = a4xx_gpu_init,
|
||||
.get_timestamp = a4xx_get_timestamp,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -20,4 +20,6 @@ struct a4xx_gpu {
|
|||
};
|
||||
#define to_a4xx_gpu(x) container_of(x, struct a4xx_gpu, base)
|
||||
|
||||
extern const struct adreno_gpu_funcs a4xx_gpu_funcs;
|
||||
|
||||
#endif /* __A4XX_GPU_H__ */
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "adreno_gpu.h"
|
||||
#include "a5xx_gpu.h"
|
||||
|
||||
static const struct adreno_info a5xx_gpus[] = {
|
||||
{
|
||||
|
|
@ -21,7 +22,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_TWO_PASS_USE_WFI |
|
||||
ADRENO_QUIRK_LMLOADKILL_DISABLE,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x05000600),
|
||||
.family = ADRENO_5XX,
|
||||
|
|
@ -38,7 +39,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
.inactive_period = 250,
|
||||
.quirks = ADRENO_QUIRK_TWO_PASS_USE_WFI |
|
||||
ADRENO_QUIRK_LMLOADKILL_DISABLE,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
.zapfw = "a506_zap.mdt",
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x05000800),
|
||||
|
|
@ -55,7 +56,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
*/
|
||||
.inactive_period = 250,
|
||||
.quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
.zapfw = "a508_zap.mdt",
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x05000900),
|
||||
|
|
@ -72,7 +73,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
*/
|
||||
.inactive_period = 250,
|
||||
.quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
/* Adreno 509 uses the same ZAP as 512 */
|
||||
.zapfw = "a512_zap.mdt",
|
||||
}, {
|
||||
|
|
@ -89,7 +90,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
* the GDSC which appears to make it grumpy
|
||||
*/
|
||||
.inactive_period = 250,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x05010200),
|
||||
.family = ADRENO_5XX,
|
||||
|
|
@ -105,7 +106,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
*/
|
||||
.inactive_period = 250,
|
||||
.quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
.zapfw = "a512_zap.mdt",
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(
|
||||
|
|
@ -127,7 +128,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
.inactive_period = 250,
|
||||
.quirks = ADRENO_QUIRK_TWO_PASS_USE_WFI |
|
||||
ADRENO_QUIRK_FAULT_DETECT_MASK,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
.zapfw = "a530_zap.mdt",
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x05040001),
|
||||
|
|
@ -145,7 +146,7 @@ static const struct adreno_info a5xx_gpus[] = {
|
|||
*/
|
||||
.inactive_period = 250,
|
||||
.quirks = ADRENO_QUIRK_LMLOADKILL_DISABLE,
|
||||
.init = a5xx_gpu_init,
|
||||
.funcs = &a5xx_gpu_funcs,
|
||||
.zapfw = "a540_zap.mdt",
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1691,34 +1691,6 @@ static uint32_t a5xx_get_rptr(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
|||
return ring->memptrs->rptr = gpu_read(gpu, REG_A5XX_CP_RB_RPTR);
|
||||
}
|
||||
|
||||
static const struct adreno_gpu_funcs funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a5xx_hw_init,
|
||||
.ucode_load = a5xx_ucode_load,
|
||||
.pm_suspend = a5xx_pm_suspend,
|
||||
.pm_resume = a5xx_pm_resume,
|
||||
.recover = a5xx_recover,
|
||||
.submit = a5xx_submit,
|
||||
.active_ring = a5xx_active_ring,
|
||||
.irq = a5xx_irq,
|
||||
.destroy = a5xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = a5xx_show,
|
||||
#endif
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
.debugfs_init = a5xx_debugfs_init,
|
||||
#endif
|
||||
.gpu_busy = a5xx_gpu_busy,
|
||||
.gpu_state_get = a5xx_gpu_state_get,
|
||||
.gpu_state_put = a5xx_gpu_state_put,
|
||||
.create_vm = adreno_create_vm,
|
||||
.get_rptr = a5xx_get_rptr,
|
||||
},
|
||||
.get_timestamp = a5xx_get_timestamp,
|
||||
};
|
||||
|
||||
static void check_speed_bin(struct device *dev)
|
||||
{
|
||||
struct nvmem_cell *cell;
|
||||
|
|
@ -1751,7 +1723,7 @@ static void check_speed_bin(struct device *dev)
|
|||
devm_pm_opp_set_supported_hw(dev, &val, 1);
|
||||
}
|
||||
|
||||
struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
|
||||
static struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
|
|
@ -1781,7 +1753,7 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
|
|||
if (config->info->revn == 510)
|
||||
nr_rings = 1;
|
||||
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, nr_rings);
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, config->info->funcs, nr_rings);
|
||||
if (ret) {
|
||||
a5xx_destroy(&(a5xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
|
|
@ -1806,3 +1778,32 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
|
|||
|
||||
return gpu;
|
||||
}
|
||||
|
||||
const struct adreno_gpu_funcs a5xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a5xx_hw_init,
|
||||
.ucode_load = a5xx_ucode_load,
|
||||
.pm_suspend = a5xx_pm_suspend,
|
||||
.pm_resume = a5xx_pm_resume,
|
||||
.recover = a5xx_recover,
|
||||
.submit = a5xx_submit,
|
||||
.active_ring = a5xx_active_ring,
|
||||
.irq = a5xx_irq,
|
||||
.destroy = a5xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = a5xx_show,
|
||||
#endif
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
.debugfs_init = a5xx_debugfs_init,
|
||||
#endif
|
||||
.gpu_busy = a5xx_gpu_busy,
|
||||
.gpu_state_get = a5xx_gpu_state_get,
|
||||
.gpu_state_put = a5xx_gpu_state_put,
|
||||
.create_vm = adreno_create_vm,
|
||||
.get_rptr = a5xx_get_rptr,
|
||||
},
|
||||
.init = a5xx_gpu_init,
|
||||
.get_timestamp = a5xx_get_timestamp,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -133,6 +133,7 @@ struct a5xx_preempt_record {
|
|||
*/
|
||||
#define A5XX_PREEMPT_COUNTER_SIZE (16 * 4)
|
||||
|
||||
extern const struct adreno_gpu_funcs a5xx_gpu_funcs;
|
||||
|
||||
int a5xx_power_init(struct msm_gpu *gpu);
|
||||
void a5xx_gpmu_ucode_init(struct msm_gpu *gpu);
|
||||
|
|
|
|||
|
|
@ -672,6 +672,14 @@ static const u32 a690_protect_regs[] = {
|
|||
};
|
||||
DECLARE_ADRENO_PROTECT(a690_protect, 48);
|
||||
|
||||
static const struct adreno_reglist a640_gbif[] = {
|
||||
{ REG_A6XX_GBIF_QSB_SIDE0, 0x00071620 },
|
||||
{ REG_A6XX_GBIF_QSB_SIDE1, 0x00071620 },
|
||||
{ REG_A6XX_GBIF_QSB_SIDE2, 0x00071620 },
|
||||
{ REG_A6XX_GBIF_QSB_SIDE3, 0x00071620 },
|
||||
{ },
|
||||
};
|
||||
|
||||
static const struct adreno_info a6xx_gpus[] = {
|
||||
{
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x06010000),
|
||||
|
|
@ -683,11 +691,12 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.gmem = (SZ_128K + SZ_4K),
|
||||
.quirks = ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gmuwrapper_funcs,
|
||||
.zapfw = "a610_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a612_hwcg,
|
||||
.protect = &a630_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.prim_fifo_threshold = 0x00080000,
|
||||
},
|
||||
|
|
@ -705,6 +714,22 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
{ 157, 3 },
|
||||
{ 127, 4 },
|
||||
),
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x06010200),
|
||||
.family = ADRENO_6XX_GEN1,
|
||||
.fw = {
|
||||
[ADRENO_FW_SQE] = "a630_sqe.fw",
|
||||
[ADRENO_FW_GMU] = "a612_rgmu.bin",
|
||||
},
|
||||
.gmem = (SZ_128K + SZ_4K),
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.funcs = &a6xx_gmuwrapper_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a612_hwcg,
|
||||
.protect = &a630_protect,
|
||||
.gmu_cgc_mode = 0x00000022,
|
||||
.prim_fifo_threshold = 0x00080000,
|
||||
},
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x06010500),
|
||||
.family = ADRENO_6XX_GEN1,
|
||||
|
|
@ -716,7 +741,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.gmem = SZ_512K,
|
||||
.quirks = ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a615_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a615_hwcg,
|
||||
|
|
@ -747,7 +772,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_4GB_VA,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a615_zap.mbn",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a615_hwcg,
|
||||
|
|
@ -774,7 +799,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_4GB_VA,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.protect = &a630_protect,
|
||||
.gmu_cgc_mode = 0x00000222,
|
||||
|
|
@ -797,7 +822,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.gmem = SZ_512K,
|
||||
.quirks = ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a615_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a615_hwcg,
|
||||
|
|
@ -822,7 +847,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.gmem = SZ_512K,
|
||||
.quirks = ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a615_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a615_hwcg,
|
||||
|
|
@ -847,7 +872,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a615_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a615_hwcg,
|
||||
|
|
@ -873,11 +898,12 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a620_zap.mbn",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a620_hwcg,
|
||||
.protect = &a650_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020200,
|
||||
.prim_fifo_threshold = 0x00010000,
|
||||
},
|
||||
|
|
@ -896,10 +922,11 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a690_hwcg,
|
||||
.protect = &a650_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020200,
|
||||
.prim_fifo_threshold = 0x00010000,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
|
|
@ -933,7 +960,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a630_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a630_hwcg,
|
||||
|
|
@ -953,7 +980,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a640_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a640_hwcg,
|
||||
|
|
@ -977,11 +1004,12 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a650_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a650_hwcg,
|
||||
.protect = &a650_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.prim_fifo_threshold = 0x00300200,
|
||||
},
|
||||
|
|
@ -1003,11 +1031,12 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a660_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a660_hwcg,
|
||||
.protect = &a660_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020000,
|
||||
.prim_fifo_threshold = 0x00300200,
|
||||
},
|
||||
|
|
@ -1022,10 +1051,11 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a690_hwcg,
|
||||
.protect = &a660_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020200,
|
||||
.prim_fifo_threshold = 0x00300200,
|
||||
},
|
||||
|
|
@ -1045,11 +1075,12 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a660_zap.mbn",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a660_hwcg,
|
||||
.protect = &a660_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.prim_fifo_threshold = 0x00200200,
|
||||
},
|
||||
|
|
@ -1072,7 +1103,7 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_4GB_VA,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a640_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a640_hwcg,
|
||||
|
|
@ -1091,11 +1122,12 @@ static const struct adreno_info a6xx_gpus[] = {
|
|||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gpu_funcs,
|
||||
.zapfw = "a690_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a690_hwcg,
|
||||
.protect = &a690_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020200,
|
||||
.prim_fifo_threshold = 0x00800200,
|
||||
},
|
||||
|
|
@ -1426,11 +1458,12 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
.gmem = SZ_128K,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a6xx_gmuwrapper_funcs,
|
||||
.zapfw = "a702_zap.mbn",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a702_hwcg,
|
||||
.protect = &a650_protect,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.prim_fifo_threshold = 0x0000c000,
|
||||
},
|
||||
|
|
@ -1452,12 +1485,13 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV |
|
||||
ADRENO_QUIRK_PREEMPTION,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a7xx_gpu_funcs,
|
||||
.zapfw = "a730_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a730_hwcg,
|
||||
.protect = &a730_protect,
|
||||
.pwrup_reglist = &a7xx_pwrup_reglist,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_cgc_mode = 0x00020000,
|
||||
},
|
||||
.preempt_record_size = 2860 * SZ_1K,
|
||||
|
|
@ -1473,12 +1507,13 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV |
|
||||
ADRENO_QUIRK_PREEMPTION,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a7xx_gpu_funcs,
|
||||
.zapfw = "a740_zap.mdt",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a740_hwcg,
|
||||
.protect = &a730_protect,
|
||||
.pwrup_reglist = &a7xx_pwrup_reglist,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_chipid = 0x7020100,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
|
|
@ -1507,12 +1542,13 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
ADRENO_QUIRK_HAS_HW_APRIV |
|
||||
ADRENO_QUIRK_PREEMPTION |
|
||||
ADRENO_QUIRK_IFPC,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a7xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a740_hwcg,
|
||||
.protect = &a730_protect,
|
||||
.pwrup_reglist = &a7xx_pwrup_reglist,
|
||||
.ifpc_reglist = &a750_ifpc_reglist,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_chipid = 0x7050001,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
|
|
@ -1548,12 +1584,13 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
ADRENO_QUIRK_HAS_HW_APRIV |
|
||||
ADRENO_QUIRK_PREEMPTION |
|
||||
ADRENO_QUIRK_IFPC,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a7xx_gpu_funcs,
|
||||
.zapfw = "gen70900_zap.mbn",
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.protect = &a730_protect,
|
||||
.pwrup_reglist = &a7xx_pwrup_reglist,
|
||||
.ifpc_reglist = &a750_ifpc_reglist,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_chipid = 0x7090100,
|
||||
.gmu_cgc_mode = 0x00020202,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
|
|
@ -1581,11 +1618,12 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV |
|
||||
ADRENO_QUIRK_PREEMPTION,
|
||||
.init = a6xx_gpu_init,
|
||||
.funcs = &a7xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.hwcg = a740_hwcg,
|
||||
.protect = &a730_protect,
|
||||
.pwrup_reglist = &a7xx_pwrup_reglist,
|
||||
.gbif_cx = a640_gbif,
|
||||
.gmu_chipid = 0x70f0000,
|
||||
.gmu_cgc_mode = 0x00020222,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
|
|
@ -1612,6 +1650,306 @@ static const struct adreno_info a7xx_gpus[] = {
|
|||
};
|
||||
DECLARE_ADRENO_GPULIST(a7xx);
|
||||
|
||||
static const struct adreno_reglist_pipe x285_nonctxt_regs[] = {
|
||||
{ REG_A8XX_CP_SMMU_STREAM_ID_LPAC, 0x00000101, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_GRAS_DBG_ECO_CNTL, 0x00000800, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_GRAS_TSEFE_DBG_ECO_CNTL, 0x00200000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A6XX_PC_AUTO_VERTEX_STRIDE, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_VIS_STREAM_CNTL, 0x10010000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0x00000002, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_1, 0x00000003, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_2, 0x00000200, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_3, 0x00500000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_4, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RB_GC_GMEM_PROTECT, 0x15000000, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RB_RESOLVE_PREFETCH_CNTL, 0x00000007, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RB_CMP_DBG_ECO_CNTL, 0x00004000, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RBBM_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_SLICE_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_WAIT_IDLE_CLOCKS_CNTL, 0x00000030, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_WAIT_IDLE_CLOCKS_CNTL2, 0x00000030, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_INTERFACE_HANG_INT_CNTL, 0x0fffffff, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x22122212, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_CGC_P2S_CNTL, 0x00000040, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_CHICKEN_BITS_2, 0x00820800, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_CHICKEN_BITS_3, 0x00300000, BIT(PIPE_NONE) },
|
||||
{ REG_A6XX_SP_PERFCTR_SHADER_MASK, 0x0000003f, BIT(PIPE_NONE) },
|
||||
/* Disable CS dead batch merge */
|
||||
{ REG_A7XX_SP_HLSQ_DBG_ECO_CNTL_2, BIT(31), BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_HLSQ_TIMEOUT_THRESHOLD_DP, 0x00000080, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) },
|
||||
{ REG_A6XX_TPL1_DBG_ECO_CNTL, 0x10000000, BIT(PIPE_NONE) },
|
||||
/* BIT(26): Disable final clamp for bicubic filtering */
|
||||
{ REG_A6XX_TPL1_DBG_ECO_CNTL1, 0x00000720, BIT(PIPE_NONE) },
|
||||
{ REG_A6XX_UCHE_MODE_CNTL, 0x80080000, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_CCHE_MODE_CNTL, 0x00001000, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_CCHE_CACHE_WAYS, 0x00000800, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_GBIF_GX_CONFIG, 0x010240e0, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_VARB_IDLE_TIMEOUT, 0x00000020, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_VFD_DBG_ECO_CNTL, 0x00008000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_BV_THRESHOLD, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_BR_THRESHOLD, 0x00600060, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_BUSY_REQ_CNT, 0x00200020, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_LP_REQ_CNT, 0x00000020, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VPC_FLATSHADE_MODE_CNTL, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ },
|
||||
};
|
||||
|
||||
static const u32 x285_protect_regs[] = {
|
||||
A6XX_PROTECT_RDONLY(0x00008, 0x039b),
|
||||
A6XX_PROTECT_RDONLY(0x003b4, 0x008b),
|
||||
A6XX_PROTECT_NORDWR(0x00440, 0x001f),
|
||||
A6XX_PROTECT_RDONLY(0x00580, 0x005f),
|
||||
A6XX_PROTECT_NORDWR(0x005e0, 0x011f),
|
||||
A6XX_PROTECT_RDONLY(0x0074a, 0x0005),
|
||||
A6XX_PROTECT_RDONLY(0x00759, 0x0026),
|
||||
A6XX_PROTECT_RDONLY(0x00789, 0x0000),
|
||||
A6XX_PROTECT_RDONLY(0x0078c, 0x0013),
|
||||
A6XX_PROTECT_NORDWR(0x00800, 0x0029),
|
||||
A6XX_PROTECT_NORDWR(0x0082c, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00837, 0x00af),
|
||||
A6XX_PROTECT_RDONLY(0x008e7, 0x00c9),
|
||||
A6XX_PROTECT_NORDWR(0x008ec, 0x00c3),
|
||||
A6XX_PROTECT_NORDWR(0x009b1, 0x0250),
|
||||
A6XX_PROTECT_RDONLY(0x00ce0, 0x0001),
|
||||
A6XX_PROTECT_RDONLY(0x00df0, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00df1, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00e01, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00e03, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x03c00, 0x00c5),
|
||||
A6XX_PROTECT_RDONLY(0x03cc6, 0x0039),
|
||||
A6XX_PROTECT_NORDWR(0x03d00, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x08600, 0x01ff),
|
||||
A6XX_PROTECT_NORDWR(0x08e00, 0x00ff),
|
||||
A6XX_PROTECT_RDONLY(0x08f00, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x08f01, 0x01be),
|
||||
A6XX_PROTECT_NORDWR(0x09600, 0x01ff),
|
||||
A6XX_PROTECT_RDONLY(0x0981a, 0x02e5),
|
||||
A6XX_PROTECT_NORDWR(0x09e00, 0x01ff),
|
||||
A6XX_PROTECT_NORDWR(0x0a600, 0x01ff),
|
||||
A6XX_PROTECT_NORDWR(0x0a82e, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x0ae00, 0x0006),
|
||||
A6XX_PROTECT_NORDWR(0x0ae08, 0x0006),
|
||||
A6XX_PROTECT_NORDWR(0x0ae10, 0x00bf),
|
||||
A6XX_PROTECT_RDONLY(0x0aed0, 0x002f),
|
||||
A6XX_PROTECT_NORDWR(0x0af00, 0x027f),
|
||||
A6XX_PROTECT_NORDWR(0x0b600, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x0dc00, 0x1fff),
|
||||
A6XX_PROTECT_RDONLY(0x0fc00, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x18400, 0x003f),
|
||||
A6XX_PROTECT_RDONLY(0x18440, 0x013f),
|
||||
A6XX_PROTECT_NORDWR(0x18580, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x1b400, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x1f400, 0x0477),
|
||||
A6XX_PROTECT_RDONLY(0x1f878, 0x0507),
|
||||
A6XX_PROTECT_NORDWR(0x1f930, 0x0329),
|
||||
A6XX_PROTECT_NORDWR(0x1fd80, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x27800, 0x007f),
|
||||
A6XX_PROTECT_RDONLY(0x27880, 0x0385),
|
||||
A6XX_PROTECT_NORDWR(0x27882, 0x000a),
|
||||
A6XX_PROTECT_NORDWR(0x27c06, 0x0000),
|
||||
};
|
||||
|
||||
DECLARE_ADRENO_PROTECT(x285_protect, 64);
|
||||
|
||||
static const struct adreno_reglist_pipe a840_nonctxt_regs[] = {
|
||||
{ REG_A8XX_CP_SMMU_STREAM_ID_LPAC, 0x00000101, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_GRAS_DBG_ECO_CNTL, 0x00000800, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_GRAS_TSEFE_DBG_ECO_CNTL, 0x00200000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A6XX_PC_AUTO_VERTEX_STRIDE, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_VIS_STREAM_CNTL, 0x10010000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0x00000002, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_1, 0x00000003, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_2, 0x00000200, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_3, 0x00500000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_PC_CHICKEN_BITS_4, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
/* Disable Dead Draw Merge scheme on RB-HLSQ */
|
||||
{ REG_A6XX_RB_RBP_CNTL, BIT(5), BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A7XX_RB_CCU_CNTL, 0x00000068, BIT(PIPE_BR) },
|
||||
/* Partially enable perf clear, Disable DINT to c/z be data forwarding */
|
||||
{ REG_A7XX_RB_CCU_DBG_ECO_CNTL, 0x00002200, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RB_GC_GMEM_PROTECT, 0x12000000, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RB_RESOLVE_PREFETCH_CNTL, 0x00000007, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RB_CMP_DBG_ECO_CNTL, 0x00004000, BIT(PIPE_BR) },
|
||||
{ REG_A8XX_RBBM_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_SLICE_NC_MODE_CNTL, 0x00000001, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_POWER_UP_RESET_SW_OVERRIDE, 0x70809060, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_POWER_UP_RESET_SW_BV_OVERRIDE, 0x30000000, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_WAIT_IDLE_CLOCKS_CNTL, 0x00000030, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_WAIT_IDLE_CLOCKS_CNTL2, 0x00000030, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_INTERFACE_HANG_INT_CNTL, 0x0fffffff, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x22122212, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_RBBM_CGC_P2S_CNTL, 0x00000040, BIT(PIPE_NONE) },
|
||||
/* Disable mode_switch optimization in UMAS */
|
||||
{ REG_A6XX_SP_CHICKEN_BITS, BIT(24) | BIT(26), BIT(PIPE_NONE) },
|
||||
/* Disable LPAC large-LM mode */
|
||||
{ REG_A8XX_SP_SS_CHICKEN_BITS_0, BIT(3), BIT(PIPE_NONE) },
|
||||
/* Disable PS out of order retire */
|
||||
{ REG_A7XX_SP_CHICKEN_BITS_2, 0x00c21800, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_CHICKEN_BITS_3, 0x00300000, BIT(PIPE_NONE) },
|
||||
/* Disable SP2TP info attribute */
|
||||
{ REG_A8XX_SP_CHICKEN_BITS_4, 0x00000002, BIT(PIPE_NONE) },
|
||||
{ REG_A6XX_SP_PERFCTR_SHADER_MASK, 0x0000003f, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_HLSQ_DBG_ECO_CNTL, BIT(14), BIT(PIPE_NONE) },
|
||||
/* Ignore HLSQ shared constant feedback from SP */
|
||||
{ REG_A7XX_SP_HLSQ_DBG_ECO_CNTL_1, BIT(17), BIT(PIPE_NONE) },
|
||||
/* Disable CS dead batch merge */
|
||||
{ REG_A7XX_SP_HLSQ_DBG_ECO_CNTL_2, BIT(24), BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_SP_HLSQ_DBG_ECO_CNTL_3, BIT(7), BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_HLSQ_TIMEOUT_THRESHOLD_DP, 0x00000080, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_SP_READ_SEL, 0x0001ff00, BIT(PIPE_NONE) },
|
||||
{ REG_A6XX_TPL1_DBG_ECO_CNTL, 0x10100000, BIT(PIPE_NONE) },
|
||||
/* BIT(26): Disable final clamp for bicubic filtering */
|
||||
{ REG_A6XX_TPL1_DBG_ECO_CNTL1, 0x04000720, BIT(PIPE_NONE) },
|
||||
{ REG_A6XX_UCHE_MODE_CNTL, 0x80080000, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_CCHE_MODE_CNTL, 0x00001000, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_CCHE_CACHE_WAYS, 0x00000800, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_GBIF_GX_CONFIG, 0x010240e0, BIT(PIPE_NONE) },
|
||||
{ REG_A8XX_UCHE_VARB_IDLE_TIMEOUT, 0x00000020, BIT(PIPE_NONE) },
|
||||
{ REG_A7XX_VFD_DBG_ECO_CNTL, 0x00008000, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_BV_THRESHOLD, 0x00500050, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_BR_THRESHOLD, 0x00600060, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_BUSY_REQ_CNT, 0x00200020, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VFD_CB_LP_REQ_CNT, 0x00000020, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ REG_A8XX_VPC_FLATSHADE_MODE_CNTL, 0x00000001, BIT(PIPE_BV) | BIT(PIPE_BR) },
|
||||
{ },
|
||||
};
|
||||
|
||||
static const u32 a840_protect_regs[] = {
|
||||
A6XX_PROTECT_RDONLY(0x00008, 0x039b),
|
||||
A6XX_PROTECT_RDONLY(0x003b4, 0x008b),
|
||||
A6XX_PROTECT_NORDWR(0x00440, 0x001f),
|
||||
A6XX_PROTECT_RDONLY(0x00580, 0x005f),
|
||||
A6XX_PROTECT_NORDWR(0x005e0, 0x011f),
|
||||
A6XX_PROTECT_RDONLY(0x0074a, 0x0005),
|
||||
A6XX_PROTECT_RDONLY(0x00759, 0x001b),
|
||||
A6XX_PROTECT_NORDWR(0x00775, 0x000a),
|
||||
A6XX_PROTECT_RDONLY(0x00789, 0x0000),
|
||||
A6XX_PROTECT_RDONLY(0x0078c, 0x0013),
|
||||
A6XX_PROTECT_NORDWR(0x00800, 0x0029),
|
||||
A6XX_PROTECT_NORDWR(0x00837, 0x00af),
|
||||
A6XX_PROTECT_RDONLY(0x008e7, 0x00c9),
|
||||
A6XX_PROTECT_NORDWR(0x008ec, 0x00c3),
|
||||
A6XX_PROTECT_NORDWR(0x009b1, 0x0250),
|
||||
A6XX_PROTECT_NORDWR(0x00c07, 0x0008),
|
||||
A6XX_PROTECT_RDONLY(0x00ce0, 0x0001),
|
||||
A6XX_PROTECT_RDONLY(0x00df0, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00df1, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00e01, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x00e03, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x03c00, 0x00c5),
|
||||
A6XX_PROTECT_RDONLY(0x03cc6, 0x0039),
|
||||
A6XX_PROTECT_NORDWR(0x03d00, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x08600, 0x01ff),
|
||||
A6XX_PROTECT_NORDWR(0x08e00, 0x00ff),
|
||||
A6XX_PROTECT_RDONLY(0x08f00, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x08f01, 0x01be),
|
||||
A6XX_PROTECT_NORDWR(0x09600, 0x01ff),
|
||||
A6XX_PROTECT_RDONLY(0x0981a, 0x02e5),
|
||||
A6XX_PROTECT_NORDWR(0x09e00, 0x01ff),
|
||||
A6XX_PROTECT_NORDWR(0x0a600, 0x01ff),
|
||||
A6XX_PROTECT_NORDWR(0x0a82e, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x0ae00, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x0ae02, 0x0004),
|
||||
A6XX_PROTECT_NORDWR(0x0ae08, 0x0006),
|
||||
A6XX_PROTECT_NORDWR(0x0ae10, 0x00bf),
|
||||
A6XX_PROTECT_RDONLY(0x0aed0, 0x002f),
|
||||
A6XX_PROTECT_NORDWR(0x0af00, 0x027f),
|
||||
A6XX_PROTECT_NORDWR(0x0b600, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x0dc00, 0x1fff),
|
||||
A6XX_PROTECT_RDONLY(0x0fc00, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x18400, 0x003f),
|
||||
A6XX_PROTECT_RDONLY(0x18440, 0x013f),
|
||||
A6XX_PROTECT_NORDWR(0x18580, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x1b400, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x1f400, 0x0477),
|
||||
A6XX_PROTECT_RDONLY(0x1f878, 0x0507),
|
||||
A6XX_PROTECT_NORDWR(0x1f930, 0x0329),
|
||||
A6XX_PROTECT_NORDWR(0x1fd80, 0x1fff),
|
||||
A6XX_PROTECT_NORDWR(0x27800, 0x007f),
|
||||
A6XX_PROTECT_RDONLY(0x27880, 0x0385),
|
||||
A6XX_PROTECT_NORDWR(0x27882, 0x0009),
|
||||
A6XX_PROTECT_NORDWR(0x27c06, 0x0000),
|
||||
};
|
||||
DECLARE_ADRENO_PROTECT(a840_protect, 15);
|
||||
|
||||
static const struct adreno_reglist a840_gbif[] = {
|
||||
{ REG_A6XX_GBIF_QSB_SIDE0, 0x00071e20 },
|
||||
{ REG_A6XX_GBIF_QSB_SIDE1, 0x00071e20 },
|
||||
{ REG_A6XX_GBIF_QSB_SIDE2, 0x00071e20 },
|
||||
{ REG_A6XX_GBIF_QSB_SIDE3, 0x00071e20 },
|
||||
{ REG_A8XX_GBIF_CX_CONFIG, 0x20023000 },
|
||||
{ },
|
||||
};
|
||||
|
||||
static const struct adreno_info a8xx_gpus[] = {
|
||||
{
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x44070001),
|
||||
.family = ADRENO_8XX_GEN2,
|
||||
.fw = {
|
||||
[ADRENO_FW_SQE] = "gen80100_sqe.fw",
|
||||
[ADRENO_FW_GMU] = "gen80100_gmu.bin",
|
||||
},
|
||||
.gmem = 21 * SZ_1M,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.funcs = &a8xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.protect = &x285_protect,
|
||||
.nonctxt_reglist = x285_nonctxt_regs,
|
||||
.gbif_cx = a840_gbif,
|
||||
.max_slices = 4,
|
||||
.gmu_chipid = 0x8010100,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
{ .name = "SH0", .buswidth = 16 },
|
||||
{ .name = "MC0", .buswidth = 4 },
|
||||
{
|
||||
.name = "ACV",
|
||||
.fixed = true,
|
||||
.perfmode = BIT(2),
|
||||
.perfmode_bw = 16500000,
|
||||
},
|
||||
{ /* sentinel */ },
|
||||
},
|
||||
},
|
||||
}, {
|
||||
.chip_ids = ADRENO_CHIP_IDS(0x44050a01),
|
||||
.family = ADRENO_8XX_GEN2,
|
||||
.fw = {
|
||||
[ADRENO_FW_SQE] = "gen80200_sqe.fw",
|
||||
[ADRENO_FW_GMU] = "gen80200_gmu.bin",
|
||||
[ADRENO_FW_AQE] = "gen80200_aqe.fw",
|
||||
},
|
||||
.gmem = 18 * SZ_1M,
|
||||
.inactive_period = DRM_MSM_INACTIVE_PERIOD,
|
||||
.quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
|
||||
ADRENO_QUIRK_HAS_HW_APRIV,
|
||||
.funcs = &a8xx_gpu_funcs,
|
||||
.a6xx = &(const struct a6xx_info) {
|
||||
.protect = &a840_protect,
|
||||
.nonctxt_reglist = a840_nonctxt_regs,
|
||||
.gbif_cx = a840_gbif,
|
||||
.max_slices = 3,
|
||||
.gmu_chipid = 0x8020100,
|
||||
.bcms = (const struct a6xx_bcm[]) {
|
||||
{ .name = "SH0", .buswidth = 16 },
|
||||
{ .name = "MC0", .buswidth = 4 },
|
||||
{
|
||||
.name = "ACV",
|
||||
.fixed = true,
|
||||
.perfmode = BIT(2),
|
||||
.perfmode_bw = 10687500,
|
||||
},
|
||||
{ /* sentinel */ },
|
||||
},
|
||||
},
|
||||
.preempt_record_size = 19708 * SZ_1K,
|
||||
}
|
||||
};
|
||||
|
||||
DECLARE_ADRENO_GPULIST(a8xx);
|
||||
|
||||
static inline __always_unused void __build_asserts(void)
|
||||
{
|
||||
BUILD_BUG_ON(a630_protect.count > a630_protect.count_max);
|
||||
|
|
@ -1619,4 +1957,5 @@ static inline __always_unused void __build_asserts(void)
|
|||
BUILD_BUG_ON(a660_protect.count > a660_protect.count_max);
|
||||
BUILD_BUG_ON(a690_protect.count > a690_protect.count_max);
|
||||
BUILD_BUG_ON(a730_protect.count > a730_protect.count_max);
|
||||
BUILD_BUG_ON(a840_protect.count > a840_protect.count_max);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -224,14 +224,19 @@ unsigned long a6xx_gmu_get_freq(struct msm_gpu *gpu)
|
|||
|
||||
static bool a6xx_gmu_check_idle_level(struct a6xx_gmu *gmu)
|
||||
{
|
||||
u32 val;
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
int local = gmu->idle_level;
|
||||
u32 val;
|
||||
|
||||
/* SPTP and IFPC both report as IFPC */
|
||||
if (gmu->idle_level == GMU_IDLE_STATE_SPTP)
|
||||
local = GMU_IDLE_STATE_IFPC;
|
||||
|
||||
val = gmu_read(gmu, REG_A6XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE);
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
val = gmu_read(gmu, REG_A8XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE);
|
||||
else
|
||||
val = gmu_read(gmu, REG_A6XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE);
|
||||
|
||||
if (val == local) {
|
||||
if (gmu->idle_level != GMU_IDLE_STATE_IFPC ||
|
||||
|
|
@ -269,7 +274,9 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu)
|
|||
/* Set the log wptr index
|
||||
* note: downstream saves the value in poweroff and restores it here
|
||||
*/
|
||||
if (adreno_is_a7xx(adreno_gpu))
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
gmu_write(gmu, REG_A8XX_GMU_GENERAL_9, 0);
|
||||
else if (adreno_is_a7xx(adreno_gpu))
|
||||
gmu_write(gmu, REG_A7XX_GMU_GENERAL_9, 0);
|
||||
else
|
||||
gmu_write(gmu, REG_A6XX_GPU_GMU_CX_GMU_PWR_COL_CP_RESP, 0);
|
||||
|
|
@ -350,12 +357,18 @@ static const struct a6xx_gmu_oob_bits a6xx_gmu_oob_bits[] = {
|
|||
/* Trigger a OOB (out of band) request to the GMU */
|
||||
int a6xx_gmu_set_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state)
|
||||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
int ret;
|
||||
u32 val;
|
||||
int request, ack;
|
||||
|
||||
WARN_ON_ONCE(!mutex_is_locked(&gmu->lock));
|
||||
|
||||
/* Skip OOB calls since RGMU is not enabled */
|
||||
if (adreno_has_rgmu(adreno_gpu))
|
||||
return 0;
|
||||
|
||||
if (state >= ARRAY_SIZE(a6xx_gmu_oob_bits))
|
||||
return -EINVAL;
|
||||
|
||||
|
|
@ -376,9 +389,23 @@ int a6xx_gmu_set_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state)
|
|||
/* Trigger the equested OOB operation */
|
||||
gmu_write(gmu, REG_A6XX_GMU_HOST2GMU_INTR_SET, 1 << request);
|
||||
|
||||
/* Wait for the acknowledge interrupt */
|
||||
ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_GMU2HOST_INTR_INFO, val,
|
||||
val & (1 << ack), 100, 10000);
|
||||
do {
|
||||
/* Wait for the acknowledge interrupt */
|
||||
ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_GMU2HOST_INTR_INFO, val,
|
||||
val & (1 << ack), 100, 10000);
|
||||
|
||||
if (!ret)
|
||||
break;
|
||||
|
||||
if (completion_done(&a6xx_gpu->base.fault_coredump_done))
|
||||
break;
|
||||
|
||||
/* We may timeout because the GMU is temporarily wedged from
|
||||
* pending faults from the GPU and we are taking a devcoredump.
|
||||
* Wait until the MMU is resumed and try again.
|
||||
*/
|
||||
wait_for_completion(&a6xx_gpu->base.fault_coredump_done);
|
||||
} while (true);
|
||||
|
||||
if (ret)
|
||||
DRM_DEV_ERROR(gmu->dev,
|
||||
|
|
@ -395,10 +422,16 @@ int a6xx_gmu_set_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state)
|
|||
/* Clear a pending OOB state in the GMU */
|
||||
void a6xx_gmu_clear_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state)
|
||||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
int bit;
|
||||
|
||||
WARN_ON_ONCE(!mutex_is_locked(&gmu->lock));
|
||||
|
||||
/* Skip OOB calls since RGMU is not enabled */
|
||||
if (adreno_has_rgmu(adreno_gpu))
|
||||
return;
|
||||
|
||||
if (state >= ARRAY_SIZE(a6xx_gmu_oob_bits))
|
||||
return;
|
||||
|
||||
|
|
@ -485,17 +518,25 @@ static void a6xx_gemnoc_workaround(struct a6xx_gmu *gmu)
|
|||
* in the power down sequence not being fully executed. That in turn can
|
||||
* prevent CX_GDSC from collapsing. Assert Qactive to avoid this.
|
||||
*/
|
||||
if (adreno_is_a621(adreno_gpu) || adreno_is_7c3(adreno_gpu))
|
||||
gmu_write(gmu, REG_A6XX_GMU_AO_AHB_FENCE_CTRL, BIT(0));
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
gmu_write(gmu, REG_A8XX_GPU_GMU_CX_GMU_CX_FALNEXT_INTF, BIT(0));
|
||||
else if (adreno_is_a7xx(adreno_gpu) || (adreno_is_a621(adreno_gpu) ||
|
||||
adreno_is_7c3(adreno_gpu)))
|
||||
gmu_write(gmu, REG_A6XX_GPU_GMU_CX_GMU_CX_FALNEXT_INTF, BIT(0));
|
||||
}
|
||||
|
||||
/* Let the GMU know that we are about to go into slumber */
|
||||
static int a6xx_gmu_notify_slumber(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
int ret;
|
||||
|
||||
/* Disable the power counter so the GMU isn't busy */
|
||||
gmu_write(gmu, REG_A6XX_GMU_CX_GMU_POWER_COUNTER_ENABLE, 0);
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
gmu_write(gmu, REG_A8XX_GMU_CX_GMU_POWER_COUNTER_ENABLE, 0);
|
||||
else
|
||||
gmu_write(gmu, REG_A6XX_GMU_CX_GMU_POWER_COUNTER_ENABLE, 0);
|
||||
|
||||
/* Disable SPTP_PC if the CPU is responsible for it */
|
||||
if (gmu->idle_level < GMU_IDLE_STATE_SPTP)
|
||||
|
|
@ -522,10 +563,9 @@ static int a6xx_gmu_notify_slumber(struct a6xx_gmu *gmu)
|
|||
}
|
||||
|
||||
out:
|
||||
a6xx_gemnoc_workaround(gmu);
|
||||
|
||||
/* Put fence into allow mode */
|
||||
gmu_write(gmu, REG_A6XX_GMU_AO_AHB_FENCE_CTRL, 0);
|
||||
a6xx_gemnoc_workaround(gmu);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -561,16 +601,22 @@ static int a6xx_rpmh_start(struct a6xx_gmu *gmu)
|
|||
|
||||
static void a6xx_rpmh_stop(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
u32 bitmask = BIT(16);
|
||||
int ret;
|
||||
u32 val;
|
||||
|
||||
if (test_and_clear_bit(GMU_STATUS_FW_START, &gmu->status))
|
||||
return;
|
||||
|
||||
if (adreno_is_a840(adreno_gpu))
|
||||
bitmask = BIT(30);
|
||||
|
||||
gmu_write(gmu, REG_A6XX_GMU_RSCC_CONTROL_REQ, 1);
|
||||
|
||||
ret = gmu_poll_timeout_rscc(gmu, REG_A6XX_GPU_RSCC_RSC_STATUS0_DRV0,
|
||||
val, val & (1 << 16), 100, 10000);
|
||||
val, val & bitmask, 100, 10000);
|
||||
if (ret)
|
||||
DRM_DEV_ERROR(gmu->dev, "Unable to power off the GPU RSC\n");
|
||||
|
||||
|
|
@ -584,22 +630,24 @@ static inline void pdc_write(void __iomem *ptr, u32 offset, u32 value)
|
|||
writel(value, ptr + (offset << 2));
|
||||
}
|
||||
|
||||
static void __iomem *a6xx_gmu_get_mmio(struct platform_device *pdev,
|
||||
const char *name);
|
||||
|
||||
static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct platform_device *pdev = to_platform_device(gmu->dev);
|
||||
void __iomem *pdcptr = a6xx_gmu_get_mmio(pdev, "gmu_pdc");
|
||||
u32 seqmem0_drv0_reg = REG_A6XX_RSCC_SEQ_MEM_0_DRV0;
|
||||
void __iomem *seqptr = NULL;
|
||||
uint32_t pdc_address_offset;
|
||||
void __iomem *pdcptr;
|
||||
bool pdc_in_aop = false;
|
||||
|
||||
/* On A8x and above, RPMH/PDC configurations are entirely configured in AOP */
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
return;
|
||||
|
||||
pdcptr = devm_platform_ioremap_resource_byname(pdev, "gmu_pdc");
|
||||
if (IS_ERR(pdcptr))
|
||||
goto err;
|
||||
return;
|
||||
|
||||
if (adreno_is_a650_family(adreno_gpu) ||
|
||||
adreno_is_a7xx(adreno_gpu))
|
||||
|
|
@ -612,9 +660,9 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
|
|||
pdc_address_offset = 0x30080;
|
||||
|
||||
if (!pdc_in_aop) {
|
||||
seqptr = a6xx_gmu_get_mmio(pdev, "gmu_pdc_seq");
|
||||
seqptr = devm_platform_ioremap_resource_byname(pdev, "gmu_pdc_seq");
|
||||
if (IS_ERR(seqptr))
|
||||
goto err;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Disable SDE clock gating */
|
||||
|
|
@ -704,12 +752,6 @@ static void a6xx_gmu_rpmh_init(struct a6xx_gmu *gmu)
|
|||
|
||||
/* ensure no writes happen before the uCode is fully written */
|
||||
wmb();
|
||||
|
||||
err:
|
||||
if (!IS_ERR_OR_NULL(pdcptr))
|
||||
iounmap(pdcptr);
|
||||
if (!IS_ERR_OR_NULL(seqptr))
|
||||
iounmap(seqptr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -732,7 +774,7 @@ static void a6xx_gmu_power_config(struct a6xx_gmu *gmu)
|
|||
gmu_write(gmu, REG_A6XX_GMU_DCACHE_CONFIG, 0x1);
|
||||
|
||||
/* A7xx knows better by default! */
|
||||
if (adreno_is_a7xx(adreno_gpu))
|
||||
if (adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu))
|
||||
return;
|
||||
|
||||
gmu_write(gmu, REG_A6XX_GMU_PWR_COL_INTER_FRAME_CTRL, 0x9c40400);
|
||||
|
|
@ -795,7 +837,9 @@ static int a6xx_gmu_fw_load(struct a6xx_gmu *gmu)
|
|||
u32 itcm_base = 0x00000000;
|
||||
u32 dtcm_base = 0x00040000;
|
||||
|
||||
if (adreno_is_a650_family(adreno_gpu) || adreno_is_a7xx(adreno_gpu))
|
||||
if (adreno_is_a650_family(adreno_gpu) ||
|
||||
adreno_is_a7xx(adreno_gpu) ||
|
||||
adreno_is_a8xx(adreno_gpu))
|
||||
dtcm_base = 0x10004000;
|
||||
|
||||
if (gmu->legacy) {
|
||||
|
|
@ -850,7 +894,9 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)
|
|||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct msm_gpu *gpu = &adreno_gpu->base;
|
||||
const struct a6xx_info *a6xx_info = adreno_gpu->info->a6xx;
|
||||
const struct adreno_reglist *gbif_cx = a6xx_info->gbif_cx;
|
||||
u32 fence_range_lower, fence_range_upper;
|
||||
u32 chipid = 0;
|
||||
int ret;
|
||||
|
|
@ -859,12 +905,15 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)
|
|||
if (adreno_is_a650_family(adreno_gpu) || adreno_is_a7xx(adreno_gpu)) {
|
||||
gmu_write(gmu, REG_A6XX_GPU_GMU_CX_GMU_CX_FALNEXT_INTF, 1);
|
||||
gmu_write(gmu, REG_A6XX_GPU_GMU_CX_GMU_CX_FAL_INTF, 1);
|
||||
} else if (adreno_is_a8xx(adreno_gpu)) {
|
||||
gmu_write(gmu, REG_A8XX_GPU_GMU_CX_GMU_CX_FALNEXT_INTF, 1);
|
||||
gmu_write(gmu, REG_A8XX_GPU_GMU_CX_GMU_CX_FAL_INTF, 1);
|
||||
}
|
||||
|
||||
/* Turn on TCM (Tightly Coupled Memory) retention */
|
||||
if (adreno_is_a7xx(adreno_gpu))
|
||||
a6xx_llc_write(a6xx_gpu, REG_A7XX_CX_MISC_TCM_RET_CNTL, 1);
|
||||
else
|
||||
else if (!adreno_is_a8xx(adreno_gpu))
|
||||
gmu_write(gmu, REG_A6XX_GMU_GENERAL_7, 1);
|
||||
|
||||
ret = a6xx_rpmh_start(gmu);
|
||||
|
|
@ -889,7 +938,10 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)
|
|||
gmu_write(gmu, REG_A6XX_GMU_HFI_QTBL_ADDR, gmu->hfi.iova);
|
||||
gmu_write(gmu, REG_A6XX_GMU_HFI_QTBL_INFO, 1);
|
||||
|
||||
if (adreno_is_a7xx(adreno_gpu)) {
|
||||
if (adreno_is_a8xx(adreno_gpu)) {
|
||||
fence_range_upper = 0x32;
|
||||
fence_range_lower = 0x8c0;
|
||||
} else if (adreno_is_a7xx(adreno_gpu)) {
|
||||
fence_range_upper = 0x32;
|
||||
fence_range_lower = 0x8a0;
|
||||
} else {
|
||||
|
|
@ -923,7 +975,12 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)
|
|||
chipid |= (adreno_gpu->chip_id << 8) & 0x0f00; /* patchid */
|
||||
}
|
||||
|
||||
if (adreno_is_a7xx(adreno_gpu)) {
|
||||
if (adreno_is_a8xx(adreno_gpu)) {
|
||||
gmu_write(gmu, REG_A8XX_GMU_GENERAL_10, chipid);
|
||||
gmu_write(gmu, REG_A8XX_GMU_GENERAL_8,
|
||||
(gmu->log.iova & GENMASK(31, 12)) |
|
||||
((gmu->log.size / SZ_4K - 1) & GENMASK(7, 0)));
|
||||
} else if (adreno_is_a7xx(adreno_gpu)) {
|
||||
gmu_write(gmu, REG_A7XX_GMU_GENERAL_10, chipid);
|
||||
gmu_write(gmu, REG_A7XX_GMU_GENERAL_8,
|
||||
(gmu->log.iova & GENMASK(31, 12)) |
|
||||
|
|
@ -935,6 +992,15 @@ static int a6xx_gmu_fw_start(struct a6xx_gmu *gmu, unsigned int state)
|
|||
gmu->log.iova | (gmu->log.size / SZ_4K - 1));
|
||||
}
|
||||
|
||||
/* For A7x and newer, do the CX GBIF configurations before GMU wake up */
|
||||
for (int i = 0; (gbif_cx && gbif_cx[i].offset); i++)
|
||||
gpu_write(gpu, gbif_cx[i].offset, gbif_cx[i].value);
|
||||
|
||||
if (adreno_is_a8xx(adreno_gpu)) {
|
||||
gpu_write(gpu, REG_A8XX_GBIF_CX_CONFIG, 0x20023000);
|
||||
gmu_write(gmu, REG_A6XX_GMU_MRC_GBIF_QOS_CTRL, 0x33);
|
||||
}
|
||||
|
||||
/* Set up the lowest idle level on the GMU */
|
||||
a6xx_gmu_power_config(gmu);
|
||||
|
||||
|
|
@ -986,7 +1052,7 @@ static void a6xx_gmu_rpmh_off(struct a6xx_gmu *gmu)
|
|||
u32 val, seqmem_off = 0;
|
||||
|
||||
/* The second spin of A7xx GPUs messed with some register offsets.. */
|
||||
if (adreno_is_a740_family(adreno_gpu))
|
||||
if (adreno_is_a740_family(adreno_gpu) || adreno_is_a8xx(adreno_gpu))
|
||||
seqmem_off = 4;
|
||||
|
||||
/* Make sure there are no outstanding RPMh votes */
|
||||
|
|
@ -999,7 +1065,7 @@ static void a6xx_gmu_rpmh_off(struct a6xx_gmu *gmu)
|
|||
gmu_poll_timeout_rscc(gmu, REG_A6XX_RSCC_TCS3_DRV0_STATUS + seqmem_off,
|
||||
val, (val & 1), 100, 1000);
|
||||
|
||||
if (!adreno_is_a740_family(adreno_gpu))
|
||||
if (!adreno_is_a740_family(adreno_gpu) && !adreno_is_a8xx(adreno_gpu))
|
||||
return;
|
||||
|
||||
gmu_poll_timeout_rscc(gmu, REG_A7XX_RSCC_TCS4_DRV0_STATUS + seqmem_off,
|
||||
|
|
@ -1027,7 +1093,10 @@ static void a6xx_gmu_force_off(struct a6xx_gmu *gmu)
|
|||
* Turn off keep alive that might have been enabled by the hang
|
||||
* interrupt
|
||||
*/
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE, 0);
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A8XX_GMU_GMU_PWR_COL_KEEPALIVE, 0);
|
||||
else
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE, 0);
|
||||
|
||||
/* Flush all the queues */
|
||||
a6xx_hfi_stop(gmu);
|
||||
|
|
@ -1053,7 +1122,7 @@ static void a6xx_gmu_force_off(struct a6xx_gmu *gmu)
|
|||
/* Halt the gmu cm3 core */
|
||||
gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 1);
|
||||
|
||||
a6xx_bus_clear_pending_transactions(adreno_gpu, true);
|
||||
adreno_gpu->funcs->bus_halt(adreno_gpu, true);
|
||||
|
||||
/* Reset GPU core blocks */
|
||||
a6xx_gpu_sw_reset(gpu, true);
|
||||
|
|
@ -1122,6 +1191,9 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Read the slice info on A8x GPUs */
|
||||
a8xx_gpu_get_slice_info(gpu);
|
||||
|
||||
/* Set the bus quota to a reasonable value for boot */
|
||||
a6xx_gmu_set_initial_bw(gpu, gmu);
|
||||
|
||||
|
|
@ -1131,7 +1203,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu)
|
|||
enable_irq(gmu->gmu_irq);
|
||||
|
||||
/* Check to see if we are doing a cold or warm boot */
|
||||
if (adreno_is_a7xx(adreno_gpu)) {
|
||||
if (adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) {
|
||||
status = a6xx_llc_read(a6xx_gpu, REG_A7XX_CX_MISC_TCM_RET_CNTL) == 1 ?
|
||||
GMU_WARM_BOOT : GMU_COLD_BOOT;
|
||||
} else if (gmu->legacy) {
|
||||
|
|
@ -1225,7 +1297,7 @@ static void a6xx_gmu_shutdown(struct a6xx_gmu *gmu)
|
|||
if (ret)
|
||||
goto force_off;
|
||||
|
||||
a6xx_bus_clear_pending_transactions(adreno_gpu, a6xx_gpu->hung);
|
||||
adreno_gpu->funcs->bus_halt(adreno_gpu, a6xx_gpu->hung);
|
||||
|
||||
/* tell the GMU we want to slumber */
|
||||
ret = a6xx_gmu_notify_slumber(gmu);
|
||||
|
|
@ -1460,7 +1532,7 @@ static int a6xx_gmu_rpmh_bw_votes_init(struct adreno_gpu *adreno_gpu,
|
|||
vote = clamp(peak, 1, BCM_TCS_CMD_VOTE_MASK);
|
||||
|
||||
/* GMUs on A7xx votes on both x & y */
|
||||
if (adreno_is_a7xx(adreno_gpu))
|
||||
if (adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu))
|
||||
data[bcm_index] = BCM_TCS_CMD(commit, true, vote, vote);
|
||||
else
|
||||
data[bcm_index] = BCM_TCS_CMD(commit, true, 0, vote);
|
||||
|
|
@ -1492,13 +1564,14 @@ static unsigned int a6xx_gmu_get_arc_level(struct device *dev,
|
|||
}
|
||||
|
||||
static int a6xx_gmu_rpmh_arc_votes_init(struct device *dev, u32 *votes,
|
||||
unsigned long *freqs, int freqs_count, const char *id)
|
||||
unsigned long *freqs, int freqs_count,
|
||||
const char *pri_id, const char *sec_id)
|
||||
{
|
||||
int i, j;
|
||||
const u16 *pri, *sec;
|
||||
size_t pri_count, sec_count;
|
||||
|
||||
pri = cmd_db_read_aux_data(id, &pri_count);
|
||||
pri = cmd_db_read_aux_data(pri_id, &pri_count);
|
||||
if (IS_ERR(pri))
|
||||
return PTR_ERR(pri);
|
||||
/*
|
||||
|
|
@ -1509,13 +1582,7 @@ static int a6xx_gmu_rpmh_arc_votes_init(struct device *dev, u32 *votes,
|
|||
if (!pri_count)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Some targets have a separate gfx mxc rail. So try to read that first and then fall back
|
||||
* to regular mx rail if it is missing
|
||||
*/
|
||||
sec = cmd_db_read_aux_data("gmxc.lvl", &sec_count);
|
||||
if (IS_ERR(sec) && sec != ERR_PTR(-EPROBE_DEFER))
|
||||
sec = cmd_db_read_aux_data("mx.lvl", &sec_count);
|
||||
sec = cmd_db_read_aux_data(sec_id, &sec_count);
|
||||
if (IS_ERR(sec))
|
||||
return PTR_ERR(sec);
|
||||
|
||||
|
|
@ -1569,6 +1636,57 @@ static int a6xx_gmu_rpmh_arc_votes_init(struct device *dev, u32 *votes,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int a6xx_gmu_rpmh_dep_votes_init(struct device *dev, u32 *votes,
|
||||
unsigned long *freqs, int freqs_count)
|
||||
{
|
||||
const u16 *mx;
|
||||
size_t count;
|
||||
|
||||
mx = cmd_db_read_aux_data("mx.lvl", &count);
|
||||
if (IS_ERR(mx))
|
||||
return PTR_ERR(mx);
|
||||
/*
|
||||
* The data comes back as an array of unsigned shorts so adjust the
|
||||
* count accordingly
|
||||
*/
|
||||
count >>= 1;
|
||||
if (!count)
|
||||
return -EINVAL;
|
||||
|
||||
/* Fix the vote for zero frequency */
|
||||
votes[0] = 0xffffffff;
|
||||
|
||||
/* Construct a vote for rest of the corners */
|
||||
for (int i = 1; i < freqs_count; i++) {
|
||||
unsigned int level = a6xx_gmu_get_arc_level(dev, freqs[i]);
|
||||
u8 j, index = 0;
|
||||
|
||||
/* Get the primary index that matches the arc level */
|
||||
for (j = 0; j < count; j++) {
|
||||
if (mx[j] >= level) {
|
||||
index = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j == count) {
|
||||
DRM_DEV_ERROR(dev,
|
||||
"Mx Level %u not found in the RPMh list\n",
|
||||
level);
|
||||
DRM_DEV_ERROR(dev, "Available levels:\n");
|
||||
for (j = 0; j < count; j++)
|
||||
DRM_DEV_ERROR(dev, " %u\n", mx[j]);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Construct the vote */
|
||||
votes[i] = (0x3fff << 14) | (index << 8) | (0xff);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The GMU votes with the RPMh for itself and on behalf of the GPU but we need
|
||||
* to construct the list of votes on the CPU and send it over. Query the RPMh
|
||||
|
|
@ -1583,15 +1701,27 @@ static int a6xx_gmu_rpmh_votes_init(struct a6xx_gmu *gmu)
|
|||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
const struct a6xx_info *info = adreno_gpu->info->a6xx;
|
||||
struct msm_gpu *gpu = &adreno_gpu->base;
|
||||
const char *sec_id;
|
||||
const u16 *gmxc;
|
||||
int ret;
|
||||
|
||||
gmxc = cmd_db_read_aux_data("gmxc.lvl", NULL);
|
||||
if (gmxc == ERR_PTR(-EPROBE_DEFER))
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
/* If GMxC is present, prefer that as secondary rail for GX votes */
|
||||
sec_id = IS_ERR_OR_NULL(gmxc) ? "mx.lvl" : "gmxc.lvl";
|
||||
|
||||
/* Build the GX votes */
|
||||
ret = a6xx_gmu_rpmh_arc_votes_init(&gpu->pdev->dev, gmu->gx_arc_votes,
|
||||
gmu->gpu_freqs, gmu->nr_gpu_freqs, "gfx.lvl");
|
||||
gmu->gpu_freqs, gmu->nr_gpu_freqs, "gfx.lvl", sec_id);
|
||||
|
||||
/* Build the CX votes */
|
||||
ret |= a6xx_gmu_rpmh_arc_votes_init(gmu->dev, gmu->cx_arc_votes,
|
||||
gmu->gmu_freqs, gmu->nr_gmu_freqs, "cx.lvl");
|
||||
gmu->gmu_freqs, gmu->nr_gmu_freqs, "cx.lvl", "mx.lvl");
|
||||
|
||||
ret |= a6xx_gmu_rpmh_dep_votes_init(gmu->dev, gmu->dep_arc_votes,
|
||||
gmu->gpu_freqs, gmu->nr_gpu_freqs);
|
||||
|
||||
/* Build the interconnect votes */
|
||||
if (info->bcms && gmu->nr_gpu_bws > 1)
|
||||
|
|
@ -1795,27 +1925,6 @@ static int a6xx_gmu_clocks_probe(struct a6xx_gmu *gmu)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void __iomem *a6xx_gmu_get_mmio(struct platform_device *pdev,
|
||||
const char *name)
|
||||
{
|
||||
void __iomem *ret;
|
||||
struct resource *res = platform_get_resource_byname(pdev,
|
||||
IORESOURCE_MEM, name);
|
||||
|
||||
if (!res) {
|
||||
DRM_DEV_ERROR(&pdev->dev, "Unable to find the %s registers\n", name);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
ret = ioremap(res->start, resource_size(res));
|
||||
if (!ret) {
|
||||
DRM_DEV_ERROR(&pdev->dev, "Unable to map the %s registers\n", name);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int a6xx_gmu_get_irq(struct a6xx_gmu *gmu, struct platform_device *pdev,
|
||||
const char *name, irq_handler_t handler)
|
||||
{
|
||||
|
|
@ -1866,7 +1975,6 @@ void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu)
|
|||
{
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
|
||||
struct platform_device *pdev = to_platform_device(gmu->dev);
|
||||
|
||||
mutex_lock(&gmu->lock);
|
||||
if (!gmu->initialized) {
|
||||
|
|
@ -1895,12 +2003,11 @@ void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu)
|
|||
qmp_put(gmu->qmp);
|
||||
|
||||
iounmap(gmu->mmio);
|
||||
if (platform_get_resource_byname(pdev, IORESOURCE_MEM, "rscc"))
|
||||
iounmap(gmu->rscc);
|
||||
gmu->mmio = NULL;
|
||||
gmu->rscc = NULL;
|
||||
|
||||
if (!adreno_has_gmu_wrapper(adreno_gpu)) {
|
||||
if (!adreno_has_gmu_wrapper(adreno_gpu) &&
|
||||
!adreno_has_rgmu(adreno_gpu)) {
|
||||
a6xx_gmu_memory_free(gmu);
|
||||
|
||||
free_irq(gmu->gmu_irq, gmu);
|
||||
|
|
@ -1922,10 +2029,38 @@ static int cxpd_notifier_cb(struct notifier_block *nb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void __iomem *a6xx_gmu_get_mmio(struct platform_device *pdev,
|
||||
const char *name, resource_size_t *start)
|
||||
{
|
||||
void __iomem *ret;
|
||||
struct resource *res = platform_get_resource_byname(pdev,
|
||||
IORESOURCE_MEM, name);
|
||||
|
||||
if (!res) {
|
||||
DRM_DEV_ERROR(&pdev->dev, "Unable to find the %s registers\n", name);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
ret = ioremap(res->start, resource_size(res));
|
||||
if (!ret) {
|
||||
DRM_DEV_ERROR(&pdev->dev, "Unable to map the %s registers\n", name);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
if (start)
|
||||
*start = res->start;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int a6xx_gmu_wrapper_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
||||
{
|
||||
struct platform_device *pdev = of_find_device_by_node(node);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct msm_gpu *gpu = &adreno_gpu->base;
|
||||
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
|
||||
resource_size_t start;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
||||
if (!pdev)
|
||||
|
|
@ -1942,13 +2077,29 @@ int a6xx_gmu_wrapper_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
/* Mark legacy for manual SPTPRAC control */
|
||||
gmu->legacy = true;
|
||||
|
||||
/* RGMU requires clocks */
|
||||
ret = devm_clk_bulk_get_all(gmu->dev, &gmu->clocks);
|
||||
if (ret < 0)
|
||||
goto err_clk;
|
||||
|
||||
gmu->nr_clocks = ret;
|
||||
|
||||
/* Map the GMU registers */
|
||||
gmu->mmio = a6xx_gmu_get_mmio(pdev, "gmu");
|
||||
gmu->mmio = a6xx_gmu_get_mmio(pdev, "gmu", &start);
|
||||
if (IS_ERR(gmu->mmio)) {
|
||||
ret = PTR_ERR(gmu->mmio);
|
||||
goto err_mmio;
|
||||
}
|
||||
|
||||
res = platform_get_resource_byname(gpu->pdev, IORESOURCE_MEM, "kgsl_3d0_reg_memory");
|
||||
if (!res) {
|
||||
ret = -EINVAL;
|
||||
goto err_mmio;
|
||||
}
|
||||
|
||||
/* Identify gmu base offset from gpu base address */
|
||||
gmu->mmio_offset = (u32)(start - res->start);
|
||||
|
||||
gmu->cxpd = dev_pm_domain_attach_by_name(gmu->dev, "cx");
|
||||
if (IS_ERR(gmu->cxpd)) {
|
||||
ret = PTR_ERR(gmu->cxpd);
|
||||
|
|
@ -1981,6 +2132,7 @@ int a6xx_gmu_wrapper_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
err_mmio:
|
||||
iounmap(gmu->mmio);
|
||||
|
||||
err_clk:
|
||||
/* Drop reference taken in of_find_device_by_node */
|
||||
put_device(gmu->dev);
|
||||
|
||||
|
|
@ -1989,10 +2141,13 @@ int a6xx_gmu_wrapper_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
|
||||
int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
|
||||
struct platform_device *pdev = of_find_device_by_node(node);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct msm_gpu *gpu = &adreno_gpu->base;
|
||||
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
|
||||
struct device_link *link;
|
||||
resource_size_t start;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
||||
if (!pdev)
|
||||
|
|
@ -2028,13 +2183,14 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
*/
|
||||
gmu->dummy.size = SZ_4K;
|
||||
if (adreno_is_a660_family(adreno_gpu) ||
|
||||
adreno_is_a7xx(adreno_gpu)) {
|
||||
adreno_is_a7xx(adreno_gpu) ||
|
||||
adreno_is_a8xx(adreno_gpu)) {
|
||||
ret = a6xx_gmu_memory_alloc(gmu, &gmu->debug, SZ_4K * 7,
|
||||
0x60400000, "debug");
|
||||
if (ret)
|
||||
goto err_memory;
|
||||
|
||||
gmu->dummy.size = SZ_8K;
|
||||
gmu->dummy.size = SZ_16K;
|
||||
}
|
||||
|
||||
/* Allocate memory for the GMU dummy page */
|
||||
|
|
@ -2045,7 +2201,8 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
|
||||
/* Note that a650 family also includes a660 family: */
|
||||
if (adreno_is_a650_family(adreno_gpu) ||
|
||||
adreno_is_a7xx(adreno_gpu)) {
|
||||
adreno_is_a7xx(adreno_gpu) ||
|
||||
adreno_is_a8xx(adreno_gpu)) {
|
||||
ret = a6xx_gmu_memory_alloc(gmu, &gmu->icache,
|
||||
SZ_16M - SZ_16K, 0x04000, "icache");
|
||||
if (ret)
|
||||
|
|
@ -2087,19 +2244,30 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
goto err_memory;
|
||||
|
||||
/* Map the GMU registers */
|
||||
gmu->mmio = a6xx_gmu_get_mmio(pdev, "gmu");
|
||||
gmu->mmio = a6xx_gmu_get_mmio(pdev, "gmu", &start);
|
||||
if (IS_ERR(gmu->mmio)) {
|
||||
ret = PTR_ERR(gmu->mmio);
|
||||
goto err_memory;
|
||||
}
|
||||
|
||||
res = platform_get_resource_byname(gpu->pdev, IORESOURCE_MEM, "kgsl_3d0_reg_memory");
|
||||
if (!res) {
|
||||
ret = -EINVAL;
|
||||
goto err_mmio;
|
||||
}
|
||||
|
||||
/* Identify gmu base offset from gpu base address */
|
||||
gmu->mmio_offset = (u32)(start - res->start);
|
||||
|
||||
if (adreno_is_a650_family(adreno_gpu) ||
|
||||
adreno_is_a7xx(adreno_gpu)) {
|
||||
gmu->rscc = a6xx_gmu_get_mmio(pdev, "rscc");
|
||||
gmu->rscc = devm_platform_ioremap_resource_byname(pdev, "rscc");
|
||||
if (IS_ERR(gmu->rscc)) {
|
||||
ret = -ENODEV;
|
||||
goto err_mmio;
|
||||
}
|
||||
} else if (adreno_is_a8xx(adreno_gpu)) {
|
||||
gmu->rscc = gmu->mmio + 0x19000;
|
||||
} else {
|
||||
gmu->rscc = gmu->mmio + 0x23000;
|
||||
}
|
||||
|
|
@ -2173,8 +2341,6 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
|
|||
|
||||
err_mmio:
|
||||
iounmap(gmu->mmio);
|
||||
if (platform_get_resource_byname(pdev, IORESOURCE_MEM, "rscc"))
|
||||
iounmap(gmu->rscc);
|
||||
free_irq(gmu->gmu_irq, gmu);
|
||||
free_irq(gmu->hfi_irq, gmu);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ struct a6xx_gmu_bo {
|
|||
u64 iova;
|
||||
};
|
||||
|
||||
#define GMU_MAX_GX_FREQS 16
|
||||
#define GMU_MAX_CX_FREQS 4
|
||||
#define GMU_MAX_GX_FREQS 32
|
||||
#define GMU_MAX_CX_FREQS 6
|
||||
#define GMU_MAX_BCMS 3
|
||||
|
||||
struct a6xx_bcm {
|
||||
|
|
@ -68,6 +68,7 @@ struct a6xx_gmu {
|
|||
struct drm_gpuvm *vm;
|
||||
|
||||
void __iomem *mmio;
|
||||
u32 mmio_offset;
|
||||
void __iomem *rscc;
|
||||
|
||||
int hfi_irq;
|
||||
|
|
@ -96,6 +97,7 @@ struct a6xx_gmu {
|
|||
int nr_gpu_freqs;
|
||||
unsigned long gpu_freqs[GMU_MAX_GX_FREQS];
|
||||
u32 gx_arc_votes[GMU_MAX_GX_FREQS];
|
||||
u32 dep_arc_votes[GMU_MAX_GX_FREQS];
|
||||
struct a6xx_hfi_acd_table acd_table;
|
||||
|
||||
int nr_gpu_bws;
|
||||
|
|
@ -130,20 +132,23 @@ struct a6xx_gmu {
|
|||
unsigned long status;
|
||||
};
|
||||
|
||||
#define GMU_BYTE_OFFSET(gmu, offset) (((offset) << 2) - (gmu)->mmio_offset)
|
||||
|
||||
static inline u32 gmu_read(struct a6xx_gmu *gmu, u32 offset)
|
||||
{
|
||||
return readl(gmu->mmio + (offset << 2));
|
||||
/* The 'offset' is based on GPU's start address. Adjust it */
|
||||
return readl(gmu->mmio + GMU_BYTE_OFFSET(gmu, offset));
|
||||
}
|
||||
|
||||
static inline void gmu_write(struct a6xx_gmu *gmu, u32 offset, u32 value)
|
||||
{
|
||||
writel(value, gmu->mmio + (offset << 2));
|
||||
writel(value, gmu->mmio + GMU_BYTE_OFFSET(gmu, offset));
|
||||
}
|
||||
|
||||
static inline void
|
||||
gmu_write_bulk(struct a6xx_gmu *gmu, u32 offset, const u32 *data, u32 size)
|
||||
{
|
||||
memcpy_toio(gmu->mmio + (offset << 2), data, size);
|
||||
memcpy_toio(gmu->mmio + GMU_BYTE_OFFSET(gmu, offset), data, size);
|
||||
wmb();
|
||||
}
|
||||
|
||||
|
|
@ -160,17 +165,17 @@ static inline u64 gmu_read64(struct a6xx_gmu *gmu, u32 lo, u32 hi)
|
|||
{
|
||||
u64 val;
|
||||
|
||||
val = (u64) readl(gmu->mmio + (lo << 2));
|
||||
val |= ((u64) readl(gmu->mmio + (hi << 2)) << 32);
|
||||
val = gmu_read(gmu, lo);
|
||||
val |= ((u64) gmu_read(gmu, hi) << 32);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
#define gmu_poll_timeout(gmu, addr, val, cond, interval, timeout) \
|
||||
readl_poll_timeout((gmu)->mmio + ((addr) << 2), val, cond, \
|
||||
interval, timeout)
|
||||
readl_poll_timeout((gmu)->mmio + (GMU_BYTE_OFFSET(gmu, addr)), val, \
|
||||
cond, interval, timeout)
|
||||
#define gmu_poll_timeout_atomic(gmu, addr, val, cond, interval, timeout) \
|
||||
readl_poll_timeout_atomic((gmu)->mmio + ((addr) << 2), val, cond, \
|
||||
readl_poll_timeout_atomic((gmu)->mmio + (GMU_BYTE_OFFSET(gmu, addr)), val, cond, \
|
||||
interval, timeout)
|
||||
|
||||
static inline u32 gmu_read_rscc(struct a6xx_gmu *gmu, u32 offset)
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ static void update_shadow_rptr(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
|||
}
|
||||
}
|
||||
|
||||
static void a6xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
||||
void a6xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
|
@ -224,7 +224,7 @@ static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
|
|||
OUT_RING(ring, submit->seqno - 1);
|
||||
|
||||
OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
|
||||
OUT_RING(ring, CP_SET_THREAD_BOTH);
|
||||
OUT_RING(ring, CP_THREAD_CONTROL_0_SYNC_THREADS | CP_SET_THREAD_BOTH);
|
||||
|
||||
/* Reset state used to synchronize BR and BV */
|
||||
OUT_PKT7(ring, CP_RESET_CONTEXT_STATE, 1);
|
||||
|
|
@ -235,18 +235,31 @@ static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
|
|||
CP_RESET_CONTEXT_STATE_0_RESET_GLOBAL_LOCAL_TS);
|
||||
|
||||
OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
|
||||
OUT_RING(ring, CP_SET_THREAD_BR);
|
||||
OUT_RING(ring, CP_THREAD_CONTROL_0_SYNC_THREADS | CP_SET_THREAD_BOTH);
|
||||
|
||||
OUT_PKT7(ring, CP_EVENT_WRITE, 1);
|
||||
OUT_RING(ring, LRZ_FLUSH_INVALIDATE);
|
||||
|
||||
OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
|
||||
OUT_RING(ring, CP_THREAD_CONTROL_0_SYNC_THREADS | CP_SET_THREAD_BR);
|
||||
}
|
||||
|
||||
if (!sysprof) {
|
||||
if (!adreno_is_a7xx(adreno_gpu)) {
|
||||
if (!(adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu))) {
|
||||
/* Turn off protected mode to write to special registers */
|
||||
OUT_PKT7(ring, CP_SET_PROTECTED_MODE, 1);
|
||||
OUT_RING(ring, 0);
|
||||
}
|
||||
|
||||
OUT_PKT4(ring, REG_A6XX_RBBM_PERFCTR_SRAM_INIT_CMD, 1);
|
||||
OUT_RING(ring, 1);
|
||||
if (adreno_is_a8xx(adreno_gpu)) {
|
||||
OUT_PKT4(ring, REG_A8XX_RBBM_PERFCTR_SRAM_INIT_CMD, 1);
|
||||
OUT_RING(ring, 1);
|
||||
OUT_PKT4(ring, REG_A8XX_RBBM_SLICE_PERFCTR_SRAM_INIT_CMD, 1);
|
||||
OUT_RING(ring, 1);
|
||||
} else {
|
||||
OUT_PKT4(ring, REG_A6XX_RBBM_PERFCTR_SRAM_INIT_CMD, 1);
|
||||
OUT_RING(ring, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Execute the table update */
|
||||
|
|
@ -275,7 +288,7 @@ static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
|
|||
* to make sure BV doesn't race ahead while BR is still switching
|
||||
* pagetables.
|
||||
*/
|
||||
if (adreno_is_a7xx(&a6xx_gpu->base)) {
|
||||
if (adreno_is_a7xx(&a6xx_gpu->base) || adreno_is_a8xx(&a6xx_gpu->base)) {
|
||||
OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
|
||||
OUT_RING(ring, CP_THREAD_CONTROL_0_SYNC_THREADS | CP_SET_THREAD_BR);
|
||||
}
|
||||
|
|
@ -289,20 +302,22 @@ static void a6xx_set_pagetable(struct a6xx_gpu *a6xx_gpu,
|
|||
OUT_RING(ring, CACHE_INVALIDATE);
|
||||
|
||||
if (!sysprof) {
|
||||
u32 reg_status = adreno_is_a8xx(adreno_gpu) ?
|
||||
REG_A8XX_RBBM_PERFCTR_SRAM_INIT_STATUS :
|
||||
REG_A6XX_RBBM_PERFCTR_SRAM_INIT_STATUS;
|
||||
/*
|
||||
* Wait for SRAM clear after the pgtable update, so the
|
||||
* two can happen in parallel:
|
||||
*/
|
||||
OUT_PKT7(ring, CP_WAIT_REG_MEM, 6);
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_0_FUNCTION(WRITE_EQ));
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_POLL_ADDR_LO(
|
||||
REG_A6XX_RBBM_PERFCTR_SRAM_INIT_STATUS));
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_POLL_ADDR_LO(reg_status));
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_POLL_ADDR_HI(0));
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_3_REF(0x1));
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_4_MASK(0x1));
|
||||
OUT_RING(ring, CP_WAIT_REG_MEM_5_DELAY_LOOP_CYCLES(0));
|
||||
|
||||
if (!adreno_is_a7xx(adreno_gpu)) {
|
||||
if (!(adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu))) {
|
||||
/* Re-enable protected mode: */
|
||||
OUT_PKT7(ring, CP_SET_PROTECTED_MODE, 1);
|
||||
OUT_RING(ring, 1);
|
||||
|
|
@ -375,7 +390,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
|||
rbmemptr_stats(ring, index, alwayson_end));
|
||||
|
||||
/* Write the fence to the scratch register */
|
||||
OUT_PKT4(ring, REG_A6XX_CP_SCRATCH_REG(2), 1);
|
||||
OUT_PKT4(ring, REG_A6XX_CP_SCRATCH(2), 1);
|
||||
OUT_RING(ring, submit->seqno);
|
||||
|
||||
/*
|
||||
|
|
@ -440,6 +455,7 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
|||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
struct msm_ringbuffer *ring = submit->ring;
|
||||
u32 rbbm_perfctr_cp0, cp_always_on_counter;
|
||||
unsigned int i, ibs = 0;
|
||||
|
||||
adreno_check_and_reenable_stall(adreno_gpu);
|
||||
|
|
@ -460,10 +476,16 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
|||
if (gpu->nr_rings > 1)
|
||||
a6xx_emit_set_pseudo_reg(ring, a6xx_gpu, submit->queue);
|
||||
|
||||
get_stats_counter(ring, REG_A7XX_RBBM_PERFCTR_CP(0),
|
||||
rbmemptr_stats(ring, index, cpcycles_start));
|
||||
get_stats_counter(ring, REG_A6XX_CP_ALWAYS_ON_COUNTER,
|
||||
rbmemptr_stats(ring, index, alwayson_start));
|
||||
if (adreno_is_a8xx(adreno_gpu)) {
|
||||
rbbm_perfctr_cp0 = REG_A8XX_RBBM_PERFCTR_CP(0);
|
||||
cp_always_on_counter = REG_A8XX_CP_ALWAYS_ON_COUNTER;
|
||||
} else {
|
||||
rbbm_perfctr_cp0 = REG_A7XX_RBBM_PERFCTR_CP(0);
|
||||
cp_always_on_counter = REG_A6XX_CP_ALWAYS_ON_COUNTER;
|
||||
}
|
||||
|
||||
get_stats_counter(ring, rbbm_perfctr_cp0, rbmemptr_stats(ring, index, cpcycles_start));
|
||||
get_stats_counter(ring, cp_always_on_counter, rbmemptr_stats(ring, index, alwayson_start));
|
||||
|
||||
OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
|
||||
OUT_RING(ring, CP_SET_THREAD_BOTH);
|
||||
|
|
@ -510,14 +532,17 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
|||
OUT_RING(ring, 0x00e); /* IB1LIST end */
|
||||
}
|
||||
|
||||
get_stats_counter(ring, REG_A7XX_RBBM_PERFCTR_CP(0),
|
||||
rbmemptr_stats(ring, index, cpcycles_end));
|
||||
get_stats_counter(ring, REG_A6XX_CP_ALWAYS_ON_COUNTER,
|
||||
rbmemptr_stats(ring, index, alwayson_end));
|
||||
get_stats_counter(ring, rbbm_perfctr_cp0, rbmemptr_stats(ring, index, cpcycles_end));
|
||||
get_stats_counter(ring, cp_always_on_counter, rbmemptr_stats(ring, index, alwayson_end));
|
||||
|
||||
/* Write the fence to the scratch register */
|
||||
OUT_PKT4(ring, REG_A6XX_CP_SCRATCH_REG(2), 1);
|
||||
OUT_RING(ring, submit->seqno);
|
||||
if (adreno_is_a8xx(adreno_gpu)) {
|
||||
OUT_PKT4(ring, REG_A8XX_CP_SCRATCH_GLOBAL(2), 1);
|
||||
OUT_RING(ring, submit->seqno);
|
||||
} else {
|
||||
OUT_PKT4(ring, REG_A6XX_CP_SCRATCH(2), 1);
|
||||
OUT_RING(ring, submit->seqno);
|
||||
}
|
||||
|
||||
OUT_PKT7(ring, CP_THREAD_CONTROL, 1);
|
||||
OUT_RING(ring, CP_SET_THREAD_BR);
|
||||
|
|
@ -612,15 +637,26 @@ static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)
|
|||
|
||||
if (adreno_is_a630(adreno_gpu))
|
||||
clock_cntl_on = 0x8aa8aa02;
|
||||
else if (adreno_is_a610(adreno_gpu))
|
||||
else if (adreno_is_a610(adreno_gpu) || adreno_is_a612(adreno_gpu))
|
||||
clock_cntl_on = 0xaaa8aa82;
|
||||
else if (adreno_is_a702(adreno_gpu))
|
||||
clock_cntl_on = 0xaaaaaa82;
|
||||
else
|
||||
clock_cntl_on = 0x8aa8aa82;
|
||||
|
||||
cgc_delay = adreno_is_a615_family(adreno_gpu) ? 0x111 : 0x10111;
|
||||
cgc_hyst = adreno_is_a615_family(adreno_gpu) ? 0x555 : 0x5555;
|
||||
if (adreno_is_a612(adreno_gpu))
|
||||
cgc_delay = 0x11;
|
||||
else if (adreno_is_a615_family(adreno_gpu))
|
||||
cgc_delay = 0x111;
|
||||
else
|
||||
cgc_delay = 0x10111;
|
||||
|
||||
if (adreno_is_a612(adreno_gpu))
|
||||
cgc_hyst = 0x55;
|
||||
else if (adreno_is_a615_family(adreno_gpu))
|
||||
cgc_hyst = 0x555;
|
||||
else
|
||||
cgc_hyst = 0x5555;
|
||||
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL,
|
||||
state ? adreno_gpu->info->a6xx->gmu_cgc_mode : 0);
|
||||
|
|
@ -706,14 +742,20 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu)
|
|||
/* Copy the data into the internal struct to drop the const qualifier (temporarily) */
|
||||
*cfg = *common_cfg;
|
||||
|
||||
cfg->ubwc_swizzle = 0x6;
|
||||
cfg->highest_bank_bit = 15;
|
||||
/* Use common config as is for A8x */
|
||||
if (!adreno_is_a8xx(gpu)) {
|
||||
cfg->ubwc_swizzle = 0x6;
|
||||
cfg->highest_bank_bit = 15;
|
||||
}
|
||||
|
||||
if (adreno_is_a610(gpu)) {
|
||||
cfg->highest_bank_bit = 13;
|
||||
cfg->ubwc_swizzle = 0x7;
|
||||
}
|
||||
|
||||
if (adreno_is_a612(gpu))
|
||||
cfg->highest_bank_bit = 14;
|
||||
|
||||
if (adreno_is_a618(gpu))
|
||||
cfg->highest_bank_bit = 14;
|
||||
|
||||
|
|
@ -993,7 +1035,7 @@ static bool a6xx_ucode_check_version(struct a6xx_gpu *a6xx_gpu,
|
|||
return false;
|
||||
|
||||
/* A7xx is safe! */
|
||||
if (adreno_is_a7xx(adreno_gpu) || adreno_is_a702(adreno_gpu))
|
||||
if (adreno_is_a7xx(adreno_gpu) || adreno_is_a702(adreno_gpu) || adreno_is_a8xx(adreno_gpu))
|
||||
return true;
|
||||
|
||||
/*
|
||||
|
|
@ -1076,6 +1118,23 @@ static int a6xx_ucode_load(struct msm_gpu *gpu)
|
|||
}
|
||||
}
|
||||
|
||||
if (!a6xx_gpu->aqe_bo && adreno_gpu->fw[ADRENO_FW_AQE]) {
|
||||
a6xx_gpu->aqe_bo = adreno_fw_create_bo(gpu,
|
||||
adreno_gpu->fw[ADRENO_FW_AQE], &a6xx_gpu->aqe_iova);
|
||||
|
||||
if (IS_ERR(a6xx_gpu->aqe_bo)) {
|
||||
int ret = PTR_ERR(a6xx_gpu->aqe_bo);
|
||||
|
||||
a6xx_gpu->aqe_bo = NULL;
|
||||
DRM_DEV_ERROR(&gpu->pdev->dev,
|
||||
"Could not allocate AQE ucode: %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
msm_gem_object_set_name(a6xx_gpu->aqe_bo, "aqefw");
|
||||
}
|
||||
|
||||
/*
|
||||
* Expanded APRIV and targets that support WHERE_AM_I both need a
|
||||
* privileged buffer to store the RPTR shadow
|
||||
|
|
@ -1107,7 +1166,7 @@ static int a6xx_ucode_load(struct msm_gpu *gpu)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int a6xx_zap_shader_init(struct msm_gpu *gpu)
|
||||
int a6xx_zap_shader_init(struct msm_gpu *gpu)
|
||||
{
|
||||
static bool loaded;
|
||||
int ret;
|
||||
|
|
@ -1220,17 +1279,20 @@ static int hw_init(struct msm_gpu *gpu)
|
|||
/* enable hardware clockgating */
|
||||
a6xx_set_hwcg(gpu, true);
|
||||
|
||||
/* VBIF/GBIF start*/
|
||||
if (adreno_is_a610_family(adreno_gpu) ||
|
||||
adreno_is_a640_family(adreno_gpu) ||
|
||||
adreno_is_a650_family(adreno_gpu) ||
|
||||
adreno_is_a7xx(adreno_gpu)) {
|
||||
/* For gmuwrapper implementations, do the VBIF/GBIF CX configuration here */
|
||||
if (adreno_is_a610_family(adreno_gpu)) {
|
||||
gpu_write(gpu, REG_A6XX_GBIF_QSB_SIDE0, 0x00071620);
|
||||
gpu_write(gpu, REG_A6XX_GBIF_QSB_SIDE1, 0x00071620);
|
||||
gpu_write(gpu, REG_A6XX_GBIF_QSB_SIDE2, 0x00071620);
|
||||
gpu_write(gpu, REG_A6XX_GBIF_QSB_SIDE3, 0x00071620);
|
||||
gpu_write(gpu, REG_A6XX_RBBM_GBIF_CLIENT_QOS_CNTL,
|
||||
adreno_is_a7xx(adreno_gpu) ? 0x2120212 : 0x3);
|
||||
}
|
||||
|
||||
if (adreno_is_a610_family(adreno_gpu) ||
|
||||
adreno_is_a640_family(adreno_gpu) ||
|
||||
adreno_is_a650_family(adreno_gpu)) {
|
||||
gpu_write(gpu, REG_A6XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x3);
|
||||
} else if (adreno_is_a7xx(adreno_gpu)) {
|
||||
gpu_write(gpu, REG_A6XX_RBBM_GBIF_CLIENT_QOS_CNTL, 0x2120212);
|
||||
} else {
|
||||
gpu_write(gpu, REG_A6XX_RBBM_VBIF_CLIENT_QOS_CNTL, 0x3);
|
||||
}
|
||||
|
|
@ -1285,10 +1347,10 @@ static int hw_init(struct msm_gpu *gpu)
|
|||
}
|
||||
|
||||
if (adreno_is_a660_family(adreno_gpu))
|
||||
gpu_write(gpu, REG_A6XX_CP_LPAC_PROG_FIFO_SIZE, 0x00000020);
|
||||
gpu_write(gpu, REG_A7XX_CP_LPAC_PROG_FIFO_SIZE, 0x00000020);
|
||||
|
||||
/* Setting the mem pool size */
|
||||
if (adreno_is_a610(adreno_gpu)) {
|
||||
if (adreno_is_a610(adreno_gpu) || adreno_is_a612(adreno_gpu)) {
|
||||
gpu_write(gpu, REG_A6XX_CP_MEM_POOL_SIZE, 48);
|
||||
gpu_write(gpu, REG_A6XX_CP_MEM_POOL_DBG_ADDR, 47);
|
||||
} else if (adreno_is_a702(adreno_gpu)) {
|
||||
|
|
@ -1321,7 +1383,8 @@ static int hw_init(struct msm_gpu *gpu)
|
|||
a6xx_set_ubwc_config(gpu);
|
||||
|
||||
/* Enable fault detection */
|
||||
if (adreno_is_a730(adreno_gpu) ||
|
||||
if (adreno_is_a612(adreno_gpu) ||
|
||||
adreno_is_a730(adreno_gpu) ||
|
||||
adreno_is_a740_family(adreno_gpu))
|
||||
gpu_write(gpu, REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL, (1 << 30) | 0xcfffff);
|
||||
else if (adreno_is_a690(adreno_gpu))
|
||||
|
|
@ -1540,7 +1603,7 @@ static void a6xx_recover(struct msm_gpu *gpu)
|
|||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
|
||||
int i, active_submits;
|
||||
int active_submits;
|
||||
|
||||
adreno_dump_info(gpu);
|
||||
|
||||
|
|
@ -1548,10 +1611,6 @@ static void a6xx_recover(struct msm_gpu *gpu)
|
|||
/* Sometimes crashstate capture is skipped, so SQE should be halted here again */
|
||||
gpu_write(gpu, REG_A6XX_CP_SQE_CNTL, 3);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
DRM_DEV_INFO(&gpu->pdev->dev, "CP_SCRATCH_REG%d: %u\n", i,
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(i)));
|
||||
|
||||
if (hang_debug)
|
||||
a6xx_dump(gpu);
|
||||
|
||||
|
|
@ -1576,9 +1635,9 @@ static void a6xx_recover(struct msm_gpu *gpu)
|
|||
*/
|
||||
gpu->active_submits = 0;
|
||||
|
||||
if (adreno_has_gmu_wrapper(adreno_gpu)) {
|
||||
if (adreno_has_gmu_wrapper(adreno_gpu) || adreno_has_rgmu(adreno_gpu)) {
|
||||
/* Drain the outstanding traffic on memory buses */
|
||||
a6xx_bus_clear_pending_transactions(adreno_gpu, true);
|
||||
adreno_gpu->funcs->bus_halt(adreno_gpu, true);
|
||||
|
||||
/* Reset the GPU to a clean state */
|
||||
a6xx_gpu_sw_reset(gpu, true);
|
||||
|
|
@ -1737,10 +1796,10 @@ static int a6xx_fault_handler(void *arg, unsigned long iova, int flags, void *da
|
|||
const char *block = "unknown";
|
||||
|
||||
u32 scratch[] = {
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(4)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(5)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(6)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(7)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH(4)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH(5)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH(6)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH(7)),
|
||||
};
|
||||
|
||||
if (info)
|
||||
|
|
@ -2072,7 +2131,7 @@ static int a7xx_cx_mem_init(struct a6xx_gpu *a6xx_gpu)
|
|||
u32 fuse_val;
|
||||
int ret;
|
||||
|
||||
if (adreno_is_a750(adreno_gpu)) {
|
||||
if (adreno_is_a750(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) {
|
||||
/*
|
||||
* Assume that if qcom scm isn't available, that whatever
|
||||
* replacement allows writing the fuse register ourselves.
|
||||
|
|
@ -2098,9 +2157,9 @@ static int a7xx_cx_mem_init(struct a6xx_gpu *a6xx_gpu)
|
|||
return ret;
|
||||
|
||||
/*
|
||||
* On a750 raytracing may be disabled by the firmware, find out
|
||||
* whether that's the case. The scm call above sets the fuse
|
||||
* register.
|
||||
* On A7XX_GEN3 and newer, raytracing may be disabled by the
|
||||
* firmware, find out whether that's the case. The scm call
|
||||
* above sets the fuse register.
|
||||
*/
|
||||
fuse_val = a6xx_llc_read(a6xx_gpu,
|
||||
REG_A7XX_CX_MISC_SW_FUSE_VALUE);
|
||||
|
|
@ -2161,7 +2220,7 @@ void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, bool gx_
|
|||
void a6xx_gpu_sw_reset(struct msm_gpu *gpu, bool assert)
|
||||
{
|
||||
/* 11nm chips (e.g. ones with A610) have hw issues with the reset line! */
|
||||
if (adreno_is_a610(to_adreno_gpu(gpu)))
|
||||
if (adreno_is_a610(to_adreno_gpu(gpu)) || adreno_is_a8xx(to_adreno_gpu(gpu)))
|
||||
return;
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RBBM_SW_RESET_CMD, assert);
|
||||
|
|
@ -2192,7 +2251,12 @@ static int a6xx_gmu_pm_resume(struct msm_gpu *gpu)
|
|||
|
||||
msm_devfreq_resume(gpu);
|
||||
|
||||
adreno_is_a7xx(adreno_gpu) ? a7xx_llc_activate(a6xx_gpu) : a6xx_llc_activate(a6xx_gpu);
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
a8xx_llc_activate(a6xx_gpu);
|
||||
else if (adreno_is_a7xx(adreno_gpu))
|
||||
a7xx_llc_activate(a6xx_gpu);
|
||||
else
|
||||
a6xx_llc_activate(a6xx_gpu);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -2229,6 +2293,12 @@ static int a6xx_pm_resume(struct msm_gpu *gpu)
|
|||
if (ret)
|
||||
goto err_bulk_clk;
|
||||
|
||||
ret = clk_bulk_prepare_enable(gmu->nr_clocks, gmu->clocks);
|
||||
if (ret) {
|
||||
clk_bulk_disable_unprepare(gpu->nr_clocks, gpu->grp_clks);
|
||||
goto err_bulk_clk;
|
||||
}
|
||||
|
||||
if (adreno_is_a619_holi(adreno_gpu))
|
||||
a6xx_sptprac_enable(gmu);
|
||||
|
||||
|
|
@ -2242,8 +2312,10 @@ static int a6xx_pm_resume(struct msm_gpu *gpu)
|
|||
err_set_opp:
|
||||
mutex_unlock(&a6xx_gpu->gmu.lock);
|
||||
|
||||
if (!ret)
|
||||
if (!ret) {
|
||||
msm_devfreq_resume(gpu);
|
||||
a6xx_llc_activate(a6xx_gpu);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -2284,17 +2356,20 @@ static int a6xx_pm_suspend(struct msm_gpu *gpu)
|
|||
|
||||
trace_msm_gpu_suspend(0);
|
||||
|
||||
a6xx_llc_deactivate(a6xx_gpu);
|
||||
|
||||
msm_devfreq_suspend(gpu);
|
||||
|
||||
mutex_lock(&a6xx_gpu->gmu.lock);
|
||||
|
||||
/* Drain the outstanding traffic on memory buses */
|
||||
a6xx_bus_clear_pending_transactions(adreno_gpu, true);
|
||||
adreno_gpu->funcs->bus_halt(adreno_gpu, true);
|
||||
|
||||
if (adreno_is_a619_holi(adreno_gpu))
|
||||
a6xx_sptprac_disable(gmu);
|
||||
|
||||
clk_bulk_disable_unprepare(gpu->nr_clocks, gpu->grp_clks);
|
||||
clk_bulk_disable_unprepare(gmu->nr_clocks, gmu->clocks);
|
||||
|
||||
pm_runtime_put_sync(gmu->gxpd);
|
||||
dev_pm_opp_set_opp(&gpu->pdev->dev, NULL);
|
||||
|
|
@ -2345,6 +2420,11 @@ static void a6xx_destroy(struct msm_gpu *gpu)
|
|||
drm_gem_object_put(a6xx_gpu->sqe_bo);
|
||||
}
|
||||
|
||||
if (a6xx_gpu->aqe_bo) {
|
||||
msm_gem_unpin_iova(a6xx_gpu->aqe_bo, gpu->vm);
|
||||
drm_gem_object_put(a6xx_gpu->aqe_bo);
|
||||
}
|
||||
|
||||
if (a6xx_gpu->shadow_bo) {
|
||||
msm_gem_unpin_iova(a6xx_gpu->shadow_bo, gpu->vm);
|
||||
drm_gem_object_put(a6xx_gpu->shadow_bo);
|
||||
|
|
@ -2527,7 +2607,105 @@ static int a6xx_set_supported_hw(struct device *dev, const struct adreno_info *i
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct adreno_gpu_funcs funcs = {
|
||||
static struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct adreno_platform_config *config = pdev->dev.platform_data;
|
||||
struct device_node *node;
|
||||
struct a6xx_gpu *a6xx_gpu;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
struct msm_gpu *gpu;
|
||||
extern int enable_preemption;
|
||||
bool is_a7xx;
|
||||
int ret, nr_rings = 1;
|
||||
|
||||
a6xx_gpu = kzalloc(sizeof(*a6xx_gpu), GFP_KERNEL);
|
||||
if (!a6xx_gpu)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
adreno_gpu = &a6xx_gpu->base;
|
||||
gpu = &adreno_gpu->base;
|
||||
|
||||
mutex_init(&a6xx_gpu->gmu.lock);
|
||||
|
||||
adreno_gpu->registers = NULL;
|
||||
|
||||
/* Check if there is a GMU phandle and set it up */
|
||||
node = of_parse_phandle(pdev->dev.of_node, "qcom,gmu", 0);
|
||||
/* FIXME: How do we gracefully handle this? */
|
||||
BUG_ON(!node);
|
||||
|
||||
adreno_gpu->gmu_is_wrapper = of_device_is_compatible(node, "qcom,adreno-gmu-wrapper");
|
||||
|
||||
adreno_gpu->base.hw_apriv =
|
||||
!!(config->info->quirks & ADRENO_QUIRK_HAS_HW_APRIV);
|
||||
|
||||
/* gpu->info only gets assigned in adreno_gpu_init(). A8x is included intentionally */
|
||||
is_a7xx = config->info->family >= ADRENO_7XX_GEN1;
|
||||
|
||||
a6xx_llc_slices_init(pdev, a6xx_gpu, is_a7xx);
|
||||
|
||||
ret = a6xx_set_supported_hw(&pdev->dev, config->info);
|
||||
if (ret) {
|
||||
a6xx_llc_slices_destroy(a6xx_gpu);
|
||||
kfree(a6xx_gpu);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
if ((enable_preemption == 1) || (enable_preemption == -1 &&
|
||||
(config->info->quirks & ADRENO_QUIRK_PREEMPTION)))
|
||||
nr_rings = 4;
|
||||
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, config->info->funcs, nr_rings);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* For now only clamp to idle freq for devices where this is known not
|
||||
* to cause power supply issues:
|
||||
*/
|
||||
if (adreno_is_a618(adreno_gpu) || adreno_is_7c3(adreno_gpu))
|
||||
priv->gpu_clamp_to_idle = true;
|
||||
|
||||
if (adreno_has_gmu_wrapper(adreno_gpu) || adreno_has_rgmu(adreno_gpu))
|
||||
ret = a6xx_gmu_wrapper_init(a6xx_gpu, node);
|
||||
else
|
||||
ret = a6xx_gmu_init(a6xx_gpu, node);
|
||||
of_node_put(node);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
if (adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) {
|
||||
ret = a7xx_cx_mem_init(a6xx_gpu);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
}
|
||||
|
||||
adreno_gpu->uche_trap_base = 0x1fffffffff000ull;
|
||||
|
||||
msm_mmu_set_fault_handler(to_msm_vm(gpu->vm)->mmu, gpu,
|
||||
adreno_gpu->funcs->mmu_fault_handler);
|
||||
|
||||
ret = a6xx_calc_ubwc_config(adreno_gpu);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/* Set up the preemption specific bits and pieces for each ringbuffer */
|
||||
a6xx_preempt_init(gpu);
|
||||
|
||||
return gpu;
|
||||
}
|
||||
|
||||
const struct adreno_gpu_funcs a6xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
|
|
@ -2554,12 +2732,14 @@ static const struct adreno_gpu_funcs funcs = {
|
|||
.create_private_vm = a6xx_create_private_vm,
|
||||
.get_rptr = a6xx_get_rptr,
|
||||
.progress = a6xx_progress,
|
||||
.sysprof_setup = a6xx_gmu_sysprof_setup,
|
||||
},
|
||||
.init = a6xx_gpu_init,
|
||||
.get_timestamp = a6xx_gmu_get_timestamp,
|
||||
.bus_halt = a6xx_bus_clear_pending_transactions,
|
||||
.mmu_fault_handler = a6xx_fault_handler,
|
||||
};
|
||||
|
||||
static const struct adreno_gpu_funcs funcs_gmuwrapper = {
|
||||
const struct adreno_gpu_funcs a6xx_gmuwrapper_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
|
|
@ -2585,10 +2765,13 @@ static const struct adreno_gpu_funcs funcs_gmuwrapper = {
|
|||
.get_rptr = a6xx_get_rptr,
|
||||
.progress = a6xx_progress,
|
||||
},
|
||||
.init = a6xx_gpu_init,
|
||||
.get_timestamp = a6xx_get_timestamp,
|
||||
.bus_halt = a6xx_bus_clear_pending_transactions,
|
||||
.mmu_fault_handler = a6xx_fault_handler,
|
||||
};
|
||||
|
||||
static const struct adreno_gpu_funcs funcs_a7xx = {
|
||||
const struct adreno_gpu_funcs a7xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
|
|
@ -2615,111 +2798,36 @@ static const struct adreno_gpu_funcs funcs_a7xx = {
|
|||
.create_private_vm = a6xx_create_private_vm,
|
||||
.get_rptr = a6xx_get_rptr,
|
||||
.progress = a6xx_progress,
|
||||
.sysprof_setup = a6xx_gmu_sysprof_setup,
|
||||
},
|
||||
.init = a6xx_gpu_init,
|
||||
.get_timestamp = a6xx_gmu_get_timestamp,
|
||||
.bus_halt = a6xx_bus_clear_pending_transactions,
|
||||
.mmu_fault_handler = a6xx_fault_handler,
|
||||
};
|
||||
|
||||
struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct adreno_platform_config *config = pdev->dev.platform_data;
|
||||
struct device_node *node;
|
||||
struct a6xx_gpu *a6xx_gpu;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
struct msm_gpu *gpu;
|
||||
extern int enable_preemption;
|
||||
bool is_a7xx;
|
||||
int ret;
|
||||
|
||||
a6xx_gpu = kzalloc(sizeof(*a6xx_gpu), GFP_KERNEL);
|
||||
if (!a6xx_gpu)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
adreno_gpu = &a6xx_gpu->base;
|
||||
gpu = &adreno_gpu->base;
|
||||
|
||||
mutex_init(&a6xx_gpu->gmu.lock);
|
||||
|
||||
adreno_gpu->registers = NULL;
|
||||
|
||||
/* Check if there is a GMU phandle and set it up */
|
||||
node = of_parse_phandle(pdev->dev.of_node, "qcom,gmu", 0);
|
||||
/* FIXME: How do we gracefully handle this? */
|
||||
BUG_ON(!node);
|
||||
|
||||
adreno_gpu->gmu_is_wrapper = of_device_is_compatible(node, "qcom,adreno-gmu-wrapper");
|
||||
|
||||
adreno_gpu->base.hw_apriv =
|
||||
!!(config->info->quirks & ADRENO_QUIRK_HAS_HW_APRIV);
|
||||
|
||||
/* gpu->info only gets assigned in adreno_gpu_init() */
|
||||
is_a7xx = config->info->family == ADRENO_7XX_GEN1 ||
|
||||
config->info->family == ADRENO_7XX_GEN2 ||
|
||||
config->info->family == ADRENO_7XX_GEN3;
|
||||
|
||||
a6xx_llc_slices_init(pdev, a6xx_gpu, is_a7xx);
|
||||
|
||||
ret = a6xx_set_supported_hw(&pdev->dev, config->info);
|
||||
if (ret) {
|
||||
a6xx_llc_slices_destroy(a6xx_gpu);
|
||||
kfree(a6xx_gpu);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
if ((enable_preemption == 1) || (enable_preemption == -1 &&
|
||||
(config->info->quirks & ADRENO_QUIRK_PREEMPTION)))
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs_a7xx, 4);
|
||||
else if (is_a7xx)
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs_a7xx, 1);
|
||||
else if (adreno_has_gmu_wrapper(adreno_gpu))
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs_gmuwrapper, 1);
|
||||
else
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, 1);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/*
|
||||
* For now only clamp to idle freq for devices where this is known not
|
||||
* to cause power supply issues:
|
||||
*/
|
||||
if (adreno_is_a618(adreno_gpu) || adreno_is_7c3(adreno_gpu))
|
||||
priv->gpu_clamp_to_idle = true;
|
||||
|
||||
if (adreno_has_gmu_wrapper(adreno_gpu))
|
||||
ret = a6xx_gmu_wrapper_init(a6xx_gpu, node);
|
||||
else
|
||||
ret = a6xx_gmu_init(a6xx_gpu, node);
|
||||
of_node_put(node);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
if (adreno_is_a7xx(adreno_gpu)) {
|
||||
ret = a7xx_cx_mem_init(a6xx_gpu);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
}
|
||||
|
||||
adreno_gpu->uche_trap_base = 0x1fffffffff000ull;
|
||||
|
||||
msm_mmu_set_fault_handler(to_msm_vm(gpu->vm)->mmu, gpu,
|
||||
a6xx_fault_handler);
|
||||
|
||||
ret = a6xx_calc_ubwc_config(adreno_gpu);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/* Set up the preemption specific bits and pieces for each ringbuffer */
|
||||
a6xx_preempt_init(gpu);
|
||||
|
||||
return gpu;
|
||||
}
|
||||
const struct adreno_gpu_funcs a8xx_gpu_funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.set_param = adreno_set_param,
|
||||
.hw_init = a8xx_hw_init,
|
||||
.ucode_load = a6xx_ucode_load,
|
||||
.pm_suspend = a6xx_gmu_pm_suspend,
|
||||
.pm_resume = a6xx_gmu_pm_resume,
|
||||
.recover = a8xx_recover,
|
||||
.submit = a7xx_submit,
|
||||
.active_ring = a6xx_active_ring,
|
||||
.irq = a8xx_irq,
|
||||
.destroy = a6xx_destroy,
|
||||
.gpu_busy = a8xx_gpu_busy,
|
||||
.gpu_get_freq = a6xx_gmu_get_freq,
|
||||
.gpu_set_freq = a6xx_gpu_set_freq,
|
||||
.create_vm = a6xx_create_vm,
|
||||
.create_private_vm = a6xx_create_private_vm,
|
||||
.get_rptr = a6xx_get_rptr,
|
||||
.progress = a8xx_progress,
|
||||
},
|
||||
.init = a6xx_gpu_init,
|
||||
.get_timestamp = a8xx_gmu_get_timestamp,
|
||||
.bus_halt = a8xx_bus_clear_pending_transactions,
|
||||
.mmu_fault_handler = a8xx_fault_handler,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -46,6 +46,9 @@ struct a6xx_info {
|
|||
const struct adreno_protect *protect;
|
||||
const struct adreno_reglist_list *pwrup_reglist;
|
||||
const struct adreno_reglist_list *ifpc_reglist;
|
||||
const struct adreno_reglist *gbif_cx;
|
||||
const struct adreno_reglist_pipe *nonctxt_reglist;
|
||||
u32 max_slices;
|
||||
u32 gmu_chipid;
|
||||
u32 gmu_cgc_mode;
|
||||
u32 prim_fifo_threshold;
|
||||
|
|
@ -57,6 +60,8 @@ struct a6xx_gpu {
|
|||
|
||||
struct drm_gem_object *sqe_bo;
|
||||
uint64_t sqe_iova;
|
||||
struct drm_gem_object *aqe_bo;
|
||||
uint64_t aqe_iova;
|
||||
|
||||
struct msm_ringbuffer *cur_ring;
|
||||
struct msm_ringbuffer *next_ring;
|
||||
|
|
@ -101,6 +106,11 @@ struct a6xx_gpu {
|
|||
void *htw_llc_slice;
|
||||
bool have_mmu500;
|
||||
bool hung;
|
||||
|
||||
u32 cached_aperture;
|
||||
spinlock_t aperture_lock;
|
||||
|
||||
u32 slice_mask;
|
||||
};
|
||||
|
||||
#define to_a6xx_gpu(x) container_of(x, struct a6xx_gpu, base)
|
||||
|
|
@ -216,6 +226,11 @@ struct a7xx_cp_smmu_info {
|
|||
#define A6XX_PROTECT_RDONLY(_reg, _len) \
|
||||
((((_len) & 0x3FFF) << 18) | ((_reg) & 0x3FFFF))
|
||||
|
||||
extern const struct adreno_gpu_funcs a6xx_gpu_funcs;
|
||||
extern const struct adreno_gpu_funcs a6xx_gmuwrapper_funcs;
|
||||
extern const struct adreno_gpu_funcs a7xx_gpu_funcs;
|
||||
extern const struct adreno_gpu_funcs a8xx_gpu_funcs;
|
||||
|
||||
static inline bool a6xx_has_gbif(struct adreno_gpu *gpu)
|
||||
{
|
||||
if(adreno_is_a630(gpu))
|
||||
|
|
@ -298,5 +313,19 @@ int a6xx_gpu_state_put(struct msm_gpu_state *state);
|
|||
void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, bool gx_off);
|
||||
void a6xx_gpu_sw_reset(struct msm_gpu *gpu, bool assert);
|
||||
int a6xx_fenced_write(struct a6xx_gpu *gpu, u32 offset, u64 value, u32 mask, bool is_64b);
|
||||
void a6xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring);
|
||||
int a6xx_zap_shader_init(struct msm_gpu *gpu);
|
||||
|
||||
void a8xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, bool gx_off);
|
||||
int a8xx_fault_handler(void *arg, unsigned long iova, int flags, void *data);
|
||||
void a8xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring);
|
||||
int a8xx_gmu_get_timestamp(struct msm_gpu *gpu, uint64_t *value);
|
||||
u64 a8xx_gpu_busy(struct msm_gpu *gpu, unsigned long *out_sample_rate);
|
||||
int a8xx_gpu_feature_probe(struct msm_gpu *gpu);
|
||||
void a8xx_gpu_get_slice_info(struct msm_gpu *gpu);
|
||||
int a8xx_hw_init(struct msm_gpu *gpu);
|
||||
irqreturn_t a8xx_irq(struct msm_gpu *gpu);
|
||||
void a8xx_llc_activate(struct a6xx_gpu *a6xx_gpu);
|
||||
bool a8xx_progress(struct msm_gpu *gpu, struct msm_ringbuffer *ring);
|
||||
void a8xx_recover(struct msm_gpu *gpu);
|
||||
#endif /* __A6XX_GPU_H__ */
|
||||
|
|
|
|||
|
|
@ -1255,7 +1255,7 @@ static void a6xx_get_gmu_registers(struct msm_gpu *gpu,
|
|||
return;
|
||||
|
||||
/* Set the fence to ALLOW mode so we can access the registers */
|
||||
gpu_write(gpu, REG_A6XX_GMU_AO_AHB_FENCE_CTRL, 0);
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_AO_AHB_FENCE_CTRL, 0);
|
||||
|
||||
_a6xx_get_gmu_registers(gpu, a6xx_state, &a6xx_gmu_reglist[2],
|
||||
&a6xx_state->gmu_registers[3], false);
|
||||
|
|
@ -1596,7 +1596,8 @@ struct msm_gpu_state *a6xx_gpu_state_get(struct msm_gpu *gpu)
|
|||
/* Get the generic state from the adreno core */
|
||||
adreno_gpu_state_get(gpu, &a6xx_state->base);
|
||||
|
||||
if (!adreno_has_gmu_wrapper(adreno_gpu)) {
|
||||
if (!adreno_has_gmu_wrapper(adreno_gpu) &&
|
||||
!adreno_has_rgmu(adreno_gpu)) {
|
||||
a6xx_get_gmu_registers(gpu, a6xx_state);
|
||||
|
||||
a6xx_state->gmu_log = a6xx_snapshot_gmu_bo(a6xx_state, &a6xx_gpu->gmu.log);
|
||||
|
|
|
|||
|
|
@ -71,8 +71,8 @@ static const struct a6xx_cluster {
|
|||
u32 sel_val;
|
||||
} a6xx_clusters[] = {
|
||||
CLUSTER(CLUSTER_GRAS, a6xx_gras_cluster, 0, 0),
|
||||
CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rac, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 0x0),
|
||||
CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rbp, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 0x9),
|
||||
CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rac, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 0x0),
|
||||
CLUSTER(CLUSTER_PS, a6xx_ps_cluster_rbp, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 0x9),
|
||||
CLUSTER(CLUSTER_PS, a6xx_ps_cluster, 0, 0),
|
||||
CLUSTER(CLUSTER_FE, a6xx_fe_cluster, 0, 0),
|
||||
CLUSTER(CLUSTER_PC_VS, a6xx_pc_vs_cluster, 0, 0),
|
||||
|
|
@ -303,8 +303,8 @@ static const u32 a660_registers[] = {
|
|||
static const struct a6xx_registers a6xx_reglist[] = {
|
||||
REGS(a6xx_registers, 0, 0),
|
||||
REGS(a660_registers, 0, 0),
|
||||
REGS(a6xx_rb_rac_registers, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 0),
|
||||
REGS(a6xx_rb_rbp_registers, REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD, 9),
|
||||
REGS(a6xx_rb_rac_registers, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 0),
|
||||
REGS(a6xx_rb_rbp_registers, REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD, 9),
|
||||
};
|
||||
|
||||
static const u32 a6xx_ahb_registers[] = {
|
||||
|
|
@ -343,48 +343,48 @@ static const struct a6xx_registers a6xx_gbif_reglist =
|
|||
|
||||
static const u32 a6xx_gmu_gx_registers[] = {
|
||||
/* GMU GX */
|
||||
0x0000, 0x0000, 0x0010, 0x0013, 0x0016, 0x0016, 0x0018, 0x001b,
|
||||
0x001e, 0x001e, 0x0020, 0x0023, 0x0026, 0x0026, 0x0028, 0x002b,
|
||||
0x002e, 0x002e, 0x0030, 0x0033, 0x0036, 0x0036, 0x0038, 0x003b,
|
||||
0x003e, 0x003e, 0x0040, 0x0043, 0x0046, 0x0046, 0x0080, 0x0084,
|
||||
0x0100, 0x012b, 0x0140, 0x0140,
|
||||
0x1a800, 0x1a800, 0x1a810, 0x1a813, 0x1a816, 0x1a816, 0x1a818, 0x1a81b,
|
||||
0x1a81e, 0x1a81e, 0x1a820, 0x1a823, 0x1a826, 0x1a826, 0x1a828, 0x1a82b,
|
||||
0x1a82e, 0x1a82e, 0x1a830, 0x1a833, 0x1a836, 0x1a836, 0x1a838, 0x1a83b,
|
||||
0x1a83e, 0x1a83e, 0x1a840, 0x1a843, 0x1a846, 0x1a846, 0x1a880, 0x1a884,
|
||||
0x1a900, 0x1a92b, 0x1a940, 0x1a940,
|
||||
};
|
||||
|
||||
static const u32 a6xx_gmu_cx_registers[] = {
|
||||
/* GMU CX */
|
||||
0x4c00, 0x4c07, 0x4c10, 0x4c12, 0x4d00, 0x4d00, 0x4d07, 0x4d0a,
|
||||
0x5000, 0x5004, 0x5007, 0x5008, 0x500b, 0x500c, 0x500f, 0x501c,
|
||||
0x5024, 0x502a, 0x502d, 0x5030, 0x5040, 0x5053, 0x5087, 0x5089,
|
||||
0x50a0, 0x50a2, 0x50a4, 0x50af, 0x50c0, 0x50c3, 0x50d0, 0x50d0,
|
||||
0x50e4, 0x50e4, 0x50e8, 0x50ec, 0x5100, 0x5103, 0x5140, 0x5140,
|
||||
0x5142, 0x5144, 0x514c, 0x514d, 0x514f, 0x5151, 0x5154, 0x5154,
|
||||
0x5157, 0x5158, 0x515d, 0x515d, 0x5162, 0x5162, 0x5164, 0x5165,
|
||||
0x5180, 0x5186, 0x5190, 0x519e, 0x51c0, 0x51c0, 0x51c5, 0x51cc,
|
||||
0x51e0, 0x51e2, 0x51f0, 0x51f0, 0x5200, 0x5201,
|
||||
0x1f400, 0x1f407, 0x1f410, 0x1f412, 0x1f500, 0x1f500, 0x1f507, 0x1f50a,
|
||||
0x1f800, 0x1f804, 0x1f807, 0x1f808, 0x1f80b, 0x1f80c, 0x1f80f, 0x1f81c,
|
||||
0x1f824, 0x1f82a, 0x1f82d, 0x1f830, 0x1f840, 0x1f853, 0x1f887, 0x1f889,
|
||||
0x1f8a0, 0x1f8a2, 0x1f8a4, 0x1f8af, 0x1f8c0, 0x1f8c3, 0x1f8d0, 0x1f8d0,
|
||||
0x1f8e4, 0x1f8e4, 0x1f8e8, 0x1f8ec, 0x1f900, 0x1f903, 0x1f940, 0x1f940,
|
||||
0x1f942, 0x1f944, 0x1f94c, 0x1f94d, 0x1f94f, 0x1f951, 0x1f954, 0x1f954,
|
||||
0x1f957, 0x1f958, 0x1f95d, 0x1f95d, 0x1f962, 0x1f962, 0x1f964, 0x1f965,
|
||||
0x1f980, 0x1f986, 0x1f990, 0x1f99e, 0x1f9c0, 0x1f9c0, 0x1f9c5, 0x1f9cc,
|
||||
0x1f9e0, 0x1f9e2, 0x1f9f0, 0x1f9f0, 0x1fa00, 0x1fa01,
|
||||
/* GMU AO */
|
||||
0x9300, 0x9316, 0x9400, 0x9400,
|
||||
0x23b00, 0x23b16, 0x23c00, 0x23c00,
|
||||
};
|
||||
|
||||
static const u32 a6xx_gmu_gpucc_registers[] = {
|
||||
/* GPU CC */
|
||||
0x9800, 0x9812, 0x9840, 0x9852, 0x9c00, 0x9c04, 0x9c07, 0x9c0b,
|
||||
0x9c15, 0x9c1c, 0x9c1e, 0x9c2d, 0x9c3c, 0x9c3d, 0x9c3f, 0x9c40,
|
||||
0x9c42, 0x9c49, 0x9c58, 0x9c5a, 0x9d40, 0x9d5e, 0xa000, 0xa002,
|
||||
0xa400, 0xa402, 0xac00, 0xac02, 0xb000, 0xb002, 0xb400, 0xb402,
|
||||
0xb800, 0xb802,
|
||||
0x24000, 0x24012, 0x24040, 0x24052, 0x24400, 0x24404, 0x24407, 0x2440b,
|
||||
0x24415, 0x2441c, 0x2441e, 0x2442d, 0x2443c, 0x2443d, 0x2443f, 0x24440,
|
||||
0x24442, 0x24449, 0x24458, 0x2445a, 0x24540, 0x2455e, 0x24800, 0x24802,
|
||||
0x24c00, 0x24c02, 0x25400, 0x25402, 0x25800, 0x25802, 0x25c00, 0x25c02,
|
||||
0x26000, 0x26002,
|
||||
/* GPU CC ACD */
|
||||
0xbc00, 0xbc16, 0xbc20, 0xbc27,
|
||||
0x26400, 0x26416, 0x26420, 0x26427,
|
||||
};
|
||||
|
||||
static const u32 a621_gmu_gpucc_registers[] = {
|
||||
/* GPU CC */
|
||||
0x9800, 0x980e, 0x9c00, 0x9c0e, 0xb000, 0xb004, 0xb400, 0xb404,
|
||||
0xb800, 0xb804, 0xbc00, 0xbc05, 0xbc14, 0xbc1d, 0xbc2a, 0xbc30,
|
||||
0xbc32, 0xbc32, 0xbc41, 0xbc55, 0xbc66, 0xbc68, 0xbc78, 0xbc7a,
|
||||
0xbc89, 0xbc8a, 0xbc9c, 0xbc9e, 0xbca0, 0xbca3, 0xbcb3, 0xbcb5,
|
||||
0xbcc5, 0xbcc7, 0xbcd6, 0xbcd8, 0xbce8, 0xbce9, 0xbcf9, 0xbcfc,
|
||||
0xbd0b, 0xbd0c, 0xbd1c, 0xbd1e, 0xbd40, 0xbd70, 0xbe00, 0xbe16,
|
||||
0xbe20, 0xbe2d,
|
||||
0x24000, 0x2400e, 0x24400, 0x2440e, 0x25800, 0x25804, 0x25c00, 0x25c04,
|
||||
0x26000, 0x26004, 0x26400, 0x26405, 0x26414, 0x2641d, 0x2642a, 0x26430,
|
||||
0x26432, 0x26432, 0x26441, 0x26455, 0x26466, 0x26468, 0x26478, 0x2647a,
|
||||
0x26489, 0x2648a, 0x2649c, 0x2649e, 0x264a0, 0x264a3, 0x264b3, 0x264b5,
|
||||
0x264c5, 0x264c7, 0x264d6, 0x264d8, 0x264e8, 0x264e9, 0x264f9, 0x264fc,
|
||||
0x2650b, 0x2650c, 0x2651c, 0x2651e, 0x26540, 0x26570, 0x26600, 0x26616,
|
||||
0x26620, 0x2662d,
|
||||
};
|
||||
|
||||
static const u32 a6xx_gmu_cx_rscc_registers[] = {
|
||||
|
|
@ -575,7 +575,7 @@ struct gen7_sptp_cluster_registers {
|
|||
/* statetype: SP block state type for the cluster */
|
||||
enum a7xx_statetype_id statetype;
|
||||
/* pipe_id: Pipe identifier */
|
||||
enum a7xx_pipe pipe_id;
|
||||
enum adreno_pipe pipe_id;
|
||||
/* context_id: Context identifier */
|
||||
int context_id;
|
||||
/* location_id: Location identifier */
|
||||
|
|
@ -801,10 +801,10 @@ static const char *a7xx_statetype_names[] = {
|
|||
};
|
||||
|
||||
static const char *a7xx_pipe_names[] = {
|
||||
A7XX_NAME(A7XX_PIPE_NONE),
|
||||
A7XX_NAME(A7XX_PIPE_BR),
|
||||
A7XX_NAME(A7XX_PIPE_BV),
|
||||
A7XX_NAME(A7XX_PIPE_LPAC),
|
||||
A7XX_NAME(PIPE_NONE),
|
||||
A7XX_NAME(PIPE_BR),
|
||||
A7XX_NAME(PIPE_BV),
|
||||
A7XX_NAME(PIPE_LPAC),
|
||||
};
|
||||
|
||||
static const char *a7xx_cluster_names[] = {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ static const char * const a6xx_hfi_msg_id[] = {
|
|||
HFI_MSG_ID(HFI_H2F_MSG_START),
|
||||
HFI_MSG_ID(HFI_H2F_FEATURE_CTRL),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_CORE_FW_START),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_TABLE),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_GX_BW_PERF_VOTE),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_PREPARE_SLUMBER),
|
||||
};
|
||||
|
|
@ -105,10 +106,25 @@ static int a6xx_hfi_wait_for_msg_interrupt(struct a6xx_gmu *gmu, u32 id, u32 seq
|
|||
{
|
||||
int ret;
|
||||
u32 val;
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
|
||||
/* Wait for a response */
|
||||
ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_GMU2HOST_INTR_INFO, val,
|
||||
val & A6XX_GMU_GMU2HOST_INTR_INFO_MSGQ, 100, 1000000);
|
||||
do {
|
||||
/* Wait for a response */
|
||||
ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_GMU2HOST_INTR_INFO, val,
|
||||
val & A6XX_GMU_GMU2HOST_INTR_INFO_MSGQ, 100, 1000000);
|
||||
|
||||
if (!ret)
|
||||
break;
|
||||
|
||||
if (completion_done(&a6xx_gpu->base.fault_coredump_done))
|
||||
break;
|
||||
|
||||
/* We may timeout because the GMU is temporarily wedged from
|
||||
* pending faults from the GPU and we are taking a devcoredump.
|
||||
* Wait until the MMU is resumed and try again.
|
||||
*/
|
||||
wait_for_completion(&a6xx_gpu->base.fault_coredump_done);
|
||||
} while (true);
|
||||
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(gmu->dev,
|
||||
|
|
@ -255,11 +271,63 @@ static int a6xx_hfi_send_perf_table_v1(struct a6xx_gmu *gmu)
|
|||
NULL, 0);
|
||||
}
|
||||
|
||||
static int a8xx_hfi_send_perf_table(struct a6xx_gmu *gmu)
|
||||
{
|
||||
unsigned int num_gx_votes = 3, num_cx_votes = 2;
|
||||
struct a6xx_hfi_table_entry *entry;
|
||||
struct a6xx_hfi_table *tbl;
|
||||
int ret, i;
|
||||
u32 size;
|
||||
|
||||
size = sizeof(*tbl) + (2 * sizeof(tbl->entry[0])) +
|
||||
(gmu->nr_gpu_freqs * num_gx_votes * sizeof(gmu->gx_arc_votes[0])) +
|
||||
(gmu->nr_gmu_freqs * num_cx_votes * sizeof(gmu->cx_arc_votes[0]));
|
||||
tbl = kzalloc(size, GFP_KERNEL);
|
||||
tbl->type = HFI_TABLE_GPU_PERF;
|
||||
|
||||
/* First fill GX votes */
|
||||
entry = &tbl->entry[0];
|
||||
entry->count = gmu->nr_gpu_freqs;
|
||||
entry->stride = num_gx_votes;
|
||||
|
||||
for (i = 0; i < gmu->nr_gpu_freqs; i++) {
|
||||
unsigned int base = i * entry->stride;
|
||||
|
||||
entry->data[base+0] = gmu->gx_arc_votes[i];
|
||||
entry->data[base+1] = gmu->dep_arc_votes[i];
|
||||
entry->data[base+2] = gmu->gpu_freqs[i] / 1000;
|
||||
}
|
||||
|
||||
/* Then fill CX votes */
|
||||
entry = (struct a6xx_hfi_table_entry *)
|
||||
&tbl->entry[0].data[gmu->nr_gpu_freqs * num_gx_votes];
|
||||
|
||||
entry->count = gmu->nr_gmu_freqs;
|
||||
entry->stride = num_cx_votes;
|
||||
|
||||
for (i = 0; i < gmu->nr_gmu_freqs; i++) {
|
||||
unsigned int base = i * entry->stride;
|
||||
|
||||
entry->data[base] = gmu->cx_arc_votes[i];
|
||||
entry->data[base+1] = gmu->gmu_freqs[i] / 1000;
|
||||
}
|
||||
|
||||
ret = a6xx_hfi_send_msg(gmu, HFI_H2F_MSG_TABLE, tbl, size, NULL, 0);
|
||||
|
||||
kfree(tbl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int a6xx_hfi_send_perf_table(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu);
|
||||
struct adreno_gpu *adreno_gpu = &a6xx_gpu->base;
|
||||
struct a6xx_hfi_msg_perf_table msg = { 0 };
|
||||
int i;
|
||||
|
||||
if (adreno_is_a8xx(adreno_gpu))
|
||||
return a8xx_hfi_send_perf_table(gmu);
|
||||
|
||||
msg.num_gpu_levels = gmu->nr_gpu_freqs;
|
||||
msg.num_gmu_levels = gmu->nr_gmu_freqs;
|
||||
|
||||
|
|
|
|||
|
|
@ -185,6 +185,23 @@ struct a6xx_hfi_msg_core_fw_start {
|
|||
u32 handle;
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_TABLE 15
|
||||
|
||||
struct a6xx_hfi_table_entry {
|
||||
u32 count;
|
||||
u32 stride;
|
||||
u32 data[];
|
||||
};
|
||||
|
||||
struct a6xx_hfi_table {
|
||||
u32 header;
|
||||
u32 version;
|
||||
u32 type;
|
||||
#define HFI_TABLE_BW_VOTE 0
|
||||
#define HFI_TABLE_GPU_PERF 1
|
||||
struct a6xx_hfi_table_entry entry[];
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_GX_BW_PERF_VOTE 30
|
||||
|
||||
struct a6xx_hfi_gx_bw_perf_vote_cmd {
|
||||
|
|
|
|||
1201
drivers/gpu/drm/msm/adreno/a8xx_gpu.c
Normal file
1201
drivers/gpu/drm/msm/adreno/a8xx_gpu.c
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -34,6 +34,7 @@ extern const struct adreno_gpulist a4xx_gpulist;
|
|||
extern const struct adreno_gpulist a5xx_gpulist;
|
||||
extern const struct adreno_gpulist a6xx_gpulist;
|
||||
extern const struct adreno_gpulist a7xx_gpulist;
|
||||
extern const struct adreno_gpulist a8xx_gpulist;
|
||||
|
||||
static const struct adreno_gpulist *gpulists[] = {
|
||||
&a2xx_gpulist,
|
||||
|
|
@ -42,6 +43,7 @@ static const struct adreno_gpulist *gpulists[] = {
|
|||
&a5xx_gpulist,
|
||||
&a6xx_gpulist,
|
||||
&a7xx_gpulist,
|
||||
&a8xx_gpulist,
|
||||
};
|
||||
|
||||
static const struct adreno_info *adreno_info(uint32_t chip_id)
|
||||
|
|
@ -235,7 +237,7 @@ static int adreno_bind(struct device *dev, struct device *master, void *data)
|
|||
priv->has_cached_coherent =
|
||||
!!(info->quirks & ADRENO_QUIRK_HAS_CACHED_COHERENT);
|
||||
|
||||
gpu = info->init(drm);
|
||||
gpu = info->funcs->init(drm);
|
||||
if (IS_ERR(gpu)) {
|
||||
dev_warn(drm->dev, "failed to load adreno gpu\n");
|
||||
return PTR_ERR(gpu);
|
||||
|
|
|
|||
|
|
@ -82,85 +82,85 @@ static const u32 gen7_0_0_debugbus_blocks[] = {
|
|||
};
|
||||
|
||||
static const struct gen7_shader_block gen7_0_0_shader_blocks[] = {
|
||||
{A7XX_TP0_TMO_DATA, 0x200, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_SMO_DATA, 0x80, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_MIPMAP_BASE_DATA, 0x3c0, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_1, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_0_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_1_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_2_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_3_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_4_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_5_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_6_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_7_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_CB_RAM, 0x390, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_TAG, 0x90, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_2, 0x200, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_TMO_TAG, 0x80, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_SMO_TAG, 0x80, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_STATE_DATA, 0x40, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_HWAVE_RAM, 0x100, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_L0_INST_BUF, 0x50, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_8_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_9_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_10_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_11_DATA, 0x800, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_12_DATA, 0x200, 4, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM, 0x300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x300, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x800, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_1, 0x200, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x64, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x64, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x64, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x64, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_1, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_STPROC_META, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_DATAPATH_META, 0x20, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x40, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x40, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INDIRECT_META, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_TP0_TMO_DATA, 0x200, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_SMO_DATA, 0x80, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_MIPMAP_BASE_DATA, 0x3c0, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_1, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_0_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_1_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_2_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_3_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_4_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_5_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_6_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_7_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_CB_RAM, 0x390, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_TAG, 0x90, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_2, 0x200, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_TMO_TAG, 0x80, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_SMO_TAG, 0x80, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_STATE_DATA, 0x40, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_HWAVE_RAM, 0x100, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_L0_INST_BUF, 0x50, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_8_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_9_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_10_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_11_DATA, 0x800, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_12_DATA, 0x200, 4, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM, 0x300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x300, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x800, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_1, 0x200, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x64, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x64, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x64, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x64, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_1, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_STPROC_META, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_DATAPATH_META, 0x20, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x40, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x40, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INDIRECT_META, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
};
|
||||
|
||||
static const u32 gen7_0_0_pre_crashdumper_gpu_registers[] = {
|
||||
|
|
@ -303,7 +303,7 @@ static const u32 gen7_0_0_noncontext_rb_rbp_pipe_br_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_noncontext_rb_rbp_pipe_br_registers), 8));
|
||||
|
||||
/* Block: GRAS Cluster: A7XX_CLUSTER_GRAS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: GRAS Cluster: A7XX_CLUSTER_GRAS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_gras_cluster_gras_pipe_br_registers[] = {
|
||||
0x08000, 0x08008, 0x08010, 0x08092, 0x08094, 0x08099, 0x0809b, 0x0809d,
|
||||
0x080a0, 0x080a7, 0x080af, 0x080f1, 0x080f4, 0x080f6, 0x080f8, 0x080fa,
|
||||
|
|
@ -313,7 +313,7 @@ static const u32 gen7_0_0_gras_cluster_gras_pipe_br_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_gras_cluster_gras_pipe_br_registers), 8));
|
||||
|
||||
/* Block: GRAS Cluster: A7XX_CLUSTER_GRAS Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: GRAS Cluster: A7XX_CLUSTER_GRAS Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_gras_cluster_gras_pipe_bv_registers[] = {
|
||||
0x08000, 0x08008, 0x08010, 0x08092, 0x08094, 0x08099, 0x0809b, 0x0809d,
|
||||
0x080a0, 0x080a7, 0x080af, 0x080f1, 0x080f4, 0x080f6, 0x080f8, 0x080fa,
|
||||
|
|
@ -323,7 +323,7 @@ static const u32 gen7_0_0_gras_cluster_gras_pipe_bv_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_gras_cluster_gras_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: PC Cluster: A7XX_CLUSTER_FE Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: PC Cluster: A7XX_CLUSTER_FE Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_pc_cluster_fe_pipe_br_registers[] = {
|
||||
0x09800, 0x09804, 0x09806, 0x0980a, 0x09810, 0x09811, 0x09884, 0x09886,
|
||||
0x09b00, 0x09b08,
|
||||
|
|
@ -331,7 +331,7 @@ static const u32 gen7_0_0_pc_cluster_fe_pipe_br_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_pc_cluster_fe_pipe_br_registers), 8));
|
||||
|
||||
/* Block: PC Cluster: A7XX_CLUSTER_FE Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: PC Cluster: A7XX_CLUSTER_FE Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_pc_cluster_fe_pipe_bv_registers[] = {
|
||||
0x09800, 0x09804, 0x09806, 0x0980a, 0x09810, 0x09811, 0x09884, 0x09886,
|
||||
0x09b00, 0x09b08,
|
||||
|
|
@ -339,7 +339,7 @@ static const u32 gen7_0_0_pc_cluster_fe_pipe_bv_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_pc_cluster_fe_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: RB_RAC Cluster: A7XX_CLUSTER_PS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: RB_RAC Cluster: A7XX_CLUSTER_PS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_rb_rac_cluster_ps_pipe_br_registers[] = {
|
||||
0x08802, 0x08802, 0x08804, 0x08806, 0x08809, 0x0880a, 0x0880e, 0x08811,
|
||||
0x08818, 0x0881e, 0x08821, 0x08821, 0x08823, 0x08826, 0x08829, 0x08829,
|
||||
|
|
@ -355,7 +355,7 @@ static const u32 gen7_0_0_rb_rac_cluster_ps_pipe_br_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_rb_rac_cluster_ps_pipe_br_registers), 8));
|
||||
|
||||
/* Block: RB_RBP Cluster: A7XX_CLUSTER_PS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: RB_RBP Cluster: A7XX_CLUSTER_PS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers[] = {
|
||||
0x08800, 0x08801, 0x08803, 0x08803, 0x0880b, 0x0880d, 0x08812, 0x08812,
|
||||
0x08820, 0x08820, 0x08822, 0x08822, 0x08827, 0x08828, 0x0882a, 0x0882a,
|
||||
|
|
@ -370,7 +370,7 @@ static const u32 gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BR Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BR Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers[] = {
|
||||
0x0a980, 0x0a980, 0x0a982, 0x0a984, 0x0a99e, 0x0a99e, 0x0a9a7, 0x0a9a7,
|
||||
0x0a9aa, 0x0a9aa, 0x0a9ae, 0x0a9b0, 0x0a9b3, 0x0a9b5, 0x0a9ba, 0x0a9ba,
|
||||
|
|
@ -381,7 +381,7 @@ static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_LPAC Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_LPAC Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_state_registers[] = {
|
||||
0x0a9b0, 0x0a9b0, 0x0a9b3, 0x0a9b5, 0x0a9ba, 0x0a9ba, 0x0a9bc, 0x0a9bc,
|
||||
0x0a9c4, 0x0a9c4, 0x0a9cd, 0x0a9cd, 0x0a9e2, 0x0a9e3, 0x0a9e6, 0x0a9fc,
|
||||
|
|
@ -390,21 +390,21 @@ static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_state_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BR Location: HLSQ_DP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BR Location: HLSQ_DP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers[] = {
|
||||
0x0a9b1, 0x0a9b1, 0x0a9c6, 0x0a9cb, 0x0a9d4, 0x0a9df,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_LPAC Location: HLSQ_DP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_LPAC Location: HLSQ_DP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_dp_registers[] = {
|
||||
0x0a9b1, 0x0a9b1, 0x0a9d4, 0x0a9df,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_dp_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BR Location: SP_TOP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BR Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers[] = {
|
||||
0x0a980, 0x0a980, 0x0a982, 0x0a984, 0x0a99e, 0x0a9a2, 0x0a9a7, 0x0a9a8,
|
||||
0x0a9aa, 0x0a9aa, 0x0a9ae, 0x0a9ae, 0x0a9b0, 0x0a9b1, 0x0a9b3, 0x0a9b5,
|
||||
|
|
@ -414,7 +414,7 @@ static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_LPAC Location: SP_TOP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_LPAC Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_sp_top_registers[] = {
|
||||
0x0a9b0, 0x0a9b1, 0x0a9b3, 0x0a9b5, 0x0a9ba, 0x0a9bc, 0x0a9e2, 0x0a9e3,
|
||||
0x0a9e6, 0x0a9f9, 0x0aa00, 0x0aa00, 0x0ab00, 0x0ab00,
|
||||
|
|
@ -422,7 +422,7 @@ static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_sp_top_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_lpac_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BR Location: uSPTP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BR Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers[] = {
|
||||
0x0a980, 0x0a982, 0x0a985, 0x0a9a6, 0x0a9a8, 0x0a9a9, 0x0a9ab, 0x0a9ae,
|
||||
0x0a9b0, 0x0a9b3, 0x0a9b6, 0x0a9b9, 0x0a9bb, 0x0a9bf, 0x0a9c2, 0x0a9c3,
|
||||
|
|
@ -432,7 +432,7 @@ static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_LPAC Location: uSPTP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_LPAC Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_usptp_registers[] = {
|
||||
0x0a9b0, 0x0a9b3, 0x0a9b6, 0x0a9b9, 0x0a9bb, 0x0a9be, 0x0a9c2, 0x0a9c3,
|
||||
0x0a9cd, 0x0a9cd, 0x0a9d0, 0x0a9d3, 0x0aa31, 0x0aa31, 0x0ab00, 0x0ab01,
|
||||
|
|
@ -440,7 +440,7 @@ static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_lpac_usptp_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_lpac_usptp_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BR Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BR Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers[] = {
|
||||
0x0a800, 0x0a800, 0x0a81b, 0x0a81d, 0x0a822, 0x0a822, 0x0a824, 0x0a824,
|
||||
0x0a827, 0x0a82a, 0x0a830, 0x0a830, 0x0a833, 0x0a835, 0x0a83a, 0x0a83a,
|
||||
|
|
@ -453,7 +453,7 @@ static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BV Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BV Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers[] = {
|
||||
0x0a800, 0x0a800, 0x0a81b, 0x0a81d, 0x0a822, 0x0a822, 0x0a824, 0x0a824,
|
||||
0x0a827, 0x0a82a, 0x0a830, 0x0a830, 0x0a833, 0x0a835, 0x0a83a, 0x0a83a,
|
||||
|
|
@ -466,7 +466,7 @@ static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BR Location: SP_TOP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BR Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_br_sp_top_registers[] = {
|
||||
0x0a800, 0x0a800, 0x0a81c, 0x0a81d, 0x0a822, 0x0a824, 0x0a830, 0x0a831,
|
||||
0x0a834, 0x0a835, 0x0a83a, 0x0a83c, 0x0a840, 0x0a840, 0x0a85c, 0x0a85d,
|
||||
|
|
@ -477,7 +477,7 @@ static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_br_sp_top_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_vs_pipe_br_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BV Location: SP_TOP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BV Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers[] = {
|
||||
0x0a800, 0x0a800, 0x0a81c, 0x0a81d, 0x0a822, 0x0a824, 0x0a830, 0x0a831,
|
||||
0x0a834, 0x0a835, 0x0a83a, 0x0a83c, 0x0a840, 0x0a840, 0x0a85c, 0x0a85d,
|
||||
|
|
@ -488,7 +488,7 @@ static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BR Location: uSPTP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BR Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_br_usptp_registers[] = {
|
||||
0x0a800, 0x0a81b, 0x0a81e, 0x0a821, 0x0a823, 0x0a827, 0x0a830, 0x0a833,
|
||||
0x0a836, 0x0a839, 0x0a83b, 0x0a85b, 0x0a85e, 0x0a861, 0x0a863, 0x0a867,
|
||||
|
|
@ -498,7 +498,7 @@ static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_br_usptp_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_vs_pipe_br_usptp_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BV Location: uSPTP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BV Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_bv_usptp_registers[] = {
|
||||
0x0a800, 0x0a81b, 0x0a81e, 0x0a821, 0x0a823, 0x0a827, 0x0a830, 0x0a833,
|
||||
0x0a836, 0x0a839, 0x0a83b, 0x0a85b, 0x0a85e, 0x0a861, 0x0a863, 0x0a867,
|
||||
|
|
@ -508,7 +508,7 @@ static const u32 gen7_0_0_sp_cluster_sp_vs_pipe_bv_usptp_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_vs_pipe_bv_usptp_registers), 8));
|
||||
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers[] = {
|
||||
0x0b180, 0x0b183, 0x0b190, 0x0b195, 0x0b2c0, 0x0b2d5, 0x0b300, 0x0b307,
|
||||
0x0b309, 0x0b309, 0x0b310, 0x0b310,
|
||||
|
|
@ -516,35 +516,35 @@ static const u32 gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BV Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BV Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_bv_hlsq_state_registers[] = {
|
||||
0x0ab00, 0x0ab02, 0x0ab0a, 0x0ab1b, 0x0ab20, 0x0ab20, 0x0ab40, 0x0abbf,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_bv_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BV Location: SP_TOP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BV Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_bv_sp_top_registers[] = {
|
||||
0x0ab00, 0x0ab00, 0x0ab02, 0x0ab02, 0x0ab0a, 0x0ab1b, 0x0ab20, 0x0ab20,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_bv_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BV Location: uSPTP */
|
||||
/* Block: SP Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BV Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_cluster_sp_ps_pipe_bv_usptp_registers[] = {
|
||||
0x0ab00, 0x0ab02, 0x0ab21, 0x0ab22, 0x0ab40, 0x0abbf,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_cluster_sp_ps_pipe_bv_usptp_registers), 8));
|
||||
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_tpl1_cluster_sp_ps_pipe_bv_registers[] = {
|
||||
0x0b300, 0x0b307, 0x0b309, 0x0b309, 0x0b310, 0x0b310,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_cluster_sp_ps_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_PS Pipeline: A7XX_PIPE_LPAC */
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_PS Pipeline: PIPE_LPAC */
|
||||
static const u32 gen7_0_0_tpl1_cluster_sp_ps_pipe_lpac_registers[] = {
|
||||
0x0b180, 0x0b181, 0x0b300, 0x0b301, 0x0b307, 0x0b307, 0x0b309, 0x0b309,
|
||||
0x0b310, 0x0b310,
|
||||
|
|
@ -552,84 +552,84 @@ static const u32 gen7_0_0_tpl1_cluster_sp_ps_pipe_lpac_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_cluster_sp_ps_pipe_lpac_registers), 8));
|
||||
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_tpl1_cluster_sp_vs_pipe_br_registers[] = {
|
||||
0x0b300, 0x0b307, 0x0b309, 0x0b309, 0x0b310, 0x0b310,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_cluster_sp_vs_pipe_br_registers), 8));
|
||||
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_VS Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: TPL1 Cluster: A7XX_CLUSTER_SP_VS Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_tpl1_cluster_sp_vs_pipe_bv_registers[] = {
|
||||
0x0b300, 0x0b307, 0x0b309, 0x0b309, 0x0b310, 0x0b310,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_cluster_sp_vs_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: VFD Cluster: A7XX_CLUSTER_FE Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: VFD Cluster: A7XX_CLUSTER_FE Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_vfd_cluster_fe_pipe_br_registers[] = {
|
||||
0x0a000, 0x0a009, 0x0a00e, 0x0a0ef,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vfd_cluster_fe_pipe_br_registers), 8));
|
||||
|
||||
/* Block: VFD Cluster: A7XX_CLUSTER_FE Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: VFD Cluster: A7XX_CLUSTER_FE Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_vfd_cluster_fe_pipe_bv_registers[] = {
|
||||
0x0a000, 0x0a009, 0x0a00e, 0x0a0ef,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vfd_cluster_fe_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_FE Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_FE Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_vpc_cluster_fe_pipe_br_registers[] = {
|
||||
0x09300, 0x09307,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vpc_cluster_fe_pipe_br_registers), 8));
|
||||
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_FE Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_FE Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_vpc_cluster_fe_pipe_bv_registers[] = {
|
||||
0x09300, 0x09307,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vpc_cluster_fe_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_PC_VS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_PC_VS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_vpc_cluster_pc_vs_pipe_br_registers[] = {
|
||||
0x09101, 0x0910c, 0x09300, 0x09307,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vpc_cluster_pc_vs_pipe_br_registers), 8));
|
||||
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_PC_VS Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_PC_VS Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_vpc_cluster_pc_vs_pipe_bv_registers[] = {
|
||||
0x09101, 0x0910c, 0x09300, 0x09307,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vpc_cluster_pc_vs_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_VPC_PS Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_VPC_PS Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_vpc_cluster_vpc_ps_pipe_br_registers[] = {
|
||||
0x09200, 0x0920f, 0x09212, 0x09216, 0x09218, 0x09236, 0x09300, 0x09307,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vpc_cluster_vpc_ps_pipe_br_registers), 8));
|
||||
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_VPC_PS Pipeline: A7XX_PIPE_BV */
|
||||
/* Block: VPC Cluster: A7XX_CLUSTER_VPC_PS Pipeline: PIPE_BV */
|
||||
static const u32 gen7_0_0_vpc_cluster_vpc_ps_pipe_bv_registers[] = {
|
||||
0x09200, 0x0920f, 0x09212, 0x09216, 0x09218, 0x09236, 0x09300, 0x09307,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_vpc_cluster_vpc_ps_pipe_bv_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: noncontext Pipeline: A7XX_PIPE_BR Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: noncontext Pipeline: PIPE_BR Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_noncontext_pipe_br_hlsq_state_registers[] = {
|
||||
0x0ae52, 0x0ae52, 0x0ae60, 0x0ae67, 0x0ae69, 0x0ae73,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_noncontext_pipe_br_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: noncontext Pipeline: A7XX_PIPE_BR Location: SP_TOP */
|
||||
/* Block: SP Cluster: noncontext Pipeline: PIPE_BR Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_noncontext_pipe_br_sp_top_registers[] = {
|
||||
0x0ae00, 0x0ae00, 0x0ae02, 0x0ae04, 0x0ae06, 0x0ae09, 0x0ae0c, 0x0ae0c,
|
||||
0x0ae0f, 0x0ae0f, 0x0ae28, 0x0ae2b, 0x0ae35, 0x0ae35, 0x0ae3a, 0x0ae3f,
|
||||
|
|
@ -638,7 +638,7 @@ static const u32 gen7_0_0_sp_noncontext_pipe_br_sp_top_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_noncontext_pipe_br_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: noncontext Pipeline: A7XX_PIPE_BR Location: uSPTP */
|
||||
/* Block: SP Cluster: noncontext Pipeline: PIPE_BR Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_noncontext_pipe_br_usptp_registers[] = {
|
||||
0x0ae00, 0x0ae00, 0x0ae02, 0x0ae04, 0x0ae06, 0x0ae09, 0x0ae0c, 0x0ae0c,
|
||||
0x0ae0f, 0x0ae0f, 0x0ae30, 0x0ae32, 0x0ae35, 0x0ae35, 0x0ae3a, 0x0ae3b,
|
||||
|
|
@ -647,28 +647,28 @@ static const u32 gen7_0_0_sp_noncontext_pipe_br_usptp_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_noncontext_pipe_br_usptp_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: noncontext Pipeline: A7XX_PIPE_LPAC Location: HLSQ_STATE */
|
||||
/* Block: SP Cluster: noncontext Pipeline: PIPE_LPAC Location: HLSQ_STATE */
|
||||
static const u32 gen7_0_0_sp_noncontext_pipe_lpac_hlsq_state_registers[] = {
|
||||
0x0af88, 0x0af8a,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_noncontext_pipe_lpac_hlsq_state_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: noncontext Pipeline: A7XX_PIPE_LPAC Location: SP_TOP */
|
||||
/* Block: SP Cluster: noncontext Pipeline: PIPE_LPAC Location: SP_TOP */
|
||||
static const u32 gen7_0_0_sp_noncontext_pipe_lpac_sp_top_registers[] = {
|
||||
0x0af80, 0x0af84,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_noncontext_pipe_lpac_sp_top_registers), 8));
|
||||
|
||||
/* Block: SP Cluster: noncontext Pipeline: A7XX_PIPE_LPAC Location: uSPTP */
|
||||
/* Block: SP Cluster: noncontext Pipeline: PIPE_LPAC Location: uSPTP */
|
||||
static const u32 gen7_0_0_sp_noncontext_pipe_lpac_usptp_registers[] = {
|
||||
0x0af80, 0x0af84, 0x0af90, 0x0af92,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_sp_noncontext_pipe_lpac_usptp_registers), 8));
|
||||
|
||||
/* Block: TPl1 Cluster: noncontext Pipeline: A7XX_PIPE_NONE */
|
||||
/* Block: TPl1 Cluster: noncontext Pipeline: PIPE_NONE */
|
||||
static const u32 gen7_0_0_tpl1_noncontext_pipe_none_registers[] = {
|
||||
0x0b600, 0x0b600, 0x0b602, 0x0b602, 0x0b604, 0x0b604, 0x0b608, 0x0b60c,
|
||||
0x0b60f, 0x0b621, 0x0b630, 0x0b633,
|
||||
|
|
@ -676,14 +676,14 @@ static const u32 gen7_0_0_tpl1_noncontext_pipe_none_registers[] = {
|
|||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_noncontext_pipe_none_registers), 8));
|
||||
|
||||
/* Block: TPl1 Cluster: noncontext Pipeline: A7XX_PIPE_BR */
|
||||
/* Block: TPl1 Cluster: noncontext Pipeline: PIPE_BR */
|
||||
static const u32 gen7_0_0_tpl1_noncontext_pipe_br_registers[] = {
|
||||
0x0b600, 0x0b600,
|
||||
UINT_MAX, UINT_MAX,
|
||||
};
|
||||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_noncontext_pipe_br_registers), 8));
|
||||
|
||||
/* Block: TPl1 Cluster: noncontext Pipeline: A7XX_PIPE_LPAC */
|
||||
/* Block: TPl1 Cluster: noncontext Pipeline: PIPE_LPAC */
|
||||
static const u32 gen7_0_0_tpl1_noncontext_pipe_lpac_registers[] = {
|
||||
0x0b780, 0x0b780,
|
||||
UINT_MAX, UINT_MAX,
|
||||
|
|
@ -691,184 +691,184 @@ static const u32 gen7_0_0_tpl1_noncontext_pipe_lpac_registers[] = {
|
|||
static_assert(IS_ALIGNED(sizeof(gen7_0_0_tpl1_noncontext_pipe_lpac_registers), 8));
|
||||
|
||||
static const struct gen7_sel_reg gen7_0_0_rb_rac_sel = {
|
||||
.host_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.host_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.val = 0x0,
|
||||
};
|
||||
|
||||
static const struct gen7_sel_reg gen7_0_0_rb_rbp_sel = {
|
||||
.host_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.host_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.val = 0x9,
|
||||
};
|
||||
|
||||
static const struct gen7_cluster_registers gen7_0_0_clusters[] = {
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_0_0_noncontext_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BV, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BV, STATE_NON_CONTEXT,
|
||||
gen7_0_0_noncontext_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_LPAC, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_LPAC, STATE_NON_CONTEXT,
|
||||
gen7_0_0_noncontext_pipe_lpac_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_0_0_noncontext_rb_rac_pipe_br_registers, &gen7_0_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_0_0_noncontext_rb_rbp_pipe_br_registers, &gen7_0_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_gras_cluster_gras_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_gras_cluster_gras_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_gras_cluster_gras_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_gras_cluster_gras_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_pc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_pc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_pc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_pc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_rb_rac_cluster_ps_pipe_br_registers, &gen7_0_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_rb_rac_cluster_ps_pipe_br_registers, &gen7_0_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers, &gen7_0_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers, &gen7_0_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_bv_registers, },
|
||||
};
|
||||
|
||||
static const struct gen7_sptp_cluster_registers gen7_0_0_sptp_clusters[] = {
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_noncontext_pipe_br_hlsq_state_registers, 0xae00 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_noncontext_pipe_br_sp_top_registers, 0xae00 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_noncontext_pipe_br_usptp_registers, 0xae00 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_noncontext_pipe_lpac_hlsq_state_registers, 0xaf80 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_noncontext_pipe_lpac_sp_top_registers, 0xaf80 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_noncontext_pipe_lpac_usptp_registers, 0xaf80 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_noncontext_pipe_br_registers, 0xb600 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_noncontext_pipe_lpac_registers, 0xb780 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_lpac_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_lpac_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_bv_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_USPTP,
|
||||
gen7_0_0_sp_cluster_sp_vs_pipe_bv_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_lpac_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_bv_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_bv_registers, 0xb000 },
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -96,87 +96,87 @@ static const u32 gen7_2_0_debugbus_blocks[] = {
|
|||
};
|
||||
|
||||
static const struct gen7_shader_block gen7_2_0_shader_blocks[] = {
|
||||
{A7XX_TP0_TMO_DATA, 0x200, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_SMO_DATA, 0x80, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_MIPMAP_BASE_DATA, 0x3c0, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_1, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_0_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_1_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_2_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_3_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_4_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_5_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_6_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_7_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_CB_RAM, 0x390, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_13_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_14_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_TAG, 0xc0, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_2, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_TMO_TAG, 0x80, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_SMO_TAG, 0x80, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_STATE_DATA, 0x40, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_HWAVE_RAM, 0x100, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_L0_INST_BUF, 0x50, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_8_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_9_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_10_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_11_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_12_DATA, 0x800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM, 0x300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x180, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x200, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_1, 0x1c0, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x200, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x64, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x38, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x64, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x10, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_1, 0x800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_STPROC_META, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_DATAPATH_META, 0x20, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x80, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x80, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x80, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INDIRECT_META, 0x10, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_TP0_TMO_DATA, 0x200, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_SMO_DATA, 0x80, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_TP0_MIPMAP_BASE_DATA, 0x3c0, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_1, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_0_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_1_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_2_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_3_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_4_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_5_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_6_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_7_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_CB_RAM, 0x390, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_13_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_14_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_TAG, 0xc0, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_INST_DATA_2, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_TMO_TAG, 0x80, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_SMO_TAG, 0x80, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_STATE_DATA, 0x40, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_HWAVE_RAM, 0x100, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_L0_INST_BUF, 0x50, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_8_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_9_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_10_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_11_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_SP_LB_12_DATA, 0x800, 6, 2, PIPE_BR, A7XX_USPTP},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x300, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM, 0x300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM, 0x1c0, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM, 0x180, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x40, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x40, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x10, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM, 0x280, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM, 0x200, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_1, 0x1c0, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x800, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM, 0x200, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x10, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_TAG, 0x80, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x64, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x38, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x64, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x10, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x800, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x800, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INST_RAM_1, 0x800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_STPROC_META, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BV_BE_META, 0x10, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_DATAPATH_META, 0x20, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x80, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x80, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_FRONTEND_META, 0x80, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_INDIRECT_META, 0x10, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, PIPE_BR, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, PIPE_BV, A7XX_HLSQ_STATE},
|
||||
{A7XX_HLSQ_BACKEND_META, 0x40, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE},
|
||||
};
|
||||
|
||||
static const u32 gen7_2_0_gpu_registers[] = {
|
||||
|
|
@ -478,182 +478,182 @@ static const u32 gen7_2_0_sp_noncontext_pipe_lpac_hlsq_state_registers[] = {
|
|||
static_assert(IS_ALIGNED(sizeof(gen7_2_0_sp_noncontext_pipe_lpac_hlsq_state_registers), 8));
|
||||
|
||||
static const struct gen7_sel_reg gen7_2_0_rb_rac_sel = {
|
||||
.host_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.host_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.val = 0x0,
|
||||
};
|
||||
|
||||
static const struct gen7_sel_reg gen7_2_0_rb_rbp_sel = {
|
||||
.host_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.host_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.val = 0x9,
|
||||
};
|
||||
|
||||
static const struct gen7_cluster_registers gen7_2_0_clusters[] = {
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_2_0_noncontext_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BV, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BV, STATE_NON_CONTEXT,
|
||||
gen7_2_0_noncontext_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_LPAC, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_LPAC, STATE_NON_CONTEXT,
|
||||
gen7_0_0_noncontext_pipe_lpac_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_2_0_noncontext_rb_rac_pipe_br_registers, &gen7_2_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_2_0_noncontext_rb_rbp_pipe_br_registers, &gen7_2_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_2_0_gras_cluster_gras_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_2_0_gras_cluster_gras_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_2_0_gras_cluster_gras_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_2_0_gras_cluster_gras_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_pc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_pc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_pc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_pc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_2_0_rb_rac_cluster_ps_pipe_br_registers, &gen7_2_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_2_0_rb_rac_cluster_ps_pipe_br_registers, &gen7_2_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers, &gen7_2_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_rb_rbp_cluster_ps_pipe_br_registers, &gen7_2_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vfd_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_fe_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_pc_vs_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_0_0_vpc_cluster_vpc_ps_pipe_bv_registers, },
|
||||
};
|
||||
|
||||
static const struct gen7_sptp_cluster_registers gen7_2_0_sptp_clusters[] = {
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_0_0_sp_noncontext_pipe_br_hlsq_state_registers, 0xae00 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_noncontext_pipe_br_sp_top_registers, 0xae00 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_noncontext_pipe_br_usptp_registers, 0xae00 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_noncontext_pipe_lpac_hlsq_state_registers, 0xaf80 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
gen7_0_0_sp_noncontext_pipe_lpac_sp_top_registers, 0xaf80 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_sp_noncontext_pipe_lpac_usptp_registers, 0xaf80 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_noncontext_pipe_br_registers, 0xb600 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_NONE, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_NONE, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_noncontext_pipe_none_registers, 0xb600 },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_noncontext_pipe_lpac_registers, 0xb780 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_br_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_lpac_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_HLSQ_DP,
|
||||
gen7_0_0_sp_cluster_sp_ps_pipe_lpac_hlsq_dp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_lpac_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_ps_pipe_lpac_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_bv_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_br_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_HLSQ_STATE,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_bv_hlsq_state_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_br_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_SP_TOP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_bv_sp_top_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_br_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_USPTP,
|
||||
gen7_2_0_sp_cluster_sp_vs_pipe_bv_usptp_registers, 0xa800 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_TP0_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_ps_pipe_lpac_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_bv_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_br_registers, 0xb000 },
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_TP0_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_USPTP,
|
||||
gen7_0_0_tpl1_cluster_sp_vs_pipe_bv_registers, 0xb000 },
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -118,97 +118,97 @@ static const u32 gen7_9_0_cx_debugbus_blocks[] = {
|
|||
};
|
||||
|
||||
static const struct gen7_shader_block gen7_9_0_shader_blocks[] = {
|
||||
{ A7XX_TP0_TMO_DATA, 0x0200, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_TP0_SMO_DATA, 0x0080, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_TP0_MIPMAP_BASE_DATA, 0x03C0, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_DATA_1, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_0_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_1_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_2_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_3_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_4_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_5_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_6_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_7_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_CB_RAM, 0x0390, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_13_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_14_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_TAG, 0x00C0, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_DATA_2, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_TMO_TAG, 0x0080, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_SMO_TAG, 0x0080, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_STATE_DATA, 0x0040, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_HWAVE_RAM, 0x0100, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_L0_INST_BUF, 0x0050, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_8_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_9_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_10_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_11_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_12_DATA, 0x0800, 6, 2, A7XX_PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_HLSQ_DATAPATH_DSTR_META, 0x0010, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_DATAPATH_DSTR_META, 0x0010, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_L2STC_TAG_RAM, 0x0200, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_L2STC_INFO_CMD, 0x0474, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x0080, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x0080, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG, 0x0080, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x0400, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x0400, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM, 0x0400, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM, 0x01C0, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM, 0x01C0, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM, 0x0300, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM, 0x0180, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x0010, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x0010, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x0010, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x0010, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM, 0x0540, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM, 0x0540, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM, 0x0640, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM, 0x00B0, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM_1, 0x0800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM, 0x0800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM, 0x0800, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM, 0x0200, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x0800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x0800, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x0800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x0800, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x0050, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x0050, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x0050, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x0008, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_TAG, 0x0014, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_TAG, 0x0010, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_TAG, 0x0004, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x0040, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x0020, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM, 0x03C0, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM, 0x0280, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM, 0x0050, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM_TAG, 0x0010, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM_TAG, 0x0008, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_1, 0x0800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_STPROC_META, 0x0010, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BV_BE_META, 0x0018, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BV_BE_META, 0x0018, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_2, 0x0800, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_DATAPATH_META, 0x0020, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_FRONTEND_META, 0x0080, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_FRONTEND_META, 0x0080, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_FRONTEND_META, 0x0080, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INDIRECT_META, 0x0010, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BACKEND_META, 0x0040, 1, 1, A7XX_PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BACKEND_META, 0x0040, 1, 1, A7XX_PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BACKEND_META, 0x0040, 1, 1, A7XX_PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_TP0_TMO_DATA, 0x0200, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_TP0_SMO_DATA, 0x0080, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_TP0_MIPMAP_BASE_DATA, 0x03C0, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_DATA_1, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_0_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_1_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_2_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_3_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_4_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_5_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_6_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_7_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_CB_RAM, 0x0390, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_13_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_14_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_TAG, 0x00C0, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_INST_DATA_2, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_TMO_TAG, 0x0080, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_SMO_TAG, 0x0080, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_STATE_DATA, 0x0040, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_HWAVE_RAM, 0x0100, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_L0_INST_BUF, 0x0050, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_8_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_9_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_10_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_11_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_SP_LB_12_DATA, 0x0800, 6, 2, PIPE_BR, A7XX_USPTP },
|
||||
{ A7XX_HLSQ_DATAPATH_DSTR_META, 0x0010, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_DATAPATH_DSTR_META, 0x0010, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_L2STC_TAG_RAM, 0x0200, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_L2STC_INFO_CMD, 0x0474, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x0080, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG, 0x0080, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG, 0x0080, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x0400, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM, 0x0400, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM, 0x0400, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM, 0x01C0, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM, 0x01C0, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM, 0x0300, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM, 0x0180, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x0040, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CVS_RAM_TAG, 0x0040, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x0040, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CHUNK_CPS_RAM_TAG, 0x0040, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x0010, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CVS_CB_BASE_TAG, 0x0010, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x0010, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_ICB_CPS_CB_BASE_TAG, 0x0010, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM, 0x0540, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM, 0x0540, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM, 0x0640, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM, 0x00B0, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM_1, 0x0800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM, 0x0800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM, 0x0800, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM, 0x0200, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x0800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM, 0x0800, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x0800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM, 0x0800, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x0050, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CVS_MISC_RAM_TAG, 0x0050, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x0050, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_CPS_MISC_RAM_TAG, 0x0008, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_TAG, 0x0014, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_TAG, 0x0010, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_TAG, 0x0004, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x0040, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CVS_CONST_RAM_TAG, 0x0040, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x0040, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_CPS_CONST_RAM_TAG, 0x0020, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM, 0x03C0, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM, 0x0280, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM, 0x0050, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM_TAG, 0x0010, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_GFX_LOCAL_MISC_RAM_TAG, 0x0008, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_1, 0x0800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_STPROC_META, 0x0010, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BV_BE_META, 0x0018, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BV_BE_META, 0x0018, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INST_RAM_2, 0x0800, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_DATAPATH_META, 0x0020, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_FRONTEND_META, 0x0080, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_FRONTEND_META, 0x0080, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_FRONTEND_META, 0x0080, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_INDIRECT_META, 0x0010, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BACKEND_META, 0x0040, 1, 1, PIPE_BR, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BACKEND_META, 0x0040, 1, 1, PIPE_BV, A7XX_HLSQ_STATE },
|
||||
{ A7XX_HLSQ_BACKEND_META, 0x0040, 1, 1, PIPE_LPAC, A7XX_HLSQ_STATE },
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -226,7 +226,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_pre_crashdumper_gpu_registers), 8));
|
|||
* Block : ['BROADCAST', 'CP', 'GRAS', 'GXCLKCTL']
|
||||
* Block : ['PC', 'RBBM', 'RDVM', 'UCHE']
|
||||
* Block : ['VFD', 'VPC', 'VSC']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* pairs : 196 (Regs:1778)
|
||||
*/
|
||||
static const u32 gen7_9_0_gpu_registers[] = {
|
||||
|
|
@ -290,7 +290,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_gxclkctl_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['GMUAO', 'GMUCX', 'GMUCX_RAM']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* pairs : 134 (Regs:429)
|
||||
*/
|
||||
static const u32 gen7_9_0_gmu_registers[] = {
|
||||
|
|
@ -334,7 +334,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_gmu_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['GMUGX']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* pairs : 44 (Regs:454)
|
||||
*/
|
||||
static const u32 gen7_9_0_gmugx_registers[] = {
|
||||
|
|
@ -355,7 +355,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_gmugx_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['CX_MISC']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* pairs : 7 (Regs:56)
|
||||
*/
|
||||
static const u32 gen7_9_0_cx_misc_registers[] = {
|
||||
|
|
@ -367,7 +367,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_cx_misc_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['DBGC']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* pairs : 19 (Regs:155)
|
||||
*/
|
||||
static const u32 gen7_9_0_dbgc_registers[] = {
|
||||
|
|
@ -382,7 +382,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_dbgc_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['CX_DBGC']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* pairs : 7 (Regs:75)
|
||||
*/
|
||||
static const u32 gen7_9_0_cx_dbgc_registers[] = {
|
||||
|
|
@ -396,7 +396,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_cx_dbgc_registers), 8));
|
|||
* Block : ['BROADCAST', 'CP', 'CX_DBGC', 'CX_MISC', 'DBGC', 'GBIF']
|
||||
* Block : ['GMUAO', 'GMUCX', 'GMUGX', 'GRAS', 'GXCLKCTL', 'PC']
|
||||
* Block : ['RBBM', 'RDVM', 'UCHE', 'VFD', 'VPC', 'VSC']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* pairs : 29 (Regs:573)
|
||||
*/
|
||||
|
|
@ -417,7 +417,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_pipe_br_registers), 8));
|
|||
* Block : ['BROADCAST', 'CP', 'CX_DBGC', 'CX_MISC', 'DBGC', 'GBIF']
|
||||
* Block : ['GMUAO', 'GMUCX', 'GMUGX', 'GRAS', 'GXCLKCTL', 'PC']
|
||||
* Block : ['RBBM', 'RDVM', 'UCHE', 'VFD', 'VPC', 'VSC']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* pairs : 29 (Regs:573)
|
||||
*/
|
||||
|
|
@ -438,7 +438,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_pipe_bv_registers), 8));
|
|||
* Block : ['BROADCAST', 'CP', 'CX_DBGC', 'CX_MISC', 'DBGC', 'GBIF']
|
||||
* Block : ['GMUAO', 'GMUCX', 'GMUGX', 'GRAS', 'GXCLKCTL', 'PC']
|
||||
* Block : ['RBBM', 'RDVM', 'UCHE', 'VFD', 'VPC', 'VSC']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* pairs : 2 (Regs:7)
|
||||
*/
|
||||
|
|
@ -450,7 +450,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_pipe_lpac_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['RB']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* pairs : 5 (Regs:37)
|
||||
*/
|
||||
|
|
@ -463,7 +463,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_rb_pipe_br_rac_registers),
|
|||
|
||||
/*
|
||||
* Block : ['RB']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* pairs : 15 (Regs:66)
|
||||
*/
|
||||
|
|
@ -478,7 +478,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_rb_pipe_br_rbp_registers),
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_HLSQ_STATE
|
||||
* pairs : 4 (Regs:28)
|
||||
|
|
@ -491,7 +491,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_br_hlsq_state_regis
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_SP_TOP
|
||||
* pairs : 10 (Regs:61)
|
||||
|
|
@ -506,7 +506,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_br_sp_top_registers
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 12 (Regs:62)
|
||||
|
|
@ -521,7 +521,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_br_usptp_registers)
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_HLSQ_DP_STR
|
||||
* pairs : 2 (Regs:5)
|
||||
|
|
@ -534,7 +534,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_br_hlsq_dp_str_regi
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_HLSQ_STATE
|
||||
* pairs : 1 (Regs:5)
|
||||
|
|
@ -547,7 +547,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_lpac_hlsq_state_reg
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_SP_TOP
|
||||
* pairs : 1 (Regs:6)
|
||||
|
|
@ -560,7 +560,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_lpac_sp_top_registe
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 2 (Regs:9)
|
||||
|
|
@ -573,7 +573,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_sp_pipe_lpac_usptp_register
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_NONE
|
||||
* Pipeline: PIPE_NONE
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 5 (Regs:29)
|
||||
|
|
@ -587,7 +587,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_tpl1_pipe_none_usptp_regist
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 1 (Regs:1)
|
||||
|
|
@ -600,7 +600,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_tpl1_pipe_br_usptp_register
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_NONE
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 1 (Regs:1)
|
||||
|
|
@ -613,7 +613,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_non_context_tpl1_pipe_lpac_usptp_regist
|
|||
|
||||
/*
|
||||
* Block : ['GRAS']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_GRAS
|
||||
* pairs : 14 (Regs:293)
|
||||
*/
|
||||
|
|
@ -628,7 +628,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_gras_pipe_br_cluster_gras_registers), 8
|
|||
|
||||
/*
|
||||
* Block : ['GRAS']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_GRAS
|
||||
* pairs : 14 (Regs:293)
|
||||
*/
|
||||
|
|
@ -643,7 +643,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_gras_pipe_bv_cluster_gras_registers), 8
|
|||
|
||||
/*
|
||||
* Block : ['PC']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_FE
|
||||
* pairs : 6 (Regs:31)
|
||||
*/
|
||||
|
|
@ -656,7 +656,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_pc_pipe_br_cluster_fe_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['PC']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_FE
|
||||
* pairs : 6 (Regs:31)
|
||||
*/
|
||||
|
|
@ -669,7 +669,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_pc_pipe_bv_cluster_fe_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['VFD']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_FE
|
||||
* pairs : 2 (Regs:236)
|
||||
*/
|
||||
|
|
@ -681,7 +681,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vfd_pipe_br_cluster_fe_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['VFD']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_FE
|
||||
* pairs : 2 (Regs:236)
|
||||
*/
|
||||
|
|
@ -693,7 +693,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vfd_pipe_bv_cluster_fe_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['VPC']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_FE
|
||||
* pairs : 2 (Regs:18)
|
||||
*/
|
||||
|
|
@ -705,7 +705,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vpc_pipe_br_cluster_fe_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['VPC']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_PC_VS
|
||||
* pairs : 3 (Regs:30)
|
||||
*/
|
||||
|
|
@ -717,7 +717,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vpc_pipe_br_cluster_pc_vs_registers), 8
|
|||
|
||||
/*
|
||||
* Block : ['VPC']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_VPC_PS
|
||||
* pairs : 5 (Regs:76)
|
||||
*/
|
||||
|
|
@ -730,7 +730,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vpc_pipe_br_cluster_vpc_ps_registers),
|
|||
|
||||
/*
|
||||
* Block : ['VPC']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_FE
|
||||
* pairs : 2 (Regs:18)
|
||||
*/
|
||||
|
|
@ -742,7 +742,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vpc_pipe_bv_cluster_fe_registers), 8));
|
|||
|
||||
/*
|
||||
* Block : ['VPC']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_PC_VS
|
||||
* pairs : 3 (Regs:30)
|
||||
*/
|
||||
|
|
@ -754,7 +754,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vpc_pipe_bv_cluster_pc_vs_registers), 8
|
|||
|
||||
/*
|
||||
* Block : ['VPC']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_VPC_PS
|
||||
* pairs : 5 (Regs:76)
|
||||
*/
|
||||
|
|
@ -767,7 +767,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_vpc_pipe_bv_cluster_vpc_ps_registers),
|
|||
|
||||
/*
|
||||
* Block : ['RB']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_PS
|
||||
* pairs : 39 (Regs:133)
|
||||
*/
|
||||
|
|
@ -788,7 +788,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_rb_pipe_br_cluster_ps_rac_registers), 8
|
|||
|
||||
/*
|
||||
* Block : ['RB']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_PS
|
||||
* pairs : 34 (Regs:100)
|
||||
*/
|
||||
|
|
@ -808,7 +808,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_rb_pipe_br_cluster_ps_rbp_registers), 8
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_HLSQ_STATE
|
||||
* pairs : 29 (Regs:215)
|
||||
|
|
@ -828,7 +828,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_vs_hlsq_state_reg
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_SP_TOP
|
||||
* pairs : 22 (Regs:73)
|
||||
|
|
@ -846,7 +846,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_vs_sp_top_registe
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 16 (Regs:269)
|
||||
|
|
@ -862,7 +862,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_vs_usptp_register
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_HLSQ_STATE
|
||||
* pairs : 21 (Regs:334)
|
||||
|
|
@ -880,7 +880,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_state_reg
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_HLSQ_DP
|
||||
* pairs : 3 (Regs:19)
|
||||
|
|
@ -893,7 +893,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_regist
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_SP_TOP
|
||||
* pairs : 18 (Regs:77)
|
||||
|
|
@ -910,7 +910,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_ps_sp_top_registe
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 17 (Regs:333)
|
||||
|
|
@ -927,7 +927,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_ps_usptp_register
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_HLSQ_DP_STR
|
||||
* pairs : 1 (Regs:6)
|
||||
|
|
@ -940,7 +940,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_str_re
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_HLSQ_STATE
|
||||
* pairs : 28 (Regs:213)
|
||||
|
|
@ -959,7 +959,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_bv_cluster_sp_vs_hlsq_state_reg
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_SP_TOP
|
||||
* pairs : 21 (Regs:71)
|
||||
|
|
@ -977,7 +977,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_bv_cluster_sp_vs_sp_top_registe
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 16 (Regs:266)
|
||||
|
|
@ -993,7 +993,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_bv_cluster_sp_vs_usptp_register
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_HLSQ_STATE
|
||||
* pairs : 14 (Regs:299)
|
||||
|
|
@ -1009,7 +1009,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_lpac_cluster_sp_ps_hlsq_state_r
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_HLSQ_DP
|
||||
* pairs : 2 (Regs:13)
|
||||
|
|
@ -1022,7 +1022,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_lpac_cluster_sp_ps_hlsq_dp_regi
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_SP_TOP
|
||||
* pairs : 9 (Regs:34)
|
||||
|
|
@ -1037,7 +1037,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_lpac_cluster_sp_ps_sp_top_regis
|
|||
|
||||
/*
|
||||
* Block : ['SP']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 11 (Regs:279)
|
||||
|
|
@ -1052,7 +1052,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_sp_pipe_lpac_cluster_sp_ps_usptp_regist
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 3 (Regs:10)
|
||||
|
|
@ -1065,7 +1065,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_tpl1_pipe_br_cluster_sp_vs_usptp_regist
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_BR
|
||||
* Pipeline: PIPE_BR
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 6 (Regs:42)
|
||||
|
|
@ -1079,7 +1079,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_tpl1_pipe_br_cluster_sp_ps_usptp_regist
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_BV
|
||||
* Pipeline: PIPE_BV
|
||||
* Cluster : A7XX_CLUSTER_SP_VS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 3 (Regs:10)
|
||||
|
|
@ -1092,7 +1092,7 @@ static_assert(IS_ALIGNED(sizeof(gen7_9_0_tpl1_pipe_bv_cluster_sp_vs_usptp_regist
|
|||
|
||||
/*
|
||||
* Block : ['TPL1']
|
||||
* Pipeline: A7XX_PIPE_LPAC
|
||||
* Pipeline: PIPE_LPAC
|
||||
* Cluster : A7XX_CLUSTER_SP_PS
|
||||
* Location: A7XX_USPTP
|
||||
* pairs : 5 (Regs:7)
|
||||
|
|
@ -1105,192 +1105,192 @@ static const u32 gen7_9_0_tpl1_pipe_lpac_cluster_sp_ps_usptp_registers[] = {
|
|||
static_assert(IS_ALIGNED(sizeof(gen7_9_0_tpl1_pipe_lpac_cluster_sp_ps_usptp_registers), 8));
|
||||
|
||||
static const struct gen7_sel_reg gen7_9_0_rb_rac_sel = {
|
||||
.host_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.host_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.val = 0,
|
||||
};
|
||||
|
||||
static const struct gen7_sel_reg gen7_9_0_rb_rbp_sel = {
|
||||
.host_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.host_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_HOST,
|
||||
.cd_reg = REG_A6XX_RB_SUB_BLOCK_SEL_CNTL_CD,
|
||||
.val = 0x9,
|
||||
};
|
||||
|
||||
static const struct gen7_cluster_registers gen7_9_0_clusters[] = {
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_9_0_non_context_pipe_br_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BV, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BV, STATE_NON_CONTEXT,
|
||||
gen7_9_0_non_context_pipe_bv_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_LPAC, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_LPAC, STATE_NON_CONTEXT,
|
||||
gen7_9_0_non_context_pipe_lpac_registers, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_9_0_non_context_rb_pipe_br_rac_registers, &gen7_9_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_NONE, A7XX_PIPE_BR, STATE_NON_CONTEXT,
|
||||
{ A7XX_CLUSTER_NONE, PIPE_BR, STATE_NON_CONTEXT,
|
||||
gen7_9_0_non_context_rb_pipe_br_rbp_registers, &gen7_9_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_rb_pipe_br_cluster_ps_rac_registers, &gen7_9_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_rb_pipe_br_cluster_ps_rac_registers, &gen7_9_0_rb_rac_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_rb_pipe_br_cluster_ps_rbp_registers, &gen7_9_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_rb_pipe_br_cluster_ps_rbp_registers, &gen7_9_0_rb_rbp_sel, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_gras_pipe_br_cluster_gras_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_gras_pipe_br_cluster_gras_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_gras_pipe_bv_cluster_gras_registers, },
|
||||
{ A7XX_CLUSTER_GRAS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_GRAS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_gras_pipe_bv_cluster_gras_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_pc_pipe_br_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_pc_pipe_br_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_pc_pipe_bv_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_pc_pipe_bv_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vfd_pipe_br_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vfd_pipe_br_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vfd_pipe_bv_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vfd_pipe_bv_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vpc_pipe_br_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vpc_pipe_br_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vpc_pipe_br_cluster_pc_vs_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vpc_pipe_br_cluster_pc_vs_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BR, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vpc_pipe_br_cluster_vpc_ps_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BR, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vpc_pipe_br_cluster_vpc_ps_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vpc_pipe_bv_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_FE, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_FE, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vpc_pipe_bv_cluster_fe_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vpc_pipe_bv_cluster_pc_vs_registers, },
|
||||
{ A7XX_CLUSTER_PC_VS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_PC_VS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vpc_pipe_bv_cluster_pc_vs_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BV, STATE_FORCE_CTXT_0,
|
||||
gen7_9_0_vpc_pipe_bv_cluster_vpc_ps_registers, },
|
||||
{ A7XX_CLUSTER_VPC_PS, A7XX_PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
{ A7XX_CLUSTER_VPC_PS, PIPE_BV, STATE_FORCE_CTXT_1,
|
||||
gen7_9_0_vpc_pipe_bv_cluster_vpc_ps_registers, },
|
||||
};
|
||||
|
||||
static const struct gen7_sptp_cluster_registers gen7_9_0_sptp_clusters[] = {
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_non_context_sp_pipe_br_hlsq_state_registers, 0xae00},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_9_0_non_context_sp_pipe_br_sp_top_registers, 0xae00},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_9_0_non_context_sp_pipe_br_usptp_registers, 0xae00},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_DP_STR,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_BR, 0, A7XX_HLSQ_DP_STR,
|
||||
gen7_9_0_non_context_sp_pipe_br_hlsq_dp_str_registers, 0xae00},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_non_context_sp_pipe_lpac_hlsq_state_registers, 0xaf80},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
gen7_9_0_non_context_sp_pipe_lpac_sp_top_registers, 0xaf80},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_SP_NCTX_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_9_0_non_context_sp_pipe_lpac_usptp_registers, 0xaf80},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_NONE, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_NONE, 0, A7XX_USPTP,
|
||||
gen7_9_0_non_context_tpl1_pipe_none_usptp_registers, 0xb600},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_9_0_non_context_tpl1_pipe_br_usptp_registers, 0xb600},
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_NONE, A7XX_TP0_NCTX_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_9_0_non_context_tpl1_pipe_lpac_usptp_registers, 0xb780},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_vs_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_vs_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_vs_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_bv_cluster_sp_vs_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_bv_cluster_sp_vs_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_bv_cluster_sp_vs_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_vs_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_vs_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_vs_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_bv_cluster_sp_vs_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_bv_cluster_sp_vs_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_bv_cluster_sp_vs_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_DP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_HLSQ_DP_STR,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_HLSQ_DP_STR,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_str_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_lpac_cluster_sp_ps_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_HLSQ_DP,
|
||||
gen7_9_0_sp_pipe_lpac_cluster_sp_ps_hlsq_dp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_lpac_cluster_sp_ps_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_lpac_cluster_sp_ps_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_STATE,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_state_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_DP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_HLSQ_DP_STR,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_HLSQ_DP_STR,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_str_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_HLSQ_DP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_HLSQ_DP_STR,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_HLSQ_DP_STR,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_str_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_HLSQ_DP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_HLSQ_DP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_SP_TOP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_SP_TOP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_sp_top_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_USPTP,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_usptp_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_HLSQ_DP_STR,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_HLSQ_DP_STR,
|
||||
gen7_9_0_sp_pipe_br_cluster_sp_ps_hlsq_dp_str_registers, 0xa800},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_br_cluster_sp_vs_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, A7XX_PIPE_BV, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX0_3D_CVS_REG, PIPE_BV, 0, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_bv_cluster_sp_vs_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_br_cluster_sp_vs_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, A7XX_PIPE_BV, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_VS, A7XX_SP_CTX1_3D_CVS_REG, PIPE_BV, 1, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_bv_cluster_sp_vs_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_BR, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_BR, 0, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_br_cluster_sp_ps_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, A7XX_PIPE_LPAC, 0, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX0_3D_CPS_REG, PIPE_LPAC, 0, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_lpac_cluster_sp_ps_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, A7XX_PIPE_BR, 1, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX1_3D_CPS_REG, PIPE_BR, 1, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_br_cluster_sp_ps_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, A7XX_PIPE_BR, 2, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX2_3D_CPS_REG, PIPE_BR, 2, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_br_cluster_sp_ps_usptp_registers, 0xb000},
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, A7XX_PIPE_BR, 3, A7XX_USPTP,
|
||||
{ A7XX_CLUSTER_SP_PS, A7XX_SP_CTX3_3D_CPS_REG, PIPE_BR, 3, A7XX_USPTP,
|
||||
gen7_9_0_tpl1_pipe_br_cluster_sp_ps_usptp_registers, 0xb000},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -284,6 +284,7 @@ int adreno_fault_handler(struct msm_gpu *gpu, unsigned long iova, int flags,
|
|||
struct adreno_smmu_fault_info *info, const char *block,
|
||||
u32 scratch[4])
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = container_of(gpu, struct adreno_gpu, base);
|
||||
struct msm_drm_private *priv = gpu->dev->dev_private;
|
||||
struct msm_mmu *mmu = to_msm_vm(gpu->vm)->mmu;
|
||||
const char *type = "UNKNOWN";
|
||||
|
|
@ -336,6 +337,11 @@ int adreno_fault_handler(struct msm_gpu *gpu, unsigned long iova, int flags,
|
|||
/* Turn off the hangcheck timer to keep it from bothering us */
|
||||
timer_delete(&gpu->hangcheck_timer);
|
||||
|
||||
/* Let any concurrent GMU transactions know that the MMU may be
|
||||
* blocked for a while and they should wait on us.
|
||||
*/
|
||||
reinit_completion(&adreno_gpu->fault_coredump_done);
|
||||
|
||||
fault_info.ttbr0 = info->ttbr0;
|
||||
fault_info.iova = iova;
|
||||
fault_info.flags = flags;
|
||||
|
|
@ -343,6 +349,8 @@ int adreno_fault_handler(struct msm_gpu *gpu, unsigned long iova, int flags,
|
|||
fault_info.block = block;
|
||||
|
||||
msm_gpu_fault_crashstate_capture(gpu, &fault_info);
|
||||
|
||||
complete_all(&adreno_gpu->fault_coredump_done);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1189,6 +1197,7 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
|
|||
|
||||
/* Only handle the core clock when GMU is not in use (or is absent). */
|
||||
if (adreno_has_gmu_wrapper(adreno_gpu) ||
|
||||
adreno_has_rgmu(adreno_gpu) ||
|
||||
adreno_gpu->info->family < ADRENO_6XX_GEN1) {
|
||||
/*
|
||||
* This can only be done before devm_pm_opp_of_add_table(), or
|
||||
|
|
@ -1222,6 +1231,9 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
init_completion(&adreno_gpu->fault_coredump_done);
|
||||
complete_all(&adreno_gpu->fault_coredump_done);
|
||||
|
||||
pm_runtime_set_autosuspend_delay(dev,
|
||||
adreno_gpu->info->inactive_period);
|
||||
pm_runtime_use_autosuspend(dev);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ enum {
|
|||
ADRENO_FW_PFP = 1,
|
||||
ADRENO_FW_GMU = 1, /* a6xx */
|
||||
ADRENO_FW_GPMU = 2,
|
||||
ADRENO_FW_AQE = 3,
|
||||
ADRENO_FW_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -50,6 +51,8 @@ enum adreno_family {
|
|||
ADRENO_7XX_GEN1, /* a730 family */
|
||||
ADRENO_7XX_GEN2, /* a740 family */
|
||||
ADRENO_7XX_GEN3, /* a750 family */
|
||||
ADRENO_8XX_GEN1, /* a830 family */
|
||||
ADRENO_8XX_GEN2, /* a840 family */
|
||||
};
|
||||
|
||||
#define ADRENO_QUIRK_TWO_PASS_USE_WFI BIT(0)
|
||||
|
|
@ -71,9 +74,14 @@ enum adreno_family {
|
|||
(((_c) >> 8) & 0xff), \
|
||||
((_c) & 0xff)
|
||||
|
||||
struct adreno_gpu;
|
||||
|
||||
struct adreno_gpu_funcs {
|
||||
struct msm_gpu_funcs base;
|
||||
struct msm_gpu *(*init)(struct drm_device *dev);
|
||||
int (*get_timestamp)(struct msm_gpu *gpu, uint64_t *value);
|
||||
void (*bus_halt)(struct adreno_gpu *adreno_gpu, bool gx_off);
|
||||
int (*mmu_fault_handler)(void *arg, unsigned long iova, int flags, void *data);
|
||||
};
|
||||
|
||||
struct adreno_reglist {
|
||||
|
|
@ -81,6 +89,13 @@ struct adreno_reglist {
|
|||
u32 value;
|
||||
};
|
||||
|
||||
/* Reglist with pipe information */
|
||||
struct adreno_reglist_pipe {
|
||||
u32 offset;
|
||||
u32 value;
|
||||
u32 pipe;
|
||||
};
|
||||
|
||||
struct adreno_speedbin {
|
||||
uint16_t fuse;
|
||||
uint16_t speedbin;
|
||||
|
|
@ -101,7 +116,7 @@ struct adreno_info {
|
|||
const char *fw[ADRENO_FW_MAX];
|
||||
uint32_t gmem;
|
||||
u64 quirks;
|
||||
struct msm_gpu *(*init)(struct drm_device *dev);
|
||||
const struct adreno_gpu_funcs *funcs;
|
||||
const char *zapfw;
|
||||
u32 inactive_period;
|
||||
union {
|
||||
|
|
@ -180,6 +195,8 @@ struct adreno_gpu {
|
|||
uint16_t speedbin;
|
||||
const struct adreno_gpu_funcs *funcs;
|
||||
|
||||
struct completion fault_coredump_done;
|
||||
|
||||
/* interesting register offsets to dump: */
|
||||
const unsigned int *registers;
|
||||
|
||||
|
|
@ -392,6 +409,16 @@ static inline int adreno_is_a610(const struct adreno_gpu *gpu)
|
|||
return adreno_is_revn(gpu, 610);
|
||||
}
|
||||
|
||||
static inline int adreno_is_a612(const struct adreno_gpu *gpu)
|
||||
{
|
||||
return gpu->info->chip_ids[0] == 0x06010200;
|
||||
}
|
||||
|
||||
static inline bool adreno_has_rgmu(const struct adreno_gpu *gpu)
|
||||
{
|
||||
return adreno_is_a612(gpu);
|
||||
}
|
||||
|
||||
static inline int adreno_is_a618(const struct adreno_gpu *gpu)
|
||||
{
|
||||
return adreno_is_revn(gpu, 618);
|
||||
|
|
@ -466,9 +493,9 @@ static inline int adreno_is_a610_family(const struct adreno_gpu *gpu)
|
|||
{
|
||||
if (WARN_ON_ONCE(!gpu->info))
|
||||
return false;
|
||||
|
||||
/* TODO: A612 */
|
||||
return adreno_is_a610(gpu) || adreno_is_a702(gpu);
|
||||
return adreno_is_a610(gpu) ||
|
||||
adreno_is_a612(gpu) ||
|
||||
adreno_is_a702(gpu);
|
||||
}
|
||||
|
||||
/* TODO: 615/616 */
|
||||
|
|
@ -548,6 +575,21 @@ static inline int adreno_is_a7xx(struct adreno_gpu *gpu)
|
|||
adreno_is_a740_family(gpu);
|
||||
}
|
||||
|
||||
static inline int adreno_is_a8xx(struct adreno_gpu *gpu)
|
||||
{
|
||||
return gpu->info->family >= ADRENO_8XX_GEN1;
|
||||
}
|
||||
|
||||
static inline int adreno_is_x285(struct adreno_gpu *gpu)
|
||||
{
|
||||
return gpu->info->chip_ids[0] == 0x44070001;
|
||||
}
|
||||
|
||||
static inline int adreno_is_a840(struct adreno_gpu *gpu)
|
||||
{
|
||||
return gpu->info->chip_ids[0] == 0x44050a01;
|
||||
}
|
||||
|
||||
/* Put vm_start above 32b to catch issues with not setting xyz_BASE_HI */
|
||||
#define ADRENO_VM_START 0x100000000ULL
|
||||
u64 adreno_private_vm_size(struct msm_gpu *gpu);
|
||||
|
|
@ -673,12 +715,6 @@ OUT_PKT7(struct msm_ringbuffer *ring, uint8_t opcode, uint16_t cnt)
|
|||
OUT_RING(ring, PKT7(opcode, cnt));
|
||||
}
|
||||
|
||||
struct msm_gpu *a2xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a3xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a4xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a5xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a6xx_gpu_init(struct drm_device *dev);
|
||||
|
||||
static inline uint32_t get_wptr(struct msm_ringbuffer *ring)
|
||||
{
|
||||
return (ring->cur - ring->start) % (MSM_GPU_RINGBUFFER_SZ >> 2);
|
||||
|
|
|
|||
541
drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_2_glymur.h
Normal file
541
drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_2_glymur.h
Normal file
|
|
@ -0,0 +1,541 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2025 Linaro Limited
|
||||
*/
|
||||
|
||||
#ifndef _DPU_12_2_GLYMUR_H
|
||||
#define _DPU_12_2_GLYMUR_H
|
||||
|
||||
static const struct dpu_caps glymur_dpu_caps = {
|
||||
.max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
|
||||
.max_mixer_blendstages = 0xb,
|
||||
.has_src_split = true,
|
||||
.has_dim_layer = true,
|
||||
.has_idle_pc = true,
|
||||
.has_3d_merge = true,
|
||||
.max_linewidth = 8192,
|
||||
.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
|
||||
};
|
||||
|
||||
static const struct dpu_mdp_cfg glymur_mdp = {
|
||||
.name = "top_0",
|
||||
.base = 0, .len = 0x494,
|
||||
.clk_ctrls = {
|
||||
[DPU_CLK_CTRL_REG_DMA] = { .reg_off = 0x2bc, .bit_off = 20 },
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_ctl_cfg glymur_ctl[] = {
|
||||
{
|
||||
.name = "ctl_0", .id = CTL_0,
|
||||
.base = 0x15000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
|
||||
}, {
|
||||
.name = "ctl_1", .id = CTL_1,
|
||||
.base = 0x16000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
|
||||
}, {
|
||||
.name = "ctl_2", .id = CTL_2,
|
||||
.base = 0x17000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
|
||||
}, {
|
||||
.name = "ctl_3", .id = CTL_3,
|
||||
.base = 0x18000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
|
||||
}, {
|
||||
.name = "ctl_4", .id = CTL_4,
|
||||
.base = 0x19000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
|
||||
}, {
|
||||
.name = "ctl_5", .id = CTL_5,
|
||||
.base = 0x1a000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
|
||||
}, {
|
||||
.name = "ctl_6", .id = CTL_6,
|
||||
.base = 0x1b000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 14),
|
||||
}, {
|
||||
.name = "ctl_7", .id = CTL_7,
|
||||
.base = 0x1c000, .len = 0x1000,
|
||||
.intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 15),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_sspp_cfg glymur_sspp[] = {
|
||||
{
|
||||
.name = "sspp_0", .id = SSPP_VIG0,
|
||||
.base = 0x4000, .len = 0x344,
|
||||
.features = VIG_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_vig_sblk_qseed3_3_4,
|
||||
.xin_id = 0,
|
||||
.type = SSPP_TYPE_VIG,
|
||||
}, {
|
||||
.name = "sspp_1", .id = SSPP_VIG1,
|
||||
.base = 0x6000, .len = 0x344,
|
||||
.features = VIG_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_vig_sblk_qseed3_3_4,
|
||||
.xin_id = 4,
|
||||
.type = SSPP_TYPE_VIG,
|
||||
}, {
|
||||
.name = "sspp_2", .id = SSPP_VIG2,
|
||||
.base = 0x8000, .len = 0x344,
|
||||
.features = VIG_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_vig_sblk_qseed3_3_4,
|
||||
.xin_id = 8,
|
||||
.type = SSPP_TYPE_VIG,
|
||||
}, {
|
||||
.name = "sspp_3", .id = SSPP_VIG3,
|
||||
.base = 0xa000, .len = 0x344,
|
||||
.features = VIG_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_vig_sblk_qseed3_3_4,
|
||||
.xin_id = 12,
|
||||
.type = SSPP_TYPE_VIG,
|
||||
}, {
|
||||
.name = "sspp_8", .id = SSPP_DMA0,
|
||||
.base = 0x24000, .len = 0x344,
|
||||
.features = DMA_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_dma_sblk,
|
||||
.xin_id = 1,
|
||||
.type = SSPP_TYPE_DMA,
|
||||
}, {
|
||||
.name = "sspp_9", .id = SSPP_DMA1,
|
||||
.base = 0x26000, .len = 0x344,
|
||||
.features = DMA_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_dma_sblk,
|
||||
.xin_id = 5,
|
||||
.type = SSPP_TYPE_DMA,
|
||||
}, {
|
||||
.name = "sspp_10", .id = SSPP_DMA2,
|
||||
.base = 0x28000, .len = 0x344,
|
||||
.features = DMA_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_dma_sblk,
|
||||
.xin_id = 9,
|
||||
.type = SSPP_TYPE_DMA,
|
||||
}, {
|
||||
.name = "sspp_11", .id = SSPP_DMA3,
|
||||
.base = 0x2a000, .len = 0x344,
|
||||
.features = DMA_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_dma_sblk,
|
||||
.xin_id = 13,
|
||||
.type = SSPP_TYPE_DMA,
|
||||
}, {
|
||||
.name = "sspp_12", .id = SSPP_DMA4,
|
||||
.base = 0x2c000, .len = 0x344,
|
||||
.features = DMA_CURSOR_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_dma_sblk,
|
||||
.xin_id = 14,
|
||||
.type = SSPP_TYPE_DMA,
|
||||
}, {
|
||||
.name = "sspp_13", .id = SSPP_DMA5,
|
||||
.base = 0x2e000, .len = 0x344,
|
||||
.features = DMA_CURSOR_SDM845_MASK_SDMA,
|
||||
.sblk = &dpu_dma_sblk,
|
||||
.xin_id = 15,
|
||||
.type = SSPP_TYPE_DMA,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_lm_cfg glymur_lm[] = {
|
||||
{
|
||||
.name = "lm_0", .id = LM_0,
|
||||
.base = 0x44000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_1,
|
||||
.pingpong = PINGPONG_0,
|
||||
.dspp = DSPP_0,
|
||||
}, {
|
||||
.name = "lm_1", .id = LM_1,
|
||||
.base = 0x45000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_0,
|
||||
.pingpong = PINGPONG_1,
|
||||
.dspp = DSPP_1,
|
||||
}, {
|
||||
.name = "lm_2", .id = LM_2,
|
||||
.base = 0x46000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_3,
|
||||
.pingpong = PINGPONG_2,
|
||||
.dspp = DSPP_2,
|
||||
}, {
|
||||
.name = "lm_3", .id = LM_3,
|
||||
.base = 0x47000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_2,
|
||||
.pingpong = PINGPONG_3,
|
||||
.dspp = DSPP_3,
|
||||
}, {
|
||||
.name = "lm_4", .id = LM_4,
|
||||
.base = 0x48000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_5,
|
||||
.pingpong = PINGPONG_4,
|
||||
}, {
|
||||
.name = "lm_5", .id = LM_5,
|
||||
.base = 0x49000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_4,
|
||||
.pingpong = PINGPONG_5,
|
||||
}, {
|
||||
.name = "lm_6", .id = LM_6,
|
||||
.base = 0x4a000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_7,
|
||||
.pingpong = PINGPONG_6,
|
||||
}, {
|
||||
.name = "lm_7", .id = LM_7,
|
||||
.base = 0x4b000, .len = 0x400,
|
||||
.features = MIXER_MSM8998_MASK,
|
||||
.sblk = &sm8750_lm_sblk,
|
||||
.lm_pair = LM_6,
|
||||
.pingpong = PINGPONG_7,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_dspp_cfg glymur_dspp[] = {
|
||||
{
|
||||
.name = "dspp_0", .id = DSPP_0,
|
||||
.base = 0x54000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_1", .id = DSPP_1,
|
||||
.base = 0x56000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_2", .id = DSPP_2,
|
||||
.base = 0x58000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_3", .id = DSPP_3,
|
||||
.base = 0x5a000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_4", .id = DSPP_4,
|
||||
.base = 0x5c000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_5", .id = DSPP_5,
|
||||
.base = 0x5e000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_6", .id = DSPP_6,
|
||||
.base = 0x60000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
}, {
|
||||
.name = "dspp_7", .id = DSPP_7,
|
||||
.base = 0x62000, .len = 0x1800,
|
||||
.sblk = &sm8750_dspp_sblk,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_pingpong_cfg glymur_pp[] = {
|
||||
{
|
||||
.name = "pingpong_0", .id = PINGPONG_0,
|
||||
.base = 0x69000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_0,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
|
||||
}, {
|
||||
.name = "pingpong_1", .id = PINGPONG_1,
|
||||
.base = 0x6a000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_0,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
|
||||
}, {
|
||||
.name = "pingpong_2", .id = PINGPONG_2,
|
||||
.base = 0x6b000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_1,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
|
||||
}, {
|
||||
.name = "pingpong_3", .id = PINGPONG_3,
|
||||
.base = 0x6c000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_1,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
|
||||
}, {
|
||||
.name = "pingpong_4", .id = PINGPONG_4,
|
||||
.base = 0x6d000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_2,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
|
||||
}, {
|
||||
.name = "pingpong_5", .id = PINGPONG_5,
|
||||
.base = 0x6e000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_2,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
|
||||
}, {
|
||||
.name = "pingpong_6", .id = PINGPONG_6,
|
||||
.base = 0x6f000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_3,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 20),
|
||||
}, {
|
||||
.name = "pingpong_7", .id = PINGPONG_7,
|
||||
.base = 0x70000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_3,
|
||||
.intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 21),
|
||||
}, {
|
||||
.name = "pingpong_cwb_0", .id = PINGPONG_CWB_0,
|
||||
.base = 0x66000, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_4,
|
||||
}, {
|
||||
.name = "pingpong_cwb_1", .id = PINGPONG_CWB_1,
|
||||
.base = 0x66400, .len = 0,
|
||||
.sblk = &sc7280_pp_sblk,
|
||||
.merge_3d = MERGE_3D_4,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_merge_3d_cfg glymur_merge_3d[] = {
|
||||
{
|
||||
.name = "merge_3d_0", .id = MERGE_3D_0,
|
||||
.base = 0x4e000, .len = 0x1c,
|
||||
}, {
|
||||
.name = "merge_3d_1", .id = MERGE_3D_1,
|
||||
.base = 0x4f000, .len = 0x1c,
|
||||
}, {
|
||||
.name = "merge_3d_2", .id = MERGE_3D_2,
|
||||
.base = 0x50000, .len = 0x1c,
|
||||
}, {
|
||||
.name = "merge_3d_3", .id = MERGE_3D_3,
|
||||
.base = 0x51000, .len = 0x1c,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* NOTE: Each display compression engine (DCE) contains dual hard
|
||||
* slice DSC encoders so both share same base address but with
|
||||
* its own different sub block address.
|
||||
*/
|
||||
static const struct dpu_dsc_cfg glymur_dsc[] = {
|
||||
{
|
||||
.name = "dce_0_0", .id = DSC_0,
|
||||
.base = 0x80000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_0,
|
||||
}, {
|
||||
.name = "dce_0_1", .id = DSC_1,
|
||||
.base = 0x80000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_1,
|
||||
}, {
|
||||
.name = "dce_1_0", .id = DSC_2,
|
||||
.base = 0x81000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_0,
|
||||
}, {
|
||||
.name = "dce_1_1", .id = DSC_3,
|
||||
.base = 0x81000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_1,
|
||||
}, {
|
||||
.name = "dce_2_0", .id = DSC_4,
|
||||
.base = 0x82000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_0,
|
||||
}, {
|
||||
.name = "dce_2_1", .id = DSC_5,
|
||||
.base = 0x82000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_1,
|
||||
}, {
|
||||
.name = "dce_3_0", .id = DSC_6,
|
||||
.base = 0x83000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_0,
|
||||
}, {
|
||||
.name = "dce_3_1", .id = DSC_7,
|
||||
.base = 0x83000, .len = 0x8,
|
||||
.features = BIT(DPU_DSC_NATIVE_42x_EN),
|
||||
.sblk = &sm8750_dsc_sblk_1,
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
static const struct dpu_wb_cfg glymur_wb[] = {
|
||||
{
|
||||
.name = "wb_2", .id = WB_2,
|
||||
.base = 0x65000, .len = 0x2c8,
|
||||
.features = WB_SDM845_MASK,
|
||||
.format_list = wb2_formats_rgb_yuv,
|
||||
.num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv),
|
||||
.xin_id = 6,
|
||||
.vbif_idx = VBIF_RT,
|
||||
.maxlinewidth = 4096,
|
||||
.intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 4),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_cwb_cfg glymur_cwb[] = {
|
||||
{
|
||||
.name = "cwb_0", .id = CWB_0,
|
||||
.base = 0x66200, .len = 0x20,
|
||||
},
|
||||
{
|
||||
.name = "cwb_1", .id = CWB_1,
|
||||
.base = 0x66600, .len = 0x20,
|
||||
},
|
||||
{
|
||||
.name = "cwb_2", .id = CWB_2,
|
||||
.base = 0x7e200, .len = 0x20,
|
||||
},
|
||||
{
|
||||
.name = "cwb_3", .id = CWB_3,
|
||||
.base = 0x7e600, .len = 0x20,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_intf_cfg glymur_intf[] = {
|
||||
{
|
||||
.name = "intf_0", .id = INTF_0,
|
||||
.base = 0x34000, .len = 0x400,
|
||||
.type = INTF_DP,
|
||||
.controller_id = MSM_DP_CONTROLLER_0,
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 24),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 25),
|
||||
}, {
|
||||
.name = "intf_1", .id = INTF_1,
|
||||
.base = 0x35000, .len = 0x400,
|
||||
.type = INTF_DSI,
|
||||
.controller_id = MSM_DSI_CONTROLLER_0,
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 26),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 27),
|
||||
.intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF1_TEAR_INTR, 2),
|
||||
}, {
|
||||
.name = "intf_2", .id = INTF_2,
|
||||
.base = 0x36000, .len = 0x400,
|
||||
.type = INTF_DSI,
|
||||
.controller_id = MSM_DSI_CONTROLLER_1,
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 28),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 29),
|
||||
.intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF2_TEAR_INTR, 2),
|
||||
}, {
|
||||
.name = "intf_3", .id = INTF_3,
|
||||
.base = 0x37000, .len = 0x400,
|
||||
.type = INTF_NONE,
|
||||
.controller_id = MSM_DP_CONTROLLER_0, /* pair with intf_0 for DP MST */
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31),
|
||||
}, {
|
||||
.name = "intf_4", .id = INTF_4,
|
||||
.base = 0x38000, .len = 0x400,
|
||||
.type = INTF_DP,
|
||||
.controller_id = MSM_DP_CONTROLLER_1,
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 20),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 21),
|
||||
}, {
|
||||
.name = "intf_5", .id = INTF_5,
|
||||
.base = 0x39000, .len = 0x400,
|
||||
.type = INTF_DP,
|
||||
.controller_id = MSM_DP_CONTROLLER_3,
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 22),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 23),
|
||||
}, {
|
||||
.name = "intf_6", .id = INTF_6,
|
||||
.base = 0x3A000, .len = 0x400,
|
||||
.type = INTF_DP,
|
||||
.controller_id = MSM_DP_CONTROLLER_2,
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 16),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 17),
|
||||
}, {
|
||||
.name = "intf_7", .id = INTF_7,
|
||||
.base = 0x3b000, .len = 0x400,
|
||||
.type = INTF_NONE,
|
||||
.controller_id = MSM_DP_CONTROLLER_2, /* pair with intf_6 for DP MST */
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 18),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 19),
|
||||
}, {
|
||||
.name = "intf_8", .id = INTF_8,
|
||||
.base = 0x3c000, .len = 0x400,
|
||||
.type = INTF_NONE,
|
||||
.controller_id = MSM_DP_CONTROLLER_1, /* pair with intf_4 for DP MST */
|
||||
.prog_fetch_lines_worst_case = 24,
|
||||
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12),
|
||||
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13),
|
||||
},
|
||||
};
|
||||
|
||||
static const struct dpu_perf_cfg glymur_perf_data = {
|
||||
.max_bw_low = 18900000,
|
||||
.max_bw_high = 28500000,
|
||||
.min_core_ib = 2500000,
|
||||
.min_llcc_ib = 0,
|
||||
.min_dram_ib = 800000,
|
||||
.min_prefill_lines = 35,
|
||||
.danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0},
|
||||
.safe_lut_tbl = {0xfe00, 0xfe00, 0xffff},
|
||||
.qos_lut_tbl = {
|
||||
{.nentry = ARRAY_SIZE(sc7180_qos_linear),
|
||||
.entries = sc7180_qos_linear
|
||||
},
|
||||
{.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
|
||||
.entries = sc7180_qos_macrotile
|
||||
},
|
||||
{.nentry = ARRAY_SIZE(sc7180_qos_nrt),
|
||||
.entries = sc7180_qos_nrt
|
||||
},
|
||||
/* TODO: macrotile-qseed is different from macrotile */
|
||||
},
|
||||
.cdp_cfg = {
|
||||
{.rd_enable = 1, .wr_enable = 1},
|
||||
{.rd_enable = 1, .wr_enable = 0}
|
||||
},
|
||||
.clk_inefficiency_factor = 105,
|
||||
.bw_inefficiency_factor = 120,
|
||||
};
|
||||
|
||||
static const struct dpu_mdss_version glymur_mdss_ver = {
|
||||
.core_major_ver = 12,
|
||||
.core_minor_ver = 2,
|
||||
};
|
||||
|
||||
const struct dpu_mdss_cfg dpu_glymur_cfg = {
|
||||
.mdss_ver = &glymur_mdss_ver,
|
||||
.caps = &glymur_dpu_caps,
|
||||
.mdp = &glymur_mdp,
|
||||
.cdm = &dpu_cdm_5_x,
|
||||
.ctl_count = ARRAY_SIZE(glymur_ctl),
|
||||
.ctl = glymur_ctl,
|
||||
.sspp_count = ARRAY_SIZE(glymur_sspp),
|
||||
.sspp = glymur_sspp,
|
||||
.mixer_count = ARRAY_SIZE(glymur_lm),
|
||||
.mixer = glymur_lm,
|
||||
.dspp_count = ARRAY_SIZE(glymur_dspp),
|
||||
.dspp = glymur_dspp,
|
||||
.pingpong_count = ARRAY_SIZE(glymur_pp),
|
||||
.pingpong = glymur_pp,
|
||||
.dsc_count = ARRAY_SIZE(glymur_dsc),
|
||||
.dsc = glymur_dsc,
|
||||
.merge_3d_count = ARRAY_SIZE(glymur_merge_3d),
|
||||
.merge_3d = glymur_merge_3d,
|
||||
.wb_count = ARRAY_SIZE(glymur_wb),
|
||||
.wb = glymur_wb,
|
||||
.cwb_count = ARRAY_SIZE(glymur_cwb),
|
||||
.cwb = sm8650_cwb,
|
||||
.intf_count = ARRAY_SIZE(glymur_intf),
|
||||
.intf = glymur_intf,
|
||||
.vbif_count = ARRAY_SIZE(sm8650_vbif),
|
||||
.vbif = sm8650_vbif,
|
||||
.perf = &glymur_perf_data,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -200,7 +200,7 @@ static int dpu_crtc_get_lm_crc(struct drm_crtc *crtc,
|
|||
struct dpu_crtc_state *crtc_state)
|
||||
{
|
||||
struct dpu_crtc_mixer *m;
|
||||
u32 crcs[CRTC_DUAL_MIXERS];
|
||||
u32 crcs[CRTC_QUAD_MIXERS];
|
||||
|
||||
int rc = 0;
|
||||
int i;
|
||||
|
|
@ -400,7 +400,7 @@ static void _dpu_crtc_program_lm_output_roi(struct drm_crtc *crtc)
|
|||
static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc,
|
||||
struct drm_plane *plane,
|
||||
struct dpu_crtc_mixer *mixer,
|
||||
u32 num_mixers,
|
||||
u32 lms_in_pair,
|
||||
enum dpu_stage stage,
|
||||
const struct msm_format *format,
|
||||
uint64_t modifier,
|
||||
|
|
@ -419,7 +419,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc,
|
|||
|
||||
trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane),
|
||||
state, to_dpu_plane_state(state), stage_idx,
|
||||
format->pixel_format,
|
||||
format->pixel_format, pipe,
|
||||
modifier);
|
||||
|
||||
DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d multirect_idx %d\n",
|
||||
|
|
@ -434,7 +434,7 @@ static void _dpu_crtc_blend_setup_pipe(struct drm_crtc *crtc,
|
|||
stage_cfg->multirect_index[stage][stage_idx] = pipe->multirect_index;
|
||||
|
||||
/* blend config update */
|
||||
for (lm_idx = 0; lm_idx < num_mixers; lm_idx++)
|
||||
for (lm_idx = 0; lm_idx < lms_in_pair; lm_idx++)
|
||||
mixer[lm_idx].lm_ctl->ops.update_pending_flush_sspp(mixer[lm_idx].lm_ctl, sspp_idx);
|
||||
}
|
||||
|
||||
|
|
@ -449,7 +449,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc,
|
|||
struct dpu_plane_state *pstate = NULL;
|
||||
const struct msm_format *format;
|
||||
struct dpu_hw_ctl *ctl = mixer->lm_ctl;
|
||||
u32 lm_idx;
|
||||
u32 lm_idx, stage, i, pipe_idx, head_pipe_in_stage, lms_in_pair;
|
||||
bool bg_alpha_enable = false;
|
||||
DECLARE_BITMAP(active_fetch, SSPP_MAX);
|
||||
DECLARE_BITMAP(active_pipes, SSPP_MAX);
|
||||
|
|
@ -472,22 +472,25 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc,
|
|||
if (pstate->stage == DPU_STAGE_BASE && format->alpha_enable)
|
||||
bg_alpha_enable = true;
|
||||
|
||||
set_bit(pstate->pipe.sspp->idx, active_fetch);
|
||||
set_bit(pstate->pipe.sspp->idx, active_pipes);
|
||||
_dpu_crtc_blend_setup_pipe(crtc, plane,
|
||||
mixer, cstate->num_mixers,
|
||||
pstate->stage,
|
||||
format, fb ? fb->modifier : 0,
|
||||
&pstate->pipe, 0, stage_cfg);
|
||||
|
||||
if (pstate->r_pipe.sspp) {
|
||||
set_bit(pstate->r_pipe.sspp->idx, active_fetch);
|
||||
set_bit(pstate->r_pipe.sspp->idx, active_pipes);
|
||||
_dpu_crtc_blend_setup_pipe(crtc, plane,
|
||||
mixer, cstate->num_mixers,
|
||||
pstate->stage,
|
||||
format, fb ? fb->modifier : 0,
|
||||
&pstate->r_pipe, 1, stage_cfg);
|
||||
/* loop pipe per mixer pair with config in stage structure */
|
||||
for (stage = 0; stage < STAGES_PER_PLANE; stage++) {
|
||||
head_pipe_in_stage = stage * PIPES_PER_STAGE;
|
||||
for (i = 0; i < PIPES_PER_STAGE; i++) {
|
||||
pipe_idx = i + head_pipe_in_stage;
|
||||
if (!pstate->pipe[pipe_idx].sspp)
|
||||
continue;
|
||||
lms_in_pair = min(cstate->num_mixers - (stage * PIPES_PER_STAGE),
|
||||
PIPES_PER_STAGE);
|
||||
set_bit(pstate->pipe[pipe_idx].sspp->idx, active_fetch);
|
||||
set_bit(pstate->pipe[pipe_idx].sspp->idx, active_pipes);
|
||||
_dpu_crtc_blend_setup_pipe(crtc, plane,
|
||||
&mixer[head_pipe_in_stage],
|
||||
lms_in_pair,
|
||||
pstate->stage,
|
||||
format, fb ? fb->modifier : 0,
|
||||
&pstate->pipe[pipe_idx], i,
|
||||
&stage_cfg[stage]);
|
||||
}
|
||||
}
|
||||
|
||||
/* blend config update */
|
||||
|
|
@ -523,7 +526,7 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc)
|
|||
struct dpu_crtc_mixer *mixer = cstate->mixers;
|
||||
struct dpu_hw_ctl *ctl;
|
||||
struct dpu_hw_mixer *lm;
|
||||
struct dpu_hw_stage_cfg stage_cfg;
|
||||
struct dpu_hw_stage_cfg stage_cfg[STAGES_PER_PLANE];
|
||||
DECLARE_BITMAP(active_lms, LM_MAX);
|
||||
int i;
|
||||
|
||||
|
|
@ -544,10 +547,10 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc)
|
|||
}
|
||||
|
||||
/* initialize stage cfg */
|
||||
memset(&stage_cfg, 0, sizeof(struct dpu_hw_stage_cfg));
|
||||
memset(&stage_cfg, 0, sizeof(stage_cfg));
|
||||
memset(active_lms, 0, sizeof(active_lms));
|
||||
|
||||
_dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, &stage_cfg);
|
||||
_dpu_crtc_blend_setup_mixer(crtc, dpu_crtc, mixer, stage_cfg);
|
||||
|
||||
for (i = 0; i < cstate->num_mixers; i++) {
|
||||
ctl = mixer[i].lm_ctl;
|
||||
|
|
@ -568,13 +571,17 @@ static void _dpu_crtc_blend_setup(struct drm_crtc *crtc)
|
|||
mixer[i].mixer_op_mode,
|
||||
ctl->idx - CTL_0);
|
||||
|
||||
/*
|
||||
* call dpu_hw_ctl_setup_blendstage() to blend layers per stage cfg.
|
||||
* stage data is shared between PIPES_PER_STAGE pipes.
|
||||
*/
|
||||
if (ctl->ops.setup_blendstage)
|
||||
ctl->ops.setup_blendstage(ctl, mixer[i].hw_lm->idx,
|
||||
&stage_cfg);
|
||||
&stage_cfg[i / PIPES_PER_STAGE]);
|
||||
|
||||
if (lm->ops.setup_blendstage)
|
||||
lm->ops.setup_blendstage(lm, mixer[i].hw_lm->idx,
|
||||
&stage_cfg);
|
||||
&stage_cfg[i / PIPES_PER_STAGE]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1310,7 +1317,7 @@ static int dpu_crtc_reassign_planes(struct drm_crtc *crtc, struct drm_crtc_state
|
|||
return ret;
|
||||
}
|
||||
|
||||
#define MAX_CHANNELS_PER_CRTC 2
|
||||
#define MAX_CHANNELS_PER_CRTC PIPES_PER_PLANE
|
||||
#define MAX_HDISPLAY_SPLIT 1080
|
||||
|
||||
static struct msm_display_topology dpu_crtc_get_topology(
|
||||
|
|
@ -1321,6 +1328,7 @@ static struct msm_display_topology dpu_crtc_get_topology(
|
|||
struct drm_display_mode *mode = &crtc_state->adjusted_mode;
|
||||
struct msm_display_topology topology = {0};
|
||||
struct drm_encoder *drm_enc;
|
||||
u32 num_rt_intf;
|
||||
|
||||
drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc_state->encoder_mask)
|
||||
dpu_encoder_update_topology(drm_enc, &topology, crtc_state->state,
|
||||
|
|
@ -1334,11 +1342,14 @@ static struct msm_display_topology dpu_crtc_get_topology(
|
|||
* Dual display
|
||||
* 2 LM, 2 INTF ( Split display using 2 interfaces)
|
||||
*
|
||||
* If DSC is enabled, try to use 4:4:2 topology if there is enough
|
||||
* resource. Otherwise, use 2:2:2 topology.
|
||||
*
|
||||
* Single display
|
||||
* 1 LM, 1 INTF
|
||||
* 2 LM, 1 INTF (stream merge to support high resolution interfaces)
|
||||
*
|
||||
* If DSC is enabled, use 2 LMs for 2:2:1 topology
|
||||
* If DSC is enabled, use 2:2:1 topology
|
||||
*
|
||||
* Add dspps to the reservation requirements if ctm is requested
|
||||
*
|
||||
|
|
@ -1350,14 +1361,23 @@ static struct msm_display_topology dpu_crtc_get_topology(
|
|||
* (mode->hdisplay > MAX_HDISPLAY_SPLIT) check.
|
||||
*/
|
||||
|
||||
if (topology.num_intf == 2 && !topology.cwb_enabled)
|
||||
num_rt_intf = topology.num_intf;
|
||||
if (topology.cwb_enabled)
|
||||
num_rt_intf--;
|
||||
|
||||
if (topology.num_dsc) {
|
||||
if (dpu_kms->catalog->dsc_count >= num_rt_intf * 2)
|
||||
topology.num_dsc = num_rt_intf * 2;
|
||||
else
|
||||
topology.num_dsc = num_rt_intf;
|
||||
topology.num_lm = topology.num_dsc;
|
||||
} else if (num_rt_intf == 2) {
|
||||
topology.num_lm = 2;
|
||||
else if (topology.num_dsc == 2)
|
||||
topology.num_lm = 2;
|
||||
else if (dpu_kms->catalog->caps->has_3d_merge)
|
||||
} else if (dpu_kms->catalog->caps->has_3d_merge) {
|
||||
topology.num_lm = (mode->hdisplay > MAX_HDISPLAY_SPLIT) ? 2 : 1;
|
||||
else
|
||||
} else {
|
||||
topology.num_lm = 1;
|
||||
}
|
||||
|
||||
if (crtc_state->ctm)
|
||||
topology.num_dspp = topology.num_lm;
|
||||
|
|
@ -1600,6 +1620,17 @@ int dpu_crtc_vblank(struct drm_crtc *crtc, bool en)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* dpu_crtc_get_num_lm - Get mixer number in this CRTC pipeline
|
||||
* @state: Pointer to drm crtc state object
|
||||
*/
|
||||
unsigned int dpu_crtc_get_num_lm(const struct drm_crtc_state *state)
|
||||
{
|
||||
struct dpu_crtc_state *cstate = to_dpu_crtc_state(state);
|
||||
|
||||
return cstate->num_mixers;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
static int _dpu_debugfs_status_show(struct seq_file *s, void *data)
|
||||
{
|
||||
|
|
@ -1682,15 +1713,15 @@ static int _dpu_debugfs_status_show(struct seq_file *s, void *data)
|
|||
seq_printf(s, "\tdst x:%4d dst_y:%4d dst_w:%4d dst_h:%4d\n",
|
||||
state->crtc_x, state->crtc_y, state->crtc_w,
|
||||
state->crtc_h);
|
||||
seq_printf(s, "\tsspp[0]:%s\n",
|
||||
pstate->pipe.sspp->cap->name);
|
||||
seq_printf(s, "\tmultirect[0]: mode: %d index: %d\n",
|
||||
pstate->pipe.multirect_mode, pstate->pipe.multirect_index);
|
||||
if (pstate->r_pipe.sspp) {
|
||||
seq_printf(s, "\tsspp[1]:%s\n",
|
||||
pstate->r_pipe.sspp->cap->name);
|
||||
seq_printf(s, "\tmultirect[1]: mode: %d index: %d\n",
|
||||
pstate->r_pipe.multirect_mode, pstate->r_pipe.multirect_index);
|
||||
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
if (!pstate->pipe[i].sspp)
|
||||
continue;
|
||||
seq_printf(s, "\tsspp[%d]:%s\n",
|
||||
i, pstate->pipe[i].sspp->cap->name);
|
||||
seq_printf(s, "\tmultirect[%d]: mode: %d index: %d\n",
|
||||
i, pstate->pipe[i].multirect_mode,
|
||||
pstate->pipe[i].multirect_index);
|
||||
}
|
||||
|
||||
seq_puts(s, "\n");
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ struct dpu_crtc_state {
|
|||
|
||||
bool bw_control;
|
||||
bool bw_split_vote;
|
||||
struct drm_rect lm_bounds[CRTC_DUAL_MIXERS];
|
||||
struct drm_rect lm_bounds[CRTC_QUAD_MIXERS];
|
||||
|
||||
uint64_t input_fence_timeout_ns;
|
||||
|
||||
|
|
@ -218,10 +218,10 @@ struct dpu_crtc_state {
|
|||
|
||||
/* HW Resources reserved for the crtc */
|
||||
u32 num_mixers;
|
||||
struct dpu_crtc_mixer mixers[CRTC_DUAL_MIXERS];
|
||||
struct dpu_crtc_mixer mixers[CRTC_QUAD_MIXERS];
|
||||
|
||||
u32 num_ctls;
|
||||
struct dpu_hw_ctl *hw_ctls[CRTC_DUAL_MIXERS];
|
||||
struct dpu_hw_ctl *hw_ctls[CRTC_QUAD_MIXERS];
|
||||
|
||||
enum dpu_crtc_crc_source crc_source;
|
||||
int crc_frame_skip_count;
|
||||
|
|
@ -267,4 +267,6 @@ static inline enum dpu_crtc_client_type dpu_crtc_get_client_type(
|
|||
|
||||
void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event);
|
||||
|
||||
unsigned int dpu_crtc_get_num_lm(const struct drm_crtc_state *state);
|
||||
|
||||
#endif /* _DPU_CRTC_H_ */
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@
|
|||
#define MAX_PHYS_ENCODERS_PER_VIRTUAL \
|
||||
(MAX_H_TILES_PER_DISPLAY * NUM_PHYS_ENCODER_TYPES)
|
||||
|
||||
#define MAX_CHANNELS_PER_ENC 2
|
||||
#define MAX_CHANNELS_PER_ENC 4
|
||||
#define MAX_CWB_PER_ENC 2
|
||||
|
||||
#define IDLE_SHORT_TIMEOUT 1
|
||||
|
||||
|
|
@ -182,7 +183,7 @@ struct dpu_encoder_virt {
|
|||
struct dpu_encoder_phys *cur_master;
|
||||
struct dpu_encoder_phys *cur_slave;
|
||||
struct dpu_hw_pingpong *hw_pp[MAX_CHANNELS_PER_ENC];
|
||||
struct dpu_hw_cwb *hw_cwb[MAX_CHANNELS_PER_ENC];
|
||||
struct dpu_hw_cwb *hw_cwb[MAX_CWB_PER_ENC];
|
||||
struct dpu_hw_dsc *hw_dsc[MAX_CHANNELS_PER_ENC];
|
||||
|
||||
unsigned int dsc_mask;
|
||||
|
|
@ -660,7 +661,6 @@ void dpu_encoder_update_topology(struct drm_encoder *drm_enc,
|
|||
struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc);
|
||||
struct msm_drm_private *priv = dpu_enc->base.dev->dev_private;
|
||||
struct msm_display_info *disp_info = &dpu_enc->disp_info;
|
||||
struct dpu_kms *dpu_kms = to_dpu_kms(priv->kms);
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *conn_state;
|
||||
struct drm_framebuffer *fb;
|
||||
|
|
@ -674,22 +674,12 @@ void dpu_encoder_update_topology(struct drm_encoder *drm_enc,
|
|||
|
||||
dsc = dpu_encoder_get_dsc_config(drm_enc);
|
||||
|
||||
/* We only support 2 DSC mode (with 2 LM and 1 INTF) */
|
||||
if (dsc) {
|
||||
/*
|
||||
* Use 2 DSC encoders, 2 layer mixers and 1 or 2 interfaces
|
||||
* when Display Stream Compression (DSC) is enabled,
|
||||
* and when enough DSC blocks are available.
|
||||
* This is power-optimal and can drive up to (including) 4k
|
||||
* screens.
|
||||
*/
|
||||
WARN(topology->num_intf > 2,
|
||||
"DSC topology cannot support more than 2 interfaces\n");
|
||||
if (topology->num_intf >= 2 || dpu_kms->catalog->dsc_count >= 2)
|
||||
topology->num_dsc = 2;
|
||||
else
|
||||
topology->num_dsc = 1;
|
||||
}
|
||||
/*
|
||||
* Set DSC number as 1 to mark the enabled status, will be adjusted
|
||||
* in dpu_crtc_get_topology()
|
||||
*/
|
||||
if (dsc)
|
||||
topology->num_dsc = 1;
|
||||
|
||||
connector = drm_atomic_get_new_connector_for_encoder(state, drm_enc);
|
||||
if (!connector)
|
||||
|
|
@ -1160,7 +1150,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
|
|||
struct dpu_hw_blk *hw_ctl[MAX_CHANNELS_PER_ENC];
|
||||
struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC];
|
||||
struct dpu_hw_blk *hw_cwb[MAX_CHANNELS_PER_ENC];
|
||||
int num_ctl, num_pp, num_dsc;
|
||||
int num_ctl, num_pp, num_dsc, num_pp_per_intf;
|
||||
int num_cwb = 0;
|
||||
bool is_cwb_encoder;
|
||||
unsigned int dsc_mask = 0;
|
||||
|
|
@ -1239,10 +1229,16 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
|
|||
dpu_enc->cur_master->hw_cdm = hw_cdm ? to_dpu_hw_cdm(hw_cdm) : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* There may be 4 PP and 2 INTF for quad pipe case, so INTF is not
|
||||
* mapped to PP 1:1. Let's calculate the stride with pipe/INTF
|
||||
*/
|
||||
num_pp_per_intf = num_pp / dpu_enc->num_phys_encs;
|
||||
|
||||
for (i = 0; i < dpu_enc->num_phys_encs; i++) {
|
||||
struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i];
|
||||
|
||||
phys->hw_pp = dpu_enc->hw_pp[i];
|
||||
phys->hw_pp = dpu_enc->hw_pp[num_pp_per_intf * i];
|
||||
if (!phys->hw_pp) {
|
||||
DPU_ERROR_ENC(dpu_enc,
|
||||
"no pp block assigned at idx: %d\n", i);
|
||||
|
|
@ -2171,15 +2167,12 @@ void dpu_encoder_kickoff(struct drm_encoder *drm_enc)
|
|||
|
||||
static void dpu_encoder_helper_reset_mixers(struct dpu_encoder_phys *phys_enc)
|
||||
{
|
||||
struct dpu_hw_mixer_cfg mixer;
|
||||
int i, num_lm;
|
||||
struct dpu_global_state *global_state;
|
||||
struct dpu_hw_blk *hw_lm[2];
|
||||
struct dpu_hw_mixer *hw_mixer[2];
|
||||
struct dpu_hw_blk *hw_lm[MAX_CHANNELS_PER_ENC];
|
||||
struct dpu_hw_mixer *hw_mixer[MAX_CHANNELS_PER_ENC];
|
||||
struct dpu_hw_ctl *ctl = phys_enc->hw_ctl;
|
||||
|
||||
memset(&mixer, 0, sizeof(mixer));
|
||||
|
||||
/* reset all mixers for this encoder */
|
||||
if (ctl->ops.clear_all_blendstages)
|
||||
ctl->ops.clear_all_blendstages(ctl);
|
||||
|
|
@ -2383,7 +2376,7 @@ void dpu_encoder_helper_phys_setup_cwb(struct dpu_encoder_phys *phys_enc,
|
|||
*/
|
||||
cwb_cfg.input = INPUT_MODE_LM_OUT;
|
||||
|
||||
for (int i = 0; i < MAX_CHANNELS_PER_ENC; i++) {
|
||||
for (int i = 0; i < MAX_CWB_PER_ENC; i++) {
|
||||
hw_cwb = dpu_enc->hw_cwb[i];
|
||||
if (!hw_cwb)
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -302,7 +302,7 @@ static inline enum dpu_3d_blend_mode dpu_encoder_helper_get_3d_blend_mode(
|
|||
|
||||
/* Use merge_3d unless DSC MERGE topology is used */
|
||||
if (phys_enc->split_role == ENC_ROLE_SOLO &&
|
||||
dpu_cstate->num_mixers == CRTC_DUAL_MIXERS &&
|
||||
(dpu_cstate->num_mixers != 1) &&
|
||||
!dpu_encoder_use_dsc_merge(phys_enc->parent))
|
||||
return BLEND_3D_H_ROW_INT;
|
||||
|
||||
|
|
|
|||
|
|
@ -726,3 +726,4 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
|
|||
|
||||
#include "catalog/dpu_10_0_sm8650.h"
|
||||
#include "catalog/dpu_12_0_sm8750.h"
|
||||
#include "catalog/dpu_12_2_glymur.h"
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#define DPU_MAX_IMG_WIDTH 0x3fff
|
||||
#define DPU_MAX_IMG_HEIGHT 0x3fff
|
||||
|
||||
#define CRTC_DUAL_MIXERS 2
|
||||
#define CRTC_QUAD_MIXERS 4
|
||||
|
||||
#define MAX_XIN_COUNT 16
|
||||
|
||||
|
|
@ -749,6 +749,7 @@ struct dpu_mdss_cfg {
|
|||
const struct dpu_format_extended *vig_formats;
|
||||
};
|
||||
|
||||
extern const struct dpu_mdss_cfg dpu_glymur_cfg;
|
||||
extern const struct dpu_mdss_cfg dpu_msm8917_cfg;
|
||||
extern const struct dpu_mdss_cfg dpu_msm8937_cfg;
|
||||
extern const struct dpu_mdss_cfg dpu_msm8953_cfg;
|
||||
|
|
|
|||
|
|
@ -71,12 +71,6 @@ struct dpu_hw_dsc *dpu_hw_dsc_init_1_2(struct drm_device *dev,
|
|||
const struct dpu_dsc_cfg *cfg,
|
||||
void __iomem *addr);
|
||||
|
||||
/**
|
||||
* dpu_hw_dsc_destroy - destroys dsc driver context
|
||||
* @dsc: Pointer to dsc driver context returned by dpu_hw_dsc_init
|
||||
*/
|
||||
void dpu_hw_dsc_destroy(struct dpu_hw_dsc *dsc);
|
||||
|
||||
static inline struct dpu_hw_dsc *to_dpu_hw_dsc(struct dpu_hw_blk *hw)
|
||||
{
|
||||
return container_of(hw, struct dpu_hw_dsc, base);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,9 @@
|
|||
#define DPU_MAX_PLANES 4
|
||||
#endif
|
||||
|
||||
#define STAGES_PER_PLANE 2
|
||||
#define PIPES_PER_STAGE 2
|
||||
#define PIPES_PER_PLANE (PIPES_PER_STAGE * STAGES_PER_PLANE)
|
||||
#ifndef DPU_MAX_DE_CURVES
|
||||
#define DPU_MAX_DE_CURVES 3
|
||||
#endif
|
||||
|
|
@ -149,6 +151,10 @@ enum dpu_dspp {
|
|||
DSPP_1,
|
||||
DSPP_2,
|
||||
DSPP_3,
|
||||
DSPP_4,
|
||||
DSPP_5,
|
||||
DSPP_6,
|
||||
DSPP_7,
|
||||
DSPP_MAX
|
||||
};
|
||||
|
||||
|
|
@ -159,6 +165,8 @@ enum dpu_ctl {
|
|||
CTL_3,
|
||||
CTL_4,
|
||||
CTL_5,
|
||||
CTL_6,
|
||||
CTL_7,
|
||||
CTL_MAX
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1505,6 +1505,7 @@ static const struct dev_pm_ops dpu_pm_ops = {
|
|||
};
|
||||
|
||||
static const struct of_device_id dpu_dt_match[] = {
|
||||
{ .compatible = "qcom,glymur-dpu", .data = &dpu_glymur_cfg, },
|
||||
{ .compatible = "qcom,msm8917-mdp5", .data = &dpu_msm8917_cfg, },
|
||||
{ .compatible = "qcom,msm8937-mdp5", .data = &dpu_msm8937_cfg, },
|
||||
{ .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
|
||||
|
|
|
|||
|
|
@ -622,6 +622,7 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
|
|||
struct msm_drm_private *priv = plane->dev->dev_private;
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state);
|
||||
u32 fill_color = (color & 0xFFFFFF) | ((alpha & 0xFF) << 24);
|
||||
int i;
|
||||
|
||||
DPU_DEBUG_PLANE(pdpu, "\n");
|
||||
|
||||
|
|
@ -635,12 +636,13 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
|
|||
return;
|
||||
|
||||
/* update sspp */
|
||||
_dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_rect,
|
||||
fill_color, fmt);
|
||||
|
||||
if (pstate->r_pipe.sspp)
|
||||
_dpu_plane_color_fill_pipe(pstate, &pstate->r_pipe, &pstate->r_pipe_cfg.dst_rect,
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
if (!pstate->pipe[i].sspp)
|
||||
continue;
|
||||
_dpu_plane_color_fill_pipe(pstate, &pstate->pipe[i],
|
||||
&pstate->pipe_cfg[i].dst_rect,
|
||||
fill_color, fmt);
|
||||
}
|
||||
}
|
||||
|
||||
static int dpu_plane_prepare_fb(struct drm_plane *plane,
|
||||
|
|
@ -822,10 +824,14 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane,
|
|||
struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base);
|
||||
u64 max_mdp_clk_rate = kms->perf.max_core_clk_rate;
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state);
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->r_pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg init_pipe_cfg;
|
||||
struct drm_rect fb_rect = { 0 };
|
||||
const struct drm_display_mode *mode = &crtc_state->adjusted_mode;
|
||||
uint32_t max_linewidth;
|
||||
u32 num_lm;
|
||||
int stage_id, num_stages;
|
||||
|
||||
min_scale = FRAC_16_16(1, MAX_UPSCALE_RATIO);
|
||||
max_scale = MAX_DOWNSCALE_RATIO << 16;
|
||||
|
|
@ -848,10 +854,10 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* state->src is 16.16, src_rect is not */
|
||||
drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src);
|
||||
num_lm = dpu_crtc_get_num_lm(crtc_state);
|
||||
|
||||
pipe_cfg->dst_rect = new_plane_state->dst;
|
||||
/* state->src is 16.16, src_rect is not */
|
||||
drm_rect_fp_to_int(&init_pipe_cfg.src_rect, &new_plane_state->src);
|
||||
|
||||
fb_rect.x2 = new_plane_state->fb->width;
|
||||
fb_rect.y2 = new_plane_state->fb->height;
|
||||
|
|
@ -876,35 +882,94 @@ static int dpu_plane_atomic_check_nosspp(struct drm_plane *plane,
|
|||
|
||||
max_linewidth = pdpu->catalog->caps->max_linewidth;
|
||||
|
||||
drm_rect_rotate(&pipe_cfg->src_rect,
|
||||
drm_rect_rotate(&init_pipe_cfg.src_rect,
|
||||
new_plane_state->fb->width, new_plane_state->fb->height,
|
||||
new_plane_state->rotation);
|
||||
|
||||
if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) ||
|
||||
_dpu_plane_calc_clk(&crtc_state->adjusted_mode, pipe_cfg) > max_mdp_clk_rate) {
|
||||
if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) {
|
||||
DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
|
||||
DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth);
|
||||
return -E2BIG;
|
||||
/*
|
||||
* We have 1 mixer pair cfg for 1:1:1 and 2:2:1 topology, 2 mixer pair
|
||||
* configs for left and right half screen in case of 4:4:2 topology.
|
||||
* But we may have 2 rect to split wide plane that exceeds limit with 1
|
||||
* config for 2:2:1. So need to handle both wide plane splitting, and
|
||||
* two halves of screen splitting for quad-pipe case. Check dest
|
||||
* rectangle left/right clipping first, then check wide rectangle
|
||||
* splitting in every half next.
|
||||
*/
|
||||
num_stages = (num_lm + 1) / 2;
|
||||
/* iterate mixer configs for this plane, to separate left/right with the id */
|
||||
for (stage_id = 0; stage_id < num_stages; stage_id++) {
|
||||
struct drm_rect mixer_rect = {
|
||||
.x1 = stage_id * mode->hdisplay / num_stages,
|
||||
.y1 = 0,
|
||||
.x2 = (stage_id + 1) * mode->hdisplay / num_stages,
|
||||
.y2 = mode->vdisplay
|
||||
};
|
||||
int cfg_idx = stage_id * PIPES_PER_STAGE;
|
||||
|
||||
pipe_cfg = &pstate->pipe_cfg[cfg_idx];
|
||||
r_pipe_cfg = &pstate->pipe_cfg[cfg_idx + 1];
|
||||
|
||||
drm_rect_fp_to_int(&pipe_cfg->src_rect, &new_plane_state->src);
|
||||
pipe_cfg->dst_rect = new_plane_state->dst;
|
||||
|
||||
DPU_DEBUG_PLANE(pdpu, "checking src " DRM_RECT_FMT
|
||||
" vs clip window " DRM_RECT_FMT "\n",
|
||||
DRM_RECT_ARG(&pipe_cfg->src_rect),
|
||||
DRM_RECT_ARG(&mixer_rect));
|
||||
|
||||
/*
|
||||
* If this plane does not fall into mixer rect, check next
|
||||
* mixer rect.
|
||||
*/
|
||||
if (!drm_rect_clip_scaled(&pipe_cfg->src_rect,
|
||||
&pipe_cfg->dst_rect,
|
||||
&mixer_rect)) {
|
||||
memset(pipe_cfg, 0, 2 * sizeof(struct dpu_sw_pipe_cfg));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
*r_pipe_cfg = *pipe_cfg;
|
||||
pipe_cfg->src_rect.x2 = (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x2) >> 1;
|
||||
pipe_cfg->dst_rect.x2 = (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x2) >> 1;
|
||||
r_pipe_cfg->src_rect.x1 = pipe_cfg->src_rect.x2;
|
||||
r_pipe_cfg->dst_rect.x1 = pipe_cfg->dst_rect.x2;
|
||||
} else {
|
||||
memset(r_pipe_cfg, 0, sizeof(*r_pipe_cfg));
|
||||
}
|
||||
pipe_cfg->dst_rect.x1 -= mixer_rect.x1;
|
||||
pipe_cfg->dst_rect.x2 -= mixer_rect.x1;
|
||||
|
||||
drm_rect_rotate_inv(&pipe_cfg->src_rect,
|
||||
new_plane_state->fb->width, new_plane_state->fb->height,
|
||||
new_plane_state->rotation);
|
||||
if (drm_rect_width(&r_pipe_cfg->src_rect) != 0)
|
||||
drm_rect_rotate_inv(&r_pipe_cfg->src_rect,
|
||||
new_plane_state->fb->width, new_plane_state->fb->height,
|
||||
DPU_DEBUG_PLANE(pdpu, "Got clip src:" DRM_RECT_FMT " dst: " DRM_RECT_FMT "\n",
|
||||
DRM_RECT_ARG(&pipe_cfg->src_rect), DRM_RECT_ARG(&pipe_cfg->dst_rect));
|
||||
|
||||
/* Split wide rect into 2 rect */
|
||||
if ((drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) ||
|
||||
_dpu_plane_calc_clk(mode, pipe_cfg) > max_mdp_clk_rate) {
|
||||
|
||||
if (drm_rect_width(&pipe_cfg->src_rect) > 2 * max_linewidth) {
|
||||
DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
|
||||
DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth);
|
||||
return -E2BIG;
|
||||
}
|
||||
|
||||
memcpy(r_pipe_cfg, pipe_cfg, sizeof(struct dpu_sw_pipe_cfg));
|
||||
pipe_cfg->src_rect.x2 = (pipe_cfg->src_rect.x1 + pipe_cfg->src_rect.x2) >> 1;
|
||||
pipe_cfg->dst_rect.x2 = (pipe_cfg->dst_rect.x1 + pipe_cfg->dst_rect.x2) >> 1;
|
||||
r_pipe_cfg->src_rect.x1 = pipe_cfg->src_rect.x2;
|
||||
r_pipe_cfg->dst_rect.x1 = pipe_cfg->dst_rect.x2;
|
||||
DPU_DEBUG_PLANE(pdpu, "Split wide plane into:"
|
||||
DRM_RECT_FMT " and " DRM_RECT_FMT "\n",
|
||||
DRM_RECT_ARG(&pipe_cfg->src_rect),
|
||||
DRM_RECT_ARG(&r_pipe_cfg->src_rect));
|
||||
} else {
|
||||
memset(r_pipe_cfg, 0, sizeof(struct dpu_sw_pipe_cfg));
|
||||
}
|
||||
|
||||
drm_rect_rotate_inv(&pipe_cfg->src_rect,
|
||||
new_plane_state->fb->width,
|
||||
new_plane_state->fb->height,
|
||||
new_plane_state->rotation);
|
||||
|
||||
if (drm_rect_width(&r_pipe_cfg->src_rect) != 0)
|
||||
drm_rect_rotate_inv(&r_pipe_cfg->src_rect,
|
||||
new_plane_state->fb->width,
|
||||
new_plane_state->fb->height,
|
||||
new_plane_state->rotation);
|
||||
}
|
||||
|
||||
pstate->needs_qos_remap = drm_atomic_crtc_needs_modeset(crtc_state);
|
||||
|
||||
return 0;
|
||||
|
|
@ -954,6 +1019,23 @@ static int dpu_plane_is_multirect_parallel_capable(struct dpu_hw_sspp *sspp,
|
|||
dpu_plane_is_parallel_capable(pipe_cfg, fmt, max_linewidth);
|
||||
}
|
||||
|
||||
static bool dpu_plane_get_single_pipe_in_stage(struct dpu_plane_state *pstate,
|
||||
struct dpu_sw_pipe **single_pipe,
|
||||
struct dpu_sw_pipe_cfg **single_pipe_cfg,
|
||||
int stage_index)
|
||||
{
|
||||
int pipe_idx;
|
||||
|
||||
pipe_idx = stage_index * PIPES_PER_STAGE;
|
||||
if (drm_rect_width(&pstate->pipe_cfg[pipe_idx].src_rect) != 0 &&
|
||||
drm_rect_width(&pstate->pipe_cfg[pipe_idx + 1].src_rect) == 0) {
|
||||
*single_pipe = &pstate->pipe[pipe_idx];
|
||||
*single_pipe_cfg = &pstate->pipe_cfg[pipe_idx];
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int dpu_plane_atomic_check_sspp(struct drm_plane *plane,
|
||||
struct drm_atomic_state *state,
|
||||
|
|
@ -963,20 +1045,17 @@ static int dpu_plane_atomic_check_sspp(struct drm_plane *plane,
|
|||
drm_atomic_get_new_plane_state(state, plane);
|
||||
struct dpu_plane *pdpu = to_dpu_plane(plane);
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state);
|
||||
struct dpu_sw_pipe *pipe = &pstate->pipe;
|
||||
struct dpu_sw_pipe *r_pipe = &pstate->r_pipe;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->r_pipe_cfg;
|
||||
int ret = 0;
|
||||
struct dpu_sw_pipe *pipe;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg;
|
||||
int ret = 0, i;
|
||||
|
||||
ret = dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg,
|
||||
&crtc_state->adjusted_mode,
|
||||
new_plane_state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (drm_rect_width(&r_pipe_cfg->src_rect) != 0) {
|
||||
ret = dpu_plane_atomic_check_pipe(pdpu, r_pipe, r_pipe_cfg,
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
pipe = &pstate->pipe[i];
|
||||
pipe_cfg = &pstate->pipe_cfg[i];
|
||||
if (!drm_rect_width(&pipe_cfg->src_rect))
|
||||
continue;
|
||||
DPU_DEBUG_PLANE(pdpu, "pipe %d is in use, validate it\n", i);
|
||||
ret = dpu_plane_atomic_check_pipe(pdpu, pipe, pipe_cfg,
|
||||
&crtc_state->adjusted_mode,
|
||||
new_plane_state);
|
||||
if (ret)
|
||||
|
|
@ -1019,17 +1098,20 @@ static bool dpu_plane_try_multirect_parallel(struct dpu_sw_pipe *pipe, struct dp
|
|||
static int dpu_plane_try_multirect_shared(struct dpu_plane_state *pstate,
|
||||
struct dpu_plane_state *prev_adjacent_pstate,
|
||||
const struct msm_format *fmt,
|
||||
uint32_t max_linewidth)
|
||||
uint32_t max_linewidth, int stage_index)
|
||||
{
|
||||
struct dpu_sw_pipe *pipe = &pstate->pipe;
|
||||
struct dpu_sw_pipe *r_pipe = &pstate->r_pipe;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg;
|
||||
struct dpu_sw_pipe *prev_pipe = &prev_adjacent_pstate->pipe;
|
||||
struct dpu_sw_pipe_cfg *prev_pipe_cfg = &prev_adjacent_pstate->pipe_cfg;
|
||||
struct dpu_sw_pipe *pipe, *prev_pipe;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg, *prev_pipe_cfg;
|
||||
const struct msm_format *prev_fmt = msm_framebuffer_format(prev_adjacent_pstate->base.fb);
|
||||
u16 max_tile_height = 1;
|
||||
|
||||
if (prev_adjacent_pstate->r_pipe.sspp != NULL ||
|
||||
if (!dpu_plane_get_single_pipe_in_stage(pstate, &pipe,
|
||||
&pipe_cfg, stage_index))
|
||||
return false;
|
||||
|
||||
if (!dpu_plane_get_single_pipe_in_stage(prev_adjacent_pstate,
|
||||
&prev_pipe, &prev_pipe_cfg,
|
||||
stage_index) ||
|
||||
prev_pipe->multirect_mode != DPU_SSPP_MULTIRECT_NONE)
|
||||
return false;
|
||||
|
||||
|
|
@ -1044,11 +1126,6 @@ static int dpu_plane_try_multirect_shared(struct dpu_plane_state *pstate,
|
|||
if (MSM_FORMAT_IS_UBWC(prev_fmt))
|
||||
max_tile_height = max(max_tile_height, prev_fmt->tile_height);
|
||||
|
||||
r_pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
r_pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
|
||||
r_pipe->sspp = NULL;
|
||||
|
||||
if (dpu_plane_is_parallel_capable(pipe_cfg, fmt, max_linewidth) &&
|
||||
dpu_plane_is_parallel_capable(prev_pipe_cfg, prev_fmt, max_linewidth) &&
|
||||
(pipe_cfg->dst_rect.x1 >= prev_pipe_cfg->dst_rect.x2 ||
|
||||
|
|
@ -1089,10 +1166,10 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
|
|||
struct dpu_plane *pdpu = to_dpu_plane(plane);
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(new_plane_state);
|
||||
struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane);
|
||||
struct dpu_sw_pipe *pipe = &pstate->pipe;
|
||||
struct dpu_sw_pipe *r_pipe = &pstate->r_pipe;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->r_pipe_cfg;
|
||||
struct dpu_sw_pipe *pipe = &pstate->pipe[0];
|
||||
struct dpu_sw_pipe *r_pipe = &pstate->pipe[1];
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg[0];
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->pipe_cfg[1];
|
||||
const struct drm_crtc_state *crtc_state = NULL;
|
||||
uint32_t max_linewidth = dpu_kms->catalog->caps->max_linewidth;
|
||||
|
||||
|
|
@ -1136,7 +1213,7 @@ static int dpu_plane_virtual_atomic_check(struct drm_plane *plane,
|
|||
drm_atomic_get_old_plane_state(state, plane);
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(plane_state);
|
||||
struct drm_crtc_state *crtc_state = NULL;
|
||||
int ret;
|
||||
int ret, i;
|
||||
|
||||
if (IS_ERR(plane_state))
|
||||
return PTR_ERR(plane_state);
|
||||
|
|
@ -1154,8 +1231,8 @@ static int dpu_plane_virtual_atomic_check(struct drm_plane *plane,
|
|||
* resources are freed by dpu_crtc_assign_plane_resources(),
|
||||
* but clean them here.
|
||||
*/
|
||||
pstate->pipe.sspp = NULL;
|
||||
pstate->r_pipe.sspp = NULL;
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++)
|
||||
pstate->pipe[i].sspp = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1177,37 +1254,72 @@ static int dpu_plane_virtual_atomic_check(struct drm_plane *plane,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dpu_plane_assign_resource_in_stage(struct dpu_sw_pipe *pipe,
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg,
|
||||
struct drm_plane_state *plane_state,
|
||||
struct dpu_global_state *global_state,
|
||||
struct drm_crtc *crtc,
|
||||
struct dpu_rm_sspp_requirements *reqs)
|
||||
{
|
||||
struct drm_plane *plane = plane_state->plane;
|
||||
struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane);
|
||||
struct dpu_sw_pipe *r_pipe = pipe + 1;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg = pipe_cfg + 1;
|
||||
|
||||
if (drm_rect_width(&pipe_cfg->src_rect) == 0)
|
||||
return 0;
|
||||
|
||||
pipe->sspp = dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, reqs);
|
||||
if (!pipe->sspp)
|
||||
return -ENODEV;
|
||||
pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
|
||||
if (drm_rect_width(&r_pipe_cfg->src_rect) == 0)
|
||||
return 0;
|
||||
|
||||
if (dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg,
|
||||
pipe->sspp,
|
||||
msm_framebuffer_format(plane_state->fb),
|
||||
dpu_kms->catalog->caps->max_linewidth))
|
||||
return 0;
|
||||
|
||||
r_pipe->sspp = dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, reqs);
|
||||
if (!r_pipe->sspp)
|
||||
return -ENODEV;
|
||||
r_pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
r_pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dpu_plane_virtual_assign_resources(struct drm_crtc *crtc,
|
||||
struct dpu_global_state *global_state,
|
||||
struct drm_atomic_state *state,
|
||||
struct drm_plane_state *plane_state,
|
||||
struct drm_plane_state *prev_adjacent_plane_state)
|
||||
struct drm_plane_state **prev_adjacent_plane_state)
|
||||
{
|
||||
const struct drm_crtc_state *crtc_state = NULL;
|
||||
struct drm_plane *plane = plane_state->plane;
|
||||
struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane);
|
||||
struct dpu_rm_sspp_requirements reqs;
|
||||
struct dpu_plane_state *pstate, *prev_adjacent_pstate;
|
||||
struct dpu_plane_state *pstate, *prev_adjacent_pstate[STAGES_PER_PLANE];
|
||||
struct dpu_sw_pipe *pipe;
|
||||
struct dpu_sw_pipe *r_pipe;
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg;
|
||||
const struct msm_format *fmt;
|
||||
int i, ret;
|
||||
|
||||
if (plane_state->crtc)
|
||||
crtc_state = drm_atomic_get_new_crtc_state(state,
|
||||
plane_state->crtc);
|
||||
|
||||
pstate = to_dpu_plane_state(plane_state);
|
||||
prev_adjacent_pstate = prev_adjacent_plane_state ?
|
||||
to_dpu_plane_state(prev_adjacent_plane_state) : NULL;
|
||||
pipe = &pstate->pipe;
|
||||
r_pipe = &pstate->r_pipe;
|
||||
pipe_cfg = &pstate->pipe_cfg;
|
||||
r_pipe_cfg = &pstate->r_pipe_cfg;
|
||||
for (i = 0; i < STAGES_PER_PLANE; i++)
|
||||
prev_adjacent_pstate[i] = prev_adjacent_plane_state[i] ?
|
||||
to_dpu_plane_state(prev_adjacent_plane_state[i]) : NULL;
|
||||
|
||||
pipe->sspp = NULL;
|
||||
r_pipe->sspp = NULL;
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++)
|
||||
pstate->pipe[i].sspp = NULL;
|
||||
|
||||
if (!plane_state->fb)
|
||||
return -EINVAL;
|
||||
|
|
@ -1219,42 +1331,24 @@ static int dpu_plane_virtual_assign_resources(struct drm_crtc *crtc,
|
|||
|
||||
reqs.rot90 = drm_rotation_90_or_270(plane_state->rotation);
|
||||
|
||||
if (drm_rect_width(&r_pipe_cfg->src_rect) == 0) {
|
||||
if (!prev_adjacent_pstate ||
|
||||
!dpu_plane_try_multirect_shared(pstate, prev_adjacent_pstate, fmt,
|
||||
dpu_kms->catalog->caps->max_linewidth)) {
|
||||
pipe->sspp = dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &reqs);
|
||||
if (!pipe->sspp)
|
||||
return -ENODEV;
|
||||
for (i = 0; i < STAGES_PER_PLANE; i++) {
|
||||
if (prev_adjacent_pstate[i] &&
|
||||
dpu_plane_try_multirect_shared(pstate, prev_adjacent_pstate[i], fmt,
|
||||
dpu_kms->catalog->caps->max_linewidth,
|
||||
i))
|
||||
continue;
|
||||
|
||||
r_pipe->sspp = NULL;
|
||||
if (dpu_plane_get_single_pipe_in_stage(pstate, &pipe, &pipe_cfg, i))
|
||||
prev_adjacent_plane_state[i] = plane_state;
|
||||
|
||||
pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
|
||||
r_pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
r_pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
}
|
||||
} else {
|
||||
pipe->sspp = dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &reqs);
|
||||
if (!pipe->sspp)
|
||||
return -ENODEV;
|
||||
|
||||
if (!dpu_plane_try_multirect_parallel(pipe, pipe_cfg, r_pipe, r_pipe_cfg,
|
||||
pipe->sspp,
|
||||
msm_framebuffer_format(plane_state->fb),
|
||||
dpu_kms->catalog->caps->max_linewidth)) {
|
||||
/* multirect is not possible, use two SSPP blocks */
|
||||
r_pipe->sspp = dpu_rm_reserve_sspp(&dpu_kms->rm, global_state, crtc, &reqs);
|
||||
if (!r_pipe->sspp)
|
||||
return -ENODEV;
|
||||
|
||||
pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
|
||||
r_pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
r_pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
}
|
||||
pipe = &pstate->pipe[i * PIPES_PER_STAGE];
|
||||
pipe_cfg = &pstate->pipe_cfg[i * PIPES_PER_STAGE];
|
||||
ret = dpu_plane_assign_resource_in_stage(pipe, pipe_cfg,
|
||||
plane_state,
|
||||
global_state,
|
||||
crtc, &reqs);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return dpu_plane_atomic_check_sspp(plane, state, crtc_state);
|
||||
|
|
@ -1267,7 +1361,7 @@ int dpu_assign_plane_resources(struct dpu_global_state *global_state,
|
|||
unsigned int num_planes)
|
||||
{
|
||||
unsigned int i;
|
||||
struct drm_plane_state *prev_adjacent_plane_state = NULL;
|
||||
struct drm_plane_state *prev_adjacent_plane_state[STAGES_PER_PLANE] = { NULL };
|
||||
|
||||
for (i = 0; i < num_planes; i++) {
|
||||
struct drm_plane_state *plane_state = states[i];
|
||||
|
|
@ -1281,8 +1375,6 @@ int dpu_assign_plane_resources(struct dpu_global_state *global_state,
|
|||
prev_adjacent_plane_state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
prev_adjacent_plane_state = plane_state;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1318,6 +1410,7 @@ void dpu_plane_flush(struct drm_plane *plane)
|
|||
{
|
||||
struct dpu_plane *pdpu;
|
||||
struct dpu_plane_state *pstate;
|
||||
int i;
|
||||
|
||||
if (!plane || !plane->state) {
|
||||
DPU_ERROR("invalid plane\n");
|
||||
|
|
@ -1338,8 +1431,8 @@ void dpu_plane_flush(struct drm_plane *plane)
|
|||
/* force 100% alpha */
|
||||
_dpu_plane_color_fill(pdpu, pdpu->color_fill, 0xFF);
|
||||
else {
|
||||
dpu_plane_flush_csc(pdpu, &pstate->pipe);
|
||||
dpu_plane_flush_csc(pdpu, &pstate->r_pipe);
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++)
|
||||
dpu_plane_flush_csc(pdpu, &pstate->pipe[i]);
|
||||
}
|
||||
|
||||
/* flag h/w flush complete */
|
||||
|
|
@ -1440,15 +1533,12 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane,
|
|||
struct dpu_plane *pdpu = to_dpu_plane(plane);
|
||||
struct drm_plane_state *state = plane->state;
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(state);
|
||||
struct dpu_sw_pipe *pipe = &pstate->pipe;
|
||||
struct dpu_sw_pipe *r_pipe = &pstate->r_pipe;
|
||||
struct drm_crtc *crtc = state->crtc;
|
||||
struct drm_framebuffer *fb = state->fb;
|
||||
bool is_rt_pipe;
|
||||
const struct msm_format *fmt =
|
||||
msm_framebuffer_format(fb);
|
||||
struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->r_pipe_cfg;
|
||||
int i;
|
||||
|
||||
pstate->pending = true;
|
||||
|
||||
|
|
@ -1463,12 +1553,11 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane,
|
|||
crtc->base.id, DRM_RECT_ARG(&state->dst),
|
||||
&fmt->pixel_format, MSM_FORMAT_IS_UBWC(fmt));
|
||||
|
||||
dpu_plane_sspp_update_pipe(plane, pipe, pipe_cfg, fmt,
|
||||
drm_mode_vrefresh(&crtc->mode),
|
||||
&pstate->layout);
|
||||
|
||||
if (r_pipe->sspp) {
|
||||
dpu_plane_sspp_update_pipe(plane, r_pipe, r_pipe_cfg, fmt,
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
if (!drm_rect_width(&pstate->pipe_cfg[i].src_rect))
|
||||
continue;
|
||||
dpu_plane_sspp_update_pipe(plane, &pstate->pipe[i],
|
||||
&pstate->pipe_cfg[i], fmt,
|
||||
drm_mode_vrefresh(&crtc->mode),
|
||||
&pstate->layout);
|
||||
}
|
||||
|
|
@ -1476,15 +1565,17 @@ static void dpu_plane_sspp_atomic_update(struct drm_plane *plane,
|
|||
if (pstate->needs_qos_remap)
|
||||
pstate->needs_qos_remap = false;
|
||||
|
||||
pstate->plane_fetch_bw = _dpu_plane_calc_bw(pdpu->catalog, fmt,
|
||||
&crtc->mode, pipe_cfg);
|
||||
pstate->plane_fetch_bw = 0;
|
||||
pstate->plane_clk = 0;
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
if (!drm_rect_width(&pstate->pipe_cfg[i].src_rect))
|
||||
continue;
|
||||
pstate->plane_fetch_bw += _dpu_plane_calc_bw(pdpu->catalog, fmt,
|
||||
&crtc->mode, &pstate->pipe_cfg[i]);
|
||||
|
||||
pstate->plane_clk = _dpu_plane_calc_clk(&crtc->mode, pipe_cfg);
|
||||
|
||||
if (r_pipe->sspp) {
|
||||
pstate->plane_fetch_bw += _dpu_plane_calc_bw(pdpu->catalog, fmt, &crtc->mode, r_pipe_cfg);
|
||||
|
||||
pstate->plane_clk = max(pstate->plane_clk, _dpu_plane_calc_clk(&crtc->mode, r_pipe_cfg));
|
||||
pstate->plane_clk = max(pstate->plane_clk,
|
||||
_dpu_plane_calc_clk(&crtc->mode,
|
||||
&pstate->pipe_cfg[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1492,17 +1583,28 @@ static void _dpu_plane_atomic_disable(struct drm_plane *plane)
|
|||
{
|
||||
struct drm_plane_state *state = plane->state;
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(state);
|
||||
struct dpu_sw_pipe *r_pipe = &pstate->r_pipe;
|
||||
struct dpu_sw_pipe *pipe;
|
||||
int i;
|
||||
|
||||
trace_dpu_plane_disable(DRMID(plane), false,
|
||||
pstate->pipe.multirect_mode);
|
||||
for (i = 0; i < PIPES_PER_PLANE; i += 1) {
|
||||
pipe = &pstate->pipe[i];
|
||||
if (!pipe->sspp)
|
||||
continue;
|
||||
|
||||
if (r_pipe->sspp) {
|
||||
r_pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
r_pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
trace_dpu_plane_disable(DRMID(plane), false,
|
||||
pstate->pipe[i].multirect_mode);
|
||||
|
||||
if (r_pipe->sspp->ops.setup_multirect)
|
||||
r_pipe->sspp->ops.setup_multirect(r_pipe);
|
||||
if (i % PIPES_PER_STAGE == 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* clear multirect for the right pipe so that the SSPP
|
||||
* can be further reused in the solo mode
|
||||
*/
|
||||
pipe->multirect_index = DPU_SSPP_RECT_SOLO;
|
||||
pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
|
||||
if (pipe->sspp->ops.setup_multirect)
|
||||
pipe->sspp->ops.setup_multirect(pipe);
|
||||
}
|
||||
|
||||
pstate->pending = true;
|
||||
|
|
@ -1597,31 +1699,26 @@ static void dpu_plane_atomic_print_state(struct drm_printer *p,
|
|||
const struct drm_plane_state *state)
|
||||
{
|
||||
const struct dpu_plane_state *pstate = to_dpu_plane_state(state);
|
||||
const struct dpu_sw_pipe *pipe = &pstate->pipe;
|
||||
const struct dpu_sw_pipe_cfg *pipe_cfg = &pstate->pipe_cfg;
|
||||
const struct dpu_sw_pipe *r_pipe = &pstate->r_pipe;
|
||||
const struct dpu_sw_pipe_cfg *r_pipe_cfg = &pstate->r_pipe_cfg;
|
||||
const struct dpu_sw_pipe *pipe;
|
||||
const struct dpu_sw_pipe_cfg *pipe_cfg;
|
||||
int i;
|
||||
|
||||
drm_printf(p, "\tstage=%d\n", pstate->stage);
|
||||
|
||||
if (pipe->sspp) {
|
||||
drm_printf(p, "\tsspp[0]=%s\n", pipe->sspp->cap->name);
|
||||
drm_printf(p, "\tmultirect_mode[0]=%s\n",
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
pipe = &pstate->pipe[i];
|
||||
if (!pipe->sspp)
|
||||
continue;
|
||||
pipe_cfg = &pstate->pipe_cfg[i];
|
||||
drm_printf(p, "\tsspp[%d]=%s\n", i, pipe->sspp->cap->name);
|
||||
drm_printf(p, "\tmultirect_mode[%d]=%s\n", i,
|
||||
dpu_get_multirect_mode(pipe->multirect_mode));
|
||||
drm_printf(p, "\tmultirect_index[0]=%s\n",
|
||||
drm_printf(p, "\tmultirect_index[%d]=%s\n", i,
|
||||
dpu_get_multirect_index(pipe->multirect_index));
|
||||
drm_printf(p, "\tsrc[0]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->src_rect));
|
||||
drm_printf(p, "\tdst[0]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&pipe_cfg->dst_rect));
|
||||
}
|
||||
|
||||
if (r_pipe->sspp) {
|
||||
drm_printf(p, "\tsspp[1]=%s\n", r_pipe->sspp->cap->name);
|
||||
drm_printf(p, "\tmultirect_mode[1]=%s\n",
|
||||
dpu_get_multirect_mode(r_pipe->multirect_mode));
|
||||
drm_printf(p, "\tmultirect_index[1]=%s\n",
|
||||
dpu_get_multirect_index(r_pipe->multirect_index));
|
||||
drm_printf(p, "\tsrc[1]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&r_pipe_cfg->src_rect));
|
||||
drm_printf(p, "\tdst[1]=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&r_pipe_cfg->dst_rect));
|
||||
drm_printf(p, "\tsrc[%d]=" DRM_RECT_FMT "\n", i,
|
||||
DRM_RECT_ARG(&pipe_cfg->src_rect));
|
||||
drm_printf(p, "\tdst[%d]=" DRM_RECT_FMT "\n", i,
|
||||
DRM_RECT_ARG(&pipe_cfg->dst_rect));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1659,14 +1756,17 @@ void dpu_plane_danger_signal_ctrl(struct drm_plane *plane, bool enable)
|
|||
struct dpu_plane *pdpu = to_dpu_plane(plane);
|
||||
struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state);
|
||||
struct dpu_kms *dpu_kms = _dpu_plane_get_kms(plane);
|
||||
int i;
|
||||
|
||||
if (!pdpu->is_rt_pipe)
|
||||
return;
|
||||
|
||||
pm_runtime_get_sync(&dpu_kms->pdev->dev);
|
||||
_dpu_plane_set_qos_ctrl(plane, &pstate->pipe, enable);
|
||||
if (pstate->r_pipe.sspp)
|
||||
_dpu_plane_set_qos_ctrl(plane, &pstate->r_pipe, enable);
|
||||
for (i = 0; i < PIPES_PER_PLANE; i++) {
|
||||
if (!pstate->pipe[i].sspp)
|
||||
continue;
|
||||
_dpu_plane_set_qos_ctrl(plane, &pstate->pipe[i], enable);
|
||||
}
|
||||
pm_runtime_put_sync(&dpu_kms->pdev->dev);
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -17,10 +17,8 @@
|
|||
/**
|
||||
* struct dpu_plane_state: Define dpu extension of drm plane state object
|
||||
* @base: base drm plane state object
|
||||
* @pipe: software pipe description
|
||||
* @r_pipe: software pipe description of the second pipe
|
||||
* @pipe_cfg: software pipe configuration
|
||||
* @r_pipe_cfg: software pipe configuration for the second pipe
|
||||
* @pipe: software pipe description array
|
||||
* @pipe_cfg: software pipe configuration array
|
||||
* @stage: assigned by crtc blender
|
||||
* @needs_qos_remap: qos remap settings need to be updated
|
||||
* @multirect_index: index of the rectangle of SSPP
|
||||
|
|
@ -33,10 +31,8 @@
|
|||
*/
|
||||
struct dpu_plane_state {
|
||||
struct drm_plane_state base;
|
||||
struct dpu_sw_pipe pipe;
|
||||
struct dpu_sw_pipe r_pipe;
|
||||
struct dpu_sw_pipe_cfg pipe_cfg;
|
||||
struct dpu_sw_pipe_cfg r_pipe_cfg;
|
||||
struct dpu_sw_pipe pipe[PIPES_PER_PLANE];
|
||||
struct dpu_sw_pipe_cfg pipe_cfg[PIPES_PER_PLANE];
|
||||
enum dpu_stage stage;
|
||||
bool needs_qos_remap;
|
||||
bool pending;
|
||||
|
|
|
|||
|
|
@ -374,7 +374,11 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
|
|||
if (!rm->mixer_blks[i])
|
||||
continue;
|
||||
|
||||
lm_count = 0;
|
||||
/*
|
||||
* Reset lm_count to an even index. This will drop the previous
|
||||
* primary mixer if failed to find its peer.
|
||||
*/
|
||||
lm_count &= ~1;
|
||||
lm_idx[lm_count] = i;
|
||||
|
||||
if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state,
|
||||
|
|
|
|||
|
|
@ -651,9 +651,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer,
|
|||
TP_PROTO(uint32_t crtc_id, uint32_t plane_id,
|
||||
struct drm_plane_state *state, struct dpu_plane_state *pstate,
|
||||
uint32_t stage_idx, uint32_t pixel_format,
|
||||
uint64_t modifier),
|
||||
struct dpu_sw_pipe *pipe, uint64_t modifier),
|
||||
TP_ARGS(crtc_id, plane_id, state, pstate, stage_idx,
|
||||
pixel_format, modifier),
|
||||
pixel_format, pipe, modifier),
|
||||
TP_STRUCT__entry(
|
||||
__field( uint32_t, crtc_id )
|
||||
__field( uint32_t, plane_id )
|
||||
|
|
@ -676,9 +676,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer,
|
|||
__entry->dst_rect = drm_plane_state_dest(state);
|
||||
__entry->stage_idx = stage_idx;
|
||||
__entry->stage = pstate->stage;
|
||||
__entry->sspp = pstate->pipe.sspp->idx;
|
||||
__entry->multirect_idx = pstate->pipe.multirect_index;
|
||||
__entry->multirect_mode = pstate->pipe.multirect_mode;
|
||||
__entry->sspp = pipe->sspp->idx;
|
||||
__entry->multirect_idx = pipe->multirect_index;
|
||||
__entry->multirect_mode = pipe->multirect_mode;
|
||||
__entry->pixel_format = pixel_format;
|
||||
__entry->modifier = modifier;
|
||||
),
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
* struct msm_disp_state - structure to store current dpu state
|
||||
* @dev: device pointer
|
||||
* @drm_dev: drm device pointer
|
||||
* @blocks: list head for hardware state blocks
|
||||
* @atomic_state: atomic state duplicated at the time of the error
|
||||
* @time: timestamp at which the coredump was captured
|
||||
*/
|
||||
|
|
@ -55,7 +56,7 @@ struct msm_disp_state {
|
|||
/**
|
||||
* struct msm_disp_state_block - structure to store each hardware block state
|
||||
* @name: name of the block
|
||||
* @drm_dev: handle to the linked list head
|
||||
* @node: handle to the linked list head
|
||||
* @size: size of the register space of this hardware block
|
||||
* @state: array holding the register dump of this hardware block
|
||||
* @base_addr: starting address of this hardware block's register space
|
||||
|
|
@ -88,8 +89,9 @@ void msm_disp_snapshot_destroy(struct drm_device *drm_dev);
|
|||
* msm_disp_snapshot_state_sync - synchronously snapshot display state
|
||||
* @kms: the kms object
|
||||
*
|
||||
* Returns state or error
|
||||
* Returns: state or error
|
||||
*
|
||||
* Context:
|
||||
* Must be called with &kms->dump_mutex held
|
||||
*/
|
||||
struct msm_disp_state *msm_disp_snapshot_state_sync(struct msm_kms *kms);
|
||||
|
|
@ -97,7 +99,7 @@ struct msm_disp_state *msm_disp_snapshot_state_sync(struct msm_kms *kms);
|
|||
/**
|
||||
* msm_disp_snapshot_state - trigger to dump the display snapshot
|
||||
* @drm_dev: handle to drm device
|
||||
|
||||
*
|
||||
* Returns: none
|
||||
*/
|
||||
void msm_disp_snapshot_state(struct drm_device *drm_dev);
|
||||
|
|
@ -114,7 +116,7 @@ void msm_disp_state_print(struct msm_disp_state *disp_state, struct drm_printer
|
|||
/**
|
||||
* msm_disp_snapshot_capture_state - utility to capture atomic state and hw registers
|
||||
* @disp_state: handle to msm_disp_state struct
|
||||
|
||||
*
|
||||
* Returns: none
|
||||
*/
|
||||
void msm_disp_snapshot_capture_state(struct msm_disp_state *disp_state);
|
||||
|
|
@ -122,7 +124,7 @@ void msm_disp_snapshot_capture_state(struct msm_disp_state *disp_state);
|
|||
/**
|
||||
* msm_disp_state_free - free the memory after the coredump has been read
|
||||
* @data: handle to struct msm_disp_state
|
||||
|
||||
*
|
||||
* Returns: none
|
||||
*/
|
||||
void msm_disp_state_free(void *data);
|
||||
|
|
@ -130,7 +132,6 @@ void msm_disp_state_free(void *data);
|
|||
/**
|
||||
* msm_disp_snapshot_add_block - add a hardware block with its register dump
|
||||
* @disp_state: handle to struct msm_disp_state
|
||||
* @name: name of the hardware block
|
||||
* @len: size of the register space of the hardware block
|
||||
* @base_addr: starting address of the register space of the hardware block
|
||||
* @fmt: format in which the block names need to be printed
|
||||
|
|
|
|||
|
|
@ -423,13 +423,13 @@ static void msm_dp_ctrl_config_ctrl(struct msm_dp_ctrl_private *ctrl)
|
|||
|
||||
static void msm_dp_ctrl_lane_mapping(struct msm_dp_ctrl_private *ctrl)
|
||||
{
|
||||
u32 ln_0 = 0, ln_1 = 1, ln_2 = 2, ln_3 = 3; /* One-to-One mapping */
|
||||
u32 *lane_map = ctrl->link->lane_map;
|
||||
u32 ln_mapping;
|
||||
|
||||
ln_mapping = ln_0 << LANE0_MAPPING_SHIFT;
|
||||
ln_mapping |= ln_1 << LANE1_MAPPING_SHIFT;
|
||||
ln_mapping |= ln_2 << LANE2_MAPPING_SHIFT;
|
||||
ln_mapping |= ln_3 << LANE3_MAPPING_SHIFT;
|
||||
ln_mapping = lane_map[0] << LANE0_MAPPING_SHIFT;
|
||||
ln_mapping |= lane_map[1] << LANE1_MAPPING_SHIFT;
|
||||
ln_mapping |= lane_map[2] << LANE2_MAPPING_SHIFT;
|
||||
ln_mapping |= lane_map[3] << LANE3_MAPPING_SHIFT;
|
||||
|
||||
msm_dp_write_link(ctrl, REG_DP_LOGICAL2PHYSICAL_LANE_MAPPING,
|
||||
ln_mapping);
|
||||
|
|
|
|||
|
|
@ -130,6 +130,14 @@ struct msm_dp_desc {
|
|||
bool wide_bus_supported;
|
||||
};
|
||||
|
||||
static const struct msm_dp_desc msm_dp_desc_glymur[] = {
|
||||
{ .io_start = 0x0af54000, .id = MSM_DP_CONTROLLER_0, .wide_bus_supported = true },
|
||||
{ .io_start = 0x0af5c000, .id = MSM_DP_CONTROLLER_1, .wide_bus_supported = true },
|
||||
{ .io_start = 0x0af64000, .id = MSM_DP_CONTROLLER_2, .wide_bus_supported = true },
|
||||
{ .io_start = 0x0af6c000, .id = MSM_DP_CONTROLLER_3, .wide_bus_supported = true },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct msm_dp_desc msm_dp_desc_sa8775p[] = {
|
||||
{ .io_start = 0x0af54000, .id = MSM_DP_CONTROLLER_0, .wide_bus_supported = true },
|
||||
{ .io_start = 0x0af5c000, .id = MSM_DP_CONTROLLER_1, .wide_bus_supported = true },
|
||||
|
|
@ -187,6 +195,7 @@ static const struct msm_dp_desc msm_dp_desc_x1e80100[] = {
|
|||
};
|
||||
|
||||
static const struct of_device_id msm_dp_dt_match[] = {
|
||||
{ .compatible = "qcom,glymur-dp", .data = &msm_dp_desc_glymur },
|
||||
{ .compatible = "qcom,sa8775p-dp", .data = &msm_dp_desc_sa8775p },
|
||||
{ .compatible = "qcom,sc7180-dp", .data = &msm_dp_desc_sc7180 },
|
||||
{ .compatible = "qcom,sc7280-dp", .data = &msm_dp_desc_sc7280 },
|
||||
|
|
|
|||
|
|
@ -6,12 +6,14 @@
|
|||
#define pr_fmt(fmt) "[drm-dp] %s: " fmt, __func__
|
||||
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_print.h>
|
||||
|
||||
#include "dp_reg.h"
|
||||
#include "dp_link.h"
|
||||
#include "dp_panel.h"
|
||||
|
||||
#define DP_LINK_RATE_HBR2 540000 /* kbytes */
|
||||
#define DP_TEST_REQUEST_MASK 0x7F
|
||||
|
||||
enum audio_sample_rate {
|
||||
|
|
@ -1210,10 +1212,121 @@ u32 msm_dp_link_get_test_bits_depth(struct msm_dp_link *msm_dp_link, u32 bpp)
|
|||
return tbd;
|
||||
}
|
||||
|
||||
static u32 msm_dp_link_link_frequencies(struct device_node *of_node)
|
||||
{
|
||||
struct device_node *endpoint;
|
||||
u64 frequency = 0;
|
||||
int cnt;
|
||||
|
||||
endpoint = of_graph_get_endpoint_by_regs(of_node, 1, 0); /* port@1 */
|
||||
if (!endpoint)
|
||||
return 0;
|
||||
|
||||
cnt = of_property_count_u64_elems(endpoint, "link-frequencies");
|
||||
|
||||
if (cnt > 0)
|
||||
of_property_read_u64_index(endpoint, "link-frequencies",
|
||||
cnt - 1, &frequency);
|
||||
of_node_put(endpoint);
|
||||
|
||||
do_div(frequency,
|
||||
10 * /* from symbol rate to link rate */
|
||||
1000); /* kbytes */
|
||||
|
||||
return frequency;
|
||||
}
|
||||
|
||||
/*
|
||||
* Always populate msm_dp_link->lane_map with 4 lanes.
|
||||
* - Use DTS "data-lanes" if present; otherwise fall back to default mapping.
|
||||
* - For partial definitions, fill remaining entries with unused lanes in
|
||||
* ascending order.
|
||||
*/
|
||||
static int msm_dp_link_lane_map(struct device *dev, struct msm_dp_link *msm_dp_link)
|
||||
{
|
||||
struct device_node *of_node = dev->of_node;
|
||||
struct device_node *endpoint;
|
||||
int cnt = msm_dp_link->max_dp_lanes;
|
||||
u32 tmp[DP_MAX_NUM_DP_LANES];
|
||||
u32 map[DP_MAX_NUM_DP_LANES] = {0, 1, 2, 3}; /* default 1:1 mapping */
|
||||
bool used[DP_MAX_NUM_DP_LANES] = {false};
|
||||
int i, j = 0, ret = -EINVAL;
|
||||
|
||||
endpoint = of_graph_get_endpoint_by_regs(of_node, 1, -1);
|
||||
if (endpoint) {
|
||||
ret = of_property_read_u32_array(endpoint, "data-lanes", tmp, cnt);
|
||||
if (ret)
|
||||
dev_dbg(dev, "endpoint data-lanes read failed (ret=%d)\n", ret);
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
ret = of_property_read_u32_array(of_node, "data-lanes", tmp, cnt);
|
||||
if (ret) {
|
||||
dev_info(dev, "data-lanes not defined, set to default\n");
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < cnt; i++) {
|
||||
if (tmp[i] >= DP_MAX_NUM_DP_LANES) {
|
||||
dev_err(dev, "data-lanes[%d]=%u out of range\n", i, tmp[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
used[tmp[i]] = true;
|
||||
map[i] = tmp[i];
|
||||
}
|
||||
|
||||
/* Fill the remaining entries with unused physical lanes (ascending) */
|
||||
for (i = cnt; i < DP_MAX_NUM_DP_LANES && j < DP_MAX_NUM_DP_LANES; j++) {
|
||||
if (!used[j])
|
||||
map[i++] = j;
|
||||
}
|
||||
|
||||
out:
|
||||
if (endpoint)
|
||||
of_node_put(endpoint);
|
||||
|
||||
dev_dbg(dev, "data-lanes count %d <%d %d %d %d>\n", cnt, map[0], map[1], map[2], map[3]);
|
||||
memcpy(msm_dp_link->lane_map, map, sizeof(map));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int msm_dp_link_parse_dt(struct device *dev, struct msm_dp_link *msm_dp_link)
|
||||
{
|
||||
struct device_node *of_node = dev->of_node;
|
||||
int cnt;
|
||||
|
||||
/*
|
||||
* data-lanes is the property of msm_dp_out endpoint
|
||||
*/
|
||||
cnt = drm_of_get_data_lanes_count_ep(of_node, 1, 0, 1, DP_MAX_NUM_DP_LANES);
|
||||
if (cnt < 0) {
|
||||
/* legacy code, data-lanes is the property of mdss_dp node */
|
||||
cnt = drm_of_get_data_lanes_count(of_node, 1, DP_MAX_NUM_DP_LANES);
|
||||
}
|
||||
|
||||
if (cnt > 0)
|
||||
msm_dp_link->max_dp_lanes = cnt;
|
||||
else
|
||||
msm_dp_link->max_dp_lanes = DP_MAX_NUM_DP_LANES; /* 4 lanes */
|
||||
|
||||
if (msm_dp_link_lane_map(dev, msm_dp_link)) {
|
||||
dev_err(dev, "failed to parse data-lanes\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
msm_dp_link->max_dp_link_rate = msm_dp_link_link_frequencies(of_node);
|
||||
if (!msm_dp_link->max_dp_link_rate)
|
||||
msm_dp_link->max_dp_link_rate = DP_LINK_RATE_HBR2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct msm_dp_link *msm_dp_link_get(struct device *dev, struct drm_dp_aux *aux)
|
||||
{
|
||||
struct msm_dp_link_private *link;
|
||||
struct msm_dp_link *msm_dp_link;
|
||||
int ret;
|
||||
|
||||
if (!dev || !aux) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
|
|
@ -1229,5 +1342,9 @@ struct msm_dp_link *msm_dp_link_get(struct device *dev, struct drm_dp_aux *aux)
|
|||
mutex_init(&link->psm_mutex);
|
||||
msm_dp_link = &link->msm_dp_link;
|
||||
|
||||
ret = msm_dp_link_parse_dt(dev, msm_dp_link);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
return msm_dp_link;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#define DS_PORT_STATUS_CHANGED 0x200
|
||||
#define DP_TEST_BIT_DEPTH_UNKNOWN 0xFFFFFFFF
|
||||
#define DP_LINK_CAP_ENHANCED_FRAMING (1 << 0)
|
||||
#define DP_MAX_NUM_DP_LANES 4
|
||||
|
||||
struct msm_dp_link_info {
|
||||
unsigned char revision;
|
||||
|
|
@ -72,6 +73,10 @@ struct msm_dp_link {
|
|||
struct msm_dp_link_test_audio test_audio;
|
||||
struct msm_dp_link_phy_params phy_params;
|
||||
struct msm_dp_link_info link_params;
|
||||
|
||||
u32 lane_map[DP_MAX_NUM_DP_LANES];
|
||||
u32 max_dp_lanes;
|
||||
u32 max_dp_link_rate;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -16,9 +16,6 @@
|
|||
|
||||
#define DP_INTF_CONFIG_DATABUS_WIDEN BIT(4)
|
||||
|
||||
#define DP_MAX_NUM_DP_LANES 4
|
||||
#define DP_LINK_RATE_HBR2 540000 /* kbytes */
|
||||
|
||||
struct msm_dp_panel_private {
|
||||
struct device *dev;
|
||||
struct drm_device *drm_dev;
|
||||
|
|
@ -91,6 +88,7 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel)
|
|||
int rc, max_lttpr_lanes, max_lttpr_rate;
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct msm_dp_link_info *link_info;
|
||||
struct msm_dp_link *link;
|
||||
u8 *dpcd, major, minor;
|
||||
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
|
|
@ -105,16 +103,20 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel)
|
|||
major = (link_info->revision >> 4) & 0x0f;
|
||||
minor = link_info->revision & 0x0f;
|
||||
|
||||
link = panel->link;
|
||||
drm_dbg_dp(panel->drm_dev, "max_lanes=%d max_link_rate=%d\n",
|
||||
link->max_dp_lanes, link->max_dp_link_rate);
|
||||
|
||||
link_info->rate = drm_dp_max_link_rate(dpcd);
|
||||
link_info->num_lanes = drm_dp_max_lane_count(dpcd);
|
||||
|
||||
/* Limit data lanes from data-lanes of endpoint property of dtsi */
|
||||
if (link_info->num_lanes > msm_dp_panel->max_dp_lanes)
|
||||
link_info->num_lanes = msm_dp_panel->max_dp_lanes;
|
||||
if (link_info->num_lanes > link->max_dp_lanes)
|
||||
link_info->num_lanes = link->max_dp_lanes;
|
||||
|
||||
/* Limit link rate from link-frequencies of endpoint property of dtsi */
|
||||
if (link_info->rate > msm_dp_panel->max_dp_link_rate)
|
||||
link_info->rate = msm_dp_panel->max_dp_link_rate;
|
||||
if (link_info->rate > link->max_dp_link_rate)
|
||||
link_info->rate = link->max_dp_link_rate;
|
||||
|
||||
/* Limit data lanes from LTTPR capabilities, if any */
|
||||
max_lttpr_lanes = drm_dp_lttpr_max_lane_count(panel->link->lttpr_common_caps);
|
||||
|
|
@ -173,9 +175,6 @@ int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel,
|
|||
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
|
||||
drm_dbg_dp(panel->drm_dev, "max_lanes=%d max_link_rate=%d\n",
|
||||
msm_dp_panel->max_dp_lanes, msm_dp_panel->max_dp_link_rate);
|
||||
|
||||
rc = msm_dp_panel_read_dpcd(msm_dp_panel);
|
||||
if (rc) {
|
||||
DRM_ERROR("read dpcd failed %d\n", rc);
|
||||
|
|
@ -648,60 +647,6 @@ int msm_dp_panel_init_panel_info(struct msm_dp_panel *msm_dp_panel)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u32 msm_dp_panel_link_frequencies(struct device_node *of_node)
|
||||
{
|
||||
struct device_node *endpoint;
|
||||
u64 frequency = 0;
|
||||
int cnt;
|
||||
|
||||
endpoint = of_graph_get_endpoint_by_regs(of_node, 1, 0); /* port@1 */
|
||||
if (!endpoint)
|
||||
return 0;
|
||||
|
||||
cnt = of_property_count_u64_elems(endpoint, "link-frequencies");
|
||||
|
||||
if (cnt > 0)
|
||||
of_property_read_u64_index(endpoint, "link-frequencies",
|
||||
cnt - 1, &frequency);
|
||||
of_node_put(endpoint);
|
||||
|
||||
do_div(frequency,
|
||||
10 * /* from symbol rate to link rate */
|
||||
1000); /* kbytes */
|
||||
|
||||
return frequency;
|
||||
}
|
||||
|
||||
static int msm_dp_panel_parse_dt(struct msm_dp_panel *msm_dp_panel)
|
||||
{
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct device_node *of_node;
|
||||
int cnt;
|
||||
|
||||
panel = container_of(msm_dp_panel, struct msm_dp_panel_private, msm_dp_panel);
|
||||
of_node = panel->dev->of_node;
|
||||
|
||||
/*
|
||||
* data-lanes is the property of msm_dp_out endpoint
|
||||
*/
|
||||
cnt = drm_of_get_data_lanes_count_ep(of_node, 1, 0, 1, DP_MAX_NUM_DP_LANES);
|
||||
if (cnt < 0) {
|
||||
/* legacy code, data-lanes is the property of mdss_dp node */
|
||||
cnt = drm_of_get_data_lanes_count(of_node, 1, DP_MAX_NUM_DP_LANES);
|
||||
}
|
||||
|
||||
if (cnt > 0)
|
||||
msm_dp_panel->max_dp_lanes = cnt;
|
||||
else
|
||||
msm_dp_panel->max_dp_lanes = DP_MAX_NUM_DP_LANES; /* 4 lanes */
|
||||
|
||||
msm_dp_panel->max_dp_link_rate = msm_dp_panel_link_frequencies(of_node);
|
||||
if (!msm_dp_panel->max_dp_link_rate)
|
||||
msm_dp_panel->max_dp_link_rate = DP_LINK_RATE_HBR2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct msm_dp_panel *msm_dp_panel_get(struct device *dev, struct drm_dp_aux *aux,
|
||||
struct msm_dp_link *link,
|
||||
void __iomem *link_base,
|
||||
|
|
@ -709,7 +654,6 @@ struct msm_dp_panel *msm_dp_panel_get(struct device *dev, struct drm_dp_aux *aux
|
|||
{
|
||||
struct msm_dp_panel_private *panel;
|
||||
struct msm_dp_panel *msm_dp_panel;
|
||||
int ret;
|
||||
|
||||
if (!dev || !aux || !link) {
|
||||
DRM_ERROR("invalid input\n");
|
||||
|
|
@ -729,10 +673,6 @@ struct msm_dp_panel *msm_dp_panel_get(struct device *dev, struct drm_dp_aux *aux
|
|||
msm_dp_panel = &panel->msm_dp_panel;
|
||||
msm_dp_panel->max_bw_code = DP_LINK_BW_8_1;
|
||||
|
||||
ret = msm_dp_panel_parse_dt(msm_dp_panel);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
return msm_dp_panel;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,9 +41,6 @@ struct msm_dp_panel {
|
|||
bool vsc_sdp_supported;
|
||||
u32 hw_revision;
|
||||
|
||||
u32 max_dp_lanes;
|
||||
u32 max_dp_link_rate;
|
||||
|
||||
u32 max_bw_code;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -701,7 +701,6 @@ int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
|
|||
struct drm_mode_create_dumb *args)
|
||||
{
|
||||
u32 fourcc;
|
||||
const struct drm_format_info *info;
|
||||
u64 pitch_align;
|
||||
int ret;
|
||||
|
||||
|
|
@ -711,12 +710,16 @@ int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
|
|||
* Use the result as pitch alignment.
|
||||
*/
|
||||
fourcc = drm_driver_color_mode_format(dev, args->bpp);
|
||||
if (fourcc == DRM_FORMAT_INVALID)
|
||||
return -EINVAL;
|
||||
info = drm_format_info(fourcc);
|
||||
if (!info)
|
||||
return -EINVAL;
|
||||
pitch_align = drm_format_info_min_pitch(info, 0, SZ_32);
|
||||
if (fourcc != DRM_FORMAT_INVALID) {
|
||||
const struct drm_format_info *info;
|
||||
|
||||
info = drm_format_info(fourcc);
|
||||
if (!info)
|
||||
return -EINVAL;
|
||||
pitch_align = drm_format_info_min_pitch(info, 0, 32);
|
||||
} else {
|
||||
pitch_align = round_up(args->width, 32) * DIV_ROUND_UP(args->bpp, SZ_8);
|
||||
}
|
||||
if (!pitch_align || pitch_align > U32_MAX)
|
||||
return -EINVAL;
|
||||
ret = drm_mode_size_dumb(dev, args, pitch_align, 0);
|
||||
|
|
|
|||
|
|
@ -462,15 +462,20 @@ struct op_arg {
|
|||
bool kept;
|
||||
};
|
||||
|
||||
static void
|
||||
static int
|
||||
vm_op_enqueue(struct op_arg *arg, struct msm_vm_op _op)
|
||||
{
|
||||
struct msm_vm_op *op = kmalloc(sizeof(*op), GFP_KERNEL);
|
||||
if (!op)
|
||||
return -ENOMEM;
|
||||
|
||||
*op = _op;
|
||||
list_add_tail(&op->node, &arg->job->vm_ops);
|
||||
|
||||
if (op->obj)
|
||||
drm_gem_object_get(op->obj);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct drm_gpuva *
|
||||
|
|
@ -489,6 +494,7 @@ msm_gem_vm_sm_step_map(struct drm_gpuva_op *op, void *_arg)
|
|||
struct drm_gpuva *vma;
|
||||
struct sg_table *sgt;
|
||||
unsigned prot;
|
||||
int ret;
|
||||
|
||||
if (arg->kept)
|
||||
return 0;
|
||||
|
|
@ -500,8 +506,6 @@ msm_gem_vm_sm_step_map(struct drm_gpuva_op *op, void *_arg)
|
|||
vm_dbg("%p:%p:%p: %016llx %016llx", vma->vm, vma, vma->gem.obj,
|
||||
vma->va.addr, vma->va.range);
|
||||
|
||||
vma->flags = ((struct op_arg *)arg)->flags;
|
||||
|
||||
if (obj) {
|
||||
sgt = to_msm_bo(obj)->sgt;
|
||||
prot = msm_gem_prot(obj);
|
||||
|
|
@ -510,7 +514,7 @@ msm_gem_vm_sm_step_map(struct drm_gpuva_op *op, void *_arg)
|
|||
prot = IOMMU_READ | IOMMU_WRITE;
|
||||
}
|
||||
|
||||
vm_op_enqueue(arg, (struct msm_vm_op){
|
||||
ret = vm_op_enqueue(arg, (struct msm_vm_op){
|
||||
.op = MSM_VM_OP_MAP,
|
||||
.map = {
|
||||
.sgt = sgt,
|
||||
|
|
@ -523,6 +527,10 @@ msm_gem_vm_sm_step_map(struct drm_gpuva_op *op, void *_arg)
|
|||
.obj = vma->gem.obj,
|
||||
});
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
vma->flags = ((struct op_arg *)arg)->flags;
|
||||
to_msm_vma(vma)->mapped = true;
|
||||
|
||||
return 0;
|
||||
|
|
@ -538,6 +546,7 @@ msm_gem_vm_sm_step_remap(struct drm_gpuva_op *op, void *arg)
|
|||
struct drm_gpuvm_bo *vm_bo = orig_vma->vm_bo;
|
||||
bool mapped = to_msm_vma(orig_vma)->mapped;
|
||||
unsigned flags;
|
||||
int ret;
|
||||
|
||||
vm_dbg("orig_vma: %p:%p:%p: %016llx %016llx", vm, orig_vma,
|
||||
orig_vma->gem.obj, orig_vma->va.addr, orig_vma->va.range);
|
||||
|
|
@ -547,7 +556,7 @@ msm_gem_vm_sm_step_remap(struct drm_gpuva_op *op, void *arg)
|
|||
|
||||
drm_gpuva_op_remap_to_unmap_range(&op->remap, &unmap_start, &unmap_range);
|
||||
|
||||
vm_op_enqueue(arg, (struct msm_vm_op){
|
||||
ret = vm_op_enqueue(arg, (struct msm_vm_op){
|
||||
.op = MSM_VM_OP_UNMAP,
|
||||
.unmap = {
|
||||
.iova = unmap_start,
|
||||
|
|
@ -557,6 +566,9 @@ msm_gem_vm_sm_step_remap(struct drm_gpuva_op *op, void *arg)
|
|||
.obj = orig_vma->gem.obj,
|
||||
});
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Part of this GEM obj is still mapped, but we're going to kill the
|
||||
* existing VMA and replace it with one or two new ones (ie. two if
|
||||
|
|
@ -618,6 +630,7 @@ msm_gem_vm_sm_step_unmap(struct drm_gpuva_op *op, void *_arg)
|
|||
struct msm_vm_bind_job *job = arg->job;
|
||||
struct drm_gpuva *vma = op->unmap.va;
|
||||
struct msm_gem_vma *msm_vma = to_msm_vma(vma);
|
||||
int ret;
|
||||
|
||||
vm_dbg("%p:%p:%p: %016llx %016llx", vma->vm, vma, vma->gem.obj,
|
||||
vma->va.addr, vma->va.range);
|
||||
|
|
@ -650,7 +663,7 @@ msm_gem_vm_sm_step_unmap(struct drm_gpuva_op *op, void *_arg)
|
|||
if (!msm_vma->mapped)
|
||||
goto out_close;
|
||||
|
||||
vm_op_enqueue(arg, (struct msm_vm_op){
|
||||
ret = vm_op_enqueue(arg, (struct msm_vm_op){
|
||||
.op = MSM_VM_OP_UNMAP,
|
||||
.unmap = {
|
||||
.iova = vma->va.addr,
|
||||
|
|
@ -660,6 +673,9 @@ msm_gem_vm_sm_step_unmap(struct drm_gpuva_op *op, void *_arg)
|
|||
.obj = vma->gem.obj,
|
||||
});
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
msm_vma->mapped = false;
|
||||
|
||||
out_close:
|
||||
|
|
|
|||
|
|
@ -287,16 +287,17 @@ static void crashstate_get_bos(struct msm_gpu_state *state, struct msm_gem_submi
|
|||
|
||||
state->bos = kcalloc(cnt, sizeof(struct msm_gpu_state_bo), GFP_KERNEL);
|
||||
|
||||
drm_gpuvm_for_each_va (vma, submit->vm) {
|
||||
bool dump = rd_full || (vma->flags & MSM_VMA_DUMP);
|
||||
if (state->bos)
|
||||
drm_gpuvm_for_each_va(vma, submit->vm) {
|
||||
bool dump = rd_full || (vma->flags & MSM_VMA_DUMP);
|
||||
|
||||
/* Skip MAP_NULL/PRR VMAs: */
|
||||
if (!vma->gem.obj)
|
||||
continue;
|
||||
/* Skip MAP_NULL/PRR VMAs: */
|
||||
if (!vma->gem.obj)
|
||||
continue;
|
||||
|
||||
msm_gpu_crashstate_get_bo(state, vma->gem.obj, vma->va.addr,
|
||||
dump, vma->gem.offset, vma->va.range);
|
||||
}
|
||||
msm_gpu_crashstate_get_bo(state, vma->gem.obj, vma->va.addr,
|
||||
dump, vma->gem.offset, vma->va.range);
|
||||
}
|
||||
|
||||
drm_exec_fini(&exec);
|
||||
} else {
|
||||
|
|
@ -348,6 +349,10 @@ static void crashstate_get_vm_logs(struct msm_gpu_state *state, struct msm_gem_v
|
|||
|
||||
state->vm_logs = kmalloc_array(
|
||||
state->nr_vm_logs, sizeof(vm->log[0]), GFP_KERNEL);
|
||||
if (!state->vm_logs) {
|
||||
state->nr_vm_logs = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < state->nr_vm_logs; i++) {
|
||||
int idx = (i + first) & vm_log_mask;
|
||||
|
||||
|
|
|
|||
|
|
@ -553,8 +553,10 @@ static const struct msm_mdss_data data_153k6 = {
|
|||
|
||||
static const struct of_device_id mdss_dt_match[] = {
|
||||
{ .compatible = "qcom,mdss", .data = &data_153k6 },
|
||||
{ .compatible = "qcom,glymur-mdss", .data = &data_57k },
|
||||
{ .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
|
||||
{ .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
|
||||
{ .compatible = "qcom,qcs8300-mdss", .data = &data_74k },
|
||||
{ .compatible = "qcom,sa8775p-mdss", .data = &data_74k },
|
||||
{ .compatible = "qcom,sar2130p-mdss", .data = &data_74k },
|
||||
{ .compatible = "qcom,sdm670-mdss", .data = &data_76k8 },
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -303,7 +303,7 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
</enum>
|
||||
|
||||
<!--
|
||||
Used in a6xx_a2d_bit_cntl.. the value mostly seems to correlate to the
|
||||
Used in a6xx_a2d_blt_cntl.. the value mostly seems to correlate to the
|
||||
component type/size, so I think it relates to internal format used for
|
||||
blending? The one exception is that 16b unorm and 32b float use the
|
||||
same value... maybe 16b unorm is uncommon enough that it was just easier
|
||||
|
|
|
|||
|
|
@ -40,56 +40,62 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<bitfield name="IRQ_MASK_BIT" pos="0" />
|
||||
</bitset>
|
||||
|
||||
<reg32 offset="0x80" name="GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL"/>
|
||||
<reg32 offset="0x81" name="GMU_GX_SPTPRAC_POWER_CONTROL"/>
|
||||
<reg32 offset="0xc00" name="GMU_CM3_ITCM_START"/>
|
||||
<reg32 offset="0x1c00" name="GMU_CM3_DTCM_START"/>
|
||||
<reg32 offset="0x23f0" name="GMU_NMI_CONTROL_STATUS"/>
|
||||
<reg32 offset="0x23f8" name="GMU_BOOT_SLUMBER_OPTION"/>
|
||||
<reg32 offset="0x23f9" name="GMU_GX_VOTE_IDX"/>
|
||||
<reg32 offset="0x23fa" name="GMU_MX_VOTE_IDX"/>
|
||||
<reg32 offset="0x23fc" name="GMU_DCVS_ACK_OPTION"/>
|
||||
<reg32 offset="0x23fd" name="GMU_DCVS_PERF_SETTING"/>
|
||||
<reg32 offset="0x23fe" name="GMU_DCVS_BW_SETTING"/>
|
||||
<reg32 offset="0x23ff" name="GMU_DCVS_RETURN"/>
|
||||
<reg32 offset="0x2bf8" name="GMU_CORE_FW_VERSION">
|
||||
<reg32 offset="0x1a880" name="GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL"/>
|
||||
<reg32 offset="0x1a881" name="GMU_GX_SPTPRAC_POWER_CONTROL"/>
|
||||
<reg32 offset="0x1b400" name="GMU_CM3_ITCM_START"/>
|
||||
<reg32 offset="0x1c400" name="GMU_CM3_DTCM_START"/>
|
||||
<reg32 offset="0x1cbf0" name="GMU_NMI_CONTROL_STATUS"/>
|
||||
<reg32 offset="0x1cbf8" name="GMU_BOOT_SLUMBER_OPTION"/>
|
||||
<reg32 offset="0x1cbf9" name="GMU_GX_VOTE_IDX"/>
|
||||
<reg32 offset="0x1cbfa" name="GMU_MX_VOTE_IDX"/>
|
||||
<reg32 offset="0x1cbfc" name="GMU_DCVS_ACK_OPTION"/>
|
||||
<reg32 offset="0x1cbfd" name="GMU_DCVS_PERF_SETTING"/>
|
||||
<reg32 offset="0x1cbfe" name="GMU_DCVS_BW_SETTING"/>
|
||||
<reg32 offset="0x1cbff" name="GMU_DCVS_RETURN"/>
|
||||
<reg32 offset="0x1d3f8" name="GMU_CORE_FW_VERSION">
|
||||
<bitfield name="MAJOR" low="28" high="31"/>
|
||||
<bitfield name="MINOR" low="16" high="27"/>
|
||||
<bitfield name="STEP" low="0" high="15"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x4c00" name="GMU_ICACHE_CONFIG"/>
|
||||
<reg32 offset="0x4c01" name="GMU_DCACHE_CONFIG"/>
|
||||
<reg32 offset="0x4c0f" name="GMU_SYS_BUS_CONFIG"/>
|
||||
<reg32 offset="0x5000" name="GMU_CM3_SYSRESET"/>
|
||||
<reg32 offset="0x5001" name="GMU_CM3_BOOT_CONFIG"/>
|
||||
<reg32 offset="0x501a" name="GMU_CM3_FW_BUSY"/>
|
||||
<reg32 offset="0x501c" name="GMU_CM3_FW_INIT_RESULT"/>
|
||||
<reg32 offset="0x502d" name="GMU_CM3_CFG"/>
|
||||
<reg32 offset="0x5040" name="GMU_CX_GMU_POWER_COUNTER_ENABLE"/>
|
||||
<reg32 offset="0x5041" name="GMU_CX_GMU_POWER_COUNTER_SELECT_0"/>
|
||||
<reg32 offset="0x5042" name="GMU_CX_GMU_POWER_COUNTER_SELECT_1"/>
|
||||
<reg32 offset="0x5044" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L"/>
|
||||
<reg32 offset="0x5045" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H"/>
|
||||
<reg32 offset="0x5046" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_1_L"/>
|
||||
<reg32 offset="0x5047" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_1_H"/>
|
||||
<reg32 offset="0x5048" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_2_L"/>
|
||||
<reg32 offset="0x5049" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_2_H"/>
|
||||
<reg32 offset="0x504a" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_3_L"/>
|
||||
<reg32 offset="0x504b" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_3_H"/>
|
||||
<reg32 offset="0x504c" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L"/>
|
||||
<reg32 offset="0x504d" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_4_H"/>
|
||||
<reg32 offset="0x504e" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_5_L"/>
|
||||
<reg32 offset="0x504f" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_5_H"/>
|
||||
<reg32 offset="0x50c0" name="GMU_PWR_COL_INTER_FRAME_CTRL">
|
||||
<reg32 offset="0x1f400" name="GMU_ICACHE_CONFIG"/>
|
||||
<reg32 offset="0x1f401" name="GMU_DCACHE_CONFIG"/>
|
||||
<reg32 offset="0x1f40f" name="GMU_SYS_BUS_CONFIG"/>
|
||||
<reg32 offset="0x1f50b" name="GMU_MRC_GBIF_QOS_CTRL"/>
|
||||
<reg32 offset="0x1f800" name="GMU_CM3_SYSRESET"/>
|
||||
<reg32 offset="0x1f801" name="GMU_CM3_BOOT_CONFIG"/>
|
||||
<reg32 offset="0x1f81a" name="GMU_CM3_FW_BUSY"/>
|
||||
<reg32 offset="0x1f81c" name="GMU_CM3_FW_INIT_RESULT"/>
|
||||
<reg32 offset="0x1f82d" name="GMU_CM3_CFG"/>
|
||||
<reg32 offset="0x1f840" name="GMU_CX_GMU_POWER_COUNTER_ENABLE"/>
|
||||
<reg32 offset="0x1fc10" name="GMU_CX_GMU_POWER_COUNTER_ENABLE" variants="A8XX"/>
|
||||
<reg32 offset="0x1f841" name="GMU_CX_GMU_POWER_COUNTER_SELECT_0"/>
|
||||
<reg32 offset="0x1f842" name="GMU_CX_GMU_POWER_COUNTER_SELECT_1"/>
|
||||
<reg32 offset="0x1fc40" name="GMU_CX_GMU_POWER_COUNTER_SELECT_XOCLK_0" variants="A8XX-"/>
|
||||
<reg32 offset="0x1fc41" name="GMU_CX_GMU_POWER_COUNTER_SELECT_XOCLK_1" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f844" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L"/>
|
||||
<reg32 offset="0x1fca0" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f845" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H"/>
|
||||
<reg32 offset="0x1fca1" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f846" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_1_L"/>
|
||||
<reg32 offset="0x1f847" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_1_H"/>
|
||||
<reg32 offset="0x1f848" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_2_L"/>
|
||||
<reg32 offset="0x1f849" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_2_H"/>
|
||||
<reg32 offset="0x1f84a" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_3_L"/>
|
||||
<reg32 offset="0x1f84b" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_3_H"/>
|
||||
<reg32 offset="0x1f84c" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L"/>
|
||||
<reg32 offset="0x1f84d" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_4_H"/>
|
||||
<reg32 offset="0x1f84e" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_5_L"/>
|
||||
<reg32 offset="0x1f84f" name="GMU_CX_GMU_POWER_COUNTER_XOCLK_5_H"/>
|
||||
<reg32 offset="0x1f8c0" name="GMU_PWR_COL_INTER_FRAME_CTRL">
|
||||
<bitfield name="IFPC_ENABLE" pos="0" type="boolean"/>
|
||||
<bitfield name="HM_POWER_COLLAPSE_ENABLE" pos="1" type="boolean"/>
|
||||
<bitfield name="SPTPRAC_POWER_CONTROL_ENABLE" pos="2" type="boolean"/>
|
||||
<bitfield name="NUM_PASS_SKIPS" low="10" high="13"/>
|
||||
<bitfield name="MIN_PASS_LENGTH" low="14" high="31"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x50c1" name="GMU_PWR_COL_INTER_FRAME_HYST"/>
|
||||
<reg32 offset="0x50c2" name="GMU_PWR_COL_SPTPRAC_HYST"/>
|
||||
<reg32 offset="0x50d0" name="GMU_SPTPRAC_PWR_CLK_STATUS">
|
||||
<reg32 offset="0x1f8c1" name="GMU_PWR_COL_INTER_FRAME_HYST"/>
|
||||
<reg32 offset="0x1f8c2" name="GMU_PWR_COL_SPTPRAC_HYST"/>
|
||||
<reg32 offset="0x1f8d0" name="GMU_SPTPRAC_PWR_CLK_STATUS" variants="A6XX">
|
||||
<bitfield name="SPTPRAC_GDSC_POWERING_OFF" pos="0" type="boolean"/>
|
||||
<bitfield name="SPTPRAC_GDSC_POWERING_ON" pos="1" type="boolean"/>
|
||||
<bitfield name="SPTPRAC_GDSC_POWER_OFF" pos="2" type="boolean"/>
|
||||
|
|
@ -99,15 +105,19 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<bitfield name="GX_HM_GDSC_POWER_OFF" pos="6" type="boolean"/>
|
||||
<bitfield name="GX_HM_CLK_OFF" pos="7" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x50d0" name="GMU_SPTPRAC_PWR_CLK_STATUS" variants="A7XX">
|
||||
<reg32 offset="0x1f8d0" name="GMU_SPTPRAC_PWR_CLK_STATUS" variants="A7XX">
|
||||
<bitfield name="GX_HM_GDSC_POWER_OFF" pos="0" type="boolean"/>
|
||||
<bitfield name="GX_HM_CLK_OFF" pos="1" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x50e4" name="GMU_GPU_NAP_CTRL">
|
||||
<reg32 offset="0x1f7e8" name="GMU_PWR_CLK_STATUS" variants="A8XX-">
|
||||
<bitfield name="GX_HM_GDSC_POWER_OFF" pos="0" type="boolean"/>
|
||||
<bitfield name="GX_HM_CLK_OFF" pos="1" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x1f8e4" name="GMU_GPU_NAP_CTRL">
|
||||
<bitfield name="HW_NAP_ENABLE" pos="0"/>
|
||||
<bitfield name="SID" low="4" high="8"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x50e8" name="GMU_RPMH_CTRL">
|
||||
<reg32 offset="0x1f8e8" name="GMU_RPMH_CTRL">
|
||||
<bitfield name="RPMH_INTERFACE_ENABLE" pos="0" type="boolean"/>
|
||||
<bitfield name="LLC_VOTE_ENABLE" pos="4" type="boolean"/>
|
||||
<bitfield name="DDR_VOTE_ENABLE" pos="8" type="boolean"/>
|
||||
|
|
@ -119,71 +129,84 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<bitfield name="CX_MIN_VOTE_ENABLE" pos="14" type="boolean"/>
|
||||
<bitfield name="GFX_MIN_VOTE_ENABLE" pos="15" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x50e9" name="GMU_RPMH_HYST_CTRL"/>
|
||||
<reg32 offset="0x50ec" name="GPU_GMU_CX_GMU_RPMH_POWER_STATE"/>
|
||||
<reg32 offset="0x50f0" name="GPU_GMU_CX_GMU_CX_FAL_INTF"/>
|
||||
<reg32 offset="0x50f1" name="GPU_GMU_CX_GMU_CX_FALNEXT_INTF"/>
|
||||
<reg32 offset="0x5100" name="GPU_GMU_CX_GMU_PWR_COL_CP_MSG"/>
|
||||
<reg32 offset="0x5101" name="GPU_GMU_CX_GMU_PWR_COL_CP_RESP"/>
|
||||
<reg32 offset="0x51f0" name="GMU_BOOT_KMD_LM_HANDSHAKE"/>
|
||||
<reg32 offset="0x5157" name="GMU_LLM_GLM_SLEEP_CTRL"/>
|
||||
<reg32 offset="0x5158" name="GMU_LLM_GLM_SLEEP_STATUS"/>
|
||||
<reg32 offset="0x5088" name="GMU_ALWAYS_ON_COUNTER_L"/>
|
||||
<reg32 offset="0x5089" name="GMU_ALWAYS_ON_COUNTER_H"/>
|
||||
<reg32 offset="0x50c3" name="GMU_GMU_PWR_COL_KEEPALIVE"/>
|
||||
<reg32 offset="0x50c4" name="GMU_PWR_COL_PREEMPT_KEEPALIVE"/>
|
||||
<reg32 offset="0x5180" name="GMU_HFI_CTRL_STATUS"/>
|
||||
<reg32 offset="0x5181" name="GMU_HFI_VERSION_INFO"/>
|
||||
<reg32 offset="0x5182" name="GMU_HFI_SFR_ADDR"/>
|
||||
<reg32 offset="0x5183" name="GMU_HFI_MMAP_ADDR"/>
|
||||
<reg32 offset="0x5184" name="GMU_HFI_QTBL_INFO"/>
|
||||
<reg32 offset="0x5185" name="GMU_HFI_QTBL_ADDR"/>
|
||||
<reg32 offset="0x5186" name="GMU_HFI_CTRL_INIT"/>
|
||||
<reg32 offset="0x5190" name="GMU_GMU2HOST_INTR_SET"/>
|
||||
<reg32 offset="0x5191" name="GMU_GMU2HOST_INTR_CLR"/>
|
||||
<reg32 offset="0x5192" name="GMU_GMU2HOST_INTR_INFO">
|
||||
<reg32 offset="0x1f8e9" name="GMU_RPMH_HYST_CTRL"/>
|
||||
<reg32 offset="0x1f8ec" name="GPU_GMU_CX_GMU_RPMH_POWER_STATE" variants="A6XX"/>
|
||||
<reg32 offset="0x1f7e9" name="GPU_GMU_CX_GMU_RPMH_POWER_STATE" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f8f0" name="GPU_GMU_CX_GMU_CX_FAL_INTF" variants="A6XX"/>
|
||||
<reg32 offset="0x1f7ec" name="GPU_GMU_CX_GMU_CX_FAL_INTF" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f8f1" name="GPU_GMU_CX_GMU_CX_FALNEXT_INTF" variants="A6XX"/>
|
||||
<reg32 offset="0x1f7ed" name="GPU_GMU_CX_GMU_CX_FALNEXT_INTF" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f900" name="GPU_GMU_CX_GMU_PWR_COL_CP_MSG"/>
|
||||
<reg32 offset="0x1f901" name="GPU_GMU_CX_GMU_PWR_COL_CP_RESP"/>
|
||||
<reg32 offset="0x1f9f0" name="GMU_BOOT_KMD_LM_HANDSHAKE"/>
|
||||
<reg32 offset="0x1f957" name="GMU_LLM_GLM_SLEEP_CTRL"/>
|
||||
<reg32 offset="0x1f958" name="GMU_LLM_GLM_SLEEP_STATUS"/>
|
||||
<reg32 offset="0x1f888" name="GMU_ALWAYS_ON_COUNTER_L"/>
|
||||
<reg32 offset="0x1f889" name="GMU_ALWAYS_ON_COUNTER_H"/>
|
||||
<reg32 offset="0x1f8c3" name="GMU_GMU_PWR_COL_KEEPALIVE" variants="A6XX-A7XX"/>
|
||||
<reg32 offset="0x1f7e4" name="GMU_GMU_PWR_COL_KEEPALIVE" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f8c4" name="GMU_PWR_COL_PREEMPT_KEEPALIVE" variants="A6XX-A7XX"/>
|
||||
<reg32 offset="0x1f7e5" name="GMU_PWR_COL_PREEMPT_KEEPALIVE" variants="A8XX-"/>
|
||||
<reg32 offset="0x1f980" name="GMU_HFI_CTRL_STATUS"/>
|
||||
<reg32 offset="0x1f981" name="GMU_HFI_VERSION_INFO"/>
|
||||
<reg32 offset="0x1f982" name="GMU_HFI_SFR_ADDR"/>
|
||||
<reg32 offset="0x1f983" name="GMU_HFI_MMAP_ADDR"/>
|
||||
<reg32 offset="0x1f984" name="GMU_HFI_QTBL_INFO"/>
|
||||
<reg32 offset="0x1f985" name="GMU_HFI_QTBL_ADDR"/>
|
||||
<reg32 offset="0x1f986" name="GMU_HFI_CTRL_INIT"/>
|
||||
<reg32 offset="0x1f990" name="GMU_GMU2HOST_INTR_SET"/>
|
||||
<reg32 offset="0x1f991" name="GMU_GMU2HOST_INTR_CLR"/>
|
||||
<reg32 offset="0x1f992" name="GMU_GMU2HOST_INTR_INFO">
|
||||
<bitfield name="MSGQ" pos="0" type="boolean"/>
|
||||
<bitfield name="CM3_FAULT" pos="23" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x5193" name="GMU_GMU2HOST_INTR_MASK"/>
|
||||
<reg32 offset="0x5194" name="GMU_HOST2GMU_INTR_SET"/>
|
||||
<reg32 offset="0x5195" name="GMU_HOST2GMU_INTR_CLR"/>
|
||||
<reg32 offset="0x5196" name="GMU_HOST2GMU_INTR_RAW_INFO"/>
|
||||
<reg32 offset="0x5197" name="GMU_HOST2GMU_INTR_EN_0"/>
|
||||
<reg32 offset="0x5198" name="GMU_HOST2GMU_INTR_EN_1"/>
|
||||
<reg32 offset="0x5199" name="GMU_HOST2GMU_INTR_EN_2"/>
|
||||
<reg32 offset="0x519a" name="GMU_HOST2GMU_INTR_EN_3"/>
|
||||
<reg32 offset="0x519b" name="GMU_HOST2GMU_INTR_INFO_0"/>
|
||||
<reg32 offset="0x519c" name="GMU_HOST2GMU_INTR_INFO_1"/>
|
||||
<reg32 offset="0x519d" name="GMU_HOST2GMU_INTR_INFO_2"/>
|
||||
<reg32 offset="0x519e" name="GMU_HOST2GMU_INTR_INFO_3"/>
|
||||
<reg32 offset="0x51c5" name="GMU_GENERAL_0"/>
|
||||
<reg32 offset="0x51c6" name="GMU_GENERAL_1"/>
|
||||
<reg32 offset="0x51cb" name="GMU_GENERAL_6"/>
|
||||
<reg32 offset="0x51cc" name="GMU_GENERAL_7"/>
|
||||
<reg32 offset="0x51cd" name="GMU_GENERAL_8" variants="A7XX"/>
|
||||
<reg32 offset="0x51ce" name="GMU_GENERAL_9" variants="A7XX"/>
|
||||
<reg32 offset="0x51cf" name="GMU_GENERAL_10" variants="A7XX"/>
|
||||
<reg32 offset="0x515d" name="GMU_ISENSE_CTRL"/>
|
||||
<reg32 offset="0x8920" name="GPU_CS_ENABLE_REG"/>
|
||||
<reg32 offset="0x515d" name="GPU_GMU_CX_GMU_ISENSE_CTRL"/>
|
||||
<reg32 offset="0x8578" name="GPU_CS_AMP_CALIBRATION_CONTROL3"/>
|
||||
<reg32 offset="0x8558" name="GPU_CS_AMP_CALIBRATION_CONTROL2"/>
|
||||
<reg32 offset="0x8580" name="GPU_CS_A_SENSOR_CTRL_0"/>
|
||||
<reg32 offset="0x27ada" name="GPU_CS_A_SENSOR_CTRL_2"/>
|
||||
<reg32 offset="0x881a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
|
||||
<reg32 offset="0x8957" name="GPU_CS_AMP_CALIBRATION_CONTROL1"/>
|
||||
<reg32 offset="0x881a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
|
||||
<reg32 offset="0x881d" name="GPU_CS_AMP_CALIBRATION_STATUS1_0"/>
|
||||
<reg32 offset="0x881f" name="GPU_CS_AMP_CALIBRATION_STATUS1_2"/>
|
||||
<reg32 offset="0x8821" name="GPU_CS_AMP_CALIBRATION_STATUS1_4"/>
|
||||
<reg32 offset="0x8965" name="GPU_CS_AMP_CALIBRATION_DONE"/>
|
||||
<reg32 offset="0x896d" name="GPU_CS_AMP_PERIOD_CTRL"/>
|
||||
<reg32 offset="0x8965" name="GPU_CS_AMP_CALIBRATION_DONE"/>
|
||||
<reg32 offset="0x514d" name="GPU_GMU_CX_GMU_PWR_THRESHOLD"/>
|
||||
<reg32 offset="0x9303" name="GMU_AO_INTERRUPT_EN"/>
|
||||
<reg32 offset="0x9304" name="GMU_AO_HOST_INTERRUPT_CLR"/>
|
||||
<reg32 offset="0x9305" name="GMU_AO_HOST_INTERRUPT_STATUS">
|
||||
<reg32 offset="0x1f993" name="GMU_GMU2HOST_INTR_MASK"/>
|
||||
<reg32 offset="0x1f994" name="GMU_HOST2GMU_INTR_SET"/>
|
||||
<reg32 offset="0x1f995" name="GMU_HOST2GMU_INTR_CLR"/>
|
||||
<reg32 offset="0x1f996" name="GMU_HOST2GMU_INTR_RAW_INFO"/>
|
||||
<reg32 offset="0x1f997" name="GMU_HOST2GMU_INTR_EN_0"/>
|
||||
<reg32 offset="0x1f998" name="GMU_HOST2GMU_INTR_EN_1"/>
|
||||
<reg32 offset="0x1f999" name="GMU_HOST2GMU_INTR_EN_2"/>
|
||||
<reg32 offset="0x1f99a" name="GMU_HOST2GMU_INTR_EN_3"/>
|
||||
<reg32 offset="0x1f99b" name="GMU_HOST2GMU_INTR_INFO_0"/>
|
||||
<reg32 offset="0x1f99c" name="GMU_HOST2GMU_INTR_INFO_1"/>
|
||||
<reg32 offset="0x1f99d" name="GMU_HOST2GMU_INTR_INFO_2"/>
|
||||
<reg32 offset="0x1f99e" name="GMU_HOST2GMU_INTR_INFO_3"/>
|
||||
<reg32 offset="0x1f9c5" name="GMU_GENERAL_0"/>
|
||||
<reg32 offset="0x1f9c6" name="GMU_GENERAL_1"/>
|
||||
<reg32 offset="0x1f9cb" name="GMU_GENERAL_6"/>
|
||||
<reg32 offset="0x1f9cc" name="GMU_GENERAL_7"/>
|
||||
<reg32 offset="0x1f9cd" name="GMU_GENERAL_8" variants="A7XX"/>
|
||||
<reg32 offset="0x1f9ce" name="GMU_GENERAL_9" variants="A7XX"/>
|
||||
<reg32 offset="0x1f9cf" name="GMU_GENERAL_10" variants="A7XX"/>
|
||||
<reg32 offset="0x1f9c0" name="GMU_GENERAL_0" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9c1" name="GMU_GENERAL_1" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9c6" name="GMU_GENERAL_6" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9c7" name="GMU_GENERAL_7" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9c8" name="GMU_GENERAL_8" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9c9" name="GMU_GENERAL_9" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9ca" name="GMU_GENERAL_10" variants="A8XX"/>
|
||||
<reg32 offset="0x1f9cb" name="GMU_GENERAL_11" variants="A8XX"/>
|
||||
<reg32 offset="0x1f95d" name="GMU_ISENSE_CTRL"/>
|
||||
<reg32 offset="0x23120" name="GPU_CS_ENABLE_REG"/>
|
||||
<reg32 offset="0x1f95d" name="GPU_GMU_CX_GMU_ISENSE_CTRL"/>
|
||||
<reg32 offset="0x22d78" name="GPU_CS_AMP_CALIBRATION_CONTROL3"/>
|
||||
<reg32 offset="0x22d58" name="GPU_CS_AMP_CALIBRATION_CONTROL2"/>
|
||||
<reg32 offset="0x22d80" name="GPU_CS_A_SENSOR_CTRL_0"/>
|
||||
<reg32 offset="0x422da" name="GPU_CS_A_SENSOR_CTRL_2"/>
|
||||
<reg32 offset="0x2301a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
|
||||
<reg32 offset="0x23157" name="GPU_CS_AMP_CALIBRATION_CONTROL1"/>
|
||||
<reg32 offset="0x2301a" name="GPU_CS_SENSOR_GENERAL_STATUS"/>
|
||||
<reg32 offset="0x2301d" name="GPU_CS_AMP_CALIBRATION_STATUS1_0"/>
|
||||
<reg32 offset="0x2301f" name="GPU_CS_AMP_CALIBRATION_STATUS1_2"/>
|
||||
<reg32 offset="0x23021" name="GPU_CS_AMP_CALIBRATION_STATUS1_4"/>
|
||||
<reg32 offset="0x23165" name="GPU_CS_AMP_CALIBRATION_DONE"/>
|
||||
<reg32 offset="0x2316d" name="GPU_CS_AMP_PERIOD_CTRL"/>
|
||||
<reg32 offset="0x23165" name="GPU_CS_AMP_CALIBRATION_DONE"/>
|
||||
<reg32 offset="0x1f94d" name="GPU_GMU_CX_GMU_PWR_THRESHOLD"/>
|
||||
<reg32 offset="0x23b03" name="GMU_AO_INTERRUPT_EN"/>
|
||||
<reg32 offset="0x23b04" name="GMU_AO_HOST_INTERRUPT_CLR"/>
|
||||
<reg32 offset="0x23b05" name="GMU_AO_HOST_INTERRUPT_STATUS">
|
||||
<bitfield name="WDOG_BITE" pos="0" type="boolean"/>
|
||||
<bitfield name="RSCC_COMP" pos="1" type="boolean"/>
|
||||
<bitfield name="VDROOP" pos="2" type="boolean"/>
|
||||
|
|
@ -191,27 +214,27 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<bitfield name="DBD_WAKEUP" pos="4" type="boolean"/>
|
||||
<bitfield name="HOST_AHB_BUS_ERROR" pos="5" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x9306" name="GMU_AO_HOST_INTERRUPT_MASK"/>
|
||||
<reg32 offset="0x9309" name="GPU_GMU_AO_GMU_CGC_MODE_CNTL"/>
|
||||
<reg32 offset="0x930a" name="GPU_GMU_AO_GMU_CGC_DELAY_CNTL"/>
|
||||
<reg32 offset="0x930b" name="GPU_GMU_AO_GMU_CGC_HYST_CNTL"/>
|
||||
<reg32 offset="0x930c" name="GPU_GMU_AO_GPU_CX_BUSY_STATUS">
|
||||
<reg32 offset="0x23b06" name="GMU_AO_HOST_INTERRUPT_MASK"/>
|
||||
<reg32 offset="0x23b09" name="GPU_GMU_AO_GMU_CGC_MODE_CNTL"/>
|
||||
<reg32 offset="0x23b0a" name="GPU_GMU_AO_GMU_CGC_DELAY_CNTL"/>
|
||||
<reg32 offset="0x23b0b" name="GPU_GMU_AO_GMU_CGC_HYST_CNTL"/>
|
||||
<reg32 offset="0x23b0c" name="GPU_GMU_AO_GPU_CX_BUSY_STATUS">
|
||||
<bitfield name = "GPUBUSYIGNAHB" pos="23" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="0x930d" name="GPU_GMU_AO_GPU_CX_BUSY_STATUS2"/>
|
||||
<reg32 offset="0x930e" name="GPU_GMU_AO_GPU_CX_BUSY_MASK"/>
|
||||
<reg32 offset="0x9310" name="GMU_AO_AHB_FENCE_CTRL"/>
|
||||
<reg32 offset="0x9313" name="GMU_AHB_FENCE_STATUS"/>
|
||||
<reg32 offset="0x9314" name="GMU_AHB_FENCE_STATUS_CLR"/>
|
||||
<reg32 offset="0x9315" name="GMU_RBBM_INT_UNMASKED_STATUS"/>
|
||||
<reg32 offset="0x9316" name="GMU_AO_SPARE_CNTL"/>
|
||||
<reg32 offset="0x9307" name="GMU_RSCC_CONTROL_REQ"/>
|
||||
<reg32 offset="0x9308" name="GMU_RSCC_CONTROL_ACK"/>
|
||||
<reg32 offset="0x9311" name="GMU_AHB_FENCE_RANGE_0"/>
|
||||
<reg32 offset="0x9312" name="GMU_AHB_FENCE_RANGE_1"/>
|
||||
<reg32 offset="0x9c03" name="GPU_CC_GX_GDSCR"/>
|
||||
<reg32 offset="0x9d42" name="GPU_CC_GX_DOMAIN_MISC"/>
|
||||
<reg32 offset="0xc001" name="GPU_CPR_FSM_CTL"/>
|
||||
<reg32 offset="0x23b0d" name="GPU_GMU_AO_GPU_CX_BUSY_STATUS2"/>
|
||||
<reg32 offset="0x23b0e" name="GPU_GMU_AO_GPU_CX_BUSY_MASK"/>
|
||||
<reg32 offset="0x23b10" name="GMU_AO_AHB_FENCE_CTRL"/>
|
||||
<reg32 offset="0x23b13" name="GMU_AHB_FENCE_STATUS"/>
|
||||
<reg32 offset="0x23b14" name="GMU_AHB_FENCE_STATUS_CLR"/>
|
||||
<reg32 offset="0x23b15" name="GMU_RBBM_INT_UNMASKED_STATUS"/>
|
||||
<reg32 offset="0x23b16" name="GMU_AO_SPARE_CNTL"/>
|
||||
<reg32 offset="0x23b07" name="GMU_RSCC_CONTROL_REQ"/>
|
||||
<reg32 offset="0x23b08" name="GMU_RSCC_CONTROL_ACK"/>
|
||||
<reg32 offset="0x23b11" name="GMU_AHB_FENCE_RANGE_0"/>
|
||||
<reg32 offset="0x23b12" name="GMU_AHB_FENCE_RANGE_1"/>
|
||||
<reg32 offset="0x24403" name="GPU_CC_GX_GDSCR"/>
|
||||
<reg32 offset="0x24542" name="GPU_CC_GX_DOMAIN_MISC"/>
|
||||
<reg32 offset="0x26801" name="GPU_CPR_FSM_CTL"/>
|
||||
|
||||
<!-- starts at offset 0x8c00 on most gpus -->
|
||||
<reg32 offset="0x0004" name="GPU_RSCC_RSC_STATUS0_DRV0"/>
|
||||
|
|
@ -233,12 +256,12 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<reg32 offset="0x03ee" name="RSCC_TCS1_DRV0_STATUS"/>
|
||||
<reg32 offset="0x0496" name="RSCC_TCS2_DRV0_STATUS"/>
|
||||
<reg32 offset="0x053e" name="RSCC_TCS3_DRV0_STATUS"/>
|
||||
<reg32 offset="0x05e6" name="RSCC_TCS4_DRV0_STATUS" variants="A7XX"/>
|
||||
<reg32 offset="0x068e" name="RSCC_TCS5_DRV0_STATUS" variants="A7XX"/>
|
||||
<reg32 offset="0x0736" name="RSCC_TCS6_DRV0_STATUS" variants="A7XX"/>
|
||||
<reg32 offset="0x07de" name="RSCC_TCS7_DRV0_STATUS" variants="A7XX"/>
|
||||
<reg32 offset="0x0886" name="RSCC_TCS8_DRV0_STATUS" variants="A7XX"/>
|
||||
<reg32 offset="0x092e" name="RSCC_TCS9_DRV0_STATUS" variants="A7XX"/>
|
||||
<reg32 offset="0x05e6" name="RSCC_TCS4_DRV0_STATUS" variants="A7XX-"/>
|
||||
<reg32 offset="0x068e" name="RSCC_TCS5_DRV0_STATUS" variants="A7XX-"/>
|
||||
<reg32 offset="0x0736" name="RSCC_TCS6_DRV0_STATUS" variants="A7XX-"/>
|
||||
<reg32 offset="0x07de" name="RSCC_TCS7_DRV0_STATUS" variants="A7XX-"/>
|
||||
<reg32 offset="0x0886" name="RSCC_TCS8_DRV0_STATUS" variants="A7XX-"/>
|
||||
<reg32 offset="0x092e" name="RSCC_TCS9_DRV0_STATUS" variants="A7XX-"/>
|
||||
</domain>
|
||||
|
||||
</database>
|
||||
|
|
|
|||
|
|
@ -93,13 +93,6 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<value value="4" name="A7XX_HLSQ_DP_STR"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a7xx_pipe">
|
||||
<value value="0" name="A7XX_PIPE_NONE"/>
|
||||
<value value="1" name="A7XX_PIPE_BR"/>
|
||||
<value value="2" name="A7XX_PIPE_BV"/>
|
||||
<value value="3" name="A7XX_PIPE_LPAC"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a7xx_cluster">
|
||||
<value value="0" name="A7XX_CLUSTER_NONE"/>
|
||||
<value value="1" name="A7XX_CLUSTER_FE"/>
|
||||
|
|
|
|||
121
drivers/gpu/drm/msm/registers/adreno/a8xx_descriptors.xml
Normal file
121
drivers/gpu/drm/msm/registers/adreno/a8xx_descriptors.xml
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<database xmlns="http://nouveau.freedesktop.org/"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
||||
<import file="freedreno_copyright.xml"/>
|
||||
<import file="adreno/adreno_common.xml"/>
|
||||
<import file="adreno/adreno_pm4.xml"/>
|
||||
<import file="adreno/a6xx_enums.xml"/>
|
||||
<import file="adreno/a8xx_enums.xml"/>
|
||||
|
||||
<domain name="A8XX_TEX_SAMP" width="32">
|
||||
<doc>Texture sampler dwords</doc>
|
||||
<reg32 offset="0" name="0">
|
||||
<bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>
|
||||
<bitfield name="MIPMAPING_DIS" pos="1" type="boolean"/>
|
||||
<bitfield name="XY_MAG" low="2" high="3" type="a6xx_tex_filter"/>
|
||||
<bitfield name="XY_MIN" low="4" high="5" type="a6xx_tex_filter"/>
|
||||
<bitfield name="WRAP_S" low="6" high="8" type="a6xx_tex_clamp"/>
|
||||
<bitfield name="WRAP_T" low="9" high="11" type="a6xx_tex_clamp"/>
|
||||
<bitfield name="WRAP_R" low="12" high="14" type="a6xx_tex_clamp"/>
|
||||
<bitfield name="MSAA_BOX_FILTERING" pos="15" type="boolean"/>
|
||||
<bitfield name="LOD_BIAS" low="16" high="28" type="fixed" radix="8"/>
|
||||
<bitfield name="ANISO" low="29" high="31" type="a6xx_tex_aniso"/>
|
||||
</reg32>
|
||||
<reg32 offset="1" name="1">
|
||||
<bitfield name="MAX_LOD" low="0" high="11" type="ufixed" radix="8"/>
|
||||
<bitfield name="MIN_LOD" low="12" high="23" type="ufixed" radix="8"/>
|
||||
<bitfield name="REDUCTION_MODE" low="24" high="25" type="a6xx_reduction_mode"/>
|
||||
<bitfield name="COMPARE_FUNC" low="26" high="28" type="adreno_compare_func"/>
|
||||
<bitfield name="CHROMA_LINEAR" pos="29" type="boolean"/>
|
||||
<bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="30" type="boolean"/>
|
||||
<bitfield name="UNNORM_COORDS" pos="31" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="2" name="2">
|
||||
<bitfield name="FASTBORDERCOLOREN" pos="0" type="boolean"/>
|
||||
<bitfield name="FASTBORDERCOLOR" low="1" high="2" type="a6xx_fast_border_color"/>
|
||||
<bitfield name="BCOLOR" low="7" high="31"/>
|
||||
</reg32>
|
||||
<reg32 offset="3" name="3"/>
|
||||
</domain>
|
||||
|
||||
<domain name="A8XX_TEX_MEMOBJ" width="32" varset="chip">
|
||||
<doc>Texture memobj dwords</doc>
|
||||
<reg32 offset="0" name="0">
|
||||
<bitfield name="BASE_LO" low="6" high="31" shr="6"/>
|
||||
</reg32>
|
||||
<reg32 offset="1" name="1">
|
||||
<bitfield name="BASE_HI" low="0" high="16"/>
|
||||
<bitfield name="TYPE" low="17" high="19" type="a6xx_tex_type"/>
|
||||
<bitfield name="DEPTH" low="20" high="31" type="uint"/>
|
||||
</reg32>
|
||||
<reg32 offset="2" name="2">
|
||||
<bitfield name="WIDTH" low="0" high="14" type="uint"/>
|
||||
<bitfield name="HEIGHT" low="15" high="29" type="uint"/>
|
||||
<bitfield name="SAMPLES" low="30" high="31" type="a3xx_msaa_samples"/>
|
||||
</reg32>
|
||||
<reg32 offset="3" name="3">
|
||||
<bitfield name="FMT" low="0" high="7" type="a6xx_format"/>
|
||||
<bitfield name="SWAP" low="8" high="9" type="a3xx_color_swap"/>
|
||||
<bitfield name="SWIZ_X" low="10" high="12" type="a8xx_tex_swiz"/>
|
||||
<bitfield name="SWIZ_Y" low="13" high="15" type="a8xx_tex_swiz"/>
|
||||
<bitfield name="SWIZ_Z" low="16" high="18" type="a8xx_tex_swiz"/>
|
||||
<bitfield name="SWIZ_W" low="19" high="21" type="a8xx_tex_swiz"/>
|
||||
</reg32>
|
||||
<reg32 offset="4" name="4">
|
||||
<bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>
|
||||
<bitfield name="FLAG" pos="2" type="boolean"/>
|
||||
<bitfield name="PRT_EN" pos="3" type="boolean"/>
|
||||
<bitfield name="TILE_ALL" pos="4" type="boolean"/>
|
||||
<bitfield name="SRGB" pos="5" type="boolean"/>
|
||||
<bitfield name="FLAG_LO" low="6" high="31" shr="6"/>
|
||||
<!-- For multiplanar: -->
|
||||
<bitfield name="BASE_U_LO" low="6" high="31" shr="6"/>
|
||||
</reg32>
|
||||
<reg32 offset="5" name="5">
|
||||
<bitfield name="FLAG_HI" low="0" high="16"/>
|
||||
<!-- For multiplanar: -->
|
||||
<bitfield name="BASE_U_HI" low="0" high="16"/>
|
||||
<bitfield name="FLAG_BUFFER_PITCH" low="17" high="24" shr="6" type="uint"/>
|
||||
<bitfield name="ALL_SAMPLES_CENTER" pos="29" type="boolean"/>
|
||||
<bitfield name="MUTABLEEN" pos="31" type="boolean"/>
|
||||
</reg32>
|
||||
<reg32 offset="6" name="6">
|
||||
<bitfield name="TEX_LINE_OFFSET" low="0" high="23" type="uint"/> <!-- PITCH -->
|
||||
<bitfield name="MIN_LINE_OFFSET" low="24" high="27" type="uint"/> <!-- PITCHALIGN -->
|
||||
<bitfield name="MIPLVLS" low="28" high="31" type="uint"/>
|
||||
</reg32>
|
||||
<reg32 offset="7" name="7">
|
||||
<bitfield name="ARRAY_SLICE_OFFSET" low="0" high="22" shr="12" type="uint"/> <!-- ARRAY_PITCH -->
|
||||
<bitfield name="ASO_UNIT" pos="23"/> <!-- 4KB or 32B ? -->
|
||||
<bitfield name="MIN_ARRAY_SLIZE_OFFSET" low="24" high="27" shr="12"/> <!-- MIN_LAYERSZ -->
|
||||
<bitfield name="GMEM_TILING_FALLBACK_EN" pos="28" type="boolean"/>
|
||||
<bitfield name="CORNER_BASED_EN" pos="30" type="boolean"/>
|
||||
<bitfield name="GMEM_FULL_SURF" pos="31" type="boolean"/>
|
||||
<!-- For multiplanar. This overlaps other single-planar fields: -->
|
||||
<bitfield name="UV_OFFSET_H" low="24" high="25" type="ufixed" radix="2"/> <!-- CHROMA_MIDPOINT_X -->
|
||||
<bitfield name="UV_OFFSET_V" low="26" high="27" type="ufixed" radix="2"/> <!-- CHROMA_MIDPOINT_Y -->
|
||||
</reg32>
|
||||
<reg32 offset="8" name="8">
|
||||
<bitfield name="FLAG_ARRAY_PITCH" low="0" high="14" shr="12" type="uint"/> <!-- FLAG_BUFFER_ARRAY_PITCH -->
|
||||
<!-- log2 size of the first level, required for mipmapping -->
|
||||
<bitfield name="FLAG_BUFFER_LOGW" low="24" high="27" type="uint"/>
|
||||
<bitfield name="FLAG_BUFFER_LOGH" low="28" high="31" type="uint"/>
|
||||
<!-- For multiplanar. This overlaps other single-planar fields: -->
|
||||
<bitfield name="BASE_V_LO" low="6" high="31" shr="6"/>
|
||||
</reg32>
|
||||
<reg32 offset="9" name="9">
|
||||
<bitfield name="MIN_LOD_CLAMP" low="19" high="30" type="ufixed" radix="8"/>
|
||||
<!-- For multiplanar, this overlaps other fields: -->
|
||||
<bitfield name="BASE_V_HI" low="0" high="16"/>
|
||||
<bitfield name="UV_PITCH" low="17" high="26"/> <!-- PLANE_PITCH -->
|
||||
</reg32>
|
||||
<reg32 offset="10" name="10"/>
|
||||
<reg32 offset="11" name="11"/>
|
||||
<reg32 offset="12" name="12"/>
|
||||
<reg32 offset="13" name="13"/>
|
||||
<reg32 offset="14" name="14"/>
|
||||
<reg32 offset="15" name="15"/>
|
||||
</domain>
|
||||
|
||||
</database>
|
||||
299
drivers/gpu/drm/msm/registers/adreno/a8xx_enums.xml
Normal file
299
drivers/gpu/drm/msm/registers/adreno/a8xx_enums.xml
Normal file
|
|
@ -0,0 +1,299 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<database xmlns="http://nouveau.freedesktop.org/"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
||||
<import file="freedreno_copyright.xml"/>
|
||||
<import file="adreno/adreno_common.xml"/>
|
||||
<import file="adreno/adreno_pm4.xml"/>
|
||||
|
||||
<enum name="a8xx_statetype_id">
|
||||
<value value="0" name="A8XX_TP0_NCTX_REG"/>
|
||||
<value value="1" name="A8XX_TP0_CTX0_3D_CVS_REG"/>
|
||||
<value value="2" name="A8XX_TP0_CTX0_3D_CPS_REG"/>
|
||||
<value value="3" name="A8XX_TP0_CTX1_3D_CVS_REG"/>
|
||||
<value value="4" name="A8XX_TP0_CTX1_3D_CPS_REG"/>
|
||||
<value value="5" name="A8XX_TP0_CTX2_3D_CPS_REG"/>
|
||||
<value value="6" name="A8XX_TP0_CTX3_3D_CPS_REG"/>
|
||||
<value value="9" name="A8XX_TP0_TMO_DATA"/>
|
||||
<value value="10" name="A8XX_TP0_SMO_DATA"/>
|
||||
<value value="11" name="A8XX_TP0_MIPMAP_BASE_DATA"/>
|
||||
<value value="12" name="A8XX_TP_3D_CVS_REG"/>
|
||||
<value value="13" name="A8XX_TP_3D_CPS_REG"/>
|
||||
<value value="16" name="A8XX_SP_3D_CVS_REG"/>
|
||||
<value value="17" name="A8XX_SP_3D_CPS_REG"/>
|
||||
<value value="22" name="A8XX_SP_LB_DATA_RAM"/>
|
||||
<value value="23" name="A8XX_SP_INST_DATA_RAM"/>
|
||||
<value value="24" name="A8XX_SP_STH"/>
|
||||
<value value="25" name="A8XX_SP_EVQ"/>
|
||||
<value value="26" name="A8XX_SP_CONSMNG"/>
|
||||
<value value="30" name="A8XX_HLSQ_INST_DATA_RAM"/>
|
||||
<value value="31" name="A8XX_SP_INST_DATA_3"/>
|
||||
<value value="32" name="A8XX_SP_NCTX_REG"/>
|
||||
<value value="33" name="A8XX_SP_CTX0_3D_CVS_REG"/>
|
||||
<value value="34" name="A8XX_SP_CTX0_3D_CPS_REG"/>
|
||||
<value value="35" name="A8XX_SP_CTX1_3D_CVS_REG"/>
|
||||
<value value="36" name="A8XX_SP_CTX1_3D_CPS_REG"/>
|
||||
<value value="37" name="A8XX_SP_CTX2_3D_CPS_REG"/>
|
||||
<value value="38" name="A8XX_SP_CTX3_3D_CPS_REG"/>
|
||||
<value value="39" name="A8XX_SP_INST_DATA"/>
|
||||
<value value="40" name="A8XX_SP_INST_DATA_1"/>
|
||||
<value value="41" name="A8XX_SP_LB_0_DATA"/>
|
||||
<value value="42" name="A8XX_SP_LB_1_DATA"/>
|
||||
<value value="43" name="A8XX_SP_LB_2_DATA"/>
|
||||
<value value="44" name="A8XX_SP_LB_3_DATA"/>
|
||||
<value value="45" name="A8XX_SP_LB_4_DATA"/>
|
||||
<value value="46" name="A8XX_SP_LB_5_DATA"/>
|
||||
<value value="47" name="A8XX_SP_LB_6_DATA"/>
|
||||
<value value="48" name="A8XX_SP_LB_7_DATA"/>
|
||||
<value value="49" name="A8XX_SP_CB_RAM"/>
|
||||
<value value="50" name="A8XX_SP_LB_13_DATA"/>
|
||||
<value value="51" name="A8XX_SP_LB_14_DATA"/>
|
||||
<value value="52" name="A8XX_SP_INST_TAG"/>
|
||||
<value value="53" name="A8XX_SP_INST_DATA_2"/>
|
||||
<value value="54" name="A8XX_SP_TMO_TAG"/>
|
||||
<value value="55" name="A8XX_SP_SMO_TAG"/>
|
||||
<value value="56" name="A8XX_SP_STATE_DATA"/>
|
||||
<value value="57" name="A8XX_SP_HWAVE_RAM"/>
|
||||
<value value="58" name="A8XX_SP_L0_INST_BUF"/>
|
||||
<value value="59" name="A8XX_SP_LB_8_DATA"/>
|
||||
<value value="60" name="A8XX_SP_LB_9_DATA"/>
|
||||
<value value="61" name="A8XX_SP_LB_10_DATA"/>
|
||||
<value value="62" name="A8XX_SP_LB_11_DATA"/>
|
||||
<value value="63" name="A8XX_SP_LB_12_DATA"/>
|
||||
<value value="64" name="A8XX_HLSQ_DATAPATH_DSTR_META"/>
|
||||
<value value="65" name="A8XX_HLSQ_DESC_REMAP_META"/>
|
||||
<value value="66" name="A8XX_HLSQ_SLICE_TOP_META"/>
|
||||
<value value="67" name="A8XX_HLSQ_L2STC_TAG_RAM"/>
|
||||
<value value="68" name="A8XX_HLSQ_L2STC_INFO_CMD"/>
|
||||
<value value="69" name="A8XX_HLSQ_CVS_BE_CTXT_BUF_RAM_TAG"/>
|
||||
<value value="70" name="A8XX_HLSQ_CPS_BE_CTXT_BUF_RAM_TAG"/>
|
||||
<value value="71" name="A8XX_HLSQ_GFX_CVS_BE_CTXT_BUF_RAM"/>
|
||||
<value value="72" name="A8XX_HLSQ_GFX_CPS_BE_CTXT_BUF_RAM"/>
|
||||
<value value="73" name="A8XX_HLSQ_CHUNK_CVS_RAM"/>
|
||||
<value value="74" name="A8XX_HLSQ_CHUNK_CPS_RAM"/>
|
||||
<value value="75" name="A8XX_HLSQ_CHUNK_CVS_RAM_TAG"/>
|
||||
<value value="76" name="A8XX_HLSQ_CHUNK_CPS_RAM_TAG"/>
|
||||
<value value="77" name="A8XX_HLSQ_ICB_CVS_CB_BASE_TAG"/>
|
||||
<value value="78" name="A8XX_HLSQ_ICB_CPS_CB_BASE_TAG"/>
|
||||
<value value="79" name="A8XX_HLSQ_CVS_MISC_RAM"/>
|
||||
<value value="80" name="A8XX_HLSQ_CPS_MISC_RAM"/>
|
||||
<value value="81" name="A8XX_HLSQ_CPS_MISC_RAM_1"/>
|
||||
<value value="82" name="A8XX_HLSQ_INST_RAM"/>
|
||||
<value value="83" name="A8XX_HLSQ_GFX_CVS_CONST_RAM"/>
|
||||
<value value="84" name="A8XX_HLSQ_GFX_CPS_CONST_RAM"/>
|
||||
<value value="85" name="A8XX_HLSQ_CVS_MISC_RAM_TAG"/>
|
||||
<value value="86" name="A8XX_HLSQ_CPS_MISC_RAM_TAG"/>
|
||||
<value value="87" name="A8XX_HLSQ_INST_RAM_TAG"/>
|
||||
<value value="88" name="A8XX_HLSQ_GFX_CVS_CONST_RAM_TAG"/>
|
||||
<value value="89" name="A8XX_HLSQ_GFX_CPS_CONST_RAM_TAG"/>
|
||||
<value value="90" name="A8XX_HLSQ_GFX_LOCAL_MISC_RAM"/>
|
||||
<value value="91" name="A8XX_HLSQ_GFX_LOCAL_MISC_RAM_TAG"/>
|
||||
<value value="92" name="A8XX_HLSQ_INST_RAM_1"/>
|
||||
<value value="93" name="A8XX_HLSQ_STPROC_META"/>
|
||||
<value value="94" name="A8XX_HLSQ_SLICE_BACKEND_META"/>
|
||||
<value value="95" name="A8XX_HLSQ_INST_RAM_2"/>
|
||||
<value value="96" name="A8XX_HLSQ_DATAPATH_META"/>
|
||||
<value value="97" name="A8XX_HLSQ_FRONTEND_META"/>
|
||||
<value value="98" name="A8XX_HLSQ_INDIRECT_META"/>
|
||||
<value value="99" name="A8XX_HLSQ_BACKEND_META"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a8xx_state_location">
|
||||
<value value="0" name="A8XX_HLSQ_STATE"/>
|
||||
<value value="1" name="A8XX_HLSQ_DP"/>
|
||||
<value value="2" name="A8XX_SP_TOP"/>
|
||||
<value value="3" name="A8XX_USPTP"/>
|
||||
<value value="4" name="A8XX_HLSQ_DP_STR"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a8xx_cluster">
|
||||
<value value="0" name="A8XX_CLUSTER_NONE"/>
|
||||
<value value="1" name="A8XX_CLUSTER_FE_US"/>
|
||||
<value value="2" name="A8XX_CLUSTER_FE_S"/>
|
||||
<value value="3" name="A8XX_CLUSTER_SP_VS"/>
|
||||
<value value="4" name="A8XX_CLUSTER_VPC_VS"/>
|
||||
<value value="5" name="A8XX_CLUSTER_VPC_US"/>
|
||||
<value value="6" name="A8XX_CLUSTER_GRAS"/>
|
||||
<value value="7" name="A8XX_CLUSTER_SP_PS"/>
|
||||
<value value="8" name="A8XX_CLUSTER_VPC_PS"/>
|
||||
<value value="9" name="A8XX_CLUSTER_PS"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a8xx_debugbus_id">
|
||||
<value value="1" name="A8XX_DEBUGBUS_GBIF_CX_GC_US_I_0"/>
|
||||
<value value="2" name="A8XX_DEBUGBUS_GMU_CX_GC_US_I_0"/>
|
||||
<value value="3" name="A8XX_DEBUGBUS_CX_GC_US_I_0"/>
|
||||
<value value="8" name="A8XX_DEBUGBUS_GBIF_GX_GC_US_I_0"/>
|
||||
<value value="9" name="A8XX_DEBUGBUS_GMU_GX_GC_US_I_0"/>
|
||||
<value value="10" name="A8XX_DEBUGBUS_DBGC_GC_US_I_0"/>
|
||||
<value value="11" name="A8XX_DEBUGBUS_RBBM_GC_US_I_0"/>
|
||||
<value value="12" name="A8XX_DEBUGBUS_LARC_GC_US_I_0"/>
|
||||
<value value="13" name="A8XX_DEBUGBUS_COM_GC_US_I_0"/>
|
||||
<value value="14" name="A8XX_DEBUGBUS_HLSQ_GC_US_I_0"/>
|
||||
<value value="15" name="A8XX_DEBUGBUS_CGC_GC_US_I_0"/>
|
||||
<value value="20" name="A8XX_DEBUGBUS_VSC_GC_US_I_0_0"/>
|
||||
<value value="21" name="A8XX_DEBUGBUS_VSC_GC_US_I_0_1"/>
|
||||
<value value="24" name="A8XX_DEBUGBUS_UFC_GC_US_I_0"/>
|
||||
<value value="25" name="A8XX_DEBUGBUS_UFC_GC_US_I_1"/>
|
||||
<value value="40" name="A8XX_DEBUGBUS_CP_GC_US_I_0_0"/>
|
||||
<value value="41" name="A8XX_DEBUGBUS_CP_GC_US_I_0_1"/>
|
||||
<value value="42" name="A8XX_DEBUGBUS_CP_GC_US_I_0_2"/>
|
||||
<value value="56" name="A8XX_DEBUGBUS_PC_BR_US_I_0"/>
|
||||
<value value="57" name="A8XX_DEBUGBUS_PC_BV_US_I_0"/>
|
||||
<value value="58" name="A8XX_DEBUGBUS_GPC_BR_US_I_0"/>
|
||||
<value value="59" name="A8XX_DEBUGBUS_GPC_BV_US_I_0"/>
|
||||
<value value="60" name="A8XX_DEBUGBUS_VPC_BR_US_I_0"/>
|
||||
<value value="61" name="A8XX_DEBUGBUS_VPC_BV_US_I_0"/>
|
||||
<value value="80" name="A8XX_DEBUGBUS_UCHE_WRAPPER_GC_US_I_0"/>
|
||||
<value value="81" name="A8XX_DEBUGBUS_UCHE_GC_US_I_0"/>
|
||||
<value value="82" name="A8XX_DEBUGBUS_UCHE_GC_US_I_1"/>
|
||||
<value value="83" name="A8XX_DEBUGBUS_UCHE_GC_US_I_0_1"/>
|
||||
<value value="84" name="A8XX_DEBUGBUS_UCHE_GC_US_I_1_1"/>
|
||||
<value value="128" name="A8XX_DEBUGBUS_CP_GC_S_0_I_0"/>
|
||||
<value value="129" name="A8XX_DEBUGBUS_PC_BR_S_0_I_0"/>
|
||||
<value value="130" name="A8XX_DEBUGBUS_PC_BV_S_0_I_0"/>
|
||||
<value value="131" name="A8XX_DEBUGBUS_TESS_GC_S_0_I_0"/>
|
||||
<value value="132" name="A8XX_DEBUGBUS_TSEFE_GC_S_0_I_0"/>
|
||||
<value value="133" name="A8XX_DEBUGBUS_TSEBE_GC_S_0_I_0"/>
|
||||
<value value="134" name="A8XX_DEBUGBUS_RAS_GC_S_0_I_0"/>
|
||||
<value value="135" name="A8XX_DEBUGBUS_LRZ_BR_S_0_I_0"/>
|
||||
<value value="136" name="A8XX_DEBUGBUS_LRZ_BV_S_0_I_0"/>
|
||||
<value value="137" name="A8XX_DEBUGBUS_VFDP_GC_S_0_I_0"/>
|
||||
<value value="138" name="A8XX_DEBUGBUS_GPC_BR_S_0_I_0"/>
|
||||
<value value="139" name="A8XX_DEBUGBUS_GPC_BV_S_0_I_0"/>
|
||||
<value value="140" name="A8XX_DEBUGBUS_VPCFE_BR_S_0_I_0"/>
|
||||
<value value="141" name="A8XX_DEBUGBUS_VPCFE_BV_S_0_I_0"/>
|
||||
<value value="142" name="A8XX_DEBUGBUS_VPCBE_BR_S_0_I_0"/>
|
||||
<value value="143" name="A8XX_DEBUGBUS_VPCBE_BV_S_0_I_0"/>
|
||||
<value value="144" name="A8XX_DEBUGBUS_CCHE_GC_S_0_I_0"/>
|
||||
<value value="145" name="A8XX_DEBUGBUS_DBGC_GC_S_0_I_0"/>
|
||||
<value value="146" name="A8XX_DEBUGBUS_LARC_GC_S_0_I_0"/>
|
||||
<value value="147" name="A8XX_DEBUGBUS_RBBM_GC_S_0_I_0"/>
|
||||
<value value="148" name="A8XX_DEBUGBUS_CCRE_GC_S_0_I_0"/>
|
||||
<value value="149" name="A8XX_DEBUGBUS_CGC_GC_S_0_I_0"/>
|
||||
<value value="150" name="A8XX_DEBUGBUS_GMU_GC_S_0_I_0"/>
|
||||
<value value="151" name="A8XX_DEBUGBUS_SLICE_GC_S_0_I_0"/>
|
||||
<value value="152" name="A8XX_DEBUGBUS_HLSQ_SPTP_STAR_GC_S_0_I_0"/>
|
||||
<value value="160" name="A8XX_DEBUGBUS_USP_GC_S_0_I_0"/>
|
||||
<value value="161" name="A8XX_DEBUGBUS_USP_GC_S_0_I_1"/>
|
||||
<value value="166" name="A8XX_DEBUGBUS_USPTP_GC_S_0_I_0"/>
|
||||
<value value="167" name="A8XX_DEBUGBUS_USPTP_GC_S_0_I_1"/>
|
||||
<value value="168" name="A8XX_DEBUGBUS_USPTP_GC_S_0_I_2"/>
|
||||
<value value="169" name="A8XX_DEBUGBUS_USPTP_GC_S_0_I_3"/>
|
||||
<value value="178" name="A8XX_DEBUGBUS_TP_GC_S_0_I_0"/>
|
||||
<value value="179" name="A8XX_DEBUGBUS_TP_GC_S_0_I_1"/>
|
||||
<value value="180" name="A8XX_DEBUGBUS_TP_GC_S_0_I_2"/>
|
||||
<value value="181" name="A8XX_DEBUGBUS_TP_GC_S_0_I_3"/>
|
||||
<value value="190" name="A8XX_DEBUGBUS_RB_GC_S_0_I_0"/>
|
||||
<value value="191" name="A8XX_DEBUGBUS_RB_GC_S_0_I_1"/>
|
||||
<value value="196" name="A8XX_DEBUGBUS_CCU_GC_S_0_I_0"/>
|
||||
<value value="197" name="A8XX_DEBUGBUS_CCU_GC_S_0_I_1"/>
|
||||
<value value="202" name="A8XX_DEBUGBUS_HLSQ_GC_S_0_I_0"/>
|
||||
<value value="203" name="A8XX_DEBUGBUS_HLSQ_GC_S_0_I_1"/>
|
||||
<value value="208" name="A8XX_DEBUGBUS_VFD_GC_S_0_I_0"/>
|
||||
<value value="209" name="A8XX_DEBUGBUS_VFD_GC_S_0_I_1"/>
|
||||
<value value="256" name="A8XX_DEBUGBUS_CP_GC_S_1_I_0"/>
|
||||
<value value="257" name="A8XX_DEBUGBUS_PC_BR_S_1_I_0"/>
|
||||
<value value="258" name="A8XX_DEBUGBUS_PC_BV_S_1_I_0"/>
|
||||
<value value="259" name="A8XX_DEBUGBUS_TESS_GC_S_1_I_0"/>
|
||||
<value value="260" name="A8XX_DEBUGBUS_TSEFE_GC_S_1_I_0"/>
|
||||
<value value="261" name="A8XX_DEBUGBUS_TSEBE_GC_S_1_I_0"/>
|
||||
<value value="262" name="A8XX_DEBUGBUS_RAS_GC_S_1_I_0"/>
|
||||
<value value="263" name="A8XX_DEBUGBUS_LRZ_BR_S_1_I_0"/>
|
||||
<value value="264" name="A8XX_DEBUGBUS_LRZ_BV_S_1_I_0"/>
|
||||
<value value="265" name="A8XX_DEBUGBUS_VFDP_GC_S_1_I_0"/>
|
||||
<value value="266" name="A8XX_DEBUGBUS_GPC_BR_S_1_I_0"/>
|
||||
<value value="267" name="A8XX_DEBUGBUS_GPC_BV_S_1_I_0"/>
|
||||
<value value="268" name="A8XX_DEBUGBUS_VPCFE_BR_S_1_I_0"/>
|
||||
<value value="269" name="A8XX_DEBUGBUS_VPCFE_BV_S_1_I_0"/>
|
||||
<value value="270" name="A8XX_DEBUGBUS_VPCBE_BR_S_1_I_0"/>
|
||||
<value value="271" name="A8XX_DEBUGBUS_VPCBE_BV_S_1_I_0"/>
|
||||
<value value="272" name="A8XX_DEBUGBUS_CCHE_GC_S_1_I_0"/>
|
||||
<value value="273" name="A8XX_DEBUGBUS_DBGC_GC_S_1_I_0"/>
|
||||
<value value="274" name="A8XX_DEBUGBUS_LARC_GC_S_1_I_0"/>
|
||||
<value value="275" name="A8XX_DEBUGBUS_RBBM_GC_S_1_I_0"/>
|
||||
<value value="276" name="A8XX_DEBUGBUS_CCRE_GC_S_1_I_0"/>
|
||||
<value value="277" name="A8XX_DEBUGBUS_CGC_GC_S_1_I_0"/>
|
||||
<value value="278" name="A8XX_DEBUGBUS_GMU_GC_S_1_I_0"/>
|
||||
<value value="279" name="A8XX_DEBUGBUS_SLICE_GC_S_1_I_0"/>
|
||||
<value value="280" name="A8XX_DEBUGBUS_HLSQ_SPTP_STAR_GC_S_1_I_0"/>
|
||||
<value value="288" name="A8XX_DEBUGBUS_USP_GC_S_1_I_0"/>
|
||||
<value value="289" name="A8XX_DEBUGBUS_USP_GC_S_1_I_1"/>
|
||||
<value value="294" name="A8XX_DEBUGBUS_USPTP_GC_S_1_I_0"/>
|
||||
<value value="295" name="A8XX_DEBUGBUS_USPTP_GC_S_1_I_1"/>
|
||||
<value value="296" name="A8XX_DEBUGBUS_USPTP_GC_S_1_I_2"/>
|
||||
<value value="297" name="A8XX_DEBUGBUS_USPTP_GC_S_1_I_3"/>
|
||||
<value value="306" name="A8XX_DEBUGBUS_TP_GC_S_1_I_0"/>
|
||||
<value value="307" name="A8XX_DEBUGBUS_TP_GC_S_1_I_1"/>
|
||||
<value value="308" name="A8XX_DEBUGBUS_TP_GC_S_1_I_2"/>
|
||||
<value value="309" name="A8XX_DEBUGBUS_TP_GC_S_1_I_3"/>
|
||||
<value value="318" name="A8XX_DEBUGBUS_RB_GC_S_1_I_0"/>
|
||||
<value value="319" name="A8XX_DEBUGBUS_RB_GC_S_1_I_1"/>
|
||||
<value value="324" name="A8XX_DEBUGBUS_CCU_GC_S_1_I_0"/>
|
||||
<value value="325" name="A8XX_DEBUGBUS_CCU_GC_S_1_I_1"/>
|
||||
<value value="330" name="A8XX_DEBUGBUS_HLSQ_GC_S_1_I_0"/>
|
||||
<value value="331" name="A8XX_DEBUGBUS_HLSQ_GC_S_1_I_1"/>
|
||||
<value value="336" name="A8XX_DEBUGBUS_VFD_GC_S_1_I_0"/>
|
||||
<value value="337" name="A8XX_DEBUGBUS_VFD_GC_S_1_I_1"/>
|
||||
<value value="384" name="A8XX_DEBUGBUS_CP_GC_S_2_I_0"/>
|
||||
<value value="385" name="A8XX_DEBUGBUS_PC_BR_S_2_I_0"/>
|
||||
<value value="386" name="A8XX_DEBUGBUS_PC_BV_S_2_I_0"/>
|
||||
<value value="387" name="A8XX_DEBUGBUS_TESS_GC_S_2_I_0"/>
|
||||
<value value="388" name="A8XX_DEBUGBUS_TSEFE_GC_S_2_I_0"/>
|
||||
<value value="389" name="A8XX_DEBUGBUS_TSEBE_GC_S_2_I_0"/>
|
||||
<value value="390" name="A8XX_DEBUGBUS_RAS_GC_S_2_I_0"/>
|
||||
<value value="391" name="A8XX_DEBUGBUS_LRZ_BR_S_2_I_0"/>
|
||||
<value value="392" name="A8XX_DEBUGBUS_LRZ_BV_S_2_I_0"/>
|
||||
<value value="393" name="A8XX_DEBUGBUS_VFDP_GC_S_2_I_0"/>
|
||||
<value value="394" name="A8XX_DEBUGBUS_GPC_BR_S_2_I_0"/>
|
||||
<value value="395" name="A8XX_DEBUGBUS_GPC_BV_S_2_I_0"/>
|
||||
<value value="396" name="A8XX_DEBUGBUS_VPCFE_BR_S_2_I_0"/>
|
||||
<value value="397" name="A8XX_DEBUGBUS_VPCFE_BV_S_2_I_0"/>
|
||||
<value value="398" name="A8XX_DEBUGBUS_VPCBE_BR_S_2_I_0"/>
|
||||
<value value="399" name="A8XX_DEBUGBUS_VPCBE_BV_S_2_I_0"/>
|
||||
<value value="400" name="A8XX_DEBUGBUS_CCHE_GC_S_2_I_0"/>
|
||||
<value value="401" name="A8XX_DEBUGBUS_DBGC_GC_S_2_I_0"/>
|
||||
<value value="402" name="A8XX_DEBUGBUS_LARC_GC_S_2_I_0"/>
|
||||
<value value="403" name="A8XX_DEBUGBUS_RBBM_GC_S_2_I_0"/>
|
||||
<value value="404" name="A8XX_DEBUGBUS_CCRE_GC_S_2_I_0"/>
|
||||
<value value="405" name="A8XX_DEBUGBUS_CGC_GC_S_2_I_0"/>
|
||||
<value value="406" name="A8XX_DEBUGBUS_GMU_GC_S_2_I_0"/>
|
||||
<value value="407" name="A8XX_DEBUGBUS_SLICE_GC_S_2_I_0"/>
|
||||
<value value="408" name="A8XX_DEBUGBUS_HLSQ_SPTP_STAR_GC_S_2_I_0"/>
|
||||
<value value="416" name="A8XX_DEBUGBUS_USP_GC_S_2_I_0"/>
|
||||
<value value="417" name="A8XX_DEBUGBUS_USP_GC_S_2_I_1"/>
|
||||
<value value="422" name="A8XX_DEBUGBUS_USPTP_GC_S_2_I_0"/>
|
||||
<value value="423" name="A8XX_DEBUGBUS_USPTP_GC_S_2_I_1"/>
|
||||
<value value="424" name="A8XX_DEBUGBUS_USPTP_GC_S_2_I_2"/>
|
||||
<value value="425" name="A8XX_DEBUGBUS_USPTP_GC_S_2_I_3"/>
|
||||
<value value="434" name="A8XX_DEBUGBUS_TP_GC_S_2_I_0"/>
|
||||
<value value="435" name="A8XX_DEBUGBUS_TP_GC_S_2_I_1"/>
|
||||
<value value="436" name="A8XX_DEBUGBUS_TP_GC_S_2_I_2"/>
|
||||
<value value="437" name="A8XX_DEBUGBUS_TP_GC_S_2_I_3"/>
|
||||
<value value="446" name="A8XX_DEBUGBUS_RB_GC_S_2_I_0"/>
|
||||
<value value="447" name="A8XX_DEBUGBUS_RB_GC_S_2_I_1"/>
|
||||
<value value="452" name="A8XX_DEBUGBUS_CCU_GC_S_2_I_0"/>
|
||||
<value value="453" name="A8XX_DEBUGBUS_CCU_GC_S_2_I_1"/>
|
||||
<value value="458" name="A8XX_DEBUGBUS_HLSQ_GC_S_2_I_0"/>
|
||||
<value value="459" name="A8XX_DEBUGBUS_HLSQ_GC_S_2_I_1"/>
|
||||
<value value="464" name="A8XX_DEBUGBUS_VFD_GC_S_2_I_0"/>
|
||||
<value value="465" name="A8XX_DEBUGBUS_VFD_GC_S_2_I_1"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a8xx_usptp_id">
|
||||
<value value="0" name="A8XX_uSPTP0"/>
|
||||
<value value="1" name="A8XX_uSPTP1"/>
|
||||
<value value="15" name="A8XX_SPTOP"/>
|
||||
</enum>
|
||||
|
||||
<enum name="a8xx_tex_swiz">
|
||||
<value name="A8XX_SWIZ_IDENTITY" value="0"/>
|
||||
<value name="A8XX_SWIZ_ZERO" value="1"/>
|
||||
<value name="A8XX_SWIZ_ONE" value="2"/>
|
||||
<value name="A8XX_SWIZ_X" value="3"/>
|
||||
<value name="A8XX_SWIZ_Y" value="4"/>
|
||||
<value name="A8XX_SWIZ_Z" value="5"/>
|
||||
<value name="A8XX_SWIZ_W" value="6"/>
|
||||
</enum>
|
||||
|
||||
</database>
|
||||
|
|
@ -11,6 +11,7 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<value name="A5XX" value="5"/>
|
||||
<value name="A6XX" value="6"/>
|
||||
<value name="A7XX" value="7"/>
|
||||
<value name="A8XX" value="8"/>
|
||||
</enum>
|
||||
|
||||
<enum name="adreno_pa_su_sc_draw">
|
||||
|
|
@ -397,4 +398,15 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<value value="0x7" name="TEX_PREFETCH_UNK7"/>
|
||||
</enum>
|
||||
|
||||
<enum name="adreno_pipe">
|
||||
<value value="0" name="PIPE_NONE"/>
|
||||
<value value="1" name="PIPE_BR"/>
|
||||
<value value="2" name="PIPE_BV"/>
|
||||
<value value="3" name="PIPE_LPAC"/>
|
||||
<value value="4" name="PIPE_AQE0"/>
|
||||
<value value="5" name="PIPE_AQE1"/>
|
||||
<value value="6" name="PIPE_DDE_BR"/>
|
||||
<value value="7" name="PIPE_DDE_BV"/>
|
||||
</enum>
|
||||
|
||||
</database>
|
||||
|
|
|
|||
|
|
@ -6,103 +6,102 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<import file="adreno/adreno_common.xml"/>
|
||||
|
||||
<enum name="vgt_event_type" varset="chip">
|
||||
<value name="VS_DEALLOC" value="0"/>
|
||||
<value name="PS_DEALLOC" value="1" variants="A2XX-A6XX"/>
|
||||
<value name="VS_DONE_TS" value="2"/>
|
||||
<value name="PS_DONE_TS" value="3"/>
|
||||
<value name="VS_DEALLOC" value="0x00" variants="A2XX-A5XX"/>
|
||||
<value name="PS_DEALLOC" value="0x01" variants="A2XX-A5XX"/>
|
||||
<value name="VS_DONE_TS" value="0x02" variants="A2XX-A5XX"/>
|
||||
<value name="PS_DONE_TS" value="0x03" variants="A2XX-A5XX"/>
|
||||
<doc>
|
||||
Flushes dirty data from UCHE, and also writes a GPU timestamp to
|
||||
the address if one is provided.
|
||||
</doc>
|
||||
<value name="CACHE_FLUSH_TS" value="4"/>
|
||||
<value name="CONTEXT_DONE" value="5"/>
|
||||
<value name="CACHE_FLUSH" value="6" variants="A2XX-A4XX"/>
|
||||
<value name="VIZQUERY_START" value="7" variants="A2XX"/>
|
||||
<value name="HLSQ_FLUSH" value="7" variants="A3XX-A4XX"/>
|
||||
<value name="VIZQUERY_END" value="8" variants="A2XX"/>
|
||||
<value name="SC_WAIT_WC" value="9" variants="A2XX"/>
|
||||
<value name="WRITE_PRIMITIVE_COUNTS" value="9" variants="A6XX-"/>
|
||||
<value name="START_PRIMITIVE_CTRS" value="11" variants="A6XX-"/>
|
||||
<value name="STOP_PRIMITIVE_CTRS" value="12" variants="A6XX-"/>
|
||||
<value name="CACHE_FLUSH_TS" value="0x04"/>
|
||||
<value name="CONTEXT_DONE" value="0x05"/>
|
||||
<value name="CACHE_FLUSH" value="0x06" variants="A2XX-A4XX"/>
|
||||
<value name="VIZQUERY_START" value="0x07" variants="A2XX"/>
|
||||
<value name="HLSQ_FLUSH" value="0x07" variants="A3XX-A4XX"/>
|
||||
<value name="VIZQUERY_END" value="0x08" variants="A2XX"/>
|
||||
<value name="SC_WAIT_WC" value="0x09" variants="A2XX"/>
|
||||
<value name="WRITE_PRIMITIVE_COUNTS" value="0x09" variants="A6XX-"/>
|
||||
<value name="START_PRIMITIVE_CTRS" value="0x0b" variants="A6XX-"/>
|
||||
<value name="STOP_PRIMITIVE_CTRS" value="0x0c" variants="A6XX-"/>
|
||||
<!-- Not sure that these 4 events don't have the same meaning as on A5XX+ -->
|
||||
<value name="RST_PIX_CNT" value="13" variants="A2XX-A4XX"/>
|
||||
<value name="RST_VTX_CNT" value="14" variants="A2XX-A4XX"/>
|
||||
<value name="TILE_FLUSH" value="15" variants="A2XX-A4XX"/>
|
||||
<value name="STAT_EVENT" value="16" variants="A2XX-A4XX"/>
|
||||
<value name="CACHE_FLUSH_AND_INV_TS_EVENT" value="20" variants="A2XX-A4XX"/>
|
||||
<value name="RST_PIX_CNT" value="0x0d" variants="A2XX-A4XX"/>
|
||||
<value name="RST_VTX_CNT" value="0x0e" variants="A2XX-A4XX"/>
|
||||
<value name="TILE_FLUSH" value="0x0f" variants="A2XX-A4XX"/>
|
||||
<value name="STAT_EVENT" value="0x10" variants="A2XX-A4XX"/>
|
||||
<value name="CACHE_FLUSH_AND_INV_TS_EVENT" value="0x14" variants="A2XX-A4XX"/>
|
||||
<doc>
|
||||
If A6XX_RB_SAMPLE_COUNTER_CNTL.copy is true, writes OQ Z passed
|
||||
sample counts to RB_SAMPLE_COUNTER_BASE. This writes to main
|
||||
memory, skipping UCHE.
|
||||
</doc>
|
||||
<value name="ZPASS_DONE" value="21"/>
|
||||
<value name="CACHE_FLUSH_AND_INV_EVENT" value="22" variants="A2XX"/>
|
||||
<value name="ZPASS_DONE" value="0x15"/>
|
||||
<value name="CACHE_FLUSH_AND_INV_EVENT" value="0x16" variants="A2XX"/>
|
||||
|
||||
<doc>
|
||||
Writes the GPU timestamp to the address that follows, once RB
|
||||
access and flushes are complete.
|
||||
</doc>
|
||||
<value name="RB_DONE_TS" value="22" variants="A3XX-"/>
|
||||
<value name="RB_DONE_TS" value="0x16" variants="A3XX-"/>
|
||||
|
||||
<value name="PERFCOUNTER_START" value="23" variants="A2XX-A4XX"/>
|
||||
<value name="PERFCOUNTER_STOP" value="24" variants="A2XX-A4XX"/>
|
||||
<value name="VS_FETCH_DONE" value="27"/>
|
||||
<value name="FACENESS_FLUSH" value="28" variants="A2XX-A4XX"/>
|
||||
<value name="PERFCOUNTER_START" value="0x17" variants="A2XX-A4XX"/>
|
||||
<value name="PERFCOUNTER_STOP" value="0x18" variants="A2XX-A4XX"/>
|
||||
<value name="VS_FETCH_DONE" value="0x1b" variants="A2XX-A5XX"/>
|
||||
<value name="FACENESS_FLUSH" value="0x1c" variants="A2XX-A4XX"/>
|
||||
|
||||
<!-- a5xx events -->
|
||||
<value name="WT_DONE_TS" value="8" variants="A5XX-"/>
|
||||
<value name="START_FRAGMENT_CTRS" value="13" variants="A5XX-"/>
|
||||
<value name="STOP_FRAGMENT_CTRS" value="14" variants="A5XX-"/>
|
||||
<value name="START_COMPUTE_CTRS" value="15" variants="A5XX-"/>
|
||||
<value name="STOP_COMPUTE_CTRS" value="16" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_0" value="17" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_1" value="18" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_2" value="19" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_3" value="20" variants="A5XX-"/>
|
||||
<value name="WT_DONE_TS" value="0x08" variants="A5XX-A6XX"/>
|
||||
<value name="START_FRAGMENT_CTRS" value="0x0d" variants="A5XX-"/>
|
||||
<value name="STOP_FRAGMENT_CTRS" value="0x0e" variants="A5XX-"/>
|
||||
<value name="START_COMPUTE_CTRS" value="0x0f" variants="A5XX-"/>
|
||||
<value name="STOP_COMPUTE_CTRS" value="0x10" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_0" value="0x11" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_1" value="0x12" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_2" value="0x13" variants="A5XX-"/>
|
||||
<value name="FLUSH_SO_3" value="0x14" variants="A5XX-"/>
|
||||
|
||||
<doc>
|
||||
Invalidates depth attachment data from the CCU. We assume this
|
||||
happens in the last stage.
|
||||
</doc>
|
||||
<value name="PC_CCU_INVALIDATE_DEPTH" value="24" variants="A5XX-"/>
|
||||
<value name="PC_CCU_INVALIDATE_DEPTH" value="0x18" variants="A5XX-A6XX"/>
|
||||
|
||||
<doc>
|
||||
Invalidates color attachment data from the CCU. We assume this
|
||||
happens in the last stage.
|
||||
</doc>
|
||||
<value name="PC_CCU_INVALIDATE_COLOR" value="25" variants="A5XX-"/>
|
||||
<value name="PC_CCU_INVALIDATE_COLOR" value="0x19" variants="A5XX-A6XX"/>
|
||||
|
||||
<doc>
|
||||
Flushes the small cache used by CP_EVENT_WRITE::BLIT (which,
|
||||
along with its registers, would be better named RESOLVE).
|
||||
</doc>
|
||||
<value name="PC_CCU_RESOLVE_TS" value="26" variants="A6XX"/>
|
||||
<value name="PC_CCU_RESOLVE_TS" value="0x1a" variants="A6XX"/>
|
||||
|
||||
<doc>
|
||||
Flushes depth attachment data from the CCU. We assume this
|
||||
happens in the last stage.
|
||||
</doc>
|
||||
<value name="PC_CCU_FLUSH_DEPTH_TS" value="28" variants="A5XX-"/>
|
||||
<value name="PC_CCU_FLUSH_DEPTH_TS" value="0x1c" variants="A5XX-A6XX"/>
|
||||
|
||||
<doc>
|
||||
Flushes color attachment data from the CCU. We assume this
|
||||
happens in the last stage.
|
||||
</doc>
|
||||
<value name="PC_CCU_FLUSH_COLOR_TS" value="29" variants="A5XX-"/>
|
||||
<value name="PC_CCU_FLUSH_COLOR_TS" value="0x1d" variants="A5XX-A6XX"/>
|
||||
|
||||
<doc>
|
||||
2D blit to resolve GMEM to system memory (skipping CCU) at the
|
||||
end of a render pass. Compare to CP_BLIT's BLIT_OP_SCALE for
|
||||
more general blitting.
|
||||
Triggers a resolve (GMEM to sysmem) or unresolve (sysmem to
|
||||
GMEM) or clear blit, depending on CCU programming.
|
||||
</doc>
|
||||
<value name="BLIT" value="30" variants="A5XX-"/>
|
||||
<value name="CCU_RESOLVE" value="0x1e" variants="A5XX-"/>
|
||||
|
||||
<doc>
|
||||
Flip between the primary and secondary LRZ buffers. This is used
|
||||
for concurrent binning, so that BV can write to one buffer while
|
||||
BR reads from the other.
|
||||
</doc>
|
||||
<value name="LRZ_FLIP_BUFFER" value="36" variants="A7XX"/>
|
||||
<value name="LRZ_FLIP_BUFFER" value="0x24" variants="A7XX-"/>
|
||||
|
||||
<doc>
|
||||
Clears based on GRAS_LRZ_CNTL configuration, could clear
|
||||
|
|
@ -115,44 +114,46 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
CUR_DIR_UNSET = 0x3
|
||||
Clear of direction means setting the direction to CUR_DIR_UNSET.
|
||||
</doc>
|
||||
<value name="LRZ_CLEAR" value="37" variants="A5XX-"/>
|
||||
<value name="LRZ_CLEAR" value="0x25" variants="A5XX-"/>
|
||||
|
||||
<value name="LRZ_FLUSH" value="38" variants="A5XX-"/>
|
||||
<value name="BLIT_OP_FILL_2D" value="39" variants="A5XX-"/>
|
||||
<value name="BLIT_OP_COPY_2D" value="40" variants="A5XX-A6XX"/>
|
||||
<value name="LRZ_CACHE_INVALIDATE" value="40" variants="A7XX"/>
|
||||
<value name="LRZ_Q_CACHE_INVALIDATE" value="41" variants="A7XX"/>
|
||||
<value name="BLIT_OP_SCALE_2D" value="42" variants="A5XX-"/>
|
||||
<value name="CONTEXT_DONE_2D" value="43" variants="A5XX-"/>
|
||||
<value name="VSC_BINNING_START" value="44" variants="A5XX-"/>
|
||||
<value name="VSC_BINNING_END" value="45" variants="A5XX-"/>
|
||||
<value name="LRZ_FLUSH_INVALIDATE" value="0x26" variants="A5XX-A6XX"/>
|
||||
<value name="LRZ_CACHE_FLUSH" value="0x26" variants="A7XX-"/>
|
||||
<value name="BLIT_OP_FILL_2D" value="0x27" variants="A5XX-A6XX"/>
|
||||
<value name="BLIT_OP_COPY_2D" value="0x28" variants="A5XX-A6XX"/>
|
||||
<value name="LRZ_CACHE_INVALIDATE" value="0x28" variants="A7XX-"/>
|
||||
<value name="LRZ_Q_CACHE_INVALIDATE" value="0x29" variants="A7XX-"/>
|
||||
<value name="BLIT_OP_SCALE_2D" value="0x2a" variants="A5XX-"/>
|
||||
<value name="CONTEXT_DONE_2D" value="0x2b" variants="A5XX-"/>
|
||||
<value name="VSC_BINNING_START" value="0x2c" variants="A5XX-"/>
|
||||
<value name="VSC_BINNING_END" value="0x2d" variants="A5XX-"/>
|
||||
|
||||
<!-- a6xx events -->
|
||||
<doc>
|
||||
Invalidates UCHE.
|
||||
</doc>
|
||||
<value name="CACHE_INVALIDATE" value="49" variants="A6XX"/>
|
||||
<value name="CACHE_INVALIDATE" value="0x31" variants="A6XX"/>
|
||||
|
||||
<value name="LABEL" value="63" variants="A6XX-"/>
|
||||
<value name="DEBUG_LABEL" value="0x3f" variants="A6XX-"/>
|
||||
|
||||
<!-- note, some of these are the same as a6xx, just named differently -->
|
||||
|
||||
<doc> Doesn't seem to do anything </doc>
|
||||
<value name="DUMMY_EVENT" value="1" variants="A7XX"/>
|
||||
<value name="CCU_INVALIDATE_DEPTH" value="24" variants="A7XX"/>
|
||||
<value name="CCU_INVALIDATE_COLOR" value="25" variants="A7XX"/>
|
||||
<value name="CCU_RESOLVE_CLEAN" value="26" variants="A7XX"/>
|
||||
<value name="CCU_FLUSH_DEPTH" value="28" variants="A7XX"/>
|
||||
<value name="CCU_FLUSH_COLOR" value="29" variants="A7XX"/>
|
||||
<value name="CCU_RESOLVE" value="30" variants="A7XX"/>
|
||||
<value name="CCU_END_RESOLVE_GROUP" value="31" variants="A7XX"/>
|
||||
<value name="CCU_CLEAN_DEPTH" value="32" variants="A7XX"/>
|
||||
<value name="CCU_CLEAN_COLOR" value="33" variants="A7XX"/>
|
||||
<value name="CACHE_RESET" value="48" variants="A7XX"/>
|
||||
<value name="CACHE_CLEAN" value="49" variants="A7XX"/>
|
||||
<value name="DUMMY_EVENT" value="0x01" variants="A7XX-"/>
|
||||
<value name="CCU_INVALIDATE_DEPTH" value="0x18" variants="A7XX-"/>
|
||||
<value name="CCU_INVALIDATE_COLOR" value="0x19" variants="A7XX-"/>
|
||||
<value name="CCU_RESOLVE_CLEAN" value="0x1a" variants="A7XX-"/>
|
||||
<value name="CCU_FLUSH_DEPTH" value="0x1c" variants="A7XX-"/>
|
||||
<value name="CCU_FLUSH_COLOR" value="0x1d" variants="A7XX-"/>
|
||||
<value name="CCU_END_RESOLVE_GROUP" value="0x1f" variants="A7XX-"/>
|
||||
<value name="CCU_CLEAN_DEPTH" value="0x20" variants="A7XX-"/>
|
||||
<value name="CCU_CLEAN_COLOR" value="0x21" variants="A7XX-"/>
|
||||
<value name="CACHE_RESET" value="0x30" variants="A7XX-"/>
|
||||
<value name="CACHE_CLEAN" value="0x31" variants="A7XX-"/>
|
||||
<!-- TODO: deal with name conflicts with other gens -->
|
||||
<value name="CACHE_FLUSH7" value="50" variants="A7XX"/>
|
||||
<value name="CACHE_INVALIDATE7" value="51" variants="A7XX"/>
|
||||
<value name="CACHE_FLUSH7" value="0x32" variants="A7XX-"/>
|
||||
<value name="CACHE_INVALIDATE7" value="0x33" variants="A7XX-"/>
|
||||
<value name="DEPTH_BUFFER_FLIP" value="0x3d" variants="A8XX-"/>
|
||||
<value name="CCH_FAST_CLEAR_CLEAN" value="0x1b" variants="A8XX-"/>
|
||||
</enum>
|
||||
|
||||
<enum name="pc_di_primtype">
|
||||
|
|
@ -310,11 +311,11 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<value name="CP_EVENT_WRITE" value="0x46" variants="A2XX-A6XX"/>
|
||||
<value name="CP_EVENT_WRITE7" value="0x46" variants="A7XX-"/>
|
||||
<doc>generate a VS|PS_done event</doc>
|
||||
<value name="CP_EVENT_WRITE_SHD" value="0x58"/>
|
||||
<value name="CP_EVENT_WRITE_SHD" value="0x58" variants="A2XX"/>
|
||||
<doc>generate a cache flush done event</doc>
|
||||
<value name="CP_EVENT_WRITE_CFL" value="0x59"/>
|
||||
<value name="CP_EVENT_WRITE_CFL" value="0x59" variants="A2XX"/>
|
||||
<doc>generate a z_pass done event</doc>
|
||||
<value name="CP_EVENT_WRITE_ZPD" value="0x5b"/>
|
||||
<value name="CP_EVENT_WRITE_ZPD" value="0x5b" variants="A2XX"/>
|
||||
<doc>
|
||||
not sure the real name, but this seems to be what is used for
|
||||
opencl, instead of CP_DRAW_INDX..
|
||||
|
|
@ -335,9 +336,9 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<doc>load constant into chip and to memory</doc>
|
||||
<value name="CP_SET_CONSTANT" value="0x2d" variants="A2XX"/>
|
||||
<doc>load sequencer instruction memory (pointer-based)</doc>
|
||||
<value name="CP_IM_LOAD" value="0x27"/>
|
||||
<value name="CP_IM_LOAD" value="0x27" variants="A2XX"/>
|
||||
<doc>load sequencer instruction memory (code embedded in packet)</doc>
|
||||
<value name="CP_IM_LOAD_IMMEDIATE" value="0x2b"/>
|
||||
<value name="CP_IM_LOAD_IMMEDIATE" value="0x2b" variants="A2XX"/>
|
||||
<doc>load constants from a location in memory</doc>
|
||||
<value name="CP_LOAD_CONSTANT_CONTEXT" value="0x2e" variants="A2XX"/>
|
||||
<doc>selective invalidation of state pointers</doc>
|
||||
|
|
@ -662,6 +663,12 @@ xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
|
|||
<value name="CP_CCHE_INVALIDATE" value="0x3a" variants="A7XX-"/>
|
||||
|
||||
<value name="CP_SCOPE_CNTL" value="0x6c" variants="A7XX-"/>
|
||||
|
||||
<value name="CP_SKIP_IB_MODE" value="0x27" variants="A7XX-"/>
|
||||
|
||||
<value name="CP_MEMORY_MAP_UPDATE" value="0x58" variants="A8XX-"/>
|
||||
|
||||
<value name="CP_BARRIER" value="0x59" variants="A8XX-"/>
|
||||
</enum>
|
||||
|
||||
|
||||
|
|
@ -1800,49 +1807,73 @@ opcode: CP_LOAD_STATE4 (30) (4 dwords)
|
|||
<value value="6" name="RM6_BIN_RESOLVE"/>
|
||||
<value value="7" name="RM6_BIN_RENDER_END"/>
|
||||
<value value="8" name="RM6_COMPUTE"/>
|
||||
<value value="0xc" name="RM6_BLIT2DSCALE"/> <!-- no-op (at least on current sqe fw) -->
|
||||
<value value="12" name="RM6_BLIT2DSCALE"/> <!-- no-op (at least on current sqe fw) -->
|
||||
|
||||
<!--
|
||||
These values come from a6xx_set_marker() in the
|
||||
downstream kernel, and they can only be set by the kernel
|
||||
-->
|
||||
<value value="0xd" name="RM6_IB1LIST_START"/>
|
||||
<value value="0xe" name="RM6_IB1LIST_END"/>
|
||||
<value value="13" name="RM6_IB1LIST_START"/>
|
||||
<value value="14" name="RM6_IB1LIST_END"/>
|
||||
<value value="15" name="RM7_BIN_VISIBILITY_END"/>
|
||||
|
||||
<!-- new in a8xx: -->
|
||||
<value value="32" name="RM8_DEPTH_PASS_START"/>
|
||||
<value value="33" name="RM8_DEPTH_PASS_END"/>
|
||||
<value value="34" name="RM8_SET_RENDER_TARGET"/>
|
||||
<value value="35" name="RM8_PGMEM_ON"/>
|
||||
<value value="36" name="RM8_PGMEM_OFF"/>
|
||||
</enum>
|
||||
<reg32 offset="0" name="0">
|
||||
<!-- if b8 is set, the low bits are interpreted differently (and b4 ignored) -->
|
||||
<bitfield name="MARKER_MODE" pos="8" type="set_marker_mode" addvariant="yes"/>
|
||||
<stripe varset="chip" variants="A6XX-A7XX">
|
||||
<reg32 offset="0" name="0">
|
||||
<!-- if b8 is set, the low bits are interpreted differently (and b4 ignored) -->
|
||||
<bitfield name="MARKER_MODE" pos="8" type="set_marker_mode" addvariant="yes"/>
|
||||
|
||||
<bitfield name="MODE" low="0" high="3" type="a6xx_marker" varset="set_marker_mode" variants="SET_RENDER_MODE"/>
|
||||
<!-- used by preemption to determine if GMEM needs to be saved or not -->
|
||||
<bitfield name="USES_GMEM" pos="4" type="boolean" varset="set_marker_mode" variants="SET_RENDER_MODE"/>
|
||||
|
||||
<bitfield name="IFPC_MODE" pos="0" type="a6xx_ifpc_mode" varset="set_marker_mode" variants="SET_IFPC_MODE"/>
|
||||
<bitfield name="MODE" low="0" high="3" type="a6xx_marker" varset="set_marker_mode" variants="SET_RENDER_MODE"/>
|
||||
<!-- used by preemption to determine if GMEM needs to be saved or not -->
|
||||
<bitfield name="USES_GMEM" pos="4" type="boolean" varset="set_marker_mode" variants="SET_RENDER_MODE"/>
|
||||
|
||||
<!--
|
||||
CP_SET_MARKER is used with these bits to create a
|
||||
critical section around a workaround for ray tracing.
|
||||
The workaround happens after BVH building, and appears
|
||||
to invalidate the RTU's BVH node cache. It makes sure
|
||||
that only one of BR/BV/LPAC is executing the
|
||||
workaround at a time, and no draws using RT on BV/LPAC
|
||||
are executing while the workaround is executed on BR (or
|
||||
vice versa, that no draws on BV/BR using RT are executed
|
||||
while the workaround executes on LPAC), by
|
||||
hooking subsequent CP_EVENT_WRITE/CP_DRAW_*/CP_EXEC_CS.
|
||||
The blob usage is:
|
||||
|
||||
CP_SET_MARKER(RT_WA_START)
|
||||
... workaround here ...
|
||||
CP_SET_MARKER(RT_WA_END)
|
||||
...
|
||||
CP_SET_MARKER(SHADER_USES_RT)
|
||||
CP_DRAW_INDX(...) or CP_EXEC_CS(...)
|
||||
-->
|
||||
<bitfield name="SHADER_USES_RT" pos="9" type="boolean" variants="A7XX-"/>
|
||||
<bitfield name="RT_WA_START" pos="10" type="boolean" variants="A7XX-"/>
|
||||
<bitfield name="RT_WA_END" pos="11" type="boolean" variants="A7XX-"/>
|
||||
</reg32>
|
||||
<bitfield name="IFPC_MODE" pos="0" type="a6xx_ifpc_mode" varset="set_marker_mode" variants="SET_IFPC_MODE"/>
|
||||
|
||||
|
||||
<!--
|
||||
CP_SET_MARKER is used with these bits to create a
|
||||
critical section around a workaround for ray tracing.
|
||||
The workaround happens after BVH building, and appears
|
||||
to invalidate the RTU's BVH node cache. It makes sure
|
||||
that only one of BR/BV/LPAC is executing the
|
||||
workaround at a time, and no draws using RT on BV/LPAC
|
||||
are executing while the workaround is executed on BR (or
|
||||
vice versa, that no draws on BV/BR using RT are executed
|
||||
while the workaround executes on LPAC), by
|
||||
hooking subsequent CP_EVENT_WRITE/CP_DRAW_*/CP_EXEC_CS.
|
||||
The blob usage is:
|
||||
|
||||
|
||||
CP_SET_MARKER(RT_WA_START)
|
||||
... workaround here ...
|
||||
CP_SET_MARKER(RT_WA_END)
|
||||
...
|
||||
CP_SET_MARKER(SHADER_USES_RT)
|
||||
CP_DRAW_INDX(...) or CP_EXEC_CS(...)
|
||||
-->
|
||||
<bitfield name="SHADER_USES_RT" pos="9" type="boolean" variants="A7XX-"/>
|
||||
<bitfield name="RT_WA_START" pos="10" type="boolean" variants="A7XX-"/>
|
||||
<bitfield name="RT_WA_END" pos="11" type="boolean" variants="A7XX-"/>
|
||||
</reg32>
|
||||
</stripe>
|
||||
<stripe varset="chip" variants="A8XX-">
|
||||
<reg32 offset="0" name="0">
|
||||
<!-- if b8 is set, the low bits are interpreted differently (and b4 ignored) -->
|
||||
<bitfield name="MARKER_MODE" pos="8" type="set_marker_mode" addvariant="yes"/>
|
||||
<bitfield name="MODE" low="0" high="6" type="a6xx_marker" varset="set_marker_mode" variants="SET_RENDER_MODE"/>
|
||||
<bitfield name="USES_GMEM" pos="7" type="boolean" varset="set_marker_mode" variants="SET_RENDER_MODE"/>
|
||||
<bitfield name="IFPC_MODE" pos="0" type="a6xx_ifpc_mode" varset="set_marker_mode" variants="SET_IFPC_MODE"/>
|
||||
<!-- idk if the RT w/a fields apply to a8xx as well -->
|
||||
</reg32>
|
||||
</stripe>
|
||||
</domain>
|
||||
|
||||
<domain name="CP_SET_PSEUDO_REG" width="32" varset="chip" prefix="chip" variants="A6XX-">
|
||||
|
|
@ -2066,6 +2097,14 @@ opcode: CP_LOAD_STATE4 (30) (4 dwords)
|
|||
payload *and* skipsaverestore is set. This is
|
||||
expected to restore static register values not
|
||||
saved when skipsaverestore is set.
|
||||
|
||||
On BV, a skipsaverestore preemption is triggered
|
||||
and this preamble type is executed whenever a
|
||||
CP_THREAD_CONTROL that synchronizes threads
|
||||
happens. This can be explicitly via
|
||||
SYNC_THREADS, or implicitly when the value of
|
||||
CONCURRENT_BIN_DISABLE changes from the previous
|
||||
thread control.
|
||||
</doc>
|
||||
</value>
|
||||
<value name="POSTAMBLE_AMBLE_TYPE" value="2">
|
||||
|
|
@ -2308,5 +2347,99 @@ opcode: CP_LOAD_STATE4 (30) (4 dwords)
|
|||
</reg32>
|
||||
</domain>
|
||||
|
||||
<domain name="CP_RESOURCE_LIST" width="32">
|
||||
<doc>
|
||||
A7xx introduces the "resource table" which is managed by
|
||||
CP_RESOURCE_LIST. It is used to synchronize BR and BV access
|
||||
to resources such as LRZ buffers.
|
||||
|
||||
The resource table consists of resources that are in-use by BR.
|
||||
Each "resource" has a base address, which is
|
||||
usually a pointer but is treated by the HW as an opaque handle,
|
||||
a read/write bit, and a timestamp when it was last used.
|
||||
Resources are removed from the table upon event completion when
|
||||
a special CP_EVENT_WRITE::CLEAR_RENDER_RESOURCE bit is set, which
|
||||
will remove all resources with a timestamp up to the current
|
||||
timestamp.
|
||||
|
||||
CP_RESOURCE_LIST first specifies a list of BV resources. For
|
||||
each BV resource, the HW will check if there is a corresponding
|
||||
BR resource in the table, and if at least one of the BV and BR
|
||||
resources is marked WRITE then it will stall until the BR
|
||||
resource is removed.
|
||||
|
||||
It then specifies a list of BR resources. These will be added to
|
||||
the resource table, unless there is an overflow in which case
|
||||
the designated overflow register will have bit 0 set. Overflow
|
||||
should cause the next binning pass to stall until BR is done,
|
||||
effectively disabling concurrent binning.
|
||||
|
||||
CP_RESOURCE_LIST must be executed by BV. BR resources are added
|
||||
by BV and removed by BR.
|
||||
|
||||
There is a separate table for "LRZ resources." These behave a
|
||||
bit differently: specifying an LRZ resource via BV_RES_LRZ
|
||||
stalls on any matching resource existing and then adds it to the
|
||||
table, making it both a BV and BR resource in one. There is a
|
||||
separate CLEAR_LRZ_RESOURCE bit for removing resources from the
|
||||
LRZ table, and it only removes one resource given by a base
|
||||
address passed to CP_EVENT_WRITE. Therefore timestamps are
|
||||
unnecessary.
|
||||
</doc>
|
||||
<reg32 offset="0" name="BV_COUNT" type="uint"/>
|
||||
<doc>
|
||||
What follows is a list of CP_BV_RESOURCE and then CP_RESOURCE_LIST_BR.
|
||||
</doc>
|
||||
</domain>
|
||||
|
||||
<domain name="CP_BV_RESOURCE" width="32">
|
||||
<doc>
|
||||
BV resources don't go in the table. Instead CP waits until any
|
||||
corresponding BR resources with the same base pointer are
|
||||
finished before the packet completes.
|
||||
</doc>
|
||||
<enum name="cp_bv_resource_encoding">
|
||||
<value value="0" name="BV_RES_DIRECT"/>
|
||||
<doc>
|
||||
INDIRECT resources are encoded as a 32b offset + 3b
|
||||
bindless base selector. The offset is added to the given
|
||||
BINDLESS_BASE pseudoregister and then the 64b value
|
||||
fetched there is used as the pointer.
|
||||
</doc>
|
||||
<value value="1" name="BV_RES_INDIRECT_READ"/>
|
||||
<value value="2" name="BV_RES_LRZ"/>
|
||||
<value value="3" name="BV_RES_INDIRECT_WRITE"/>
|
||||
</enum>
|
||||
<reg64 offset="0" name="0">
|
||||
<bitfield name="BASE_ADDR" low="1" high="61" shr="1" type="address"/>
|
||||
<bitfield name="WRITE" pos="0" type="boolean"/>
|
||||
<bitfield name="ENCODING" low="62" high="63" type="cp_bv_resource_encoding"/>
|
||||
</reg64>
|
||||
</domain>
|
||||
|
||||
<domain name="CP_RESOURCE_LIST_BR" width="32">
|
||||
<reg32 offset="0" name="0">
|
||||
<bitfield name="BR_COUNT" low="0" high="23" type="uint"/>
|
||||
<bitfield name="OVERFLOW_ONCHIP_ADDR" low="24" high="26"/>
|
||||
<bitfield name="OVERFLOW" pos="31" type="boolean"/>
|
||||
</reg32>
|
||||
<doc>
|
||||
What follows is a list of CP_BR_RESOURCE.
|
||||
</doc>
|
||||
</domain>
|
||||
|
||||
<domain name="CP_BR_RESOURCE" width="32">
|
||||
<enum name="cp_br_resource_encoding">
|
||||
<value value="0" name="BR_RES_DIRECT"/>
|
||||
<value value="2" name="BR_RES_INDIRECT_READ"/>
|
||||
<value value="3" name="BR_RES_INDIRECT_WRITE"/> <!-- set WRITE bit -->
|
||||
</enum>
|
||||
<reg64 offset="0" name="0">
|
||||
<bitfield name="BASE_ADDR" low="1" high="61" shr="1" type="address"/>
|
||||
<bitfield name="WRITE" pos="0" type="boolean"/>
|
||||
<bitfield name="ENCODING" low="62" high="63" type="cp_br_resource_encoding"/>
|
||||
</reg64>
|
||||
</domain>
|
||||
|
||||
</database>
|
||||
|
||||
|
|
|
|||
|
|
@ -189,12 +189,13 @@ class Bitset(object):
|
|||
print(" return (struct fd_reg_pair) {")
|
||||
print(" .reg = (uint32_t)%s," % reg.reg_offset())
|
||||
print(" .value =")
|
||||
cast = "(uint64_t)" if reg.bit_size == 64 else ""
|
||||
for f in self.fields:
|
||||
if f.type in [ "address", "waddress" ]:
|
||||
continue
|
||||
else:
|
||||
type, val = f.ctype("fields.%s" % field_name(reg, f))
|
||||
print(" (%-40s << %2d) |" % (val, f.low))
|
||||
print(" (%s%-40s << %2d) |" % (cast, val, f.low))
|
||||
value_name = "dword"
|
||||
if reg.bit_size == 64:
|
||||
value_name = "qword"
|
||||
|
|
@ -264,10 +265,11 @@ class Bitset(object):
|
|||
(prefix, prefix, prefix, skip))
|
||||
|
||||
|
||||
def dump(self, is_deprecated, prefix=None):
|
||||
def dump(self, is_deprecated, prefix=None, reg=None):
|
||||
if prefix is None:
|
||||
prefix = self.name
|
||||
if self.reg and self.reg.bit_size == 64:
|
||||
reg64 = reg and self.reg and self.reg.bit_size == 64
|
||||
if reg64:
|
||||
print("static inline uint32_t %s_LO(uint32_t val)\n{" % prefix)
|
||||
print("\treturn val;\n}")
|
||||
print("static inline uint32_t %s_HI(uint32_t val)\n{" % prefix)
|
||||
|
|
@ -283,14 +285,17 @@ class Bitset(object):
|
|||
elif f.type == "boolean" or (f.type is None and f.low == f.high):
|
||||
tab_to("#define %s" % name, "0x%08x" % (1 << f.low))
|
||||
else:
|
||||
tab_to("#define %s__MASK" % name, "0x%08x" % mask(f.low, f.high))
|
||||
typespec = "ull" if reg64 else "u"
|
||||
tab_to("#define %s__MASK" % name, "0x%08x%s" % (mask(f.low, f.high), typespec))
|
||||
tab_to("#define %s__SHIFT" % name, "%d" % f.low)
|
||||
type, val = f.ctype("val")
|
||||
ret_type = "uint64_t" if reg64 else "uint32_t"
|
||||
cast = "(uint64_t)" if reg64 else ""
|
||||
|
||||
print("static inline uint32_t %s(%s val)\n{" % (name, type))
|
||||
print("static inline %s %s(%s val)\n{" % (ret_type, name, type))
|
||||
if f.shr > 0:
|
||||
print("\tassert(!(val & 0x%x));" % mask(0, f.shr - 1))
|
||||
print("\treturn ((%s) << %s__SHIFT) & %s__MASK;\n}" % (val, name, name))
|
||||
print("\treturn (%s(%s) << %s__SHIFT) & %s__MASK;\n}" % (cast, val, name, name))
|
||||
print()
|
||||
|
||||
class Array(object):
|
||||
|
|
@ -437,7 +442,7 @@ class Reg(object):
|
|||
print("static inline%s uint32_t REG_%s(%s) { return 0x%08x + %s; }" % (depcrstr, self.full_name, proto, offset, strides))
|
||||
|
||||
if self.bitset.inline:
|
||||
self.bitset.dump(is_deprecated, self.full_name)
|
||||
self.bitset.dump(is_deprecated, self.full_name, self)
|
||||
print("")
|
||||
|
||||
def dump_pack_struct(self, is_deprecated):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user