[PATCH 01/12] drm/amd/display: Add I2C escape to support query device exist.

Paul Menzel pmenzel at molgen.mpg.de
Tue Mar 15 08:25:28 UTC 2022


Dear Augustin,


Am 10.03.22 um 23:20 schrieb Agustin Gutierrez:
> From: "JinZe.Xu" <JinZe.Xu at amd.com>

Please remove the dot/period and use Jin Ze Xu.

Also please remove the dot/period at the end of the git commit message 
summary.

> [How]
> 1. Search OEM I2C info from BIOS and compare with input parameter.
> 2. If BIOS doesn't record it, just try to read one byte.

Please describe the problem in more detail.

> Reviewed-by: Aric Cyr <Aric.Cyr at amd.com>
> Acked-by: Agustin Gutierrez <agustin.gutierrez at amd.com>
> Signed-off-by: JinZe.Xu <JinZe.Xu at amd.com>

Ditto.

> ---
>   drivers/gpu/drm/amd/display/dc/core/dc.c     | 13 ++++++++++
>   drivers/gpu/drm/amd/display/dc/dc_link.h     |  5 ++++
>   drivers/gpu/drm/amd/display/dc/dce/dce_i2c.c | 26 ++++++++++++++++++++
>   drivers/gpu/drm/amd/display/dc/dce/dce_i2c.h |  6 +++++
>   4 files changed, 50 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
> index 01b5996fa3aa..f6e19efea756 100644
> --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
> +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
> @@ -3363,6 +3363,19 @@ bool dc_is_dmcu_initialized(struct dc *dc)
>   	return false;
>   }
>   
> +bool dc_is_oem_i2c_device_present(
> +	struct dc *dc,
> +	size_t slave_address)
> +{
> +	if (dc->res_pool->oem_device)
> +		return dce_i2c_oem_device_present(
> +			dc->res_pool,
> +			dc->res_pool->oem_device,
> +			slave_address);
> +
> +	return false;
> +}
> +
>   bool dc_submit_i2c(
>   		struct dc *dc,
>   		uint32_t link_index,
> diff --git a/drivers/gpu/drm/amd/display/dc/dc_link.h b/drivers/gpu/drm/amd/display/dc/dc_link.h
> index 78e66e4bab5a..aa818bf840eb 100644
> --- a/drivers/gpu/drm/amd/display/dc/dc_link.h
> +++ b/drivers/gpu/drm/amd/display/dc/dc_link.h
> @@ -466,6 +466,11 @@ const struct dc_link_settings *dc_link_get_link_cap(
>   void dc_link_overwrite_extended_receiver_cap(
>   		struct dc_link *link);
>   
> +bool dc_is_oem_i2c_device_present(
> +	struct dc *dc,
> +	size_t slave_address
> +);
> +
>   bool dc_submit_i2c(
>   		struct dc *dc,
>   		uint32_t link_index,
> diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.c b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.c
> index dd41736bb5c4..f5cd2392fc5f 100644
> --- a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.c
> +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.c
> @@ -25,6 +25,32 @@
>   #include "dce_i2c.h"
>   #include "reg_helper.h"
>   
> +bool dce_i2c_oem_device_present(
> +	struct resource_pool *pool,
> +	struct ddc_service *ddc,
> +	size_t slave_address
> +)
> +{
> +	struct dc *dc = ddc->ctx->dc;
> +	struct dc_bios *dcb = dc->ctx->dc_bios;
> +	struct graphics_object_id id = {0};
> +	struct graphics_object_i2c_info i2c_info;
> +
> +	if (!dc->ctx->dc_bios->fw_info.oem_i2c_present)
> +		return false;
> +
> +	id.id = dc->ctx->dc_bios->fw_info.oem_i2c_obj_id;
> +	id.enum_id = 0;
> +	id.type = OBJECT_TYPE_GENERIC;
> +	if (dcb->funcs->get_i2c_info(dcb, id, &i2c_info) != BP_RESULT_OK)
> +		return false;
> +
> +	if (i2c_info.i2c_slave_address != slave_address)
> +		return false;
> +
> +	return true;
> +}
> +
>   bool dce_i2c_submit_command(
>   	struct resource_pool *pool,
>   	struct ddc *ddc,
> diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.h b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.h
> index a171c5cd8439..535fd58de450 100644
> --- a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.h
> +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c.h
> @@ -30,6 +30,12 @@
>   #include "dce_i2c_hw.h"
>   #include "dce_i2c_sw.h"
>   
> +bool dce_i2c_oem_device_present(
> +	struct resource_pool *pool,
> +	struct ddc_service *ddc,
> +	size_t slave_address
> +);
> +
>   bool dce_i2c_submit_command(
>   	struct resource_pool *pool,
>   	struct ddc *ddc,


More information about the amd-gfx mailing list