| From 60e9feb781dfe84158b4ec7a4d61c5103e96e6f3 Mon Sep 17 00:00:00 2001 |
| From: Bard Liao <yung-chuan.liao@linux.intel.com> |
| Date: Fri, 23 Jul 2021 19:54:51 +0800 |
| Subject: [PATCH] soundwire: intel: introduce shim and alh base |
| Git-commit: 60e9feb781dfe84158b4ec7a4d61c5103e96e6f3 |
| Patch-mainline: v5.15-rc1 |
| References: bsc#1192354 |
| |
| shim base and alh base are platform-dependent. Adding these two |
| parameters allows us to use different shim/alh base for each |
| platform. |
| |
| Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> |
| Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> |
| Acked-by: Vinod Koul <vkoul@kernel.org> |
| Link: https://lore.kernel.org/r/20210723115451.7245-7-yung-chuan.liao@linux.intel.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Acked-by: Takashi Iwai <tiwai@suse.de> |
| |
| |
| drivers/soundwire/intel_init.c | 8 +++++--- |
| include/linux/soundwire/sdw_intel.h | 8 ++++++++ |
| sound/soc/sof/intel/hda.c | 2 ++ |
| 3 files changed, 15 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/soundwire/intel_init.c b/drivers/soundwire/intel_init.c |
| index 03ff69ab1797..e329022e1669 100644 |
| |
| |
| @@ -63,8 +63,8 @@ static struct sdw_intel_link_dev *intel_link_dev_register(struct sdw_intel_res * |
| link->mmio_base = res->mmio_base; |
| link->registers = res->mmio_base + SDW_LINK_BASE |
| + (SDW_LINK_SIZE * link_id); |
| - link->shim = res->mmio_base + SDW_SHIM_BASE; |
| - link->alh = res->mmio_base + SDW_ALH_BASE; |
| + link->shim = res->mmio_base + res->shim_base; |
| + link->alh = res->mmio_base + res->alh_base; |
| |
| link->ops = res->ops; |
| link->dev = res->dev; |
| @@ -214,6 +214,8 @@ static struct sdw_intel_ctx |
| } |
| |
| ctx->mmio_base = res->mmio_base; |
| + ctx->shim_base = res->shim_base; |
| + ctx->alh_base = res->alh_base; |
| ctx->link_mask = res->link_mask; |
| ctx->handle = res->handle; |
| mutex_init(&ctx->shim_lock); |
| @@ -302,7 +304,7 @@ sdw_intel_startup_controller(struct sdw_intel_ctx *ctx) |
| return -EINVAL; |
| |
| /* Check SNDWLCAP.LCOUNT */ |
| - caps = ioread32(ctx->mmio_base + SDW_SHIM_BASE + SDW_SHIM_LCAP); |
| + caps = ioread32(ctx->mmio_base + ctx->shim_base + SDW_SHIM_LCAP); |
| caps &= GENMASK(2, 0); |
| |
| /* Check HW supported vs property value */ |
| diff --git a/include/linux/soundwire/sdw_intel.h b/include/linux/soundwire/sdw_intel.h |
| index 7fce6aee0c36..8a463b8fc12a 100644 |
| |
| |
| @@ -195,6 +195,8 @@ struct sdw_intel_slave_id { |
| * @link_list: list to handle interrupts across all links |
| * @shim_lock: mutex to handle concurrent rmw access to shared SHIM registers. |
| * @shim_mask: flags to track initialization of SHIM shared registers |
| + * @shim_base: sdw shim base. |
| + * @alh_base: sdw alh base. |
| */ |
| struct sdw_intel_ctx { |
| int count; |
| @@ -207,6 +209,8 @@ struct sdw_intel_ctx { |
| struct list_head link_list; |
| struct mutex shim_lock; /* lock for access to shared SHIM registers */ |
| u32 shim_mask; |
| + u32 shim_base; |
| + u32 alh_base; |
| }; |
| |
| /** |
| @@ -225,6 +229,8 @@ struct sdw_intel_ctx { |
| * machine-specific quirks are handled in the DSP driver. |
| * @clock_stop_quirks: mask array of possible behaviors requested by the |
| * DSP driver. The quirks are common for all links for now. |
| + * @shim_base: sdw shim base. |
| + * @alh_base: sdw alh base. |
| */ |
| struct sdw_intel_res { |
| int count; |
| @@ -236,6 +242,8 @@ struct sdw_intel_res { |
| struct device *dev; |
| u32 link_mask; |
| u32 clock_stop_quirks; |
| + u32 shim_base; |
| + u32 alh_base; |
| }; |
| |
| /* |
| diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c |
| index c979581c6812..b4e35fbbe693 100644 |
| |
| |
| @@ -166,6 +166,8 @@ static int hda_sdw_probe(struct snd_sof_dev *sdev) |
| memset(&res, 0, sizeof(res)); |
| |
| res.mmio_base = sdev->bar[HDA_DSP_BAR]; |
| + res.shim_base = hdev->desc->sdw_shim_base; |
| + res.alh_base = hdev->desc->sdw_alh_base; |
| res.irq = sdev->ipc_irq; |
| res.handle = hdev->info.handle; |
| res.parent = sdev->dev; |
| -- |
| 2.26.2 |
| |