- Drop davinci, mxs spi nondm code - Zap nondm soft_spi - Switch few board to DM_SPI - Drop omap3_pandora, pcm051 boards
This commit is contained in:
@@ -1905,7 +1905,6 @@ source "board/hisilicon/hikey/Kconfig"
|
|||||||
source "board/hisilicon/hikey960/Kconfig"
|
source "board/hisilicon/hikey960/Kconfig"
|
||||||
source "board/hisilicon/poplar/Kconfig"
|
source "board/hisilicon/poplar/Kconfig"
|
||||||
source "board/isee/igep003x/Kconfig"
|
source "board/isee/igep003x/Kconfig"
|
||||||
source "board/phytec/pcm051/Kconfig"
|
|
||||||
source "board/silica/pengwyn/Kconfig"
|
source "board/silica/pengwyn/Kconfig"
|
||||||
source "board/spear/spear300/Kconfig"
|
source "board/spear/spear300/Kconfig"
|
||||||
source "board/spear/spear310/Kconfig"
|
source "board/spear/spear310/Kconfig"
|
||||||
|
@@ -181,7 +181,6 @@ source "board/isee/igep00x0/Kconfig"
|
|||||||
source "board/overo/Kconfig"
|
source "board/overo/Kconfig"
|
||||||
source "board/logicpd/zoom1/Kconfig"
|
source "board/logicpd/zoom1/Kconfig"
|
||||||
source "board/ti/am3517crane/Kconfig"
|
source "board/ti/am3517crane/Kconfig"
|
||||||
source "board/pandora/Kconfig"
|
|
||||||
source "board/corscience/tricorder/Kconfig"
|
source "board/corscience/tricorder/Kconfig"
|
||||||
source "board/logicpd/omap3som/Kconfig"
|
source "board/logicpd/omap3som/Kconfig"
|
||||||
source "board/nokia/rx51/Kconfig"
|
source "board/nokia/rx51/Kconfig"
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
if TARGET_OMAP3_PANDORA
|
|
||||||
|
|
||||||
config SYS_BOARD
|
|
||||||
default "pandora"
|
|
||||||
|
|
||||||
config SYS_CONFIG_NAME
|
|
||||||
default "omap3_pandora"
|
|
||||||
|
|
||||||
endif
|
|
@@ -1,6 +0,0 @@
|
|||||||
PANDORA BOARD
|
|
||||||
M: Grazvydas Ignotas <notasas@gmail.com>
|
|
||||||
S: Maintained
|
|
||||||
F: board/pandora/
|
|
||||||
F: include/configs/omap3_pandora.h
|
|
||||||
F: configs/omap3_pandora_defconfig
|
|
@@ -1,6 +0,0 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0+
|
|
||||||
#
|
|
||||||
# (C) Copyright 2000, 2001, 2002
|
|
||||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
||||||
|
|
||||||
obj-y := pandora.o
|
|
@@ -1,149 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
/*
|
|
||||||
* (C) Copyright 2008
|
|
||||||
* Grazvydas Ignotas <notasas@gmail.com>
|
|
||||||
*
|
|
||||||
* Derived from Beagle Board, 3430 SDP, and OMAP3EVM code by
|
|
||||||
* Richard Woodruff <r-woodruff2@ti.com>
|
|
||||||
* Syed Mohammed Khasim <khasim@ti.com>
|
|
||||||
* Sunil Kumar <sunilsaini05@gmail.com>
|
|
||||||
* Shashi Ranjan <shashiranjanmca05@gmail.com>
|
|
||||||
*
|
|
||||||
* (C) Copyright 2004-2008
|
|
||||||
* Texas Instruments, <www.ti.com>
|
|
||||||
*/
|
|
||||||
#include <common.h>
|
|
||||||
#include <dm.h>
|
|
||||||
#include <init.h>
|
|
||||||
#include <ns16550.h>
|
|
||||||
#include <twl4030.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/gpio.h>
|
|
||||||
#include <asm/arch/mmc_host_def.h>
|
|
||||||
#include <asm/arch/mux.h>
|
|
||||||
#include <asm/arch/gpio.h>
|
|
||||||
#include <asm/arch/sys_proto.h>
|
|
||||||
#include <asm/mach-types.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include "pandora.h"
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
|
||||||
|
|
||||||
#define TWL4030_BB_CFG_BBCHEN (1 << 4)
|
|
||||||
#define TWL4030_BB_CFG_BBSEL_3200MV (3 << 2)
|
|
||||||
#define TWL4030_BB_CFG_BBISEL_500UA 2
|
|
||||||
|
|
||||||
#define CONTROL_WKUP_CTRL 0x48002a5c
|
|
||||||
#define GPIO_IO_PWRDNZ (1 << 6)
|
|
||||||
#define PBIASLITEVMODE1 (1 << 8)
|
|
||||||
|
|
||||||
static const struct ns16550_platdata pandora_serial = {
|
|
||||||
.base = OMAP34XX_UART3,
|
|
||||||
.reg_shift = 2,
|
|
||||||
.clock = V_NS16550_CLK,
|
|
||||||
.fcr = UART_FCR_DEFVAL,
|
|
||||||
};
|
|
||||||
|
|
||||||
U_BOOT_DEVICE(pandora_uart) = {
|
|
||||||
"ns16550_serial",
|
|
||||||
&pandora_serial
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Routine: board_init
|
|
||||||
* Description: Early hardware init.
|
|
||||||
*/
|
|
||||||
int board_init(void)
|
|
||||||
{
|
|
||||||
gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
|
|
||||||
/* board id for Linux */
|
|
||||||
gd->bd->bi_arch_number = MACH_TYPE_OMAP3_PANDORA;
|
|
||||||
/* boot param addr */
|
|
||||||
gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_output_gpio(unsigned int gpio, int value)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = gpio_request(gpio, "");
|
|
||||||
if (ret != 0) {
|
|
||||||
printf("could not request GPIO %u\n", gpio);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ret = gpio_direction_output(gpio, value);
|
|
||||||
if (ret != 0)
|
|
||||||
printf("could not set GPIO %u to %d\n", gpio, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Routine: misc_init_r
|
|
||||||
* Description: Configure board specific parts
|
|
||||||
*/
|
|
||||||
int misc_init_r(void)
|
|
||||||
{
|
|
||||||
t2_t *t2_base = (t2_t *)T2_BASE;
|
|
||||||
u32 pbias_lite;
|
|
||||||
|
|
||||||
twl4030_led_init(TWL4030_LED_LEDEN_LEDBON);
|
|
||||||
|
|
||||||
/* set up dual-voltage GPIOs to 1.8V */
|
|
||||||
pbias_lite = readl(&t2_base->pbias_lite);
|
|
||||||
pbias_lite &= ~PBIASLITEVMODE1;
|
|
||||||
pbias_lite |= PBIASLITEPWRDNZ1;
|
|
||||||
writel(pbias_lite, &t2_base->pbias_lite);
|
|
||||||
if (get_cpu_family() == CPU_OMAP36XX)
|
|
||||||
writel(readl(CONTROL_WKUP_CTRL) | GPIO_IO_PWRDNZ,
|
|
||||||
CONTROL_WKUP_CTRL);
|
|
||||||
|
|
||||||
/* make sure audio and BT chips are in powerdown state */
|
|
||||||
set_output_gpio(14, 0);
|
|
||||||
set_output_gpio(15, 0);
|
|
||||||
set_output_gpio(118, 0);
|
|
||||||
|
|
||||||
/* enable USB supply */
|
|
||||||
set_output_gpio(164, 1);
|
|
||||||
|
|
||||||
/* wifi needs a short pulse to enter powersave state */
|
|
||||||
set_output_gpio(23, 1);
|
|
||||||
udelay(5000);
|
|
||||||
gpio_direction_output(23, 0);
|
|
||||||
|
|
||||||
/* Enable battery backup capacitor (3.2V, 0.5mA charge current) */
|
|
||||||
twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER,
|
|
||||||
TWL4030_PM_RECEIVER_BB_CFG,
|
|
||||||
TWL4030_BB_CFG_BBCHEN | TWL4030_BB_CFG_BBSEL_3200MV |
|
|
||||||
TWL4030_BB_CFG_BBISEL_500UA);
|
|
||||||
|
|
||||||
omap_die_id_display();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Routine: set_muxconf_regs
|
|
||||||
* Description: Setting up the configuration Mux registers specific to the
|
|
||||||
* hardware. Many pins need to be moved from protect to primary
|
|
||||||
* mode.
|
|
||||||
*/
|
|
||||||
void set_muxconf_regs(void)
|
|
||||||
{
|
|
||||||
MUX_PANDORA();
|
|
||||||
if (get_cpu_family() == CPU_OMAP36XX) {
|
|
||||||
MUX_PANDORA_3730();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMC
|
|
||||||
int board_mmc_init(bd_t *bis)
|
|
||||||
{
|
|
||||||
return omap_mmc_init(0, 0, 0, -1, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void board_mmc_power_init(void)
|
|
||||||
{
|
|
||||||
twl4030_power_mmc_init(0);
|
|
||||||
}
|
|
||||||
#endif
|
|
@@ -1,391 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
||||||
/*
|
|
||||||
* (C) Copyright 2008
|
|
||||||
* Grazvydas Ignotas <notasas@gmail.com>
|
|
||||||
*/
|
|
||||||
#ifndef _PANDORA_H_
|
|
||||||
#define _PANDORA_H_
|
|
||||||
|
|
||||||
const omap3_sysinfo sysinfo = {
|
|
||||||
DDR_STACKED,
|
|
||||||
"OMAP3 Pandora",
|
|
||||||
"NAND",
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* IEN - Input Enable
|
|
||||||
* IDIS - Input Disable
|
|
||||||
* PTD - Pull type Down
|
|
||||||
* PTU - Pull type Up
|
|
||||||
* DIS - Pull type selection is inactive
|
|
||||||
* EN - Pull type selection is active
|
|
||||||
* M0 - Mode 0
|
|
||||||
* The commented string gives the final mux configuration for that pin
|
|
||||||
*/
|
|
||||||
#define MUX_PANDORA() \
|
|
||||||
/*SDRC*/\
|
|
||||||
MUX_VAL(CP(SDRC_D0), (IEN | PTD | DIS | M0)) /*SDRC_D0*/\
|
|
||||||
MUX_VAL(CP(SDRC_D1), (IEN | PTD | DIS | M0)) /*SDRC_D1*/\
|
|
||||||
MUX_VAL(CP(SDRC_D2), (IEN | PTD | DIS | M0)) /*SDRC_D2*/\
|
|
||||||
MUX_VAL(CP(SDRC_D3), (IEN | PTD | DIS | M0)) /*SDRC_D3*/\
|
|
||||||
MUX_VAL(CP(SDRC_D4), (IEN | PTD | DIS | M0)) /*SDRC_D4*/\
|
|
||||||
MUX_VAL(CP(SDRC_D5), (IEN | PTD | DIS | M0)) /*SDRC_D5*/\
|
|
||||||
MUX_VAL(CP(SDRC_D6), (IEN | PTD | DIS | M0)) /*SDRC_D6*/\
|
|
||||||
MUX_VAL(CP(SDRC_D7), (IEN | PTD | DIS | M0)) /*SDRC_D7*/\
|
|
||||||
MUX_VAL(CP(SDRC_D8), (IEN | PTD | DIS | M0)) /*SDRC_D8*/\
|
|
||||||
MUX_VAL(CP(SDRC_D9), (IEN | PTD | DIS | M0)) /*SDRC_D9*/\
|
|
||||||
MUX_VAL(CP(SDRC_D10), (IEN | PTD | DIS | M0)) /*SDRC_D10*/\
|
|
||||||
MUX_VAL(CP(SDRC_D11), (IEN | PTD | DIS | M0)) /*SDRC_D11*/\
|
|
||||||
MUX_VAL(CP(SDRC_D12), (IEN | PTD | DIS | M0)) /*SDRC_D12*/\
|
|
||||||
MUX_VAL(CP(SDRC_D13), (IEN | PTD | DIS | M0)) /*SDRC_D13*/\
|
|
||||||
MUX_VAL(CP(SDRC_D14), (IEN | PTD | DIS | M0)) /*SDRC_D14*/\
|
|
||||||
MUX_VAL(CP(SDRC_D15), (IEN | PTD | DIS | M0)) /*SDRC_D15*/\
|
|
||||||
MUX_VAL(CP(SDRC_D16), (IEN | PTD | DIS | M0)) /*SDRC_D16*/\
|
|
||||||
MUX_VAL(CP(SDRC_D17), (IEN | PTD | DIS | M0)) /*SDRC_D17*/\
|
|
||||||
MUX_VAL(CP(SDRC_D18), (IEN | PTD | DIS | M0)) /*SDRC_D18*/\
|
|
||||||
MUX_VAL(CP(SDRC_D19), (IEN | PTD | DIS | M0)) /*SDRC_D19*/\
|
|
||||||
MUX_VAL(CP(SDRC_D20), (IEN | PTD | DIS | M0)) /*SDRC_D20*/\
|
|
||||||
MUX_VAL(CP(SDRC_D21), (IEN | PTD | DIS | M0)) /*SDRC_D21*/\
|
|
||||||
MUX_VAL(CP(SDRC_D22), (IEN | PTD | DIS | M0)) /*SDRC_D22*/\
|
|
||||||
MUX_VAL(CP(SDRC_D23), (IEN | PTD | DIS | M0)) /*SDRC_D23*/\
|
|
||||||
MUX_VAL(CP(SDRC_D24), (IEN | PTD | DIS | M0)) /*SDRC_D24*/\
|
|
||||||
MUX_VAL(CP(SDRC_D25), (IEN | PTD | DIS | M0)) /*SDRC_D25*/\
|
|
||||||
MUX_VAL(CP(SDRC_D26), (IEN | PTD | DIS | M0)) /*SDRC_D26*/\
|
|
||||||
MUX_VAL(CP(SDRC_D27), (IEN | PTD | DIS | M0)) /*SDRC_D27*/\
|
|
||||||
MUX_VAL(CP(SDRC_D28), (IEN | PTD | DIS | M0)) /*SDRC_D28*/\
|
|
||||||
MUX_VAL(CP(SDRC_D29), (IEN | PTD | DIS | M0)) /*SDRC_D29*/\
|
|
||||||
MUX_VAL(CP(SDRC_D30), (IEN | PTD | DIS | M0)) /*SDRC_D30*/\
|
|
||||||
MUX_VAL(CP(SDRC_D31), (IEN | PTD | DIS | M0)) /*SDRC_D31*/\
|
|
||||||
MUX_VAL(CP(SDRC_CLK), (IEN | PTD | DIS | M0)) /*SDRC_CLK*/\
|
|
||||||
MUX_VAL(CP(SDRC_DQS0), (IEN | PTD | DIS | M0)) /*SDRC_DQS0*/\
|
|
||||||
MUX_VAL(CP(SDRC_DQS1), (IEN | PTD | DIS | M0)) /*SDRC_DQS1*/\
|
|
||||||
MUX_VAL(CP(SDRC_DQS2), (IEN | PTD | DIS | M0)) /*SDRC_DQS2*/\
|
|
||||||
MUX_VAL(CP(SDRC_DQS3), (IEN | PTD | DIS | M0)) /*SDRC_DQS3*/\
|
|
||||||
/*GPMC*/\
|
|
||||||
MUX_VAL(CP(GPMC_A1), (IDIS | PTD | DIS | M0)) /*GPMC_A1*/\
|
|
||||||
MUX_VAL(CP(GPMC_A2), (IDIS | PTD | DIS | M0)) /*GPMC_A2*/\
|
|
||||||
MUX_VAL(CP(GPMC_A3), (IDIS | PTD | DIS | M0)) /*GPMC_A3*/\
|
|
||||||
MUX_VAL(CP(GPMC_A4), (IDIS | PTD | DIS | M0)) /*GPMC_A4*/\
|
|
||||||
MUX_VAL(CP(GPMC_A5), (IDIS | PTD | DIS | M0)) /*GPMC_A5*/\
|
|
||||||
MUX_VAL(CP(GPMC_A6), (IDIS | PTD | DIS | M0)) /*GPMC_A6*/\
|
|
||||||
MUX_VAL(CP(GPMC_A7), (IDIS | PTD | DIS | M0)) /*GPMC_A7*/\
|
|
||||||
MUX_VAL(CP(GPMC_A8), (IDIS | PTD | DIS | M0)) /*GPMC_A8*/\
|
|
||||||
MUX_VAL(CP(GPMC_A9), (IDIS | PTD | DIS | M0)) /*GPMC_A9*/\
|
|
||||||
MUX_VAL(CP(GPMC_A10), (IDIS | PTD | DIS | M0)) /*GPMC_A10*/\
|
|
||||||
MUX_VAL(CP(GPMC_D0), (IEN | PTD | DIS | M0)) /*GPMC_D0*/\
|
|
||||||
MUX_VAL(CP(GPMC_D1), (IEN | PTD | DIS | M0)) /*GPMC_D1*/\
|
|
||||||
MUX_VAL(CP(GPMC_D2), (IEN | PTD | DIS | M0)) /*GPMC_D2*/\
|
|
||||||
MUX_VAL(CP(GPMC_D3), (IEN | PTD | DIS | M0)) /*GPMC_D3*/\
|
|
||||||
MUX_VAL(CP(GPMC_D4), (IEN | PTD | DIS | M0)) /*GPMC_D4*/\
|
|
||||||
MUX_VAL(CP(GPMC_D5), (IEN | PTD | DIS | M0)) /*GPMC_D5*/\
|
|
||||||
MUX_VAL(CP(GPMC_D6), (IEN | PTD | DIS | M0)) /*GPMC_D6*/\
|
|
||||||
MUX_VAL(CP(GPMC_D7), (IEN | PTD | DIS | M0)) /*GPMC_D7*/\
|
|
||||||
MUX_VAL(CP(GPMC_D8), (IEN | PTD | DIS | M0)) /*GPMC_D8*/\
|
|
||||||
MUX_VAL(CP(GPMC_D9), (IEN | PTD | DIS | M0)) /*GPMC_D9*/\
|
|
||||||
MUX_VAL(CP(GPMC_D10), (IEN | PTD | DIS | M0)) /*GPMC_D10*/\
|
|
||||||
MUX_VAL(CP(GPMC_D11), (IEN | PTD | DIS | M0)) /*GPMC_D11*/\
|
|
||||||
MUX_VAL(CP(GPMC_D12), (IEN | PTD | DIS | M0)) /*GPMC_D12*/\
|
|
||||||
MUX_VAL(CP(GPMC_D13), (IEN | PTD | DIS | M0)) /*GPMC_D13*/\
|
|
||||||
MUX_VAL(CP(GPMC_D14), (IEN | PTD | DIS | M0)) /*GPMC_D14*/\
|
|
||||||
MUX_VAL(CP(GPMC_D15), (IEN | PTD | DIS | M0)) /*GPMC_D15*/\
|
|
||||||
MUX_VAL(CP(GPMC_NCS0), (IDIS | PTU | EN | M0)) /*GPMC_nCS0*/\
|
|
||||||
MUX_VAL(CP(GPMC_NCS1), (IDIS | PTU | EN | M0)) /*GPMC_nCS1*/\
|
|
||||||
MUX_VAL(CP(GPMC_CLK), (IDIS | PTD | DIS | M0)) /*GPMC_CLK*/\
|
|
||||||
MUX_VAL(CP(GPMC_NADV_ALE), (IDIS | PTD | DIS | M0)) /*GPMC_nADV_ALE*/\
|
|
||||||
MUX_VAL(CP(GPMC_NOE), (IDIS | PTD | DIS | M0)) /*GPMC_nOE*/\
|
|
||||||
MUX_VAL(CP(GPMC_NWE), (IDIS | PTD | DIS | M0)) /*GPMC_nWE*/\
|
|
||||||
MUX_VAL(CP(GPMC_NBE0_CLE), (IDIS | PTD | DIS | M0)) /*GPMC_nBE0_CLE*/\
|
|
||||||
MUX_VAL(CP(GPMC_NWP), (IEN | PTD | DIS | M0)) /*GPMC_nWP*/\
|
|
||||||
MUX_VAL(CP(GPMC_WAIT0), (IEN | PTU | EN | M0)) /*GPMC_WAIT0*/\
|
|
||||||
MUX_VAL(CP(GPMC_WAIT1), (IEN | PTU | EN | M0)) /*GPMC_WAIT1*/\
|
|
||||||
/*DSS*/\
|
|
||||||
MUX_VAL(CP(DSS_PCLK), (IDIS | PTD | DIS | M0)) /*DSS_PCLK*/\
|
|
||||||
MUX_VAL(CP(DSS_HSYNC), (IDIS | PTD | DIS | M0)) /*DSS_HSYNC*/\
|
|
||||||
MUX_VAL(CP(DSS_VSYNC), (IDIS | PTD | DIS | M0)) /*DSS_VSYNC*/\
|
|
||||||
MUX_VAL(CP(DSS_ACBIAS), (IDIS | PTD | DIS | M0)) /*DSS_ACBIAS*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA0), (IDIS | PTD | DIS | M0)) /*DSS_DATA0*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA1), (IDIS | PTD | DIS | M0)) /*DSS_DATA1*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA2), (IDIS | PTD | DIS | M0)) /*DSS_DATA2*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA3), (IDIS | PTD | DIS | M0)) /*DSS_DATA3*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA4), (IDIS | PTD | DIS | M0)) /*DSS_DATA4*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA5), (IDIS | PTD | DIS | M0)) /*DSS_DATA5*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA6), (IDIS | PTD | DIS | M0)) /*DSS_DATA6*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA7), (IDIS | PTD | DIS | M0)) /*DSS_DATA7*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA8), (IDIS | PTD | DIS | M0)) /*DSS_DATA8*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA9), (IDIS | PTD | DIS | M0)) /*DSS_DATA9*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA10), (IDIS | PTD | DIS | M0)) /*DSS_DATA10*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA11), (IDIS | PTD | DIS | M0)) /*DSS_DATA11*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA12), (IDIS | PTD | DIS | M0)) /*DSS_DATA12*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA13), (IDIS | PTD | DIS | M0)) /*DSS_DATA13*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA14), (IDIS | PTD | DIS | M0)) /*DSS_DATA14*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA15), (IDIS | PTD | DIS | M0)) /*DSS_DATA15*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA16), (IDIS | PTD | DIS | M0)) /*DSS_DATA16*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA17), (IDIS | PTD | DIS | M0)) /*DSS_DATA17*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA18), (IDIS | PTD | DIS | M0)) /*DSS_DATA18*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA19), (IDIS | PTD | DIS | M0)) /*DSS_DATA19*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA20), (IDIS | PTD | DIS | M0)) /*DSS_DATA20*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA21), (IDIS | PTD | DIS | M0)) /*DSS_DATA21*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA22), (IDIS | PTD | DIS | M0)) /*DSS_DATA22*/\
|
|
||||||
MUX_VAL(CP(DSS_DATA23), (IDIS | PTD | DIS | M0)) /*DSS_DATA23*/\
|
|
||||||
/*GPIO based game buttons*/\
|
|
||||||
MUX_VAL(CP(CAM_XCLKA), (IEN | PTD | DIS | M4)) /*GPIO_96 - LEFT*/\
|
|
||||||
MUX_VAL(CP(CAM_PCLK), (IEN | PTD | DIS | M4)) /*GPIO_97 - L2*/\
|
|
||||||
MUX_VAL(CP(CAM_FLD), (IEN | PTD | DIS | M4)) /*GPIO_98 - RIGHT*/\
|
|
||||||
MUX_VAL(CP(CAM_D0), (IEN | PTD | DIS | M4)) /*GPIO_99 - MENU*/\
|
|
||||||
MUX_VAL(CP(CAM_D1), (IEN | PTD | DIS | M4)) /*GPIO_100 - START*/\
|
|
||||||
MUX_VAL(CP(CAM_D2), (IEN | PTD | DIS | M4)) /*GPIO_101 - Y*/\
|
|
||||||
MUX_VAL(CP(CAM_D3), (IEN | PTD | DIS | M4)) /*GPIO_102 - L1*/\
|
|
||||||
MUX_VAL(CP(CAM_D4), (IEN | PTD | DIS | M4)) /*GPIO_103 - DOWN*/\
|
|
||||||
MUX_VAL(CP(CAM_D5), (IEN | PTD | DIS | M4)) /*GPIO_104 - SELECT*/\
|
|
||||||
MUX_VAL(CP(CAM_D6), (IEN | PTD | DIS | M4)) /*GPIO_105 - R1*/\
|
|
||||||
MUX_VAL(CP(CAM_D7), (IEN | PTD | DIS | M4)) /*GPIO_106 - B*/\
|
|
||||||
MUX_VAL(CP(CAM_D8), (IEN | PTD | DIS | M4)) /*GPIO_107 - R2*/\
|
|
||||||
MUX_VAL(CP(CAM_D10), (IEN | PTD | DIS | M4)) /*GPIO_109 - X*/\
|
|
||||||
MUX_VAL(CP(CAM_D11), (IEN | PTD | DIS | M4)) /*GPIO_110 - UP*/\
|
|
||||||
MUX_VAL(CP(CAM_XCLKB), (IEN | PTD | DIS | M4)) /*GPIO_111 - A*/\
|
|
||||||
/*Audio Interface To External DAC (Headphone, Speakers)*/\
|
|
||||||
MUX_VAL(CP(MCBSP2_FSX), (IDIS | PTD | DIS | M0)) /*McBSP2_FSX*/\
|
|
||||||
MUX_VAL(CP(MCBSP2_CLKX), (IDIS | PTD | DIS | M0)) /*McBSP2_CLKX*/\
|
|
||||||
MUX_VAL(CP(MCBSP2_DX), (IDIS | PTD | DIS | M0)) /*McBSP2_DX*/\
|
|
||||||
MUX_VAL(CP(MCBSP_CLKS), (IEN | PTD | DIS | M0)) /*McBSP_CLKS*/\
|
|
||||||
MUX_VAL(CP(MCBSP2_DR), (IDIS | PTD | DIS | M4)) /*GPIO_118*/\
|
|
||||||
/* - nPOWERDOWN_DAC*/\
|
|
||||||
/*Expansion card 1*/\
|
|
||||||
MUX_VAL(CP(MMC1_CLK), (IDIS | PTU | EN | M0)) /*MMC1_CLK*/\
|
|
||||||
MUX_VAL(CP(MMC1_CMD), (IEN | PTU | EN | M0)) /*MMC1_CMD*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT0), (IEN | PTU | EN | M0)) /*MMC1_DAT0*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | EN | M0)) /*MMC1_DAT1*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | EN | M0)) /*MMC1_DAT2*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | EN | M0)) /*MMC1_DAT3*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT4), (IEN | PTD | DIS | M4)) /*GPIO_126 - MMC1_WP*/\
|
|
||||||
/*Expansion card 2*/\
|
|
||||||
MUX_VAL(CP(MMC2_CLK), (IDIS | PTD | DIS | M0)) /*MMC2_CLK*/\
|
|
||||||
MUX_VAL(CP(MMC2_CMD), (IEN | PTU | EN | M0)) /*MMC2_CMD*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT0), (IEN | PTU | EN | M0)) /*MMC2_DAT0*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT1), (IEN | PTU | EN | M0)) /*MMC2_DAT1*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT2), (IEN | PTU | EN | M0)) /*MMC2_DAT2*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT3), (IEN | PTU | EN | M0)) /*MMC2_DAT3*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT4), (IDIS | PTD | DIS | M1)) /*MMC2_DIR_DAT0*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT5), (IDIS | PTD | DIS | M1)) /*MMC2_DIR_DAT1*/\
|
|
||||||
MUX_VAL(CP(MMC2_DAT6), (IDIS | PTD | DIS | M1)) /*MMC2_DIR_CMD */\
|
|
||||||
MUX_VAL(CP(MMC2_DAT7), (IEN | PTU | EN | M1)) /*MMC2_CLKIN*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT5), (IEN | PTD | DIS | M4)) /*GPIO_127 - MMC2_WP*/\
|
|
||||||
/*SDIO Interface to WIFI Module*/\
|
|
||||||
MUX_VAL(CP(ETK_CLK_ES2), (IEN | PTD | DIS | M2)) /*MMC3_CLK*/\
|
|
||||||
MUX_VAL(CP(ETK_CTL_ES2), (IEN | PTU | EN | M2)) /*MMC3_CMD*/\
|
|
||||||
MUX_VAL(CP(ETK_D4_ES2), (IEN | PTU | EN | M2)) /*MMC3_DAT0*/\
|
|
||||||
MUX_VAL(CP(ETK_D5_ES2), (IEN | PTU | EN | M2)) /*MMC3_DAT1*/\
|
|
||||||
MUX_VAL(CP(ETK_D6_ES2), (IEN | PTU | EN | M2)) /*MMC3_DAT2*/\
|
|
||||||
MUX_VAL(CP(ETK_D3_ES2), (IEN | PTU | EN | M2)) /*MMC3_DAT3*/\
|
|
||||||
/*Audio Interface To Bluetooth chip*/\
|
|
||||||
MUX_VAL(CP(MCBSP3_DX), (IDIS | PTD | DIS | M0)) /*McBSP3_DX*/\
|
|
||||||
MUX_VAL(CP(MCBSP3_DR), (IEN | PTD | DIS | M0)) /*McBSP3_DR*/\
|
|
||||||
MUX_VAL(CP(MCBSP3_CLKX), (IEN | PTD | DIS | M0)) /*McBSP3_CLKX*/\
|
|
||||||
MUX_VAL(CP(MCBSP3_FSX), (IEN | PTD | DIS | M0)) /*McBSP3_FSX*/\
|
|
||||||
/*Digital Interface to Bluetooth (UART)*/\
|
|
||||||
MUX_VAL(CP(UART1_TX), (IDIS | PTD | DIS | M0)) /*UART1_TX*/\
|
|
||||||
MUX_VAL(CP(UART1_RTS), (IDIS | PTD | DIS | M0)) /*UART1_RTS*/\
|
|
||||||
MUX_VAL(CP(UART1_CTS), (IEN | PTU | EN | M0)) /*UART1_CTS*/\
|
|
||||||
MUX_VAL(CP(UART1_RX), (IEN | PTD | DIS | M0)) /*UART1_RX*/\
|
|
||||||
/*Audio Interface to Triton2 chip (TPS65950)*/\
|
|
||||||
MUX_VAL(CP(MCBSP4_CLKX), (IEN | PTD | DIS | M0)) /*McBSP4_CLKX*/\
|
|
||||||
MUX_VAL(CP(MCBSP4_DR), (IEN | PTD | DIS | M0)) /*McBSP4_DR*/\
|
|
||||||
MUX_VAL(CP(MCBSP4_DX), (IDIS | PTD | DIS | M0)) /*McBSP4_DX*/\
|
|
||||||
MUX_VAL(CP(MCBSP4_FSX), (IEN | PTD | DIS | M0)) /*McBSP4_FSX*/\
|
|
||||||
/*GPIO definitions for muxed pins on AV connector*/\
|
|
||||||
MUX_VAL(CP(UART2_CTS), (IEN | PTD | EN | M4)) /*GPIO_144,*/\
|
|
||||||
/*UART2_CTS*/\
|
|
||||||
MUX_VAL(CP(UART2_RTS), (IEN | PTD | EN | M4)) /*GPIO_145,*/\
|
|
||||||
/*UART2_RTS*/\
|
|
||||||
MUX_VAL(CP(UART2_TX), (IEN | PTD | EN | M4)) /*GPIO_146,*/\
|
|
||||||
/*UART2_TX*/\
|
|
||||||
MUX_VAL(CP(UART2_RX), (IEN | PTD | EN | M4)) /*GPIO_147,*/\
|
|
||||||
/*UART2_RX*/\
|
|
||||||
/*Serial Interface (Peripheral boot, Linux console, on AV connector)*/\
|
|
||||||
/*RX pulled up to avoid noise when nothing is connected to serial port*/\
|
|
||||||
MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTU | EN | M0)) /*UART3_RX*/\
|
|
||||||
MUX_VAL(CP(UART3_TX_IRTX), (IDIS | PTD | DIS | M0)) /*UART3_TX*/\
|
|
||||||
/*LEDs (Controlled by OMAP)*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT6), (IDIS | PTD | DIS | M4)) /*GPIO_128*/\
|
|
||||||
/* - LED_MMC1*/\
|
|
||||||
MUX_VAL(CP(MMC1_DAT7), (IDIS | PTD | DIS | M4)) /*GPIO_129*/\
|
|
||||||
/* - LED_MMC2*/\
|
|
||||||
MUX_VAL(CP(MCBSP1_DX), (IDIS | PTD | DIS | M4)) /*GPIO_158*/\
|
|
||||||
/* - LED_BT*/\
|
|
||||||
MUX_VAL(CP(MCBSP1_DR), (IDIS | PTD | DIS | M4)) /*GPIO_159*/\
|
|
||||||
/* - LED_WIFI*/\
|
|
||||||
/*Switches*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_CS2), (IEN | PTD | DIS | M4)) /*GPIO_176*/\
|
|
||||||
/* - nHOLD_SWITCH*/\
|
|
||||||
MUX_VAL(CP(CAM_D9), (IEN | PTD | DIS | M4)) /*GPIO_108*/\
|
|
||||||
/* - nLID_SWITCH*/\
|
|
||||||
/*External IRQs*/\
|
|
||||||
MUX_VAL(CP(CAM_HS), (IEN | PTD | DIS | M4)) /*GPIO_94*/\
|
|
||||||
/* - nTOUCH_IRQ*/\
|
|
||||||
MUX_VAL(CP(ETK_D7_ES2), (IEN | PTD | DIS | M4)) /*GPIO_21*/\
|
|
||||||
/* - WIFI_IRQ*/\
|
|
||||||
MUX_VAL(CP(MCBSP1_FSX), (IEN | PTD | DIS | M4)) /*GPIO_161*/\
|
|
||||||
/* - nIRQ_NUB1*/\
|
|
||||||
MUX_VAL(CP(MCBSP1_CLKX), (IEN | PTD | DIS | M4)) /*GPIO_162*/\
|
|
||||||
/* - nIRQ_NUB2*/\
|
|
||||||
/*Various other stuff*/\
|
|
||||||
MUX_VAL(CP(UART3_CTS_RCTX), (IEN | PTD | DIS | M4)) /*GPIO_163*/\
|
|
||||||
/* - nOC_USB5*/\
|
|
||||||
MUX_VAL(CP(ETK_D8_ES2), (IEN | PTD | DIS | M4)) /*GPIO_22*/\
|
|
||||||
/* - MSECURE*/\
|
|
||||||
MUX_VAL(CP(CSI2_DY1), (IEN | PTD | DIS | M4)) /*GPIO_115*/\
|
|
||||||
/* - POP_OVERHEAT*/\
|
|
||||||
/*External Resets and Enables*/\
|
|
||||||
MUX_VAL(CP(ETK_D0_ES2), (IDIS | PTD | DIS | M4)) /*GPIO_14*/\
|
|
||||||
/* - nHDPHN_SHUTDOWN*/\
|
|
||||||
MUX_VAL(CP(ETK_D1_ES2), (IDIS | PTD | DIS | M4)) /*GPIO_15*/\
|
|
||||||
/* - nBT_SHUTDOWN*/\
|
|
||||||
MUX_VAL(CP(ETK_D9_ES2), (IDIS | PTD | DIS | M4)) /*GPIO_23*/\
|
|
||||||
/* - nWIFI_RESET*/\
|
|
||||||
MUX_VAL(CP(MCBSP1_FSR), (IDIS | PTU | DIS | M4)) /*GPIO_157*/\
|
|
||||||
/* - nLCD_RESET*/\
|
|
||||||
MUX_VAL(CP(MCBSP1_CLKR), (IDIS | PTD | DIS | M4)) /*GPIO_156*/\
|
|
||||||
/* - RESET_NUBS*/\
|
|
||||||
MUX_VAL(CP(UART3_RTS_SD), (IDIS | PTD | DIS | M4)) /*GPIO_164*/\
|
|
||||||
/* - EN_USB_5V*/\
|
|
||||||
/*Spare GPIOs*/\
|
|
||||||
MUX_VAL(CP(GPMC_NCS7), (IEN | PTD | EN | M4)) /*GPIO_58*/\
|
|
||||||
MUX_VAL(CP(GPMC_WAIT2), (IEN | PTD | EN | M4)) /*GPIO_64*/\
|
|
||||||
MUX_VAL(CP(GPMC_WAIT3), (IEN | PTD | EN | M4)) /*GPIO_65*/\
|
|
||||||
MUX_VAL(CP(CAM_VS), (IEN | PTU | EN | M4)) /*GPIO_95*/\
|
|
||||||
MUX_VAL(CP(CAM_WEN), (IEN | PTD | EN | M4)) /*GPIO_167*/\
|
|
||||||
MUX_VAL(CP(HDQ_SIO), (IEN | PTD | EN | M4)) /*GPIO_170*/\
|
|
||||||
/*HS USB OTG Port (connects to HSUSB0)*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_CLK), (IEN | PTD | DIS | M0)) /*HSUSB0_CLK*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_STP), (IDIS | PTU | EN | M0)) /*HSUSB0_STP*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DIR), (IEN | PTD | DIS | M0)) /*HSUSB0_DIR*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_NXT), (IEN | PTD | DIS | M0)) /*HSUSB0_NXT*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA0), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA0*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA1), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA1*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA2), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA2*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA3), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA3*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA4), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA4*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA5), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA5*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA6), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA6*/\
|
|
||||||
MUX_VAL(CP(HSUSB0_DATA7), (IEN | PTD | DIS | M0)) /*HSUSB0_DATA7*/\
|
|
||||||
/*I2C Ports*/\
|
|
||||||
MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) /*I2C1_SCL - T2_CTRL*/\
|
|
||||||
MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)) /*I2C1_SDA - T2_CTRL*/\
|
|
||||||
MUX_VAL(CP(I2C3_SCL), (IEN | PTU | EN | M0)) /*I2C3_SCL - NUBS*/\
|
|
||||||
MUX_VAL(CP(I2C3_SDA), (IEN | PTU | EN | M0)) /*I2C3_SDA - NUBS*/\
|
|
||||||
MUX_VAL(CP(I2C4_SCL), (IEN | PTU | EN | M0)) /*I2C4_SCL - T2_SR*/\
|
|
||||||
MUX_VAL(CP(I2C4_SDA), (IEN | PTU | EN | M0)) /*I2C4_SDA - T2_SR*/\
|
|
||||||
/*Serial Interface (Touch, LCD control)*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_CLK), (IEN | PTD | DIS | M0)) /*McSPI1_CLK*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_SIMO), (IEN | PTD | DIS | M0)) /*McSPI1_SIMO*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_SOMI), (IEN | PTD | DIS | M0)) /*McSPI1_SOMI*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_CS0), (IDIS | PTU | EN | M0)) /*McSPI1_CS0 - TOUCH*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_CS1), (IDIS | PTU | EN | M0)) /*McSPI1_CS1 - LCD*/\
|
|
||||||
/*HS USB HOST Port (connects to HSUSB2)*/\
|
|
||||||
MUX_VAL(CP(ETK_D10_ES2), (IDIS | PTD | DIS | M3)) /*USB_HOST_CLK*/\
|
|
||||||
MUX_VAL(CP(ETK_D11_ES2), (IDIS | PTU | EN | M3)) /*USB_HOST_STP*/\
|
|
||||||
MUX_VAL(CP(ETK_D12_ES2), (IEN | PTD | DIS | M3)) /*USB_HOST_DIR*/\
|
|
||||||
MUX_VAL(CP(ETK_D13_ES2), (IEN | PTD | DIS | M3)) /*USB_HOST_NXT*/\
|
|
||||||
MUX_VAL(CP(ETK_D14_ES2), (IEN | PTD | DIS | M3)) /*USB_HOST_D0*/\
|
|
||||||
MUX_VAL(CP(ETK_D15_ES2), (IEN | PTD | DIS | M3)) /*USB_HOST_D1*/\
|
|
||||||
MUX_VAL(CP(MCSPI1_CS3), (IEN | PTD | DIS | M3)) /*USB_HOST_D2*/\
|
|
||||||
MUX_VAL(CP(MCSPI2_CS1), (IEN | PTD | DIS | M3)) /*USB_HOST_D3*/\
|
|
||||||
MUX_VAL(CP(MCSPI2_SIMO), (IEN | PTD | DIS | M3)) /*USB_HOST_D4*/\
|
|
||||||
MUX_VAL(CP(MCSPI2_SOMI), (IEN | PTD | DIS | M3)) /*USB_HOST_D5*/\
|
|
||||||
MUX_VAL(CP(MCSPI2_CS0), (IEN | PTD | DIS | M3)) /*USB_HOST_D6*/\
|
|
||||||
MUX_VAL(CP(MCSPI2_CLK), (IEN | PTD | DIS | M3)) /*USB_HOST_D7*/\
|
|
||||||
MUX_VAL(CP(ETK_D2_ES2), (IDIS | PTD | DIS | M4)) /*GPIO_16*/\
|
|
||||||
/* - nRESET_USB_HOST*/\
|
|
||||||
/*Control and debug */\
|
|
||||||
MUX_VAL(CP(SYS_32K), (IEN | PTD | DIS | M0)) /*SYS_32K*/\
|
|
||||||
MUX_VAL(CP(SYS_CLKREQ), (IEN | PTD | DIS | M0)) /*SYS_CLKREQ*/\
|
|
||||||
MUX_VAL(CP(SYS_NIRQ), (IEN | PTU | EN | M0)) /*SYS_nIRQ*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT0), (IEN | PTD | DIS | M4)) /*GPIO_2*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT1), (IEN | PTD | DIS | M4)) /*GPIO_3*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT2), (IEN | PTD | DIS | M4)) /*GPIO_4*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT3), (IEN | PTD | DIS | M4)) /*GPIO_5*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT4), (IEN | PTD | DIS | M4)) /*GPIO_6*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT5), (IEN | PTD | DIS | M4)) /*GPIO_7*/\
|
|
||||||
MUX_VAL(CP(SYS_BOOT6), (IEN | PTD | DIS | M4)) /*GPIO_8*/\
|
|
||||||
MUX_VAL(CP(SYS_OFF_MODE), (IEN | PTD | DIS | M0)) /*SYS_OFF_MODE*/\
|
|
||||||
/*JTAG*/\
|
|
||||||
MUX_VAL(CP(JTAG_NTRST), (IEN | PTD | DIS | M0)) /*JTAG_NTRST*/\
|
|
||||||
MUX_VAL(CP(JTAG_TCK), (IEN | PTD | DIS | M0)) /*JTAG_TCK*/\
|
|
||||||
MUX_VAL(CP(JTAG_TMS), (IEN | PTD | DIS | M0)) /*JTAG_TMS*/\
|
|
||||||
MUX_VAL(CP(JTAG_TDI), (IEN | PTD | DIS | M0)) /*JTAG_TDI*/\
|
|
||||||
MUX_VAL(CP(JTAG_EMU0), (IEN | PTD | DIS | M0)) /*JTAG_EMU0*/\
|
|
||||||
MUX_VAL(CP(JTAG_EMU1), (IEN | PTD | DIS | M0)) /*JTAG_EMU1*/\
|
|
||||||
/*Die to Die stuff*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD1), (IEN | PTD | EN | M0)) /*d2d_mcad1*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD2), (IEN | PTD | EN | M0)) /*d2d_mcad2*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD3), (IEN | PTD | EN | M0)) /*d2d_mcad3*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD4), (IEN | PTD | EN | M0)) /*d2d_mcad4*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD5), (IEN | PTD | EN | M0)) /*d2d_mcad5*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD6), (IEN | PTD | EN | M0)) /*d2d_mcad6*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD7), (IEN | PTD | EN | M0)) /*d2d_mcad7*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD8), (IEN | PTD | EN | M0)) /*d2d_mcad8*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD9), (IEN | PTD | EN | M0)) /*d2d_mcad9*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD10), (IEN | PTD | EN | M0)) /*d2d_mcad10*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD11), (IEN | PTD | EN | M0)) /*d2d_mcad11*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD12), (IEN | PTD | EN | M0)) /*d2d_mcad12*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD13), (IEN | PTD | EN | M0)) /*d2d_mcad13*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD14), (IEN | PTD | EN | M0)) /*d2d_mcad14*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD15), (IEN | PTD | EN | M0)) /*d2d_mcad15*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD16), (IEN | PTD | EN | M0)) /*d2d_mcad16*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD17), (IEN | PTD | EN | M0)) /*d2d_mcad17*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD18), (IEN | PTD | EN | M0)) /*d2d_mcad18*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD19), (IEN | PTD | EN | M0)) /*d2d_mcad19*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD20), (IEN | PTD | EN | M0)) /*d2d_mcad20*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD21), (IEN | PTD | EN | M0)) /*d2d_mcad21*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD22), (IEN | PTD | EN | M0)) /*d2d_mcad22*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD23), (IEN | PTD | EN | M0)) /*d2d_mcad23*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD24), (IEN | PTD | EN | M0)) /*d2d_mcad24*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD25), (IEN | PTD | EN | M0)) /*d2d_mcad25*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD26), (IEN | PTD | EN | M0)) /*d2d_mcad26*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD27), (IEN | PTD | EN | M0)) /*d2d_mcad27*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD28), (IEN | PTD | EN | M0)) /*d2d_mcad28*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD29), (IEN | PTD | EN | M0)) /*d2d_mcad29*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD30), (IEN | PTD | EN | M0)) /*d2d_mcad30*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD31), (IEN | PTD | EN | M0)) /*d2d_mcad31*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD32), (IEN | PTD | EN | M0)) /*d2d_mcad32*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD33), (IEN | PTD | EN | M0)) /*d2d_mcad33*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD34), (IEN | PTD | EN | M0)) /*d2d_mcad34*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD35), (IEN | PTD | EN | M0)) /*d2d_mcad35*/\
|
|
||||||
MUX_VAL(CP(D2D_MCAD36), (IEN | PTD | EN | M0)) /*d2d_mcad36*/\
|
|
||||||
MUX_VAL(CP(D2D_CLK26MI), (IEN | PTD | DIS | M0)) /*d2d_clk26mi*/\
|
|
||||||
MUX_VAL(CP(D2D_NRESPWRON), (IEN | PTD | EN | M0)) /*d2d_nrespwron*/\
|
|
||||||
MUX_VAL(CP(D2D_NRESWARM), (IEN | PTU | EN | M0)) /*d2d_nreswarm*/\
|
|
||||||
MUX_VAL(CP(D2D_ARM9NIRQ), (IEN | PTD | DIS | M0)) /*d2d_arm9nirq*/\
|
|
||||||
MUX_VAL(CP(D2D_UMA2P6FIQ), (IEN | PTD | DIS | M0)) /*d2d_uma2p6fiq*/\
|
|
||||||
MUX_VAL(CP(D2D_SPINT), (IEN | PTD | EN | M0)) /*d2d_spint*/\
|
|
||||||
MUX_VAL(CP(D2D_FRINT), (IEN | PTD | EN | M0)) /*d2d_frint*/\
|
|
||||||
MUX_VAL(CP(D2D_DMAREQ0), (IEN | PTD | DIS | M0)) /*d2d_dmareq0*/\
|
|
||||||
MUX_VAL(CP(D2D_DMAREQ1), (IEN | PTD | DIS | M0)) /*d2d_dmareq1*/\
|
|
||||||
MUX_VAL(CP(D2D_DMAREQ2), (IEN | PTD | DIS | M0)) /*d2d_dmareq2*/\
|
|
||||||
MUX_VAL(CP(D2D_DMAREQ3), (IEN | PTD | DIS | M0)) /*d2d_dmareq3*/\
|
|
||||||
MUX_VAL(CP(D2D_N3GTRST), (IEN | PTD | DIS | M0)) /*d2d_n3gtrst*/\
|
|
||||||
MUX_VAL(CP(D2D_N3GTDI), (IEN | PTD | DIS | M0)) /*d2d_n3gtdi*/\
|
|
||||||
MUX_VAL(CP(D2D_N3GTDO), (IEN | PTD | DIS | M0)) /*d2d_n3gtdo*/\
|
|
||||||
MUX_VAL(CP(D2D_N3GTMS), (IEN | PTD | DIS | M0)) /*d2d_n3gtms*/\
|
|
||||||
MUX_VAL(CP(D2D_N3GTCK), (IEN | PTD | DIS | M0)) /*d2d_n3gtck*/\
|
|
||||||
MUX_VAL(CP(D2D_N3GRTCK), (IEN | PTD | DIS | M0)) /*d2d_n3grtck*/\
|
|
||||||
MUX_VAL(CP(D2D_MSTDBY), (IEN | PTU | EN | M0)) /*d2d_mstdby*/\
|
|
||||||
MUX_VAL(CP(D2D_SWAKEUP), (IEN | PTD | EN | M0)) /*d2d_swakeup*/\
|
|
||||||
MUX_VAL(CP(D2D_IDLEREQ), (IEN | PTD | DIS | M0)) /*d2d_idlereq*/\
|
|
||||||
MUX_VAL(CP(D2D_IDLEACK), (IEN | PTU | EN | M0)) /*d2d_idleack*/\
|
|
||||||
MUX_VAL(CP(D2D_MWRITE), (IEN | PTD | DIS | M0)) /*d2d_mwrite*/\
|
|
||||||
MUX_VAL(CP(D2D_SWRITE), (IEN | PTD | DIS | M0)) /*d2d_swrite*/\
|
|
||||||
MUX_VAL(CP(D2D_MREAD), (IEN | PTD | DIS | M0)) /*d2d_mread*/\
|
|
||||||
MUX_VAL(CP(D2D_SREAD), (IEN | PTD | DIS | M0)) /*d2d_sread*/\
|
|
||||||
MUX_VAL(CP(D2D_MBUSFLAG), (IEN | PTD | DIS | M0)) /*d2d_mbusflag*/\
|
|
||||||
MUX_VAL(CP(D2D_SBUSFLAG), (IEN | PTD | DIS | M0)) /*d2d_sbusflag*/\
|
|
||||||
MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /*sdrc_cke0*/\
|
|
||||||
MUX_VAL(CP(SDRC_CKE1), (IDIS | PTU | EN | M0)) /*sdrc_cke1*/
|
|
||||||
|
|
||||||
#define MUX_PANDORA_3730() \
|
|
||||||
MUX_VAL(CP(GPIO126), (IEN | PTD | DIS | M4)) /*GPIO_126 - MMC1_WP*/\
|
|
||||||
MUX_VAL(CP(GPIO127), (IEN | PTD | DIS | M4)) /*GPIO_127 - MMC2_WP*/\
|
|
||||||
MUX_VAL(CP(GPIO128), (IDIS | PTD | DIS | M4)) /*GPIO_128 - LED_MMC1*/\
|
|
||||||
MUX_VAL(CP(GPIO129), (IDIS | PTD | DIS | M4)) /*GPIO_129 - LED_MMC2*/
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,15 +0,0 @@
|
|||||||
if TARGET_PCM051
|
|
||||||
|
|
||||||
config SYS_BOARD
|
|
||||||
default "pcm051"
|
|
||||||
|
|
||||||
config SYS_VENDOR
|
|
||||||
default "phytec"
|
|
||||||
|
|
||||||
config SYS_SOC
|
|
||||||
default "am33xx"
|
|
||||||
|
|
||||||
config SYS_CONFIG_NAME
|
|
||||||
default "pcm051"
|
|
||||||
|
|
||||||
endif
|
|
@@ -1,7 +0,0 @@
|
|||||||
PCM051 BOARD
|
|
||||||
M: Lars Poeschel <poeschel@lemonage.de>
|
|
||||||
S: Maintained
|
|
||||||
F: board/phytec/pcm051/
|
|
||||||
F: include/configs/pcm051.h
|
|
||||||
F: configs/pcm051_rev1_defconfig
|
|
||||||
F: configs/pcm051_rev3_defconfig
|
|
@@ -1,11 +0,0 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0+
|
|
||||||
#
|
|
||||||
# Makefile
|
|
||||||
#
|
|
||||||
# Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
|
|
||||||
|
|
||||||
ifdef CONFIG_SPL_BUILD
|
|
||||||
obj-y += mux.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
obj-y += board.o
|
|
@@ -1,258 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
/*
|
|
||||||
* board.c
|
|
||||||
*
|
|
||||||
* Board functions for Phytec phyCORE-AM335x (pcm051) based boards
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Lemonage Software GmbH
|
|
||||||
* Author Lars Poeschel <poeschel@lemonage.de>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <env.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <init.h>
|
|
||||||
#include <net.h>
|
|
||||||
#include <spl.h>
|
|
||||||
#include <asm/arch/cpu.h>
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
#include <asm/arch/omap.h>
|
|
||||||
#include <asm/arch/ddr_defs.h>
|
|
||||||
#include <asm/arch/clock.h>
|
|
||||||
#include <asm/arch/gpio.h>
|
|
||||||
#include <asm/arch/mmc_host_def.h>
|
|
||||||
#include <asm/arch/sys_proto.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/emif.h>
|
|
||||||
#include <asm/gpio.h>
|
|
||||||
#include <i2c.h>
|
|
||||||
#include <miiphy.h>
|
|
||||||
#include <cpsw.h>
|
|
||||||
#include "board.h"
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
|
||||||
|
|
||||||
/* MII mode defines */
|
|
||||||
#define RMII_RGMII2_MODE_ENABLE 0x49
|
|
||||||
|
|
||||||
static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_BUILD
|
|
||||||
|
|
||||||
/* DDR RAM defines */
|
|
||||||
#define DDR_CLK_MHZ 303 /* DDR_DPLL_MULT value */
|
|
||||||
|
|
||||||
#define OSC (V_OSCK/1000000)
|
|
||||||
const struct dpll_params dpll_ddr = {
|
|
||||||
DDR_CLK_MHZ, OSC-1, 1, -1, -1, -1, -1};
|
|
||||||
|
|
||||||
const struct dpll_params *get_dpll_ddr_params(void)
|
|
||||||
{
|
|
||||||
return &dpll_ddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_REV1
|
|
||||||
const struct ctrl_ioregs ioregs = {
|
|
||||||
.cm0ioctl = MT41J256M8HX15E_IOCTRL_VALUE,
|
|
||||||
.cm1ioctl = MT41J256M8HX15E_IOCTRL_VALUE,
|
|
||||||
.cm2ioctl = MT41J256M8HX15E_IOCTRL_VALUE,
|
|
||||||
.dt0ioctl = MT41J256M8HX15E_IOCTRL_VALUE,
|
|
||||||
.dt1ioctl = MT41J256M8HX15E_IOCTRL_VALUE,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct ddr_data ddr3_data = {
|
|
||||||
.datardsratio0 = MT41J256M8HX15E_RD_DQS,
|
|
||||||
.datawdsratio0 = MT41J256M8HX15E_WR_DQS,
|
|
||||||
.datafwsratio0 = MT41J256M8HX15E_PHY_FIFO_WE,
|
|
||||||
.datawrsratio0 = MT41J256M8HX15E_PHY_WR_DATA,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct cmd_control ddr3_cmd_ctrl_data = {
|
|
||||||
.cmd0csratio = MT41J256M8HX15E_RATIO,
|
|
||||||
.cmd0iclkout = MT41J256M8HX15E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd1csratio = MT41J256M8HX15E_RATIO,
|
|
||||||
.cmd1iclkout = MT41J256M8HX15E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd2csratio = MT41J256M8HX15E_RATIO,
|
|
||||||
.cmd2iclkout = MT41J256M8HX15E_INVERT_CLKOUT,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct emif_regs ddr3_emif_reg_data = {
|
|
||||||
.sdram_config = MT41J256M8HX15E_EMIF_SDCFG,
|
|
||||||
.ref_ctrl = MT41J256M8HX15E_EMIF_SDREF,
|
|
||||||
.sdram_tim1 = MT41J256M8HX15E_EMIF_TIM1,
|
|
||||||
.sdram_tim2 = MT41J256M8HX15E_EMIF_TIM2,
|
|
||||||
.sdram_tim3 = MT41J256M8HX15E_EMIF_TIM3,
|
|
||||||
.zq_config = MT41J256M8HX15E_ZQ_CFG,
|
|
||||||
.emif_ddr_phy_ctlr_1 = MT41J256M8HX15E_EMIF_READ_LATENCY |
|
|
||||||
PHY_EN_DYN_PWRDN,
|
|
||||||
};
|
|
||||||
|
|
||||||
void sdram_init(void)
|
|
||||||
{
|
|
||||||
config_ddr(DDR_CLK_MHZ, &ioregs, &ddr3_data,
|
|
||||||
&ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
const struct ctrl_ioregs ioregs = {
|
|
||||||
.cm0ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
|
||||||
.cm1ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
|
||||||
.cm2ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
|
||||||
.dt0ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
|
||||||
.dt1ioctl = MT41K256M16HA125E_IOCTRL_VALUE,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct ddr_data ddr3_data = {
|
|
||||||
.datardsratio0 = MT41K256M16HA125E_RD_DQS,
|
|
||||||
.datawdsratio0 = MT41K256M16HA125E_WR_DQS,
|
|
||||||
.datafwsratio0 = MT41K256M16HA125E_PHY_FIFO_WE,
|
|
||||||
.datawrsratio0 = MT41K256M16HA125E_PHY_WR_DATA,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct cmd_control ddr3_cmd_ctrl_data = {
|
|
||||||
.cmd0csratio = MT41K256M16HA125E_RATIO,
|
|
||||||
.cmd0iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd1csratio = MT41K256M16HA125E_RATIO,
|
|
||||||
.cmd1iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
|
||||||
|
|
||||||
.cmd2csratio = MT41K256M16HA125E_RATIO,
|
|
||||||
.cmd2iclkout = MT41K256M16HA125E_INVERT_CLKOUT,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct emif_regs ddr3_emif_reg_data = {
|
|
||||||
.sdram_config = MT41K256M16HA125E_EMIF_SDCFG,
|
|
||||||
.ref_ctrl = MT41K256M16HA125E_EMIF_SDREF,
|
|
||||||
.sdram_tim1 = MT41K256M16HA125E_EMIF_TIM1,
|
|
||||||
.sdram_tim2 = MT41K256M16HA125E_EMIF_TIM2,
|
|
||||||
.sdram_tim3 = MT41K256M16HA125E_EMIF_TIM3,
|
|
||||||
.zq_config = MT41K256M16HA125E_ZQ_CFG,
|
|
||||||
.emif_ddr_phy_ctlr_1 = MT41K256M16HA125E_EMIF_READ_LATENCY |
|
|
||||||
PHY_EN_DYN_PWRDN,
|
|
||||||
};
|
|
||||||
|
|
||||||
void sdram_init(void)
|
|
||||||
{
|
|
||||||
config_ddr(DDR_CLK_MHZ, &ioregs, &ddr3_data,
|
|
||||||
&ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void set_uart_mux_conf(void)
|
|
||||||
{
|
|
||||||
enable_uart0_pin_mux();
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_mux_conf_regs(void)
|
|
||||||
{
|
|
||||||
/* Initalize the board header */
|
|
||||||
enable_i2c0_pin_mux();
|
|
||||||
i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
|
|
||||||
|
|
||||||
enable_board_pin_mux();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Basic board specific setup. Pinmux has been handled already.
|
|
||||||
*/
|
|
||||||
int board_init(void)
|
|
||||||
{
|
|
||||||
i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);
|
|
||||||
|
|
||||||
gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_DRIVER_TI_CPSW
|
|
||||||
static void cpsw_control(int enabled)
|
|
||||||
{
|
|
||||||
/* VTP can be added here */
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct cpsw_slave_data cpsw_slaves[] = {
|
|
||||||
{
|
|
||||||
.slave_reg_ofs = 0x208,
|
|
||||||
.sliver_reg_ofs = 0xd80,
|
|
||||||
.phy_addr = 0,
|
|
||||||
.phy_if = PHY_INTERFACE_MODE_RGMII,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.slave_reg_ofs = 0x308,
|
|
||||||
.sliver_reg_ofs = 0xdc0,
|
|
||||||
.phy_addr = 1,
|
|
||||||
.phy_if = PHY_INTERFACE_MODE_RGMII,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct cpsw_platform_data cpsw_data = {
|
|
||||||
.mdio_base = CPSW_MDIO_BASE,
|
|
||||||
.cpsw_base = CPSW_BASE,
|
|
||||||
.mdio_div = 0xff,
|
|
||||||
.channels = 8,
|
|
||||||
.cpdma_reg_ofs = 0x800,
|
|
||||||
.slaves = 1,
|
|
||||||
.slave_data = cpsw_slaves,
|
|
||||||
.ale_reg_ofs = 0xd00,
|
|
||||||
.ale_entries = 1024,
|
|
||||||
.host_port_reg_ofs = 0x108,
|
|
||||||
.hw_stats_reg_ofs = 0x900,
|
|
||||||
.bd_ram_ofs = 0x2000,
|
|
||||||
.mac_control = (1 << 5),
|
|
||||||
.control = cpsw_control,
|
|
||||||
.host_port_num = 0,
|
|
||||||
.version = CPSW_CTRL_VERSION_2,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_DRIVER_TI_CPSW) || \
|
|
||||||
(defined(CONFIG_USB_ETHER) && defined(CONFIG_USB_MUSB_GADGET))
|
|
||||||
int board_eth_init(bd_t *bis)
|
|
||||||
{
|
|
||||||
int rv, n = 0;
|
|
||||||
#ifdef CONFIG_DRIVER_TI_CPSW
|
|
||||||
uint8_t mac_addr[6];
|
|
||||||
uint32_t mac_hi, mac_lo;
|
|
||||||
|
|
||||||
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
|
|
||||||
printf("<ethaddr> not set. Reading from E-fuse\n");
|
|
||||||
/* try reading mac address from efuse */
|
|
||||||
mac_lo = readl(&cdev->macid0l);
|
|
||||||
mac_hi = readl(&cdev->macid0h);
|
|
||||||
mac_addr[0] = mac_hi & 0xFF;
|
|
||||||
mac_addr[1] = (mac_hi & 0xFF00) >> 8;
|
|
||||||
mac_addr[2] = (mac_hi & 0xFF0000) >> 16;
|
|
||||||
mac_addr[3] = (mac_hi & 0xFF000000) >> 24;
|
|
||||||
mac_addr[4] = mac_lo & 0xFF;
|
|
||||||
mac_addr[5] = (mac_lo & 0xFF00) >> 8;
|
|
||||||
|
|
||||||
if (is_valid_ethaddr(mac_addr))
|
|
||||||
eth_env_set_enetaddr("ethaddr", mac_addr);
|
|
||||||
else
|
|
||||||
goto try_usbether;
|
|
||||||
}
|
|
||||||
|
|
||||||
writel(RMII_RGMII2_MODE_ENABLE, &cdev->miisel);
|
|
||||||
|
|
||||||
rv = cpsw_register(&cpsw_data);
|
|
||||||
if (rv < 0)
|
|
||||||
printf("Error %d registering CPSW switch\n", rv);
|
|
||||||
else
|
|
||||||
n += rv;
|
|
||||||
try_usbether:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_USB_ETHER) && !defined(CONFIG_SPL_BUILD)
|
|
||||||
rv = usb_eth_initialize(bis);
|
|
||||||
if (rv < 0)
|
|
||||||
printf("Error %d registering USB_ETHER\n", rv);
|
|
||||||
else
|
|
||||||
n += rv;
|
|
||||||
#endif
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
#endif
|
|
@@ -1,24 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
||||||
/*
|
|
||||||
* board.h
|
|
||||||
*
|
|
||||||
* Phytec phyCORE-AM335x (pcm051) boards information header
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013, Lemonage Software GmbH
|
|
||||||
* Author Lars Poeschel <poeschel@lemonage.de>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _BOARD_H_
|
|
||||||
#define _BOARD_H_
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We have three pin mux functions that must exist. We must be able to enable
|
|
||||||
* uart0, for initial output and i2c0 to read the main EEPROM. We then have a
|
|
||||||
* main pinmux function that can be overridden to enable all other pinmux that
|
|
||||||
* is required on the board.
|
|
||||||
*/
|
|
||||||
void enable_uart0_pin_mux(void);
|
|
||||||
void enable_i2c0_pin_mux(void);
|
|
||||||
void enable_board_pin_mux(void);
|
|
||||||
void enable_cbmux_pin_mux(void);
|
|
||||||
#endif
|
|
@@ -1,127 +0,0 @@
|
|||||||
/*
|
|
||||||
* mux.c
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Lemonage Software GmbH
|
|
||||||
* Author Lars Poeschel <poeschel@lemonage.de>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation version 2.
|
|
||||||
*
|
|
||||||
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
|
|
||||||
* kind, whether express or implied; without even the implied warranty
|
|
||||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <asm/arch/sys_proto.h>
|
|
||||||
#include <asm/arch/hardware.h>
|
|
||||||
#include <asm/arch/mux.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include "board.h"
|
|
||||||
|
|
||||||
static struct module_pin_mux uart0_pin_mux[] = {
|
|
||||||
{OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* UART0_RXD */
|
|
||||||
{OFFSET(uart0_txd), (MODE(0) | PULLUDEN)}, /* UART0_TXD */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMC
|
|
||||||
static struct module_pin_mux mmc0_pin_mux[] = {
|
|
||||||
{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */
|
|
||||||
{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */
|
|
||||||
{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */
|
|
||||||
{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */
|
|
||||||
{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */
|
|
||||||
{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */
|
|
||||||
{OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)}, /* MMC0_CD */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_I2C
|
|
||||||
static struct module_pin_mux i2c0_pin_mux[] = {
|
|
||||||
{OFFSET(i2c0_sda), (MODE(0) | RXACTIVE |
|
|
||||||
PULLUDEN | SLEWCTRL)}, /* I2C_DATA */
|
|
||||||
{OFFSET(i2c0_scl), (MODE(0) | RXACTIVE |
|
|
||||||
PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SPI
|
|
||||||
static struct module_pin_mux spi0_pin_mux[] = {
|
|
||||||
{OFFSET(spi0_sclk), (MODE(0) | RXACTIVE | PULLUDEN)}, /* SPI0_SCLK */
|
|
||||||
{OFFSET(spi0_d0), (MODE(0) | RXACTIVE |
|
|
||||||
PULLUDEN | PULLUP_EN)}, /* SPI0_D0 */
|
|
||||||
{OFFSET(spi0_d1), (MODE(0) | RXACTIVE | PULLUDEN)}, /* SPI0_D1 */
|
|
||||||
{OFFSET(spi0_cs0), (MODE(0) | RXACTIVE |
|
|
||||||
PULLUDEN | PULLUP_EN)}, /* SPI0_CS0 */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct module_pin_mux rmii1_pin_mux[] = {
|
|
||||||
{OFFSET(mii1_crs), MODE(1) | RXACTIVE}, /* RMII1_CRS */
|
|
||||||
{OFFSET(mii1_rxerr), MODE(1) | RXACTIVE}, /* RMII1_RXERR */
|
|
||||||
{OFFSET(mii1_txen), MODE(1)}, /* RMII1_TXEN */
|
|
||||||
{OFFSET(mii1_txd1), MODE(1)}, /* RMII1_TXD1 */
|
|
||||||
{OFFSET(mii1_txd0), MODE(1)}, /* RMII1_TXD0 */
|
|
||||||
{OFFSET(mii1_rxd1), MODE(1) | RXACTIVE}, /* RMII1_RXD1 */
|
|
||||||
{OFFSET(mii1_rxd0), MODE(1) | RXACTIVE}, /* RMII1_RXD0 */
|
|
||||||
{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */
|
|
||||||
{OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */
|
|
||||||
{OFFSET(rmii1_refclk), MODE(0) | RXACTIVE}, /* RMII1_REFCLK */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct module_pin_mux cbmux_pin_mux[] = {
|
|
||||||
{OFFSET(uart0_ctsn), MODE(7) | RXACTIVE | PULLDOWN_EN}, /* JP3 */
|
|
||||||
{OFFSET(uart0_rtsn), MODE(7) | RXACTIVE | PULLUP_EN}, /* JP4 */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_MTD_RAW_NAND
|
|
||||||
static struct module_pin_mux nand_pin_mux[] = {
|
|
||||||
{OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD0 */
|
|
||||||
{OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD1 */
|
|
||||||
{OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD2 */
|
|
||||||
{OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD3 */
|
|
||||||
{OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD4 */
|
|
||||||
{OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD5 */
|
|
||||||
{OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD6 */
|
|
||||||
{OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD7 */
|
|
||||||
{OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */
|
|
||||||
{OFFSET(gpmc_wpn), (MODE(7) | PULLUP_EN | RXACTIVE)}, /* NAND_WPN */
|
|
||||||
{OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)}, /* NAND_CS0 */
|
|
||||||
{OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)}, /* NAND_ADV_ALE */
|
|
||||||
{OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)}, /* NAND_OE */
|
|
||||||
{OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)}, /* NAND_WEN */
|
|
||||||
{OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)}, /* NAND_BE_CLE */
|
|
||||||
{-1},
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void enable_uart0_pin_mux(void)
|
|
||||||
{
|
|
||||||
configure_module_pin_mux(uart0_pin_mux);
|
|
||||||
}
|
|
||||||
|
|
||||||
void enable_i2c0_pin_mux(void)
|
|
||||||
{
|
|
||||||
configure_module_pin_mux(i2c0_pin_mux);
|
|
||||||
}
|
|
||||||
|
|
||||||
void enable_board_pin_mux()
|
|
||||||
{
|
|
||||||
configure_module_pin_mux(rmii1_pin_mux);
|
|
||||||
configure_module_pin_mux(mmc0_pin_mux);
|
|
||||||
configure_module_pin_mux(cbmux_pin_mux);
|
|
||||||
#ifdef CONFIG_MTD_RAW_NAND
|
|
||||||
configure_module_pin_mux(nand_pin_mux);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPI
|
|
||||||
configure_module_pin_mux(spi0_pin_mux);
|
|
||||||
#endif
|
|
||||||
}
|
|
@@ -52,6 +52,7 @@ CONFIG_PHY_SMSC=y
|
|||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
CONFIG_DRIVER_TI_CPSW=y
|
CONFIG_DRIVER_TI_CPSW=y
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
|
CONFIG_DM_SPI=y
|
||||||
CONFIG_OMAP3_SPI=y
|
CONFIG_OMAP3_SPI=y
|
||||||
CONFIG_FAT_WRITE=y
|
CONFIG_FAT_WRITE=y
|
||||||
CONFIG_LZO=y
|
CONFIG_LZO=y
|
||||||
|
@@ -62,6 +62,7 @@ CONFIG_SMC911X_BASE=0x2C000000
|
|||||||
CONFIG_SMC911X_32_BIT=y
|
CONFIG_SMC911X_32_BIT=y
|
||||||
CONFIG_CONS_INDEX=3
|
CONFIG_CONS_INDEX=3
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
|
CONFIG_DM_SPI=y
|
||||||
CONFIG_OMAP3_SPI=y
|
CONFIG_OMAP3_SPI=y
|
||||||
CONFIG_BCH=y
|
CONFIG_BCH=y
|
||||||
CONFIG_FDT_FIXUP_PARTITIONS=y
|
CONFIG_FDT_FIXUP_PARTITIONS=y
|
||||||
|
@@ -36,11 +36,13 @@ CONFIG_MTDIDS_DEFAULT="nand0=davinci_nand.0"
|
|||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
||||||
CONFIG_CMD_UBI=y
|
CONFIG_CMD_UBI=y
|
||||||
CONFIG_OF_CONTROL=y
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2e-evm"
|
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2e-evm"
|
||||||
CONFIG_ENV_IS_IN_NAND=y
|
CONFIG_ENV_IS_IN_NAND=y
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
CONFIG_NET_RANDOM_ETHADDR=y
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
CONFIG_DM=y
|
CONFIG_DM=y
|
||||||
|
CONFIG_SPL_DM=y
|
||||||
CONFIG_SYS_I2C_DAVINCI=y
|
CONFIG_SYS_I2C_DAVINCI=y
|
||||||
CONFIG_TI_AEMIF=y
|
CONFIG_TI_AEMIF=y
|
||||||
CONFIG_MISC=y
|
CONFIG_MISC=y
|
||||||
|
@@ -34,6 +34,7 @@ CONFIG_MTDIDS_DEFAULT="nand0=davinci_nand.0"
|
|||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
||||||
CONFIG_CMD_UBI=y
|
CONFIG_CMD_UBI=y
|
||||||
CONFIG_OF_CONTROL=y
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2g-evm"
|
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2g-evm"
|
||||||
CONFIG_OF_LIST="keystone-k2g-generic keystone-k2g-evm keystone-k2g-ice"
|
CONFIG_OF_LIST="keystone-k2g-generic keystone-k2g-evm keystone-k2g-ice"
|
||||||
CONFIG_DTB_RESELECT=y
|
CONFIG_DTB_RESELECT=y
|
||||||
@@ -41,6 +42,7 @@ CONFIG_MULTI_DTB_FIT=y
|
|||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||||
CONFIG_DM=y
|
CONFIG_DM=y
|
||||||
|
CONFIG_SPL_DM=y
|
||||||
CONFIG_DFU_MMC=y
|
CONFIG_DFU_MMC=y
|
||||||
CONFIG_SYS_I2C_DAVINCI=y
|
CONFIG_SYS_I2C_DAVINCI=y
|
||||||
CONFIG_MISC=y
|
CONFIG_MISC=y
|
||||||
|
@@ -36,11 +36,13 @@ CONFIG_MTDIDS_DEFAULT="nand0=davinci_nand.0"
|
|||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
||||||
CONFIG_CMD_UBI=y
|
CONFIG_CMD_UBI=y
|
||||||
CONFIG_OF_CONTROL=y
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2hk-evm"
|
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2hk-evm"
|
||||||
CONFIG_ENV_IS_IN_NAND=y
|
CONFIG_ENV_IS_IN_NAND=y
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
CONFIG_NET_RANDOM_ETHADDR=y
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
CONFIG_DM=y
|
CONFIG_DM=y
|
||||||
|
CONFIG_SPL_DM=y
|
||||||
CONFIG_SYS_I2C_DAVINCI=y
|
CONFIG_SYS_I2C_DAVINCI=y
|
||||||
CONFIG_TI_AEMIF=y
|
CONFIG_TI_AEMIF=y
|
||||||
CONFIG_MISC=y
|
CONFIG_MISC=y
|
||||||
|
@@ -36,11 +36,13 @@ CONFIG_MTDIDS_DEFAULT="nand0=davinci_nand.0"
|
|||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
CONFIG_MTDPARTS_DEFAULT="mtdparts=davinci_nand.0:1024k(bootloader)ro,512k(params)ro,-(ubifs)"
|
||||||
CONFIG_CMD_UBI=y
|
CONFIG_CMD_UBI=y
|
||||||
CONFIG_OF_CONTROL=y
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2l-evm"
|
CONFIG_DEFAULT_DEVICE_TREE="keystone-k2l-evm"
|
||||||
CONFIG_ENV_IS_IN_NAND=y
|
CONFIG_ENV_IS_IN_NAND=y
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
CONFIG_NET_RANDOM_ETHADDR=y
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
CONFIG_DM=y
|
CONFIG_DM=y
|
||||||
|
CONFIG_SPL_DM=y
|
||||||
CONFIG_SYS_I2C_DAVINCI=y
|
CONFIG_SYS_I2C_DAVINCI=y
|
||||||
CONFIG_TI_AEMIF=y
|
CONFIG_TI_AEMIF=y
|
||||||
CONFIG_MISC=y
|
CONFIG_MISC=y
|
||||||
|
@@ -1,40 +0,0 @@
|
|||||||
CONFIG_ARM=y
|
|
||||||
CONFIG_ARCH_OMAP2PLUS=y
|
|
||||||
CONFIG_SYS_TEXT_BASE=0x80008000
|
|
||||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
|
||||||
CONFIG_TARGET_OMAP3_PANDORA=y
|
|
||||||
CONFIG_NR_DRAM_BANKS=2
|
|
||||||
CONFIG_DISTRO_DEFAULTS=y
|
|
||||||
# CONFIG_USE_BOOTCOMMAND is not set
|
|
||||||
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
|
||||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
|
||||||
CONFIG_VERSION_VARIABLE=y
|
|
||||||
CONFIG_SYS_PROMPT="Pandora # "
|
|
||||||
# CONFIG_CMD_IMI is not set
|
|
||||||
CONFIG_CMD_ASKENV=y
|
|
||||||
# CONFIG_CMD_FLASH is not set
|
|
||||||
CONFIG_CMD_GPIO=y
|
|
||||||
CONFIG_CMD_I2C=y
|
|
||||||
CONFIG_CMD_MMC=y
|
|
||||||
CONFIG_CMD_NAND=y
|
|
||||||
CONFIG_CMD_SPI=y
|
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
|
||||||
# CONFIG_CMD_NET is not set
|
|
||||||
CONFIG_CMD_CACHE=y
|
|
||||||
CONFIG_CMD_EXT4_WRITE=y
|
|
||||||
CONFIG_CMD_MTDPARTS=y
|
|
||||||
CONFIG_MTDIDS_DEFAULT="nand0=omap2-nand.0"
|
|
||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=omap2-nand.0:512k(xloader),1920k(uboot),128k(uboot-env),10m(boot),-(rootfs)"
|
|
||||||
CONFIG_CMD_UBI=y
|
|
||||||
CONFIG_ENV_IS_IN_NAND=y
|
|
||||||
CONFIG_DM=y
|
|
||||||
CONFIG_TWL4030_LED=y
|
|
||||||
CONFIG_MMC_OMAP_HS=y
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_RAW_NAND=y
|
|
||||||
CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
|
|
||||||
CONFIG_DM_SERIAL=y
|
|
||||||
CONFIG_SPI=y
|
|
||||||
CONFIG_OMAP3_SPI=y
|
|
||||||
CONFIG_FAT_WRITE=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
|
@@ -1,60 +0,0 @@
|
|||||||
CONFIG_ARM=y
|
|
||||||
CONFIG_ARCH_CPU_INIT=y
|
|
||||||
CONFIG_ARCH_OMAP2PLUS=y
|
|
||||||
CONFIG_SPL_GPIO_SUPPORT=y
|
|
||||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
|
||||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
|
||||||
CONFIG_AM33XX=y
|
|
||||||
CONFIG_TARGET_PCM051=y
|
|
||||||
CONFIG_SPL_MMC_SUPPORT=y
|
|
||||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
|
||||||
CONFIG_SPL=y
|
|
||||||
CONFIG_SPL_FS_FAT=y
|
|
||||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
|
||||||
CONFIG_DISTRO_DEFAULTS=y
|
|
||||||
CONFIG_SYS_EXTRA_OPTIONS="REV1"
|
|
||||||
# CONFIG_USE_BOOTCOMMAND is not set
|
|
||||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
|
||||||
CONFIG_VERSION_VARIABLE=y
|
|
||||||
CONFIG_ARCH_MISC_INIT=y
|
|
||||||
CONFIG_SPL_ENV_SUPPORT=y
|
|
||||||
CONFIG_SPL_ETH_SUPPORT=y
|
|
||||||
CONFIG_SPL_FS_EXT4=y
|
|
||||||
CONFIG_SPL_I2C_SUPPORT=y
|
|
||||||
# CONFIG_SPL_NAND_SUPPORT is not set
|
|
||||||
CONFIG_SPL_NET_SUPPORT=y
|
|
||||||
CONFIG_SPL_NET_VCI_STRING="pcm051 U-Boot SPL"
|
|
||||||
CONFIG_SPL_OS_BOOT=y
|
|
||||||
CONFIG_SPL_POWER_SUPPORT=y
|
|
||||||
CONFIG_SPL_WATCHDOG_SUPPORT=y
|
|
||||||
CONFIG_SPL_YMODEM_SUPPORT=y
|
|
||||||
CONFIG_CMD_SPL=y
|
|
||||||
CONFIG_CMD_ASKENV=y
|
|
||||||
CONFIG_CMD_EEPROM=y
|
|
||||||
CONFIG_CMD_GPIO=y
|
|
||||||
CONFIG_CMD_I2C=y
|
|
||||||
CONFIG_CMD_MMC=y
|
|
||||||
CONFIG_CMD_SF=y
|
|
||||||
CONFIG_CMD_SPI=y
|
|
||||||
CONFIG_CMD_USB=y
|
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
|
||||||
CONFIG_CMD_EXT4_WRITE=y
|
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
|
||||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
|
||||||
CONFIG_MMC_OMAP_HS=y
|
|
||||||
CONFIG_SPI_FLASH=y
|
|
||||||
CONFIG_SF_DEFAULT_SPEED=24000000
|
|
||||||
CONFIG_SPI_FLASH_WINBOND=y
|
|
||||||
CONFIG_PHY_SMSC=y
|
|
||||||
CONFIG_MII=y
|
|
||||||
CONFIG_DRIVER_TI_CPSW=y
|
|
||||||
CONFIG_SPI=y
|
|
||||||
CONFIG_OMAP3_SPI=y
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_MUSB_HOST=y
|
|
||||||
CONFIG_USB_MUSB_GADGET=y
|
|
||||||
CONFIG_USB_MUSB_DSPS=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_USB_ETHER=y
|
|
||||||
CONFIG_FAT_WRITE=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
|
@@ -1,60 +0,0 @@
|
|||||||
CONFIG_ARM=y
|
|
||||||
CONFIG_ARCH_CPU_INIT=y
|
|
||||||
CONFIG_ARCH_OMAP2PLUS=y
|
|
||||||
CONFIG_SPL_GPIO_SUPPORT=y
|
|
||||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
|
||||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
|
||||||
CONFIG_AM33XX=y
|
|
||||||
CONFIG_TARGET_PCM051=y
|
|
||||||
CONFIG_SPL_MMC_SUPPORT=y
|
|
||||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
|
||||||
CONFIG_SPL=y
|
|
||||||
CONFIG_SPL_FS_FAT=y
|
|
||||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
|
||||||
CONFIG_DISTRO_DEFAULTS=y
|
|
||||||
CONFIG_SYS_EXTRA_OPTIONS="REV3"
|
|
||||||
# CONFIG_USE_BOOTCOMMAND is not set
|
|
||||||
CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
|
||||||
CONFIG_VERSION_VARIABLE=y
|
|
||||||
CONFIG_ARCH_MISC_INIT=y
|
|
||||||
CONFIG_SPL_ENV_SUPPORT=y
|
|
||||||
CONFIG_SPL_ETH_SUPPORT=y
|
|
||||||
CONFIG_SPL_FS_EXT4=y
|
|
||||||
CONFIG_SPL_I2C_SUPPORT=y
|
|
||||||
# CONFIG_SPL_NAND_SUPPORT is not set
|
|
||||||
CONFIG_SPL_NET_SUPPORT=y
|
|
||||||
CONFIG_SPL_NET_VCI_STRING="pcm051 U-Boot SPL"
|
|
||||||
CONFIG_SPL_OS_BOOT=y
|
|
||||||
CONFIG_SPL_POWER_SUPPORT=y
|
|
||||||
CONFIG_SPL_WATCHDOG_SUPPORT=y
|
|
||||||
CONFIG_SPL_YMODEM_SUPPORT=y
|
|
||||||
CONFIG_CMD_SPL=y
|
|
||||||
CONFIG_CMD_ASKENV=y
|
|
||||||
CONFIG_CMD_EEPROM=y
|
|
||||||
CONFIG_CMD_GPIO=y
|
|
||||||
CONFIG_CMD_I2C=y
|
|
||||||
CONFIG_CMD_MMC=y
|
|
||||||
CONFIG_CMD_SF=y
|
|
||||||
CONFIG_CMD_SPI=y
|
|
||||||
CONFIG_CMD_USB=y
|
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
|
||||||
CONFIG_CMD_EXT4_WRITE=y
|
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
|
||||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
|
||||||
CONFIG_MMC_OMAP_HS=y
|
|
||||||
CONFIG_SPI_FLASH=y
|
|
||||||
CONFIG_SF_DEFAULT_SPEED=24000000
|
|
||||||
CONFIG_SPI_FLASH_WINBOND=y
|
|
||||||
CONFIG_PHY_SMSC=y
|
|
||||||
CONFIG_MII=y
|
|
||||||
CONFIG_DRIVER_TI_CPSW=y
|
|
||||||
CONFIG_SPI=y
|
|
||||||
CONFIG_OMAP3_SPI=y
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_MUSB_HOST=y
|
|
||||||
CONFIG_USB_MUSB_GADGET=y
|
|
||||||
CONFIG_USB_MUSB_DSPS=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_USB_ETHER=y
|
|
||||||
CONFIG_FAT_WRITE=y
|
|
||||||
CONFIG_OF_LIBFDT=y
|
|
@@ -41,11 +41,6 @@ make
|
|||||||
make omap3_evm_config
|
make omap3_evm_config
|
||||||
make
|
make
|
||||||
|
|
||||||
* Pandora:
|
|
||||||
|
|
||||||
make omap3_pandora_config
|
|
||||||
make
|
|
||||||
|
|
||||||
* Zoom MDK:
|
* Zoom MDK:
|
||||||
|
|
||||||
make omap3_zoom1_config
|
make omap3_zoom1_config
|
||||||
|
@@ -119,6 +119,12 @@ config CF_SPI
|
|||||||
Enable the ColdFire SPI driver. This driver can be used on
|
Enable the ColdFire SPI driver. This driver can be used on
|
||||||
some m68k SoCs.
|
some m68k SoCs.
|
||||||
|
|
||||||
|
config DAVINCI_SPI
|
||||||
|
bool "Davinci & Keystone SPI driver"
|
||||||
|
depends on ARCH_DAVINCI || ARCH_KEYSTONE
|
||||||
|
help
|
||||||
|
Enable the Davinci SPI driver
|
||||||
|
|
||||||
config DESIGNWARE_SPI
|
config DESIGNWARE_SPI
|
||||||
bool "Designware SPI driver"
|
bool "Designware SPI driver"
|
||||||
help
|
help
|
||||||
@@ -207,6 +213,12 @@ config MVEBU_A3700_SPI
|
|||||||
used to access the SPI NOR flash on platforms embedding this
|
used to access the SPI NOR flash on platforms embedding this
|
||||||
Marvell IP core.
|
Marvell IP core.
|
||||||
|
|
||||||
|
config MXS_SPI
|
||||||
|
bool "MXS SPI Driver"
|
||||||
|
help
|
||||||
|
Enable the MXS SPI controller driver. This driver can be used
|
||||||
|
on the i.MX23 and i.MX28 SoCs.
|
||||||
|
|
||||||
config NXP_FSPI
|
config NXP_FSPI
|
||||||
bool "NXP FlexSPI driver"
|
bool "NXP FlexSPI driver"
|
||||||
depends on SPI_MEM
|
depends on SPI_MEM
|
||||||
@@ -280,6 +292,12 @@ config SPI_SIFIVE
|
|||||||
|
|
||||||
The SiFive SPI controller driver is found on various SiFive SoCs.
|
The SiFive SPI controller driver is found on various SiFive SoCs.
|
||||||
|
|
||||||
|
config SOFT_SPI
|
||||||
|
bool "Soft SPI driver"
|
||||||
|
help
|
||||||
|
Enable Soft SPI driver. This driver is to use GPIO simulate
|
||||||
|
the SPI protocol.
|
||||||
|
|
||||||
config SPI_SUNXI
|
config SPI_SUNXI
|
||||||
bool "Allwinner SoC SPI controllers"
|
bool "Allwinner SoC SPI controllers"
|
||||||
default ARCH_SUNXI
|
default ARCH_SUNXI
|
||||||
@@ -385,13 +403,6 @@ config ZYNQMP_GQSPI
|
|||||||
|
|
||||||
endif # if DM_SPI
|
endif # if DM_SPI
|
||||||
|
|
||||||
config SOFT_SPI
|
|
||||||
bool "Soft SPI driver"
|
|
||||||
depends on DM_SPI || (DEPRECATED && !DM_SPI)
|
|
||||||
help
|
|
||||||
Enable Soft SPI driver. This driver is to use GPIO simulate
|
|
||||||
the SPI protocol.
|
|
||||||
|
|
||||||
config FSL_ESPI
|
config FSL_ESPI
|
||||||
bool "Freescale eSPI driver"
|
bool "Freescale eSPI driver"
|
||||||
imply SPI_FLASH_BAR
|
imply SPI_FLASH_BAR
|
||||||
@@ -400,12 +411,6 @@ config FSL_ESPI
|
|||||||
access the SPI interface and SPI NOR flash on platforms embedding
|
access the SPI interface and SPI NOR flash on platforms embedding
|
||||||
this Freescale eSPI IP core.
|
this Freescale eSPI IP core.
|
||||||
|
|
||||||
config DAVINCI_SPI
|
|
||||||
bool "Davinci & Keystone SPI driver"
|
|
||||||
depends on ARCH_DAVINCI || ARCH_KEYSTONE
|
|
||||||
help
|
|
||||||
Enable the Davinci SPI driver
|
|
||||||
|
|
||||||
config SH_QSPI
|
config SH_QSPI
|
||||||
bool "Renesas Quad SPI driver"
|
bool "Renesas Quad SPI driver"
|
||||||
help
|
help
|
||||||
@@ -424,12 +429,6 @@ config MXC_SPI
|
|||||||
Enable the MXC SPI controller driver. This driver can be used
|
Enable the MXC SPI controller driver. This driver can be used
|
||||||
on various i.MX SoCs such as i.MX31/35/51/6/7.
|
on various i.MX SoCs such as i.MX31/35/51/6/7.
|
||||||
|
|
||||||
config MXS_SPI
|
|
||||||
bool "MXS SPI Driver"
|
|
||||||
help
|
|
||||||
Enable the MXS SPI controller driver. This driver can be used
|
|
||||||
on the i.MX23 and i.MX28 SoCs.
|
|
||||||
|
|
||||||
config OMAP3_SPI
|
config OMAP3_SPI
|
||||||
bool "McSPI driver for OMAP"
|
bool "McSPI driver for OMAP"
|
||||||
help
|
help
|
||||||
|
@@ -13,7 +13,6 @@ obj-$(CONFIG_TI_QSPI) += ti_qspi.o
|
|||||||
else
|
else
|
||||||
obj-y += spi.o
|
obj-y += spi.o
|
||||||
obj-$(CONFIG_SPI_MEM) += spi-mem-nodm.o
|
obj-$(CONFIG_SPI_MEM) += spi-mem-nodm.o
|
||||||
obj-$(CONFIG_SOFT_SPI) += soft_spi_legacy.o
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-$(CONFIG_ALTERA_SPI) += altera_spi.o
|
obj-$(CONFIG_ALTERA_SPI) += altera_spi.o
|
||||||
|
@@ -9,217 +9,102 @@
|
|||||||
#include <spi.h>
|
#include <spi.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <wait_bit.h>
|
#include <wait_bit.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
#include <asm/arch/clk.h>
|
#include <asm/arch/clk.h>
|
||||||
#include <asm/arch/hardware.h>
|
#include <asm/arch/hardware.h>
|
||||||
#ifdef CONFIG_DM_SPI
|
|
||||||
#include <asm/arch/at91_spi.h>
|
#include <asm/arch/at91_spi.h>
|
||||||
#endif
|
|
||||||
#if CONFIG_IS_ENABLED(DM_GPIO)
|
#if CONFIG_IS_ENABLED(DM_GPIO)
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <linux/bitops.h>
|
||||||
#include "atmel_spi.h"
|
|
||||||
|
|
||||||
#ifndef CONFIG_DM_SPI
|
|
||||||
|
|
||||||
static int spi_has_wdrbt(struct atmel_spi_slave *slave)
|
|
||||||
{
|
|
||||||
unsigned int ver;
|
|
||||||
|
|
||||||
ver = spi_readl(slave, VERSION);
|
|
||||||
|
|
||||||
return (ATMEL_SPI_VERSION_REV(ver) >= 0x210);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
|
||||||
unsigned int max_hz, unsigned int mode)
|
|
||||||
{
|
|
||||||
struct atmel_spi_slave *as;
|
|
||||||
unsigned int scbr;
|
|
||||||
u32 csrx;
|
|
||||||
void *regs;
|
|
||||||
|
|
||||||
if (!spi_cs_is_valid(bus, cs))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
switch (bus) {
|
|
||||||
case 0:
|
|
||||||
regs = (void *)ATMEL_BASE_SPI0;
|
|
||||||
break;
|
|
||||||
#ifdef ATMEL_BASE_SPI1
|
|
||||||
case 1:
|
|
||||||
regs = (void *)ATMEL_BASE_SPI1;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef ATMEL_BASE_SPI2
|
|
||||||
case 2:
|
|
||||||
regs = (void *)ATMEL_BASE_SPI2;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef ATMEL_BASE_SPI3
|
|
||||||
case 3:
|
|
||||||
regs = (void *)ATMEL_BASE_SPI3;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
scbr = (get_spi_clk_rate(bus) + max_hz - 1) / max_hz;
|
|
||||||
if (scbr > ATMEL_SPI_CSRx_SCBR_MAX)
|
|
||||||
/* Too low max SCK rate */
|
|
||||||
return NULL;
|
|
||||||
if (scbr < 1)
|
|
||||||
scbr = 1;
|
|
||||||
|
|
||||||
csrx = ATMEL_SPI_CSRx_SCBR(scbr);
|
|
||||||
csrx |= ATMEL_SPI_CSRx_BITS(ATMEL_SPI_BITS_8);
|
|
||||||
if (!(mode & SPI_CPHA))
|
|
||||||
csrx |= ATMEL_SPI_CSRx_NCPHA;
|
|
||||||
if (mode & SPI_CPOL)
|
|
||||||
csrx |= ATMEL_SPI_CSRx_CPOL;
|
|
||||||
|
|
||||||
as = spi_alloc_slave(struct atmel_spi_slave, bus, cs);
|
|
||||||
if (!as)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
as->regs = regs;
|
|
||||||
as->mr = ATMEL_SPI_MR_MSTR | ATMEL_SPI_MR_MODFDIS
|
|
||||||
| ATMEL_SPI_MR_PCS(~(1 << cs) & 0xf);
|
|
||||||
if (spi_has_wdrbt(as))
|
|
||||||
as->mr |= ATMEL_SPI_MR_WDRBT;
|
|
||||||
|
|
||||||
spi_writel(as, CSR(cs), csrx);
|
|
||||||
|
|
||||||
return &as->slave;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_free_slave(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct atmel_spi_slave *as = to_atmel_spi(slave);
|
|
||||||
|
|
||||||
free(as);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_claim_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct atmel_spi_slave *as = to_atmel_spi(slave);
|
|
||||||
|
|
||||||
/* Enable the SPI hardware */
|
|
||||||
spi_writel(as, CR, ATMEL_SPI_CR_SPIEN);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Select the slave. This should set SCK to the correct
|
* Register definitions for the Atmel AT32/AT91 SPI Controller
|
||||||
* initial state, etc.
|
|
||||||
*/
|
*/
|
||||||
spi_writel(as, MR, as->mr);
|
/* Register offsets */
|
||||||
|
#define ATMEL_SPI_CR 0x0000
|
||||||
|
#define ATMEL_SPI_MR 0x0004
|
||||||
|
#define ATMEL_SPI_RDR 0x0008
|
||||||
|
#define ATMEL_SPI_TDR 0x000c
|
||||||
|
#define ATMEL_SPI_SR 0x0010
|
||||||
|
#define ATMEL_SPI_IER 0x0014
|
||||||
|
#define ATMEL_SPI_IDR 0x0018
|
||||||
|
#define ATMEL_SPI_IMR 0x001c
|
||||||
|
#define ATMEL_SPI_CSR(x) (0x0030 + 4 * (x))
|
||||||
|
#define ATMEL_SPI_VERSION 0x00fc
|
||||||
|
|
||||||
return 0;
|
/* Bits in CR */
|
||||||
}
|
#define ATMEL_SPI_CR_SPIEN BIT(0)
|
||||||
|
#define ATMEL_SPI_CR_SPIDIS BIT(1)
|
||||||
|
#define ATMEL_SPI_CR_SWRST BIT(7)
|
||||||
|
#define ATMEL_SPI_CR_LASTXFER BIT(24)
|
||||||
|
|
||||||
void spi_release_bus(struct spi_slave *slave)
|
/* Bits in MR */
|
||||||
{
|
#define ATMEL_SPI_MR_MSTR BIT(0)
|
||||||
struct atmel_spi_slave *as = to_atmel_spi(slave);
|
#define ATMEL_SPI_MR_PS BIT(1)
|
||||||
|
#define ATMEL_SPI_MR_PCSDEC BIT(2)
|
||||||
|
#define ATMEL_SPI_MR_FDIV BIT(3)
|
||||||
|
#define ATMEL_SPI_MR_MODFDIS BIT(4)
|
||||||
|
#define ATMEL_SPI_MR_WDRBT BIT(5)
|
||||||
|
#define ATMEL_SPI_MR_LLB BIT(7)
|
||||||
|
#define ATMEL_SPI_MR_PCS(x) (((x) & 15) << 16)
|
||||||
|
#define ATMEL_SPI_MR_DLYBCS(x) ((x) << 24)
|
||||||
|
|
||||||
/* Disable the SPI hardware */
|
/* Bits in RDR */
|
||||||
spi_writel(as, CR, ATMEL_SPI_CR_SPIDIS);
|
#define ATMEL_SPI_RDR_RD(x) (x)
|
||||||
}
|
#define ATMEL_SPI_RDR_PCS(x) ((x) << 16)
|
||||||
|
|
||||||
int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
|
/* Bits in TDR */
|
||||||
const void *dout, void *din, unsigned long flags)
|
#define ATMEL_SPI_TDR_TD(x) (x)
|
||||||
{
|
#define ATMEL_SPI_TDR_PCS(x) ((x) << 16)
|
||||||
struct atmel_spi_slave *as = to_atmel_spi(slave);
|
#define ATMEL_SPI_TDR_LASTXFER BIT(24)
|
||||||
unsigned int len_tx;
|
|
||||||
unsigned int len_rx;
|
|
||||||
unsigned int len;
|
|
||||||
u32 status;
|
|
||||||
const u8 *txp = dout;
|
|
||||||
u8 *rxp = din;
|
|
||||||
u8 value;
|
|
||||||
|
|
||||||
if (bitlen == 0)
|
/* Bits in SR/IER/IDR/IMR */
|
||||||
/* Finish any previously submitted transfers */
|
#define ATMEL_SPI_SR_RDRF BIT(0)
|
||||||
goto out;
|
#define ATMEL_SPI_SR_TDRE BIT(1)
|
||||||
|
#define ATMEL_SPI_SR_MODF BIT(2)
|
||||||
|
#define ATMEL_SPI_SR_OVRES BIT(3)
|
||||||
|
#define ATMEL_SPI_SR_ENDRX BIT(4)
|
||||||
|
#define ATMEL_SPI_SR_ENDTX BIT(5)
|
||||||
|
#define ATMEL_SPI_SR_RXBUFF BIT(6)
|
||||||
|
#define ATMEL_SPI_SR_TXBUFE BIT(7)
|
||||||
|
#define ATMEL_SPI_SR_NSSR BIT(8)
|
||||||
|
#define ATMEL_SPI_SR_TXEMPTY BIT(9)
|
||||||
|
#define ATMEL_SPI_SR_SPIENS BIT(16)
|
||||||
|
|
||||||
/*
|
/* Bits in CSRx */
|
||||||
* TODO: The controller can do non-multiple-of-8 bit
|
#define ATMEL_SPI_CSRx_CPOL BIT(0)
|
||||||
* transfers, but this driver currently doesn't support it.
|
#define ATMEL_SPI_CSRx_NCPHA BIT(1)
|
||||||
*
|
#define ATMEL_SPI_CSRx_CSAAT BIT(3)
|
||||||
* It's also not clear how such transfers are supposed to be
|
#define ATMEL_SPI_CSRx_BITS(x) ((x) << 4)
|
||||||
* represented as a stream of bytes...this is a limitation of
|
#define ATMEL_SPI_CSRx_SCBR(x) ((x) << 8)
|
||||||
* the current SPI interface.
|
#define ATMEL_SPI_CSRx_SCBR_MAX GENMASK(7, 0)
|
||||||
*/
|
#define ATMEL_SPI_CSRx_DLYBS(x) ((x) << 16)
|
||||||
if (bitlen % 8) {
|
#define ATMEL_SPI_CSRx_DLYBCT(x) ((x) << 24)
|
||||||
/* Errors always terminate an ongoing transfer */
|
|
||||||
flags |= SPI_XFER_END;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
len = bitlen / 8;
|
/* Bits in VERSION */
|
||||||
|
#define ATMEL_SPI_VERSION_REV(x) ((x) & 0xfff)
|
||||||
|
#define ATMEL_SPI_VERSION_MFN(x) ((x) << 16)
|
||||||
|
|
||||||
/*
|
/* Constants for CSRx:BITS */
|
||||||
* The controller can do automatic CS control, but it is
|
#define ATMEL_SPI_BITS_8 0
|
||||||
* somewhat quirky, and it doesn't really buy us much anyway
|
#define ATMEL_SPI_BITS_9 1
|
||||||
* in the context of U-Boot.
|
#define ATMEL_SPI_BITS_10 2
|
||||||
*/
|
#define ATMEL_SPI_BITS_11 3
|
||||||
if (flags & SPI_XFER_BEGIN) {
|
#define ATMEL_SPI_BITS_12 4
|
||||||
spi_cs_activate(slave);
|
#define ATMEL_SPI_BITS_13 5
|
||||||
/*
|
#define ATMEL_SPI_BITS_14 6
|
||||||
* sometimes the RDR is not empty when we get here,
|
#define ATMEL_SPI_BITS_15 7
|
||||||
* in theory that should not happen, but it DOES happen.
|
#define ATMEL_SPI_BITS_16 8
|
||||||
* Read it here to be on the safe side.
|
|
||||||
* That also clears the OVRES flag. Required if the
|
|
||||||
* following loop exits due to OVRES!
|
|
||||||
*/
|
|
||||||
spi_readl(as, RDR);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (len_tx = 0, len_rx = 0; len_rx < len; ) {
|
|
||||||
status = spi_readl(as, SR);
|
|
||||||
|
|
||||||
if (status & ATMEL_SPI_SR_OVRES)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (len_tx < len && (status & ATMEL_SPI_SR_TDRE)) {
|
|
||||||
if (txp)
|
|
||||||
value = *txp++;
|
|
||||||
else
|
|
||||||
value = 0;
|
|
||||||
spi_writel(as, TDR, value);
|
|
||||||
len_tx++;
|
|
||||||
}
|
|
||||||
if (status & ATMEL_SPI_SR_RDRF) {
|
|
||||||
value = spi_readl(as, RDR);
|
|
||||||
if (rxp)
|
|
||||||
*rxp++ = value;
|
|
||||||
len_rx++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
if (flags & SPI_XFER_END) {
|
|
||||||
/*
|
|
||||||
* Wait until the transfer is completely done before
|
|
||||||
* we deactivate CS.
|
|
||||||
*/
|
|
||||||
do {
|
|
||||||
status = spi_readl(as, SR);
|
|
||||||
} while (!(status & ATMEL_SPI_SR_TXEMPTY));
|
|
||||||
|
|
||||||
spi_cs_deactivate(slave);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define MAX_CS_COUNT 4
|
#define MAX_CS_COUNT 4
|
||||||
|
|
||||||
|
/* Register access macros */
|
||||||
|
#define spi_readl(as, reg) \
|
||||||
|
readl(as->regs + ATMEL_SPI_##reg)
|
||||||
|
#define spi_writel(as, reg, value) \
|
||||||
|
writel(value, as->regs + ATMEL_SPI_##reg)
|
||||||
|
|
||||||
struct atmel_spi_platdata {
|
struct atmel_spi_platdata {
|
||||||
struct at91_spi *regs;
|
struct at91_spi *regs;
|
||||||
};
|
};
|
||||||
@@ -507,4 +392,3 @@ U_BOOT_DRIVER(atmel_spi) = {
|
|||||||
.priv_auto_alloc_size = sizeof(struct atmel_spi_priv),
|
.priv_auto_alloc_size = sizeof(struct atmel_spi_priv),
|
||||||
.probe = atmel_spi_probe,
|
.probe = atmel_spi_probe,
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
@@ -79,23 +79,8 @@
|
|||||||
#define ATMEL_SPI_BITS_15 7
|
#define ATMEL_SPI_BITS_15 7
|
||||||
#define ATMEL_SPI_BITS_16 8
|
#define ATMEL_SPI_BITS_16 8
|
||||||
|
|
||||||
struct atmel_spi_slave {
|
|
||||||
struct spi_slave slave;
|
|
||||||
void *regs;
|
|
||||||
u32 mr;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline struct atmel_spi_slave *to_atmel_spi(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
return container_of(slave, struct atmel_spi_slave, slave);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Register access macros */
|
/* Register access macros */
|
||||||
#define spi_readl(as, reg) \
|
#define spi_readl(as, reg) \
|
||||||
readl(as->regs + ATMEL_SPI_##reg)
|
readl(as->regs + ATMEL_SPI_##reg)
|
||||||
#define spi_writel(as, reg, value) \
|
#define spi_writel(as, reg, value) \
|
||||||
writel(value, as->regs + ATMEL_SPI_##reg)
|
writel(value, as->regs + ATMEL_SPI_##reg)
|
||||||
|
|
||||||
#if !defined(CONFIG_SYS_SPI_WRITE_TOUT)
|
|
||||||
#define CONFIG_SYS_SPI_WRITE_TOUT (5 * CONFIG_SYS_HZ)
|
|
||||||
#endif
|
|
||||||
|
@@ -55,41 +55,6 @@
|
|||||||
/* SPIDEF */
|
/* SPIDEF */
|
||||||
#define SPIDEF_CSDEF0_MASK BIT(0)
|
#define SPIDEF_CSDEF0_MASK BIT(0)
|
||||||
|
|
||||||
#ifndef CONFIG_DM_SPI
|
|
||||||
#define SPI0_BUS 0
|
|
||||||
#define SPI0_BASE CONFIG_SYS_SPI_BASE
|
|
||||||
/*
|
|
||||||
* Define default SPI0_NUM_CS as 1 for existing platforms that uses this
|
|
||||||
* driver. Platform can configure number of CS using CONFIG_SYS_SPI0_NUM_CS
|
|
||||||
* if more than one CS is supported and by defining CONFIG_SYS_SPI0.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_SYS_SPI0
|
|
||||||
#define SPI0_NUM_CS 1
|
|
||||||
#else
|
|
||||||
#define SPI0_NUM_CS CONFIG_SYS_SPI0_NUM_CS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* define CONFIG_SYS_SPI1 when platform has spi-1 device (bus #1) and
|
|
||||||
* CONFIG_SYS_SPI1_NUM_CS defines number of CS on this bus
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_SYS_SPI1
|
|
||||||
#define SPI1_BUS 1
|
|
||||||
#define SPI1_NUM_CS CONFIG_SYS_SPI1_NUM_CS
|
|
||||||
#define SPI1_BASE CONFIG_SYS_SPI1_BASE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* define CONFIG_SYS_SPI2 when platform has spi-2 device (bus #2) and
|
|
||||||
* CONFIG_SYS_SPI2_NUM_CS defines number of CS on this bus
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_SYS_SPI2
|
|
||||||
#define SPI2_BUS 2
|
|
||||||
#define SPI2_NUM_CS CONFIG_SYS_SPI2_NUM_CS
|
|
||||||
#define SPI2_BASE CONFIG_SYS_SPI2_BASE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
/* davinci spi register set */
|
/* davinci spi register set */
|
||||||
@@ -122,9 +87,6 @@ struct davinci_spi_regs {
|
|||||||
|
|
||||||
/* davinci spi slave */
|
/* davinci spi slave */
|
||||||
struct davinci_spi_slave {
|
struct davinci_spi_slave {
|
||||||
#ifndef CONFIG_DM_SPI
|
|
||||||
struct spi_slave slave;
|
|
||||||
#endif
|
|
||||||
struct davinci_spi_regs *regs;
|
struct davinci_spi_regs *regs;
|
||||||
unsigned int freq; /* current SPI bus frequency */
|
unsigned int freq; /* current SPI bus frequency */
|
||||||
unsigned int mode; /* current SPI mode used */
|
unsigned int mode; /* current SPI mode used */
|
||||||
@@ -346,124 +308,6 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_DM_SPI
|
|
||||||
|
|
||||||
static inline struct davinci_spi_slave *to_davinci_spi(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
return container_of(slave, struct davinci_spi_slave, slave);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_cs_is_valid(unsigned int bus, unsigned int cs)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
switch (bus) {
|
|
||||||
case SPI0_BUS:
|
|
||||||
if (cs < SPI0_NUM_CS)
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_SYS_SPI1
|
|
||||||
case SPI1_BUS:
|
|
||||||
if (cs < SPI1_NUM_CS)
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_SPI2
|
|
||||||
case SPI2_BUS:
|
|
||||||
if (cs < SPI2_NUM_CS)
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
/* Invalid bus number. Do nothing */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_cs_activate(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_cs_deactivate(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
/* do nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
|
||||||
unsigned int max_hz, unsigned int mode)
|
|
||||||
{
|
|
||||||
struct davinci_spi_slave *ds;
|
|
||||||
|
|
||||||
if (!spi_cs_is_valid(bus, cs))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ds = spi_alloc_slave(struct davinci_spi_slave, bus, cs);
|
|
||||||
if (!ds)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
switch (bus) {
|
|
||||||
case SPI0_BUS:
|
|
||||||
ds->regs = (struct davinci_spi_regs *)SPI0_BASE;
|
|
||||||
break;
|
|
||||||
#ifdef CONFIG_SYS_SPI1
|
|
||||||
case SPI1_BUS:
|
|
||||||
ds->regs = (struct davinci_spi_regs *)SPI1_BASE;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_SPI2
|
|
||||||
case SPI2_BUS:
|
|
||||||
ds->regs = (struct davinci_spi_regs *)SPI2_BASE;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default: /* Invalid bus number */
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ds->freq = max_hz;
|
|
||||||
ds->mode = mode;
|
|
||||||
|
|
||||||
return &ds->slave;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_free_slave(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct davinci_spi_slave *ds = to_davinci_spi(slave);
|
|
||||||
|
|
||||||
free(ds);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
|
|
||||||
const void *dout, void *din, unsigned long flags)
|
|
||||||
{
|
|
||||||
struct davinci_spi_slave *ds = to_davinci_spi(slave);
|
|
||||||
|
|
||||||
ds->cur_cs = slave->cs;
|
|
||||||
|
|
||||||
return __davinci_spi_xfer(ds, bitlen, dout, din, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_claim_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct davinci_spi_slave *ds = to_davinci_spi(slave);
|
|
||||||
|
|
||||||
#ifdef CONFIG_SPI_HALF_DUPLEX
|
|
||||||
ds->half_duplex = true;
|
|
||||||
#else
|
|
||||||
ds->half_duplex = false;
|
|
||||||
#endif
|
|
||||||
return __davinci_spi_claim_bus(ds, ds->slave.cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_release_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct davinci_spi_slave *ds = to_davinci_spi(slave);
|
|
||||||
|
|
||||||
__davinci_spi_release_bus(ds);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
static int davinci_spi_set_speed(struct udevice *bus, uint max_hz)
|
static int davinci_spi_set_speed(struct udevice *bus, uint max_hz)
|
||||||
{
|
{
|
||||||
struct davinci_spi_slave *ds = dev_get_priv(bus);
|
struct davinci_spi_slave *ds = dev_get_priv(bus);
|
||||||
@@ -582,4 +426,3 @@ U_BOOT_DRIVER(davinci_spi) = {
|
|||||||
.ops = &davinci_spi_ops,
|
.ops = &davinci_spi_ops,
|
||||||
.priv_auto_alloc_size = sizeof(struct davinci_spi_slave),
|
.priv_auto_alloc_size = sizeof(struct davinci_spi_slave),
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
@@ -100,13 +100,6 @@ struct fsl_dspi_priv {
|
|||||||
struct dspi *regs;
|
struct dspi *regs;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef CONFIG_DM_SPI
|
|
||||||
struct fsl_dspi {
|
|
||||||
struct spi_slave slave;
|
|
||||||
struct fsl_dspi_priv priv;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__weak void cpu_dspi_port_conf(void)
|
__weak void cpu_dspi_port_conf(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -414,131 +407,7 @@ static int fsl_dspi_cfg_speed(struct fsl_dspi_priv *priv, uint speed)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifndef CONFIG_DM_SPI
|
|
||||||
int spi_cs_is_valid(unsigned int bus, unsigned int cs)
|
|
||||||
{
|
|
||||||
if (((cs >= 0) && (cs < 8)) && ((bus >= 0) && (bus < 8)))
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
|
||||||
unsigned int max_hz, unsigned int mode)
|
|
||||||
{
|
|
||||||
struct fsl_dspi *dspi;
|
|
||||||
uint mcr_cfg_val;
|
|
||||||
|
|
||||||
dspi = spi_alloc_slave(struct fsl_dspi, bus, cs);
|
|
||||||
if (!dspi)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
cpu_dspi_port_conf();
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_FSL_DSPI_BE
|
|
||||||
dspi->priv.flags |= DSPI_FLAG_REGMAP_ENDIAN_BIG;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
dspi->priv.regs = (struct dspi *)MMAP_DSPI;
|
|
||||||
|
|
||||||
#ifdef CONFIG_M68K
|
|
||||||
dspi->priv.bus_clk = gd->bus_clk;
|
|
||||||
#else
|
|
||||||
dspi->priv.bus_clk = mxc_get_clock(MXC_DSPI_CLK);
|
|
||||||
#endif
|
|
||||||
dspi->priv.speed_hz = FSL_DSPI_DEFAULT_SCK_FREQ;
|
|
||||||
|
|
||||||
/* default: all CS signals inactive state is high */
|
|
||||||
mcr_cfg_val = DSPI_MCR_MSTR | DSPI_MCR_PCSIS_MASK |
|
|
||||||
DSPI_MCR_CRXF | DSPI_MCR_CTXF;
|
|
||||||
fsl_dspi_init_mcr(&dspi->priv, mcr_cfg_val);
|
|
||||||
|
|
||||||
for (i = 0; i < FSL_DSPI_MAX_CHIPSELECT; i++)
|
|
||||||
dspi->priv.ctar_val[i] = DSPI_CTAR_DEFAULT_VALUE;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR0
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 0)
|
|
||||||
dspi->priv.ctar_val[0] = CONFIG_SYS_DSPI_CTAR0;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR1
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 1)
|
|
||||||
dspi->priv.ctar_val[1] = CONFIG_SYS_DSPI_CTAR1;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR2
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 2)
|
|
||||||
dspi->priv.ctar_val[2] = CONFIG_SYS_DSPI_CTAR2;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR3
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 3)
|
|
||||||
dspi->priv.ctar_val[3] = CONFIG_SYS_DSPI_CTAR3;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR4
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 4)
|
|
||||||
dspi->priv.ctar_val[4] = CONFIG_SYS_DSPI_CTAR4;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR5
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 5)
|
|
||||||
dspi->priv.ctar_val[5] = CONFIG_SYS_DSPI_CTAR5;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR6
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 6)
|
|
||||||
dspi->priv.ctar_val[6] = CONFIG_SYS_DSPI_CTAR6;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SYS_DSPI_CTAR7
|
|
||||||
if (FSL_DSPI_MAX_CHIPSELECT > 7)
|
|
||||||
dspi->priv.ctar_val[7] = CONFIG_SYS_DSPI_CTAR7;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fsl_dspi_cfg_speed(&dspi->priv, max_hz);
|
|
||||||
|
|
||||||
/* configure transfer mode */
|
|
||||||
fsl_dspi_cfg_ctar_mode(&dspi->priv, cs, mode);
|
|
||||||
|
|
||||||
/* configure active state of CSX */
|
|
||||||
fsl_dspi_cfg_cs_active_state(&dspi->priv, cs, mode);
|
|
||||||
|
|
||||||
return &dspi->slave;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_free_slave(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
free(slave);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_claim_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
uint sr_val;
|
|
||||||
struct fsl_dspi *dspi = (struct fsl_dspi *)slave;
|
|
||||||
|
|
||||||
cpu_dspi_claim_bus(slave->bus, slave->cs);
|
|
||||||
|
|
||||||
fsl_dspi_clr_fifo(&dspi->priv);
|
|
||||||
|
|
||||||
/* check module TX and RX status */
|
|
||||||
sr_val = dspi_read32(dspi->priv.flags, &dspi->priv.regs->sr);
|
|
||||||
if ((sr_val & DSPI_SR_TXRXS) != DSPI_SR_TXRXS) {
|
|
||||||
debug("DSPI RX/TX not ready!\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_release_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct fsl_dspi *dspi = (struct fsl_dspi *)slave;
|
|
||||||
|
|
||||||
dspi_halt(&dspi->priv, 1);
|
|
||||||
cpu_dspi_release_bus(slave->bus.slave->cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
|
|
||||||
void *din, unsigned long flags)
|
|
||||||
{
|
|
||||||
struct fsl_dspi *dspi = (struct fsl_dspi *)slave;
|
|
||||||
return dspi_xfer(&dspi->priv, slave->cs, bitlen, dout, din, flags);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static int fsl_dspi_child_pre_probe(struct udevice *dev)
|
static int fsl_dspi_child_pre_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
|
struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
|
||||||
@@ -745,4 +614,3 @@ U_BOOT_DRIVER(fsl_dspi) = {
|
|||||||
.child_pre_probe = fsl_dspi_child_pre_probe,
|
.child_pre_probe = fsl_dspi_child_pre_probe,
|
||||||
.bind = fsl_dspi_bind,
|
.bind = fsl_dspi_bind,
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
@@ -13,7 +13,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <dt-structs.h>
|
||||||
#include <cpu_func.h>
|
#include <cpu_func.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <memalign.h>
|
#include <memalign.h>
|
||||||
@@ -34,34 +37,9 @@
|
|||||||
|
|
||||||
#define MXSSSP_SMALL_TRANSFER 512
|
#define MXSSSP_SMALL_TRANSFER 512
|
||||||
|
|
||||||
static void mxs_spi_start_xfer(struct mxs_ssp_regs *ssp_regs)
|
/* Base numbers of i.MX2[38] clk for ssp0 IP block */
|
||||||
{
|
#define MXS_SSP_IMX23_CLKID_SSP0 33
|
||||||
writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_set);
|
#define MXS_SSP_IMX28_CLKID_SSP0 46
|
||||||
writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_clr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mxs_spi_end_xfer(struct mxs_ssp_regs *ssp_regs)
|
|
||||||
{
|
|
||||||
writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_clr);
|
|
||||||
writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_set);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
struct mxs_spi_slave {
|
|
||||||
struct spi_slave slave;
|
|
||||||
uint32_t max_khz;
|
|
||||||
uint32_t mode;
|
|
||||||
struct mxs_ssp_regs *regs;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline struct mxs_spi_slave *to_mxs_slave(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
return container_of(slave, struct mxs_spi_slave, slave);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#include <dm.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <dt-structs.h>
|
|
||||||
|
|
||||||
#ifdef CONFIG_MX28
|
#ifdef CONFIG_MX28
|
||||||
#define dtd_fsl_imx_spi dtd_fsl_imx28_spi
|
#define dtd_fsl_imx_spi dtd_fsl_imx28_spi
|
||||||
@@ -87,20 +65,24 @@ struct mxs_spi_priv {
|
|||||||
unsigned int clk_id;
|
unsigned int clk_id;
|
||||||
unsigned int mode;
|
unsigned int mode;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
static void mxs_spi_start_xfer(struct mxs_ssp_regs *ssp_regs)
|
||||||
static int mxs_spi_xfer_pio(struct mxs_spi_slave *slave,
|
|
||||||
char *data, int length, int write, unsigned long flags)
|
|
||||||
{
|
{
|
||||||
struct mxs_ssp_regs *ssp_regs = slave->regs;
|
writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_set);
|
||||||
#else
|
writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_clr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mxs_spi_end_xfer(struct mxs_ssp_regs *ssp_regs)
|
||||||
|
{
|
||||||
|
writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_clr);
|
||||||
|
writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_set);
|
||||||
|
}
|
||||||
|
|
||||||
static int mxs_spi_xfer_pio(struct mxs_spi_priv *priv,
|
static int mxs_spi_xfer_pio(struct mxs_spi_priv *priv,
|
||||||
char *data, int length, int write,
|
char *data, int length, int write,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{
|
{
|
||||||
struct mxs_ssp_regs *ssp_regs = priv->regs;
|
struct mxs_ssp_regs *ssp_regs = priv->regs;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (flags & SPI_XFER_BEGIN)
|
if (flags & SPI_XFER_BEGIN)
|
||||||
mxs_spi_start_xfer(ssp_regs);
|
mxs_spi_start_xfer(ssp_regs);
|
||||||
@@ -156,17 +138,10 @@ static int mxs_spi_xfer_pio(struct mxs_spi_priv *priv,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
static int mxs_spi_xfer_dma(struct mxs_spi_slave *slave,
|
|
||||||
char *data, int length, int write, unsigned long flags)
|
|
||||||
{
|
|
||||||
struct mxs_ssp_regs *ssp_regs = slave->regs;
|
|
||||||
#else
|
|
||||||
static int mxs_spi_xfer_dma(struct mxs_spi_priv *priv,
|
static int mxs_spi_xfer_dma(struct mxs_spi_priv *priv,
|
||||||
char *data, int length, int write,
|
char *data, int length, int write,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{ struct mxs_ssp_regs *ssp_regs = priv->regs;
|
{ struct mxs_ssp_regs *ssp_regs = priv->regs;
|
||||||
#endif
|
|
||||||
const int xfer_max_sz = 0xff00;
|
const int xfer_max_sz = 0xff00;
|
||||||
const int desc_count = DIV_ROUND_UP(length, xfer_max_sz) + 1;
|
const int desc_count = DIV_ROUND_UP(length, xfer_max_sz) + 1;
|
||||||
struct mxs_dma_desc *dp;
|
struct mxs_dma_desc *dp;
|
||||||
@@ -207,11 +182,7 @@ static int mxs_spi_xfer_dma(struct mxs_spi_priv *priv,
|
|||||||
/* Invalidate the area, so no writeback into the RAM races with DMA */
|
/* Invalidate the area, so no writeback into the RAM races with DMA */
|
||||||
invalidate_dcache_range(dstart, dstart + cache_data_count);
|
invalidate_dcache_range(dstart, dstart + cache_data_count);
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
dmach = MXS_DMA_CHANNEL_AHB_APBH_SSP0 + slave->slave.bus;
|
|
||||||
#else
|
|
||||||
dmach = priv->dma_channel;
|
dmach = priv->dma_channel;
|
||||||
#endif
|
|
||||||
|
|
||||||
dp = desc;
|
dp = desc;
|
||||||
while (length) {
|
while (length) {
|
||||||
@@ -288,20 +259,12 @@ static int mxs_spi_xfer_dma(struct mxs_spi_priv *priv,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
|
|
||||||
const void *dout, void *din, unsigned long flags)
|
|
||||||
{
|
|
||||||
struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
|
|
||||||
struct mxs_ssp_regs *ssp_regs = mxs_slave->regs;
|
|
||||||
#else
|
|
||||||
int mxs_spi_xfer(struct udevice *dev, unsigned int bitlen,
|
int mxs_spi_xfer(struct udevice *dev, unsigned int bitlen,
|
||||||
const void *dout, void *din, unsigned long flags)
|
const void *dout, void *din, unsigned long flags)
|
||||||
{
|
{
|
||||||
struct udevice *bus = dev_get_parent(dev);
|
struct udevice *bus = dev_get_parent(dev);
|
||||||
struct mxs_spi_priv *priv = dev_get_priv(bus);
|
struct mxs_spi_priv *priv = dev_get_priv(bus);
|
||||||
struct mxs_ssp_regs *ssp_regs = priv->regs;
|
struct mxs_ssp_regs *ssp_regs = priv->regs;
|
||||||
#endif
|
|
||||||
int len = bitlen / 8;
|
int len = bitlen / 8;
|
||||||
char dummy;
|
char dummy;
|
||||||
int write = 0;
|
int write = 0;
|
||||||
@@ -345,99 +308,13 @@ int mxs_spi_xfer(struct udevice *dev, unsigned int bitlen,
|
|||||||
|
|
||||||
if (!dma || (len < MXSSSP_SMALL_TRANSFER)) {
|
if (!dma || (len < MXSSSP_SMALL_TRANSFER)) {
|
||||||
writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_clr);
|
writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_clr);
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
return mxs_spi_xfer_pio(mxs_slave, data, len, write, flags);
|
|
||||||
#else
|
|
||||||
return mxs_spi_xfer_pio(priv, data, len, write, flags);
|
return mxs_spi_xfer_pio(priv, data, len, write, flags);
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_set);
|
writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_set);
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
return mxs_spi_xfer_dma(mxs_slave, data, len, write, flags);
|
|
||||||
#else
|
|
||||||
return mxs_spi_xfer_dma(priv, data, len, write, flags);
|
return mxs_spi_xfer_dma(priv, data, len, write, flags);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(DM_SPI)
|
|
||||||
int spi_cs_is_valid(unsigned int bus, unsigned int cs)
|
|
||||||
{
|
|
||||||
/* MXS SPI: 4 ports and 3 chip selects maximum */
|
|
||||||
if (!mxs_ssp_bus_id_valid(bus) || cs > 2)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
|
||||||
unsigned int max_hz, unsigned int mode)
|
|
||||||
{
|
|
||||||
struct mxs_spi_slave *mxs_slave;
|
|
||||||
|
|
||||||
if (!spi_cs_is_valid(bus, cs)) {
|
|
||||||
printf("mxs_spi: invalid bus %d / chip select %d\n", bus, cs);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mxs_slave = spi_alloc_slave(struct mxs_spi_slave, bus, cs);
|
|
||||||
if (!mxs_slave)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (mxs_dma_init_channel(MXS_DMA_CHANNEL_AHB_APBH_SSP0 + bus))
|
|
||||||
goto err_init;
|
|
||||||
|
|
||||||
mxs_slave->max_khz = max_hz / 1000;
|
|
||||||
mxs_slave->mode = mode;
|
|
||||||
mxs_slave->regs = mxs_ssp_regs_by_bus(bus);
|
|
||||||
|
|
||||||
return &mxs_slave->slave;
|
|
||||||
|
|
||||||
err_init:
|
|
||||||
free(mxs_slave);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_free_slave(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
|
|
||||||
|
|
||||||
free(mxs_slave);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_claim_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
|
|
||||||
struct mxs_ssp_regs *ssp_regs = mxs_slave->regs;
|
|
||||||
u32 reg = 0;
|
|
||||||
|
|
||||||
mxs_reset_block(&ssp_regs->hw_ssp_ctrl0_reg);
|
|
||||||
|
|
||||||
writel((slave->cs << MXS_SSP_CHIPSELECT_SHIFT) |
|
|
||||||
SSP_CTRL0_BUS_WIDTH_ONE_BIT,
|
|
||||||
&ssp_regs->hw_ssp_ctrl0);
|
|
||||||
|
|
||||||
reg = SSP_CTRL1_SSP_MODE_SPI | SSP_CTRL1_WORD_LENGTH_EIGHT_BITS;
|
|
||||||
reg |= (mxs_slave->mode & SPI_CPOL) ? SSP_CTRL1_POLARITY : 0;
|
|
||||||
reg |= (mxs_slave->mode & SPI_CPHA) ? SSP_CTRL1_PHASE : 0;
|
|
||||||
writel(reg, &ssp_regs->hw_ssp_ctrl1);
|
|
||||||
|
|
||||||
writel(0, &ssp_regs->hw_ssp_cmd0);
|
|
||||||
|
|
||||||
mxs_set_ssp_busclock(slave->bus, mxs_slave->max_khz);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_release_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* CONFIG_DM_SPI */
|
|
||||||
/* Base numbers of i.MX2[38] clk for ssp0 IP block */
|
|
||||||
#define MXS_SSP_IMX23_CLKID_SSP0 33
|
|
||||||
#define MXS_SSP_IMX28_CLKID_SSP0 46
|
|
||||||
|
|
||||||
static int mxs_spi_probe(struct udevice *bus)
|
static int mxs_spi_probe(struct udevice *bus)
|
||||||
{
|
{
|
||||||
struct mxs_spi_platdata *plat = dev_get_platdata(bus);
|
struct mxs_spi_platdata *plat = dev_get_platdata(bus);
|
||||||
@@ -625,4 +502,3 @@ U_BOOT_DRIVER(mxs_spi) = {
|
|||||||
.priv_auto_alloc_size = sizeof(struct mxs_spi_priv),
|
.priv_auto_alloc_size = sizeof(struct mxs_spi_priv),
|
||||||
.probe = mxs_spi_probe,
|
.probe = mxs_spi_probe,
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
@@ -1,168 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
/*
|
|
||||||
* (C) Copyright 2002
|
|
||||||
* Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com.
|
|
||||||
*
|
|
||||||
* Influenced by code from:
|
|
||||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <spi.h>
|
|
||||||
|
|
||||||
#include <malloc.h>
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
|
||||||
* Definitions
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef DEBUG_SPI
|
|
||||||
#define PRINTD(fmt,args...) printf (fmt ,##args)
|
|
||||||
#else
|
|
||||||
#define PRINTD(fmt,args...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct soft_spi_slave {
|
|
||||||
struct spi_slave slave;
|
|
||||||
unsigned int mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline struct soft_spi_slave *to_soft_spi(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
return container_of(slave, struct soft_spi_slave, slave);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*=====================================================================*/
|
|
||||||
/* Public Functions */
|
|
||||||
/*=====================================================================*/
|
|
||||||
|
|
||||||
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
|
||||||
unsigned int max_hz, unsigned int mode)
|
|
||||||
{
|
|
||||||
struct soft_spi_slave *ss;
|
|
||||||
|
|
||||||
if (!spi_cs_is_valid(bus, cs))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ss = spi_alloc_slave(struct soft_spi_slave, bus, cs);
|
|
||||||
if (!ss)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ss->mode = mode;
|
|
||||||
|
|
||||||
/* TODO: Use max_hz to limit the SCK rate */
|
|
||||||
|
|
||||||
return &ss->slave;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_free_slave(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
struct soft_spi_slave *ss = to_soft_spi(slave);
|
|
||||||
|
|
||||||
free(ss);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spi_claim_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_SYS_IMMR
|
|
||||||
volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
|
|
||||||
#endif
|
|
||||||
struct soft_spi_slave *ss = to_soft_spi(slave);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the SPI clock is in idle state as defined for
|
|
||||||
* this slave.
|
|
||||||
*/
|
|
||||||
if (ss->mode & SPI_CPOL)
|
|
||||||
SPI_SCL(1);
|
|
||||||
else
|
|
||||||
SPI_SCL(0);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void spi_release_bus(struct spi_slave *slave)
|
|
||||||
{
|
|
||||||
/* Nothing to do */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
|
||||||
* SPI transfer
|
|
||||||
*
|
|
||||||
* This writes "bitlen" bits out the SPI MOSI port and simultaneously clocks
|
|
||||||
* "bitlen" bits in the SPI MISO port. That's just the way SPI works.
|
|
||||||
*
|
|
||||||
* The source of the outgoing bits is the "dout" parameter and the
|
|
||||||
* destination of the input bits is the "din" parameter. Note that "dout"
|
|
||||||
* and "din" can point to the same memory location, in which case the
|
|
||||||
* input data overwrites the output data (since both are buffered by
|
|
||||||
* temporary variables, this is OK).
|
|
||||||
*/
|
|
||||||
int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
|
|
||||||
const void *dout, void *din, unsigned long flags)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_SYS_IMMR
|
|
||||||
volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
|
|
||||||
#endif
|
|
||||||
struct soft_spi_slave *ss = to_soft_spi(slave);
|
|
||||||
uchar tmpdin = 0;
|
|
||||||
uchar tmpdout = 0;
|
|
||||||
const u8 *txd = dout;
|
|
||||||
u8 *rxd = din;
|
|
||||||
int cpol = ss->mode & SPI_CPOL;
|
|
||||||
int cpha = ss->mode & SPI_CPHA;
|
|
||||||
unsigned int j;
|
|
||||||
|
|
||||||
PRINTD("spi_xfer: slave %u:%u dout %08X din %08X bitlen %u\n",
|
|
||||||
slave->bus, slave->cs, *(uint *)txd, *(uint *)rxd, bitlen);
|
|
||||||
|
|
||||||
if (flags & SPI_XFER_BEGIN)
|
|
||||||
spi_cs_activate(slave);
|
|
||||||
|
|
||||||
for(j = 0; j < bitlen; j++) {
|
|
||||||
/*
|
|
||||||
* Check if it is time to work on a new byte.
|
|
||||||
*/
|
|
||||||
if ((j % 8) == 0) {
|
|
||||||
if (txd)
|
|
||||||
tmpdout = *txd++;
|
|
||||||
else
|
|
||||||
tmpdout = 0;
|
|
||||||
if(j != 0) {
|
|
||||||
if (rxd)
|
|
||||||
*rxd++ = tmpdin;
|
|
||||||
}
|
|
||||||
tmpdin = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cpha)
|
|
||||||
SPI_SCL(!cpol);
|
|
||||||
SPI_SDA(tmpdout & 0x80);
|
|
||||||
SPI_DELAY;
|
|
||||||
if (cpha)
|
|
||||||
SPI_SCL(!cpol);
|
|
||||||
else
|
|
||||||
SPI_SCL(cpol);
|
|
||||||
tmpdin <<= 1;
|
|
||||||
tmpdin |= SPI_READ;
|
|
||||||
tmpdout <<= 1;
|
|
||||||
SPI_DELAY;
|
|
||||||
if (cpha)
|
|
||||||
SPI_SCL(cpol);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* If the number of bits isn't a multiple of 8, shift the last
|
|
||||||
* bits over to left-justify them. Then store the last byte
|
|
||||||
* read in.
|
|
||||||
*/
|
|
||||||
if (rxd) {
|
|
||||||
if ((bitlen % 8) != 0)
|
|
||||||
tmpdin <<= 8 - (bitlen % 8);
|
|
||||||
*rxd++ = tmpdin;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & SPI_XFER_END)
|
|
||||||
spi_cs_deactivate(slave);
|
|
||||||
|
|
||||||
return(0);
|
|
||||||
}
|
|
@@ -1,62 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
||||||
/*
|
|
||||||
* (C) Copyright 2008-2010
|
|
||||||
* Gražvydas Ignotas <notasas@gmail.com>
|
|
||||||
*
|
|
||||||
* Configuration settings for the OMAP3 Pandora.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
|
||||||
#define __CONFIG_H
|
|
||||||
|
|
||||||
/* override base for compatibility with MLO the device ships with */
|
|
||||||
|
|
||||||
#include <configs/ti_omap3_common.h>
|
|
||||||
|
|
||||||
#define CONFIG_REVISION_TAG 1
|
|
||||||
|
|
||||||
#define CONFIG_SYS_DEVICE_NULLDEV 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Board NAND Info.
|
|
||||||
*/
|
|
||||||
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_SW
|
|
||||||
#define CONFIG_SYS_NAND_PAGE_SIZE 2048
|
|
||||||
#define CONFIG_SYS_NAND_OOBSIZE 64
|
|
||||||
|
|
||||||
|
|
||||||
#define CONFIG_BOOTCOMMAND \
|
|
||||||
"run distro_bootcmd; " \
|
|
||||||
"setenv bootargs ${bootargs_ubi}; " \
|
|
||||||
"if mmc rescan && load mmc 0:1 ${loadaddr} autoboot.scr; then " \
|
|
||||||
"source ${loadaddr}; " \
|
|
||||||
"fi; " \
|
|
||||||
"ubi part boot && ubifsmount ubi:boot && " \
|
|
||||||
"ubifsload ${loadaddr} uImage && bootm ${loadaddr}"
|
|
||||||
|
|
||||||
#define BOOT_TARGET_DEVICES(func) \
|
|
||||||
func(MMC, mmc, 0) \
|
|
||||||
|
|
||||||
#include <config_distro_bootcmd.h>
|
|
||||||
|
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
|
||||||
DEFAULT_LINUX_BOOT_ENV \
|
|
||||||
"usbtty=cdc_acm\0" \
|
|
||||||
"bootargs_ubi=ubi.mtd=4 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs " \
|
|
||||||
"rw rootflags=bulk_read vram=6272K omapfb.vram=0:3000K\0" \
|
|
||||||
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
|
|
||||||
BOOTENV \
|
|
||||||
|
|
||||||
/* memtest works on */
|
|
||||||
|
|
||||||
#if defined(CONFIG_MTD_RAW_NAND)
|
|
||||||
#define CONFIG_SYS_FLASH_BASE NAND_BASE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Monitor at start of flash */
|
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
|
||||||
|
|
||||||
|
|
||||||
#define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */
|
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
|
@@ -1,128 +0,0 @@
|
|||||||
/*
|
|
||||||
* pcm051.h
|
|
||||||
*
|
|
||||||
* Phytec phyCORE-AM335x (pcm051) boards information header
|
|
||||||
*
|
|
||||||
* Copyright (C) 2013 Lemonage Software GmbH
|
|
||||||
* Author Lars Poeschel <poeschel@lemonage.de>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation version 2.
|
|
||||||
*
|
|
||||||
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
|
|
||||||
* kind, whether express or implied; without even the implied warranty
|
|
||||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CONFIG_PCM051_H
|
|
||||||
#define __CONFIG_PCM051_H
|
|
||||||
|
|
||||||
#include <configs/ti_am335x_common.h>
|
|
||||||
|
|
||||||
#define CONFIG_MACH_TYPE MACH_TYPE_PCM051
|
|
||||||
|
|
||||||
/* set to negative value for no autoboot */
|
|
||||||
#define BOOTENV_DEV_LEGACY_MMC(devtypeu, devtypel, instance) \
|
|
||||||
"bootcmd_" #devtypel #instance "=" \
|
|
||||||
"setenv mmcdev " #instance"; "\
|
|
||||||
"setenv bootpart " #instance":2 ; "\
|
|
||||||
"run mmcboot\0"
|
|
||||||
|
|
||||||
#define BOOTENV_DEV_NAME_LEGACY_MMC(devtypeu, devtypel, instance) \
|
|
||||||
#devtypel #instance " "
|
|
||||||
|
|
||||||
#define BOOTENV_DEV_NAND(devtypeu, devtypel, instance) \
|
|
||||||
"bootcmd_" #devtypel "=" \
|
|
||||||
"run nandboot\0"
|
|
||||||
|
|
||||||
#define BOOTENV_DEV_NAME_NAND(devtypeu, devtypel, instance) \
|
|
||||||
#devtypel #instance " "
|
|
||||||
|
|
||||||
#define BOOT_TARGET_DEVICES(func) \
|
|
||||||
func(MMC, mmc, 0) \
|
|
||||||
func(LEGACY_MMC, legacy_mmc, 0) \
|
|
||||||
func(MMC, mmc, 1) \
|
|
||||||
func(LEGACY_MMC, legacy_mmc, 1) \
|
|
||||||
func(NAND, nand, 0)
|
|
||||||
|
|
||||||
#define CONFIG_BOOTCOMMAND \
|
|
||||||
"run distro_bootcmd"
|
|
||||||
|
|
||||||
#include <config_distro_bootcmd.h>
|
|
||||||
|
|
||||||
#include <environment/ti/dfu.h>
|
|
||||||
#include <environment/ti/mmc.h>
|
|
||||||
|
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
|
||||||
DEFAULT_LINUX_BOOT_ENV \
|
|
||||||
DEFAULT_MMC_TI_ARGS \
|
|
||||||
"bootfile=uImage\0" \
|
|
||||||
"fdtfile=am335x-wega-rdk.dtb\0" \
|
|
||||||
"console=ttyO0,115200n8\0" \
|
|
||||||
"optargs=\0" \
|
|
||||||
"ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M\0" \
|
|
||||||
"ramrootfstype=ext2\0" \
|
|
||||||
"bootenv=uEnv.txt\0" \
|
|
||||||
"loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr\0" \
|
|
||||||
"bootscript=echo Running bootscript from mmc${mmcdev} ...; " \
|
|
||||||
"source ${loadaddr}\0" \
|
|
||||||
"loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \
|
|
||||||
"importbootenv=echo Importing environment from mmc ...; " \
|
|
||||||
"env import -t $loadaddr $filesize\0" \
|
|
||||||
"ramargs=setenv bootargs console=${console} " \
|
|
||||||
"${optargs} " \
|
|
||||||
"root=${ramroot} " \
|
|
||||||
"rootfstype=${ramrootfstype}\0" \
|
|
||||||
"loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \
|
|
||||||
"loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} ${bootfile}\0" \
|
|
||||||
"loaduimage=ext2load mmc ${mmcdev}:2 ${loadaddr} ${bootfile}\0" \
|
|
||||||
"mmcboot=echo Booting from mmc ...; " \
|
|
||||||
"run args_mmc; " \
|
|
||||||
"bootm ${loadaddr}\0" \
|
|
||||||
"ramboot=echo Booting from ramdisk ...; " \
|
|
||||||
"run ramargs; " \
|
|
||||||
"bootm ${loadaddr}\0" \
|
|
||||||
BOOTENV
|
|
||||||
|
|
||||||
/* Clock Defines */
|
|
||||||
#define V_OSCK 25000000 /* Clock output from T2 */
|
|
||||||
#define V_SCLK (V_OSCK)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* memtest works on 8 MB in DRAM after skipping 32MB from
|
|
||||||
* start addr of ram disk
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* NS16550 Configuration */
|
|
||||||
#define CONFIG_SYS_NS16550_COM1 0x44e09000 /* Base EVM has UART0 */
|
|
||||||
#define CONFIG_SYS_NS16550_COM2 0x48022000 /* UART1 */
|
|
||||||
#define CONFIG_SYS_NS16550_COM3 0x48024000 /* UART2 */
|
|
||||||
#define CONFIG_SYS_NS16550_COM4 0x481a6000 /* UART3 */
|
|
||||||
#define CONFIG_SYS_NS16550_COM5 0x481a8000 /* UART4 */
|
|
||||||
#define CONFIG_SYS_NS16550_COM6 0x481aa000 /* UART5 */
|
|
||||||
|
|
||||||
/* I2C Configuration */
|
|
||||||
#define CONFIG_ENV_EEPROM_IS_ON_I2C
|
|
||||||
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 /* Main EEPROM */
|
|
||||||
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
|
|
||||||
|
|
||||||
#define CONFIG_SYS_BAUDRATE_TABLE { 110, 300, 600, 1200, 2400, \
|
|
||||||
4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200 }
|
|
||||||
|
|
||||||
/* CPU */
|
|
||||||
|
|
||||||
#ifdef CONFIG_SPI_BOOT
|
|
||||||
#define CONFIG_SYS_SPI_U_BOOT_SIZE 0x40000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* USB configuration
|
|
||||||
*/
|
|
||||||
#define CONFIG_AM335X_USB0
|
|
||||||
#define CONFIG_AM335X_USB0_MODE MUSB_PERIPHERAL
|
|
||||||
#define CONFIG_AM335X_USB1
|
|
||||||
#define CONFIG_AM335X_USB1_MODE MUSB_HOST
|
|
||||||
|
|
||||||
#endif /* ! __CONFIG_PCM051_H */
|
|
@@ -53,10 +53,6 @@
|
|||||||
|
|
||||||
/* UART Configuration */
|
/* UART Configuration */
|
||||||
#define CONFIG_SYS_NS16550_MEM32
|
#define CONFIG_SYS_NS16550_MEM32
|
||||||
#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_DM_SERIAL)
|
|
||||||
#define CONFIG_SYS_NS16550_SERIAL
|
|
||||||
#define CONFIG_SYS_NS16550_REG_SIZE -4
|
|
||||||
#endif
|
|
||||||
#define CONFIG_SYS_NS16550_COM1 KS2_UART0_BASE
|
#define CONFIG_SYS_NS16550_COM1 KS2_UART0_BASE
|
||||||
#define CONFIG_SYS_NS16550_COM2 KS2_UART1_BASE
|
#define CONFIG_SYS_NS16550_COM2 KS2_UART1_BASE
|
||||||
|
|
||||||
@@ -68,19 +64,6 @@
|
|||||||
|
|
||||||
/* SPI Configuration */
|
/* SPI Configuration */
|
||||||
#define CONFIG_SYS_SPI_CLK ks_clk_get_rate(KS2_CLK1_6)
|
#define CONFIG_SYS_SPI_CLK ks_clk_get_rate(KS2_CLK1_6)
|
||||||
#define CONFIG_SYS_SPI0
|
|
||||||
#define CONFIG_SYS_SPI_BASE KS2_SPI0_BASE
|
|
||||||
#define CONFIG_SYS_SPI0_NUM_CS 4
|
|
||||||
#define CONFIG_SYS_SPI1
|
|
||||||
#define CONFIG_SYS_SPI1_BASE KS2_SPI1_BASE
|
|
||||||
#define CONFIG_SYS_SPI1_NUM_CS 4
|
|
||||||
#define CONFIG_SYS_SPI2
|
|
||||||
#define CONFIG_SYS_SPI2_BASE KS2_SPI2_BASE
|
|
||||||
#define CONFIG_SYS_SPI2_NUM_CS 4
|
|
||||||
#ifdef CONFIG_SPL_BUILD
|
|
||||||
#undef CONFIG_DM_SPI
|
|
||||||
#undef CONFIG_DM_SPI_FLASH
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Network Configuration */
|
/* Network Configuration */
|
||||||
#define CONFIG_BOOTP_DEFAULT
|
#define CONFIG_BOOTP_DEFAULT
|
||||||
|
@@ -3810,7 +3810,6 @@ CONFIG_SYS_SPI_MXC_WAIT
|
|||||||
CONFIG_SYS_SPI_RTC_DEVID
|
CONFIG_SYS_SPI_RTC_DEVID
|
||||||
CONFIG_SYS_SPI_ST_ENABLE_WP_PIN
|
CONFIG_SYS_SPI_ST_ENABLE_WP_PIN
|
||||||
CONFIG_SYS_SPI_U_BOOT_SIZE
|
CONFIG_SYS_SPI_U_BOOT_SIZE
|
||||||
CONFIG_SYS_SPI_WRITE_TOUT
|
|
||||||
CONFIG_SYS_SPL_ARGS_ADDR
|
CONFIG_SYS_SPL_ARGS_ADDR
|
||||||
CONFIG_SYS_SPL_LEN
|
CONFIG_SYS_SPL_LEN
|
||||||
CONFIG_SYS_SPL_MALLOC_SIZE
|
CONFIG_SYS_SPL_MALLOC_SIZE
|
||||||
|
Reference in New Issue
Block a user