imx6: icorem6: Add dm-eth, framebuffer and I2C support
Subsystems (5)
v3 cover imx6: icorem6: Add dm-eth, framebuffer and I2C support
From: Jagan Teki <[email protected]>
This series support framebuffer and I2C on top of u-boot-imx.git with latest u-boot.git merge.
fec_mxc dm driver on previous version series trigger an issues with when DM_ETH not-defined so, this series have fixes for non-dm builds as well.
Changes for v3:
- Fix fec_mxc driver to build for non-dm configs as well.
- Fix VIDEO_IPV3 Kconfig entry not to make default.
Changes for v2:
- Rebase on u-boot-imx.git and u-boot.git
Jagan Teki (13):
net: fec_mxc: Remove unneeded eth_device arg from fec_get_hwaddr
net: fec_mxc: Convert into driver model
net: fec_mxc: Driver cleanups
dm: net: fec: Add .read_rom_hwaddr
ARM: dts: imx6qdl-icore: Add FEC support
icorem6: Use CONFIG_DM_ETH support
video: Kconfig: Add VIDEO_IPV3 entry
imx6: icorem6: Add framebuffer support
imx6: icorem6: Add custom splashscreen support
i2c: Kconfig: Add SYS_I2C_MXC entry
i2c: mxc: Print hex instead of decimal for bus address
i2c: mxc: Make 'no gpio pinctrl state' print as debug
imx6: icorem6: Add I2C support
arch/arm/cpu/armv7/mx6/Kconfig | 2 + arch/arm/dts/imx6qdl-icore.dtsi | 24 ++ board/engicam/icorem6/icorem6.c | 184 ++++++++------ configs/imx6qdl_icore_mmc_defconfig | 7 +- configs/imx6qdl_icore_nand_defconfig | 7 +- drivers/i2c/Kconfig | 8 + drivers/i2c/mxc_i2c.c | 2 +- drivers/net/fec_mxc.c | 473 +++++++++++++++++++++++------------ drivers/net/fec_mxc.h | 31 +-- drivers/video/Kconfig | 7 + include/configs/imx6qdl_icore.h | 14 ++ tools/logos/engicam.bmp | Bin 0 -> 60214 bytes 12 files changed, 509 insertions(+), 250 deletions(-) create mode 100755 tools/logos/engicam.bmp
Signature · 1 line
1.9.1
PATCH v3 1/13 net: fec_mxc: Remove unneeded eth_device arg from fec_get_hwaddr
From: Jagan Teki <[email protected]>
fec_get_hwaddr never used eth_device argument, hence removed.
--- drivers/net/fec_mxc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/net/fec_mxc.c +2 -3
@@ -362,8 +362,7 @@ static void fec_rbd_clean(int last, struct fec_bd *pRbd)writew (0 , &pRbd->data_length); } -static int fec_get_hwaddr (struct eth_device *dev,int dev_id, -unsigned char *mac) +static int fec_get_hwaddr (int dev_id,unsigned char *mac) {imx_get_mac_from_fuse (dev_id, mac);return !is_valid_ethaddr (mac);
@@ -1045,7 +1044,7 @@ static int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,#endif eth_register (edev); -if (fec_get_hwaddr (edev, dev_id, ethaddr) ==0 ) { +if (fec_get_hwaddr (dev_id, ethaddr) ==0 ) {debug ("got MAC%d address from fuse: %pM\n" , dev_id, ethaddr);memcpy (edev->enetaddr, ethaddr,6 );if (!getenv ("ethaddr" ))
Signature · 1 line
1.9.1
PATCH v3 2/13 net: fec_mxc: Convert into driver model
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
This patch add driver model support for fec_mxc driver.
---
Changes for v3:
- Removed the stub functions[1] and revert back to previous changes where #ifdef on each function call. We can't use the stub functions to minimize the #ifdef's as the driver is organize the code in such a way that it can't modularized the code. So better to use #ifdef to not to break the non-dm.
[1] http://git.denx.de/?p=u-boot/u-boot-imx.git;a=commitdiff;h=fa2ce02b73fa59fe91d2d0ad61bf837392e03ab9
drivers/net/fec_mxc.c | 268 +++++++++++++++++++++++++++++++++++++++++++++----- drivers/net/fec_mxc.h | 4 + 2 files changed, 246 insertions(+), 26 deletions(-)
drivers/net/fec_mxc.c +242 -26
@@ -9,6 +9,7 @@*/ #include <common.h> +#include <dm.h> #include <malloc.h> #include <memalign.h> #include <net.h>
@@ -368,10 +369,20 @@ static int fec_get_hwaddr(int dev_id, unsigned char *mac)return !is_valid_ethaddr (mac); } +#ifdef CONFIG_DM_ETH +static int fecmxc_set_hwaddr(struct udevice *dev) +#else static int fec_set_hwaddr(struct eth_device *dev) +#endif { +#ifdef CONFIG_DM_ETH +struct fec_priv *fec =dev_get_priv (dev); +struct eth_pdata *pdata =dev_get_platdata (dev); +uchar *mac = pdata->enetaddr; +#else uchar *mac = dev->enetaddr;struct fec_priv *fec = (struct fec_priv *)dev->priv; +#endif writel (0 , &fec->eth->iaddr1);writel (0 , &fec->eth->iaddr2);
@@ -426,9 +437,17 @@ static void fec_reg_setup(struct fec_priv *fec)* Start the FEC engine * @param[in] dev Our device to handle */ +#ifdef CONFIG_DM_ETH +static int fec_open(struct udevice *dev) +#else static int fec_open(struct eth_device *edev) +#endif { +#ifdef CONFIG_DM_ETH +struct fec_priv *fec =dev_get_priv (dev); +#else struct fec_priv *fec = (struct fec_priv *)edev->priv; +#endif int speed;uint32_t addr, size;int i;
@@ -534,14 +553,26 @@ static int fec_open(struct eth_device *edev)return 0 ; } +#ifdef CONFIG_DM_ETH +static int fecmxc_init(struct udevice *dev) +#else static int fec_init(struct eth_device *dev, bd_t* bd) +#endif { +#ifdef CONFIG_DM_ETH +struct fec_priv *fec =dev_get_priv (dev); +#else struct fec_priv *fec = (struct fec_priv *)dev->priv; +#endif uint32_t mib_ptr = (uint32_t )&fec->eth->rmon_t_drop;int i;/* Initialize MAC address */ +#ifdef CONFIG_DM_ETH +fecmxc_set_hwaddr (dev); +#else fec_set_hwaddr (dev); +#endif /* * Setup transmit descriptors, there are two in total.
@@ -595,9 +626,17 @@ static int fec_init(struct eth_device *dev, bd_t* bd)* Halt the FEC engine * @param[in] dev Our device to handle */ +#ifdef CONFIG_DM_ETH +static void fecmxc_halt(struct udevice *dev) +#else static void fec_halt(struct eth_device *dev) +#endif { +#ifdef CONFIG_DM_ETH +struct fec_priv *fec =dev_get_priv (dev); +#else struct fec_priv *fec = (struct fec_priv *)dev->priv; +#endif int counter =0xffff ;/*
@@ -637,7 +676,11 @@ static void fec_halt(struct eth_device *dev)* @param[in] length Data count in bytes * @return 0 on success */ +#ifdef CONFIG_DM_ETH +static int fecmxc_send(struct udevice *dev, void *packet, int length) +#else static int fec_send(struct eth_device *dev, void *packet, int length) +#endif {unsigned int status;uint32_t size, end;
@@ -649,7 +692,11 @@ static int fec_send(struct eth_device *dev, void *packet, int length)* This routine transmits one frame. This routine only accepts * 6-byte Ethernet addresses. */ +#ifdef CONFIG_DM_ETH +struct fec_priv *fec =dev_get_priv (dev); +#else struct fec_priv *fec = (struct fec_priv *)dev->priv; +#endif /* * Check for valid length of data.
@@ -782,9 +829,17 @@ out:* @param[in] dev Our ethernet device to handle * @return Length of packet read */ +#ifdef CONFIG_DM_ETH +static int fecmxc_recv(struct udevice *dev, int flags, uchar **packetp) +#else static int fec_recv(struct eth_device *dev) +#endif { +#ifdef CONFIG_DM_ETH +struct fec_priv *fec =dev_get_priv (dev); +#else struct fec_priv *fec = (struct fec_priv *)dev->priv; +#endif struct fec_bd *rbd = &fec->rbd_base[fec->rbd_index];unsigned long ievent;int frame_length, len =0 ;
@@ -800,8 +855,13 @@ static int fec_recv(struct eth_device *dev)writel (ievent, &fec->eth->ievent);debug ("fec_recv: ievent 0x%lx\n" , ievent);if (ievent &FEC_IEVENT_BABR ) { +#ifdef CONFIG_DM_ETH +fecmxc_halt (dev); +fecmxc_init (dev); +#else fec_halt (dev);fec_init (dev, fec->bd); +#endif printf ("some error: 0x%08lx\n" , ievent);return 0 ; }
@@ -813,10 +873,18 @@ static int fec_recv(struct eth_device *dev)if (ievent &FEC_IEVENT_GRA ) {/* Graceful stop complete */ if (readl (&fec->eth->x_cntrl) &0x00000001 ) { +#ifdef CONFIG_DM_ETH +fecmxc_halt (dev); +#else fec_halt (dev); +#endif writel (~0x00000001 &readl (&fec->eth->x_cntrl), &fec->eth->x_cntrl); +#ifdef CONFIG_DM_ETH +fecmxc_init (dev); +#else fec_init (dev, fec->bd); +#endif } }
@@ -970,6 +1038,33 @@ static void fec_free_descs(struct fec_priv *fec)free (fec->tbd_base); } +struct mii_dev *fec_get_miibus (uint32_t base_addr,int dev_id) +{ +struct ethernet_regs *eth = (struct ethernet_regs *)base_addr; +struct mii_dev *bus; +int ret; + + bus =mdio_alloc (); +if (!bus) { +printf ("mdio_alloc failed\n" ); +return NULL ; + } + bus->read = fec_phy_read; + bus->write = fec_phy_write; + bus->priv = eth; +fec_set_dev_name (bus->name, dev_id); + + ret =mdio_register (bus); +if (ret) { +printf ("mdio_register failed\n" ); +free (bus); +return NULL ; + } +fec_mii_setspeed (eth); +return bus; +} + +#ifndef CONFIG_DM_ETH #ifdef CONFIG_PHYLIB int fec_probe (bd_t *bd,int dev_id,uint32_t base_addr,struct mii_dev *bus,struct phy_device *phydev)
@@ -1061,32 +1156,6 @@ err1:return ret; } -struct mii_dev *fec_get_miibus (uint32_t base_addr,int dev_id) -{ -struct ethernet_regs *eth = (struct ethernet_regs *)base_addr; -struct mii_dev *bus; -int ret; - - bus =mdio_alloc (); -if (!bus) { -printf ("mdio_alloc failed\n" ); -return NULL ; - } - bus->read = fec_phy_read; - bus->write = fec_phy_write; - bus->priv = eth; -fec_set_dev_name (bus->name, dev_id); - - ret =mdio_register (bus); -if (ret) { -printf ("mdio_register failed\n" ); -free (bus); -return NULL ; - } -fec_mii_setspeed (eth); -return bus; -} -int fecmxc_initialize_multi (bd_t *bd,int dev_id,int phy_id,uint32_t addr) {uint32_t base_mii;
@@ -1146,3 +1215,150 @@ int fecmxc_register_mii_postcall(struct eth_device *dev, int (*cb)(int))return 0 ; }#endif + +#else + +static const struct eth_ops fecmxc_ops = { + .start = fecmxc_init, + .send = fecmxc_send, + .recv = fecmxc_recv, + .stop = fecmxc_halt, + .write_hwaddr = fecmxc_set_hwaddr, +}; + +static int fec_phy_init (struct fec_priv *priv,struct udevice *dev) +{ +struct phy_device *phydev; +int mask =0xffffffff ; + +#ifdef CONFIG_PHYLIB + mask =1 <<CONFIG_FEC_MXC_PHYADDR ; +#endif + + phydev =phy_find_by_mask (priv->bus, mask, priv->interface); +if (!phydev) +return -ENODEV ; + +phy_connect_dev (phydev, dev); + + priv->phydev = phydev; +phy_config (phydev); + +return 0 ; +} + +static int fecmxc_probe (struct udevice *dev) +{ +struct eth_pdata *pdata =dev_get_platdata (dev); +struct fec_priv *priv =dev_get_priv (dev); +struct mii_dev *bus =NULL ; +int dev_id =-1 ; +unsigned char ethaddr[6 ]; +uint32_t start; +int ret; + + ret =fec_alloc_descs (priv); +if (ret) +return ret; + + bus =fec_get_miibus ((uint32_t )priv->eth, dev_id); +if (!bus) + goto err_mii; + + priv->bus = bus; + priv->xcv_type =CONFIG_FEC_XCV_TYPE ; + priv->interface = pdata->phy_interface; + ret =fec_phy_init (priv, dev); +if (ret) + goto err_phy; + +/* Reset chip. */ +writel (readl (&priv->eth->ecntrl) |FEC_ECNTRL_RESET , &priv->eth->ecntrl); + start =get_timer (0 ); +while (readl (&priv->eth->ecntrl) &FEC_ECNTRL_RESET ) { +if (get_timer (start) > (CONFIG_SYS_HZ *5 )) { +printf ("FEC MXC: Timeout reseting chip\n" ); + goto err_timeout; + } +udelay (10 ); + } + +fec_reg_setup (priv); +fec_set_dev_name ((char *)dev->name, dev_id); + priv->dev_id = (dev_id ==-1 ) ?0 : dev_id; + + ret =fec_get_hwaddr (dev_id, ethaddr); +if (!ret) { +debug ("got MAC%d address from fuse: %pM\n" , dev_id, ethaddr); +memcpy (pdata->enetaddr, ethaddr,6 ); +if (!getenv ("ethaddr" )) +eth_setenv_enetaddr ("ethaddr" , ethaddr); + } + +return 0 ; + +err_timeout: +free (priv->phydev); +err_phy: +mdio_unregister (bus); +free (bus); +err_mii: +fec_free_descs (priv); +return ret; +} + +static int fecmxc_remove (struct udevice *dev) +{ +struct fec_priv *priv =dev_get_priv (dev); + +free (priv->phydev); +fec_free_descs (priv); +mdio_unregister (priv->bus); +mdio_free (priv->bus); + +return 0 ; +} + +static int fecmxc_ofdata_to_platdata (struct udevice *dev) +{ +struct eth_pdata *pdata =dev_get_platdata (dev); +struct fec_priv *priv =dev_get_priv (dev); +const char *phy_mode; + + pdata->iobase = (phys_addr_t )dev_get_addr (dev); + priv->eth = (struct ethernet_regs *)pdata->iobase; + + pdata->phy_interface =-1 ; + phy_mode =fdt_getprop (gd->fdt_blob, dev->of_offset,"phy-mode" ,NULL ); +if (phy_mode) + pdata->phy_interface =phy_get_interface_by_name (phy_mode); +if (pdata->phy_interface ==-1 ) { +debug ("%s: Invalid PHY interface '%s'\n" , __func__, phy_mode); +return -EINVAL ; + } + +/* TODO +* Need to get the reset-gpio and related properties from DT +* and implemet the enet reset code on .probe call +*/ + +return 0 ; +} + +static const struct udevice_id fecmxc_ids[] = { + { .compatible ="fsl,imx6q-fec" }, + { } +}; + +U_BOOT_DRIVER (fecmxc_gem) = { + .name ="fecmxc" , + .id =UCLASS_ETH , + .of_match = fecmxc_ids, + .ofdata_to_platdata = fecmxc_ofdata_to_platdata, + .probe = fecmxc_probe, + .remove = fecmxc_remove, + .ops = &fecmxc_ops, + .priv_auto_alloc_size =sizeof (struct fec_priv ), + .platdata_auto_alloc_size =sizeof (struct eth_pdata ), +}; +#endif
drivers/net/fec_mxc.h +4 -0
@@ -264,6 +264,10 @@ struct fec_priv {int phy_id;int (*mii_postcall)(int );#endif + +#ifdef CONFIG_DM_ETH +u32 interface; +#endif };/**
Signature · 1 line
1.9.1
PATCH v3 2/13 net: fec_mxc: Convert into driver model
Hi Jagan,
Quoted 10 lines · Jagan Teki
From: Jagan Teki <[email protected]>
This patch add driver model support for
fec_mxcdriver.Cc Simon Glass <[email protected]>Cc Joe Hershberger <[email protected]>Cc Peng Fan <[email protected]>Cc Stefano Babic <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>
Quoted 8 lines
---
Changes for v3:
- Removed the stub functions[1] and revert back to previous changes where #ifdef on each function call. We can't use the stub functions to minimize the #ifdef's as the driver is organize the code in such a way that it can't modularized the code. So better to use #ifdef to not to break the non-dm.[1] http://git.denx.de/?p=u-boot/u-boot-imx.git;a=commitdiff;h=fa2ce02b73fa59fe91d2d0ad61bf837392e03ab9
So the plan is to drop that from u-boot-imx and use this instead? If so,
Quoted 3 lines
drivers/net/fec_mxc.c | 268 +++++++++++++++++++++++++++++++++++++++++++++----- drivers/net/fec_mxc.h | 4 + 2 files changed, 246 insertions(+), 26 deletions(-)
PATCH v3 2/13 net: fec_mxc: Convert into driver model
On Dec 9, 2016 7:22 PM, "Joe Hershberger" <[email protected]> wrote:
Hi Jagan,
Quoted 10 lines · Jagan Teki
From: Jagan Teki <[email protected]>
This patch add driver model support for
fec_mxcdriver.Cc Simon Glass <[email protected]>Cc Joe Hershberger <[email protected]>Cc Peng Fan <[email protected]>Cc Stefano Babic <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>
Quoted 3 lines
---
Changes for v3:
- Removed the stub functions[1] and revert back to previous changes where
#ifdef on
Quoted 1 line
each function call. We can't use the stub functions to minimize the
#ifdef's as the
Quoted 1 line
driver is organize the code in such a way that it can't modularized the
code. So better
Quoted 3 lines
to use #ifdef to not to break the non-dm.
[1] http://git.denx.de/?p=u-boot/u-boot-imx.git;a=commitdiff;h=
fa2ce02b73fa59fe91d2d0ad61bf837392e03ab9
So the plan is to drop that from u-boot-imx and use this instead? If so,
Yes.
PATCH v3 3/13 net: fec_mxc: Driver cleanups
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
- Remove exctra space
- Add space
- Add tab space
- Fix single line comments quotes
- Fix 'CHECK: Avoid CamelCase'
- Fix 'CHECK: Alignment should match open parenthesis'
- Fix 'WARNING: line over 80 characters'
- Re-arrage header include files
--- drivers/net/fec_mxc.c | 202 +++++++++++++++++++------------------------------- drivers/net/fec_mxc.h | 27 ++----- 2 files changed, 83 insertions(+), 146 deletions(-)
drivers/net/fec_mxc.c +75 -127
@@ -12,18 +12,19 @@#include <dm.h> #include <malloc.h> #include <memalign.h> +#include <miiphy.h> #include <net.h> #include <netdev.h> -#include <miiphy.h> #include "fec_mxc.h" -#include <asm/arch/clock.h> -#include <asm/arch/imx-regs.h> -#include <asm/imx-common/sys_proto.h> #include <asm/io.h> #include <linux/errno.h> #include <linux/compiler.h> +#include <asm/arch/clock.h> +#include <asm/arch/imx-regs.h> +#include <asm/imx-common/sys_proto.h> +DECLARE_GLOBAL_DATA_PTR ;/*
@@ -80,11 +81,9 @@ static void swap_packet(uint32_t *packet, int length) }#endif -/* -* MII-interface related functions -*/ -static int fec_mdio_read (struct ethernet_regs *eth,uint8_t phyAddr, -uint8_t regAddr) +/* MII-interface related functions */ +static int fec_mdio_read (struct ethernet_regs *eth,uint8_t phyaddr, +uint8_t regaddr) {uint32_t reg;/* convenient holder for the PHY register */ uint32_t phy;/* convenient holder for the PHY */
@@ -96,15 +95,13 @@ static int fec_mdio_read(struct ethernet_regs *eth, uint8_t phyAddr,* programming the FEC's MII data register. */ writel (FEC_IEVENT_MII , ð->ievent); - reg = regAddr <<FEC_MII_DATA_RA_SHIFT ; - phy = phyAddr <<FEC_MII_DATA_PA_SHIFT ; + reg = regaddr <<FEC_MII_DATA_RA_SHIFT ; + phy = phyaddr <<FEC_MII_DATA_PA_SHIFT ;writel (FEC_MII_DATA_ST |FEC_MII_DATA_OP_RD |FEC_MII_DATA_TA | phy | reg, ð->mii_data); -/* -* wait for the related interrupt -*/ +/* wait for the related interrupt */ start =get_timer (0 );while (!(readl (ð->ievent) &FEC_IEVENT_MII )) {if (get_timer (start) > (CONFIG_SYS_HZ /1000 )) {
@@ -113,17 +110,13 @@ static int fec_mdio_read(struct ethernet_regs *eth, uint8_t phyAddr, } } -/* -* clear mii interrupt bit -*/ +/* clear mii interrupt bit */ writel (FEC_IEVENT_MII , ð->ievent); -/* -* it's now safe to read the PHY's register -*/ +/* it's now safe to read the PHY's register */ val = (unsigned short )readl (ð->mii_data); -debug ("%s: phy: %02x reg:%02x val:%#x\n" , __func__, phyAddr, - regAddr, val); +debug ("%s: phy: %02x reg:%02x val:%#x\n" , __func__, phyaddr, + regaddr, val);return val; }
@@ -154,22 +147,20 @@ static void fec_mii_setspeed(struct ethernet_regs *eth)debug ("%s: mii_speed %08x\n" , __func__,readl (ð->mii_speed)); } -static int fec_mdio_write (struct ethernet_regs *eth,uint8_t phyAddr, -uint8_t regAddr,uint16_t data) +static int fec_mdio_write (struct ethernet_regs *eth,uint8_t phyaddr, +uint8_t regaddr,uint16_t data) {uint32_t reg;/* convenient holder for the PHY register */ uint32_t phy;/* convenient holder for the PHY */ uint32_t start; - reg = regAddr <<FEC_MII_DATA_RA_SHIFT ; - phy = phyAddr <<FEC_MII_DATA_PA_SHIFT ; + reg = regaddr <<FEC_MII_DATA_RA_SHIFT ; + phy = phyaddr <<FEC_MII_DATA_PA_SHIFT ;writel (FEC_MII_DATA_ST |FEC_MII_DATA_OP_WR |FEC_MII_DATA_TA | phy | reg | data, ð->mii_data); -/* -* wait for the MII interrupt -*/ +/* wait for the MII interrupt */ start =get_timer (0 );while (!(readl (ð->ievent) &FEC_IEVENT_MII )) {if (get_timer (start) > (CONFIG_SYS_HZ /1000 )) {
@@ -178,26 +169,24 @@ static int fec_mdio_write(struct ethernet_regs *eth, uint8_t phyAddr, } } -/* -* clear MII interrupt bit -*/ +/* clear MII interrupt bit */ writel (FEC_IEVENT_MII , ð->ievent); -debug ("%s: phy: %02x reg:%02x val:%#x\n" , __func__, phyAddr, - regAddr, data); +debug ("%s: phy: %02x reg:%02x val:%#x\n" , __func__, phyaddr, + regaddr, data);return 0 ; } -static int fec_phy_read (struct mii_dev *bus,int phyAddr,int dev_addr, -int regAddr) +static int fec_phy_read (struct mii_dev *bus,int phyaddr,int dev_addr, +int regaddr) { -return fec_mdio_read (bus->priv, phyAddr, regAddr); +return fec_mdio_read (bus->priv, phyaddr, regaddr); } -static int fec_phy_write (struct mii_dev *bus,int phyAddr,int dev_addr, -int regAddr,u16 data) +static int fec_phy_write (struct mii_dev *bus,int phyaddr,int dev_addr, +int regaddr,u16 data) { -return fec_mdio_write (bus->priv, phyAddr, regAddr, data); +return fec_mdio_write (bus->priv, phyaddr, regaddr, data); }#ifndef CONFIG_PHYLIB
@@ -218,14 +207,12 @@ static int miiphy_restart_aneg(struct eth_device *dev)fec_mdio_write (eth, fec->phy_id,MII_BMCR ,BMCR_RESET );udelay (1000 ); -/* -* Set the auto-negotiation advertisement register bits -*/ +/* Set the auto-negotiation advertisement register bits */ fec_mdio_write (eth, fec->phy_id,MII_ADVERTISE , -LPA_100FULL |LPA_100HALF |LPA_10FULL | -LPA_10HALF |PHY_ANLPAR_PSB_802_3 ); +LPA_100FULL |LPA_100HALF |LPA_10FULL | +LPA_10HALF |PHY_ANLPAR_PSB_802_3 );fec_mdio_write (eth, fec->phy_id,MII_BMCR , -BMCR_ANENABLE |BMCR_ANRESTART ); +BMCR_ANENABLE |BMCR_ANRESTART );if (fec->mii_postcall) ret = fec->mii_postcall (fec->phy_id);
@@ -242,9 +229,7 @@ static int miiphy_wait_aneg(struct eth_device *dev)struct fec_priv *fec = (struct fec_priv *)dev->priv;struct ethernet_regs *eth = fec->bus->priv; -/* -* Wait for AN completion -*/ +/* Wait for AN completion */ start =get_timer (0 ); do { if (get_timer(start) > (CONFIG_SYS_HZ * 5)) {
@@ -255,7 +240,7 @@ static int miiphy_wait_aneg(struct eth_device *dev) status =fec_mdio_read (eth, fec->phy_id,MII_BMSR );if (status <0 ) {printf ("%s: Autonegotiation failed. status: %d\n" , - dev->name, status); + dev->name, status);return -1 ; } }while (!(status &BMSR_LSTATUS ));
@@ -352,15 +337,15 @@ static void fec_tbd_init(struct fec_priv *fec)/** * Mark the given read buffer descriptor as free * @param[in] last 1 if this is the last buffer descriptor in the chain, else 0 -* @param[in] pRbd buffer descriptor to mark free again +* @param[in] prbd buffer descriptor to mark free again */ -static void fec_rbd_clean (int last,struct fec_bd *pRbd) +static void fec_rbd_clean (int last,struct fec_bd *prbd) {unsigned short flags =FEC_RBD_EMPTY ;if (last) flags |=FEC_RBD_WRAP ; -writew (flags, &pRbd->status); -writew (0 , &pRbd->data_length); +writew (flags, &prbd->status); +writew (0 , &prbd->data_length); }static int fec_get_hwaddr (int dev_id,unsigned char *mac)
@@ -389,37 +374,26 @@ static int fec_set_hwaddr(struct eth_device *dev)writel (0 , &fec->eth->gaddr1);writel (0 , &fec->eth->gaddr2); -/* -* Set physical address -*/ +/* Set physical address */ writel ((mac[0 ] <<24 ) + (mac[1 ] <<16 ) + (mac[2 ] <<8 ) + mac[3 ], - &fec->eth->paddr1); + &fec->eth->paddr1);writel ((mac[4 ] <<24 ) + (mac[5 ] <<16 ) +0x8808 , &fec->eth->paddr2);return 0 ; } -/* -* Do initial configuration of the FEC registers -*/ +/* Do initial configuration of the FEC registers */ static void fec_reg_setup (struct fec_priv *fec) {uint32_t rcntrl; -/* -* Set interrupt mask register -*/ +/* Set interrupt mask register */ writel (0x00000000 , &fec->eth->imask); -/* -* Clear FEC-Lite interrupt event register(IEVENT) -*/ +/* Clear FEC-Lite interrupt event register(IEVENT) */ writel (0xffffffff , &fec->eth->ievent); - -/* -* Set FEC-Lite receive control register(R_CNTRL): -*/ +/* Set FEC-Lite receive control register(R_CNTRL): */ /* Start with frame length = 1518, common for all modes. */ rcntrl =PKTSIZE <<FEC_RCNTRL_MAX_FL_SHIFT ;
@@ -471,22 +445,19 @@ static int fec_open(struct eth_device *edev)#ifdef FEC_QUIRK_ENET_MAC /* Enable ENET HW endian SWAP */ writel (readl (&fec->eth->ecntrl) |FEC_ECNTRL_DBSWAP , - &fec->eth->ecntrl); + &fec->eth->ecntrl);/* Enable ENET store and forward mode */ writel (readl (&fec->eth->x_wmrk) |FEC_X_WMRK_STRFWD , - &fec->eth->x_wmrk); + &fec->eth->x_wmrk);#endif -/* -* Enable FEC-Lite controller -*/ +/* Enable FEC-Lite controller */ writel (readl (&fec->eth->ecntrl) |FEC_ECNTRL_ETHER_EN , - &fec->eth->ecntrl); + &fec->eth->ecntrl); +#if defined(CONFIG_MX25 ) || defined(CONFIG_MX53 ) || defined(CONFIG_MX6SL )udelay (100 ); -/* -* setup the MII gasket for RMII mode -*/ +/* setup the MII gasket for RMII mode */ /* disable the gasket */ writew (0 , &fec->eth->miigsk_enr);
@@ -544,9 +515,7 @@ static int fec_open(struct eth_device *edev)#endif debug ("%s:Speed=%i\n" , __func__, speed); -/* -* Enable SmartDMA receive task -*/ +/* Enable SmartDMA receive task */ fec_rx_task_enable (fec);udelay (100000 );
@@ -556,7 +525,7 @@ static int fec_open(struct eth_device *edev)#ifdef CONFIG_DM_ETH static int fecmxc_init(struct udevice *dev)#else -static int fec_init(struct eth_device *dev, bd_t* bd) +static int fec_init(struct eth_device *dev, bd_t *bd)#endif {#ifdef CONFIG_DM_ETH
@@ -574,9 +543,7 @@ static int fec_init(struct eth_device *dev, bd_t* bd)fec_set_hwaddr (dev);#endif -/* -* Setup transmit descriptors, there are two in total. -*/ +/* Setup transmit descriptors, there are two in total. */ fec_tbd_init (fec);/* Setup receive descriptors. */
@@ -587,18 +554,14 @@ static int fec_init(struct eth_device *dev, bd_t* bd)if (fec->xcv_type !=SEVENWIRE )fec_mii_setspeed (fec->bus->priv); -/* -* Set Opcode/Pause Duration Register -*/ +/* Set Opcode/Pause Duration Register */ writel (0x00010020 , &fec->eth->op_pause);/* FIXME 0xffff0020; */ writel (0x2 , &fec->eth->x_wmrk); -/* -* Set multicast address filter -*/ + +/* Set multicast address filter */ writel (0x00000000 , &fec->eth->gaddr1);writel (0x00000000 , &fec->eth->gaddr2); -/* Do not access reserved register for i.MX6UL */ if (!is_mx6ul ()) {/* clear MIB RAM */
@@ -639,22 +602,16 @@ static void fec_halt(struct eth_device *dev)#endif int counter =0xffff ; -/* -* issue graceful stop command to the FEC transmitter if necessary -*/ +/* issue graceful stop command to the FEC transmitter if necessary */ writel (FEC_TCNTRL_GTS |readl (&fec->eth->x_cntrl), - &fec->eth->x_cntrl); + &fec->eth->x_cntrl);debug ("eth_halt: wait for stop regs\n" ); -/* -* wait for graceful stop to register -*/ +/* wait for graceful stop to register */ while ((counter--) && (!(readl (&fec->eth->ievent) &FEC_IEVENT_GRA )))udelay (1 ); -/* -* Disable SmartDMA tasks -*/ +/* Disable SmartDMA tasks */ fec_tx_task_disable (fec);fec_rx_task_disable (fec);
@@ -663,7 +620,7 @@ static void fec_halt(struct eth_device *dev)* Note: this will also reset the BD index counter! */ writel (readl (&fec->eth->ecntrl) & ~FEC_ECNTRL_ETHER_EN , - &fec->eth->ecntrl); + &fec->eth->ecntrl); fec->rbd_index =0 ; fec->tbd_index =0 ;debug ("eth_halt: done\n" );
@@ -766,9 +723,7 @@ static int fec_send(struct eth_device *dev, void *packet, int length)*/ readl (addr + size -4 ); -/* -* Enable SmartDMA transmit task -*/ +/* Enable SmartDMA transmit task */ fec_tx_task_enable (fec);/*
@@ -813,8 +768,8 @@ static int fec_send(struct eth_device *dev, void *packet, int length) out:debug ("fec_send: status 0x%x index %d ret %i\n" , -readw (&fec->tbd_base[fec->tbd_index].status), - fec->tbd_index, ret); +readw (&fec->tbd_base[fec->tbd_index].status), + fec->tbd_index, ret);/* for next transmission use the other buffer */ if (fec->tbd_index) fec->tbd_index =0 ;
@@ -848,9 +803,7 @@ static int fec_recv(struct eth_device *dev)int i;ALLOC_CACHE_ALIGN_BUFFER (uchar, buff,FEC_MAX_PKT_SIZE ); -/* -* Check if any critical events have happened -*/ +/* Check if any critical events have happened */ ievent =readl (&fec->eth->ievent);writel (ievent, &fec->eth->ievent);debug ("fec_recv: ievent 0x%lx\n" , ievent);
@@ -868,7 +821,7 @@ static int fec_recv(struct eth_device *dev)if (ievent &FEC_IEVENT_HBERR ) {/* Heartbeat error */ writel (0x00000001 |readl (&fec->eth->x_cntrl), - &fec->eth->x_cntrl); + &fec->eth->x_cntrl); }if (ievent &FEC_IEVENT_GRA ) {/* Graceful stop complete */
@@ -879,7 +832,7 @@ static int fec_recv(struct eth_device *dev)fec_halt (dev);#endif writel (~0x00000001 &readl (&fec->eth->x_cntrl), - &fec->eth->x_cntrl); + &fec->eth->x_cntrl);#ifdef CONFIG_DM_ETH fecmxc_init (dev);#else
@@ -911,22 +864,16 @@ static int fec_recv(struct eth_device *dev)if (!(bd_status &FEC_RBD_EMPTY )) {if ((bd_status &FEC_RBD_LAST ) && !(bd_status &FEC_RBD_ERR ) && - ((readw (&rbd->data_length) -4 ) >14 )) { -/* -* Get buffer address and size -*/ + ((readw (&rbd->data_length) -4 ) >14 )) { +/* Get buffer address and size */ addr =readl (&rbd->data_pointer); frame_length =readw (&rbd->data_length) -4 ; -/* -* Invalidate data cache over the buffer -*/ +/* Invalidate data cache over the buffer */ end =roundup (addr + frame_length,ARCH_DMA_MINALIGN ); addr &= ~(ARCH_DMA_MINALIGN -1 );invalidate_dcache_range (addr, end); -/* -* Fill the buffer and pass it to upper layers -*/ +/* Fill the buffer and pass it to upper layers */ #ifdef CONFIG_FEC_MXC_SWAP_PACKET swap_packet ((uint32_t *)addr, frame_length);#endif
@@ -954,7 +901,7 @@ static int fec_recv(struct eth_device *dev) &fec->rbd_base[i]); }flush_dcache_range (addr, - addr +ARCH_DMA_MINALIGN ); + addr +ARCH_DMA_MINALIGN ); }fec_rx_task_enable (fec);
@@ -1273,7 +1220,8 @@ static int fecmxc_probe(struct udevice *dev) goto err_phy;/* Reset chip. */ -writel (readl (&priv->eth->ecntrl) |FEC_ECNTRL_RESET , &priv->eth->ecntrl); +writel (readl (&priv->eth->ecntrl) |FEC_ECNTRL_RESET , + &priv->eth->ecntrl); start =get_timer (0 );while (readl (&priv->eth->ecntrl) &FEC_ECNTRL_RESET ) {if (get_timer (start) > (CONFIG_SYS_HZ *5 )) {
drivers/net/fec_mxc.h +8 -19
@@ -14,21 +14,14 @@* SPDX-License-Identifier: GPL-2.0+ */ - #ifndef __FEC_MXC_H #define __FEC_MXC_H -void imx_get_mac_from_fuse(int dev_id, unsigned char *mac); - -/** - * Layout description of the FEC - */ +/* Layout description of the FEC */ struct ethernet_regs { + /* [10:2]addr = 00 */ -/* [10:2]addr = 00 */ - -/* Control and status Registers (offset 000-1FF) */ - + /* Control and status Registers (offset 000-1FF) */ uint32_t res0[1]; /* MBAR_ETH + 0x000 */ uint32_t ievent; /* MBAR_ETH + 0x004 */ uint32_t imask; /* MBAR_ETH + 0x008 */
@@ -71,8 +64,7 @@ struct ethernet_regs {uint32_t emrbr;/* MBAR_ETH + 0x188 */ uint32_t res12[29 ];/* MBAR_ETH + 0x18C-1FC */ -/* MIB COUNTERS (Offset 200-2FF) */ - +/* MIB COUNTERS (Offset 200-2FF) */ uint32_t rmon_t_drop;/* MBAR_ETH + 0x200 */ uint32_t rmon_t_packets;/* MBAR_ETH + 0x204 */ uint32_t rmon_t_bc_pkt;/* MBAR_ETH + 0x208 */
@@ -174,7 +166,6 @@ struct ethernet_regs {#define FEC_IMASKT_RL 0x00100000#define FEC_IMASK_UN 0x00080000 -#define FEC_RCNTRL_MAX_FL_SHIFT 16#define FEC_RCNTRL_LOOP 0x00000001#define FEC_RCNTRL_DRT 0x00000002
@@ -233,9 +224,7 @@ struct fec_bd {uint32_t data_pointer;/* payload's buffer address */ }; -/** -* Supported phy types on this platform -*/ +/* Supported phy types on this platform */ enum xceiver_type {SEVENWIRE ,/* 7-wire */ MII10 ,/* MII 10Mbps */
@@ -244,9 +233,7 @@ enum xceiver_type { RGMII, /* RGMII */ }; -/** -* @brief i.MX27-FEC private structure -*/ +/* @brief i.MX27-FEC private structure */ struct fec_priv {struct ethernet_regs *eth;/* pointer to register'S base */ enum xceiver_type xcv_type;/* transceiver type */
@@ -270,6 +257,8 @@ struct fec_priv {#endif }; +void imx_get_mac_from_fuse (int dev_id,unsigned char *mac); +/** * @brief Numbers of buffer descriptors for receiving *
Signature · 1 line
1.9.1
PATCH v3 4/13 dm: net: fec: Add .read_rom_hwaddr
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Add .read_rom_hwaddr on dm eth_ops.
--- drivers/net/fec_mxc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/net/fec_mxc.c +9 -9
@@ -1165,12 +1165,21 @@ int fecmxc_register_mii_postcall(struct eth_device *dev, int (*cb)(int))#else +static int fecmxc_read_rom_hwaddr (struct udevice *dev) +{ +struct fec_priv *priv =dev_get_priv (dev); +struct eth_pdata *pdata =dev_get_platdata (dev); + +return fec_get_hwaddr (priv->dev_id, pdata->enetaddr); +} +static const struct eth_ops fecmxc_ops = { .start = fecmxc_init, .send = fecmxc_send, .recv = fecmxc_recv, .stop = fecmxc_halt, .write_hwaddr = fecmxc_set_hwaddr, + .read_rom_hwaddr = fecmxc_read_rom_hwaddr, };static int fec_phy_init (struct fec_priv *priv,struct udevice *dev)
@@ -1200,7 +1209,6 @@ static int fecmxc_probe(struct udevice *dev)struct fec_priv *priv =dev_get_priv (dev);struct mii_dev *bus =NULL ;int dev_id =-1 ; -unsigned char ethaddr[6 ];uint32_t start;int ret;
@@ -1235,14 +1243,6 @@ static int fecmxc_probe(struct udevice *dev)fec_set_dev_name ((char *)dev->name, dev_id); priv->dev_id = (dev_id ==-1 ) ?0 : dev_id; - ret =fec_get_hwaddr (dev_id, ethaddr); -if (!ret) { -debug ("got MAC%d address from fuse: %pM\n" , dev_id, ethaddr); -memcpy (pdata->enetaddr, ethaddr,6 ); -if (!getenv ("ethaddr" )) -eth_setenv_enetaddr ("ethaddr" , ethaddr); - } -return 0 ; err_timeout:
Signature · 1 line
1.9.1
PATCH v3 5/13 ARM: dts: imx6qdl-icore: Add FEC support
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Add FEC dts support for Engicam i.CoreM6 dql modules.
--- arch/arm/dts/imx6qdl-icore.dtsi | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
arch/arm/dts/imx6qdl-icore.dtsi +24 -0
@@ -75,6 +75,14 @@ assigned-clock-parents = <&clks IMX6QDL_CLK_OSC>; }; +&fec { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_enet>; + phy-reset-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>; + phy-mode = "rmii"; + status = "okay"; +}; + &gpmi { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpmi_nand>;
@@ -118,6 +126,22 @@ }; &iomuxc { + pinctrl_enet: enetgrp { + fsl,pins = < + MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN 0x1b0b0 + MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x1b0b1 + MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0 + MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1 0x1b0b0 + MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0 0x1b0b0 + MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1 0x1b0b0 + MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0 0x1b0b0 + MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0 + MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0 + MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23 0x1b0b0 + MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x1b0b0 + >; + }; + pinctrl_flexcan1: flexcan1grp { fsl,pins = < MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x1b020
Signature · 1 line
1.9.1
PATCH v3 6/13 icorem6: Use CONFIG_DM_ETH support
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Use CONFIG_DM_ETH and remove board_eth_init code from board files.
--- arch/arm/cpu/armv7/mx6/Kconfig | 1 + board/engicam/icorem6/icorem6.c | 71 ------------------------------------ configs/imx6qdl_icore_mmc_defconfig | 1 - configs/imx6qdl_icore_nand_defconfig | 1 - 4 files changed, 1 insertion(+), 73 deletions(-)
arch/arm/cpu/armv7/mx6/Kconfig +1 -0
@@ -108,6 +108,7 @@ config TARGET_MX6Q_ICORE select MX6QDL select OF_CONTROL select DM + select DM_ETH select DM_GPIO select DM_MMC select DM_THERMAL
board/engicam/icorem6/icorem6.c +0 -71
88 lines not on this page · raw message
configs/imx6qdl_icore_mmc_defconfig +0 -1
@@ -30,7 +30,6 @@ CONFIG_CMD_FS_GENERIC=y CONFIG_OF_LIBFDT=y CONFIG_FEC_MXC=y CONFIG_MXC_UART=y -CONFIG_NETDEVICES=y CONFIG_IMX_THERMAL=y CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y
configs/imx6qdl_icore_nand_defconfig +0 -1
@@ -24,7 +24,6 @@ CONFIG_OF_LIBFDT=y CONFIG_FEC_MXC=y CONFIG_MXC_UART=y CONFIG_NAND_MXS=y -CONFIG_NETDEVICES=y CONFIG_IMX_THERMAL=y # CONFIG_BLK is not set # CONFIG_DM_MMC_OPS is not set
Signature · 1 line
1.9.1
PATCH v3 7/13 video: Kconfig: Add VIDEO_IPV3 entry
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Added kconfig entry for CONFIG_VIDEO_IPV3 driver.
--- drivers/video/Kconfig | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/video/Kconfig +7 -0
@@ -443,6 +443,13 @@ config VIDEO model. Video drivers typically provide a colour text console and cursor. +config VIDEO_IPUV3 + bool "i.MX IPUv3 Core video support" + depends on VIDEO && MX6 + help + This enables framebuffer driver for i.MX processors working + on the IPUv3(Image Processing Unit) internal graphic processor. + config CFB_CONSOLE bool "Enable colour frame buffer console" depends on VIDEO
Signature · 1 line
1.9.1
PATCH v3 8/13 imx6: icorem6: Add framebuffer support
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Add IPUv3 framebuffer support for Engicam i.CoreM6 qdl board.
--- board/engicam/icorem6/icorem6.c | 113 +++++++++++++++++++++++++++++++++++ configs/imx6qdl_icore_mmc_defconfig | 3 + configs/imx6qdl_icore_nand_defconfig | 3 + include/configs/imx6qdl_icore.h | 12 ++++ 4 files changed, 131 insertions(+)
board/engicam/icorem6/icorem6.c +113 -0
@@ -18,6 +18,7 @@#include <asm/arch/mx6-pins.h> #include <asm/arch/sys_proto.h> #include <asm/imx-common/iomux-v3.h> +#include <asm/imx-common/video.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -90,6 +91,113 @@ static void setup_gpmi_nand(void) }#endif +#if defined(CONFIG_VIDEO_IPUV3 ) +static iomux_v3_cfg_t const rgb_pads[] = { +IOMUX_PADS (PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK ), +IOMUX_PADS (PAD_DI0_PIN15__IPU1_DI0_PIN15 ), +IOMUX_PADS (PAD_DI0_PIN2__IPU1_DI0_PIN02 ), +IOMUX_PADS (PAD_DI0_PIN3__IPU1_DI0_PIN03 ), +IOMUX_PADS (PAD_DISP0_DAT0__IPU1_DISP0_DATA00 ), +IOMUX_PADS (PAD_DISP0_DAT1__IPU1_DISP0_DATA01 ), +IOMUX_PADS (PAD_DISP0_DAT2__IPU1_DISP0_DATA02 ), +IOMUX_PADS (PAD_DISP0_DAT3__IPU1_DISP0_DATA03 ), +IOMUX_PADS (PAD_DISP0_DAT4__IPU1_DISP0_DATA04 ), +IOMUX_PADS (PAD_DISP0_DAT5__IPU1_DISP0_DATA05 ), +IOMUX_PADS (PAD_DISP0_DAT6__IPU1_DISP0_DATA06 ), +IOMUX_PADS (PAD_DISP0_DAT7__IPU1_DISP0_DATA07 ), +IOMUX_PADS (PAD_DISP0_DAT8__IPU1_DISP0_DATA08 ), +IOMUX_PADS (PAD_DISP0_DAT9__IPU1_DISP0_DATA09 ), +IOMUX_PADS (PAD_DISP0_DAT10__IPU1_DISP0_DATA10 ), +IOMUX_PADS (PAD_DISP0_DAT11__IPU1_DISP0_DATA11 ), +IOMUX_PADS (PAD_DISP0_DAT12__IPU1_DISP0_DATA12 ), +IOMUX_PADS (PAD_DISP0_DAT13__IPU1_DISP0_DATA13 ), +IOMUX_PADS (PAD_DISP0_DAT14__IPU1_DISP0_DATA14 ), +IOMUX_PADS (PAD_DISP0_DAT15__IPU1_DISP0_DATA15 ), +IOMUX_PADS (PAD_DISP0_DAT16__IPU1_DISP0_DATA16 ), +IOMUX_PADS (PAD_DISP0_DAT17__IPU1_DISP0_DATA17 ), +}; + +static void enable_rgb (struct display_info_t const *dev) +{ +SETUP_IOMUX_PADS (rgb_pads); +} + +struct display_info_t const displays[] = { + { + .bus =-1 , + .addr =0 , + .pixfmt =IPU_PIX_FMT_RGB666 , + .detect =NULL , + .enable = enable_rgb, + .mode = { + .name ="Amp-WD" , + .refresh =60 , + .xres =800 , + .yres =480 , + .pixclock =30000 , + .left_margin =30 , + .right_margin =30 , + .upper_margin =5 , + .lower_margin =5 , + .hsync_len =64 , + .vsync_len =20 , + .sync =FB_SYNC_EXT , + .vmode =FB_VMODE_NONINTERLACED + } + }, +}; + +size_t display_count =ARRAY_SIZE (displays); + +static void setup_display (void ) +{ +struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR ; +struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR ; +int reg; + +enable_ipu_clock (); + +/* Turn on LDB0,IPU,IPU DI0 clocks */ + reg =__raw_readl (&mxc_ccm->CCGR3); + reg |= (MXC_CCM_CCGR3_LDB_DI0_MASK |0xffff ); +writel (reg, &mxc_ccm->CCGR3); + +/* set LDB0, LDB1 clk select to 011/011 */ + reg =readl (&mxc_ccm->cs2cdr); + reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK | +MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK ); + reg |= (3 <<MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET ) | + (3 <<MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET ); +writel (reg, &mxc_ccm->cs2cdr); + + reg =readl (&mxc_ccm->cscmr2); + reg |=MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV ; +writel (reg, &mxc_ccm->cscmr2); + + reg =readl (&mxc_ccm->chsccdr); + reg |= (CHSCCDR_CLK_SEL_LDB_DI0 << +MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET ); +writel (reg, &mxc_ccm->chsccdr); + + reg =IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES | +IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_HIGH | +IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW | +IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG | +IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT | +IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG | +IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT | +IOMUXC_GPR2_LVDS_CH1_MODE_DISABLED | +IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0 ; +writel (reg, &iomux->gpr[2 ]); + + reg =readl (&iomux->gpr[3 ]); + reg = (reg & ~IOMUXC_GPR3_LVDS0_MUX_CTL_MASK ) | + (IOMUXC_GPR3_MUX_SRC_IPU1_DI0 << +IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET ); +writel (reg, &iomux->gpr[3 ]); +} +#endif /* CONFIG_VIDEO_IPUV3 */ +int board_early_init_f (void ) {SETUP_IOMUX_PADS (uart4_pads);
@@ -105,6 +213,11 @@ int board_init(void)#ifdef CONFIG_NAND_MXS setup_gpmi_nand ();#endif + +#ifdef CONFIG_VIDEO_IPUV3 +setup_display (); +#endif +return 0 ; }
configs/imx6qdl_icore_mmc_defconfig +3 -0
@@ -33,6 +33,9 @@ CONFIG_MXC_UART=y CONFIG_IMX_THERMAL=y CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_VIDEO=y +CONFIG_VIDEO_IPUV3=y +CONFIG_SYS_CONSOLE_IS_IN_ENV=y CONFIG_SPL_LIBDISK_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y
configs/imx6qdl_icore_nand_defconfig +3 -0
@@ -29,6 +29,9 @@ CONFIG_IMX_THERMAL=y # CONFIG_DM_MMC_OPS is not set CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_VIDEO=y +CONFIG_VIDEO_IPUV3=y +CONFIG_SYS_CONSOLE_IS_IN_ENV=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y
include/configs/imx6qdl_icore.h +12 -0
@@ -149,6 +149,18 @@# define CONFIG_PHY_SMSC #endif +/* Framebuffer */ +#ifdef CONFIG_VIDEO_IPUV3 +# define CONFIG_IPUV3_CLK 260000000 +# define CONFIG_IMX_VIDEO_SKIP + +# define CONFIG_SPLASH_SCREEN +# define CONFIG_BMP_16BPP +# define CONFIG_VIDEO_BMP_RLE8 +# define CONFIG_VIDEO_LOGO +# define CONFIG_VIDEO_BMP_LOGO +#endif +/* SPL */ #ifdef CONFIG_SPL # ifdef CONFIG_NAND_MXS
Signature · 1 line
1.9.1
PATCH v3 9/13 imx6: icorem6: Add custom splashscreen support
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Add custom splashscreen, engicam.bmp support for
Engicam i.CoreM6 qdl board.
--- include/configs/imx6qdl_icore.h | 2 ++ tools/logos/engicam.bmp | Bin 0 -> 60214 bytes 2 files changed, 2 insertions(+) create mode 100755 tools/logos/engicam.bmp
include/configs/imx6qdl_icore.h +2 -0
@@ -37,6 +37,7 @@/* Default environment */ #define CONFIG_EXTRA_ENV_SETTINGS \ "script=boot.scr\0" \ + "splashpos=m,m\0" \ "image=zImage\0" \ "console=ttymxc3\0" \ "fdt_high=0xffffffff\0" \
@@ -155,6 +156,7 @@# define CONFIG_IMX_VIDEO_SKIP # define CONFIG_SPLASH_SCREEN +# define CONFIG_SPLASH_SCREEN_ALIGN # define CONFIG_BMP_16BPP # define CONFIG_VIDEO_BMP_RLE8 # define CONFIG_VIDEO_LOGO
tools/logos/engicam.bmp new file binary +0 -0
zZMP_QpgpJsoj at Jv8r|M)QSLx{PzySNI?y$SWWPnZ1MNXA=mhFO*BGvLi*g6rgIdrD z)Pb%sl&3Aq9cT|~K_^fLy2dbfTa-J{9 at K(Ppbm5mDcDND0iSes0E!s9q8J$@V{-g zAn*Ae<o}&O9q8J$+Xl1+?Ld1_3p#;1&^4xQw?(-F?LjT*1nNN7n9}_g<qot5wV)HI z16^afp>khpgpJsoj at Jv8liC7qTGS@pcZrjb)aj6Nw-D01MNXA=mhFO*8rjRx<$DI z?LjT*1nNN7ri1@ovjy!ydr%8Hf&9N~gw}S8atGRjTF?p9fvypDyDiEcXb);ZCr}5v zMo8|rD0iSes0E!s9q1b2+HO(qKzmRNI)OUSHA4BcMY#j*KrP6>Oj{B^KOfB2ik*L z(5d;|9x)$9ege1HO=Snzxn*x*FgB^Z~69eEfH8EutZ>qz!HHa0!svz2rLm;BCteY ziNF$p-%SMWzZ**yLtZZe_sz|@%lWYK*Wr9|?zVY7YZlF~8iBhz2OQWR=i9PaylP at z zL;2dpMZtn0wvTRECSD^eucUKx83RLv#KA4A#4Dxe$!hPHl3+Wy)1}$a%x^d-Q5*= zAHLyU!N5i3Gb1qi*iZuFaC at e4i>@a};P&{r!D8aDezJ{=x~D~;{%4)z_u?>vu{!K z%n01)FAfnJ=jFNbnR$AWuFaRi0VkKsX~dI~^gJ~;yA8~0FOQYa%hXdeO+9lMLdo*V z^C at Y1mXa@flGNZ>o+_V}t0(CBdN{0B3m~45sOP9~dZK at Eec3XeldTum@^z1r89&R( z)QhL;84A{YMt}VI(e-1_eYN&GJ%_k&HaC2(=XTp{UdF=vdVPcV_4;MRKLZ3=M?8l5 z at rP;GC?pP*c-(K3uDrI;fPsSz5}Ai)r=+%VM~3e4;%aFltt37)2JC>EoB3?OnZ>V3 z)}R=pKDxv=#ie?M6;%>ZA6DKC@%nih8o>24hnHLDQv97chFS+1xzQ~7w)CTtR<xdT z(D}j7aU3r8GhU=sTM+9N$Gkzeh)nv2}T{ss!f>Sm{A{}&H3hoBObQo%OCE;!NX)U zct-NjG%C-OY^dSS%{+AuQ~aRfem5ne>lytT2+*K#s{C{FrV=vtt{WSYM9%MxOPaN zAUl$*p*)#c)3cFH1CUH{F%N<1_SZ|wdt#a$HV9fk<*$iF@{ojR3k@<j>husBoC#@ z!%=nRs#C&;s%nattEeDc0N)NKS9QmypC^Rmo at fYvxXWZv%5w@#oo+2QuFZrH=pGh z7ek&sDN$?;W%k_4I|E0sW;@Lrh^R%%U?wXvwKSHs8m85%^lOR&pI1k+vYX_X2~v*- z-WMOFnC+>~BTvygvmQ^dHCUnKa+>1Q7#Z{sA12|yfaXD^W1Pt8N$*m9ADIpR{JP zQZ3;oh4I09(hua9g~Pq4s343BWHVLQwhmrODN4cOns9ZLE((0A+oaZ+$tAuV<@xd zRz|eTH><~<g}#sP0N<oBT;@Z#N?4|)b?SkJ|99jC-9W=1H+|blXBwk1w_y!8vn{ zx1zppiibSmL^U}z+z@^apxl;9v|0<Yi&Dv<xw)RA%vzZTEyg*o<OQ?b2uO9(^pz64 z-Z5g4^?_|Nkd%1z6<!h(q%7BHw$GAjR#%<*_DdFY^Y(+&5Y<^R_e&NlPje>6RBcD zNwR9C$S18OXTnXeqBNl#5bgw|GPf}{dd0&fnPihJWhoFnqwaC$(I(Vm2PgO7;XT z32?H(7+MVIZ%7dM5iH+M@=5__&bg9f_>M&R!6==^&9FGr6RbD*3>Zny^d*N>d}f;n zl12cUthz;Il$aWX3oX~E4D3 at oWfAcFKsc8S7W)|S8B=N5OZ*od>lgIL>bqb%{!R z=l)6qVtMHAN{(Pg{aNFTGjVr0((o7zo)LmT<r$kKy4Y6 at Ni{ZAc^Rr{Nu2f4^_Ks6 zCLl&%UqEJoOcTD#z?G9q(Xrw<xX}lSRE=S!f1Ql&p|L(v++D)ko)!cX)NdZ#^|57i zic@7hf==>So*&HpV?B at QuJJqJJas=Tlaa at nco=;T1Hln=Cktj9>SC7TPYZNTSLC6j zRT%hJ$#~XTSv(G!!-HB<AVhTRCoD3mKcn*6!(6);u^w(>qo at mL5hjDoR-P_fil}T z?*QV_@=$rAoNFit+(dyx*NfJ#;u6lYR+B9=8;yK3DNA^NHu#1fs{kSIf0w04YB?lZ zSJv{3%1QEE6*W4!JP_<Yt~9#nK)~K_)}@Wxl_!j*@jZi&GKrL#iouF4ffr-GX%oL zLH*C7o6V)Qr!pK;a{hFjqn17xB}mBzZYX)=j56hto_5Z8DyWQlc?Hh3ab;b3eVFkG zK?brLsioYBYWV?if}t*n at +AX(qr0T8BE?e*9LK_Uwx{Ul?(#hc6}f1@K;*+aYJD(f z{dSA;*olk2k`?7Ns5ecCckYHkgMXU1MEpdf1{x|keJYsIO!y*Q_DnBF0j!Q?rB<FL z1z;-bay0#TlJBkI?gHL+t``jA5njrqV3^69?5>sy4~*-l&Nu<n}M3|i#;P1GYM9Q zpB{ZY>gS(0PRb-x-BV|4JA#KP!=VMbEGzMFIG}Qvvn9^4Ok-brb?D9x at iSj!?%E zk$PDu8DJYalSkc|P0 at G7ev{Jz=Y at Id#tiec?n!kqFzK6ZsMC6Mc+Atwj3#*QFgnD z7BOb>*xp|5mW(EEZ0JVgE}b)W4DB#QVzudQU?*k5NH{8ZYRUXN}7Qz=c-CLNRMA z at KW$|MkJ=i+cw$M6e)X7SAW=Jd-B-c5bn17fy-J$t+2j+WBQJv at xYl+k>mKtj>kyV zV(KQTyT&Ko{L}jnzdpMD=l$6045cSl+0YU%#Q at 5P0{UQ3bJDacsHYH;3P(%@3wPV~ zgL~x(ffUpl90am}8<a@eosuag4C(glby&<~*pWFOK2EwmeV|d)5H+bX+fb+Fsrb-+ z&67f6p9a-q_B|g1acc6|-d;2P(j!3MJCKaz>tH!~$58&-2k1?dZcLCxkfxDxebA=V zVLZ-}{pHgnG<c>@zvN+D>#a8P_m)LgjAfd%6QEi2F(^yDmo2|(nb8bA!CyrY;InA zLcfh&8uYL<v*M61ZH#&3;Yjq}I36Hx5-pQSL4=MfF=2d>2LrbhV~3Ip<oIddKfp( z_tJB9&S|o<EG21<{cegLa}A}y<tX%F;|WB)r?ldS2Q^a3WcnX^GNvaBgcZg5i#Tj zanmhh1H8a^{W^Jd at QlBvVWw0YejgJvr&K74pv4<bi<AHvF7p(W?~{^afYn<bzR0L zV~h;r4pa25B+KINJ;C?F*CAd%4D!U(9=nhyGZK6x5%cvQ|}dIvlzFmsxQ50;%n zs%yo3&JtU$A+DkMM+!2A4uXJ)snF(L@ZjZFmJxk*FH9BoVc8LnCvT*e}LIZNo5# z^ity>28u#l%^G!&$BC8mmWROw!o<((Wrc at h_0o~8ZWt(OifX0f~D3X;uoh;$(iY6 z<aF<9r6PwaXVo02GplW}1+t!x;emg@ATDJL*Jx|-!I&lrtR1#(VwSw0^Yq}Cl22(M zmy(*S))>nCsioI#mu~tp0i8gya<r_=U>Zr&m&2|U$k=4CF;@c>ENY~$ra at Cm%A_m= zY?$1R0=aYJZ<3TO{J&6H+cKfvdyJ?c(FdV*ybC>T-Kn0)EW;8Lim&qRJ%)aKh zq(z at lk~e^l*g-<QXDziTmx3n~K3vMD^!JDa}}AlTG+I62TM_k{aO=f)}7;)rQJV zb~j1<Wi}q_FF9*wxTIvP)Oe<##|{oA9_-0Nt$s^xljDs5E+}8jk)P|EP2M3yA5-5 ziv{;MAH_qtVK73(509fFM67+N#S5=UoQsD~GLk9=;K2xXnb>pVpzNif#}1b{QNukJ zng%nQe%@n#B~2?1VoY2|H;iI%GNf7(TKh<HXA;Qgnv1s*^dh2e%6rq$xx-qm*X< zC;G%XEED+VA#;ClWK4_T|5awhjJaGycQCglEx$Hd5@IohEg02Aju>H{cMOvT(W++ zWK2ezJTlCvbQ%&l2=V9RvctI3Dy#-Su*?(2(zGi$x<OJLa0q|uamBw;pmaE^Q^ z$q#cjidttd^Je at D)3;;6*od<!)DtAGP7-w<alnt@(OX}&w-C5E}!)|_?@r<D+|A@ zHL*=LW#?ucPvYeTCrIR^iAuWJXW``voRy1~N#DWqB)G~#(@;HsAYX8jlpmenQ at 6S zG&$<M-lO(87{|&AJWwQX6zP-zOcdqr(JYx$Hw@O0#m_sC8aR$BJ~0sEFaVyc+}F~J z1PtLI0qDwa&l;qXP)QoyopYkxXUrFrHM?P$_{~EcgV=k_t>OU7q}O~gZJ6_aKwu{ z8dvdHE@~GCTXkHoE>9ex1gjd{Vr=6u8nONEFea$zF{!umn{%RhB?|Xh*L0D9uHMX zbh+}Cc%bFzK)YnntfFvZvySF2Jx^%hYGePeZH2(0nw8uBzAAhCxy3S3(vl3HYjX zMJYUI?K7iUAhg+H#Bhby9>2IyEJ{4EwzUpK#HsSvd=t5zV8aF(XSF$p51$@G;?t)O z^odDX+W<s8f@oH^-^QmNOSs>5=25}!{7i;e#}<N?f1~wB$3|Ai8qO|jg1btpTg9( zsxX@R>6ZedXeIFAh<PGXX-vh<^A|oKZZ(ThD>mYA(TU0Dt3Av;8*TwczT<egyu-n z(7EY~CXnP}(Nh@+b|I-VE|QH%1QF>+_Ch484FOyViz$j~0;pauaoSd9;+0JKCgsr6 zl}YI12r4HL1Zv5Y=bcXiXwxMthj2Ws7;~)zPLbI2P;6wN_8RAVBb}i5+3w3rRqj? z+J at nH&^K+_$VrG8xkIoKcJtVMBqL=s3C*glgAdVHGEmO!D-2^CzfY1~NHy~~YDV+# zoLANd28;?s=4ER$iy$VMQY{Vm^Kh=Y-+jGe)}sAsw(t19q~;tbjU}@5!jQ^93DQp z#PU++o9sNN2a<f(OiG(lQmie?5~Oy{_V)Kk_<=yJoDczKHG;Z$$+Vzjsni=v<MdQ zdlh5>jn9qqV=P1t!gtM`sMLV4ZkU7s6$)Cm%hzP^hVJL2 at kRos(Tx<yE9^Gr=C!9c z(V|r#s$B?mWb<fm+R@pK!VnA{iiFZxINVEAET1<4SGB*U>$3i#+W$_41Nanvi at 4=T z97$EicIGfO;-^MtBxEb)MF>@29vy2TIT=fRH>a#flRhX8whcMte6N*m&=v&5AB7 at s zj_TJ{?Ni}!WIXiVpl~aEdG6+huOraoLjMq&va-tzIJ|q8vtk|3=6u5qLrpiAP3B2X z9iEB52O_mC$@- at 32@;UFHKNT|J!nLuIOnRR2%8uz<5>hpe96^Cc~M13a>nUS!wG zHHkt_pq8KOhgooV_b!dBdedt)bAp@^!*pdZW@;*OR&>&e_^7XOQCiY&S6FV$EizhJ z#S2Wydu|HBy>4E9Qv4XxV&=g7m0Sl#UVoFs6sy~6eRn=SYlpwX%p=9jG^i-2JV|QE zxL!gTHSx)w at gzePgRK^3^*40f3E8 at XKS>fso~hq!Q{O|au at ns9jFlNR3!c}YzK|h^ z$baOvkY4OJy>A6BgCO#<=d;}U1HiWusW<g4DS8_|D5gy;rKBCIMJkYJ*ECzKeBK; zDfFe8?*m^Yb;(I9rg%k*6Pr=tU~)nOpM2MNu#3)q3n&|NE3T35Xva}~dwyDad}_W zMk5ZlE~N0)BawRhvYynq4&U$y6Yy~MZ?bQS1)>tGWRWkYV1Rhy;PE+cR$#49*E4oa zMiNtIKp<EsC#@bu|6OqF+vRNLoGbwA{_9uFdj<5IhRb*<>7)qkm4>Zo@|c!8?eqK zIX0QE at W2Ci8;Aos(3tL+wc+(7M~mKK~aBCxtL9A~+p|XAeM_%-G1lbcah1t{)$ zZ3!|Q4;*ia@#AdtT44aO6$#m?<XwGzXXg^HJx~b>O4eF{BWjL-#d>u-^l$fi<w&+ zDsFrs9ttJmPOMCfUKUfILX2%ER-<A=G*M#^A!6%VMGaxDI&p<nRYZD@N!2*(LC;>Z zDaT1<(&Xs1%Yv|8U9fD04r2j7+)Z!ED6LDbju7A?$huy9yRp^Ez0K7{AOK-7qjG zY7t^}sU>P3<d!yRe?xXA*m&qr3-V-rV7MrSq-qc;Aj6l>4z2j#e<g^l<NtN@H|<u zPyC6M(M2icMIArZ4`PhaV;)$0ZgaYOw7yA#N4e}{edT3Fb-YMVTJY>s0qX!BY8wVE zRK3*73<^keD~*Ruc_d}#m2qM2>rMYAMr{UU-$Siptx+7Bc_FOLAgjk|5l5pD%{2i= zGn=~Lxu#X|+B{5KB1F2furlk1 at KCX-dV=GWp?%f!-NWn610Ep!esQre^fpySimaLE zQNb at 8Cgpdk&fYL80V_TL$3km+)|jW_GTu{9X4bT3zTzQeJd|l*HPL03t86f=vJ+JC zP&sx9(+g)%_)Zl3;Yr9^SC$9duB=wc_|^RL>Kf!yfTf(hVN6Cv?Zw|v^EWK^ih! zzJ^Lh!-L3xyTn}nl46!BEfSv$uW1^>LnT|K8D4N at 6AJo{hlHP7F{JS4RTtYWDkC z9(WJ0Z?Rz%id?q3@>XJR6P-Qj0ikYAF3V|4BdVB_udOE5*r+_d^=1{*eh?3(O#{& zM8*ejeEs1We}43SI}X61I51>KX1?ED%-X88ytcDK)yiv4W$7*iv(Wmi!JxaNg+!@4 zTZmP(D)!2T5p1%5pEV6Rj>X2Nc at Pgpnsbm$M2bn*Kacg_y>AcI)o5!>@*tK|JaO~ zzQA0aGD=gb^52rJ|GE_JCU#)fUTM|KET2i}ARhdHwLLdnot-*i7MWJ5X$zmN+$|>R z;J~iy5e5XZ5VIEoD>fX6VChQwi%7j(2QYVJZ|Mz1lrZ#X+8c?Z-nWE{-}45|8nAA zGOCq_kH^UIgT%B<0AWs5h!-0GTD#sgd at -=8oj7`xd=RXbb1U1aM;JOm$P<}{NfRq zcDgo#3wd4p;-)SNo)Lkse1@ohZ15R|FFIZ*0$=kg<L~N~#S6vnyA$h1wuAAmspk&g zUC6#~hl(SuaTG|eoOFEO;dy)BnJ*5IgpXE^%L|L|7b%b50yNkdddu$n4bdC(%$bCb zHWxH}|L6#RG;$OL(z!fGe*bWQhZ7Mo^t+I6B1Uh^N%{-*vK;8jx%LL}+X~Vf^S1v? zg9brgKd9fPdt*U)+wQI}_$V%4hx285efg$Qao?=*i-;HeKH_@(V>NF&N{jPL1eORa p5m+LyL|}=)5`iTGO9Yk(ED=~DutZ>qz!HHa0!svz2uz8<{{y=j%HjY3
literal 0
HcmV?d00001
Signature · 1 line
1.9.1
PATCH v3 10/13 i2c: Kconfig: Add SYS_I2C_MXC entry
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Added kconfig for SYS_I2C_MXC driver.
--- drivers/i2c/Kconfig | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/i2c/Kconfig +8 -0
@@ -109,6 +109,14 @@ config SYS_I2C_INTEL the I2C API meaning that any I2C operations will immediately fail for now. +config SYS_I2C_MXC + bool "NXP i.MX I2C driver" + depends on MX6 + help + Add support for the NXP i.MX I2C driver. This supports upto for bus + channels and operating on standard mode upto 100 kbits/s and fast + mode upto 400 kbits/s. + config SYS_I2C_ROCKCHIP bool "Rockchip I2C driver" depends on DM_I2C
Signature · 1 line
1.9.1
PATCH v3 10/13 i2c: Kconfig: Add SYS_I2C_MXC entry
Hello Jagan,
Am 06.12.2016 um 00:00 schrieb Jagan Teki:
Quoted 23 lines
From: Jagan Teki <[email protected]>
Added kconfig for
SYS_I2C_MXCdriver.Cc Stefano Babic <[email protected]>Cc Heiko Schocher <[email protected]>Cc Matteo Lisi <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- drivers/i2c/Kconfig | 8 ++++++++ 1 file changed, 8 insertions(+)drivers/i2c/Kconfig +1
-0@@ -109,6 +109,14 @@ config SYS_I2C_INTEL the I2C API meaning that any I2C operations will immediately fail for now. +config SYS_I2C_MXC
drivers/i2c/Kconfig config SYS_I2C_INTEL · line 122
Quoted 10 lines
drivers/i2c/Kconfig +7
-0+ bool "NXP i.MX I2C driver" + depends on MX6 + help + Add support for the NXP i.MX I2C driver. This supports upto for bus + channels and operating on standard mode upto 100 kbits/s and fast + mode upto 400 kbits/s. + config SYS_I2C_ROCKCHIP bool "Rockchip I2C driver" depends on DM_I2C
I miss here junks, which move this symbol from the board config file into their defconfig file ... Can you add this please?
You can use the great script from Masahiro for this task:
tools/moveconfig.py
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 10/13 i2c: Kconfig: Add SYS_I2C_MXC entry
Quoted 36 lines · Heiko Schocher
Hello Jagan,
Am 06.12.2016 um 00:00 schrieb Jagan Teki:
Quoted 32 lines
From: Jagan Teki <[email protected]>
Added kconfig for
SYS_I2C_MXCdriver.Cc Stefano Babic <[email protected]>Cc Heiko Schocher <[email protected]>Cc Matteo Lisi <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- drivers/i2c/Kconfig | 8 ++++++++ 1 file changed, 8 insertions(+)drivers/i2c/Kconfig +0
-0@@ -109,6 +109,14 @@ config SYS_I2C_INTEL the I2C API meaning that any I2C operations will immediatelyfail
for now.drivers/i2c/Kconfig +5
-0+config SYS_I2C_MXC + bool "NXP i.MX I2C driver" + depends on MX6 + help + Add support for the NXP i.MX I2C driver. This supports upto forbus
+ channels and operating on standard mode upto 100 kbits/s and
fast
+ mode upto 400 kbits/s.
Quoted 8 lines
Quoted 5 lines
+
configSYS_I2C_ROCKCHIP
bool "Rockchip I2C driver"
depends onDM_I2CI miss here junks, which move this symbol from the board config file into their defconfig file ... Can you add this please?
Yes I will add them in separate patch.
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.
Fabio Estevam
reviewerPATCH v3 10/13 i2c: Kconfig: Add SYS_I2C_MXC entry
In reply to Jagan Tekidrivers/i2c/Kconfig config SYS_I2C_INTEL · line 114
Quoted 3 lines · Jagan Teki
drivers/i2c/Kconfig +3
-0+config SYS_I2C_MXC + bool "NXP i.MX I2C driver" + depends on MX6
This driver is used among several i.MX SoC, so it would be better not to restrict it to MX6 only.
PATCH v3 10/13 i2c: Kconfig: Add SYS_I2C_MXC entry
Quoted 8 lines · Fabio Estevam
drivers/i2c/Kconfig config SYS_I2C_INTEL · line 114
Quoted 3 lines · Jagan Teki
drivers/i2c/Kconfig +3
-0+config SYS_I2C_MXC + bool "NXP i.MX I2C driver" + depends on MX6This driver is used among several i.MX SoC, so it would be better not to restrict it to MX6 only.
True, but the icorem6 is MX6 only so, the rest will ||ed while moving respective CONFIG_ to defconfig files
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.
PATCH v3 11/13 i2c: mxc: Print hex instead of decimal for bus address
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Better to print the hex value for bus address instead of decimal, for more readbility on bus addressing.
Before:
------
U-Boot> i2c dev 1
Setting bus to 1
i2c bus 1 at 35274752, no gpio pinctrl state.
After:
------
U-Boot> i2c dev 1
Setting bus to 1
i2c bus 1 at 0x21a4000, no gpio pinctrl state.
--- drivers/i2c/mxc_i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i2c/mxc_i2c.c +1 -1
@@ -775,7 +775,7 @@ static int mxc_i2c_probe(struct udevice *bus)*/ ret =fdt_stringlist_search (fdt, node,"pinctrl-names" ,"gpio" );if (ret <0 ) { -dev_info (dev,"i2c bus %d@%lu, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); +dev_info (dev,"i2c bus %d at 0x%2lx, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); }else { ret = gpio_request_by_name_nodev(fdt, node, "scl-gpios", 0, &i2c_bus->scl_gpio,
Signature · 1 line
1.9.1
PATCH v3 11/13 i2c: mxc: Print hex instead of decimal for bus address
Hello Jagan,
Am 06.12.2016 um 00:00 schrieb Jagan Teki:
Quoted 17 lines
From: Jagan Teki <[email protected]>
Better to print the hex value for bus address instead of decimal, for more readbility on bus addressing.
Before:
------
U-Boot> i2c dev 1
Setting bus to 1
i2c bus 1 at 35274752, no gpio pinctrl state.After:
------
U-Boot> i2c dev 1
Setting bus to 1
i2c bus 1 at0x21a4000, no gpio pinctrl state.
Quoted 8 lines
Cc Simon Glass <[email protected]>Cc Heiko Schocher <[email protected]>Cc Peng Fan <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- drivers/i2c/mxc_i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
bye,
Heiko
Quoted 15 lines
drivers/i2c/mxc_i2c.c +1
-1@@ -775,7 +775,7 @@ static int mxc_i2c_probe(struct udevice *bus)*/ ret =fdt_stringlist_search (fdt, node,"pinctrl-names" ,"gpio" );if (ret <0 ) { -dev_info (dev,"i2c bus %d at %lu, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); +dev_info (dev,"i2c bus %d at 0x%2lx, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); }else { ret = gpio_request_by_name_nodev(fdt, node, "scl-gpios", 0, &i2c_bus->scl_gpio,
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 12/13 i2c: mxc: Make 'no gpio pinctrl state' print as debug
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Some I2C bus devicetree nodes, doesn't require to have gpio pinctrl so replace the dev_info to debug so the print never comes on the console and for bus that uses gpio pinctrl anyway have dev_err.
Before:
------
U-Boot> i2c dev 1
Setting bus to 1
i2c bus 1 at 0x21a4000, no gpio pinctrl state.
After:
------
U-Boot> i2c dev 1
Setting bus to 1
--- drivers/i2c/mxc_i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i2c/mxc_i2c.c +1 -1
@@ -775,7 +775,7 @@ static int mxc_i2c_probe(struct udevice *bus)*/ ret =fdt_stringlist_search (fdt, node,"pinctrl-names" ,"gpio" );if (ret <0 ) { -dev_info (dev,"i2c bus %d@0x%2lx, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); +debug ("i2c bus %d at 0x%2lx, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); }else { ret = gpio_request_by_name_nodev(fdt, node, "scl-gpios", 0, &i2c_bus->scl_gpio,
Signature · 1 line
1.9.1
PATCH v3 12/13 i2c: mxc: Make 'no gpio pinctrl state' print as debug
Hello Jagan,
Am 06.12.2016 um 00:00 schrieb Jagan Teki:
Quoted 18 lines
From: Jagan Teki <[email protected]>
Some I2C bus devicetree nodes, doesn't require to have gpio pinctrl so replace the
dev_infoto debug so the print never comes on the console and for bus that uses gpio pinctrl anyway havedev_err.Before:
------
U-Boot> i2c dev 1
Setting bus to 1
i2c bus 1 at0x21a4000, no gpio pinctrl state.After:
------
U-Boot> i2c dev 1
Setting bus to 1
Quoted 8 lines
Cc Simon Glass <[email protected]>Cc Heiko Schocher <[email protected]>Cc Peng Fan <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- drivers/i2c/mxc_i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
bye,
Heiko
Quoted 15 lines
drivers/i2c/mxc_i2c.c +1
-1@@ -775,7 +775,7 @@ static int mxc_i2c_probe(struct udevice *bus)*/ ret =fdt_stringlist_search (fdt, node,"pinctrl-names" ,"gpio" );if (ret <0 ) { -dev_info (dev,"i2c bus %d at 0x%2lx, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); +debug ("i2c bus %d at 0x%2lx, no gpio pinctrl state.\n" , bus->seq, i2c_bus->base); }else { ret = gpio_request_by_name_nodev(fdt, node, "scl-gpios", 0, &i2c_bus->scl_gpio,
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 13/13 imx6: icorem6: Add I2C support
In reply to Jagan TekiFrom: Jagan Teki <[email protected]>
Add I2C support for Engicam i.CoreM6 qdl board.
icorem6qdl> i2c bus
Bus 0: i2c at 021a0000 Bus 1: i2c at 021a4000 Bus 2: i2c at 021a8000
icorem6qdl> i2c dev 2
Setting bus to 2
icorem6qdl> i2c speed 100000
Setting bus speed to 100000 Hz
icorem6qdl> i2c probe
Valid chip addresses: 2C
icorem6qdl> i2c md 2C 0xff
00ff: 00 00 00 00 0f f0 01 64 ff ff 00 00 00 00 00 00 .......d........
--- arch/arm/cpu/armv7/mx6/Kconfig | 1 + configs/imx6qdl_icore_mmc_defconfig | 3 ++- configs/imx6qdl_icore_nand_defconfig | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-)
arch/arm/cpu/armv7/mx6/Kconfig +1 -0
@@ -110,6 +110,7 @@ config TARGET_MX6Q_ICORE select DM select DM_ETH select DM_GPIO + select DM_I2C select DM_MMC select DM_THERMAL select SUPPORT_SPL
configs/imx6qdl_icore_mmc_defconfig +2 -1
@@ -17,6 +17,7 @@ CONFIG_SYS_MAXARGS=32 # CONFIG_DM_MMC_OPS is not set CONFIG_CMD_BOOTZ=y CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y CONFIG_CMD_MII=y CONFIG_CMD_PING=y CONFIG_CMD_MEMTEST=y
@@ -33,6 +34,7 @@ CONFIG_MXC_UART=y CONFIG_IMX_THERMAL=y CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_SYS_I2C_MXC=y CONFIG_VIDEO=y CONFIG_VIDEO_IPUV3=y CONFIG_SYS_CONSOLE_IS_IN_ENV=y
@@ -40,7 +42,6 @@ CONFIG_SPL_LIBDISK_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y -CONFIG_SPL_I2C_SUPPORT=y CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_WATCHDOG_SUPPORT=y CONFIG_SPL_EXT_SUPPORT=y
configs/imx6qdl_icore_nand_defconfig +2 -1
@@ -15,6 +15,7 @@ CONFIG_SYS_MAXARGS=32 # CONFIG_CMD_IMLS is not set CONFIG_CMD_BOOTZ=y CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y CONFIG_CMD_MII=y CONFIG_CMD_PING=y CONFIG_CMD_MEMTEST=y
@@ -29,13 +30,13 @@ CONFIG_IMX_THERMAL=y # CONFIG_DM_MMC_OPS is not set CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_SYS_I2C_MXC=y CONFIG_VIDEO=y CONFIG_VIDEO_IPUV3=y CONFIG_SYS_CONSOLE_IS_IN_ENV=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y -CONFIG_SPL_I2C_SUPPORT=y CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_WATCHDOG_SUPPORT=y CONFIG_SPL_DMA_SUPPORT=y
Signature · 1 line
1.9.1
PATCH v3 13/13 imx6: icorem6: Add I2C support
Hello Jagan,
Am 06.12.2016 um 00:01 schrieb Jagan Teki:
Quoted 61 lines
From: Jagan Teki <[email protected]>
Add I2C support for Engicam i.CoreM6 qdl board.
icorem6qdl> i2c bus
Bus 0: i2c at 021a0000 Bus 1: i2c at 021a4000 Bus 2: i2c at 021a8000icorem6qdl> i2c dev 2
Setting bus to 2
icorem6qdl> i2c speed 100000
Setting bus speed to 100000 Hz
icorem6qdl> i2c probe
Valid chip addresses: 2C
icorem6qdl> i2c md 2C0xff
00ff: 00 00 00 00 0f f0 01 64 ff ff 00 00 00 00 00 00 .......d........Cc Stefano Babic <[email protected]>Cc Heiko Schocher <[email protected]>Cc Matteo Lisi <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- arch/arm/cpu/armv7/mx6/Kconfig | 1 + configs/imx6qdl_icore_mmc_defconfig | 3 ++- configs/imx6qdl_icore_nand_defconfig | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-)arch/arm/cpu/armv7/mx6/Kconfig +1
-0@@ -110,6 +110,7 @@ config TARGET_MX6Q_ICORE select DM select DM_ETH select DM_GPIO + select DM_I2C select DM_MMC select DM_THERMAL select SUPPORT_SPLconfigs/imx6qdl_icore_mmc_defconfig +2
-0@@ -17,6 +17,7 @@ CONFIG_SYS_MAXARGS=32 # CONFIG_DM_MMC_OPS is not set CONFIG_CMD_BOOTZ=y CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y CONFIG_CMD_MII=y CONFIG_CMD_PING=y CONFIG_CMD_MEMTEST=y@@ -33,6 +34,7 @@ CONFIG_MXC_UART=y CONFIG_IMX_THERMAL=y CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_SYS_I2C_MXC=y CONFIG_VIDEO=y CONFIG_VIDEO_IPUV3=y CONFIG_SYS_CONSOLE_IS_IN_ENV=y
configs/imx6qdl_icore_mmc_defconfig CONFIG_SPL_LIBDISK_SUPPORT=y · line 43
Quoted 4 lines
configs/imx6qdl_icore_mmc_defconfig +0
-1@@ -40,7 +42,6 @@ CONFIG_SPL_LIBDISK_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y -CONFIG_SPL_I2C_SUPPORT=y
You remove here SPL I2C support ... is this intented ?
If so, you can add my:
bye,
Heiko
Quoted 31 lines
configs/imx6qdl_icore_mmc_defconfig +0
-0CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_WATCHDOG_SUPPORT=y CONFIG_SPL_EXT_SUPPORT=yconfigs/imx6qdl_icore_nand_defconfig +2
-1@@ -15,6 +15,7 @@ CONFIG_SYS_MAXARGS=32 # CONFIG_CMD_IMLS is not set CONFIG_CMD_BOOTZ=y CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y CONFIG_CMD_MII=y CONFIG_CMD_PING=y CONFIG_CMD_MEMTEST=y@@ -29,13 +30,13 @@ CONFIG_IMX_THERMAL=y # CONFIG_DM_MMC_OPS is not set CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_SYS_I2C_MXC=y CONFIG_VIDEO=y CONFIG_VIDEO_IPUV3=y CONFIG_SYS_CONSOLE_IS_IN_ENV=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y -CONFIG_SPL_I2C_SUPPORT=y CONFIG_SPL_GPIO_SUPPORT=y CONFIG_SPL_WATCHDOG_SUPPORT=y CONFIG_SPL_DMA_SUPPORT=y
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH v3 13/13 imx6: icorem6: Add I2C support
Quoted 67 lines · Heiko Schocher
Hello Jagan,
Am 06.12.2016 um 00:01 schrieb Jagan Teki:
Quoted 63 lines
From: Jagan Teki <[email protected]>
Add I2C support for Engicam i.CoreM6 qdl board.
icorem6qdl> i2c bus
Bus 0: i2c at 021a0000 Bus 1: i2c at 021a4000 Bus 2: i2c at 021a8000icorem6qdl> i2c dev 2
Setting bus to 2
icorem6qdl> i2c speed 100000
Setting bus speed to 100000 Hz
icorem6qdl> i2c probe
Valid chip addresses: 2C
icorem6qdl> i2c md 2C0xff
00ff: 00 00 00 00 0f f0 01 64 ff ff 00 00 00 00 00 00 .......d........Cc Stefano Babic <[email protected]>Cc Heiko Schocher <[email protected]>Cc Matteo Lisi <[email protected]>Cc Michael Trimarchi <[email protected]>Signed-off-by Jagan Teki <[email protected]>--- arch/arm/cpu/armv7/mx6/Kconfig | 1 + configs/imx6qdl_icore_mmc_defconfig | 3 ++- configs/imx6qdl_icore_nand_defconfig | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-)arch/arm/cpu/armv7/mx6/Kconfig +1
-0@@ -110,6 +110,7 @@ config TARGET_MX6Q_ICORE select DM select DM_ETH select DM_GPIO + select DM_I2C select DM_MMC select DM_THERMAL select SUPPORT_SPLconfigs/imx6qdl_icore_mmc_defconfig +2
-0@@ -17,6 +17,7 @@ CONFIG_SYS_MAXARGS=32 # CONFIG_DM_MMC_OPS is not set CONFIG_CMD_BOOTZ=y CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y CONFIG_CMD_MII=y CONFIG_CMD_PING=y CONFIG_CMD_MEMTEST=y@@ -33,6 +34,7 @@ CONFIG_MXC_UART=y CONFIG_IMX_THERMAL=y CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX6=y +CONFIG_SYS_I2C_MXC=y CONFIG_VIDEO=y CONFIG_VIDEO_IPUV3=y CONFIG_SYS_CONSOLE_IS_IN_ENV=y
Quoted 8 lines
configs/imx6qdl_icore_mmc_defconfig CONFIG_SPL_LIBDISK_SUPPORT=y · line 43
Quoted 5 lines
configs/imx6qdl_icore_mmc_defconfig +0
-1@@ -40,7 +42,6 @@ CONFIG_SPL_LIBDISK_SUPPORT=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y -CONFIG_SPL_I2C_SUPPORT=yYou remove here SPL I2C support ... is this intented ?
Yes.
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.
v3 cover imx6: icorem6: Add dm-eth, framebuffer and I2C support
In reply to Jagan TekiHi Stefano,
Quoted 16 lines · Jagan Teki
From: Jagan Teki <[email protected]>
This series support framebuffer and I2C on top of u-boot-imx.git with latest u-boot.git merge.
fec_mxcdm driver on previous version series trigger an issues with whenDM_ETHnot-defined so, this series have fixes for non-dm builds as well.Changes for v3:
- Fixfec_mxcdriver to build for non-dm configs as well.
- FixVIDEO_IPV3Kconfigentry not to make default.Changes for v2:
- Rebase on u-boot-imx.git and u-boot.git
Quoted 14 lines
Jagan Teki (13):
net:fec_mxc: Remove unneededeth_devicearg fromfec_get_hwaddr
net:fec_mxc: Convert into driver model
net:fec_mxc: Driver cleanups
dm: net: fec: Add .read_rom_hwaddr
ARM: dts: imx6qdl-icore: Add FEC support
icorem6: UseCONFIG_DM_ETHsupport
video:Kconfig: AddVIDEO_IPV3entry
imx6: icorem6: Add framebuffer support
imx6: icorem6: Add custom splashscreen support
i2c:Kconfig: AddSYS_I2C_MXCentry
i2c: mxc: Print hex instead of decimal for bus address
i2c: mxc: Make 'no gpio pinctrl state' print as debug
imx6: icorem6: Add I2C support
Can you apply these, if it's OK?
thanks!
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.
v3 cover imx6: icorem6: Add dm-eth, framebuffer and I2C support
Quoted 34 lines · Jagan Teki
Hi Stefano,
Quoted 16 lines · Jagan Teki
From: Jagan Teki <[email protected]>
This series support framebuffer and I2C on top of u-boot-imx.git with latest u-boot.git merge.
fec_mxcdm driver on previous version series trigger an issues with whenDM_ETHnot-defined so, this series have fixes for non-dm builds as well.Changes for v3:
- Fixfec_mxcdriver to build for non-dm configs as well.
- FixVIDEO_IPV3Kconfigentry not to make default.Changes for v2:
- Rebase on u-boot-imx.git and u-boot.gitQuoted 14 lines
Jagan Teki (13):
net:fec_mxc: Remove unneededeth_devicearg fromfec_get_hwaddr
net:fec_mxc: Convert into driver model
net:fec_mxc: Driver cleanups
dm: net: fec: Add .read_rom_hwaddr
ARM: dts: imx6qdl-icore: Add FEC support
icorem6: UseCONFIG_DM_ETHsupport
video:Kconfig: AddVIDEO_IPV3entry
imx6: icorem6: Add framebuffer support
imx6: icorem6: Add custom splashscreen support
i2c:Kconfig: AddSYS_I2C_MXCentry
i2c: mxc: Print hex instead of decimal for bus address
i2c: mxc: Make 'no gpio pinctrl state' print as debug
imx6: icorem6: Add I2C support
Quoted 1 line
Can you apply these, if it's OK?
Any help?
Signature · 4 lines
Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India.