Re: [PATCH] drm/amd/display: Update dmub code

2020-11-13 Thread Kazlauskas, Nicholas

On 2020-11-13 3:27 p.m., Bhawanpreet Lakha wrote:

There is a delta in the dmub code
- add boot options
- add boot status
- remove unused auto_load_is_done func pointer

Signed-off-by: Bhawanpreet Lakha 


Reviewed-by: Nicholas Kazlauskas 

Regards,
Nicholas Kazlauskas


---
  drivers/gpu/drm/amd/display/dmub/dmub_srv.h   | 20 +-
  .../gpu/drm/amd/display/dmub/inc/dmub_cmd.h   |  3 ++-
  .../gpu/drm/amd/display/dmub/src/dmub_dcn20.c | 23 
  .../gpu/drm/amd/display/dmub/src/dmub_dcn20.h |  6 +
  .../gpu/drm/amd/display/dmub/src/dmub_dcn21.c |  5 
  .../gpu/drm/amd/display/dmub/src/dmub_dcn21.h |  2 --
  .../gpu/drm/amd/display/dmub/src/dmub_dcn30.c |  5 
  .../gpu/drm/amd/display/dmub/src/dmub_dcn30.h |  1 -
  .../gpu/drm/amd/display/dmub/src/dmub_srv.c   | 26 ++-
  9 files changed, 70 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h 
b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
index ac41ae2d261b..b82a46890846 100644
--- a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
+++ b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
@@ -265,8 +265,12 @@ struct dmub_srv_hw_funcs {
bool (*is_hw_init)(struct dmub_srv *dmub);
  
  	bool (*is_phy_init)(struct dmub_srv *dmub);

+   void (*enable_dmub_boot_options)(struct dmub_srv *dmub);
+
+   void (*skip_dmub_panel_power_sequence)(struct dmub_srv *dmub, bool 
skip);
+
+   union dmub_fw_boot_status (*get_fw_status)(struct dmub_srv *dmub);
  
-	bool (*is_auto_load_done)(struct dmub_srv *dmub);
  
  	void (*set_gpint)(struct dmub_srv *dmub,

  union dmub_gpint_data_register reg);
@@ -309,6 +313,7 @@ struct dmub_srv_hw_params {
uint64_t fb_offset;
uint32_t psp_version;
bool load_inst_const;
+   bool skip_panel_power_sequence;
  };
  
  /**

@@ -590,6 +595,19 @@ enum dmub_status dmub_srv_get_gpint_response(struct 
dmub_srv *dmub,
   */
  void dmub_flush_buffer_mem(const struct dmub_fb *fb);
  
+/**

+ * dmub_srv_get_fw_boot_status() - Returns the DMUB boot status bits.
+ *
+ * @dmub: the dmub service
+ * @status: out pointer for firmware status
+ *
+ * Return:
+ *   DMUB_STATUS_OK - success
+ *   DMUB_STATUS_INVALID - unspecified error, unsupported
+ */
+enum dmub_status dmub_srv_get_fw_boot_status(struct dmub_srv *dmub,
+union dmub_fw_boot_status *status);
+
  #if defined(__cplusplus)
  }
  #endif
diff --git a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h 
b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
index b0d1347d13f0..9fd24f93a216 100644
--- a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
+++ b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
@@ -191,7 +191,8 @@ union dmub_fw_boot_options {
uint32_t optimized_init : 1;
uint32_t skip_phy_access : 1;
uint32_t disable_clk_gate: 1;
-   uint32_t reserved : 27;
+   uint32_t skip_phy_init_panel_sequence: 1;
+   uint32_t reserved : 26;
} bits;
uint32_t all;
  };
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c 
b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c
index 2c4a2fe9311d..cafba1d23c6a 100644
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c
+++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c
@@ -312,3 +312,26 @@ uint32_t dmub_dcn20_get_gpint_response(struct dmub_srv 
*dmub)
  {
return REG_READ(DMCUB_SCRATCH7);
  }
+
+union dmub_fw_boot_status dmub_dcn20_get_fw_boot_status(struct dmub_srv *dmub)
+{
+   union dmub_fw_boot_status status;
+
+   status.all = REG_READ(DMCUB_SCRATCH0);
+   return status;
+}
+
+void dmub_dcn20_enable_dmub_boot_options(struct dmub_srv *dmub)
+{
+   union dmub_fw_boot_options boot_options = {0};
+
+   REG_WRITE(DMCUB_SCRATCH14, boot_options.all);
+}
+
+void dmub_dcn20_skip_dmub_panel_power_sequence(struct dmub_srv *dmub, bool 
skip)
+{
+   union dmub_fw_boot_options boot_options;
+   boot_options.all = REG_READ(DMCUB_SCRATCH14);
+   boot_options.bits.skip_phy_init_panel_sequence = skip;
+   REG_WRITE(DMCUB_SCRATCH14, boot_options.all);
+}
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h 
b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h
index a316f260f6ac..d438f365cbb0 100644
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h
+++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h
@@ -192,4 +192,10 @@ bool dmub_dcn20_is_gpint_acked(struct dmub_srv *dmub,
  
  uint32_t dmub_dcn20_get_gpint_response(struct dmub_srv *dmub);
  
+void dmub_dcn20_enable_dmub_boot_options(struct dmub_srv *dmub);

+
+void dmub_dcn20_skip_dmub_panel_power_sequence(struct dmub_srv *dmub, bool 
skip);
+
+union dmub_fw_boot_status dmub_dcn20_get_fw_boot_status(struct dmub_srv *dmub);
+
  #endif /* _DMUB_DCN20_H_ */
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn21.c 
b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn21.c

[PATCH] drm/amd/display: Update dmub code

2020-11-13 Thread Bhawanpreet Lakha
There is a delta in the dmub code
- add boot options
- add boot status
- remove unused auto_load_is_done func pointer

Signed-off-by: Bhawanpreet Lakha 
---
 drivers/gpu/drm/amd/display/dmub/dmub_srv.h   | 20 +-
 .../gpu/drm/amd/display/dmub/inc/dmub_cmd.h   |  3 ++-
 .../gpu/drm/amd/display/dmub/src/dmub_dcn20.c | 23 
 .../gpu/drm/amd/display/dmub/src/dmub_dcn20.h |  6 +
 .../gpu/drm/amd/display/dmub/src/dmub_dcn21.c |  5 
 .../gpu/drm/amd/display/dmub/src/dmub_dcn21.h |  2 --
 .../gpu/drm/amd/display/dmub/src/dmub_dcn30.c |  5 
 .../gpu/drm/amd/display/dmub/src/dmub_dcn30.h |  1 -
 .../gpu/drm/amd/display/dmub/src/dmub_srv.c   | 26 ++-
 9 files changed, 70 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h 
b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
index ac41ae2d261b..b82a46890846 100644
--- a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
+++ b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
@@ -265,8 +265,12 @@ struct dmub_srv_hw_funcs {
bool (*is_hw_init)(struct dmub_srv *dmub);
 
bool (*is_phy_init)(struct dmub_srv *dmub);
+   void (*enable_dmub_boot_options)(struct dmub_srv *dmub);
+
+   void (*skip_dmub_panel_power_sequence)(struct dmub_srv *dmub, bool 
skip);
+
+   union dmub_fw_boot_status (*get_fw_status)(struct dmub_srv *dmub);
 
-   bool (*is_auto_load_done)(struct dmub_srv *dmub);
 
void (*set_gpint)(struct dmub_srv *dmub,
  union dmub_gpint_data_register reg);
@@ -309,6 +313,7 @@ struct dmub_srv_hw_params {
uint64_t fb_offset;
uint32_t psp_version;
bool load_inst_const;
+   bool skip_panel_power_sequence;
 };
 
 /**
@@ -590,6 +595,19 @@ enum dmub_status dmub_srv_get_gpint_response(struct 
dmub_srv *dmub,
  */
 void dmub_flush_buffer_mem(const struct dmub_fb *fb);
 
+/**
+ * dmub_srv_get_fw_boot_status() - Returns the DMUB boot status bits.
+ *
+ * @dmub: the dmub service
+ * @status: out pointer for firmware status
+ *
+ * Return:
+ *   DMUB_STATUS_OK - success
+ *   DMUB_STATUS_INVALID - unspecified error, unsupported
+ */
+enum dmub_status dmub_srv_get_fw_boot_status(struct dmub_srv *dmub,
+union dmub_fw_boot_status *status);
+
 #if defined(__cplusplus)
 }
 #endif
diff --git a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h 
b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
index b0d1347d13f0..9fd24f93a216 100644
--- a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
+++ b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
@@ -191,7 +191,8 @@ union dmub_fw_boot_options {
uint32_t optimized_init : 1;
uint32_t skip_phy_access : 1;
uint32_t disable_clk_gate: 1;
-   uint32_t reserved : 27;
+   uint32_t skip_phy_init_panel_sequence: 1;
+   uint32_t reserved : 26;
} bits;
uint32_t all;
 };
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c 
b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c
index 2c4a2fe9311d..cafba1d23c6a 100644
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c
+++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.c
@@ -312,3 +312,26 @@ uint32_t dmub_dcn20_get_gpint_response(struct dmub_srv 
*dmub)
 {
return REG_READ(DMCUB_SCRATCH7);
 }
+
+union dmub_fw_boot_status dmub_dcn20_get_fw_boot_status(struct dmub_srv *dmub)
+{
+   union dmub_fw_boot_status status;
+
+   status.all = REG_READ(DMCUB_SCRATCH0);
+   return status;
+}
+
+void dmub_dcn20_enable_dmub_boot_options(struct dmub_srv *dmub)
+{
+   union dmub_fw_boot_options boot_options = {0};
+
+   REG_WRITE(DMCUB_SCRATCH14, boot_options.all);
+}
+
+void dmub_dcn20_skip_dmub_panel_power_sequence(struct dmub_srv *dmub, bool 
skip)
+{
+   union dmub_fw_boot_options boot_options;
+   boot_options.all = REG_READ(DMCUB_SCRATCH14);
+   boot_options.bits.skip_phy_init_panel_sequence = skip;
+   REG_WRITE(DMCUB_SCRATCH14, boot_options.all);
+}
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h 
b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h
index a316f260f6ac..d438f365cbb0 100644
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h
+++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn20.h
@@ -192,4 +192,10 @@ bool dmub_dcn20_is_gpint_acked(struct dmub_srv *dmub,
 
 uint32_t dmub_dcn20_get_gpint_response(struct dmub_srv *dmub);
 
+void dmub_dcn20_enable_dmub_boot_options(struct dmub_srv *dmub);
+
+void dmub_dcn20_skip_dmub_panel_power_sequence(struct dmub_srv *dmub, bool 
skip);
+
+union dmub_fw_boot_status dmub_dcn20_get_fw_boot_status(struct dmub_srv *dmub);
+
 #endif /* _DMUB_DCN20_H_ */
diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn21.c 
b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn21.c
index e8f488232e34..1cf67b3e4771 100644
--- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn21.c
+++