From nobody Sat Sep 26 21:57:41 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 6E3E5382395 for ; Sun, 30 Aug 2026 12:08:00 +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=1788091682; cv=none; b=jFArgCDGu70YuFWe+SDA0wWYMa5xSWcYQ/3T2fhdEknUaxv8EKTfSYByX4cbNnur+wTf1pqjhYHY3y4F4cSRp+AlBRHW/AaAdV55EeU9kf+D3gdHsqRAgntGfi+SZbJaK1om0xGf8NRFIYQkC52pgBpNDnW4jbOHX9ZNeQVNhjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091682; c=relaxed/simple; bh=/L+B8tJRHS4R8Ad2CdPqQmMJuscZ3nYa9ow7BrVUDeE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KedOTaTFi/F/dWyByY9nLJzUUfm4uQK35/HVCddasaalr+GdAywmo0dqX6+amHjaUiZYIXCXk0JGPO/EGmmQunMICGUVLZqbCwhZQgs2fVV/88z5GNw0rxpBRR6AadhtQopyvk3B3yT6GeTR8Qry6TlvNNzHxTICjnZhHsjhpRE= 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=h9h0D8M3; 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="h9h0D8M3" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-c2531f453eeso394521666b.3 for ; Sun, 30 Aug 2026 05:08:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788091678; x=1788696478; 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=w3uv3O4cBZWmtlUcIzNA+n7dDtgG66MOQOoF5n5RkYY=; b=h9h0D8M3Eyf3m6EzTPomDeuKFKk73RXmbjhsh7yYdy+LK0xJ6o4T+uzv8lOgQ8ZcED YNBgqrei3QP5XY4+NbmsJrXt5tLxM3i5Hen72Fx3bjmHi3hr7wM+87IynnkIu4wyRO+E NzVS9acRjwRJ6rh/umCCbDH899AiITuQLEhrNmlp2X9X7iabqbnFBDDrwe5xi6judVFO rRiCsKgL9fo33roTEGXhYjFet/FXNslqM2RYb3GNmDyxca8AEifgiC/HPOrD/KjDY4ru w6BZRO9Dm340FfG7PJPCEa8hKfzKNOml6/2l3ThYtxZcUh/PQU2MJWbGiz0VKCvanq4t FMig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788091678; x=1788696478; 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=w3uv3O4cBZWmtlUcIzNA+n7dDtgG66MOQOoF5n5RkYY=; b=SHf0yhHtEC4A76UExDRLSEBWNudyMDOXObA5ukhXHXOfSWGBIoLMt0awVK3NcvN87M Bt1KZcfb5cQoe4ARh5Adqnphf3RyMOwqK+3sZPTZiY/1Tzj/jvEKtIENyVT4ySw/8Pgp t+WC/P6x9/yhK9rAxedp2D/THktIK0tZcvXawmt6gTXupb6HhQOwz3DJ9LQpl4hBkSys J7kLpVIKJLTjukbydE4h0mRMftgg8OezV7rn2ErLfeHkuk2EB4MgPUXXt3XI2Oqe3mck MQ7i9vOKAqd+73xKn6FSSR+mc/dy6yJMFdbDsLnX1iRFQ+VepSNap3FsUKrWrtsnE/+4 ESXg== X-Forwarded-Encrypted: i=1; AHgh+RoqC0IoXnJjbpvL+wOx6Lf/PFcKiYc/rleTM0Ovd3L0Z83uMm4HBvIiKEM3DAS4zhWTj8cL30CjrTMyPo4=@vger.kernel.org X-Gm-Message-State: AFuF++m1Abx9WvAgbVPXUyex7xzXe2WzgOiUgyzqBfHP8+9/V++1XSmU 1F5Ar3IDOB7YpPW25B528dQaNlcrPtV1w1ndvrz0C62axxHji+/PA2+U X-Gm-Gg: AR+sD10R11yyT/fGg3lCAVPt0RceXZIp4wWJQ0FYhLdaOA7dx3zdTqvd04OxTRLfWpt qhLvfig9gyS6wVALvx/Pro90IR3jxvwsbjcKaqq+9txcCfRPYkWfxgI1eMbLw0Db8ngZ/+hjBnH LdH8u8nO5OqYbh9wSWBjNVb5o/+yDmudlx9p9M53GF3JI30iqhCGmmJv4hOOG5g4L6G6DxfDxIW MsyKUg32DOdAM54H4hfn+wcZYMoXkn/mYHaVuOBw7g3WjtgHgkA9RLQ4GZgYioF9OoCe2yk2Pib 7dXHYIteeLK4C7GOELraMlpBrD0k6UQmUpQmUBUywV17VDBqY6eu5+lK5RfgHCZA45z/ToJ4RD5 PHS7SSvxIzJzmZXZpXzNvwHh7ikXJDLL3bnE5UfBx7fuCuYCEhhEKtrwl7q+enmoKaGCRn+kLBg 6E/Ru1Ia9IYddLn3XHuw4fTrVIu5wKoc0CBlnDIkDV4y4Hg/xGpMF2/nw7PjNyTS/aYM9Hj/Y63 6u5o0IlsaKwUTRSx+s3MerCm0ztnBI= X-Received: by 2002:a17:907:72cc:b0:c21:2c32:e2da with SMTP id a640c23a62f3a-c2556d9fe3dmr1081954966b.8.1788091678234; Sun, 30 Aug 2026 05:07:58 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c255ee09eb6sm304287966b.10.2026.08.30.05.07.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 05:07:57 -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, glaubitz@physik.fu-berlin.de, Magnus Lindholm Subject: [PATCH v2 1/6] sparc32: use memblock when mapping the kernel Date: Sun, 30 Aug 2026 14:06:40 +0200 Message-ID: <20260830120742.20950-2-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260830120742.20950-1-linmag7@gmail.com> References: <20260830120742.20950-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 Sat Sep 26 21:57:41 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (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 B350624293C for ; Sun, 30 Aug 2026 12:08:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091683; cv=none; b=dkY1DSTj//R80cgXapk1hLKM0AC981vofOg3B+MNmp3J57JWNichcoXF4XErIuifFVTvRuOX6wh8+c4H2c2uYya6488T1SrNj3XHaWU4YZfZnNDRBOEYhncX/dTCLPwZvNs6/byQvkU0qSgwTnQ9hWko22Vr0/h3bnTyXg+BUNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091683; c=relaxed/simple; bh=kBYbgY9C1IVSMpDCAy1CI3kRgaJc78wxHYafgcraeKw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qJwxoDkWDae0Uw/TVqcWrhfs1xHOwZpKAVYkLmzbS0yHz5Hi7sEf3mBTktyetKZHpfYPfb6AXvuzpMtqHCazGs4DXSeNtENaQEfBPiJlJmtsl+uKpRU5GOv0LMopj5ZKinhdiM/MiyhUFYHuJDxTUjgBYFS4oZVJ2LaB3BOExlE= 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=EZMKFqJt; arc=none smtp.client-ip=209.85.218.46 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="EZMKFqJt" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-c1712a04ddaso407690966b.2 for ; Sun, 30 Aug 2026 05:08:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788091680; x=1788696480; 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=7o67oyyTyEc09pnUJGRRIXfdxc355uJN1B7XMFhIUSM=; b=EZMKFqJtQmOB8gT4GU5ZCwQFZUrkm/BDpyWV3b3WTfleh2sj+Yile9pGGXq2LF8ebo F1zlMGUfiP+08hv1dmaGR28BQHFbkPAogwtlNrN1KykSFx6n/zO6rTTfTDbRunTh4cWK Hij2eweYEnB0PVLVppoy9cbhukOYGOQNyIr3UBxWn2vBCZz3cCAOEl/0W/SO+/R9V2JS 6cjiGE6oDq8J1dSWy9h8IGSfRhfoP3bGCiMP/B2ZbCtIZUlIJpOCvC5C329mkiSzN4dj RUti3J0btPhsTO10EK7Oi+yr8XJ9QBUDf0mFxGpn91fPmsXyUz/pQcWCEWQBdrH2If14 pYfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788091680; x=1788696480; 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=7o67oyyTyEc09pnUJGRRIXfdxc355uJN1B7XMFhIUSM=; b=JPakrA1QqOyOd337WdpsxPJVgRHgtQJVU9g8El4dbbBluwpPRb3b9AJyJzAgHPvcCy ctuJFR1xxFoqWJPswaHLRo69kPXy5eXajC3PMErzOyj8d9VV5BsWcaM4VNK6bB7Y0YVR /RpTNLL2MHtgBrNcT9KY3YMshGt6dmQh5PCThOFID6vPQPWDFikOh0pqEo5zf67/u1Rr XLoa2TsfZ5v8xwxVIL2pI7EX/wxPb6owJ8BNZPkRA9AWGIVysdn5GZawo+bdf5o9t3zY e/ahg2kHF5KIqElN2zxqQDmi0AXppLO1JIXQsVeJ53weLndWhzG4nozHJDuJwVGNPcBH k4Xw== X-Forwarded-Encrypted: i=1; AHgh+RoDX0HTvBV4dwg0H6AQZjw8uxfUn0odARrkR40uZPwTiE1A8DKDlgs2Gl+qpnhhX+kAs5BFFT9762pqxcw=@vger.kernel.org X-Gm-Message-State: AFuF++mlvU86ajk9pkLtt+2j8uKwqro1UkutLHqa4Z3R0/v3bzjFaHf8 Yr/Az3ILxehkGJNOsXCt5K+5WdxMfFimTTGoeJLpaGoYz/8EgQkxIsuE X-Gm-Gg: AR+sD10Q0EjO1P0KSEOJATrWiviz8Kl1npjeJ+RS6EZKbt+2od8Yc2Fhf37kon8PXQm nnG1xXmkcNAoWq1yCBYBqwMOtqc/2vOkOB70WzmxYUpv7BO3Z5le/J7feKaETXujGDLPWSD8CAc hS8thTjPyi202GqVtxYLMmSXgL7ygMl3AhGSMJMSpmd0MqzVG2Z/VE81FBHxK+8OyL/lI0NMIX+ mBiWxTTGSOgC36ED19LK4EFO7pILt3QA8d37IZgJWp0xErmeEl0sBuPBeVhZmvmM+HtfwGpXl70 2yp66Gg+o5zPSOitXF9gJHaoVT0s1OPDqZonEdg2nZ2SW3X1KO306H/4t3xBsBT/MGzBiwob/uS MRaA3ZR998R3QZDfPs9TMLKLCTACQxkbvfrsFa/7yB+bQZ1TJxihAAOy3pN77aabYSgV/vs5HNG e77g/+HZYbk+8oVqKuC9ThovvuvGqdKs+BSuATn+DTVoDLn/25Z9yVfyhVG4OiRft2MP1jHx7IR AHhW8bjXn/7ToezJnU22IB4M4MJBb8f51ZFOUPHgg== X-Received: by 2002:a17:907:c01c:b0:c21:382e:9a38 with SMTP id a640c23a62f3a-c2556c18e20mr1323915266b.2.1788091679662; Sun, 30 Aug 2026 05:07:59 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c255ee09eb6sm304287966b.10.2026.08.30.05.07.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 05:07:59 -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, glaubitz@physik.fu-berlin.de, Magnus Lindholm Subject: [PATCH v2 2/6] sparc32: use memblock to find available system memory Date: Sun, 30 Aug 2026 14:06:41 +0200 Message-ID: <20260830120742.20950-3-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260830120742.20950-1-linmag7@gmail.com> References: <20260830120742.20950-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 Sat Sep 26 21:57:41 2026 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 BF10A3B3BEC for ; Sun, 30 Aug 2026 12:08:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091685; cv=none; b=TBc627gbsUn/GKGLqrPaRlKm5VVlgCkr08mY9NYWAWejBlL7H5dd/o7hB8FW0O3qO27mE53HbUSrpBsIL8dhlK6DF3Vw2d0RKrsX379ppNW7TJT0Lep6EHHg4oiNDMUrRsei3AF2VyVAot3NPDzkaK2AgGv0Pzi5DyJ6/FSita0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091685; c=relaxed/simple; bh=VmbFlELFJ3Rn+I0JOfMdlDLEE3OEnrmuWAkyZTBARKw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r6aK/oEykbn4GLpCuWrwBe1XPSpFhNEDS98pURYcTuN8bzoWZCkYwkvSm3sbGK0ePjGjZ6sJIdjwoudtdB2/MOOgHkKzP6cYcZpnAjQrHJ7zdXRR1eJl1FjCB1kG1d+ZtNFLhWjLslnwNbQVBMONtUDGgyV2vMA78Zdcia47YXs= 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=kUKynZOk; arc=none smtp.client-ip=209.85.218.43 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="kUKynZOk" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-c2569aa5116so250660566b.0 for ; Sun, 30 Aug 2026 05:08:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788091681; x=1788696481; 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=uJ7HB4Zmwe3amRULeH6fSoLAudldxAC6NdOXYXWuTOQ=; b=kUKynZOkJTzl3jCgeGVf25oKJ285QGb/XO9krKc6Zp8qZH1eqybC8+4xiZpfMHhfgq YDAYhw8FLUG3dDLnCjO4kRLBYkDg+erVwByOFmDzgzUEiNHnnOVkGLspNSInxQrthrvk 5+0gM/7iPyFos1nQboGirqRmQi+V0Hs8YFg8Vy9Wnym4WNeUa+/Ocxr0VQ0FBRU95Z8U 7PP1I8euDpfvFEkcsOfsZKKuzeiHYLxtiCCXsW46klFN2G9sjkUg0rKvTYsgi6kzVTbs 0IHpQM0noLdqeTmUVK2Kuwr7qUWsvp7fNqQjDZnUTzh5f+KKpCzeyODODVE3PPGTT/1v 9Dug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788091681; x=1788696481; 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=uJ7HB4Zmwe3amRULeH6fSoLAudldxAC6NdOXYXWuTOQ=; b=bzYzCwV3e4h4jzI7FP8X77hcKA0oqy7Dzf9yf23uVB+HmYcJtM3WbHqNtEXfPwbAeL 8xsgov4cP+aw3yQvBPp93BizbsENJsg/4ktpr2kvXUZih1RvA06UbWvqw7hJ2pW9fkcI ZWnCWdtLQogsksEBDsQ66BLLNpnAfdrMcSlPc0w1kt2Sv5EzqXECnt7IIfr4D4s4F0Xj o72ZYDK3QX0Q6uSrEjcwRAoOF3pu/RhZn0Ia7Pvkj/nGOuNMsMk9DJ86cOVjkmEAZ5vl 2xEvN5MaPl+GO1PNdPK06f/ro39qETKhO/e1DbXu8L01zc2/V1ddDM2Ckr9//Ne36iux KQ1Q== X-Forwarded-Encrypted: i=1; AHgh+Ro3u+HhySP/cwkAxZA1ouOUF2c+U4Ub956bDS9vzO4mHPrhi+rrusVvLD0xSsO04AxIjm99n+H5hC9/KoY=@vger.kernel.org X-Gm-Message-State: AFuF++nLQIHvaYGKHK+xGaxtA6CxyzrxDFgzsCeocYxXUvjpdQ3vccXn 7SbBSq6oFrGc8FHH6pTEfbQUmfbnxX+4GdmL3LEDG2wHGUgpmOcf7wTZ X-Gm-Gg: AR+sD12BQoNEnoCkQF8zmyE/nW5MuGv0EvQ2L0JaQ6lV1lo/78cbLK1jQkTA18gVAB6 hB2WP6ZHVtwpMKC1472xRcYSSX0Bh5p8UJuwYI6a5MW0sHHgAaNSwmfbco/idvI0ia0xTqhEX8a Ez9Q+SORsnlA8PyGKea3M1k5xVKZfuiCD2JZS90nHIAZ9l82GGHRXuOVCcvhOMySHji/IYqsDx+ dWV1k08bzQIr38burp3eta+U893MXNgyeCNHrm+9pDAhasctoOmzSK5KYfQ+x0Mtqp1CVUe+VFZ bo9/EIQRFd+OqRTNb/OptsjaEZ6KBiZa6iqhWIMIA5J+QythjVRC65jmlZJ+3kuWnGpqz7ppOt5 9FvYE+PpIe0f38twuh3OQcye0a5IulucEwMDZWOERQ2wVOunp/RVFWa45zX7kLqNoNeUBZVLVf/ juohAoe2d1mMjBx+rqXoV+8j8hramK/+HtBbj0FvwehmEbNm8x7N8CncVG4JA0erIqeFyZEJU1p ++4rQhSFMM7d1NYknj/84BNUt4ggmQ= X-Received: by 2002:a17:906:99d4:b0:c25:3e36:acc8 with SMTP id a640c23a62f3a-c25966d7ff6mr110233066b.4.1788091680875; Sun, 30 Aug 2026 05:08:00 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c255ee09eb6sm304287966b.10.2026.08.30.05.07.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 05:08:00 -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, glaubitz@physik.fu-berlin.de, Magnus Lindholm Subject: [PATCH v2 3/6] sparc32: populate memblock from the PROM memory map Date: Sun, 30 Aug 2026 14:06:42 +0200 Message-ID: <20260830120742.20950-4-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260830120742.20950-1-linmag7@gmail.com> References: <20260830120742.20950-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 Sat Sep 26 21:57:41 2026 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 64B913B3899 for ; Sun, 30 Aug 2026 12:08:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091687; cv=none; b=EWL/TuB8fMHnhpcRmbXQqzvcYOtG1kzUcKVYCmbit/bQzsJSWjExvwbeY2c1YZQp8UX6pltPc1bc0j2ZdAD816Edq73uXlBBPaM++NKxuB5+MhMq4hCK7A2okRzvJpFA0naxi5sh3BxCNtzNAujI7l/qXUoHPWUnuCN/mQpt7D4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091687; c=relaxed/simple; bh=z2qi+q5AJnkxlEfjpzpDgsmodaQkxj8lO318C99t39Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uh9+fhjKgnETDwJ44A73udtUBvAj8XUl6PshznWkOmrQA7zff8eliGMcAr5Jq/DoqsFKSH+N9DYDJP4HmkzI5V3vXsLYbR/u+kRzeBOnZj4N03E8+h5jTCmpxq3OrAMVqAp1nK6QJNhj/oeYxNIKc3QNEI8InDu+Gj1TNum5xcs= 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=EQHRUVz0; arc=none smtp.client-ip=209.85.218.45 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="EQHRUVz0" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-c20ce3c118aso501239366b.0 for ; Sun, 30 Aug 2026 05:08:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788091682; x=1788696482; 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=s3Gsn95qnpdRU3YZCGZvsdQTe2c2T737LYOnz4pViig=; b=EQHRUVz0gmOjv2JeljJSN4Ip4fZFeYtMqml+pi8mjjEz7FtuDum0KDLF+37tyKvW1C GsCPgV8QLxV+nwGHFVL9Jjj5LQSknAm4qsbRmDurhXQXyRrVWRKWHmDLAEQHqWNbwZeY Lad8gze+4iyiJFJ7WpINDuuaBvuz+E2WmioiJ4ohhQ8ttz7xeIW1WBdwf53ZHocmSbiR +60iaWc0rCWxW6Ecem/Dz7VubZWkqyLmvTAF1ndRnPFN6Mg3+Gry03vsXYjo6OUCQHJ0 zmmi96Wpncs9/XSGn6fZvvVwdcgp0iiPSd5Gd7Ub0s+8k/6kkl/V4GtnIWzfeHRWPaXz aAgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788091682; x=1788696482; 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=s3Gsn95qnpdRU3YZCGZvsdQTe2c2T737LYOnz4pViig=; b=kN8PrGGgsP425xAZThjeSffPEmjeQF2pjR3zyWnqaSjhVO5kSvsjr9fdc30J44jv5h hgJczV2+tUraqUYwUdOIijfrgufPoNDqZrac78dEw29qitJpWsVIcWwjqYttGL7BPSFw Cb9Egce+ajX/nDkF6ZccVd+EYS+uMhZnKgSPQrhkJKFjd8NF/Vd58emQuiolb6bIMqHM YKhItAJwwtpRaB/SBIsQF6dUmS5IL7y1feeYzNoiKZ7+LqWvj/qUXna2SOcKm83W6xgr HYA9234NuPyiL37l+F3NdD90vSJYWseOpX6D7y3Zf2hrlhJTWF5dNxCK1ytFpMFwTxmp XakA== X-Forwarded-Encrypted: i=1; AHgh+RqGgb0FrpGV2u2jz6cysl8Ao2Gvf9cN6uAr4r9I2+2WZLe6+E9j5KdvRz/oVO4+G46mKwT56k83cmdm++Q=@vger.kernel.org X-Gm-Message-State: AFuF++lQtXGOf16QTbe0KHguZS4cB2vN79rJF9vy1huYvGWFKqe0lIkn nQDecP1LtA/SEyxhCA0QHezCmTyVXBYJlIdGmdhauaOt9/wAi6kaPfad X-Gm-Gg: AR+sD10auqV5aBGEolLYaZxIV7NkfmFeL7kx7expP0fSz5fWoaaitvVL9J8b7gZSXx/ YWhtLCHlDhUYZod9YHeg7JUGkYq3we04zGVVH2bawp5N/D1fa4TH2U9OUJSyD1QDJ6Fj48EaHJM a4ZnciIt7tueOzf+bp65ZeWtj6VLFn+qUcSCoB02cXyf4E1GLavnMk7W9IgBrlPhEsVD/2AU502 6SnZQ3vaOSoAL81nl1X+WD5w/TaFLPfY/R3aJiuQWOCSTaqCMans8lKO2v/29qT25Q79/fG/A5U wFl5hOb+kkY0esLrfje8cmoEqDBhqX6DBtyBpUsf+msGcNLGYGNt4W5K8Ej7NCZ7s4PvnzPpe+7 pneZd2D0eGMgckI4A2tILQoTT9sqe2NhTlVu+kmH7+WLlYH/fQ+5/H2uHb9TUHkrG3Anil4rDRA NV9NCgGJVPxRQOhokWvUl9zxZ2iddTfPF9HJMXEyXP9LKKiXa0iaezpLiFoFtKiTQS8d/uffHW5 RScW5SAQcEYaAPR5JGNw7Bgh5KPzSU= X-Received: by 2002:a17:906:eec6:b0:c20:7cb0:f33c with SMTP id a640c23a62f3a-c2596a15f75mr96669666b.16.1788091682244; Sun, 30 Aug 2026 05:08:02 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c255ee09eb6sm304287966b.10.2026.08.30.05.08.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 05:08:01 -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, glaubitz@physik.fu-berlin.de, Magnus Lindholm Subject: [PATCH v2 4/6] sparc32: drop unused valid address bitmap Date: Sun, 30 Aug 2026 14:06:43 +0200 Message-ID: <20260830120742.20950-5-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260830120742.20950-1-linmag7@gmail.com> References: <20260830120742.20950-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" sparc_valid_addr_bitmap is populated during early memory setup but never read. Remove the bitmap, its allocation and the population helper. Suggested-by: Sam Ravnborg Signed-off-by: Magnus Lindholm --- arch/sparc/mm/init_32.c | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c index 75050dfbc2ea..6880d9cb30a5 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -24,7 +23,6 @@ #include #include #include -#include #include =20 #include @@ -37,8 +35,6 @@ =20 #include "mm_32.h" =20 -static unsigned long *sparc_valid_addr_bitmap; - unsigned long phys_base; EXPORT_SYMBOL(phys_base); =20 @@ -218,27 +214,8 @@ void __init paging_init(void) device_scan(); } =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; - - while (start < end) { - set_bit(start >> 20, sparc_valid_addr_bitmap); - start +=3D PAGE_SIZE; - } - } -} - void __init arch_mm_preinit(void) { - int i; - if (PKMAP_BASE+LAST_PKMAP*PAGE_SIZE >=3D FIXADDR_START) { prom_printf("BUG: fixmap and pkmap areas overlap\n"); prom_printf("pkbase: 0x%lx pkend: 0x%lx fixstart 0x%lx\n", @@ -248,19 +225,6 @@ void __init arch_mm_preinit(void) prom_printf("Please mail sparclinux@vger.kernel.org.\n"); prom_halt(); } - - i =3D last_valid_pfn >> ((20 - PAGE_SHIFT) + 5); - i +=3D 1; - sparc_valid_addr_bitmap =3D (unsigned long *) - memblock_alloc(i << 2, SMP_CACHE_BYTES); - - if (sparc_valid_addr_bitmap =3D=3D NULL) { - prom_printf("mem_init: Cannot alloc valid_addr_bitmap.\n"); - prom_halt(); - } - memset(sparc_valid_addr_bitmap, 0, i << 2); - - taint_real_pages(); } =20 void sparc_flush_page_to_ram(struct page *page) --=20 2.43.0 From nobody Sat Sep 26 21:57:41 2026 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 85EDA3B47C1 for ; Sun, 30 Aug 2026 12:08:05 +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=1788091689; cv=none; b=Vyltx2ec8aPc6jKnJgiPNvuSq9MMQ0EYZ9VwfmVvATaokJrYvin4/4mGc/AoG/5fJlPBn7UyGvwSzGwKg4kQw0PyXrUazij3Qe6tPcJtJ9qY5oojoOEj9PHGBuRtWlgsY8gfacQurgOd3ihBZP1GSnWs6On/pmDdFLKF6Ic/ct4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091689; c=relaxed/simple; bh=ZT8iJi77bE3gmD1YoXUJQiaFzD5PVsor4tdcFF11VNA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AwqPaLDj6DacWbSBUinxLBwwKlDHiUiRMjSaoAITYPVBz3lYap1Jo3WD6wbM31HOkvT6p2DDCbYjXWU9Gb4DdsNEVAbE+RRnnYxjR1q84PovgSGhK2zHp7IRuhhk3RYb8uxPuKSO729cQu1zAhZC8Chl2YaBnDe4qHLj7zAfbCM= 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=W1CEZ3gJ; arc=none smtp.client-ip=209.85.218.47 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="W1CEZ3gJ" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-c1677c91969so231303266b.1 for ; Sun, 30 Aug 2026 05:08:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788091683; x=1788696483; 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=ftha5EWbxwOBkI+jXRkGmDO1q/dibNf0e6329s0ROYI=; b=W1CEZ3gJ0iI8UDtYDZm+tf0dDiAVqN1TqpwycLruL9/qyUlm0PgnRIpyz+ZZh7yXFV 43mSBt3oIISVXpjTuwa8082JFUcfxGS8dS6S+45owVxkSx6vFH3YjIKGtd4H3KPE+9R9 UXRhezLuYcH77OJSvDvYTCQZrVImSnDoPhTCRM3r9Yjq/v+eFNL+JH9jl6VWu84I/NjD eQxPru9XwSFGgtN42Gqx8nLil2S6W3gpHRRhGRqgIdNuFtrYgd9zuAJ3B/u9KOEsvU18 QfX2gAAywbO9aRz5GHH/7FryBK5yaKv1lb6o2ZGGoi/QUSvLiU5qq5zjJcrHGBHksVlK cmaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788091683; x=1788696483; 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=ftha5EWbxwOBkI+jXRkGmDO1q/dibNf0e6329s0ROYI=; b=BeEueYm4qp/9qVJveRy1PZ9A1CHdyxyNIKG4yr1VW5BVUP+5qXhvhlX8QGHThIvssw RHrV3kNrQi+drs/VjHc0YOQZ6OzomNo4LpDvFd1ea41LSX8V6FoFZ6+NRJsit/inxVAB Oc7KUDHP64INlBB+ijUW7iMwDOyoEDe8aUjlo82jgcdguWGmu9s/sp3Dz9HcoVpIXJzt VH+fZV0P9sk/0fh5cdskGAk/FfD2k1xFoVDMHGuu2WbTBReRdsHUC3p6J7N2yIgk928p 2Ip5peIEjGzCfhhNcd1KHSSJdsdcruejagPnh6TOR0OhQG8QzckGNA8xIXyDvadmzfye j+Ig== X-Forwarded-Encrypted: i=1; AHgh+Ro2MuHv+ovncc3IS+gOol2YYek7EcWPPUHbDUfbYiE0V30CBGhXino7rjwa4YeiPA/n9KG0QA1cQvzWT/c=@vger.kernel.org X-Gm-Message-State: AFuF++mm8p3wEcjoDuaPZg0o9am5KLiBDrQnpctacIETHLS5CFs1JL8d xfe7wSMIkCAwjYFpzv23eF9cM6Prwr35xU9BDBq930a5Uh/R1+KzcKfq X-Gm-Gg: AR+sD11HxXwtE6CG47/TqAbx1dADBm6FNuaPNnrvXlJAQrhS3UONSbL+l23RfYOPuyR yLCziQILu3ELGC37RboJ0smnW13ApcInM0SW/y2nuksn61dhUm2YJ75+1oA3TDql+QkoUT2QD8i pNqHI9P0rS9IxqXCuVfEczXIBHF6rL8FyOFoVHdJEhV6FZFCMwGnaSnRHhQcTmUBgKQPzsO6+q+ TcAwAUskztCL+chQK/dsUcAbRq4G6cONSXSN3qDvxfFB6b5BQPHjRZYW+UUAyuuVtomr3490H6v wNV5wphmH3Ot44Af73b1TdFMGrhPyoaTJcdGbWwh9zlhtXtB6NSzy1qbfZY/40SyxMYn3IDVdqR kU5c6dvNo8tPh2PjWfl73JIT/puvDOTnzHzUG2XPY8LUcM1662uPrC14xd6x7bOrOktDA9HtM1l VGBMfMnfv/l5Rl4sfy7p3+ixpxkcSClRIXrA0tKwfuVenrL7AuUv8zhyNT81lQ0W1j8Fe+Sf1hM IhlcKPqrGqMMugfe9TDImjnckAuOsg= X-Received: by 2002:a17:907:9b8c:b0:c20:fda7:1856 with SMTP id a640c23a62f3a-c2556c42933mr1314978766b.8.1788091683370; Sun, 30 Aug 2026 05:08:03 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c255ee09eb6sm304287966b.10.2026.08.30.05.08.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 05:08:02 -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, glaubitz@physik.fu-berlin.de, Magnus Lindholm Subject: [PATCH v2 5/6] sparc32: move early memory setup to setup_arch Date: Sun, 30 Aug 2026 14:06:44 +0200 Message-ID: <20260830120742.20950-6-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260830120742.20950-1-linmag7@gmail.com> References: <20260830120742.20950-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(). Use for_each_mem_pfn_range() to find the lowmem boundary and replace last_valid_pfn with the standard max_low_pfn variable. This tightens LEON's _pfn_valid() upper bound from all RAM to the lowmem limit, with no functional change because LEON does not use highmem. 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 --- arch/sparc/include/asm/leon.h | 2 +- arch/sparc/include/asm/pgtable_32.h | 3 +- arch/sparc/include/asm/pgtsrmmu.h | 2 +- arch/sparc/kernel/setup_32.c | 115 +++++++++++++----------- arch/sparc/mm/init_32.c | 132 +--------------------------- arch/sparc/mm/srmmu.c | 6 -- 6 files changed, 69 insertions(+), 191 deletions(-) diff --git a/arch/sparc/include/asm/leon.h b/arch/sparc/include/asm/leon.h index 053a24b67aed..815131c77ed7 100644 --- a/arch/sparc/include/asm/leon.h +++ b/arch/sparc/include/asm/leon.h @@ -251,7 +251,7 @@ extern int leon_ipi_irq; =20 /* macros used in leon_mm.c */ #define PFN(x) ((x) >> PAGE_SHIFT) -#define _pfn_valid(pfn) ((pfn < last_valid_pfn) && (pfn >=3D PFN(phys_bas= e))) +#define _pfn_valid(pfn) ((pfn < max_low_pfn) && (pfn >=3D PFN(phys_base))) #define _SRMMU_PTE_PMASK_LEON 0xffffffff =20 /* 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/include/asm/pgtsrmmu.h b/arch/sparc/include/asm/pgt= srmmu.h index a265822a475e..9ce7558113f8 100644 --- a/arch/sparc/include/asm/pgtsrmmu.h +++ b/arch/sparc/include/asm/pgtsrmmu.h @@ -98,7 +98,7 @@ restore %g0, %g0, %g0; =20 #ifndef __ASSEMBLER__ -extern unsigned long last_valid_pfn; +extern unsigned long max_low_pfn; =20 /* This makes sense. Honest it does - Anton */ /* XXX Yes but it's ugly as sin. FIXME. -KMW */ diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c index 795714959da6..c3c3274e55af 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,74 @@ 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 start_pfn, end_pfn; + unsigned long last_pfn =3D 0; + int i; + + for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, + NULL) { + if (start_pfn >=3D limit) { + if (last_pfn < limit) + limit =3D last_pfn; + break; + } =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; + last_pfn =3D end_pfn; + } =20 - if (end <=3D base) - continue; /* wholly below - drop it */ - if (start < base) - start =3D base; /* straddles - trim the front */ + return limit; +} =20 - sp_banks[j].base_addr =3D start; - sp_banks[j].num_bytes =3D end - start; - j++; +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); } - sp_banks[j].base_addr =3D 0; - sp_banks[j].num_bytes =3D 0; + + 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_low_pfn =3D PFN_DOWN(memblock_end_of_DRAM()); + highend_pfn =3D max_low_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 +353,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 +387,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 6880d9cb30a5..ac4462f1cf76 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -35,66 +35,13 @@ =20 #include "mm_32.h" =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; - -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; @@ -124,83 +71,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. diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index 3029527a5a9f..cf66a108b411 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -59,8 +59,6 @@ int vac_line_size; =20 extern struct resource sparc_iomap; =20 -extern unsigned long last_valid_pfn; - static pgd_t *srmmu_swapper_pg_dir; =20 const struct sparc32_cachetlb_ops *sparc32_cachetlb_ops; @@ -884,7 +882,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 +907,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 Sat Sep 26 21:57:41 2026 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 CC04F3B42EB for ; Sun, 30 Aug 2026 12:08:07 +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=1788091690; cv=none; b=G0UnGlleV2QunzltsUFxl9rSRWlEAc6aD9o4ntqI1JStOI93h+9pi0+/TJXJmPLYU9H/JxamZXGaPhS0roSCOeOJrue2wuw1/s2YFmlrZ5PF8CifACOD0ZLtpE9LrmJsz/bgftDLd563fgO3zdSIYrB0xf8TlLhoo0ZLCYTh0Vo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788091690; c=relaxed/simple; bh=GDJx9sH2sNSxbOwzq4dSkcb9spfCBs4Kvg21wjvIkiU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RO6TcguDWqrR1PDk4Uwz96qJMOFgUXYpup9IarCbTdYvoWvW8oqJboDIdNBR7z5cmbTlpdbMRWV/Y6Zs4t6RoGKXb115U4oPOpKEODac3fzJWhQQVsGhpFbPFLy7yLkbWIJIEyVQq9K4o4tRdwd9AmwllDnsfX9UaCtIKNg9Ehk= 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=CFLPu4uK; arc=none smtp.client-ip=209.85.218.44 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="CFLPu4uK" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-c2533d83e3bso413246866b.2 for ; Sun, 30 Aug 2026 05:08:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788091685; x=1788696485; 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=lUPNB03Hug6YvdWlUe1liatgYB+MaJgHVJDKZWHDKdE=; b=CFLPu4uKCZul6140KnpiCnhhjx+KR35Okf911O+j1ko+ghts3HT12yu+AZE853YteA +C32reSHb41OY9MxxdOTecUhHfxYW/TgJYowTyZMAtL2RNFymo2IDZbo2dtwPmIdKlGe HA79jEwysrOp1rIvj4UKDn6npfGtUs0ilVSmBUtdh7nJA3jih7Fg6RmaAEAgGfVv/54A YoHK8RFsLGALdPDkOFw3J+tUuZ25m24UKtbJmuDqPcfDbBzJkrAt01/x1mGkmw6RC2l0 HCWyQUpnzJR7sFeQw4h4/j7LKIrjPD9gu4wIALNmAYZa27Bjdlj7trdACO8JGTM+F5DW Y5JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788091685; x=1788696485; 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=lUPNB03Hug6YvdWlUe1liatgYB+MaJgHVJDKZWHDKdE=; b=rxWPxwNL0Fs4+3rxr8iSwCDGehR8PQtPbiLu2a4yN5V9Xx7PPMO/qgo5qp+47H4fjN 7mlyYxlSw4n//cpmFNKwLyCS7cddafy6pjbPcDjJgZOlApM9WttRp/prfzbzth4Lo4iN TrITQObAjNQPeOCBvjAbv4ATBT2kczfkQZQXGmYU72mPslUxAzDTGPbpoI7HRfim50BJ ROOOEdFIO/TMPYI0mIEBjb12YKiSXrHquEjwoc6/wnEauV5BGiE41wts1xT94ZDVsqef NJKFh4rK/upXTstISUs0dhhQD96hLB4fnf9zEK+ey60F0fHW3V3tgXGKdWsfWyOmYRPx w76Q== X-Forwarded-Encrypted: i=1; AHgh+Rrh8y4TtnhxUstmbILzXfXbVv0JHiekiXdiDRSK5gSf8KI6TyStbD3hrZCgSK/JdlBrgT2A/9dfm/fVufE=@vger.kernel.org X-Gm-Message-State: AFuF++lQz4Y+K/EIA/l1NUCuVHBBZSjlv7OKwf1LOMjyM5slp8h7113R +oKdVdJUvCkp75Cds95c7AuVh33svGO0MllQpAIVPmooqr32kWLP+zkt X-Gm-Gg: AR+sD13z9qSDBythIVnBKFqluy49t+WR3kl0eS4+m0Zxy3V3O8S+WHnXLtfNdzCKzyy oHJegITULqtNqWDWUMRQA4d9jCGwh1PAnBnLj4v/lJhMyKZn3IdfFGinElVn7to3AECvTTYQ+pH QS0JrA6/vnRCXTEk3XU2eNhq60QEyOjLn/6FxPkX3UgHYqLI4QpaY37pecPB5fMGVd2WDaRaVwh QBWb66k2ISCfkLsY8sKXChe2YwdiodYwSyh5OnTv8YdM9p+kACqVfmh+pFqv6nuGTENcIf7COQx OM1hOZr79egYfKt/oepRqluDORd+sB73Oc6FYXneAzaD42GESDRwAry/cA8bOFdMbSitk49b7HH 2Nd8j8Z4Ti7S0/FCeA0oHERx527lYgxNeem4W3Am7C/N3dKMNSwUIE3nCOHHe2gDGiB76smwbD3 ToT873nERCGTpuNGT5XAlmI29VB5xZDZAuYSBvAM5ozlPU3JeE3NWlrywKI1Tp26wOa7PGNyDci bzPDF8L0gJaTajkbL7kLnhF4AxYRX0= X-Received: by 2002:a17:907:9810:b0:c25:5114:c832 with SMTP id a640c23a62f3a-c2556bd290bmr1242333066b.3.1788091684609; Sun, 30 Aug 2026 05:08:04 -0700 (PDT) Received: from buildhost.darklands.se ([2001:9b1:ff:d701:51eb:176f:63d9:53f8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c255ee09eb6sm304287966b.10.2026.08.30.05.08.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 05:08:04 -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, glaubitz@physik.fu-berlin.de, Magnus Lindholm Subject: [PATCH v2 6/6] sparc32: drop sp_banks Date: Sun, 30 Aug 2026 14:06:45 +0200 Message-ID: <20260830120742.20950-7-linmag7@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260830120742.20950-1-linmag7@gmail.com> References: <20260830120742.20950-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 ac4462f1cf76..2f693b70dbd8 100644 --- a/arch/sparc/mm/init_32.c +++ b/arch/sparc/mm/init_32.c @@ -35,8 +35,6 @@ =20 #include "mm_32.h" =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