From 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 02:46:07 +0000 Subject: [PATCH] add audio --- kernel/sound/soc/intel/atom/sst/sst_acpi.c | 85 ++++++------------------------------------ 1 files changed, 13 insertions(+), 72 deletions(-) diff --git a/kernel/sound/soc/intel/atom/sst/sst_acpi.c b/kernel/sound/soc/intel/atom/sst/sst_acpi.c index c90b04c..f943a08 100644 --- a/kernel/sound/soc/intel/atom/sst/sst_acpi.c +++ b/kernel/sound/soc/intel/atom/sst/sst_acpi.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * sst_acpi.c - SST (LPE) driver init file for ACPI enumeration. * @@ -5,17 +6,6 @@ * * Authors: Ramesh Babu K V <Ramesh.Babu@intel.com> * Authors: Omair Mohammed Abdullah <omair.m.abdullah@intel.com> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * */ #include <linux/module.h> @@ -38,12 +28,10 @@ #include <acpi/platform/aclinux.h> #include <acpi/actypes.h> #include <acpi/acpi_bus.h> -#include <asm/cpu_device_id.h> -#include <asm/iosf_mbi.h> #include <sound/soc-acpi.h> #include <sound/soc-acpi-intel-match.h> #include "../sst-mfld-platform.h" -#include "../../common/sst-dsp.h" +#include "../../common/soc-intel-quirks.h" #include "sst.h" /* LPE viewpoint addresses */ @@ -176,7 +164,7 @@ ctx->iram_base = rsrc->start + ctx->pdata->res_info->iram_offset; ctx->iram_end = ctx->iram_base + ctx->pdata->res_info->iram_size - 1; dev_info(ctx->dev, "IRAM base: %#x", ctx->iram_base); - ctx->iram = devm_ioremap_nocache(ctx->dev, ctx->iram_base, + ctx->iram = devm_ioremap(ctx->dev, ctx->iram_base, ctx->pdata->res_info->iram_size); if (!ctx->iram) { dev_err(ctx->dev, "unable to map IRAM\n"); @@ -186,7 +174,7 @@ ctx->dram_base = rsrc->start + ctx->pdata->res_info->dram_offset; ctx->dram_end = ctx->dram_base + ctx->pdata->res_info->dram_size - 1; dev_info(ctx->dev, "DRAM base: %#x", ctx->dram_base); - ctx->dram = devm_ioremap_nocache(ctx->dev, ctx->dram_base, + ctx->dram = devm_ioremap(ctx->dev, ctx->dram_base, ctx->pdata->res_info->dram_size); if (!ctx->dram) { dev_err(ctx->dev, "unable to map DRAM\n"); @@ -195,7 +183,7 @@ ctx->shim_phy_add = rsrc->start + ctx->pdata->res_info->shim_offset; dev_info(ctx->dev, "SHIM base: %#x", ctx->shim_phy_add); - ctx->shim = devm_ioremap_nocache(ctx->dev, ctx->shim_phy_add, + ctx->shim = devm_ioremap(ctx->dev, ctx->shim_phy_add, ctx->pdata->res_info->shim_size); if (!ctx->shim) { dev_err(ctx->dev, "unable to map SHIM\n"); @@ -208,7 +196,7 @@ /* Get mailbox addr */ ctx->mailbox_add = rsrc->start + ctx->pdata->res_info->mbox_offset; dev_info(ctx->dev, "Mailbox base: %#x", ctx->mailbox_add); - ctx->mailbox = devm_ioremap_nocache(ctx->dev, ctx->mailbox_add, + ctx->mailbox = devm_ioremap(ctx->dev, ctx->mailbox_add, ctx->pdata->res_info->mbox_size); if (!ctx->mailbox) { dev_err(ctx->dev, "unable to map mailbox\n"); @@ -227,7 +215,7 @@ ctx->ddr_base = rsrc->start; ctx->ddr_end = rsrc->end; dev_info(ctx->dev, "DDR base: %#x", ctx->ddr_base); - ctx->ddr = devm_ioremap_nocache(ctx->dev, ctx->ddr_base, + ctx->ddr = devm_ioremap(ctx->dev, ctx->ddr_base, resource_size(rsrc)); if (!ctx->ddr) { dev_err(ctx->dev, "unable to map DDR\n"); @@ -243,53 +231,6 @@ return 0; } -static int is_byt(void) -{ - bool status = false; - static const struct x86_cpu_id cpu_ids[] = { - { X86_VENDOR_INTEL, 6, 55 }, /* Valleyview, Bay Trail */ - {} - }; - if (x86_match_cpu(cpu_ids)) - status = true; - return status; -} - -static int is_byt_cr(struct device *dev, bool *bytcr) -{ - int status = 0; - - if (IS_ENABLED(CONFIG_IOSF_MBI)) { - u32 bios_status; - - if (!is_byt() || !iosf_mbi_available()) { - /* bail silently */ - return status; - } - - status = iosf_mbi_read(BT_MBI_UNIT_PMC, /* 0x04 PUNIT */ - MBI_REG_READ, /* 0x10 */ - 0x006, /* BIOS_CONFIG */ - &bios_status); - - if (status) { - dev_err(dev, "could not read PUNIT BIOS_CONFIG\n"); - } else { - /* bits 26:27 mirror PMIC options */ - bios_status = (bios_status >> 26) & 3; - - if ((bios_status == 1) || (bios_status == 3)) - *bytcr = true; - else - dev_info(dev, "BYT-CR not detected\n"); - } - } else { - dev_info(dev, "IOSF_MBI not enabled, no BYT-CR detection\n"); - } - return status; -} - - static int sst_acpi_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -301,7 +242,6 @@ struct platform_device *plat_dev; struct sst_platform_info *pdata; unsigned int dev_id; - bool bytcr = false; id = acpi_match_device(dev->driver->acpi_match_table, dev); if (!id) @@ -315,7 +255,7 @@ return -ENODEV; } - if (is_byt()) + if (soc_intel_is_byt()) mach->pdata = &byt_rvp_platform_data; else mach->pdata = &chv_platform_data; @@ -333,14 +273,15 @@ if (ret < 0) return ret; - ret = is_byt_cr(dev, &bytcr); - if (!((ret < 0) || (bytcr == false))) { - dev_info(dev, "Detected Baytrail-CR platform\n"); - + if (soc_intel_is_byt_cr(pdev)) { /* override resource info */ byt_rvp_platform_data.res_info = &bytcr_res_info; } + /* update machine parameters */ + mach->mach_params.acpi_ipc_irq_index = + pdata->res_info->acpi_ipc_irq_index; + plat_dev = platform_device_register_data(dev, pdata->platform, -1, NULL, 0); if (IS_ERR(plat_dev)) { -- Gitblit v1.6.2