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

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



555.42.02 has incompatible changes to
NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED.

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 c21b0397
Loading
Loading
Loading
Loading
+24 −18
Original line number Diff line number Diff line
@@ -1442,6 +1442,21 @@ r535_disp_init(struct nvkm_disp *disp)
	return 0;
}

static int
r535_disp_get_supported(struct nvkm_disp *disp, unsigned long *pmask)
{
	NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS *ctrl;

	ctrl = nvkm_gsp_rm_ctrl_rd(&disp->rm.objcom,
				   NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED, sizeof(*ctrl));
	if (IS_ERR(ctrl))
		return PTR_ERR(ctrl);

	*pmask = ctrl->displayMask;
	nvkm_gsp_rm_ctrl_done(&disp->rm.objcom, ctrl);
	return 0;
}

static int
r535_disp_get_static_info(struct nvkm_disp *disp)
{
@@ -1468,6 +1483,7 @@ r535_disp_oneinit(struct nvkm_disp *disp)
	struct nvkm_gsp *gsp = device->gsp;
	const struct nvkm_rm_api *rmapi = gsp->rm->api;
	NV2080_CTRL_INTERNAL_DISPLAY_WRITE_INST_MEM_PARAMS *ctrl;
	unsigned long mask;
	int ret, i;

	/* RAMIN. */
@@ -1634,26 +1650,15 @@ r535_disp_oneinit(struct nvkm_disp *disp)
			return ret;
	}

	/* */
	{
		NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS *ctrl;
		unsigned long mask;
		int i;

		ctrl = nvkm_gsp_rm_ctrl_rd(&disp->rm.objcom,
					   NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED, sizeof(*ctrl));
		if (IS_ERR(ctrl))
			return PTR_ERR(ctrl);

		mask = ctrl->displayMask;
		nvkm_gsp_rm_ctrl_done(&disp->rm.objcom, ctrl);
	ret = rmapi->disp->get_supported(disp, &mask);
	if (ret)
		return ret;

	for_each_set_bit(i, &mask, 32) {
		ret = r535_outp_new(disp, i);
		if (ret)
			return ret;
	}
	}

	ret = nvkm_event_init(&r535_disp_event, &gsp->subdev, 3, 32, &disp->rm.event);
	if (WARN_ON(ret))
@@ -1746,6 +1751,7 @@ r535_disp_new(const struct nvkm_disp_func *hw, struct nvkm_device *device,
const struct nvkm_rm_api_disp
r535_disp = {
	.get_static_info = r535_disp_get_static_info,
	.get_supported = r535_disp_get_supported,
	.bl_ctrl = r535_bl_ctrl,
	.dp = {
		.set_indexed_link_rates = r535_dp_set_indexed_link_rates,
+1 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ struct nvkm_rm_api {

	const struct nvkm_rm_api_disp {
		int (*get_static_info)(struct nvkm_disp *);
		int (*get_supported)(struct nvkm_disp *, unsigned long *display_mask);

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