From 3b6f72f5b4c8b2f522252006bc1bf9bbc8c9d236 Mon Sep 17 00:00:00 2001 From: Uwe Kleine-König Date: Mon, 9 Sep 2019 21:40:13 +0200 Subject: video: imxfb: make pcr and bpp per-display settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These settings used to be specified per-mode. But the device tree bindings have these two values attached to the display and not to each mode. Also for the supported boards it doesn't matter as they all only have a single mode. This is preparatory work to add devicetree support for the imxfb driver. Signed-off-by: Uwe Kleine-König Signed-off-by: Sascha Hauer --- arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c | 30 ++++++------ arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c | 31 ++++++------ arch/arm/boards/freescale-mx21-ads/imx21ads.c | 34 +++++++------ arch/arm/boards/guf-neso/board.c | 58 +++++++++++------------ arch/arm/boards/karo-tx25/board.c | 34 +++++++------ arch/arm/boards/phytec-phycore-imx27/pcm038.c | 46 +++++++++--------- 6 files changed, 111 insertions(+), 122 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c index 25bf40ce79..76d6f5ba86 100644 --- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c +++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c @@ -56,22 +56,18 @@ struct imx_nand_platform_data nand_info = { .hw_ecc = 1, }; -static struct imx_fb_videomode imxfb_mode = { - .mode = { - .name = "CMO-QVGA", - .refresh = 60, - .xres = 320, - .yres = 240, - .pixclock = KHZ2PICOS(6500), - .hsync_len = 30, - .left_margin = 38, - .right_margin = 20, - .vsync_len = 3, - .upper_margin = 15, - .lower_margin = 4, - }, - .pcr = 0xCAD08B80, - .bpp = 16, +static struct fb_videomode imxfb_mode = { + .name = "CMO-QVGA", + .refresh = 60, + .xres = 320, + .yres = 240, + .pixclock = KHZ2PICOS(6500), + .hsync_len = 30, + .left_margin = 38, + .right_margin = 20, + .vsync_len = 3, + .upper_margin = 15, + .lower_margin = 4, }; static struct imx_fb_platform_data eukrea_cpuimx25_fb_data = { @@ -80,6 +76,8 @@ static struct imx_fb_platform_data eukrea_cpuimx25_fb_data = { .pwmr = 0x00A903FF, .lscr1 = 0x00120300, .dmacr = 0x80040060, + .pcr = 0xCAD08B80, + .bpp = 16, }; struct gpio_led led0 = { diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c index 63034e2755..52971ed7ee 100644 --- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c +++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c @@ -80,22 +80,19 @@ static struct i2c_board_info i2c_devices[] = { }; #ifdef CONFIG_DRIVER_VIDEO_IMX -static struct imx_fb_videomode imxfb_mode = { - .mode = { - .name = "CMO-QVGA", - .refresh = 60, - .xres = 320, - .yres = 240, - .pixclock = 156000, - .hsync_len = 30, - .left_margin = 38, - .right_margin = 20, - .vsync_len = 3, - .upper_margin = 15, - .lower_margin = 4, - }, - .pcr = 0xFAD08B80, - .bpp = 16,}; +static struct fb_videomode imxfb_mode = { + .name = "CMO-QVGA", + .refresh = 60, + .xres = 320, + .yres = 240, + .pixclock = 156000, + .hsync_len = 30, + .left_margin = 38, + .right_margin = 20, + .vsync_len = 3, + .upper_margin = 15, + .lower_margin = 4, +}; static struct imx_fb_platform_data eukrea_cpuimx27_fb_data = { .mode = &imxfb_mode, @@ -103,6 +100,8 @@ static struct imx_fb_platform_data eukrea_cpuimx27_fb_data = { .pwmr = 0x00A903FF, .lscr1 = 0x00120300, .dmacr = 0x00020010, + .pcr = 0xFAD08B80, + .bpp = 16, }; #endif diff --git a/arch/arm/boards/freescale-mx21-ads/imx21ads.c b/arch/arm/boards/freescale-mx21-ads/imx21ads.c index aa654da494..2c54cd7030 100644 --- a/arch/arm/boards/freescale-mx21-ads/imx21ads.c +++ b/arch/arm/boards/freescale-mx21-ads/imx21ads.c @@ -47,24 +47,20 @@ struct imx_nand_platform_data nand_info = { }; /* Sharp LQ035Q7DB02 QVGA display */ -static struct imx_fb_videomode imx_fb_modedata = { - .mode = { - .name = "Sharp-LQ035Q7", - .refresh = 60, - .xres = 240, - .yres = 320, - .pixclock = 188679, - .left_margin = 6, - .right_margin = 16, - .upper_margin = 8, - .lower_margin = 10, - .hsync_len = 2, - .vsync_len = 1, - .sync = 0, - .vmode = FB_VMODE_NONINTERLACED, - }, - .pcr = 0xfb108bc7, - .bpp = 16, +static struct fb_videomode imx_fb_modedata = { + .name = "Sharp-LQ035Q7", + .refresh = 60, + .xres = 240, + .yres = 320, + .pixclock = 188679, + .left_margin = 6, + .right_margin = 16, + .upper_margin = 8, + .lower_margin = 10, + .hsync_len = 2, + .vsync_len = 1, + .sync = 0, + .vmode = FB_VMODE_NONINTERLACED, }; static struct imx_fb_platform_data imx_fb_data = { @@ -76,6 +72,8 @@ static struct imx_fb_platform_data imx_fb_data = { .pwmr = 0x00a903ff, .lscr1 = 0x00120300, .dmacr = 0x00020008, + .pcr = 0xfb108bc7, + .bpp = 16, }; static int imx21ads_timing_init(void) diff --git a/arch/arm/boards/guf-neso/board.c b/arch/arm/boards/guf-neso/board.c index 2a64bc14fc..6846ba5793 100644 --- a/arch/arm/boards/guf-neso/board.c +++ b/arch/arm/boards/guf-neso/board.c @@ -62,36 +62,18 @@ static struct imx_nand_platform_data nand_info = { .flash_bbt = 1, }; -static struct imx_fb_videomode imxfb_mode = { - .mode = { - .name = "CPT CLAA070LC0JCT", - .refresh = 60, - .xres = 800, - .yres = 480, - .pixclock = KHZ2PICOS(27000), - .hsync_len = 1, /* DE only sync */ - .left_margin = 50, - .right_margin = 50, - .vsync_len = 1, /* DE only sync */ - .upper_margin = 10, - .lower_margin = 10, - }, - /* - * - TFT style panel - * - clk enabled while idle - * - clock inverted - * - data not inverted - * - data enable high active - */ - .pcr = PCR_TFT | - PCR_COLOR | - PCR_PBSIZ_8 | - PCR_BPIX_16 | - PCR_CLKPOL | - PCR_SCLK_SEL | - PCR_LPPOL | - PCR_FLMPOL, - .bpp = 16, /* TODO 32 bit does not work: The 'green' component is lacking in this mode */ +static struct fb_videomode imxfb_mode = { + .name = "CPT CLAA070LC0JCT", + .refresh = 60, + .xres = 800, + .yres = 480, + .pixclock = KHZ2PICOS(27000), + .hsync_len = 1, /* DE only sync */ + .left_margin = 50, + .right_margin = 50, + .vsync_len = 1, /* DE only sync */ + .upper_margin = 10, + .lower_margin = 10, }; static void neso_fb_enable(int enable) @@ -109,6 +91,22 @@ static struct imx_fb_platform_data neso_fb_data = { .dmacr = (0 << 31) | (4 << 16) | 96, .enable = neso_fb_enable, .framebuffer_ovl = (void *)0xa7f00000, + /* + * - TFT style panel + * - clk enabled while idle + * - clock inverted + * - data not inverted + * - data enable high active + */ + .pcr = PCR_TFT | + PCR_COLOR | + PCR_PBSIZ_8 | + PCR_BPIX_16 | + PCR_CLKPOL | + PCR_SCLK_SEL | + PCR_LPPOL | + PCR_FLMPOL, + .bpp = 16, /* TODO 32 bit does not work: The 'green' component is lacking in this mode */ }; #if defined(CONFIG_USB) && defined(CONFIG_USB_ULPI) diff --git a/arch/arm/boards/karo-tx25/board.c b/arch/arm/boards/karo-tx25/board.c index ebebd58d80..a4d4af57a3 100644 --- a/arch/arm/boards/karo-tx25/board.c +++ b/arch/arm/boards/karo-tx25/board.c @@ -125,24 +125,20 @@ static iomux_v3_cfg_t tx25_lcdc_gpios[] = { MX25_PAD_OE_ACD__OE_ACD, }; -static struct imx_fb_videomode stk5_fb_mode = { - .bpp = 16, - .mode = { - .name = "G-ETV570G0DMU", - .pixclock = 33333, - - .xres = 640, - .yres = 480, - - .hsync_len = 64, - .left_margin = 96, - .right_margin = 80, - - .vsync_len = 3, - .upper_margin = 46, - .lower_margin = 39, - }, - .pcr = PCR_TFT | PCR_COLOR | PCR_FLMPOL | PCR_LPPOL | PCR_SCLK_SEL, +static struct fb_videomode stk5_fb_mode = { + .name = "G-ETV570G0DMU", + .pixclock = 33333, + + .xres = 640, + .yres = 480, + + .hsync_len = 64, + .left_margin = 96, + .right_margin = 80, + + .vsync_len = 3, + .upper_margin = 46, + .lower_margin = 39, }; #define STK5_LCD_BACKLIGHT_GPIO IMX_GPIO_NR(1, 26) @@ -168,6 +164,8 @@ static struct imx_fb_platform_data tx25_fb_data = { .num_modes = 1, .dmacr = 0x80040060, .enable = tx25_fb_enable, + .bpp = 16, + .pcr = PCR_TFT | PCR_COLOR | PCR_FLMPOL | PCR_LPPOL | PCR_SCLK_SEL, }; static int tx25_init_fb(void) diff --git a/arch/arm/boards/phytec-phycore-imx27/pcm038.c b/arch/arm/boards/phytec-phycore-imx27/pcm038.c index 5ebef516a7..008346faf1 100644 --- a/arch/arm/boards/phytec-phycore-imx27/pcm038.c +++ b/arch/arm/boards/phytec-phycore-imx27/pcm038.c @@ -34,20 +34,26 @@ #define PCM038_GPIO_OTG_STP (GPIO_PORTE + 1) -static struct imx_fb_videomode imxfb_mode = { - .mode = { - .name = "Sharp-LQ035Q7", - .refresh = 60, - .xres = 240, - .yres = 320, - .pixclock = 188679, /* in ps (5.3MHz) */ - .hsync_len = 7, - .left_margin = 5, - .right_margin = 16, - .vsync_len = 1, - .upper_margin = 7, - .lower_margin = 9, - }, +static struct fb_videomode imxfb_mode = { + .name = "Sharp-LQ035Q7", + .refresh = 60, + .xres = 240, + .yres = 320, + .pixclock = 188679, /* in ps (5.3MHz) */ + .hsync_len = 7, + .left_margin = 5, + .right_margin = 16, + .vsync_len = 1, + .upper_margin = 7, + .lower_margin = 9, +}; + +static struct imx_fb_platform_data pcm038_fb_data = { + .mode = &imxfb_mode, + .num_modes = 1, + .pwmr = 0x00a903ff, + .lscr1 = 0x00120300, + .dmacr = 0x00020010, /* * - HSYNC active high * - VSYNC active high @@ -57,16 +63,8 @@ static struct imx_fb_videomode imxfb_mode = { * - data enable low active * - enable sharp mode */ - .pcr = 0xf00080c0, - .bpp = 16, -}; - -static struct imx_fb_platform_data pcm038_fb_data = { - .mode = &imxfb_mode, - .num_modes = 1, - .pwmr = 0x00a903ff, - .lscr1 = 0x00120300, - .dmacr = 0x00020010, + .pcr = 0xf00080c0, + .bpp = 16, }; static const unsigned int pcm038_pins[] = { -- cgit v1.2.3 From 0f180e814341faa27a6887aa364a10858ebb9b56 Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Thu, 12 Sep 2019 08:54:11 +0200 Subject: ARM: imx6: add Embest MarSBoard support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This board is produced by Embest/Element 14 and is based on i.MX6 Dual. For more informations on this board : http://www.embest-tech.com/shop/star/marsboard.html Signed-off-by: Eric Bénard Signed-off-by: Ahmad Fatoum Tested-by: Stefan Lengfeld Signed-off-by: Sascha Hauer --- Documentation/boards/imx/embest-marsboard.rst | 82 ++++++++++++++++++ arch/arm/boards/Makefile | 1 + arch/arm/boards/embest-marsboard/Makefile | 3 + arch/arm/boards/embest-marsboard/board.c | 63 ++++++++++++++ .../embest-marsboard/defaultenv-mars/init/fastboot | 7 ++ .../flash-header-embest-marsboard.imxcfg | 99 ++++++++++++++++++++++ arch/arm/boards/embest-marsboard/lowlevel.c | 41 +++++++++ arch/arm/dts/Makefile | 1 + arch/arm/dts/imx6q-marsboard.dts | 43 ++++++++++ arch/arm/mach-imx/Kconfig | 5 ++ images/Makefile.imx | 5 ++ 11 files changed, 350 insertions(+) create mode 100644 Documentation/boards/imx/embest-marsboard.rst create mode 100644 arch/arm/boards/embest-marsboard/Makefile create mode 100644 arch/arm/boards/embest-marsboard/board.c create mode 100644 arch/arm/boards/embest-marsboard/defaultenv-mars/init/fastboot create mode 100644 arch/arm/boards/embest-marsboard/flash-header-embest-marsboard.imxcfg create mode 100644 arch/arm/boards/embest-marsboard/lowlevel.c create mode 100644 arch/arm/dts/imx6q-marsboard.dts (limited to 'arch/arm/boards') diff --git a/Documentation/boards/imx/embest-marsboard.rst b/Documentation/boards/imx/embest-marsboard.rst new file mode 100644 index 0000000000..bdaa0880ae --- /dev/null +++ b/Documentation/boards/imx/embest-marsboard.rst @@ -0,0 +1,82 @@ +Embest MarS Board +================= + +Board comes with: + +* 1G DDR3 SDRAM +* 4G eMMC +* 2M SPI-NOR Flash + +Layout:: + + .-----------------------------------------------------. + |O OTG-->| V | O| + | SW1 USB '---' .--| + | .-----------. v.---. .->| <| + | | | 1|o--| O | `--| + | | i.MX6Dual | 2|--o| N Debug | + | | SoC | `---' USB | + | | | | + | `-----------' | + | | + | | + | | + | | + |O O| + `-----------------------------------------------------' + +Boot Configuration +================== + +DIP Switch ``SW1`` on the board can be used to set ``BOOT_MODE1`` and +``BOOT_MODE0`` going to the i.MX6: + +Set ``SW1 = 01`` for serial boot:: + + SW1 + v.---. + 1|o--| O + 2|--o| N + `---' + +Set ``SW1 = 10`` for internal (SPI-NOR Flash) boot:: + + SW1 + v.---. + 1|--o| O + 2|o--| N + `---' + +Set ``SW1 = 00`` for boot from eFuses:: + + SW1 + v.---. + 1|o--| O + 2|o--| N + `---' + +Flashing barebox +---------------- + + 1. Connect to the board's Debug Mini-USB (115200 8N1) + + 2. Set ``SW1 = 01`` for serial boot mode (see above) + + 3. Turn board's power on + + 4. Upload barebox image to the board via imx-usb-loader + +.. code-block:: none + + host$ imx-usb-loader images/barebox-embest-imx6q-marsboard.img +.. + + 4. Flash barebox to SPI-NOR Flash via Android Fastboot + +.. code-block:: none + + host$ fastboot flash bbu-spiflash images/barebox-embest-imx6q-marsboard.img + +.. + + 5. Restore ``SW1 = 10`` for internal (SPI-NOR) boot (see above) diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index a814ab8239..10cd0c413d 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -36,6 +36,7 @@ obj-$(CONFIG_MACH_EDB9315A) += edb93xx/ obj-$(CONFIG_MACH_EDB9315) += edb93xx/ obj-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += efika-mx-smartbook/ obj-$(CONFIG_MACH_EMBEDSKY_E9) += embedsky-e9/ +obj-$(CONFIG_MACH_EMBEST_MARSBOARD) += embest-marsboard/ obj-$(CONFIG_MACH_EMBEST_RIOTBOARD) += embest-riotboard/ obj-$(CONFIG_MACH_EUKREA_CPUIMX25) += eukrea_cpuimx25/ obj-$(CONFIG_MACH_EUKREA_CPUIMX27) += eukrea_cpuimx27/ diff --git a/arch/arm/boards/embest-marsboard/Makefile b/arch/arm/boards/embest-marsboard/Makefile new file mode 100644 index 0000000000..ef5219444c --- /dev/null +++ b/arch/arm/boards/embest-marsboard/Makefile @@ -0,0 +1,3 @@ +obj-y += board.o +lwl-y += lowlevel.o +bbenv-y += defaultenv-mars diff --git a/arch/arm/boards/embest-marsboard/board.c b/arch/arm/boards/embest-marsboard/board.c new file mode 100644 index 0000000000..66893434c2 --- /dev/null +++ b/arch/arm/boards/embest-marsboard/board.c @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2013 Lucas Stach + * Copyright (C) 2014 Eric Bénard + * Copyright (C) 2019 Ahmad Fatoum + */ + +#include +#include +#include +#include +#include + +static int ar8035_phy_fixup(struct phy_device *dev) +{ + u16 val; + + /* Ar803x phy SmartEEE feature cause link status generates glitch, + * which cause ethernet link down/up issue, so disable SmartEEE + */ + phy_write(dev, 0xd, 0x3); + phy_write(dev, 0xe, 0x805d); + phy_write(dev, 0xd, 0x4003); + + val = phy_read(dev, 0xe); + phy_write(dev, 0xe, val & ~(1 << 8)); + + /* To enable AR8031 ouput a 125MHz clk from CLK_25M */ + phy_write(dev, 0xd, 0x7); + phy_write(dev, 0xe, 0x8016); + phy_write(dev, 0xd, 0x4007); + + val = phy_read(dev, 0xe); + val &= 0xffe3; + val |= 0x18; + phy_write(dev, 0xe, val); + + /* introduce tx clock delay */ + phy_write(dev, 0x1d, 0x5); + val = phy_read(dev, 0x1e); + val |= 0x0100; + phy_write(dev, 0x1e, val); + + return 0; +} + +static int marsboard_device_init(void) +{ + if (!of_machine_is_compatible("embest,imx6q-marsboard")) + return 0; + + barebox_set_hostname("marsboard"); + + phy_register_fixup_for_uid(0x004dd072, 0xffffffef, ar8035_phy_fixup); + + imx6_bbu_internal_spi_i2c_register_handler("spiflash", + "/dev/m25p0.barebox", BBU_HANDLER_FLAG_DEFAULT); + + defaultenv_append_directory(defaultenv_mars); + + return 0; +} +device_initcall(marsboard_device_init); diff --git a/arch/arm/boards/embest-marsboard/defaultenv-mars/init/fastboot b/arch/arm/boards/embest-marsboard/defaultenv-mars/init/fastboot new file mode 100644 index 0000000000..9c784fb73b --- /dev/null +++ b/arch/arm/boards/embest-marsboard/defaultenv-mars/init/fastboot @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ "$bootsource" != "serial" ]; then + exit 0 +fi + +usbgadget -a -A "" -b diff --git a/arch/arm/boards/embest-marsboard/flash-header-embest-marsboard.imxcfg b/arch/arm/boards/embest-marsboard/flash-header-embest-marsboard.imxcfg new file mode 100644 index 0000000000..bdaf60cb4a --- /dev/null +++ b/arch/arm/boards/embest-marsboard/flash-header-embest-marsboard.imxcfg @@ -0,0 +1,99 @@ +soc imx6 +loadaddr 0x20000000 +dcdofs 0x400 + +wm 32 0x020e05a8 0x00000030 +wm 32 0x020e05b0 0x00000030 +wm 32 0x020e0524 0x00000030 +wm 32 0x020e051c 0x00000030 +wm 32 0x020e0518 0x00000030 +wm 32 0x020e050c 0x00000030 +wm 32 0x020e05b8 0x00000030 +wm 32 0x020e05c0 0x00000030 +wm 32 0x020e05ac 0x00020030 +wm 32 0x020e05b4 0x00020030 +wm 32 0x020e0528 0x00020030 +wm 32 0x020e0520 0x00020030 +wm 32 0x020e0514 0x00020030 +wm 32 0x020e0510 0x00020030 +wm 32 0x020e05bc 0x00020030 +wm 32 0x020e05c4 0x00020030 +wm 32 0x020e056c 0x00020030 +wm 32 0x020e0578 0x00020030 +wm 32 0x020e0588 0x00020030 +wm 32 0x020e0594 0x00020030 +wm 32 0x020e057c 0x00020030 +wm 32 0x020e0590 0x00003000 +wm 32 0x020e0598 0x00003000 +wm 32 0x020e058c 0x00000000 +wm 32 0x020e059c 0x00003030 +wm 32 0x020e05a0 0x00003030 +wm 32 0x020e0784 0x00000030 +wm 32 0x020e0788 0x00000030 +wm 32 0x020e0794 0x00000030 +wm 32 0x020e079c 0x00000030 +wm 32 0x020e07a0 0x00000030 +wm 32 0x020e07a4 0x00000030 +wm 32 0x020e07a8 0x00000030 +wm 32 0x020e0748 0x00000030 +wm 32 0x020e074c 0x00000030 +wm 32 0x020e0750 0x00020000 +wm 32 0x020e0758 0x00000000 +wm 32 0x020e0774 0x00020000 +wm 32 0x020e078c 0x00000030 +wm 32 0x020e0798 0x000c0000 +wm 32 0x021b081c 0x33333333 +wm 32 0x021b0820 0x33333333 +wm 32 0x021b0824 0x33333333 +wm 32 0x021b0828 0x33333333 +wm 32 0x021b481c 0x33333333 +wm 32 0x021b4820 0x33333333 +wm 32 0x021b4824 0x33333333 +wm 32 0x021b4828 0x33333333 +wm 32 0x021b0018 0x00081740 +wm 32 0x021b001c 0x00008000 +wm 32 0x021b000c 0x555a7975 +wm 32 0x021b0010 0xff538e64 +wm 32 0x021b0014 0x01ff00db +wm 32 0x021b002c 0x000026d2 +wm 32 0x021b0030 0x005b0e21 +wm 32 0x021b0008 0x09444040 +wm 32 0x021b0004 0x00025576 +wm 32 0x021b0040 0x00000027 +wm 32 0x021b0000 0x831a0000 +wm 32 0x021b001c 0x04088032 +wm 32 0x021b001c 0x0408803a +wm 32 0x021b001c 0x00008033 +wm 32 0x021b001c 0x0000803b +wm 32 0x021b001c 0x00428031 +wm 32 0x021b001c 0x00428039 +wm 32 0x021b001c 0x09408030 +wm 32 0x021b001c 0x09408038 +wm 32 0x021b001c 0x04008040 +wm 32 0x021b001c 0x04008048 +wm 32 0x021b0800 0xa1380003 +wm 32 0x021b4800 0xa1380003 +wm 32 0x021b0020 0x00005800 +wm 32 0x021b0818 0x00022227 +wm 32 0x021b4818 0x00022227 +wm 32 0x021b083c 0x434b0350 +wm 32 0x021b0840 0x034c0359 +wm 32 0x021b483c 0x434b0350 +wm 32 0x021b4840 0x03650348 +wm 32 0x021b0848 0x4436383b +wm 32 0x021b4848 0x39393341 +wm 32 0x021b0850 0x35373933 +wm 32 0x021b4850 0x48254A36 +wm 32 0x021b080c 0x001f001f +wm 32 0x021b0810 0x001f001f +wm 32 0x021b480c 0x00440044 +wm 32 0x021b4810 0x00440044 +wm 32 0x021b08b8 0x00000800 +wm 32 0x021b48b8 0x00000800 +wm 32 0x021b001c 0x00000000 +wm 32 0x021b0404 0x00011006 +wm 32 0x020c4068 0x00c03f3f +wm 32 0x020c406c 0x0030fc03 +wm 32 0x020c4070 0x0fffc000 +wm 32 0x020c4074 0x3ff00000 +wm 32 0x020c4078 0x00fff300 diff --git a/arch/arm/boards/embest-marsboard/lowlevel.c b/arch/arm/boards/embest-marsboard/lowlevel.c new file mode 100644 index 0000000000..9e20a2ec06 --- /dev/null +++ b/arch/arm/boards/embest-marsboard/lowlevel.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 Ahmad Fatoum - Pengutronix + */ + +#include +#include +#include +#include +#include +#include +#include + +static inline void setup_uart(void) +{ + void __iomem *iomuxbase = IOMEM(MX6_IOMUXC_BASE_ADDR); + + imx6_ungate_all_peripherals(); + + imx_setup_pad(iomuxbase, MX6Q_PAD_EIM_D26__UART2_TXD); + + imx6_uart_setup_ll(); + + putc_ll('>'); +} + +extern char __dtb_z_imx6q_marsboard_start[]; + +ENTRY_FUNCTION(start_imx6q_marsboard, r0, r1, r2) +{ + void *fdt; + + imx6_cpu_lowlevel_init(); + + if (IS_ENABLED(CONFIG_DEBUG_LL)) + setup_uart(); + + fdt = __dtb_z_imx6q_marsboard_start + get_runtime_offset(); + + imx6q_barebox_entry(fdt); +} diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index f33e6a4989..27d14f814a 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -16,6 +16,7 @@ pbl-dtb-$(CONFIG_MACH_DUCKBILL) += imx28-duckbill.dtb.o pbl-dtb-$(CONFIG_MACH_KINDLE_MX50) += imx50-kindle-d01100.dtb.o imx50-kindle-d01200.dtb.o imx50-kindle-ey21.dtb.o pbl-dtb-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += imx51-genesi-efika-sb.dtb.o pbl-dtb-$(CONFIG_MACH_ELTEC_HIPERCAM) += imx6dl-eltec-hipercam.dtb.o +pbl-dtb-$(CONFIG_MACH_EMBEST_MARSBOARD) += imx6q-marsboard.dtb.o pbl-dtb-$(CONFIG_MACH_EMBEST_RIOTBOARD) += imx6s-riotboard.dtb.o pbl-dtb-$(CONFIG_MACH_EMBEDSKY_E9) += imx6q-embedsky-e9.dtb.o pbl-dtb-$(CONFIG_MACH_FREESCALE_MX51_PDK) += imx51-babbage.dtb.o diff --git a/arch/arm/dts/imx6q-marsboard.dts b/arch/arm/dts/imx6q-marsboard.dts new file mode 100644 index 0000000000..1d9f8f005d --- /dev/null +++ b/arch/arm/dts/imx6q-marsboard.dts @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0 OR X11 +/* + * Copyright (C) 2019 Ahmad Fatoum - Pengutronix + */ + +#include +#include "imx6q.dtsi" + +/ { + chosen { + stdout-path = &uart2; + + environment { + compatible = "barebox,environment"; + device-path = &environment_spinor; + }; + }; +}; + +&ecspi1 { + m25p80@0 { + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "barebox"; + reg = <0x000000 0x100000>; + }; + + environment_spinor: partition@100000 { + label = "barebox-environment"; + reg = <0x100000 0x80000>; + }; + }; +}; + +&fec { + phy-reset-duration = <2>; +}; + +&ocotp { + barebox,provide-mac-address = <&fec 0x620>; +}; diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index e7721621ab..5ca84f620f 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -397,6 +397,11 @@ config MACH_TECHNEXION_WANDBOARD select ARM_USE_COMPRESSED_DTB select MCI_IMX_ESDHC_PBL +config MACH_EMBEST_MARSBOARD + bool "Embest MarSboard" + select ARCH_IMX6 + select ARM_USE_COMPRESSED_DTB + config MACH_EMBEST_RIOTBOARD bool "Embest RIoTboard" select ARCH_IMX6 diff --git a/images/Makefile.imx b/images/Makefile.imx index 84c4071b6c..a8f8a9b7d6 100644 --- a/images/Makefile.imx +++ b/images/Makefile.imx @@ -406,6 +406,11 @@ CFG_start_imx6q_embedsky_e9.pblb.imximg = $(board)/embedsky-e9/flash-header-e9.i FILE_barebox-embedsky-imx6q-e9.img = start_imx6q_embedsky_e9.pblb.imximg image-$(CONFIG_MACH_EMBEDSKY_E9) += barebox-embedsky-imx6q-e9.img +pblb-$(CONFIG_MACH_EMBEST_MARSBOARD) += start_imx6q_marsboard +CFG_start_imx6q_marsboard.pblb.imximg = $(board)/embest-marsboard/flash-header-embest-marsboard.imxcfg +FILE_barebox-embest-imx6q-marsboard.img = start_imx6q_marsboard.pblb.imximg +image-$(CONFIG_MACH_EMBEST_MARSBOARD) += barebox-embest-imx6q-marsboard.img + pblb-$(CONFIG_MACH_EMBEST_RIOTBOARD) += start_imx6s_riotboard CFG_start_imx6s_riotboard.pblb.imximg = $(board)/embest-riotboard/flash-header-embest-riotboard.imxcfg FILE_barebox-embest-imx6s-riotboard.img = start_imx6s_riotboard.pblb.imximg -- cgit v1.2.3 From b7cfaf8669d67eb2dd77f8c8ff5cce71cce55eb8 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:36 -0700 Subject: ARM: zii-imx8mq-dev: Drop extra relocation code Since commit 3ce6447849 ("ARM: zii-imx8mq-dev: Do setup_c() before accessing global variables") appropriate relocation will be done unconditionally, so we don't need to do it again in this corner case. Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-imx8mq-dev/lowlevel.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-imx8mq-dev/lowlevel.c b/arch/arm/boards/zii-imx8mq-dev/lowlevel.c index 7eb8b684d2..8442beb4f4 100644 --- a/arch/arm/boards/zii-imx8mq-dev/lowlevel.c +++ b/arch/arm/boards/zii-imx8mq-dev/lowlevel.c @@ -155,8 +155,6 @@ static __noreturn noinline void zii_imx8mq_dev_start(void) switch (system_type) { default: if (IS_ENABLED(CONFIG_DEBUG_LL)) { - relocate_to_current_adr(); - setup_c(); puts_ll("\n*********************************\n"); puts_ll("* Unknown system type: "); puthex_ll(system_type); -- cgit v1.2.3 From 61d47221a50383e4bc2822e6a7e572710386ef43 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:37 -0700 Subject: ARM: zii-imx8mq-dev: Switch to using compressed DTB Reduces image size by ~50K (from 547K to 496K) on my test configuration. Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-imx8mq-dev/lowlevel.c | 8 ++++---- arch/arm/mach-imx/Kconfig | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-imx8mq-dev/lowlevel.c b/arch/arm/boards/zii-imx8mq-dev/lowlevel.c index 8442beb4f4..795c98cb66 100644 --- a/arch/arm/boards/zii-imx8mq-dev/lowlevel.c +++ b/arch/arm/boards/zii-imx8mq-dev/lowlevel.c @@ -117,8 +117,8 @@ static unsigned int get_system_type(void) return FIELD_GET(SYSTEM_TYPE, dr); } -extern char __dtb_imx8mq_zii_ultra_rmb3_start[]; -extern char __dtb_imx8mq_zii_ultra_zest_start[]; +extern char __dtb_z_imx8mq_zii_ultra_rmb3_start[]; +extern char __dtb_z_imx8mq_zii_ultra_zest_start[]; static __noreturn noinline void zii_imx8mq_dev_start(void) { @@ -163,10 +163,10 @@ static __noreturn noinline void zii_imx8mq_dev_start(void) } /* FALLTHROUGH */ case ZII_PLATFORM_IMX8MQ_ULTRA_RMB3: - fdt = __dtb_imx8mq_zii_ultra_rmb3_start; + fdt = __dtb_z_imx8mq_zii_ultra_rmb3_start; break; case ZII_PLATFORM_IMX8MQ_ULTRA_ZEST: - fdt = __dtb_imx8mq_zii_ultra_zest_start; + fdt = __dtb_z_imx8mq_zii_ultra_zest_start; break; } diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 5ca84f620f..00d6f8f309 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -467,6 +467,7 @@ config MACH_ZII_IMX8MQ_DEV select ARM_SMCCC select MCI_IMX_ESDHC_PBL select MACH_ZII_COMMON + select ARM_USE_COMPRESSED_DTB config MACH_ZII_VF610_DEV bool "ZII VF610 Dev Family" -- cgit v1.2.3 From 894397ab91b5c075b652dbcf237994da841e9e15 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:38 -0700 Subject: ARM: zii-vf610-dev: Swith to using compressed DTB Reduces image size by ~150K (from 765K to 612K) on my test configuration. Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-vf610-dev/lowlevel.c | 28 ++++++++++++++-------------- arch/arm/mach-imx/Kconfig | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-vf610-dev/lowlevel.c b/arch/arm/boards/zii-vf610-dev/lowlevel.c index b320fbc0cf..9b57581d1b 100644 --- a/arch/arm/boards/zii-vf610-dev/lowlevel.c +++ b/arch/arm/boards/zii-vf610-dev/lowlevel.c @@ -75,13 +75,13 @@ static unsigned int get_system_type(void) return pdir; } -extern char __dtb_vf610_zii_dev_rev_b_start[]; -extern char __dtb_vf610_zii_dev_rev_c_start[]; -extern char __dtb_vf610_zii_cfu1_start[]; -extern char __dtb_vf610_zii_ssmb_spu3_start[]; -extern char __dtb_vf610_zii_scu4_aib_start[]; -extern char __dtb_vf610_zii_ssmb_dtu_start[]; -extern char __dtb_vf610_zii_spb4_start[]; +extern char __dtb_z_vf610_zii_dev_rev_b_start[]; +extern char __dtb_z_vf610_zii_dev_rev_c_start[]; +extern char __dtb_z_vf610_zii_cfu1_start[]; +extern char __dtb_z_vf610_zii_ssmb_spu3_start[]; +extern char __dtb_z_vf610_zii_scu4_aib_start[]; +extern char __dtb_z_vf610_zii_ssmb_dtu_start[]; +extern char __dtb_z_vf610_zii_spb4_start[]; ENTRY_FUNCTION(start_zii_vf610_dev, r0, r1, r2) { @@ -105,25 +105,25 @@ ENTRY_FUNCTION(start_zii_vf610_dev, r0, r1, r2) puts_ll("*********************************\n"); } case ZII_PLATFORM_VF610_DEV_REV_B: /* FALLTHROUGH */ - fdt = __dtb_vf610_zii_dev_rev_b_start; + fdt = __dtb_z_vf610_zii_dev_rev_b_start; break; case ZII_PLATFORM_VF610_SCU4_AIB: - fdt = __dtb_vf610_zii_scu4_aib_start; + fdt = __dtb_z_vf610_zii_scu4_aib_start; break; case ZII_PLATFORM_VF610_DEV_REV_C: - fdt = __dtb_vf610_zii_dev_rev_c_start; + fdt = __dtb_z_vf610_zii_dev_rev_c_start; break; case ZII_PLATFORM_VF610_CFU1: - fdt = __dtb_vf610_zii_cfu1_start; + fdt = __dtb_z_vf610_zii_cfu1_start; break; case ZII_PLATFORM_VF610_SSMB_SPU3: - fdt = __dtb_vf610_zii_ssmb_spu3_start; + fdt = __dtb_z_vf610_zii_ssmb_spu3_start; break; case ZII_PLATFORM_VF610_SPB4: - fdt = __dtb_vf610_zii_spb4_start; + fdt = __dtb_z_vf610_zii_spb4_start; break; case ZII_PLATFORM_VF610_SSMB_DTU: - fdt = __dtb_vf610_zii_ssmb_dtu_start; + fdt = __dtb_z_vf610_zii_ssmb_dtu_start; break; } diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 00d6f8f309..f03ea0e283 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -473,6 +473,7 @@ config MACH_ZII_VF610_DEV bool "ZII VF610 Dev Family" select ARCH_VF610 select CLKDEV_LOOKUP + select ARM_USE_COMPRESSED_DTB config MACH_ZII_IMX7D_DEV bool "ZII i.MX7D based devices" -- cgit v1.2.3 From 541de2050e7e7e72b67f6a91177d198278477f86 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:39 -0700 Subject: ARM: zii-imx6-rdu2: Swith to using compressed DTB Reduces image size by ~100K (from 699K to 598K) on my test configuration. Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-imx6q-rdu2/lowlevel.c | 8 ++++---- arch/arm/mach-imx/Kconfig | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-imx6q-rdu2/lowlevel.c b/arch/arm/boards/zii-imx6q-rdu2/lowlevel.c index 3f5d90b61d..87e634509f 100644 --- a/arch/arm/boards/zii-imx6q-rdu2/lowlevel.c +++ b/arch/arm/boards/zii-imx6q-rdu2/lowlevel.c @@ -263,8 +263,8 @@ static inline void setup_uart(void) putc_ll('>'); } -extern char __dtb_imx6q_zii_rdu2_start[]; -extern char __dtb_imx6qp_zii_rdu2_start[]; +extern char __dtb_z_imx6q_zii_rdu2_start[]; +extern char __dtb_z_imx6qp_zii_rdu2_start[]; static noinline void rdu2_sram_setup(void) { @@ -304,9 +304,9 @@ ENTRY_FUNCTION(start_imx6_zii_rdu2, r0, r1, r2) rdu2_sram_setup(); if (__imx6_cpu_type() == IMX6_CPUTYPE_IMX6QP) - imx6q_barebox_entry(__dtb_imx6qp_zii_rdu2_start + + imx6q_barebox_entry(__dtb_z_imx6qp_zii_rdu2_start + get_runtime_offset()); else - imx6q_barebox_entry(__dtb_imx6q_zii_rdu2_start + + imx6q_barebox_entry(__dtb_z_imx6q_zii_rdu2_start + get_runtime_offset()); } diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index f03ea0e283..baeeac88c0 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -458,6 +458,7 @@ config MACH_ZII_RDU2 select ARCH_IMX6 select MCI_IMX_ESDHC_PBL select MACH_ZII_COMMON + select ARM_USE_COMPRESSED_DTB config MACH_ZII_IMX8MQ_DEV bool "ZII i.MX8MQ based devices" -- cgit v1.2.3 From 6d519b108b41ad72531d7517acf22f1cc2fac280 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:40 -0700 Subject: ARM: zii-imx7d-dev: Swith to using compressed DTB Reduces image size by 68K (from 652K to 584K) on my test configuration. Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-imx7d-dev/lowlevel.c | 8 ++++---- arch/arm/mach-imx/Kconfig | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-imx7d-dev/lowlevel.c b/arch/arm/boards/zii-imx7d-dev/lowlevel.c index 3ad4940da8..3bacfd0c7d 100644 --- a/arch/arm/boards/zii-imx7d-dev/lowlevel.c +++ b/arch/arm/boards/zii-imx7d-dev/lowlevel.c @@ -18,8 +18,8 @@ #include #include -extern char __dtb_imx7d_zii_rpu2_start[]; -extern char __dtb_imx7d_zii_rmu2_start[]; +extern char __dtb_z_imx7d_zii_rpu2_start[]; +extern char __dtb_z_imx7d_zii_rmu2_start[]; static inline void setup_uart(void) { @@ -97,10 +97,10 @@ ENTRY_FUNCTION(start_zii_imx7d_dev, r0, r1, r2) } /* FALLTHROUGH */ case ZII_PLATFORM_IMX7D_RPU2: - fdt = __dtb_imx7d_zii_rpu2_start; + fdt = __dtb_z_imx7d_zii_rpu2_start; break; case ZII_PLATFORM_IMX7D_RMU2: - fdt = __dtb_imx7d_zii_rmu2_start; + fdt = __dtb_z_imx7d_zii_rmu2_start; break; } diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index baeeac88c0..a50a02bd3c 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -479,6 +479,7 @@ config MACH_ZII_VF610_DEV config MACH_ZII_IMX7D_DEV bool "ZII i.MX7D based devices" select ARCH_IMX7 + select ARM_USE_COMPRESSED_DTB config MACH_PHYTEC_PHYCORE_IMX7 bool "Phytec phyCORE i.MX7" -- cgit v1.2.3 From 1deeaac70da1c0068ea49bfb479e63254ed38bd9 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:41 -0700 Subject: ARM: zii-imx51-rdu1: Swith to using compressed DTB Reduces image size by 58K (from 642K to 584K) on my test configuration. Signed-off-by: Andrey Smirnov Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-imx51-rdu1/lowlevel.c | 12 ++++++------ arch/arm/mach-imx/Kconfig | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-imx51-rdu1/lowlevel.c b/arch/arm/boards/zii-imx51-rdu1/lowlevel.c index da05b0564c..c7bb044e0d 100644 --- a/arch/arm/boards/zii-imx51-rdu1/lowlevel.c +++ b/arch/arm/boards/zii-imx51-rdu1/lowlevel.c @@ -68,9 +68,9 @@ static unsigned int get_system_type(void) return FIELD_GET(SYSTEM_TYPE, dr); } -extern char __dtb_imx51_zii_rdu1_start[]; -extern char __dtb_imx51_zii_scu2_mezz_start[]; -extern char __dtb_imx51_zii_scu3_esb_start[]; +extern char __dtb_z_imx51_zii_rdu1_start[]; +extern char __dtb_z_imx51_zii_scu2_mezz_start[]; +extern char __dtb_z_imx51_zii_scu3_esb_start[]; ENTRY_FUNCTION(start_imx51_zii_rdu1, r0, r1, r2) { @@ -96,13 +96,13 @@ ENTRY_FUNCTION(start_imx51_zii_rdu1, r0, r1, r2) /* FALLTHROUGH */ case ZII_PLATFORM_IMX51_RDU_REV_B: case ZII_PLATFORM_IMX51_RDU_REV_C: - fdt = __dtb_imx51_zii_rdu1_start; + fdt = __dtb_z_imx51_zii_rdu1_start; break; case ZII_PLATFORM_IMX51_SCU2_MEZZ: - fdt = __dtb_imx51_zii_scu2_mezz_start; + fdt = __dtb_z_imx51_zii_scu2_mezz_start; break; case ZII_PLATFORM_IMX51_SCU3_ESB: - fdt = __dtb_imx51_zii_scu3_esb_start; + fdt = __dtb_z_imx51_zii_scu3_esb_start; break; } diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index a50a02bd3c..6e98e95dbb 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -452,6 +452,7 @@ config MACH_ZII_RDU1 select MACH_FREESCALE_MX51_PDK_POWER select CRC8 select MACH_ZII_COMMON + select ARM_USE_COMPRESSED_DTB config MACH_ZII_RDU2 bool "ZII i.MX6Q(+) RDU2" -- cgit v1.2.3 From 7e8ac4b05e049f8e0a1bf6b60d097aa9cef1ac55 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Sep 2019 23:19:43 -0700 Subject: ARM: zii-common: Share MAC address configuration between RDU2/3 Both RDU2 and RDU3 share the same MAC address configuration mechanism. Reflect that by moving that code into zii-common and changing it to be executed on both platforms. Signed-off-by: Andrey Smirnov Cc: Chris Healy Cc: Lucas Stach Signed-off-by: Sascha Hauer --- arch/arm/boards/zii-common/board.c | 58 ++++++++++++++++++++++++++++++++++ arch/arm/boards/zii-imx6q-rdu2/board.c | 55 -------------------------------- arch/arm/dts/imx8mq-zii-ultra.dtsi | 26 +++++++++++++++ 3 files changed, 84 insertions(+), 55 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/zii-common/board.c b/arch/arm/boards/zii-common/board.c index 20ec64d2d4..9a9564e6d1 100644 --- a/arch/arm/boards/zii-common/board.c +++ b/arch/arm/boards/zii-common/board.c @@ -16,6 +16,64 @@ #include #include #include +#include +#include + +static int rdu_eth_register_ethaddr(struct device_node *np) +{ + u8 mac[ETH_ALEN]; + u8 *data; + int i; + + data = nvmem_cell_get_and_read(np, "mac-address", ETH_ALEN); + if (IS_ERR(data)) + return PTR_ERR(data); + /* + * EEPROM stores MAC address in reverse (to what we expect it + * to be) byte order. + */ + for (i = 0; i < ETH_ALEN; i++) + mac[i] = data[ETH_ALEN - i - 1]; + + free(data); + + of_eth_register_ethaddr(np, mac); + + return 0; +} + +static int rdu_ethernet_init(void) +{ + static const char * const aliases[] = { "ethernet0", "ethernet1" }; + struct device_node *np, *root; + int i, ret; + + if (!of_machine_is_compatible("zii,imx6q-zii-rdu2") && + !of_machine_is_compatible("zii,imx6qp-zii-rdu2") && + !of_machine_is_compatible("zii,imx8mq-ultra")) + return 0; + + root = of_get_root_node(); + + for (i = 0; i < ARRAY_SIZE(aliases); i++) { + const char *alias = aliases[i]; + + np = of_find_node_by_alias(root, alias); + if (!np) { + pr_warn("Failed to find %s\n", alias); + continue; + } + + ret = rdu_eth_register_ethaddr(np); + if (ret) { + pr_warn("Failed to register MAC for %s\n", alias); + continue; + } + } + + return 0; +} +late_initcall(rdu_ethernet_init); static int rdu_networkconfig(void) { diff --git a/arch/arm/boards/zii-imx6q-rdu2/board.c b/arch/arm/boards/zii-imx6q-rdu2/board.c index 6adb0b1c6f..63367a419a 100644 --- a/arch/arm/boards/zii-imx6q-rdu2/board.c +++ b/arch/arm/boards/zii-imx6q-rdu2/board.c @@ -159,61 +159,6 @@ static int rdu2_devices_init(void) } device_initcall(rdu2_devices_init); -static int rdu2_eth_register_ethaddr(struct device_node *np) -{ - u8 mac[ETH_ALEN]; - u8 *data; - int i; - - data = nvmem_cell_get_and_read(np, "mac-address", ETH_ALEN); - if (IS_ERR(data)) - return PTR_ERR(data); - /* - * EEPROM stores MAC address in reverse (to what we expect it - * to be) byte order. - */ - for (i = 0; i < ETH_ALEN; i++) - mac[i] = data[ETH_ALEN - i - 1]; - - free(data); - - of_eth_register_ethaddr(np, mac); - - return 0; -} - -static int rdu2_ethernet_init(void) -{ - const char *aliases[] = { "ethernet0", "ethernet1" }; - struct device_node *np, *root; - int i, ret; - - if (!of_machine_is_compatible("zii,imx6q-zii-rdu2") && - !of_machine_is_compatible("zii,imx6qp-zii-rdu2")) - return 0; - - root = of_get_root_node(); - - for (i = 0; i < ARRAY_SIZE(aliases); i++) { - const char *alias = aliases[i]; - - np = of_find_node_by_alias(root, alias); - if (!np) { - pr_warn("Failed to find %s\n", alias); - continue; - } - - ret = rdu2_eth_register_ethaddr(np); - if (ret) { - pr_warn("Failed to register MAC for %s\n", alias); - continue; - } - } - - return 0; -} -late_initcall(rdu2_ethernet_init); - static int rdu2_fixup_egalax_ts(struct device_node *root, void *context) { struct device_node *np; diff --git a/arch/arm/dts/imx8mq-zii-ultra.dtsi b/arch/arm/dts/imx8mq-zii-ultra.dtsi index 1a9ba160a3..6180f21ab0 100644 --- a/arch/arm/dts/imx8mq-zii-ultra.dtsi +++ b/arch/arm/dts/imx8mq-zii-ultra.dtsi @@ -23,6 +23,8 @@ }; aliases { + ethernet0 = &fec1; + ethernet1 = &i210; /* * NVMEM device corresponding to EEPROM attached to * the switch shared DT node with it, so we use that @@ -32,6 +34,11 @@ }; }; +&fec1 { + nvmem-cells = <&mac_address_0>; + nvmem-cell-names = "mac-address"; +}; + &ocotp { barebox,provide-mac-address = <&fec1 0x640>; }; @@ -49,6 +56,25 @@ }; }; +&i210 { + nvmem-cells = <&mac_address_1>; + nvmem-cell-names = "mac-address"; +}; + +&uart2 { + rave-sp { + eeprom@a4 { + mac_address_0: mac-address@180 { + reg = <0x180 6>; + }; + + mac_address_1: mac-address@190 { + reg = <0x190 6>; + }; + }; + }; +}; + &usdhc1 { #address-cells = <1>; #size-cells = <1>; -- cgit v1.2.3 From 94e2382281ba950d63df78ead7fc5ca9aad72cda Mon Sep 17 00:00:00 2001 From: Marco Felsch Date: Wed, 2 Oct 2019 15:09:59 +0200 Subject: ARM: i.MX: phytec-som-imx6: phycore: fix updating pmic regulators Currently the fixup code assumes that only one i2c bus is active. If we reuse the board code for other boards this isn't always true. Fix that by using of_find_i2c_adapter_by_node() to address both cases. Fixes: b6bebb7aca ("ARM: i.MX: phytec-som-imx6: phycore: Set BUCK mode to SYNC") Signed-off-by: Marco Felsch Signed-off-by: Sascha Hauer --- arch/arm/boards/phytec-som-imx6/board.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'arch/arm/boards') diff --git a/arch/arm/boards/phytec-som-imx6/board.c b/arch/arm/boards/phytec-som-imx6/board.c index 730115702b..27a1ad4f66 100644 --- a/arch/arm/boards/phytec-som-imx6/board.c +++ b/arch/arm/boards/phytec-som-imx6/board.c @@ -115,12 +115,16 @@ static int ksz8081_phy_fixup(struct phy_device *phydev) static int phycore_da9062_setup_buck_mode(void) { struct i2c_adapter *adapter = NULL; + struct device_node *pmic_np = NULL; struct i2c_client client; unsigned char value; - int bus = 0; int ret; - adapter = i2c_get_adapter(bus); + pmic_np = of_find_node_by_name(NULL, "pmic@58"); + if (!pmic_np) + return -ENODEV; + + adapter = of_find_i2c_adapter_by_node(pmic_np->parent); if (!adapter) return -ENODEV; -- cgit v1.2.3