9
0
Fork 0

Merge branch 'for-next/imx'

This commit is contained in:
Sascha Hauer 2015-10-07 01:01:06 +02:00
commit 160bd3b360
9 changed files with 149 additions and 82 deletions

View File

@ -9,24 +9,26 @@ elif [ -f /env/logo.bmp.lzo ]; then
fb0.enable=1
fi
gpio_get_value 82
if [ $? -eq 0 ]; then
gpio_set_value 83 0
usbserial
timeout -s -a 2
if [ ! -z $use_dfu ]; then
gpio_get_value 82
if [ $? -eq 0 ]; then
usbserial -d
dfu -V 0x1234 -P 0x1234 /dev/nand0.barebox.bb(barebox)sr,/dev/nand0.kernel.bb(kernel)r,/dev/nand0.root.bb(root)r
gpio_set_value 83 0
usbserial
timeout -s -a 2
gpio_get_value 82
if [ $? -eq 0 ]; then
usbserial
autoboot_timeout=60
usbserial -d
dfu -V 0x1234 -P 0x1234 /dev/nand0.barebox.bb(barebox)sr,/dev/nand0.kernel.bb(kernel)r,/dev/nand0.root.bb(root)r
gpio_get_value 82
if [ $? -eq 0 ]; then
usbserial
autoboot_timeout=60
else
reset
fi
else
reset
autoboot_timeout=28
fi
else
autoboot_timeout=28
fi
fi

View File

@ -87,36 +87,6 @@ struct gpio_led led0 = {
.active_low = 1,
};
#ifdef CONFIG_USB
static void imx25_usb_init(void)
{
unsigned int tmp;
/* Host 1 */
tmp = readl(MX25_USB_OTG_BASE_ADDR + 0x600);
tmp &= ~(MX35_H1_SIC_MASK | MX35_H1_PM_BIT | MX35_H1_TLL_BIT |
MX35_H1_USBTE_BIT | MX35_H1_IPPUE_DOWN_BIT | MX35_H1_IPPUE_UP_BIT);
tmp |= (MXC_EHCI_INTERFACE_SINGLE_UNI) << MX35_H1_SIC_SHIFT;
tmp |= MX35_H1_USBTE_BIT;
tmp |= MX35_H1_IPPUE_DOWN_BIT;
writel(tmp, MX25_USB_OTG_BASE_ADDR + 0x600);
tmp = readl(MX25_USB_OTG_BASE_ADDR + 0x584);
tmp |= 3 << 30;
writel(tmp, MX25_USB_OTG_BASE_ADDR + 0x584);
/* Set to Host mode */
tmp = readl(MX25_USB_OTG_BASE_ADDR + 0x5a8);
writel(tmp | 0x3, MX25_USB_OTG_BASE_ADDR + 0x5a8);
}
#endif
static struct fsl_usb2_platform_data usb_pdata = {
.operating_mode = FSL_USB2_DR_DEVICE,
.phy_mode = FSL_USB2_PHY_UTMI,
};
static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
MX25_PAD_FEC_MDC__FEC_MDC,
MX25_PAD_FEC_MDIO__FEC_MDIO,
@ -173,6 +143,28 @@ static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
MX25_PAD_VSTBY_ACK__GPIO_3_18,
};
#ifdef CONFIG_USB
#ifndef CONFIG_USB_GADGET
struct imxusb_platformdata otg_pdata = {
.flags = MXC_EHCI_INTERFACE_DIFF_UNI,
.mode = IMX_USB_MODE_HOST,
.phymode = USBPHY_INTERFACE_MODE_UTMI,
};
#endif
struct imxusb_platformdata hs_pdata = {
.flags = MXC_EHCI_INTERFACE_SINGLE_UNI | MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN,
.mode = IMX_USB_MODE_HOST,
};
#endif
#ifdef CONFIG_USB_GADGET
static struct fsl_usb2_platform_data usb_pdata = {
.operating_mode = FSL_USB2_DR_DEVICE,
.phy_mode = FSL_USB2_PHY_UTMI,
};
#endif
static int eukrea_cpuimx25_devices_init(void)
{
mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx25_pads,
@ -206,13 +198,6 @@ static int eukrea_cpuimx25_devices_init(void)
imx25_add_fb(&eukrea_cpuimx25_fb_data);
imx25_add_i2c0(NULL);
imx25_add_mmc0(NULL);
#ifdef CONFIG_USB
imx25_usb_init();
add_generic_usb_ehci_device(DEVICE_ID_DYNAMIC, MX25_USB_OTG_BASE_ADDR + 0x400, NULL);
#endif
#ifdef CONFIG_USB_GADGET
/* Workaround ENGcm09152 */
writel(readl(MX25_USB_OTG_BASE_ADDR + 0x608) | (1 << 23), MX25_USB_OTG_BASE_ADDR + 0x608);
@ -220,6 +205,16 @@ static int eukrea_cpuimx25_devices_init(void)
IORESOURCE_MEM, &usb_pdata);
#endif
#ifdef CONFIG_USB
#ifndef CONFIG_USB_GADGET
imx_add_usb((void *)MX25_USB_OTG_BASE_ADDR, 0, &otg_pdata);
#endif
imx_add_usb((void *)MX25_USB_HS_BASE_ADDR, 1, &hs_pdata);
#endif
imx25_add_mmc0(NULL);
imx25_add_i2c0(NULL);
armlinux_set_architecture(MACH_TYPE_EUKREA_CPUIMX25SD);
return 0;

View File

@ -2,6 +2,7 @@ soc imx25
loadaddr 0x80000000
dcdofs 0x400
wm 32 0xb8001008 0x00000000
wm 32 0xb8001010 0x00000004
wm 32 0xb8001000 0x92100000
wm 8 0x80000400 0x12344321

View File

@ -1,62 +1,65 @@
CONFIG_ARCH_IMX=y
CONFIG_ARCH_IMX25=y
CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
CONFIG_ARCH_IMX_INTERNAL_BOOT=y
CONFIG_ARCH_IMX_INTERNAL_BOOT_SERIAL=y
CONFIG_MACH_EUKREA_CPUIMX25=y
CONFIG_IMX_IIM=y
CONFIG_IMX_IIM_FUSE_BLOW=y
CONFIG_AEABI=y
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
CONFIG_PBL_IMAGE=y
CONFIG_PBL_RELOCATABLE=y
CONFIG_MMU=y
CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000
CONFIG_MALLOC_SIZE=0x800000
CONFIG_EXPERIMENTAL=y
CONFIG_MALLOC_TLSF=y
CONFIG_LONGHELP=y
CONFIG_RELOCATABLE=y
CONFIG_GLOB=y
CONFIG_HUSH_FANCY_PROMPT=y
CONFIG_CMDLINE_EDITING=y
CONFIG_AUTO_COMPLETE=y
# CONFIG_CONSOLE_ACTIVATE_FIRST is not set
CONFIG_CONSOLE_ACTIVATE_ALL=y
CONFIG_DEFAULT_COMPRESSION_LZO=y
CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/eukrea_cpuimx25/env"
CONFIG_CMD_EDIT=y
CONFIG_CMD_SLEEP=y
CONFIG_CMD_SAVEENV=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_PRINTENV=y
CONFIG_CMD_READLINE=y
CONFIG_CMD_AUTOMOUNT=y
CONFIG_CMD_ECHO_E=y
CONFIG_CMD_LOADB=y
CONFIG_CMD_MEMINFO=y
CONFIG_LONGHELP=y
CONFIG_CMD_IOMEM=y
CONFIG_CMD_MTEST=y
CONFIG_CMD_FLASH=y
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_BOOTM_SHOW_TYPE=y
CONFIG_CMD_BOOTM_VERBOSE=y
CONFIG_CMD_BOOTM_INITRD=y
CONFIG_CMD_BOOTM_OFTREE=y
CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y
CONFIG_CMD_RESET=y
CONFIG_CMD_GO=y
CONFIG_CMD_OFTREE=y
CONFIG_CMD_TIMEOUT=y
CONFIG_CMD_LOADB=y
CONFIG_CMD_RESET=y
CONFIG_CMD_PARTITION=y
CONFIG_CMD_AUTOMOUNT=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_PRINTENV=y
CONFIG_CMD_MAGICVAR=y
CONFIG_CMD_MAGICVAR_HELP=y
CONFIG_CMD_SPLASH=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_SAVEENV=y
CONFIG_CMD_UNCOMPRESS=y
CONFIG_CMD_SLEEP=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_TFTP=y
CONFIG_CMD_ECHO_E=y
CONFIG_CMD_EDIT=y
CONFIG_CMD_SPLASH=y
CONFIG_CMD_READLINE=y
CONFIG_CMD_TIMEOUT=y
CONFIG_CMD_FLASH=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_LED=y
CONFIG_CMD_LED_TRIGGER=y
CONFIG_CMD_OFTREE=y
CONFIG_NET=y
CONFIG_CMD_DHCP=y
CONFIG_NET_NFS=y
CONFIG_CMD_PING=y
CONFIG_CMD_TFTP=y
CONFIG_FS_TFTP=y
CONFIG_NET_NETCONSOLE=y
CONFIG_NET_RESOLV=y
CONFIG_DRIVER_NET_FEC_IMX=y
# CONFIG_SPI is not set
CONFIG_I2C=y
@ -65,12 +68,12 @@ CONFIG_MTD=y
CONFIG_MTD_RAW_DEVICE=y
CONFIG_NAND=y
CONFIG_NAND_IMX=y
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_USB_HOST=y
CONFIG_USB_IMX_CHIPIDEA=y
CONFIG_USB_EHCI=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DFU=y
CONFIG_USB_GADGET_SERIAL=y
CONFIG_VIDEO=y
CONFIG_DRIVER_VIDEO_IMX=y
CONFIG_MCI=y
@ -78,7 +81,10 @@ CONFIG_MCI_IMX_ESDHC=y
CONFIG_LED=y
CONFIG_LED_GPIO=y
CONFIG_LED_TRIGGERS=y
CONFIG_FS_TFTP=y
CONFIG_FS_FAT=y
CONFIG_FS_FAT_WRITE=y
CONFIG_FS_FAT_LFN=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_BMP=y
CONFIG_PNG=y

View File

@ -74,6 +74,7 @@ int imx25_devices_init(void)
add_generic_device("imx31-gpio", 2, NULL, MX25_GPIO3_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
add_generic_device("imx31-gpio", 3, NULL, MX25_GPIO4_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
add_generic_device("imx21-wdt", 0, NULL, MX25_WDOG_BASE_ADDR, 0x1000, IORESOURCE_MEM, NULL);
add_generic_device("imx25-usb-misc", 0, NULL, MX25_USB_OTG_BASE_ADDR + 0x600, 0x100, IORESOURCE_MEM, NULL);
return 0;
}

View File

@ -35,11 +35,14 @@
#include <driver.h>
#include <init.h>
#include <of.h>
#include <gpio.h>
#include <malloc.h>
#include <types.h>
#include <xfuncs.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <pinctrl.h>
#include <of_gpio.h>
#include <io.h>
#include <i2c/i2c.h>
@ -108,6 +111,7 @@ struct fsl_i2c_struct {
int stopped;
unsigned int ifdr; /* FSL_I2C_IFDR */
unsigned int dfsrr; /* FSL_I2C_DFSRR */
struct i2c_bus_recovery_info rinfo;
};
#define to_fsl_i2c_struct(a) container_of(a, struct fsl_i2c_struct, adapter)
@ -232,8 +236,12 @@ static int i2c_fsl_start(struct i2c_adapter *adapter)
writeb(temp, base + FSL_I2C_I2CR);
result = i2c_fsl_bus_busy(adapter, 1);
if (result)
return result;
if (result) {
result = i2c_recover_bus(&i2c_fsl->adapter);
if (result)
return result;
return -EAGAIN;
}
i2c_fsl->stopped = 0;
@ -494,9 +502,14 @@ static int i2c_fsl_xfer(struct i2c_adapter *adapter,
int result;
/* Start I2C transfer */
result = i2c_fsl_start(adapter);
if (result)
goto fail0;
for (i = 0; i < 3; i++) {
result = i2c_fsl_start(adapter);
if (!result)
break;
if (result == -EAGAIN)
continue;
return result;
}
/* read/write data */
for (i = 0; i < num; i++) {
@ -527,6 +540,48 @@ fail0:
return (result < 0) ? result : num;
}
static void i2c_fsl_prepare_recovery(struct i2c_adapter *adapter)
{
int ret;
ret = pinctrl_select_state(adapter->dev.parent, "gpio");
if (ret)
dev_err(adapter->dev.parent, "pinctrl failed: %s\n", strerror(-ret));
}
static void i2c_fsl_unprepare_recovery(struct i2c_adapter *adapter)
{
int ret;
ret = pinctrl_select_state(adapter->dev.parent, "default");
if (ret)
dev_err(adapter->dev.parent, "pinctrl failed: %s\n", strerror(-ret));
}
static void i2c_fsl_init_recovery(struct fsl_i2c_struct *i2c_fsl, struct device_d *dev)
{
if (!dev->device_node)
return;
i2c_fsl->rinfo.sda_gpio = of_get_named_gpio_flags(dev->device_node,
"sda-gpios", 0, NULL);
i2c_fsl->rinfo.scl_gpio = of_get_named_gpio_flags(dev->device_node,
"scl-gpios", 0, NULL);
if (!gpio_is_valid(i2c_fsl->rinfo.sda_gpio) ||
!gpio_is_valid(i2c_fsl->rinfo.scl_gpio))
return;
i2c_fsl->rinfo.get_scl = i2c_get_scl_gpio_value;
i2c_fsl->rinfo.get_sda = i2c_get_sda_gpio_value;
i2c_fsl->rinfo.set_scl = i2c_set_scl_gpio_value;
i2c_fsl->rinfo.prepare_recovery = i2c_fsl_prepare_recovery;
i2c_fsl->rinfo.unprepare_recovery = i2c_fsl_unprepare_recovery;
i2c_fsl->rinfo.recover_bus = i2c_generic_gpio_recovery;
i2c_fsl->adapter.bus_recovery_info = &i2c_fsl->rinfo;
dev_dbg(dev, "initialized recovery info\n");
}
static int __init i2c_fsl_probe(struct device_d *pdev)
{
struct fsl_i2c_struct *i2c_fsl;
@ -555,6 +610,8 @@ static int __init i2c_fsl_probe(struct device_d *pdev)
goto fail;
}
i2c_fsl_init_recovery(i2c_fsl, pdev);
i2c_fsl->dfsrr = -1;
/* Set up clock divider */

View File

@ -236,6 +236,7 @@ static int imx_chipidea_probe(struct device_d *dev)
}
ci->portno = dev->id;
ci->flags = pdata->flags;
ci->phymode = pdata->phymode;
ci->mode = pdata->mode;
}

1
images/.gitignore vendored
View File

@ -5,6 +5,7 @@
*.imximg
*.imximg.prep
*.imximg.signed
*.imx-sram-img
*.map
*.src
*.kwbimg

View File

@ -1,6 +1,8 @@
#ifndef __USB_CHIPIDEA_IMX_H
#define __USB_CHIPIDEA_IMX_H
#include <usb/phy.h>
/*
* POTSC flags
*/
@ -42,6 +44,7 @@ enum imx_usb_mode {
struct imxusb_platformdata {
unsigned long flags;
enum usb_phy_interface phymode;
enum imx_usb_mode mode;
};