From nobody Thu Feb 12 21:44:17 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 D3F97224FD for ; Sun, 5 Jan 2025 07:15:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736061306; cv=none; b=OtQ75VLDDMK8gNuIYvXmq1hItfYsZY7Mk/kxufdu4fVN0RsqCyoBadObme9FJaLKJabFGcAJMWM5XeunKGeGFWpUvKkQb6EUKBFAfZ1Oygu/EAIlTJqX0cF4MQme2VZ1SuN2uzBRLFncTAAxxy6F/Yp1sNHoVpl/gJZV+A+1MaU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736061306; c=relaxed/simple; bh=B1k9u6Ut55Q1yDg67JhK1vQvtIPsl10jceFNbmp++q8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mVtCYZ8eBQrWOGDtc+SWk2L8oqUaG/+A+kFL0x0dihFMbq03asm//+VhdAhrKDzpk+9uoneMi4ODT7zf3Cr1wZeeSxwmc4XAVjnTNqk2WjXVnsdGVNvrHls1xdBIJTYPI3kgPx0oInz2MIGbycyHzC9OaORWDRxxtKr8SIqHO00= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com; spf=pass smtp.mailfrom=0x0f.com; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b=WaOF/uuN; arc=none smtp.client-ip=209.85.214.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=0x0f.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=0x0f.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=0x0f.com header.i=@0x0f.com header.b="WaOF/uuN" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-21a1e6fd923so155592595ad.1 for ; Sat, 04 Jan 2025 23:15:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=0x0f.com; s=google; t=1736061304; x=1736666104; 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; bh=+kHweRIcONRT5tLJtckOeOXgzzh6Qs9WFL/vxgnpeF0=; b=WaOF/uuNOdHPG3u63BVq+eoDDEmBNQWlzGUnrIVsLJ7ypr9TmKNOKNMWMyiZJ9pagR 7KpzyuS0YxU0RGd3YzZVR+SEsZa56nx4NhvCTLfxv44GEOQZj4GKmHW3WrKh2U3wKloN Ul6T+pH6X2FxQ8VdqQMiBHAIUsE6DM6mXeyhQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736061304; x=1736666104; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+kHweRIcONRT5tLJtckOeOXgzzh6Qs9WFL/vxgnpeF0=; b=CsH3ZySDd0lAZjG9xFB87bLaOGu4p0l6vx75YNyKLlsHD8vVmEr0awH4NUV1285pN3 FFBSDsULj3d2I+YY9EONkis7jA6IUYTiZs5ya+BWpHtCdvjT95Pa0CpsRlMz9hhXnRYg dWZ6Vwjw/2xW5cEP4VcBynp5sCekd2IHAj9PPsjSI1vnneH++ZsZfRLVkxQrLGw+sypP 4aLKxTyRAOuZMvTfge+ZsyuedyhkpB/TGmkZBa7T2k6qL1VUFPMs03QbaBgw08RQPh54 oxMTDvo8mDVgVGcA9QtGx9j/OQl9q0wiC02VLfNQSnTdR3hhYHsV7oJPt8BC/0HWB0fB JB8A== X-Gm-Message-State: AOJu0YwQT4hX+qNtnyX5ALKmWlgIc3bw/lqSTKFXPb6WlsLDlUIVlo5G DlGbXa+bynGzWr21g9NcI6Mmlm/t3G8mJAkgJxS/f27y7BFaJGLZy5f+y58x3ZqOeolVTky294X r X-Gm-Gg: ASbGncsCiGK27jNMPGgehGlliij5H5Or08ZU6omX+dC9cW7hcsI4yLeZFqzacoLQGHZ NGYEJcLQyA1EBRpS0E5Oc6kUeiNqfMSp8tjU+ZKW1KjzrE4xuctdGVGfXoVwMPpf31VNES6+hvN 9z8A+SADwW7P00/QR8OGm6sxxLYbR1Ub+vb9PGA3hByKB8635qufbhTpvFHcL9qPM+nUuTeT90E e/9BSQzlEdABU4Tcsjzm8eLqMlGGlb34avDZTRiI7g0wO3hReiLFZlzChbBXKLBnOEu X-Google-Smtp-Source: AGHT+IEGU1Vt+Pmj7jkPTcwq1RTapVlQfMVVIuOabCz0za5xxjYc9YrGvNyMitcyIlU8PC3yyLIELg== X-Received: by 2002:a17:903:181:b0:216:66d2:f172 with SMTP id d9443c01a7336-219e6f4a86bmr726109815ad.56.1736061304228; Sat, 04 Jan 2025 23:15:04 -0800 (PST) Received: from shiro.work.home.arpa. ([2400:4162:2428:2ffe:e94c:e5d:106e:3582]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-219dc9cdef7sm270007125ad.133.2025.01.04.23.15.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jan 2025 23:15:03 -0800 (PST) From: Daniel Palmer To: geert@linux-m68k.org, fthain@linux-m68k.org, linux-m68k@lists.linux-m68k.org Cc: linux-kernel@vger.kernel.org, Daniel Palmer Subject: [RFC PATCH 3/3] m68k: Add dt support (proof of concept) Date: Sun, 5 Jan 2025 16:14:33 +0900 Message-ID: <20250105071433.3943289-4-daniel@0x0f.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250105071433.3943289-1-daniel@0x0f.com> References: <20250105071433.3943289-1-daniel@0x0f.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" This is not ready for merge. This just adds enough, probably incorrect, code to get the FDT blob from the bootinfo and parse it. This is enough to get drivers to probe using devicetree nodes instead of manually registering them but looking up interrupts etc in the DT will not work. Signed-off-by: Daniel Palmer --- arch/m68k/Kconfig | 2 ++ arch/m68k/kernel/setup_mm.c | 63 ++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 7c4f7bcc89d7..e348e6822943 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -39,6 +39,8 @@ config M68K select OLD_SIGSUSPEND3 select UACCESS_MEMCPY if !MMU select ZONE_DMA + select OF + select OF_EARLY_FLATTREE =20 config CPU_BIG_ENDIAN def_bool y diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c index 15c1a595a1de..6d358124259e 100644 --- a/arch/m68k/kernel/setup_mm.c +++ b/arch/m68k/kernel/setup_mm.c @@ -50,6 +50,10 @@ #include #include =20 +#include +#include +#include + #if !FPSTATESIZE || !NR_IRQS #warning No CPU/platform type selected, your kernel will not work! #warning Are you building an allnoconfig kernel? @@ -107,11 +111,57 @@ EXPORT_SYMBOL(isa_sex); =20 #define MASK_256K 0xfffc0000 =20 +static phys_addr_t fdt_blob; +static void __init m68k_setup_fdt(void) +{ + pr_info("m68k generic DT machine support, FDT blob at 0x%08x\n", fdt_blob= ); + if (!early_init_dt_verify(__va(fdt_blob), fdt_blob)) { + pr_err("FDT blob is bad?!\n"); + return; + } + + early_init_dt_scan_nodes(); +} + +static const struct bi_record __init *m68k_find_bootinfo_record(const stru= ct bi_record *record, u16 bi_type) +{ + uint16_t tag; + + while ((tag =3D be16_to_cpu(record->tag)) !=3D BI_LAST) { + uint16_t size =3D be16_to_cpu(record->size); + + if (tag =3D=3D bi_type) + return record; + record =3D (struct bi_record *)((unsigned long)record + size); + } + + return NULL; +} + static void __init m68k_parse_bootinfo(const struct bi_record *record) { const struct bi_record *first_record =3D record; + const struct bi_record *machine_record; uint16_t tag; =20 + fdt_blob =3D 0; + + /* + * First attempt to work out if we are a generic DT machine, + * must have an FDT record. + */ + machine_record =3D m68k_find_bootinfo_record(record, BI_MACHTYPE); + if (machine_record->data[0] =3D=3D MACH_GENERIC) { + const struct bi_record *fdt_record; + + fdt_record =3D m68k_find_bootinfo_record(record, BI_FDT); + + BUG_ON(!fdt_record); + fdt_blob =3D (phys_addr_t) fdt_record->data[0]; + } + + /* Revert to the pure bootinfo method */ + record =3D first_record; while ((tag =3D be16_to_cpu(record->tag)) !=3D BI_LAST) { int unknown =3D 0; const void *data =3D record->data; @@ -124,7 +174,6 @@ static void __init m68k_parse_bootinfo(const struct bi_= record *record) case BI_MMUTYPE: /* Already set up by head.S */ break; - case BI_MEMCHUNK: if (m68k_num_memory < NUM_MEMINFO) { const struct mem_info *m =3D data; @@ -162,6 +211,10 @@ static void __init m68k_parse_bootinfo(const struct bi= _record *record) break; } =20 + case BI_FDT: + fdt_blob =3D (phys_addr_t) record->data[0]; + break; + default: if (MACH_IS_AMIGA) unknown =3D amiga_parse_bootinfo(record); @@ -240,6 +293,9 @@ void __init setup_arch(char **cmdline_p) } } =20 + if (fdt_blob) + m68k_setup_fdt(); + setup_initial_init_mm((void *)PAGE_OFFSET, _etext, _edata, _end); =20 #if defined(CONFIG_BOOTPARAM) @@ -329,6 +385,11 @@ void __init setup_arch(char **cmdline_p) panic("No configuration setup"); } =20 + if (fdt_blob) { + memblock_reserve(fdt_blob, fdt_totalsize(__va(fdt_blob))); + unflatten_device_tree(); + } + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size) memblock_reserve(m68k_ramdisk.addr, m68k_ramdisk.size); =20 --=20 2.45.2