Welcome! Log In Create A New Profile

Advanced

Kirkwood U-boot - Getting all supported Kirkwoods on-board

Posted by WarheadsSE 
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
March 21, 2014 03:03PM
ebbes,

Do you have the original u-Boot envs still in in location 0xa0000 ?

cesvcid=xxxxx
ceboardver=PPV4A3
…
...

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
March 21, 2014 04:40PM
When I boot an old U-Boot image via UART, these appear in environment, so I assume they're still there. However, this should not be the problem cause they are definitely not passed via ATAG, so they are read by pogoplug_xce kernel module, but kernel does not even boot, so this module cannot be active.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
March 21, 2014 05:16PM
My old Pogo kernel boot log:

0.000000] Linux version 2.6.31.8 (afenn@kt) (gcc version 4.3.2 (sdk3.3-ct-ng-1.4.1) ) #5 Wed Sep 28 12:09:12 PDT 2011
[    0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: Feroceon-KW
[    0.000000] Using UBoot passing parameters structure
[    0.000000] Ignoring unrecognised tag 0x41004345
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping off.  Total pages: 32512
[    0.000000] Kernel command line: console=ttyS0,115200 root=ubi0:rootfs ubi.mtd=4,2048 rootfstype=ubifs

Check your bootargs?

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)



Edited 1 time(s). Last edit at 03/21/2014 05:17PM by bodhi.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
March 21, 2014 06:14PM
Exactly the same. Taken from my stock Pogoplug v4 environment.
I even tried a build with enabled L2 cache (as in stock U-Boot, which in turn renders recent kernels unbootable), no success.
Only assumption is that my mv_uboot ATAG is not correct as CE ATAG seems to be ignored when looking at kernel source.
If you want to test, here is my (very quick and dirty, hardcoded values and so on) patch for Pogoplug v4.
diff --git a/arch/arm/include/asm/setup.h b/arch/arm/include/asm/setup.h
index 78a7fac..93a5a30 100644
--- a/arch/arm/include/asm/setup.h
+++ b/arch/arm/include/asm/setup.h
@@ -205,6 +205,25 @@ struct tag_memclk {
 	u32 fmemclk;
 };
 
+#define ATAG_MV_UBOOT	0x41000403
+struct tag_mv_uboot {
+	u32 uboot_version;
+	u32 tclk;
+	u32 sysclk;
+	u32 isUsbHost;
+	char macAddr[4][6];
+	u16 mtu[4];
+    u32 nand_ecc;
+};
+
+#define ATAG_CE_UBOOT 0x41004345
+#define CE_BOARDID "PPV4A3"
+struct tag_ce_uboot {
+	u32 ce_tagkey;
+	u32 ce_size;
+	char ce_boardid[32];
+};
+
 struct tag {
 	struct tag_header hdr;
 	union {
@@ -227,6 +246,12 @@ struct tag {
 		 * DC21285 specific
 		 */
 		struct tag_memclk	memclk;
+		
+		/*
+		 * Marvell specific
+		 */
+		struct tag_mv_uboot	mv_uboot;
+		struct tag_ce_uboot	ce_uboot;
 	} u;
 };
 
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index a8295bf..74a0233 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -183,6 +183,95 @@ static void setup_end_tag(bd_t *bd)
 	params->hdr.size = 0;
 }
 
+static void mvMacStrToHex(const char* macStr, unsigned char* macHex)
+{
+    int i;
+    char tmp[3];
+
+    for(i = 0; i < 6; i++)
+    {
+        tmp[0] = macStr[(i * 3) + 0];
+        tmp[1] = macStr[(i * 3) + 1];
+        tmp[2] = '\0';
+        macHex = (unsigned char) (simple_strtol(tmp, NULL, 16));
+    }
+}
+
+static void setup_mv_tag(struct tag **in_params)
+{
+	/* NOTE: only uboot_version, isUsbHost, ethaddr and mtu are parsed by kernel it seems */
+	
+	params->hdr.tag = ATAG_MV_UBOOT;
+	params->hdr.size = tag_size (tag_mv_uboot);
+	
+	/* taken from marvell u-boot */
+	/* everything >= 0x03040c00 has nand_ecc tag, on < 0x03040c00 a default of 0x1 is assumed */
+	#define VER_NUM 0x03041b00
+	params->u.mv_uboot.uboot_version = VER_NUM;
+	
+	params->u.mv_uboot.nand_ecc = 1; // Pogoplug v4 stock environment
+	
+	/* Pogoplug v4 is 6192A, which has boardID 0x2 or 0x3, depending on some extra thing I didn't look into.
+	 * However, 6192A is "normally" misdetected as 6281A, which has boardId 0x0 or 0x1, see above.
+	 * So one of these values should hopefully be correct */
+	unsigned int boardId = 0x2;
+	params->u.mv_uboot.uboot_version |= boardId; /* last byte of version is boardId */
+	
+	#define MV_BOARD_TCLK_166MHZ	166666667 // Pogoplug v4 shoud use this
+	#define MV_BOARD_TCLK_200MHZ	200000000
+	params->u.mv_uboot.tclk = MV_BOARD_TCLK_166MHZ;
+	
+	#define MV_BOARD_SYSCLK_100MHZ	100000000
+	#define MV_BOARD_SYSCLK_125MHZ	125000000
+	#define MV_BOARD_SYSCLK_133MHZ	133333333
+	#define MV_BOARD_SYSCLK_150MHZ	150000000
+	#define MV_BOARD_SYSCLK_166MHZ	166666667
+	#define MV_BOARD_SYSCLK_200MHZ	200000000 // Pogoplug v4 should use this
+	#define MV_BOARD_SYSCLK_233MHZ	233333333
+	#define MV_BOARD_SYSCLK_250MHZ	250000000
+	#define MV_BOARD_SYSCLK_267MHZ	266666667
+	
+	params->u.mv_uboot.sysclk = MV_BOARD_SYSCLK_200MHZ;
+	
+	/* meaning: USB controller 0 is host controller */
+	params->u.mv_uboot.isUsbHost = 1;
+	
+	/* clear required fields for mtu and mac for all 4 possible gigeth ifaces on marvell feroceon */
+	int i;
+	for (i = 0; i < 4; i++)
+	{
+		memset(params->u.mv_uboot.macAddr, 0, sizeof(params->u.mv_uboot.macAddr));
+		params->u.mv_uboot.mtu = 0;
+	}
+	
+	/* kirkwood only has one eth iface, so set only this one */
+	char *env;
+	env = getenv("ethaddr");
+	if (env)
+		mvMacStrToHex(env, params->u.mv_uboot.macAddr[0]);
+	env = getenv("ethmtu");
+	if (env)
+		params->u.mv_uboot.mtu[0] = simple_strtoul(env, NULL, 10);
+	
+	params = tag_next (params);
+	
+	printf("setup_mv_tag finished!\n");
+}
+
+static void setup_ce_tag(struct tag **in_params)
+{
+	/* NOTE: does not seem to be parsed by kernel at all... unless kernel source does not match binary */
+	params->hdr.tag = ATAG_CE_UBOOT;
+	params->hdr.size = tag_size (tag_ce_uboot);
+	params->u.ce_uboot.ce_tagkey = 0x5843453A;
+	params->u.ce_uboot.ce_size = sizeof(struct tag_ce_uboot);
+	strncpy(params->u.ce_uboot.ce_boardid, CE_BOARDID, sizeof(params->u.ce_uboot.ce_boardid));
+	params = tag_next (params);
+	printf("setup_ce_tag done.\n");
+	printf(CE_BOARDID);
+	printf("\n");
+}
+
 __weak void setup_board_tags(struct tag **in_params) {}
 
 static void do_nonsec_virt_switch(void)
@@ -236,6 +325,8 @@ static void boot_prep_linux(bootm_headers_t *images)
 						 images->rd_end);
 			}
 		}
+		setup_mv_tag(&params);
+		setup_ce_tag(&params);
 		setup_board_tags(&params);
 		setup_end_tag(gd->bd);
 	} else {

Hello, Can I compile the current source code for the NSA 310 ? I saw that someone mentioned that there were some patches for NSA 310.
Thanks,
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
March 25, 2014 02:59PM
I think I need to finish and commit my changes for it before you can compile & test a kwb
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
April 03, 2014 03:47PM
Has anyone made an effort to pull from 2013.10 to 2014.1?
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
April 03, 2014 05:10PM
WarheadsSE Wrote:
-------------------------------------------------------
> Has anyone made an effort to pull from 2013.10 to
> 2014.1?

I'm going to try that in the next few days.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
April 11, 2014 03:43PM
FYI. I'll push 2014.01 to the repo soon.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
April 11, 2014 03:59PM
I will rebase my NSA3xx branch after that, and get it pulled in.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
April 11, 2014 05:26PM
Done! u-boot-kirkwood repo is now 2014.01.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
May 10, 2014 06:43PM
@WarheadsSE,

Whenever you're ready, I'd like to pull in the NSA3xx.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
May 22, 2014 05:53PM
@ebbes,

I'd like to bring in your patch for Pogo V4 into the u-boot-kirwood repo. So if you prefer, I could take pull request. Or I could just check in your patch and commit (I've tested the Pogo V4 u-boot with your patch locally).

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
May 26, 2014 06:18PM
FYI,

There are some bug fixes and added features in u-boot-2014.04 that I think eventually some of us will run into or need. So I plan to rebase u-boot-kirkwood to 2014.04. I think I will have time to do this about 4 weeks from now.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
June 07, 2014 07:15PM
Thank you for gettting sata working on the v4/mobile. I had to update the handfull device I have,
so the easiest was to modify jeff old script.

http://projects.doozan.com/uboot/install_uboot_mtd0.sh

basicliy I just download ebbes kwb file if current uboot has the right md5sum, and avoid the checks in jeffs script.
of course the changes would be even less, if ebbes firmware and its m5sum would be available from:

http://download.doozan.com/uboot/files/uboot/uboot.mtd0.pogov4.ebbes-2014-03-19.kwb
http://download.doozan.com/uboot/files/uboot/uboot.mtd0.pogov4.ebbes-2014-03-19.kwb.md5

and add the appropriate lines to:

http://jeff.doozan.com/uboot/valid-uboot.md5

/Peter

Here are my diffs:

32a33,34
> # Ebbes uboot for pogov4, see: http://forum.doozan.com/read.php?3,14697,15533#msg-15533
> POGOV4_URL='http://forum.doozan.com/file.php?3,file=452,filename=uboot.mtd0_200MHz.kwb,download=1';
61a64
>   if [ "$UBOOT_PLATFORM" = "pogov4" ]; then return 0; fi
76a80,84
>   if [ "$UBOOT_PLATFORM" = "pogov4" ]; then
>     echo "skip md5 for pogov4 $file_url"
>     wget -O "$file_dest" "$file_url"
>     return 0
>   fi
245a254,255
> echo "b96574b1ee60d525be7e3c8bceeb6fda pogov4 ebbes-2014-03-19-current" >> "/tmp/valid-uboot.md5"
> echo "ec62667e96e893c77f163f31b8d268cf pogov4 original" >> "/tmp/valid-uboot.md5"
397a408
> if [ "$UBOOT_PLATFORM" != "pogov4" ]; then
398a410
> fi
422a435
>   if [ "$UBOOT_PLATFORM" = "pogov4" ]; then UBOOT_MTD0_URL=$POGOV4_URL; fi
510a524
>   if [ "$UBOOT_PLATFORM" = "pogov4" ]; then ENV_ARCNUMBER="3960"; fi
566a581
>   if [ "$UBOOT_PLATFORM" = "pogov4" ]; then $FW_SETENV machid F78; fi
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
June 08, 2014 02:23PM
I am trying to rebuild pogo_v4 so I can play with grub-arm.
CONFIG_API is needed and probably some other tweaks in the 2014.04 rebase.

edit: bah, using BUILD_DIR is a no-go with his tree.
`make distclean; make pogo_v4_config; make all u-boot.kwb` will do it.
ill post a working config for grub-arm if and when it...works :-)

BTW, if you rebase on 2014.07, maybe we can cross-compile with clang :-)
see https://github.com/jhofstee/u-boot/commits/v2014.07-rc2-clang



Edited 2 time(s). Last edit at 06/19/2014 11:24AM by joeykork.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 04, 2014 01:58AM
FYI,

There are some bug fixes and code structure reorganization in u-boot-2014.07. So I plan to hold off the rebasing of u-boot-kirkwood until 2014.07 is released (sometime about mid to the end of this month). The Pogo V4 u-boot is ready, but will be released at the same time as other Kirkwood boxes after the 2014.07 rebase.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 04, 2014 11:49AM
Hi @bodhi,

Let me apologize first, I did not read this whole thread, but had a quick question.

Can I assume both the Pogoplug Series 4 and Pogoplug Mobile will be supported?

The Mobile is currently on sale for $7.50 (on Adorama) so it's hard to pass up.

Thanks

gray
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 04, 2014 12:06PM
@gray,

Yes, the Pogo V4 U-boot is the same as the Mobile.

OT, a gigabit switch would cost more than all the Mobiles that plug into it :) do you plan to create a cluster? I'm curious to know if there is a low cost way to do it. Thnx.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)



Edited 1 time(s). Last edit at 07/04/2014 12:10PM by bodhi.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 04, 2014 01:05PM
bodhi Wrote:
-------------------------------------------------------
> @gray,
>
> Yes, the Pogo V4 U-boot is the same as the
> Mobile.
>
> OT, a gigabit switch would cost more than all the
> Mobiles that plug into it :) do you plan to create
> a cluster? I'm curious to know if there is a low
> cost way to do it. Thnx.

When you say cluster, are you talking about a high availability or high performance/parallel processing cluster? Just curious what you would do with it?

Sorry, in either case, I have no experience with linux clustering. However, the PP Mobile at $7.50 got to be one of the most cost effective platform to build a cluster on.

BTW, my current project is getting OpenWRT running on the internal PP flash.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 04, 2014 10:09PM
grayman4hire Wrote:
-------------------------------------------------------
> Hi @bodhi,
>
> Let me apologize first, I did not read this whole
> thread, but had a quick question.
>
> Can I assume both the Pogoplug Series 4 and
> Pogoplug Mobile will be supported?
>
> The Mobile is currently on sale for $7.50 (on
> Adorama) so it's hard to pass up.
>
> Thanks
>
> gray


that is a great price. looks to be the same price on amazon as well, im ordering one to play around with. Has anyone gotten arch to boot off sd yet?
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 05, 2014 12:29PM
Doable via the existing 'doozan'/bodhi build of the v4 uboot and an ALARM rootfs
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 17, 2014 02:11PM
@grayman4hire
Quote
BTW, my current project is getting OpenWRT running on the internal PP flash
This is already be done by "derdigge" in digital elite Board. I´m running one of my Pogos E02 with openWRT AA 12.09 and full package support.
BusyBox v1.19.4 (2013-04-30 14:35:20 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

 ----------------------------------------------------------------------------
   _____                                           __      __         __
 /\  __`\                                        /\ \  __/\ \       /\ \__
 \ \ \/\ \    ____    ___     __      ___ ___    \ \ \/\ \ \ \  _ __\ \ ,_\
  \ \ \ \ \  /',__\  /'___\ /'__`\  /' __` __`\   \ \ \ \ \ \ \/\`'__\ \ \/
   \ \ \_\ \/\__, `\/\ \__//\ \L\.\_/\ \/\ \/\ \   \ \ \_/ \_\ \ \ \/ \ \ \_
    \ \_____\/\____/\ \____\ \__/.\_\ \_\ \_\ \_\   \ `\___x___/\ \_\  \ \__\
     \/_____/\/___/  \/____/\/__/\/_/\/_/\/_/\/_/    '\/__//__/  \/_/   \/__/

 ----------------------------------------------------------------------------
  Based on Attitude Adjustment, r36472 mod by derdigge          
 ----------------------------------------------------------------------------
  Weitere Informationen:

        http://www.digital-eliteboard.com/showthread.php?228761

        Kommandos:
  oscam help


Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 17, 2014 02:14PM
Still not explaining what you mean by "cluster"
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 22, 2014 09:27PM
@WarheadsSE,

I'm rebasing u-boot-kirwood and got this error:

# git checkout -b 2014.07-kirkwood 524123a70761110c5cf3ccc5f52f6d4da071b959
fatal: reference is not a tree: 524123a70761110c5cf3ccc5f52f6d4da071b959

Any idea why? I've used this same command before to rebase 2014.01.

In the second attempt, I've created the branch 2014.07-kirkwood first and then got the same error:

# git checkout 524123a70761110c5cf3ccc5f52f6d4da071b959
fatal: reference is not a tree: 524123a70761110c5cf3ccc5f52f6d4da071b959

Here is the commit info.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 22, 2014 10:28PM
OK. Got rid of this error after refetch every thing.

git fetch --all

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
July 24, 2014 02:34PM
FYI,

u-boot-kirkwood repo is now 2014.07.

New branch 2014.07.b-kirkwood.
New tag v2014.07-kirkwood.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
August 11, 2014 07:53PM
WarheadsSE,

I thought I'd move our discussion about NSA325 UART booting to this thread properly, starting from this post:
http://forum.doozan.com/read.php?2,14351,17077#msg-17077

- I've tried 384K stock (extracted from mtd) U-boot image.
- I've tried your NSA325 U-boot code, built with UART option (it is small enough to be loaded successfully every time from cold boot).

So far my observation during cold booting these 2 images:

- The watchdog probably kills any UART booting right at the beginning. Looks like a hard reset occured right immediately after UART finished loading. Similar to a cold start that got a brief power recycle that we have been seeing.

- I've put in code to turn off the watchdog at board_init. But it did not seem to matter. Because my printf in board_init did not output anything so it must have been killed before that.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
August 12, 2014 08:32AM
This is what I have experienced as well.
Re: Kirkwood U-boot - Getting all supported Kirkwoods on-board
August 12, 2014 11:24PM
A bit of progress!

This is UART catching warmboot.
root@Dockstar:/localdisk/linux/uboot# ./kwboot-tool/kwboot -t -B 115200 /dev/ttyUSB0 -b uboot.1.1.4-nsa325v2-uart.bin 
Sending boot message. Please reboot the target...\
Sending boot image...
  0 % [......................................................................]
  1 % [......................................................................]
 ...
 92 % [......................................................................]
 94 % [......................................................................]
 96 % [......................................................................]
 98 % [......................................................................]
 99 % [....]
[Type Ctrl-\ + c to quit]

         __  __                      _ _
        |  \/  | __ _ _ ____   _____| | |
        | |\/| |/ _` | '__\ \ / / _ \ | |
        | |  | | (_| | |   \ V /  __/ | |
        |_|  |_|\__,_|_|    \_/ \___|_|_|
 _   _     ____              _
| | | |   | __ )  ___   ___ | |_ 
| | | |___|  _ \ / _ \ / _ \| __| 
| |_| |___| |_) | (_) | (_) | |_ 
 \___/    |____/ \___/ \___/ \__| 
 ** MARVELL BOARD: DB-88F6282A-BP LE 

U-Boot 1.1.4-bodhi (Aug 12 2014 - 21:09:42) Marvell version: 3.5.9

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006CFB00

Soc: 88F6282 A1CPU running @ 1600Mhz L2 running @ 800Mhz
SysClock = 533Mhz , TClock = 200Mhz 

DRAM (DDR3) CAS Latency = 7 tRP = 8 tRAS = 24 tRCD=8
DRAM CS[0] base 0x00000000   size 512MB 
DRAM Total size 512MB  16bit width
Addresses 10M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (10M - 7M): Done
NAND:128 MB
Flash:  0 kB

CPU : Marvell Feroceon (Rev 1)
Kernel address is 0x4640000.

Streaming disabled 
Write allocate disabled


USB 0: host mode
	[BlueDBG] reseting SoC Pex[0]  0 ...
PEX 0: PCI Express Root Complex Interface
PEX interface detected Link X1
	[BlueDBG] reseting SoC Pex[1]  0 ...
	[BlueDBG] reseting SoC Pex[1]  1 ...
	[BlueDBG] reseting SoC Pex[1]  2 ...
	[BlueDBG] reseting SoC Pex[1]  3 ...
	[BlueDBG] reseting SoC Pex[1]  4 ...
	[BlueDBG] reseting SoC Pex[1]  5 ...
	[BlueDBG] reseting SoC Pex[1]  6 ...
	[BlueDBG] reseting SoC Pex[1]  7 ...
	[BlueDBG] reseting SoC Pex[1]  8 ...
	[BlueDBG] reseting SoC Pex[1]  9 ...
	[BlueDBG] reseting SoC Pex[1]  10 ...
PEX 1: interface detected no Link.
Net:   egiga0 [PRIME]
Hit any key to stop autoboot:  0

However, the image is too big so it can't complete loading during cold start. I guess I have to strip down some config options to get it to 384K.

-bodhi
===========================
Forum Wiki
bodhi's corner (buy bodhi a beer)
Author:

Your Email:


Subject:


Spam prevention:
Please, enter the code that you see below in the input field. This is for blocking bots that try to post this form automatically. If the code is hard to read, then just try to guess it right. If you enter the wrong code, a new image is created and you get another chance to enter it right.
Message: