From nobody Sun Nov 24 00:33:52 2024 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 D73F51E2600 for ; Fri, 8 Nov 2024 10:38:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731062342; cv=none; b=mmdFo1OMQtf1t02HuSH+uKAkHY30aAHc1bR1D3BD9+u5OhPTCcURxUWeJFFDiQ8a1NNfMUDpcbVoOrZox1W4Te1m+tLyK9zwdZRrs7TKOSzDN34Aoweu4UW2jfJXIpCalxRsChP0oRVpk8XTh179KLNGHQ0MgzTC2yMWaziFnqA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731062342; c=relaxed/simple; bh=L2vOQpxf+jsewIrh71TowDocaxbrQWe/NVorAuStYX8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aujKThOnIihkc4q6urfuYJ6qyl0hZmtUVNBD4dQUuIR0tr9oC8eaix/fOIr/FfsaA+ildvoNX+iyy4ZDvaC8QRATpfy5/cHKKoJsoSJA+Yb5QBZluwo6FTI/38q8onFpcPflNHlPyDe6WgmnpUewRQU9k9ZYSdqML5AUTHYBi/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=SDTATJH1; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="SDTATJH1" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-a9a4031f69fso328162666b.0 for ; Fri, 08 Nov 2024 02:38:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1731062337; x=1731667137; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/azjLItm0kRcZGnRsfAiDqYz09Bjkw+3gf50DzO5cz0=; b=SDTATJH1lVZWVvcinEnvrAZ/cjnt7bTMs31H88GAdvRkHqNt5Yt23x7+IkkJp9q4NS aIAHeTcUlMO/LcOXMmpIxVrlMcshunqgMHtLUrAmzuwhVZYW2jk5Bu/t4zytZTa3bvLp S2MK1jq/LNFfTwkOodOrdpg4DC3JosLa85OsQ8OLACBWu49Y/lwM4uq9SMqQ6QS0yDL7 jNe4wXwX2qPRXhobgceR36y1f0boEaQJBsf9S8kQPs5klhwAcqaOhM23qurYruRXdStL mJUfirpalZctTFrwIwS+TQi2+xbWcdn/oasScF/nggWTlYf0AruQE6wxkMUabcl/oX53 fQ5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731062337; x=1731667137; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/azjLItm0kRcZGnRsfAiDqYz09Bjkw+3gf50DzO5cz0=; b=PxwhaS+vP7w5nX5KVLG17dnFJo7UmvLNqLef/U7l+exD2SCIDymxpnrkHwdY1VzeMb syHNwnRHO5j1NF8BXZKKwX5K1/rWYxilXiErXpeIxm7oNmCbdYaQ0xc5gaww4zovyz1z a8GHwwAJA5JSU2Uf4+iVjc7zIx3el3q/c7IQeqp+2WOCxw6VPo33T9vuO6IprCn7PQ73 /FP9ydbG5hA0Y8FVGH7NTfi8wz67C/lF2Ad7eh7qGpC/K6DKwUUaW7/pP43pH+FJdDRa pN3dHCjYqihD7vzwekRDMvcZCF0aGukLg5nk7GAQRD0tZP9RGPbq+nnV6ZWGSuPkt2Pd vrgg== X-Forwarded-Encrypted: i=1; AJvYcCWCu5qGuwFJIkNTENyML7dK1pOwpmdi4LCkdxWonnYsGR4C3xo75f2COGCGXnLeCgpUiXLLK2FyyeV31oE=@vger.kernel.org X-Gm-Message-State: AOJu0Yyzd83wrieN1Bx4RwXJ7TndDDR3uNnDJV3NPy93fQNP5PDmWDtv s8zKOPyRg1vgmIqjK5bmwbTD1xyBtVJIN7JyOguZnr8+rW4Ow3issSNspBisy8o= X-Google-Smtp-Source: AGHT+IHc0Nm4EeujQTsSiAthZ5sn/djXgAGGTqX7CDsdQwDobH57OcRUGR+bcR0+ZbLG2wRvWj+K1A== X-Received: by 2002:a17:907:6d28:b0:a9a:2afc:e4cc with SMTP id a640c23a62f3a-a9ef0050e63mr178709966b.58.1731062337230; Fri, 08 Nov 2024 02:38:57 -0800 (PST) Received: from localhost (host-79-35-211-193.retail.telecomitalia.it. [79.35.211.193]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a9ee0def8ecsm213746366b.152.2024.11.08.02.38.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Nov 2024 02:38:56 -0800 (PST) From: Andrea della Porta To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Broadcom internal kernel review list , Lorenzo Pieralisi , Krzysztof Wilczynski , Manivannan Sadhasivam , Bjorn Helgaas , Linus Walleij , Catalin Marinas , Will Deacon , Bartosz Golaszewski , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-gpio@vger.kernel.org, Masahiro Yamada , Stefan Wahren , Herve Codina , Luca Ceresoli , Thomas Petazzoni , Andrew Lunn Cc: Andrea della Porta Subject: [PATCH 1/2] of/unittest: Add empty dma-ranges address translation tests Date: Fri, 8 Nov 2024 11:39:20 +0100 Message-ID: X-Mailer: git-send-email 2.44.0 In-Reply-To: References: 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 Content-Type: text/plain; charset="utf-8" Intermediate DT PCI nodes dynamically generated by enabling CONFIG_PCI_DYNAMIC_OF_NODES have empty dma-ranges property. PCI address specifiers have 3 cells and when dma-ranges is missing or empty, of_translate_one() is currently dropping the flag portion of PCI addresses which are subnodes of the aforementioned ones, failing the translation. Add new tests covering this case. With this test, we get 1 new failure which is fixed in subsequent commit: FAIL of_unittest_pci_empty_dma_ranges():1245 for_each_of_pci_range wrong CP= U addr (ffffffffffffffff) on node /testcase-data/address-tests2/pcie@d10700= 00/pci@0,0/dev@0,0/local-bus@0 Signed-off-by: Andrea della Porta --- drivers/of/unittest-data/tests-address.dtsi | 2 ++ drivers/of/unittest.c | 39 +++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/drivers/of/unittest-data/tests-address.dtsi b/drivers/of/unitt= est-data/tests-address.dtsi index 3344f15c3755..f02a181bb125 100644 --- a/drivers/of/unittest-data/tests-address.dtsi +++ b/drivers/of/unittest-data/tests-address.dtsi @@ -114,6 +114,7 @@ pcie@d1070000 { device_type =3D "pci"; ranges =3D <0x82000000 0 0xe8000000 0 0xe8000000 0 0x7f00000>, <0x81000000 0 0x00000000 0 0xefff0000 0 0x0010000>; + dma-ranges =3D <0x43000000 0x10 0x00 0x00 0x00 0x00 0x10000000>; reg =3D <0x00000000 0xd1070000 0x20000>; =20 pci@0,0 { @@ -142,6 +143,7 @@ local-bus@0 { #size-cells =3D <0x01>; ranges =3D <0xa0000000 0 0 0 0x2000000>, <0xb0000000 1 0 0 0x1000000>; + dma-ranges =3D <0xc0000000 0x43000000 0x10 0x00 0x10000000>; =20 dev@e0000000 { reg =3D <0xa0001000 0x1000>, diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index daf9a2dddd7e..80483e38d7b4 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -1213,6 +1213,44 @@ static void __init of_unittest_pci_dma_ranges(void) of_node_put(np); } =20 +static void __init of_unittest_pci_empty_dma_ranges(void) +{ + struct device_node *np; + struct of_pci_range range; + struct of_pci_range_parser parser; + + if (!IS_ENABLED(CONFIG_PCI)) + return; + + np =3D of_find_node_by_path("/testcase-data/address-tests2/pcie@d1070000/= pci@0,0/dev@0,0/local-bus@0"); + if (!np) { + pr_err("missing testcase data\n"); + return; + } + + if (of_pci_dma_range_parser_init(&parser, np)) { + pr_err("missing dma-ranges property\n"); + return; + } + + /* + * Get the dma-ranges from the device tree + */ + for_each_of_pci_range(&parser, &range) { + unittest(range.size =3D=3D 0x10000000, + "for_each_of_pci_range wrong size on node %pOF size=3D%llx\n", + np, range.size); + unittest(range.cpu_addr =3D=3D 0x00000000, + "for_each_of_pci_range wrong CPU addr (%llx) on node %pOF", + range.cpu_addr, np); + unittest(range.pci_addr =3D=3D 0xc0000000, + "for_each_of_pci_range wrong DMA addr (%llx) on node %pOF", + range.pci_addr, np); + } + + of_node_put(np); +} + static void __init of_unittest_bus_ranges(void) { struct device_node *np; @@ -4272,6 +4310,7 @@ static int __init of_unittest(void) of_unittest_dma_get_max_cpu_address(); of_unittest_parse_dma_ranges(); of_unittest_pci_dma_ranges(); + of_unittest_pci_empty_dma_ranges(); of_unittest_bus_ranges(); of_unittest_bus_3cell_ranges(); of_unittest_reg(); --=20 2.35.3 From nobody Sun Nov 24 00:33:52 2024 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.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 991601E32A6 for ; Fri, 8 Nov 2024 10:39:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731062342; cv=none; b=RYEawiHgB1Vj47UTz8aiuVVD6qO/V3Cihf+Fk4HhQzLCjdAImWXdzzmdrKOkC3+bK1LWrlsApSoDzpkmQwKgrcRUOgVYeeOoQFBJI2WmyozTEYexHEvwbihIZE3QamDZon/PIP6rrL0sFs+HRgg8B9OpL6bjtt864Wb003mwuKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1731062342; c=relaxed/simple; bh=ZI7tjvx/GWaHe2pXNRvmtZniWMOO8iY8D9CppSRXIQ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=InVGwIBLkqVw9k+StlqOadZK1Fzx/wrs/lPWNkta2+dePANm+bxumeNZ1N5MktygWtIk6Fak0u/XRU5SvxKurKcgkuAoKiREh2EwuC2+CSsWEDPb5bXj5fvFKuf9eh+HvgJ86XVAAs8jcvskd45nqRhpclkFSRAv6F+JsqcPGa0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=bzeI5eWa; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="bzeI5eWa" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-a9ed7d8d4e0so289245266b.1 for ; Fri, 08 Nov 2024 02:39:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1731062339; x=1731667139; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jJXmxMV9Abc1uTINb2xUxHegsV2x5Sbl3192+49JM4w=; b=bzeI5eWayKRUIUnkStz9uK6qAc3mCR+mwYLXPT5Xr9wsT7e9mbuXJY387vQ1qpMqdG 7CoKfTw4c1OgblCTKPT6OaXzkjSlAmsBGm7Sj4LeNFO9FojlDMaV5Lt1i6Dw4AELDkDj On7R+UqoRVjGgxj7XcIdvMQt3Bfu1LHrjUz0FJWxuEsMBrn1/zPrmJV+ayKQHCet8xF9 iu4oJGUU1U8h4/3dpiHA1blQTvqJTTXx70SJniHB0y58kSndJU7KeazMZhht+oWRDS5N c9urFsK6pdjsKq4yjztcgW/QhLa4YGVwMUd9SEkGdj6N04/sYGSnzSl4zkf0x+UhXJ1Q shxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731062339; x=1731667139; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jJXmxMV9Abc1uTINb2xUxHegsV2x5Sbl3192+49JM4w=; b=Y0+a+686qAaWasXDujSYtaJ7FWuEz0GigJMTDS3SI8e9Qk7xcyxcN1kG9ADuY7a9Ib DWMrBDRZ1+EKJiE/MNfIigQojx7E2tXYe+NEMkY3VtujYrAwCNmlBTQyUPol5J8SEn3w zAxG9fA3DangZ/fKqcfyroTyxHjRKiKrxNsHxwMRbH3cRZBSdsrxiJTZvb7fIxlt6KbC YV/HRLGMd7fRhUvcwqbyVksZWMnmjw/Dzmn6F1gtpckRR3ug3mNqXLaHtrKZteJEpu8/ L4TjaqaQYmImSqVDx9liSMe2xTZluWY5/lNdJsWnn7zQeAse75U/zbU2HDMLdPsVZ6cN qLdg== X-Forwarded-Encrypted: i=1; AJvYcCXF2U6ScsXIcS91jsZa+mAPPAopx/8aAng/KbvGKSK6p3zwnk0auEkfEh0mVpPDt9yev4wat7afdBjN0ME=@vger.kernel.org X-Gm-Message-State: AOJu0YwkLkebuGtLf5F9sXsdPlow3pOThfoUPh6fPBic9O3ohDXb3dFX 2pP5ADZJA24MitwXTG875o8d8ymu74ghxPBVAq1WwFrH4CIz83Lb/I7ccZpC0r4= X-Google-Smtp-Source: AGHT+IHiQxW5gF9yi4X8bacvXjxGkk6fIrYEA4STUTYGNxpcC1/v9Tb+L2h7W5kVMF2aOK5bJYki5Q== X-Received: by 2002:a17:906:eecb:b0:a9e:b150:a99d with SMTP id a640c23a62f3a-a9eefeb4d57mr208775166b.5.1731062338980; Fri, 08 Nov 2024 02:38:58 -0800 (PST) Received: from localhost (host-79-35-211-193.retail.telecomitalia.it. [79.35.211.193]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a9ee0a188besm213593566b.8.2024.11.08.02.38.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Nov 2024 02:38:58 -0800 (PST) From: Andrea della Porta To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Broadcom internal kernel review list , Lorenzo Pieralisi , Krzysztof Wilczynski , Manivannan Sadhasivam , Bjorn Helgaas , Linus Walleij , Catalin Marinas , Will Deacon , Bartosz Golaszewski , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-gpio@vger.kernel.org, Masahiro Yamada , Stefan Wahren , Herve Codina , Luca Ceresoli , Thomas Petazzoni , Andrew Lunn Cc: Andrea della Porta , stable@vger.kernel.org Subject: [PATCH 2/2] of: address: Preserve the flags portion on 1:1 dma-ranges mapping Date: Fri, 8 Nov 2024 11:39:21 +0100 Message-ID: X-Mailer: git-send-email 2.44.0 In-Reply-To: References: 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 Content-Type: text/plain; charset="utf-8" A missing or empty dma-ranges in a DT node implies a 1:1 mapping for dma translations. In this specific case, the current behaviour is to zero out the entire specifier so that the translation could be carried on as an offset from zero. This includes address specifier that has flags (e.g. PCI ranges). Once the flags portion has been zeroed, the translation chain is broken since the mapping functions will check the upcoming address specifier against mismatching flags, always failing the 1:1 mapping and its entire purpose of always succeeding. Set to zero only the address portion while passing the flags through. Fixes: dbbdee94734b ("of/address: Merge all of the bus translation code") Cc: stable@vger.kernel.org Signed-off-by: Andrea della Porta Tested-by: Herve Codina --- drivers/of/address.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/of/address.c b/drivers/of/address.c index 286f0c161e33..72b6accff21c 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -455,7 +455,8 @@ static int of_translate_one(struct device_node *parent,= struct of_bus *bus, } if (ranges =3D=3D NULL || rlen =3D=3D 0) { offset =3D of_read_number(addr, na); - memset(addr, 0, pna * 4); + /* copy the address while preserving the flags */ + memset(addr + pbus->flag_cells, 0, (pna - pbus->flag_cells) * 4); pr_debug("empty ranges; 1:1 translation\n"); goto finish; } --=20 2.35.3