Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Lyrtech SFFSDR board support.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 2008 Philip Balister, OpenSDR <philip@opensdr.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * Copyright (C) 2008 Lyrtech <www.lyrtech.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * Based on DV-EVM platform, original copyright follows:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * Copyright (C) 2007 MontaVista Software, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #include <linux/i2c.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #include <linux/property.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #include <linux/mtd/mtd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #include <linux/mtd/rawnand.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #include <linux/mtd/partitions.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #include <asm/mach-types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #include <asm/mach/arch.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #include <asm/mach/flash.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #include <mach/common.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #include <linux/platform_data/i2c-davinci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #include <mach/serial.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #include <mach/mux.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #include <linux/platform_data/usb-davinci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #include "davinci.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define SFFSDR_PHY_ID		"davinci_mdio-0:01"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) static struct mtd_partition davinci_sffsdr_nandflash_partition[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	/* U-Boot Environment: Block 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	 * UBL:                Block 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	 * U-Boot:             Blocks 6-7 (256 kb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	 * Integrity Kernel:   Blocks 8-31 (3 Mb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	 * Integrity Data:     Blocks 100-END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 		.name		= "Linux Kernel",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 		.offset		= 32 * SZ_128K,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 		.size		= 16 * SZ_128K, /* 2 Mb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 		.mask_flags	= MTD_WRITEABLE, /* Force read-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 		.name		= "Linux ROOT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 		.offset		= MTDPART_OFS_APPEND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 		.size		= 256 * SZ_128K, /* 32 Mb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 		.mask_flags	= 0, /* R/W */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) static struct flash_platform_data davinci_sffsdr_nandflash_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	.parts		= davinci_sffsdr_nandflash_partition,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	.nr_parts	= ARRAY_SIZE(davinci_sffsdr_nandflash_partition),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) static struct resource davinci_sffsdr_nandflash_resource[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 		.start		= DM644X_ASYNC_EMIF_DATA_CE0_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 		.end		= DM644X_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 		.flags		= IORESOURCE_MEM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	}, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 		.start		= DM644X_ASYNC_EMIF_CONTROL_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 		.end		= DM644X_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 		.flags		= IORESOURCE_MEM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) static struct platform_device davinci_sffsdr_nandflash_device = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	.name		= "davinci_nand", /* Name of driver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	.id		= 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	.dev		= {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 		.platform_data	= &davinci_sffsdr_nandflash_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	.num_resources	= ARRAY_SIZE(davinci_sffsdr_nandflash_resource),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	.resource	= davinci_sffsdr_nandflash_resource,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) static const struct property_entry eeprom_properties[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	PROPERTY_ENTRY_U32("pagesize", 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) static struct i2c_board_info __initdata i2c_info[] =  {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 		I2C_BOARD_INFO("24c64", 0x50),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 		.properties = eeprom_properties,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	/* Other I2C devices:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	 * MSP430,  addr 0x23 (not used)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	 * PCA9543, addr 0x70 (setup done by U-Boot)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	 * ADS7828, addr 0x48 (ADC for voltage monitoring.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) static struct davinci_i2c_platform_data i2c_pdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	.bus_freq	= 20 /* kHz */,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	.bus_delay	= 100 /* usec */,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) static void __init sffsdr_init_i2c(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	davinci_init_i2c(&i2c_pdata);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) static struct platform_device *davinci_sffsdr_devices[] __initdata = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	&davinci_sffsdr_nandflash_device,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) static void __init davinci_sffsdr_map_io(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	dm644x_init();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) static __init void davinci_sffsdr_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	struct davinci_soc_info *soc_info = &davinci_soc_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	dm644x_register_clocks();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	dm644x_init_devices();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	platform_add_devices(davinci_sffsdr_devices,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 			     ARRAY_SIZE(davinci_sffsdr_devices));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	sffsdr_init_i2c();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	davinci_serial_init(dm644x_serial_device);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	soc_info->emac_pdata->phy_id = SFFSDR_PHY_ID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	davinci_setup_usb(0, 0); /* We support only peripheral mode. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	/* mux VLYNQ pins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	davinci_cfg_reg(DM644X_VLYNQEN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	davinci_cfg_reg(DM644X_VLYNQWD);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) MACHINE_START(SFFSDR, "Lyrtech SFFSDR")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	.atag_offset  = 0x100,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	.map_io	      = davinci_sffsdr_map_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	.init_irq     = dm644x_init_irq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	.init_time	= dm644x_init_time,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	.init_machine = davinci_sffsdr_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	.init_late	= davinci_init_late,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	.dma_zone_size	= SZ_128M,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) MACHINE_END