i.MX Processors Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX Processors Knowledge Base

Discussions

Sort by:
Dear IMX community, We usingiMX6 Quad processor and run Android 13.4, After below log file and android handup, We also run DDR stress test without problems found, Can anyone give a suggestions on this issue Best Regards, Jim ================================ U-Boot 2009.08-00008-g5f5b708-dirty (Mar 18 2013 - 17:23:58) CPU: Freescale i.MX6 family TO1.2 at 792 MHz Temperature:   52 C, calibration data 0x5b051d69 mx6q pll1: 792MHz mx6q pll2: 528MHz mx6q pll3: 480MHz mx6q pll8: 50MHz ipg clock     : 66000000Hz ipg per clock : 66000000Hz uart clock    : 80000000Hz cspi clock    : 60000000Hz ahb clock     : 132000000Hz axi clock   : 264000000Hz emi_slow clock: 29333333Hz ddr clock     : 528000000Hz usdhc1 clock  : 198000000Hz usdhc2 clock  : 198000000Hz usdhc3 clock  : 198000000Hz usdhc4 clock  : 198000000Hz nfc clock     : 24000000Hz Board: MX6Q-SABRELITE:[ POR] Boot Device: I2C I2C:   ready DRAM:   1 GB MMC:   FSL_USDHC: 0,FSL_USDHC: 1 JEDEC ID: 0x20:0x20:0x16 *** Warning - bad CRC, using default environment In:    serial Out:   serial Err:   serial Net:   got MAC address from IIM: 00:00:00:00:00:00 FEC0 [PRIME] Hit any key to stop autoboot:  0 mmc0(part 0) is current device reading /6q_bootscript 353 bytes read ## Executing script at 10008000 reading uimage 4016476 bytes read reading uramdisk.img 212592 bytes read ## Booting kernel from Legacy Image at 10800000 ...    Image Name:   Linux-3.0.35    Image Type:   ARM Linux Kernel Image (uncompressed)    Data Size:    4016412 Bytes =  3.8 MB    Load Address: 10008000    Entry Point:  10008000    Verifying Checksum ... OK ## Loading init Ramdisk from Legacy Image at 12800000 ...    Image Name:   Android Root Filesystem    Image Type:   ARM Linux RAMDisk Image (uncompressed)    Data Size:    212528 Bytes = 207.5 kB    Load Address: 12800000    Entry Point:  12800000    Verifying Checksum ... OK    Loading Kernel Image ... OK OK Starting kernel ... Initializing cgroup subsys cpuset Initializing cgroup subsys cpu Linux version 3.0.35 (leo@pluto) (gcc version 4.6.2 20120613 (release) [ARM/embedded-4_6-bra                                 nch revision 188521] (GNU Tools for ARM Embedded Processors) ) #10 SMP PREEMPT Tue Mar 19 11                                 :34:02 CST 2013 CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache Machine: Freescale i.MX 6Quad Sabre-Lite Board Memory policy: ECC disabled, Data cache writealloc CPU identified as i.MX6Q, silicon rev 1.2 PERCPU: Embedded 7 pages/cpu @c1119000 s5760 r8192 d14720 u32768 Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 210944 Kernel command line: arm_freq=1000 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1                                 :off console=ttymxc0,115200 init=/init rw no_console_suspend androidboot.console=ttymxc0 vma                                 lloc=400M PID hash table entries: 2048 (order: 1, 8192 bytes) Dentry cache hash table entries: 65536 (order: 6, 262144 bytes) Inode-cache hash table entries: 32768 (order: 5, 131072 bytes) Memory: 576MB 256MB = 832MB total Memory: 833728k/833728k available, 214848k reserved, 442368K highmem Virtual kernel memory layout:     vector  : 0xffff0000 - 0xffff1000   (   4 kB)     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)     DMA     : 0xfbe00000 - 0xffe00000   (  64 MB)     vmalloc : 0xd9800000 - 0xf2000000   ( 392 MB)     lowmem  : 0xc0000000 - 0xd9000000   ( 400 MB)     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)     modules : 0xbf000000 - 0xbfe00000   (  14 MB)       .init : 0xc0008000 - 0xc0041000   ( 228 kB)       .text : 0xc0041000 - 0xc0770fb0   (7360 kB)       .data : 0xc0772000 - 0xc07e0da0   ( 444 kB)        .bss : 0xc07e0dc4 - 0xc090f7d0   (1211 kB) Preemptible hierarchical RCU implementation. NR_IRQS:496 MXC GPIO hardware sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655ms MXC_Early serial console at MMIO 0x2020000 (options '115200') bootconsole [ttymxc0] enabled Calibrating delay loop... 1581.05 BogoMIPS (lpj=7905280) pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 512 Initializing cgroup subsys cpuacct CPU: Testing write buffer coherency: ok hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available CPU1: Booted secondary processor CPU2: Booted secondary processor CPU3: Booted secondary processor Brought up 4 CPUs SMP: Total of 4 processors activated (6324.22 BogoMIPS). print_constraints: dummy: NET: Registered protocol family 16 print_constraints: vddpu: 725 <--> 1300 mV at 1150 mV fast normal print_constraints: vddcore: 725 <--> 1300 mV at 1150 mV fast normal print_constraints: vddsoc: 725 <--> 1300 mV at 1200 mV fast normal print_constraints: vdd2p5: 2000 <--> 2775 mV at 2400 mV fast normal print_constraints: vdd1p1: 800 <--> 1400 mV at 1100 mV fast normal print_constraints: vdd3p0: 2800 <--> 3150 mV at 3000 mV fast normal ------------ Board type Sabre Lite Flexcan NXP tja1040 hw-breakpoint: found 6 breakpoint and 1 watchpoint registers. hw-breakpoint: 1 breakpoint(s) reserved for watchpoint single-step. hw-breakpoint: maximum watchpoint size is 4 bytes. L310 cache controller enabled l2x0: 16 ways, CACHE_ID 0x410000c7, AUX_CTRL 0x02070000, Cache size: 1048576 B IMX usb wakeup probe bio: create slab <bio-0> at 0 print_constraints: VDDA: 2500 mV print_constraints: VDDIO: 3300 mV machine_constraints_voltage: VDDD: unsupportable voltage constraints reg-fixed-voltage reg-fixed-voltage.2: Failed to register regulator: -22 reg-fixed-voltage: probe of reg-fixed-voltage.2 failed with error -22 print_constraints: vmmc: 3300 mV SCSI subsystem initialized spi_imx imx6q-ecspi.0: probed usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb Freescale USB OTG Driver loaded, $Revision: 1.55 $ add wake up source irq 75 i2c i2c-0: Invalid 7-bit I2C address 0x00 i2c i2c-0: Can't create device at 0x00 imx-ipuv3 imx-ipuv3.0: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7) imx-ipuv3 imx-ipuv3.1: IPU DMFC NORMAL mode: 1(0~1), 5B(4,5), 5F(6,7) mxc_mipi_csi2 mxc_mipi_csi2: i.MX MIPI CSI2 driver probed mxc_mipi_csi2 mxc_mipi_csi2: i.MX MIPI CSI2 dphy version is 0x3130302a MIPI CSI2 driver module loaded Advanced Linux Sound Architecture Driver Version 1.0.24. Bluetooth: Core ver 2.16 NET: Registered protocol family 31 Bluetooth: HCI device and connection manager initialized Bluetooth: HCI socket layer initialized Bluetooth: L2CAP socket layer initialized Bluetooth: SCO socket layer initialized i2c-core: driver [max17135] using legacy suspend method i2c-core: driver [max17135] using legacy resume method Switching to clocksource mxc_timer1 NET: Registered protocol family 2 IP route cache hash table entries: 16384 (order: 4, 65536 bytes) TCP established hash table entries: 65536 (order: 7, 524288 bytes) TCP bind hash table entries: 65536 (order: 7, 786432 bytes) TCP: Hash tables configured (established 65536 bind 65536) TCP reno registered UDP hash table entries: 256 (order: 1, 8192 bytes) UDP-Lite hash table entries: 256 (order: 1, 8192 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. Unpacking initramfs... Freeing initrd memory: 204K Static Power Management for Freescale i.MX6 wait mode is enabled for i.MX6 cpaddr = d9880000 suspend_iram_base=d98fc000 PM driver module loaded IMX usb wakeup probe i.MXC CPU frequency driver highmem bounce pool size: 64 pages ashmem: initialized JFFS2 version 2.2. (NAND) ? 2001-2006 Red Hat, Inc. msgmni has been set to 764 io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) MIPI DSI driver module loaded mxc_sdc_fb mxc_sdc_fb.0: register mxc display driver hdmi mxc_hdmi mxc_hdmi: Detected HDMI controller 0x13:0xa:0xa0:0xc1 fbcvt: 1920x1080@60: CVT Name - 2.073M9 imx-ipuv3 imx-ipuv3.0: IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7) mxc_sdc_fb mxc_sdc_fb.1: Can't get fb option for mxcfb1! mxc_sdc_fb mxc_sdc_fb.2: register mxc display driver ldb _regulator_get: get() with no identifier mxc_sdc_fb mxc_sdc_fb.3: register mxc display driver ldb mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 0(VIC 16): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 1(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 2(VIC 1): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 3(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 4(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 5(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 6(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 7(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 8(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 9(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 10(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 11(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 12(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 13(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 14(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 15(VIC 0): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 16(VIC 16): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 18(VIC 1): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 19(VIC 2): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 20(VIC 3): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 21(VIC 4): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 22(VIC 31): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 23(VIC 19): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 24(VIC 17): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 25(VIC 18): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 29(VIC 16): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 30(VIC 3): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 31(VIC 4): mxc_hdmi mxc_hdmi: mxc_hdmi_edid_rebuild_modelist: Added mode 32(VIC 18): fbcvt: 1920x1080@60: CVT Name - 2.073M9 imx-sdma imx-sdma: loaded firmware 1.1 imx-sdma imx-sdma: initialized Serial: IMX driver imx-uart.0: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX console [ttymxc0] enabled, bootconsole disabled console [ttymxc0] enabled, bootconsole disabled imx-uart.1: ttymxc1 at MMIO 0x21e8000 (irq = 59) is a IMX imx-uart.2: ttymxc2 at MMIO 0x21ec000 (irq = 60) is a IMX loop: module loaded m25p80 spi0.0: m25p32 (4096 Kbytes) Creating 3 MTD partitions on "m25p80": 0x000000000000-0x0000000c0000 : "bootloader" 0x0000000c0000-0x0000000c2000 : "ubparams" mtd: partition "ubparams" doesn't end on an erase block -- force read-only 0x0000000c2000-0x000000400000 : "unused" mtd: partition "unused" doesn't start on an erase block boundary -- force read-only vcan: Virtual CAN interface driver CAN device driver interface flexcan netdevice driver flexcan imx6q-flexcan.0: device registered (reg_base=d9970000, irq=142) FEC Ethernet Driver fec_enet_mii_bus: probed PPP generic driver version 2.4.2 PPP Deflate Compression module registered PPP BSD Compression module registered PPP MPPE Compression module registered NET: Registered protocol family 24 PPTP driver version 0.8.5 tun: Universal TUN/TAP device driver, 1.6 tun: (C) 1999-2004 Max Krasnyansky <[email protected]> ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1 fsl-ehci fsl-ehci.0: irq 75, io base 0x02184000 fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected add wake up source irq 72 fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2 fsl-ehci fsl-ehci.1: irq 72, io base 0x02184200 fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00 hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected usbcore: registered new interface driver cdc_acm cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. usbcore: registered new interface driver usbserial usbserial: USB Serial Driver core USB Serial support registered for GSM modem (1-port) usbcore: registered new interface driver option option: v0.7.2:USB Driver for GSM modems USB Serial support registered for Qualcomm USB modem usbcore: registered new interface driver qcserial ARC USBOTG Device Controller driver (1 August 2005) android_usb gadget: Mass Storage Function, version: 2009/09/11 android_usb gadget: Number of LUNs=1 lun0: LUN: removable file: (no medium) Gadget Android: controller 'fsl-usb2-udc' not recognized android_usb gadget: android_usb ready Suspend udc for OTG auto detect fsl-usb2-udc: bind to driver android_usb mousedev: PS/2 mouse device common for all mice input: gpio-keys as /devices/platform/gpio-keys/input/input0 egalax_ts 2-0004: egalax_ts: failed to read firmware version egalax_ts: probe of 2-0004 failed with error -5 input: ak4183ts as /devices/platform/imx-i2c.1/i2c-1/1-0048/input/input1 i2c-core: driver [isl29023] using legacy suspend method i2c-core: driver [isl29023] using legacy resume method using rtc device, snvs_rtc, for alarms snvs_rtc snvs_rtc.0: rtc core: registered snvs_rtc as rtc0 i2c /dev entries driver Linux video capture interface: v2.00 ov5640_read_reg:write reg error:reg=300a ov5640_probe:cannot find camera mxc_v4l2_output mxc_v4l2_output.0: V4L2 device registered as video16 mxc_v4l2_output mxc_v4l2_output.0: V4L2 device registered as video17 mxc_v4l2_output mxc_v4l2_output.0: V4L2 device registered as video18 mxc_v4l2_output mxc_v4l2_output.0: V4L2 device registered as video19 mxc_v4l2_output mxc_v4l2_output.0: V4L2 device registered as video20 usbcore: registered new interface driver uvcvideo USB Video Class driver (v1.1.0) i2c-core: driver [mag3110] using legacy suspend method i2c-core: driver [mag3110] using legacy resume method usb 2-1: new high speed USB device number 2 using fsl-ehci imx2-wdt imx2-wdt.0: IMX2+ Watchdog Timer enabled. timeout=60s (nowayout=1) device-mapper: uevent: version 1.0.3 device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: [email protected] Bluetooth: Virtual HCI driver ver 1.3 Bluetooth: HCI UART driver ver 2.2 Bluetooth: HCIATH3K protocol initialized Bluetooth: Generic Bluetooth USB driver ver 0.6 usbcore: registered new interface driver btusb sdhci: Secure Digital Host Controller Interface driver sdhci: Copyright(c) Pierre Ossman mmc0: SDHCI controller on platform [sdhci-esdhc-imx.2] using DMA sdhci sdhci-esdhc-imx.3: no write-protect pin available! mmc1: SDHCI controller on platform [sdhci-esdhc-imx.3] using DMA mxc_vdoa mxc_vdoa: i.MX Video Data Order Adapter(VDOA) driver probed VPU initialized mxc_asrc registered revserved_memory_account:viv_gpu registerd Thermal calibration data is 0x5b051d69 anatop_thermal_counting_ratio: raw25c=1456 raw_hot=1309 hot_temp=105 Anatop Thermal registered as thermal_zone0 anatop_thermal_probe: default cooling device is cpufreq! usbcore: registered new interface driver usbhid usbhid: USB HID core driver logger: created 256K log 'log_main' logger: created 256K log 'log_events' hub 2-1:1.0: USB hub found logger: created 256K log 'log_radio' logger: created 256K log 'log_system' usbcore: registered new interface driver snd-usb-audio mxc_hdmi_soc mxc_hdmi_soc.0: MXC HDMI Audio Cirrus Logic CS42888 ALSA SoC Codec Driver i2c-core: driver [cs42888] using legacy suspend method i2c-core: driver [cs42888] using legacy resume method hub 2-1:1.0: 4 ports detected mmc0: new high speed MMC card at address 0001 mmcblk0: mmc0:0001 eMMC   3.71 GiB mmcblk0boot0: mmc0:0001 eMMC   partition 1 2.00 MiB mmcblk0boot1: mmc0:0001 eMMC   partition 2 2.00 MiB mmcblk0: p1 p2 p3 < p5 p6 p7 p8 p9 > p4 mmcblk0boot1: unknown partition table mmcblk0boot0: unknown partition table asoc: sgtl5000 <-> imx-ssi.1 mapping ok imx_3stack asoc driver asoc: mxc-hdmi-soc <-> imx-hdmi-soc-dai.0 mapping ok ALSA device list:   #0: sgtl5000-audio   #1: imx-hdmi-soc Netfilter messages via NETLINK v0.30. nf_conntrack version 0.5.0 (13030 buckets, 52120 max) ctnetlink v0.93: registering with nfnetlink. NF_TPROXY: Transparent proxy support initialized, version 4.1.0 NF_TPROXY: Copyright (c) 2006-2007 BalaBit IT Ltd. xt_time: kernel timezone is -0000 IPv4 over IPv4 tunneling driver GRE over IPv4 demultiplexor driver ip_tables: (C) 2000-2006 Netfilter Core Team arp_tables: (C) 2002 David S. Miller TCP cubic registered NET: Registered protocol family 10 ip6_tables: (C) 2000-2006 Netfilter Core Team IPv6 over IPv4 tunneling driver NET: Registered protocol family 17 NET: Registered protocol family 15 can: controller area network core (rev 20090105 abi 😎 NET: Registered protocol family 29 can: raw protocol (rev 20090105) can: broadcast manager protocol (rev 20090105 t) Bluetooth: RFCOMM TTY layer initialized Bluetooth: RFCOMM socket layer initialized Bluetooth: RFCOMM ver 1.11 Bluetooth: BNEP (Ethernet Emulation) ver 1.3 Bluetooth: BNEP filters: protocol multicast Bluetooth: HIDP (Human Interface Emulation) ver 1.2 L2TP core driver, V2.0 PPPoL2TP kernel driver, V2.0 L2TP IP encapsulation support (L2TPv3) L2TP netlink interface L2TP ethernet pseudowire support (L2TPv3) lib80211: common routines for IEEE802.11 drivers VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4 Bus freq driver module loaded Bus freq driver Enabled mxc_dvfs_core_probe DVFS driver module loaded regulator_init_complete: VDDIO: incomplete constraints, leaving on regulator_init_complete: VDDA: incomplete constraints, leaving on regulator_init_complete: vddpu: incomplete constraints, leaving on snvs_rtc snvs_rtc.0: setting system clock to 1970-01-02 00:04:27 UTC (86667) Freeing init memory: 228K usb 2-1.4: new low speed USB device number 3 using fsl-ehci init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj instead. input: HID 04d9:0499 as /devices/platform/fsl-ehci.1/usb2/2-1/2-1.4/2-1.4:1.0/input/input2 generic-usb 0003:04D9:0499.0001: input,hidraw0: USB HID v1.10 Mouse [HID 04d9:0499] on usb-f                                 sl-ehci.1-1.4/input0 EXT4-fs (mmcblk0p5): recovery complete EXT4-fs (mmcblk0p5): mounted filesystem with ordered data mode. Opts: (null) EXT4-fs (mmcblk0p7): recovery complete EXT4-fs (mmcblk0p7): mounted filesystem with ordered data mode. Opts: noauto_da_alloc,errors                                 =panic EXT4-fs (mmcblk0p6): warning: mounting unchecked fs, running e2fsck is recommended EXT4-fs (mmcblk0p6): mounted filesystem without journal. Opts: (null) init: cannot find '/system/bin/gpu_init.sh', disabling 'gpu_init' init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery' android_usb: already disabled adb_open mtp_bind_config adb_bind_config warning: `rild' uses 32-bit capabilities (legacy support in use) root@android:/ # ERROR: v4l2 capture: slave not found! ERROR: v4l2 capture: slave not found! request_suspend_state: wakeup (3->0) at 20324699670 (1970-01-02 00:04:45.205101336 UTC) eth0: Freescale FEC PHY driver [Micrel KSZ9021 Gigabit PHY] (mii_bus:phy_addr=1:07, irq=284) ADDRCONF(NETDEV_UP): eth0: link is not ready acc_open acc_release PHY: 1:07 - Link is Up - 100/Full ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready CPU3: shutdown CPU2: shutdown Unable to handle kernel paging request at virtual address f40c4010 pgd = d3e04000 [f40c4010] *pgd=02011452(bad) Internal error: Oops: 2d [#1] PREEMPT SMP Modules linked in: CPU: 0    Not tainted  (3.0.35 #10) PC is at _clk_arm_get_rate+0xc/0x28 LR is at clk_get_rate+0x40/0x50 pc : [<c005ac7c>]    lr : [<c006650c>]    psr: a0000193 sp : d3e51db0  ip : c004c6b0  fp : d3ceae00 r10: 00100100  r9 : c111a588  r8 : 00200200 r7 : 010da000  r6 : 00000001  r5 : d6f15e8c  r4 : c07e1040 r3 : f40c4000  r2 : d3e51dd8  r1 : 00000000  r0 : c0790430 Flags: NzCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user Control: 10c53c7d  Table: 23e0404a  DAC: 00000015 PC: 0xc005abfc: abfc  1affffdc eaffffee c078f07c c07e1654 c078f0d0 e92d4010 e59f304c e5900028 ac1c  e1500003 0a000007 e59f3040 e1500003 13a04001 0a000003 eb002e24 e1a01004 ac3c  eb076b36 e8bd8010 e3a03901 e34f340c e5934014 eb002e1d e7e24dd4 e2844001 ac5c  e1a01004 eb076b2d e8bd8010 c078f124 c078e260 e3a03901 e34f240c e92d4010 ac7c  e5934010 e5900028 eb002e10 e2041007 e2811001 eb076b21 e8bd8010 e92d4038 ac9c  e1a05001 e5900028 eb002e08 e1a01005 e1a04000 eb076b19 e2501000 03a01001 acbc  0a000001 e3510040 23a01040 e1a00004 eb076b12 e8bd8038 e92d40f8 e1a05001 acdc  e5900028 eb002df9 e1a01005 e1a07000 eb076b0a e2504000 01a06004 03a04001 LR: 0xc006648c: 648c  c07e1684 c0574908 c06a6f80 e59f3010 e3500000 e593000c 1a000000 ea000167 64ac  ea000189 c07e15fc e3500000 012fff1e e3700a01 91d003d0 83a00000 e12fff1e 64cc  e3500000 e92d4008 08bd8008 e3700a01 83a00000 9a000005 e8bd8008 e5900028 64ec  e3500000 0a000006 e3700a01 8a000005 e590303c e3530000 0afffff7 e12fff33 650c  e8bd8008 e8bd8008 e3a00000 e8bd8008 e92d4008 e2503000 01a00003 08bd8008 652c  e3730a01 83a00000 88bd8008 e5933044 e3530000 0a000001 e12fff33 e8bd8008 654c  e1a00003 e8bd8008 e3500000 012fff1e e3700a01 95900028 83a00000 e12fff1e 656c  e3500000 e92d4010 e1a04001 1a000003 ea00000d e5900028 e3500000 0a00000a SP: 0xd3e51d30: 1d30  c111a040 c1119040 00000006 00000003 00000006 c1119040 00000000 393f7476 1d50  00000006 0000040f 0000000d 00000001 010da000 c00469d0 c0790430 00000000 1d70  d3e51dd8 f40c4000 c07e1040 d6f15e8c 00000001 010da000 00200200 c111a588 1d90  00100100 d3ceae00 c004c6b0 d3e51db0 c006650c c005ac7c a0000193 ffffffff 1db0  c07e1040 c006650c c0059e84 c0059e90 c0059e84 c006650c c004c6d8 c004c6ec 1dd0  d3e51dd8 c00a799c d3e51dd8 d3e51dd8 c0783cd0 d3e50000 c003fc18 00000000 1df0  00000000 d3e51e20 d6085a00 c00412c0 ffffffff f2a00100 00000405 00000001 1e10  00000000 d3e50000 d6085a00 c0046a4c 00000000 010da000 00000000 d3e50000 IP: 0xc004c630: c630  e59f3018 e1a0000c e5933004 e12fff33 e28dd014 e8bd8000 c078b1c8 c004c16c c650  c0783a2c e3510003 e1a0c00d e3cc2d7f 93a03000 83a03001 e3510001 03833001 c670  e3c2203f e3530000 e5922014 1a000009 e3520003 ca000007 e2822008 e7d0c002 c690  e20cc0fc e18c1001 e6ef1071 e7c01002 e1a00003 e12fff1e e3e03015 eafffffb c6b0  e3013040 e34c307e e1a01000 e3a00000 e5933000 e5932008 e5831004 e3822001 c6d0  e5832008 e12fff1e e92d4010 e3014040 e34c407e e5940004 eb006777 e1a0300d c6f0  e3c3cd7f e3032cd0 e3ccc03f e34c2078 e594300c e59cc014 e792210c e1a01000 c710  e5840008 e7930002 e8bd4010 ea015288 e59f304c e593000c e3500000 012fff1e FP: 0xd3cead80: ad80  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ada0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 adc0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ade0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ae00  c10d5580 00000001 00000000 00000000 00000000 00000000 c10d5580 00000001 ae20  00000000 00000000 00000000 00000000 c10d5580 00000001 00000000 00000000 ae40  00000000 00000000 c10d5580 00000001 00000000 00000000 00000000 00000000 ae60  c10d5580 00000001 00000000 00000000 00000000 00000000 c10d5580 00000001 R0: 0xc07903b0: 03b0  c06a7998 c078f9ac c07903cc c07903a4 c06a79a4 c06a9e14 c0791738 c07903e0 03d0  c07903b8 c06a79b4 c06a9e14 c079178c c07903f4 c07903cc c06a79c4 c06a9e14 03f0  c07917e0 c0790408 c07903e0 00000000 c06a79d4 c07906d0 c079041c c07903f4 0410  00000000 c06a79e0 c078f568 c07cd698 c0790408 00000000 c06a79ec c078f5bc 0430  5f757063 006b6c63 00000000 00000000 00000000 00000000 00000000 00000000 0450  d40a0228 00000000 c078f4c0 00000000 00000001 00000000 00000000 c005ac70 0470  c005bc28 00000000 00000000 00000000 00000000 61746173 6b6c635f 00000000 0490  00000000 00000000 00000000 00000000 00000000 d4044aa8 00000000 c078f370 R2: 0xd3e51d58: 1d58  0000000d 00000001 010da000 c00469d0 c0790430 00000000 d3e51dd8 f40c4000 1d78  c07e1040 d6f15e8c 00000001 010da000 00200200 c111a588 00100100 d3ceae00 1d98  c004c6b0 d3e51db0 c006650c c005ac7c a0000193 ffffffff c07e1040 c006650c 1db8  c0059e84 c0059e90 c0059e84 c006650c c004c6d8 c004c6ec d3e51dd8 c00a799c 1dd8  d3e51dd8 d3e51dd8 c0783cd0 d3e50000 c003fc18 00000000 00000000 d3e51e20 1df8  d6085a00 c00412c0 ffffffff f2a00100 00000405 00000001 00000000 d3e50000 1e18  d6085a00 c0046a4c 00000000 010da000 00000000 d3e50000 d67c9c60 0000002a 1e38  00000001 00000001 c10d5580 00000000 d6085a00 d3ceae00 00000000 d3e51e68 R3: 0xf40c3f80: 3f80  ******** ******** ******** ******** ******** ******** ******** ******** 3fa0  ******** ******** ******** ******** ******** ******** ******** ******** 3fc0  ******** ******** ******** ******** ******** ******** ******** ******** 3fe0  ******** ******** ******** ******** ******** ******** ******** ******** 4000  ******** ******** ******** ******** ******** ******** ******** ******** 4020  ******** ******** ******** ******** ******** ******** ******** ******** 4040  ******** ******** ******** ******** ******** ******** ******** ******** 4060  ******** ******** ******** ******** ******** ******** ******** ******** R4: 0xc07e0fc0: 0fc0  412fc09a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0fe0  c07a0b20 c07ccc64 00000000 00000000 00000000 c0798518 00000001 00000000 1000  00000001 00000000 00000000 d8fff000 00000000 c0067230 c00542e0 00000000 1020  10004000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 1040  d9800600 c0790874 0bcd3d80 c0043028 00000000 00000000 00030000 00000005 1060  00000001 00000001 00000004 00000000 00000000 c078c518 00000000 00000000 1080  00000000 00000000 00000000 d60e8000 d60e9000 d60ea000 d60eb000 d60ec000 10a0  d60ed000 d60ee000 d60ef000 d60f0000 d60f1000 d60f2000 d60f3000 d60f4000 R5: 0xd6f15e0c: 5e0c  00000002 00000001 c0046a4c c0574e78 00000005 f2a01000 00000001 d6f15e8c 5e2c  c111a580 00000000 c111a580 010da000 c111a588 00000001 c0574f04 00000000 5e4c  d6f15e60 c004bbac c00a708c 20000113 ffffffff d6f14000 00000000 c004c6d8 5e6c  00000001 c0574f00 c0783cd0 d6f15f3c c00a71c0 c0041eb0 d6134600 80002001 5e8c  00100100 00200200 c004c6d8 00000000 00000001 00018d00 ffffffff c07ccdcc 5eac  00000000 d6f15f3c 00000001 d6f15f3c c004c850 c004c808 c0098c2c c07ff7fc 5ecc  c07ff7e4 00000000 00000001 ffffffff c0098d80 00000000 001312d0 00000000 5eec  d6f15f3c d63128e0 00000000 c0783ac4 00000004 c0783b00 c0098db4 00000000 R9: 0xc111a508: a508  00008288 00000000 2b85e900 00000006 00000000 00000000 0008f4da 00000000 a528  ffff968e ffffffe5 d6f93800 00000000 00000000 00000000 00000000 00000000 a548  00000000 00000000 00000000 00000000 00000000 00000000 c07740e0 00200200 a568  c00972ac 00000000 00000000 00000000 00000000 00000000 c111a580 c111a580 a588  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 a5a8  00000000 00000000 00000000 00000000 00000000 00000000 00000000 c111a5c0 a5c8  c111a5c8 c111a5c8 00000000 c111a5d4 c111a5d4 00000000 00000000 00000000 a5e8  00000084 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Process WindowManagerPo (pid: 2301, stack limit = 0xd3e502f0) Stack: (0xd3e51db0 to 0xd3e52000) 1da0:                                     c07e1040 c006650c c0059e84 c0059e90 1dc0: c0059e84 c006650c c004c6d8 c004c6ec d3e51dd8 c00a799c d3e51dd8 d3e51dd8 1de0: c0783cd0 d3e50000 c003fc18 00000000 00000000 d3e51e20 d6085a00 c00412c0 1e00: ffffffff f2a00100 00000405 00000001 00000000 d3e50000 d6085a00 c0046a4c 1e20: 00000000 010da000 00000000 d3e50000 d67c9c60 0000002a 00000001 00000001 1e40: c10d5580 00000000 d6085a00 d3ceae00 00000000 d3e51e68 c0103478 c0114ba8 1e60: 60000013 ffffffff c0103478 c0114b38 60000013 c0103478 00000000 00000001 1e80: d3e51f40 00000001 00000001 0000000e d3e50000 d4288e7c ffffffff fffffdee 1ea0: d6085a00 00000000 00000000 d3e51f80 d3e50000 00000000 5c66e6f4 c00fb338 1ec0: 00000000 00000000 d61e0f8c 00000000 00000000 00000001 ffffffff d6085a00 1ee0: 00000000 00000000 00000000 00000000 d6f93be0 c0047184 00000000 00000000 1f00: 00000000 00000000 d3e51f08 d3e51f08 00000001 d3e50000 00000001 d624ea48 1f20: d6ee11a0 00000001 00000001 00000000 00000000 00000000 5eacafff d624ea48 1f40: 4007a0e4 00000000 d6085a00 00000001 4007a0e3 d3e51f80 00000001 c00fba3c 1f60: 00000000 c00fd050 d6085a00 4007a0e3 00000000 00000000 00000001 c00fbcac 1f80: 00000000 00000000 006ae0fc 00000001 4007a0e3 006ae0e8 00000000 00000004 1fa0: c0047184 c0047000 4007a0e3 006ae0e8 0000005d 4007a0e3 00000001 5bc63d90 1fc0: 4007a0e3 006ae0e8 00000000 00000004 5c66e6e0 5bc63d38 00000000 5c66e6f4 1fe0: 4007d058 5c66e6b8 40075d1b 400c5474 20000010 0000005d 00000000 00000000 [<c005ac7c>] (_clk_arm_get_rate+0xc/0x28) from [<c006650c>] (clk_get_rate+0x40/0x50) [<c006650c>] (clk_get_rate+0x40/0x50) from [<c0059e90>] (_clk_twd_get_rate+0xc/0x14) [<c0059e90>] (_clk_twd_get_rate+0xc/0x14) from [<c006650c>] (clk_get_rate+0x40/0x50) [<c006650c>] (clk_get_rate+0x40/0x50) from [<c004c6ec>] (twd_update_frequency+0x14/0x48) [<c004c6ec>] (twd_update_frequency+0x14/0x48) from [<c00a799c>] (generic_smp_call_function_s                                 ingle_interrupt+0xd0/0x130) [<c00a799c>] (generic_smp_call_function_single_interrupt+0xd0/0x130) from [<c00412c0>] (do_I                                 PI+0xec/0x208) [<c00412c0>] (do_IPI+0xec/0x208) from [<c0046a4c>] (__irq_svc+0x4c/0xe8) Exception stack(0xd3e51e20 to 0xd3e51e68) 1e20: 00000000 010da000 00000000 d3e50000 d67c9c60 0000002a 00000001 00000001 1e40: c10d5580 00000000 d6085a00 d3ceae00 00000000 d3e51e68 c0103478 c0114ba8 1e60: 60000013 ffffffff [<c0046a4c>] (__irq_svc+0x4c/0xe8) from [<c0114ba8>] (mnt_drop_write+0x70/0xa4) [<c0114ba8>] (mnt_drop_write+0x70/0xa4) from [<c0103478>] (pipe_write+0x26c/0x510) [<c0103478>] (pipe_write+0x26c/0x510) from [<c00fb338>] (do_sync_write+0xa4/0xe4) [<c00fb338>] (do_sync_write+0xa4/0xe4) from [<c00fba3c>] (vfs_write+0xa8/0x138) [<c00fba3c>] (vfs_write+0xa8/0x138) from [<c00fbcac>] (sys_write+0x40/0x6c) [<c00fbcac>] (sys_write+0x40/0x6c) from [<c0047000>] (ret_fast_syscall+0x0/0x30) Code: c078e260 e3a03901 e34f240c e92d4010 (e5934010) ---[ end trace dcbcbc34e4f8c36f ]--- Kernel panic - not syncing: Fatal exception in interrupt [<c004cdb0>] (unwind_backtrace+0x0/0xf8) from [<c056c398>] (panic+0x74/0x18c) [<c056c398>] (panic+0x74/0x18c) from [<c004aad4>] (die+0x220/0x284) [<c004aad4>] (die+0x220/0x284) from [<c056c1a8>] (__do_kernel_fault.part.3+0x54/0x74) [<c056c1a8>] (__do_kernel_fault.part.3+0x54/0x74) from [<c0050ae0>] (do_translation_fault+0x                                 0/0xa0) [<c0050ae0>] (do_translation_fault+0x0/0xa0) from [<f40c4010>] (0xf40c4010) CPU1: stopping [<c004cdb0>] (unwind_backtrace+0x0/0xf8) from [<c00413a8>] (do_IPI+0x1d4/0x208) [<c00413a8>] (do_IPI+0x1d4/0x208) from [<c0046a4c>] (__irq_svc+0x4c/0xe8) Exception stack(0xd6f15e18 to 0xd6f15e60) 5e00:                                                       c0574e78 00000005 5e20: f2a01000 00000001 d6f15e8c c111a580 00000000 c111a580 010da000 c111a588 5e40: 00000001 c0574f04 00000000 d6f15e60 c004bbac c00a7088 20000113 ffffffff [<c0046a4c>] (__irq_svc+0x4c/0xe8) from [<c00a7088>] (generic_exec_single+0x70/0x90) [<c00a7088>] (generic_exec_single+0x70/0x90) from [<c00a71c0>] (smp_call_function_single+0x1                                 18/0x1d0) [<c00a71c0>] (smp_call_function_single+0x118/0x1d0) from [<c004c850>] (twd_cpufreq_transitio                                 n+0x48/0x58) [<c004c850>] (twd_cpufreq_transition+0x48/0x58) from [<c0098c2c>] (notifier_call_chain+0x44/                                 0x84) [<c0098c2c>] (notifier_call_chain+0x44/0x84) from [<c0098d80>] (__srcu_notifier_call_chain+0                                 x44/0x60) [<c0098d80>] (__srcu_notifier_call_chain+0x44/0x60) from [<c0098db4>] (srcu_notifier_call_ch                                 ain+0x18/0x20) [<c0098db4>] (srcu_notifier_call_chain+0x18/0x20) from [<c037e508>] (cpufreq_notify_transiti                                 on+0xa0/0xe0) [<c037e508>] (cpufreq_notify_transition+0xa0/0xe0) from [<c006959c>] (mxc_set_target+0x194/0                                 x220) [<c006959c>] (mxc_set_target+0x194/0x220) from [<c037dcc4>] (__cpufreq_driver_target+0x50/0x                                 64) [<c037dcc4>] (__cpufreq_driver_target+0x50/0x64) from [<c0382aa8>] (cpufreq_interactive_up_t                                 ask+0x168/0x1b4) [<c0382aa8>] (cpufreq_interactive_up_task+0x168/0x1b4) from [<c00939b0>] (kthread+0x80/0x88) [<c00939b0>] (kthread+0x80/0x88) from [<c0047ae4>] (kernel_thread_exit+0x0/0x8)
View full article
The i.MX21ADS board needs a flash programmer software called iMX21ADS_TOOLKIT or just HAB. This programmer evolved to current ATK. You can download iMX21ADS_TOOLKIT here.  
View full article
1. INTRODUCTION:      This document explains the general and basic steps to customize U-Boot for your own board. The board used in this document it is a working and stable board, the UDOO board (http://udoo.org). 2. REQUIREMENTS:     Install Yocto Project. See the Freescale Yocto Project User's Guide.     Generate and install the meta-toolchain. Follow this great training to do so  Yocto Training - HOME     Generate core-image-minimal of L3.14.28 of FSL BSP obtained from https://www.freescale.com/webapp/Download?colCode=L3.14.28_1.0.0_iMX6QDLS_BUNDLE&appType=license&location=null&Parent_no…   3. ADDING i.MX6 CUSTOM BOARD SUPPORT FOR U-BOOT.     This section follows the steps found in Chapter 1 of the i.MX6 BSP Porting Guide of the Yocto documentation (L3.14.28) https://www.freescale.com/webapp/Download?colCode=L3.14.28_1.0.0_LINUX_DOCS&location=null&fpsp=1&WT_TYPE=Supporting%20In… . Obtain U-Boot Source Code. After having installed Yocto project and generate a valid imx6 image, the U-Boot code should be located at <build directory>/tmp/work/<machine>-poky-linuxgnueabi/u-boot-imx/<version>/git. Prepare the Code. Choose a board as reference, this board should be as similar as possible to your custom board. Copy the board directory :                $ cp -R board/freescale/mx6sabresd/ board/freescale/mx6_udoo Copy the existing mx6sabresd.h configuration file as mx6_udoo.h                $ cp include/configs/mx6sabresd.h include/configs/mx6_udoo.h Create one entry in boards.cfg. Add a configuration entry in the boards.cfg file. Active  arm  armv7  mx6  freescale  mx6_udoo mx6_udoo mx6_udoo:IMX_CONFIG=board/freescale/mx6_udoo/mx6dl_4x_mt41j128.cfg,MX6Q,DEFAULT_FDT_FILE="imx6q-udoo.dtb",DDR_MB=1024 Rename <board>.c file. Rename board/freescale/mx6sabresd/mx6sabresd.c   to   board/freescale/mx6_udoo/mx6_udoo.c Modify Makefile. Change the line of COBJS to your custom board at  board/freescale/mx6_udoo/:      obj-y  := mx6sabresd.o Create a Shell script. Create a script to compile your new configuration. The script for this example is shown below and its name is build_u-boot.sh: #!/bin/bash export ARCH=arm export CROSS_COMPILE=/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- make distclean; make mx6_udoo_config make Run the script to verify if the new configuration is correct.      $./build_u-boot.sh 4. CUSTOMIZING BOARD CODE      The fist part to customize is the DCD table. The DCD table contains configuration data for the DDR controller and memory. The DCD is read by the BootROM code in the iMX family and executed before copying the Uboot image to DDR. The DCD is built in the .cfg file pointed in the new entry we just added in the boards.cfg file (mx6dl_4x_mt41j128.cfg). Below you can find an example of the data that can be found in this file: /* * Device Configuration Data (DCD) * * Each entry must have the format: * Addr-type           Address        Value * * where: *      Addr-type register length (1,2 or 4 bytes) *      Address   absolute address of the register *      value     value to be stored in the register */ DATA 4, 0x020e0774, 0x000C0000 DATA 4, 0x020e0754, 0x00000000 DATA 4, 0x020e04ac, 0x00000030 DATA 4, 0x020e04b0, 0x00000030 DATA 4, 0x020e0464, 0x00000030 DATA 4, 0x020e0490, 0x00000030 DATA 4, 0x020e074c, 0x00000030 DATA 4, 0x020e0494, 0x00000030 DATA 4, 0x020e04a0, 0x00000000 The .cfg files used in this example were taken from an old U-Boot version (2009) non dtb capable. The used files are found in the attached .zip file. The specific initialization code for each board is found in mx6<customer board>.c in board/freescale/mx6<customer board>.c  in this case board/freescale/mx6_udoo/mx6_udoo.c file. Below it is explained the needed changes to route the serial console to the correct UART module, disable an external watchdog, configure and initialize the Ethernet PHY, change the lvds clock and configure the correct USDHC module.        U-Boot calls already defined functions from a function pointer array that takes care of the board initialization at different stages. For example the board_early_init_f() is called at an        early phase where we can disable the wdog and initialize the uart pins; board_init() and board_late_init() are called after board_early_init_f(). The UDOO board features an external watchdog that needs to be disabled with a GPIO, otherwise U-Boot resets after a few seconds:          The WDOG pins need to be configured and in the mx6_udoo.c file a global struct configuration for those pins is declared, as well as macros for each pin #define WDT_EN  IMX_GPIO_NR(5, 4) #define WDT_TRG IMX_GPIO_NR(3, 19) iomux_v3_cfg_t const wdog_pads[] = {         MX6_PAD_EIM_A24__GPIO5_IO04 | MUX_PAD_CTRL(NO_PAD_CTRL),         MX6_PAD_EIM_D19__GPIO3_IO19, }; static void setup_iomux_wdog(void) {         imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));         gpio_direction_output(WDT_TRG, 0);         gpio_direction_output(WDT_EN, 1);         gpio_direction_input(WDT_TRG); } This configuration needs to be called at some point of the board_early_init_f() int board_early_init_f(void) {         setup_iomux_wdog();         This way the board_early_init_f() calls the iomux for the external wdog and disables it. The UART console is routed to UART2, EIM_D26/UART2_TXD and EIM_D27/UART2_RXD. A different structure is defined with the pin configuration for the UART2.      iomux_v3_cfg_t const uart2_pads[] = {         MX6_PAD_EIM_D26__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL),         MX6_PAD_EIM_D27__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL), }; This configuration should be called at early stage too. static void setup_iomux_uart(void) {         imx_iomux_v3_setup_multiple_pads(uart2_pads, ARRAY_SIZE(uart2_pads)); } int board_early_init_f(void) {         setup_iomux_wdog();         setup_iomux_uart(); Also the UART BASE register has to be defined as well as the console device. This is defined in the include/configs/mx6_udoo.h file. #define CONFIG_MXC_UART_BASE   UART2_BASE #define CONFIG_CONSOLE_DEV      "ttymxc1" The UDOO board features only one micro SD slot to boot and U-Boot environment storage. It uses only 4 bits and it has to be configured too. In the include/configs/mx6_udoo.h file the USDHC module has to be defined and the MMC environment device. #define CONFIG_SYS_FSL_USDHC_NUM   3 #define CONFIG_SYS_MMC_ENV_DEV       0     /* SDHC3 */          The USDHC3 pin configuration has to be defined:      iomux_v3_cfg_t const usdhc3_pads[] = {         MX6_PAD_SD3_CLK__SD3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),         MX6_PAD_SD3_CMD__SD3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),         MX6_PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),         MX6_PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),         MX6_PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),         MX6_PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),         MX6_PAD_NANDF_D0__GPIO2_IO00    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */ }; struct fsl_esdhc_cfg usdhc_cfg[1] = {         {USDHC3_BASE_ADDR, 0, 4}, }; This must be called and configured from the board_mmc_init() function: int board_mmc_init(bd_t *bis) {         s32 status = 0;         imx_iomux_v3_setup_multiple_pads(         usdhc3_pads, ARRAY_SIZE(usdhc3_pads));         usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);                 status |= fsl_esdhc_initialize(bis, &usdhc_cfg[0]);         return status; } The Ethernet PHY is configured in the board_eth_init() function. This function should initialize the pins for the external ethernet phy, mdio and phy configuration.  Just a piece of code is shown below: iomux_v3_cfg_t const enet_pads1[] = {         MX6_PAD_ENET_MDIO__ENET_MDIO            | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_ENET_MDC__ENET_MDC              | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_TXC__RGMII_TXC       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_TD0__RGMII_TD0       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_TD1__RGMII_TD1       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_TD2__RGMII_TD2       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_TD3__RGMII_TD3       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_TX_CTL__RGMII_TX_CTL      | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_ENET_REF_CLK__ENET_TX_CLK       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_RXC__RGMII_RXC       | MUX_PAD_CTRL(ENET_PAD_CTRL),         /* RGMII reset */         MX6_PAD_EIM_D23__GPIO3_IO23              | MUX_PAD_CTRL(NO_PAD_CTRL),         /* alimentazione ethernet*/         MX6_PAD_EIM_EB3__GPIO2_IO31              | MUX_PAD_CTRL(NO_PAD_CTRL),         /* pin 32 - 1 - (MODE0) all */         MX6_PAD_RGMII_RD0__GPIO6_IO25            | MUX_PAD_CTRL(NO_PAD_CTRL),         /* pin 31 - 1 - (MODE1) all */         MX6_PAD_RGMII_RD1__GPIO6_IO27            | MUX_PAD_CTRL(NO_PAD_CTRL),         /* pin 28 - 1 - (MODE2) all */         MX6_PAD_RGMII_RD2__GPIO6_IO28            | MUX_PAD_CTRL(NO_PAD_CTRL),         /* pin 27 - 1 - (MODE3) all */         MX6_PAD_RGMII_RD3__GPIO6_IO29            | MUX_PAD_CTRL(NO_PAD_CTRL),         /* pin 33 - 1 - (CLK125_EN) 125Mhz clockout enabled */         MX6_PAD_RGMII_RX_CTL__GPIO6_IO24         | MUX_PAD_CTRL(NO_PAD_CTRL), }; static iomux_v3_cfg_t const enet_pads2[] = {         MX6_PAD_RGMII_RD0__RGMII_RD0       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_RD1__RGMII_RD1       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_RD2__RGMII_RD2       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_RD3__RGMII_RD3       | MUX_PAD_CTRL(ENET_PAD_CTRL),         MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL      | MUX_PAD_CTRL(ENET_PAD_CTRL), }; static void setup_iomux_enet(void) {         imx_iomux_v3_setup_multiple_pads(enet_pads1, ARRAY_SIZE(enet_pads1));         udelay(20);         gpio_direction_output(IMX_GPIO_NR(2, 31), 1); /* Power on enet */         gpio_direction_output(IMX_GPIO_NR(3, 23), 0); /* assert PHY rst */         gpio_direction_output(IMX_GPIO_NR(6, 24), 1);         gpio_direction_output(IMX_GPIO_NR(6, 25), 1);         gpio_direction_output(IMX_GPIO_NR(6, 27), 1);         gpio_direction_output(IMX_GPIO_NR(6, 28), 1);         gpio_direction_output(IMX_GPIO_NR(6, 29), 1);         udelay(1000);         gpio_set_value(IMX_GPIO_NR(3, 23), 1); /* deassert PHY rst */         /* Need delay 100ms to exit from reset. */         udelay(1000 * 100);         gpio_free(IMX_GPIO_NR(6, 24));         gpio_free(IMX_GPIO_NR(6, 25));         gpio_free(IMX_GPIO_NR(6, 27));         gpio_free(IMX_GPIO_NR(6, 28));         gpio_free(IMX_GPIO_NR(6, 29));         imx_iomux_v3_setup_multiple_pads(enet_pads2, ARRAY_SIZE(enet_pads2)); }           Let's notice that the external PHY is not the same as the SABRESD AR8031. The UDOO features the MICREL KSZ9031 PHY. The latter needs to be defined and the former undefined in the include/configs/mx6_udoo.h file. #undef  CONFIG_PHY_ATHEROS #define CONFIG_PHY_MICREL #define CONFIG_PHY_MICREL_KSZ9031 Besides the PHY address has to be changed. #define CONFIG_FEC_MXC_PHYADDR  6 At this point, the serial console, SD card saving arguments and ethernet should be working. The last point is to configure the LVDS display. The LVDS display of the UDOO board is connected in the same port as the SABRE-SD board, but the operation frequency is different and it has to be modified to work at ~ 33.26MHz for the 7 inches LVDS display.      The mx6_udoo.c file contains a setup_display function that configures the LDB module. This functions is called in the board_early_init_f(). With the current clock configuration is not possible to get  the 33.2MHz for the LVDS and a different clock source for the LDB module must be chosen. The backlight and lvds power signals must be on.           The current configuration uses the mmdc_ch1 clock and to get closer to 33.26MHz the PLL2_PFD0 is chosen.        gpio_direction_output(IMX_GPIO_NR(1, 2), 1); /* LVDS power On */         gpio_direction_output(IMX_GPIO_NR(1, 4), 1); /* LVDS backlight On */         imx_iomux_v3_setup_multiple_pads(di0_pads, ARRAY_SIZE(di0_pads));         enable_ipu_clock();         imx_setup_hdmi();         /* Turn on4LDB0, LDB1, IPU,IPU DI0 clocks */         reg = readl(&mxc_ccm->CCGR3);         reg |=  MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK;         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 |= (1 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET)               | (1 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);         writel(reg, &mxc_ccm->cs2cdr); With this changes you can compile the new U-Boot image with ./build_u-boot.sh and then just copy the uboot.imx file to your sd: # sudo cp if=uboot.imx of=/dev/sdX bs=512 seek= 2 && sync 5. TESTING YOUR CHANGES Inser the sd with the U-Boot image to micro sd slot and power up the board. You should get the U-Boot serial console like shown below. In the console you can test the ethernet and phy configuration with the PING command: I hope you find these basic steps useful for different boards.
View full article
In order to create this Ogg Theora encoder example you need to add libogg, libvorbis and libtheora to your system. Download these libs from http://www.theora.org/downloads/ : libogg-1.1.3, libvorbis-1.2.0 and libtheora-1.0.tar.bz2 Copy them to /opt/ltib/pkgs Create the directories ltib/dist/lfs-5.1/libogg, ltib/dist/lfs-5.1/libvorbis, ltib/dist-5.1/lfs/libtheora. Copy these spec files to its respective directories: File:Libogg.gz File:Libvorbis.gz File:Libtheora.gz Execute this sequence to compile and install these libs: $ ./ltib -p libogg.spec -m prep $ ./ltib -p libogg.spec -m scbuild $ ./ltib -p libogg.spec -m scdeploy $ ./ltib -p libvorbis.spec -m prep $ ./ltib -p libvorbis.spec -m scbuild $ ./ltib -p libvorbis.spec -m scdeploy $ ./ltib -p libtheora.spec -m prep $ ./ltib -p libtheora.spec -m scbuild $ ./ltib -p libtheora.spec -m scdeploy Now download and compile yuv2theora.c encoder example: File:Yuv2theora.gz $ ./ltib -m shell LTIB> gcc yuv2theora.c -o yuv2theora `pkg-config --libs --cflags theora` In this example we used a video sample (YUV420) on CIF format: http://140.116.72.80/~jhlin5/ns2/yuv_to_avi/paris_cif.yuv Update: All these libraries were added on LTIB Savannah CVS, then you just need to use them and compile the above code.
View full article
These days I supported a customer to enable LVDS in function. The data format between external LVDS in chip and i.MX6 CSI is RGB565, with HSYNC and VSYNC signals available. So we take gated mode configuration for i.MX6 CSI. Customer environment:  i.MX6 D  + Linux LTIB 4.0.0 BSP By default,  RGB565 gated mode is not supported by Linux LTIB 4.0.0 V4L2 capture driver, here is a summary for what we need to change for the driver to support RGB565 gated mode. Please apply the attached patch "0001-ENGR00262270-IPU3-Basic-16-bit-generic-data-support.patch". By this patch, IPU_PIX_FMT_GENERIC_16 can be supported by ipu3 driver. For V4L2 capture setup, file linux-3.0.35/drivers/media/video/mxc/capture/mxc_v4l2_capture.c,  function mxc_v4l2_s_fmt(), add code segment like this:                  switch(f->fmt.pix.pixelformat) {                  ............................................................................                  case V4L2_PIX_FMT_SGRBG8:                           size = f->fmt.pix.width * f->fmt.pix.height * 2;                           bytesperline = f->fmt.pix.width * 2;                           break;                  default:                           break;                  }                  Also for file linux-3.0.35/drivers/media/video/mxc/capture/ipu_csi_enc.c,  function csi_enc_setup(), please add code segment:                  else if (cam->v2f.fmt.pix.pixelformat == V4L2_PIX_FMT_SGRBG8)                            pixel_fmt = IPU_PIX_FMT_GENERIC_16;           By the modifications above, IPU_PIX_FMT_GENERIC_16 can be set for the CSI IDMAC channel. For sensor driver, please set pixel format to IPU_PIX_FMT_GENERIC_16 Don't forget to set GATED MODE and data with to 16 bits for CSI param in file linux-3.0.35/drivers/media/video/capture/mxc_v4l2_capture.c, function mxc_v4l2_s_param                 csi_param.clk_mode = IPU_CSI_CLK_MODE_GATED_CLK;                 csi_param.data_width = IPU_CSI_DATA_WIDTH_16; Please ensure CSI->MEM IDMAC channel should be choosed      The key point is that for CSI RGB565 gated mode support, the pixel format for IDMAC channel should be set to GENERIC 16, and for CSI port configuration, the pixel format is BAYER mode.
View full article
Script which patches the ltib folder on Ubuntu 12.04. Steps: $ cp patch-ltib-ubuntu12.04.sh <your ltib folder> $ cd <your ltib folder> $ chmod +x patch-ltib-ubuntu12.04.sh $ ./patch-ltib-ubuntu12.04.sh
View full article
This patch is for i.MX6 ESPI controller slave mode (SPI timing mode 0 and 3) support. Hardware prepare:   Connect two i.MX6 Sabresd boards, remove U14 SPI nor device, connect two boards like:          MISO --- MISO          MOSI --- MOSI          SS     --- SS          CLK   --- CLK          GND  ---  GND Software prepare: 1>Apply patch spi_slave_2013_10_12.patch on 3.0.35_4.1.0 Linux BSP release.     Note two board all need choose CONFIG_IMX6_SDP_MISCSPI, CONFIG_SPI_SPIDEV of kernel Symbol: IMX6_SDP_MISCSPI [=y]                                                                                                              Location:   |     -> Device Drivers                                                                                                                      |       -> Misc devices (MISC_DEVICES [=y]) Symbol: SPI_SPIDEV [=y]  Location:                                                                                                                                            |     -> Device Drivers                           |       -> SPI support (SPI [=y])    Spi master board choose CONFIG_SPI_IMX_VER_2_3 Symbol: SPI_IMX_VER_2_3 [=y] Location:                                                                                                                                           |     -> Device Drivers                                                                                                                                 |       -> SPI support (SPI [=y])                                                                                                                       |         -> Choose IMX SPI work mode (<choice> [=y])    Spi slave board choose CONFIG_SPI_IMX_VER_2_3_SLAVE. Symbol: SPI_IMX_VER_2_3_SLAVE [=y] Location:                                                                                                                                           |     -> Device Drivers                                                                                                                                 |       -> SPI support (SPI [=y])                                                                                                                       |         -> Choose IMX SPI work mode (<choice> [=y]) 2>Compile test application  mxc_spi_test1.c to generate mxc_spi_test. 3> Test steps : First  spi slave board input cmd mxc-spi-test –D 0 –b 32 –L 32 Then spi master board input cmd mxc-spi-test –D 0 –b 32 –L 32           This tool will write its buffer ( the content is same in two side ) to the  other board  through  SPI bus , then read data from the other board , and compare with its write buffer.
View full article
Question: The code signing tool(CST) of i.MX6 with "CST -h" command just for viewing help message took about 22 minutes. On other system, it was shorter but still took about 2 minutes. CST version is BLN_CST_MAIN_02.00.00. More test results: 1. Print help message => 4 min. dnlk@bauer-mm2014:~/secureboot/bBLN_CST_MAIN_02.00.00/linux$ date && ./cst --help && date Fri Oct 18 14:10:52 KST 2013 Fri Oct 18 14:15:01 KST 2013 2. Signing 512MB file => 11 min. dnlk@bauer-mm2014:~/secureboot/bBLN_CST_MAIN_02.00.00/linux$ date && ./cst --output "out_system.csf" < "example_system.csf" && date Fri Oct 18 14:15:01 KST 2013 CSF Processed successfully and signed data available in out_system.csf Fri Oct 18 14:25:47 KST 2013 3. Signing 3MB file => 17 min. dnlk@bauer-mm2014:~/secureboot/bBLN_CST_MAIN_02.00.00/linux$ date && ./cst --output "out_kernel.csf" < "example_kernel.csf" && date Fri Oct 18 14:25:47 KST 2013 CSF Processed successfully and signed data available in out_kernel.csf Fri Oct 18 14:42:39 KST 2013 4. Signing 160KB file => 2 min. dnlk@bauer-mm2014:~/secureboot/bBLN_CST_MAIN_02.00.00/linux$ date && ./cst --output "out_uboot.csf" < "example_uboot.csf" && date Fri Oct 18 14:42:39 KST 2013 CSF Processed successfully and signed data available in out_uboot.csf Fri Oct 18 14:45:05 KST 2013 Answer: The slow performance is caused by lack of entropy source and it takes long time to initialize random number generator. Check amount of entropy  "cat /proc/sys/kernel/random/entropy_avail" Tried to install package rng-tools. 1. $sudo apt-get install rng-tools 2. add the following settings in /etc/default/rng-tools HRNGDEVICE=/dev/urandom RNGDOPTIONS=”-W 90% -t 1? 3. sudo /etc/init.d/rng-tools restart 4. cat /proc/sys/kernel/random/entropy_avail After rng-tools starts, entropy increases from less than 100 to more than 1000, then command ./cst -h can run very smoothly.
View full article
ERR005723           PCIe: PCIe does not support L2 Power Down   Description: When PCIe works as Root Complex, it can exit L2 mode only through reset. Since PCIe doesn't have a dedicated reset control bit, it cannot exit L2 mode.   Projected Impact: PCIe does not support L2 Power Down   Workarounds: The PCIe can be put in PDDQ mode to save on PCIe PHY power and wakeup only by the OOB (Out of Band) wakeup signal (since wakeup by a beacon from link partner is not supported) driven from the link partner (End Point). This signal could be used as a GPIO interrupt to exit this mode. The limitation of this workaround is that the link partner cannot be put into L2.   Proposed Solution:                 No fix scheduled   Linux BSP Status:                 No software workaround available   SW workaround used to fix ERR005723 in Linux BSP Why the original workarounds can’t be implemented in Linux BSP * PCIe controller doesn’t have the reset mechanism that can be used when re-insmod the PCIe driver without power down/up PCIe module. * During the PCie driver rmmod/insmod operations, the PCIe CLKs would be turned off/on. IC can’t guarantee that the PCIe PHY can work well and re-establish the PCIe link properly. One SIMPLE SW workaround for this errata imx: pcie: toggle bit18 of grp1 fix pcie can't exit L2 issue.   Set bit18 of gpr1 before enter into supend, and clean it after resume, can fix the following errata. Errata ERR005723_PCIe PCIe does not support L2 Power Down. About the details, please refer to the attached patch. "0001-imx-pcie-toggle-bit18-of-grp1-fix-pcie-can-t-exit-L2.patch"   The conception of the other SW workaround (System warm-reset) The procedures of the original suspend/resume. Suspend User suspend command echo mem > /sys/power/state All driver call suspend function SRPG,  ARM save all state to memory Enter Stop mode and Power down ARM   Resume:   GPC receive IRQ Wake up system Power on ARM domain. ROM code running Jump to SRPG point Recovery ARM status from memory Call all devices resume function.   Because PCIe only reset by system reset, we need change above follow. Resume:   GPC receive IRQ Wake up system Power on ARM domain. ROM code running Jump to SRPG point Warm Reset system, memory context will be kept. But all peripheral status lost. ROM code running Jump to SRPG point again. Recovery ARM status from memory Call all devices resume function. Resume function call init to initialize it.  And recover to the status saved before.   Impact: Can’t support usb remote wake up, which required 4ms responsive Longer latency, warm reset need some ms.  The recovery of the device status needs some more ms.   Risk:   Current BSP have not tested above follow Device driver have not supported this follow yet. Need additional work to enable \debug\test it.     Modules enabled in this workaround now: * UART * ENET * PCIe   Tests procedure. HW: one i.MX6Q SD boards, and one INTEL pciex1 1000M CT network card.   SW(The images used by me are attached):   * Apply the attached patches(kernel and uboot) to the kernel/uboot source codes, re-build, get the images. Kernel is based on imx_3.0.35_4.0 release, uboot , is based on imx_v2009.08 # build out SD/MMC and USB driver to make DRAM hibernate work     # build pcie in.   *procedure of the suspend/resume tests;     # unload ep's driver --> suspend/resume --> reload ep's driver.   NOTE: Please make sure that the command line contains “no_console_suspend” The command used to enable the console input wake up after login the consol: echo enabled > /sys/devices/platform/imx-uart.0/tty/ttymxc0/power/wakeup   Log when the INTEL CT 1G network card is used: -------------------------------log--------------------------------------------   PM: Syncing filesystems ... done.                                             start suspend Freezing user space processes ... (elapsed 0.01 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done. add wake up source irq 101 add wake up source irq 99 add wake up source irq 103 add wake up source irq 51 add wake up source irq 58 PM: suspend of devices complete after 15.482 msecs PM: late suspend of devices complete after 0.823 msecs Disabling non-boot CPUs ... CPU1: shutdown CPU2: shutdown CPU3: shutdown IMX PCIe imx_pcie_pltfm_suspend entering. IMX PCIe imx_pcie_pltfm_suspend exit.          suspended     U-Boot 2009.08-00679-g6ec6783 (May 20 2013 - 14:50:20)     resume   CPU: Freescale i.MX6 family TO1.2 at 792 MHz src 0x92eac8 resume 0x92eac8 jump to resume IMX PCIe imx_pcie_pltfm_resume entering. IMX PCIe imx_pcie_pltfm_resume pcie start re-link. IMX PCIe port imx_pcie_pltfm_resume: re-link up. Enabling non-boot CPUs ... CPU1: Booted secondary processor Calibrating delay loop (skipped) already calibrated this CPU i.MXC CPU frequency driver CPU1 is up CPU2: Booted secondary processor Calibrating delay loop (skipped) already calibrated this CPU i.MXC CPU frequency driver CPU2 is up CPU3: Booted secondary processor Calibrating delay loop (skipped) already calibrated this CPU i.MXC CPU frequency driver CPU3 is up PM: early resume of devices complete after 0.974 msecs remove wake up source irq 58 imx-ipuv3 imx-ipuv3.0: IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7) imx-ipuv3 imx-ipuv3.1: IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7) remove wake up source irq 51 remove wake up source irq 103 remove wake up source irq 101 remove wake up source irq 99 PM: resume of devices complete after 54.174 msecs Restarting tasks ... done. PHY: 1:01 - Link is Up - 100/Full                            resume is ok, reload ep’s driver num is 61 e1000e: Intel(R) PRO/1000 Network Driver - 1.3.10-k2 e1000e: Copyright(c) 1999 - 2011 Intel Corporation. e1000e 0000:01:00.0: Disabling ASPM L0s e1000e 0000:01:00.0: (unregistered net_device): Failed to initialize MSI-X interrupts.  Falling back to MSI interrupts. e1000e 0000:01:00.0: (unregistered net_device): Failed to initialize MSI interrupts.  Falling back to legacy interrupts. e1000e 0000:01:00.0: eth1: (PCI Express:2.5GT/s:Width x1) 00:1b:21:3a:18:8b e1000e 0000:01:00.0: eth1: Intel(R) PRO/1000 Network Connection e1000e 0000:01:00.0: eth1: MAC: 3, PHY: 8, PBA No: E42641-005 e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: seq=0 ttl=64 time=3.126 ms 64 bytes from 192.168.0.1: seq=1 ttl=64 time=0.244 ms 64 bytes from 192.168.0.1: seq=2 ttl=64 time=0.232 ms 64 bytes from 192.168.0.1: seq=3 ttl=64 time=0.206 ms 64 bytes from 192.168.0.1: seq=4 ttl=64 time=0.222 ms 64 bytes from 192.168.0.1: seq=5 ttl=64 time=0.207 ms 64 bytes from 192.168.0.1: seq=6 ttl=64 time=0.250 ms 64 bytes from 192.168.0.1: seq=7 ttl=64 time=0.209 ms 64 bytes from 192.168.0.1: seq=8 ttl=64 time=0.154 ms 64 bytes from 192.168.0.1: seq=9 ttl=64 time=0.211 ms   --- 192.168.0.1 ping statistics --- 10 packets transmitted, 10 packets received, 0% packet loss round-trip min/avg/max = 0.154/0.506/3.126 ms PM: Syncing filesystems ... done.                                   ep’s functions are ok, re-do the suspend/resume tests Freezing user space processes ... (elapsed 0.01 seconds) done. -------------------------------end-------------------------------------------- Original Attachment has been moved to: 0001-imx-pcie-toggle-bit18-of-grp1-fix-pcie-can-t-exit-L2.patch.zip Original Attachment has been moved to: uboot_patch_image.zip Original Attachment has been moved to: kernel_patch_image.zip
View full article
Prerequisites: The build is verified on prebuilt rootfs(based on LTIB) which can be downloaded from freescale.com or built from Yocto fsl-image-gui These steps are performed on the host: 1. Download the git respository for qt5: $ git clone git://gitorious.org/qt/qt5.git qt5     cd qt5     Let us consider this as <QTDir> 2. Create a build directory to install for the qt5 packages. This directory can be  in any loctation. For example,  $ mkdir /opt/qt5 sudo chown -R <username> /opt/qt5 Let us consider the the installdir as /opt/qt5 3. Enter the Qt5 directory and run the perl init-repository script to download all the source code for    Qt5. To download all the source code will take about an hour. $ perl init-repository 4. Download the attached linux-imx5-g++.tar.gz and copy to  qtbase/mkspecs/devices. Will try to get updstreamed. 5. From the following path $ gedit qtbase/mkspecs/devices/linux-imx5-g++/qmake.conf   6. At the top of the qmake.conf, there is a configure line. Copy and paste the configure line into a text file located    in your build build directory. Edit the configure line to find your toolchain and filesystem. Also make sure to    include the options -no-pch, -no-opengl, -opengl es2, Here is an example of    a configure line.     $ cd <QTDir>     $ cd qtbase     $  ./configure -v -opensource -confirm-license -no-pch -opengl es2 -make libs -device imx5 \     -nomake examples -nomake demos \ -device-option CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi- \ -sysroot <rootfs> -no-gcc-sysroot \ -prefix <installdir> 7. Make the textfile that has the configure line and executable and run it. When the configure summary is shown make sure the Qt5    has openGL ES 2.0 support. Do build       $make     $make install    When Qt5 has finished building, Qt5 will be installed in two places:            1. <location of rootfs>/<installdir>            2. <HOST Machine>/<install dir> This is good because now all the libraries and binaries for Qt5 are installed on the host and the target filesystem. Therefore, the target already has all the libraries and  binaries needed to run Qt5. 8. Also need to build qtjsbackend and qtdeclarative.     $ cd <location to Qt5 git>     $ cd qtjsbackend     $ ../qtbase/bin/qmake -r     $ make && make install        $ $ cd <location to Qt5 git>     $ cd qtdeclarative     $ ../qtbase/bin/qmake -r     $ make && make install 9. Run Qt apps on target     - Boot the target either with NFS or SD Image     - Ensure that folder <installdir> is copied on target file system at “/usr/local”.     - Launch application using     $ cd /usr/local/qt5/examples/opengl/hellogl_es2     $ ./hellogl_es2 -platform eglfs
View full article
Overview The purpose of this document is to provide the patches to fix display mess issue in TextView based on MX6 Android R13.4-GA and R13.4.1 ICS release. Please note these patches are only validated basically for dedicated issues. If you find any side effect with these patches, please add the comments into this document. Issue Description Software: R13.4-GA or R13.4.1 Android releases Hardware: i.MX6Dual/Quad SabreSD board or i.MX6DualLite SabreSD board. Test steps: Install testviewtest.apk Run this APK and key in the text, you will see the text display mess after key in more texts. You can also get the issue descriptions from https://community.freescale.com/thread/303194 Patches You can get the patches from attached textview_fix.zip. For R13.4-GA, please apply the following patches: kernel_imx, unzip Kernel/r13.4-ga/kernel-patch-r13.4-ga-gpu4.6.9p10.tar.gz and apply the patches. device/fsl-proprietary/gpu-viv: unzip gpu_lib/gpu-viv-lib-4.6.9p10-font-libGAL-crash-fix.tar.gz and replace lib folder. For R13.4.1, please apply the following patches: kernel_imx, Apply the patch Kernel/r13.4.1/0001-upgrade-gpu-4.6.9p10-kernel-driver_r13.4.1.patc device/fsl-proprietary/gpu-viv: unzip gpu_lib/gpu-viv-lib-4.6.9p10-font-libGAL-crash-fix.tar.gz and replace lib folder.
View full article
This document is a simple guide on one of the ways in which 3D models can be loaded and displayed using OpenGL.   Requirements - Blender (open source) or a similar program that allows to export 3D models in the .obj format. We’ll be using Blender to export the .obj file with the essential information to draw the 3D model, without information on textures, for example. https://www.blender.org/   - i.MX6 Linux BSP image with X11 support – For this document we’ll use the L3.10.31 BSP, which is compiled using Yocto 1.6.You may use a newer BSP. We’ll use the fsl-image-gui. You may use a Qt5 image with X11 from newer BSPs. - GCC Toolchain -You may either cross compile on a Host or compile on the same board by providing the necessary libraries and toolchain. On the L3.10.31 you need to manually add GCC to your baked image. In newer releases this may not necessary. For adding the GCC package to a Yocto image and compiling within the board itself please add the following line to the conf/local.conf file inside your build directory. IMAGE_INSTALL_append += " gcc libgcc" If you wish to cross compile from your host and then run on your board you first will need to extract the toolchain from the BSP, which can be done by following the instructions of the next document: https://community.nxp.com/docs/DOC-95122  - FreeGLUT – FreeGLUT is an open source alternative to the OpenGL Utility Toolkit (GLUT), a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. This is not necessary for drawing the model on the window but foes allow for functions such as rotating it. You may install it on your host with the following command: $ sudo apt-get install freeglut3-dev For additional information and downloads of FreeGLUT please refer to the projects website: http://freeglut.sourceforge.net/   - i.MX6D/Q/DL/S/SX GPU Demo Framework SDK – We’ll use the GPU Test examples which are available at the following link. Source code for this document implementation is attached but for more examples of OpenGL ES please refer to this SDK. (Please note that you may need to login in order to download this file) https://www.nxp.com/webapp/Download?colCode=FSL_GPU_SDK_2.3&appType=license&location=null&fpsp=1&WT_TYPE=Software%20Development%20Kits&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=zip&WT_ASSET=Downloads&fileExt=.zip&Parent_nodeId=1337637154535695831062&Parent_pageType=product   - i.MX6Q Board – For this example we will be using the i.MX6Q SABRE Board, but you may run OpenGL ES on any i.MX6Q board provided that you provide the necessary packages to support OpenGL ES.   Brief introduction to OpenGL ES? OpenGL is a software interface to hardware accelerated graphics. The API of this interface consists of about 150 distinct commands that allow you to specify objects and perform operations on them in order to produce interactive three-dimensional applications. OpenGL ES is the OpenGL implementation for Embedded Systems. Somei.MX6 Processors like the i.MX6Q possess a Vivante GPU module that runs on OpenGL ES. When using OpenGL or OpenGL ES all 3D objects are descripted as a series of triangles. This is important to mention as it will make the instructions we will need for describing our model make more sense.   Step 1 - Exporting a model as .obj You may import a 3D model from other sources or make your own simple 3D model in blender. For this example we’ll make a simple 3D NXP logo and export it. Once you have your model ready, select the object in objet mode with a right click. Once selected select File > Export > Wavefront (.obj) You may now select where and with what name to export the object file. On the left panel you will have the export options. It’s important to leave all options unchecked except for: Write Normals Include UVs Triangulate Faces (You may change the scale of your model and it won’t negatively affect the process)     The .obj model may be opened with a text editor and we’ll see that it basically describes the object as a series of parameters that may include vertex data, free-form curve/surface attributes, elements, free-form curve/surface body statements, connectivity between free-form surfaces, grouping and display/render attribute information. For our example we’ll be using a simple file that just contains: - List of geometric vertices, with (x,y,z) coordinates v 0.292475 0.017345 -0.152653 - List of vertex normals in (x,y,z) form vn 0.0000 1.0000 -0.0000 - Polygonal face element f 3//1 113//1 4//1   Step 2- Converting .obj to OpenGL compatible information We’ll be using the following program that allows to convert from .obj format to a format compatible with OpenGL as the conversion from one format to the other is not part of the scope of this document. https://fr.jeffprod.com/obj-to-opengl.php This program does more than just changing the format on the file and do perform some operations to translate the parameters of the .obj file to the following OpenGL ES information: static GLfloat v_triangles[] static GLfloat vt_triangles[] static GLfloat vn_triangles[] We’ll be using these variables and also the number of triangles which for this example is 1440. This can be found at the end of the file on the following line which effectively draws the complete triangle array: glDrawArrays(GL_TRIANGLES, 0, 1440);   Step 3 – Loading the model arrays to the .C program. You will need to copy the three GLfloat arrays to your OpenGL ES .C code. (You may alternatively use an include to have it more neatly organized but this is outside the scope of this document) In our example we’ll copy them inside void render (). Inside this function we’ll find the Draw Array instruction in which we must specify the number of triangles in our array. You may just replace your model information AND also change the number of triangles, otherwise you will receive an error when running the program.   glDrawArrays(GL_TRIANGLES,0,1440); We are using a simple rotation using glRotate and incrementing the value of rotation with each flush of the screen.     glRotatef(rlogo, 2.0f, 1.0f, 1.0f); The variable rlogo gets increased each time the screen is drawn. Depending on your model you may need to change the view in order to be able to see your model. This example uses a very small model so we have a viewpoint just 1.25 units away from the screen (Z axis). Depending on your model you may need to be further away in order to see the model on the screen. glTranslatef(0.0f, 0.0f, -1.25f);    Step 4- Compiling the OpenGL example For this simple example we will be using the examples from the GPU  as base an add the information of the model we have just exported. We’ll use the two attached files for this: Makefile.x11 – A make file with the dependencies and attributes necessary to compile our C file. NXPlogo.c – C file with the information of the model and instructions on to draw it on the screen. You can compile using the following commands to first clean in case you built before and then compiling the code. make –f Makefile.x11 clean make Makefile.x11 Once the program has compiled you can run it from the command prompt by using: export DISPLAY=:0.0 ./NXPlogo The result will be as follows, where the 3D model is rotating,     Additional Resources 2D and 3D Graphics in NXP Devices http://www.nxp.com/files/training/doc/dwf/DWF13_AMF_CON_T1025.pdf   i.MX6D/Q/DL/S/SX GPU Demo Framework SDK – Which provides the source code for the demo in which this example was built upon and also contains good documentation for those interested in OpenGL ES. https://www.nxp.com/webapp/Download?colCode=FSL_GPU_SDK_2.3&appType=license&location=null&fpsp=1&WT_TYPE=Software%20Development%20Kits&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=zip&WT_ASSET=Downloads&fileExt=.zip&Parent_nodeId=1337637154535695831062&Parent_pageType=product    OpenGL Redbook – Which is the most comprehensive book documenting and explaining the OpenGL API. http://www.opengl-redbook.com/
View full article
[中文翻译版] 见附件   原文链接: https://community.nxp.com/docs/DOC-341473 
View full article
Overview i.MX28EVK Setup Build Yocto Project image Create a SDCARD from the Linux Host Boot i.MX28EVK Create file system on USB Create Mount Point and Mount the USB device Create 250 MB File Create Exports File Restart NFS Server Ubuntu Linux Host Setup Create Mount Directory Mount i.MX28EVK Exported Directory Access the NFS mounted directory Overview This document describes the steps for configuring a NFS Server running on an i.MX Application Processor - in this case the evaluation board i.MX28 EVK. Once the NFS server is running, an Ubuntu 12.04 Linux host is then configured to NFS mount the i.MX28EVK exported directory. The Ethernet interface is used for the connection transport. A block diagram of the connection setup is shown below: An Ethernet switch provided the Ethernet connection between the Linux Host and the i.MX28EVK. A thumb drive was connected to the USB port on the i.MX28EVK which was used for the exported directory. i.MX28EVK Setup Build Yocto Project image Use core-image-minimal and add packages to conf/local.conf to support NFS MACHINE=imx28evk source setup-environment mx28-evk echo "CORE_IMAGE_EXTRA_INSTALL += \"bash kernel-modules nfs-utils\" " >> conf/local.conf bitbake core-image-minimal When bitbake finishes the images are found in tmp/deploy/images/imx28evk Create a SDCARD from the Linux Host sudo dd if=/tmp/deploy/images/imx28evk/core-image-minimal-imx28evk.sdcard of=/dev/sdc bs=4M && sync Boot i.MX28EVK Insert the SDCARD into slot 0 on the bottom side of the i.MX28EVK and connect the serial console. Power-on and push the POWER button on the lower conner to turn on. The Login credentials are User Name: root      There is no password configured by default. Create file system on USB The USB drive had one partition which was formatted with vfat file system: mkfs.vfat /dev/sdb1 Create Mount Point and Mount the USB device mkdir /mnt/usb mount /dev/sdb1 /mnt/usb Create 250 MB File dd if=/dev/zero of=/mnt/usb/file1.txt bs=512K count=500 Create Exports File echo "/mnt/usb *(rw,sync,no_root_squash,no_subtree_check)" > /etc/exports Restart NFS Server /etc/init.d/nfsserver stop /etc/init.d/nfsserver start Ubuntu Linux Host Setup Create Mount Directory sudo mkdir /mnt/remote Mount i.MX28EVK Exported Directory sudo mount -t nfs 10.85.1.10:/mnt/usb /mnt/remote Access the NFS mounted directory ls /mnt/remote
View full article
With Qt5  you will find the addition of new technologies that will make your development much easier. Qtquick2 SceneGraph Qml Qt5 is backwards compatible,  that means you can run your Qt 4.8 applications, But that doesn't mean they will have the best performance, sometimes it is better to do a porting to use the newest features. Qt5, has two options to paint components into the screen. Painting in Qt 5 is primarily done either with: The imperative QPainter API Qt’s declarative UI language, QML, and its scene graph back-end. QPainter As this document mentions  Qt5GraphicsOverview | Qt Wiki | Qt Project  The Qpainter engine uses software to paint, and is used when drawing Qimages or Qwidgets. Its  advantage over OpenGL is the high quality when antialiasing is enabled, and a complete feature set. The Qpainter can use an OpenGL engine, but as the document mentions it is more suceptible to state changes. And has to be used carefully. QML & Scene Graph. All visual QML items are rendered using the scene graph, a low-level, high-performance rendering stack, closely tied to OpenGL. Qt Quick 2 makes use of a dedicated scene graph based on OpenGL ES 2.0 or OpenGL 2.0 for its rendering. Using a scene graph for graphics rather than the traditional imperative painting systems (QPainter and similar), means the scene to be rendered can be retained between frames and the complete set of primitives to render is known before rendering starts. This opens up for a number of optimizations, such as batch rendering to minimize state changes and discarding obscured primitives. The QML scene graph is a new back-end for QML in Qt 5, and is based on OpenGL. It generally improves the performance of QML significantly over the QPainter-based back-end used in Qt 4. It achieves better performance in a number of ways: The scene graph uses OpenGL directly instead of going though a QPainter which could be using either the raster or OpenGL paint engine. This means that all the resources, like geometry, textures and shaders can be stored in a format suitable for OpenGL rather than using classes such as QPainterPath, QPixmap, QBrush, or QPen, which the QPainter would need to translate into OpenGL primitives and possibly cache. QML, being a declarative language, defines how the end result should look like, but it doesn’t define how and in which order each individual element is drawn. The drawing can therefore be reordered to reduce the number of state changes, or merged to reduce the number of draw calls. The scene graph uses a separate render thread, and synchronizes the animations with the vertical retrace on platforms where this can be supported. The render thread allows the preparation of the next frame to be done at the same time the current frame is being rendered. This has a positive effect also on single-core systems, since the render thread might block on OpenGL commands. The synchronization with the vertical retrace improves the perceived smoothness of the animations. We have tested on i.MX6 Both options, having the best results using QML Qtquick2 elements. When we tried using QtPainter via Widgets we face the problem that if not using a windowing system like X11 or Wayland the painter wont work well and will only show the QtGLWidget. With QML scene graph we are able to have an OpenGL element and a Qt element on the same environment, and there is an easy way to communicate one with the other and share variables.  Please look at the example results here: I.MX6 scene graph Qt5 - YouTube And the great advantage, the sceneGraph is all accelerated via OpenGL.
View full article
For default Android JB4.3 GA1.1.0 BSP, iMX6SL EVK board doesn't support BlueTooth, attached is the patch for the BSP to support AR3002 bluetooth.   The hardware information can be found at: https://community.freescale.com/docs/DOC-95016   iMX6SL_EVK_BlueTooth_Patch_for_JB4.3_1.1.0.tar.gz: these are the patch files. iMX6SL_EVK_BlueTooth_Support_for_JB4.3_1.1.0.tar.gz: these are the patched source code files. Please select one of above to use.
View full article
Tested on imx28 EVK Rev. D. When plug-in or plug-out cable on eth0 port, eth1 port (and vice versa) will also be reset and the communication will be interrupted. Reason: Both Ethernet PHYs on EVK board share the same GPIO as their reset pin, in software the function name is mx28evk_enet_gpio_init. So any call to pdata->init() in fec.c will reset both PHY at the same time. In order to avoid such problem, you have to use 2 individual GPIO for the PHY reset.
View full article
Hello! Here's some CODE!!! #include <iostream> #include <stdio.h> #include <assert.h> #include <string.h> #include <fcntl.h> #include <malloc.h> #include <math.h> #include <stdlib.h> //#define EGL_USE_GLES2 #include <GLES2/gl2.h> #include <EGL/egl.h> #include <GLES2/gl2ext.h> #include <EGL/eglext.h> #include <termios.h> #include <unistd.h> #include <fcntl.h> #ifdef EGL_USE_X11 #include <X11/X.h> #include <X11/Xlib.h> #endif EGLDisplay egldisplay; EGLConfig eglconfig; EGLSurface eglsurface; EGLContext eglcontext; EGLNativeWindowType eglNativeWindow; EGLNativeDisplayType eglNativeDisplayType; EGLNativeDisplayType fsl_getNativeDisplay() {   EGLNativeDisplayType eglNativeDisplayType = NULL; #if (defined EGL_USE_X11)   eglNativeDisplayType = XOpenDisplay(NULL);   assert(eglNativeDisplayType != NULL); #elif (defined EGL_API_FB)   eglNativeDisplayType = fbGetDisplayByIndex(0); //Pass the argument as required to show the framebuffer #else   display = EGL_DEFAULT_DISPLAY; #endif   return eglNativeDisplayType; } EGLNativeWindowType fsl_createwindow(EGLDisplay egldisplay, EGLNativeDisplayType eglNativeDisplayType) {   EGLNativeWindowType native_window = (EGLNativeWindowType)0; #if (defined EGL_USE_X11)   Window window, rootwindow;   int screen = DefaultScreen(eglNativeDisplayType);   rootwindow = RootWindow(eglNativeDisplayType,screen);   window = XCreateSimpleWindow(eglNativeDisplayType, rootwindow, 0, 0, 400, 533, 0, 0, WhitePixel (eglNativeDisplayType, screen));   XMapWindow(eglNativeDisplayType, window);   native_window = window; #else   const char *vendor = eglQueryString(egldisplay, EGL_VENDOR);   if (strstr(vendor, "Imagination Technologies"))   native_window = (EGLNativeWindowType)0;   else if (strstr(vendor, "AMD"))   native_window = (EGLNativeWindowType)  open("/dev/fb0", O_RDWR);   else if (strstr(vendor, "Vivante")) //NEEDS FIX - functs don't exist on other platforms   { #if (defined EGL_API_FB)   native_window = fbCreateWindow(eglNativeDisplayType, 0, 0, 0, 0); #endif   }   else   {   printf("Unknown vendor [%s]\n", vendor);   return 0;   } #endif   return native_window; } void fsl_destroywindow(EGLNativeWindowType eglNativeWindowType, EGLNativeDisplayType eglNativeDisplayType) {   (void) eglNativeWindowType; #if (defined EGL_USE_X11)   //close x display   XCloseDisplay(eglNativeDisplayType); #endif } void GLInit (void) {   static const EGLint s_configAttribs[] =   {   EGL_RED_SIZE, 5,   EGL_GREEN_SIZE, 6,   EGL_BLUE_SIZE, 5,   EGL_ALPHA_SIZE, 0,   EGL_SAMPLES, 0,   EGL_NONE   };   EGLint numconfigs;   printf("1");   eglNativeDisplayType = fsl_getNativeDisplay();   printf("2");   egldisplay = eglGetDisplay(eglNativeDisplayType);   printf("3");   eglInitialize(egldisplay, NULL, NULL);   printf("4");   assert(eglGetError() == EGL_SUCCESS);   printf("5");   eglBindAPI(EGL_OPENGL_ES_API);   printf("6");   eglChooseConfig(egldisplay, s_configAttribs, &eglconfig, 1, &numconfigs);   assert(eglGetError() == EGL_SUCCESS);   assert(numconfigs == 1);   printf("7");   eglNativeWindow = fsl_createwindow(egldisplay, eglNativeDisplayType);   assert(eglNativeWindow);   printf("8");   eglsurface = eglCreateWindowSurface(egldisplay, eglconfig, eglNativeWindow, NULL);   assert(eglGetError() == EGL_SUCCESS);   printf("9");   EGLint ContextAttribList[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };   eglcontext = eglCreateContext( egldisplay, eglconfig, EGL_NO_CONTEXT, ContextAttribList );   assert(eglGetError() == EGL_SUCCESS);   printf("10");   eglMakeCurrent(egldisplay, eglsurface, eglsurface, eglcontext);   assert(eglGetError() == EGL_SUCCESS); } void GLEnd (void) {   printf("Cleaning up...\n");   eglMakeCurrent(egldisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);   assert(eglGetError() == EGL_SUCCESS);   eglDestroyContext(egldisplay, eglcontext);   eglDestroySurface(egldisplay, eglsurface);   fsl_destroywindow(eglNativeWindow, eglNativeDisplayType);   eglTerminate(egldisplay);   assert(eglGetError() == EGL_SUCCESS);   eglReleaseThread(); } int main (int argc, char **argv) {   GLInit();   for( int i = 0; i < 100000; ++i)   {   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     // Clear The Screen And The Depth Buffer   glClearColor (.0f, .0f, 1.0f, 1.0f);   eglSwapBuffers (egldisplay, eglsurface);   }   GLEnd(); } Above code is stitched together from samples from GPU SDK. I've built an image using Yocto (dylan branch) and build the meta-toolchain-qt (and qte). Successfully managed to build above code ONLY FOR X11. Issues i am facing: 1) if build for X11 and run app on the board, window shows, but it stays white, when it should be BLUE...doesn't update no matter what color i glClear to. 2) when compiling with FB, fbCreateWindow and etc don't get recognized, i.e. undefined reference to `fbCreateWindow' .... WHAT header contains these functions???? 3) if even the basic samples don't work, how the hell is anybody supposed to build a GL application on this board?? --- more rhetorical than a real question, just frustrated here... what did i do wrong? 4) please show me a working tutorial or some code on how to get this EGL context initialized...i'm running at wit's end here...
View full article
1. Description     1) Support HDMI interlaced display mode, the followed format had been verified.         CEA format 5: 1920x1080i @60Hz         CEA format 6&7: 720(1440)x480i @60Hz         CEA format 20: 1920x1080i @50Hz         CEA format 21&22: 720(1440)x576i @50Hz     2) Support LCD interface for interlaced display mode, 1920x1080i @50Hz(CEA format 20)        had been verified. 2. File List -- 0001-IPUv3-support-interlaced-display-mode.patch    Patch to support interlaced display output for iMX6 ipuv3. -- 0002-iMX6-HDMI-support-interlaced-display-mode.patch    Patch to support interlaced display mode for iMX6 HDMI driver. -- 0003-iMX6-LCD-interface-supports-1920x1080i50-mode.patch    Patch to support interlaced display mode for iMX6 LCD interface driver.    -- readme.txt    this file, please refer to it before use the patches 3. Requirement - iMX6 SabreSD board. - L3.0.35_4.1.0_GA_iMX6DQ kernel. 4. How to use -- Copy the patch files to kernel folder.     $ cd ~/ltib/rpm/BUILD/linux-3.0.35/     $ git apply ./0001-IPUv3-support-interlaced-display-mode.patch     $ git apply ./0002-iMX6-HDMI-support-interlaced-display-mode.patch     $ git apply ./0003-iMX6-LCD-interface-supports-1920x1080i50-mode.patch -- Build the new kernel image:     $ cd ~/ltib/rpm/BUILD/linux-3.0.35     $ export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-     $ export ARCH=arm     $ make imx6_defconfig     $ make uImage -- Uboot parameters for video mode    Output 1080i50 display mode on HDMI:       "video=mxcfb0:dev=hdmi,1920x1080Mi@25,if=RGB24,bpp=32"    Output 1080i60 display mode on HDMI:       "video=mxcfb0:dev=hdmi,1920x1080Mi@30,if=RGB24,bpp=32"    Output 576i50 display mode on HDMI:       "video=mxcfb0:dev=hdmi,1440x576Mi@25,if=RGB24,bpp=32"    Output 480i60 display mode on HDMI:       "video=mxcfb0:dev=hdmi,1440x480Mi@30,if=RGB24,bpp=32"    Output 1080i50 display mode on LCD interface:       "video=mxcfb0:dev=lcd,LCD-1080I50,if=RGB565,bpp=32"       -- Switch HDMI interlaced mode    $ echo S:1920x1080i-50 > /sys/class/graphics/fb0/mode    $ echo S:1920x1080i-60 > /sys/class/graphics/fb0/mode    $ echo S:1440x480i-50 > /sys/class/graphics/fb0/mode    $ echo S:1440x576i-60 > /sys/class/graphics/fb0/mode 5. Know issue     1) When the interlaced display and another display work on same IPU,        blank and unblank the interlaced display will get the followed IPU        warning, but the display still works due to IPU can revover from the error.     imx-ipuv3 imx-ipuv3.0: IPU Warning - IPU_INT_STAT_5 = 0x00800000     imx-ipuv3 imx-ipuv3.0: IPU Warning - IPU_INT_STAT_10 = 0x00080000 2015-05-13 update: Replace the fourth patch to make interlace display mode follow CEA-861-specification The patch "0004-IPU-fine-tuning-the-interlace-display-timing-for-CEA.patch" was fine tuned for CEA-861-D specification on interlaced mode display. Please use this patch to replace the old 0004 patch. 2016-05-20 Update: For 3.0.35 BSP, add patch 0005-IPU-update-interlaced-video-mode-parameters-to-align.patch      Align the interlaced video mode parameters to progressive mode. 0006-IPU-update-IDMAC-setting-for-interlaced-display-mode.patch      Udate the IDMAC setting for interlaced display mode, output odd field data from memory first, it aligns with IPU DI timing, odd field first. For 3.14.52 BSP, created the new patch L3.14.52_1.1.0_GA_HDMI_Interlaced_Mode_Patch_2016_05_20.zip.
View full article