Received: by 2002:a05:6a10:8395:0:0:0:0 with SMTP id n21csp289237pxh; Tue, 9 Nov 2021 10:43:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJz189zm6PYBbUac5qjDAThmRtl+WVDUG4MR60BFdp7KTKy6wK7NBaK/l7Qzz4uXnOHd/lQZ X-Received: by 2002:a92:c112:: with SMTP id p18mr6947648ile.52.1636483432268; Tue, 09 Nov 2021 10:43:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636483432; cv=none; d=google.com; s=arc-20160816; b=RQWH9uSbIZC1yMGjytIms1/RqsOHoIdk9Vu2gugDDYjvLfwKvzW/e6YLNtXJyqGlOt KOyVXh+qFdpUYZcTEzNZjT/amcU7NVa6VWBQvsAyxmZiGP7f6ZHWCYKmXiCmg0kHYjlL RpVPVrPcEKEP8FEznqagNgoRw2yPjhOTTfMYGYr2RIeYG6YO0gOsqE8ZncenldeNkszS YSR13ksmYQSW/MBtGv+1EIpGPd5I1x/6UOqF7XvUIv3yDuoC6rxT2Q8WvolaP2f/zE5d N8/QYS9YmooUZ2cmxByqZSYEb1CJrfwcI7yboEtoHo6rTlm4ZON2nsMNN3lpN/lRQAn2 9NLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=O6chO7j++xc37dHxpm9vuXLnZCr0KZ3GP4gwE1+eiRU=; b=Ne+BCG/oarqOkoE/ReumBBKAzXblijchuBFveTN9AS3RHNbOLOLfJ4dxwxAZcXXwB9 f91keZkGszDCvcjBxSMaW5Mi7MCdkN4yhZZU8IdpQqau4BE8XlJliLz7lJENAVnPnIWW z3JM+owjZwgzbuw0/uME0i/i2hQTJsUNFZvsEG/RvSGAvpyc3HJ+8xcfVauEvPPN39D/ JqmdnPSO1shQuySVZvVfiWsjihmE6y1rkolsMbMvIGRFmWm+d1ZsWZXOS5FEfZdDrnXy qdcQUWX2RbvpQiBf4MiqEQcZSF6VoqR7+TVRf8DHYMTn7O39g4dmK+sntZakaEGtqJzu JO3A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j8si47041635ils.92.2021.11.09.10.43.35; Tue, 09 Nov 2021 10:43:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244958AbhKIJrG (ORCPT + 99 others); Tue, 9 Nov 2021 04:47:06 -0500 Received: from verein.lst.de ([213.95.11.211]:49373 "EHLO verein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237441AbhKIJrA (ORCPT ); Tue, 9 Nov 2021 04:47:00 -0500 Received: by verein.lst.de (Postfix, from userid 2407) id 4A0B567373; Tue, 9 Nov 2021 10:44:11 +0100 (CET) Date: Tue, 9 Nov 2021 10:44:10 +0100 From: Christoph Hellwig To: Jani Nikula Cc: Zhi Wang , joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jgg@nvidia.com, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, hch@lst.de Subject: Re: [PATCH 1/3] i915/gvt: seperate tracked MMIO table from handlers.c Message-ID: <20211109094410.GA3073@lst.de> References: <20211108212718.10576-1-zhi.a.wang@intel.com> <875yt17qzs.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <875yt17qzs.fsf@intel.com> User-Agent: Mutt/1.5.17 (2007-11-01) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 09, 2021 at 09:00:39AM +0200, Jani Nikula wrote: > On Mon, 08 Nov 2021, Zhi Wang wrote: > > From: Zhi Wang > > > > To support the new mdev interfaces and the re-factor patches from > > Christoph, which moves the GVT-g code into a dedicated module, the GVT-g > > MMIO snapshot still needs to be saved in i915 so that the inital clean HW > > state can be used for the further vGPU. Seperate the tracked MMIO table > > from GVT-g, so that GVT-g and i915 can both use it. > > Do you really have to both put code in a header and then include that in > multiple places? > > I think you may need to rethink the whole approach, maybe make them > actual tables instead of code. I played around with this a bit and I can't think of anyting better, especially given that a function (i915_mmio_reg_offset) is used to get the offset. So except for the cosmetic cleanup below I think this is the best we can do for now: diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h index 4e2fd564abea1..c1f5f3b8abb2c 100644 --- a/drivers/gpu/drm/i915/gvt/gvt.h +++ b/drivers/gpu/drm/i915/gvt/gvt.h @@ -295,8 +295,8 @@ struct intel_vgpu_type { }; struct intel_gvt_hw_state { - void *cfg_space; - void *mmio; + u32 *cfg_space; + u32 *mmio; }; struct intel_gvt { diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c index 6a08d362bf664..41d1bb80aba40 100644 --- a/drivers/gpu/drm/i915/gvt/handlers.c +++ b/drivers/gpu/drm/i915/gvt/handlers.c @@ -2124,6 +2124,17 @@ static int csfe_chicken1_mmio_write(struct intel_vgpu *vgpu, return 0; } +/* + * Generate the MMIO handler hash table. + */ +#define MMIO_F(reg, s, f, am, rm, d, r, w) \ +do { \ + int ret = new_mmio_info(gvt, i915_mmio_reg_offset(reg), \ + f, s, am, rm, d, r, w); \ + if (ret) \ + return ret; \ +} while (0) + #include "mmio_table.h" static struct gvt_mmio_block *find_mmio_block(struct intel_gvt *gvt, diff --git a/drivers/gpu/drm/i915/gvt/mmio_table.h b/drivers/gpu/drm/i915/gvt/mmio_table.h index 39a4cb59695ae..2a17f7162224d 100644 --- a/drivers/gpu/drm/i915/gvt/mmio_table.h +++ b/drivers/gpu/drm/i915/gvt/mmio_table.h @@ -25,20 +25,7 @@ #ifndef _GVT_MMIO_TABLE_H_ #define _GVT_MMIO_TABLE_H_ -#ifdef GENERATE_MMIO_TABLE_IN_I915 -#define MMIO_F(reg, s, f, am, rm, d, r, w) do { \ - ret = new_mmio_info(gvt, i915_mmio_reg_offset(reg)); \ - if (ret) \ - return ret; \ -} while (0) -#else -#define MMIO_F(reg, s, f, am, rm, d, r, w) do { \ - ret = new_mmio_info(gvt, i915_mmio_reg_offset(reg), \ - f, s, am, rm, d, r, w); \ - if (ret) \ - return ret; \ -} while (0) -#endif +#include "gvt/reg.h" #define MMIO_D(reg, d) \ MMIO_F(reg, 4, 0, 0, 0, d, NULL, NULL) @@ -86,8 +73,6 @@ static int intel_gvt_init_generic_mmio_info(struct intel_gvt *gvt) { struct drm_i915_private *dev_priv = gvt->gt->i915; - int ret; - MMIO_RING_DFH(RING_IMR, D_ALL, 0, NULL, intel_vgpu_reg_imr_handler); @@ -905,7 +890,6 @@ static int intel_gvt_init_generic_mmio_info(struct intel_gvt *gvt) static int intel_gvt_init_bdw_mmio_info(struct intel_gvt *gvt) { struct drm_i915_private *dev_priv = gvt->gt->i915; - int ret; MMIO_DH(GEN8_GT_IMR(0), D_BDW_PLUS, NULL, intel_vgpu_reg_imr_handler); MMIO_DH(GEN8_GT_IER(0), D_BDW_PLUS, NULL, intel_vgpu_reg_ier_handler); @@ -1095,7 +1079,6 @@ static int intel_gvt_init_bdw_mmio_info(struct intel_gvt *gvt) static int intel_gvt_init_skl_mmio_info(struct intel_gvt *gvt) { struct drm_i915_private *dev_priv = gvt->gt->i915; - int ret; MMIO_DH(FORCEWAKE_RENDER_GEN9, D_SKL_PLUS, NULL, mul_force_wake_write); MMIO_DH(FORCEWAKE_ACK_RENDER_GEN9, D_SKL_PLUS, NULL, NULL); @@ -1346,7 +1329,6 @@ static int intel_gvt_init_skl_mmio_info(struct intel_gvt *gvt) static int intel_gvt_init_bxt_mmio_info(struct intel_gvt *gvt) { struct drm_i915_private *dev_priv = gvt->gt->i915; - int ret; MMIO_F(_MMIO(0x80000), 0x3000, 0, 0, 0, D_BXT, NULL, NULL); diff --git a/drivers/gpu/drm/i915/intel_gvt.c b/drivers/gpu/drm/i915/intel_gvt.c index 4fd51974bd359..fa9d79815af26 100644 --- a/drivers/gpu/drm/i915/intel_gvt.c +++ b/drivers/gpu/drm/i915/intel_gvt.c @@ -86,19 +86,17 @@ void intel_gvt_sanitize_options(struct drm_i915_private *dev_priv) dev_priv->params.enable_gvt = 0; } -#define GENERATE_MMIO_TABLE_IN_I915 -static int new_mmio_info(struct intel_gvt *gvt, u32 offset) -{ - void *mmio = gvt->hw_state.mmio; - - *(u32 *)(mmio + offset) = intel_uncore_read_notrace(gvt->gt->uncore, - _MMIO(offset)); - return 0; -} - -#include "gvt/reg.h" +/* + * Generates the MMIO golden state table. + */ +#define MMIO_F(reg, s, f, am, rm, d, r, w) \ +do { \ + u32 offset = i915_mmio_reg_offset(reg); \ + \ + (gvt)->hw_state.mmio[offset] = \ + intel_uncore_read_notrace((gvt)->gt->uncore, _MMIO(offset)); \ +} while (0) #include "gvt/mmio_table.h" -#undef GENERATE_MMIO_TABLE_IN_I915 static void init_device_info(struct intel_gvt *gvt) {