From nobody Mon Feb 9 01:48:50 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DDE4F2690F2 for ; Mon, 5 May 2025 17:42:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466930; cv=none; b=cBmtnH/YXjh280ITBGxd/GkHLsf0fcI4MM7zg9DPSTjqiIoTKd6V8Y/h+x2/IzsHaQwTXK9n6MT5F7q0810Bu6oh2mxexWXW1Lj0eqt9TLLPUZxCLJCpaV3lX7PhypSlSjzh7djhIM8VWypFuW/RZ3XfGH5MyMakVYipR3gDF4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466930; c=relaxed/simple; bh=fAH11pHsRrYKcysroQjLM8Q9UwAmjfM3znAZKnmfIi8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f5kGi0hFUUa54ukVZ6CcIQzEUdhQcNsyfVeQi4KR6J0E5QgdfhiK/HkmRMzrAGxS3n+ZbO5lsYQMO6UTijkdvanct1DSJ4SnJG5SIBbKx8xxsQQlRBZGcUvUpK8Djekgj1IF3MZdT/BUjQcrHlpgPqJJRuDkpVzmXxtaA8/ReVU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=I411hL8P; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="I411hL8P" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-39c266c1389so3483110f8f.1 for ; Mon, 05 May 2025 10:42:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1746466926; x=1747071726; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+RjSK5+oOhqZKQ0oK0twEFsYWTKP2YoDTHH/eJYqDLQ=; b=I411hL8P9bibRZoMbu52yEjnvCF6kAmIchHnNoTP6/TqNQWeQEKlw5UY5RW1j9I/UG Pk0wABnp2ASWeB7xc/qRADcxa1G98nylvxf9VEeb1yspaucfBWX9UDlJU3C5dKcpKV2N NYZUDcbt+v6cj1hmUsZvHymXaMPopcVvvbktEDXJ/zIkhsKfy+LFxIDOM6SpfJksNREO 7RBFZ/fLsDSkGC1N4dZodQp9CLkI0mrtXkQe7eXCgyasWbUZtU2cYcT3q6azFF2loG3G E2KGAEJjxy7v5TB1xNyH4T2QUey4HiOzVgwfdx3WyoeQUvtY6p6MNXanKZFuhXjO9AAc ObFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746466926; x=1747071726; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+RjSK5+oOhqZKQ0oK0twEFsYWTKP2YoDTHH/eJYqDLQ=; b=VgiuaFJ9qfgZxtgSYo+yYocKEwyexlFQHStNNENEjHsULIzI05Nv5Eo39YcGDxAtO8 fElqikiclK6S+fPpUiqsNiaKoTYGJ1jrueC3T0zcfiu7kSJ+CdJQuQeoSN+HHwrGpBI7 nL9NeHG9MkaEhMbObIuvCwTuwrTitbvGyjqYEEEZkr04WF291/dBr5asY2LI42j4FLlJ 3C1z7Z1nTaannG/w1pltcxcHTis7qBnIU349G+H0ZZ3zK4dNSsPNKhIjvNYtVDFyCQes xSKoWSzFfT60M94lM7N0Ka6w0sA51ndnR6r7/ka+rS1lsPSG2cUi0ylWwDz0w3wMzzmU ioyw== X-Forwarded-Encrypted: i=1; AJvYcCWrPc9pJxXefBMIWXOZ/2ntAXxRvoPMM9MGsREa/hdE05qKDGT0n5JJajeBtODbSY7B92l6L9K/TtYnjns=@vger.kernel.org X-Gm-Message-State: AOJu0YzfkfsNs4kxehRPWAd1U4zyxYYTF/svz774mErls82BS6Gcs8RD nSdZhSw3TOiDTAxVeBhuuMnaglhs5MefKeJ7NEURLbvrSVhv970IRnquWhyAq5g= X-Gm-Gg: ASbGncsyzzbUpzDTp70M26po2XbCf1O9YGOBJIgyVKmEjjqRHFGtpS+8D6GuY2QhXU5 Cr+mEX3+41qTKHhtk7e1g6wv4fle8pGle9I6A17pnYq69I0+5OfpN/vUbLCKDqVWr69OlHyEZ2I 1OIFX5Ct3v7oC9MbRC1Wx/oSgY0fkiMa2DHaVxUeJUOlmR1ENlwv0NGP11zC62w3toqtXNHlDxL IX2UCrhDsnSoX6mcWnL6nbpLoCosHDJAwA0GuKyBZPtuodgfKae1A8oBPZPMR2PU7lSWiONR+TV +4T2wPYA4yj1hyuiH1pJ1q2owBvthHzCr3TXQ9+0YJNXyHTC2PxjfQ== X-Google-Smtp-Source: AGHT+IGAYa+if0CukQnbgX4pEVrN5Xsiai21uC7+G5ERCrGhLg5b+LFY/FpMStNNjBLuuOjsvZ9R8Q== X-Received: by 2002:a05:6000:420e:b0:38f:2678:d790 with SMTP id ffacd0b85a97d-3a09fd7c855mr6686785f8f.33.1746466926206; Mon, 05 May 2025 10:42:06 -0700 (PDT) Received: from toaster.baylibre.com ([2a01:e0a:3c5:5fb1:dc81:e7a:3a49:7a3b]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3a099b0efbfsm11345829f8f.69.2025.05.05.10.42.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 10:42:05 -0700 (PDT) From: Jerome Brunet Date: Mon, 05 May 2025 19:41:47 +0200 Subject: [PATCH 1/4] PCI: endpoint: pci-epf-vntb: return an error code on bar init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-pci-vntb-bar-mapping-v1-1-0e0d12b2fa71@baylibre.com> References: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> In-Reply-To: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> To: Jon Mason , Dave Jiang , Allen Hubbe , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Frank Li Cc: ntb@lists.linux.dev, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1058; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=fAH11pHsRrYKcysroQjLM8Q9UwAmjfM3znAZKnmfIi8=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBoGPhoKlIvsdmRmR9d6/kM75+1NA+V25FqgfZ4A LjBSUdeufeJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaBj4aAAKCRDm/A8cN/La hWvCEACJQ3glDx7dWhKRBd+uiK+/HZdut2ULVasmSE/3OzCr5HaDdpm5oFp1p/SPpmW/13cgqIR ju1V858zABuU9lVRidP/F6No+RTJfhh2lRQRLAFJ7y796sHXI96Wnky6L+g3nloKQQ557hwSITC nIfr8pW2RffnHuorPF4sr0W7gzKLAIEOJaxeGn2EAYFThw0vJmjLnHcAzpKlu2gNqRUsV6UokrB QMWj+UrP9UNAQ9fryuVyxCOW+JtIbjmTNno/1bjwWPEs3tG+MswgbT7UCFBl5KBNtmD3QWUyt4x XEniJy1KhdE/8AvcBfctFTMM8dZpY6P1cTQAukOThQbd3Pxrd9eq/jG5t1tP2vMxF3BFETc5mt1 PA349TzY8INQGg2vQJvRE7nfneZSM/++WL/z5Hf9oa6fLO1ztBIvuJghyfNjYXKYJDD+VMMPc20 nwan4o5n+1O7DR+qMMwaaI5JDLFOnUQ/NegzCtUR6t0kgXd4xOiI+kBScwwMmeulsE+pX7jVxMN s1a4kUeYqC3unYWS5WdD9Otwqw2abNqWYhiAS0o9s+O0MT2mPLJ1ndYYuOv/Ytjz05t+5EEi84T 0ZnPAcYq11sHoEg1ECjqdj4ayc4axe8FqKUyKI3eUSH2r65VOleE2GX3Tij5tF7j3ANz1GUtLL6 VfwZygZfa1KIWNg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 According the function documentation of epf_ntb_init_epc_bar(), the function should return an error code on error. However, it returns -1 when no BAR is available. Return -EINVAL instead. Fixes: e35f56bb0330 ("PCI: endpoint: Support NTB transfer between RC and EP= ") Signed-off-by: Jerome Brunet Reviewed-by: Frank Li --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index e4da3fdb000723e3adad01f0ddf230ecc0e572a7..35fa0a21fc91100a5539bff775e= 7ebc25e1fb9c1 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -680,7 +680,7 @@ static int epf_ntb_init_epc_bar(struct epf_ntb *ntb) barno =3D pci_epc_get_next_free_bar(epc_features, barno); if (barno < 0) { dev_err(dev, "Fail to get NTB function BAR\n"); - return barno; + return -EINVAL; } ntb->epf_ntb_bar[bar] =3D barno; } --=20 2.47.2 From nobody Mon Feb 9 01:48:50 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE7DF26B978 for ; Mon, 5 May 2025 17:42:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466930; cv=none; b=J7GdQJYKg3/xOVX9pnXp7FAhqyunJKMex1266rbZulpjgbbaKSQLxs7I3omBPMFo2z2pqKE30Krv9Np2YIlPlCYScgXsb1+FVQnpepDQF2i/j3/UYkwYMgviyLvNpse6MULrZcqxbtcLYZpe3vVCIvSJpmYj3opAwYbijGNKtfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466930; c=relaxed/simple; bh=qyM1aZTG9d6MOwjR/qspKtycZJprSidmxi28fR4mEFg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nR56rzJOym2U9kGZfycxdI37Igwz2ncLm5FKXomJRqFL6oJwuCFGoH96VjoVVVEYy5rEF4x2EmVvhSueslaeRdCZXzj1BP25MJPSbic/gyh34kwAMcmvu0FoByg5glBEAOOsI9gORUaSVmEPuA+PVRjAm7vG8SZK+lxtkDOjzOg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=nfOO6VlY; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="nfOO6VlY" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-39141ffa9fcso5057747f8f.0 for ; Mon, 05 May 2025 10:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1746466927; x=1747071727; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=J3LBY8kEk9gi4o8XX/rUOgzd9iIiBOazH7vpEqQ3lP0=; b=nfOO6VlYQF/EeJJabgK3JW36VANqT2Wlz+f1Qs1tmGJNeOOUCgRBc2ACNmvjDDwodY OWZzMyyuhPvjUulzIRlTnMi0ARd2vMiVAT0lOJnPnfF6FOLdDWpziRyLZ7g5UtBhWoGD kwFFGxq7fh3xgK0Y7xSSjOk/ZicTJyuaTUVd7rTmDDdjn9tSRmm1snwUU0PTI6cTAY9y R02CGQXo0yVvoD7zmp4ZwmxTSb+moA6DXNx+5l1kzTFc9HE0XYeLvePERn0DBPJ5RzFe BvEo8KzJACywPk1+DQNYCq/Pp2MQXTaaXNLsc/AlDhaEXzrnvGxoAWrVg9Z0WZj2TfoD eTKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746466927; x=1747071727; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J3LBY8kEk9gi4o8XX/rUOgzd9iIiBOazH7vpEqQ3lP0=; b=F4LaLglIb7usUgSMHp5eavmGnlySaAY5Gg5k6n7Gtx1+NBmKMG+EgZpmdHfDd9G9eQ RWXLejBQtmw8mswAhMuxFTR1mlnVnirg0ypeMEuvl8lTJo8PKpzXpIUM65N+Ac1wQ4BK pwUncgaXpMryOA+jA+x50xshNrJzFYScqJBF6yHsXlF5nckd+2SzIPtGXl4Me05+mylA +l0yCVeFOccgPbq3GetFmJxZjhy04Jl95e0ElDmvmaDWgMdKXoqUbxRtLILPv11uwNtk WJqP8gBFdqJjTlpOjbzhMIV0HP8PA/kPeMGZOhUuH3a7n9PLL43gcGiENWBeuduQt0dY tDeA== X-Forwarded-Encrypted: i=1; AJvYcCXE1SFWjRPaWuwF8eYf68N5CCVPZpx/3X/3cUp63IeRRHLWHwRQPx5HCynfY3N08w0OwVNU9XN22kUueBI=@vger.kernel.org X-Gm-Message-State: AOJu0YwHJnFJLsbHc0iWGccoKhL5WYft4kEnF5lVAanLtexi+EKDZDos 04cH0fAPsrJMbCXLGm/eJa1URqCfy4u7lEjSNHaPAuFScMxO7U+A9p71eJpzzyu85l6LgyPIBrJ o X-Gm-Gg: ASbGncv39BS+5xpHGrwzHqTwThg7RoEQw2m7HZrI0XeSp8OQk/Nec6N5fYzxxjj+Awc 8WU/P0sAP5iWuTtnRlE4N4EErwqLJNqbUN16R+cQscp/T6dQ0CereJqm/jerXl41Ap2gZJWvQh5 uFAm0NLPoCgYETOvvnCUxBLEA3kLB/WHmVgMkUXTJw2D6K6nBwOJhF9d7alcTQFIB3pTGAvV8rJ EAIELj7Vu/2N2jQc3dwi4OzpRrBj7QF6QShK08cUm7FiH/fBBeEB36wbTZVZWusps0gXRAvPpDq 3HZxw76fhYcJRpQXJN5LaJBoxl1pSsHoG2XWWjm5m7ZoDv+v/lmlkQ== X-Google-Smtp-Source: AGHT+IF3UDYv5RkphgGj8Lc6CvGE7Xu3M0hl7sTbGqxmHG0EE/jkSjD3603rUOunex+bJISfmCMesA== X-Received: by 2002:a5d:64cd:0:b0:3a0:8331:3380 with SMTP id ffacd0b85a97d-3a09cea693dmr6651442f8f.8.1746466926987; Mon, 05 May 2025 10:42:06 -0700 (PDT) Received: from toaster.baylibre.com ([2a01:e0a:3c5:5fb1:dc81:e7a:3a49:7a3b]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3a099b0efbfsm11345829f8f.69.2025.05.05.10.42.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 10:42:06 -0700 (PDT) From: Jerome Brunet Date: Mon, 05 May 2025 19:41:48 +0200 Subject: [PATCH 2/4] PCI: endpoint: pci-epf-vntb: align mw naming with config names Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-pci-vntb-bar-mapping-v1-2-0e0d12b2fa71@baylibre.com> References: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> In-Reply-To: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> To: Jon Mason , Dave Jiang , Allen Hubbe , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Frank Li Cc: ntb@lists.linux.dev, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2573; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=qyM1aZTG9d6MOwjR/qspKtycZJprSidmxi28fR4mEFg=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBoGPhp/L+P2VULngOx5WQ0FytTBC13S2IpX/kyf rhqp5Vhb1mJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaBj4aQAKCRDm/A8cN/La hZDaEACyUbFbc9jDGPkGRgRbI2ANesSAAiw/c8EgwKetMd3ukPITJo3PCzD2oL0aGM3bHF29jZ0 f8JyjmtHRCg9YB/Qmf7EcDSsLQTIH18xFTnFbRfJoeamxOFwya1ZXWw0fEO+lxj4aaF3g1Y66ao BeVLV4NzCBb2zsq/jgxV6DBIsqnwLLtbBZQXtCZO3b6cYv69TsvtreFZfccbbS/zuQmwKK+FVGf jchYdxCz00h8j8UBDC5xDmMWOW2cVaaQbvn4TlHXd2bbqv638knmpa34SK8NskDcRRn4SynD5md 4FQga18Wbq62NXuhQ8GeEjHecprS/M9DvX1Oyzfde47I+kYXTKYJiVACKvVuIem1hOCMabRYC7+ iJDSfG6DLS75ecJdKyJyrJ/EqVtRiudQPXFCQCWXaZVmISU2BjNcb3httVvOGeW7JfvWE2PUzDW Op51YiDHwtNMjIBsBeJwd7+qqy3fdEAkMjh7XrOD3+IYYdmDQqO+FdFIVg3nZsNgBEtlyqguYiG 1YYWYf8lqp+kIi4HwFQTJOkjZLw+vppXpuNFHx2LX+WGEkY1wnPMFNOzkJNPNmbNi8az8BbbO1k Zp8Xqjw424aoIl//71+AxbA1EYWBMlNjL2oOCSLrXHfOwCTd9fkwQw/DHewRqxhM4aaXIGs3FzZ nCBEtVJzoQXIV2A== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 The config file related to the memory windows start the numbering of the MW from 1. The other NTB function does the same, yet the enumeration defining the BARs of the vNTB function starts numbering the MW from 0. Both numbering are fine I suppose but mixing the two is a bit confusing. The configfs file being the interface with userspace, lets keep that stable and consistently start the numbering of the MW from 1. Signed-off-by: Jerome Brunet --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 35fa0a21fc91100a5539bff775e7ebc25e1fb9c1..f9f4a8bb65f364962dbf1e9011a= b0e4479c61034 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -70,9 +70,10 @@ static struct workqueue_struct *kpcintb_workqueue; enum epf_ntb_bar { BAR_CONFIG, BAR_DB, - BAR_MW0, BAR_MW1, BAR_MW2, + BAR_MW3, + BAR_MW4, }; =20 /* @@ -576,7 +577,7 @@ static int epf_ntb_mw_bar_init(struct epf_ntb *ntb) =20 for (i =3D 0; i < ntb->num_mws; i++) { size =3D ntb->mws_size[i]; - barno =3D ntb->epf_ntb_bar[BAR_MW0 + i]; + barno =3D ntb->epf_ntb_bar[BAR_MW1 + i]; =20 ntb->epf->bar[barno].barno =3D barno; ntb->epf->bar[barno].size =3D size; @@ -629,7 +630,7 @@ static void epf_ntb_mw_bar_clear(struct epf_ntb *ntb, i= nt num_mws) int i; =20 for (i =3D 0; i < num_mws; i++) { - barno =3D ntb->epf_ntb_bar[BAR_MW0 + i]; + barno =3D ntb->epf_ntb_bar[BAR_MW1 + i]; pci_epc_clear_bar(ntb->epf->epc, ntb->epf->func_no, ntb->epf->vfunc_no, @@ -676,7 +677,7 @@ static int epf_ntb_init_epc_bar(struct epf_ntb *ntb) epc_features =3D pci_epc_get_features(ntb->epf->epc, ntb->epf->func_no, n= tb->epf->vfunc_no); =20 /* These are required BARs which are mandatory for NTB functionality */ - for (bar =3D BAR_CONFIG; bar <=3D BAR_MW0; bar++, barno++) { + for (bar =3D BAR_CONFIG; bar <=3D BAR_MW1; bar++, barno++) { barno =3D pci_epc_get_next_free_bar(epc_features, barno); if (barno < 0) { dev_err(dev, "Fail to get NTB function BAR\n"); @@ -1048,7 +1049,7 @@ static int vntb_epf_mw_set_trans(struct ntb_dev *ndev= , int pidx, int idx, struct device *dev; =20 dev =3D &ntb->ntb.dev; - barno =3D ntb->epf_ntb_bar[BAR_MW0 + idx]; + barno =3D ntb->epf_ntb_bar[BAR_MW1 + idx]; epf_bar =3D &ntb->epf->bar[barno]; epf_bar->phys_addr =3D addr; epf_bar->barno =3D barno; --=20 2.47.2 From nobody Mon Feb 9 01:48:50 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86C0C26C397 for ; Mon, 5 May 2025 17:42:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466931; cv=none; b=Uj6oX7B2DTD2RnA0ENIGjKt8rJrWJcsaXuT8jYSkcNdHAD9RvuwtaIMAWPvpq5x8/2tLkCEAtmaxptDJyt+AJMuzdnOqtbVXNNXuI6hqZCowtD1rEx7tgZqzZ+omnvpb9Peu0t29diDW586yerpEJ+JTHpxoJVgZLJHs2EUcdvo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466931; c=relaxed/simple; bh=wzhUOn6SQXmsn4tPkIwKptxiv30cDD2SlgD0U7jzTY8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CFXBlFdjGzVsOtuR56G7z0mTynAuSBP4VmWtSpOL6rsvuU7vSdmpf8ByXnx2RuUXxu0VRfRUSReT7gHdAXMzR8by7+5GmsSKiFHNdiX1BFQF8oCRVUKSHsHpp5Fa12pEWZCa4G5QV4j9Nl7wPSeNYTmnWiyuItfLtTUcLKErln8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=pCIUomfj; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="pCIUomfj" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43cf680d351so29348765e9.0 for ; Mon, 05 May 2025 10:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1746466928; x=1747071728; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=OXzvNAVi4jxM1YBH1FVi5GE9G6myG9TL0qRERDXaLKg=; b=pCIUomfjXQJ3NMw0nSlMq/A5wcAEYQEYM+gUkZIBzg5Z4G+rYpSHci0gcojGI82pYj UfmqM3EVBKO7sxPV9s3xHAbF9wpfP5LbRvT6aVyVFp9uyamrEBSZFBpYnGOGTHuHFKPX GT2vqA5QbBOQgIbM9tk7PxeAK/cyrYblmt8/hjTIzaApcE/UQHEqzuVNhkaSW/vWjG/n GQvl7xkEF3cILgkCdWeUMJOKV0RExYHXKI2xL3B24MgWRYSZ5u0KXSEOkIc8JyYf+vmZ 35ezp+gbjQgABp5nD4o+cesyP3s/5E63KNU/5ZLyZA73EmksTd7d76s0QXkrWBkHWKz+ FB3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746466928; x=1747071728; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OXzvNAVi4jxM1YBH1FVi5GE9G6myG9TL0qRERDXaLKg=; b=Jtj2bKRdTM85bnTnIORg3ifN5zV8P945wMQISIO1ZUHaQSmkCVaML8INApX5l9L7xB Ay2KRAka7gZwkJWBvqnYKl9ySyDNPoKIyGYWc1TqVdZBB6OY9GlqtK1Lc7tTHhdvj6JN KbItkHwwopPRYfu6nY8/V74qpGx8gdTlltZzucR6HgYAcI1cgdt3P3EeO2TpeT4BicUs T+hEkVvp191QfaXceFrNYkIftTp5jbDKJ+hWPX6I5QHbwOZ4D9zn3BGKGOsEGlqBaTbS IKNgtZst/rM7i6e4gJhA9FQH0p9mPs/q38TnNglpNa+UaC3s2FzVw0d+/wiIRd1EvtZl uLHQ== X-Forwarded-Encrypted: i=1; AJvYcCX9F3D6ku+PgBzOy+a2yyJkMLfqExgeSLSkOFSg1Iclyry8Kv8tOeNeRfr0fhfscMVi+TZ7viINmXXt5NQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3jnsojaVwlsLWN1cCnn8EMs966QnL2aTbgCut3+to89ax9Hwn qgnbV9Uw46ojE5tMogrwwWGJ77xSqAauayMLC5l+MJZkIyRL/p/iQphrH1Fmr8Q= X-Gm-Gg: ASbGnct6k14PjNIOyEWiTuMMVna9//hXgmy61P157H+Laqt5FW9kr2pm5rtHJmQ6gDm dkBzw5Q4EsWwp8MRvK7+wNDU0x3YapiQJ3x7EuzvEt0U6Eknw0gVt/lP/Es0gX56nbzmFjAr7nW GeSIxfM5JbxnK8YpkdZ6kfxUazl6YalqbGX3tfhn95tVqjqi35FYBkcKdNKZnf4ZRG5ITVv0IMQ Hp+dJoOcf211bfno2XK2WMCglip6i4pz4HAtk3QXB/3V/yCVzjW6jbVFN5sU82CE6YaX8dLa6o/ 63YT84fQ1h2gVE0xhYwwLHEoANXFIRWW6J/+gM1UOeUc4i8l8UZJTA== X-Google-Smtp-Source: AGHT+IHRnKbSits2P5iIFtqo/QiTaFPHb+gCCGIM4Jgg/30tALFDtg8UB0E5dn937De30sAXjVmM6w== X-Received: by 2002:a05:600c:3b8e:b0:439:4b23:9e8e with SMTP id 5b1f17b1804b1-441cff9b96amr2901515e9.3.1746466927739; Mon, 05 May 2025 10:42:07 -0700 (PDT) Received: from toaster.baylibre.com ([2a01:e0a:3c5:5fb1:dc81:e7a:3a49:7a3b]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3a099b0efbfsm11345829f8f.69.2025.05.05.10.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 10:42:07 -0700 (PDT) From: Jerome Brunet Date: Mon, 05 May 2025 19:41:49 +0200 Subject: [PATCH 3/4] PCI: endpoint: pci-epf-vntb: allow arbitrary BAR configuration Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-pci-vntb-bar-mapping-v1-3-0e0d12b2fa71@baylibre.com> References: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> In-Reply-To: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> To: Jon Mason , Dave Jiang , Allen Hubbe , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Frank Li Cc: ntb@lists.linux.dev, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7388; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=wzhUOn6SQXmsn4tPkIwKptxiv30cDD2SlgD0U7jzTY8=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBoGPhqNCKhu/Hyj44zyRvOXFRfw7gyFWaWCovPY FpAZdpup8aJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaBj4agAKCRDm/A8cN/La hQiMD/4jhj2xCwfqkgohC1TmN6kYITF6+zutI0KnDjKhg+PQNBhRdwrx+9LZIs4QgJTynHORe2w gVGoWbJavN80rNz6oCTFAWMcYRpFxzRe+Q/SxH2U/BE7T5T6GaVefRfckLmuZES2uPG2QLGmba8 L8Asp4UtHAXt6Y5+BQNOL+d7WC2YkfQrdwCUv6ZrYsI9SLbH6DbZDe5OkBhktwfv+pmNBy9VEZK EIQl7g4iLfhx97o8XwvJcovhbM3VQwWA/7o0oJFZcN41i1DDqMilZHWdcd9b2CqnlVLleYjXqyY 4ydj3WfFo/bL/qN7H6nNJJ/Wx4JiCWlbtv508/E1JxlPulLCpfam6dTkCgpUjM63Gwa+bF7EqH0 8GnCI8TYHc8J8WteK0VkdN1ltFtwHveOy8KWMvkGEZYPKwshJnpQNDBt/wt9Bk/NS+14fvTzlb7 J9tgoKGURN/5Wh5S3aDFOtqqjeWWFZJID2pofsoP6zpcHRPSWPvK4gjz3+MERK6ArIM04YzkWjk 4CveVX2bTuhckYj6Sr/oPMeuL5d6opbEnY4U3spvmtUZJYaUzmAJ5g9DyTAUVpGLKyIyCLkaYaK 7+imtxU6HMIo6miIX65e53Rh9LdqO+fGrDWTWeqOC10uQtLbq7udTN7n3JnUvTfGGCBRjwwQr1Y 00jmfR5YYfOQxJw== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 The BAR configuration used by the PCI vNTB endpoint function is rather fixed and does not allow to account for platform quirks. It simply allocate BAR in order. This is a problem on the Renesas platforms which have a 256B fixed BAR_4 which end-up being the MW1 BAR. While this BAR is not ideal for a MW, it is adequate for the doorbells. Add more configfs attributes to allow arbitrary BAR configuration to be provided through the driver configfs. If not configuration is provided, the driver should retain the old behaviour and allocate BARs in order. This should keep existing userspace scripts working. In the Renesas case mentioned above, the change allows to use BAR_2 as for the MW1 region and BAR_4 for the doorbells. Signed-off-by: Jerome Brunet --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 127 ++++++++++++++++++++++= ++-- 1 file changed, 120 insertions(+), 7 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index f9f4a8bb65f364962dbf1e9011ab0e4479c61034..3cdccfe870e0cf738c93ca7c525= fa2daa7c87fcb 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -74,6 +74,7 @@ enum epf_ntb_bar { BAR_MW2, BAR_MW3, BAR_MW4, + VNTB_BAR_NUM, }; =20 /* @@ -133,7 +134,7 @@ struct epf_ntb { bool linkup; u32 spad_size; =20 - enum pci_barno epf_ntb_bar[6]; + enum pci_barno epf_ntb_bar[VNTB_BAR_NUM]; =20 struct epf_ntb_ctrl *reg; =20 @@ -655,6 +656,59 @@ static void epf_ntb_epc_destroy(struct epf_ntb *ntb) pci_epc_put(ntb->epf->epc); } =20 + +/** + * epf_ntb_is_bar_used() - Check if a bar is used in the ntb configuration + * @ntb: NTB device that facilitates communication between HOST and VHOST + * + * Returns: 0 if unused, 1 if used. + */ +static int epf_ntb_is_bar_used(struct epf_ntb *ntb, + enum pci_barno barno) +{ + int i; + + for (i =3D 0; i < VNTB_BAR_NUM; i++) { + if (ntb->epf_ntb_bar[i] =3D=3D barno) + return 1; + } + + return 0; +} + +/** + * epf_ntb_set_bar() - Assign BAR number when no configuration is provided + * @ntb: NTB device that facilitates communication between HOST and VHOST + * + * When the BAR configuration was not provided through the userspace + * configuration, automatically assign BAR as it has been historically + * done by this endpoint function. + * + * Returns: the BAR number found, if any. -1 otherwise + */ +static int epf_ntb_set_bar(struct epf_ntb *ntb, + const struct pci_epc_features *epc_features, + enum epf_ntb_bar bar, + enum pci_barno barno) +{ + while (ntb->epf_ntb_bar[bar] < 0) { + barno =3D pci_epc_get_next_free_bar(epc_features, barno); + if (barno < 0) + break; /* No more BAR available */ + + /* + * Verify if the BAR found is not already assigned + * through the provided configuration + */ + if (!epf_ntb_is_bar_used(ntb, barno)) + ntb->epf_ntb_bar[bar] =3D barno; + + barno +=3D 1; + } + + return barno; +} + /** * epf_ntb_init_epc_bar() - Identify BARs to be used for each of the NTB * constructs (scratchpad region, doorbell, memorywindow) @@ -677,23 +731,21 @@ static int epf_ntb_init_epc_bar(struct epf_ntb *ntb) epc_features =3D pci_epc_get_features(ntb->epf->epc, ntb->epf->func_no, n= tb->epf->vfunc_no); =20 /* These are required BARs which are mandatory for NTB functionality */ - for (bar =3D BAR_CONFIG; bar <=3D BAR_MW1; bar++, barno++) { - barno =3D pci_epc_get_next_free_bar(epc_features, barno); + for (bar =3D BAR_CONFIG; bar <=3D BAR_MW1; bar++) { + barno =3D epf_ntb_set_bar(ntb, epc_features, bar, barno); if (barno < 0) { dev_err(dev, "Fail to get NTB function BAR\n"); return -EINVAL; } - ntb->epf_ntb_bar[bar] =3D barno; } =20 /* These are optional BARs which don't impact NTB functionality */ - for (bar =3D BAR_MW1, i =3D 1; i < num_mws; bar++, barno++, i++) { - barno =3D pci_epc_get_next_free_bar(epc_features, barno); + for (bar =3D BAR_MW1, i =3D 1; i < num_mws; bar++, i++) { + barno =3D epf_ntb_set_bar(ntb, epc_features, bar, barno); if (barno < 0) { ntb->num_mws =3D i; dev_dbg(dev, "BAR not available for > MW%d\n", i + 1); } - ntb->epf_ntb_bar[bar] =3D barno; } =20 return 0; @@ -861,6 +913,37 @@ static ssize_t epf_ntb_##_name##_store(struct config_i= tem *item, \ return len; \ } =20 +#define EPF_NTB_BAR_R(_name, _id) \ + static ssize_t epf_ntb_##_name##_show(struct config_item *item, \ + char *page) \ + { \ + struct config_group *group =3D to_config_group(item); \ + struct epf_ntb *ntb =3D to_epf_ntb(group); \ + \ + return sprintf(page, "%d\n", ntb->epf_ntb_bar[_id]); \ + } + +#define EPF_NTB_BAR_W(_name, _id) \ + static ssize_t epf_ntb_##_name##_store(struct config_item *item, \ + const char *page, size_t len) \ + { \ + struct config_group *group =3D to_config_group(item); \ + struct epf_ntb *ntb =3D to_epf_ntb(group); \ + int val; \ + int ret; \ + \ + ret =3D kstrtoint(page, 0, &val); \ + if (ret) \ + return ret; \ + \ + if (val < NO_BAR || val > BAR_5) \ + return -EINVAL; \ + \ + ntb->epf_ntb_bar[_id] =3D val; \ + \ + return len; \ + } + static ssize_t epf_ntb_num_mws_store(struct config_item *item, const char *page, size_t len) { @@ -900,6 +983,18 @@ EPF_NTB_MW_R(mw3) EPF_NTB_MW_W(mw3) EPF_NTB_MW_R(mw4) EPF_NTB_MW_W(mw4) +EPF_NTB_BAR_R(ctrl_bar, BAR_CONFIG) +EPF_NTB_BAR_W(ctrl_bar, BAR_CONFIG) +EPF_NTB_BAR_R(db_bar, BAR_DB) +EPF_NTB_BAR_W(db_bar, BAR_DB) +EPF_NTB_BAR_R(mw1_bar, BAR_MW1) +EPF_NTB_BAR_W(mw1_bar, BAR_MW1) +EPF_NTB_BAR_R(mw2_bar, BAR_MW1) +EPF_NTB_BAR_W(mw2_bar, BAR_MW1) +EPF_NTB_BAR_R(mw3_bar, BAR_MW3) +EPF_NTB_BAR_W(mw3_bar, BAR_MW3) +EPF_NTB_BAR_R(mw4_bar, BAR_MW4) +EPF_NTB_BAR_W(mw4_bar, BAR_MW4) =20 CONFIGFS_ATTR(epf_ntb_, spad_count); CONFIGFS_ATTR(epf_ntb_, db_count); @@ -911,6 +1006,12 @@ CONFIGFS_ATTR(epf_ntb_, mw4); CONFIGFS_ATTR(epf_ntb_, vbus_number); CONFIGFS_ATTR(epf_ntb_, vntb_pid); CONFIGFS_ATTR(epf_ntb_, vntb_vid); +CONFIGFS_ATTR(epf_ntb_, ctrl_bar); +CONFIGFS_ATTR(epf_ntb_, db_bar); +CONFIGFS_ATTR(epf_ntb_, mw1_bar); +CONFIGFS_ATTR(epf_ntb_, mw2_bar); +CONFIGFS_ATTR(epf_ntb_, mw3_bar); +CONFIGFS_ATTR(epf_ntb_, mw4_bar); =20 static struct configfs_attribute *epf_ntb_attrs[] =3D { &epf_ntb_attr_spad_count, @@ -923,6 +1024,12 @@ static struct configfs_attribute *epf_ntb_attrs[] =3D= { &epf_ntb_attr_vbus_number, &epf_ntb_attr_vntb_pid, &epf_ntb_attr_vntb_vid, + &epf_ntb_attr_ctrl_bar, + &epf_ntb_attr_db_bar, + &epf_ntb_attr_mw1_bar, + &epf_ntb_attr_mw2_bar, + &epf_ntb_attr_mw3_bar, + &epf_ntb_attr_mw4_bar, NULL, }; =20 @@ -1380,6 +1487,7 @@ static int epf_ntb_probe(struct pci_epf *epf, { struct epf_ntb *ntb; struct device *dev; + int i; =20 dev =3D &epf->dev; =20 @@ -1390,6 +1498,11 @@ static int epf_ntb_probe(struct pci_epf *epf, epf->header =3D &epf_ntb_header; ntb->epf =3D epf; ntb->vbus_number =3D 0xff; + + /* Initially, no bar is assigned */ + for (i =3D 0; i < VNTB_BAR_NUM; i++) + ntb->epf_ntb_bar[i] =3D NO_BAR; + epf_set_drvdata(epf, ntb); =20 dev_info(dev, "pci-ep epf driver loaded\n"); --=20 2.47.2 From nobody Mon Feb 9 01:48:50 2026 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4DB32154425 for ; Mon, 5 May 2025 17:42:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466932; cv=none; b=Osn65LepvS9S//fL5K+YcOhOf7xEgbl2gcRKm2pFo7loZavukb+yvdzLK+ek07U1fOI/gvLAVGkE8KFPa1yV11vMdbbTFh5CSv6ogd15xu2vJROoFtixD3ZUC3qnJXFU2N8jL727C/WTmhgecizz418c5SMQE8yHtfIfaKuVJMk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466932; c=relaxed/simple; bh=B+qwCUY3eq14vw47Zfe4vuilfWwGDTVLmI1jZLIuLsY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Rfi6EkxSKC688lfRmu56p+dhu/anfQ7SA+BUELgUBbS4jetCA/4rYs5RNGwaXS9d75RL5FLGW/cOK+OXTC66F7cTz36jOHKHW+mS14mA4QAP8oZXI5omDBft+S11q7U7ewIghV77gsUR4WDYBP05IPcCPB7crAk9alvl4b6dnk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=xkeNNnlw; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="xkeNNnlw" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-39c0e0bc733so4510745f8f.1 for ; Mon, 05 May 2025 10:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1746466928; x=1747071728; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=vGqWxZm/m2TQpVxIBgE41j6Cssz2HeDjBc3cPlm+w3E=; b=xkeNNnlwYhx8iK7e8iYeFGuz/hb9P+wH7xuzfYxh3SGYnytm0iVcI1R1L1hAnvMUM0 CbViZ40C3fNClADQocg7YlrM9VMduR+hYKafR0CxJtNfAJDQNFM/2xqRwmdQQCUtU8UJ YGt03rn744hRzH8WV3+oPfmEfyf9JC6lScQfndxiJWEnuzIwCL7UBF3Bsup9+gXU39zO dLpC5vQtfo34T5G6HmUcChZjmFR5UktW4cViBcPd9hT6xGK0iff4PZkt3OAaxxJqvozM 4c0XfvzQIliFlXz0tcxZ/BRRenoQDVKNtTpXJz9yDogEPr+ZQyLnrWoX64kyAjzyWbib 2vvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746466928; x=1747071728; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vGqWxZm/m2TQpVxIBgE41j6Cssz2HeDjBc3cPlm+w3E=; b=lbe+GG8Bu34NrVtmgvNF6iZlxcL7zN/Knj89fq+HiHYrzD1vz2NslGcv33Y39dONxm 70Usger0qhHPn03OHOpfMpTN0/zbX4mPsIp8bMk/HqW01HcYxCyzfzTScqkcMrQQqHZc Rl3LvsswRW8Dep5UnIsWxw+t2BNRIz7y6X1ynxKLV+aEqact6RiKfAmfJJjuXCbTORXH AORJweG33uADnEfje5WNfZgBfxjHbI3JklH1qb4Xa/44f+CmkI7qoBWxXLNS10BH+l2d RC9e0kiJLCbSB8Q387m1sfFu1xrMn6hlIbwHeemNoMKUqJfFFk8WSJ3gimddpO004Cnt +F4g== X-Forwarded-Encrypted: i=1; AJvYcCV22ajqwMRrsal+MWso07w6kCzDnE6YI/CDiLdzdq8j/ePaM2nzJy5UEa7cCCpBaoVtYA3byNA19Svw3TY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy73L2E28Wq6pTVS9eIW0KQk7VrvLLi89lft8hqK8kqwWa+WSxc k59CaQMO37yH7ENj5yAyKnshY04lcfwNBVc7srCBbmgdPwbLTyXipcjbj8oyyUc= X-Gm-Gg: ASbGnctN4sSvZBoLo0QvqWQXRNf2baaf8ST1+CUby4INKTI1kD7rvATV21T2GVyKjwo +achgjfMWaNiFmbIEtuMeTPodwO70CmN0otTYGY2JigoTtLwyal8jyywytb5A13ymgz1X9IlLuL U4UIOdtwmeMcNsMzGNuftbivboOPmmqNFKEzKmJCBSPzCcxvc5+z7QlICbnMlG6CrLTIb9PZjDN w39j81kVu4mtUsd2W9xp1q6+fX0VVOrUOhOaCaA4oQybQURvAxGoI8nF6In1Lt9tDqb0aK18dmZ GtKDvvNgTVqYjQaHECiTmy24E67Hp/9hEP1IQF6wi58ytsLX340FdA== X-Google-Smtp-Source: AGHT+IFO5ZOl3WbSVm06FVhgd/i3dra5ZvGLeZpLS1wCgTAqjLTG4sEOT/fzcnQ6TFzk2Xp7wmzK2w== X-Received: by 2002:a05:6000:18ab:b0:391:3049:d58d with SMTP id ffacd0b85a97d-3a09fd11b24mr5996162f8f.0.1746466928504; Mon, 05 May 2025 10:42:08 -0700 (PDT) Received: from toaster.baylibre.com ([2a01:e0a:3c5:5fb1:dc81:e7a:3a49:7a3b]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3a099b0efbfsm11345829f8f.69.2025.05.05.10.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 May 2025 10:42:08 -0700 (PDT) From: Jerome Brunet Date: Mon, 05 May 2025 19:41:50 +0200 Subject: [PATCH 4/4] NTB: epf: Allow arbitrary BAR mapping Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-pci-vntb-bar-mapping-v1-4-0e0d12b2fa71@baylibre.com> References: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> In-Reply-To: <20250505-pci-vntb-bar-mapping-v1-0-0e0d12b2fa71@baylibre.com> To: Jon Mason , Dave Jiang , Allen Hubbe , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Frank Li Cc: ntb@lists.linux.dev, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7212; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=B+qwCUY3eq14vw47Zfe4vuilfWwGDTVLmI1jZLIuLsY=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBoGPhr38FAeaNtY9Pmu/YdTa9ik8dKaILGYk8oq Xel3jbhWmqJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaBj4awAKCRDm/A8cN/La hfhHD/90J4gK6A31RqSKPgeIQXRjUH9eyvbVh4A/PuFXF1XX4TQCotey6uRmw4Aplx3+5V3fatO b1V4nFxskxpg3nb+ECjODvnssQIIMBXB73EHUCL5/Vg+xbQ89xP5UkvZ86eggE5Z3TN0YuXKUhU v/o/us4hQNtIkjw3e3i1tYGr6z8M1ULHyZCjSc9WHm27iNhvYR4vo3I7Q3bkYKc6Qp0ZtF7RpkG FvXdjg6UO0LQeJ9TMKxwt08eF80IGAhYyFPhdBnyvNwecATg4JWnZcj9DVme2CerMivw41FWbyW gheWZHhL6P6RGmZqK/iGLdOyAuqJbKkPolo/k5/iXCYbiIXxRjIgLCF/D+5ROloKx5FetEOCMVg nlb8wbe3AqdI92LC+ynKxF5bwUyQMmjfvPmsGKXDSXffJ/+KrEXrJPyM0cAAY2FSb9m1UU4QVgr Ccv5clQm2PHESZCDmeNb7PW7d/KxLwRFxzKVXfzmSN6iOL3zQL9Xl7d9r6QobmFrJsKmam/p5kc JOWGylE38kUJUJoK9IqWp3+YfwE3sVyDBHDTExMe2HvV+RVFlKri6T6ZQslkq5AzVYsNeA9Nzcc RAjG3iWfl1v2jc7iVy2TNyGfz3J1LdAp/IjrUMj1oeKb0LF3oAF2NsLvjCoZ8du/6u70MF7QDFv M1jf4inORmEjvOg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 The NTB epf host driver assumes the BAR number associated with a memory window is just incremented from the BAR number associated with MW1. This seems to have been enough so far but this is not really how the endpoint side work and the two could easily become mis-aligned. ntb_epf_mw_to_bar() even assumes that the BAR number is the memory window index + 2, which means the function only returns a proper result if BAR_2 is associated with MW1. Instead, fully describe and allow arbitrary NTB BAR mapping. Signed-off-by: Jerome Brunet --- drivers/ntb/hw/epf/ntb_hw_epf.c | 108 ++++++++++++++++++++----------------= ---- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_ep= f.c index 00f0e78f685bf7917b02dd8a52b5b35f68d5bb64..9539cdcd0f8fa4b5c5e66477672= f8f97d5ec4e52 100644 --- a/drivers/ntb/hw/epf/ntb_hw_epf.c +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c @@ -49,6 +49,7 @@ #define NTB_EPF_COMMAND_TIMEOUT 1000 /* 1 Sec */ =20 enum pci_barno { + NO_BAR =3D -1, BAR_0, BAR_1, BAR_2, @@ -57,16 +58,26 @@ enum pci_barno { BAR_5, }; =20 +enum epf_ntb_bar { + BAR_CONFIG, + BAR_PEER_SPAD, + BAR_DB, + BAR_MW1, + BAR_MW2, + BAR_MW3, + BAR_MW4, + NTB_BAR_NUM, +}; + +#define NTB_EPF_MAX_MW_COUNT (NTB_BAR_NUM - BAR_MW1) + struct ntb_epf_dev { struct ntb_dev ntb; struct device *dev; /* Mutex to protect providing commands to NTB EPF */ struct mutex cmd_lock; =20 - enum pci_barno ctrl_reg_bar; - enum pci_barno peer_spad_reg_bar; - enum pci_barno db_reg_bar; - enum pci_barno mw_bar; + const enum pci_barno *barno; =20 unsigned int mw_count; unsigned int spad_count; @@ -85,17 +96,6 @@ struct ntb_epf_dev { =20 #define ntb_ndev(__ntb) container_of(__ntb, struct ntb_epf_dev, ntb) =20 -struct ntb_epf_data { - /* BAR that contains both control region and self spad region */ - enum pci_barno ctrl_reg_bar; - /* BAR that contains peer spad region */ - enum pci_barno peer_spad_reg_bar; - /* BAR that contains Doorbell region and Memory window '1' */ - enum pci_barno db_reg_bar; - /* BAR that contains memory windows*/ - enum pci_barno mw_bar; -}; - static int ntb_epf_send_command(struct ntb_epf_dev *ndev, u32 command, u32 argument) { @@ -144,7 +144,7 @@ static int ntb_epf_mw_to_bar(struct ntb_epf_dev *ndev, = int idx) return -EINVAL; } =20 - return idx + 2; + return ndev->barno[BAR_MW1 + idx]; } =20 static int ntb_epf_mw_count(struct ntb_dev *ntb, int pidx) @@ -413,7 +413,9 @@ static int ntb_epf_mw_set_trans(struct ntb_dev *ntb, in= t pidx, int idx, return -EINVAL; } =20 - bar =3D idx + ndev->mw_bar; + bar =3D ntb_epf_mw_to_bar(ndev, idx); + if (bar < 0) + return bar; =20 mw_size =3D pci_resource_len(ntb->pdev, bar); =20 @@ -455,7 +457,9 @@ static int ntb_epf_peer_mw_get_addr(struct ntb_dev *ntb= , int idx, if (idx =3D=3D 0) offset =3D readl(ndev->ctrl_reg + NTB_EPF_MW1_OFFSET); =20 - bar =3D idx + ndev->mw_bar; + bar =3D ntb_epf_mw_to_bar(ndev, idx); + if (bar < 0) + return bar; =20 if (base) *base =3D pci_resource_start(ndev->ntb.pdev, bar) + offset; @@ -557,8 +561,13 @@ static int ntb_epf_init_dev(struct ntb_epf_dev *ndev) } =20 ndev->db_valid_mask =3D BIT_ULL(ndev->db_count) - 1; - ndev->mw_count =3D readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT); ndev->spad_count =3D readl(ndev->ctrl_reg + NTB_EPF_SPAD_COUNT); + ndev->mw_count =3D readl(ndev->ctrl_reg + NTB_EPF_MW_COUNT); + + if (ndev->mw_count > NTB_EPF_MAX_MW_COUNT) { + dev_err(dev, "Unsupported MW count: %u\n", ndev->mw_count); + return -EINVAL; + } =20 return 0; } @@ -596,14 +605,14 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev, dev_warn(&pdev->dev, "Cannot DMA highmem\n"); } =20 - ndev->ctrl_reg =3D pci_iomap(pdev, ndev->ctrl_reg_bar, 0); + ndev->ctrl_reg =3D pci_iomap(pdev, ndev->barno[BAR_CONFIG], 0); if (!ndev->ctrl_reg) { ret =3D -EIO; goto err_pci_regions; } =20 - if (ndev->peer_spad_reg_bar) { - ndev->peer_spad_reg =3D pci_iomap(pdev, ndev->peer_spad_reg_bar, 0); + if (ndev->barno[BAR_PEER_SPAD] !=3D ndev->barno[BAR_CONFIG]) { + ndev->peer_spad_reg =3D pci_iomap(pdev, ndev->barno[BAR_PEER_SPAD], 0); if (!ndev->peer_spad_reg) { ret =3D -EIO; goto err_pci_regions; @@ -614,7 +623,7 @@ static int ntb_epf_init_pci(struct ntb_epf_dev *ndev, ndev->peer_spad_reg =3D ndev->ctrl_reg + spad_off + spad_sz; } =20 - ndev->db_reg =3D pci_iomap(pdev, ndev->db_reg_bar, 0); + ndev->db_reg =3D pci_iomap(pdev, ndev->barno[BAR_DB], 0); if (!ndev->db_reg) { ret =3D -EIO; goto err_pci_regions; @@ -656,15 +665,20 @@ static void ntb_epf_cleanup_isr(struct ntb_epf_dev *n= dev) pci_free_irq_vectors(pdev); } =20 +static const enum pci_barno ntb_epf_default_barno[NTB_BAR_NUM] =3D { + [BAR_CONFIG] =3D BAR_0, + [BAR_PEER_SPAD] =3D BAR_1, + [BAR_DB] =3D BAR_2, + [BAR_MW1] =3D BAR_2, + [BAR_MW2] =3D BAR_3, + [BAR_MW3] =3D BAR_4, + [BAR_MW4] =3D BAR_5 +}; + static int ntb_epf_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { - enum pci_barno peer_spad_reg_bar =3D BAR_1; - enum pci_barno ctrl_reg_bar =3D BAR_0; - enum pci_barno db_reg_bar =3D BAR_2; - enum pci_barno mw_bar =3D BAR_2; struct device *dev =3D &pdev->dev; - struct ntb_epf_data *data; struct ntb_epf_dev *ndev; int ret; =20 @@ -675,18 +689,10 @@ static int ntb_epf_pci_probe(struct pci_dev *pdev, if (!ndev) return -ENOMEM; =20 - data =3D (struct ntb_epf_data *)id->driver_data; - if (data) { - peer_spad_reg_bar =3D data->peer_spad_reg_bar; - ctrl_reg_bar =3D data->ctrl_reg_bar; - db_reg_bar =3D data->db_reg_bar; - mw_bar =3D data->mw_bar; - } + ndev->barno =3D (const enum pci_barno *)id->driver_data; + if (!ndev->barno) + ndev->barno =3D ntb_epf_default_barno; =20 - ndev->peer_spad_reg_bar =3D peer_spad_reg_bar; - ndev->ctrl_reg_bar =3D ctrl_reg_bar; - ndev->db_reg_bar =3D db_reg_bar; - ndev->mw_bar =3D mw_bar; ndev->dev =3D dev; =20 ntb_epf_init_struct(ndev, pdev); @@ -730,30 +736,26 @@ static void ntb_epf_pci_remove(struct pci_dev *pdev) ntb_epf_deinit_pci(ndev); } =20 -static const struct ntb_epf_data j721e_data =3D { - .ctrl_reg_bar =3D BAR_0, - .peer_spad_reg_bar =3D BAR_1, - .db_reg_bar =3D BAR_2, - .mw_bar =3D BAR_2, -}; - -static const struct ntb_epf_data mx8_data =3D { - .ctrl_reg_bar =3D BAR_0, - .peer_spad_reg_bar =3D BAR_0, - .db_reg_bar =3D BAR_2, - .mw_bar =3D BAR_4, +static const enum pci_barno mx8_barno[NTB_BAR_NUM] =3D { + [BAR_CONFIG] =3D BAR_0, + [BAR_PEER_SPAD] =3D BAR_0, + [BAR_DB] =3D BAR_2, + [BAR_MW1] =3D BAR_4, + [BAR_MW2] =3D BAR_5, + [BAR_MW3] =3D NO_BAR, + [BAR_MW4] =3D NO_BAR, }; =20 static const struct pci_device_id ntb_epf_pci_tbl[] =3D { { PCI_DEVICE(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_J721E), .class =3D PCI_CLASS_MEMORY_RAM << 8, .class_mask =3D 0xffff00, - .driver_data =3D (kernel_ulong_t)&j721e_data, + .driver_data =3D (kernel_ulong_t)ntb_epf_default_barno, }, { PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, 0x0809), .class =3D PCI_CLASS_MEMORY_RAM << 8, .class_mask =3D 0xffff00, - .driver_data =3D (kernel_ulong_t)&mx8_data, + .driver_data =3D (kernel_ulong_t)mx8_barno, }, { }, }; --=20 2.47.2