[PATCH] drm/i915/gvt: Init PHY related registers for BXT
He, Min
min.he at intel.com
Thu Sep 13 06:04:10 UTC 2018
Colin,
I don’t think emulate_monitor_status_change is a good place to set
the initial values of these MMIOs. It's better to put them into
intel_vgpu_reset_mmio().
Thanks.
> -----Original Message-----
> From: intel-gvt-dev [mailto:intel-gvt-dev-bounces at lists.freedesktop.org] On
> Behalf Of Colin Xu
> Sent: Wednesday, September 12, 2018 10:19 AM
> To: intel-gvt-dev at lists.freedesktop.org
> Cc: He, Min <min.he at intel.com>; Xu, Colin <colin.xu at intel.com>
> Subject: [PATCH] drm/i915/gvt: Init PHY related registers for BXT
>
> Recent patch fixed the call trace
> "ERROR Port B enabled but PHY powered down? (PHY_CTL 00000000)".
> but introduced another similar call trace shown as:
> "ERROR Port C enabled but PHY powered down? (PHY_CTL 00000200)".
> The call trace will appear when host and guest enabled different ports,
> i.e. host using PORT C or neither PORT is enabled, while guest is always
> using PORT B as simulated by gvt. The issue is actually covered previously
> before the commit and reverals now when the commit do the right thing.
>
> On BXT, some PHY registers are initialized by vbios, before i915 loaded.
> Later i915 will re-program some, or skip some based on the implementation.
> The initialized mmio for guest i915 is done by gvt, based on the snapshot
> taken from host. If host and guest have different PORT enabled, some
> DPIO PHY mmios that gvt initialized for guest i915 will not match the
> simualted monitor for guest, which leads to guest i915 print the calltrace
> when it's trying to enable PHY and PORT.
>
> The solution is to init these DPIO PHY registers to default value, then
> guest i915 will program them to reasonable value based on the default
> powerwell table and enabled PORT. Together with the old patch, all similar
> call trace in guest kernel on BXT can be resolved.
>
> Fixes: c8ab5ac30ccc ("drm/i915/gvt: Make correct handling to vreg
> BXT_PHY_CTL_FAMILY")
> Signed-off-by: Colin Xu <colin.xu at intel.com>
> ---
> drivers/gpu/drm/i915/gvt/display.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gvt/display.c
> b/drivers/gpu/drm/i915/gvt/display.c
> index df1e14145747..dc17f1c13d09 100644
> --- a/drivers/gpu/drm/i915/gvt/display.c
> +++ b/drivers/gpu/drm/i915/gvt/display.c
> @@ -172,6 +172,25 @@ static void emulate_monitor_status_change(struct
> intel_vgpu *vgpu)
> int pipe;
>
> if (IS_BROXTON(dev_priv)) {
> + vgpu_vreg_t(vgpu, BXT_P_CR_GT_DISP_PWRON) &= ~(BIT(0)
> | BIT(1));
> + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY0)) &=
> + ~PHY_POWER_GOOD;
> + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY1)) &=
> + ~PHY_POWER_GOOD;
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY0)) &=
> ~BIT(30);
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY1)) &=
> ~BIT(30);
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_A)) &=
> ~BXT_PHY_LANE_ENABLED;
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_A)) |=
> + BXT_PHY_CMNLANE_POWERDOWN_ACK |
> + BXT_PHY_LANE_POWERDOWN_ACK;
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_B)) &=
> ~BXT_PHY_LANE_ENABLED;
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_B)) |=
> + BXT_PHY_CMNLANE_POWERDOWN_ACK |
> + BXT_PHY_LANE_POWERDOWN_ACK;
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_C)) &=
> ~BXT_PHY_LANE_ENABLED;
> + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_C)) |=
> + BXT_PHY_CMNLANE_POWERDOWN_ACK |
> + BXT_PHY_LANE_POWERDOWN_ACK;
> vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) &=
> ~(BXT_DE_PORT_HP_DDIA |
> BXT_DE_PORT_HP_DDIB |
> BXT_DE_PORT_HP_DDIC);
> --
> 2.18.0
>
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
More information about the intel-gvt-dev
mailing list