mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'drm-msm-next-2024-05-07' of https://gitlab.freedesktop.org/drm/msm into drm-next
Updates for v6.10 Core: - Switched to generating register header files during build process instead of shipping pre-generated headers - Merged DPU and MDP4 format databases. DP: - Stop using compat string to distinguish DP and eDP cases - Added support for X Elite platform (X1E80100) - Reworked DP aux/audio support - Added SM6350 DP to the bindings (no driver changes, using SM8350 as a fallback compat) GPU: - a7xx perfcntr reg fixes - MAINTAINERS updates - a750 devcoredump support Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rob Clark <robdclark@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/CAF6AEGtpw6dNR9JBikFTQ=TCpt-9FeFW+SGjXWv+Jv3emm0Pbg@mail.gmail.com
This commit is contained in:
@@ -29,6 +29,7 @@ properties:
|
||||
- qcom,sm8650-dp
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sm6350-dp
|
||||
- qcom,sm8150-dp
|
||||
- qcom,sm8250-dp
|
||||
- qcom,sm8450-dp
|
||||
|
||||
@@ -53,6 +53,15 @@ patternProperties:
|
||||
compatible:
|
||||
const: qcom,sm6350-dpu
|
||||
|
||||
"^displayport-controller@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: qcom,sm6350-dp
|
||||
|
||||
"^dsi@[0-9a-f]+$":
|
||||
type: object
|
||||
additionalProperties: true
|
||||
|
||||
20
MAINTAINERS
20
MAINTAINERS
@@ -6816,7 +6816,25 @@ T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
|
||||
F: Documentation/devicetree/bindings/display/panel/panel-mipi-dbi-spi.yaml
|
||||
F: drivers/gpu/drm/tiny/panel-mipi-dbi.c
|
||||
|
||||
DRM DRIVER FOR MSM ADRENO GPU
|
||||
DRM DRIVER for Qualcomm Adreno GPUs
|
||||
M: Rob Clark <robdclark@gmail.com>
|
||||
R: Sean Paul <sean@poorly.run>
|
||||
R: Konrad Dybcio <konrad.dybcio@linaro.org>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
L: freedreno@lists.freedesktop.org
|
||||
S: Maintained
|
||||
B: https://gitlab.freedesktop.org/drm/msm/-/issues
|
||||
T: git https://gitlab.freedesktop.org/drm/msm.git
|
||||
F: Documentation/devicetree/bindings/display/msm/gpu.yaml
|
||||
F: drivers/gpu/drm/msm/adreno/
|
||||
F: drivers/gpu/drm/msm/msm_gpu.*
|
||||
F: drivers/gpu/drm/msm/msm_gpu_devfreq.*
|
||||
F: drivers/gpu/drm/msm/msm_ringbuffer.*
|
||||
F: drivers/gpu/drm/msm/registers/adreno/
|
||||
F: include/uapi/drm/msm_drm.h
|
||||
|
||||
DRM DRIVER for Qualcomm display hardware
|
||||
M: Rob Clark <robdclark@gmail.com>
|
||||
M: Abhinav Kumar <quic_abhinavk@quicinc.com>
|
||||
M: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
||||
|
||||
1
drivers/gpu/drm/msm/.gitignore
vendored
Normal file
1
drivers/gpu/drm/msm/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
generated/
|
||||
@@ -54,6 +54,14 @@ config DRM_MSM_GPU_SUDO
|
||||
Only use this if you are a driver developer. This should *not*
|
||||
be enabled for production kernels. If unsure, say N.
|
||||
|
||||
config DRM_MSM_VALIDATE_XML
|
||||
bool "Validate XML register files against schema"
|
||||
depends on DRM_MSM && EXPERT
|
||||
depends on $(success,$(PYTHON3) -c "import lxml")
|
||||
help
|
||||
Validate XML files with register definitions against rules-fd schema.
|
||||
This option is mostly targeting DRM MSM developers. If unsure, say N.
|
||||
|
||||
config DRM_MSM_MDSS
|
||||
bool
|
||||
depends on DRM_MSM
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
ccflags-y := -I $(srctree)/$(src)
|
||||
ccflags-y += -I $(obj)/generated
|
||||
ccflags-y += -I $(srctree)/$(src)/disp/dpu1
|
||||
ccflags-$(CONFIG_DRM_MSM_DSI) += -I $(srctree)/$(src)/dsi
|
||||
ccflags-$(CONFIG_DRM_MSM_DP) += -I $(srctree)/$(src)/dp
|
||||
|
||||
msm-y := \
|
||||
adreno-y := \
|
||||
adreno/adreno_device.o \
|
||||
adreno/adreno_gpu.o \
|
||||
adreno/a2xx_gpu.o \
|
||||
adreno/a2xx_gpummu.o \
|
||||
adreno/a3xx_gpu.o \
|
||||
adreno/a4xx_gpu.o \
|
||||
adreno/a5xx_gpu.o \
|
||||
@@ -17,7 +19,11 @@ msm-y := \
|
||||
adreno/a6xx_gmu.o \
|
||||
adreno/a6xx_hfi.o \
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_HDMI) += \
|
||||
adreno-$(CONFIG_DEBUG_FS) += adreno/a5xx_debugfs.o \
|
||||
|
||||
adreno-$(CONFIG_DRM_MSM_GPU_STATE) += adreno/a6xx_gpu_state.o
|
||||
|
||||
msm-display-$(CONFIG_DRM_MSM_HDMI) += \
|
||||
hdmi/hdmi.o \
|
||||
hdmi/hdmi_audio.o \
|
||||
hdmi/hdmi_bridge.o \
|
||||
@@ -30,7 +36,7 @@ msm-$(CONFIG_DRM_MSM_HDMI) += \
|
||||
hdmi/hdmi_phy_8x74.o \
|
||||
hdmi/hdmi_pll_8960.o \
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_MDP4) += \
|
||||
msm-display-$(CONFIG_DRM_MSM_MDP4) += \
|
||||
disp/mdp4/mdp4_crtc.o \
|
||||
disp/mdp4/mdp4_dsi_encoder.o \
|
||||
disp/mdp4/mdp4_dtv_encoder.o \
|
||||
@@ -41,7 +47,7 @@ msm-$(CONFIG_DRM_MSM_MDP4) += \
|
||||
disp/mdp4/mdp4_kms.o \
|
||||
disp/mdp4/mdp4_plane.o \
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_MDP5) += \
|
||||
msm-display-$(CONFIG_DRM_MSM_MDP5) += \
|
||||
disp/mdp5/mdp5_cfg.o \
|
||||
disp/mdp5/mdp5_cmd_encoder.o \
|
||||
disp/mdp5/mdp5_ctl.o \
|
||||
@@ -54,7 +60,7 @@ msm-$(CONFIG_DRM_MSM_MDP5) += \
|
||||
disp/mdp5/mdp5_plane.o \
|
||||
disp/mdp5/mdp5_smp.o \
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_DPU) += \
|
||||
msm-display-$(CONFIG_DRM_MSM_DPU) += \
|
||||
disp/dpu1/dpu_core_perf.o \
|
||||
disp/dpu1/dpu_crtc.o \
|
||||
disp/dpu1/dpu_encoder.o \
|
||||
@@ -84,14 +90,16 @@ msm-$(CONFIG_DRM_MSM_DPU) += \
|
||||
disp/dpu1/dpu_vbif.o \
|
||||
disp/dpu1/dpu_writeback.o
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_MDSS) += \
|
||||
msm-display-$(CONFIG_DRM_MSM_MDSS) += \
|
||||
msm_mdss.o \
|
||||
|
||||
msm-y += \
|
||||
msm-display-y += \
|
||||
disp/mdp_format.o \
|
||||
disp/mdp_kms.o \
|
||||
disp/msm_disp_snapshot.o \
|
||||
disp/msm_disp_snapshot_util.o \
|
||||
|
||||
msm-y += \
|
||||
msm_atomic.o \
|
||||
msm_atomic_tracepoints.o \
|
||||
msm_debugfs.o \
|
||||
@@ -113,14 +121,13 @@ msm-y += \
|
||||
msm_ringbuffer.o \
|
||||
msm_submitqueue.o \
|
||||
msm_gpu_tracepoints.o \
|
||||
msm_gpummu.o
|
||||
|
||||
msm-$(CONFIG_DEBUG_FS) += adreno/a5xx_debugfs.o \
|
||||
msm-$(CONFIG_DRM_FBDEV_EMULATION) += msm_fbdev.o
|
||||
|
||||
msm-display-$(CONFIG_DEBUG_FS) += \
|
||||
dp/dp_debug.o
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_GPU_STATE) += adreno/a6xx_gpu_state.o
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_DP)+= dp/dp_aux.o \
|
||||
msm-display-$(CONFIG_DRM_MSM_DP)+= dp/dp_aux.o \
|
||||
dp/dp_catalog.o \
|
||||
dp/dp_ctrl.o \
|
||||
dp/dp_display.o \
|
||||
@@ -130,21 +137,76 @@ msm-$(CONFIG_DRM_MSM_DP)+= dp/dp_aux.o \
|
||||
dp/dp_audio.o \
|
||||
dp/dp_utils.o
|
||||
|
||||
msm-$(CONFIG_DRM_FBDEV_EMULATION) += msm_fbdev.o
|
||||
msm-display-$(CONFIG_DRM_MSM_HDMI_HDCP) += hdmi/hdmi_hdcp.o
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_HDMI_HDCP) += hdmi/hdmi_hdcp.o
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_DSI) += dsi/dsi.o \
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI) += dsi/dsi.o \
|
||||
dsi/dsi_cfg.o \
|
||||
dsi/dsi_host.o \
|
||||
dsi/dsi_manager.o \
|
||||
dsi/phy/dsi_phy.o
|
||||
|
||||
msm-$(CONFIG_DRM_MSM_DSI_28NM_PHY) += dsi/phy/dsi_phy_28nm.o
|
||||
msm-$(CONFIG_DRM_MSM_DSI_20NM_PHY) += dsi/phy/dsi_phy_20nm.o
|
||||
msm-$(CONFIG_DRM_MSM_DSI_28NM_8960_PHY) += dsi/phy/dsi_phy_28nm_8960.o
|
||||
msm-$(CONFIG_DRM_MSM_DSI_14NM_PHY) += dsi/phy/dsi_phy_14nm.o
|
||||
msm-$(CONFIG_DRM_MSM_DSI_10NM_PHY) += dsi/phy/dsi_phy_10nm.o
|
||||
msm-$(CONFIG_DRM_MSM_DSI_7NM_PHY) += dsi/phy/dsi_phy_7nm.o
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI_28NM_PHY) += dsi/phy/dsi_phy_28nm.o
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI_20NM_PHY) += dsi/phy/dsi_phy_20nm.o
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI_28NM_8960_PHY) += dsi/phy/dsi_phy_28nm_8960.o
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI_14NM_PHY) += dsi/phy/dsi_phy_14nm.o
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI_10NM_PHY) += dsi/phy/dsi_phy_10nm.o
|
||||
msm-display-$(CONFIG_DRM_MSM_DSI_7NM_PHY) += dsi/phy/dsi_phy_7nm.o
|
||||
|
||||
msm-y += $(adreno-y) $(msm-display-y)
|
||||
|
||||
obj-$(CONFIG_DRM_MSM) += msm.o
|
||||
|
||||
ifeq (y,$(CONFIG_DRM_MSM_VALIDATE_XML))
|
||||
headergen-opts += --validate
|
||||
else
|
||||
headergen-opts += --no-validate
|
||||
endif
|
||||
|
||||
quiet_cmd_headergen = GENHDR $@
|
||||
cmd_headergen = mkdir -p $(obj)/generated && $(PYTHON3) $(srctree)/$(src)/registers/gen_header.py \
|
||||
$(headergen-opts) --rnn $(srctree)/$(src)/registers --xml $< c-defines > $@
|
||||
|
||||
$(obj)/generated/%.xml.h: $(src)/registers/adreno/%.xml \
|
||||
$(src)/registers/adreno/adreno_common.xml \
|
||||
$(src)/registers/adreno/adreno_pm4.xml \
|
||||
$(src)/registers/freedreno_copyright.xml \
|
||||
$(src)/registers/gen_header.py \
|
||||
$(src)/registers/rules-fd.xsd \
|
||||
FORCE
|
||||
$(call if_changed,headergen)
|
||||
|
||||
$(obj)/generated/%.xml.h: $(src)/registers/display/%.xml \
|
||||
$(src)/registers/freedreno_copyright.xml \
|
||||
$(src)/registers/gen_header.py \
|
||||
$(src)/registers/rules-fd.xsd \
|
||||
FORCE
|
||||
$(call if_changed,headergen)
|
||||
|
||||
ADRENO_HEADERS = \
|
||||
generated/a2xx.xml.h \
|
||||
generated/a3xx.xml.h \
|
||||
generated/a4xx.xml.h \
|
||||
generated/a5xx.xml.h \
|
||||
generated/a6xx.xml.h \
|
||||
generated/a6xx_gmu.xml.h \
|
||||
generated/adreno_common.xml.h \
|
||||
generated/adreno_pm4.xml.h \
|
||||
|
||||
DISPLAY_HEADERS = \
|
||||
generated/dsi_phy_7nm.xml.h \
|
||||
generated/dsi_phy_10nm.xml.h \
|
||||
generated/dsi_phy_14nm.xml.h \
|
||||
generated/dsi_phy_20nm.xml.h \
|
||||
generated/dsi_phy_28nm_8960.xml.h \
|
||||
generated/dsi_phy_28nm.xml.h \
|
||||
generated/dsi.xml.h \
|
||||
generated/hdmi.xml.h \
|
||||
generated/mdp4.xml.h \
|
||||
generated/mdp5.xml.h \
|
||||
generated/mdp_common.xml.h \
|
||||
generated/sfpb.xml.h
|
||||
|
||||
$(addprefix $(obj)/,$(adreno-y)): $(addprefix $(obj)/,$(ADRENO_HEADERS))
|
||||
$(addprefix $(obj)/,$(msm-display-y)): $(addprefix $(obj)/,$(DISPLAY_HEADERS))
|
||||
|
||||
targets += $(ADRENO_HEADERS) $(DISPLAY_HEADERS)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -113,7 +113,7 @@ static int a2xx_hw_init(struct msm_gpu *gpu)
|
||||
uint32_t *ptr, len;
|
||||
int i, ret;
|
||||
|
||||
msm_gpummu_params(gpu->aspace->mmu, &pt_base, &tran_error);
|
||||
a2xx_gpummu_params(gpu->aspace->mmu, &pt_base, &tran_error);
|
||||
|
||||
DBG("%s", gpu->name);
|
||||
|
||||
@@ -469,7 +469,7 @@ static struct msm_gpu_state *a2xx_gpu_state_get(struct msm_gpu *gpu)
|
||||
static struct msm_gem_address_space *
|
||||
a2xx_create_address_space(struct msm_gpu *gpu, struct platform_device *pdev)
|
||||
{
|
||||
struct msm_mmu *mmu = msm_gpummu_new(&pdev->dev, gpu);
|
||||
struct msm_mmu *mmu = a2xx_gpummu_new(&pdev->dev, gpu);
|
||||
struct msm_gem_address_space *aspace;
|
||||
|
||||
aspace = msm_gem_address_space_create(mmu, "gpu", SZ_16M,
|
||||
|
||||
@@ -19,4 +19,8 @@ struct a2xx_gpu {
|
||||
};
|
||||
#define to_a2xx_gpu(x) container_of(x, struct a2xx_gpu, base)
|
||||
|
||||
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);
|
||||
|
||||
#endif /* __A2XX_GPU_H__ */
|
||||
|
||||
@@ -5,30 +5,33 @@
|
||||
|
||||
#include "msm_drv.h"
|
||||
#include "msm_mmu.h"
|
||||
#include "adreno/adreno_gpu.h"
|
||||
#include "adreno/a2xx.xml.h"
|
||||
|
||||
struct msm_gpummu {
|
||||
#include "adreno_gpu.h"
|
||||
#include "a2xx_gpu.h"
|
||||
|
||||
#include "a2xx.xml.h"
|
||||
|
||||
struct a2xx_gpummu {
|
||||
struct msm_mmu base;
|
||||
struct msm_gpu *gpu;
|
||||
dma_addr_t pt_base;
|
||||
uint32_t *table;
|
||||
};
|
||||
#define to_msm_gpummu(x) container_of(x, struct msm_gpummu, base)
|
||||
#define to_a2xx_gpummu(x) container_of(x, struct a2xx_gpummu, base)
|
||||
|
||||
#define GPUMMU_VA_START SZ_16M
|
||||
#define GPUMMU_VA_RANGE (0xfff * SZ_64K)
|
||||
#define GPUMMU_PAGE_SIZE SZ_4K
|
||||
#define TABLE_SIZE (sizeof(uint32_t) * GPUMMU_VA_RANGE / GPUMMU_PAGE_SIZE)
|
||||
|
||||
static void msm_gpummu_detach(struct msm_mmu *mmu)
|
||||
static void a2xx_gpummu_detach(struct msm_mmu *mmu)
|
||||
{
|
||||
}
|
||||
|
||||
static int msm_gpummu_map(struct msm_mmu *mmu, uint64_t iova,
|
||||
static int a2xx_gpummu_map(struct msm_mmu *mmu, uint64_t iova,
|
||||
struct sg_table *sgt, size_t len, int prot)
|
||||
{
|
||||
struct msm_gpummu *gpummu = to_msm_gpummu(mmu);
|
||||
struct a2xx_gpummu *gpummu = to_a2xx_gpummu(mmu);
|
||||
unsigned idx = (iova - GPUMMU_VA_START) / GPUMMU_PAGE_SIZE;
|
||||
struct sg_dma_page_iter dma_iter;
|
||||
unsigned prot_bits = 0;
|
||||
@@ -53,9 +56,9 @@ static int msm_gpummu_map(struct msm_mmu *mmu, uint64_t iova,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int msm_gpummu_unmap(struct msm_mmu *mmu, uint64_t iova, size_t len)
|
||||
static int a2xx_gpummu_unmap(struct msm_mmu *mmu, uint64_t iova, size_t len)
|
||||
{
|
||||
struct msm_gpummu *gpummu = to_msm_gpummu(mmu);
|
||||
struct a2xx_gpummu *gpummu = to_a2xx_gpummu(mmu);
|
||||
unsigned idx = (iova - GPUMMU_VA_START) / GPUMMU_PAGE_SIZE;
|
||||
unsigned i;
|
||||
|
||||
@@ -68,13 +71,13 @@ static int msm_gpummu_unmap(struct msm_mmu *mmu, uint64_t iova, size_t len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void msm_gpummu_resume_translation(struct msm_mmu *mmu)
|
||||
static void a2xx_gpummu_resume_translation(struct msm_mmu *mmu)
|
||||
{
|
||||
}
|
||||
|
||||
static void msm_gpummu_destroy(struct msm_mmu *mmu)
|
||||
static void a2xx_gpummu_destroy(struct msm_mmu *mmu)
|
||||
{
|
||||
struct msm_gpummu *gpummu = to_msm_gpummu(mmu);
|
||||
struct a2xx_gpummu *gpummu = to_a2xx_gpummu(mmu);
|
||||
|
||||
dma_free_attrs(mmu->dev, TABLE_SIZE, gpummu->table, gpummu->pt_base,
|
||||
DMA_ATTR_FORCE_CONTIGUOUS);
|
||||
@@ -83,16 +86,16 @@ static void msm_gpummu_destroy(struct msm_mmu *mmu)
|
||||
}
|
||||
|
||||
static const struct msm_mmu_funcs funcs = {
|
||||
.detach = msm_gpummu_detach,
|
||||
.map = msm_gpummu_map,
|
||||
.unmap = msm_gpummu_unmap,
|
||||
.destroy = msm_gpummu_destroy,
|
||||
.resume_translation = msm_gpummu_resume_translation,
|
||||
.detach = a2xx_gpummu_detach,
|
||||
.map = a2xx_gpummu_map,
|
||||
.unmap = a2xx_gpummu_unmap,
|
||||
.destroy = a2xx_gpummu_destroy,
|
||||
.resume_translation = a2xx_gpummu_resume_translation,
|
||||
};
|
||||
|
||||
struct msm_mmu *msm_gpummu_new(struct device *dev, struct msm_gpu *gpu)
|
||||
struct msm_mmu *a2xx_gpummu_new(struct device *dev, struct msm_gpu *gpu)
|
||||
{
|
||||
struct msm_gpummu *gpummu;
|
||||
struct a2xx_gpummu *gpummu;
|
||||
|
||||
gpummu = kzalloc(sizeof(*gpummu), GFP_KERNEL);
|
||||
if (!gpummu)
|
||||
@@ -111,10 +114,10 @@ struct msm_mmu *msm_gpummu_new(struct device *dev, struct msm_gpu *gpu)
|
||||
return &gpummu->base;
|
||||
}
|
||||
|
||||
void msm_gpummu_params(struct msm_mmu *mmu, dma_addr_t *pt_base,
|
||||
void a2xx_gpummu_params(struct msm_mmu *mmu, dma_addr_t *pt_base,
|
||||
dma_addr_t *tran_error)
|
||||
{
|
||||
dma_addr_t base = to_msm_gpummu(mmu)->pt_base;
|
||||
dma_addr_t base = to_a2xx_gpummu(mmu)->pt_base;
|
||||
|
||||
*pt_base = base;
|
||||
*tran_error = base + TABLE_SIZE; /* 32-byte aligned */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -507,7 +507,7 @@ static void a6xx_rpmh_stop(struct a6xx_gmu *gmu)
|
||||
|
||||
static inline void pdc_write(void __iomem *ptr, u32 offset, u32 value)
|
||||
{
|
||||
msm_writel(value, ptr + (offset << 2));
|
||||
writel(value, ptr + (offset << 2));
|
||||
}
|
||||
|
||||
static void __iomem *a6xx_gmu_get_mmio(struct platform_device *pdev,
|
||||
|
||||
@@ -103,12 +103,12 @@ struct a6xx_gmu {
|
||||
|
||||
static inline u32 gmu_read(struct a6xx_gmu *gmu, u32 offset)
|
||||
{
|
||||
return msm_readl(gmu->mmio + (offset << 2));
|
||||
return readl(gmu->mmio + (offset << 2));
|
||||
}
|
||||
|
||||
static inline void gmu_write(struct a6xx_gmu *gmu, u32 offset, u32 value)
|
||||
{
|
||||
msm_writel(value, gmu->mmio + (offset << 2));
|
||||
writel(value, gmu->mmio + (offset << 2));
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -131,8 +131,8 @@ static inline u64 gmu_read64(struct a6xx_gmu *gmu, u32 lo, u32 hi)
|
||||
{
|
||||
u64 val;
|
||||
|
||||
val = (u64) msm_readl(gmu->mmio + (lo << 2));
|
||||
val |= ((u64) msm_readl(gmu->mmio + (hi << 2)) << 32);
|
||||
val = (u64) readl(gmu->mmio + (lo << 2));
|
||||
val |= ((u64) readl(gmu->mmio + (hi << 2)) << 32);
|
||||
|
||||
return val;
|
||||
}
|
||||
@@ -143,12 +143,12 @@ static inline u64 gmu_read64(struct a6xx_gmu *gmu, u32 lo, u32 hi)
|
||||
|
||||
static inline u32 gmu_read_rscc(struct a6xx_gmu *gmu, u32 offset)
|
||||
{
|
||||
return msm_readl(gmu->rscc + (offset << 2));
|
||||
return readl(gmu->rscc + (offset << 2));
|
||||
}
|
||||
|
||||
static inline void gmu_write_rscc(struct a6xx_gmu *gmu, u32 offset, u32 value)
|
||||
{
|
||||
msm_writel(value, gmu->rscc + (offset << 2));
|
||||
writel(value, gmu->rscc + (offset << 2));
|
||||
}
|
||||
|
||||
#define gmu_poll_timeout_rscc(gmu, addr, val, cond, interval, timeout) \
|
||||
|
||||
@@ -1,422 +0,0 @@
|
||||
#ifndef A6XX_GMU_XML
|
||||
#define A6XX_GMU_XML
|
||||
|
||||
/* Autogenerated file, DO NOT EDIT manually!
|
||||
|
||||
This file was generated by the rules-ng-ng gen_header.py tool in this git repository:
|
||||
http://gitlab.freedesktop.org/mesa/mesa/
|
||||
git clone https://gitlab.freedesktop.org/mesa/mesa.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
|
||||
- /home/robclark/src/mesa/mesa/src/freedreno/registers/adreno/a6xx_gmu.xml ( 11820 bytes, from Fri Jun 2 14:59:26 2023)
|
||||
- /home/robclark/src/mesa/mesa/src/freedreno/registers/freedreno_copyright.xml ( 1572 bytes, from Fri Jun 2 14:59:26 2023)
|
||||
- /home/robclark/src/mesa/mesa/src/freedreno/registers/adreno/adreno_common.xml ( 15434 bytes, from Fri Jun 2 14:59:26 2023)
|
||||
|
||||
Copyright (C) 2013-2024 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> Rob Clark
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> Ilia Mirkin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the
|
||||
next paragraph) shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/bug.h>
|
||||
#define assert(x) BUG_ON(!(x))
|
||||
#else
|
||||
#include <assert.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define __struct_cast(X)
|
||||
#else
|
||||
#define __struct_cast(X) (struct X)
|
||||
#endif
|
||||
|
||||
#define A6XX_GMU_GPU_IDLE_STATUS_BUSY_IGN_AHB 0x00800000
|
||||
#define A6XX_GMU_GPU_IDLE_STATUS_CX_GX_CPU_BUSY_IGN_AHB 0x40000000
|
||||
|
||||
#define A6XX_GMU_OOB_BOOT_SLUMBER_SET_MASK 0x00400000
|
||||
#define A6XX_GMU_OOB_BOOT_SLUMBER_CHECK_MASK 0x40000000
|
||||
#define A6XX_GMU_OOB_BOOT_SLUMBER_CLEAR_MASK 0x40000000
|
||||
#define A6XX_GMU_OOB_DCVS_SET_MASK 0x00800000
|
||||
#define A6XX_GMU_OOB_DCVS_CHECK_MASK 0x80000000
|
||||
#define A6XX_GMU_OOB_DCVS_CLEAR_MASK 0x80000000
|
||||
#define A6XX_GMU_OOB_GPU_SET_MASK 0x00040000
|
||||
#define A6XX_GMU_OOB_GPU_CHECK_MASK 0x04000000
|
||||
#define A6XX_GMU_OOB_GPU_CLEAR_MASK 0x04000000
|
||||
#define A6XX_GMU_OOB_PERFCNTR_SET_MASK 0x00020000
|
||||
#define A6XX_GMU_OOB_PERFCNTR_CHECK_MASK 0x02000000
|
||||
#define A6XX_GMU_OOB_PERFCNTR_CLEAR_MASK 0x02000000
|
||||
|
||||
#define A6XX_HFI_IRQ_MSGQ_MASK 0x00000001
|
||||
#define A6XX_HFI_IRQ_DSGQ_MASK 0x00000002
|
||||
#define A6XX_HFI_IRQ_BLOCKED_MSG_MASK 0x00000004
|
||||
#define A6XX_HFI_IRQ_CM3_FAULT_MASK 0x00800000
|
||||
#define A6XX_HFI_IRQ_GMU_ERR_MASK__MASK 0x007f0000
|
||||
#define A6XX_HFI_IRQ_GMU_ERR_MASK__SHIFT 16
|
||||
static inline uint32_t A6XX_HFI_IRQ_GMU_ERR_MASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_HFI_IRQ_GMU_ERR_MASK__SHIFT) & A6XX_HFI_IRQ_GMU_ERR_MASK__MASK;
|
||||
}
|
||||
#define A6XX_HFI_IRQ_OOB_MASK__MASK 0xff000000
|
||||
#define A6XX_HFI_IRQ_OOB_MASK__SHIFT 24
|
||||
static inline uint32_t A6XX_HFI_IRQ_OOB_MASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_HFI_IRQ_OOB_MASK__SHIFT) & A6XX_HFI_IRQ_OOB_MASK__MASK;
|
||||
}
|
||||
|
||||
#define A6XX_HFI_H2F_IRQ_MASK_BIT 0x00000001
|
||||
|
||||
#define REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL 0x00000080
|
||||
|
||||
#define REG_A6XX_GMU_GX_SPTPRAC_POWER_CONTROL 0x00000081
|
||||
|
||||
#define REG_A6XX_GMU_CM3_ITCM_START 0x00000c00
|
||||
|
||||
#define REG_A6XX_GMU_CM3_DTCM_START 0x00001c00
|
||||
|
||||
#define REG_A6XX_GMU_NMI_CONTROL_STATUS 0x000023f0
|
||||
|
||||
#define REG_A6XX_GMU_BOOT_SLUMBER_OPTION 0x000023f8
|
||||
|
||||
#define REG_A6XX_GMU_GX_VOTE_IDX 0x000023f9
|
||||
|
||||
#define REG_A6XX_GMU_MX_VOTE_IDX 0x000023fa
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_ACK_OPTION 0x000023fc
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_PERF_SETTING 0x000023fd
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_BW_SETTING 0x000023fe
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_RETURN 0x000023ff
|
||||
|
||||
#define REG_A6XX_GMU_ICACHE_CONFIG 0x00004c00
|
||||
|
||||
#define REG_A6XX_GMU_DCACHE_CONFIG 0x00004c01
|
||||
|
||||
#define REG_A6XX_GMU_SYS_BUS_CONFIG 0x00004c0f
|
||||
|
||||
#define REG_A6XX_GMU_CM3_SYSRESET 0x00005000
|
||||
|
||||
#define REG_A6XX_GMU_CM3_BOOT_CONFIG 0x00005001
|
||||
|
||||
#define REG_A6XX_GMU_CM3_FW_BUSY 0x0000501a
|
||||
|
||||
#define REG_A6XX_GMU_CM3_FW_INIT_RESULT 0x0000501c
|
||||
|
||||
#define REG_A6XX_GMU_CM3_CFG 0x0000502d
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_ENABLE 0x00005040
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_SELECT_0 0x00005041
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_SELECT_1 0x00005042
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L 0x00005044
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H 0x00005045
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_1_L 0x00005046
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_1_H 0x00005047
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_2_L 0x00005048
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_2_H 0x00005049
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_3_L 0x0000504a
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_3_H 0x0000504b
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L 0x0000504c
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_H 0x0000504d
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_5_L 0x0000504e
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_5_H 0x0000504f
|
||||
|
||||
#define REG_A6XX_GMU_PWR_COL_INTER_FRAME_CTRL 0x000050c0
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_IFPC_ENABLE 0x00000001
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_HM_POWER_COLLAPSE_ENABLE 0x00000002
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_SPTPRAC_POWER_CONTROL_ENABLE 0x00000004
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__MASK 0x00003c00
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__SHIFT 10
|
||||
static inline uint32_t A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__SHIFT) & A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__MASK;
|
||||
}
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__MASK 0xffffc000
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__SHIFT 14
|
||||
static inline uint32_t A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__SHIFT) & A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A6XX_GMU_PWR_COL_INTER_FRAME_HYST 0x000050c1
|
||||
|
||||
#define REG_A6XX_GMU_PWR_COL_SPTPRAC_HYST 0x000050c2
|
||||
|
||||
#define REG_A6XX_GMU_SPTPRAC_PWR_CLK_STATUS 0x000050d0
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWERING_OFF 0x00000001
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWERING_ON 0x00000002
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWER_OFF 0x00000004
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWER_ON 0x00000008
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SP_CLOCK_OFF 0x00000010
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GMU_UP_POWER_STATE 0x00000020
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GX_HM_GDSC_POWER_OFF 0x00000040
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GX_HM_CLK_OFF 0x00000080
|
||||
|
||||
#define REG_A6XX_GMU_GPU_NAP_CTRL 0x000050e4
|
||||
#define A6XX_GMU_GPU_NAP_CTRL_HW_NAP_ENABLE 0x00000001
|
||||
#define A6XX_GMU_GPU_NAP_CTRL_SID__MASK 0x000001f0
|
||||
#define A6XX_GMU_GPU_NAP_CTRL_SID__SHIFT 4
|
||||
static inline uint32_t A6XX_GMU_GPU_NAP_CTRL_SID(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_GMU_GPU_NAP_CTRL_SID__SHIFT) & A6XX_GMU_GPU_NAP_CTRL_SID__MASK;
|
||||
}
|
||||
|
||||
#define REG_A6XX_GMU_RPMH_CTRL 0x000050e8
|
||||
#define A6XX_GMU_RPMH_CTRL_RPMH_INTERFACE_ENABLE 0x00000001
|
||||
#define A6XX_GMU_RPMH_CTRL_LLC_VOTE_ENABLE 0x00000010
|
||||
#define A6XX_GMU_RPMH_CTRL_DDR_VOTE_ENABLE 0x00000100
|
||||
#define A6XX_GMU_RPMH_CTRL_MX_VOTE_ENABLE 0x00000200
|
||||
#define A6XX_GMU_RPMH_CTRL_CX_VOTE_ENABLE 0x00000400
|
||||
#define A6XX_GMU_RPMH_CTRL_GFX_VOTE_ENABLE 0x00000800
|
||||
#define A6XX_GMU_RPMH_CTRL_DDR_MIN_VOTE_ENABLE 0x00001000
|
||||
#define A6XX_GMU_RPMH_CTRL_MX_MIN_VOTE_ENABLE 0x00002000
|
||||
#define A6XX_GMU_RPMH_CTRL_CX_MIN_VOTE_ENABLE 0x00004000
|
||||
#define A6XX_GMU_RPMH_CTRL_GFX_MIN_VOTE_ENABLE 0x00008000
|
||||
|
||||
#define REG_A6XX_GMU_RPMH_HYST_CTRL 0x000050e9
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE 0x000050ec
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_CX_FAL_INTF 0x000050f0
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_CX_FALNEXT_INTF 0x000050f1
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_PWR_COL_CP_MSG 0x00005100
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_PWR_COL_CP_RESP 0x00005101
|
||||
|
||||
#define REG_A6XX_GMU_BOOT_KMD_LM_HANDSHAKE 0x000051f0
|
||||
|
||||
#define REG_A6XX_GMU_LLM_GLM_SLEEP_CTRL 0x00005157
|
||||
|
||||
#define REG_A6XX_GMU_LLM_GLM_SLEEP_STATUS 0x00005158
|
||||
|
||||
#define REG_A6XX_GMU_ALWAYS_ON_COUNTER_L 0x00005088
|
||||
|
||||
#define REG_A6XX_GMU_ALWAYS_ON_COUNTER_H 0x00005089
|
||||
|
||||
#define REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE 0x000050c3
|
||||
|
||||
#define REG_A6XX_GMU_HFI_CTRL_STATUS 0x00005180
|
||||
|
||||
#define REG_A6XX_GMU_HFI_VERSION_INFO 0x00005181
|
||||
|
||||
#define REG_A6XX_GMU_HFI_SFR_ADDR 0x00005182
|
||||
|
||||
#define REG_A6XX_GMU_HFI_MMAP_ADDR 0x00005183
|
||||
|
||||
#define REG_A6XX_GMU_HFI_QTBL_INFO 0x00005184
|
||||
|
||||
#define REG_A6XX_GMU_HFI_QTBL_ADDR 0x00005185
|
||||
|
||||
#define REG_A6XX_GMU_HFI_CTRL_INIT 0x00005186
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_SET 0x00005190
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_CLR 0x00005191
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_INFO 0x00005192
|
||||
#define A6XX_GMU_GMU2HOST_INTR_INFO_MSGQ 0x00000001
|
||||
#define A6XX_GMU_GMU2HOST_INTR_INFO_CM3_FAULT 0x00800000
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_MASK 0x00005193
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_SET 0x00005194
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_CLR 0x00005195
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_RAW_INFO 0x00005196
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_0 0x00005197
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_1 0x00005198
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_2 0x00005199
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_3 0x0000519a
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_0 0x0000519b
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_1 0x0000519c
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_2 0x0000519d
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_3 0x0000519e
|
||||
|
||||
#define REG_A6XX_GMU_GENERAL_0 0x000051c5
|
||||
|
||||
#define REG_A6XX_GMU_GENERAL_1 0x000051c6
|
||||
|
||||
#define REG_A6XX_GMU_GENERAL_6 0x000051cb
|
||||
|
||||
#define REG_A6XX_GMU_GENERAL_7 0x000051cc
|
||||
|
||||
#define REG_A7XX_GMU_GENERAL_8 0x000051cd
|
||||
|
||||
#define REG_A7XX_GMU_GENERAL_9 0x000051ce
|
||||
|
||||
#define REG_A7XX_GMU_GENERAL_10 0x000051cf
|
||||
|
||||
#define REG_A6XX_GMU_ISENSE_CTRL 0x0000515d
|
||||
|
||||
#define REG_A6XX_GPU_CS_ENABLE_REG 0x00008920
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_ISENSE_CTRL 0x0000515d
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_CONTROL3 0x00008578
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_CONTROL2 0x00008558
|
||||
|
||||
#define REG_A6XX_GPU_CS_A_SENSOR_CTRL_0 0x00008580
|
||||
|
||||
#define REG_A6XX_GPU_CS_A_SENSOR_CTRL_2 0x00027ada
|
||||
|
||||
#define REG_A6XX_GPU_CS_SENSOR_GENERAL_STATUS 0x0000881a
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_CONTROL1 0x00008957
|
||||
|
||||
#define REG_A6XX_GPU_CS_SENSOR_GENERAL_STATUS 0x0000881a
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_STATUS1_0 0x0000881d
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_STATUS1_2 0x0000881f
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_STATUS1_4 0x00008821
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_DONE 0x00008965
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_PERIOD_CTRL 0x0000896d
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_DONE 0x00008965
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_PWR_THRESHOLD 0x0000514d
|
||||
|
||||
#define REG_A6XX_GMU_AO_INTERRUPT_EN 0x00009303
|
||||
|
||||
#define REG_A6XX_GMU_AO_HOST_INTERRUPT_CLR 0x00009304
|
||||
|
||||
#define REG_A6XX_GMU_AO_HOST_INTERRUPT_STATUS 0x00009305
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_WDOG_BITE 0x00000001
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_RSCC_COMP 0x00000002
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_VDROOP 0x00000004
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_FENCE_ERR 0x00000008
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_DBD_WAKEUP 0x00000010
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_HOST_AHB_BUS_ERROR 0x00000020
|
||||
|
||||
#define REG_A6XX_GMU_AO_HOST_INTERRUPT_MASK 0x00009306
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL 0x00009309
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL 0x0000930a
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL 0x0000930b
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_STATUS 0x0000930c
|
||||
#define A6XX_GPU_GMU_AO_GPU_CX_BUSY_STATUS_GPUBUSYIGNAHB 0x00800000
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_STATUS2 0x0000930d
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_MASK 0x0000930e
|
||||
|
||||
#define REG_A6XX_GMU_AO_AHB_FENCE_CTRL 0x00009310
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_STATUS 0x00009313
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_STATUS_CLR 0x00009314
|
||||
|
||||
#define REG_A6XX_GMU_RBBM_INT_UNMASKED_STATUS 0x00009315
|
||||
|
||||
#define REG_A6XX_GMU_AO_SPARE_CNTL 0x00009316
|
||||
|
||||
#define REG_A6XX_GMU_RSCC_CONTROL_REQ 0x00009307
|
||||
|
||||
#define REG_A6XX_GMU_RSCC_CONTROL_ACK 0x00009308
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_RANGE_0 0x00009311
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_RANGE_1 0x00009312
|
||||
|
||||
#define REG_A6XX_GPU_CC_GX_GDSCR 0x00009c03
|
||||
|
||||
#define REG_A6XX_GPU_CC_GX_DOMAIN_MISC 0x00009d42
|
||||
|
||||
#define REG_A6XX_GPU_CPR_FSM_CTL 0x0000c001
|
||||
|
||||
#define REG_A6XX_GPU_RSCC_RSC_STATUS0_DRV0 0x00000004
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_SEQ_START_ADDR 0x00000008
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_MATCH_VALUE_LO 0x00000009
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_MATCH_VALUE_HI 0x0000000a
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_SLAVE_ID_DRV0 0x0000000b
|
||||
|
||||
#define REG_A6XX_RSCC_HIDDEN_TCS_CMD0_ADDR 0x0000000d
|
||||
|
||||
#define REG_A6XX_RSCC_HIDDEN_TCS_CMD0_DATA 0x0000000e
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT0_TIMESTAMP_L_DRV0 0x00000082
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT0_TIMESTAMP_H_DRV0 0x00000083
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT1_EN_DRV0 0x00000089
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT1_OUTPUT_DRV0 0x0000008c
|
||||
|
||||
#define REG_A6XX_RSCC_OVERRIDE_START_ADDR 0x00000100
|
||||
|
||||
#define REG_A6XX_RSCC_SEQ_BUSY_DRV0 0x00000101
|
||||
|
||||
#define REG_A7XX_RSCC_SEQ_MEM_0_DRV0_A740 0x00000154
|
||||
|
||||
#define REG_A6XX_RSCC_SEQ_MEM_0_DRV0 0x00000180
|
||||
|
||||
#define REG_A6XX_RSCC_TCS0_DRV0_STATUS 0x00000346
|
||||
|
||||
#define REG_A6XX_RSCC_TCS1_DRV0_STATUS 0x000003ee
|
||||
|
||||
#define REG_A6XX_RSCC_TCS2_DRV0_STATUS 0x00000496
|
||||
|
||||
#define REG_A6XX_RSCC_TCS3_DRV0_STATUS 0x0000053e
|
||||
|
||||
#ifdef __cplusplus
|
||||
#endif
|
||||
|
||||
#endif /* A6XX_GMU_XML */
|
||||
@@ -284,7 +284,7 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
||||
|
||||
a6xx_set_pagetable(a6xx_gpu, ring, submit->queue->ctx);
|
||||
|
||||
get_stats_counter(ring, REG_A6XX_RBBM_PERFCTR_CP(0),
|
||||
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));
|
||||
@@ -330,7 +330,7 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
|
||||
OUT_PKT7(ring, CP_SET_MARKER, 1);
|
||||
OUT_RING(ring, 0x00e); /* IB1LIST end */
|
||||
|
||||
get_stats_counter(ring, REG_A6XX_RBBM_PERFCTR_CP(0),
|
||||
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));
|
||||
@@ -1255,8 +1255,9 @@ static const u32 a730_protect[] = {
|
||||
A6XX_PROTECT_NORDWR(0x00699, 0x01e9),
|
||||
A6XX_PROTECT_NORDWR(0x008a0, 0x0008),
|
||||
A6XX_PROTECT_NORDWR(0x008ab, 0x0024),
|
||||
/* 0x008d0-0x008dd are unprotected on purpose for tools like perfetto */
|
||||
A6XX_PROTECT_RDONLY(0x008de, 0x0154),
|
||||
/* 0x008d0-0x008dd and 0x008e0-0x008e6 are unprotected on purpose for tools like perfetto */
|
||||
A6XX_PROTECT_NORDWR(0x008de, 0x0001),
|
||||
A6XX_PROTECT_RDONLY(0x008e7, 0x014b),
|
||||
A6XX_PROTECT_NORDWR(0x00900, 0x004d),
|
||||
A6XX_PROTECT_NORDWR(0x0098d, 0x00b2),
|
||||
A6XX_PROTECT_NORDWR(0x00a41, 0x01be),
|
||||
@@ -1291,8 +1292,7 @@ static const u32 a730_protect[] = {
|
||||
A6XX_PROTECT_RDONLY(0x1f844, 0x007b),
|
||||
A6XX_PROTECT_NORDWR(0x1f860, 0x0000),
|
||||
A6XX_PROTECT_NORDWR(0x1f878, 0x002a),
|
||||
/* CP_PROTECT_REG[44, 46] are left untouched! */
|
||||
0,
|
||||
/* CP_PROTECT_REG[45, 46] are left untouched! */
|
||||
0,
|
||||
0,
|
||||
A6XX_PROTECT_NORDWR(0x1f8c0, 0x00000),
|
||||
@@ -3062,7 +3062,8 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
|
||||
|
||||
ret = a6xx_set_supported_hw(&pdev->dev, config->info);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
a6xx_llc_slices_destroy(a6xx_gpu);
|
||||
kfree(a6xx_gpu);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
|
||||
@@ -69,12 +69,12 @@ static inline void a6xx_llc_rmw(struct a6xx_gpu *a6xx_gpu, u32 reg, u32 mask, u3
|
||||
|
||||
static inline u32 a6xx_llc_read(struct a6xx_gpu *a6xx_gpu, u32 reg)
|
||||
{
|
||||
return msm_readl(a6xx_gpu->llc_mmio + (reg << 2));
|
||||
return readl(a6xx_gpu->llc_mmio + (reg << 2));
|
||||
}
|
||||
|
||||
static inline void a6xx_llc_write(struct a6xx_gpu *a6xx_gpu, u32 reg, u32 value)
|
||||
{
|
||||
msm_writel(value, a6xx_gpu->llc_mmio + (reg << 2));
|
||||
writel(value, a6xx_gpu->llc_mmio + (reg << 2));
|
||||
}
|
||||
|
||||
#define shadowptr(_a6xx_gpu, _ring) ((_a6xx_gpu)->shadow_iova + \
|
||||
|
||||
@@ -13,15 +13,18 @@
|
||||
*/
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wunused-variable"
|
||||
#pragma GCC diagnostic ignored "-Wunused-const-variable"
|
||||
|
||||
#include "adreno_gen7_0_0_snapshot.h"
|
||||
#include "adreno_gen7_2_0_snapshot.h"
|
||||
#include "adreno_gen7_9_0_snapshot.h"
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
struct a6xx_gpu_state_obj {
|
||||
const void *handle;
|
||||
u32 *data;
|
||||
u32 count; /* optional, used when count potentially read from hw */
|
||||
};
|
||||
|
||||
struct a6xx_gpu_state {
|
||||
@@ -192,10 +195,10 @@ static int debugbus_read(struct msm_gpu *gpu, u32 block, u32 offset,
|
||||
}
|
||||
|
||||
#define cxdbg_write(ptr, offset, val) \
|
||||
msm_writel((val), (ptr) + ((offset) << 2))
|
||||
writel((val), (ptr) + ((offset) << 2))
|
||||
|
||||
#define cxdbg_read(ptr, offset) \
|
||||
msm_readl((ptr) + ((offset) << 2))
|
||||
readl((ptr) + ((offset) << 2))
|
||||
|
||||
/* read a value from the CX debug bus */
|
||||
static int cx_debugbus_read(void __iomem *cxdbg, u32 block, u32 offset,
|
||||
@@ -384,21 +387,29 @@ static void a7xx_get_debugbus_blocks(struct msm_gpu *gpu,
|
||||
struct a6xx_gpu_state *a6xx_state)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
int debugbus_blocks_count, total_debugbus_blocks;
|
||||
const u32 *debugbus_blocks;
|
||||
int debugbus_blocks_count, gbif_debugbus_blocks_count, total_debugbus_blocks;
|
||||
const u32 *debugbus_blocks, *gbif_debugbus_blocks;
|
||||
int i;
|
||||
|
||||
if (adreno_is_a730(adreno_gpu)) {
|
||||
debugbus_blocks = gen7_0_0_debugbus_blocks;
|
||||
debugbus_blocks_count = ARRAY_SIZE(gen7_0_0_debugbus_blocks);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a740_family(adreno_gpu));
|
||||
gbif_debugbus_blocks = a7xx_gbif_debugbus_blocks;
|
||||
gbif_debugbus_blocks_count = ARRAY_SIZE(a7xx_gbif_debugbus_blocks);
|
||||
} else if (adreno_is_a740_family(adreno_gpu)) {
|
||||
debugbus_blocks = gen7_2_0_debugbus_blocks;
|
||||
debugbus_blocks_count = ARRAY_SIZE(gen7_2_0_debugbus_blocks);
|
||||
gbif_debugbus_blocks = a7xx_gbif_debugbus_blocks;
|
||||
gbif_debugbus_blocks_count = ARRAY_SIZE(a7xx_gbif_debugbus_blocks);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a750(adreno_gpu));
|
||||
debugbus_blocks = gen7_9_0_debugbus_blocks;
|
||||
debugbus_blocks_count = ARRAY_SIZE(gen7_9_0_debugbus_blocks);
|
||||
gbif_debugbus_blocks = gen7_9_0_gbif_debugbus_blocks;
|
||||
gbif_debugbus_blocks_count = ARRAY_SIZE(gen7_9_0_gbif_debugbus_blocks);
|
||||
}
|
||||
|
||||
total_debugbus_blocks = debugbus_blocks_count +
|
||||
ARRAY_SIZE(a7xx_gbif_debugbus_blocks);
|
||||
total_debugbus_blocks = debugbus_blocks_count + gbif_debugbus_blocks_count;
|
||||
|
||||
a6xx_state->debugbus = state_kcalloc(a6xx_state, total_debugbus_blocks,
|
||||
sizeof(*a6xx_state->debugbus));
|
||||
@@ -410,9 +421,9 @@ static void a7xx_get_debugbus_blocks(struct msm_gpu *gpu,
|
||||
&a6xx_state->debugbus[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(a7xx_gbif_debugbus_blocks); i++) {
|
||||
for (i = 0; i < gbif_debugbus_blocks_count; i++) {
|
||||
a6xx_get_debugbus_block(gpu,
|
||||
a6xx_state, &a7xx_gbif_debugbus_blocks[i],
|
||||
a6xx_state, &a7xx_debugbus_blocks[gbif_debugbus_blocks[i]],
|
||||
&a6xx_state->debugbus[i + debugbus_blocks_count]);
|
||||
}
|
||||
}
|
||||
@@ -813,10 +824,13 @@ static void a7xx_get_clusters(struct msm_gpu *gpu,
|
||||
if (adreno_is_a730(adreno_gpu)) {
|
||||
clusters = gen7_0_0_clusters;
|
||||
clusters_size = ARRAY_SIZE(gen7_0_0_clusters);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a740_family(adreno_gpu));
|
||||
} else if (adreno_is_a740_family(adreno_gpu)) {
|
||||
clusters = gen7_2_0_clusters;
|
||||
clusters_size = ARRAY_SIZE(gen7_2_0_clusters);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a750(adreno_gpu));
|
||||
clusters = gen7_9_0_clusters;
|
||||
clusters_size = ARRAY_SIZE(gen7_9_0_clusters);
|
||||
}
|
||||
|
||||
a6xx_state->clusters = state_kcalloc(a6xx_state,
|
||||
@@ -948,10 +962,13 @@ static void a7xx_get_shaders(struct msm_gpu *gpu,
|
||||
if (adreno_is_a730(adreno_gpu)) {
|
||||
shader_blocks = gen7_0_0_shader_blocks;
|
||||
num_shader_blocks = ARRAY_SIZE(gen7_0_0_shader_blocks);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a740_family(adreno_gpu));
|
||||
} else if (adreno_is_a740_family(adreno_gpu)) {
|
||||
shader_blocks = gen7_2_0_shader_blocks;
|
||||
num_shader_blocks = ARRAY_SIZE(gen7_2_0_shader_blocks);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a750(adreno_gpu));
|
||||
shader_blocks = gen7_9_0_shader_blocks;
|
||||
num_shader_blocks = ARRAY_SIZE(gen7_9_0_shader_blocks);
|
||||
}
|
||||
|
||||
a6xx_state->shaders = state_kcalloc(a6xx_state,
|
||||
@@ -1337,10 +1354,13 @@ static void a7xx_get_registers(struct msm_gpu *gpu,
|
||||
if (adreno_is_a730(adreno_gpu)) {
|
||||
reglist = gen7_0_0_reg_list;
|
||||
pre_crashdumper_regs = gen7_0_0_pre_crashdumper_gpu_registers;
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a740_family(adreno_gpu));
|
||||
} else if (adreno_is_a740_family(adreno_gpu)) {
|
||||
reglist = gen7_2_0_reg_list;
|
||||
pre_crashdumper_regs = gen7_0_0_pre_crashdumper_gpu_registers;
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a750(adreno_gpu));
|
||||
reglist = gen7_9_0_reg_list;
|
||||
pre_crashdumper_regs = gen7_9_0_pre_crashdumper_gpu_registers;
|
||||
}
|
||||
|
||||
count = A7XX_PRE_CRASHDUMPER_SIZE + A7XX_POST_CRASHDUMPER_SIZE;
|
||||
@@ -1388,7 +1408,8 @@ static void a7xx_get_post_crashdumper_registers(struct msm_gpu *gpu,
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
const u32 *regs;
|
||||
|
||||
BUG_ON(!(adreno_is_a730(adreno_gpu) || adreno_is_a740_family(adreno_gpu)));
|
||||
BUG_ON(!(adreno_is_a730(adreno_gpu) || adreno_is_a740_family(adreno_gpu) ||
|
||||
adreno_is_a750(adreno_gpu)));
|
||||
regs = gen7_0_0_post_crashdumper_registers;
|
||||
|
||||
a7xx_get_ahb_gpu_registers(gpu,
|
||||
@@ -1417,16 +1438,18 @@ static u32 a7xx_get_cp_roq_size(struct msm_gpu *gpu)
|
||||
/* Read a block of data from an indexed register pair */
|
||||
static void a6xx_get_indexed_regs(struct msm_gpu *gpu,
|
||||
struct a6xx_gpu_state *a6xx_state,
|
||||
struct a6xx_indexed_registers *indexed,
|
||||
const struct a6xx_indexed_registers *indexed,
|
||||
struct a6xx_gpu_state_obj *obj)
|
||||
{
|
||||
u32 count = indexed->count;
|
||||
int i;
|
||||
|
||||
obj->handle = (const void *) indexed;
|
||||
if (indexed->count_fn)
|
||||
indexed->count = indexed->count_fn(gpu);
|
||||
count = indexed->count_fn(gpu);
|
||||
|
||||
obj->data = state_kcalloc(a6xx_state, indexed->count, sizeof(u32));
|
||||
obj->data = state_kcalloc(a6xx_state, count, sizeof(u32));
|
||||
obj->count = count;
|
||||
if (!obj->data)
|
||||
return;
|
||||
|
||||
@@ -1434,7 +1457,7 @@ static void a6xx_get_indexed_regs(struct msm_gpu *gpu,
|
||||
gpu_write(gpu, indexed->addr, 0);
|
||||
|
||||
/* Read the data - each read increments the internal address by 1 */
|
||||
for (i = 0; i < indexed->count; i++)
|
||||
for (i = 0; i < count; i++)
|
||||
obj->data[i] = gpu_read(gpu, indexed->data);
|
||||
}
|
||||
|
||||
@@ -1491,10 +1514,18 @@ static void a7xx_get_indexed_registers(struct msm_gpu *gpu,
|
||||
struct a6xx_gpu_state *a6xx_state)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
const struct a6xx_indexed_registers *indexed_regs;
|
||||
int i, indexed_count, mempool_count;
|
||||
|
||||
BUG_ON(!(adreno_is_a730(adreno_gpu) || adreno_is_a740_family(adreno_gpu)));
|
||||
indexed_count = ARRAY_SIZE(a7xx_indexed_reglist);
|
||||
if (adreno_is_a730(adreno_gpu) || adreno_is_a740_family(adreno_gpu)) {
|
||||
indexed_regs = a7xx_indexed_reglist;
|
||||
indexed_count = ARRAY_SIZE(a7xx_indexed_reglist);
|
||||
} else {
|
||||
BUG_ON(!adreno_is_a750(adreno_gpu));
|
||||
indexed_regs = gen7_9_0_cp_indexed_reg_list;
|
||||
indexed_count = ARRAY_SIZE(gen7_9_0_cp_indexed_reg_list);
|
||||
}
|
||||
|
||||
mempool_count = ARRAY_SIZE(a7xx_cp_bv_mempool_indexed);
|
||||
|
||||
a6xx_state->indexed_regs = state_kcalloc(a6xx_state,
|
||||
@@ -1507,7 +1538,7 @@ static void a7xx_get_indexed_registers(struct msm_gpu *gpu,
|
||||
|
||||
/* First read the common regs */
|
||||
for (i = 0; i < indexed_count; i++)
|
||||
a6xx_get_indexed_regs(gpu, a6xx_state, &a7xx_indexed_reglist[i],
|
||||
a6xx_get_indexed_regs(gpu, a6xx_state, &indexed_regs[i],
|
||||
&a6xx_state->indexed_regs[i]);
|
||||
|
||||
gpu_rmw(gpu, REG_A6XX_CP_CHICKEN_DBG, 0, BIT(2));
|
||||
@@ -1862,9 +1893,9 @@ static void a6xx_show_indexed_regs(struct a6xx_gpu_state_obj *obj,
|
||||
return;
|
||||
|
||||
print_name(p, " - regs-name: ", indexed->name);
|
||||
drm_printf(p, " dwords: %d\n", indexed->count);
|
||||
drm_printf(p, " dwords: %d\n", obj->count);
|
||||
|
||||
print_ascii85(p, indexed->count << 2, obj->data);
|
||||
print_ascii85(p, obj->count << 2, obj->data);
|
||||
}
|
||||
|
||||
static void a6xx_show_debugbus_block(const struct a6xx_debugbus_block *block,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user