From patchwork Tue Jun 10 10:03:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heikki Krogerus X-Patchwork-Id: 895400 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.10]) (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 6B65528C5BD; Tue, 10 Jun 2025 10:03:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749549802; cv=none; b=L7WvirS9rVA+oMUIYFMYkeOuepn6yTphHqX6cMCwTrJHnuRiCRd80/6JZnJHEs+hZPWuqfUdaWg8fz6OqdTmDEH5diJZ9FwwJVQdd0/rbRkcXQQ4sLueGxwNbrFsyd46jmHORJiKdn1GCUbVy/jnbk9w8+97hYblqgmSmcANkaQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749549802; c=relaxed/simple; bh=iqEDmdG2OnLw9ZoUL2w0OrFC9T4bXQ2J9xxHW97zYHc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qsu9l/5WoUthrnuLEd9p2CjMrkKEA6FaO78Nz5CyhxdQCmKvRxbGiOhPaTs4hEz8idul7HVBWWItGcbnDM4a5TOaqDFI/EdxmD99/fo014Kcf+w3zRU2DhnnwcsMD2JV1y6rJQG/W+j+jz+p4YoCZL66SH2+Dc3inSFTkN8cgBI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=n/VfyV+M; arc=none smtp.client-ip=198.175.65.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="n/VfyV+M" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1749549801; x=1781085801; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=iqEDmdG2OnLw9ZoUL2w0OrFC9T4bXQ2J9xxHW97zYHc=; b=n/VfyV+MzpThSX1PfL00ihBCPLtlC7rrP11zykyNk9OlufpQFtWHAFUg Oi4yjVNNXgcuo1It0L5cmx9EYOW+aET4kugEQ2sneuQH5kV4cuvja53hh jpeKcDawcqzcEbF8++48hBLEh5FDeR/yG3nRwLi6DBgsvF0Qxu7cQpg8j twTY1f5DlLk9oTiYlvfzsw0v9qxG0MjWb90aZzSgPPvZrH86Ldp17CvUZ aw6Sq1vMt2Y9AZwmbZuRnZlHF2VZkUw8ADjEslRqhvUrm2KkdeJcy+SWk WC5nFELE/BSvLeE6xTvWePxSxgOWvmbLlnJA8en6x8aeT7xQQHu3guS9k A==; X-CSE-ConnectionGUID: J1MANqFuTMeouDmUHuhd5Q== X-CSE-MsgGUID: KN863q8bTWiurwJGjyggqA== X-IronPort-AV: E=McAfee;i="6800,10657,11459"; a="69094532" X-IronPort-AV: E=Sophos;i="6.16,224,1744095600"; d="scan'208";a="69094532" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by orvoesa102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2025 03:03:21 -0700 X-CSE-ConnectionGUID: YOTf3KbZT2eR0ykY3wFuJw== X-CSE-MsgGUID: k37ts6yERRyK2YA1G+f+qQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,224,1744095600"; d="scan'208";a="147295316" Received: from black.fi.intel.com (HELO black.fi.intel.com.) ([10.237.72.28]) by fmviesa010.fm.intel.com with ESMTP; 10 Jun 2025 03:03:16 -0700 From: Heikki Krogerus To: Lucas De Marchi , =?utf-8?q?Thomas_Hellstr?= =?utf-8?q?=C3=B6m?= , Rodrigo Vivi , Jarkko Nikula Cc: David Airlie , Simona Vetter , Andy Shevchenko , Mika Westerberg , Jan Dabros , Andi Shyti , Raag Jadav , "Tauro, Riana" , "Adatrao, Srinivasa" , "Michael J. Ruhl" , intel-xe@lists.freedesktop.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/4] i2c: designware: Add quirk for Intel Xe Date: Tue, 10 Jun 2025 13:03:07 +0300 Message-ID: <20250610100311.2245871-2-heikki.krogerus@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250610100311.2245871-1-heikki.krogerus@linux.intel.com> References: <20250610100311.2245871-1-heikki.krogerus@linux.intel.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The regmap is coming from the parent also in case of Xe GPUs. Reusing the Wangxun quirk for that. Originally-by: Michael J. Ruhl Signed-off-by: Heikki Krogerus Acked-by: Jarkko Nikula --- drivers/i2c/busses/i2c-designware-platdrv.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c index 879719e91df2..a35e4c64a1d4 100644 --- a/drivers/i2c/busses/i2c-designware-platdrv.c +++ b/drivers/i2c/busses/i2c-designware-platdrv.c @@ -101,7 +101,7 @@ static int bt1_i2c_request_regs(struct dw_i2c_dev *dev) } #endif -static int txgbe_i2c_request_regs(struct dw_i2c_dev *dev) +static int dw_i2c_get_parent_regmap(struct dw_i2c_dev *dev) { dev->map = dev_get_regmap(dev->dev->parent, NULL); if (!dev->map) @@ -123,12 +123,15 @@ static int dw_i2c_plat_request_regs(struct dw_i2c_dev *dev) struct platform_device *pdev = to_platform_device(dev->dev); int ret; + if (device_is_compatible(dev->dev, "intel,xe-i2c")) + return dw_i2c_get_parent_regmap(dev); + switch (dev->flags & MODEL_MASK) { case MODEL_BAIKAL_BT1: ret = bt1_i2c_request_regs(dev); break; case MODEL_WANGXUN_SP: - ret = txgbe_i2c_request_regs(dev); + ret = dw_i2c_get_parent_regmap(dev); break; default: dev->base = devm_platform_ioremap_resource(pdev, 0); @@ -205,25 +208,28 @@ static void i2c_dw_remove_lock_support(struct dw_i2c_dev *dev) static int dw_i2c_plat_probe(struct platform_device *pdev) { + u32 flags = (uintptr_t)device_get_match_data(&pdev->dev); struct device *device = &pdev->dev; struct i2c_adapter *adap; struct dw_i2c_dev *dev; int irq, ret; - irq = platform_get_irq(pdev, 0); - if (irq < 0) + irq = platform_get_irq_optional(pdev, 0); + if (irq == -ENXIO) + flags |= ACCESS_POLLING; + else if (irq < 0) return irq; dev = devm_kzalloc(device, sizeof(*dev), GFP_KERNEL); if (!dev) return -ENOMEM; - dev->flags = (uintptr_t)device_get_match_data(device); if (device_property_present(device, "wx,i2c-snps-model")) - dev->flags = MODEL_WANGXUN_SP | ACCESS_POLLING; + flags = MODEL_WANGXUN_SP | ACCESS_POLLING; dev->dev = device; dev->irq = irq; + dev->flags = flags; platform_set_drvdata(pdev, dev); ret = dw_i2c_plat_request_regs(dev);