Re: [Intel-gfx] [Intel-xe] [PATCH 18/42] drm/i915/xe2lpd: Move registers to PICA

2023-08-24 Thread Lucas De Marchi

On Thu, Aug 24, 2023 at 11:34:59AM +0300, Jani Nikula wrote:

On Wed, 23 Aug 2023, Lucas De Marchi  wrote:

diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h 
b/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
index cb5d1be2ba19..4b5b9a97142d 100644
--- a/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
@@ -6,13 +6,15 @@
 #ifndef __INTEL_CX0_PHY_REGS_H__
 #define __INTEL_CX0_PHY_REGS_H__

+#include "i915_drv.h"


Please don't do this. Please don't add inline functions that depend on
i915_drv.h etc. being included from headers. This simple headers just
changed to including like half the headers in the entire driver. It's
that bad.

I think the main question is why does anything other than
intel_cx0_phy_regs.c need the helpers? It's probably the division
between that and intel_ddi.c that's wrong in the first place.


because on platform N-1 the register was on DDI and on platform N it
moved to the phy. So how would the divide be?

Lucas De Marchi



That's actually been one of the benefits of splitting the register
macros by area; you can tell what registers are used where, and
sometimes it gives bad code smells about stuff being accessed in the
wrong place.

BR,
Jani.



 #include "i915_reg_defs.h"
+#include "intel_display_limits.h"

 #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_A  0x64040
 #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_B  0x64140
 #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC1  0x16F240
 #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC2  0x16F440
-#define XELPDP_PORT_M2P_MSGBUS_CTL(port, lane) 
_MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
+#define XELPDP_PORT_M2P_MSGBUS_CTL(idx, lane)  
_MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \

 _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_A, \

 _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_B, \

 _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC1, \
@@ -27,7 +29,7 @@
 #define   XELPDP_PORT_M2P_TRANSACTION_RESETREG_BIT(15)
 #define   XELPDP_PORT_M2P_ADDRESS_MASK REG_GENMASK(11, 0)
 #define   XELPDP_PORT_M2P_ADDRESS(val) 
REG_FIELD_PREP(XELPDP_PORT_M2P_ADDRESS_MASK, val)
-#define XELPDP_PORT_P2M_MSGBUS_STATUS(port, lane)  
_MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
+#define XELPDP_PORT_P2M_MSGBUS_STATUS(idx, lane)   
_MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \

 _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_A, \

 _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_B, \

 _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC1, \
@@ -54,7 +56,7 @@
 #define _XELPDP_PORT_BUF_CTL1_LN0_B0x64104
 #define _XELPDP_PORT_BUF_CTL1_LN0_USBC10x16F200
 #define _XELPDP_PORT_BUF_CTL1_LN0_USBC20x16F400
-#define XELPDP_PORT_BUF_CTL1(port) 
_MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
+#define XELPDP_PORT_BUF_CTL1(idx)  
_MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \

 _XELPDP_PORT_BUF_CTL1_LN0_A, \

 _XELPDP_PORT_BUF_CTL1_LN0_B, \

 _XELPDP_PORT_BUF_CTL1_LN0_USBC1, \
@@ -75,7 +77,7 @@
 #define   XELPDP_PORT_WIDTH_MASK   REG_GENMASK(3, 1)
 #define   XELPDP_PORT_WIDTH(val)   
REG_FIELD_PREP(XELPDP_PORT_WIDTH_MASK, val)

-#define XELPDP_PORT_BUF_CTL2(port) 
_MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
+#define XELPDP_PORT_BUF_CTL2(idx)  
_MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \

 _XELPDP_PORT_BUF_CTL1_LN0_A, \

 _XELPDP_PORT_BUF_CTL1_LN0_B, \

 _XELPDP_PORT_BUF_CTL1_LN0_USBC1, \
@@ -95,7 +97,7 @@
 #define   XELPDP_POWER_STATE_READY_MASKREG_GENMASK(7, 
4)
 #define   XELPDP_POWER_STATE_READY(val)
REG_FIELD_PREP(XELPDP_POWER_STATE_READY_MASK, val)

-#define XELPDP_PORT_BUF_CTL3(port) 
_MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
+#define XELPDP_PORT_BUF_CTL3(idx)  
_MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \

 _XELPDP_PORT_BUF_CTL1_L

Re: [Intel-gfx] [Intel-xe] [PATCH 18/42] drm/i915/xe2lpd: Move registers to PICA

2023-08-24 Thread Jani Nikula
On Wed, 23 Aug 2023, Lucas De Marchi  wrote:
> diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h 
> b/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
> index cb5d1be2ba19..4b5b9a97142d 100644
> --- a/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
> @@ -6,13 +6,15 @@
>  #ifndef __INTEL_CX0_PHY_REGS_H__
>  #define __INTEL_CX0_PHY_REGS_H__
>  
> +#include "i915_drv.h"

Please don't do this. Please don't add inline functions that depend on
i915_drv.h etc. being included from headers. This simple headers just
changed to including like half the headers in the entire driver. It's
that bad.

I think the main question is why does anything other than
intel_cx0_phy_regs.c need the helpers? It's probably the division
between that and intel_ddi.c that's wrong in the first place.

That's actually been one of the benefits of splitting the register
macros by area; you can tell what registers are used where, and
sometimes it gives bad code smells about stuff being accessed in the
wrong place.

BR,
Jani.


>  #include "i915_reg_defs.h"
> +#include "intel_display_limits.h"
>  
>  #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_A0x64040
>  #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_B0x64140
>  #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC10x16F240
>  #define _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC20x16F440
> -#define XELPDP_PORT_M2P_MSGBUS_CTL(port, lane)   
> _MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
> +#define XELPDP_PORT_M2P_MSGBUS_CTL(idx, lane)
> _MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \
>   
>  _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_A, \
>   
>  _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_B, \
>   
>  _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC1, \
> @@ -27,7 +29,7 @@
>  #define   XELPDP_PORT_M2P_TRANSACTION_RESET  REG_BIT(15)
>  #define   XELPDP_PORT_M2P_ADDRESS_MASK   REG_GENMASK(11, 
> 0)
>  #define   XELPDP_PORT_M2P_ADDRESS(val)   
> REG_FIELD_PREP(XELPDP_PORT_M2P_ADDRESS_MASK, val)
> -#define XELPDP_PORT_P2M_MSGBUS_STATUS(port, lane)
> _MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
> +#define XELPDP_PORT_P2M_MSGBUS_STATUS(idx, lane) 
> _MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \
>   
>  _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_A, \
>   
>  _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_B, \
>   
>  _XELPDP_PORT_M2P_MSGBUS_CTL_LN0_USBC1, \
> @@ -54,7 +56,7 @@
>  #define _XELPDP_PORT_BUF_CTL1_LN0_B  0x64104
>  #define _XELPDP_PORT_BUF_CTL1_LN0_USBC1  0x16F200
>  #define _XELPDP_PORT_BUF_CTL1_LN0_USBC2  0x16F400
> -#define XELPDP_PORT_BUF_CTL1(port)   
> _MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
> +#define XELPDP_PORT_BUF_CTL1(idx)
> _MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_A, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_B, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_USBC1, \
> @@ -75,7 +77,7 @@
>  #define   XELPDP_PORT_WIDTH_MASK REG_GENMASK(3, 1)
>  #define   XELPDP_PORT_WIDTH(val) 
> REG_FIELD_PREP(XELPDP_PORT_WIDTH_MASK, val)
>  
> -#define XELPDP_PORT_BUF_CTL2(port)   
> _MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
> +#define XELPDP_PORT_BUF_CTL2(idx)
> _MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_A, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_B, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_USBC1, \
> @@ -95,7 +97,7 @@
>  #define   XELPDP_POWER_STATE_READY_MASK  REG_GENMASK(7, 
> 4)
>  #define   XELPDP_POWER_STATE_READY(val)  
> REG_FIELD_PREP(XELPDP_POWER_STATE_READY_MASK, val)
>  
> -#define XELPDP_PORT_BUF_CTL3(port)   
> _MMIO(_PICK_EVEN_2RANGES(port, PORT_TC1, \
> +#define XELPDP_PORT_BUF_CTL3(idx)
> _MMIO(_PICK_EVEN_2RANGES(idx, PORT_TC1, \
>   
>  _XELPDP_PORT_BUF_CTL1_LN0_A, \
>  

Re: [Intel-gfx] [Intel-xe] [PATCH 18/42] drm/i915/xe2lpd: Move registers to PICA

2023-08-23 Thread Matt Roper
On Wed, Aug 23, 2023 at 10:07:16AM -0700, Lucas De Marchi wrote:
> Some registers for DDI A/B moved to PICA and now follow the same format
> as the ones for the PORT_TC ports. The wrapper here deals with 2 issues:
> 
>   - Share the implementation between xe2lpd and previous
> platforms: there are minor layout changes, it's mostly the
> register location that changed
>   - Handle offsets after TC ports
> 
> Signed-off-by: Lucas De Marchi 
> ---
>  drivers/gpu/drm/i915/display/intel_cx0_phy.c  | 81 ++-
>  .../gpu/drm/i915/display/intel_cx0_phy_regs.h | 71 ++--
>  drivers/gpu/drm/i915/display/intel_ddi.c  | 18 +++--
>  3 files changed, 117 insertions(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy.c 
> b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
> index a5918bf30c31..6533ec417806 100644
> --- a/drivers/gpu/drm/i915/display/intel_cx0_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
> @@ -98,7 +98,7 @@ static void intel_cx0_phy_transaction_end(struct 
> intel_encoder *encoder, intel_w
>  static void intel_clear_response_ready_flag(struct drm_i915_private *i915,
>   enum port port, int lane)
>  {
> - intel_de_rmw(i915, XELPDP_PORT_P2M_MSGBUS_STATUS(port, lane),
> + intel_de_rmw(i915, xelpdp_port_p2m_msgbus_status_reg(i915, port, lane),
>0, XELPDP_PORT_P2M_RESPONSE_READY | 
> XELPDP_PORT_P2M_ERROR_SET);
>  }
>  
> @@ -106,10 +106,10 @@ static void intel_cx0_bus_reset(struct drm_i915_private 
> *i915, enum port port, i
>  {
>   enum phy phy = intel_port_to_phy(i915, port);
>  
> - intel_de_write(i915, XELPDP_PORT_M2P_MSGBUS_CTL(port, lane),
> + intel_de_write(i915, xelpdp_port_m2p_msgbus_ctl_reg(i915, port, lane),
>  XELPDP_PORT_M2P_TRANSACTION_RESET);
>  
> - if (intel_de_wait_for_clear(i915, XELPDP_PORT_M2P_MSGBUS_CTL(port, 
> lane),
> + if (intel_de_wait_for_clear(i915, xelpdp_port_m2p_msgbus_ctl_reg(i915, 
> port, lane),
>   XELPDP_PORT_M2P_TRANSACTION_RESET,
>   XELPDP_MSGBUS_TIMEOUT_SLOW)) {
>   drm_err_once(&i915->drm, "Failed to bring PHY %c to idle.\n", 
> phy_name(phy));
> @@ -125,7 +125,7 @@ static int intel_cx0_wait_for_ack(struct drm_i915_private 
> *i915, enum port port,
>   enum phy phy = intel_port_to_phy(i915, port);
>  
>   if (__intel_de_wait_for_register(i915,
> -  XELPDP_PORT_P2M_MSGBUS_STATUS(port, 
> lane),
> +  
> xelpdp_port_p2m_msgbus_status_reg(i915, port, lane),
>XELPDP_PORT_P2M_RESPONSE_READY,
>XELPDP_PORT_P2M_RESPONSE_READY,
>XELPDP_MSGBUS_TIMEOUT_FAST_US,
> @@ -160,7 +160,7 @@ static int __intel_cx0_read_once(struct drm_i915_private 
> *i915, enum port port,
>   int ack;
>   u32 val;
>  
> - if (intel_de_wait_for_clear(i915, XELPDP_PORT_M2P_MSGBUS_CTL(port, 
> lane),
> + if (intel_de_wait_for_clear(i915, xelpdp_port_m2p_msgbus_ctl_reg(i915, 
> port, lane),
>   XELPDP_PORT_M2P_TRANSACTION_PENDING,
>   XELPDP_MSGBUS_TIMEOUT_SLOW)) {
>   drm_dbg_kms(&i915->drm,
> @@ -169,7 +169,7 @@ static int __intel_cx0_read_once(struct drm_i915_private 
> *i915, enum port port,
>   return -ETIMEDOUT;
>   }
>  
> - intel_de_write(i915, XELPDP_PORT_M2P_MSGBUS_CTL(port, lane),
> + intel_de_write(i915, xelpdp_port_m2p_msgbus_ctl_reg(i915, port, lane),
>  XELPDP_PORT_M2P_TRANSACTION_PENDING |
>  XELPDP_PORT_M2P_COMMAND_READ |
>  XELPDP_PORT_M2P_ADDRESS(addr));
> @@ -220,7 +220,7 @@ static int __intel_cx0_write_once(struct drm_i915_private 
> *i915, enum port port,
>   int ack;
>   u32 val;
>  
> - if (intel_de_wait_for_clear(i915, XELPDP_PORT_M2P_MSGBUS_CTL(port, 
> lane),
> + if (intel_de_wait_for_clear(i915, xelpdp_port_m2p_msgbus_ctl_reg(i915, 
> port, lane),
>   XELPDP_PORT_M2P_TRANSACTION_PENDING,
>   XELPDP_MSGBUS_TIMEOUT_SLOW)) {
>   drm_dbg_kms(&i915->drm,
> @@ -229,14 +229,14 @@ static int __intel_cx0_write_once(struct 
> drm_i915_private *i915, enum port port,
>   return -ETIMEDOUT;
>   }
>  
> - intel_de_write(i915, XELPDP_PORT_M2P_MSGBUS_CTL(port, lane),
> + intel_de_write(i915, xelpdp_port_m2p_msgbus_ctl_reg(i915, port, lane),
>  XELPDP_PORT_M2P_TRANSACTION_PENDING |
>  (committed ? XELPDP_PORT_M2P_COMMAND_WRITE_COMMITTED :
>   XELPDP_PORT_M2P_COMMAND_WRITE_UNCOMMITTED) |
>  XELPDP_PORT_M2P_DATA(data) |
>  XELPDP_PORT_