Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1de2b52 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/disp/g94-: port OR DP training pattern control to nvkm_ior



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent a3e81117
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -122,7 +122,7 @@ nvkm_dp_train_pattern(struct lt_state *lt, u8 pattern)
	u8 sink_tp;
	u8 sink_tp;


	OUTP_TRACE(&dp->outp, "training pattern %d", pattern);
	OUTP_TRACE(&dp->outp, "training pattern %d", pattern);
	dp->func->pattern(dp, pattern);
	dp->outp.ior->func->dp.pattern(dp->outp.ior, pattern);


	nvkm_rdaux(dp->aux, DPCD_LC02, &sink_tp, 1);
	nvkm_rdaux(dp->aux, DPCD_LC02, &sink_tp, 1);
	sink_tp &= ~DPCD_LC02_TRAINING_PATTERN_SET;
	sink_tp &= ~DPCD_LC02_TRAINING_PATTERN_SET;
+0 −2
Original line number Original line Diff line number Diff line
@@ -33,7 +33,6 @@ struct nvkm_dp {
#define nvkm_output_dp nvkm_dp
#define nvkm_output_dp nvkm_dp


struct nvkm_output_dp_func {
struct nvkm_output_dp_func {
	int (*pattern)(struct nvkm_output_dp *, int);
	int (*drv_ctl)(struct nvkm_output_dp *, int ln, int vs, int pe, int pc);
	int (*drv_ctl)(struct nvkm_output_dp *, int ln, int vs, int pe, int pc);
	void (*vcpi)(struct nvkm_output_dp *, int head, u8 start_slot,
	void (*vcpi)(struct nvkm_output_dp *, int head, u8 start_slot,
		     u8 num_slots, u16 pbn, u16 aligned_pbn);
		     u8 num_slots, u16 pbn, u16 aligned_pbn);
@@ -57,7 +56,6 @@ void gf119_sor_dp_vcpi(struct nvkm_dp *, int, u8, u8, u16, u16);


int gm107_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
int gm107_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
		     struct nvkm_output **);
		     struct nvkm_output **);
int gm107_sor_dp_pattern(struct nvkm_dp *, int);


int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
int gm200_sor_dp_new(struct nvkm_disp *, int, struct dcb_output *,
		     struct nvkm_output **);
		     struct nvkm_output **);
+5 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,7 @@ struct nvkm_ior_func {
		u8 lanes[4];
		u8 lanes[4];
		int (*links)(struct nvkm_ior *, struct nvkm_i2c_aux *);
		int (*links)(struct nvkm_ior *, struct nvkm_i2c_aux *);
		void (*power)(struct nvkm_ior *, int nr);
		void (*power)(struct nvkm_ior *, int nr);
		void (*pattern)(struct nvkm_ior *, int pattern);
	} dp;
	} dp;
};
};


@@ -84,9 +85,13 @@ void nv50_sor_power(struct nvkm_ior *, bool, bool, bool, bool, bool);
void g94_sor_state(struct nvkm_ior *, struct nvkm_ior_state *);
void g94_sor_state(struct nvkm_ior *, struct nvkm_ior_state *);
int g94_sor_dp_links(struct nvkm_ior *, struct nvkm_i2c_aux *);
int g94_sor_dp_links(struct nvkm_ior *, struct nvkm_i2c_aux *);
void g94_sor_dp_power(struct nvkm_ior *, int);
void g94_sor_dp_power(struct nvkm_ior *, int);
void g94_sor_dp_pattern(struct nvkm_ior *, int);


void gf119_sor_state(struct nvkm_ior *, struct nvkm_ior_state *);
void gf119_sor_state(struct nvkm_ior *, struct nvkm_ior_state *);
int gf119_sor_dp_links(struct nvkm_ior *, struct nvkm_i2c_aux *);
int gf119_sor_dp_links(struct nvkm_ior *, struct nvkm_i2c_aux *);
void gf119_sor_dp_pattern(struct nvkm_ior *, int);

void gm107_sor_dp_pattern(struct nvkm_ior *, int);


void g84_hdmi_ctrl(struct nvkm_ior *, int, bool, u8, u8, u8 *, u8 , u8 *, u8);
void g84_hdmi_ctrl(struct nvkm_ior *, int, bool, u8, u8, u8 *, u8 , u8 *, u8);
void gt215_hdmi_ctrl(struct nvkm_ior *, int, bool, u8, u8, u8 *, u8 , u8 *, u8);
void gt215_hdmi_ctrl(struct nvkm_ior *, int, bool, u8, u8, u8 *, u8 , u8 *, u8);
+0 −7
Original line number Original line Diff line number Diff line
@@ -45,12 +45,6 @@ nv50_pior_output_new(struct nvkm_disp *disp, int index,
/******************************************************************************
/******************************************************************************
 * DisplayPort
 * DisplayPort
 *****************************************************************************/
 *****************************************************************************/
static int
nv50_pior_output_dp_pattern(struct nvkm_output_dp *outp, int pattern)
{
	return 0;
}

static int
static int
nv50_pior_dp_links(struct nvkm_ior *pior, struct nvkm_i2c_aux *aux)
nv50_pior_dp_links(struct nvkm_ior *pior, struct nvkm_i2c_aux *aux)
{
{
@@ -63,7 +57,6 @@ nv50_pior_dp_links(struct nvkm_ior *pior, struct nvkm_i2c_aux *aux)


static const struct nvkm_output_dp_func
static const struct nvkm_output_dp_func
nv50_pior_output_dp_func = {
nv50_pior_output_dp_func = {
	.pattern = nv50_pior_output_dp_pattern,
};
};


int
int
+5 −6
Original line number Original line Diff line number Diff line
@@ -81,13 +81,12 @@ g94_sor_dp_drv_ctl(struct nvkm_output_dp *outp, int ln, int vs, int pe, int pc)
	return 0;
	return 0;
}
}


static int
void
g94_sor_dp_pattern(struct nvkm_output_dp *outp, int pattern)
g94_sor_dp_pattern(struct nvkm_ior *sor, int pattern)
{
{
	struct nvkm_device *device = outp->base.disp->engine.subdev.device;
	struct nvkm_device *device = sor->disp->engine.subdev.device;
	const u32 loff = g94_sor_loff(outp);
	const u32 loff = nv50_sor_link(sor);
	nvkm_mask(device, 0x61c10c + loff, 0x0f000000, pattern << 24);
	nvkm_mask(device, 0x61c10c + loff, 0x0f000000, pattern << 24);
	return 0;
}
}


void
void
@@ -131,7 +130,6 @@ g94_sor_dp_links(struct nvkm_ior *sor, struct nvkm_i2c_aux *aux)


static const struct nvkm_output_dp_func
static const struct nvkm_output_dp_func
g94_sor_dp_func = {
g94_sor_dp_func = {
	.pattern = g94_sor_dp_pattern,
	.drv_ctl = g94_sor_dp_drv_ctl,
	.drv_ctl = g94_sor_dp_drv_ctl,
};
};


@@ -299,6 +297,7 @@ g94_sor = {
		.lanes = { 2, 1, 0, 3},
		.lanes = { 2, 1, 0, 3},
		.links = g94_sor_dp_links,
		.links = g94_sor_dp_links,
		.power = g94_sor_dp_power,
		.power = g94_sor_dp_power,
		.pattern = g94_sor_dp_pattern,
	},
	},
};
};


Loading