18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Renesas Technology Europe RSK+ Support.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2008 Paul Mundt
68c2ecf20Sopenharmony_ci * Copyright (C) 2008 Peter Griffin <pgriffin@mpc-data.co.uk>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci#include <linux/init.h>
98c2ecf20Sopenharmony_ci#include <linux/types.h>
108c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
118c2ecf20Sopenharmony_ci#include <linux/interrupt.h>
128c2ecf20Sopenharmony_ci#include <linux/mtd/mtd.h>
138c2ecf20Sopenharmony_ci#include <linux/mtd/partitions.h>
148c2ecf20Sopenharmony_ci#include <linux/mtd/physmap.h>
158c2ecf20Sopenharmony_ci#include <linux/mtd/map.h>
168c2ecf20Sopenharmony_ci#include <linux/regulator/fixed.h>
178c2ecf20Sopenharmony_ci#include <linux/regulator/machine.h>
188c2ecf20Sopenharmony_ci#include <asm/machvec.h>
198c2ecf20Sopenharmony_ci#include <asm/io.h>
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci/* Dummy supplies, where voltage doesn't matter */
228c2ecf20Sopenharmony_cistatic struct regulator_consumer_supply dummy_supplies[] = {
238c2ecf20Sopenharmony_ci	REGULATOR_SUPPLY("vddvario", "smsc911x"),
248c2ecf20Sopenharmony_ci	REGULATOR_SUPPLY("vdd33a", "smsc911x"),
258c2ecf20Sopenharmony_ci};
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistatic struct mtd_partition rsk_partitions[] = {
288c2ecf20Sopenharmony_ci	{
298c2ecf20Sopenharmony_ci		.name		= "Bootloader",
308c2ecf20Sopenharmony_ci		.offset		= 0x00000000,
318c2ecf20Sopenharmony_ci		.size		= 0x00040000,
328c2ecf20Sopenharmony_ci		.mask_flags	= MTD_WRITEABLE,
338c2ecf20Sopenharmony_ci	}, {
348c2ecf20Sopenharmony_ci		.name		= "Kernel",
358c2ecf20Sopenharmony_ci		.offset		= MTDPART_OFS_NXTBLK,
368c2ecf20Sopenharmony_ci		.size		= 0x001c0000,
378c2ecf20Sopenharmony_ci	}, {
388c2ecf20Sopenharmony_ci		.name		= "Flash_FS",
398c2ecf20Sopenharmony_ci		.offset		= MTDPART_OFS_NXTBLK,
408c2ecf20Sopenharmony_ci		.size		= MTDPART_SIZ_FULL,
418c2ecf20Sopenharmony_ci	}
428c2ecf20Sopenharmony_ci};
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_cistatic struct physmap_flash_data flash_data = {
458c2ecf20Sopenharmony_ci	.parts			= rsk_partitions,
468c2ecf20Sopenharmony_ci	.nr_parts		= ARRAY_SIZE(rsk_partitions),
478c2ecf20Sopenharmony_ci	.width			= 2,
488c2ecf20Sopenharmony_ci};
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_cistatic struct resource flash_resource = {
518c2ecf20Sopenharmony_ci	.start		= 0x20000000,
528c2ecf20Sopenharmony_ci	.end		= 0x20400000,
538c2ecf20Sopenharmony_ci	.flags		= IORESOURCE_MEM,
548c2ecf20Sopenharmony_ci};
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_cistatic struct platform_device flash_device = {
578c2ecf20Sopenharmony_ci	.name		= "physmap-flash",
588c2ecf20Sopenharmony_ci	.id		= -1,
598c2ecf20Sopenharmony_ci	.resource	= &flash_resource,
608c2ecf20Sopenharmony_ci	.num_resources	= 1,
618c2ecf20Sopenharmony_ci	.dev		= {
628c2ecf20Sopenharmony_ci		.platform_data = &flash_data,
638c2ecf20Sopenharmony_ci	},
648c2ecf20Sopenharmony_ci};
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_cistatic struct platform_device *rsk_devices[] __initdata = {
678c2ecf20Sopenharmony_ci	&flash_device,
688c2ecf20Sopenharmony_ci};
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_cistatic int __init rsk_devices_setup(void)
718c2ecf20Sopenharmony_ci{
728c2ecf20Sopenharmony_ci	regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci	return platform_add_devices(rsk_devices,
758c2ecf20Sopenharmony_ci				    ARRAY_SIZE(rsk_devices));
768c2ecf20Sopenharmony_ci}
778c2ecf20Sopenharmony_cidevice_initcall(rsk_devices_setup);
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci/*
808c2ecf20Sopenharmony_ci * The Machine Vector
818c2ecf20Sopenharmony_ci */
828c2ecf20Sopenharmony_cistatic struct sh_machine_vector mv_rsk __initmv = {
838c2ecf20Sopenharmony_ci	.mv_name        = "RSK+",
848c2ecf20Sopenharmony_ci};
85