mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/4] mips: n64: Clean up platform initialization
@ 2026-10-29 21:23 Thorsten Blum
  2026-10-29 21:23 ` [PATCH 1/4] mips: n64: Use DEFINE_RES_*() helpers Thorsten Blum
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Thorsten Blum @ 2026-10-29 21:23 UTC (permalink / raw)
  To: Thomas Bogendoerfer, Rosen Penev, Hemanth Selam
  Cc: linux-mips, linux-kernel, Thorsten Blum

Clean up and simplify the Nintendo 64 initialization code.

Thorsten Blum (4):
  mips: n64: Use DEFINE_RES_*() helpers
  mips: n64: Simplify framebuffer allocation
  mips: n64: Rename the video interface register helper
  mips: n64: Use SZ_8M in plat_mem_setup()

 arch/mips/n64/init.c | 81 ++++++++++++++------------------------------
 1 file changed, 26 insertions(+), 55 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/4] mips: n64: Use DEFINE_RES_*() helpers
  2026-10-29 21:23 [PATCH 0/4] mips: n64: Clean up platform initialization Thorsten Blum
@ 2026-10-29 21:23 ` Thorsten Blum
  2026-10-29 21:23 ` [PATCH 2/4] mips: n64: Simplify framebuffer allocation Thorsten Blum
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Thorsten Blum @ 2026-10-29 21:23 UTC (permalink / raw)
  To: Thomas Bogendoerfer, Rosen Penev, Hemanth Selam
  Cc: linux-mips, linux-kernel, Thorsten Blum

Use DEFINE_RES_MEM(), DEFINE_RES_IRQ(), and DEFINE_RES_MEM_NAMED() to
simplify resource initialization. Drop the now-unused linux/string.h
include.

Also use PLATFORM_DEVID_NONE instead of -1 for devices without an
instance ID.

Signed-off-by: Thorsten Blum <blum@kernel.org>
---
 arch/mips/n64/init.c | 44 +++++++++-----------------------------------
 1 file changed, 9 insertions(+), 35 deletions(-)

diff --git a/arch/mips/n64/init.c b/arch/mips/n64/init.c
index ddbd7d1224d3..111d6e6c2de5 100644
--- a/arch/mips/n64/init.c
+++ b/arch/mips/n64/init.c
@@ -10,7 +10,6 @@
 #include <linux/memblock.h>
 #include <linux/platform_device.h>
 #include <linux/platform_data/simplefb.h>
-#include <linux/string.h>
 
 #include <asm/bootinfo.h>
 #include <asm/fw/fw.h>
@@ -77,7 +76,6 @@ static const u32 ntsc_320[] __initconst = {
 
 static int __init n64_platform_init(void)
 {
-	static const char simplefb_resname[] = "FB";
 	static const struct simplefb_platform_data mode = {
 		.width = W,
 		.height = H,
@@ -89,34 +87,16 @@ static int __init n64_platform_init(void)
 	unsigned long phys;
 	unsigned i;
 
-	memset(res, 0, sizeof(struct resource) * 3);
-	res[0].flags = IORESOURCE_MEM;
-	res[0].start = MI_REG_BASE;
-	res[0].end = MI_REG_BASE + NUM_MI_REGS * 4 - 1;
+	res[0] = DEFINE_RES_MEM(MI_REG_BASE, NUM_MI_REGS * 4);
+	res[1] = DEFINE_RES_MEM(AI_REG_BASE, NUM_AI_REGS * 4);
+	res[2] = DEFINE_RES_IRQ(RCP_IRQ);
+	platform_device_register_simple("n64audio", PLATFORM_DEVID_NONE, res, 3);
 
-	res[1].flags = IORESOURCE_MEM;
-	res[1].start = AI_REG_BASE;
-	res[1].end = AI_REG_BASE + NUM_AI_REGS * 4 - 1;
+	res[0] = DEFINE_RES_MEM(PI_REG_BASE, NUM_PI_REGS * 4);
+	platform_device_register_simple("n64cart", PLATFORM_DEVID_NONE, res, 1);
 
-	res[2].flags = IORESOURCE_IRQ;
-	res[2].start = RCP_IRQ;
-	res[2].end = RCP_IRQ;
-
-	platform_device_register_simple("n64audio", -1, res, 3);
-
-	memset(&res[0], 0, sizeof(res[0]));
-	res[0].flags = IORESOURCE_MEM;
-	res[0].start = PI_REG_BASE;
-	res[0].end = PI_REG_BASE + NUM_PI_REGS * 4 - 1;
-
-	platform_device_register_simple("n64cart", -1, res, 1);
-
-	memset(&res[0], 0, sizeof(res[0]));
-	res[0].flags = IORESOURCE_MEM;
-	res[0].start = SI_REG_BASE;
-	res[0].end = SI_REG_BASE + NUM_SI_REGS * 4 - 1;
-
-	platform_device_register_simple("n64joy", -1, res, 1);
+	res[0] = DEFINE_RES_MEM(SI_REG_BASE, NUM_SI_REGS * 4);
+	platform_device_register_simple("n64joy", PLATFORM_DEVID_NONE, res, 1);
 
 	/* The framebuffer needs 64-byte alignment */
 	orig = kzalloc(W * H * 2 + 63, GFP_DMA | GFP_KERNEL);
@@ -133,13 +113,7 @@ static int __init n64_platform_init(void)
 			n64rdp_write_reg(i, ntsc_320[i]);
 	}
 
-	/* setup IORESOURCE_MEM as framebuffer memory */
-	memset(&res[0], 0, sizeof(res[0]));
-	res[0].flags = IORESOURCE_MEM;
-	res[0].name = simplefb_resname;
-	res[0].start = phys;
-	res[0].end = phys + W * H * 2 - 1;
-
+	res[0] = DEFINE_RES_MEM_NAMED(phys, W * H * 2, "FB");
 	platform_device_register_resndata(NULL, "simple-framebuffer", 0,
 					  &res[0], 1, &mode, sizeof(mode));
 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/4] mips: n64: Simplify framebuffer allocation
  2026-10-29 21:23 [PATCH 0/4] mips: n64: Clean up platform initialization Thorsten Blum
  2026-10-29 21:23 ` [PATCH 1/4] mips: n64: Use DEFINE_RES_*() helpers Thorsten Blum
@ 2026-10-29 21:23 ` Thorsten Blum
  2026-10-29 21:23 ` [PATCH 3/4] mips: n64: Rename the video interface register helper Thorsten Blum
  2026-10-29 21:23 ` [PATCH 4/4] mips: n64: Use SZ_8M in plat_mem_setup() Thorsten Blum
  3 siblings, 0 replies; 5+ messages in thread
From: Thorsten Blum @ 2026-10-29 21:23 UTC (permalink / raw)
  To: Thomas Bogendoerfer, Rosen Penev, Hemanth Selam
  Cc: linux-mips, linux-kernel, Thorsten Blum

The framebuffer size is already a multiple of 64 bytes and kzalloc()
guarantees the required alignment. Use ALIGN() to document the 64-byte
requirement, and remove the extra 63 bytes and manual address alignment.

While here, make mode automatic since platform device registration
copies the data anyway. Also explicitly include linux/align.h for
ALIGN() and linux/slab.h for kzalloc().

Signed-off-by: Thorsten Blum <blum@kernel.org>
---
 arch/mips/n64/init.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/arch/mips/n64/init.c b/arch/mips/n64/init.c
index 111d6e6c2de5..a64695454359 100644
--- a/arch/mips/n64/init.c
+++ b/arch/mips/n64/init.c
@@ -4,12 +4,14 @@
  *
  *  Copyright (C) 2021	Lauri Kasanen
  */
+#include <linux/align.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/irq.h>
 #include <linux/memblock.h>
 #include <linux/platform_device.h>
 #include <linux/platform_data/simplefb.h>
+#include <linux/slab.h>
 
 #include <asm/bootinfo.h>
 #include <asm/fw/fw.h>
@@ -76,14 +78,14 @@ static const u32 ntsc_320[] __initconst = {
 
 static int __init n64_platform_init(void)
 {
-	static const struct simplefb_platform_data mode = {
+	const struct simplefb_platform_data mode = {
 		.width = W,
 		.height = H,
 		.stride = W * 2,
 		.format = "r5g5b5a1"
 	};
 	struct resource res[3];
-	void *orig;
+	void *fb;
 	unsigned long phys;
 	unsigned i;
 
@@ -98,13 +100,10 @@ static int __init n64_platform_init(void)
 	res[0] = DEFINE_RES_MEM(SI_REG_BASE, NUM_SI_REGS * 4);
 	platform_device_register_simple("n64joy", PLATFORM_DEVID_NONE, res, 1);
 
-	/* The framebuffer needs 64-byte alignment */
-	orig = kzalloc(W * H * 2 + 63, GFP_DMA | GFP_KERNEL);
-	if (!orig)
+	fb = kzalloc(ALIGN(W * H * 2, 64), GFP_DMA | GFP_KERNEL);
+	if (!fb)
 		return -ENOMEM;
-	phys = virt_to_phys(orig);
-	phys += 63;
-	phys &= ~63;
+	phys = virt_to_phys(fb);
 
 	for (i = 0; i < ARRAY_SIZE(ntsc_320); i++) {
 		if (i == 1)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 3/4] mips: n64: Rename the video interface register helper
  2026-10-29 21:23 [PATCH 0/4] mips: n64: Clean up platform initialization Thorsten Blum
  2026-10-29 21:23 ` [PATCH 1/4] mips: n64: Use DEFINE_RES_*() helpers Thorsten Blum
  2026-10-29 21:23 ` [PATCH 2/4] mips: n64: Simplify framebuffer allocation Thorsten Blum
@ 2026-10-29 21:23 ` Thorsten Blum
  2026-10-29 21:23 ` [PATCH 4/4] mips: n64: Use SZ_8M in plat_mem_setup() Thorsten Blum
  3 siblings, 0 replies; 5+ messages in thread
From: Thorsten Blum @ 2026-10-29 21:23 UTC (permalink / raw)
  To: Thomas Bogendoerfer, Rosen Penev, Hemanth Selam
  Cc: linux-mips, linux-kernel, Thorsten Blum

The helper writes VI (video interface) registers, but its name refers to
the RDP (Reality Display Processor). Rename it to n64_vi_write_reg().

Also rename REG_BASE to VI_REG_BASE and remove the unnecessary #undefs.

Signed-off-by: Thorsten Blum <blum@kernel.org>
---
 arch/mips/n64/init.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/arch/mips/n64/init.c b/arch/mips/n64/init.c
index a64695454359..995556e4afd9 100644
--- a/arch/mips/n64/init.c
+++ b/arch/mips/n64/init.c
@@ -51,15 +51,13 @@ void __init prom_init(void)
 
 #define W 320
 #define H 240
-#define REG_BASE ((u32 __iomem *) CKSEG1ADDR(0x4400000))
+#define VI_REG_BASE ((u32 __iomem *)CKSEG1ADDR(0x4400000))
 
-static void __init n64rdp_write_reg(const u8 reg, const u32 value)
+static void __init n64_vi_write_reg(const u8 reg, const u32 value)
 {
-	__raw_writel(value, REG_BASE + reg);
+	__raw_writel(value, VI_REG_BASE + reg);
 }
 
-#undef REG_BASE
-
 static const u32 ntsc_320[] __initconst = {
 	0x00013212, 0x00000000, 0x00000140, 0x00000200,
 	0x00000000, 0x03e52239, 0x0000020d, 0x00000c15,
@@ -107,9 +105,9 @@ static int __init n64_platform_init(void)
 
 	for (i = 0; i < ARRAY_SIZE(ntsc_320); i++) {
 		if (i == 1)
-			n64rdp_write_reg(i, phys);
+			n64_vi_write_reg(i, phys);
 		else
-			n64rdp_write_reg(i, ntsc_320[i]);
+			n64_vi_write_reg(i, ntsc_320[i]);
 	}
 
 	res[0] = DEFINE_RES_MEM_NAMED(phys, W * H * 2, "FB");
@@ -119,9 +117,6 @@ static int __init n64_platform_init(void)
 	return 0;
 }
 
-#undef W
-#undef H
-
 arch_initcall(n64_platform_init);
 
 void __init plat_mem_setup(void)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 4/4] mips: n64: Use SZ_8M in plat_mem_setup()
  2026-10-29 21:23 [PATCH 0/4] mips: n64: Clean up platform initialization Thorsten Blum
                   ` (2 preceding siblings ...)
  2026-10-29 21:23 ` [PATCH 3/4] mips: n64: Rename the video interface register helper Thorsten Blum
@ 2026-10-29 21:23 ` Thorsten Blum
  3 siblings, 0 replies; 5+ messages in thread
From: Thorsten Blum @ 2026-10-29 21:23 UTC (permalink / raw)
  To: Thomas Bogendoerfer, Rosen Penev, Hemanth Selam
  Cc: linux-mips, linux-kernel, Thorsten Blum

Replace the hard-coded value with SZ_8M and improve the comments in
plat_mem_setup() and plat_time_init().

Signed-off-by: Thorsten Blum <blum@kernel.org>
---
 arch/mips/n64/init.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/mips/n64/init.c b/arch/mips/n64/init.c
index 995556e4afd9..522b6405b644 100644
--- a/arch/mips/n64/init.c
+++ b/arch/mips/n64/init.c
@@ -11,6 +11,7 @@
 #include <linux/memblock.h>
 #include <linux/platform_device.h>
 #include <linux/platform_data/simplefb.h>
+#include <linux/sizes.h>
 #include <linux/slab.h>
 
 #include <asm/bootinfo.h>
@@ -122,11 +123,13 @@ arch_initcall(n64_platform_init);
 void __init plat_mem_setup(void)
 {
 	iomem_resource_init();
-	memblock_add(0x0, 8 * 1024 * 1024); /* Bootloader blocks the 4mb config */
+
+	/* The bootloader requires an Expansion Pak (8 MiB of RAM in total). */
+	memblock_add(0x0, SZ_8M);
 }
 
 void __init plat_time_init(void)
 {
-	/* 93.75 MHz cpu, count register runs at half rate */
+	/* The count register runs at half the 93.75 MHz CPU clock rate. */
 	mips_hpt_frequency = 93750000 / 2;
 }

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-10-29 21:24 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-29 21:23 [PATCH 0/4] mips: n64: Clean up platform initialization Thorsten Blum
2026-10-29 21:23 ` [PATCH 1/4] mips: n64: Use DEFINE_RES_*() helpers Thorsten Blum
2026-10-29 21:23 ` [PATCH 2/4] mips: n64: Simplify framebuffer allocation Thorsten Blum
2026-10-29 21:23 ` [PATCH 3/4] mips: n64: Rename the video interface register helper Thorsten Blum
2026-10-29 21:23 ` [PATCH 4/4] mips: n64: Use SZ_8M in plat_mem_setup() Thorsten Blum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®