Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

platform/x86: ISST: Optimize suspend/resume callbacks

If SST-CP or SST-PP is not supported then don't store configuration
during suspend callback and restore during resume callback.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Link: https://patch.msgid.link/20260107061649.1634737-1-srinivas.pandruvada@linux.intel.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>

authored by

Srinivas Pandruvada and committed by
Ilpo Järvinen
932ca9b7 69cd1ca4

+17
+17
drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
··· 1721 1721 } 1722 1722 EXPORT_SYMBOL_NS_GPL(tpmi_sst_dev_remove, "INTEL_TPMI_SST"); 1723 1723 1724 + #define SST_PP_CAP_CP_ENABLE BIT(0) 1725 + #define SST_PP_CAP_PP_ENABLE BIT(1) 1726 + 1724 1727 void tpmi_sst_dev_suspend(struct auxiliary_device *auxdev) 1725 1728 { 1726 1729 struct tpmi_sst_struct *tpmi_sst = auxiliary_get_drvdata(auxdev); ··· 1744 1741 if (!pd_info || !pd_info->sst_base) 1745 1742 continue; 1746 1743 1744 + if (!(pd_info->sst_header.cap_mask & SST_PP_CAP_CP_ENABLE)) 1745 + goto process_pp_suspend; 1746 + 1747 1747 cp_base = pd_info->sst_base + pd_info->sst_header.cp_offset; 1748 1748 pd_info->saved_sst_cp_control = readq(cp_base + SST_CP_CONTROL_OFFSET); 1749 1749 memcpy_fromio(pd_info->saved_clos_configs, cp_base + SST_CLOS_CONFIG_0_OFFSET, 1750 1750 sizeof(pd_info->saved_clos_configs)); 1751 1751 memcpy_fromio(pd_info->saved_clos_assocs, cp_base + SST_CLOS_ASSOC_0_OFFSET, 1752 1752 sizeof(pd_info->saved_clos_assocs)); 1753 + 1754 + process_pp_suspend: 1755 + if (!(pd_info->sst_header.cap_mask & SST_PP_CAP_PP_ENABLE)) 1756 + continue; 1753 1757 1754 1758 pd_info->saved_pp_control = readq(pd_info->sst_base + 1755 1759 pd_info->sst_header.pp_offset + ··· 1785 1775 if (!pd_info || !pd_info->sst_base) 1786 1776 continue; 1787 1777 1778 + if (!(pd_info->sst_header.cap_mask & SST_PP_CAP_CP_ENABLE)) 1779 + goto process_pp_resume; 1780 + 1788 1781 cp_base = pd_info->sst_base + pd_info->sst_header.cp_offset; 1789 1782 writeq(pd_info->saved_sst_cp_control, cp_base + SST_CP_CONTROL_OFFSET); 1790 1783 memcpy_toio(cp_base + SST_CLOS_CONFIG_0_OFFSET, pd_info->saved_clos_configs, 1791 1784 sizeof(pd_info->saved_clos_configs)); 1792 1785 memcpy_toio(cp_base + SST_CLOS_ASSOC_0_OFFSET, pd_info->saved_clos_assocs, 1793 1786 sizeof(pd_info->saved_clos_assocs)); 1787 + 1788 + process_pp_resume: 1789 + if (!(pd_info->sst_header.cap_mask & SST_PP_CAP_PP_ENABLE)) 1790 + continue; 1794 1791 1795 1792 writeq(pd_info->saved_pp_control, power_domain_info->sst_base + 1796 1793 pd_info->sst_header.pp_offset + SST_PP_CONTROL_OFFSET);