* [PATCH 1/8] drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-05 8:52 ` Jani Nikula
2024-11-05 7:15 ` [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c Vinod Govindapillai
` (9 subsequent siblings)
10 siblings, 1 reply; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
Update intel_enabled_dbuf_slices_mask to use intel_display instead
of drm_i915_private object. This is a prepratory patch for the next
patch in the series, where all intel_de_read calls in skl_watermarks.c
are updated to use intel_display instead of drm_i915_private.
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_power.c | 2 +-
drivers/gpu/drm/i915/display/intel_display_power_well.c | 2 +-
drivers/gpu/drm/i915/display/skl_watermark.c | 9 +++++----
drivers/gpu/drm/i915/display/skl_watermark.h | 3 ++-
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
index 2766fd9208b0..62e0faffca40 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power.c
@@ -1090,7 +1090,7 @@ static void gen9_dbuf_enable(struct drm_i915_private *dev_priv)
u8 slices_mask;
dev_priv->display.dbuf.enabled_slices =
- intel_enabled_dbuf_slices_mask(dev_priv);
+ intel_enabled_dbuf_slices_mask(&dev_priv->display);
slices_mask = BIT(DBUF_S1) | dev_priv->display.dbuf.enabled_slices;
diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
index f0131dd853de..f792db191fcf 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
@@ -973,7 +973,7 @@ static bool gen9_dc_off_power_well_enabled(struct drm_i915_private *dev_priv,
static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
{
- u8 hw_enabled_dbuf_slices = intel_enabled_dbuf_slices_mask(dev_priv);
+ u8 hw_enabled_dbuf_slices = intel_enabled_dbuf_slices_mask(&dev_priv->display);
u8 enabled_dbuf_slices = dev_priv->display.dbuf.enabled_slices;
drm_WARN(&dev_priv->drm,
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index 3b0e87edbacf..d9d7238f0fb4 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -52,13 +52,13 @@ struct skl_wm_params {
u32 dbuf_block_size;
};
-u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915)
+u8 intel_enabled_dbuf_slices_mask(struct intel_display *display)
{
u8 enabled_slices = 0;
enum dbuf_slice slice;
- for_each_dbuf_slice(i915, slice) {
- if (intel_de_read(i915, DBUF_CTL_S(slice)) & DBUF_POWER_STATE)
+ for_each_dbuf_slice(display, slice) {
+ if (intel_de_read(display, DBUF_CTL_S(slice)) & DBUF_POWER_STATE)
enabled_slices |= BIT(slice);
}
@@ -3126,6 +3126,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
struct intel_crtc *crtc)
{
struct drm_i915_private *i915 = to_i915(state->base.dev);
+ struct intel_display *display = to_intel_display(state);
const struct intel_crtc_state *new_crtc_state =
intel_atomic_get_new_crtc_state(state, crtc);
struct skl_hw_state {
@@ -3149,7 +3150,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y);
- hw_enabled_slices = intel_enabled_dbuf_slices_mask(i915);
+ hw_enabled_slices = intel_enabled_dbuf_slices_mask(display);
if (DISPLAY_VER(i915) >= 11 &&
hw_enabled_slices != i915->display.dbuf.enabled_slices)
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.h b/drivers/gpu/drm/i915/display/skl_watermark.h
index e73baec94873..990793e36272 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.h
+++ b/drivers/gpu/drm/i915/display/skl_watermark.h
@@ -17,11 +17,12 @@ struct intel_atomic_state;
struct intel_bw_state;
struct intel_crtc;
struct intel_crtc_state;
+struct intel_display;
struct intel_plane;
struct skl_pipe_wm;
struct skl_wm_level;
-u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915);
+u8 intel_enabled_dbuf_slices_mask(struct intel_display *display);
void intel_sagv_pre_plane_update(struct intel_atomic_state *state);
void intel_sagv_post_plane_update(struct intel_atomic_state *state);
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH 1/8] drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display
2024-11-05 7:15 ` [PATCH 1/8] drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display Vinod Govindapillai
@ 2024-11-05 8:52 ` Jani Nikula
2024-11-05 9:07 ` Govindapillai, Vinod
0 siblings, 1 reply; 24+ messages in thread
From: Jani Nikula @ 2024-11-05 8:52 UTC (permalink / raw)
To: Vinod Govindapillai, intel-gfx, intel-xe
Cc: vinod.govindapillai, ville.syrjala, jani.saarinen
On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> Update intel_enabled_dbuf_slices_mask to use intel_display instead
> of drm_i915_private object. This is a prepratory patch for the next
> patch in the series, where all intel_de_read calls in skl_watermarks.c
> are updated to use intel_display instead of drm_i915_private.
>
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display_power.c | 2 +-
> drivers/gpu/drm/i915/display/intel_display_power_well.c | 2 +-
> drivers/gpu/drm/i915/display/skl_watermark.c | 9 +++++----
> drivers/gpu/drm/i915/display/skl_watermark.h | 3 ++-
> 4 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
> index 2766fd9208b0..62e0faffca40 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> @@ -1090,7 +1090,7 @@ static void gen9_dbuf_enable(struct drm_i915_private *dev_priv)
> u8 slices_mask;
>
> dev_priv->display.dbuf.enabled_slices =
> - intel_enabled_dbuf_slices_mask(dev_priv);
> + intel_enabled_dbuf_slices_mask(&dev_priv->display);
Please add a local struct intel_display *display variable and pass that
to intel_enabled_dbuf_slices_mask().
The point is, all of the i915/dev_priv references need to go, and if you
add &dev_priv->display, this line needs to be updated again.
>
> slices_mask = BIT(DBUF_S1) | dev_priv->display.dbuf.enabled_slices;
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> index f0131dd853de..f792db191fcf 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> @@ -973,7 +973,7 @@ static bool gen9_dc_off_power_well_enabled(struct drm_i915_private *dev_priv,
>
> static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
> {
> - u8 hw_enabled_dbuf_slices = intel_enabled_dbuf_slices_mask(dev_priv);
> + u8 hw_enabled_dbuf_slices = intel_enabled_dbuf_slices_mask(&dev_priv->display);
Ditto.
> u8 enabled_dbuf_slices = dev_priv->display.dbuf.enabled_slices;
>
> drm_WARN(&dev_priv->drm,
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 3b0e87edbacf..d9d7238f0fb4 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -52,13 +52,13 @@ struct skl_wm_params {
> u32 dbuf_block_size;
> };
>
> -u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915)
> +u8 intel_enabled_dbuf_slices_mask(struct intel_display *display)
> {
> u8 enabled_slices = 0;
> enum dbuf_slice slice;
>
> - for_each_dbuf_slice(i915, slice) {
> - if (intel_de_read(i915, DBUF_CTL_S(slice)) & DBUF_POWER_STATE)
> + for_each_dbuf_slice(display, slice) {
> + if (intel_de_read(display, DBUF_CTL_S(slice)) & DBUF_POWER_STATE)
> enabled_slices |= BIT(slice);
> }
>
> @@ -3126,6 +3126,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
> struct intel_crtc *crtc)
> {
> struct drm_i915_private *i915 = to_i915(state->base.dev);
> + struct intel_display *display = to_intel_display(state);
Please prefer putting the display variable first if at all possible.
> const struct intel_crtc_state *new_crtc_state =
> intel_atomic_get_new_crtc_state(state, crtc);
> struct skl_hw_state {
> @@ -3149,7 +3150,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
>
> skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y);
>
> - hw_enabled_slices = intel_enabled_dbuf_slices_mask(i915);
> + hw_enabled_slices = intel_enabled_dbuf_slices_mask(display);
>
> if (DISPLAY_VER(i915) >= 11 &&
> hw_enabled_slices != i915->display.dbuf.enabled_slices)
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.h b/drivers/gpu/drm/i915/display/skl_watermark.h
> index e73baec94873..990793e36272 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.h
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.h
> @@ -17,11 +17,12 @@ struct intel_atomic_state;
> struct intel_bw_state;
> struct intel_crtc;
> struct intel_crtc_state;
> +struct intel_display;
> struct intel_plane;
> struct skl_pipe_wm;
> struct skl_wm_level;
>
> -u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915);
> +u8 intel_enabled_dbuf_slices_mask(struct intel_display *display);
>
> void intel_sagv_pre_plane_update(struct intel_atomic_state *state);
> void intel_sagv_post_plane_update(struct intel_atomic_state *state);
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH 1/8] drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display
2024-11-05 8:52 ` Jani Nikula
@ 2024-11-05 9:07 ` Govindapillai, Vinod
0 siblings, 0 replies; 24+ messages in thread
From: Govindapillai, Vinod @ 2024-11-05 9:07 UTC (permalink / raw)
To: intel-xe@lists.freedesktop.org, Nikula, Jani,
intel-gfx@lists.freedesktop.org
Cc: Saarinen, Jani, Syrjala, Ville
Thanks Jani!
Yes.. I was thinking the same and but got a bit mixed-up and also was in a bit of confusion how deep
these intel_display changes should go!
I see that you have added comment in the next patch that all of those i915 could be changed in one
function! I can update the series based on that.
Thanks
Vinod
On Tue, 2024-11-05 at 10:52 +0200, Jani Nikula wrote:
> On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> > Update intel_enabled_dbuf_slices_mask to use intel_display instead
> > of drm_i915_private object. This is a prepratory patch for the next
> > patch in the series, where all intel_de_read calls in skl_watermarks.c
> > are updated to use intel_display instead of drm_i915_private.
> >
> > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_display_power.c | 2 +-
> > drivers/gpu/drm/i915/display/intel_display_power_well.c | 2 +-
> > drivers/gpu/drm/i915/display/skl_watermark.c | 9 +++++----
> > drivers/gpu/drm/i915/display/skl_watermark.h | 3 ++-
> > 4 files changed, 9 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c
> > b/drivers/gpu/drm/i915/display/intel_display_power.c
> > index 2766fd9208b0..62e0faffca40 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> > @@ -1090,7 +1090,7 @@ static void gen9_dbuf_enable(struct drm_i915_private *dev_priv)
> > u8 slices_mask;
> >
> > dev_priv->display.dbuf.enabled_slices =
> > - intel_enabled_dbuf_slices_mask(dev_priv);
> > + intel_enabled_dbuf_slices_mask(&dev_priv->display);
>
> Please add a local struct intel_display *display variable and pass that
> to intel_enabled_dbuf_slices_mask().
>
> The point is, all of the i915/dev_priv references need to go, and if you
> add &dev_priv->display, this line needs to be updated again.
>
> >
> > slices_mask = BIT(DBUF_S1) | dev_priv->display.dbuf.enabled_slices;
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> > b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> > index f0131dd853de..f792db191fcf 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> > @@ -973,7 +973,7 @@ static bool gen9_dc_off_power_well_enabled(struct drm_i915_private
> > *dev_priv,
> >
> > static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
> > {
> > - u8 hw_enabled_dbuf_slices = intel_enabled_dbuf_slices_mask(dev_priv);
> > + u8 hw_enabled_dbuf_slices = intel_enabled_dbuf_slices_mask(&dev_priv->display);
>
> Ditto.
>
> > u8 enabled_dbuf_slices = dev_priv->display.dbuf.enabled_slices;
> >
> > drm_WARN(&dev_priv->drm,
> > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c
> > b/drivers/gpu/drm/i915/display/skl_watermark.c
> > index 3b0e87edbacf..d9d7238f0fb4 100644
> > --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> > +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> > @@ -52,13 +52,13 @@ struct skl_wm_params {
> > u32 dbuf_block_size;
> > };
> >
> > -u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915)
> > +u8 intel_enabled_dbuf_slices_mask(struct intel_display *display)
> > {
> > u8 enabled_slices = 0;
> > enum dbuf_slice slice;
> >
> > - for_each_dbuf_slice(i915, slice) {
> > - if (intel_de_read(i915, DBUF_CTL_S(slice)) & DBUF_POWER_STATE)
> > + for_each_dbuf_slice(display, slice) {
> > + if (intel_de_read(display, DBUF_CTL_S(slice)) & DBUF_POWER_STATE)
> > enabled_slices |= BIT(slice);
> > }
> >
> > @@ -3126,6 +3126,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
> > struct intel_crtc *crtc)
> > {
> > struct drm_i915_private *i915 = to_i915(state->base.dev);
> > + struct intel_display *display = to_intel_display(state);
>
> Please prefer putting the display variable first if at all possible.
>
>
> > const struct intel_crtc_state *new_crtc_state =
> > intel_atomic_get_new_crtc_state(state, crtc);
> > struct skl_hw_state {
> > @@ -3149,7 +3150,7 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
> >
> > skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y);
> >
> > - hw_enabled_slices = intel_enabled_dbuf_slices_mask(i915);
> > + hw_enabled_slices = intel_enabled_dbuf_slices_mask(display);
> >
> > if (DISPLAY_VER(i915) >= 11 &&
> > hw_enabled_slices != i915->display.dbuf.enabled_slices)
> > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.h
> > b/drivers/gpu/drm/i915/display/skl_watermark.h
> > index e73baec94873..990793e36272 100644
> > --- a/drivers/gpu/drm/i915/display/skl_watermark.h
> > +++ b/drivers/gpu/drm/i915/display/skl_watermark.h
> > @@ -17,11 +17,12 @@ struct intel_atomic_state;
> > struct intel_bw_state;
> > struct intel_crtc;
> > struct intel_crtc_state;
> > +struct intel_display;
> > struct intel_plane;
> > struct skl_pipe_wm;
> > struct skl_wm_level;
> >
> > -u8 intel_enabled_dbuf_slices_mask(struct drm_i915_private *i915);
> > +u8 intel_enabled_dbuf_slices_mask(struct intel_display *display);
> >
> > void intel_sagv_pre_plane_update(struct intel_atomic_state *state);
> > void intel_sagv_post_plane_update(struct intel_atomic_state *state);
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
2024-11-05 7:15 ` [PATCH 1/8] drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-05 8:58 ` Jani Nikula
2024-11-05 9:03 ` Jani Nikula
2024-11-05 7:15 ` [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display Vinod Govindapillai
` (8 subsequent siblings)
10 siblings, 2 replies; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
Convert all intel_de_read() to use intel_display instead of
struct drm_i915_private object. This is in preparation for
the rest of the patches in this series where hw support for
the minimum and interim ddb allocations for async flip is
added.
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
drivers/gpu/drm/i915/display/skl_watermark.c | 48 +++++++++++---------
1 file changed, 26 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index d9d7238f0fb4..2afc95e7533c 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -82,12 +82,14 @@ intel_has_sagv(struct drm_i915_private *i915)
}
static u32
-intel_sagv_block_time(struct drm_i915_private *i915)
+intel_sagv_block_time(struct intel_display *display)
{
+ struct drm_i915_private *i915 = to_i915(display->drm);
+
if (DISPLAY_VER(i915) >= 14) {
u32 val;
- val = intel_de_read(i915, MTL_LATENCY_SAGV);
+ val = intel_de_read(display, MTL_LATENCY_SAGV);
return REG_FIELD_GET(MTL_LATENCY_QCLK_SAGV, val);
} else if (DISPLAY_VER(i915) >= 12) {
@@ -126,7 +128,7 @@ static void intel_sagv_init(struct drm_i915_private *i915)
drm_WARN_ON(&i915->drm, i915->display.sagv.status == I915_SAGV_UNKNOWN);
- i915->display.sagv.block_time_us = intel_sagv_block_time(i915);
+ i915->display.sagv.block_time_us = intel_sagv_block_time(&i915->display);
drm_dbg_kms(&i915->drm, "SAGV supported: %s, original SAGV block time: %u us\n",
str_yes_no(intel_has_sagv(i915)), i915->display.sagv.block_time_us);
@@ -791,7 +793,7 @@ static void skl_ddb_entry_init_from_hw(struct skl_ddb_entry *entry, u32 reg)
}
static void
-skl_ddb_get_hw_plane_state(struct drm_i915_private *i915,
+skl_ddb_get_hw_plane_state(struct intel_display *display,
const enum pipe pipe,
const enum plane_id plane_id,
struct skl_ddb_entry *ddb,
@@ -801,18 +803,18 @@ skl_ddb_get_hw_plane_state(struct drm_i915_private *i915,
/* Cursor doesn't support NV12/planar, so no extra calculation needed */
if (plane_id == PLANE_CURSOR) {
- val = intel_de_read(i915, CUR_BUF_CFG(pipe));
+ val = intel_de_read(display, CUR_BUF_CFG(pipe));
skl_ddb_entry_init_from_hw(ddb, val);
return;
}
- val = intel_de_read(i915, PLANE_BUF_CFG(pipe, plane_id));
+ val = intel_de_read(display, PLANE_BUF_CFG(pipe, plane_id));
skl_ddb_entry_init_from_hw(ddb, val);
- if (DISPLAY_VER(i915) >= 11)
+ if (DISPLAY_VER(display) >= 11)
return;
- val = intel_de_read(i915, PLANE_NV12_BUF_CFG(pipe, plane_id));
+ val = intel_de_read(display, PLANE_NV12_BUF_CFG(pipe, plane_id));
skl_ddb_entry_init_from_hw(ddb_y, val);
}
@@ -832,7 +834,7 @@ static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
return;
for_each_plane_id_on_crtc(crtc, plane_id)
- skl_ddb_get_hw_plane_state(i915, pipe,
+ skl_ddb_get_hw_plane_state(&i915->display, pipe,
plane_id,
&ddb[plane_id],
&ddb_y[plane_id]);
@@ -2932,6 +2934,7 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
struct skl_pipe_wm *out)
{
struct drm_i915_private *i915 = to_i915(crtc->base.dev);
+ struct intel_display *display = &i915->display;
enum pipe pipe = crtc->pipe;
enum plane_id plane_id;
int level;
@@ -2942,32 +2945,32 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
for (level = 0; level < i915->display.wm.num_levels; level++) {
if (plane_id != PLANE_CURSOR)
- val = intel_de_read(i915, PLANE_WM(pipe, plane_id, level));
+ val = intel_de_read(display, PLANE_WM(pipe, plane_id, level));
else
- val = intel_de_read(i915, CUR_WM(pipe, level));
+ val = intel_de_read(display, CUR_WM(pipe, level));
skl_wm_level_from_reg_val(val, &wm->wm[level]);
}
if (plane_id != PLANE_CURSOR)
- val = intel_de_read(i915, PLANE_WM_TRANS(pipe, plane_id));
+ val = intel_de_read(display, PLANE_WM_TRANS(pipe, plane_id));
else
- val = intel_de_read(i915, CUR_WM_TRANS(pipe));
+ val = intel_de_read(display, CUR_WM_TRANS(pipe));
skl_wm_level_from_reg_val(val, &wm->trans_wm);
if (HAS_HW_SAGV_WM(i915)) {
if (plane_id != PLANE_CURSOR)
- val = intel_de_read(i915, PLANE_WM_SAGV(pipe, plane_id));
+ val = intel_de_read(display, PLANE_WM_SAGV(pipe, plane_id));
else
- val = intel_de_read(i915, CUR_WM_SAGV(pipe));
+ val = intel_de_read(display, CUR_WM_SAGV(pipe));
skl_wm_level_from_reg_val(val, &wm->sagv.wm0);
if (plane_id != PLANE_CURSOR)
- val = intel_de_read(i915, PLANE_WM_SAGV_TRANS(pipe, plane_id));
+ val = intel_de_read(display, PLANE_WM_SAGV_TRANS(pipe, plane_id));
else
- val = intel_de_read(i915, CUR_WM_SAGV_TRANS(pipe));
+ val = intel_de_read(display, CUR_WM_SAGV_TRANS(pipe));
skl_wm_level_from_reg_val(val, &wm->sagv.trans_wm);
} else if (DISPLAY_VER(i915) >= 12) {
@@ -2985,7 +2988,7 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
struct intel_crtc *crtc;
if (HAS_MBUS_JOINING(i915))
- dbuf_state->joined_mbus = intel_de_read(i915, MBUS_CTL) & MBUS_JOIN;
+ dbuf_state->joined_mbus = intel_de_read(display, MBUS_CTL) & MBUS_JOIN;
dbuf_state->mdclk_cdclk_ratio = intel_mdclk_cdclk_ratio(display, &display->cdclk.hw);
@@ -3014,7 +3017,7 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
if (!crtc_state->hw.active)
continue;
- skl_ddb_get_hw_plane_state(i915, crtc->pipe,
+ skl_ddb_get_hw_plane_state(display, crtc->pipe,
plane_id, ddb, ddb_y);
skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb);
@@ -3330,18 +3333,19 @@ adjust_wm_latency(struct drm_i915_private *i915,
static void mtl_read_wm_latency(struct drm_i915_private *i915, u16 wm[])
{
+ struct intel_display *display = &i915->display;
int num_levels = i915->display.wm.num_levels;
u32 val;
- val = intel_de_read(i915, MTL_LATENCY_LP0_LP1);
+ val = intel_de_read(display, MTL_LATENCY_LP0_LP1);
wm[0] = REG_FIELD_GET(MTL_LATENCY_LEVEL_EVEN_MASK, val);
wm[1] = REG_FIELD_GET(MTL_LATENCY_LEVEL_ODD_MASK, val);
- val = intel_de_read(i915, MTL_LATENCY_LP2_LP3);
+ val = intel_de_read(display, MTL_LATENCY_LP2_LP3);
wm[2] = REG_FIELD_GET(MTL_LATENCY_LEVEL_EVEN_MASK, val);
wm[3] = REG_FIELD_GET(MTL_LATENCY_LEVEL_ODD_MASK, val);
- val = intel_de_read(i915, MTL_LATENCY_LP4_LP5);
+ val = intel_de_read(display, MTL_LATENCY_LP4_LP5);
wm[4] = REG_FIELD_GET(MTL_LATENCY_LEVEL_EVEN_MASK, val);
wm[5] = REG_FIELD_GET(MTL_LATENCY_LEVEL_ODD_MASK, val);
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c
2024-11-05 7:15 ` [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c Vinod Govindapillai
@ 2024-11-05 8:58 ` Jani Nikula
2024-11-05 9:03 ` Jani Nikula
1 sibling, 0 replies; 24+ messages in thread
From: Jani Nikula @ 2024-11-05 8:58 UTC (permalink / raw)
To: Vinod Govindapillai, intel-gfx, intel-xe
Cc: vinod.govindapillai, ville.syrjala, jani.saarinen
On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> Convert all intel_de_read() to use intel_display instead of
> struct drm_i915_private object. This is in preparation for
> the rest of the patches in this series where hw support for
> the minimum and interim ddb allocations for async flip is
> added.
>
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
> drivers/gpu/drm/i915/display/skl_watermark.c | 48 +++++++++++---------
> 1 file changed, 26 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index d9d7238f0fb4..2afc95e7533c 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -82,12 +82,14 @@ intel_has_sagv(struct drm_i915_private *i915)
> }
>
> static u32
> -intel_sagv_block_time(struct drm_i915_private *i915)
> +intel_sagv_block_time(struct intel_display *display)
> {
> + struct drm_i915_private *i915 = to_i915(display->drm);
> +
> if (DISPLAY_VER(i915) >= 14) {
Please don't limit to changing just the intel_de_* per function. Convert
all you can.
> u32 val;
>
> - val = intel_de_read(i915, MTL_LATENCY_SAGV);
> + val = intel_de_read(display, MTL_LATENCY_SAGV);
>
> return REG_FIELD_GET(MTL_LATENCY_QCLK_SAGV, val);
> } else if (DISPLAY_VER(i915) >= 12) {
> @@ -126,7 +128,7 @@ static void intel_sagv_init(struct drm_i915_private *i915)
>
> drm_WARN_ON(&i915->drm, i915->display.sagv.status == I915_SAGV_UNKNOWN);
>
> - i915->display.sagv.block_time_us = intel_sagv_block_time(i915);
> + i915->display.sagv.block_time_us = intel_sagv_block_time(&i915->display);
Please add struct intel_display *display local variable.
You don't need to change everything here (in the caller side) in one go,
but quite obviously the function would benefit from further changes.
>
> drm_dbg_kms(&i915->drm, "SAGV supported: %s, original SAGV block time: %u us\n",
> str_yes_no(intel_has_sagv(i915)), i915->display.sagv.block_time_us);
> @@ -791,7 +793,7 @@ static void skl_ddb_entry_init_from_hw(struct skl_ddb_entry *entry, u32 reg)
> }
>
> static void
> -skl_ddb_get_hw_plane_state(struct drm_i915_private *i915,
> +skl_ddb_get_hw_plane_state(struct intel_display *display,
> const enum pipe pipe,
> const enum plane_id plane_id,
> struct skl_ddb_entry *ddb,
> @@ -801,18 +803,18 @@ skl_ddb_get_hw_plane_state(struct drm_i915_private *i915,
>
> /* Cursor doesn't support NV12/planar, so no extra calculation needed */
> if (plane_id == PLANE_CURSOR) {
> - val = intel_de_read(i915, CUR_BUF_CFG(pipe));
> + val = intel_de_read(display, CUR_BUF_CFG(pipe));
> skl_ddb_entry_init_from_hw(ddb, val);
> return;
> }
>
> - val = intel_de_read(i915, PLANE_BUF_CFG(pipe, plane_id));
> + val = intel_de_read(display, PLANE_BUF_CFG(pipe, plane_id));
> skl_ddb_entry_init_from_hw(ddb, val);
>
> - if (DISPLAY_VER(i915) >= 11)
> + if (DISPLAY_VER(display) >= 11)
> return;
>
> - val = intel_de_read(i915, PLANE_NV12_BUF_CFG(pipe, plane_id));
> + val = intel_de_read(display, PLANE_NV12_BUF_CFG(pipe, plane_id));
> skl_ddb_entry_init_from_hw(ddb_y, val);
> }
>
> @@ -832,7 +834,7 @@ static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
> return;
>
> for_each_plane_id_on_crtc(crtc, plane_id)
> - skl_ddb_get_hw_plane_state(i915, pipe,
> + skl_ddb_get_hw_plane_state(&i915->display, pipe,
Please add the local variable.
> plane_id,
> &ddb[plane_id],
> &ddb_y[plane_id]);
> @@ -2932,6 +2934,7 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
> struct skl_pipe_wm *out)
> {
> struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> + struct intel_display *display = &i915->display;
Please initialize struct intel_display *display using
to_intel_display(...) when possible instead of i915. Here, it would be:
struct intel_display *display = to_intel_display(crtc);
That doesn't need to be changed anymore, &i915->display does.
And please put the display variable first.
> enum pipe pipe = crtc->pipe;
> enum plane_id plane_id;
> int level;
> @@ -2942,32 +2945,32 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
>
> for (level = 0; level < i915->display.wm.num_levels; level++) {
Please don't limit to changing just intel_de_*. This should be
display->wm.num_levels. Etc.
> if (plane_id != PLANE_CURSOR)
> - val = intel_de_read(i915, PLANE_WM(pipe, plane_id, level));
> + val = intel_de_read(display, PLANE_WM(pipe, plane_id, level));
> else
> - val = intel_de_read(i915, CUR_WM(pipe, level));
> + val = intel_de_read(display, CUR_WM(pipe, level));
>
> skl_wm_level_from_reg_val(val, &wm->wm[level]);
> }
>
> if (plane_id != PLANE_CURSOR)
> - val = intel_de_read(i915, PLANE_WM_TRANS(pipe, plane_id));
> + val = intel_de_read(display, PLANE_WM_TRANS(pipe, plane_id));
> else
> - val = intel_de_read(i915, CUR_WM_TRANS(pipe));
> + val = intel_de_read(display, CUR_WM_TRANS(pipe));
>
> skl_wm_level_from_reg_val(val, &wm->trans_wm);
>
> if (HAS_HW_SAGV_WM(i915)) {
> if (plane_id != PLANE_CURSOR)
> - val = intel_de_read(i915, PLANE_WM_SAGV(pipe, plane_id));
> + val = intel_de_read(display, PLANE_WM_SAGV(pipe, plane_id));
> else
> - val = intel_de_read(i915, CUR_WM_SAGV(pipe));
> + val = intel_de_read(display, CUR_WM_SAGV(pipe));
>
> skl_wm_level_from_reg_val(val, &wm->sagv.wm0);
>
> if (plane_id != PLANE_CURSOR)
> - val = intel_de_read(i915, PLANE_WM_SAGV_TRANS(pipe, plane_id));
> + val = intel_de_read(display, PLANE_WM_SAGV_TRANS(pipe, plane_id));
> else
> - val = intel_de_read(i915, CUR_WM_SAGV_TRANS(pipe));
> + val = intel_de_read(display, CUR_WM_SAGV_TRANS(pipe));
>
> skl_wm_level_from_reg_val(val, &wm->sagv.trans_wm);
> } else if (DISPLAY_VER(i915) >= 12) {
> @@ -2985,7 +2988,7 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
> struct intel_crtc *crtc;
>
> if (HAS_MBUS_JOINING(i915))
> - dbuf_state->joined_mbus = intel_de_read(i915, MBUS_CTL) & MBUS_JOIN;
> + dbuf_state->joined_mbus = intel_de_read(display, MBUS_CTL) & MBUS_JOIN;
>
> dbuf_state->mdclk_cdclk_ratio = intel_mdclk_cdclk_ratio(display, &display->cdclk.hw);
>
> @@ -3014,7 +3017,7 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
> if (!crtc_state->hw.active)
> continue;
>
> - skl_ddb_get_hw_plane_state(i915, crtc->pipe,
> + skl_ddb_get_hw_plane_state(display, crtc->pipe,
> plane_id, ddb, ddb_y);
>
> skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb);
> @@ -3330,18 +3333,19 @@ adjust_wm_latency(struct drm_i915_private *i915,
>
> static void mtl_read_wm_latency(struct drm_i915_private *i915, u16 wm[])
> {
> + struct intel_display *display = &i915->display;
> int num_levels = i915->display.wm.num_levels;
display->wm.num_levels
> u32 val;
>
> - val = intel_de_read(i915, MTL_LATENCY_LP0_LP1);
> + val = intel_de_read(display, MTL_LATENCY_LP0_LP1);
> wm[0] = REG_FIELD_GET(MTL_LATENCY_LEVEL_EVEN_MASK, val);
> wm[1] = REG_FIELD_GET(MTL_LATENCY_LEVEL_ODD_MASK, val);
>
> - val = intel_de_read(i915, MTL_LATENCY_LP2_LP3);
> + val = intel_de_read(display, MTL_LATENCY_LP2_LP3);
> wm[2] = REG_FIELD_GET(MTL_LATENCY_LEVEL_EVEN_MASK, val);
> wm[3] = REG_FIELD_GET(MTL_LATENCY_LEVEL_ODD_MASK, val);
>
> - val = intel_de_read(i915, MTL_LATENCY_LP4_LP5);
> + val = intel_de_read(display, MTL_LATENCY_LP4_LP5);
> wm[4] = REG_FIELD_GET(MTL_LATENCY_LEVEL_EVEN_MASK, val);
> wm[5] = REG_FIELD_GET(MTL_LATENCY_LEVEL_ODD_MASK, val);
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c
2024-11-05 7:15 ` [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c Vinod Govindapillai
2024-11-05 8:58 ` Jani Nikula
@ 2024-11-05 9:03 ` Jani Nikula
1 sibling, 0 replies; 24+ messages in thread
From: Jani Nikula @ 2024-11-05 9:03 UTC (permalink / raw)
To: Vinod Govindapillai, intel-gfx, intel-xe
Cc: vinod.govindapillai, ville.syrjala, jani.saarinen
On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> Convert all intel_de_read() to use intel_display instead of
> struct drm_i915_private object. This is in preparation for
> the rest of the patches in this series where hw support for
> the minimum and interim ddb allocations for async flip is
> added.
>
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
Typo in subject prefix.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
2024-11-05 7:15 ` [PATCH 1/8] drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display Vinod Govindapillai
2024-11-05 7:15 ` [PATCH 2/8] drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-05 9:08 ` Jani Nikula
2024-11-05 7:15 ` [PATCH 4/8] drm/i915/display: update use_min_ddb " Vinod Govindapillai
` (7 subsequent siblings)
10 siblings, 1 reply; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
Avoid using struct drm_i915_private reference and use intel_display
instead. This is in preparation for the rest of the patches in this
series where hw support for the minimum and interim ddb allocations
for async flip is added
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
drivers/gpu/drm/i915/display/skl_watermark.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index 2afc95e7533c..2018abc35c8a 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -1372,9 +1372,9 @@ static bool
use_minimal_wm0_only(const struct intel_crtc_state *crtc_state,
struct intel_plane *plane)
{
- struct drm_i915_private *i915 = to_i915(plane->base.dev);
+ struct intel_display *display = to_intel_display(plane);
- return DISPLAY_VER(i915) >= 13 &&
+ return DISPLAY_VER(display) >= 13 &&
crtc_state->uapi.async_flip &&
plane->async_flip;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display
2024-11-05 7:15 ` [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display Vinod Govindapillai
@ 2024-11-05 9:08 ` Jani Nikula
2024-11-06 14:06 ` Ville Syrjälä
0 siblings, 1 reply; 24+ messages in thread
From: Jani Nikula @ 2024-11-05 9:08 UTC (permalink / raw)
To: Vinod Govindapillai, intel-gfx, intel-xe, ville.syrjala
Cc: vinod.govindapillai, ville.syrjala, jani.saarinen
On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> Avoid using struct drm_i915_private reference and use intel_display
> instead. This is in preparation for the rest of the patches in this
> series where hw support for the minimum and interim ddb allocations
> for async flip is added
This is technically correct, but it's self-contained in a single
function. I've preferred two approaches over this:
- Convert entire files (sometimes internally first, with the external
interface changes in a separate patch, depending on how big the patch
becomes).
- Convert single functions which are widely used and have struct
intel_display as parameter, to limit the size of the patch (as opposed
to doing the conversion as part of an entire file change).
I think Ville said he's had a go at converting skl_watermark.c. Ville,
do you have a patch for that?
BR,
Jani.
>
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
> drivers/gpu/drm/i915/display/skl_watermark.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 2afc95e7533c..2018abc35c8a 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -1372,9 +1372,9 @@ static bool
> use_minimal_wm0_only(const struct intel_crtc_state *crtc_state,
> struct intel_plane *plane)
> {
> - struct drm_i915_private *i915 = to_i915(plane->base.dev);
> + struct intel_display *display = to_intel_display(plane);
>
> - return DISPLAY_VER(i915) >= 13 &&
> + return DISPLAY_VER(display) >= 13 &&
> crtc_state->uapi.async_flip &&
> plane->async_flip;
> }
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display
2024-11-05 9:08 ` Jani Nikula
@ 2024-11-06 14:06 ` Ville Syrjälä
2024-11-06 15:49 ` Govindapillai, Vinod
0 siblings, 1 reply; 24+ messages in thread
From: Ville Syrjälä @ 2024-11-06 14:06 UTC (permalink / raw)
To: Jani Nikula
Cc: Vinod Govindapillai, intel-gfx, intel-xe, ville.syrjala,
jani.saarinen
On Tue, Nov 05, 2024 at 11:08:40AM +0200, Jani Nikula wrote:
> On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> > Avoid using struct drm_i915_private reference and use intel_display
> > instead. This is in preparation for the rest of the patches in this
> > series where hw support for the minimum and interim ddb allocations
> > for async flip is added
>
> This is technically correct, but it's self-contained in a single
> function. I've preferred two approaches over this:
>
> - Convert entire files (sometimes internally first, with the external
> interface changes in a separate patch, depending on how big the patch
> becomes).
>
> - Convert single functions which are widely used and have struct
> intel_display as parameter, to limit the size of the patch (as opposed
> to doing the conversion as part of an entire file change).
>
> I think Ville said he's had a go at converting skl_watermark.c. Ville,
> do you have a patch for that?
Nothing usable atm. The unconverted dependecies at the time
were rather extensive so it became a bit of a mess. I might
have decent conversions for some of the dependencies though.
I'll have a look around and post them if I see anything sane.
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display
2024-11-06 14:06 ` Ville Syrjälä
@ 2024-11-06 15:49 ` Govindapillai, Vinod
0 siblings, 0 replies; 24+ messages in thread
From: Govindapillai, Vinod @ 2024-11-06 15:49 UTC (permalink / raw)
To: ville.syrjala@linux.intel.com, Nikula, Jani
Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani,
intel-gfx@lists.freedesktop.org, Syrjala, Ville
On Wed, 2024-11-06 at 16:06 +0200, Ville Syrjälä wrote:
> On Tue, Nov 05, 2024 at 11:08:40AM +0200, Jani Nikula wrote:
> > On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> > > Avoid using struct drm_i915_private reference and use intel_display
> > > instead. This is in preparation for the rest of the patches in this
> > > series where hw support for the minimum and interim ddb allocations
> > > for async flip is added
> >
> > This is technically correct, but it's self-contained in a single
> > function. I've preferred two approaches over this:
> >
> > - Convert entire files (sometimes internally first, with the external
> > interface changes in a separate patch, depending on how big the patch
> > becomes).
> >
> > - Convert single functions which are widely used and have struct
> > intel_display as parameter, to limit the size of the patch (as opposed
> > to doing the conversion as part of an entire file change).
> >
> > I think Ville said he's had a go at converting skl_watermark.c. Ville,
> > do you have a patch for that?
>
> Nothing usable atm. The unconverted dependecies at the time
> were rather extensive so it became a bit of a mess. I might
> have decent conversions for some of the dependencies though.
> I'll have a look around and post them if I see anything sane.
>
I had done few more on top of my series - Jani has this
https://patchwork.freedesktop.org/series/140886/ which has many SAGV related updates which will help
cleaning up of skl_watermarks.c better. So I can update my changes on top of that,
But Ville, could you please review these patches which mainly has the logic for this minimal/interim
DDB config for async flip. i will update the intel_display related changes on top of Jani's series.
https://patchwork.freedesktop.org/patch/622987/?series=140927&rev=1
https://patchwork.freedesktop.org/patch/622988/?series=140927&rev=1
https://patchwork.freedesktop.org/patch/622990/?series=140927&rev=1
BR
Vinod
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 4/8] drm/i915/display: update use_min_ddb to use intel_display
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (2 preceding siblings ...)
2024-11-05 7:15 ` [PATCH 3/8] drm/i915/display: update use_minimal_wm0_only to use intel_display Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-05 7:15 ` [PATCH 5/8] drm/i915/display: update skl_plane_wm_equals " Vinod Govindapillai
` (6 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
Avoid using struct drm_i915_private reference and use intel_display
instead. This is in preparation for the rest of the patches in this
series where hw support for the minimum and interim ddb allocations
for async flip is added
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
drivers/gpu/drm/i915/display/intel_atomic_plane.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
index d89630b2d5c1..2c8fae8de4da 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
@@ -211,9 +211,9 @@ static bool
use_min_ddb(const struct intel_crtc_state *crtc_state,
struct intel_plane *plane)
{
- struct drm_i915_private *i915 = to_i915(plane->base.dev);
+ struct intel_display *display = to_intel_display(plane);
- return DISPLAY_VER(i915) >= 13 &&
+ return DISPLAY_VER(display) >= 13 &&
crtc_state->uapi.async_flip &&
plane->async_flip;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* [PATCH 5/8] drm/i915/display: update skl_plane_wm_equals to use intel_display
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (3 preceding siblings ...)
2024-11-05 7:15 ` [PATCH 4/8] drm/i915/display: update use_min_ddb " Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-05 9:09 ` Jani Nikula
2024-11-05 7:15 ` [PATCH 6/8] drm/i915/display: update to plane_wm register access function Vinod Govindapillai
` (5 subsequent siblings)
10 siblings, 1 reply; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
Use intel_display object instead of struct drm_i915_private in
skl_plane_wm_equals(). This is in preparation for the rest of
the patches in this series where hw support for the minimum and
interim ddb allocations for async flip is added
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
drivers/gpu/drm/i915/display/skl_watermark.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index 2018abc35c8a..a01b1dc01348 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -2384,13 +2384,13 @@ static bool skl_wm_level_equals(const struct skl_wm_level *l1,
l1->blocks == l2->blocks;
}
-static bool skl_plane_wm_equals(struct drm_i915_private *i915,
+static bool skl_plane_wm_equals(struct intel_display *display,
const struct skl_plane_wm *wm1,
const struct skl_plane_wm *wm2)
{
int level;
- for (level = 0; level < i915->display.wm.num_levels; level++) {
+ for (level = 0; level < display->wm.num_levels; level++) {
/*
* We don't check uv_wm as the hardware doesn't actually
* use it. It only gets used for calculating the required
@@ -2650,7 +2650,7 @@ skl_print_wm_changes(struct intel_atomic_state *state)
old_wm = &old_pipe_wm->planes[plane_id];
new_wm = &new_pipe_wm->planes[plane_id];
- if (skl_plane_wm_equals(i915, old_wm, new_wm))
+ if (skl_plane_wm_equals(&i915->display, old_wm, new_wm))
continue;
drm_dbg_kms(&i915->drm,
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH 5/8] drm/i915/display: update skl_plane_wm_equals to use intel_display
2024-11-05 7:15 ` [PATCH 5/8] drm/i915/display: update skl_plane_wm_equals " Vinod Govindapillai
@ 2024-11-05 9:09 ` Jani Nikula
0 siblings, 0 replies; 24+ messages in thread
From: Jani Nikula @ 2024-11-05 9:09 UTC (permalink / raw)
To: Vinod Govindapillai, intel-gfx, intel-xe
Cc: vinod.govindapillai, ville.syrjala, jani.saarinen
On Tue, 05 Nov 2024, Vinod Govindapillai <vinod.govindapillai@intel.com> wrote:
> Use intel_display object instead of struct drm_i915_private in
> skl_plane_wm_equals(). This is in preparation for the rest of
> the patches in this series where hw support for the minimum and
> interim ddb allocations for async flip is added
>
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
> drivers/gpu/drm/i915/display/skl_watermark.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 2018abc35c8a..a01b1dc01348 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -2384,13 +2384,13 @@ static bool skl_wm_level_equals(const struct skl_wm_level *l1,
> l1->blocks == l2->blocks;
> }
>
> -static bool skl_plane_wm_equals(struct drm_i915_private *i915,
> +static bool skl_plane_wm_equals(struct intel_display *display,
> const struct skl_plane_wm *wm1,
> const struct skl_plane_wm *wm2)
> {
> int level;
>
> - for (level = 0; level < i915->display.wm.num_levels; level++) {
> + for (level = 0; level < display->wm.num_levels; level++) {
> /*
> * We don't check uv_wm as the hardware doesn't actually
> * use it. It only gets used for calculating the required
> @@ -2650,7 +2650,7 @@ skl_print_wm_changes(struct intel_atomic_state *state)
> old_wm = &old_pipe_wm->planes[plane_id];
> new_wm = &new_pipe_wm->planes[plane_id];
>
> - if (skl_plane_wm_equals(i915, old_wm, new_wm))
> + if (skl_plane_wm_equals(&i915->display, old_wm, new_wm))
Please don't use "&i915->display" inline.c
> continue;
>
> drm_dbg_kms(&i915->drm,
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 6/8] drm/i915/display: update to plane_wm register access function
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (4 preceding siblings ...)
2024-11-05 7:15 ` [PATCH 5/8] drm/i915/display: update skl_plane_wm_equals " Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-05 7:15 ` [PATCH 7/8] drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip Vinod Govindapillai
` (4 subsequent siblings)
10 siblings, 0 replies; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
Future platforms can have new additions in the plane_wm
registers. So update skl_wm_level_from_reg_val() to have
possiblity for such platform differentiations. This is in
preparation for the rest of the patches in this series where
hw support for the minimum and interim ddb allocations for
async flip is added
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
drivers/gpu/drm/i915/display/skl_watermark.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index a01b1dc01348..d961d01343b3 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -2922,7 +2922,8 @@ skl_compute_wm(struct intel_atomic_state *state)
return 0;
}
-static void skl_wm_level_from_reg_val(u32 val, struct skl_wm_level *level)
+static void skl_wm_level_from_reg_val(struct intel_display *display,
+ u32 val, struct skl_wm_level *level)
{
level->enable = val & PLANE_WM_EN;
level->ignore_lines = val & PLANE_WM_IGNORE_LINES;
@@ -2949,7 +2950,7 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
else
val = intel_de_read(display, CUR_WM(pipe, level));
- skl_wm_level_from_reg_val(val, &wm->wm[level]);
+ skl_wm_level_from_reg_val(display, val, &wm->wm[level]);
}
if (plane_id != PLANE_CURSOR)
@@ -2957,7 +2958,7 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
else
val = intel_de_read(display, CUR_WM_TRANS(pipe));
- skl_wm_level_from_reg_val(val, &wm->trans_wm);
+ skl_wm_level_from_reg_val(display, val, &wm->trans_wm);
if (HAS_HW_SAGV_WM(i915)) {
if (plane_id != PLANE_CURSOR)
@@ -2965,14 +2966,14 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
else
val = intel_de_read(display, CUR_WM_SAGV(pipe));
- skl_wm_level_from_reg_val(val, &wm->sagv.wm0);
+ skl_wm_level_from_reg_val(display, val, &wm->sagv.wm0);
if (plane_id != PLANE_CURSOR)
val = intel_de_read(display, PLANE_WM_SAGV_TRANS(pipe, plane_id));
else
val = intel_de_read(display, CUR_WM_SAGV_TRANS(pipe));
- skl_wm_level_from_reg_val(val, &wm->sagv.trans_wm);
+ skl_wm_level_from_reg_val(display, val, &wm->sagv.trans_wm);
} else if (DISPLAY_VER(i915) >= 12) {
wm->sagv.wm0 = wm->wm[0];
wm->sagv.trans_wm = wm->trans_wm;
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* [PATCH 7/8] drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (5 preceding siblings ...)
2024-11-05 7:15 ` [PATCH 6/8] drm/i915/display: update to plane_wm register access function Vinod Govindapillai
@ 2024-11-05 7:15 ` Vinod Govindapillai
2024-11-06 22:45 ` Ville Syrjälä
2024-11-05 7:16 ` [PATCH 8/8] drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info Vinod Govindapillai
` (3 subsequent siblings)
10 siblings, 1 reply; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:15 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Starting from xe3, hw now is capable of switching automatically to min
ddb allocation(not using any extra blocks) or interim SAGV-adjusted
allocation in case if async flip is used.
For that purpose there is now additional register, where correspodent
values have to be programmed.
Bspec: 69880, 72053
Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
.../gpu/drm/i915/display/intel_atomic_plane.c | 9 ++
.../drm/i915/display/intel_display_types.h | 8 ++
.../drm/i915/display/skl_universal_plane.c | 31 +++++++
.../i915/display/skl_universal_plane_regs.h | 13 +++
drivers/gpu/drm/i915/display/skl_watermark.c | 85 +++++++++++++++++--
5 files changed, 140 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
index 2c8fae8de4da..7940cb911889 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
@@ -213,6 +213,15 @@ use_min_ddb(const struct intel_crtc_state *crtc_state,
{
struct intel_display *display = to_intel_display(plane);
+ /*
+ * For xe3 onwards this feature is implemented in
+ * hardware, so no need to force relative data rate to 0,
+ * we will update a specific register with min_ddb without
+ * extra blocks.
+ */
+ if (DISPLAY_VER(display) >= 30)
+ return false;
+
return DISPLAY_VER(display) >= 13 &&
crtc_state->uapi.async_flip &&
plane->async_flip;
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index d2b68505f088..c0548db0061c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -770,6 +770,7 @@ struct skl_wm_level {
bool enable;
bool ignore_lines;
bool can_sagv;
+ bool auto_min_ddb_allowed;
};
struct skl_plane_wm {
@@ -863,6 +864,13 @@ struct intel_crtc_wm_state {
struct skl_ddb_entry plane_ddb[I915_MAX_PLANES];
/* pre-icl: for planar Y */
struct skl_ddb_entry plane_ddb_y[I915_MAX_PLANES];
+
+ /*
+ * xe3: Minimum amount of display blocks and minimum
+ * sagv allocation required for async flip
+ */
+ struct skl_ddb_entry plane_min_ddb[I915_MAX_PLANES];
+ struct skl_ddb_entry plane_interim_ddb[I915_MAX_PLANES];
} skl;
struct {
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index 038ca2ec5d7a..69d5ca74c594 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -715,6 +715,26 @@ static u32 skl_plane_ddb_reg_val(const struct skl_ddb_entry *entry)
PLANE_BUF_START(entry->start);
}
+static u32 ptl_plane_min_ddb_reg_val(const struct skl_ddb_entry *min_ddb_entry,
+ const struct skl_ddb_entry *interim_ddb_entry)
+{
+ u32 val = 0;
+
+ if (min_ddb_entry->end) {
+ val |= PLANE_AUTO_MIN_DBUF_EN;
+ val |= REG_FIELD_PREP(PLANE_MIN_DDB_BLOCKS_MASK,
+ min_ddb_entry->end - min_ddb_entry->start);
+ }
+
+ if (interim_ddb_entry->end) {
+ val |= PLANE_AUTO_MIN_DBUF_EN;
+ val |= REG_FIELD_PREP(PLANE_INTERIM_DDB_BLOCKS_MASK,
+ interim_ddb_entry->end - interim_ddb_entry->start);
+ }
+
+ return val;
+}
+
static u32 skl_plane_wm_reg_val(const struct skl_wm_level *level)
{
u32 val = 0;
@@ -723,6 +743,9 @@ static u32 skl_plane_wm_reg_val(const struct skl_wm_level *level)
val |= PLANE_WM_EN;
if (level->ignore_lines)
val |= PLANE_WM_IGNORE_LINES;
+ if (level->auto_min_ddb_allowed)
+ val |= PLANE_WM_AUTO_MIN_ALLOC_EN;
+
val |= REG_FIELD_PREP(PLANE_WM_BLOCKS_MASK, level->blocks);
val |= REG_FIELD_PREP(PLANE_WM_LINES_MASK, level->lines);
@@ -742,6 +765,10 @@ static void skl_write_plane_wm(struct intel_dsb *dsb,
&crtc_state->wm.skl.plane_ddb[plane_id];
const struct skl_ddb_entry *ddb_y =
&crtc_state->wm.skl.plane_ddb_y[plane_id];
+ const struct skl_ddb_entry *min_ddb =
+ &crtc_state->wm.skl.plane_min_ddb[plane_id];
+ const struct skl_ddb_entry *interim_ddb =
+ &crtc_state->wm.skl.plane_interim_ddb[plane_id];
int level;
for (level = 0; level < i915->display.wm.num_levels; level++)
@@ -766,6 +793,10 @@ static void skl_write_plane_wm(struct intel_dsb *dsb,
if (DISPLAY_VER(i915) < 11)
intel_de_write_dsb(display, dsb, PLANE_NV12_BUF_CFG(pipe, plane_id),
skl_plane_ddb_reg_val(ddb_y));
+
+ if (DISPLAY_VER(display) >= 30)
+ intel_de_write_dsb(display, dsb, PLANE_MIN_BUF_CFG(pipe, plane_id),
+ ptl_plane_min_ddb_reg_val(min_ddb, interim_ddb));
}
static void
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
index ff31a00d511e..65a5482fae60 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
@@ -322,6 +322,7 @@
_PLANE_WM_2_A_0, _PLANE_WM_2_B_0)
#define PLANE_WM_EN REG_BIT(31)
#define PLANE_WM_IGNORE_LINES REG_BIT(30)
+#define PLANE_WM_AUTO_MIN_ALLOC_EN REG_BIT(29)
#define PLANE_WM_LINES_MASK REG_GENMASK(26, 14)
#define PLANE_WM_BLOCKS_MASK REG_GENMASK(11, 0)
@@ -373,12 +374,24 @@
#define PLANE_BUF_CFG(pipe, plane) _MMIO_SKL_PLANE((pipe), (plane), \
_PLANE_BUF_CFG_1_A, _PLANE_BUF_CFG_1_B, \
_PLANE_BUF_CFG_2_A, _PLANE_BUF_CFG_2_B)
+#define _PLANE_MIN_BUF_CFG_1_A 0x70274
+#define _PLANE_MIN_BUF_CFG_2_A 0x70374
+#define _PLANE_MIN_BUF_CFG_1_B 0x71274
+#define _PLANE_MIN_BUF_CFG_2_B 0x71374
+#define PLANE_MIN_BUF_CFG(pipe, plane) _MMIO_SKL_PLANE((pipe), (plane), \
+ _PLANE_MIN_BUF_CFG_1_A, _PLANE_MIN_BUF_CFG_1_B, \
+ _PLANE_MIN_BUF_CFG_2_A, _PLANE_MIN_BUF_CFG_2_B)
+
/* skl+: 10 bits, icl+ 11 bits, adlp+ 12 bits */
#define PLANE_BUF_END_MASK REG_GENMASK(27, 16)
#define PLANE_BUF_END(end) REG_FIELD_PREP(PLANE_BUF_END_MASK, (end))
#define PLANE_BUF_START_MASK REG_GENMASK(11, 0)
#define PLANE_BUF_START(start) REG_FIELD_PREP(PLANE_BUF_START_MASK, (start))
+#define PLANE_AUTO_MIN_DBUF_EN REG_BIT(31)
+#define PLANE_MIN_DDB_BLOCKS_MASK REG_GENMASK(27, 16)
+#define PLANE_INTERIM_DDB_BLOCKS_MASK REG_GENMASK(11, 0)
+
/* tgl+ */
#define _SEL_FETCH_PLANE_CTL_1_A 0x70890
#define _SEL_FETCH_PLANE_CTL_2_A 0x708b0
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
index d961d01343b3..4e6433374e0d 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -797,7 +797,9 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
const enum pipe pipe,
const enum plane_id plane_id,
struct skl_ddb_entry *ddb,
- struct skl_ddb_entry *ddb_y)
+ struct skl_ddb_entry *ddb_y,
+ struct skl_ddb_entry *min_ddb,
+ struct skl_ddb_entry *interim_ddb)
{
u32 val;
@@ -811,6 +813,17 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
val = intel_de_read(display, PLANE_BUF_CFG(pipe, plane_id));
skl_ddb_entry_init_from_hw(ddb, val);
+ if (DISPLAY_VER(display) >= 30) {
+ val = intel_de_read(display, PLANE_MIN_BUF_CFG(pipe, plane_id));
+
+ skl_ddb_entry_init(min_ddb, 0,
+ REG_FIELD_GET(PLANE_MIN_DDB_BLOCKS_MASK,
+ val));
+ skl_ddb_entry_init(interim_ddb, 0,
+ REG_FIELD_GET(PLANE_INTERIM_DDB_BLOCKS_MASK,
+ val));
+ }
+
if (DISPLAY_VER(display) >= 11)
return;
@@ -820,7 +833,9 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
struct skl_ddb_entry *ddb,
- struct skl_ddb_entry *ddb_y)
+ struct skl_ddb_entry *ddb_y,
+ struct skl_ddb_entry *min_ddb,
+ struct skl_ddb_entry *interim_ddb)
{
struct drm_i915_private *i915 = to_i915(crtc->base.dev);
enum intel_display_power_domain power_domain;
@@ -837,7 +852,9 @@ static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
skl_ddb_get_hw_plane_state(&i915->display, pipe,
plane_id,
&ddb[plane_id],
- &ddb_y[plane_id]);
+ &ddb_y[plane_id],
+ &min_ddb[plane_id],
+ &interim_ddb[plane_id]);
intel_display_power_put(i915, power_domain, wakeref);
}
@@ -1374,7 +1391,9 @@ use_minimal_wm0_only(const struct intel_crtc_state *crtc_state,
{
struct intel_display *display = to_intel_display(plane);
+ /* Xe3 (ver >= 30) has auto minimum DDB enabled */
return DISPLAY_VER(display) >= 13 &&
+ DISPLAY_VER(display) < 30 &&
crtc_state->uapi.async_flip &&
plane->async_flip;
}
@@ -1515,6 +1534,7 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
const struct intel_dbuf_state *dbuf_state =
intel_atomic_get_new_dbuf_state(state);
const struct skl_ddb_entry *alloc = &dbuf_state->ddb[crtc->pipe];
+ struct intel_display *display = to_intel_display(state);
int num_active = hweight8(dbuf_state->active_pipes);
struct skl_plane_ddb_iter iter;
enum plane_id plane_id;
@@ -1525,6 +1545,8 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
/* Clear the partitioning for disabled planes. */
memset(crtc_state->wm.skl.plane_ddb, 0, sizeof(crtc_state->wm.skl.plane_ddb));
memset(crtc_state->wm.skl.plane_ddb_y, 0, sizeof(crtc_state->wm.skl.plane_ddb_y));
+ memset(crtc_state->wm.skl.plane_min_ddb, 0, sizeof(crtc_state->wm.skl.plane_min_ddb));
+ memset(crtc_state->wm.skl.plane_interim_ddb, 0, sizeof(crtc_state->wm.skl.plane_interim_ddb));
if (!crtc_state->hw.active)
return 0;
@@ -1597,6 +1619,10 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
&crtc_state->wm.skl.plane_ddb[plane_id];
struct skl_ddb_entry *ddb_y =
&crtc_state->wm.skl.plane_ddb_y[plane_id];
+ struct skl_ddb_entry *min_ddb =
+ &crtc_state->wm.skl.plane_min_ddb[plane_id];
+ struct skl_ddb_entry *interim_ddb =
+ &crtc_state->wm.skl.plane_interim_ddb[plane_id];
const struct skl_plane_wm *wm =
&crtc_state->wm.skl.optimal.planes[plane_id];
@@ -1612,6 +1638,20 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
} else {
skl_allocate_plane_ddb(&iter, ddb, &wm->wm[level],
crtc_state->rel_data_rate[plane_id]);
+
+ /*
+ * xe3: Handle min_ddb and interim_ddb. Unlike the
+ * normal ddb allocation, min_ddb and interim_ddb config
+ * expects only the number of blocks from 0. The buffer
+ * start is found in PLANE_BUF_CFG
+ * Bspec: 72053
+ */
+ if (DISPLAY_VER(display) >= 30) {
+ skl_ddb_entry_init(min_ddb, 0,
+ wm->wm[0].min_ddb_alloc);
+ skl_ddb_entry_init(interim_ddb, 0,
+ wm->sagv.wm0.min_ddb_alloc);
+ }
}
}
drm_WARN_ON(&i915->drm, iter.size != 0 || iter.data_rate != 0);
@@ -1656,6 +1696,8 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
&crtc_state->wm.skl.plane_ddb[plane_id];
const struct skl_ddb_entry *ddb_y =
&crtc_state->wm.skl.plane_ddb_y[plane_id];
+ struct skl_ddb_entry *interim_ddb =
+ &crtc_state->wm.skl.plane_interim_ddb[plane_id];
struct skl_plane_wm *wm =
&crtc_state->wm.skl.optimal.planes[plane_id];
@@ -1669,6 +1711,11 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
}
skl_check_wm_level(&wm->sagv.wm0, ddb);
+ /* update the interim ddb, in case if it is changed */
+ if (DISPLAY_VER(display) >= 30)
+ skl_ddb_entry_init(interim_ddb, 0,
+ wm->sagv.wm0.min_ddb_alloc);
+
skl_check_wm_level(&wm->sagv.trans_wm, ddb);
}
@@ -1747,6 +1794,7 @@ skl_compute_wm_params(const struct intel_crtc_state *crtc_state,
int color_plane, unsigned int pan_x)
{
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+ struct intel_display *display = to_intel_display(crtc_state);
struct drm_i915_private *i915 = to_i915(crtc->base.dev);
u32 interm_pbpl;
@@ -1805,7 +1853,7 @@ skl_compute_wm_params(const struct intel_crtc_state *crtc_state,
wp->y_min_scanlines,
wp->dbuf_block_size);
- if (DISPLAY_VER(i915) >= 30)
+ if (DISPLAY_VER(display) >= 30)
interm_pbpl += (pan_x != 0);
else if (DISPLAY_VER(i915) >= 10)
interm_pbpl++;
@@ -1870,6 +1918,11 @@ static int skl_wm_max_lines(struct drm_i915_private *i915)
return 31;
}
+static bool can_use_min_ddb(struct intel_display *display, int level)
+{
+ return DISPLAY_VER(display) >= 30 && level == 0;
+}
+
static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
struct intel_plane *plane,
int level,
@@ -1879,6 +1932,7 @@ static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
struct skl_wm_level *result /* out */)
{
struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
+ struct intel_display *display = to_intel_display(crtc_state);
uint_fixed_16_16_t method1, method2;
uint_fixed_16_16_t selected_result;
u32 blocks, lines, min_ddb_alloc = 0;
@@ -2002,6 +2056,11 @@ static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
/* Bspec says: value >= plane ddb allocation -> invalid, hence the +1 here */
result->min_ddb_alloc = max(min_ddb_alloc, blocks) + 1;
result->enable = true;
+ /*
+ * For Xe3, when auto min DDB is enabled, it automatically switches to
+ * the wm level where this auto min ddb is enabled
+ */
+ result->auto_min_ddb_allowed = can_use_min_ddb(display, level);
if (DISPLAY_VER(i915) < 12 && i915->display.sagv.block_time_us)
result->can_sagv = latency >= i915->display.sagv.block_time_us;
@@ -2398,6 +2457,10 @@ static bool skl_plane_wm_equals(struct intel_display *display,
*/
if (!skl_wm_level_equals(&wm1->wm[level], &wm2->wm[level]))
return false;
+
+ if (DISPLAY_VER(display) >= 30 &&
+ wm1->wm[level].auto_min_ddb_allowed != wm2->wm[level].auto_min_ddb_allowed)
+ return false;
}
return skl_wm_level_equals(&wm1->trans_wm, &wm2->trans_wm) &&
@@ -2929,6 +2992,8 @@ static void skl_wm_level_from_reg_val(struct intel_display *display,
level->ignore_lines = val & PLANE_WM_IGNORE_LINES;
level->blocks = REG_FIELD_GET(PLANE_WM_BLOCKS_MASK, val);
level->lines = REG_FIELD_GET(PLANE_WM_LINES_MASK, val);
+ level->auto_min_ddb_allowed = DISPLAY_VER(display) >= 30 &&
+ val & PLANE_WM_AUTO_MIN_ALLOC_EN;
}
static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
@@ -3014,12 +3079,17 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
&crtc_state->wm.skl.plane_ddb[plane_id];
struct skl_ddb_entry *ddb_y =
&crtc_state->wm.skl.plane_ddb_y[plane_id];
+ struct skl_ddb_entry *min_ddb =
+ &crtc_state->wm.skl.plane_min_ddb[plane_id];
+ struct skl_ddb_entry *interim_ddb =
+ &crtc_state->wm.skl.plane_interim_ddb[plane_id];
if (!crtc_state->hw.active)
continue;
skl_ddb_get_hw_plane_state(display, crtc->pipe,
- plane_id, ddb, ddb_y);
+ plane_id, ddb, ddb_y,
+ min_ddb, interim_ddb);
skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb);
skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb_y);
@@ -3136,6 +3206,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
struct skl_hw_state {
struct skl_ddb_entry ddb[I915_MAX_PLANES];
struct skl_ddb_entry ddb_y[I915_MAX_PLANES];
+ struct skl_ddb_entry min_ddb[I915_MAX_PLANES];
+ struct skl_ddb_entry interim_ddb[I915_MAX_PLANES];
struct skl_pipe_wm wm;
} *hw;
const struct skl_pipe_wm *sw_wm = &new_crtc_state->wm.skl.optimal;
@@ -3152,7 +3224,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
skl_pipe_wm_get_hw_state(crtc, &hw->wm);
- skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y);
+ skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y, hw->min_ddb,
+ hw->interim_ddb);
hw_enabled_slices = intel_enabled_dbuf_slices_mask(display);
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH 7/8] drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip
2024-11-05 7:15 ` [PATCH 7/8] drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip Vinod Govindapillai
@ 2024-11-06 22:45 ` Ville Syrjälä
2024-11-20 22:26 ` Govindapillai, Vinod
0 siblings, 1 reply; 24+ messages in thread
From: Ville Syrjälä @ 2024-11-06 22:45 UTC (permalink / raw)
To: Vinod Govindapillai
Cc: intel-gfx, intel-xe, jani.nikula, ville.syrjala, jani.saarinen
On Tue, Nov 05, 2024 at 09:15:59AM +0200, Vinod Govindapillai wrote:
> From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>
> Starting from xe3, hw now is capable of switching automatically to min
> ddb allocation(not using any extra blocks) or interim SAGV-adjusted
> allocation in case if async flip is used.
> For that purpose there is now additional register, where correspodent
> values have to be programmed.
>
> Bspec: 69880, 72053
> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
> .../gpu/drm/i915/display/intel_atomic_plane.c | 9 ++
> .../drm/i915/display/intel_display_types.h | 8 ++
> .../drm/i915/display/skl_universal_plane.c | 31 +++++++
> .../i915/display/skl_universal_plane_regs.h | 13 +++
> drivers/gpu/drm/i915/display/skl_watermark.c | 85 +++++++++++++++++--
> 5 files changed, 140 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> index 2c8fae8de4da..7940cb911889 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> @@ -213,6 +213,15 @@ use_min_ddb(const struct intel_crtc_state *crtc_state,
> {
> struct intel_display *display = to_intel_display(plane);
>
> + /*
> + * For xe3 onwards this feature is implemented in
> + * hardware, so no need to force relative data rate to 0,
> + * we will update a specific register with min_ddb without
> + * extra blocks.
> + */
> + if (DISPLAY_VER(display) >= 30)
> + return false;
> +
We should probably move this function back into skl_watermark.c so
that all the logic is in one place. I think we should be able to
achieve that if we wrap the crtc_state->rel_data_rate[]/etc.
accesses with small functions that do the use_min_ddb() check.
> return DISPLAY_VER(display) >= 13 &&
> crtc_state->uapi.async_flip &&
> plane->async_flip;
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index d2b68505f088..c0548db0061c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -770,6 +770,7 @@ struct skl_wm_level {
> bool enable;
> bool ignore_lines;
> bool can_sagv;
> + bool auto_min_ddb_allowed;
The bit appears to be called 'PLANE_WM_AUTO_MIN_ALLOC_EN'.
The two should match. I'd also put it before 'can_sagv'
because that one isn't an actual hardware bit.
> };
>
> struct skl_plane_wm {
> @@ -863,6 +864,13 @@ struct intel_crtc_wm_state {
> struct skl_ddb_entry plane_ddb[I915_MAX_PLANES];
> /* pre-icl: for planar Y */
> struct skl_ddb_entry plane_ddb_y[I915_MAX_PLANES];
> +
> + /*
> + * xe3: Minimum amount of display blocks and minimum
> + * sagv allocation required for async flip
> + */
> + struct skl_ddb_entry plane_min_ddb[I915_MAX_PLANES];
> + struct skl_ddb_entry plane_interim_ddb[I915_MAX_PLANES];
> } skl;
>
> struct {
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> index 038ca2ec5d7a..69d5ca74c594 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> @@ -715,6 +715,26 @@ static u32 skl_plane_ddb_reg_val(const struct skl_ddb_entry *entry)
> PLANE_BUF_START(entry->start);
> }
>
> +static u32 ptl_plane_min_ddb_reg_val(const struct skl_ddb_entry *min_ddb_entry,
> + const struct skl_ddb_entry *interim_ddb_entry)
> +{
> + u32 val = 0;
> +
> + if (min_ddb_entry->end) {
> + val |= PLANE_AUTO_MIN_DBUF_EN;
> + val |= REG_FIELD_PREP(PLANE_MIN_DDB_BLOCKS_MASK,
> + min_ddb_entry->end - min_ddb_entry->start);
> + }
> +
> + if (interim_ddb_entry->end) {
> + val |= PLANE_AUTO_MIN_DBUF_EN;
This bit is now set based on two different conditions. What happens
if those aren't the same?
> + val |= REG_FIELD_PREP(PLANE_INTERIM_DDB_BLOCKS_MASK,
> + interim_ddb_entry->end - interim_ddb_entry->start);
> + }
> +
> + return val;
> +}
> +
> static u32 skl_plane_wm_reg_val(const struct skl_wm_level *level)
> {
> u32 val = 0;
> @@ -723,6 +743,9 @@ static u32 skl_plane_wm_reg_val(const struct skl_wm_level *level)
> val |= PLANE_WM_EN;
> if (level->ignore_lines)
> val |= PLANE_WM_IGNORE_LINES;
> + if (level->auto_min_ddb_allowed)
> + val |= PLANE_WM_AUTO_MIN_ALLOC_EN;
> +
> val |= REG_FIELD_PREP(PLANE_WM_BLOCKS_MASK, level->blocks);
> val |= REG_FIELD_PREP(PLANE_WM_LINES_MASK, level->lines);
>
> @@ -742,6 +765,10 @@ static void skl_write_plane_wm(struct intel_dsb *dsb,
> &crtc_state->wm.skl.plane_ddb[plane_id];
> const struct skl_ddb_entry *ddb_y =
> &crtc_state->wm.skl.plane_ddb_y[plane_id];
> + const struct skl_ddb_entry *min_ddb =
> + &crtc_state->wm.skl.plane_min_ddb[plane_id];
> + const struct skl_ddb_entry *interim_ddb =
> + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> int level;
>
> for (level = 0; level < i915->display.wm.num_levels; level++)
> @@ -766,6 +793,10 @@ static void skl_write_plane_wm(struct intel_dsb *dsb,
> if (DISPLAY_VER(i915) < 11)
> intel_de_write_dsb(display, dsb, PLANE_NV12_BUF_CFG(pipe, plane_id),
> skl_plane_ddb_reg_val(ddb_y));
> +
> + if (DISPLAY_VER(display) >= 30)
> + intel_de_write_dsb(display, dsb, PLANE_MIN_BUF_CFG(pipe, plane_id),
> + ptl_plane_min_ddb_reg_val(min_ddb, interim_ddb));
> }
>
> static void
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> index ff31a00d511e..65a5482fae60 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> @@ -322,6 +322,7 @@
> _PLANE_WM_2_A_0, _PLANE_WM_2_B_0)
> #define PLANE_WM_EN REG_BIT(31)
> #define PLANE_WM_IGNORE_LINES REG_BIT(30)
> +#define PLANE_WM_AUTO_MIN_ALLOC_EN REG_BIT(29)
> #define PLANE_WM_LINES_MASK REG_GENMASK(26, 14)
> #define PLANE_WM_BLOCKS_MASK REG_GENMASK(11, 0)
>
> @@ -373,12 +374,24 @@
> #define PLANE_BUF_CFG(pipe, plane) _MMIO_SKL_PLANE((pipe), (plane), \
> _PLANE_BUF_CFG_1_A, _PLANE_BUF_CFG_1_B, \
> _PLANE_BUF_CFG_2_A, _PLANE_BUF_CFG_2_B)
> +#define _PLANE_MIN_BUF_CFG_1_A 0x70274
> +#define _PLANE_MIN_BUF_CFG_2_A 0x70374
> +#define _PLANE_MIN_BUF_CFG_1_B 0x71274
> +#define _PLANE_MIN_BUF_CFG_2_B 0x71374
> +#define PLANE_MIN_BUF_CFG(pipe, plane) _MMIO_SKL_PLANE((pipe), (plane), \
> + _PLANE_MIN_BUF_CFG_1_A, _PLANE_MIN_BUF_CFG_1_B, \
> + _PLANE_MIN_BUF_CFG_2_A, _PLANE_MIN_BUF_CFG_2_B)
> +
> /* skl+: 10 bits, icl+ 11 bits, adlp+ 12 bits */
> #define PLANE_BUF_END_MASK REG_GENMASK(27, 16)
> #define PLANE_BUF_END(end) REG_FIELD_PREP(PLANE_BUF_END_MASK, (end))
> #define PLANE_BUF_START_MASK REG_GENMASK(11, 0)
> #define PLANE_BUF_START(start) REG_FIELD_PREP(PLANE_BUF_START_MASK, (start))
>
The registers should be defined here.
> +#define PLANE_AUTO_MIN_DBUF_EN REG_BIT(31)
> +#define PLANE_MIN_DDB_BLOCKS_MASK REG_GENMASK(27, 16)
> +#define PLANE_INTERIM_DDB_BLOCKS_MASK REG_GENMASK(11, 0)
And these should be appropriately indented to show that they belong to
said registers.
> +
> /* tgl+ */
> #define _SEL_FETCH_PLANE_CTL_1_A 0x70890
> #define _SEL_FETCH_PLANE_CTL_2_A 0x708b0
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index d961d01343b3..4e6433374e0d 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -797,7 +797,9 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
> const enum pipe pipe,
> const enum plane_id plane_id,
> struct skl_ddb_entry *ddb,
> - struct skl_ddb_entry *ddb_y)
> + struct skl_ddb_entry *ddb_y,
> + struct skl_ddb_entry *min_ddb,
> + struct skl_ddb_entry *interim_ddb)
> {
> u32 val;
>
> @@ -811,6 +813,17 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
> val = intel_de_read(display, PLANE_BUF_CFG(pipe, plane_id));
> skl_ddb_entry_init_from_hw(ddb, val);
>
> + if (DISPLAY_VER(display) >= 30) {
> + val = intel_de_read(display, PLANE_MIN_BUF_CFG(pipe, plane_id));
> +
> + skl_ddb_entry_init(min_ddb, 0,
If we intend to use skl_ddb_entry for this then I think we should
initialize the start correctly as well. The other option is to just
store these as simple sizes like the hardware does. The latter option
might be easier, and would save a bit of memory as well.
> + REG_FIELD_GET(PLANE_MIN_DDB_BLOCKS_MASK,
> + val));
> + skl_ddb_entry_init(interim_ddb, 0,
> + REG_FIELD_GET(PLANE_INTERIM_DDB_BLOCKS_MASK,
> + val));
> + }
> +
> if (DISPLAY_VER(display) >= 11)
> return;
>
> @@ -820,7 +833,9 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
>
> static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
> struct skl_ddb_entry *ddb,
> - struct skl_ddb_entry *ddb_y)
> + struct skl_ddb_entry *ddb_y,
> + struct skl_ddb_entry *min_ddb,
> + struct skl_ddb_entry *interim_ddb)
> {
> struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> enum intel_display_power_domain power_domain;
> @@ -837,7 +852,9 @@ static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
> skl_ddb_get_hw_plane_state(&i915->display, pipe,
> plane_id,
> &ddb[plane_id],
> - &ddb_y[plane_id]);
> + &ddb_y[plane_id],
> + &min_ddb[plane_id],
> + &interim_ddb[plane_id]);
>
> intel_display_power_put(i915, power_domain, wakeref);
> }
> @@ -1374,7 +1391,9 @@ use_minimal_wm0_only(const struct intel_crtc_state *crtc_state,
> {
> struct intel_display *display = to_intel_display(plane);
>
> + /* Xe3 (ver >= 30) has auto minimum DDB enabled */
> return DISPLAY_VER(display) >= 13 &&
> + DISPLAY_VER(display) < 30 &&
Why is this written in a different style as compared to use_min_ddb()?
> crtc_state->uapi.async_flip &&
> plane->async_flip;
> }
> @@ -1515,6 +1534,7 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> const struct intel_dbuf_state *dbuf_state =
> intel_atomic_get_new_dbuf_state(state);
> const struct skl_ddb_entry *alloc = &dbuf_state->ddb[crtc->pipe];
> + struct intel_display *display = to_intel_display(state);
> int num_active = hweight8(dbuf_state->active_pipes);
> struct skl_plane_ddb_iter iter;
> enum plane_id plane_id;
> @@ -1525,6 +1545,8 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> /* Clear the partitioning for disabled planes. */
> memset(crtc_state->wm.skl.plane_ddb, 0, sizeof(crtc_state->wm.skl.plane_ddb));
> memset(crtc_state->wm.skl.plane_ddb_y, 0, sizeof(crtc_state->wm.skl.plane_ddb_y));
> + memset(crtc_state->wm.skl.plane_min_ddb, 0, sizeof(crtc_state->wm.skl.plane_min_ddb));
> + memset(crtc_state->wm.skl.plane_interim_ddb, 0, sizeof(crtc_state->wm.skl.plane_interim_ddb));
>
> if (!crtc_state->hw.active)
> return 0;
> @@ -1597,6 +1619,10 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> &crtc_state->wm.skl.plane_ddb[plane_id];
> struct skl_ddb_entry *ddb_y =
> &crtc_state->wm.skl.plane_ddb_y[plane_id];
> + struct skl_ddb_entry *min_ddb =
> + &crtc_state->wm.skl.plane_min_ddb[plane_id];
> + struct skl_ddb_entry *interim_ddb =
> + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> const struct skl_plane_wm *wm =
> &crtc_state->wm.skl.optimal.planes[plane_id];
>
> @@ -1612,6 +1638,20 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> } else {
> skl_allocate_plane_ddb(&iter, ddb, &wm->wm[level],
> crtc_state->rel_data_rate[plane_id]);
> +
> + /*
> + * xe3: Handle min_ddb and interim_ddb. Unlike the
> + * normal ddb allocation, min_ddb and interim_ddb config
> + * expects only the number of blocks from 0. The buffer
> + * start is found in PLANE_BUF_CFG
> + * Bspec: 72053
> + */
Trying to explain away the mess with the bogus ddb start in
a comment isn't a good idea.
> + if (DISPLAY_VER(display) >= 30) {
This can easily go one indentation level up.
> + skl_ddb_entry_init(min_ddb, 0,
> + wm->wm[0].min_ddb_alloc);
> + skl_ddb_entry_init(interim_ddb, 0,
> + wm->sagv.wm0.min_ddb_alloc);
> + }
> }
> }
> drm_WARN_ON(&i915->drm, iter.size != 0 || iter.data_rate != 0);
> @@ -1656,6 +1696,8 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> &crtc_state->wm.skl.plane_ddb[plane_id];
> const struct skl_ddb_entry *ddb_y =
> &crtc_state->wm.skl.plane_ddb_y[plane_id];
> + struct skl_ddb_entry *interim_ddb =
> + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> struct skl_plane_wm *wm =
> &crtc_state->wm.skl.optimal.planes[plane_id];
>
> @@ -1669,6 +1711,11 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> }
>
> skl_check_wm_level(&wm->sagv.wm0, ddb);
> + /* update the interim ddb, in case if it is changed */
> + if (DISPLAY_VER(display) >= 30)
> + skl_ddb_entry_init(interim_ddb, 0,
> + wm->sagv.wm0.min_ddb_alloc);
Hmm. I think we should either handle everything to do with
this stuff in the loop here, or in the earlier place.
Defintiely not both.
> +
> skl_check_wm_level(&wm->sagv.trans_wm, ddb);
> }
>
> @@ -1747,6 +1794,7 @@ skl_compute_wm_params(const struct intel_crtc_state *crtc_state,
> int color_plane, unsigned int pan_x)
> {
> struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> + struct intel_display *display = to_intel_display(crtc_state);
> struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> u32 interm_pbpl;
>
> @@ -1805,7 +1853,7 @@ skl_compute_wm_params(const struct intel_crtc_state *crtc_state,
> wp->y_min_scanlines,
> wp->dbuf_block_size);
>
> - if (DISPLAY_VER(i915) >= 30)
> + if (DISPLAY_VER(display) >= 30)
> interm_pbpl += (pan_x != 0);
> else if (DISPLAY_VER(i915) >= 10)
> interm_pbpl++;
> @@ -1870,6 +1918,11 @@ static int skl_wm_max_lines(struct drm_i915_private *i915)
> return 31;
> }
>
> +static bool can_use_min_ddb(struct intel_display *display, int level)
> +{
> + return DISPLAY_VER(display) >= 30 && level == 0;
> +}
> +
> static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
> struct intel_plane *plane,
> int level,
> @@ -1879,6 +1932,7 @@ static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
> struct skl_wm_level *result /* out */)
> {
> struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> + struct intel_display *display = to_intel_display(crtc_state);
> uint_fixed_16_16_t method1, method2;
> uint_fixed_16_16_t selected_result;
> u32 blocks, lines, min_ddb_alloc = 0;
> @@ -2002,6 +2056,11 @@ static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
> /* Bspec says: value >= plane ddb allocation -> invalid, hence the +1 here */
> result->min_ddb_alloc = max(min_ddb_alloc, blocks) + 1;
> result->enable = true;
> + /*
> + * For Xe3, when auto min DDB is enabled, it automatically switches to
> + * the wm level where this auto min ddb is enabled
> + */
> + result->auto_min_ddb_allowed = can_use_min_ddb(display, level);
The name of the function doesn't match the bit so this is quite
confusing, which is probably the reason for the attempt at explaining
things with a comment.
If you catch yourself adding a comment it's probably a good idea
to re-evaluate the actual code instead.
>
> if (DISPLAY_VER(i915) < 12 && i915->display.sagv.block_time_us)
> result->can_sagv = latency >= i915->display.sagv.block_time_us;
> @@ -2398,6 +2457,10 @@ static bool skl_plane_wm_equals(struct intel_display *display,
> */
> if (!skl_wm_level_equals(&wm1->wm[level], &wm2->wm[level]))
> return false;
> +
> + if (DISPLAY_VER(display) >= 30 &&
> + wm1->wm[level].auto_min_ddb_allowed != wm2->wm[level].auto_min_ddb_allowed)
This looks like it belongs in skl_wm_level_equals(), and shouldn't
need any platform checks.
> + return false;
> }
>
> return skl_wm_level_equals(&wm1->trans_wm, &wm2->trans_wm) &&
> @@ -2929,6 +2992,8 @@ static void skl_wm_level_from_reg_val(struct intel_display *display,
> level->ignore_lines = val & PLANE_WM_IGNORE_LINES;
> level->blocks = REG_FIELD_GET(PLANE_WM_BLOCKS_MASK, val);
> level->lines = REG_FIELD_GET(PLANE_WM_LINES_MASK, val);
> + level->auto_min_ddb_allowed = DISPLAY_VER(display) >= 30 &&
> + val & PLANE_WM_AUTO_MIN_ALLOC_EN;
> }
>
> static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
> @@ -3014,12 +3079,17 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
> &crtc_state->wm.skl.plane_ddb[plane_id];
> struct skl_ddb_entry *ddb_y =
> &crtc_state->wm.skl.plane_ddb_y[plane_id];
> + struct skl_ddb_entry *min_ddb =
> + &crtc_state->wm.skl.plane_min_ddb[plane_id];
> + struct skl_ddb_entry *interim_ddb =
> + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
>
> if (!crtc_state->hw.active)
> continue;
>
> skl_ddb_get_hw_plane_state(display, crtc->pipe,
> - plane_id, ddb, ddb_y);
> + plane_id, ddb, ddb_y,
> + min_ddb, interim_ddb);
>
> skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb);
> skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb_y);
> @@ -3136,6 +3206,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
> struct skl_hw_state {
> struct skl_ddb_entry ddb[I915_MAX_PLANES];
> struct skl_ddb_entry ddb_y[I915_MAX_PLANES];
> + struct skl_ddb_entry min_ddb[I915_MAX_PLANES];
> + struct skl_ddb_entry interim_ddb[I915_MAX_PLANES];
> struct skl_pipe_wm wm;
> } *hw;
> const struct skl_pipe_wm *sw_wm = &new_crtc_state->wm.skl.optimal;
> @@ -3152,7 +3224,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
>
> skl_pipe_wm_get_hw_state(crtc, &hw->wm);
>
> - skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y);
> + skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y, hw->min_ddb,
> + hw->interim_ddb);
>
> hw_enabled_slices = intel_enabled_dbuf_slices_mask(display);
>
> --
> 2.34.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH 7/8] drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip
2024-11-06 22:45 ` Ville Syrjälä
@ 2024-11-20 22:26 ` Govindapillai, Vinod
0 siblings, 0 replies; 24+ messages in thread
From: Govindapillai, Vinod @ 2024-11-20 22:26 UTC (permalink / raw)
To: ville.syrjala@linux.intel.com
Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Nikula, Jani,
intel-gfx@lists.freedesktop.org, Syrjala, Ville
Hi Ville,
Thanks for the review and gone through your comments and I had updated most of them..
Bust some clarifications from two of you comments.. could you please have a look?
On Thu, 2024-11-07 at 00:45 +0200, Ville Syrjälä wrote:
> On Tue, Nov 05, 2024 at 09:15:59AM +0200, Vinod Govindapillai wrote:
> > From: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> >
> > Starting from xe3, hw now is capable of switching automatically to min
> > ddb allocation(not using any extra blocks) or interim SAGV-adjusted
> > allocation in case if async flip is used.
> > For that purpose there is now additional register, where correspodent
> > values have to be programmed.
> >
> > Bspec: 69880, 72053
> > Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> > ---
> > .../gpu/drm/i915/display/intel_atomic_plane.c | 9 ++
> > .../drm/i915/display/intel_display_types.h | 8 ++
> > .../drm/i915/display/skl_universal_plane.c | 31 +++++++
> > .../i915/display/skl_universal_plane_regs.h | 13 +++
> > drivers/gpu/drm/i915/display/skl_watermark.c | 85 +++++++++++++++++--
> > 5 files changed, 140 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > index 2c8fae8de4da..7940cb911889 100644
> > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > @@ -213,6 +213,15 @@ use_min_ddb(const struct intel_crtc_state *crtc_state,
> > {
> > struct intel_display *display = to_intel_display(plane);
> >
> > + /*
> > + * For xe3 onwards this feature is implemented in
> > + * hardware, so no need to force relative data rate to 0,
> > + * we will update a specific register with min_ddb without
> > + * extra blocks.
> > + */
> > + if (DISPLAY_VER(display) >= 30)
> > + return false;
> > +
>
> We should probably move this function back into skl_watermark.c so
> that all the logic is in one place. I think we should be able to
> achieve that if we wrap the crtc_state->rel_data_rate[]/etc.
> accesses with small functions that do the use_min_ddb() check.
Ack
>
> > return DISPLAY_VER(display) >= 13 &&
> > crtc_state->uapi.async_flip &&
> > plane->async_flip;
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> > b/drivers/gpu/drm/i915/display/intel_display_types.h
> > index d2b68505f088..c0548db0061c 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> > @@ -770,6 +770,7 @@ struct skl_wm_level {
> > bool enable;
> > bool ignore_lines;
> > bool can_sagv;
> > + bool auto_min_ddb_allowed;
>
> The bit appears to be called 'PLANE_WM_AUTO_MIN_ALLOC_EN'.
> The two should match. I'd also put it before 'can_sagv'
> because that one isn't an actual hardware bit.
Ack
>
> > };
> >
> > struct skl_plane_wm {
> > @@ -863,6 +864,13 @@ struct intel_crtc_wm_state {
> > struct skl_ddb_entry plane_ddb[I915_MAX_PLANES];
> > /* pre-icl: for planar Y */
> > struct skl_ddb_entry plane_ddb_y[I915_MAX_PLANES];
> > +
> > + /*
> > + * xe3: Minimum amount of display blocks and minimum
> > + * sagv allocation required for async flip
> > + */
> > + struct skl_ddb_entry plane_min_ddb[I915_MAX_PLANES];
> > + struct skl_ddb_entry plane_interim_ddb[I915_MAX_PLANES];
> > } skl;
> >
> > struct {
> > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > index 038ca2ec5d7a..69d5ca74c594 100644
> > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > @@ -715,6 +715,26 @@ static u32 skl_plane_ddb_reg_val(const struct skl_ddb_entry *entry)
> > PLANE_BUF_START(entry->start);
> > }
> >
> > +static u32 ptl_plane_min_ddb_reg_val(const struct skl_ddb_entry *min_ddb_entry,
> > + const struct skl_ddb_entry *interim_ddb_entry)
> > +{
> > + u32 val = 0;
> > +
> > + if (min_ddb_entry->end) {
> > + val |= PLANE_AUTO_MIN_DBUF_EN;
> > + val |= REG_FIELD_PREP(PLANE_MIN_DDB_BLOCKS_MASK,
> > + min_ddb_entry->end - min_ddb_entry->start);
> > + }
> > +
> > + if (interim_ddb_entry->end) {
> > + val |= PLANE_AUTO_MIN_DBUF_EN;
>
> This bit is now set based on two different conditions. What happens
> if those aren't the same?
updated this as if (val) { val |= PLANE_AUTO_MIN_DBUF_EN; }
I guess, min_ddb must be there all the time. So do you think, we can only check min_ddb here to
decide auto min dbuf enable?
>
> > + val |= REG_FIELD_PREP(PLANE_INTERIM_DDB_BLOCKS_MASK,
> > + interim_ddb_entry->end - interim_ddb_entry->start);
> > + }
> > +
> > + return val;
> > +}
> > +
> > static u32 skl_plane_wm_reg_val(const struct skl_wm_level *level)
> > {
> > u32 val = 0;
> > @@ -723,6 +743,9 @@ static u32 skl_plane_wm_reg_val(const struct skl_wm_level *level)
> > val |= PLANE_WM_EN;
> > if (level->ignore_lines)
> > val |= PLANE_WM_IGNORE_LINES;
> > + if (level->auto_min_ddb_allowed)
> > + val |= PLANE_WM_AUTO_MIN_ALLOC_EN;
> > +
> > val |= REG_FIELD_PREP(PLANE_WM_BLOCKS_MASK, level->blocks);
> > val |= REG_FIELD_PREP(PLANE_WM_LINES_MASK, level->lines);
> >
> > @@ -742,6 +765,10 @@ static void skl_write_plane_wm(struct intel_dsb *dsb,
> > &crtc_state->wm.skl.plane_ddb[plane_id];
> > const struct skl_ddb_entry *ddb_y =
> > &crtc_state->wm.skl.plane_ddb_y[plane_id];
> > + const struct skl_ddb_entry *min_ddb =
> > + &crtc_state->wm.skl.plane_min_ddb[plane_id];
> > + const struct skl_ddb_entry *interim_ddb =
> > + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> > int level;
> >
> > for (level = 0; level < i915->display.wm.num_levels; level++)
> > @@ -766,6 +793,10 @@ static void skl_write_plane_wm(struct intel_dsb *dsb,
> > if (DISPLAY_VER(i915) < 11)
> > intel_de_write_dsb(display, dsb, PLANE_NV12_BUF_CFG(pipe, plane_id),
> > skl_plane_ddb_reg_val(ddb_y));
> > +
> > + if (DISPLAY_VER(display) >= 30)
> > + intel_de_write_dsb(display, dsb, PLANE_MIN_BUF_CFG(pipe, plane_id),
> > + ptl_plane_min_ddb_reg_val(min_ddb, interim_ddb));
> > }
> >
> > static void
> > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > index ff31a00d511e..65a5482fae60 100644
> > --- a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > @@ -322,6 +322,7 @@
> > _PLANE_WM_2_A_0, _PLANE_WM_2_B_0)
> > #define PLANE_WM_EN REG_BIT(31)
> > #define PLANE_WM_IGNORE_LINES REG_BIT(30)
> > +#define PLANE_WM_AUTO_MIN_ALLOC_EN REG_BIT(29)
> > #define PLANE_WM_LINES_MASK REG_GENMASK(26, 14)
> > #define PLANE_WM_BLOCKS_MASK REG_GENMASK(11, 0)
> >
> > @@ -373,12 +374,24 @@
> > #define PLANE_BUF_CFG(pipe, plane) _MMIO_SKL_PLANE((pipe), (plane), \
> > _PLANE_BUF_CFG_1_A, _PLANE_BUF_CFG_1_B,
> > \
> > _PLANE_BUF_CFG_2_A, _PLANE_BUF_CFG_2_B)
> > +#define _PLANE_MIN_BUF_CFG_1_A 0x70274
> > +#define _PLANE_MIN_BUF_CFG_2_A 0x70374
> > +#define _PLANE_MIN_BUF_CFG_1_B 0x71274
> > +#define _PLANE_MIN_BUF_CFG_2_B 0x71374
> > +#define PLANE_MIN_BUF_CFG(pipe, plane) _MMIO_SKL_PLANE((pipe), (plane), \
> > + _PLANE_MIN_BUF_CFG_1_A,
> > _PLANE_MIN_BUF_CFG_1_B, \
> > + _PLANE_MIN_BUF_CFG_2_A,
> > _PLANE_MIN_BUF_CFG_2_B)
> > +
> > /* skl+: 10 bits, icl+ 11 bits, adlp+ 12 bits */
> > #define PLANE_BUF_END_MASK REG_GENMASK(27, 16)
> > #define PLANE_BUF_END(end) REG_FIELD_PREP(PLANE_BUF_END_MASK, (end))
> > #define PLANE_BUF_START_MASK REG_GENMASK(11, 0)
> > #define PLANE_BUF_START(start) REG_FIELD_PREP(PLANE_BUF_START_MASK, (start))
> >
>
> The registers should be defined here.
>
> > +#define PLANE_AUTO_MIN_DBUF_EN REG_BIT(31)
> > +#define PLANE_MIN_DDB_BLOCKS_MASK REG_GENMASK(27, 16)
> > +#define PLANE_INTERIM_DDB_BLOCKS_MASK REG_GENMASK(11, 0)
>
> And these should be appropriately indented to show that they belong to
> said registers.
Ack
>
> > +
> > /* tgl+ */
> > #define _SEL_FETCH_PLANE_CTL_1_A 0x70890
> > #define _SEL_FETCH_PLANE_CTL_2_A 0x708b0
> > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c
> > b/drivers/gpu/drm/i915/display/skl_watermark.c
> > index d961d01343b3..4e6433374e0d 100644
> > --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> > +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> > @@ -797,7 +797,9 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
> > const enum pipe pipe,
> > const enum plane_id plane_id,
> > struct skl_ddb_entry *ddb,
> > - struct skl_ddb_entry *ddb_y)
> > + struct skl_ddb_entry *ddb_y,
> > + struct skl_ddb_entry *min_ddb,
> > + struct skl_ddb_entry *interim_ddb)
> > {
> > u32 val;
> >
> > @@ -811,6 +813,17 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
> > val = intel_de_read(display, PLANE_BUF_CFG(pipe, plane_id));
> > skl_ddb_entry_init_from_hw(ddb, val);
> >
> > + if (DISPLAY_VER(display) >= 30) {
> > + val = intel_de_read(display, PLANE_MIN_BUF_CFG(pipe, plane_id));
> > +
> > + skl_ddb_entry_init(min_ddb, 0,
>
> If we intend to use skl_ddb_entry for this then I think we should
> initialize the start correctly as well. The other option is to just
> store these as simple sizes like the hardware does. The latter option
> might be easier, and would save a bit of memory as well.
Okay. Update the declaration to plane u16 types.
>
> > + REG_FIELD_GET(PLANE_MIN_DDB_BLOCKS_MASK,
> > + val));
> > + skl_ddb_entry_init(interim_ddb, 0,
> > + REG_FIELD_GET(PLANE_INTERIM_DDB_BLOCKS_MASK,
> > + val));
> > + }
> > +
> > if (DISPLAY_VER(display) >= 11)
> > return;
> >
> > @@ -820,7 +833,9 @@ skl_ddb_get_hw_plane_state(struct intel_display *display,
> >
> > static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
> > struct skl_ddb_entry *ddb,
> > - struct skl_ddb_entry *ddb_y)
> > + struct skl_ddb_entry *ddb_y,
> > + struct skl_ddb_entry *min_ddb,
> > + struct skl_ddb_entry *interim_ddb)
> > {
> > struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> > enum intel_display_power_domain power_domain;
> > @@ -837,7 +852,9 @@ static void skl_pipe_ddb_get_hw_state(struct intel_crtc *crtc,
> > skl_ddb_get_hw_plane_state(&i915->display, pipe,
> > plane_id,
> > &ddb[plane_id],
> > - &ddb_y[plane_id]);
> > + &ddb_y[plane_id],
> > + &min_ddb[plane_id],
> > + &interim_ddb[plane_id]);
> >
> > intel_display_power_put(i915, power_domain, wakeref);
> > }
> > @@ -1374,7 +1391,9 @@ use_minimal_wm0_only(const struct intel_crtc_state *crtc_state,
> > {
> > struct intel_display *display = to_intel_display(plane);
> >
> > + /* Xe3 (ver >= 30) has auto minimum DDB enabled */
> > return DISPLAY_VER(display) >= 13 &&
> > + DISPLAY_VER(display) < 30 &&
>
> Why is this written in a different style as compared to use_min_ddb()?
Got rid of use_min_ddb() as part of modifyin the relative data rate as you suggested. And use this
use_minimal_wm0_only() to decide the relative data rate can be 0
>
> > crtc_state->uapi.async_flip &&
> > plane->async_flip;
> > }
> > @@ -1515,6 +1534,7 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> > const struct intel_dbuf_state *dbuf_state =
> > intel_atomic_get_new_dbuf_state(state);
> > const struct skl_ddb_entry *alloc = &dbuf_state->ddb[crtc->pipe];
> > + struct intel_display *display = to_intel_display(state);
> > int num_active = hweight8(dbuf_state->active_pipes);
> > struct skl_plane_ddb_iter iter;
> > enum plane_id plane_id;
> > @@ -1525,6 +1545,8 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> > /* Clear the partitioning for disabled planes. */
> > memset(crtc_state->wm.skl.plane_ddb, 0, sizeof(crtc_state->wm.skl.plane_ddb));
> > memset(crtc_state->wm.skl.plane_ddb_y, 0, sizeof(crtc_state->wm.skl.plane_ddb_y));
> > + memset(crtc_state->wm.skl.plane_min_ddb, 0, sizeof(crtc_state->wm.skl.plane_min_ddb));
> > + memset(crtc_state->wm.skl.plane_interim_ddb, 0, sizeof(crtc_state-
> > >wm.skl.plane_interim_ddb));
> >
> > if (!crtc_state->hw.active)
> > return 0;
> > @@ -1597,6 +1619,10 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> > &crtc_state->wm.skl.plane_ddb[plane_id];
> > struct skl_ddb_entry *ddb_y =
> > &crtc_state->wm.skl.plane_ddb_y[plane_id];
> > + struct skl_ddb_entry *min_ddb =
> > + &crtc_state->wm.skl.plane_min_ddb[plane_id];
> > + struct skl_ddb_entry *interim_ddb =
> > + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> > const struct skl_plane_wm *wm =
> > &crtc_state->wm.skl.optimal.planes[plane_id];
> >
> > @@ -1612,6 +1638,20 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> > } else {
> > skl_allocate_plane_ddb(&iter, ddb, &wm->wm[level],
> > crtc_state->rel_data_rate[plane_id]);
> > +
> > + /*
> > + * xe3: Handle min_ddb and interim_ddb. Unlike the
> > + * normal ddb allocation, min_ddb and interim_ddb config
> > + * expects only the number of blocks from 0. The buffer
> > + * start is found in PLANE_BUF_CFG
> > + * Bspec: 72053
> > + */
>
> Trying to explain away the mess with the bogus ddb start in
> a comment isn't a good idea.
>
> > + if (DISPLAY_VER(display) >= 30) {
>
> This can easily go one indentation level up.
Done
>
> > + skl_ddb_entry_init(min_ddb, 0,
> > + wm->wm[0].min_ddb_alloc);
> > + skl_ddb_entry_init(interim_ddb, 0,
> > + wm->sagv.wm0.min_ddb_alloc);
> > + }
> > }
> > }
> > drm_WARN_ON(&i915->drm, iter.size != 0 || iter.data_rate != 0);
> > @@ -1656,6 +1696,8 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> > &crtc_state->wm.skl.plane_ddb[plane_id];
> > const struct skl_ddb_entry *ddb_y =
> > &crtc_state->wm.skl.plane_ddb_y[plane_id];
> > + struct skl_ddb_entry *interim_ddb =
> > + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> > struct skl_plane_wm *wm =
> > &crtc_state->wm.skl.optimal.planes[plane_id];
> >
> > @@ -1669,6 +1711,11 @@ skl_crtc_allocate_plane_ddb(struct intel_atomic_state *state,
> > }
> >
> > skl_check_wm_level(&wm->sagv.wm0, ddb);
> > + /* update the interim ddb, in case if it is changed */
> > + if (DISPLAY_VER(display) >= 30)
> > + skl_ddb_entry_init(interim_ddb, 0,
> > + wm->sagv.wm0.min_ddb_alloc);
>
> Hmm. I think we should either handle everything to do with
> this stuff in the loop here, or in the earlier place.
> Defintiely not both.
Not sure if I understood your point here. In the earlier loop we updated both min and interim ddb
after the highest level can be enabled. And then if we dont have enough ddb allocation this loop get
rid of sagv minmum ddb block. So we are just updating the interim_ddb block to the updated sagv
blocks. So I guess both these are required.
>
> > +
> > skl_check_wm_level(&wm->sagv.trans_wm, ddb);
> > }
> >
> > @@ -1747,6 +1794,7 @@ skl_compute_wm_params(const struct intel_crtc_state *crtc_state,
> > int color_plane, unsigned int pan_x)
> > {
> > struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> > + struct intel_display *display = to_intel_display(crtc_state);
> > struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> > u32 interm_pbpl;
> >
> > @@ -1805,7 +1853,7 @@ skl_compute_wm_params(const struct intel_crtc_state *crtc_state,
> > wp->y_min_scanlines,
> > wp->dbuf_block_size);
> >
> > - if (DISPLAY_VER(i915) >= 30)
> > + if (DISPLAY_VER(display) >= 30)
> > interm_pbpl += (pan_x != 0);
> > else if (DISPLAY_VER(i915) >= 10)
> > interm_pbpl++;
> > @@ -1870,6 +1918,11 @@ static int skl_wm_max_lines(struct drm_i915_private *i915)
> > return 31;
> > }
> >
> > +static bool can_use_min_ddb(struct intel_display *display, int level)
> > +{
> > + return DISPLAY_VER(display) >= 30 && level == 0;
> > +}
> > +
> > static void skl_compute_plane_wm(const struct intel_crtc_state *crtc_state,
> > struct intel_plane *plane,
> > int level,
> > @@ -1879,6 +1932,7 @@ static void skl_compute_plane_wm(const struct intel_crtc_state
> > *crtc_state,
> > struct skl_wm_level *result /* out */)
> > {
> > struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> > + struct intel_display *display = to_intel_display(crtc_state);
> > uint_fixed_16_16_t method1, method2;
> > uint_fixed_16_16_t selected_result;
> > u32 blocks, lines, min_ddb_alloc = 0;
> > @@ -2002,6 +2056,11 @@ static void skl_compute_plane_wm(const struct intel_crtc_state
> > *crtc_state,
> > /* Bspec says: value >= plane ddb allocation -> invalid, hence the +1 here */
> > result->min_ddb_alloc = max(min_ddb_alloc, blocks) + 1;
> > result->enable = true;
> > + /*
> > + * For Xe3, when auto min DDB is enabled, it automatically switches to
> > + * the wm level where this auto min ddb is enabled
> > + */
> > + result->auto_min_ddb_allowed = can_use_min_ddb(display, level);
>
> The name of the function doesn't match the bit so this is quite
> confusing, which is probably the reason for the attempt at explaining
> things with a comment.
>
> If you catch yourself adding a comment it's probably a good idea
> to re-evaluate the actual code instead.
>
> >
> > if (DISPLAY_VER(i915) < 12 && i915->display.sagv.block_time_us)
> > result->can_sagv = latency >= i915->display.sagv.block_time_us;
> > @@ -2398,6 +2457,10 @@ static bool skl_plane_wm_equals(struct intel_display *display,
> > */
> > if (!skl_wm_level_equals(&wm1->wm[level], &wm2->wm[level]))
> > return false;
> > +
> > + if (DISPLAY_VER(display) >= 30 &&
> > + wm1->wm[level].auto_min_ddb_allowed != wm2->wm[level].auto_min_ddb_allowed)
>
> This looks like it belongs in skl_wm_level_equals(), and shouldn't
> need any platform checks.
Ack
BR
Vinod
>
> > + return false;
> > }
> >
> > return skl_wm_level_equals(&wm1->trans_wm, &wm2->trans_wm) &&
> > @@ -2929,6 +2992,8 @@ static void skl_wm_level_from_reg_val(struct intel_display *display,
> > level->ignore_lines = val & PLANE_WM_IGNORE_LINES;
> > level->blocks = REG_FIELD_GET(PLANE_WM_BLOCKS_MASK, val);
> > level->lines = REG_FIELD_GET(PLANE_WM_LINES_MASK, val);
> > + level->auto_min_ddb_allowed = DISPLAY_VER(display) >= 30 &&
> > + val & PLANE_WM_AUTO_MIN_ALLOC_EN;
> > }
> >
> > static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
> > @@ -3014,12 +3079,17 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
> > &crtc_state->wm.skl.plane_ddb[plane_id];
> > struct skl_ddb_entry *ddb_y =
> > &crtc_state->wm.skl.plane_ddb_y[plane_id];
> > + struct skl_ddb_entry *min_ddb =
> > + &crtc_state->wm.skl.plane_min_ddb[plane_id];
> > + struct skl_ddb_entry *interim_ddb =
> > + &crtc_state->wm.skl.plane_interim_ddb[plane_id];
> >
> > if (!crtc_state->hw.active)
> > continue;
> >
> > skl_ddb_get_hw_plane_state(display, crtc->pipe,
> > - plane_id, ddb, ddb_y);
> > + plane_id, ddb, ddb_y,
> > + min_ddb, interim_ddb);
> >
> > skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb);
> > skl_ddb_entry_union(&dbuf_state->ddb[pipe], ddb_y);
> > @@ -3136,6 +3206,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
> > struct skl_hw_state {
> > struct skl_ddb_entry ddb[I915_MAX_PLANES];
> > struct skl_ddb_entry ddb_y[I915_MAX_PLANES];
> > + struct skl_ddb_entry min_ddb[I915_MAX_PLANES];
> > + struct skl_ddb_entry interim_ddb[I915_MAX_PLANES];
> > struct skl_pipe_wm wm;
> > } *hw;
> > const struct skl_pipe_wm *sw_wm = &new_crtc_state->wm.skl.optimal;
> > @@ -3152,7 +3224,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
> >
> > skl_pipe_wm_get_hw_state(crtc, &hw->wm);
> >
> > - skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y);
> > + skl_pipe_ddb_get_hw_state(crtc, hw->ddb, hw->ddb_y, hw->min_ddb,
> > + hw->interim_ddb);
> >
> > hw_enabled_slices = intel_enabled_dbuf_slices_mask(display);
> >
> > --
> > 2.34.1
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 8/8] drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (6 preceding siblings ...)
2024-11-05 7:15 ` [PATCH 7/8] drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip Vinod Govindapillai
@ 2024-11-05 7:16 ` Vinod Govindapillai
2024-11-06 22:46 ` Ville Syrjälä
2024-11-05 8:17 ` ✗ Fi.CI.CHECKPATCH: warning for use hw support for min/interim ddb allocation for async flip Patchwork
` (2 subsequent siblings)
10 siblings, 1 reply; 24+ messages in thread
From: Vinod Govindapillai @ 2024-11-05 7:16 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: vinod.govindapillai, jani.nikula, ville.syrjala, jani.saarinen
From xe3 onwards, there is a provision to define and
use min ddb and interim ddb allocations for async flip
use case. Add the dbuf allocation status as part of
i915_ddb_info as well to show if min or interim ddb
is being used.
Bspec: 72053
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
.../drm/i915/display/intel_display_debugfs.c | 23 ++++++++++++++++---
.../i915/display/skl_universal_plane_regs.h | 1 +
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
index 11aff485d8fa..bce4a1ab05c0 100644
--- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
+++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
@@ -39,6 +39,7 @@
#include "intel_pps.h"
#include "intel_psr.h"
#include "intel_psr_regs.h"
+#include "skl_universal_plane_regs.h"
#include "intel_vdsc.h"
#include "intel_wm.h"
@@ -688,9 +689,24 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
return 0;
}
+static u32 dbuf_alloc_status(struct intel_display *display,
+ enum pipe pipe, enum plane_id plane_id)
+{
+ u32 val = 0;
+
+ if (DISPLAY_VER(display) >= 30) {
+ u32 reg = intel_de_read(display,
+ PLANE_MIN_BUF_CFG(pipe, plane_id));
+ val = REG_FIELD_GET(PLANE_DBUF_ALLOC_STATUS_MASK, reg);
+ }
+
+ return val;
+}
+
static int i915_ddb_info(struct seq_file *m, void *unused)
{
struct drm_i915_private *dev_priv = node_to_i915(m->private);
+ struct intel_display *display = &dev_priv->display;
struct skl_ddb_entry *entry;
struct intel_crtc *crtc;
@@ -699,7 +715,7 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
drm_modeset_lock_all(&dev_priv->drm);
- seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
+ seq_printf(m, "%-15s%8s%8s%8s%16s\n", "", "Start", "End", "Size", "Alloc Status");
for_each_intel_crtc(&dev_priv->drm, crtc) {
struct intel_crtc_state *crtc_state =
@@ -711,9 +727,10 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
for_each_plane_id_on_crtc(crtc, plane_id) {
entry = &crtc_state->wm.skl.plane_ddb[plane_id];
- seq_printf(m, " Plane%-8d%8u%8u%8u\n", plane_id + 1,
+ seq_printf(m, " Plane%-8d%8u%8u%8u%8u\n", plane_id + 1,
entry->start, entry->end,
- skl_ddb_entry_size(entry));
+ skl_ddb_entry_size(entry),
+ dbuf_alloc_status(display, pipe, plane_id));
}
entry = &crtc_state->wm.skl.plane_ddb[PLANE_CURSOR];
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
index 65a5482fae60..53550356430d 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
@@ -390,6 +390,7 @@
#define PLANE_AUTO_MIN_DBUF_EN REG_BIT(31)
#define PLANE_MIN_DDB_BLOCKS_MASK REG_GENMASK(27, 16)
+#define PLANE_DBUF_ALLOC_STATUS_MASK REG_GENMASK(15, 14)
#define PLANE_INTERIM_DDB_BLOCKS_MASK REG_GENMASK(11, 0)
/* tgl+ */
--
2.34.1
^ permalink raw reply related [flat|nested] 24+ messages in thread* Re: [PATCH 8/8] drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info
2024-11-05 7:16 ` [PATCH 8/8] drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info Vinod Govindapillai
@ 2024-11-06 22:46 ` Ville Syrjälä
2024-11-20 22:30 ` Govindapillai, Vinod
0 siblings, 1 reply; 24+ messages in thread
From: Ville Syrjälä @ 2024-11-06 22:46 UTC (permalink / raw)
To: Vinod Govindapillai
Cc: intel-gfx, intel-xe, jani.nikula, ville.syrjala, jani.saarinen
On Tue, Nov 05, 2024 at 09:16:00AM +0200, Vinod Govindapillai wrote:
> >From xe3 onwards, there is a provision to define and
> use min ddb and interim ddb allocations for async flip
> use case. Add the dbuf allocation status as part of
> i915_ddb_info as well to show if min or interim ddb
> is being used.
>
> Bspec: 72053
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> ---
> .../drm/i915/display/intel_display_debugfs.c | 23 ++++++++++++++++---
> .../i915/display/skl_universal_plane_regs.h | 1 +
> 2 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index 11aff485d8fa..bce4a1ab05c0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -39,6 +39,7 @@
> #include "intel_pps.h"
> #include "intel_psr.h"
> #include "intel_psr_regs.h"
> +#include "skl_universal_plane_regs.h"
> #include "intel_vdsc.h"
> #include "intel_wm.h"
>
> @@ -688,9 +689,24 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
> return 0;
> }
>
> +static u32 dbuf_alloc_status(struct intel_display *display,
> + enum pipe pipe, enum plane_id plane_id)
> +{
> + u32 val = 0;
> +
> + if (DISPLAY_VER(display) >= 30) {
> + u32 reg = intel_de_read(display,
> + PLANE_MIN_BUF_CFG(pipe, plane_id));
> + val = REG_FIELD_GET(PLANE_DBUF_ALLOC_STATUS_MASK, reg);
> + }
> +
> + return val;
> +}
> +
> static int i915_ddb_info(struct seq_file *m, void *unused)
> {
> struct drm_i915_private *dev_priv = node_to_i915(m->private);
> + struct intel_display *display = &dev_priv->display;
> struct skl_ddb_entry *entry;
> struct intel_crtc *crtc;
>
> @@ -699,7 +715,7 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
>
> drm_modeset_lock_all(&dev_priv->drm);
>
> - seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
> + seq_printf(m, "%-15s%8s%8s%8s%16s\n", "", "Start", "End", "Size", "Alloc Status");
This guy is meant ot just print the software state. The hardware might
not even be awake here. So this doesn't belong here. It would be better
to add it to the intel_watermark tool instead.
>
> for_each_intel_crtc(&dev_priv->drm, crtc) {
> struct intel_crtc_state *crtc_state =
> @@ -711,9 +727,10 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
>
> for_each_plane_id_on_crtc(crtc, plane_id) {
> entry = &crtc_state->wm.skl.plane_ddb[plane_id];
> - seq_printf(m, " Plane%-8d%8u%8u%8u\n", plane_id + 1,
> + seq_printf(m, " Plane%-8d%8u%8u%8u%8u\n", plane_id + 1,
> entry->start, entry->end,
> - skl_ddb_entry_size(entry));
> + skl_ddb_entry_size(entry),
> + dbuf_alloc_status(display, pipe, plane_id));
> }
>
> entry = &crtc_state->wm.skl.plane_ddb[PLANE_CURSOR];
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> index 65a5482fae60..53550356430d 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> @@ -390,6 +390,7 @@
>
> #define PLANE_AUTO_MIN_DBUF_EN REG_BIT(31)
> #define PLANE_MIN_DDB_BLOCKS_MASK REG_GENMASK(27, 16)
> +#define PLANE_DBUF_ALLOC_STATUS_MASK REG_GENMASK(15, 14)
Do these bits actually mean something?
> #define PLANE_INTERIM_DDB_BLOCKS_MASK REG_GENMASK(11, 0)
>
> /* tgl+ */
> --
> 2.34.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 24+ messages in thread* Re: [PATCH 8/8] drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info
2024-11-06 22:46 ` Ville Syrjälä
@ 2024-11-20 22:30 ` Govindapillai, Vinod
0 siblings, 0 replies; 24+ messages in thread
From: Govindapillai, Vinod @ 2024-11-20 22:30 UTC (permalink / raw)
To: ville.syrjala@linux.intel.com
Cc: intel-xe@lists.freedesktop.org, Saarinen, Jani, Nikula, Jani,
intel-gfx@lists.freedesktop.org, Syrjala, Ville
On Thu, 2024-11-07 at 00:46 +0200, Ville Syrjälä wrote:
> On Tue, Nov 05, 2024 at 09:16:00AM +0200, Vinod Govindapillai wrote:
> > > From xe3 onwards, there is a provision to define and
> > use min ddb and interim ddb allocations for async flip
> > use case. Add the dbuf allocation status as part of
> > i915_ddb_info as well to show if min or interim ddb
> > is being used.
> >
> > Bspec: 72053
> > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> > ---
> > .../drm/i915/display/intel_display_debugfs.c | 23 ++++++++++++++++---
> > .../i915/display/skl_universal_plane_regs.h | 1 +
> > 2 files changed, 21 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> > b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> > index 11aff485d8fa..bce4a1ab05c0 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> > @@ -39,6 +39,7 @@
> > #include "intel_pps.h"
> > #include "intel_psr.h"
> > #include "intel_psr_regs.h"
> > +#include "skl_universal_plane_regs.h"
> > #include "intel_vdsc.h"
> > #include "intel_wm.h"
> >
> > @@ -688,9 +689,24 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
> > return 0;
> > }
> >
> > +static u32 dbuf_alloc_status(struct intel_display *display,
> > + enum pipe pipe, enum plane_id plane_id)
> > +{
> > + u32 val = 0;
> > +
> > + if (DISPLAY_VER(display) >= 30) {
> > + u32 reg = intel_de_read(display,
> > + PLANE_MIN_BUF_CFG(pipe, plane_id));
> > + val = REG_FIELD_GET(PLANE_DBUF_ALLOC_STATUS_MASK, reg);
> > + }
> > +
> > + return val;
> > +}
> > +
> > static int i915_ddb_info(struct seq_file *m, void *unused)
> > {
> > struct drm_i915_private *dev_priv = node_to_i915(m->private);
> > + struct intel_display *display = &dev_priv->display;
> > struct skl_ddb_entry *entry;
> > struct intel_crtc *crtc;
> >
> > @@ -699,7 +715,7 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
> >
> > drm_modeset_lock_all(&dev_priv->drm);
> >
> > - seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
> > + seq_printf(m, "%-15s%8s%8s%8s%16s\n", "", "Start", "End", "Size", "Alloc Status");
>
> This guy is meant ot just print the software state. The hardware might
> not even be awake here. So this doesn't belong here. It would be better
> to add it to the intel_watermark tool instead.
Okay. I was using this to verify this feature. With async flip IGT test cases, I can check this
ddb_info in a loop to see if this dbuf allocation status is being changed.
So could there be any use if this be part of a new debugfs entry?
>
> >
> > for_each_intel_crtc(&dev_priv->drm, crtc) {
> > struct intel_crtc_state *crtc_state =
> > @@ -711,9 +727,10 @@ static int i915_ddb_info(struct seq_file *m, void *unused)
> >
> > for_each_plane_id_on_crtc(crtc, plane_id) {
> > entry = &crtc_state->wm.skl.plane_ddb[plane_id];
> > - seq_printf(m, " Plane%-8d%8u%8u%8u\n", plane_id + 1,
> > + seq_printf(m, " Plane%-8d%8u%8u%8u%8u\n", plane_id + 1,
> > entry->start, entry->end,
> > - skl_ddb_entry_size(entry));
> > + skl_ddb_entry_size(entry),
> > + dbuf_alloc_status(display, pipe, plane_id));
> > }
> >
> > entry = &crtc_state->wm.skl.plane_ddb[PLANE_CURSOR];
> > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > index 65a5482fae60..53550356430d 100644
> > --- a/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane_regs.h
> > @@ -390,6 +390,7 @@
> >
> > #define PLANE_AUTO_MIN_DBUF_EN REG_BIT(31)
> > #define PLANE_MIN_DDB_BLOCKS_MASK REG_GENMASK(27, 16)
> > +#define PLANE_DBUF_ALLOC_STATUS_MASK REG_GENMASK(15, 14)
>
> Do these bits actually mean something?
This gives the dbuf allocation status. Whenever HW uses the min_ddb configuration this bit is
updated and I had verified this.
BR
Vinod
>
> > #define PLANE_INTERIM_DDB_BLOCKS_MASK REG_GENMASK(11, 0)
> >
> > /* tgl+ */
> > --
> > 2.34.1
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for use hw support for min/interim ddb allocation for async flip
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (7 preceding siblings ...)
2024-11-05 7:16 ` [PATCH 8/8] drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info Vinod Govindapillai
@ 2024-11-05 8:17 ` Patchwork
2024-11-05 8:17 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-11-05 9:11 ` ✗ Fi.CI.BAT: failure " Patchwork
10 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2024-11-05 8:17 UTC (permalink / raw)
To: Vinod Govindapillai; +Cc: intel-gfx
== Series Details ==
Series: use hw support for min/interim ddb allocation for async flip
URL : https://patchwork.freedesktop.org/series/140926/
State : warning
== Summary ==
Error: dim checkpatch failed
acb3e49da85c drm/i915/display: update intel_enabled_dbuf_slices_mask to use intel_display
b84a5d898f42 drm/i9i5/display: use intel_display in intel_de_read calls of skl_watermark.c
2934034c4582 drm/i915/display: update use_minimal_wm0_only to use intel_display
3122450e2068 drm/i915/display: update use_min_ddb to use intel_display
2360df5e99fa drm/i915/display: update skl_plane_wm_equals to use intel_display
ce94cb899eb4 drm/i915/display: update to plane_wm register access function
09dc311e04dd drm/i915/xe3: Use hw support for min/interim ddb allocations for async flip
-:147: WARNING:LONG_LINE: line length of 105 exceeds 100 columns
#147: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:382:
+ _PLANE_MIN_BUF_CFG_1_A, _PLANE_MIN_BUF_CFG_1_B, \
-:148: WARNING:LONG_LINE: line length of 103 exceeds 100 columns
#148: FILE: drivers/gpu/drm/i915/display/skl_universal_plane_regs.h:383:
+ _PLANE_MIN_BUF_CFG_2_A, _PLANE_MIN_BUF_CFG_2_B)
-:241: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#241: FILE: drivers/gpu/drm/i915/display/skl_watermark.c:1549:
+ memset(crtc_state->wm.skl.plane_interim_ddb, 0, sizeof(crtc_state->wm.skl.plane_interim_ddb));
total: 0 errors, 3 warnings, 0 checks, 338 lines checked
4a7a49977f30 drm/i915/debugfs: add dbuf alloc status as part of i915_ddb_info
^ permalink raw reply [flat|nested] 24+ messages in thread* ✗ Fi.CI.SPARSE: warning for use hw support for min/interim ddb allocation for async flip
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (8 preceding siblings ...)
2024-11-05 8:17 ` ✗ Fi.CI.CHECKPATCH: warning for use hw support for min/interim ddb allocation for async flip Patchwork
@ 2024-11-05 8:17 ` Patchwork
2024-11-05 9:11 ` ✗ Fi.CI.BAT: failure " Patchwork
10 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2024-11-05 8:17 UTC (permalink / raw)
To: Vinod Govindapillai; +Cc: intel-gfx
== Series Details ==
Series: use hw support for min/interim ddb allocation for async flip
URL : https://patchwork.freedesktop.org/series/140926/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9:
^ permalink raw reply [flat|nested] 24+ messages in thread* ✗ Fi.CI.BAT: failure for use hw support for min/interim ddb allocation for async flip
2024-11-05 7:15 [PATCH 0/8] use hw support for min/interim ddb allocation for async flip Vinod Govindapillai
` (9 preceding siblings ...)
2024-11-05 8:17 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-11-05 9:11 ` Patchwork
10 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2024-11-05 9:11 UTC (permalink / raw)
To: Govindapillai, Vinod; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 10499 bytes --]
== Series Details ==
Series: use hw support for min/interim ddb allocation for async flip
URL : https://patchwork.freedesktop.org/series/140926/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_15631 -> Patchwork_140926v1
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_140926v1 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_140926v1, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/index.html
Participating hosts (44 -> 44)
------------------------------
Additional (1): bat-arls-1
Missing (1): fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_140926v1:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live@active:
- bat-jsl-3: [PASS][1] -> [DMESG-FAIL][2] +1 other test dmesg-fail
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15631/bat-jsl-3/igt@i915_selftest@live@active.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-jsl-3/igt@i915_selftest@live@active.html
Known issues
------------
Here are the changes found in Patchwork_140926v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@debugfs_test@basic-hwmon:
- bat-arls-1: NOTRUN -> [SKIP][3] ([i915#9318])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@debugfs_test@basic-hwmon.html
* igt@gem_lmem_swapping@basic:
- bat-arls-1: NOTRUN -> [SKIP][4] ([i915#10213] / [i915#11671]) +3 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@gem_lmem_swapping@basic.html
* igt@gem_mmap@basic:
- bat-arls-1: NOTRUN -> [SKIP][5] ([i915#11343] / [i915#4083])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@gem_mmap@basic.html
* igt@gem_render_tiled_blits@basic:
- bat-arls-1: NOTRUN -> [SKIP][6] ([i915#10197] / [i915#10211] / [i915#4079])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@gem_render_tiled_blits@basic.html
* igt@gem_tiled_blits@basic:
- bat-arls-1: NOTRUN -> [SKIP][7] ([i915#12637] / [i915#4077]) +2 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@gem_tiled_blits@basic.html
* igt@gem_tiled_pread_basic:
- bat-arls-1: NOTRUN -> [SKIP][8] ([i915#10206] / [i915#4079])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@gem_tiled_pread_basic.html
* igt@i915_pm_rps@basic-api:
- bat-arls-1: NOTRUN -> [SKIP][9] ([i915#10209] / [i915#11681])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@i915_pm_rps@basic-api.html
* igt@i915_selftest@live:
- bat-mtlp-8: [PASS][10] -> [ABORT][11] ([i915#12061] / [i915#12133])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15631/bat-mtlp-8/igt@i915_selftest@live.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-mtlp-8/igt@i915_selftest@live.html
- bat-arlh-3: [PASS][12] -> [ABORT][13] ([i915#12133])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15631/bat-arlh-3/igt@i915_selftest@live.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arlh-3/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-3: [PASS][14] -> [ABORT][15] ([i915#12061])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15631/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arlh-3/igt@i915_selftest@live@workarounds.html
- bat-mtlp-8: [PASS][16] -> [ABORT][17] ([i915#12061])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15631/bat-mtlp-8/igt@i915_selftest@live@workarounds.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-mtlp-8/igt@i915_selftest@live@workarounds.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- bat-arls-1: NOTRUN -> [SKIP][18] ([i915#10200] / [i915#12203])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_addfb_basic@basic-y-tiled-legacy:
- bat-arls-1: NOTRUN -> [SKIP][19] ([i915#10200]) +8 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_addfb_basic@basic-y-tiled-legacy.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- bat-arls-1: NOTRUN -> [SKIP][20] ([i915#10202]) +1 other test skip
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_dsc@dsc-basic:
- bat-arls-1: NOTRUN -> [SKIP][21] ([i915#9886])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_dsc@dsc-basic.html
* igt@kms_force_connector_basic@force-load-detect:
- bat-arls-1: NOTRUN -> [SKIP][22] ([i915#10207])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_pm_backlight@basic-brightness:
- bat-arls-1: NOTRUN -> [SKIP][23] ([i915#9812])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_psr@psr-primary-mmap-gtt:
- bat-arls-1: NOTRUN -> [SKIP][24] ([i915#9732]) +3 other tests skip
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_psr@psr-primary-mmap-gtt.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-arls-1: NOTRUN -> [SKIP][25] ([i915#10208] / [i915#8809])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@kms_setmode@basic-clone-single-crtc.html
* igt@prime_vgem@basic-fence-read:
- bat-arls-1: NOTRUN -> [SKIP][26] ([i915#10212] / [i915#3708])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@prime_vgem@basic-fence-read.html
* igt@prime_vgem@basic-gtt:
- bat-arls-1: NOTRUN -> [SKIP][27] ([i915#12637] / [i915#3708] / [i915#4077]) +1 other test skip
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@prime_vgem@basic-gtt.html
* igt@prime_vgem@basic-read:
- bat-arls-1: NOTRUN -> [SKIP][28] ([i915#10214] / [i915#3708])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@prime_vgem@basic-read.html
* igt@prime_vgem@basic-write:
- bat-arls-1: NOTRUN -> [SKIP][29] ([i915#10216] / [i915#3708])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-arls-1/igt@prime_vgem@basic-write.html
#### Possible fixes ####
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
- bat-dg2-11: [SKIP][30] ([i915#9197]) -> [PASS][31] +3 other tests pass
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15631/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
[i915#10197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10197
[i915#10200]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10200
[i915#10202]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10202
[i915#10206]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10206
[i915#10207]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10207
[i915#10208]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10208
[i915#10209]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10209
[i915#10211]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10211
[i915#10212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10212
[i915#10213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10213
[i915#10214]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10214
[i915#10216]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10216
[i915#11343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11343
[i915#11671]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11671
[i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12133]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12133
[i915#12203]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12203
[i915#12637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12637
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
[i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
[i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
[i915#9197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9197
[i915#9318]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9318
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
[i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
[i915#9886]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9886
Build changes
-------------
* Linux: CI_DRM_15631 -> Patchwork_140926v1
CI-20190529: 20190529
CI_DRM_15631: 2af747587f44530eae7e5c7cee1f24c34613d61b @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8097: 2e7c8e4b88a50e33e10d6c13286818aa833bef9b @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_140926v1: 2af747587f44530eae7e5c7cee1f24c34613d61b @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140926v1/index.html
[-- Attachment #2: Type: text/html, Size: 12395 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread