| /linux/drivers/gpu/drm/msm/adreno/ |
| H A D | a6xx_gmu.c | 21 static void a6xx_gmu_fault(struct a6xx_gmu *gmu) in a6xx_gmu_fault() argument 23 struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu); in a6xx_gmu_fault() 28 gmu->hung = true; in a6xx_gmu_fault() 39 struct a6xx_gmu *gmu = data; in a6xx_gmu_irq() local 42 status = gmu_read(gmu, REG_A6XX_GMU_AO_HOST_INTERRUPT_STATUS); in a6xx_gmu_irq() 43 gmu_write(gmu, REG_A6XX_GMU_AO_HOST_INTERRUPT_CLR, status); in a6xx_gmu_irq() 46 dev_err_ratelimited(gmu->dev, "GMU watchdog expired\n"); in a6xx_gmu_irq() 48 a6xx_gmu_fault(gmu); in a6xx_gmu_irq() 52 dev_err_ratelimited(gmu->dev, "GMU AHB bus error\n"); in a6xx_gmu_irq() 55 dev_err_ratelimited(gmu->dev, "GMU fence error: 0x%x\n", in a6xx_gmu_irq() [all …]
|
| H A D | a6xx_gmu.h | 35 * These define the different GMU wake up options - these define how both the 36 * CPU and the GMU bring up the hardware 39 /* THe GMU has already been booted and the rentention registers are active */ 42 /* the GMU is coming up for the first time or back from a power collapse */ 46 * These define the level of control that the GMU has - the higher the number 47 * the more things that the GMU hardware controls on its own. 50 /* The GMU does not do any idle state management */ 56 /* The GMU manages SPTP power collapse */ 59 /* The GMU does automatic IFPC (intra-frame power collapse) */ 65 /* For serializing communication with the GMU: */ [all …]
|
| H A D | a6xx_hfi.c | 31 static int a6xx_hfi_queue_read(struct a6xx_gmu *gmu, in a6xx_hfi_queue_read() argument 47 * If we are to assume that the GMU firmware is in fact a rational actor in a6xx_hfi_queue_read() 62 if (!gmu->legacy) in a6xx_hfi_queue_read() 69 static int a6xx_hfi_queue_write(struct a6xx_gmu *gmu, in a6xx_hfi_queue_write() argument 93 if (!gmu->legacy) { in a6xx_hfi_queue_write() 101 gmu_write(gmu, REG_A6XX_GMU_HOST2GMU_INTR_SET, 0x01); in a6xx_hfi_queue_write() 105 static int a6xx_hfi_wait_for_msg_interrupt(struct a6xx_gmu *gmu, u32 id, u32 seqnum) in a6xx_hfi_wait_for_msg_interrupt() argument 109 struct a6xx_gpu *a6xx_gpu = container_of(gmu, struct a6xx_gpu, gmu); in a6xx_hfi_wait_for_msg_interrupt() 113 ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_GMU2HOST_INTR_INFO, val, in a6xx_hfi_wait_for_msg_interrupt() 122 /* We may timeout because the GMU is temporarily wedged from in a6xx_hfi_wait_for_msg_interrupt() [all …]
|
| H A D | a6xx_gpu.c | 24 count_hi = gmu_read(&a6xx_gpu->gmu, REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); in read_gmu_ao_counter() 25 count_lo = gmu_read(&a6xx_gpu->gmu, REG_A6XX_GMU_ALWAYS_ON_COUNTER_L); in read_gmu_ao_counter() 26 temp = gmu_read(&a6xx_gpu->gmu, REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); in read_gmu_ao_counter() 54 struct a6xx_gmu *gmu = &a6xx_gpu->gmu; in fenced_write() local 59 /* Nothing else to be done in the case of no-GMU */ in fenced_write() 68 if (!gmu_poll_timeout(gmu, REG_A6XX_GMU_AHB_FENCE_STATUS, status, in fenced_write() 76 if (!gmu_poll_timeout(gmu, REG_A6XX_GMU_AHB_FENCE_STATUS, status, in fenced_write() 83 dev_err_ratelimited(gmu->dev, "delay in fenced register write (0x%x)\n", in fenced_write() 88 dev_err_ratelimited(gmu->dev, "fenced register write (0x%x) fail\n", in fenced_write() 115 /* Check that the GMU is idle */ in _a6xx_check_idle() [all …]
|
| H A D | a8xx_gpu.c | 125 /* Check that the GMU is idle */ in _a8xx_check_idle() 126 if (!a6xx_gmu_isidle(&a6xx_gpu->gmu)) in _a8xx_check_idle() 190 struct a6xx_gmu *gmu = &a6xx_gpu->gmu; in a8xx_set_hwcg() local 196 gmu_write(gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL, in a8xx_set_hwcg() 198 gmu_write(gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL, in a8xx_set_hwcg() 200 gmu_write(gmu, REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL, in a8xx_set_hwcg() 218 * GMU enables clk gating in GBIF during boot up. So, in a8xx_set_hwcg() 494 struct a6xx_gmu *gmu = &a6xx_gpu->gmu; in hw_init() local 500 ret = a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET); in hw_init() 545 gmu_write(&a6xx_gpu->gmu, REG_A8XX_GMU_CX_GMU_POWER_COUNTER_SELECT_XOCLK_1, in hw_init() [all …]
|
| H A D | a6xx_gpu.h | 92 struct a6xx_gmu gmu; member 264 int a6xx_gmu_wait_for_idle(struct a6xx_gmu *gmu); 266 bool a6xx_gmu_isidle(struct a6xx_gmu *gmu); 268 int a6xx_gmu_set_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state); 269 void a6xx_gmu_clear_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state);
|
| H A D | a6xx_gpu_state.c | 155 if (!a6xx_gmu_sptprac_is_on(&a6xx_gpu->gmu)) in a6xx_crashdumper_run() 1189 /* Read a block of GMU registers */ 1198 struct a6xx_gmu *gmu = &a6xx_gpu->gmu; in _a6xx_get_gmu_registers() local 1218 val = gmu_read_rscc(gmu, offset); in _a6xx_get_gmu_registers() 1220 val = gmu_read(gmu, offset); in _a6xx_get_gmu_registers() 1241 /* Get the CX GMU registers from AHB */ in a6xx_get_gmu_registers() 1254 if (!a6xx_gmu_gx_is_on(&a6xx_gpu->gmu)) in a6xx_get_gmu_registers() 1258 gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_AO_AHB_FENCE_CTRL, 0); in a6xx_get_gmu_registers() 1292 struct a6xx_gmu *gmu = &a6xx_gpu->gmu; in a6xx_snapshot_gmu_hfi_history() local 1295 BUILD_BUG_ON(ARRAY_SIZE(gmu->queues) != ARRAY_SIZE(a6xx_state->hfi_queue_history)); in a6xx_snapshot_gmu_hfi_history() [all …]
|
| H A D | a6xx_hfi.h | 49 /* This is the outgoing queue to the GMU */ 52 /* THis is the incoming response queue from the GMU */
|
| H A D | adreno_gpu.c | 340 /* Let any concurrent GMU transactions know that the MMU may be in adreno_fault_handler() 610 /* Skip loading GMU firmware with GMU Wrapper */ in adreno_load_fw() 1198 /* Only handle the core clock when GMU is not in use (or is absent). */ in adreno_gpu_init()
|
| H A D | a6xx_gpu_state.h | 345 /* GMU GX */ 354 /* GMU CX */ 364 /* GMU AO */
|
| /linux/Documentation/devicetree/bindings/display/msm/ |
| H A D | gmu.yaml | 6 $id: http://devicetree.org/schemas/display/msm/gmu.yaml# 9 title: GMU attached to certain Adreno GPUs 15 These bindings describe the Graphics Management Unit (GMU) that is attached 16 to members of the Adreno A6xx GPU family. The GMU provides on-device power 24 - pattern: '^qcom,adreno-gmu-[6-8][0-9][0-9]\.[0-9]$' 25 - const: qcom,adreno-gmu 27 - pattern: '^qcom,adreno-gmu-x[1-9][0-9][0-9]\.[0-9]$' 28 - const: qcom,adreno-gmu 29 - const: qcom,adreno-gmu-wrapper 49 - description: GMU HFI interrupt [all …]
|
| /linux/Documentation/devicetree/bindings/sram/ |
| H A D | qcom,ocmem.yaml | 120 gmu-sram@0 {
|
| /linux/arch/arm64/boot/dts/qcom/ |
| H A D | purwa.dtsi | 29 &gmu { 30 compatible = "qcom,adreno-gmu-x145.0", "qcom,adreno-gmu";
|
| H A D | sdm670.dtsi | 1366 * controlled entirely by the GMU 1375 qcom,gmu = <&gmu>; 1486 gmu: gmu@506a000 { label 1487 compatible = "qcom,adreno-gmu-615.0", "qcom,adreno-gmu"; 1492 reg-names = "gmu", "gmu_pdc", "gmu_pdc_seq"; 1496 interrupt-names = "hfi", "gmu"; 1502 clock-names = "gmu", "cxo", "axi", "memnoc";
|
| H A D | sm6350.dtsi | 1458 qcom,gmu = <&gmu>; 1542 gmu: gmu@3d6a000 { label 1543 compatible = "qcom,adreno-gmu-619.0", "qcom,adreno-gmu"; 1547 reg-names = "gmu", 1554 "gmu"; 1562 "gmu",
|
| H A D | sm8350.dtsi | 2049 qcom,gmu = <&gmu>; 2114 gmu: gmu@3d6a000 { label 2115 compatible = "qcom,adreno-gmu-660.1", "qcom,adreno-gmu"; 2120 reg-names = "gmu", "rscc", "gmu_pdc"; 2124 interrupt-names = "hfi", "gmu"; 2133 clock-names = "gmu",
|
| H A D | sc8180x.dtsi | 2277 qcom,gmu = <&gmu>; 2326 gmu: gmu@2c6a000 { label 2327 compatible = "qcom,adreno-gmu-680.1", "qcom,adreno-gmu"; 2332 reg-names = "gmu", 2338 interrupt-names = "hfi", "gmu"; 2345 clock-names = "ahb", "gmu", "cxo", "axi", "memnoc";
|
| H A D | sc7180.dtsi | 2178 qcom,gmu = <&gmu>; 2276 gmu: gmu@506a000 { label 2277 compatible = "qcom,adreno-gmu-618.0", "qcom,adreno-gmu"; 2280 reg-names = "gmu", "gmu_pdc", "gmu_pdc_seq"; 2283 interrupt-names = "hfi", "gmu"; 2288 clock-names = "gmu", "cxo", "axi", "memnoc";
|
| H A D | sm8150-mtp.dts | 353 &gmu {
|
| H A D | sm6115.dtsi | 1721 /* There's no (real) GMU, so we have to handle quite a bunch of clocks! */ 1732 "gmu", 1740 qcom,gmu = <&gmu_wrapper>; 1806 gmu_wrapper: gmu@596a000 { 1807 compatible = "qcom,adreno-gmu-wrapper"; 1809 reg-names = "gmu";
|
| H A D | agatti.dtsi | 1609 "gmu", 1620 qcom,gmu = <&gmu_wrapper>; 1689 gmu_wrapper: gmu@596a000 { 1690 compatible = "qcom,adreno-gmu-wrapper"; 1692 reg-names = "gmu";
|
| H A D | sm8150.dtsi | 2250 qcom,gmu = <&gmu>; 2303 gmu: gmu@2c6a000 { label 2304 compatible = "qcom,adreno-gmu-640.1", "qcom,adreno-gmu"; 2309 reg-names = "gmu", "gmu_pdc", "gmu_pdc_seq"; 2313 interrupt-names = "hfi", "gmu"; 2320 clock-names = "ahb", "gmu", "cxo", "axi", "memnoc";
|
| H A D | sm8450.dtsi | 2457 qcom,gmu = <&gmu>; 2531 gmu: gmu@3d6a000 { label 2532 compatible = "qcom,adreno-gmu-730.1", "qcom,adreno-gmu"; 2536 reg-names = "gmu", "rscc", "gmu_pdc"; 2540 interrupt-names = "hfi", "gmu"; 2550 "gmu", 2632 clock-names = "gmu",
|
| /linux/Documentation/devicetree/bindings/iommu/ |
| H A D | arm,smmu.yaml | 518 - const: gmu 527 - description: GMU clock
|
| /linux/drivers/iommu/arm/arm-smmu/ |
| H A D | arm-smmu-qcom.c | 38 { .compatible = "qcom,adreno-gmu", 369 { .compatible = "qcom,adreno-gmu" },
|