[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: debian-installer -> cross-compile to armel?



Hector,

On Thu, Dec 15, 2011 at 12:05:48AM +0100, Hector Oron wrote:
> Hello Jason,
> 
> 2011/12/14 Jason <debian@lakedaemon.net>:
> > In the end, I'd like to be able to do the same as here[3] for the
> > dreamplug instead of the guruplug.  Then, a preseed for the freedombox
> > should be easy.
> 
> Then, why not enable dreamplug device on debian installer...?

I prefer to build and test _before_ submitting patches.  ;-)

> > I need to build my own because I need to roll a custom kernel using the
> > new dreamplug mach-type, and my patch [4].
> 
> ... Right, before enabling this device, we need to get support
> mainline kernel. Why is not your patch being accepted upstream?

It is not fdt, and the mach-type wasn't in mainline.  As of yesterday,
the dreamplug mach-type (3550) is in mainline.  See aef1c03 in linus'
tree.

Also, Andrew Lunn has been doing cleanup work [1] across kirkwood and orion
in preparation for converting all of it to fdt.  I believe the
referenced patch series has been pulled into arm's next/devel.  Once he
gets to the stage of having a kirkwood.dtsi, I can start helping (I
don't have enough experience to learn devicetree and the guts of the
kirkwood SoCs at the same time).

Until we get to the point of a kirkwood.dtsi with a
{guru,sheeva,dream}plug.dts, the patch I've submitted [2] will have to
do.  I have no idea if they will accept it now that 3550 is in mainline
or if they will hold off until kirkwood fdt is done.  I've had no
complaints, so I assume it's queued up.

> I had in my stack to test Arnaud's patch [1] and Grant Likely wanted
> to open the door for device tree, so if possible enable DT in u-boot,
> also patch attached [2]. Then, we wanted to talk to you about getting
> this stuff into mainline vs your work.

No versus here. :-)  Whichever patch gets it to mainline support first
is what I prefer.  Mine, yours, Andrew's...

As for u-boot status, that's done.  You can checkout 2011.12-rc1 and
make dreamplug_config.

Also, I've made a few comments, below.

thx,

Jason.

[1] http://www.spinics.net/lists/arm-kernel/msg151746.html
[2] http://www.spinics.net/lists/arm-kernel/msg150785.html

> kirkwood: dreamplug support
> 
> guruplug and dreamplug are really similar so add support for dreamplug
> by modifying guruplug support to handle both devices.
> 
> Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
> Index: linux-2.6/arch/arm/mach-kirkwood/Kconfig
> ===================================================================
> --- linux-2.6.orig/arch/arm/mach-kirkwood/Kconfig	2011-10-28 17:57:01.000000000 +0200
> +++ linux-2.6/arch/arm/mach-kirkwood/Kconfig	2011-10-28 17:58:08.000000000 +0200
> @@ -44,6 +44,12 @@ config MACH_GURUPLUG
>  	  Say 'Y' here if you want your kernel to support the
>  	  Marvell GuruPlug Reference Board.
>  
> +config MACH_DREAMPLUG
> +	bool "Marvell DreamPlug Reference Board"
> +	help
> +	  Say 'Y' here if you want your kernel to support the
> +	  Marvell DreamPlug Reference Board.
> +
>  config MACH_TS219
>  	bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
>  	help
> Index: linux-2.6/arch/arm/mach-kirkwood/Makefile
> ===================================================================
> --- linux-2.6.orig/arch/arm/mach-kirkwood/Makefile	2011-10-28 17:57:01.000000000 +0200
> +++ linux-2.6/arch/arm/mach-kirkwood/Makefile	2011-10-28 17:58:08.000000000 +0200
> @@ -7,6 +7,7 @@ obj-$(CONFIG_MACH_MV88F6281GTW_GE)	+= mv
>  obj-$(CONFIG_MACH_SHEEVAPLUG)		+= sheevaplug-setup.o
>  obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG)	+= sheevaplug-setup.o
>  obj-$(CONFIG_MACH_GURUPLUG)		+= guruplug-setup.o
> +obj-$(CONFIG_MACH_DREAMPLUG)		+= guruplug-setup.o
>  obj-$(CONFIG_MACH_DOCKSTAR)		+= dockstar-setup.o
>  obj-$(CONFIG_MACH_TS219)		+= ts219-setup.o tsx1x-common.o
>  obj-$(CONFIG_MACH_TS41X)		+= ts41x-setup.o tsx1x-common.o
> Index: linux-2.6/arch/arm/mach-kirkwood/guruplug-setup.c
> ===================================================================
> --- linux-2.6.orig/arch/arm/mach-kirkwood/guruplug-setup.c	2011-10-28 17:57:02.000000000 +0200
> +++ linux-2.6/arch/arm/mach-kirkwood/guruplug-setup.c	2011-10-28 21:37:13.000000000 +0200
> @@ -16,6 +16,9 @@
>  #include <linux/mv643xx_eth.h>
>  #include <linux/gpio.h>
>  #include <linux/leds.h>
> +#include <linux/spi/flash.h>
> +#include <linux/spi/spi.h>
> +#include <linux/spi/orion_spi.h>
>  #include <asm/mach-types.h>
>  #include <asm/mach/arch.h>
>  #include <mach/kirkwood.h>
> @@ -23,6 +26,22 @@
>  #include "common.h"
>  #include "mpp.h"
>  

I chose 1MB offset for the u-boot env because the stock u-boot marvell
shipped didn't even have the 1MB-2MB region accessible.  An fdt
partition could be added at +512K (size, 512K), or, after the u-boot env
partition.

struct mtd_partition dreamplug_partitions[] = {
       {
               .name   = "u-boot",
               .size   = SZ_512K,
               .offset = 0,
       },
       {
               .name   = "u-boot env",
               .size   = SZ_64K,
               .offset = SZ_512K + SZ_512K,
       },
};

> +static const struct flash_platform_data dreamplug_spi_slave_data = {
> +	.type		= "mx25l1606e",
> +	.name		= "spi_flash",
	.parts          = dreamplug_partitions,
	.nr_parts       = ARRAY_SIZE(dreamplug_partitions),
> +};
> +
> +static struct spi_board_info __initdata dreamplug_spi_slave_info[] = {
> +	{
> +		.modalias	= "m25p80",
> +		.platform_data	= &dreamplug_spi_slave_data,
> +		.irq		= -1,
> +		.max_speed_hz	= 50000000,
> +		.bus_num	= 0,
> +		.chip_select	= 0,
> +	},
> +};
> +
>  static struct mtd_partition guruplug_nand_parts[] = {
>  	{
>  		.name = "u-boot",
> @@ -91,6 +110,33 @@ static struct platform_device guruplug_l
>  	}
>  };
>  
> +static struct gpio_led dreamplug_led_pins[] = {
> +	{
> +		.name		= "dreamplug:blue:ap",
> +		.gpio		= 46,
> +		.active_low	= 1,
> +	}, {
> +		.name		= "dreamplug:green:wifi",
> +		.gpio		= 48,
> +		.active_low	= 1,
> +	},
> +};

This seems to vary.  Here's what's been working for me:

static struct gpio_led dreamplug_led_pins[] = {
       {
               .name                   = "dreamplug:blue:bluetooth",
               .gpio                   = 47,
               .active_low             = 1,
       },
       {
               .name                   = "dreamplug:green:wifi",
               .gpio                   = 48,
               .active_low             = 1,
       },
       {
               .name                   = "dreamplug:green:wifi_ap",
               .gpio                   = 49,
               .active_low             = 1,
       },
};

> +
> +static struct gpio_led_platform_data dreamplug_led_data = {
> +	.leds		= dreamplug_led_pins,
> +	.num_leds	= ARRAY_SIZE(dreamplug_led_pins),
> +};
> +
> +static unsigned int dreamplug_mpp_config[] __initdata = {
> +	MPP0_SPI_SCn,
> +	MPP1_SPI_MOSI,
> +	MPP2_SPI_SCK,
> +	MPP3_SPI_MISO,
> +	MPP46_GPIO,	/* Wifi AP LED */
> +	MPP48_GPIO,	/* Wifi LED */

And here, I have:

       MPP47_GPIO,     /* Bluetooth LED */
       MPP48_GPIO,     /* Wifi LED */
       MPP49_GPIO,     /* Wifi AP LED */

> +	0
> +};
> +
>  static unsigned int guruplug_mpp_config[] __initdata = {
>  	MPP46_GPIO,	/* M_RLED */
>  	MPP47_GPIO,	/* M_GLED */
> @@ -105,10 +151,21 @@ static void __init guruplug_init(void)
>  	 * Basic setup. Needs to be called early.
>  	 */
>  	kirkwood_init();
> -	kirkwood_mpp_conf(guruplug_mpp_config);
>  
> -	kirkwood_uart0_init();
> -	kirkwood_nand_init(ARRAY_AND_SIZE(guruplug_nand_parts), 25);
> +	if (machine_is_guruplug()) {
> +		kirkwood_mpp_conf(guruplug_mpp_config);
> +		kirkwood_uart0_init();
> +		kirkwood_nand_init(ARRAY_AND_SIZE(guruplug_nand_parts), 25);
> +	}
> +
> +	if (machine_is_dreamplug()) {
> +		kirkwood_mpp_conf(dreamplug_mpp_config);
> +		kirkwood_uart0_init();
> +		spi_register_board_info(dreamplug_spi_slave_info,
> +				ARRAY_SIZE(dreamplug_spi_slave_info));
> +		kirkwood_spi_init();
> +		guruplug_leds.dev.platform_data = &dreamplug_led_data;
> +	}
>  
>  	kirkwood_ehci_init();
>  	kirkwood_ge00_init(&guruplug_ge00_data);
> @@ -119,6 +176,12 @@ static void __init guruplug_init(void)
>  	platform_device_register(&guruplug_leds);
>  }
>  
> +#ifdef CONFIG_MACH_GURUPLUG
> +static const char const *guruplug_dt_board_compat[] = {
> +	"marvell,guruplug",
> +	NULL
> +};
> +
>  MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board")
>  	/* Maintainer: Siddarth Gore <gores@marvell.com> */
>  	.boot_params	= 0x00000100,
> @@ -127,4 +190,23 @@ MACHINE_START(GURUPLUG, "Marvell GuruPlu
>  	.init_early	= kirkwood_init_early,
>  	.init_irq	= kirkwood_init_irq,
>  	.timer		= &kirkwood_timer,
> +	.dt_compat	= guruplug_dt_board_compat,
> +MACHINE_END
> +#endif
> +
> +#ifdef CONFIG_MACH_DREAMPLUG
> +static const char const *dreamplug_dt_board_compat[] = {
> +	"marvell,dreamplug",
> +	NULL
> +};
> +
> +MACHINE_START(DREAMPLUG, "Marvell DreamPlug Reference Board")
> +	/* Maintainer: ? */
> +	.init_machine	= guruplug_init,
> +	.map_io		= kirkwood_map_io,
> +	.init_early	= kirkwood_init_early,
> +	.init_irq	= kirkwood_init_irq,
> +	.timer		= &kirkwood_timer,
> +	.dt_compat	= dreamplug_dt_board_compat,
>  MACHINE_END
> +#endif
> Index: linux-2.6/arch/arm/boot/dts/marvell-dreamplug.dts
> ===================================================================
> --- /dev/null	1970-01-01 00:00:00.000000000 +0000
> +++ linux-2.6/arch/arm/boot/dts/marvell-dreamplug.dts	2011-10-28 21:36:09.000000000 +0200
> @@ -0,0 +1,8 @@
> +/dts-v1/
> +/include/ "skeleton.dtsi"
> +
> +/ {
> +	model = "Marvell Dreamplug";
> +	compatible = "marvell,dreamplug";

"kirkwood,dreamplug" or, "arm926ejs,dreamplug" ?

> +};
> +

> diff --git a/include/configs/guruplug.h b/include/configs/guruplug.h
> index f449da9..f1cacc4 100644
> --- a/include/configs/guruplug.h
> +++ b/include/configs/guruplug.h
> @@ -38,6 +38,7 @@
>  #define CONFIG_KW88F6281	1	/* SOC Name */
>  #define CONFIG_MACH_GURUPLUG	/* Machine type */
>  #define CONFIG_SKIP_LOWLEVEL_INIT	/* disable board lowlevel_init */
> +#define CONFIG_OF_LIBFDT		1
>  
>  /*
>   * Commands configuration


Reply to: