Lines Matching +full:use +full:- +full:iram

1 // SPDX-License-Identifier: GPL-2.0-only
3 * sst_acpi.c - SST (LPE) driver init file for ACPI enumeration.
23 #include <sound/intel-dsp-config.h>
31 #include <sound/soc-acpi.h>
32 #include <sound/soc-acpi-intel-match.h>
33 #include "../sst-mfld-platform.h"
34 #include "../../common/soc-intel-quirks.h"
155 .platform = "sst-mfld-platform",
167 .platform = "sst-mfld-platform",
173 struct platform_device *pdev = to_platform_device(ctx->dev); in sst_platform_get_resources()
178 ctx->pdata->res_info->acpi_lpe_res_index); in sst_platform_get_resources()
180 dev_err(ctx->dev, "Invalid SHIM base from IFWI\n"); in sst_platform_get_resources()
181 return -EIO; in sst_platform_get_resources()
183 dev_info(ctx->dev, "LPE base: %#x size:%#x", (unsigned int) rsrc->start, in sst_platform_get_resources()
186 ctx->iram_base = rsrc->start + ctx->pdata->res_info->iram_offset; in sst_platform_get_resources()
187 ctx->iram_end = ctx->iram_base + ctx->pdata->res_info->iram_size - 1; in sst_platform_get_resources()
188 dev_info(ctx->dev, "IRAM base: %#x", ctx->iram_base); in sst_platform_get_resources()
189 ctx->iram = devm_ioremap(ctx->dev, ctx->iram_base, in sst_platform_get_resources()
190 ctx->pdata->res_info->iram_size); in sst_platform_get_resources()
191 if (!ctx->iram) { in sst_platform_get_resources()
192 dev_err(ctx->dev, "unable to map IRAM\n"); in sst_platform_get_resources()
193 return -EIO; in sst_platform_get_resources()
196 ctx->dram_base = rsrc->start + ctx->pdata->res_info->dram_offset; in sst_platform_get_resources()
197 ctx->dram_end = ctx->dram_base + ctx->pdata->res_info->dram_size - 1; in sst_platform_get_resources()
198 dev_info(ctx->dev, "DRAM base: %#x", ctx->dram_base); in sst_platform_get_resources()
199 ctx->dram = devm_ioremap(ctx->dev, ctx->dram_base, in sst_platform_get_resources()
200 ctx->pdata->res_info->dram_size); in sst_platform_get_resources()
201 if (!ctx->dram) { in sst_platform_get_resources()
202 dev_err(ctx->dev, "unable to map DRAM\n"); in sst_platform_get_resources()
203 return -EIO; in sst_platform_get_resources()
206 ctx->shim_phy_add = rsrc->start + ctx->pdata->res_info->shim_offset; in sst_platform_get_resources()
207 dev_info(ctx->dev, "SHIM base: %#x", ctx->shim_phy_add); in sst_platform_get_resources()
208 ctx->shim = devm_ioremap(ctx->dev, ctx->shim_phy_add, in sst_platform_get_resources()
209 ctx->pdata->res_info->shim_size); in sst_platform_get_resources()
210 if (!ctx->shim) { in sst_platform_get_resources()
211 dev_err(ctx->dev, "unable to map SHIM\n"); in sst_platform_get_resources()
212 return -EIO; in sst_platform_get_resources()
216 ctx->shim_phy_add = ctx->pdata->res_info->shim_phy_addr; in sst_platform_get_resources()
219 ctx->mailbox_add = rsrc->start + ctx->pdata->res_info->mbox_offset; in sst_platform_get_resources()
220 dev_info(ctx->dev, "Mailbox base: %#x", ctx->mailbox_add); in sst_platform_get_resources()
221 ctx->mailbox = devm_ioremap(ctx->dev, ctx->mailbox_add, in sst_platform_get_resources()
222 ctx->pdata->res_info->mbox_size); in sst_platform_get_resources()
223 if (!ctx->mailbox) { in sst_platform_get_resources()
224 dev_err(ctx->dev, "unable to map mailbox\n"); in sst_platform_get_resources()
225 return -EIO; in sst_platform_get_resources()
229 ctx->mailbox_add = ctx->info.mailbox_start; in sst_platform_get_resources()
232 ctx->pdata->res_info->acpi_ddr_index); in sst_platform_get_resources()
234 dev_err(ctx->dev, "Invalid DDR base from IFWI\n"); in sst_platform_get_resources()
235 return -EIO; in sst_platform_get_resources()
237 ctx->ddr_base = rsrc->start; in sst_platform_get_resources()
238 ctx->ddr_end = rsrc->end; in sst_platform_get_resources()
239 dev_info(ctx->dev, "DDR base: %#x", ctx->ddr_base); in sst_platform_get_resources()
240 ctx->ddr = devm_ioremap(ctx->dev, ctx->ddr_base, in sst_platform_get_resources()
242 if (!ctx->ddr) { in sst_platform_get_resources()
243 dev_err(ctx->dev, "unable to map DDR\n"); in sst_platform_get_resources()
244 return -EIO; in sst_platform_get_resources()
248 ctx->irq_num = platform_get_irq(pdev, in sst_platform_get_resources()
249 ctx->pdata->res_info->acpi_ipc_irq_index); in sst_platform_get_resources()
250 if (ctx->irq_num <= 0) in sst_platform_get_resources()
251 return ctx->irq_num < 0 ? ctx->irq_num : -EIO; in sst_platform_get_resources()
258 struct device *dev = &pdev->dev; in sst_acpi_probe()
268 id = acpi_match_device(dev->driver->acpi_match_table, dev); in sst_acpi_probe()
270 return -ENODEV; in sst_acpi_probe()
272 ret = snd_intel_acpi_dsp_driver_probe(dev, id->id); in sst_acpi_probe()
275 return -ENODEV; in sst_acpi_probe()
278 dev_dbg(dev, "for %s\n", id->id); in sst_acpi_probe()
280 mach = (struct snd_soc_acpi_mach *)id->driver_data; in sst_acpi_probe()
284 return -ENODEV; in sst_acpi_probe()
288 mach->pdata = &byt_rvp_platform_data; in sst_acpi_probe()
290 mach->pdata = &chv_platform_data; in sst_acpi_probe()
291 pdata = mach->pdata; in sst_acpi_probe()
293 if (!strcmp(id->id, "LPE0F28")) { in sst_acpi_probe()
296 /* Use regular BYT SST PCI VID:PID */ in sst_acpi_probe()
301 * The "LPE0F28" ACPI device has separate IO-mem resources for: in sst_acpi_probe()
302 * DDR, SHIM, MBOX, IRAM, DRAM, CFG in sst_acpi_probe()
309 pdata->res_info->acpi_lpe_res_index); in sst_acpi_probe()
312 return -EIO; in sst_acpi_probe()
314 rsrc->start -= pdata->res_info->shim_offset; in sst_acpi_probe()
315 rsrc->end = rsrc->start + 0x200000 - 1; in sst_acpi_probe()
317 ret = kstrtouint(id->id, 16, &dev_id); in sst_acpi_probe()
334 mach->mach_params.acpi_ipc_irq_index = in sst_acpi_probe()
335 pdata->res_info->acpi_ipc_irq_index; in sst_acpi_probe()
337 plat_dev = platform_device_register_data(dev, pdata->platform, -1, in sst_acpi_probe()
341 pdata->platform); in sst_acpi_probe()
349 mdev = platform_device_register_data(dev, mach->drv_name, -1, in sst_acpi_probe()
353 mach->drv_name); in sst_acpi_probe()
358 ctx->pdata = pdata; in sst_acpi_probe()
359 strcpy(ctx->firmware_name, mach->fw_filename); in sst_acpi_probe()
375 * sst_acpi_remove - remove function