diff mbox

[v2,RESEND] drm/i915: add support for specifying DMC firmware override by module param

Message ID 20180424122016.2416-1-jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jani Nikula April 24, 2018, 12:20 p.m. UTC
Use i915.dmc_firmware_path to override default firmware for the platform
and bypassing version checks.

v2: add missing param struct member declaration (David)

Tested-by: David Weinehall <david.weinehall@linux.intel.com>
Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
Cc: David Weinehall <david.weinehall@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_params.c | 3 +++
 drivers/gpu/drm/i915/i915_params.h | 1 +
 drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

Comments

David Weinehall April 27, 2018, 2:08 p.m. UTC | #1
On Tue, Apr 24, 2018 at 03:20:16PM +0300, Jani Nikula wrote:
> Use i915.dmc_firmware_path to override default firmware for the platform
> and bypassing version checks.
> 
> v2: add missing param struct member declaration (David)
> 
> Tested-by: David Weinehall <david.weinehall@linux.intel.com>
> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>

Re-tested against latest drm-tip; still works fine.

> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
> Cc: David Weinehall <david.weinehall@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_params.c | 3 +++
>  drivers/gpu/drm/i915/i915_params.h | 1 +
>  drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
>  3 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> index 08108ce5be21..66ea3552c63e 100644
> --- a/drivers/gpu/drm/i915/i915_params.c
> +++ b/drivers/gpu/drm/i915/i915_params.c
> @@ -164,6 +164,9 @@ i915_param_named_unsafe(guc_firmware_path, charp, 0400,
>  i915_param_named_unsafe(huc_firmware_path, charp, 0400,
>  	"HuC firmware path to use instead of the default one");
>  
> +i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
> +	"DMC firmware path to use instead of the default one");
> +
>  i915_param_named_unsafe(enable_dp_mst, bool, 0600,
>  	"Enable multi-stream transport (MST) for new DisplayPort sinks. (default: true)");
>  
> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> index c96360398072..6684025b7af8 100644
> --- a/drivers/gpu/drm/i915/i915_params.h
> +++ b/drivers/gpu/drm/i915/i915_params.h
> @@ -51,6 +51,7 @@ struct drm_printer;
>  	param(int, guc_log_level, -1) \
>  	param(char *, guc_firmware_path, NULL) \
>  	param(char *, huc_firmware_path, NULL) \
> +	param(char *, dmc_firmware_path, NULL) \
>  	param(int, mmio_debug, 0) \
>  	param(int, edp_vswing, 0) \
>  	param(int, reset, 2) \
> diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
> index 41e6c75a7f3c..d81673250d3b 100644
> --- a/drivers/gpu/drm/i915/intel_csr.c
> +++ b/drivers/gpu/drm/i915/intel_csr.c
> @@ -297,7 +297,10 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
>  
>  	csr->version = css_header->version;
>  
> -	if (IS_CANNONLAKE(dev_priv)) {
> +	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
> +		/* Bypass version check for firmware override. */
> +		required_version = csr->version;
> +	} else if (IS_CANNONLAKE(dev_priv)) {
>  		required_version = CNL_CSR_VERSION_REQUIRED;
>  	} else if (IS_GEMINILAKE(dev_priv)) {
>  		required_version = GLK_CSR_VERSION_REQUIRED;
> @@ -452,7 +455,9 @@ void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
>  	if (!HAS_CSR(dev_priv))
>  		return;
>  
> -	if (IS_CANNONLAKE(dev_priv))
> +	if (i915_modparams.dmc_firmware_path)
> +		csr->fw_path = i915_modparams.dmc_firmware_path;
> +	else if (IS_CANNONLAKE(dev_priv))
>  		csr->fw_path = I915_CSR_CNL;
>  	else if (IS_GEMINILAKE(dev_priv))
>  		csr->fw_path = I915_CSR_GLK;
> -- 
> 2.11.0
>
Jani Nikula April 30, 2018, 10:47 a.m. UTC | #2
On Tue, 24 Apr 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> Use i915.dmc_firmware_path to override default firmware for the platform
> and bypassing version checks.
>
> v2: add missing param struct member declaration (David)
>
> Tested-by: David Weinehall <david.weinehall@linux.intel.com>
> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
> Cc: David Weinehall <david.weinehall@linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

So *I* don't need this patch. Please someone tell me this is useful to
you, and I'll merge.

Thanks,
Jani.


> ---
>  drivers/gpu/drm/i915/i915_params.c | 3 +++
>  drivers/gpu/drm/i915/i915_params.h | 1 +
>  drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
>  3 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> index 08108ce5be21..66ea3552c63e 100644
> --- a/drivers/gpu/drm/i915/i915_params.c
> +++ b/drivers/gpu/drm/i915/i915_params.c
> @@ -164,6 +164,9 @@ i915_param_named_unsafe(guc_firmware_path, charp, 0400,
>  i915_param_named_unsafe(huc_firmware_path, charp, 0400,
>  	"HuC firmware path to use instead of the default one");
>  
> +i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
> +	"DMC firmware path to use instead of the default one");
> +
>  i915_param_named_unsafe(enable_dp_mst, bool, 0600,
>  	"Enable multi-stream transport (MST) for new DisplayPort sinks. (default: true)");
>  
> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> index c96360398072..6684025b7af8 100644
> --- a/drivers/gpu/drm/i915/i915_params.h
> +++ b/drivers/gpu/drm/i915/i915_params.h
> @@ -51,6 +51,7 @@ struct drm_printer;
>  	param(int, guc_log_level, -1) \
>  	param(char *, guc_firmware_path, NULL) \
>  	param(char *, huc_firmware_path, NULL) \
> +	param(char *, dmc_firmware_path, NULL) \
>  	param(int, mmio_debug, 0) \
>  	param(int, edp_vswing, 0) \
>  	param(int, reset, 2) \
> diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
> index 41e6c75a7f3c..d81673250d3b 100644
> --- a/drivers/gpu/drm/i915/intel_csr.c
> +++ b/drivers/gpu/drm/i915/intel_csr.c
> @@ -297,7 +297,10 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
>  
>  	csr->version = css_header->version;
>  
> -	if (IS_CANNONLAKE(dev_priv)) {
> +	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
> +		/* Bypass version check for firmware override. */
> +		required_version = csr->version;
> +	} else if (IS_CANNONLAKE(dev_priv)) {
>  		required_version = CNL_CSR_VERSION_REQUIRED;
>  	} else if (IS_GEMINILAKE(dev_priv)) {
>  		required_version = GLK_CSR_VERSION_REQUIRED;
> @@ -452,7 +455,9 @@ void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
>  	if (!HAS_CSR(dev_priv))
>  		return;
>  
> -	if (IS_CANNONLAKE(dev_priv))
> +	if (i915_modparams.dmc_firmware_path)
> +		csr->fw_path = i915_modparams.dmc_firmware_path;
> +	else if (IS_CANNONLAKE(dev_priv))
>  		csr->fw_path = I915_CSR_CNL;
>  	else if (IS_GEMINILAKE(dev_priv))
>  		csr->fw_path = I915_CSR_GLK;
David Weinehall April 30, 2018, 12:45 p.m. UTC | #3
On Mon, Apr 30, 2018 at 01:47:15PM +0300, Jani Nikula wrote:
> On Tue, 24 Apr 2018, Jani Nikula <jani.nikula@intel.com> wrote:
> > Use i915.dmc_firmware_path to override default firmware for the platform
> > and bypassing version checks.
> >
> > v2: add missing param struct member declaration (David)
> >
> > Tested-by: David Weinehall <david.weinehall@linux.intel.com>
> > Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
> > Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
> > Cc: David Weinehall <david.weinehall@linux.intel.com>
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> 
> So *I* don't need this patch. Please someone tell me this is useful to
> you, and I'll merge.

It's useful for us (PnP team), and I believe Anusha has expressed
interest too, correct?


Kind regards, David

> 
> Thanks,
> Jani.
> 
> 
> > ---
> >  drivers/gpu/drm/i915/i915_params.c | 3 +++
> >  drivers/gpu/drm/i915/i915_params.h | 1 +
> >  drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
> >  3 files changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> > index 08108ce5be21..66ea3552c63e 100644
> > --- a/drivers/gpu/drm/i915/i915_params.c
> > +++ b/drivers/gpu/drm/i915/i915_params.c
> > @@ -164,6 +164,9 @@ i915_param_named_unsafe(guc_firmware_path, charp, 0400,
> >  i915_param_named_unsafe(huc_firmware_path, charp, 0400,
> >  	"HuC firmware path to use instead of the default one");
> >  
> > +i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
> > +	"DMC firmware path to use instead of the default one");
> > +
> >  i915_param_named_unsafe(enable_dp_mst, bool, 0600,
> >  	"Enable multi-stream transport (MST) for new DisplayPort sinks. (default: true)");
> >  
> > diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> > index c96360398072..6684025b7af8 100644
> > --- a/drivers/gpu/drm/i915/i915_params.h
> > +++ b/drivers/gpu/drm/i915/i915_params.h
> > @@ -51,6 +51,7 @@ struct drm_printer;
> >  	param(int, guc_log_level, -1) \
> >  	param(char *, guc_firmware_path, NULL) \
> >  	param(char *, huc_firmware_path, NULL) \
> > +	param(char *, dmc_firmware_path, NULL) \
> >  	param(int, mmio_debug, 0) \
> >  	param(int, edp_vswing, 0) \
> >  	param(int, reset, 2) \
> > diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
> > index 41e6c75a7f3c..d81673250d3b 100644
> > --- a/drivers/gpu/drm/i915/intel_csr.c
> > +++ b/drivers/gpu/drm/i915/intel_csr.c
> > @@ -297,7 +297,10 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
> >  
> >  	csr->version = css_header->version;
> >  
> > -	if (IS_CANNONLAKE(dev_priv)) {
> > +	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
> > +		/* Bypass version check for firmware override. */
> > +		required_version = csr->version;
> > +	} else if (IS_CANNONLAKE(dev_priv)) {
> >  		required_version = CNL_CSR_VERSION_REQUIRED;
> >  	} else if (IS_GEMINILAKE(dev_priv)) {
> >  		required_version = GLK_CSR_VERSION_REQUIRED;
> > @@ -452,7 +455,9 @@ void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
> >  	if (!HAS_CSR(dev_priv))
> >  		return;
> >  
> > -	if (IS_CANNONLAKE(dev_priv))
> > +	if (i915_modparams.dmc_firmware_path)
> > +		csr->fw_path = i915_modparams.dmc_firmware_path;
> > +	else if (IS_CANNONLAKE(dev_priv))
> >  		csr->fw_path = I915_CSR_CNL;
> >  	else if (IS_GEMINILAKE(dev_priv))
> >  		csr->fw_path = I915_CSR_GLK;
> 
> -- 
> Jani Nikula, Intel Open Source Technology Center
Srivatsa, Anusha April 30, 2018, 6 p.m. UTC | #4
>-----Original Message-----
>From: Nikula, Jani
>Sent: Monday, April 30, 2018 3:47 AM
>To: intel-gfx@lists.freedesktop.org
>Cc: Srivatsa, Anusha <anusha.srivatsa@intel.com>; David Weinehall
><david.weinehall@linux.intel.com>
>Subject: Re: [PATCH v2 RESEND] drm/i915: add support for specifying DMC
>firmware override by module param
>
>On Tue, 24 Apr 2018, Jani Nikula <jani.nikula@intel.com> wrote:
>> Use i915.dmc_firmware_path to override default firmware for the
>> platform and bypassing version checks.
>>
>> v2: add missing param struct member declaration (David)
>>
>> Tested-by: David Weinehall <david.weinehall@linux.intel.com>
>> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
>> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
>> Cc: David Weinehall <david.weinehall@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
>So *I* don't need this patch. Please someone tell me this is useful to you, and I'll
>merge.

Jani, we need this patch!. This will be very useful. I am glad it made back to the ML.

Anusha 
>Thanks,
>Jani.
>
>
>> ---
>>  drivers/gpu/drm/i915/i915_params.c | 3 +++
>> drivers/gpu/drm/i915/i915_params.h | 1 +
>>  drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
>>  3 files changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_params.c
>> b/drivers/gpu/drm/i915/i915_params.c
>> index 08108ce5be21..66ea3552c63e 100644
>> --- a/drivers/gpu/drm/i915/i915_params.c
>> +++ b/drivers/gpu/drm/i915/i915_params.c
>> @@ -164,6 +164,9 @@ i915_param_named_unsafe(guc_firmware_path,
>charp,
>> 0400,  i915_param_named_unsafe(huc_firmware_path, charp, 0400,
>>  	"HuC firmware path to use instead of the default one");
>>
>> +i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
>> +	"DMC firmware path to use instead of the default one");
>> +
>>  i915_param_named_unsafe(enable_dp_mst, bool, 0600,
>>  	"Enable multi-stream transport (MST) for new DisplayPort sinks.
>> (default: true)");
>>
>> diff --git a/drivers/gpu/drm/i915/i915_params.h
>> b/drivers/gpu/drm/i915/i915_params.h
>> index c96360398072..6684025b7af8 100644
>> --- a/drivers/gpu/drm/i915/i915_params.h
>> +++ b/drivers/gpu/drm/i915/i915_params.h
>> @@ -51,6 +51,7 @@ struct drm_printer;
>>  	param(int, guc_log_level, -1) \
>>  	param(char *, guc_firmware_path, NULL) \
>>  	param(char *, huc_firmware_path, NULL) \
>> +	param(char *, dmc_firmware_path, NULL) \
>>  	param(int, mmio_debug, 0) \
>>  	param(int, edp_vswing, 0) \
>>  	param(int, reset, 2) \
>> diff --git a/drivers/gpu/drm/i915/intel_csr.c
>> b/drivers/gpu/drm/i915/intel_csr.c
>> index 41e6c75a7f3c..d81673250d3b 100644
>> --- a/drivers/gpu/drm/i915/intel_csr.c
>> +++ b/drivers/gpu/drm/i915/intel_csr.c
>> @@ -297,7 +297,10 @@ static uint32_t *parse_csr_fw(struct
>> drm_i915_private *dev_priv,
>>
>>  	csr->version = css_header->version;
>>
>> -	if (IS_CANNONLAKE(dev_priv)) {
>> +	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
>> +		/* Bypass version check for firmware override. */
>> +		required_version = csr->version;
>> +	} else if (IS_CANNONLAKE(dev_priv)) {
>>  		required_version = CNL_CSR_VERSION_REQUIRED;
>>  	} else if (IS_GEMINILAKE(dev_priv)) {
>>  		required_version = GLK_CSR_VERSION_REQUIRED; @@ -452,7
>+455,9 @@
>> void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
>>  	if (!HAS_CSR(dev_priv))
>>  		return;
>>
>> -	if (IS_CANNONLAKE(dev_priv))
>> +	if (i915_modparams.dmc_firmware_path)
>> +		csr->fw_path = i915_modparams.dmc_firmware_path;
>> +	else if (IS_CANNONLAKE(dev_priv))
>>  		csr->fw_path = I915_CSR_CNL;
>>  	else if (IS_GEMINILAKE(dev_priv))
>>  		csr->fw_path = I915_CSR_GLK;
>
>--
>Jani Nikula, Intel Open Source Technology Center
Srivatsa, Anusha April 30, 2018, 6:14 p.m. UTC | #5
>-----Original Message-----
>From: Nikula, Jani
>Sent: Monday, April 30, 2018 3:47 AM
>To: intel-gfx@lists.freedesktop.org
>Cc: Srivatsa, Anusha <anusha.srivatsa@intel.com>; David Weinehall
><david.weinehall@linux.intel.com>
>Subject: Re: [PATCH v2 RESEND] drm/i915: add support for specifying DMC
>firmware override by module param
>
>On Tue, 24 Apr 2018, Jani Nikula <jani.nikula@intel.com> wrote:
>> Use i915.dmc_firmware_path to override default firmware for the
>> platform and bypassing version checks.
>>
>> v2: add missing param struct member declaration (David)
>>
>> Tested-by: David Weinehall <david.weinehall@linux.intel.com>
>> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
>> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
>> Cc: David Weinehall <david.weinehall@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Ack-by: Anusha Srivatsa <anusha.srivatsa@intel.com>

>So *I* don't need this patch. Please someone tell me this is useful to you, and I'll
>merge.
>
>Thanks,
>Jani.
>
>
>> ---
>>  drivers/gpu/drm/i915/i915_params.c | 3 +++
>> drivers/gpu/drm/i915/i915_params.h | 1 +
>>  drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
>>  3 files changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_params.c
>> b/drivers/gpu/drm/i915/i915_params.c
>> index 08108ce5be21..66ea3552c63e 100644
>> --- a/drivers/gpu/drm/i915/i915_params.c
>> +++ b/drivers/gpu/drm/i915/i915_params.c
>> @@ -164,6 +164,9 @@ i915_param_named_unsafe(guc_firmware_path,
>charp,
>> 0400,  i915_param_named_unsafe(huc_firmware_path, charp, 0400,
>>  	"HuC firmware path to use instead of the default one");
>>
>> +i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
>> +	"DMC firmware path to use instead of the default one");
>> +
>>  i915_param_named_unsafe(enable_dp_mst, bool, 0600,
>>  	"Enable multi-stream transport (MST) for new DisplayPort sinks.
>> (default: true)");
>>
>> diff --git a/drivers/gpu/drm/i915/i915_params.h
>> b/drivers/gpu/drm/i915/i915_params.h
>> index c96360398072..6684025b7af8 100644
>> --- a/drivers/gpu/drm/i915/i915_params.h
>> +++ b/drivers/gpu/drm/i915/i915_params.h
>> @@ -51,6 +51,7 @@ struct drm_printer;
>>  	param(int, guc_log_level, -1) \
>>  	param(char *, guc_firmware_path, NULL) \
>>  	param(char *, huc_firmware_path, NULL) \
>> +	param(char *, dmc_firmware_path, NULL) \
>>  	param(int, mmio_debug, 0) \
>>  	param(int, edp_vswing, 0) \
>>  	param(int, reset, 2) \
>> diff --git a/drivers/gpu/drm/i915/intel_csr.c
>> b/drivers/gpu/drm/i915/intel_csr.c
>> index 41e6c75a7f3c..d81673250d3b 100644
>> --- a/drivers/gpu/drm/i915/intel_csr.c
>> +++ b/drivers/gpu/drm/i915/intel_csr.c
>> @@ -297,7 +297,10 @@ static uint32_t *parse_csr_fw(struct
>> drm_i915_private *dev_priv,
>>
>>  	csr->version = css_header->version;
>>
>> -	if (IS_CANNONLAKE(dev_priv)) {
>> +	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
>> +		/* Bypass version check for firmware override. */
>> +		required_version = csr->version;
>> +	} else if (IS_CANNONLAKE(dev_priv)) {
>>  		required_version = CNL_CSR_VERSION_REQUIRED;
>>  	} else if (IS_GEMINILAKE(dev_priv)) {
>>  		required_version = GLK_CSR_VERSION_REQUIRED; @@ -452,7
>+455,9 @@
>> void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
>>  	if (!HAS_CSR(dev_priv))
>>  		return;
>>
>> -	if (IS_CANNONLAKE(dev_priv))
>> +	if (i915_modparams.dmc_firmware_path)
>> +		csr->fw_path = i915_modparams.dmc_firmware_path;
>> +	else if (IS_CANNONLAKE(dev_priv))
>>  		csr->fw_path = I915_CSR_CNL;
>>  	else if (IS_GEMINILAKE(dev_priv))
>>  		csr->fw_path = I915_CSR_GLK;
>
>--
>Jani Nikula, Intel Open Source Technology Center
Jani Nikula May 2, 2018, 10:13 a.m. UTC | #6
On Mon, 30 Apr 2018, "Srivatsa, Anusha" <anusha.srivatsa@intel.com> wrote:
>>-----Original Message-----
>>From: Nikula, Jani
>>Sent: Monday, April 30, 2018 3:47 AM
>>To: intel-gfx@lists.freedesktop.org
>>Cc: Srivatsa, Anusha <anusha.srivatsa@intel.com>; David Weinehall
>><david.weinehall@linux.intel.com>
>>Subject: Re: [PATCH v2 RESEND] drm/i915: add support for specifying DMC
>>firmware override by module param
>>
>>On Tue, 24 Apr 2018, Jani Nikula <jani.nikula@intel.com> wrote:
>>> Use i915.dmc_firmware_path to override default firmware for the
>>> platform and bypassing version checks.
>>>
>>> v2: add missing param struct member declaration (David)
>>>
>>> Tested-by: David Weinehall <david.weinehall@linux.intel.com>
>>> Reviewed-by: David Weinehall <david.weinehall@linux.intel.com>
>>> Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
>>> Cc: David Weinehall <david.weinehall@linux.intel.com>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> Ack-by: Anusha Srivatsa <anusha.srivatsa@intel.com>

Usually written Acked-by. But thanks, and thanks to David for testing
and review, pushed to dinq.

BR,
Jani.


>
>>So *I* don't need this patch. Please someone tell me this is useful to you, and I'll
>>merge.
>>
>>Thanks,
>>Jani.
>>
>>
>>> ---
>>>  drivers/gpu/drm/i915/i915_params.c | 3 +++
>>> drivers/gpu/drm/i915/i915_params.h | 1 +
>>>  drivers/gpu/drm/i915/intel_csr.c   | 9 +++++++--
>>>  3 files changed, 11 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_params.c
>>> b/drivers/gpu/drm/i915/i915_params.c
>>> index 08108ce5be21..66ea3552c63e 100644
>>> --- a/drivers/gpu/drm/i915/i915_params.c
>>> +++ b/drivers/gpu/drm/i915/i915_params.c
>>> @@ -164,6 +164,9 @@ i915_param_named_unsafe(guc_firmware_path,
>>charp,
>>> 0400,  i915_param_named_unsafe(huc_firmware_path, charp, 0400,
>>>  	"HuC firmware path to use instead of the default one");
>>>
>>> +i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
>>> +	"DMC firmware path to use instead of the default one");
>>> +
>>>  i915_param_named_unsafe(enable_dp_mst, bool, 0600,
>>>  	"Enable multi-stream transport (MST) for new DisplayPort sinks.
>>> (default: true)");
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_params.h
>>> b/drivers/gpu/drm/i915/i915_params.h
>>> index c96360398072..6684025b7af8 100644
>>> --- a/drivers/gpu/drm/i915/i915_params.h
>>> +++ b/drivers/gpu/drm/i915/i915_params.h
>>> @@ -51,6 +51,7 @@ struct drm_printer;
>>>  	param(int, guc_log_level, -1) \
>>>  	param(char *, guc_firmware_path, NULL) \
>>>  	param(char *, huc_firmware_path, NULL) \
>>> +	param(char *, dmc_firmware_path, NULL) \
>>>  	param(int, mmio_debug, 0) \
>>>  	param(int, edp_vswing, 0) \
>>>  	param(int, reset, 2) \
>>> diff --git a/drivers/gpu/drm/i915/intel_csr.c
>>> b/drivers/gpu/drm/i915/intel_csr.c
>>> index 41e6c75a7f3c..d81673250d3b 100644
>>> --- a/drivers/gpu/drm/i915/intel_csr.c
>>> +++ b/drivers/gpu/drm/i915/intel_csr.c
>>> @@ -297,7 +297,10 @@ static uint32_t *parse_csr_fw(struct
>>> drm_i915_private *dev_priv,
>>>
>>>  	csr->version = css_header->version;
>>>
>>> -	if (IS_CANNONLAKE(dev_priv)) {
>>> +	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
>>> +		/* Bypass version check for firmware override. */
>>> +		required_version = csr->version;
>>> +	} else if (IS_CANNONLAKE(dev_priv)) {
>>>  		required_version = CNL_CSR_VERSION_REQUIRED;
>>>  	} else if (IS_GEMINILAKE(dev_priv)) {
>>>  		required_version = GLK_CSR_VERSION_REQUIRED; @@ -452,7
>>+455,9 @@
>>> void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
>>>  	if (!HAS_CSR(dev_priv))
>>>  		return;
>>>
>>> -	if (IS_CANNONLAKE(dev_priv))
>>> +	if (i915_modparams.dmc_firmware_path)
>>> +		csr->fw_path = i915_modparams.dmc_firmware_path;
>>> +	else if (IS_CANNONLAKE(dev_priv))
>>>  		csr->fw_path = I915_CSR_CNL;
>>>  	else if (IS_GEMINILAKE(dev_priv))
>>>  		csr->fw_path = I915_CSR_GLK;
>>
>>--
>>Jani Nikula, Intel Open Source Technology Center
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 08108ce5be21..66ea3552c63e 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -164,6 +164,9 @@  i915_param_named_unsafe(guc_firmware_path, charp, 0400,
 i915_param_named_unsafe(huc_firmware_path, charp, 0400,
 	"HuC firmware path to use instead of the default one");
 
+i915_param_named_unsafe(dmc_firmware_path, charp, 0400,
+	"DMC firmware path to use instead of the default one");
+
 i915_param_named_unsafe(enable_dp_mst, bool, 0600,
 	"Enable multi-stream transport (MST) for new DisplayPort sinks. (default: true)");
 
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index c96360398072..6684025b7af8 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -51,6 +51,7 @@  struct drm_printer;
 	param(int, guc_log_level, -1) \
 	param(char *, guc_firmware_path, NULL) \
 	param(char *, huc_firmware_path, NULL) \
+	param(char *, dmc_firmware_path, NULL) \
 	param(int, mmio_debug, 0) \
 	param(int, edp_vswing, 0) \
 	param(int, reset, 2) \
diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
index 41e6c75a7f3c..d81673250d3b 100644
--- a/drivers/gpu/drm/i915/intel_csr.c
+++ b/drivers/gpu/drm/i915/intel_csr.c
@@ -297,7 +297,10 @@  static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
 
 	csr->version = css_header->version;
 
-	if (IS_CANNONLAKE(dev_priv)) {
+	if (csr->fw_path == i915_modparams.dmc_firmware_path) {
+		/* Bypass version check for firmware override. */
+		required_version = csr->version;
+	} else if (IS_CANNONLAKE(dev_priv)) {
 		required_version = CNL_CSR_VERSION_REQUIRED;
 	} else if (IS_GEMINILAKE(dev_priv)) {
 		required_version = GLK_CSR_VERSION_REQUIRED;
@@ -452,7 +455,9 @@  void intel_csr_ucode_init(struct drm_i915_private *dev_priv)
 	if (!HAS_CSR(dev_priv))
 		return;
 
-	if (IS_CANNONLAKE(dev_priv))
+	if (i915_modparams.dmc_firmware_path)
+		csr->fw_path = i915_modparams.dmc_firmware_path;
+	else if (IS_CANNONLAKE(dev_priv))
 		csr->fw_path = I915_CSR_CNL;
 	else if (IS_GEMINILAKE(dev_priv))
 		csr->fw_path = I915_CSR_GLK;