#include <linux/dmi.h>
 #include <linux/module.h>
 #include <linux/pci.h>
+#include <linux/platform_data/x86/soc.h>
 #include <linux/pm_runtime.h>
 #include <sound/soc-acpi.h>
 #include <sound/soc-acpi-intel-match.h>
 MODULE_PARM_DESC(sof_pci_debug, "SOF PCI debug options (0x0 all off)");
 
 static const char *sof_dmi_override_tplg_name;
+static bool sof_dmi_use_community_key;
 
 #define SOF_PCI_DISABLE_PM_RUNTIME BIT(0)
 
        {}
 };
 
+/* all Up boards use the community key */
+static int up_use_community_key(const struct dmi_system_id *id)
+{
+       sof_dmi_use_community_key = true;
+       return 1;
+}
+
+/*
+ * For ApolloLake Chromebooks we want to force the use of the Intel production key.
+ * All newer platforms use the community key
+ */
+static int chromebook_use_community_key(const struct dmi_system_id *id)
+{
+       if (!soc_intel_is_apl())
+               sof_dmi_use_community_key = true;
+       return 1;
+}
+
 static const struct dmi_system_id community_key_platforms[] = {
        {
                .ident = "Up boards",
+               .callback = up_use_community_key,
                .matches = {
                        DMI_MATCH(DMI_SYS_VENDOR, "AAEON"),
                }
        },
        {
                .ident = "Google Chromebooks",
+               .callback = chromebook_use_community_key,
                .matches = {
                        DMI_MATCH(DMI_SYS_VENDOR, "Google"),
                }
                        "Module parameter used, changed fw path to %s\n",
                        sof_pdata->fw_filename_prefix);
 
-       } else if (dmi_check_system(community_key_platforms)) {
+       } else if (dmi_check_system(community_key_platforms) && sof_dmi_use_community_key) {
                sof_pdata->fw_filename_prefix =
                        devm_kasprintf(dev, GFP_KERNEL, "%s/%s",
                                       sof_pdata->desc->default_fw_path[sof_pdata->ipc_type],