1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2024 Allied Telesis
6 #include <linux/errno.h>
7 #include <linux/libfdt.h>
8 #include <linux/printk.h>
9 #include <linux/types.h>
11 #include <asm/fw/fw.h>
12 #include <asm/machine.h>
14 static __init
int realtek_add_initrd(void *fdt
)
19 node
= fdt_path_offset(fdt
, "/chosen");
21 pr_err("/chosen node not found\n");
25 start
= fw_getenvl("initrd_start");
26 size
= fw_getenvl("initrd_size");
28 if (start
== 0 && size
== 0)
31 pr_info("Adding initrd info from environment\n");
33 err
= fdt_setprop_u32(fdt
, node
, "linux,initrd-start", start
);
35 pr_err("unable to set initrd-start: %d\n", err
);
39 err
= fdt_setprop_u32(fdt
, node
, "linux,initrd-end", start
+ size
);
41 pr_err("unable to set initrd-end: %d\n", err
);
48 static const struct mips_fdt_fixup realtek_fdt_fixups
[] __initconst
= {
49 { realtek_add_initrd
, "add initrd" },
53 static __init
const void *realtek_fixup_fdt(const void *fdt
, const void *match_data
)
55 static unsigned char fdt_buf
[16 << 10] __initdata
;
58 if (fdt_check_header(fdt
))
63 err
= apply_mips_fdt_fixups(fdt_buf
, sizeof(fdt_buf
), fdt
, realtek_fdt_fixups
);
65 panic("Unable to fixup FDT: %d", err
);
71 static const struct of_device_id realtek_of_match
[] __initconst
= {
72 { .compatible
= "realtek,rtl9302-soc" },
76 MIPS_MACHINE(realtek
) = {
77 .matches
= realtek_of_match
,
78 .fixup_fdt
= realtek_fixup_fdt
,