From nobody Sun Sep 27 00:39:06 2026 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.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 47557366075 for ; Thu, 27 Aug 2026 18:28:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855302; cv=none; b=mhouxUzh/EUFVnJOAS3p0LXHTWxgkhZZMrw7xK910rzO6nbhiJbVvYUT3v0nU7NqZw5L9tCvWHcLtc7Rzl9Pt2cTn4x4PfiSRcmncFJblviwCj8oF+rGuKXHBE7kLP9evbInV3wtrr9DypjJqK7artGMfiBTyTQIkr95lvQ+u40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855302; c=relaxed/simple; bh=8FWA9AVOhWxmQZ3JjAGZ5b76UZEA8wc94gm4Jv7PZTY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Di+LWpxJHAMiQ0TSUTc4kXVNa3px2kcqxXiE/vCQn0/I0hd2WUO6rLcVdVk1/pKQObVnnxpPsW+LjEpUoxJ1fgS+Wpt70zymNCMpMKk76WceQ2Sgd4u1Phs+jWvd8jmRlul5qm4ADmnRAjSwsFbUqbdzEZNFnfj9cYAFbWeMO+Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UG9xcFh2; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UG9xcFh2" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-c2531f453eeso29796066b.3 for ; Thu, 27 Aug 2026 11:28:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787855299; x=1788460099; 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:content-type; bh=K7W0FYldKuHhAWB+T1mpyUsx45/uTv/Vu54VWOFp0Yo=; b=UG9xcFh2btOij8vEKcQX9VdHZBEVN0J7RipLkzAd7h9pr+Zq9gBMTMMT8Q9AQgC0/J OxdcLh6SG23Ei4sDblBWaBSbqx8Z/s+4Rc0afp/0ndm+OUzMCmWZvUGLHgNniGxNVqYT cNkIU2Im93A1c/kAqVS6jNvZIrvz+gxocoOyTNPqn0mJ8xlSHx3Ee3HeXS66GknLT44R g9A2O0x8qCrtonasx6Rr3Bxb24GLIewqc9yVAtLNqruZW7l6K7l8LFbIgrjcVk6X92MV jqd625FmIgeVUGf5JXRUhjx9U/MxUJUK88peyxjIqAbNTaS7l2nxb41svDTXeM7RbQWe DJ1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787855299; x=1788460099; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=K7W0FYldKuHhAWB+T1mpyUsx45/uTv/Vu54VWOFp0Yo=; b=Rz4F4VTbQsSffM1H1MFtlI0+cXj9WZFGgPe4CDZlTcrhdluk2T5X5z7NaP4XELwmQP 52rV3/kjNBvLfpxRpRNrs9MoYfkVCdtPppXdWmHLU1TVkEuV2LDmUwyszea7HES6NX83 NSYUE4BM97MqoxkqE5BVNKNDMx+jtYEAaPsfe3KJdE03aVjlchdU4yqm9Rqiy3NfKNnr 9wTyd9jY1x7IuDXk7uOKR1lx2LFxwLqBAxhnXirncKJnWfJeWJ0oUn4/XULEZJesDROj lgRpl87T25oj0bQjszNLqZ38Kb7wFFaE0UFzlNldSXpIyRj4kklKNAr/sMaFrzq49kN0 jlfg== X-Forwarded-Encrypted: i=1; AHgh+Rr+4D9CfKBFUb3HmUTkGL/OFJlI9X/g3bQPjoRWDo7e17keKYUXx4nYTQ7CbnC6FCYWm+e+vNjYqnR0tjY=@vger.kernel.org X-Gm-Message-State: AFuF++lbv1VrNNn01r36SwtZG3ObbvAIv5VDYN1MUr0R6xP+ZAZtRhD2 XsCYY2cYCY1yBMLx4f0ZyweRPHG36mEr1eczItpzSwimFJ9kyVrniPUG X-Gm-Gg: AR+sD10vITzR5M9trB6GOh1hYkzv1eXaZjSMj4MSsyUE+JamxHrjgR+myxJ8C5b0aNb c7ZOEI6Ow1GwQ4RsYAoNUWHUkH2WVFbEfsBAR1DrD173fkfMbSKw0IIuk8RF9IhDUCI4NKWm4Ju dFdUs1HuKxCOjZ2I3jFBo4RnCkVYj/476rTqqu5LVAalurgGwUhGGNTqShYnFbcsHbPCbyrpEtd a8p80QFE5whZBjMtQ+DtTWQqkDDOUXygqXH7/Sz5EOsL1zO6Zs/twGVUjAaux8dLHJAXciZt55v lLuSXtkZozmjCWw8l6gUo5bfWurPOPi5fFNOIpwezZaP3h17TDcyN2w1PlTth8wM4WETnavSxJn uxZ13Tj3TxntTWhkQsJXhzKI8a6RSmbIdwqZi0Xo71x6+hDeiCGv73S7i0PA8tTY4FJtYAKsMtb IXsIpNDZe5S9Y6/1jpUN0edUj+RFSiJ8dCKLXNK6dqs5BLN5q0M5pbV93ZME62WC+axdEQAJLLO wva1jBRiLm6gEFEMoTgrnUtXZwkIZ5U2lK2O0qDoQ== X-Received: by 2002:a17:907:1c90:b0:c25:362e:fb8b with SMTP id a640c23a62f3a-c2556d9cd56mr49465066b.7.1787855299269; Thu, 27 Aug 2026 11:28:19 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c254e4e736dsm61288266b.11.2026.08.27.11.28.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:28:18 -0700 (PDT) From: Magnus Lindholm To: sparclinux@vger.kernel.org Cc: davem@davemloft.net, andreas@gaisler.com, linux-kernel@vger.kernel.org, sam@ravnborg.org, Magnus Lindholm Subject: [PATCH 1/5] sparc32: use memblock when mapping the kernel Date: Thu, 27 Aug 2026 20:24:13 +0200 Message-ID: <20260827182757.6856-2-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827182757.6856-1-linmag7@gmail.com> References: <20260827182757.6856-1-linmag7@gmail.com> 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" memblock already contains the available memory ranges when map_kernel() runs. Iterate those ranges directly and remove the sp_banks-specific mapping helper. memblock range ends are exclusive, so use end - start as the range size. Suggested-by: Sam Ravnborg Signed-off-by: Magnus Lindholm Reviewed-by: Sam Ravnborg --- arch/sparc/mm/srmmu.c | 47 +++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index f0fe09169528..483235458d69 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -846,39 +846,34 @@ static void __init do_large_mapping(unsigned long vad= dr, unsigned long phys_base *__nocache_fix(pgdp) =3D __pgd(big_pte); } =20 -/* Map sp_bank entry SP_ENTRY, starting at virtual address VBASE. */ -static unsigned long __init map_spbank(unsigned long vbase, int sp_entry) -{ - unsigned long pstart =3D (sp_banks[sp_entry].base_addr & PGDIR_MASK); - unsigned long vstart =3D (vbase & PGDIR_MASK); - unsigned long vend =3D PGDIR_ALIGN(vbase + sp_banks[sp_entry].num_bytes); - /* Map "low" memory only */ - const unsigned long min_vaddr =3D PAGE_OFFSET; - const unsigned long max_vaddr =3D PAGE_OFFSET + SRMMU_MAXMEM; - - if (vstart < min_vaddr || vstart >=3D max_vaddr) - return vstart; - - if (vend > max_vaddr || vend < min_vaddr) - vend =3D max_vaddr; - - while (vstart < vend) { - do_large_mapping(vstart, pstart); - vstart +=3D PGDIR_SIZE; pstart +=3D PGDIR_SIZE; - } - return vstart; -} - static void __init map_kernel(void) { - int i; + phys_addr_t start, end; + u64 i; =20 if (phys_base > 0) { do_large_mapping(PAGE_OFFSET, phys_base); } =20 - for (i =3D 0; sp_banks[i].num_bytes !=3D 0; i++) { - map_spbank((unsigned long)__va(sp_banks[i].base_addr), i); + for_each_mem_range(i, &start, &end) { + unsigned long vbase =3D (unsigned long)__va(start); + unsigned long pstart =3D start & PGDIR_MASK; + unsigned long vstart =3D vbase & PGDIR_MASK; + unsigned long vend =3D PGDIR_ALIGN(vbase + end - start); + const unsigned long min_vaddr =3D PAGE_OFFSET; + const unsigned long max_vaddr =3D PAGE_OFFSET + SRMMU_MAXMEM; + + /* Map low memory only. */ + if (vstart < min_vaddr || vstart >=3D max_vaddr) + continue; + if (vend > max_vaddr || vend < min_vaddr) + vend =3D max_vaddr; + + while (vstart < vend) { + do_large_mapping(vstart, pstart); + vstart +=3D PGDIR_SIZE; + pstart +=3D PGDIR_SIZE; + } } } =20 --=20 2.43.0 From nobody Sun Sep 27 00:39:06 2026 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.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 388B2486B85 for ; Thu, 27 Aug 2026 18:28:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855303; cv=none; b=dtcpFf6C6k4Fpe70xgBq+04ASgXQdY0Z1u3rv9xptEQBEzNHR/aE6MlASVfK7xVLWCnyLpNfp2tvMl3FnzSCFOH5Yr+d5tYKcUZGPv8yCSXzpRns3Ojf69DCiMdteTrVrIx8H+HzA6NKhIvfz71ocQ22AWg+nmSfgUgEn9LWgMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855303; c=relaxed/simple; bh=yXdX+zpbNBeKwxVhS2Y2GevIJ4y3vDujudQupvSz5CU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tEs2bOY5Eu3VOjKwmUOsi6KumfPhRQEy6rDQrlducIYtKHFvxKomf8kZExlmqrse3IPbUgq71P2twoN8uqckPSMDVFK4wEyiF6ZdEqyaChRgAAKH/FwVFCTToAdJQdExEcLp8EGAz66UMllEzLFunJryaqe7D7CXjA9hhoyAu00= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=S45aFZdB; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="S45aFZdB" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-c250c6a6a9aso25116166b.1 for ; Thu, 27 Aug 2026 11:28:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787855300; x=1788460100; 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:content-type; bh=fGmwVcHszkXz2n4AUCcGnwYhm3WHQgOcXwRyS4LumNw=; b=S45aFZdBKOGJ0c1gLIVhA5I8YvpsJ1eeCokgu/3JSkPe0C6t4afnaX0kY0CQxBNLbL Qpc7n2353qjYyK/VhaZ8Geq/PaKf2QddkzR/8p8+SF63DUSfwLKDpe6xG+GeWtH6+73f 8U41n3RQR5kXRDGpGyhlBNJ/gLd0QmYjjunO3WRHQTnuX+4gYoR7cVRQLnG00BlZ/QTg NLv9h7HG7OnTOWcawiHHgWOlQCJMBcRlq5Jnr4oWRgoMEMEefl3IpTPWIwKyfm7zghum O4H70RgDV5T7E+PVDYptpm/5OTh18cjSOPsaM3Yjnd7g1+I93CLK8Upk8xoMZ6uf9504 lUDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787855300; x=1788460100; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=fGmwVcHszkXz2n4AUCcGnwYhm3WHQgOcXwRyS4LumNw=; b=Z4/x2Oyv4UcRpyj+3fzy68VoKO2Ew5HD677UReXBcnHhFJJ2HlBqbKeaazvT++NYHq ZAMohiUOOCBdSVrOpweWKw0KkKel7BKq22+h3DN184w/AxIlq0bJtHAm5JnwjYc9gj0/ vOpbM8ywmR6sGNoH/BFSyANPh15Nf9d2cvcIyLFzg5ENXZO3cVc2HbH6X0qaSZ5RQBFV wW7penQkmMeynSGE+14ddl0aK4TVn0FNa/BcAobA60p1vyMSDcPVc/z6wpyb71bMx8ng WqjnWTI2DS9koeaycCvoJ4pbd1EapFQx4cGnzSBqYFIARCOhKnXNtY4OlsN2F2m1lFV5 PfQw== X-Forwarded-Encrypted: i=1; AHgh+RqNk6RVvX48Z9+ssJRrrsQvlWSbsYC+7UvHBCrpNxuWsGrnq3C4WGOApZcWVUz/CoMSazxqA6QZsbiDiKc=@vger.kernel.org X-Gm-Message-State: AFuF++lD8u1Ni2uJtU8Ypez4bBgv3r+JPE7Dhv/DrGsoDKLHenqHJN8S 0M1PvX14R91atG6QoVoP504P/KsJiX9C9sd153LDb9lvc6F1JiJG3CcF X-Gm-Gg: AR+sD12z9ViC9Az3MSU//TR7lqGMv7fkPJnBxhQplhMrElqCJLigXNw9EePSt/baAbD kpZoTdvF2vz+NikG15zPMsVQWMhz7kt1H8Tk4ZzKo6J8QVuwMaOdtsqCgxEjOcacCD4+kZLDwlI TmovVOmzRzGxIRBWucUruO0WmSFqzrHLcEOUJ3qMN0cvlOy7BMqhwubHCiGdx5hHOIdhbB43rDa gxOSzyYA6AEjJy71TiqOZvg3rSAp+oRLaQHf4M/9TbYolH3PyNCaiTvVqDqlQxo/wXxJ8o+Lrt3 xvmlhg/P/esEn9Bpd7XL+0BKs6u8HCYrAGIUwkxyelHeOzhL1cmKayIXdCC2nVc0zo59H3IhStz /a1BYvsqcBQhGGipTPZJt7sj/vs3Wo3V8KedalNQ6LWJT9EYj37yZO1ObMijlfSz52cm2F+/IG6 Dg9d9MGMFfvUdoAOAaGerJqf/3RTkiWqracbGYWM9gqLmRoxkmTFZ/fPwzoK7pbR6JEw7iOvRJp 9AOHI4yb2Q2jPwuH79DqdthYc99rx4= X-Received: by 2002:a17:906:794d:b0:c20:2165:d74f with SMTP id a640c23a62f3a-c25571ef674mr45322366b.22.1787855300422; Thu, 27 Aug 2026 11:28:20 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c254e4e736dsm61288266b.11.2026.08.27.11.28.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:28:20 -0700 (PDT) From: Magnus Lindholm To: sparclinux@vger.kernel.org Cc: davem@davemloft.net, andreas@gaisler.com, linux-kernel@vger.kernel.org, sam@ravnborg.org, Magnus Lindholm Subject: [PATCH 2/5] sparc32: use memblock to find available system memory Date: Thu, 27 Aug 2026 20:24:14 +0200 Message-ID: <20260827182757.6856-3-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827182757.6856-1-linmag7@gmail.com> References: <20260827182757.6856-1-linmag7@gmail.com> 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" The SRMMU nocache pool is sized after memblock has been populated. Use memblock_phys_mem_size() instead of summing the private sp_banks array. Suggested-by: Sam Ravnborg Signed-off-by: Magnus Lindholm Reviewed-by: Sam Ravnborg --- arch/sparc/mm/srmmu.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index 483235458d69..3029527a5a9f 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -226,25 +226,13 @@ void srmmu_free_nocache(void *addr, int size) static void srmmu_early_allocate_ptable_skeleton(unsigned long start, unsigned long end); =20 -/* Return how much physical memory we have. */ -static unsigned long __init probe_memory(void) -{ - unsigned long total =3D 0; - int i; - - for (i =3D 0; sp_banks[i].num_bytes; i++) - total +=3D sp_banks[i].num_bytes; - - return total; -} - /* * Reserve nocache dynamically proportionally to the amount of * system RAM. -- Tomas Szepe , June 2002 */ static void __init srmmu_nocache_calcsize(void) { - unsigned long sysmemavail =3D probe_memory() / 1024; + unsigned long sysmemavail =3D memblock_phys_mem_size() / 1024; int srmmu_nocache_npages; =20 srmmu_nocache_npages =3D --=20 2.43.0 From nobody Sun Sep 27 00:39:06 2026 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 77F364C9010 for ; Thu, 27 Aug 2026 18:28:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855305; cv=none; b=qjZHnuD8lMnH1kP1WE0L8+nX0ids64hM6wcClVCpO9EEcjkBUg36PsKCVboYp5//7OovfYeRgJ1/2qeyOemGxdG1Ot0NJFVYp1d1epq6ntzUwNW1PMSmgOs6qS0UzZh0Bby3s8/5gPQtRXOcGopTWcv2a7lJ7h03RrMPiVXDnkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855305; c=relaxed/simple; bh=viX4jjItsK90zTlCcfaBZvb8khmRSizMKGI4tuVmIXs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XqZCS1QIhmhBtDgYMVnss5SMlRDlQ0a9EBaOBt2LsEj4rXAlz9jEExRiykMSmkPmKHF96XUkDt9yY8UXnpDPSrCZ7bRjjwpiHDgYI2lekmxdnRjyEXmL0hf64sRFOf7wvr+I7zQ0KGhqZAia3DneUZ92aCKT2hCklapNizVqsHM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CeLuOoOt; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CeLuOoOt" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-c25344a8c6cso23353566b.0 for ; Thu, 27 Aug 2026 11:28:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787855301; x=1788460101; 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:content-type; bh=gKiiL1nTCRECupJrUkk/zMnddPMRB/46RYLC+aZ136o=; b=CeLuOoOtVYaLooKONVIIUgwnpR/x7rtUeKYybdb1FZHGZrdn0NoFrdB3EUiGQIi+yE 9pfKltnIGL4OMygqeb4ZYCS2XOYzlKP8GDrxkYsAJC+el+RBwkJj8UtGrLlLYs7PMNP7 gj//5n1S8V+Z09axgEfYbGKVm32YTba+si+Q+8j16OL7uadkEA5JLnukKbl+ZM1GLZ8R DmZRHZfXBrjfaYs0hFvEm+Ws3qpYT9+Rwwo91DvviBgqQHg17MevSUN5TUVdVzQqMndb IdqWsd9XM2OGgrXbCBPApADkEeVCJL07uBNbJebm0MkyxCxl1nJ5oBW6QpqYkbKXDTJN ilKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787855301; x=1788460101; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=gKiiL1nTCRECupJrUkk/zMnddPMRB/46RYLC+aZ136o=; b=mNZz7IUgfHs9ya4pd1XltjRishjr5QA0WaxWFNAPNkhkR9MnEo3Hc7qXhhSF/RTg0V bncLnUGX+LEU7109wdQTSwmotLk/gIVQEa2uMNnxDlk6VTfqS3j88g31bMX32IQOIaEu ZEtm8zugOxECkT36Vk0deK2iG6MtIBcON/FUp7JZ2VHAYVO9iXrspVVBsJgXZSLNVeza +tj7JaLxY9Tk8tPo6/CIlkKrS8Q1W6gbWcr0IJHxxebjDKzxP1qFPpdE81+QUbZFdunG kZ6LziGu5Z7WiuGUGZR3G/DeKuh4QDRe7g0mX2eQf/eH3WdE41wleuyU0iWDmGRxkefg zAeQ== X-Forwarded-Encrypted: i=1; AHgh+RpdMOVc8Ld2m+9qy41pTpcMyUbMnNyl38gu3UILbZ8HVG1kJgDQwRgUOr81GRgJG6T9doz3+VIqYkBrw58=@vger.kernel.org X-Gm-Message-State: AFuF++nkmds7b2mZJNadBOWRlOYU5wuVL2HCcMVohu8CXZRs6ER1fKe6 vd+epnxRQdmQA3hnUBdtlDIksqvJfFJCxMNeqIkSILg28Ib0bu8UXCWK X-Gm-Gg: AR+sD13rA/c2iwuLlLJ9nCuAZ05Y1nBpexEFoZN8XzGmU7n8w3Z6Uv3DbmHf0KQnRkD qCGz5wGeF/TEgwrrHQAvwf/MJtarYJOUFRqkd7EKSVO6jU9n/ghw9N8qPef6lmQVp86hMGs1mz9 Lh8LuGyCy3f2e/64S0XKO0P+f/BnnmnPXLjNgsYVmmHDueoET8saU8WYfWfe/Sf7QhI79NLVU4r kYDRYT4ItsEZrDFHuBUTg3gevUFNKFaUnsCpFN+yi3ONIqFzlnyxFFAyxC9wSs7AVW56wH5M17H GBJYOFVzxFLateaGRZ08/F6qnsTa/e0TxHqlPcFHf7LUn2VdKpFgHNAzRH3aAAKqQ40sT9myF4Z kZbpGmlBBmtf/XRzhIZfq4xq1IVqa+qyeyZfimZFH9wUlnqH0r1FFVzc68jvFgnixtG/1HANHfK 9zlGqlEic9odNsMXvNQl56PQopmSWjoCKmsEyyv0gfm0BO1VGXFSzSZWuwfsz1CO6EdRiC/1cvk vYbB6OZuC0W4luNJXMjz5LBTumN9lyg X-Received: by 2002:a17:907:3c84:b0:c25:541:fd3a with SMTP id a640c23a62f3a-c2556c2f178mr55885566b.7.1787855301357; Thu, 27 Aug 2026 11:28:21 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c254e4e736dsm61288266b.11.2026.08.27.11.28.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:28:21 -0700 (PDT) From: Magnus Lindholm To: sparclinux@vger.kernel.org Cc: davem@davemloft.net, andreas@gaisler.com, linux-kernel@vger.kernel.org, sam@ravnborg.org, Magnus Lindholm Subject: [PATCH 3/5] sparc32: populate memblock from the PROM memory map Date: Thu, 27 Aug 2026 20:24:15 +0200 Message-ID: <20260827182757.6856-4-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827182757.6856-1-linmag7@gmail.com> References: <20260827182757.6856-1-linmag7@gmail.com> 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" Add each available PROM memory range to memblock as it is discovered. Keep populating sp_banks temporarily so the remaining users continue to work while they are converted in the following patches. Since the complete PROM map is now present before bootmem_init(), enforce the mem=3D limit after the legacy bank processing. Adding a smaller overlapping range would otherwise leave memory beyond the requested limit in memblock during this intermediate commit. Suggested-by: Sam Ravnborg Signed-off-by: Magnus Lindholm Reviewed-by: Sam Ravnborg --- arch/sparc/mm/init_32.c | 3 +++ arch/sparc/prom/memory.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c index e0e66f91ceeb..75050dfbc2ea 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -165,6 +165,9 @@ unsigned long __init bootmem_init(unsigned long *pages_= avail) memblock_add(sp_banks[i].base_addr, sp_banks[i].num_bytes); } =20 + if (cmdline_memory_size) + memblock_enforce_memory_limit(cmdline_memory_size); + /* Start with page aligned address of last symbol in kernel * image. */ diff --git a/arch/sparc/prom/memory.c b/arch/sparc/prom/memory.c index 269d6ab5ef5e..59962bc0bc82 100644 --- a/arch/sparc/prom/memory.c +++ b/arch/sparc/prom/memory.c @@ -7,6 +7,7 @@ */ =20 #include +#include #include #include =20 @@ -23,6 +24,7 @@ static int __init prom_meminit_v0(void) for (p =3D *(romvec->pv_v0mem.v0_available); p; p =3D p->theres_more) { sp_banks[index].base_addr =3D (unsigned long) p->start_adr; sp_banks[index].num_bytes =3D p->num_bytes; + memblock_add(p->start_adr, p->num_bytes & PAGE_MASK); index++; } =20 @@ -42,6 +44,7 @@ static int __init prom_meminit_v2(void) for (i =3D 0; i < num_ents; i++) { sp_banks[i].base_addr =3D reg[i].phys_addr; sp_banks[i].num_bytes =3D reg[i].reg_size; + memblock_add(reg[i].phys_addr, reg[i].reg_size & PAGE_MASK); } =20 return num_ents; --=20 2.43.0 From nobody Sun Sep 27 00:39:06 2026 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.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 2938A4C955E for ; Thu, 27 Aug 2026 18:28:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855306; cv=none; b=PYf8tTosjKNDOF1cwggnNk+DYwKkdrEycW30kUPe6IbDFy4N6rVgqNwmJwO25wYsuIXhxmkCHAhDF8QPPPMzA/E2PyIUZUNTQtf1hmwiFffGdT/YbRuDIFnPb1U25aCf0fi3Z/9Al0qj+ViZsD3j77CLKg8CGvaC6Ha/PpXZ5z8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855306; c=relaxed/simple; bh=iEsRjwEUSqrwp9vZdLEJmW3AeOu26mivGzWCQnlVGgU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o4rhRs9w+2c9YNMLKLsUMHNH5vAjuFUQHwN6pWZSp4xHBwS+Lf9aJG0bvbGzbsS2jpxgtEG81li4225xW/Jxy9l/NfNPkb3K/5kbFpLeryOz5CkWWWrwCm6LA0EcxF9mcf4pMR3FbVk8IW1fONwz5zyFfVUdUKYgCFyifTTg7MU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GUbCpCKN; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GUbCpCKN" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-c207cb16cf5so28466866b.1 for ; Thu, 27 Aug 2026 11:28:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787855302; x=1788460102; 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:content-type; bh=kO9uBWpdFWzsJy0Q2RhUJUXZIAG66L2n/WEZUITN610=; b=GUbCpCKNWBY+1m+BpW43/rJMS6UOeGCeOYLfElVJqAg9ECwpQCu0huQ0NNsAZZRf6C BY+2emVn22aSpWqxOclinA1LqYO5K1ZOpJ1zdYq45d7q6AHgoYr2PNrPP5viTxrwxoR+ nTZ5JOf/SqiwgFJhTYqDAsjvc6svH+7HVIB4+7psQgi9A6YOHsCnSzqNj/suk99MNFlJ bAnAdq1QYnzjz6M4zcEz4J0WUly3kZwG1TlxIo97mqwHAUb30nKG9fCYB9oe8GbVwaCq sEbFXBItO+zcwRrIEZS/IrCpB4hyyrB5jO81Cb9jniNrIV1K1YRXyc1ZiMD+W/DAZaO2 Zb0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787855302; x=1788460102; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=kO9uBWpdFWzsJy0Q2RhUJUXZIAG66L2n/WEZUITN610=; b=iK1PpkqY7H014InHD8VNxirfzQZ83axhrSt2o9tICSWfb+njbX5PJsJcl1YN98FlLM ScMHY2pNwLIIO4HiGH9+/xpogvdyrMpByIQtNjtgX9LDO6sN0y1TCyL2b90rIoL1SPsE IGi6tQVnlodwGX3iC/KKFDV5xhdn7Ao2/1ht9sDvJ+V90si6V23fxnTaBOMUaW6sLaDh ernhjT3Laly+SNnXlFe+V6BogElKKuWkeW/3CcdYbF47QjQbwmCuh3p4qkBlmQKlg421 /nw0vrGMKCxM/hUdPVGnSsUegv7ieevmA/oxACfWaEXiLmtCUln2wKsO7rA8vbbxrqzm S0MQ== X-Forwarded-Encrypted: i=1; AHgh+RpN0CptwUAMofd+AMYPBwD+GIRwk3D1MJK5tfL2biYdS7Tbbr8saLxrrWBBI+BRrmbF1ZUCu1D6XJ20OWw=@vger.kernel.org X-Gm-Message-State: AFuF++mxSWta50xA/C/JL1OdU6LYPT18qnaGgT5C7fPkNcayBQB7c9ZH AVxTpZ48xWDc5n0Q8VCKh4pS6wclj0McJBS4vsq8YWRrEoQK+PNTpnpk X-Gm-Gg: AR+sD10v4zceXwPUKLMLv4r1HFvwxFYU4+6oBWkY7wtRYjJn/yTz8lhxbmy59DY6BPL ajSbsmY8knEfqcFc3+B0yChXL0nc2551o2VZdy8SrGI84i3JcpknsRP7suC/6UY6Ji08ylhds96 8HP+3P9Gpu0kppues/AjnzE4gKDiFnvwGRt4fqY1+fWs4qIKY6ShAhJVEjax31x4XpTIAR0IPIy 6AoApUaI1rlJ8BohdIFk6g/jva3+LOTt4rcFC5BM1jA1+hl9VDQbTF7b0Dc6ew0fsXKUdtd6N3A Ispg1P6iwfahmJzPAPU8kmno1B59BIIKiW4R51SH4GvATk/nxiwCQRjlpXqx/aceB+3YkrpFbcO qQ/g6dEy9J8+PzrTFk69CHi/x6tU7ddEqz1+iMGV8k7H0HYtRrJbtGPQVhVfoyp9pfTLrBZ87jB xKE9RGr5b0vUrZhLNVSSpe7+ZxtRxoN6TF3dkfrH0mriLdbB/mlpQeeTMjfIS/7/uIm1O37pe5c nmTycA3JNhSSP260dEE5TuYSjnuKsU= X-Received: by 2002:a17:906:6a18:b0:c25:2fb9:b88d with SMTP id a640c23a62f3a-c2556c46bf3mr51193166b.8.1787855302284; Thu, 27 Aug 2026 11:28:22 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c254e4e736dsm61288266b.11.2026.08.27.11.28.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:28:21 -0700 (PDT) From: Magnus Lindholm To: sparclinux@vger.kernel.org Cc: davem@davemloft.net, andreas@gaisler.com, linux-kernel@vger.kernel.org, sam@ravnborg.org, Magnus Lindholm Subject: [PATCH 4/5] sparc32: move early memory setup to setup_arch Date: Thu, 27 Aug 2026 20:24:16 +0200 Message-ID: <20260827182757.6856-5-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827182757.6856-1-linmag7@gmail.com> References: <20260827182757.6856-1-linmag7@gmail.com> 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" Move the early memory configuration out of SRMMU paging setup and next to the rest of setup_arch(). Derive the PFN limits from memblock, reserve the kernel and initrd there, and retain mem=3D support with memblock_enforce_memory_limit(). When PAGE_OFFSET maps a relocated kernel, remove memory below phys_base from memblock because it cannot be reached through the linear map. This replaces the equivalent trimming of sp_banks. Suggested-by: Sam Ravnborg Signed-off-by: Magnus Lindholm Reviewed-by: Sam Ravnborg --- arch/sparc/include/asm/pgtable_32.h | 3 +- arch/sparc/kernel/setup_32.c | 118 +++++++++++++---------- arch/sparc/mm/init_32.c | 140 +--------------------------- arch/sparc/mm/srmmu.c | 4 - 4 files changed, 73 insertions(+), 192 deletions(-) diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/p= gtable_32.h index f89b1250661d..91a6032cf6a2 100644 --- a/arch/sparc/include/asm/pgtable_32.h +++ b/arch/sparc/include/asm/pgtable_32.h @@ -37,8 +37,7 @@ struct vm_area_struct; struct page; =20 void load_mmu(void); -unsigned long calc_highpages(void); -unsigned long __init bootmem_init(unsigned long *pages_avail); +void __init find_ramdisk(unsigned long end_of_phys_memory); =20 #define pte_ERROR(e) __builtin_trap() #define pmd_ERROR(e) __builtin_trap() diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c index 795714959da6..e5f1c3ee36df 100644 --- a/arch/sparc/kernel/setup_32.c +++ b/arch/sparc/kernel/setup_32.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -254,28 +255,77 @@ static __init void leon_patch(void) =20 struct tt_entry *sparc_ttable; =20 -/* Drop RAM below the kernel; the linear map runs upward from phys_base - * and cannot reach it. - */ -static void __init trim_sp_banks_below(unsigned long base) +unsigned long phys_base; +EXPORT_SYMBOL(phys_base); + +unsigned long pfn_base; +EXPORT_SYMBOL(pfn_base); + +unsigned long highend_pfn; + +static unsigned long __init calc_max_low_pfn(void) { - int i, j =3D 0; + unsigned long limit =3D pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT); + unsigned long last_pfn =3D 0; + phys_addr_t start, end; + u64 i; =20 - for (i =3D 0; sp_banks[i].num_bytes !=3D 0; i++) { - unsigned long start =3D sp_banks[i].base_addr; - unsigned long end =3D start + sp_banks[i].num_bytes; + for_each_mem_range(i, &start, &end) { + unsigned long start_pfn =3D PFN_DOWN(start); =20 - if (end <=3D base) - continue; /* wholly below - drop it */ - if (start < base) - start =3D base; /* straddles - trim the front */ + if (start_pfn >=3D limit) { + if (last_pfn < limit) + limit =3D last_pfn; + break; + } =20 - sp_banks[j].base_addr =3D start; - sp_banks[j].num_bytes =3D end - start; - j++; + last_pfn =3D PFN_DOWN(end); } - sp_banks[j].base_addr =3D 0; - sp_banks[j].num_bytes =3D 0; + + return limit; +} + +static void __init setup_memory(void) +{ + unsigned long ram_base =3D memblock_start_of_DRAM(); + unsigned long real_base =3D __get_phys(PAGE_OFFSET); + unsigned long size; + + memblock_set_bottom_up(true); + memblock_allow_resize(); + + phys_base =3D ram_base; + if (real_base && real_base !=3D phys_base) { + prom_printf("phys_base: RAM starts 0x%x but kernel is at 0x%x\n", + (unsigned int)phys_base, (unsigned int)real_base); + phys_base =3D real_base; + memblock_remove(0, phys_base); + prom_printf("phys_base: adopted 0x%x, RAM below it dropped\n", + (unsigned int)phys_base); + } + + if (cmdline_memory_size) + memblock_enforce_memory_limit(cmdline_memory_size); + + min_low_pfn =3D PFN_DOWN(memblock_start_of_DRAM()); + pfn_base =3D phys_base >> PAGE_SHIFT; + max_pfn =3D PFN_DOWN(memblock_end_of_DRAM()); + last_valid_pfn =3D max_pfn; + max_low_pfn =3D max_pfn; + highend_pfn =3D max_pfn; + + if (max_low_pfn > pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT)) + max_low_pfn =3D calc_max_low_pfn(); + + find_ramdisk(memblock_end_of_DRAM()); + + /* Reserve the kernel text/data/bss. */ + size =3D __pa(PAGE_ALIGN((unsigned long)&_end)) - phys_base; + memblock_reserve(phys_base, size); + memblock_add(phys_base, size); + + /* Only allow low memory to be allocated by memblock. */ + memblock_set_current_limit(PFN_PHYS(max_low_pfn)); } =20 /* Called from head_32.S - before we have setup anything @@ -306,9 +356,6 @@ void __init sparc32_start_kernel(struct linux_romvec *r= p) =20 void __init setup_arch(char **cmdline_p) { - int i; - unsigned long highest_paddr; - sparc_ttable =3D &trapbase[0]; =20 /* Initialize PROM console and command line. */ @@ -343,36 +390,7 @@ void __init setup_arch(char **cmdline_p) =20 idprom_init(); load_mmu(); - - phys_base =3D 0xffffffffUL; - highest_paddr =3D 0UL; - for (i =3D 0; sp_banks[i].num_bytes !=3D 0; i++) { - unsigned long top; - - if (sp_banks[i].base_addr < phys_base) - phys_base =3D sp_banks[i].base_addr; - top =3D sp_banks[i].base_addr + - sp_banks[i].num_bytes; - if (highest_paddr < top) - highest_paddr =3D top; - } - - /* phys_base must describe what PAGE_OFFSET maps to, not where RAM starts= . */ - { - unsigned long real_base =3D __get_phys(PAGE_OFFSET); - - if (real_base && real_base !=3D phys_base) { - prom_printf("phys_base: RAM starts 0x%x but kernel is at 0x%x\n", - (unsigned int)phys_base, - (unsigned int)real_base); - phys_base =3D real_base; - trim_sp_banks_below(phys_base); - prom_printf("phys_base: adopted 0x%x, RAM below it dropped\n", - (unsigned int)phys_base); - } - } - - pfn_base =3D phys_base >> PAGE_SHIFT; + setup_memory(); =20 if (!root_flags) root_mountflags &=3D ~MS_RDONLY; diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c index 75050dfbc2ea..62c41d896421 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -39,66 +39,15 @@ =20 static unsigned long *sparc_valid_addr_bitmap; =20 -unsigned long phys_base; -EXPORT_SYMBOL(phys_base); - -unsigned long pfn_base; -EXPORT_SYMBOL(pfn_base); - struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS+1]; =20 /* Initial ramdisk setup */ extern unsigned int sparc_ramdisk_image; extern unsigned int sparc_ramdisk_size; =20 -unsigned long highstart_pfn, highend_pfn; - unsigned long last_valid_pfn; =20 -unsigned long calc_highpages(void) -{ - int i; - int nr =3D 0; - - for (i =3D 0; sp_banks[i].num_bytes !=3D 0; i++) { - unsigned long start_pfn =3D sp_banks[i].base_addr >> PAGE_SHIFT; - unsigned long end_pfn =3D (sp_banks[i].base_addr + sp_banks[i].num_bytes= ) >> PAGE_SHIFT; - - if (end_pfn <=3D max_low_pfn) - continue; - - if (start_pfn < max_low_pfn) - start_pfn =3D max_low_pfn; - - nr +=3D end_pfn - start_pfn; - } - - return nr; -} - -static unsigned long calc_max_low_pfn(void) -{ - int i; - unsigned long tmp =3D pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT); - unsigned long curr_pfn, last_pfn; - - last_pfn =3D (sp_banks[0].base_addr + sp_banks[0].num_bytes) >> PAGE_SHIF= T; - for (i =3D 1; sp_banks[i].num_bytes !=3D 0; i++) { - curr_pfn =3D sp_banks[i].base_addr >> PAGE_SHIFT; - - if (curr_pfn >=3D tmp) { - if (last_pfn < tmp) - tmp =3D last_pfn; - break; - } - - last_pfn =3D (sp_banks[i].base_addr + sp_banks[i].num_bytes) >> PAGE_SHI= FT; - } - - return tmp; -} - -static void __init find_ramdisk(unsigned long end_of_phys_memory) +void __init find_ramdisk(unsigned long end_of_phys_memory) { #ifdef CONFIG_BLK_DEV_INITRD unsigned long size; @@ -128,83 +77,6 @@ static void __init find_ramdisk(unsigned long end_of_ph= ys_memory) #endif } =20 -unsigned long __init bootmem_init(unsigned long *pages_avail) -{ - unsigned long start_pfn, bytes_avail, size; - unsigned long end_of_phys_memory =3D 0; - unsigned long high_pages =3D 0; - int i; - - memblock_set_bottom_up(true); - memblock_allow_resize(); - - bytes_avail =3D 0UL; - for (i =3D 0; sp_banks[i].num_bytes !=3D 0; i++) { - end_of_phys_memory =3D sp_banks[i].base_addr + - sp_banks[i].num_bytes; - bytes_avail +=3D sp_banks[i].num_bytes; - if (cmdline_memory_size) { - if (bytes_avail > cmdline_memory_size) { - unsigned long slack =3D bytes_avail - cmdline_memory_size; - - bytes_avail -=3D slack; - end_of_phys_memory -=3D slack; - - sp_banks[i].num_bytes -=3D slack; - if (sp_banks[i].num_bytes =3D=3D 0) { - sp_banks[i].base_addr =3D 0xdeadbeef; - } else { - memblock_add(sp_banks[i].base_addr, - sp_banks[i].num_bytes); - sp_banks[i+1].num_bytes =3D 0; - sp_banks[i+1].base_addr =3D 0xdeadbeef; - } - break; - } - } - memblock_add(sp_banks[i].base_addr, sp_banks[i].num_bytes); - } - - if (cmdline_memory_size) - memblock_enforce_memory_limit(cmdline_memory_size); - - /* Start with page aligned address of last symbol in kernel - * image. - */ - start_pfn =3D (unsigned long)__pa(PAGE_ALIGN((unsigned long) &_end)); - - /* Now shift down to get the real physical page frame number. */ - start_pfn >>=3D PAGE_SHIFT; - - max_pfn =3D end_of_phys_memory >> PAGE_SHIFT; - - max_low_pfn =3D max_pfn; - highstart_pfn =3D highend_pfn =3D max_pfn; - - if (max_low_pfn > pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT)) { - highstart_pfn =3D pfn_base + (SRMMU_MAXMEM >> PAGE_SHIFT); - max_low_pfn =3D calc_max_low_pfn(); - high_pages =3D calc_highpages(); - printk(KERN_NOTICE "%ldMB HIGHMEM available.\n", - high_pages >> (20 - PAGE_SHIFT)); - } - - find_ramdisk(end_of_phys_memory); - - /* Reserve the kernel text/data/bss. */ - size =3D (start_pfn << PAGE_SHIFT) - phys_base; - memblock_reserve(phys_base, size); - memblock_add(phys_base, size); - - size =3D memblock_phys_mem_size() - memblock_reserved_size(); - *pages_avail =3D (size >> PAGE_SHIFT) - high_pages; - - /* Only allow low memory to be allocated via memblock allocation */ - memblock_set_current_limit(max_low_pfn << PAGE_SHIFT); - - return max_pfn; -} - /* * paging_init() sets up the page tables: We call the MMU specific * init routine based upon the Sun model type on the Sparc. @@ -220,14 +92,10 @@ void __init paging_init(void) =20 static void __init taint_real_pages(void) { - int i; - - for (i =3D 0; sp_banks[i].num_bytes; i++) { - unsigned long start, end; - - start =3D sp_banks[i].base_addr; - end =3D start + sp_banks[i].num_bytes; + phys_addr_t start, end; + u64 i; =20 + for_each_mem_range(i, &start, &end) { while (start < end) { set_bit(start >> 20, sparc_valid_addr_bitmap); start +=3D PAGE_SIZE; diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index 3029527a5a9f..272e430f8bd8 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -884,7 +884,6 @@ void __init srmmu_paging_init(void) pud_t *pud; pmd_t *pmd; pte_t *pte; - unsigned long pages_avail; =20 init_mm.context =3D (unsigned long) NO_CONTEXT; sparc_iomap.start =3D SUN4M_IOBASE_VADDR; /* 16MB of IOSPACE on all sun4m= 's. */ @@ -910,9 +909,6 @@ void __init srmmu_paging_init(void) prom_halt(); } =20 - pages_avail =3D 0; - last_valid_pfn =3D bootmem_init(&pages_avail); - srmmu_nocache_calcsize(); srmmu_nocache_init(); srmmu_inherit_prom_mappings(0xfe400000, (LINUX_OPPROM_ENDVM - PAGE_SIZE)); --=20 2.43.0 From nobody Sun Sep 27 00:39:06 2026 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 1ACA54C8FF0 for ; Thu, 27 Aug 2026 18:28:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855306; cv=none; b=iZ0Jg0zWvE7WYcEf5FG/UkyqpsjQZbz7gwSIHVbgHujD/BspPXHrkvNYj9OGpU9H9avoRKSp3rV/9Z0ryTad7+kN1Z0Tew6pOTIudjeQQhCYcS+U3iG/GN3F26SRKPe+mlvNI0d6g6XV7xdHtMdMigRsJ/Zz+Hz2JbAwlQ6FJkA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787855306; c=relaxed/simple; bh=kfvcDNFLDvpPA7sqXYTXffon/3kHbf04QAWcOZvY6gQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=j7T7pW8dY6z5A3xS4zI2HjEmw5UlRxbq4H6AsrnRTdn6PLYabhLYN+u88SZZwLRJWO+f6iHnvqR1IaERzsanuEpvzc6ajTSk90VwEEAsHfqPIZOu124kH5BZwkvMerzd/S5TVZh2XbPO10t3xKo8PjELXcKy7GiKeI3mwuJzvwc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=W4Os7gYj; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W4Os7gYj" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-c169ae1cb26so292339666b.1 for ; Thu, 27 Aug 2026 11:28:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787855303; x=1788460103; 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:content-type; bh=6wG70SWFyuhXCTUL7tySjRNucUOB8Zz4p1m/bUcF7/Y=; b=W4Os7gYjFiHKGhjaAR1ueRi0aTApjuofo6gmDP5rUncm5wO2q82eudYvIJWn7c51lx FEiBMv/5GM6tUYYtSxZGGnJljyH5fE9cnOY3H+bmerw0RDxSuoAJxirQ+NmdfKbfQvJC Mv9xPzoLrJ0bQw3e2a05VQbQxgmRFJfk/GN4WezAf5gOznQQ5qRkqKnIEGWKFGscHmYl 46l5KvczLnRYajQ1NInsX1+PUPqXLRJXsN4gLEyKdngOy3juu5qxnVO3/M7xbTh/o4Xy UMf22l0fl+OJDxsfDgJkzagNIEC2xsXjeXwnEfPvFxVubLiMxueIf0301acgqvRatdOy eaZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787855303; x=1788460103; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6wG70SWFyuhXCTUL7tySjRNucUOB8Zz4p1m/bUcF7/Y=; b=VucmcbkFNeucin4B19p7vNpZCh5L+B5+qfhfAX4yTS3Khh7agBnNZeimnqhHNHr1IN ukY6S/JqNK4boevr6Fp381Q8m3qnYLGol7AYfzSbR7s0dMSTHIEW1Jy10iziKu/j1VDL UE7hLDU33Aoxk4WitnLvUpLojnqFFa+21gP83kYcFe6w5v5QOHncLHnSPMURH0Igg76c Jgd4Y2vPyJMw+fpBCo2dNfWfKun1+EWTvAzr/ulu7JlbOlNVJQqhgGME5gLO5sd/mqGV 4dZBBgcwegRWr7MV6xE1BU0ZZe24flUDV5eL4YqiVj5qL3h1zWVSAS5w2fsYDnp9Kci4 kj7g== X-Forwarded-Encrypted: i=1; AHgh+Roj7f/sXcle+tnY/BX/ZhWhavNRZ/FbRPw4xNWbsvZIJJ4tx8DtEQN5GUU2hcLKIxnuiavefcYinkgxIlE=@vger.kernel.org X-Gm-Message-State: AFuF++lGnyWIabzNJS2jOuK+6PX1hdbifZHlCVCFeu94HFcL/lecscRv gNEfImK//1+FJUD7jpRea8vFmtb/G2DOnZFXpBNhrfolrvGpSBzke4yw X-Gm-Gg: AR+sD13Fvq0QAlaLMgTQLtYqhK4GWdiKCpVJMsi298IeUpAJtAKNTwq+8wIDMu+ighT MYopok0d1b7AZzOettAR/ubjXt03EEmNj3Oi1EOF+rBFG0lj0ESDP/kgVf6EINyZqkXafmXmIYa OX2TzuGO9IvrfDdauxHZvEgzHRD2ky/1LIftVjX9y9xmJOtzE2J4dirAnIXJJApgYhbkEceFlTa SXjykZyUmw6PUtTEqWVW9dLYmRecdo623ZYz2k3/NFwIR2hVWXItRTc+ELIEP4MFSfRkTL2JD5U dBsa26Z3opov+Y9i8vYAcCfoWE+v1cAbA2nfDPPl3TGR9Fqat+/4exl9CwbGeRSHEPHIbBYly93 fClOy3G3llHnyDBbV1FJMhmAXJIt6dRQWoWe2OuB2inGt55WkuXwvmFV0i8XrIi9pxfuVv6ZX5n GuPgpwFgd8x1OTH0GfAh1oA59Czxa1JlqEpOl3Uu0e6dYWSw3JfIL8vfC2vwSs1wkxeG94MM4FL nJ32zDv1DGnVl4fzO6bphL7o6GDUzY= X-Received: by 2002:a17:906:4784:b0:c1c:49d9:4c34 with SMTP id a640c23a62f3a-c25360ae6f6mr650715066b.11.1787855303372; Thu, 27 Aug 2026 11:28:23 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c254e4e736dsm61288266b.11.2026.08.27.11.28.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2026 11:28:22 -0700 (PDT) From: Magnus Lindholm To: sparclinux@vger.kernel.org Cc: davem@davemloft.net, andreas@gaisler.com, linux-kernel@vger.kernel.org, sam@ravnborg.org, Magnus Lindholm Subject: [PATCH 5/5] sparc32: drop sp_banks Date: Thu, 27 Aug 2026 20:24:17 +0200 Message-ID: <20260827182757.6856-6-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260827182757.6856-1-linmag7@gmail.com> References: <20260827182757.6856-1-linmag7@gmail.com> 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" All memory-map consumers now use memblock. Stop duplicating the PROM map in sp_banks and remove the array, its type, and its fixed bank limit. Suggested-by: Sam Ravnborg Signed-off-by: Magnus Lindholm Reviewed-by: Sam Ravnborg --- arch/sparc/include/asm/page_32.h | 16 ----------- arch/sparc/mm/init_32.c | 2 -- arch/sparc/prom/memory.c | 48 ++++---------------------------- 3 files changed, 6 insertions(+), 60 deletions(-) diff --git a/arch/sparc/include/asm/page_32.h b/arch/sparc/include/asm/page= _32.h index c1bccbedf567..5daa5fd8eaa5 100644 --- a/arch/sparc/include/asm/page_32.h +++ b/arch/sparc/include/asm/page_32.h @@ -26,22 +26,6 @@ sparc_flush_page_to_ram(page); \ } while (0) =20 -/* The following structure is used to hold the physical - * memory configuration of the machine. This is filled in - * prom_meminit() and is later used by mem_init() to set up - * mem_map[]. We statically allocate SPARC_PHYS_BANKS+1 of - * these structs, this is arbitrary. The entry after the - * last valid one has num_bytes=3D=3D0. - */ -struct sparc_phys_banks { - unsigned long base_addr; - unsigned long num_bytes; -}; - -#define SPARC_PHYS_BANKS 32 - -extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS+1]; - /* passing structs on the Sparc slow us down tremendously... */ =20 /* #define STRICT_MM_TYPECHECKS */ diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c index 62c41d896421..4fc77ccedcbd 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -39,8 +39,6 @@ =20 static unsigned long *sparc_valid_addr_bitmap; =20 -struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS+1]; - /* Initial ramdisk setup */ extern unsigned int sparc_ramdisk_image; extern unsigned int sparc_ramdisk_size; diff --git a/arch/sparc/prom/memory.c b/arch/sparc/prom/memory.c index 59962bc0bc82..3f65bde2bb89 100644 --- a/arch/sparc/prom/memory.c +++ b/arch/sparc/prom/memory.c @@ -8,30 +8,21 @@ =20 #include #include -#include #include =20 #include #include #include =20 -static int __init prom_meminit_v0(void) +static void __init prom_meminit_v0(void) { struct linux_mlist_v0 *p; - int index; =20 - index =3D 0; - for (p =3D *(romvec->pv_v0mem.v0_available); p; p =3D p->theres_more) { - sp_banks[index].base_addr =3D (unsigned long) p->start_adr; - sp_banks[index].num_bytes =3D p->num_bytes; + for (p =3D *(romvec->pv_v0mem.v0_available); p; p =3D p->theres_more) memblock_add(p->start_adr, p->num_bytes & PAGE_MASK); - index++; - } - - return index; } =20 -static int __init prom_meminit_v2(void) +static void __init prom_meminit_v2(void) { struct linux_prom_registers reg[64]; phandle node; @@ -41,51 +32,24 @@ static int __init prom_meminit_v2(void) size =3D prom_getproperty(node, "available", (char *) reg, sizeof(reg)); num_ents =3D size / sizeof(struct linux_prom_registers); =20 - for (i =3D 0; i < num_ents; i++) { - sp_banks[i].base_addr =3D reg[i].phys_addr; - sp_banks[i].num_bytes =3D reg[i].reg_size; + for (i =3D 0; i < num_ents; i++) memblock_add(reg[i].phys_addr, reg[i].reg_size & PAGE_MASK); - } - - return num_ents; -} - -static int sp_banks_cmp(const void *a, const void *b) -{ - const struct sparc_phys_banks *x =3D a, *y =3D b; - - if (x->base_addr > y->base_addr) - return 1; - if (x->base_addr < y->base_addr) - return -1; - return 0; } =20 /* Initialize the memory lists based upon the prom version. */ void __init prom_meminit(void) { - int i, num_ents =3D 0; - switch (prom_vers) { case PROM_V0: - num_ents =3D prom_meminit_v0(); + prom_meminit_v0(); break; =20 case PROM_V2: case PROM_V3: - num_ents =3D prom_meminit_v2(); + prom_meminit_v2(); break; =20 default: break; } - sort(sp_banks, num_ents, sizeof(struct sparc_phys_banks), - sp_banks_cmp, NULL); - - /* Sentinel. */ - sp_banks[num_ents].base_addr =3D 0xdeadbeef; - sp_banks[num_ents].num_bytes =3D 0; - - for (i =3D 0; i < num_ents; i++) - sp_banks[i].num_bytes &=3D PAGE_MASK; } --=20 2.43.0