@@ -993,11 +993,11 @@ static void dss_apply_fifo_merge(bool use_fifo_merge)
993
993
dss_data .fifo_merge_dirty = true;
994
994
}
995
995
996
- static void dss_ovl_setup_fifo (struct omap_overlay * ovl ,
997
- bool use_fifo_merge )
996
+ static void dss_ovl_setup_fifo (struct omap_overlay * ovl )
998
997
{
999
998
struct ovl_priv_data * op = get_ovl_priv (ovl );
1000
999
u32 fifo_low , fifo_high ;
1000
+ bool use_fifo_merge = false;
1001
1001
1002
1002
if (!op -> enabled && !op -> enabling )
1003
1003
return ;
@@ -1008,8 +1008,7 @@ static void dss_ovl_setup_fifo(struct omap_overlay *ovl,
1008
1008
dss_apply_ovl_fifo_thresholds (ovl , fifo_low , fifo_high );
1009
1009
}
1010
1010
1011
- static void dss_mgr_setup_fifos (struct omap_overlay_manager * mgr ,
1012
- bool use_fifo_merge )
1011
+ static void dss_mgr_setup_fifos (struct omap_overlay_manager * mgr )
1013
1012
{
1014
1013
struct omap_overlay * ovl ;
1015
1014
struct mgr_priv_data * mp ;
@@ -1020,102 +1019,26 @@ static void dss_mgr_setup_fifos(struct omap_overlay_manager *mgr,
1020
1019
return ;
1021
1020
1022
1021
list_for_each_entry (ovl , & mgr -> overlays , list )
1023
- dss_ovl_setup_fifo (ovl , use_fifo_merge );
1022
+ dss_ovl_setup_fifo (ovl );
1024
1023
}
1025
1024
1026
- static void dss_setup_fifos (bool use_fifo_merge )
1025
+ static void dss_setup_fifos (void )
1027
1026
{
1028
1027
const int num_mgrs = omap_dss_get_num_overlay_managers ();
1029
1028
struct omap_overlay_manager * mgr ;
1030
1029
int i ;
1031
1030
1032
1031
for (i = 0 ; i < num_mgrs ; ++ i ) {
1033
1032
mgr = omap_dss_get_overlay_manager (i );
1034
- dss_mgr_setup_fifos (mgr , use_fifo_merge );
1033
+ dss_mgr_setup_fifos (mgr );
1035
1034
}
1036
1035
}
1037
1036
1038
- static int get_num_used_managers (void )
1039
- {
1040
- const int num_mgrs = omap_dss_get_num_overlay_managers ();
1041
- struct omap_overlay_manager * mgr ;
1042
- struct mgr_priv_data * mp ;
1043
- int i ;
1044
- int enabled_mgrs ;
1045
-
1046
- enabled_mgrs = 0 ;
1047
-
1048
- for (i = 0 ; i < num_mgrs ; ++ i ) {
1049
- mgr = omap_dss_get_overlay_manager (i );
1050
- mp = get_mgr_priv (mgr );
1051
-
1052
- if (!mp -> enabled )
1053
- continue ;
1054
-
1055
- enabled_mgrs ++ ;
1056
- }
1057
-
1058
- return enabled_mgrs ;
1059
- }
1060
-
1061
- static int get_num_used_overlays (void )
1062
- {
1063
- const int num_ovls = omap_dss_get_num_overlays ();
1064
- struct omap_overlay * ovl ;
1065
- struct ovl_priv_data * op ;
1066
- struct mgr_priv_data * mp ;
1067
- int i ;
1068
- int enabled_ovls ;
1069
-
1070
- enabled_ovls = 0 ;
1071
-
1072
- for (i = 0 ; i < num_ovls ; ++ i ) {
1073
- ovl = omap_dss_get_overlay (i );
1074
- op = get_ovl_priv (ovl );
1075
-
1076
- if (!op -> enabled && !op -> enabling )
1077
- continue ;
1078
-
1079
- mp = get_mgr_priv (ovl -> manager );
1080
-
1081
- if (!mp -> enabled )
1082
- continue ;
1083
-
1084
- enabled_ovls ++ ;
1085
- }
1086
-
1087
- return enabled_ovls ;
1088
- }
1089
-
1090
- static bool get_use_fifo_merge (void )
1091
- {
1092
- int enabled_mgrs = get_num_used_managers ();
1093
- int enabled_ovls = get_num_used_overlays ();
1094
-
1095
- if (!dss_has_feature (FEAT_FIFO_MERGE ))
1096
- return false;
1097
-
1098
- /*
1099
- * In theory the only requirement for fifomerge is enabled_ovls <= 1.
1100
- * However, if we have two managers enabled and set/unset the fifomerge,
1101
- * we need to set the GO bits in particular sequence for the managers,
1102
- * and wait in between.
1103
- *
1104
- * This is rather difficult as new apply calls can happen at any time,
1105
- * so we simplify the problem by requiring also that enabled_mgrs <= 1.
1106
- * In practice this shouldn't matter, because when only one overlay is
1107
- * enabled, most likely only one output is enabled.
1108
- */
1109
-
1110
- return enabled_mgrs <= 1 && enabled_ovls <= 1 ;
1111
- }
1112
-
1113
1037
int dss_mgr_enable (struct omap_overlay_manager * mgr )
1114
1038
{
1115
1039
struct mgr_priv_data * mp = get_mgr_priv (mgr );
1116
1040
unsigned long flags ;
1117
1041
int r ;
1118
- bool fifo_merge ;
1119
1042
1120
1043
mutex_lock (& apply_lock );
1121
1044
@@ -1133,23 +1056,11 @@ int dss_mgr_enable(struct omap_overlay_manager *mgr)
1133
1056
goto err ;
1134
1057
}
1135
1058
1136
- /* step 1: setup fifos/fifomerge before enabling the manager */
1137
-
1138
- fifo_merge = get_use_fifo_merge ();
1139
- dss_setup_fifos (fifo_merge );
1140
- dss_apply_fifo_merge (fifo_merge );
1059
+ dss_setup_fifos ();
1141
1060
1142
1061
dss_write_regs ();
1143
1062
dss_set_go_bits ();
1144
1063
1145
- spin_unlock_irqrestore (& data_lock , flags );
1146
-
1147
- /* wait until fifo config is in */
1148
- wait_pending_extra_info_updates ();
1149
-
1150
- /* step 2: enable the manager */
1151
- spin_lock_irqsave (& data_lock , flags );
1152
-
1153
1064
if (!mgr_manual_update (mgr ))
1154
1065
mp -> updating = true;
1155
1066
@@ -1174,7 +1085,6 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
1174
1085
{
1175
1086
struct mgr_priv_data * mp = get_mgr_priv (mgr );
1176
1087
unsigned long flags ;
1177
- bool fifo_merge ;
1178
1088
1179
1089
mutex_lock (& apply_lock );
1180
1090
@@ -1189,16 +1099,8 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
1189
1099
mp -> updating = false;
1190
1100
mp -> enabled = false;
1191
1101
1192
- fifo_merge = get_use_fifo_merge ();
1193
- dss_setup_fifos (fifo_merge );
1194
- dss_apply_fifo_merge (fifo_merge );
1195
-
1196
- dss_write_regs ();
1197
- dss_set_go_bits ();
1198
-
1199
1102
spin_unlock_irqrestore (& data_lock , flags );
1200
1103
1201
- wait_pending_extra_info_updates ();
1202
1104
out :
1203
1105
mutex_unlock (& apply_lock );
1204
1106
}
@@ -1505,7 +1407,6 @@ int dss_ovl_enable(struct omap_overlay *ovl)
1505
1407
{
1506
1408
struct ovl_priv_data * op = get_ovl_priv (ovl );
1507
1409
unsigned long flags ;
1508
- bool fifo_merge ;
1509
1410
int r ;
1510
1411
1511
1412
mutex_lock (& apply_lock );
@@ -1531,22 +1432,7 @@ int dss_ovl_enable(struct omap_overlay *ovl)
1531
1432
goto err2 ;
1532
1433
}
1533
1434
1534
- /* step 1: configure fifos/fifomerge for currently enabled ovls */
1535
-
1536
- fifo_merge = get_use_fifo_merge ();
1537
- dss_setup_fifos (fifo_merge );
1538
- dss_apply_fifo_merge (fifo_merge );
1539
-
1540
- dss_write_regs ();
1541
- dss_set_go_bits ();
1542
-
1543
- spin_unlock_irqrestore (& data_lock , flags );
1544
-
1545
- /* wait for fifo configs to go in */
1546
- wait_pending_extra_info_updates ();
1547
-
1548
- /* step 2: enable the overlay */
1549
- spin_lock_irqsave (& data_lock , flags );
1435
+ dss_setup_fifos ();
1550
1436
1551
1437
op -> enabling = false;
1552
1438
dss_apply_ovl_enable (ovl , true);
@@ -1556,9 +1442,6 @@ int dss_ovl_enable(struct omap_overlay *ovl)
1556
1442
1557
1443
spin_unlock_irqrestore (& data_lock , flags );
1558
1444
1559
- /* wait for overlay to be enabled */
1560
- wait_pending_extra_info_updates ();
1561
-
1562
1445
mutex_unlock (& apply_lock );
1563
1446
1564
1447
return 0 ;
@@ -1574,7 +1457,6 @@ int dss_ovl_disable(struct omap_overlay *ovl)
1574
1457
{
1575
1458
struct ovl_priv_data * op = get_ovl_priv (ovl );
1576
1459
unsigned long flags ;
1577
- bool fifo_merge ;
1578
1460
int r ;
1579
1461
1580
1462
mutex_lock (& apply_lock );
@@ -1589,34 +1471,14 @@ int dss_ovl_disable(struct omap_overlay *ovl)
1589
1471
goto err ;
1590
1472
}
1591
1473
1592
- /* step 1: disable the overlay */
1593
1474
spin_lock_irqsave (& data_lock , flags );
1594
1475
1595
1476
dss_apply_ovl_enable (ovl , false);
1596
-
1597
1477
dss_write_regs ();
1598
1478
dss_set_go_bits ();
1599
1479
1600
1480
spin_unlock_irqrestore (& data_lock , flags );
1601
1481
1602
- /* wait for the overlay to be disabled */
1603
- wait_pending_extra_info_updates ();
1604
-
1605
- /* step 2: configure fifos/fifomerge */
1606
- spin_lock_irqsave (& data_lock , flags );
1607
-
1608
- fifo_merge = get_use_fifo_merge ();
1609
- dss_setup_fifos (fifo_merge );
1610
- dss_apply_fifo_merge (fifo_merge );
1611
-
1612
- dss_write_regs ();
1613
- dss_set_go_bits ();
1614
-
1615
- spin_unlock_irqrestore (& data_lock , flags );
1616
-
1617
- /* wait for fifo config to go in */
1618
- wait_pending_extra_info_updates ();
1619
-
1620
1482
mutex_unlock (& apply_lock );
1621
1483
1622
1484
return 0 ;
0 commit comments