@@ -584,7 +584,7 @@ static int etnaviv_hw_reset(struct etnaviv_gpu *gpu)
584
584
/* We rely on the GPU running, so program the clock */
585
585
etnaviv_gpu_update_clock (gpu );
586
586
587
- gpu -> fe_running = false ;
587
+ gpu -> state = ETNA_GPU_STATE_RESET ;
588
588
gpu -> exec_state = -1 ;
589
589
if (gpu -> mmu_context )
590
590
etnaviv_iommu_context_put (gpu -> mmu_context );
@@ -659,8 +659,6 @@ void etnaviv_gpu_start_fe(struct etnaviv_gpu *gpu, u32 address, u16 prefetch)
659
659
VIVS_MMUv2_SEC_COMMAND_CONTROL_ENABLE |
660
660
VIVS_MMUv2_SEC_COMMAND_CONTROL_PREFETCH (prefetch ));
661
661
}
662
-
663
- gpu -> fe_running = true;
664
662
}
665
663
666
664
static void etnaviv_gpu_start_fe_idleloop (struct etnaviv_gpu * gpu ,
@@ -669,6 +667,8 @@ static void etnaviv_gpu_start_fe_idleloop(struct etnaviv_gpu *gpu,
669
667
u16 prefetch ;
670
668
u32 address ;
671
669
670
+ WARN_ON (gpu -> state != ETNA_GPU_STATE_INITIALIZED );
671
+
672
672
/* setup the MMU */
673
673
etnaviv_iommu_restore (gpu , context );
674
674
@@ -678,6 +678,8 @@ static void etnaviv_gpu_start_fe_idleloop(struct etnaviv_gpu *gpu,
678
678
& gpu -> mmu_context -> cmdbuf_mapping );
679
679
680
680
etnaviv_gpu_start_fe (gpu , address , prefetch );
681
+
682
+ gpu -> state = ETNA_GPU_STATE_RUNNING ;
681
683
}
682
684
683
685
static void etnaviv_gpu_setup_pulse_eater (struct etnaviv_gpu * gpu )
@@ -713,6 +715,9 @@ static void etnaviv_gpu_setup_pulse_eater(struct etnaviv_gpu *gpu)
713
715
714
716
static void etnaviv_gpu_hw_init (struct etnaviv_gpu * gpu )
715
717
{
718
+ WARN_ON (!(gpu -> state == ETNA_GPU_STATE_IDENTIFIED ||
719
+ gpu -> state == ETNA_GPU_STATE_RESET ));
720
+
716
721
if ((etnaviv_is_model_rev (gpu , GC320 , 0x5007 ) ||
717
722
etnaviv_is_model_rev (gpu , GC320 , 0x5220 )) &&
718
723
gpu_read (gpu , VIVS_HI_CHIP_TIME ) != 0x2062400 ) {
@@ -759,6 +764,8 @@ static void etnaviv_gpu_hw_init(struct etnaviv_gpu *gpu)
759
764
etnaviv_gpu_setup_pulse_eater (gpu );
760
765
761
766
gpu_write (gpu , VIVS_HI_INTR_ENBL , ~0U );
767
+
768
+ gpu -> state = ETNA_GPU_STATE_INITIALIZED ;
762
769
}
763
770
764
771
int etnaviv_gpu_init (struct etnaviv_gpu * gpu )
@@ -801,6 +808,8 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
801
808
(gpu -> identity .minor_features10 & chipMinorFeatures10_SECURITY_AHB ))
802
809
gpu -> sec_mode = ETNA_SEC_KERNEL ;
803
810
811
+ gpu -> state = ETNA_GPU_STATE_IDENTIFIED ;
812
+
804
813
ret = etnaviv_hw_reset (gpu );
805
814
if (ret ) {
806
815
dev_err (gpu -> dev , "GPU reset failed\n" );
@@ -1376,7 +1385,7 @@ struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit)
1376
1385
goto out_unlock ;
1377
1386
}
1378
1387
1379
- if (! gpu -> fe_running )
1388
+ if (gpu -> state == ETNA_GPU_STATE_INITIALIZED )
1380
1389
etnaviv_gpu_start_fe_idleloop (gpu , submit -> mmu_context );
1381
1390
1382
1391
if (submit -> prev_mmu_context )
@@ -1642,7 +1651,7 @@ int etnaviv_gpu_wait_idle(struct etnaviv_gpu *gpu, unsigned int timeout_ms)
1642
1651
1643
1652
static void etnaviv_gpu_hw_suspend (struct etnaviv_gpu * gpu )
1644
1653
{
1645
- if (gpu -> initialized && gpu -> fe_running ) {
1654
+ if (gpu -> state == ETNA_GPU_STATE_RUNNING ) {
1646
1655
/* Replace the last WAIT with END */
1647
1656
mutex_lock (& gpu -> lock );
1648
1657
etnaviv_buffer_end (gpu );
@@ -1655,7 +1664,7 @@ static void etnaviv_gpu_hw_suspend(struct etnaviv_gpu *gpu)
1655
1664
*/
1656
1665
etnaviv_gpu_wait_idle (gpu , 100 );
1657
1666
1658
- gpu -> fe_running = false ;
1667
+ gpu -> state = ETNA_GPU_STATE_INITIALIZED ;
1659
1668
}
1660
1669
1661
1670
gpu -> exec_state = -1 ;
@@ -1926,6 +1935,8 @@ static int etnaviv_gpu_rpm_suspend(struct device *dev)
1926
1935
1927
1936
etnaviv_gpu_hw_suspend (gpu );
1928
1937
1938
+ gpu -> state = ETNA_GPU_STATE_IDENTIFIED ;
1939
+
1929
1940
return etnaviv_gpu_clk_disable (gpu );
1930
1941
}
1931
1942
@@ -1939,7 +1950,7 @@ static int etnaviv_gpu_rpm_resume(struct device *dev)
1939
1950
return ret ;
1940
1951
1941
1952
/* Re-initialise the basic hardware state */
1942
- if (gpu -> initialized ) {
1953
+ if (gpu -> state == ETNA_GPU_STATE_IDENTIFIED ) {
1943
1954
ret = etnaviv_gpu_hw_resume (gpu );
1944
1955
if (ret ) {
1945
1956
etnaviv_gpu_clk_disable (gpu );
0 commit comments