162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Platform support for LPC32xx SoC 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Author: Kevin Wells <kevin.wells@nxp.com> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (C) 2012 Roland Stigge <stigge@antcom.de> 862306a36Sopenharmony_ci * Copyright (C) 2010 NXP Semiconductors 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/amba/pl08x.h> 1262306a36Sopenharmony_ci#include <linux/mtd/lpc32xx_mlc.h> 1362306a36Sopenharmony_ci#include <linux/mtd/lpc32xx_slc.h> 1462306a36Sopenharmony_ci#include <linux/of_platform.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <asm/mach/arch.h> 1762306a36Sopenharmony_ci#include "common.h" 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic struct pl08x_channel_data pl08x_slave_channels[] = { 2062306a36Sopenharmony_ci { 2162306a36Sopenharmony_ci .bus_id = "nand-slc", 2262306a36Sopenharmony_ci .min_signal = 1, /* SLC NAND Flash */ 2362306a36Sopenharmony_ci .max_signal = 1, 2462306a36Sopenharmony_ci .periph_buses = PL08X_AHB1, 2562306a36Sopenharmony_ci }, 2662306a36Sopenharmony_ci { 2762306a36Sopenharmony_ci .bus_id = "nand-mlc", 2862306a36Sopenharmony_ci .min_signal = 12, /* MLC NAND Flash */ 2962306a36Sopenharmony_ci .max_signal = 12, 3062306a36Sopenharmony_ci .periph_buses = PL08X_AHB1, 3162306a36Sopenharmony_ci }, 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic int pl08x_get_signal(const struct pl08x_channel_data *cd) 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci return cd->min_signal; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistatic void pl08x_put_signal(const struct pl08x_channel_data *cd, int ch) 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic struct pl08x_platform_data pl08x_pd = { 4462306a36Sopenharmony_ci /* Some reasonable memcpy defaults */ 4562306a36Sopenharmony_ci .memcpy_burst_size = PL08X_BURST_SZ_256, 4662306a36Sopenharmony_ci .memcpy_bus_width = PL08X_BUS_WIDTH_32_BITS, 4762306a36Sopenharmony_ci .slave_channels = &pl08x_slave_channels[0], 4862306a36Sopenharmony_ci .num_slave_channels = ARRAY_SIZE(pl08x_slave_channels), 4962306a36Sopenharmony_ci .get_xfer_signal = pl08x_get_signal, 5062306a36Sopenharmony_ci .put_xfer_signal = pl08x_put_signal, 5162306a36Sopenharmony_ci .lli_buses = PL08X_AHB1, 5262306a36Sopenharmony_ci .mem_buses = PL08X_AHB1, 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistatic struct lpc32xx_slc_platform_data lpc32xx_slc_data = { 5662306a36Sopenharmony_ci .dma_filter = pl08x_filter_id, 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cistatic struct lpc32xx_mlc_platform_data lpc32xx_mlc_data = { 6062306a36Sopenharmony_ci .dma_filter = pl08x_filter_id, 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistatic const struct of_dev_auxdata lpc32xx_auxdata_lookup[] __initconst = { 6462306a36Sopenharmony_ci OF_DEV_AUXDATA("arm,pl080", 0x31000000, "pl08xdmac", &pl08x_pd), 6562306a36Sopenharmony_ci OF_DEV_AUXDATA("nxp,lpc3220-slc", 0x20020000, "20020000.flash", 6662306a36Sopenharmony_ci &lpc32xx_slc_data), 6762306a36Sopenharmony_ci OF_DEV_AUXDATA("nxp,lpc3220-mlc", 0x200a8000, "200a8000.flash", 6862306a36Sopenharmony_ci &lpc32xx_mlc_data), 6962306a36Sopenharmony_ci { } 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_cistatic void __init lpc3250_machine_init(void) 7362306a36Sopenharmony_ci{ 7462306a36Sopenharmony_ci lpc32xx_serial_init(); 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci of_platform_default_populate(NULL, lpc32xx_auxdata_lookup, NULL); 7762306a36Sopenharmony_ci} 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_cistatic const char *const lpc32xx_dt_compat[] __initconst = { 8062306a36Sopenharmony_ci "nxp,lpc3220", 8162306a36Sopenharmony_ci "nxp,lpc3230", 8262306a36Sopenharmony_ci "nxp,lpc3240", 8362306a36Sopenharmony_ci "nxp,lpc3250", 8462306a36Sopenharmony_ci NULL 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciDT_MACHINE_START(LPC32XX_DT, "LPC32XX SoC (Flattened Device Tree)") 8862306a36Sopenharmony_ci .atag_offset = 0x100, 8962306a36Sopenharmony_ci .map_io = lpc32xx_map_io, 9062306a36Sopenharmony_ci .init_machine = lpc3250_machine_init, 9162306a36Sopenharmony_ci .dt_compat = lpc32xx_dt_compat, 9262306a36Sopenharmony_ciMACHINE_END 93