From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f196.google.com (mail-dy1-f196.google.com [74.125.82.196]) (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 4AE2B2032D for ; Mon, 11 May 2026 01:15:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.196 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778462120; cv=none; b=bW/uqeeXkInYod9ThGQkVxbstAHoyfoWnnu/bPYzTx3DW1dceCnl7scN6yKEIweYBeVtZqwP+koCubjorQ/sGH5E7hunxQVAdMLE3qjKZYXOCkxjOfpHnOwCcIezTo46wxgA+QpNziDanhXMa9qyLBwoohlTRpkX7eQardaE8l0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778462120; c=relaxed/simple; bh=Z6ZcedcRNo5IfmQhLb9rbkKp3APwo3z2vVsTr1EQ3HE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=g5CpNepwT1b1gzvXDOQUkGizzIdougD6MDNWydezJ6ec36D/mUDX6fxiWN/OwLPp5r2R8PuepCsHjXqQxiiHfdPBeD/b9oWI3/dXfGhYkECdbY2ZnocC0oYCi+Qa+/VQMPXfUZTM7I5vbGX5ntzOr5oKKO1jVVHYNdG+d4jw0Ds= 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=dMfN/yB7; arc=none smtp.client-ip=74.125.82.196 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="dMfN/yB7" Received: by mail-dy1-f196.google.com with SMTP id 5a478bee46e88-2c15849aa2cso4572364eec.0 for ; Sun, 10 May 2026 18:15:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778462118; x=1779066918; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Y90PwL0QS9idwkbU+p6fvn1xsZQeFD4fHqK3QAm6Tz4=; b=dMfN/yB73v0MoVhCoiUb4L7Rmtc8JAIrltXaambfo96O2sF83aBjINz7XcI4nHUTlz RkPrQGnnSzpVAw7059hAhsLhPnrK/yl/132DlJFwZHNe8ZnsBjFYAA+UsT2u/ZnINrE+ bdzOnaRqdfGfN32hjP4FPQzdTox4h4gDCQ1AcOWG9sM404171cW9JakUnZoin5ZAuX6Y OlzGmKjMGjgUr0utv82niIzpvSatHW1QCJ08hquVG5G/NGR+5paV5hJm89zD5djOCNv7 0dBEBlLfpmRHyFQFputDtK0P6AfIWbqu9ZvSqE6RSneuxpMzgcgS9kLu9BjXudwPThlf PmFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778462118; x=1779066918; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Y90PwL0QS9idwkbU+p6fvn1xsZQeFD4fHqK3QAm6Tz4=; b=om3chWar9mSi9J1Is2FpKQtXNGQ0+ZzInfmi+6z1KYA/CPRmkjtYAOVBQVfo5hyv6b JILTrGWDpTFk00Hfi0EvGmBk+2Lx5WI+YHrHhSuNDzq6YcRHQFWHZzQgR4CHR2C8RF1Y 07zywSBQ0jXxkbLNYCJMemwS/VRHzmdSmYdjsRW5OTEEX8/y3cuj9HN7jX2r0Q6X9Dsg 2NqMSJhKl1yZg7uV0nMwjJ0KTRTImKIf365z23NRNeicMlcooH4VrgrECz+ScO4+fqtb z97mDrqrXIZsSDCgwsEReetNEJVnDux/8HTZMb+81OpAZYfu2DDRaUvMcAIOsp/+CjT4 g4Sg== X-Forwarded-Encrypted: i=1; AFNElJ+US9/TnfdcQusYQQS3TJ3+tfvcoK8SOzdYZJBFEDqedctxGUDokOviAmmmrJWile4m9SHfMemUgBiOLv8=@vger.kernel.org X-Gm-Message-State: AOJu0YwXvgEb1o//oBYFkFFBbeHhv7AvIMa1PgGMIiyuooXhc4Mp7zcq fHf9mVOORtIHmBqQ3QtumxFnwEhT1WR7Pdzn0e7XBVhQsWvKyFMNpkfR X-Gm-Gg: Acq92OGWTy//xQ5nMLPGhgvLNZcrkQNCHibZe0zvzomegW5ml4dNkEkeLkkGWeZINM7 xZPcR2gWd0NMsoYQzzZuYdHglYV65E1c+/LgRHp48Jg1g+aAEOSi5spNCCIjiP6IKZQF/IY0Yrx gyUJAR7bgD/C41ynqBsqPIROIaJxHSNB34322gSA8ZmaWQuGYiJFKITuyuyVPj0kF/naI4RJeMF iSg8TqQOB9ymTz6DbslbpVgoapm/AbJO1bYrFO4l+lpAV8gNw6cQrRZN5nTTNZSBUEYQ0G+UV3y 1/Y1wkWRfowo/DkeknuFh3pcQ5PKf9OWZtdCKfdYMs3BfrgN6lCzN9n1YVwEVQndpzgTyc7UiY+ CDqYQ8JTe3sOtyGa5dvefDl5SRTOEKvWyIq2DxC0nuM6hubAU7ENsgeaKhIvDTuBL5Gw7Axf2PR f4Kg1mD/Kmuc7PwCvvMBLpT5jntq6QY8G2RVhScN8OIH0j/vQ2WGfZ2bKVYiSGxfAHoMM0mcykj FpPBH85Qe/gPV703BlH8gaPuc/5Cp1gijSPJ3YMMC5FxJ2g4bOGpufOTjyG7vY06mumHf1Y8MbT ix346m+ZotSTP08E4SQ2VoVJvQ8D X-Received: by 2002:a05:7300:f191:b0:2ed:e14:42e6 with SMTP id 5a478bee46e88-2f54b06824dmr9904299eec.31.1778462118094; Sun, 10 May 2026 18:15:18 -0700 (PDT) Received: from ethan-latitude5420.. (host-127-24.cafrjco.fresno.ca.us.clients.pavlovmedia.net. [68.180.127.24]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8859eb4b7sm11906158eec.2.2026.05.10.18.15.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 May 2026 18:15:17 -0700 (PDT) From: Ethan Nelson-Moore To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Russell King , Ethan Nelson-Moore , Andrew Morton , Jiri Bohac Subject: [RFC PATCH] ARM: move reserve_lp[012] handling into affected machines Date: Sun, 10 May 2026 18:14:58 -0700 Message-ID: <20260511011504.77760-1-enelsonmoore@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit arch/arm/kernel/setup.c contains code to reserve lp0/1/2 I/O ports for machines that can't possibly have these ports. This code is only used by netwinder and footbridge, and is small enough that it can just be moved into these machines. Do so to make the setup code more generic and the machine code more self-contained. This patch is an RFC because I'm not sure if using .init_early is actually necessary. I did it to match the place the original code was called as closely as possible. Can anyone weigh in on this? Signed-off-by: Ethan Nelson-Moore --- arch/arm/include/asm/mach/arch.h | 3 -- arch/arm/kernel/setup.c | 37 ------------------- arch/arm/mach-footbridge/netwinder-hw.c | 48 ++++++++++++++++++------- arch/arm/mach-rpc/riscpc.c | 30 ++++++++++++++-- 4 files changed, 63 insertions(+), 55 deletions(-) diff --git a/arch/arm/include/asm/mach/arch.h b/arch/arm/include/asm/mach/arch.h index 2b18a258204d..fc5abdd2fe88 100644 --- a/arch/arm/include/asm/mach/arch.h +++ b/arch/arm/include/asm/mach/arch.h @@ -37,9 +37,6 @@ struct machine_desc { unsigned int video_start; /* start of video RAM */ unsigned int video_end; /* end of video RAM */ - unsigned char reserve_lp0 :1; /* never has lp0 */ - unsigned char reserve_lp1 :1; /* never has lp1 */ - unsigned char reserve_lp2 :1; /* never has lp2 */ enum reboot_mode reboot_mode; /* default restart mode */ unsigned l2c_aux_val; /* L2 cache aux value */ unsigned l2c_aux_mask; /* L2 cache aux mask */ diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 0bfd66c7ada0..5416ef7b4f31 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -185,31 +184,6 @@ static struct resource mem_res[] = { #define kernel_code mem_res[1] #define kernel_data mem_res[2] -static struct resource io_res[] = { - { - .name = "reserved", - .start = 0x3bc, - .end = 0x3be, - .flags = IORESOURCE_IO | IORESOURCE_BUSY - }, - { - .name = "reserved", - .start = 0x378, - .end = 0x37f, - .flags = IORESOURCE_IO | IORESOURCE_BUSY - }, - { - .name = "reserved", - .start = 0x278, - .end = 0x27f, - .flags = IORESOURCE_IO | IORESOURCE_BUSY - } -}; - -#define lp0 io_res[0] -#define lp1 io_res[1] -#define lp2 io_res[2] - static const char *proc_arch[] = { "undefined/unknown", "3", @@ -909,17 +883,6 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) video_ram.end = mdesc->video_end; request_resource(&iomem_resource, &video_ram); } - - /* - * Some machines don't have the possibility of ever - * possessing lp0, lp1 or lp2 - */ - if (mdesc->reserve_lp0) - request_resource(&ioport_resource, &lp0); - if (mdesc->reserve_lp1) - request_resource(&ioport_resource, &lp1); - if (mdesc->reserve_lp2) - request_resource(&ioport_resource, &lp2); } #if defined(CONFIG_VGA_CONSOLE) diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c index ab17ba916d47..6a4f15526189 100644 --- a/arch/arm/mach-footbridge/netwinder-hw.c +++ b/arch/arm/mach-footbridge/netwinder-hw.c @@ -616,23 +616,47 @@ static int __init nw_hw_init(void) __initcall(nw_hw_init); +/* The NetWinder never has lp0 or lp2 */ +static struct resource reserved_resources[] = { + { + /* lp0 */ + .name = "reserved", + .start = 0x3bc, + .end = 0x3be, + .flags = IORESOURCE_IO | IORESOURCE_BUSY + }, + { + /* lp2 */ + .name = "reserved", + .start = 0x278, + .end = 0x27f, + .flags = IORESOURCE_IO | IORESOURCE_BUSY + }, +}; + /* * Older NeTTroms either do not provide a parameters * page, or they don't supply correct information in * the parameter page. */ -static void __init -fixup_netwinder(struct tag *tags, char **cmdline) +static void __init netwinder_init_early(void) { -#ifdef CONFIG_ISAPNP - extern int isapnp_disable; + int i; - /* - * We must not use the kernels ISAPnP code - * on the NetWinder - it will reset the settings - * for the WaveArtist chip and render it inoperable. - */ - isapnp_disable = 1; + for (i = 0; i < ARRAY_SIZE(reserved_resources); i++) + request_resource(&ioport_resource, &reserved_resources[i]); + +#ifdef CONFIG_ISAPNP + { + extern int isapnp_disable; + + /* + * We must not use the kernels ISAPnP code + * on the NetWinder - it will reset the settings + * for the WaveArtist chip and render it inoperable. + */ + isapnp_disable = 1; + } #endif } @@ -763,9 +787,7 @@ MACHINE_START(NETWINDER, "Rebel-NetWinder") .atag_offset = 0x100, .video_start = 0x000a0000, .video_end = 0x000bffff, - .reserve_lp0 = 1, - .reserve_lp2 = 1, - .fixup = fixup_netwinder, + .init_early = netwinder_init_early, .map_io = footbridge_map_io, .nr_irqs = FOOTBRIDGE_NR_IRQS, .init_irq = footbridge_init_irq, diff --git a/arch/arm/mach-rpc/riscpc.c b/arch/arm/mach-rpc/riscpc.c index 14d78b7f9493..6d764a660474 100644 --- a/arch/arm/mach-rpc/riscpc.c +++ b/arch/arm/mach-rpc/riscpc.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -185,6 +186,32 @@ static struct i2c_board_info i2c_rtc = { I2C_BOARD_INFO("pcf8583", 0x50) }; +/* The Risc PC never has lp0 or lp1 */ +static struct resource reserved_resources[] = { + { + /* lp0 */ + .name = "reserved", + .start = 0x3bc, + .end = 0x3be, + .flags = IORESOURCE_IO | IORESOURCE_BUSY + }, + { + /* lp1 */ + .name = "reserved", + .start = 0x378, + .end = 0x37f, + .flags = IORESOURCE_IO | IORESOURCE_BUSY + }, +}; + +static void __init rpc_init_early(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(reserved_resources); i++) + request_resource(&ioport_resource, &reserved_resources[i]); +} + static int __init rpc_init(void) { i2c_register_board_info(0, &i2c_rtc, 1); @@ -208,8 +235,7 @@ void ioc_timer_init(void); MACHINE_START(RISCPC, "Acorn-RiscPC") /* Maintainer: Russell King */ .atag_offset = 0x100, - .reserve_lp0 = 1, - .reserve_lp1 = 1, + .init_early = rpc_init_early, .map_io = rpc_map_io, .nr_irqs = RPC_NR_IRQS, .init_irq = rpc_init_irq, -- 2.43.0