From nobody Sat Feb 7 07:31:37 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010007.outbound.protection.outlook.com [52.101.61.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 992AD22339; Thu, 5 Feb 2026 16:46:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770309973; cv=fail; b=j5rUzTrD0ptpJL8j+cUDwamW/yp1sZHzXwEBBq457uYErryQgtM7VDUZfva1p2GuYrvt2kwfA4Pk2sQ452PiV2tD6VkClMAQIVafxQpMURb9wbvYUzMMG0kMESI6F8/A2fdnwgV2u3kizcKGR5+sw2E172pbaMmj3jlFPgmwXVg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770309973; c=relaxed/simple; bh=aLR5bxqVbDcOV6YWuW1zFfP75Ll/HqJXB53ht+pUbI8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gYkTziN5Oj6tSeBpPXXn1dogWkQytEFPuF2HpTeqg0roJj/tehqjiI4X6pXLBsa0USLQFs6+iQ8+2PkAdJRHOX/M4MZ44SXRy5MEDmCKrtAZ6JjTMUpCg6cxAdmhyFYIR4WIZeLFkepTKIQatosCg0hdQqPqmP93YyUOhgC3O7A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=tUD1azb8; arc=fail smtp.client-ip=52.101.61.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="tUD1azb8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=blJnDDcSAbWO8ZbX8FSDjuwl1YdG7CXvEVXIYQxEeptNEnn0uAKIEbtYNf95gHyWRx3MjNAcjo8S+jdHjWuMON29osTaswJUVpvxjIy6Fb9Xtrb8/rOuju7DgPAG5X+Zg/llzUodFnz/4oK/DGZFkujMj12R4N+Cot+TfRR0SSO9sEUi4kMqdBf7c/YdMeWo67/L5uKCTih8D4dOLRikUxDMXNFmvl9BqMhuN0jQhn6Z42kR3c47HI1ji7fNZ/cnUeFAx2G0CRzYk5iBIqqGoEPJ36JTZlBCF7vFGJbQ6XPa/kWa72E6GOPscA0xw4Ji8N4q0S7/kpETLsEqp7sw4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=i9iPDOTCuvhm0fhy2mUCWaVYq1efaXSGAJejGzoRnt0=; b=PQw3lPG4SXPKUkERFCy/SzlgiNFNJhlm2CvMZINjUK28qZ8Tx3UWKVlLTnqvLgjmS0H6gLB3fEOnAQhb6stO90pFRcMtSGT5kqkB45cOpL4gi0ElV3BiDTsX43Mo/jQUegyiDm+8KinY3+mZe+sxxxzsSNUMKhp7g1rTKH4JTC692f9yhfNMAkT62UeqBFyOWFPzI+ORYpX4MuvM+UWfRmceByGx5dt7mUtSaqllrxAidTpjlZhjWtOQiXZcAy/Qjv1xmGIdsGU4uRH1omF8iA2jbyzcItTCamdTm6j8ulrfinGDIPC7iaf4CmJMzyFEovvya2U3OThhj9daXyk9EA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=i9iPDOTCuvhm0fhy2mUCWaVYq1efaXSGAJejGzoRnt0=; b=tUD1azb8UQsUfjRj61FFRfxTqbMpAReUhnC7Mjnj+0KB9fbFvM5fWlYf/0QKqIf7pwj+w6sY/k0pTQLX0Bal5haixMas4yqFF7LYMVeZ5i8uB/I8Z4h9U9PI/V9uvcISefe8zzqD/Vv/cUhnuv6KUQk/4NyGt2t6abWXC4I+o00= Received: from DS7PR03CA0322.namprd03.prod.outlook.com (2603:10b6:8:2b::29) by CH2PR12MB9519.namprd12.prod.outlook.com (2603:10b6:610:27c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Thu, 5 Feb 2026 16:45:59 +0000 Received: from CH3PEPF00000012.namprd21.prod.outlook.com (2603:10b6:8:2b:cafe::8) by DS7PR03CA0322.outlook.office365.com (2603:10b6:8:2b::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Thu, 5 Feb 2026 16:45:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CH3PEPF00000012.mail.protection.outlook.com (10.167.244.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.0 via Frontend Transport; Thu, 5 Feb 2026 16:45:59 +0000 Received: from vijendar-linux.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 5 Feb 2026 10:45:55 -0600 From: Vijendar Mukunda To: CC: , , , , , , , Vijendar Mukunda Subject: [PATCH V5 1/2] soundwire: amd: add clock init control function Date: Thu, 5 Feb 2026 22:14:19 +0530 Message-ID: <20260205164539.892403-2-Vijendar.Mukunda@amd.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260205164539.892403-1-Vijendar.Mukunda@amd.com> References: <20260205164539.892403-1-Vijendar.Mukunda@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF00000012:EE_|CH2PR12MB9519:EE_ X-MS-Office365-Filtering-Correlation-Id: 31105351-93ba-4e0e-9d82-08de64d60a94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?97JzDs+hHM8ye4+MGt+cO48xYlPzqQq5veV+rP24JD3AeZadvwaCRBYiMGsp?= =?us-ascii?Q?L/U5KwSmh+vvZNMEfcjgO1Lg20iurnRbXixMn0sZ0gXts7iWFf7Ik3nB3Sm0?= =?us-ascii?Q?5HQqOQl00ToeExXYuJUJ/37LBK1BQQcaAPhgxAO0P3r9cwXm3YPt3IahGrRl?= =?us-ascii?Q?eOKv46lCRWDvv6J/gYN4KE/Yplk2WS+XdJSMspwjdREbLrxRJoLDFrNIDjs2?= =?us-ascii?Q?TXr1wl5KEV73G5eCH72JPAZP0olSzGcYiIymcNgKIDe0K+Pf0mANVAQlEXc2?= =?us-ascii?Q?25QdNYgz33HIHoiTX9eAhA4aCObLXp1wTRevH4Ksn5fMGc89Vx5nyY8qfpaK?= =?us-ascii?Q?RNMON+CffHUH5H/QpLa+aF64D1Z6FBNtd0dlv3IYUFORFFH773swYjO7QU4z?= =?us-ascii?Q?XFia/Akk2M8F2x3JDEHQ1g29FixzXMuPwj7kDdBI0mu79BYZ2PYBZIn397dY?= =?us-ascii?Q?KHQDuj9F2k3/+jxAyxsJwckcomyIzACzuu3s3D7IaFktbKh+y2YcsbkICPjI?= =?us-ascii?Q?6lWFcjxyR1zkzsdAuBAnKto7yOeb3sM80Q9Z5Q/0q136QUIajIlB0TDvFVZW?= =?us-ascii?Q?Tn7JIqFpzWzvi90dFtlOQW5vVrdahiw14UtYW5sk9LDMgey7MJAvdYRX8ZW8?= =?us-ascii?Q?NljWGS6MS19zOuIEWDPf0hrpLYt4vMCDlVorfxAp8S3vlD6/umEMVJib2giB?= =?us-ascii?Q?TcsIfFaBSovwm//BkxwPSSnprY5/vHh4YHn2vcMuvPsjNgUgtkb05MFNPpz7?= =?us-ascii?Q?9xKyRU+2FARcilL+vE70Nq0144pD2W+1WH/1JqbdhP0tOI91imsN0P92uqsQ?= =?us-ascii?Q?cgGneONnfcp6p4ZFJ+b78rmer5PdL5f/UkPWhZ/WIa2GloeMDWp66BEwsnIm?= =?us-ascii?Q?PBW395KFC4XHRNLe0qO+Ia81jjTMKV5vKRRfra4RhCjSQ0aZtp1EQx4U6DEj?= =?us-ascii?Q?xS27176+mJtuHHge2dEL/FBy7bVFRGpcDhjDJLVx9CzNXK+SM0WIha7CZyTn?= =?us-ascii?Q?VrE4DdBd9nFFGfzS6HRLY5yxwhu0/4hhZLv3KACGGnwAGRfrQl9oPrOXVlm+?= =?us-ascii?Q?rKcErJvh6Y73W2Dpx6A79HTF4vKEWBttX94N3butyEmEJZKw2pJn9ZL9s9Dq?= =?us-ascii?Q?65KXnxXOdTMz+eBh5MItwaD+djVQ73g1tOiX2mKxhNwPaxZ94Y5VkgyEh/MJ?= =?us-ascii?Q?1t03XtoYCvRm+RZg1Jyq+p/cXjNDy/ZbvSy5Vm2KBSO0Bwcrq+8tN9+q2m26?= =?us-ascii?Q?pG8wPLsxVr3LM1NGc+tPnF9oiN5c86Nu3UBXgR0M/g6mzcsRkXlLiFcsuTln?= =?us-ascii?Q?Cwa1dbHr7kB93PX178uw3LMWfiWfCEWFDt/SApc9hc5YmDMLwz2GPv29ZYlQ?= =?us-ascii?Q?KiSPKk3oOfu+NnbD3EEZ81BhzAVlalLVDLGj36Uud/iLLXMKSxcbYIFtZeDo?= =?us-ascii?Q?h4EoeaiUyxnlFB43J9yVsTVoFcar9hC+bNI5LpDdiyXJiJ+0JgUvfV5shZa7?= =?us-ascii?Q?zKIYUJ6oKnkna8vjg7WZ14mjyQdF8qqeIIFPyTwSD9S/8lroCbHVM+YZ12Qz?= =?us-ascii?Q?Fv9Y5rV2q1oiZvpH3RixKXKoKduTUJeHobEMxX7Wr6aEH+A7DYX2v7nJry/j?= =?us-ascii?Q?9bxEze6akxtx4dk4DVH2/Ys=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Am1o4LxF7Y3RTjKgL4NkRyPtzushGANmGAsaIyQpKGKYh08CFyq7IzRbQZizr49ItwXHHFtMZowKESdn6ns0LwXqu6d6n9PLBOxW2lUz9TRIfZGPaqiSVoZxQqTnfewWJFYbffOlDpJXbJJpvLC0mmNzRWojMkgp58xeGl6+KC14kralLvO9dKWO/EmenJhnjiD0snQIncYJuNYLX9XFrLeA9Li/YWgnNdgZVaPwaAfFeRiKAh56iN58aVVFT1twQ6z4rplZUUduG621A3TwqopadTqf5yqqlPBxOFN7J3qZY6L7+mg1NxIGjcIQsVp+Ugy3VFUjYpY/Wxy9CGkYr9eviIJqRauW6GxLLe+JfRrtWKb8mJsloDWxB/3jiWZa/nWBJ8Js5cOSD0TK45ohluUFHEZzFcX5wRfj0bCEuR2AGcjzChKYk7Ea2IcxQxfc X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2026 16:45:59.5936 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 31105351-93ba-4e0e-9d82-08de64d60a94 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000012.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB9519 Content-Type: text/plain; charset="utf-8" Add generic SoundWire clock initialization sequence to support different SoundWire bus clock frequencies for ACP6.3/7.0/7.1/7.2 platforms and remove hard coding initializations for 12Mhz bus clock frequency. Signed-off-by: Vijendar Mukunda --- drivers/soundwire/amd_manager.c | 52 ++++++++++++++++++++++++++++----- drivers/soundwire/amd_manager.h | 4 --- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/drivers/soundwire/amd_manager.c b/drivers/soundwire/amd_manage= r.c index 5fd311ee4107..b53f781e4e74 100644 --- a/drivers/soundwire/amd_manager.c +++ b/drivers/soundwire/amd_manager.c @@ -27,6 +27,45 @@ =20 #define to_amd_sdw(b) container_of(b, struct amd_sdw_manager, bus) =20 +static int amd_sdw_clk_init_ctrl(struct amd_sdw_manager *amd_manager) +{ + struct sdw_bus *bus =3D &amd_manager->bus; + struct sdw_master_prop *prop =3D &bus->prop; + u32 val; + int divider; + + dev_dbg(amd_manager->dev, "mclk %d max %d row %d col %d frame_rate:%d\n", + prop->mclk_freq, prop->max_clk_freq, prop->default_row, + prop->default_col, prop->default_frame_rate); + + if (!prop->default_frame_rate || !prop->default_row) { + dev_err(amd_manager->dev, "Default frame_rate %d or row %d is invalid\n", + prop->default_frame_rate, prop->default_row); + return -EINVAL; + } + + /* Set clock divider */ + dev_dbg(amd_manager->dev, "bus params curr_dr_freq: %d\n", + bus->params.curr_dr_freq); + divider =3D (prop->mclk_freq / bus->params.curr_dr_freq); + + writel(divider, amd_manager->mmio + ACP_SW_CLK_FREQUENCY_CTRL); + val =3D readl(amd_manager->mmio + ACP_SW_CLK_FREQUENCY_CTRL); + dev_dbg(amd_manager->dev, "ACP_SW_CLK_FREQUENCY_CTRL:0x%x\n", val); + + /* Set frame shape base on the actual bus frequency. */ + prop->default_col =3D bus->params.curr_dr_freq / + prop->default_frame_rate / prop->default_row; + + dev_dbg(amd_manager->dev, "default_frame_rate:%d default_row: %d default_= col: %d\n", + prop->default_frame_rate, prop->default_row, prop->default_col); + amd_manager->cols_index =3D sdw_find_col_index(prop->default_col); + amd_manager->rows_index =3D sdw_find_row_index(prop->default_row); + bus->params.col =3D prop->default_col; + bus->params.row =3D prop->default_row; + return 0; +} + static int amd_init_sdw_manager(struct amd_sdw_manager *amd_manager) { u32 val; @@ -961,6 +1000,9 @@ int amd_sdw_manager_start(struct amd_sdw_manager *amd_= manager) =20 prop =3D &amd_manager->bus.prop; if (!prop->hw_disabled) { + ret =3D amd_sdw_clk_init_ctrl(amd_manager); + if (ret) + return ret; ret =3D amd_init_sdw_manager(amd_manager); if (ret) return ret; @@ -985,7 +1027,6 @@ static int amd_sdw_manager_probe(struct platform_devic= e *pdev) struct resource *res; struct device *dev =3D &pdev->dev; struct sdw_master_prop *prop; - struct sdw_bus_params *params; struct amd_sdw_manager *amd_manager; int ret; =20 @@ -1049,14 +1090,8 @@ static int amd_sdw_manager_probe(struct platform_dev= ice *pdev) return -EINVAL; } =20 - params =3D &amd_manager->bus.params; - - params->col =3D AMD_SDW_DEFAULT_COLUMNS; - params->row =3D AMD_SDW_DEFAULT_ROWS; prop =3D &amd_manager->bus.prop; - prop->clk_freq =3D &amd_sdw_freq_tbl[0]; prop->mclk_freq =3D AMD_SDW_BUS_BASE_FREQ; - prop->max_clk_freq =3D AMD_SDW_DEFAULT_CLK_FREQ; =20 ret =3D sdw_bus_master_add(&amd_manager->bus, dev, dev->fwnode); if (ret) { @@ -1348,6 +1383,9 @@ static int __maybe_unused amd_resume_runtime(struct d= evice *dev) } } sdw_clear_slave_status(bus, SDW_UNATTACH_REQUEST_MASTER_RESET); + ret =3D amd_sdw_clk_init_ctrl(amd_manager); + if (ret) + return ret; amd_init_sdw_manager(amd_manager); amd_enable_sdw_interrupts(amd_manager); ret =3D amd_enable_sdw_manager(amd_manager); diff --git a/drivers/soundwire/amd_manager.h b/drivers/soundwire/amd_manage= r.h index 6cc916b0c820..88cf8a426a0c 100644 --- a/drivers/soundwire/amd_manager.h +++ b/drivers/soundwire/amd_manager.h @@ -203,10 +203,6 @@ #define AMD_SDW_DEVICE_STATE_D3 3 #define ACP_PME_EN 0x0001400 =20 -static u32 amd_sdw_freq_tbl[AMD_SDW_MAX_FREQ_NUM] =3D { - AMD_SDW_DEFAULT_CLK_FREQ, -}; - struct sdw_manager_dp_reg { u32 frame_fmt_reg; u32 sample_int_reg; --=20 2.45.2 From nobody Sat Feb 7 07:31:37 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012063.outbound.protection.outlook.com [52.101.43.63]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 716A02D877B; Thu, 5 Feb 2026 16:46:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770309968; cv=fail; b=ap32dbed18nZ7JZNrfK0HYmt4ENitCaQ1iv0bmSv0ZnW6YwTLqVlkqq1IsFyL07lOWkctoHyZwNq8izzd+VRmFXPlLASyKCiwS2/8sXYqoYqHiGCPdoJX0Ou9gGLRELnjjcWXXEYuvwgwmAQZEyEIyW2I2XyLPCrF7RJ9ooOYNs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770309968; c=relaxed/simple; bh=DBB0G7g57ncSCKRn6604lL26qucMwh5P6p8+YO17t8s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IzKzri1PLkiAvWdWHPH8F1OKaPjqtWLBXmPeO0tKRNZetVusa8ghgeiIVdBWxwRfc2zBNogy4ZVJ6i0kNrRYPEeDNrQu3vcwRv455g8YpjHFVK262c6nzfIL2VfYJdzPt4238/AX1Zga0UeKKxyKNKFWbvRNPFX510I7THtko70= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=x0lSRI59; arc=fail smtp.client-ip=52.101.43.63 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="x0lSRI59" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sKmEB+fG1+dPG5MeK7jIZPoT2nH/BdwEb3o7zOYYuQIKn+tg46uxHdF5ekRgpVkS6oE5gWqNkoUYt16F+8/CcPyPvlthERrS+oZkhoPBU3P8lJrfypBg6B4p8E3KxO14mPGyHxvlTIHjXA20RXlZ1DLEBP2R0rV3ac1vu4uPkB739Gg4BjxKS0p8K2IFjw+sTFYzilwIgA3fmVpAOo7qYZsXrEGzZoZ0XDmArH/bZf/3whr1KbeHEOxtSel4dR1v70YC+yYYT+CqVF8BsQHAFABTcs+OZ4mSpooQsq4ZQ4V8FMNW3l/w1YzKzk0JvbCW8xHoBFxjVkBFKB1NFy3Rtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WFEGmRv3v+GMXKeNW5P3Od59Ieu305drB5Poj8UzZp4=; b=U493SfV01uDAVZHY62+gv+H2BMQmBMjzag3wE46dWbziU+qGfEbUD+8ry5h7lD2TdYw5rh3dO6OxLrtVcX8OX3GvALY9YCEgiW5jReqSyIkPGCdTzkN2YgaCG76WO3SGxG1p10AWZLbfULi07STeym5/obAi/wV8u37/l8K9JA2UlUpXQKASb3mDZ7mF8zV1heT40sPH7qRnm3uPd75pshBU0xcPv2gvoNcvtuov71GAY2DJMXSCuJC0wvYN0iCt5PqJdLboL3S6sgCxngPA4oMbnxLICdeWcTCIQ8tZ/Jrib3mX4s6tbPsCYOv11lx0At1EAWGWs4dmKCy1WUjwsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WFEGmRv3v+GMXKeNW5P3Od59Ieu305drB5Poj8UzZp4=; b=x0lSRI59vgM5e5s7aKh7n4aYC71Al/mUWFUoip63bn8r30ftuu8tQ2LR+nE/n2lZNzhoa13ZPEy2bjjQ7nUON/duvYK8SZiIntJ+q3qGVyDdShjBEfnwiwnpmluBNreWJPAP6ihm+Q1xSgOr7zrBCC/yzI9HYmzVTKUUt8ZJSgU= Received: from DS7PR03CA0305.namprd03.prod.outlook.com (2603:10b6:8:2b::25) by LV8PR12MB9450.namprd12.prod.outlook.com (2603:10b6:408:202::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.13; Thu, 5 Feb 2026 16:46:03 +0000 Received: from CH3PEPF00000012.namprd21.prod.outlook.com (2603:10b6:8:2b:cafe::ff) by DS7PR03CA0305.outlook.office365.com (2603:10b6:8:2b::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9587.15 via Frontend Transport; Thu, 5 Feb 2026 16:45:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by CH3PEPF00000012.mail.protection.outlook.com (10.167.244.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.0 via Frontend Transport; Thu, 5 Feb 2026 16:46:03 +0000 Received: from vijendar-linux.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 5 Feb 2026 10:45:58 -0600 From: Vijendar Mukunda To: CC: , , , , , , , Vijendar Mukunda Subject: [PATCH V5 2/2] soundwire: amd: refactor bandwidth calculation logic Date: Thu, 5 Feb 2026 22:14:20 +0530 Message-ID: <20260205164539.892403-3-Vijendar.Mukunda@amd.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260205164539.892403-1-Vijendar.Mukunda@amd.com> References: <20260205164539.892403-1-Vijendar.Mukunda@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF00000012:EE_|LV8PR12MB9450:EE_ X-MS-Office365-Filtering-Correlation-Id: 2419085e-9093-4c72-8d19-08de64d60cd7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?iwWEHXHOl7+ijAtDXtJ/+C3S58MEviDQo91aM2uywd8M91FmAj1f+rEVEbvZ?= =?us-ascii?Q?2RI98W7xg9VQGkytfkmsRlKuK/Yi09zthhB9WZoNIeSMnpITVxUWzWJrKV0b?= =?us-ascii?Q?o0771fsVOzDfs2xpj25oq6tG5ZkdZbqqI/Kz3raS5VFpY4xrtudCtT8Zoq9T?= =?us-ascii?Q?xwuVdkYa4++8Rr3jsGIsvuoqwowY9Fn2YsTFSjzMpxOaBUTXnuSOPPQXPNvb?= =?us-ascii?Q?eHWO0LAvO5O8cZb0B1cySXL857Mb3i3aQjbSgAJa0X3SX6TkqhjxO/bX58EH?= =?us-ascii?Q?CDUdKV4zCCgFMV0Wr0GkeflU3MYD+BgvC6GMDa0Tm1P0ZlTV6AoIc6Oq9+YZ?= =?us-ascii?Q?NpMmDurkf0V0sItIJt4rbYaTOLm4nkV/09eUI/9HOXsesaYEpqSV8INoxMUJ?= =?us-ascii?Q?B9d/ueyLwYRialL6LC8cKaYYceN8NZrfRKjO350QNzMd4U4cv8cFvMNNKy/M?= =?us-ascii?Q?lauMBTtKsFinwECzPxIQTAsXSfS36YFUbGwPRPpJLWj01OqA15DOn1ph7/O9?= =?us-ascii?Q?//UrB9JUtQInIJhBDC/yCBapQxleMLFDxrTv8D5DBCsm0BXVYb9qINNzs9os?= =?us-ascii?Q?/RRLJnlXewUOI+GcFmp2MqxmuC7W9yQjMQmUZLO4cfZN/DQQfUAG1mwXboO0?= =?us-ascii?Q?fY7hnR0/OvhDrX/blCzQT5e7NwX6KeZcdz2OUc2WolS1w4/c73Nyj7m/BzHs?= =?us-ascii?Q?S1g+e7dO3Wulp6828o0iDDZoghIlettpXTUGnApCZRAamrHrW7CZm8X9w9Nr?= =?us-ascii?Q?e/4eLMtNKptHfkTuJBHlpf1gGBUj6vVCOoXtn0IqVmo2SykvnRO7shOu+1/s?= =?us-ascii?Q?YTaOGqYGIoiTfrK9MSyKfTHh09RybEnH6bY0kpH08AaauoExQZnqzGhp8mgv?= =?us-ascii?Q?z5X6+E/8yxcjfKQmREwv4ALwNUk+B7rDPU9e+xw/4faTKr7R0X6CBP+w/+vE?= =?us-ascii?Q?pbC4RMNIECYHzVhNrOYTA/hr34ej+u0lCDtNvtVpQdsUpefhCLw/3AgUINIp?= =?us-ascii?Q?VBVimXk5BaQzaSFfJzMdbg4WwNYMLlRavdm8xJ38zmgLBMM21LtyYV6CoJ+3?= =?us-ascii?Q?H0WVwl3jWpJyO8B3tTHOVGmq7RLyEXtGqjfepIfiYDNg7CzX3CzJSfFjVYxy?= =?us-ascii?Q?wtccqkUtMnnXNFq8/hlU+r86uAGMl5uDNNNWNfFQeRsALLOyuHKA7+yrXpsO?= =?us-ascii?Q?ErJ7qSOpkbjXUtIl+GyJseM3gzXNsRUlY0XTBLnLc4O7LqJfRUWXbbqCxxvw?= =?us-ascii?Q?qHh622bcn+KL8WBxXaR8H7HUzzocJdiT3iln9vdyad1S97ai9lCECIK9/K7z?= =?us-ascii?Q?7/xXyHlnCcuB4M2GdlwD4RSr2FuOPzfu8BmhkXF7+8XxBNhjQCaYnnaIS9Fq?= =?us-ascii?Q?Vh2IF7oAIHKq020GLeINSP2YB2QElf9xp7gAx49pmjLEERtBzTdsWEFPVvkJ?= =?us-ascii?Q?jZQi6sl10M5mlaE+60JyVORHdVQnzGB2rBlN8MmXfzcbBlWgpagzLOTzShSt?= =?us-ascii?Q?NdctxI5UIM/2x+nAii5tiebvXg3zcop2KNPyCTaj6SPL6iyv6wqd4roM1NFP?= =?us-ascii?Q?nmoFxGqgkOBTnONdNE11W6fo0Ttza4KSRk/X8a3D3ETUdvCmovC4EMDT4LQX?= =?us-ascii?Q?bkr17Nc1BJVcDiZbba0MjV8=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qohcWGhec8YoyUPryccro4cmat07oajX2fz1VPrw9xUOBnz2tuUY2kx1ViDfxHiZ6bJF0RN5deL+Nr1GW429uDZjOHZgQ7h5mrqUmQyKsowsgmdHWNcKNRofUT2Wzu3E5GmRqm/eLCYbqwm7yITPDNDe7V7pWKNBFioCRLhzOOpBLSIlPv0O4VisEiDY2lNQHBuuYvR24HmWi6g5ZQu4I6FA/b8EbxCFgzLymwmEr1Og/BhoXLDa+n8vlvavcrOIATfHGT4JXOr7CdAMJHmdxRdh2QEhZqmkXMFHLPaJFLIHeCQ2axv9kUeVIjHN8WJDX56I0NmMaBTBBbEFLVXWJo7pzBmMDS9cCnAC62auzPyhlSw/avyXpvrGKivomU2fa158hTu2zQLqDJeaA52H/Of+UeG4KhSyxqQeYcW3ZU5RlAkE68a1Vu4NFwRo6eud X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2026 16:46:03.3879 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2419085e-9093-4c72-8d19-08de64d60cd7 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000012.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9450 Content-Type: text/plain; charset="utf-8" For current platforms(ACP6.3/ACP7.0/ACP7.1/ACP7.2), AMD SoundWire manager doesn't have banked registers for data port programming on Manager's side. Need to use fixed block offsets, hstart & hstop for manager ports. Earlier amd manager driver has support for 12 MHz as a bus clock frequency where frame rate is 48000 and number of bits is 500, frame shape as 50 x 10 with fixed block offset mapping based on port number. Got a new requirement to support 6 MHz as a bus clock frequency. For 6 MHz bus clock frequency amd manager driver needs to support two different frame shapes i.e number of bits as 250 with frame rate as 48000 and frame shape as 125 x 2 and for the second combination number of bits as 500 where frame rate is 24000 and frame shape is 50 x 10. Few SoundWire peripherals doesn't support 125 x 2 as a frame shape for 6 MHz bus clock frequency. They have explicit requirement for the frame shape. In this scenario, amd manager driver needs to use 50 x 10 as a frame shape where frame rate is 24000. Based on the platform and SoundWire topology for 6Mhz support frame shape will be decided which is part of SoundWire manager DisCo tables. For current platforms, amd manager driver supports only two bus clock frequencies(12 MHz & 6 MHz). Refactor bandwidth logic to support different bus clock frequencies. Signed-off-by: Vijendar Mukunda --- drivers/soundwire/amd_manager.c | 57 ++++++++++++++++++++++++++++--- include/linux/soundwire/sdw_amd.h | 4 +++ 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/drivers/soundwire/amd_manager.c b/drivers/soundwire/amd_manage= r.c index b53f781e4e74..7cd95a907f67 100644 --- a/drivers/soundwire/amd_manager.c +++ b/drivers/soundwire/amd_manager.c @@ -476,12 +476,16 @@ static u32 amd_sdw_read_ping_status(struct sdw_bus *b= us) =20 static int amd_sdw_compute_params(struct sdw_bus *bus, struct sdw_stream_r= untime *stream) { + struct amd_sdw_manager *amd_manager =3D to_amd_sdw(bus); struct sdw_transport_data t_data =3D {0}; struct sdw_master_runtime *m_rt; struct sdw_port_runtime *p_rt; struct sdw_bus_params *b_params =3D &bus->params; int port_bo, hstart, hstop, sample_int; - unsigned int rate, bps; + unsigned int rate, bps, channels; + int stream_slot_size, max_slots; + static int next_offset[AMD_SDW_MAX_MANAGER_COUNT] =3D {1}; + unsigned int inst_id =3D amd_manager->instance; =20 port_bo =3D 0; hstart =3D 1; @@ -492,11 +496,51 @@ static int amd_sdw_compute_params(struct sdw_bus *bus= , struct sdw_stream_runtime list_for_each_entry(m_rt, &bus->m_rt_list, bus_node) { rate =3D m_rt->stream->params.rate; bps =3D m_rt->stream->params.bps; + channels =3D m_rt->stream->params.ch_count; sample_int =3D (bus->params.curr_dr_freq / rate); + + /* Compute slots required for this stream dynamically */ + stream_slot_size =3D bps * channels; + list_for_each_entry(p_rt, &m_rt->port_list, port_node) { - port_bo =3D (p_rt->num * 64) + 1; - dev_dbg(bus->dev, "p_rt->num=3D%d hstart=3D%d hstop=3D%d port_bo=3D%d\n= ", - p_rt->num, hstart, hstop, port_bo); + if (p_rt->num >=3D amd_manager->max_ports) { + dev_err(bus->dev, "Port %d exceeds max ports %d\n", + p_rt->num, amd_manager->max_ports); + return -EINVAL; + } + + if (!amd_manager->port_offset_map[p_rt->num]) { + /* + * port block offset calculation for 6MHz bus clock frequency with + * different frame sizes 50 x 10 and 125 x 2 + */ + if (bus->params.curr_dr_freq =3D=3D 12000000) { + max_slots =3D bus->params.row * (bus->params.col - 1); + if (next_offset[inst_id] + stream_slot_size <=3D + (max_slots - 1)) { + amd_manager->port_offset_map[p_rt->num] =3D + next_offset[inst_id]; + next_offset[inst_id] +=3D stream_slot_size; + } else { + dev_err(bus->dev, + "No space for port %d\n", p_rt->num); + return -ENOMEM; + } + } else { + /* + * port block offset calculation for 12MHz bus clock + * frequency + */ + amd_manager->port_offset_map[p_rt->num] =3D + (p_rt->num * 64) + 1; + } + } + port_bo =3D amd_manager->port_offset_map[p_rt->num]; + dev_dbg(bus->dev, + "Port=3D%d hstart=3D%d hstop=3D%d port_bo=3D%d slots=3D%d max_ports=3D= %d\n", + p_rt->num, hstart, hstop, port_bo, stream_slot_size, + amd_manager->max_ports); + sdw_fill_xport_params(&p_rt->transport_params, p_rt->num, false, SDW_BLK_GRP_CNT_1, sample_int, port_bo, port_bo >> 8, hstart, hstop, @@ -1089,6 +1133,11 @@ static int amd_sdw_manager_probe(struct platform_dev= ice *pdev) default: return -EINVAL; } + amd_manager->max_ports =3D amd_manager->num_dout_ports + amd_manager->num= _din_ports; + amd_manager->port_offset_map =3D devm_kcalloc(dev, amd_manager->max_ports, + sizeof(int), GFP_KERNEL); + if (!amd_manager->port_offset_map) + return -ENOMEM; =20 prop =3D &amd_manager->bus.prop; prop->mclk_freq =3D AMD_SDW_BUS_BASE_FREQ; diff --git a/include/linux/soundwire/sdw_amd.h b/include/linux/soundwire/sd= w_amd.h index fe31773d5210..470360a2723c 100644 --- a/include/linux/soundwire/sdw_amd.h +++ b/include/linux/soundwire/sdw_amd.h @@ -66,8 +66,10 @@ struct sdw_amd_dai_runtime { * @status: peripheral devices status array * @num_din_ports: number of input ports * @num_dout_ports: number of output ports + * @max_ports: total number of input ports and output ports * @cols_index: Column index in frame shape * @rows_index: Rows index in frame shape + * @port_offset_map: dynamic array to map port block offset * @instance: SoundWire manager instance * @quirks: SoundWire manager quirks * @wake_en_mask: wake enable mask per SoundWire manager @@ -92,10 +94,12 @@ struct amd_sdw_manager { =20 int num_din_ports; int num_dout_ports; + int max_ports; =20 int cols_index; int rows_index; =20 + int *port_offset_map; u32 instance; u32 quirks; u32 wake_en_mask; --=20 2.45.2