Commit a3f32329 authored by Ben Skeggs's avatar Ben Skeggs Committed by Dave Airlie
Browse files

drm/nouveau/gsp: add hal for disp.dp.set_indexed_link_rates()



545.23.06 has incompatible changes to
NV0073_CTRL_CMD_DP_CONFIG_INDEXED_LINK_RATES.

Signed-off-by: default avatarBen Skeggs <bskeggs@nvidia.com>
Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
Reviewed-by: default avatarTimur Tabi <ttabi@nvidia.com>
Tested-by: default avatarTimur Tabi <ttabi@nvidia.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 8f8d9bca
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -1021,15 +1021,11 @@ r535_dp_train(struct nvkm_outp *outp, bool retrain)
}

static int
r535_dp_rates(struct nvkm_outp *outp)
r535_dp_set_indexed_link_rates(struct nvkm_outp *outp)
{
	NV0073_CTRL_CMD_DP_CONFIG_INDEXED_LINK_RATES_PARAMS *ctrl;
	struct nvkm_disp *disp = outp->disp;

	if (outp->conn->info.type != DCB_CONNECTOR_eDP ||
	    !outp->dp.rates || outp->dp.rate[0].dpcd < 0)
		return 0;

	if (WARN_ON(outp->dp.rates > ARRAY_SIZE(ctrl->linkRateTbl)))
		return -EINVAL;

@@ -1045,6 +1041,18 @@ r535_dp_rates(struct nvkm_outp *outp)
	return nvkm_gsp_rm_ctrl_wr(&disp->rm.objcom, ctrl);
}

static int
r535_dp_rates(struct nvkm_outp *outp)
{
	struct nvkm_rm *rm = outp->disp->rm.objcom.client->gsp->rm;

	if (outp->conn->info.type != DCB_CONNECTOR_eDP ||
	    !outp->dp.rates || outp->dp.rate[0].dpcd < 0)
		return 0;

	return rm->api->disp->dp.set_indexed_link_rates(outp);
}

static int
r535_dp_aux_xfer(struct nvkm_outp *outp, u8 type, u32 addr, u8 *data, u8 *psize)
{
@@ -1726,4 +1734,7 @@ r535_disp_new(const struct nvkm_disp_func *hw, struct nvkm_device *device,
const struct nvkm_rm_api_disp
r535_disp = {
	.bl_ctrl = r535_bl_ctrl,
	.dp = {
		.set_indexed_link_rates = r535_dp_set_indexed_link_rates,
	}
};
+5 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
#ifndef __NVKM_RM_H__
#define __NVKM_RM_H__
#include "handles.h"
struct nvkm_outp;

struct nvkm_rm_impl {
	const struct nvkm_rm_wpr *wpr;
@@ -72,6 +73,10 @@ struct nvkm_rm_api {

	const struct nvkm_rm_api_disp {
		int (*bl_ctrl)(struct nvkm_disp *, unsigned display_id, bool set, int *val);

		struct {
			int (*set_indexed_link_rates)(struct nvkm_outp *);
		} dp;
	} *disp;

	const struct nvkm_rm_api_engine {