Skip to content

Commit e88bbc9

Browse files
committed
Revert "drm/msm/mdp5: provide dynamic bandwidth management"
This reverts commit c1d12c1. Breaks armv7 build ERROR: modpost: "__aeabi_ldivmod" [drivers/gpu/drm/msm/msm.ko] undefined! Signed-off-by: Rob Clark <robdclark@chromium.org>
1 parent c1d12c1 commit e88bbc9

4 files changed

Lines changed: 36 additions & 181 deletions

File tree

drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,6 @@ struct mdp5_crtc {
4343
/* for unref'ing cursor bo's after scanout completes: */
4444
struct drm_flip_work unref_cursor_work;
4545

46-
/* for lowering down the bandwidth after previous frame is complete */
47-
struct drm_flip_work lower_bw_work;
48-
4946
struct mdp_irq vblank;
5047
struct mdp_irq err;
5148
struct mdp_irq pp_done;
@@ -174,28 +171,12 @@ static void unref_cursor_worker(struct drm_flip_work *work, void *val)
174171
drm_gem_object_put(val);
175172
}
176173

177-
static void lower_bw_worker(struct drm_flip_work *work, void *val)
178-
{
179-
struct mdp5_crtc *mdp5_crtc =
180-
container_of(work, struct mdp5_crtc, lower_bw_work);
181-
struct drm_crtc *crtc = &mdp5_crtc->base;
182-
struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
183-
struct mdp5_kms *mdp5_kms = get_kms(&mdp5_crtc->base);
184-
185-
if (mdp5_cstate->old_crtc_bw > mdp5_cstate->new_crtc_bw) {
186-
DBG("DOWN BW to %lld\n", mdp5_cstate->new_crtc_bw);
187-
mdp5_kms_set_bandwidth(mdp5_kms);
188-
mdp5_cstate->old_crtc_bw = mdp5_cstate->new_crtc_bw;
189-
}
190-
}
191-
192174
static void mdp5_crtc_destroy(struct drm_crtc *crtc)
193175
{
194176
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
195177

196178
drm_crtc_cleanup(crtc);
197179
drm_flip_work_cleanup(&mdp5_crtc->unref_cursor_work);
198-
drm_flip_work_cleanup(&mdp5_crtc->lower_bw_work);
199180

200181
kfree(mdp5_crtc);
201182
}
@@ -710,7 +691,6 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
710691
struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state,
711692
crtc);
712693
struct mdp5_kms *mdp5_kms = get_kms(crtc);
713-
struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc_state);
714694
struct drm_plane *plane;
715695
struct drm_device *dev = crtc->dev;
716696
struct plane_state pstates[STAGE_MAX + 1];
@@ -721,7 +701,6 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
721701
bool need_right_mixer = false;
722702
int cnt = 0, i;
723703
int ret;
724-
u64 crtc_bw = 0;
725704
enum mdp_mixer_stage_id start;
726705

727706
DBG("%s: check", crtc->name);
@@ -739,9 +718,6 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
739718
*/
740719
if (pstates[cnt].state->r_hwpipe)
741720
need_right_mixer = true;
742-
743-
crtc_bw += pstates[cnt].state->plane_bw;
744-
745721
cnt++;
746722

747723
if (plane->type == DRM_PLANE_TYPE_CURSOR)
@@ -754,10 +730,6 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
754730

755731
hw_cfg = mdp5_cfg_get_hw_config(mdp5_kms->cfg);
756732

757-
if (hw_cfg->perf.ab_inefficiency)
758-
crtc_bw = mult_frac(crtc_bw, hw_cfg->perf.ab_inefficiency, 100);
759-
mdp5_cstate->new_crtc_bw = crtc_bw;
760-
761733
/*
762734
* we need a right hwmixer if the mode's width is greater than a single
763735
* LM's max width
@@ -813,7 +785,6 @@ static void mdp5_crtc_atomic_flush(struct drm_crtc *crtc,
813785
{
814786
struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
815787
struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
816-
struct mdp5_kms *mdp5_kms = get_kms(crtc);
817788
struct drm_device *dev = crtc->dev;
818789
unsigned long flags;
819790

@@ -837,12 +808,6 @@ static void mdp5_crtc_atomic_flush(struct drm_crtc *crtc,
837808

838809
blend_setup(crtc);
839810

840-
if (mdp5_cstate->old_crtc_bw < mdp5_cstate->new_crtc_bw) {
841-
DBG("UP BW to %lld\n", mdp5_cstate->new_crtc_bw);
842-
mdp5_kms_set_bandwidth(mdp5_kms);
843-
mdp5_cstate->old_crtc_bw = mdp5_cstate->new_crtc_bw;
844-
}
845-
846811
/* PP_DONE irq is only used by command mode for now.
847812
* It is better to request pending before FLUSH and START trigger
848813
* to make sure no pp_done irq missed.
@@ -1190,19 +1155,13 @@ static void mdp5_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
11901155
{
11911156
struct mdp5_crtc *mdp5_crtc = container_of(irq, struct mdp5_crtc, vblank);
11921157
struct drm_crtc *crtc = &mdp5_crtc->base;
1193-
struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
11941158
struct msm_drm_private *priv = crtc->dev->dev_private;
11951159
unsigned pending;
11961160

11971161
mdp_irq_unregister(&get_kms(crtc)->base, &mdp5_crtc->vblank);
11981162

11991163
pending = atomic_xchg(&mdp5_crtc->pending, 0);
12001164

1201-
if (mdp5_cstate->old_crtc_bw > mdp5_cstate->new_crtc_bw) {
1202-
drm_flip_work_queue(&mdp5_crtc->lower_bw_work, NULL);
1203-
drm_flip_work_commit(&mdp5_crtc->lower_bw_work, priv->wq);
1204-
}
1205-
12061165
if (pending & PENDING_FLIP) {
12071166
complete_flip(crtc, NULL);
12081167
}
@@ -1359,9 +1318,6 @@ struct drm_crtc *mdp5_crtc_init(struct drm_device *dev,
13591318
drm_flip_work_init(&mdp5_crtc->unref_cursor_work,
13601319
"unref cursor", unref_cursor_worker);
13611320

1362-
drm_flip_work_init(&mdp5_crtc->lower_bw_work,
1363-
"lower bw", lower_bw_worker);
1364-
13651321
drm_crtc_helper_add(crtc, &mdp5_crtc_helper_funcs);
13661322

13671323
return crtc;

drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c

Lines changed: 36 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
#include "msm_mmu.h"
2020
#include "mdp5_kms.h"
2121

22-
#define MDP5_DEFAULT_BW MBps_to_icc(6400)
23-
2422
static int mdp5_hw_init(struct msm_kms *kms)
2523
{
2624
struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
@@ -298,28 +296,6 @@ static const struct mdp_kms_funcs kms_funcs = {
298296
.set_irqmask = mdp5_set_irqmask,
299297
};
300298

301-
void mdp5_kms_set_bandwidth(struct mdp5_kms *mdp5_kms)
302-
{
303-
int i;
304-
u32 full_bw = 0;
305-
struct drm_crtc *tmp_crtc;
306-
307-
if (!mdp5_kms->num_paths)
308-
return;
309-
310-
drm_for_each_crtc(tmp_crtc, mdp5_kms->dev) {
311-
if (!tmp_crtc->enabled)
312-
continue;
313-
314-
full_bw += Bps_to_icc(to_mdp5_crtc_state(tmp_crtc->state)->new_crtc_bw / mdp5_kms->num_paths);
315-
}
316-
317-
DBG("SET BW to %d\n", full_bw);
318-
319-
for (i = 0; i < mdp5_kms->num_paths; i++)
320-
icc_set_bw(mdp5_kms->paths[i], full_bw, full_bw);
321-
}
322-
323299
static int mdp5_disable(struct mdp5_kms *mdp5_kms)
324300
{
325301
DBG("");
@@ -337,14 +313,6 @@ static int mdp5_disable(struct mdp5_kms *mdp5_kms)
337313
if (mdp5_kms->lut_clk)
338314
clk_disable_unprepare(mdp5_kms->lut_clk);
339315

340-
if (!mdp5_kms->enable_count) {
341-
int i;
342-
343-
for (i = 0; i < mdp5_kms->num_paths; i++)
344-
icc_set_bw(mdp5_kms->paths[i], 0, 0);
345-
icc_set_bw(mdp5_kms->path_rot, 0, 0);
346-
}
347-
348316
return 0;
349317
}
350318

@@ -354,14 +322,6 @@ static int mdp5_enable(struct mdp5_kms *mdp5_kms)
354322

355323
mdp5_kms->enable_count++;
356324

357-
if (mdp5_kms->enable_count == 1) {
358-
int i;
359-
360-
for (i = 0; i < mdp5_kms->num_paths; i++)
361-
icc_set_bw(mdp5_kms->paths[i], 0, MDP5_DEFAULT_BW);
362-
icc_set_bw(mdp5_kms->path_rot, 0, MDP5_DEFAULT_BW);
363-
}
364-
365325
clk_prepare_enable(mdp5_kms->ahb_clk);
366326
clk_prepare_enable(mdp5_kms->axi_clk);
367327
clk_prepare_enable(mdp5_kms->core_clk);
@@ -868,48 +828,13 @@ static int interface_init(struct mdp5_kms *mdp5_kms)
868828
return 0;
869829
}
870830

871-
static int mdp5_setup_interconnect(struct mdp5_kms *mdp5_kms)
872-
{
873-
struct icc_path *path0 = of_icc_get(&mdp5_kms->pdev->dev, "mdp0-mem");
874-
struct icc_path *path1 = of_icc_get(&mdp5_kms->pdev->dev, "mdp1-mem");
875-
struct icc_path *path_rot = of_icc_get(&mdp5_kms->pdev->dev, "rotator-mem");
876-
877-
if (IS_ERR(path0))
878-
return PTR_ERR(path0);
879-
880-
if (!path0) {
881-
/* no interconnect support is not necessarily a fatal
882-
* condition, the platform may simply not have an
883-
* interconnect driver yet. But warn about it in case
884-
* bootloader didn't setup bus clocks high enough for
885-
* scanout.
886-
*/
887-
dev_warn(&mdp5_kms->pdev->dev, "No interconnect support may cause display underflows!\n");
888-
return 0;
889-
}
890-
891-
mdp5_kms->paths[0] = path0;
892-
mdp5_kms->num_paths = 1;
893-
894-
if (!IS_ERR_OR_NULL(path1)) {
895-
mdp5_kms->paths[1] = path1;
896-
mdp5_kms->num_paths++;
897-
}
898-
899-
if (!IS_ERR_OR_NULL(path_rot))
900-
mdp5_kms->path_rot = path_rot;
901-
902-
return 0;
903-
}
904-
905831
static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
906832
{
907833
struct msm_drm_private *priv = dev->dev_private;
908834
struct mdp5_kms *mdp5_kms;
909835
struct mdp5_cfg *config;
910836
u32 major, minor;
911837
int ret;
912-
int i;
913838

914839
mdp5_kms = devm_kzalloc(&pdev->dev, sizeof(*mdp5_kms), GFP_KERNEL);
915840
if (!mdp5_kms) {
@@ -934,14 +859,6 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
934859
goto fail;
935860
}
936861

937-
ret = mdp5_setup_interconnect(mdp5_kms);
938-
if (ret)
939-
goto fail;
940-
941-
for (i = 0; i < mdp5_kms->num_paths; i++)
942-
icc_set_bw(mdp5_kms->paths[i], 0, MDP5_DEFAULT_BW);
943-
icc_set_bw(mdp5_kms->path_rot, 0, MDP5_DEFAULT_BW);
944-
945862
/* mandatory clocks: */
946863
ret = get_clk(pdev, &mdp5_kms->axi_clk, "bus", true);
947864
if (ret)
@@ -1051,10 +968,46 @@ static const struct component_ops mdp5_ops = {
1051968
.unbind = mdp5_unbind,
1052969
};
1053970

971+
static int mdp5_setup_interconnect(struct platform_device *pdev)
972+
{
973+
struct icc_path *path0 = of_icc_get(&pdev->dev, "mdp0-mem");
974+
struct icc_path *path1 = of_icc_get(&pdev->dev, "mdp1-mem");
975+
struct icc_path *path_rot = of_icc_get(&pdev->dev, "rotator-mem");
976+
977+
if (IS_ERR(path0))
978+
return PTR_ERR(path0);
979+
980+
if (!path0) {
981+
/* no interconnect support is not necessarily a fatal
982+
* condition, the platform may simply not have an
983+
* interconnect driver yet. But warn about it in case
984+
* bootloader didn't setup bus clocks high enough for
985+
* scanout.
986+
*/
987+
dev_warn(&pdev->dev, "No interconnect support may cause display underflows!\n");
988+
return 0;
989+
}
990+
991+
icc_set_bw(path0, 0, MBps_to_icc(6400));
992+
993+
if (!IS_ERR_OR_NULL(path1))
994+
icc_set_bw(path1, 0, MBps_to_icc(6400));
995+
if (!IS_ERR_OR_NULL(path_rot))
996+
icc_set_bw(path_rot, 0, MBps_to_icc(6400));
997+
998+
return 0;
999+
}
1000+
10541001
static int mdp5_dev_probe(struct platform_device *pdev)
10551002
{
1003+
int ret;
1004+
10561005
DBG("");
10571006

1007+
ret = mdp5_setup_interconnect(pdev);
1008+
if (ret)
1009+
return ret;
1010+
10581011
return component_add(&pdev->dev, &mdp5_ops);
10591012
}
10601013

drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "mdp5_ctl.h"
1818
#include "mdp5_smp.h"
1919

20-
struct icc_path;
2120
struct mdp5_kms {
2221
struct mdp_kms base;
2322

@@ -69,10 +68,6 @@ struct mdp5_kms {
6968
struct mdp_irq error_handler;
7069

7170
int enable_count;
72-
73-
int num_paths;
74-
struct icc_path *paths[2];
75-
struct icc_path *path_rot;
7671
};
7772
#define to_mdp5_kms(x) container_of(x, struct mdp5_kms, base)
7873

@@ -105,8 +100,6 @@ struct mdp5_plane_state {
105100

106101
/* assigned by crtc blender */
107102
enum mdp_mixer_stage_id stage;
108-
109-
u64 plane_bw;
110103
};
111104
#define to_mdp5_plane_state(x) \
112105
container_of(x, struct mdp5_plane_state, base)
@@ -137,9 +130,6 @@ struct mdp5_crtc_state {
137130
* writing CTL[n].START until encoder->enable()
138131
*/
139132
bool defer_start;
140-
141-
u64 new_crtc_bw;
142-
u64 old_crtc_bw;
143133
};
144134
#define to_mdp5_crtc_state(x) \
145135
container_of(x, struct mdp5_crtc_state, base)
@@ -302,8 +292,6 @@ void mdp5_encoder_set_intf_mode(struct drm_encoder *encoder, bool cmd_mode);
302292
int mdp5_encoder_get_linecount(struct drm_encoder *encoder);
303293
u32 mdp5_encoder_get_framecount(struct drm_encoder *encoder);
304294

305-
void mdp5_kms_set_bandwidth(struct mdp5_kms *mdp5_kms);
306-
307295
#ifdef CONFIG_DRM_MSM_DSI
308296
void mdp5_cmd_encoder_mode_set(struct drm_encoder *encoder,
309297
struct drm_display_mode *mode,

0 commit comments

Comments
 (0)