From nobody Thu Dec 18 08:39:59 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (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 B002B1531F9 for ; Wed, 10 Dec 2025 00:20:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765326051; cv=none; b=Nd9NAqUyi7p1Qyueh2D8FJoC7PRAETtzm0qakZqvznZjQ0Wsqxe0GkjHS1IIxFMc9KlHjNirWuUunoFW5bKBbdQU5yF4aMeU3rQ6EQHf5+Td2QOLmWTY6nMXUD2buVUqHowEKWAVxa8BjpKjIgHqFnDTDNZimJM79PmrlhlCw4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765326051; c=relaxed/simple; bh=XUl+IMz7uUvH+MqMl2CaE7dyPDinPOet1+hqUWGDeMA=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=G3YtB5VFGNW4tCMWJr1bU4FLgyhWJh0xX6EusehyNWTq57vBXl63wSWYdeDSIhCM19z0bVZ4NGcnfoARX3mP2ftUQ7d5xPNtHVpFrDzsfRPRUOnHw/tNNCd9zHvM+pTQ+kV9hAlaXjCnvnnM68DZtAYn40Vz0/kFfk6nzbQay6Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Andc+qDx; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=TyBkeJME; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Andc+qDx"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="TyBkeJME" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5B9NITHD736407 for ; Wed, 10 Dec 2025 00:20:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=qcppdkim1; bh=iHBwA4IfSbfg57hhtkGLsS9PBLgMplwjUcX E/vuBD94=; b=Andc+qDxHSt0WG+VzJdUdL+Fg/tBG89vPh8M5YeWLUE9dxrtnQm hCYQB2GhvmoyKChwoKWoL1PXDQjU3XYeGx230eVf2whf2R8R90jGAc21bmJru4ZV YnZm9BwxfvxIo9uMmFzx8B0ymQhdvWtMtnaOd74HIGlZIpDF1QwYh+gLNni6pHZV ah+bqFu+uCKIKCssGpAmsXyFC7/Kxtpy9Y+NN+vVVlSJP5iEFg2VUqax+Nb/NyXj pHc8qnC9ZYIrM+OXr0CWPK71NkECp8NNgvsXD53pmQ2cc6qW19TKqs5OHp25u0m1 kQX8DtQg77Co7XKf5b1XLYOiA2ju7OL2B0w== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4axqqn18ry-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 10 Dec 2025 00:20:48 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-343daf0f38aso7684898a91.3 for ; Tue, 09 Dec 2025 16:20:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1765326046; x=1765930846; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=iHBwA4IfSbfg57hhtkGLsS9PBLgMplwjUcXE/vuBD94=; b=TyBkeJMEflxbBWdeqxp7n4UiKvWfPvpYuHAbAgJNNzHYMVBAkNnCULH+p4QlPhhI5m c5DbrAOvmi9KrZ4ufiz1kGMUfB5A77NMS8FwMyZjYVXbZ0zC+IKTTD73JJznGwjCqz9Q eGv/dEuEWquUFS6/Pw4g3UB/raPbZLU+EI6GRIxlmd+NKhmFbpQd2Sykxg1J+7m5TjGw PXgMO18EnYmjLGfh3nOdPkdjxIt4NcGcasZ+CApqwRSAFiVbD3u5vdzorXFiQ++hN6N2 FuRNG/XNgBRFb/xyFHC9cZ18m6w+61AtV0Mj3XN5rV/Z8Zi7hCdlbwJGwdVB4AcdYtMO 0bxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765326046; x=1765930846; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=iHBwA4IfSbfg57hhtkGLsS9PBLgMplwjUcXE/vuBD94=; b=op4gWC5DkOS4utu7/MsCsbdxHZAsxt7qmguKiQZ2jRS1z5Y8qXG8I4ysHwfFn20rld VEbLJcqA0zvEDXNW0mblbna9VN467+Jb5iPQR1KUhSijxYaXWQFwi5DFivnWVtVKsrRw AUYdUZHzAdJsHu6bmHgDA4LEvAux1JbKxSvGe+wJeP2+iML3b6ATpl/PfQ1YRV02pcQ5 +b/903vps2JZrmMpvs9tpXab/RN3VhAOWCAL9r0JmiUmpDq/eMK8mnDk87779uQBKK2l MeMOdAFM2WG6kovIN0KCQaeneq0U6R9bfWYp+ZRrkmASud/4j6TYOVJi8SZEHLgkz34e kttw== X-Forwarded-Encrypted: i=1; AJvYcCXZSFFmOjlRcBl4xcQfXOsD3HfTxTnhELETR0nbwBqnBqRRryn8MjeWk2oQ5pUevF3C/UXIpwedS9B02sA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzz5P8cYptKRm5ouxTnxBWup7cCS29Lc+XAoFU04oeGlrM7BwBn dIPBfcYC+L7+ASX+WzC5u85JZN5eDxAmoedKDh+zxIYpR7xxo3qb0wkl9FRYhordvAu0IjXLYLp ZyESoDJSiHZeQRMcMAlGflVLGe6ZQu8mBgs5Ybnrck7JEIQ7GXSVHm4S46OPMsEtw9xY= X-Gm-Gg: ASbGncuRVT21r+oSynHm+QtbWOjlxcRsSXIk5W5cGHLEu++GTS4X3Hm3bUDZSOr1iBj hKG0edluF3c2BA+IPGmlgRn4eqtZeppzkpUT7do9kgsfdSOhHxLWO63r5RY/jgOSvokciBR8WIJ 9gaz9xgsYL5Sl+Wg9NJgv12nuNAIYStUCWNJgpJU4qyOJId1LnhozbfUFCp/eOA5S28rbFKpaw5 W8ZVET69UBtjU8IOGxJ+vG4CtoVCPrzIZJkc+6RV13bU3Dn4WSgbYwyVn97kthpaxGuM4GZrmVr bl8m7LXcT7r6zYAL97GtBEmemLBbNhWZDCjAhbJFv1GBExPngMbRog2oii7b/cgbY3WX4zgftnc PU7FBL6kenV5s7FblgneK0gNUhhJqwOJn4ASVzXdU3Cq23HEymY73709paEGOQIk7btZamEoz X-Received: by 2002:a05:7022:62b:b0:11b:ade6:45a7 with SMTP id a92af1059eb24-11f2966a03emr425013c88.1.1765326046092; Tue, 09 Dec 2025 16:20:46 -0800 (PST) X-Google-Smtp-Source: AGHT+IGcLj2nkg82c0xX0uwbx/GB/IwXsGaN8dBi7OsSisu2MU6g5avYy1Et2uoitaYLu9zbKsRD9w== X-Received: by 2002:a05:7022:62b:b0:11b:ade6:45a7 with SMTP id a92af1059eb24-11f2966a03emr424972c88.1.1765326045477; Tue, 09 Dec 2025 16:20:45 -0800 (PST) Received: from hu-obabatun-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-11df76e2eefsm79775745c88.6.2025.12.09.16.20.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Dec 2025 16:20:45 -0800 (PST) From: Oreoluwa Babatunde To: robh@kernel.org, m.szyprowski@samsung.com, ye.li@oss.nxp.com Cc: oreoluwa.babatunde@oss.qualcomm.com, kernel@oss.qualcomm.com, saravanak@google.com, akpm@linux-foundation.org, david@redhat.com, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, robin.murphy@arm.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, iommu@lists.linux.dev, quic_c_gdjako@quicinc.com Subject: [PATCH] of: reserved_mem: Allow reserved_mem framework detect "cma=" kernel param Date: Tue, 9 Dec 2025 16:20:27 -0800 Message-Id: <20251210002027.1171519-1-oreoluwa.babatunde@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 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-Proofpoint-ORIG-GUID: GL9LiBGERDXp85BMDIiFMD3vvpYgAWHT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEwMDAwMSBTYWx0ZWRfXynEbT5NlN1Za re9Vc+Xugv2rWqgrKqf1k4p/Cb78+LMkcebnWd8nvNSgdlk4Ns7lhy1e1ApePMXA32kAXYajoue evAwBnLwnUcXJd4ua6Qcirow7188CiChaXLu8ZUe9MZ2ooFTVwfEgM9GjYkh526UUlmONJt45Sk zXAQexX1vk/krDwg+tzp9itT3OVVy1pFKi+Muzgm0KcgX7XBJPpIislQCLKQDOBdWljyr7LAWb6 sbVF9j2fNtNuz7Dccx/PqFKsu6SUPIq4DNTRSOhAniqOEzk+cgcVkEebxgbUrscVeBbzWCnSkHo TKD9h7V0uUtse37jnbT+uHJZgrapY3iLpJ8vQORond4M3+9vABvsLvLhfo8ntMBh3C5Po84Eddc d0ljLovwdIOhgML/CD8qsaLancwZ8A== X-Authority-Analysis: v=2.4 cv=A5Jh/qWG c=1 sm=1 tr=0 ts=6938bce0 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=DS4snQ7NONFh9zYVhi8A:9 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-GUID: GL9LiBGERDXp85BMDIiFMD3vvpYgAWHT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-09_05,2025-12-09_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 suspectscore=0 bulkscore=0 phishscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512100001 Content-Type: text/plain; charset="utf-8" When initializing the default cma region, the "cma=3D" kernel parameter takes priority over a DT defined linux,cma-default region. Hence, give the reserved_mem framework the ability to detect this so that the DT defined cma region can skip initialization accordingly. Signed-off-by: Oreoluwa Babatunde Tested-by: Joy Zou --- drivers/of/of_reserved_mem.c | 19 +++++++++++++++++-- include/linux/cma.h | 1 + kernel/dma/contiguous.c | 16 ++++++++++------ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 2e9ea751ed2d..bef68a4916b5 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -158,7 +158,7 @@ static int __init __reserved_mem_reserve_reg(unsigned l= ong node, phys_addr_t base, size; int len; const __be32 *prop; - bool nomap; + bool nomap, default_cma; =20 prop =3D of_get_flat_dt_prop(node, "reg", &len); if (!prop) @@ -171,6 +171,12 @@ static int __init __reserved_mem_reserve_reg(unsigned = long node, } =20 nomap =3D of_get_flat_dt_prop(node, "no-map", NULL) !=3D NULL; + default_cma =3D of_get_flat_dt_prop(node, "linux,cma-default", NULL); + + if (default_cma && cma_skip_dt_default_reserved_mem()) { + pr_err("Skipping dt linux,cma-default for \"cma=3D\" kernel param.\n"); + return -EINVAL; + } =20 while (len >=3D t_len) { base =3D dt_mem_next_cell(dt_root_addr_cells, &prop); @@ -256,12 +262,15 @@ void __init fdt_scan_reserved_mem_reg_nodes(void) =20 fdt_for_each_subnode(child, fdt, node) { const char *uname; + bool default_cma =3D of_get_flat_dt_prop(child, "linux,cma-default", NUL= L); =20 prop =3D of_get_flat_dt_prop(child, "reg", &len); if (!prop) continue; if (!of_fdt_device_is_available(fdt, child)) continue; + if (default_cma && cma_skip_dt_default_reserved_mem()) + continue; =20 uname =3D fdt_get_name(fdt, child, NULL); if (len && len % t_len !=3D 0) { @@ -406,7 +415,7 @@ static int __init __reserved_mem_alloc_size(unsigned lo= ng node, const char *unam phys_addr_t base =3D 0, align =3D 0, size; int len; const __be32 *prop; - bool nomap; + bool nomap, default_cma; int ret; =20 prop =3D of_get_flat_dt_prop(node, "size", &len); @@ -430,6 +439,12 @@ static int __init __reserved_mem_alloc_size(unsigned l= ong node, const char *unam } =20 nomap =3D of_get_flat_dt_prop(node, "no-map", NULL) !=3D NULL; + default_cma =3D of_get_flat_dt_prop(node, "linux,cma-default", NULL); + + if (default_cma && cma_skip_dt_default_reserved_mem()) { + pr_err("Skipping dt linux,cma-default for \"cma=3D\" kernel param.\n"); + return -EINVAL; + } =20 /* Need adjust the alignment to satisfy the CMA requirement */ if (IS_ENABLED(CONFIG_CMA) diff --git a/include/linux/cma.h b/include/linux/cma.h index 62d9c1cf6326..3d3047029950 100644 --- a/include/linux/cma.h +++ b/include/linux/cma.h @@ -47,6 +47,7 @@ extern int cma_init_reserved_mem(phys_addr_t base, phys_a= ddr_t size, unsigned int order_per_bit, const char *name, struct cma **res_cma); +extern bool cma_skip_dt_default_reserved_mem(void); extern struct page *cma_alloc(struct cma *cma, unsigned long count, unsign= ed int align, bool no_warn); extern bool cma_pages_valid(struct cma *cma, const struct page *pages, uns= igned long count); diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c index d9b9dcba6ff7..9071c08650e3 100644 --- a/kernel/dma/contiguous.c +++ b/kernel/dma/contiguous.c @@ -90,6 +90,16 @@ static int __init early_cma(char *p) } early_param("cma", early_cma); =20 +/* + * cma_skip_dt_default_reserved_mem - This is called from the + * reserved_mem framework to detect if the default cma region is being + * set by the "cma=3D" kernel parameter. + */ +bool __init cma_skip_dt_default_reserved_mem(void) +{ + return size_cmdline !=3D -1; +} + #ifdef CONFIG_DMA_NUMA_CMA =20 static struct cma *dma_contiguous_numa_area[MAX_NUMNODES]; @@ -463,12 +473,6 @@ static int __init rmem_cma_setup(struct reserved_mem *= rmem) struct cma *cma; int err; =20 - if (size_cmdline !=3D -1 && default_cma) { - pr_info("Reserved memory: bypass %s node, using cmdline CMA params inste= ad\n", - rmem->name); - return -EBUSY; - } - if (!of_get_flat_dt_prop(node, "reusable", NULL) || of_get_flat_dt_prop(node, "no-map", NULL)) return -EINVAL; --=20 2.34.1