[PATCH 2/2] Add support for the Crystalfontz CFA-10036 board

Maxime Ripard maxime.ripard at free-electrons.com
Wed Jul 4 08:28:57 EDT 2012


Hi Sascha,

Le 03/07/2012 20:12, Sascha Hauer a écrit :
> Hi Maxime,
> 
> The patch looks good. I can apply it as is if you wish to or wait until
> you had a look at the new defenv.

I began to work on the new defenv. It definitely looks more flexible :)
I'll resend a new version of this patch using it once I'll be done, so I
guess you'll have to wait a little :)

Thanks,
Maxime

> On Mon, Jul 02, 2012 at 04:14:54PM +0200, Maxime Ripard wrote:
>> This patch adds initial support for the CFA-10036 module.
>>
>> The module basically has a iMX28 SoC, plus a micro-SD slot, 3 pins to
>> access the DUART, a USB OTG port, a OLED screen using the Solomon
>> SSD1307 controller over I2C and a 200-pins SODIMM port to plug an
>> expansion board.
>>
>> Support for this board and the additional devices will come
>> eventually.
>>
>> For now, only the DUART and the MMC controller are used.
>>
>> Signed-off-by: Maxime Ripard <maxime.ripard at free-electrons.com>
>> Cc: Brian Lilly <brian at crystalfontz.com>
>> ---
>>  arch/arm/Makefile                                |    1 +
>>  arch/arm/boards/crystalfontz-cfa10036/Makefile   |    1 +
>>  arch/arm/boards/crystalfontz-cfa10036/cfa10036.c |  106 ++++++++++++++++++++++
>>  arch/arm/boards/crystalfontz-cfa10036/config.h   |   16 ++++
>>  arch/arm/boards/crystalfontz-cfa10036/env/config |   47 ++++++++++
>>  arch/arm/configs/cfa10036_defconfig              |   40 ++++++++
>>  arch/arm/mach-mxs/Kconfig                        |    7 ++
>>  7 files changed, 218 insertions(+)
>>  create mode 100644 arch/arm/boards/crystalfontz-cfa10036/Makefile
>>  create mode 100644 arch/arm/boards/crystalfontz-cfa10036/cfa10036.c
>>  create mode 100644 arch/arm/boards/crystalfontz-cfa10036/config.h
>>  create mode 100644 arch/arm/boards/crystalfontz-cfa10036/env/config
>>  create mode 100644 arch/arm/configs/cfa10036_defconfig
>>
>> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
>> index bd684dc..b8280fe 100644
>> --- a/arch/arm/Makefile
>> +++ b/arch/arm/Makefile
>> @@ -118,6 +118,7 @@ board-$(CONFIG_MACH_MX23EVK)			:= freescale-mx23-evk
>>  board-$(CONFIG_MACH_CHUMBY)			:= chumby_falconwing
>>  board-$(CONFIG_MACH_TX28)			:= karo-tx28
>>  board-$(CONFIG_MACH_MX28EVK)			:= freescale-mx28-evk
>> +board-$(CONFIG_MACH_CFA10036)			:= crystalfontz-cfa10036
>>  board-$(CONFIG_MACH_FREESCALE_MX51_PDK)		:= freescale-mx51-pdk
>>  board-$(CONFIG_MACH_FREESCALE_MX53_LOCO)	:= freescale-mx53-loco
>>  board-$(CONFIG_MACH_FREESCALE_MX53_SMD)		:= freescale-mx53-smd
>> diff --git a/arch/arm/boards/crystalfontz-cfa10036/Makefile b/arch/arm/boards/crystalfontz-cfa10036/Makefile
>> new file mode 100644
>> index 0000000..75f0020
>> --- /dev/null
>> +++ b/arch/arm/boards/crystalfontz-cfa10036/Makefile
>> @@ -0,0 +1 @@
>> +obj-y += cfa10036.o
>> diff --git a/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c b/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c
>> new file mode 100644
>> index 0000000..e454afd
>> --- /dev/null
>> +++ b/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c
>> @@ -0,0 +1,106 @@
>> +/*
>> + * Copyright (C) 2010 Juergen Beisert, Pengutronix <kernel at pengutronix.de>
>> + * Copyright (C) 2011 Marc Kleine-Budde, Pengutronix <mkl at pengutronix.de>
>> + * Copyright (C) 2011 Wolfram Sang, Pengutronix <w.sang at pengutronix.de>
>> + * Copyright (C) 2012 Maxime Ripard, Free Electrons <maxime.ripard at free-electrons.com>
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#include <common.h>
>> +#include <environment.h>
>> +#include <errno.h>
>> +#include <fec.h>
>> +#include <gpio.h>
>> +#include <init.h>
>> +#include <mci.h>
>> +#include <io.h>
>> +
>> +#include <mach/clock.h>
>> +#include <mach/imx-regs.h>
>> +#include <mach/iomux-imx28.h>
>> +#include <mach/mci.h>
>> +
>> +#include <asm/armlinux.h>
>> +#include <asm/mmu.h>
>> +
>> +#include <mach/fb.h>
>> +
>> +#include <generated/mach-types.h>
>> +
>> +/* setup the CPU card internal signals */
>> +static const uint32_t cfa10036_pads[] = {
>> +	/* duart */
>> +	FUNC(2) | PORTF(3, 2) | VE_3_3V,
>> +	FUNC(2) | PORTF(3, 3) | VE_3_3V,
>> +
>> +	/* mmc0 */
>> +	SSP0_D0 | VE_3_3V | PULLUP(1),
>> +	SSP0_D1 | VE_3_3V | PULLUP(1),
>> +	SSP0_D2 | VE_3_3V | PULLUP(1),
>> +	SSP0_D3 | VE_3_3V | PULLUP(1),
>> +	SSP0_D4 | VE_3_3V | PULLUP(1),
>> +	SSP0_D5 | VE_3_3V | PULLUP(1),
>> +	SSP0_D6 | VE_3_3V | PULLUP(1),
>> +	SSP0_D7 | VE_3_3V | PULLUP(1),
>> +	SSP0_CMD | VE_3_3V | PULLUP(1),
>> +	SSP0_CD | VE_3_3V | PULLUP(1),
>> +	SSP0_SCK | VE_3_3V | BITKEEPER(0),
>> +	/* MCI slot power control 1 = off */
>> +	PWM3_GPIO | VE_3_3V | GPIO_OUT | GPIO_VALUE(0),
>> +};
>> +
>> +static struct mxs_mci_platform_data mci_pdata = {
>> +	.caps = MMC_MODE_8BIT,
>> +	.voltages = MMC_VDD_32_33 | MMC_VDD_33_34,	/* fixed to 3.3 V */
>> +	.f_min = 400 * 1000,
>> +	.f_max = 25000000,
>> +};
>> +
>> +static int cfa10036_mem_init(void)
>> +{
>> +	arm_add_mem_device("ram0", IMX_MEMORY_BASE, 128 * 1024 * 1024);
>> +
>> +	return 0;
>> +}
>> +mem_initcall(cfa10036_mem_init);
>> +
>> +static int cfa10036_devices_init(void)
>> +{
>> +	int i;
>> +
>> +	/* initizalize muxing */
>> +	for (i = 0; i < ARRAY_SIZE(cfa10036_pads); i++)
>> +		imx_gpio_mode(cfa10036_pads[i]);
>> +
>> +	/* enable IOCLK0 to run at the PLL frequency */
>> +	imx_set_ioclk(0, 480000000);
>> +	/* run the SSP unit clock at 100 MHz */
>> +	imx_set_sspclk(0, 100000000, 1);
>> +
>> +	armlinux_set_bootparams((void *)IMX_MEMORY_BASE + 0x100);
>> +	armlinux_set_architecture(MACH_TYPE_CFA10036);
>> +
>> +	add_generic_device("mxs_mci", 0, NULL, IMX_SSP0_BASE, 0,
>> +			   IORESOURCE_MEM, &mci_pdata);
>> +
>> +	return 0;
>> +}
>> +device_initcall(cfa10036_devices_init);
>> +
>> +static int cfa10036_console_init(void)
>> +{
>> +	add_generic_device("stm_serial", 0, NULL, IMX_DBGUART_BASE, 8192,
>> +			   IORESOURCE_MEM, NULL);
>> +
>> +	return 0;
>> +}
>> +console_initcall(cfa10036_console_init);
>> diff --git a/arch/arm/boards/crystalfontz-cfa10036/config.h b/arch/arm/boards/crystalfontz-cfa10036/config.h
>> new file mode 100644
>> index 0000000..8f18fda
>> --- /dev/null
>> +++ b/arch/arm/boards/crystalfontz-cfa10036/config.h
>> @@ -0,0 +1,16 @@
>> +/*
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License as
>> + * published by the Free Software Foundation; either version 2 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#ifndef _CONFIG_H_
>> +# define _CONFIG_H_
>> +
>> +#endif /* _CONFIG_H_ */
>> diff --git a/arch/arm/boards/crystalfontz-cfa10036/env/config b/arch/arm/boards/crystalfontz-cfa10036/env/config
>> new file mode 100644
>> index 0000000..5d1bd48
>> --- /dev/null
>> +++ b/arch/arm/boards/crystalfontz-cfa10036/env/config
>> @@ -0,0 +1,47 @@
>> +#!/bin/sh
>> +
>> +hostname=cfa10036
>> +#user=
>> +
>> +# use 'dhcp' to do dhcp in barebox and in kernel
>> +# use 'none' if you want to skip kernel ip autoconfiguration
>> +ip=none
>> +
>> +# or set your networking parameters here
>> +#eth0.ipaddr=a.b.c.d
>> +#eth0.netmask=a.b.c.d
>> +#eth0.serverip=a.b.c.d
>> +#eth0.gateway=a.b.c.d
>> +#eth0.ethaddr=de:ad:be:ef:00:00
>> +
>> +# can be either 'tftp', 'nfs', 'nand', 'nor', 'file' or 'disk'
>> +kernel_loc=file
>> +# can be either 'net', 'nand', 'nor', 'file', 'disk' or 'initrd'
>> +rootfs_loc=disk
>> +# can be either 'nand', 'nor', 'nfs', 'tftp', 'disk', 'file' or 'empty'
>> +oftree_loc=file
>> +
>> +# for flash based rootfs: 'jffs2' or 'ubifs'
>> +# in case of disk any regular filesystem like 'ext2', 'ext3', 'reiserfs'
>> +rootfs_type=ext3
>> +# where is the rootfs in case of 'rootfs_loc=disk' (linux name)
>> +rootfs_part_linux_dev=mmcblk0p3
>> +rootfsimage=rootfs-${hostname}.$rootfs_type
>> +
>> +# where is the kernel image in case of 'kernel_loc=disk'
>> +kernel_part=disk0.1
>> +oftree_part=disk0.1
>> +kernel_part_type=fat
>> +kernel_part_type=fat
>> +
>> +kernelimage=zImage-$hostname
>> +oftreeimage=oftree-$hostname
>> +
>> +bareboxenvimage=barebox-${hostname}.bin
>> +
>> +autoboot_timeout=3
>> +
>> +bootargs="console=ttyAMA0,115200"
>> +
>> +# set a fancy prompt (if support is compiled in)
>> +PS1="\e[1;32mbarebox@\e[1;31m\h:\w\e[0m "
>> diff --git a/arch/arm/configs/cfa10036_defconfig b/arch/arm/configs/cfa10036_defconfig
>> new file mode 100644
>> index 0000000..4c35c6b
>> --- /dev/null
>> +++ b/arch/arm/configs/cfa10036_defconfig
>> @@ -0,0 +1,40 @@
>> +CONFIG_ARCH_MXS=y
>> +CONFIG_ARCH_IMX28=y
>> +CONFIG_MACH_CFA10036=y
>> +CONFIG_AEABI=y
>> +CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
>> +CONFIG_MMU=y
>> +CONFIG_TEXT_BASE=0x43000000
>> +CONFIG_MALLOC_SIZE=0x800000
>> +CONFIG_BROKEN=y
>> +CONFIG_LONGHELP=y
>> +CONFIG_GLOB=y
>> +CONFIG_HUSH_FANCY_PROMPT=y
>> +CONFIG_CMDLINE_EDITING=y
>> +CONFIG_AUTO_COMPLETE=y
>> +CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y
>> +CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/crystalfontz-cfa10036/env"
>> +CONFIG_DEBUG_INFO=y
>> +CONFIG_CMD_EDIT=y
>> +CONFIG_CMD_SLEEP=y
>> +CONFIG_CMD_SAVEENV=y
>> +CONFIG_CMD_EXPORT=y
>> +CONFIG_CMD_PRINTENV=y
>> +CONFIG_CMD_READLINE=y
>> +CONFIG_CMD_ECHO_E=y
>> +CONFIG_CMD_MTEST=y
>> +CONFIG_CMD_MTEST_ALTERNATIVE=y
>> +CONFIG_CMD_BOOTM_SHOW_TYPE=y
>> +CONFIG_CMD_BOOTM_OFTREE=y
>> +CONFIG_CMD_RESET=y
>> +CONFIG_CMD_GO=y
>> +CONFIG_CMD_OFTREE=y
>> +CONFIG_CMD_TIMEOUT=y
>> +CONFIG_CMD_PARTITION=y
>> +CONFIG_CMD_GPIO=y
>> +# CONFIG_SPI is not set
>> +CONFIG_MCI=y
>> +CONFIG_MCI_STARTUP=y
>> +CONFIG_MCI_MXS=y
>> +CONFIG_FS_FAT=y
>> +CONFIG_FS_FAT_LFN=y
>> diff --git a/arch/arm/mach-mxs/Kconfig b/arch/arm/mach-mxs/Kconfig
>> index 3348a3c..7502a01 100644
>> --- a/arch/arm/mach-mxs/Kconfig
>> +++ b/arch/arm/mach-mxs/Kconfig
>> @@ -6,12 +6,14 @@ config ARCH_TEXT_BASE
>>  	default 0x42000000 if MACH_CHUMBY
>>  	default 0x47000000 if MACH_TX28
>>  	default 0x47000000 if MACH_MX28EVK
>> +	default 0x47000000 if MACH_CFA10036
>>  
>>  config BOARDINFO
>>  	default "Freescale i.MX23-EVK" if MACH_MX23EVK
>>  	default "Chumby Falconwing" if MACH_CHUMBY
>>  	default "Karo TX28" if MACH_TX28
>>  	default "Freescale i.MX28-EVK" if MACH_MX28EVK
>> +	default "Crystalfontz CFA-10036" if MACH_CFA10036
>>  
>>  comment "Freescale i.MX System-on-Chip"
>>  
>> @@ -64,6 +66,11 @@ config MACH_MX28EVK
>>  	help
>>  	  Say Y here if you are using the Freescale i.MX28-EVK board
>>  
>> +config MACH_CFA10036
>> +	bool "cfa-10036"
>> +	help
>> +	  Say Y here if you are using the Crystalfontz CFA-10036 module
>> +
>>  endchoice
>>  
>>  endif
>> -- 
>> 1.7.9.5
>>
>>
>> _______________________________________________
>> barebox mailing list
>> barebox at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/barebox
>>
> 


-- 
Maxime Ripard, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com





More information about the barebox mailing list