Skip to content

Commit b3e93cb

Browse files
committed
Revert "OMAPDSS: APPLY: add fifo-merge support"
This reverts commit 1d71f42. Adding fifo merge feature as an omapdss internal configuration was a mistake. We cannot hide from the users of omapdss the complexities of fifo merge. This commit removes the fifo merge support, which luckily is easily done as it was handled totally inside apply.c. Note that this is not a 1:1 revert, but some resolving was needed for the dss_ovl_setup_fifo. The plan is to try fifo merge again later when it is more clear how the hardware acts in various situations, and how the omapdrm wants to use fifo merge. Signed-off-by: Tomi Valkeinen <[email protected]>
1 parent fed62e5 commit b3e93cb

File tree

1 file changed

+8
-146
lines changed

1 file changed

+8
-146
lines changed

drivers/video/omap2/dss/apply.c

Lines changed: 8 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -993,11 +993,11 @@ static void dss_apply_fifo_merge(bool use_fifo_merge)
993993
dss_data.fifo_merge_dirty = true;
994994
}
995995

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)
998997
{
999998
struct ovl_priv_data *op = get_ovl_priv(ovl);
1000999
u32 fifo_low, fifo_high;
1000+
bool use_fifo_merge = false;
10011001

10021002
if (!op->enabled && !op->enabling)
10031003
return;
@@ -1008,8 +1008,7 @@ static void dss_ovl_setup_fifo(struct omap_overlay *ovl,
10081008
dss_apply_ovl_fifo_thresholds(ovl, fifo_low, fifo_high);
10091009
}
10101010

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)
10131012
{
10141013
struct omap_overlay *ovl;
10151014
struct mgr_priv_data *mp;
@@ -1020,102 +1019,26 @@ static void dss_mgr_setup_fifos(struct omap_overlay_manager *mgr,
10201019
return;
10211020

10221021
list_for_each_entry(ovl, &mgr->overlays, list)
1023-
dss_ovl_setup_fifo(ovl, use_fifo_merge);
1022+
dss_ovl_setup_fifo(ovl);
10241023
}
10251024

1026-
static void dss_setup_fifos(bool use_fifo_merge)
1025+
static void dss_setup_fifos(void)
10271026
{
10281027
const int num_mgrs = omap_dss_get_num_overlay_managers();
10291028
struct omap_overlay_manager *mgr;
10301029
int i;
10311030

10321031
for (i = 0; i < num_mgrs; ++i) {
10331032
mgr = omap_dss_get_overlay_manager(i);
1034-
dss_mgr_setup_fifos(mgr, use_fifo_merge);
1033+
dss_mgr_setup_fifos(mgr);
10351034
}
10361035
}
10371036

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-
11131037
int dss_mgr_enable(struct omap_overlay_manager *mgr)
11141038
{
11151039
struct mgr_priv_data *mp = get_mgr_priv(mgr);
11161040
unsigned long flags;
11171041
int r;
1118-
bool fifo_merge;
11191042

11201043
mutex_lock(&apply_lock);
11211044

@@ -1133,23 +1056,11 @@ int dss_mgr_enable(struct omap_overlay_manager *mgr)
11331056
goto err;
11341057
}
11351058

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();
11411060

11421061
dss_write_regs();
11431062
dss_set_go_bits();
11441063

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-
11531064
if (!mgr_manual_update(mgr))
11541065
mp->updating = true;
11551066

@@ -1174,7 +1085,6 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
11741085
{
11751086
struct mgr_priv_data *mp = get_mgr_priv(mgr);
11761087
unsigned long flags;
1177-
bool fifo_merge;
11781088

11791089
mutex_lock(&apply_lock);
11801090

@@ -1189,16 +1099,8 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
11891099
mp->updating = false;
11901100
mp->enabled = false;
11911101

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-
11991102
spin_unlock_irqrestore(&data_lock, flags);
12001103

1201-
wait_pending_extra_info_updates();
12021104
out:
12031105
mutex_unlock(&apply_lock);
12041106
}
@@ -1505,7 +1407,6 @@ int dss_ovl_enable(struct omap_overlay *ovl)
15051407
{
15061408
struct ovl_priv_data *op = get_ovl_priv(ovl);
15071409
unsigned long flags;
1508-
bool fifo_merge;
15091410
int r;
15101411

15111412
mutex_lock(&apply_lock);
@@ -1531,22 +1432,7 @@ int dss_ovl_enable(struct omap_overlay *ovl)
15311432
goto err2;
15321433
}
15331434

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();
15501436

15511437
op->enabling = false;
15521438
dss_apply_ovl_enable(ovl, true);
@@ -1556,9 +1442,6 @@ int dss_ovl_enable(struct omap_overlay *ovl)
15561442

15571443
spin_unlock_irqrestore(&data_lock, flags);
15581444

1559-
/* wait for overlay to be enabled */
1560-
wait_pending_extra_info_updates();
1561-
15621445
mutex_unlock(&apply_lock);
15631446

15641447
return 0;
@@ -1574,7 +1457,6 @@ int dss_ovl_disable(struct omap_overlay *ovl)
15741457
{
15751458
struct ovl_priv_data *op = get_ovl_priv(ovl);
15761459
unsigned long flags;
1577-
bool fifo_merge;
15781460
int r;
15791461

15801462
mutex_lock(&apply_lock);
@@ -1589,34 +1471,14 @@ int dss_ovl_disable(struct omap_overlay *ovl)
15891471
goto err;
15901472
}
15911473

1592-
/* step 1: disable the overlay */
15931474
spin_lock_irqsave(&data_lock, flags);
15941475

15951476
dss_apply_ovl_enable(ovl, false);
1596-
15971477
dss_write_regs();
15981478
dss_set_go_bits();
15991479

16001480
spin_unlock_irqrestore(&data_lock, flags);
16011481

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-
16201482
mutex_unlock(&apply_lock);
16211483

16221484
return 0;

0 commit comments

Comments
 (0)