]> git.itanic.dy.fi Git - linux-stable/commitdiff
Merge tag 'platform-drivers-x86-v6.7-6' into pdx86/for-next
authorHans de Goede <hdegoede@redhat.com>
Tue, 2 Jan 2024 12:13:01 +0000 (13:13 +0100)
committerHans de Goede <hdegoede@redhat.com>
Tue, 2 Jan 2024 12:13:01 +0000 (13:13 +0100)
Merge the 'platform-drivers-x86-v6.7-6' fixes into pdx86/for-next
so that the "Intel PMC GBE LTR regression" fixes can also be
applied to the new Arrow Lake and Lunar Lake platform support
code in pdx86/for-next .

1  2 
drivers/platform/x86/intel/pmc/adl.c
drivers/platform/x86/intel/pmc/cnp.c
drivers/platform/x86/intel/pmc/core.c
drivers/platform/x86/intel/pmc/core.h
drivers/platform/x86/intel/pmc/mtl.c
drivers/platform/x86/intel/pmc/tgl.c
drivers/platform/x86/intel_ips.c

index 882f2d5d8937d0d6f774f4cff2879f695212006d,606f7678bcb0a1c747bb933103ebf4ac031bc9e7..e7878558fd9090140e6de7c6ce192e8419eb5306
@@@ -321,13 -322,5 +324,7 @@@ int adl_core_init(struct pmc_dev *pmcde
        if (ret)
                return ret;
  
-       /* Due to a hardware limitation, the GBE LTR blocks PC10
-        * when a cable is attached. Tell the PMC to ignore it.
-        */
-       dev_dbg(&pmcdev->pdev->dev, "ignoring GBE LTR\n");
-       pmc_core_send_ltr_ignore(pmcdev, 3);
 +      pmc_core_get_low_power_modes(pmcdev);
 +
        return 0;
  }
index 59298f184d0e22fbbc9444109d004cad3d0946ce,98b36651201a06c34abb83854cb67475d47faf9e..dd72974bf71e2abe248a1f1b671a45756ad61288
@@@ -214,13 -234,5 +234,7 @@@ int cnp_core_init(struct pmc_dev *pmcde
        if (ret)
                return ret;
  
-       /* Due to a hardware limitation, the GBE LTR blocks PC10
-        * when a cable is attached. Tell the PMC to ignore it.
-        */
-       dev_dbg(&pmcdev->pdev->dev, "ignoring GBE LTR\n");
-       pmc_core_send_ltr_ignore(pmcdev, 3);
 +      pmc_core_get_low_power_modes(pmcdev);
 +
        return 0;
  }
Simple merge
index 2891d8d04fad1a07310ee08ab3af7c6fc27be83b,b66dacbfb94bf7198b2265f3e8ed44bd48b7bee8..e2826e1ef90f03c52efa2415c8aad5ae668f0cf7
@@@ -511,61 -486,9 +513,61 @@@ extern const struct pmc_bit_map mtl_ioe
  extern const struct pmc_bit_map mtl_ioem_vnn_req_status_1_map[];
  extern const struct pmc_bit_map *mtl_ioem_lpm_maps[];
  extern const struct pmc_reg_map mtl_ioem_reg_map;
 +extern const struct pmc_reg_map lnl_socm_reg_map;
 +
 +/* LNL */
 +extern const struct pmc_bit_map lnl_ltr_show_map[];
 +extern const struct pmc_bit_map lnl_clocksource_status_map[];
 +extern const struct pmc_bit_map lnl_power_gating_status_0_map[];
 +extern const struct pmc_bit_map lnl_power_gating_status_1_map[];
 +extern const struct pmc_bit_map lnl_power_gating_status_2_map[];
 +extern const struct pmc_bit_map lnl_d3_status_0_map[];
 +extern const struct pmc_bit_map lnl_d3_status_1_map[];
 +extern const struct pmc_bit_map lnl_d3_status_2_map[];
 +extern const struct pmc_bit_map lnl_d3_status_3_map[];
 +extern const struct pmc_bit_map lnl_vnn_req_status_0_map[];
 +extern const struct pmc_bit_map lnl_vnn_req_status_1_map[];
 +extern const struct pmc_bit_map lnl_vnn_req_status_2_map[];
 +extern const struct pmc_bit_map lnl_vnn_req_status_3_map[];
 +extern const struct pmc_bit_map lnl_vnn_misc_status_map[];
 +extern const struct pmc_bit_map *lnl_lpm_maps[];
 +extern const struct pmc_bit_map lnl_pfear_map[];
 +extern const struct pmc_bit_map *ext_lnl_pfear_map[];
 +
 +/* ARL */
 +extern const struct pmc_bit_map arl_socs_ltr_show_map[];
 +extern const struct pmc_bit_map arl_socs_clocksource_status_map[];
 +extern const struct pmc_bit_map arl_socs_power_gating_status_0_map[];
 +extern const struct pmc_bit_map arl_socs_power_gating_status_1_map[];
 +extern const struct pmc_bit_map arl_socs_power_gating_status_2_map[];
 +extern const struct pmc_bit_map arl_socs_d3_status_2_map[];
 +extern const struct pmc_bit_map arl_socs_d3_status_3_map[];
 +extern const struct pmc_bit_map arl_socs_vnn_req_status_3_map[];
 +extern const struct pmc_bit_map *arl_socs_lpm_maps[];
 +extern const struct pmc_bit_map arl_socs_pfear_map[];
 +extern const struct pmc_bit_map *ext_arl_socs_pfear_map[];
 +extern const struct pmc_reg_map arl_socs_reg_map;
 +extern const struct pmc_bit_map arl_pchs_ltr_show_map[];
 +extern const struct pmc_bit_map arl_pchs_clocksource_status_map[];
 +extern const struct pmc_bit_map arl_pchs_power_gating_status_0_map[];
 +extern const struct pmc_bit_map arl_pchs_power_gating_status_1_map[];
 +extern const struct pmc_bit_map arl_pchs_power_gating_status_2_map[];
 +extern const struct pmc_bit_map arl_pchs_d3_status_0_map[];
 +extern const struct pmc_bit_map arl_pchs_d3_status_1_map[];
 +extern const struct pmc_bit_map arl_pchs_d3_status_2_map[];
 +extern const struct pmc_bit_map arl_pchs_d3_status_3_map[];
 +extern const struct pmc_bit_map arl_pchs_vnn_req_status_0_map[];
 +extern const struct pmc_bit_map arl_pchs_vnn_req_status_1_map[];
 +extern const struct pmc_bit_map arl_pchs_vnn_req_status_2_map[];
 +extern const struct pmc_bit_map arl_pchs_vnn_req_status_3_map[];
 +extern const struct pmc_bit_map arl_pchs_vnn_misc_status_map[];
 +extern const struct pmc_bit_map arl_pchs_signal_status_map[];
 +extern const struct pmc_bit_map *arl_pchs_lpm_maps[];
 +extern const struct pmc_reg_map arl_pchs_reg_map;
  
  extern void pmc_core_get_tgl_lpm_reqs(struct platform_device *pdev);
- extern int pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value);
 +extern int pmc_core_ssram_get_lpm_reqs(struct pmc_dev *pmcdev);
+ int pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value, int ignore);
  
  int pmc_core_resume_common(struct pmc_dev *pmcdev);
  int get_primary_reg_base(struct pmc *pmc);
@@@ -579,13 -499,12 +581,16 @@@ int spt_core_init(struct pmc_dev *pmcde
  int cnp_core_init(struct pmc_dev *pmcdev);
  int icl_core_init(struct pmc_dev *pmcdev);
  int tgl_core_init(struct pmc_dev *pmcdev);
 +int tgl_l_core_init(struct pmc_dev *pmcdev);
 +int tgl_core_generic_init(struct pmc_dev *pmcdev, int pch_tp);
  int adl_core_init(struct pmc_dev *pmcdev);
  int mtl_core_init(struct pmc_dev *pmcdev);
 +int arl_core_init(struct pmc_dev *pmcdev);
 +int lnl_core_init(struct pmc_dev *pmcdev);
  
+ void cnl_suspend(struct pmc_dev *pmcdev);
+ int cnl_resume(struct pmc_dev *pmcdev);
  #define pmc_for_each_mode(i, mode, pmcdev)            \
        for (i = 0, mode = pmcdev->lpm_en_modes[i];     \
             i < pmcdev->num_lpm_modes;                 \
index e75431325dda92e42d5ba22754281a7af7bebfa9,504e3e273c323b3683c897f5390099674cbc64df..c7d15d864039d0265199861316c5911539e10358
@@@ -998,35 -991,19 +1000,30 @@@ int mtl_core_init(struct pmc_dev *pmcde
  
        mtl_d3_fixup();
  
+       pmcdev->suspend = cnl_suspend;
        pmcdev->resume = mtl_resume;
 -
        pmcdev->regmap_list = mtl_pmc_info_list;
 -      pmc_core_ssram_init(pmcdev);
  
 -      /* If regbase not assigned, set map and discover using legacy method */
 -      if (!pmc->regbase) {
 +      /*
 +       * If ssram init fails use legacy method to at least get the
 +       * primary PMC
 +       */
 +      ret = pmc_core_ssram_init(pmcdev, func);
 +      if (ret) {
 +              ssram_init = false;
 +              dev_warn(&pmcdev->pdev->dev,
 +                       "ssram init failed, %d, using legacy init\n", ret);
                pmc->map = &mtl_socm_reg_map;
                ret = get_primary_reg_base(pmc);
                if (ret)
                        return ret;
        }
  
-       /* Due to a hardware limitation, the GBE LTR blocks PC10
-        * when a cable is attached. Tell the PMC to ignore it.
-        */
-       dev_dbg(&pmcdev->pdev->dev, "ignoring GBE LTR\n");
-       pmc_core_send_ltr_ignore(pmcdev, 3);
 +      pmc_core_get_low_power_modes(pmcdev);
 +      pmc_core_punit_pmt_init(pmcdev, MTL_PMT_DMU_GUID);
 +
 +      if (ssram_init)
 +              return pmc_core_ssram_get_lpm_reqs(pmcdev);
 +
        return 0;
  }
index 91fd725951e556deaf34e7333f684bf167b72cac,e88d3d00c8539315775a182ae409bd3e164845b6..e0580de180773c57e6b1c2208d341402e97c64ad
@@@ -300,22 -258,16 +300,20 @@@ int tgl_core_generic_init(struct pmc_de
        struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN];
        int ret;
  
 -      pmc->map = &tgl_reg_map;
 +      if (pch_tp == PCH_H)
 +              pmc->map = &tgl_h_reg_map;
 +      else
 +              pmc->map = &tgl_reg_map;
  
+       pmcdev->suspend = cnl_suspend;
+       pmcdev->resume = cnl_resume;
        ret = get_primary_reg_base(pmc);
        if (ret)
                return ret;
  
 +      pmc_core_get_low_power_modes(pmcdev);
        pmc_core_get_tgl_lpm_reqs(pmcdev->pdev);
-       /* Due to a hardware limitation, the GBE LTR blocks PC10
-        * when a cable is attached. Tell the PMC to ignore it.
-        */
-       dev_dbg(&pmcdev->pdev->dev, "ignoring GBE LTR\n");
-       pmc_core_send_ltr_ignore(pmcdev, 3);
  
        return 0;
  }
Simple merge