Introduce two macros to help with checking the support for optional CPPC
registers.

CPC_SUP_BUFFER_ONLY ensures that an expected BUFFER only register has a
register type of ACPI_TYPE_BUFFER and is not NULL.

REG_SUPPORTED decides which check to perform based the expected type of
the CPPC register.

Signed-off-by: Janakarajan Natarajan <janakarajan.natara...@amd.com>
---
 drivers/acpi/cppc_acpi.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
index 15f103d7532b..c43de65531ae 100644
--- a/drivers/acpi/cppc_acpi.c
+++ b/drivers/acpi/cppc_acpi.c
@@ -111,6 +111,14 @@ static DEFINE_PER_CPU(struct cpc_desc *, cpc_desc_ptr);
 #define CPC_SUPPORTED(cpc) ((cpc)->type == ACPI_TYPE_INTEGER ?         \
                                !!(cpc)->cpc_entry.int_value :          \
                                !IS_NULL_REG(&(cpc)->cpc_entry.reg))
+
+/*
+ * Evaluates to True if an optional cpc field is supported and is
+ * BUFFER only
+ */
+#define CPC_SUP_BUFFER_ONLY(cpc) ((cpc)->type == ACPI_TYPE_BUFFER &&   \
+                                 !IS_NULL_REG(&(cpc)->cpc_entry.reg))
+
 /*
  * Arbitrary Retries in case the remote processor is slow to respond
  * to PCC commands. Keeping it high enough to cover emulators where
@@ -705,6 +713,26 @@ static bool is_cppc_supported(int revision, int num_ent)
  *     }
  */
 
+static bool is_buf_only(int reg_idx)
+{
+       switch (reg_idx) {
+       case HIGHEST_PERF:
+       case NOMINAL_PERF:
+       case LOW_NON_LINEAR_PERF:
+       case LOWEST_PERF:
+       case CTR_WRAP_TIME:
+       case AUTO_SEL_ENABLE:
+       case REFERENCE_PERF:
+               return false;
+       default:
+               return true;
+       }
+}
+
+#define REG_SUPPORTED(cpc, idx) (is_buf_only(idx) ?                        \
+                                CPC_SUP_BUFFER_ONLY(&cpc->cpc_regs[idx]) : \
+                                CPC_SUPPORTED(&cpc->cpc_regs[idx]))
+
 /**
  * acpi_cppc_processor_probe - Search for per CPU _CPC objects.
  * @pr: Ptr to acpi_processor containing this CPU's logical ID.
-- 
2.17.1

Reply via email to