From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (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 43C17315D40 for ; Fri, 27 Mar 2026 11:34:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.12 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774611268; cv=fail; b=isxq7bUokfreWxrOmEB20ejwEf3uuaZJggVqzZknlFqGbOM5ZTROSaxN2nrJ4Apb8OfliaW1dEBWHb40qSBJ7wOn0xQPUpBSi6UaApKwDM9zkEPr/6qN4L8fM4Utvhsu09eIj7b7GkE+3s2582fH0oK00e2JNglyqauf4qv5Glk= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774611268; c=relaxed/simple; bh=DVrJfHAi7gQcZDjoRyL9fL6l5UXKPv9exNYOVKN1BNY=; h=Message-ID:Date:Subject:To:CC:References:From:In-Reply-To: Content-Type:MIME-Version; b=Nh+xZSWO7IqE9mBlAfpnwzT9OYagmaytQOy4VM2tDYl31pJ2NjJ/gN5g1SSllLkstWXbHKEq7Auc3iUcjB33QDI2s7haQu8SooCa2t5fQhvvr3Es/PqXrtZbCyvAuCwtULrljiV4ICwIkEiYN6jzEU2LJ+t93OsV15UnxlbhjAo= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=b/QzSwX5; arc=fail smtp.client-ip=198.175.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="b/QzSwX5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1774611267; x=1806147267; h=message-id:date:subject:to:cc:references:from: in-reply-to:content-transfer-encoding:mime-version; bh=DVrJfHAi7gQcZDjoRyL9fL6l5UXKPv9exNYOVKN1BNY=; b=b/QzSwX5GO5qYlTQfHertbLn8AUCJ12O8OE52PRRvjbMYWQKf2YVfYvg Y46yHjLUG4fpQSIOFbtJoz/4aYlZUO+PZJk/72ZzTLEqrSbCUnN5Q+yDK SAP3uI5JCcGyuocIoYHKlpT/ykPDsT2OXjCDMK3HK6KguaYYgbjdIqugP dNzYRhyXtC/TbAstgRQQ/f+MuYl+AECwgbMzFEijqsWdEJh6AT123hDZI MxaSOZCgFwc1uVJSCa/o7I4ZTfLfOyIdtfP2SQ+yfduyC0/NjQSjnXeID IqyJkJ8fyU4sh0aJ5/gRhYOd0VXpwuQN+Mzt+UoLYjkP/oI4ViMIOhbcQ g==; X-CSE-ConnectionGUID: kda0mVrqRymFlEkOUlo8OQ== X-CSE-MsgGUID: yCHlmLmKTMKZ92uPSjIypw== X-IronPort-AV: E=McAfee;i="6800,10657,11741"; a="87156532" X-IronPort-AV: E=Sophos;i="6.23,144,1770624000"; d="scan'208";a="87156532" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Mar 2026 04:34:26 -0700 X-CSE-ConnectionGUID: Ja1d9m8GSSm8fYi3QtKePg== X-CSE-MsgGUID: EurJGtSpSoi1H2dLQVmsnw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,144,1770624000"; d="scan'208";a="218674098" Received: from fmsmsx902.amr.corp.intel.com ([10.18.126.91]) by fmviesa009.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Mar 2026 04:34:25 -0700 Received: from FMSMSX901.amr.corp.intel.com (10.18.126.90) by fmsmsx902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Fri, 27 Mar 2026 04:34:25 -0700 Received: from fmsedg901.ED.cps.intel.com (10.1.192.143) by FMSMSX901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37 via Frontend Transport; Fri, 27 Mar 2026 04:34:25 -0700 Received: from BN8PR05CU002.outbound.protection.outlook.com (52.101.57.40) by edgegateway.intel.com (192.55.55.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Fri, 27 Mar 2026 04:34:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z2s4np10AbnzG/CFhPJD5gvcRlWYMCBGVP1NecrjvIGtkGEa2SSgYGT9/HHeZUfU0CDkYkTuwx95/2TeXsx2ihhEI3HyKoWnzFLYtiR6gYULkZdXFQvEf0nF4FvzHXj7+kBYRvTAfhj8AlGxjZL8556BJDBUvbRd0M4OxODc2bDv6fJsTMv4rKMs3cWe5+QkU0nUI1NBk81f0Itr5Iw5YC1ipzPu9P9LKXRWBE7lzH1RHBZfE3Li7m1tF4MvqHHapGUZWqxXWCTr8ZjDPacSG3K8zxlKFMIcpk1ULzR8zmLvxxpS3Ti73BUy4DkshFYQyE7EZEjSI/nkqrHbfGD44Q== 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=o0fTm4mEnjFkjllMVIHg1Iq06r7Kx0Zo9q4siCvMM70=; b=YTXCe1nOjbi/intsOx6S+u8grwIrUkwQPcQMI6BEXDEYPmataHkqDenkyIHHsLC221ZGKJ76fm1uMQQd2O69v194C/tbh0D8GpQaZruVRrVQBhkZ9odlbkYNpe4NPdtor+fpw9uM9vWdGS70VUp0xYFpG4WqFDJiw75GtUjnO7TEKy/VjEKPcatMAv+mZ6OTpahOOQEsRZ4vdgbYzDo792kgnroKHTvZ+9KoGDvip6x7JLLtXA2UZVKNigcET4TQx9i5s0FpuMWZfOVJgRwW4635bp8cFFbhFo8eemNMsryR/vRMg9i35HswlJOo/cNxmsVs/vv8HeVUBKoUngLJ6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from IA1PR11MB7198.namprd11.prod.outlook.com (2603:10b6:208:419::15) by CO1PR11MB5156.namprd11.prod.outlook.com (2603:10b6:303:94::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.10; Fri, 27 Mar 2026 11:34:19 +0000 Received: from IA1PR11MB7198.namprd11.prod.outlook.com ([fe80::2c4e:e92a:4fa:a456]) by IA1PR11MB7198.namprd11.prod.outlook.com ([fe80::2c4e:e92a:4fa:a456%6]) with mapi id 15.20.9769.004; Fri, 27 Mar 2026 11:34:19 +0000 Message-ID: <481b7725-2ae6-420d-adeb-acdabd113962@intel.com> Date: Fri, 27 Mar 2026 13:34:16 +0200 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] mmc: sdhci-of-dwcmshc: Refactor Rockchip platform data for controller revisions To: Shawn Lin CC: , References: <1774597872-179908-1-git-send-email-shawn.lin@rock-chips.com> <20fe4fbb-df3d-4fa3-a595-3f446520f50f@intel.com> <793af56e-3a2b-632e-ed18-9a2bc0844351@rock-chips.com> Content-Language: en-US From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo, Business Identity Code: 0357606 - 4, Domiciled in Helsinki In-Reply-To: <793af56e-3a2b-632e-ed18-9a2bc0844351@rock-chips.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-ClientProxiedBy: DU2PR04CA0073.eurprd04.prod.outlook.com (2603:10a6:10:232::18) To IA1PR11MB7198.namprd11.prod.outlook.com (2603:10b6:208:419::15) Precedence: bulk X-Mailing-List: linux-mmc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA1PR11MB7198:EE_|CO1PR11MB5156:EE_ X-MS-Office365-Filtering-Correlation-Id: a172fd0a-f88f-4fbf-a7c1-08de8bf4c906 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: jaBNgoRMUPl8v4P5O7puMxNBtZKUxO4tNMK2C0O/aLoFuGYNB6fa2KB/waYnIKRyP0iIhf1VM8kKkJXW5SSS4prGfzvhGLby2jZ22fs6egb7gzMhPHBf0pkhNO9qYRMC0S/sgCAIBT1NBKrzL3U0YUqrTyIUyr+nWrpUbMOAeJefRdHv12hQz2gQ8gJwKoWIh7oOt1PJxZv9C9my+cUe3wfPuZW/Iaevp/CHNNvDMYux/1bT+/ocDeC9CyZMV4+14q8QuqxHtBpB8wCGBfOsKwxUAlvZyqBEihBlBqrTdi1Xab9x2SQWsi+oLiRU1JDZHwKSNq+ky4E/9/6hWsapPh8NATtfQMCZRprbWSZgJsncneb1nyjgkrq2niHxKjwho6MVTjdQ3ZMsr81GVeNG73nqRaq/8MWyIgFx6r0uP+UrcFcqM9GBBKh+OebNUQ3zqpOFRbdrXIvL5eZ69ocQJagE9DM2x0I39kKUT4+Ml+p46GPMR6y96YpJZBXKudIa5vH4uH9FDXz3tTqHhnH3JZdugXClOTzdAgd+ltvor1j/bQVtQbbez1VCahzOZuaWjornu2X6+Q/PdOmdQLsCpywvwF7pWjMjQ7VZVc3KROhnprXJLIgnxvee9coNznGhtv0HP0YHRMpQTP1BTBUZmPoxYyTQ60Xf94KO9t2/jQP98epmqa/S9W//Zcd8MQusa2ZlZSmmzhLv3OESRwY2y7oAJGWO+mzmGI0ixq4bAyw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA1PR11MB7198.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Wks2U0loVkJYZ2RBUi9ZRjR1MmkyRGJoemV4eHlWV2kzWm1JVFJXbDdibDZw?= =?utf-8?B?ZitNY1d2bE1uMUsrMTdIYTFKWUQ1UnR1SEdDdEd1aG9sRTVpMHRjWjVJbkYv?= =?utf-8?B?K3IwTEltR0FtWkpCU3NJUkFtQVJ0N1hMMldhamxWMlVLeWpVNGZ4T1kwZ0VD?= =?utf-8?B?dXhTMzNZQzhwYnZIbWVCSzVmZmlodnArTjJ3R0VJVTBManpFUkdMWTZpZC8r?= =?utf-8?B?OFZScjBGSjYwTTluU3hxbk5BcFMrNEFvcUpwQmFhVW9oeFUzZTFoWUpzWVo5?= =?utf-8?B?UEFUNTRvUWlKOGlqeGZkVlV1VFVaQUJLdStCNXprQmhKcWsyZjVwT01pR01o?= =?utf-8?B?QWFqckpEczlQTkE5REkvNk1RaUxxRlZDdTYzcWYycHNJaXZkcGV2UExRUTE1?= =?utf-8?B?eUoxRStqaVYwQ2Y4dGVPRDgwbDM2RnQ4dkRUZHFDZDFjbFFtQ2t0eGdiVkV5?= =?utf-8?B?OElKZkJYZ3ZGSWNqQVV1UTRBbWVldGdIbFZLQnBtZHJ4SkhSbnc3QWhyblZY?= =?utf-8?B?RkpHd2dwckpod2p2ZkgvMThtNnNNOWlXclJrRXlvOVRGVWdveWdBTk5vMjh3?= =?utf-8?B?ZVM0TUwzcHViQzhzb0N3WUkvVzFHdCtzc3BMMk5XQzk3VFdNRGZNdE1jd2hi?= =?utf-8?B?VnBKL3lNekl4T0wzcy81NzVHVEIwTTNSQTF6cnhTQzBrM3RWcTc3dG9VbFdi?= =?utf-8?B?TjV3UjZ6ZnFHcXRkM2VBa3hpNFlublpCK1JVa0JxZDZkSzg3V3AxY2k2VVl3?= =?utf-8?B?amxNOGY0TTFMbDRUamtYVjV6K295ZWgxTnhrZlJQMkd6UVlwQ0tnQkVFY3Zh?= =?utf-8?B?VlpVMmdvTjl0cExCWWtRSlRDbDUvdURUSmE4a2MyeHdaL3dZS1RVa3U5WERX?= =?utf-8?B?Z1ZPNEJ1ZHFKWERtaG8xNC9oRGhpZnpoS0s4Vjd4cDEzUEttODBHMG03U0dD?= =?utf-8?B?dklqcDVKckpxMXNJRnFaajhBTEZXTzBLSUlKRVljbWk2OGY5aTZzdUpUajJa?= =?utf-8?B?RHNadjQ2VWR0S2ZkbW41b1g1NXR3VUc1eEtpYmVtUUhxT3FrKzA0ckdVd29k?= =?utf-8?B?bnBabE1MVWRiQi9SVFpQWE9ZZncrdjFaQXZxL3oyaWNqMXpTYmYyTm1wRjh5?= =?utf-8?B?aG9HU0pmR2tCaGh4dkZaS1pmNUR6UkhyV0M3UGtESUJwQUxwYmtoT3huWlZh?= =?utf-8?B?Tm5tT3JFUmw4eExqQU5Fc2RBK2puNTIvY3RnU2MvZm1CbHB0N3NITW0vSGZQ?= =?utf-8?B?amxib2FSRzZKZ3RiV3FCREZiT21lWTJIZTVEOWpUQVQ0TU04RUIyazJIMFBh?= =?utf-8?B?aFpkdW1wVjFlY09yM3ZpSzBQQVo0WmViWDZJSVA2UFlLeGJsMElqM3JIQmkz?= =?utf-8?B?U2hOSDE1aXNkK24xUTRDeWtjMWJZZlVsSUdJQTNjYk92NU5JQit4TU53NHkr?= =?utf-8?B?R2J1bVh2YnhRMDJRMlZ2SGQ0WG5IM3VwSU9nY3pUS3dCNFBBYW5YV2Z0RFlD?= =?utf-8?B?MGlqV3VjVGtCaW9jbFNFM2o0TWlocEMxQ3lQaWlScUQ3Uy9CZTRvbGo1TmR4?= =?utf-8?B?ZlJUeUNkaDE3VWlNSDZObS9iUHFyYkRCS3lVNUg5K3MzaG1NK0F1ZjAveWJF?= =?utf-8?B?SjZIc2xhaE5BZk1ldHJpK3VVUlpBU1hjUlRLV0tkNXZzRkUzcHM5dUp2RWpG?= =?utf-8?B?cTV0RFBnbVRNNEwvT0wyZERuYnFxWm5MTzFFdDl4VDhsNVBCY2Q0b3g5anVt?= =?utf-8?B?V2Q5RjJoeFQxRXppcVowajJkTHo1QTdzMFNsVmdzck5PalYrZ3Jrc2trcVFv?= =?utf-8?B?dlFNb1Z3Nys1dGoyRUVESzhYVzZLMnNKaFhCOWZTZEQzTXlvOHMxbU1WdnV4?= =?utf-8?B?VS8zbEFHYjJqUzh3SlBPc3BpUGRkVVNCK1R0WkZGUGhRYVk4RWl3N2I2RlZy?= =?utf-8?B?dWhKWHNXcDZ1YUI2WnBNM09LNUV5T2hCU0QrTzk3MktsSjJJMXBRZGI3L0tu?= =?utf-8?B?Zy9GMHN0T1JkUTlmUXI0Y2NEZWxWQUJmTDF4YUNkK3ozMEZYQWlhWENrM3JQ?= =?utf-8?B?RE1jZ1J5bDJjYVVJVXBIUEdOeExScVhHSVdNMk15ZDBnYytJOUJ2c2xXdFhi?= =?utf-8?B?L1h2cCtyL0JBRUZ3a2cwYVdFT1M3eWxRZnVFOXVnZ2xjU0pLVGZucVdQOWRy?= =?utf-8?B?VCtpZk9sUEU3ZlUzNlRvV2J4aWtXVE1kVklXV2Ridk5tazBSYnlsbEhKa0JB?= =?utf-8?B?eWUwTUl6ZXhreUFJT0lhOXNZUmJJeEMxSUVEcGdhZmNwS1lqVklBc3pXT2pl?= =?utf-8?B?N3VhWTc2NDdaUXl0dG5Ca2grWlVzYnk1NTA3eEROajBQZXZLaTgyMStEVUlo?= =?utf-8?Q?ACZQicQ8/PG/b6NM=3D?= X-Exchange-RoutingPolicyChecked: Slams6LsLzCRzXnDAeXsFypqhUzrTLdzGp2xNncfX1e07U+UqYWlTz35exSkxXyAoL3k2hktiOfaoiJl35ivXSkshrCRyondreKcmhzJ7ycWfo3hbsh15LCYogRHPnEmT16YSN7lXeyGGW1lK9DxCZ9HJHE98tHde7e/n0eejVKQVegWnjTmfZvUmbHTRnv2+tbDSnNB6wMX2XBJs1hB1do7yO2hYfgC8gcTsD+F7eQ3UADd3Tusk1cUScH0q3XvHWC545qU5+yY9jWJZAfgMDWGss2LoXlQS5VWqlsUPycLjbi/JVzoKU5x6ges70kGz4fWkTeZSENsx/hvu1h7sg== X-MS-Exchange-CrossTenant-Network-Message-Id: a172fd0a-f88f-4fbf-a7c1-08de8bf4c906 X-MS-Exchange-CrossTenant-AuthSource: IA1PR11MB7198.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 11:34:19.5843 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L/hXscI3ZGIjwThHFqeGrjoVcBjF4r+u5fhtvSGMrA3hO1WwGhF31TZytcWl1OH3LFUOX7AJfuakaiU4CmkUUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB5156 X-OriginatorOrg: intel.com On 27/03/2026 13:28, Shawn Lin wrote: > Hi Adrian > > 在 2026/03/27 星期五 17:29, Adrian Hunter 写道: >> On 27/03/2026 09:51, Shawn Lin wrote: >>> The driver previously used an enum (dwcmshc_rk_type) to distinguish >>> platforms like the RK3568 and RK3588 based on DT compatible names. >>> This approach is inflexible, scales poorly for future revisions or >>> mixed-revision platforms, and conflates SoC names with controller >>> revisions. >>> >>> Introduces a new struct rockchip_pltfm_data containing a dedicated >>> revision field. The old enum is removed, and all code paths are >>> updated to use the revision-based data. >>> >>> Signed-off-by: Shawn Lin >>> --- >>> >>>   drivers/mmc/host/sdhci-of-dwcmshc.c | 87 ++++++++++++++++++++++--------------- >>>   1 file changed, 52 insertions(+), 35 deletions(-) >>> >>> diff --git a/drivers/mmc/host/sdhci-of-dwcmshc.c b/drivers/mmc/host/sdhci-of-dwcmshc.c >>> index a91b3e7..6b43ba9 100644 >>> --- a/drivers/mmc/host/sdhci-of-dwcmshc.c >>> +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c >>> @@ -278,14 +278,8 @@ >>>   #define PHY_DELAY_CODE_EMMC        0x17 >>>   #define PHY_DELAY_CODE_SD        0x55 >>>   -enum dwcmshc_rk_type { >>> -    DWCMSHC_RK3568, >>> -    DWCMSHC_RK3588, >>> -}; >>> - >>>   struct rk35xx_priv { >>>       struct reset_control *reset; >>> -    enum dwcmshc_rk_type devtype; >>>       u8 txclk_tapnum; >>>   }; >>>   @@ -330,6 +324,11 @@ struct k230_pltfm_data { >>>       u32 write_prot_bit; >>>   }; >>>   +struct rockchip_pltfm_data { >>> +    struct dwcmshc_pltfm_data dwcmshc_pdata; >>> +    int revision; >> >> Does this "revision" match HW specs, otherwise maybe need >> to clarify where it comes from. >> > > This "revision" originates from our internal IP development > documentation, not the public chip specifications. The public manuals do not label these specific IP versions. > > Revision 0 (Initial IP): This is the initial version of the IP used in > the RK3568 and RK3566. Post-silicon validation identified certain errata > requiring workarounds, and this version lacks HS400 support. > > Revision 1 (Fixed IP): This is the updated IP version (with > documentation number updated internally). It fixes the previous issues > and adds HS400 support. This revision is used in all subsequent chips > (RK3576, RK3588, etc.). > > Since the public specs do not expose this distinction, I believe using > the internal IP development document revision is the most accurate way > to differentiate the hardware behavior in software. I will add a comment > in the code to clarify this origin and the specific differences between > the revisions. > >>> +}; >>> + >>>   static void dwcmshc_enable_card_clk(struct sdhci_host *host) >>>   { >>>       u16 ctrl; >>> @@ -749,6 +748,7 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock >>>       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); >>>       struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host); >>>       struct rk35xx_priv *priv = dwc_priv->priv; >>> +    const struct rockchip_pltfm_data *rockchip_pdata = to_pltfm_data(dwc_priv, rockchip); >>>       u8 txclk_tapnum = DLL_TXCLK_TAPNUM_DEFAULT; >>>       u32 extra, reg; >>>       int err; >>> @@ -816,7 +816,7 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock >>>        * we must set it in higher speed mode. >>>        */ >>>       extra = DWCMSHC_EMMC_DLL_DLYENA; >>> -    if (priv->devtype == DWCMSHC_RK3568) >>> +    if (rockchip_pdata->revision == 0) >>>           extra |= DLL_RXCLK_NO_INVERTER << DWCMSHC_EMMC_DLL_RXCLK_SRCSEL; >>>       sdhci_writel(host, extra, DWCMSHC_EMMC_DLL_RXCLK); >>>   @@ -842,7 +842,7 @@ static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock >>>           host->mmc->ios.timing == MMC_TIMING_MMC_HS400) >>>           txclk_tapnum = priv->txclk_tapnum; >>>   -    if ((priv->devtype == DWCMSHC_RK3588) && host->mmc->ios.timing == MMC_TIMING_MMC_HS400) { >>> +    if ((rockchip_pdata->revision == 1) && host->mmc->ios.timing == MMC_TIMING_MMC_HS400) { >>>           txclk_tapnum = DLL_TXCLK_TAPNUM_90_DEGREES; >>>             extra = DLL_CMDOUT_SRC_CLK_NEG | >>> @@ -898,11 +898,6 @@ static int dwcmshc_rk35xx_init(struct device *dev, struct sdhci_host *host, >>>       if (!priv) >>>           return -ENOMEM; >>>   -    if (of_device_is_compatible(dev->of_node, "rockchip,rk3588-dwcmshc")) >>> -        priv->devtype = DWCMSHC_RK3588; >>> -    else >>> -        priv->devtype = DWCMSHC_RK3568; >>> - >>>       priv->reset = devm_reset_control_array_get_optional_exclusive(mmc_dev(host->mmc)); >>>       if (IS_ERR(priv->reset)) { >>>           err = PTR_ERR(priv->reset); >>> @@ -2115,30 +2110,52 @@ static const struct cqhci_host_ops rk35xx_cqhci_ops = { >>>       .set_tran_desc    = dwcmshc_set_tran_desc, >>>   }; >>>   -static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = { >>> -    .pdata = { >>> -        .ops = &sdhci_dwcmshc_rk35xx_ops, >>> -        .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | >>> -              SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, >>> -        .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | >>> -               SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, >>> +static const struct rockchip_pltfm_data sdhci_dwcmshc_rk3568_pdata = { >>> +    .dwcmshc_pdata = { >>> +        .pdata = { >>> +            .ops = &sdhci_dwcmshc_rk35xx_ops, >>> +            .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | >>> +                  SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, >>> +            .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | >>> +                   SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, >>> +        }, >>> +        .cqhci_host_ops = &rk35xx_cqhci_ops, >>> +        .init = dwcmshc_rk35xx_init, >>> +        .postinit = dwcmshc_rk35xx_postinit, >>>       }, >>> -    .cqhci_host_ops = &rk35xx_cqhci_ops, >>> -    .init = dwcmshc_rk35xx_init, >>> -    .postinit = dwcmshc_rk35xx_postinit, >>> +    .revision = 0, >>>   }; >>>   -static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk3576_pdata = { >>> -    .pdata = { >>> -        .ops = &sdhci_dwcmshc_rk35xx_ops, >>> -        .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | >>> -              SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, >>> -        .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | >>> -               SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, >>> +static const struct rockchip_pltfm_data sdhci_dwcmshc_rk3588_pdata = { >> >> Better order: sdhci_dwcmshc_rk3568_pdata, sdhci_dwcmshc_rk3576_pdata, >> sdhci_dwcmshc_rk3588_pdata > > > Sure, will do. > >> >>> +    .dwcmshc_pdata = { >>> +        .pdata = { >>> +            .ops = &sdhci_dwcmshc_rk35xx_ops, >>> +            .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | >>> +                  SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, >>> +            .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | >>> +                   SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, >>> +        }, >>> +        .cqhci_host_ops = &rk35xx_cqhci_ops, >>> +        .init = dwcmshc_rk35xx_init, >>> +        .postinit = dwcmshc_rk35xx_postinit, >>> +    }, >>> +    .revision = 1, >>> +}; >>> + >>> +static const struct rockchip_pltfm_data sdhci_dwcmshc_rk3576_pdata = { >>> +    .dwcmshc_pdata = { >>> +        .pdata = { >>> +            .ops = &sdhci_dwcmshc_rk35xx_ops, >>> +            .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | >>> +                  SDHCI_QUIRK_BROKEN_TIMEOUT_VAL, >>> +            .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | >>> +                   SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, >>> +        }, >>> +        .cqhci_host_ops = &rk35xx_cqhci_ops, >>> +        .init = dwcmshc_rk35xx_init, >>> +        .postinit = dwcmshc_rk3576_postinit, >>>       }, >>> -    .cqhci_host_ops = &rk35xx_cqhci_ops, >>> -    .init = dwcmshc_rk35xx_init, >>> -    .postinit = dwcmshc_rk3576_postinit, >>> +    .revision = 1, >> >> Isn't rk3576 revision = 0 ? > > As explained above, rk3576 is revision 1. Ok, but was it behaving that way before, since the code was: if (of_device_is_compatible(dev->of_node, "rockchip,rk3588-dwcmshc")) priv->devtype = DWCMSHC_RK3588; else priv->devtype = DWCMSHC_RK3568; > >> >>>   }; >>>     static const struct dwcmshc_pltfm_data sdhci_dwcmshc_th1520_pdata = { >>> @@ -2309,7 +2326,7 @@ static const struct of_device_id sdhci_dwcmshc_dt_ids[] = { >>>       }, >>>       { >>>           .compatible = "rockchip,rk3588-dwcmshc", >>> -        .data = &sdhci_dwcmshc_rk35xx_pdata, >>> +        .data = &sdhci_dwcmshc_rk3588_pdata, >>>       }, >>>       { >>>           .compatible = "rockchip,rk3576-dwcmshc", >>> @@ -2317,7 +2334,7 @@ static const struct of_device_id sdhci_dwcmshc_dt_ids[] = { >>>       }, >>>       { >>>           .compatible = "rockchip,rk3568-dwcmshc", >>> -        .data = &sdhci_dwcmshc_rk35xx_pdata, >>> +        .data = &sdhci_dwcmshc_rk3568_pdata, >>>       }, >>>       { >>>           .compatible = "snps,dwcmshc-sdhci", >> >>