// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
 * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
 */

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/platform_device.h>
#include <linux/ssb/ssb.h>
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
#include <bcm63xx_dev_uart.h>
#include <bcm63xx_regs.h>
#include <bcm63xx_io.h>
#include <bcm63xx_nvram.h>
#include <bcm63xx_dev_pci.h>
#include <bcm63xx_dev_enet.h>
#include <bcm63xx_dev_flash.h>
#include <bcm63xx_dev_hsspi.h>
#include <bcm63xx_dev_pcmcia.h>
#include <bcm63xx_dev_spi.h>
#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>

#include <uapi/linux/bcm933xx_hcs.h>

#define HCS_OFFSET_128K			0x20000

static struct board_info board;

/*
 * known 3368 boards
 */
#ifdef CONFIG_BCM63XX_CPU_3368
static struct board_info __initdata board_cvg834g = {
	.name = "CVG834G_E15R3921",
	.expected_cpu_id = 0x3368,

	.ephy_reset_gpio = 36,
	.ephy_reset_gpio_flags = GPIOF_OUT_INIT_HIGH,
	.has_pci = 1,
	.has_uart0 = 1,
	.has_uart1 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.leds = {
		{
			.name = "CVG834G:green:power",
			.gpio = 37,
			.default_trigger= "default-on",
		},
	},
};
#endif /* CONFIG_BCM63XX_CPU_3368 */

/*
 * known 6328 boards
 */
#ifdef CONFIG_BCM63XX_CPU_6328
static struct board_info __initdata board_96328avng = {
	.name = "96328avng",
	.expected_cpu_id = 0x6328,

	.has_pci = 1,
	.has_uart0 = 1,

	.has_usbd = 0,
	.usbd = {
		.use_fullspeed = 0,
		.port_no = 0,
	},

	.leds = {
		{
			.name = "96328avng::ppp-fail",
			.gpio = 2,
			.active_low = 1,
		},
		{
			.name = "96328avng::power",
			.gpio = 4,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "96328avng::power-fail",
			.gpio = 8,
			.active_low = 1,
		},
		{
			.name = "96328avng::wps",
			.gpio = 9,
			.active_low = 1,
		},
		{
			.name = "96328avng::ppp",
			.gpio = 11,
			.active_low = 1,
		},
	},
};
#endif /* CONFIG_BCM63XX_CPU_6328 */

/*
 * known 6338 boards
 */
#ifdef CONFIG_BCM63XX_CPU_6338
static struct board_info __initdata board_96338gw = {
	.name = "96338GW",
	.expected_cpu_id = 0x6338,

	.has_ohci0 = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl",
			.gpio = 3,
			.active_low = 1,
		},
		{
			.name = "ses",
			.gpio = 5,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 4,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 0,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 1,
			.active_low = 1,
		}
	},
};

static struct board_info __initdata board_96338w = {
	.name = "96338W",
	.expected_cpu_id = 0x6338,

	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl",
			.gpio = 3,
			.active_low = 1,
		},
		{
			.name = "ses",
			.gpio = 5,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 4,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 0,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 1,
			.active_low = 1,
		},
	},
};
#endif /* CONFIG_BCM63XX_CPU_6338 */

/*
 * known 6345 boards
 */
#ifdef CONFIG_BCM63XX_CPU_6345
static struct board_info __initdata board_96345gw2 = {
	.name = "96345GW2",
	.expected_cpu_id = 0x6345,

	.has_uart0 = 1,
};
#endif /* CONFIG_BCM63XX_CPU_6345 */

/*
 * known 6348 boards
 */
#ifdef CONFIG_BCM63XX_CPU_6348
static struct board_info __initdata board_96348r = {
	.name = "96348R",
	.expected_cpu_id = 0x6348,

	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.leds = {
		{
			.name = "adsl-fail",
			.gpio = 2,
			.active_low = 1,
		},
		{
			.name = "ppp",
			.gpio = 3,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 4,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 0,
			.active_low = 1,
			.default_trigger = "default-on",

		},
		{
			.name = "stop",
			.gpio = 1,
			.active_low = 1,
		},
	},
};

static struct board_info __initdata board_96348gw_10 = {
	.name = "96348GW-10",
	.expected_cpu_id = 0x6348,

	.has_ohci0 = 1,
	.has_pccard = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl-fail",
			.gpio = 2,
			.active_low = 1,
		},
		{
			.name = "ppp",
			.gpio = 3,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 4,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 0,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 1,
			.active_low = 1,
		},
	},
};

static struct board_info __initdata board_96348gw_11 = {
	.name = "96348GW-11",
	.expected_cpu_id = 0x6348,

	.has_ohci0 = 1,
	.has_pccard = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl-fail",
			.gpio = 2,
			.active_low = 1,
		},
		{
			.name = "ppp",
			.gpio = 3,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 4,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 0,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 1,
			.active_low = 1,
		},
	},
};

static struct board_info __initdata board_96348gw = {
	.name = "96348GW",
	.expected_cpu_id = 0x6348,

	.has_ohci0 = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl-fail",
			.gpio = 2,
			.active_low = 1,
		},
		{
			.name = "ppp",
			.gpio = 3,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 4,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 0,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 1,
			.active_low = 1,
		},
	},
};

static struct board_info __initdata board_FAST2404 = {
	.name = "F@ST2404",
	.expected_cpu_id = 0x6348,

	.has_ohci0 = 1,
	.has_pccard = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},
};

static struct board_info __initdata board_rta1025w_16 = {
	.name = "RTA1025W_16",
	.expected_cpu_id = 0x6348,

	.has_pci = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},
};

static struct board_info __initdata board_DV201AMR = {
	.name = "DV201AMR",
	.expected_cpu_id = 0x6348,

	.has_ohci0 = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},
};

static struct board_info __initdata board_96348gw_a = {
	.name = "96348GW-A",
	.expected_cpu_id = 0x6348,

	.has_ohci0 = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},
};
#endif /* CONFIG_BCM63XX_CPU_6348 */

/*
 * known 6358 boards
 */
#ifdef CONFIG_BCM63XX_CPU_6358
static struct board_info __initdata board_96358vw = {
	.name = "96358VW",
	.expected_cpu_id = 0x6358,

	.has_ehci0 = 1,
	.has_ohci0 = 1,
	.has_pccard = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl-fail",
			.gpio = 15,
			.active_low = 1,
		},
		{
			.name = "ppp",
			.gpio = 22,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 23,
			.active_low = 1,
		},
		{
			.name = "power",
			.gpio = 4,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 5,
		},
	},
};

static struct board_info __initdata board_96358vw2 = {
	.name = "96358VW2",
	.expected_cpu_id = 0x6358,

	.has_ehci0 = 1,
	.has_ohci0 = 1,
	.has_pccard = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},

	.leds = {
		{
			.name = "adsl",
			.gpio = 22,
			.active_low = 1,
		},
		{
			.name = "ppp-fail",
			.gpio = 23,
		},
		{
			.name = "power",
			.gpio = 5,
			.active_low = 1,
			.default_trigger = "default-on",
		},
		{
			.name = "stop",
			.gpio = 4,
			.active_low = 1,
		},
	},
};

static struct board_info __initdata board_AGPFS0 = {
	.name = "AGPF-S0",
	.expected_cpu_id = 0x6358,

	.has_ehci0 = 1,
	.has_ohci0 = 1,
	.has_pci = 1,
	.has_uart0 = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},
};

static struct board_info __initdata board_DWVS0 = {
	.name = "DWV-S0",
	.expected_cpu_id = 0x6358,

	.has_ehci0 = 1,
	.has_ohci0 = 1,
	.has_pci = 1,

	.has_enet0 = 1,
	.enet0 = {
		.has_phy = 1,
		.use_internal_phy = 1,
	},

	.has_enet1 = 1,
	.enet1 = {
		.force_speed_100 = 1,
		.force_duplex_full = 1,
	},
};
#endif /* CONFIG_BCM63XX_CPU_6358 */

/*
 * all boards
 */
static const struct board_info __initconst *bcm963xx_boards[] = {
#ifdef CONFIG_BCM63XX_CPU_3368
	&board_cvg834g,
#endif /* CONFIG_BCM63XX_CPU_3368 */
#ifdef CONFIG_BCM63XX_CPU_6328
	&board_96328avng,
#endif /* CONFIG_BCM63XX_CPU_6328 */
#ifdef CONFIG_BCM63XX_CPU_6338
	&board_96338gw,
	&board_96338w,
#endif /* CONFIG_BCM63XX_CPU_6338 */
#ifdef CONFIG_BCM63XX_CPU_6345
	&board_96345gw2,
#endif /* CONFIG_BCM63XX_CPU_6345 */
#ifdef CONFIG_BCM63XX_CPU_6348
	&board_96348r,
	&board_96348gw,
	&board_96348gw_10,
	&board_96348gw_11,
	&board_FAST2404,
	&board_DV201AMR,
	&board_96348gw_a,
	&board_rta1025w_16,
#endif /* CONFIG_BCM63XX_CPU_6348 */
#ifdef CONFIG_BCM63XX_CPU_6358
	&board_96358vw,
	&board_96358vw2,
	&board_AGPFS0,
	&board_DWVS0,
#endif /* CONFIG_BCM63XX_CPU_6358 */
};

/*
 * Register a sane SPROMv2 to make the on-board
 * bcm4318 WLAN work
 */
#ifdef CONFIG_SSB_PCIHOST
static struct ssb_sprom bcm63xx_sprom = {
	.revision		= 0x02,
	.board_rev		= 0x17,
	.country_code		= 0x0,
	.ant_available_bg	= 0x3,
	.pa0b0			= 0x15ae,
	.pa0b1			= 0xfa85,
	.pa0b2			= 0xfe8d,
	.pa1b0			= 0xffff,
	.pa1b1			= 0xffff,
	.pa1b2			= 0xffff,
	.gpio0			= 0xff,
	.gpio1			= 0xff,
	.gpio2			= 0xff,
	.gpio3			= 0xff,
	.maxpwr_bg		= 0x004c,
	.itssi_bg		= 0x00,
	.boardflags_lo		= 0x2848,
	.boardflags_hi		= 0x0000,
};

static int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
{
	if (bus->bustype == SSB_BUSTYPE_PCI) {
		memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom));
		return 0;
	} else {
		pr_err("unable to fill SPROM for given bustype\n");
		return -EINVAL;
	}
}
#endif /* CONFIG_SSB_PCIHOST */

/*
 * return board name for /proc/cpuinfo
 */
const char *board_get_name(void)
{
	return board.name;
}

/*
 * early init callback, read nvram data from flash and checksum it
 */
void __init board_prom_init(void)
{
	unsigned int i;
	u8 *boot_addr, *cfe;
	char cfe_version[32];
	char *board_name = NULL;
	u32 val;
	struct bcm_hcs *hcs;

	/* read base address of boot chip select (0)
	 * 6328/6362 do not have MPI but boot from a fixed address
	 */
	if (BCMCPU_IS_6328() || BCMCPU_IS_6362()) {
		val = 0x18000000;
	} else {
		val = bcm_mpi_readl(MPI_CSBASE_REG(0));
		val &= MPI_CSBASE_BASE_MASK;
	}
	boot_addr = (u8 *)KSEG1ADDR(val);

	/* dump cfe version */
	cfe = boot_addr + BCM963XX_CFE_VERSION_OFFSET;
	if (strstarts(cfe, "cfe-")) {
		if(cfe[4] == 'v') {
			if(cfe[5] == 'd')
				snprintf(cfe_version, 11, "%s",
					 (char *) &cfe[5]);
			else if (cfe[10] > 0)
				snprintf(cfe_version, sizeof(cfe_version),
					 "%u.%u.%u-%u.%u-%u", cfe[5], cfe[6],
					 cfe[7], cfe[8], cfe[9], cfe[10]);
			else
				snprintf(cfe_version, sizeof(cfe_version),
					 "%u.%u.%u-%u.%u", cfe[5], cfe[6],
					 cfe[7], cfe[8], cfe[9]);
		} else {
			snprintf(cfe_version, 12, "%s", (char *) &cfe[4]);
		}
	} else {
		strcpy(cfe_version, "unknown");
	}
	pr_info("CFE version: %s\n", cfe_version);

	bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);

	if (BCMCPU_IS_3368()) {
		hcs = (struct bcm_hcs *)boot_addr;
		board_name = hcs->filename;
	} else {
		board_name = bcm63xx_nvram_get_name();
	}
	/* find board by name */
	for (i = 0; i < ARRAY_SIZE(bcm963xx_boards); i++) {
		if (strncmp(board_name, bcm963xx_boards[i]->name, 16))
			continue;
		/* copy, board desc array is marked initdata */
		memcpy(&board, bcm963xx_boards[i], sizeof(board));
		break;
	}

	/* bail out if board is not found, will complain later */
	if (!board.name[0]) {
		char name[17];
		memcpy(name, board_name, 16);
		name[16] = 0;
		pr_err("unknown bcm963xx board: %s\n", name);
		return;
	}

	/* setup pin multiplexing depending on board enabled device,
	 * this has to be done this early since PCI init is done
	 * inside arch_initcall */
	val = 0;

#ifdef CONFIG_PCI
	if (board.has_pci) {
		bcm63xx_pci_enabled = 1;
		if (BCMCPU_IS_6348())
			val |= GPIO_MODE_6348_G2_PCI;
	}
#endif /* CONFIG_PCI */

	if (board.has_pccard) {
		if (BCMCPU_IS_6348())
			val |= GPIO_MODE_6348_G1_MII_PCCARD;
	}

	if (board.has_enet0 && !board.enet0.use_internal_phy) {
		if (BCMCPU_IS_6348())
			val |= GPIO_MODE_6348_G3_EXT_MII |
				GPIO_MODE_6348_G0_EXT_MII;
	}

	if (board.has_enet1 && !board.enet1.use_internal_phy) {
		if (BCMCPU_IS_6348())
			val |= GPIO_MODE_6348_G3_EXT_MII |
				GPIO_MODE_6348_G0_EXT_MII;
	}

	bcm_gpio_writel(val, GPIO_MODE_REG);
}

/*
 * second stage init callback, good time to panic if we couldn't
 * identify on which board we're running since early printk is working
 */
void __init board_setup(void)
{
	if (!board.name[0])
		panic("unable to detect bcm963xx board");
	pr_info("board name: %s\n", board.name);

	/* make sure we're running on expected cpu */
	if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
		panic("unexpected CPU for bcm963xx board");
}

static struct gpio_led_platform_data bcm63xx_led_data;

static struct platform_device bcm63xx_gpio_leds = {
	.name			= "leds-gpio",
	.id			= 0,
	.dev.platform_data	= &bcm63xx_led_data,
};

/*
 * third stage init callback, register all board devices.
 */
int __init board_register_devices(void)
{
	if (board.has_uart0)
		bcm63xx_uart_register(0);

	if (board.has_uart1)
		bcm63xx_uart_register(1);

	if (board.has_pccard)
		bcm63xx_pcmcia_register();

	if (board.has_enet0 &&
	    !bcm63xx_nvram_get_mac_address(board.enet0.mac_addr))
		bcm63xx_enet_register(0, &board.enet0);

	if (board.has_enet1 &&
	    !bcm63xx_nvram_get_mac_address(board.enet1.mac_addr))
		bcm63xx_enet_register(1, &board.enet1);

	if (board.has_enetsw &&
	    !bcm63xx_nvram_get_mac_address(board.enetsw.mac_addr))
		bcm63xx_enetsw_register(&board.enetsw);

	if (board.has_usbd)
		bcm63xx_usbd_register(&board.usbd);

	/* Generate MAC address for WLAN and register our SPROM,
	 * do this after registering enet devices
	 */
#ifdef CONFIG_SSB_PCIHOST
	if (!bcm63xx_nvram_get_mac_address(bcm63xx_sprom.il0mac)) {
		memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN);
		memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
		if (ssb_arch_register_fallback_sprom(
				&bcm63xx_get_fallback_sprom) < 0)
			pr_err("failed to register fallback SPROM\n");
	}
#endif /* CONFIG_SSB_PCIHOST */

	bcm63xx_spi_register();

	bcm63xx_hsspi_register();

	bcm63xx_flash_register();

	bcm63xx_led_data.num_leds = ARRAY_SIZE(board.leds);
	bcm63xx_led_data.leds = board.leds;

	platform_device_register(&bcm63xx_gpio_leds);

	if (board.ephy_reset_gpio && board.ephy_reset_gpio_flags)
		gpio_request_one(board.ephy_reset_gpio,
				board.ephy_reset_gpio_flags, "ephy-reset");

	return 0;
}
