On Thu, 08 Dec 2016, Ville Syrjälä <ville.syrj...@linux.intel.com> wrote:
> On Thu, Dec 08, 2016 at 04:58:21PM +0100, Daniel Vetter wrote:
>> On Thu, Dec 08, 2016 at 11:11:50AM +0200, Jani Nikula wrote:
>> > On Thu, 08 Dec 2016, Jani Nikula <jani.nik...@intel.com> wrote:
>> > > On Thu, 08 Dec 2016, Jani Nikula <jani.nik...@intel.com> wrote:
>> > >> This lets us use IS_MOBILE() for distinguishing the desktop and mobile
>> > >> parts instead of duplicating PCI IDs in Pineview specific checks.
>> > >
>> > > This probably needs more thorough review of the !IS_MOBILE() paths in
>> > > parts not touched by this patch.
>> > 
>> > And Daniel says,
>> > 
>> >  11:06          danvet   j4ni, pnv is_mobile, even for the desktop version
>> >  11:06          danvet   iirc
>> >  11:07          danvet   because is_mobile has nothing to do with whether 
>> > the 
>> >                          chip is for laptops or not
>> > 
>> > so better just forget about these two patches I guess.
>> 
>> Yeah, IS_MOBILE is seriously confusing in our code. On gen2/3 it was
>> essentially matching HAS_LVDS (but we never made that one),
>
> We do use it in quite a few places to differentiate between the mobile
> and desktop variants of the chipset. There are some weird differences
> between the two branches of the family, eg. some MCHBAR registers live
> at different offsets, and swizzling stuff is different IIRC.
>
>> later on the
>> splits started to happened on different axis (atom vs big core and stuff
>> like that), but somehow IS_MOBILE stuck around to this day and is
>> sometimes abused to restrict w/a to specific chips. If someone wants to
>> clean this up:
>> 
>> - Remove IS_MOBILE on gen5+, use specific platforms/pci ids where we need
>>   it.
>
> IIRC I did look into that once, and the only place where it was
> used for ilk-ivb was eDP setup, as in "do we have port A or not?".
> For hsw+ we don't use it at all, and IIRC don't even set it.

There's IS_IRONLAKE_M() which looks at the PCI ID, but essentially it's
IS_IRONLAKE && IS_MOBILE.

I really dislike direct PCI ID checks in the IS_* macros, because they
duplicate PCI IDs from i915_pciids.h, which typically already has the
IDs grouped at the granularity we'd like (mobile vs. not in this
case). I wish we could do all the IS_*_{ULX,ULT,GT?} using the PCI ID
macros from one source.

BR,
Jani.


>
>> - Rename IS_MOBILE to HAS_LVDS on gen2/3/4 (not entirely sure about gen4,
>>   would need to double-check that it makes sense).
>
> 830 doesn't have the LVDS port, so would need a bit of special care. And
> like I said. there are actual differences well outside the LVDS vs. not
> thing.
>
> If we can solve the ilk-ivb port A case, then I think we can kill
> .is_mobile. For the older platforms we have separate IS_FOO and IS_FOO_M
> type of things so those can be used instead. But for ilk-ivb we don't
> have those, I think. Or maybe we do, not sure.
>
>> - Nuke is_mobile from the chip info, it's only misleading people. Mobile
>>   is the future everywhere anyway ;-)
>> 
>> Cheers, Daniel
>> 
>> > 
>> > 
>> > BR,
>> > Jani.
>> > 
>> > 
>> > >
>> > > For example this one in i915_gem_detect_bit_6_swizzle() which was pretty
>> > > weird already before the Pineview device info patches:
>> > >
>> > >  } else if (IS_MOBILE(dev_priv) ||
>> > >             (IS_GEN3(dev_priv) &&
>> > >              !IS_G33(dev_priv) && !IS_PINEVIEW(dev_priv))) {
>> > >
>> > > BR,
>> > > Jani.
>> > >
>> > >
>> > >>
>> > >> Cc: Ville Syrjälä <ville.syrj...@linux.intel.com>
>> > >> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
>> > >> ---
>> > >>  arch/x86/kernel/early-quirks.c  |  3 ++-
>> > >>  drivers/gpu/drm/i915/i915_drv.h |  2 --
>> > >>  drivers/gpu/drm/i915/i915_pci.c | 12 ++++++++++--
>> > >>  drivers/gpu/drm/i915/intel_pm.c |  4 ++--
>> > >>  include/drm/i915_pciids.h       |  6 ++++--
>> > >>  5 files changed, 18 insertions(+), 9 deletions(-)
>> > >>
>> > >> diff --git a/arch/x86/kernel/early-quirks.c 
>> > >> b/arch/x86/kernel/early-quirks.c
>> > >> index 6a08e25a48d8..34af418d88cc 100644
>> > >> --- a/arch/x86/kernel/early-quirks.c
>> > >> +++ b/arch/x86/kernel/early-quirks.c
>> > >> @@ -508,7 +508,8 @@ static const struct pci_device_id intel_early_ids[] 
>> > >> __initconst = {
>> > >>         INTEL_I945G_IDS(&gen3_early_ops),
>> > >>         INTEL_I945GM_IDS(&gen3_early_ops),
>> > >>         INTEL_VLV_IDS(&gen6_early_ops),
>> > >> -       INTEL_PINEVIEW_IDS(&gen3_early_ops),
>> > >> +       INTEL_PINEVIEW_D_IDS(&gen3_early_ops),
>> > >> +       INTEL_PINEVIEW_M_IDS(&gen3_early_ops),
>> > >>         INTEL_I965G_IDS(&gen3_early_ops),
>> > >>         INTEL_G33_IDS(&gen3_early_ops),
>> > >>         INTEL_I965GM_IDS(&gen3_early_ops),
>> > >> diff --git a/drivers/gpu/drm/i915/i915_drv.h 
>> > >> b/drivers/gpu/drm/i915/i915_drv.h
>> > >> index 1480e733312a..ee1726b28b82 100644
>> > >> --- a/drivers/gpu/drm/i915/i915_drv.h
>> > >> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> > >> @@ -2616,8 +2616,6 @@ intel_info(const struct drm_i915_private 
>> > >> *dev_priv)
>> > >>  #define IS_G45(dev_priv)       ((dev_priv)->info.platform == INTEL_G45)
>> > >>  #define IS_GM45(dev_priv)      ((dev_priv)->info.platform == 
>> > >> INTEL_GM45)
>> > >>  #define IS_G4X(dev_priv)       (IS_G45(dev_priv) || IS_GM45(dev_priv))
>> > >> -#define IS_PINEVIEW_G(dev_priv)        (INTEL_DEVID(dev_priv) == 
>> > >> 0xa001)
>> > >> -#define IS_PINEVIEW_M(dev_priv)        (INTEL_DEVID(dev_priv) == 
>> > >> 0xa011)
>> > >>  #define IS_PINEVIEW(dev_priv)  ((dev_priv)->info.platform == 
>> > >> INTEL_PINEVIEW)
>> > >>  #define IS_G33(dev_priv)       ((dev_priv)->info.platform == INTEL_G33)
>> > >>  #define IS_IRONLAKE_M(dev_priv)        (INTEL_DEVID(dev_priv) == 
>> > >> 0x0046)
>> > >> diff --git a/drivers/gpu/drm/i915/i915_pci.c 
>> > >> b/drivers/gpu/drm/i915/i915_pci.c
>> > >> index 93f50ef2a309..451113f79499 100644
>> > >> --- a/drivers/gpu/drm/i915/i915_pci.c
>> > >> +++ b/drivers/gpu/drm/i915/i915_pci.c
>> > >> @@ -139,7 +139,14 @@ static const struct intel_device_info 
>> > >> intel_g33_info = {
>> > >>         .has_overlay = 1,
>> > >>  };
>> > >>  
>> > >> -static const struct intel_device_info intel_pineview_info = {
>> > >> +static const struct intel_device_info intel_pineview_d_info = {
>> > >> +       GEN3_FEATURES,
>> > >> +       .platform = INTEL_PINEVIEW,
>> > >> +       .has_hotplug = 1,
>> > >> +       .has_overlay = 1,
>> > >> +};
>> > >> +
>> > >> +static const struct intel_device_info intel_pineview_m_info = {
>> > >>         GEN3_FEATURES,
>> > >>         .platform = INTEL_PINEVIEW, .is_mobile = 1,
>> > >>         .has_hotplug = 1,
>> > >> @@ -444,7 +451,8 @@ static const struct pci_device_id pciidlist[] = {
>> > >>         INTEL_I965GM_IDS(&intel_i965gm_info),
>> > >>         INTEL_GM45_IDS(&intel_gm45_info),
>> > >>         INTEL_G45_IDS(&intel_g45_info),
>> > >> -       INTEL_PINEVIEW_IDS(&intel_pineview_info),
>> > >> +       INTEL_PINEVIEW_D_IDS(&intel_pineview_d_info),
>> > >> +       INTEL_PINEVIEW_M_IDS(&intel_pineview_m_info),
>> > >>         INTEL_IRONLAKE_D_IDS(&intel_ironlake_d_info),
>> > >>         INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),
>> > >>         INTEL_SNB_D_IDS(&intel_sandybridge_d_info),
>> > >> diff --git a/drivers/gpu/drm/i915/intel_pm.c 
>> > >> b/drivers/gpu/drm/i915/intel_pm.c
>> > >> index 9171431558a3..afe07947e51c 100644
>> > >> --- a/drivers/gpu/drm/i915/intel_pm.c
>> > >> +++ b/drivers/gpu/drm/i915/intel_pm.c
>> > >> @@ -659,7 +659,7 @@ static void pineview_update_wm(struct intel_crtc 
>> > >> *unused_crtc)
>> > >>         u32 reg;
>> > >>         unsigned long wm;
>> > >>  
>> > >> -       latency = intel_get_cxsr_latency(IS_PINEVIEW_G(dev_priv),
>> > >> +       latency = intel_get_cxsr_latency(!IS_MOBILE(dev_priv),
>> > >>                                          dev_priv->is_ddr3,
>> > >>                                          dev_priv->fsb_freq,
>> > >>                                          dev_priv->mem_freq);
>> > >> @@ -7730,7 +7730,7 @@ void intel_init_pm(struct drm_i915_private 
>> > >> *dev_priv)
>> > >>                 vlv_setup_wm_latency(dev_priv);
>> > >>                 dev_priv->display.update_wm = vlv_update_wm;
>> > >>         } else if (IS_PINEVIEW(dev_priv)) {
>> > >> -               if (!intel_get_cxsr_latency(IS_PINEVIEW_G(dev_priv),
>> > >> +               if (!intel_get_cxsr_latency(!IS_MOBILE(dev_priv),
>> > >>                                             dev_priv->is_ddr3,
>> > >>                                             dev_priv->fsb_freq,
>> > >>                                             dev_priv->mem_freq)) {
>> > >> diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
>> > >> index 540be9ff0346..9c226eb1788f 100644
>> > >> --- a/include/drm/i915_pciids.h
>> > >> +++ b/include/drm/i915_pciids.h
>> > >> @@ -100,8 +100,10 @@
>> > >>         INTEL_VGA_DEVICE(0x2e42, info), /* B43_G */ \
>> > >>         INTEL_VGA_DEVICE(0x2e92, info)  /* B43_G.1 */
>> > >>  
>> > >> -#define INTEL_PINEVIEW_IDS(info)                       \
>> > >> -       INTEL_VGA_DEVICE(0xa001, info),                 \
>> > >> +#define INTEL_PINEVIEW_D_IDS(info) \
>> > >> +       INTEL_VGA_DEVICE(0xa001, info)
>> > >> +
>> > >> +#define INTEL_PINEVIEW_M_IDS(info) \
>> > >>         INTEL_VGA_DEVICE(0xa011, info)
>> > >>  
>> > >>  #define INTEL_IRONLAKE_D_IDS(info) \
>> > 
>> > -- 
>> > Jani Nikula, Intel Open Source Technology Center
>> 
>> -- 
>> Daniel Vetter
>> Software Engineer, Intel Corporation
>> http://blog.ffwll.ch

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to