arm: Remove palmtreo680 board
This board has not been converted to generic board by the deadline. Remove it. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									1c87dd76c4
								
							
						
					
					
						commit
						ad4f54ea86
					
				|  | @ -614,11 +614,6 @@ config TARGET_H2200 | ||||||
| 	bool "Support h2200" | 	bool "Support h2200" | ||||||
| 	select CPU_PXA | 	select CPU_PXA | ||||||
| 
 | 
 | ||||||
| config TARGET_PALMTREO680 |  | ||||||
| 	bool "Support palmtreo680" |  | ||||||
| 	select CPU_PXA |  | ||||||
| 	select SUPPORT_SPL |  | ||||||
| 
 |  | ||||||
| config TARGET_COLIBRI_PXA270 | config TARGET_COLIBRI_PXA270 | ||||||
| 	bool "Support colibri_pxa270" | 	bool "Support colibri_pxa270" | ||||||
| 	select CPU_PXA | 	select CPU_PXA | ||||||
|  | @ -748,7 +743,6 @@ source "board/karo/tx25/Kconfig" | ||||||
| source "board/maxbcm/Kconfig" | source "board/maxbcm/Kconfig" | ||||||
| source "board/mpl/vcma9/Kconfig" | source "board/mpl/vcma9/Kconfig" | ||||||
| source "board/olimex/mx23_olinuxino/Kconfig" | source "board/olimex/mx23_olinuxino/Kconfig" | ||||||
| source "board/palmtreo680/Kconfig" |  | ||||||
| source "board/phytec/pcm051/Kconfig" | source "board/phytec/pcm051/Kconfig" | ||||||
| source "board/ppcag/bg0900/Kconfig" | source "board/ppcag/bg0900/Kconfig" | ||||||
| source "board/samsung/smdk2410/Kconfig" | source "board/samsung/smdk2410/Kconfig" | ||||||
|  |  | ||||||
|  | @ -1,9 +0,0 @@ | ||||||
| if TARGET_PALMTREO680 |  | ||||||
| 
 |  | ||||||
| config SYS_BOARD |  | ||||||
| 	default "palmtreo680" |  | ||||||
| 
 |  | ||||||
| config SYS_CONFIG_NAME |  | ||||||
| 	default "palmtreo680" |  | ||||||
| 
 |  | ||||||
| endif |  | ||||||
|  | @ -1,6 +0,0 @@ | ||||||
| PALMTREO680 BOARD |  | ||||||
| #M:	Mike Dunn <mikedunn@newsguy.com> |  | ||||||
| S:	Orphan (since 2014-06) |  | ||||||
| F:	board/palmtreo680/ |  | ||||||
| F:	include/configs/palmtreo680.h |  | ||||||
| F:	configs/palmtreo680_defconfig |  | ||||||
|  | @ -1,9 +0,0 @@ | ||||||
| #
 |  | ||||||
| # Palm Treo680 Support
 |  | ||||||
| #
 |  | ||||||
| # Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com>
 |  | ||||||
| #
 |  | ||||||
| # This file is released under the terms of GPL v2 and any later version.
 |  | ||||||
| # See the file COPYING in the root directory of the source tree for details.
 |  | ||||||
| 
 |  | ||||||
| obj-y	:= palmtreo680.o |  | ||||||
|  | @ -1,563 +0,0 @@ | ||||||
| 
 |  | ||||||
| README for the Palm Treo 680. |  | ||||||
| 
 |  | ||||||
| Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com> |  | ||||||
| 
 |  | ||||||
| You may reproduce the contents of this file entirely or in part, but please |  | ||||||
| credit me by name if you do.  Thanks. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Intro |  | ||||||
| ===== |  | ||||||
| 
 |  | ||||||
| Yes, you can program u-boot onto the flash of your Palm Treo 680 so that u-boot |  | ||||||
| (then Linux, Android, ...) runs at power-up.  This document describes how, and |  | ||||||
| gives some implementation details on this port of u-boot and describes how the |  | ||||||
| Treo 680 boots from reset. |  | ||||||
| 
 |  | ||||||
| But first, I probably don't need to tell you that after doing this, your phone |  | ||||||
| will no longer run PalmOS.  You *may* be able to later restore your phone to its |  | ||||||
| original state by creating a backup image of the flash before writing u-boot |  | ||||||
| (details below), but this is not heavily tested and should not be relied upon. |  | ||||||
| There is also the possibility that something may go wrong during the process of |  | ||||||
| programming u-boot, leaving you with a bricked phone.  If you follow these |  | ||||||
| instructions carefully this chance will be minimized, but I do not recommend |  | ||||||
| that you program u-boot onto a phone that you can not afford to lose, and |  | ||||||
| certainly not one that contains important data that is not backed up elsewhere. |  | ||||||
| I AM NOT RESPONSIBLE FOR THE LOSS OF YOUR PHONE.  DO THIS AT YOUR OWN RISK. |  | ||||||
| Having said that, feel free to send me a note cursing me out if something does |  | ||||||
| go wrong, but please tell me what happened exactly.  For that matter, I'd love |  | ||||||
| to hear from you if you succeed. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Details on the SPL |  | ||||||
| ================== |  | ||||||
| 
 |  | ||||||
| The docg4 features a 2k region at the start of its address space that interfaces |  | ||||||
| to the system bus like a NOR flash.  This allows the docg4 to function as a boot |  | ||||||
| ROM.  The Treo 680 uses this feature.  The contents of this 2k region are |  | ||||||
| write-protected and can not be reprogrammed.  Fortunately, the code it contains |  | ||||||
| does what we need to do, at least partially.  After some essential hardware |  | ||||||
| initialization (like the SDRAM controller), it runs an IPL (initial program |  | ||||||
| loader) that copies 128K (no more, no less) from flash to a fixed address in |  | ||||||
| SDRAM (0xa1700000) and jumps to it.  128K is too small for u-boot, so we use it |  | ||||||
| to load a u-boot secondary program loader (SPL).  But since our SPL only |  | ||||||
| occupies a little over 1k, we can economize on flash usage by having the IPL |  | ||||||
| load a portion of u-boot proper as well.  We let the IPL load the first 128k of |  | ||||||
| a concatenated spl + u-boot image, and because the SPL is placed before u-boot |  | ||||||
| proper, the IPL jumps to the SPL, which copies the portion of u-boot that the |  | ||||||
| IPL has already loaded to its correct SDRAM address, and then loads the |  | ||||||
| remainder of u-boot and jumps to it. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| The docg4's "reliable mode" |  | ||||||
| =========================== |  | ||||||
| 
 |  | ||||||
| This is a special mode of operation of the docg4's integrated controller whereby |  | ||||||
| consecutive pairs of 2k regions are used in parallel (in some fashion) to store |  | ||||||
| 2k of data.  In other words, the normal capacity is halved, but the data |  | ||||||
| integrity is improved.  In this mode, the data is read or written from pages in |  | ||||||
| even-numbered 2k regions (regions starting at 0x000, 0x1000, 0x2000, ...).  The |  | ||||||
| odd-numbered 2k regions (regions starting at 0x800, 0x1800, 0x2800, ...) are |  | ||||||
| transparently used in parallel.  In reliable mode, the odd-numbered 2k regions |  | ||||||
| are not meant to be read or written directly. |  | ||||||
| 
 |  | ||||||
| Reliable mode is used by the IPL because there is not enough space in its 2k |  | ||||||
| footprint to implement the BCH ecc algorithm.  Data that is read while reliable |  | ||||||
| mode is enabled must have been written in reliable mode, or the read fails. |  | ||||||
| However, data written in reliable mode can also be read in normal mode (just not |  | ||||||
| as reliably), but only from the even-numbered 2k regions; the odd-numbered 2k |  | ||||||
| regions appear to contain junk, and will generate ecc errors.  When the IPL and |  | ||||||
| SPL read from flash, the odd-numbered 2k regions are explicitly skipped.  The |  | ||||||
| same is true for the flash_u-boot utility when it writes the u-boot image in |  | ||||||
| reliable mode. |  | ||||||
| 
 |  | ||||||
| The docg4 Linux driver supports writing in reliable mode (it is enabled by the |  | ||||||
| module parameter), but not reading.  However, the u-boot docg4_spl driver does |  | ||||||
| read in reliable mode, in the same fashion as the IPL. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Details on the IPL and its data format |  | ||||||
| ====================================== |  | ||||||
| 
 |  | ||||||
| Starting from block 5 and counting upward, the IPL will search for and load the |  | ||||||
| first two blocks it finds that contain a magic number in the oob of the first |  | ||||||
| page of the block.  The contents are loaded to SDRAM starting at address |  | ||||||
| 0xa1700000.  After two blocks have been loaded, it jumps to 0xa1700000.  The |  | ||||||
| number of blocks loaded and the load address in SDRAM are hard-coded; only the |  | ||||||
| flash offset of the blocks can vary at run-time (based on the presence of the |  | ||||||
| magic number). |  | ||||||
| 
 |  | ||||||
| In addition to using the docg4's reliable mode, the IPL expects each 512 byte |  | ||||||
| page to be written redundantly in the subsequent page.  The hardware is capable |  | ||||||
| of detecting bit errors (but not correcting them), and if a bit error is |  | ||||||
| detected when a page is read, the page contents are discarded and the subsequent |  | ||||||
| page is read. |  | ||||||
| 
 |  | ||||||
| Reliable mode reduces the capacity of a block by half, and the redundant pages |  | ||||||
| reduce it by half again.  As a result, the normal 256k capacity of a block is |  | ||||||
| reduced to 64k for the purposes of the IPL/SPL. |  | ||||||
| 
 |  | ||||||
| For the sake of simplicity and uniformity, the u-boot SPL mimics the operation |  | ||||||
| of the IPL, and expects the image to be stored in the same format. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Instructions on Programming u-boot to flash |  | ||||||
| =========================================== |  | ||||||
| 
 |  | ||||||
| To program u-boot to your flash, you will need to boot the Linux kernel on your |  | ||||||
| phone using a PalmOS bootloader such as cocoboot.  The details of building and |  | ||||||
| running Linux on your Treo (cross-compiling, creating a root filesystem, |  | ||||||
| configuring the kernel, etc) are beyond the scope of this document.  The |  | ||||||
| remainder of this document describes in detail how to program u-boot to the |  | ||||||
| flash using Linux running on the Treo. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Hardware Prerequisites |  | ||||||
| ====================== |  | ||||||
| 
 |  | ||||||
| A Palm Treo 680: |  | ||||||
|   (dugh) |  | ||||||
| 
 |  | ||||||
| A Palm usb cable: |  | ||||||
|   You'll need this to establish a usbtty console connection to u-boot from a |  | ||||||
|   desktop PC.  Currently there is no support in u-boot for the pxa27x keypad |  | ||||||
|   (coming soon), so a serial link must be used for the console. |  | ||||||
|   These cables are still widely available if you don't already have one. |  | ||||||
| 
 |  | ||||||
| A Linux desktop PC. |  | ||||||
|   You may be able to use Windows for the u-boot console if you have a usb driver |  | ||||||
|   that is compatible with the Linux usbserial driver, but for programming u-boot |  | ||||||
|   to flash, you'll really want to use a Linux PC. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Treo-side Software Prerequisites |  | ||||||
| ================================ |  | ||||||
| 
 |  | ||||||
| Linux bootloader for PalmOS: |  | ||||||
| 
 |  | ||||||
|   Cocoboot is the only one I'm aware of.  If you don't already have this, you |  | ||||||
|   can download it from |  | ||||||
|   https://download.enlightenment.org/misc/Illume/Treo-650/2008-11-13/sdcard-base.tar.gz |  | ||||||
|   which is a compressed tar archive of the contents of an sd card containing |  | ||||||
|   cocoboot.  Use mkdosfs to create a fat16 filesystem on the first primary |  | ||||||
|   partition of the card, mount the partition, and extract the tar file to it. |  | ||||||
|   You will probably need to edit the cocoboot.conf file to customize the |  | ||||||
|   parameters passed to the kernel. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Linux kernel: |  | ||||||
| 
 |  | ||||||
|   The kernel on the Treo 680 is still a little rough around the edges, and the |  | ||||||
|   official kernel frequently breaks on the Treo :(  A development kernel |  | ||||||
|   specifically for the Treo 680 can be found on github: |  | ||||||
|     http://github.com/mike-dunn/linux-treo680 |  | ||||||
|   The master branch of this tree has been tested on the Treo, and I recommend |  | ||||||
|   using this kernel for programming u-boot.  As of this writing, there may be a |  | ||||||
|   bug in the docg4 nand flash driver that sometimes causes block erasures to |  | ||||||
|   fail.  This has been fixed in the above tree. |  | ||||||
| 
 |  | ||||||
|   If you choose to use the official kernel, it must contain the docg4 driver that |  | ||||||
|   includes the reliable_mode module parameter.  This was a later enhancement to |  | ||||||
|   the driver, and was merged to the kernel as of v3.8.  Do not try to use an |  | ||||||
|   earlier kernel that contains the docg4 driver without support for writing in |  | ||||||
|   reliable mode.  If you try to program u-boot to flash with the docg4 driver |  | ||||||
|   loaded without the reliable_mode parameter enabled, you *will* brick your |  | ||||||
|   phone! |  | ||||||
| 
 |  | ||||||
|   For the purpose of programming u-boot to flash, the following options must be |  | ||||||
|   enabled in the Treo kernel's .config: |  | ||||||
| 
 |  | ||||||
|      CONFIG_MTD=y |  | ||||||
|      CONFIG_MTD_CMDLINE_PARTS=y |  | ||||||
|      CONFIG_MTD_CHAR=y |  | ||||||
|      CONFIG_MTD_NAND_DOCG4=m |  | ||||||
| 
 |  | ||||||
|   Note that the docg4 nand driver is configured as a module, because we will |  | ||||||
|   want to load and unload it with reliable_mode enabled or disabled as needed. |  | ||||||
| 
 |  | ||||||
|   You will also need to specify mtd partitions on the kernel command line.  In |  | ||||||
|   the instructions that follow, we will assume that the flash blocks to which |  | ||||||
|   u-boot will be programmed are defined by the second partition on the device. |  | ||||||
|   The u-boot config file (include/configs/palmtreo680.h) places the u-boot image |  | ||||||
|   at the start of block 6 (offset 0x180000), which is the first writable |  | ||||||
|   (non-protected) block on the flash (this is also where the PalmOS SPL starts). |  | ||||||
|   The u-boot image occupies four blocks, so to create the u-boot partition, pass |  | ||||||
|   this command line to the kernel: |  | ||||||
|     mtdparts=Msys_Diskonchip_G4:1536k(protected_part)ro,1024k(bootloader_part),-(filesys_part) |  | ||||||
|   This will create three partitions: |  | ||||||
|     protected_part: the first six blocks, which are read-only |  | ||||||
|     bootloader_part: the next four blocks, for the u-boot image |  | ||||||
|     filesys_part: the remainder of the device |  | ||||||
|   The mtdchar kernel device driver will use device nodes /dev/mtd0, /dev/mtd1, |  | ||||||
|   and /dev/mtd2 for these partitions, respectively.  Ensure that your root file |  | ||||||
|   system at least has /dev/mtd1 if you are not running udev or mdev. |  | ||||||
| 
 |  | ||||||
| Userspace Utilities: |  | ||||||
| 
 |  | ||||||
|   In addition to everything necessary to provide a useful userspace environment |  | ||||||
|   (busybox is indispensable, of course), you will need the mtd-utils package on |  | ||||||
|   your root filesystem.  I use version 1.5.0 of mtd-utils, and I suggest you use |  | ||||||
|   this version as well, or at leat a version very close to this one, as |  | ||||||
|   mtd-utils has tended to be fluid. |  | ||||||
| 
 |  | ||||||
|   Note that busybox includes a version of mtd-utils.  These are deficient and |  | ||||||
|   should not be used.  When you run one of these utilities (nanddump, etc), |  | ||||||
|   ensure you are invoking the separate executable from mtd-utils, and not the |  | ||||||
|   one built into busybox.  I recommend that you configure busybox with its |  | ||||||
|   mtd-utils disabled to avoid any possibility of confusion. |  | ||||||
| 
 |  | ||||||
|   You will also need to cross-compile the userspace Linux utility in |  | ||||||
|   tools/palmtreo680/flash_u-boot.c, which we will run on the Treo to perform the |  | ||||||
|   actual write of the u-boot image to flash.  This utility links against libmtd |  | ||||||
|   from the mtd-utils package. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Desktop PC-side Software Prerequisites |  | ||||||
| ====================================== |  | ||||||
| 
 |  | ||||||
| Terminal emulator application: |  | ||||||
|   minicom, kermit, etc. |  | ||||||
| 
 |  | ||||||
| Linux kernel: |  | ||||||
|   Compiled with CONFIG_USB_SERIAL enabled.  Build this as a module. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Recommended (Not directly related to u-boot) |  | ||||||
| ============================================ |  | ||||||
| 
 |  | ||||||
| Working directly on the Treo's tiny screen and keypad is difficult and |  | ||||||
| error-prone.  I recommend that you log into the Linux kernel running on your |  | ||||||
| Treo from your desktop PC using ethernet over usb.  The desktop's kernel must be |  | ||||||
| configured with CONFIG_USB_USBNET, CONFIG_USB_NET_CDCETHER, and |  | ||||||
| CONFIG_USB_NET_CDC_SUBSET.  The Treo's kernel will need CONFIG_USB_ETH, and its |  | ||||||
| init script will need to start an ssh daemon like dropbear.  Note that the usb0 |  | ||||||
| network interface will not appear on the desktop PC until the Treo kernel's usb |  | ||||||
| ethernet gadget driver has initialized.  You must wait for this to occur (watch |  | ||||||
| the PC's kernel log) before you can assign usb0 an ip address and log in to the |  | ||||||
| Treo.  If you also build the Treo's kernel with CONFIG_IP_PNP enabled, you can |  | ||||||
| pass its ip address on the kernel command line, and obviate the need to |  | ||||||
| initialize the network interface in your init script. |  | ||||||
| 
 |  | ||||||
| Having the Palm usb cable connected to the host has the added benefit of keeping |  | ||||||
| power supplied to your Treo, reducing the drain on the battery.  If something |  | ||||||
| goes wrong while you're programming u-boot to the flash, you will have lots of |  | ||||||
| time to correct it before the battery dies. |  | ||||||
| 
 |  | ||||||
| I have encountered a situation where the kernel is sometimes unable to mount a |  | ||||||
| root filesystem on the mmc card due to the mmc controller not initializing in |  | ||||||
| time, (and CONFIG_MMC_UNSAFE_RESUME doesn't seem to help) so I recommend that |  | ||||||
| you build a minimal root filesystem into the kernel using the kernel's initramfs |  | ||||||
| feature (CONFIG_BLK_DEV_INITRD).  If you want your root filesystem on the mmc |  | ||||||
| card, your init script can mount and switch_root to the mmc card after a short |  | ||||||
| sleep.  But keep in mind that in this case you won't be able to use an mmc card |  | ||||||
| to transfer files between your desktop and the Treo once Linux is running. |  | ||||||
| Another option for transfering files is to mount an nfs filesystem exported by |  | ||||||
| the desktop PC.  For greatest convenience, you can export the root filesystem |  | ||||||
| itself from your desktop PC and switch_root to it in your init script.  This |  | ||||||
| will work if your initramfs init script contains a loop that waits for you to |  | ||||||
| initialize the usb0 network interface on the desktop PC; e.g., loop while a ping |  | ||||||
| to the desktop PC returns an error.  After the loop exits, do the nfs mount and |  | ||||||
| call switch_root.  (You can not use the kernel nfsroot feature because the |  | ||||||
| network will not be up when the kernel expects it to be; i.e., not until you |  | ||||||
| configure the usb0 interface on the desktop.)  Use the nfs 'nolock' option when |  | ||||||
| mounting to avoid the need to run a portmapper like rpcbind. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Preliminaries |  | ||||||
| ============= |  | ||||||
| 
 |  | ||||||
| Once Linux is running on your Treo, you may want to perform a few sanity checks |  | ||||||
| before programming u-boot.  These checks will verify my assumptions regarding |  | ||||||
| all the Treo 680s out there, and also ensure that the flash and mtd-utils are |  | ||||||
| working correctly.  If you are impatient and reckless, you may skip this |  | ||||||
| section, but see disclaimer at the top of this file! |  | ||||||
| 
 |  | ||||||
| Load the docg4 driver: |  | ||||||
| 
 |  | ||||||
|   $ modprobe docg4 ignore_badblocks=1 reliable_mode=1 |  | ||||||
| 
 |  | ||||||
| We tell the driver to use the docg4's "reliable mode" when writing because this |  | ||||||
| is the format required by the IPL, which runs from power-up and loads the first |  | ||||||
| portion of u-boot.  We must ignore bad blocks because linux mtd uses out-of-band |  | ||||||
| (oob) bytes to mark bad blocks, which will cause the blocks written by PalmOS to |  | ||||||
| be misidentified as "bad" by libmtd. |  | ||||||
| 
 |  | ||||||
| Check the kernel log to ensure that all's well: |  | ||||||
| 
 |  | ||||||
|   $ dmesg | tail |  | ||||||
|    	      <... snip ...> |  | ||||||
|   docg4 docg4: NAND device: 128MiB Diskonchip G4 detected |  | ||||||
|   3 cmdlinepart partitions found on MTD device Msys_Diskonchip_G4 |  | ||||||
|   Creating 3 MTD partitions on "Msys_Diskonchip_G4": |  | ||||||
|   0x000000000000-0x000000180000 : "protected_part" |  | ||||||
|   0x000000180000-0x000000280000 : "bootloader_part" |  | ||||||
|   0x000000280000-0x000008000000 : "filesys_part" |  | ||||||
| 
 |  | ||||||
| Ensure that the partition boundaries are as shown.  (If no partitions are shown, |  | ||||||
| did you remember to pass them to the kernel on the command line?)  We will write |  | ||||||
| u-boot to bootloader_part, which starts at offset 0x180000 (block 6) and spans 4 |  | ||||||
| 256k blocks.  This partition is accessed through the device node /dev/mtd1. |  | ||||||
| 
 |  | ||||||
| The docg4 contains a read-only table that identifies blocks that were marked as |  | ||||||
| bad at the factory.  This table is in the page at offset 0x2000, which is within |  | ||||||
| the partition protected_part (/dev/mtd0).  There is a slight chance that one or |  | ||||||
| more of the four blocks that we will use for u-boot is listed in the table, so |  | ||||||
| use nanddump to inspect the table to see if this is the case: |  | ||||||
| 
 |  | ||||||
|   $ nanddump -p -l 512 -s 0x2000 -o /dev/mtd0 |  | ||||||
|   ECC failed: 0 |  | ||||||
|   ECC corrected: 0 |  | ||||||
|   Number of bad blocks: 0 |  | ||||||
|   Number of bbt blocks: 0 |  | ||||||
|   Block size 262144, page size 512, OOB size 16 |  | ||||||
|   Dumping data starting at 0x00002000 and ending at 0x00002200... |  | ||||||
|   0x00002000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |  | ||||||
|    	      <... snip ...> |  | ||||||
| 
 |  | ||||||
| The format of the table is simple: one bit per block, with block numbers |  | ||||||
| increasing from left to right, starting with block 0 as the most significant bit |  | ||||||
| of the first byte.  A bit will be clear if the corresponding block is bad.  We |  | ||||||
| want to use blocks 6 throgh 9, so both of the two least significant bits of the |  | ||||||
| first byte must be set, as must the two most significant bits of the second |  | ||||||
| byte.  If this is not true in your case (you are very unlucky), you should use |  | ||||||
| the first contiguous set of four good blocks after block 6, and adjust the |  | ||||||
| partition boundaries accordingly.  You will also have to change the value of |  | ||||||
| CONFIG_SYS_NAND_U_BOOT_OFFS in include/configs/palmtreo680.h and recompile |  | ||||||
| u-boot.  Because the two blocks loaded by the IPL do not have to be contiguous, |  | ||||||
| but our SPL expects them to be, you will need to erase any good blocks that are |  | ||||||
| at an offset prior to CONFIG_SYS_NAND_U_BOOT_OFFS, so that the IPL does not find |  | ||||||
| the magic number in oob and load it.  Once you have done all this, the |  | ||||||
| instructions in this file still apply, except that the instructions below for |  | ||||||
| restoring the original PalmOS block contents may need to be modified. |  | ||||||
| 
 |  | ||||||
| Next, use nanddump to verify that the PalmOS SPL is where we expect it to be. |  | ||||||
| The SPL can be identified by a magic number in the oob bytes of the first page |  | ||||||
| of each of the two blocks containing the SPL image.  Pages are 512 bytes in |  | ||||||
| size, so to dump the first page, plus the oob: |  | ||||||
| 
 |  | ||||||
|   $ nanddump -p -l 512 -s 0 -o /dev/mtd1 |  | ||||||
|   ECC failed: 0 |  | ||||||
|   ECC corrected: 0 |  | ||||||
|   Number of bad blocks: 0 |  | ||||||
|   Number of bbt blocks: 0 |  | ||||||
|   Block size 262144, page size 512, OOB size 16 |  | ||||||
|   Dumping data starting at 0x00000000 and ending at 0x00000200... |  | ||||||
|   0x00000000: 0a 00 00 ea 00 00 00 00 00 00 00 00 00 00 00 00 |  | ||||||
|    	      <... snip ...> |  | ||||||
|   0x000001f0: 13 4c 21 60 13 4d 2a 69 13 4b 29 69 89 1a 99 42 |  | ||||||
|     OOB Data: 42 49 50 4f 30 30 30 10 3a e2 00 92 be a0 11 ff |  | ||||||
| 
 |  | ||||||
| Verify that the first seven bytes of oob data match those in the above line. |  | ||||||
| (This is ASCII "BIPO000".) |  | ||||||
| 
 |  | ||||||
| Do the same for the next block: |  | ||||||
|   $ nanddump -p -l 512 -s 0x40000 -o /dev/mtd1 |  | ||||||
| 
 |  | ||||||
| The first seven oob bytes in last line should read: |  | ||||||
| 
 |  | ||||||
|     OOB Data: 42 49 50 4f 30 30 31 81 db 8e 8f 46 07 9b 59 ff |  | ||||||
| 
 |  | ||||||
| (This is ASCII "BIPO001".) |  | ||||||
| 
 |  | ||||||
| For additional assurance, verify that the next block does *not* contain SPL |  | ||||||
| data. |  | ||||||
| 
 |  | ||||||
|   $ nanddump -p -l 512 -s 0x80000 -o /dev/mtd1 |  | ||||||
| 
 |  | ||||||
| It doesn't matter what the oob contains, as long as the first four bytes are |  | ||||||
| *not* ASCII "BIPO".  PalmOS should only be using two blocks for the SPL |  | ||||||
| (although we will need four for u-boot). |  | ||||||
| 
 |  | ||||||
| If you want, you can back up the contents of bootloader_part to a file.  You may |  | ||||||
| be able to restore it later, if desired (see "Restoring PalmOS" below). |  | ||||||
| 
 |  | ||||||
|   $ nanddump -l 0x100000 -s 0 -o -f bootloader_part.orig /dev/mtd1 |  | ||||||
| 
 |  | ||||||
| nanddump will spew voluminous warnings about uncorrectable ecc errors.  This is |  | ||||||
| a consequence of reading pages that were written in reliable mode, and is |  | ||||||
| expected (these should all occur on pages in odd-numbered 2k regions; i.e., |  | ||||||
| 0x800, 0xa00, 0xc00, 0xe00, 0x1800, 0x1a00, ...).  The size of the file |  | ||||||
| bootloader_part.orig should be 1081344, which is 2048 pages, each of size 512 |  | ||||||
| plus 16 oob bytes.  If you are using initramfs for the root filesystem, don't |  | ||||||
| forget to copy the file to permanent storage, such as an mmc card. |  | ||||||
| 
 |  | ||||||
| If all of the above went well, you can now program u-boot. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Programming u-boot |  | ||||||
| ================== |  | ||||||
| 
 |  | ||||||
| Our u-boot includes a small SPL that must be prepended to u-boot proper.  From |  | ||||||
| the base u-boot source directory on your desktop PC: |  | ||||||
| 
 |  | ||||||
|   $ cat spl/u-boot-spl.bin u-boot.bin > u-boot-concat.bin |  | ||||||
| 
 |  | ||||||
| cd to the tools/palmtreo680/ directory, and cross-compile flash_u-boot.c for the |  | ||||||
| Treo: |  | ||||||
| 
 |  | ||||||
|   $(CC) -o flash_u-boot $(CFLAGS) $(INCLUDEPATH) $(LIBPATH) flash_u-boot.c -lmtd |  | ||||||
| 
 |  | ||||||
| Substitute variable values from your cross-compilation environment as |  | ||||||
| appropriate.  Note that it links to libmtd from mtd-utils, and this must be |  | ||||||
| included in $(LIBPATH) and $(INCLUDEPATH). |  | ||||||
| 
 |  | ||||||
| Transfer u-boot-concat.bin and the compiled flash_u-boot utility to the Treo's |  | ||||||
| root filesystem.  On the Treo, cd to the directory where these files were |  | ||||||
| placed. |  | ||||||
| 
 |  | ||||||
| Load the docg4 driver if you have not already done so. |  | ||||||
| 
 |  | ||||||
|   $ modprobe docg4 ignore_badblocks=1 reliable_mode=1 |  | ||||||
| 
 |  | ||||||
| Erase the blocks to which we will write u-boot: |  | ||||||
| 
 |  | ||||||
|   $ flash_erase /dev/mtd1 0x00 4 |  | ||||||
| 
 |  | ||||||
| If no errors are reported, write u-boot to the flash: |  | ||||||
| 
 |  | ||||||
|   $ ./flash_u-boot u-boot-concat.bin /dev/mtd1 |  | ||||||
| 
 |  | ||||||
| You can use nanddump (see above) to verify that the data was written.  This |  | ||||||
| time, "BIPO" should be seen in the first four oob bytes of the first page of all |  | ||||||
| four blocks in /dev/mtd1; i.e., at offsets 0x00000, 0x40000, 0x80000, 0xc0000. |  | ||||||
| 
 |  | ||||||
| Shutdown linux, remove and re-insert the battery, hold your breath... |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Enjoying u-boot |  | ||||||
| =============== |  | ||||||
| 
 |  | ||||||
| After you insert the battery, the u-boot splash screen should appear on the lcd |  | ||||||
| after a few seconds.  With the usb cable connecting the Treo to your PC, in the |  | ||||||
| kernel log of your PC you should see |  | ||||||
| 
 |  | ||||||
|   <6>usb 3-1: New USB device found, idVendor=0525, idProduct=a4a6 |  | ||||||
|   <6>usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 |  | ||||||
|   <6>usb 3-1: Product: U-Boot 2013.01-00167-gd62ef56-dirty |  | ||||||
|   <6>usb 3-1: Manufacturer: Das U-Boot |  | ||||||
| 
 |  | ||||||
| Load the usbserial module on your desktop PC: |  | ||||||
| 
 |  | ||||||
|   $ modprobe usbserial vendor=0x0525 product=0xa4a6 |  | ||||||
| 
 |  | ||||||
| and run your favorite terminal emulation utility (minicom, kermit, etc) with the |  | ||||||
| serial device set to /dev/ttyUSB0 (assuming this is your only usb serial |  | ||||||
| device).  You should be at the u-boot console (type 'help'). |  | ||||||
| 
 |  | ||||||
| There is not much that is unique about using u-boot on the palm treo 680. |  | ||||||
| Kernels can be loaded from mmc, flash, and from the desktop PC via kermit.  You |  | ||||||
| can expand the size of the second partition on the flash to contain a kernel, or |  | ||||||
| else put the kernel(s) in their own partition. |  | ||||||
| 
 |  | ||||||
| Nand commands work as expected, with the excepton that blocks not written by the |  | ||||||
| linux mtd subsystem may be misidentified by the u-boot docg4 driver as "bad" if |  | ||||||
| they contain data in the oob bytes.  This will be the case for the blocks |  | ||||||
| containing the u-boot image, for example.  To work around this, use 'nand scrub' |  | ||||||
| instead of 'nand erase' to erase these blocks, and 'nand read.raw' to read them |  | ||||||
| to memory.  (It would be useful if u-boot's nand commands provided a way to |  | ||||||
| explicitly ignore "bad" blocks, because read.raw does not perform ecc.)  The |  | ||||||
| 'nand dump' command will read these "bad" blocks, however. |  | ||||||
| 
 |  | ||||||
| Currently u-boot itself can only be programmed to flash from Linux; there is no |  | ||||||
| support for reliable mode in u-boot's docg4 flash driver.  This should be |  | ||||||
| corrected soon. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Customizing |  | ||||||
| =========== |  | ||||||
| 
 |  | ||||||
| If you change u-boot's configuration significantly (adding or removing |  | ||||||
| features), you may have to adjust the value of CONFIG_SYS_NAND_U_BOOT_SIZE. |  | ||||||
| This is the size of the concatenated spl + u-boot image, and tells the SPL how |  | ||||||
| many flash blocks it needs to load.  It will be rounded up to the next 64k |  | ||||||
| boundary (the spl flash block capacity), so it does not have to be exact, but |  | ||||||
| you must ensure that it is not less than the actual image size.  If it is larger |  | ||||||
| than the image, blocks may be needlessly loaded, but if too small, u-boot may |  | ||||||
| only be partially loaded, resulting in a boot failure (bricked phone), so better |  | ||||||
| to be too large.  The flash_u-boot utility will work with any size image and |  | ||||||
| write the required number of blocks, provided that the partition is large |  | ||||||
| enough. |  | ||||||
| 
 |  | ||||||
| As the first writable block on the device, block 6 seems to make the most sense |  | ||||||
| as the flash offset for writing u-boot (and this is where PalmOS places its |  | ||||||
| SPL).  But you can place it elsewhere if you like.  If you do, you need to |  | ||||||
| adjust CONFIG_SYS_NAND_U_BOOT_OFFS accordingly, and you must ensure that blocks |  | ||||||
| preceeding the ones containing u-boot do *not* have the magic number in oob (the |  | ||||||
| IPL looks for this).  In other words, make sure that any blocks that previously |  | ||||||
| contained the u-boot image or PalmOS SPL are erased (and optionally written with |  | ||||||
| something else) so that the IPL does not load it.  Also make sure that the new |  | ||||||
| u-boot starting offset is at the start of a flash partition (check the kernel |  | ||||||
| log after loading the docg4 driver), and pass the corresponding mtd device file |  | ||||||
| to the flash_u-boot utility. |  | ||||||
| 
 |  | ||||||
| The u-boot built-in default environment is used because a writable environment |  | ||||||
| in flash did not seem worth the cost of a 256k flash block.  But adding this |  | ||||||
| should be straightforward. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Restoring PalmOS |  | ||||||
| ================ |  | ||||||
| 
 |  | ||||||
| If you backed up the contents of bootloader_part flash partition earlier, you |  | ||||||
| should be able to restore it with the shell script shown below.  The first two |  | ||||||
| blocks of data contain the PalmOS SPL and were written in reliable mode, whereas |  | ||||||
| the next two blocks were written in normal mode, so the script has to load and |  | ||||||
| unload the docg4 driver.  Make sure that the mtd-utils nandwrite and flash_erase |  | ||||||
| are in your path (and are not those from busybox).  Also double-check that the |  | ||||||
| backup image file bootloader_part.orig is exactly 1081344 bytes in length.  If |  | ||||||
| not, it was not backed up correctly.  Run the script as: |  | ||||||
| 
 |  | ||||||
|   ./restore_bootpart bootloader_part.orig /dev/mtd1 |  | ||||||
| 
 |  | ||||||
| The script will take a minute or so to run.  When it finishes, you may want to |  | ||||||
| verify with nanddump that the data looks correct before you cycle power, because |  | ||||||
| if the backup or restore failed, your phone will be bricked.  Note that as a |  | ||||||
| consequence of reliable mode, the odd-numbered 2k regions in the first two |  | ||||||
| blocks will not exactly match the contents of the backup file, (so unfortunately |  | ||||||
| we can't simply dump the flash contents to a file and do a binary diff with the |  | ||||||
| original back-up image to verify that it was restored correctly).  Also, |  | ||||||
| nanddump will report uncorrectable ecc errors when it reads those regions. |  | ||||||
| 
 |  | ||||||
| #!/bin/sh |  | ||||||
| 
 |  | ||||||
| if [ $# -ne 2 ]; then |  | ||||||
|     echo "usage: $0: <image file> <mtd device node>" |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # reliable mode used for the first two blocks |  | ||||||
| modprobe -r docg4 |  | ||||||
| modprobe docg4 ignore_badblocks=1 reliable_mode=1 || exit 1 |  | ||||||
| 
 |  | ||||||
| # erase all four blocks |  | ||||||
| flash_erase $2 0 4 |  | ||||||
| 
 |  | ||||||
| # Program the first two blocks in reliable mode. |  | ||||||
| # 2k (4 pages) is written at a time, skipping alternate 2k regions |  | ||||||
| # Note that "2k" is 2112 bytes, including 64 oob bytes |  | ||||||
| file_ofs=0 |  | ||||||
| flash_ofs=0 |  | ||||||
| page=0 |  | ||||||
| while [ $page -ne 1024 ]; do |  | ||||||
|     dd if=$1 bs=2112 skip=$file_ofs count=1 | nandwrite -o -n -s $flash_ofs $2 - || exit 1 |  | ||||||
|     file_ofs=$((file_ofs+2)) |  | ||||||
|     flash_ofs=$((flash_ofs+0x1000)) |  | ||||||
|     page=$((page+8)) |  | ||||||
| done; |  | ||||||
| 
 |  | ||||||
| # normal mode used for the next two blocks |  | ||||||
| modprobe -r docg4 |  | ||||||
| modprobe docg4 ignore_badblocks=1 || exit 1 |  | ||||||
| dd if=$1 bs=1 skip=$file_ofs count=540672 | nandwrite -o -n -s 0x80000 $2 - || exit 1 |  | ||||||
| modprobe -r docg4 |  | ||||||
| 
 |  | ||||||
| TODO |  | ||||||
| ==== |  | ||||||
| 
 |  | ||||||
|   - Keypad support. |  | ||||||
|   - Interactive boot menu using keypad and lcd. |  | ||||||
|   - Add reliable mode support to the u-boot docg4 driver. |  | ||||||
|   - U-boot command that will write a new image to the bootloader partition in |  | ||||||
|     flash. |  | ||||||
|   - Linux FTD support. |  | ||||||
|  | @ -1,148 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * Palm Treo 680 Support |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com> |  | ||||||
|  * |  | ||||||
|  * This file is released under the terms of GPL v2 and any later version. |  | ||||||
|  * See the file COPYING in the root directory of the source tree for details. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include <common.h> |  | ||||||
| #include <command.h> |  | ||||||
| #include <serial.h> |  | ||||||
| #include <nand.h> |  | ||||||
| #include <malloc.h> |  | ||||||
| #include <asm/arch/pxa-regs.h> |  | ||||||
| #include <asm/arch-pxa/pxa.h> |  | ||||||
| #include <asm/arch-pxa/regs-mmc.h> |  | ||||||
| #include <asm/io.h> |  | ||||||
| #include <asm/global_data.h> |  | ||||||
| #include <u-boot/crc.h> |  | ||||||
| #include <linux/mtd/docg4.h> |  | ||||||
| 
 |  | ||||||
| DECLARE_GLOBAL_DATA_PTR; |  | ||||||
| 
 |  | ||||||
| static struct nand_chip docg4_nand_chip; |  | ||||||
| 
 |  | ||||||
| int board_init(void) |  | ||||||
| { |  | ||||||
| 	/* We have RAM, disable cache */ |  | ||||||
| 	dcache_disable(); |  | ||||||
| 	icache_disable(); |  | ||||||
| 
 |  | ||||||
| 	gd->bd->bi_arch_number = CONFIG_MACH_TYPE; |  | ||||||
| 	gd->bd->bi_boot_params = CONFIG_SYS_DRAM_BASE + 0x100; |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int dram_init(void) |  | ||||||
| { |  | ||||||
| 	/* IPL initializes SDRAM (we're already running from it) */ |  | ||||||
| 	gd->ram_size = PHYS_SDRAM_1_SIZE; |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_LCD |  | ||||||
| void lcd_enable(void) |  | ||||||
| { |  | ||||||
| 	/*
 |  | ||||||
| 	 * Undo the L_BIAS / gpio77 pin configuration performed by the pxa lcd |  | ||||||
| 	 * driver code.  We need it as an output gpio. |  | ||||||
| 	 */ |  | ||||||
| 	writel((readl(GAFR2_L) & ~(0xc << 24)), GAFR2_L); |  | ||||||
| 
 |  | ||||||
| 	/* power-up and enable the lcd */ |  | ||||||
| 	writel(0x00400000, GPSR(86)); /* enable; drive high */ |  | ||||||
| 	writel(0x00002000, GPSR(77)); /* power; drive high */ |  | ||||||
| 	writel(0x02000000, GPCR(25)); /* enable_n; drive low */ |  | ||||||
| 
 |  | ||||||
| 	/* turn on LCD backlight and configure PWM for reasonable brightness */ |  | ||||||
| 	writel(0x00, PWM_CTRL0); |  | ||||||
| 	writel(0x1b1, PWM_PERVAL0); |  | ||||||
| 	writel(0xfd, PWM_PWDUTY0); |  | ||||||
| 	writel(0x00000040, GPSR(38)); /*  backlight power on */ |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_MMC |  | ||||||
| int board_mmc_init(bd_t *bis) |  | ||||||
| { |  | ||||||
| 	writel(1 << 10, GPSR(42)); /* power on */ |  | ||||||
| 	return pxa_mmc_register(0); |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| void board_nand_init(void) |  | ||||||
| { |  | ||||||
| 	/* we have one 128M diskonchip G4  */ |  | ||||||
| 
 |  | ||||||
| 	struct mtd_info *mtd = &nand_info[0]; |  | ||||||
| 	struct nand_chip *nand = &docg4_nand_chip; |  | ||||||
| 	if (docg4_nand_init(mtd, nand, 0)) |  | ||||||
| 		hang(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_SPL_BUILD |  | ||||||
| void nand_boot(void) |  | ||||||
| { |  | ||||||
| 	__attribute__((noreturn)) void (*uboot)(void); |  | ||||||
| 
 |  | ||||||
| 	extern const void *_start, *_end;   /* boundaries of spl in memory */ |  | ||||||
| 
 |  | ||||||
| 	/* size of spl; ipl loads this, and then a portion of u-boot */ |  | ||||||
| 	const size_t spl_image_size = ((size_t)&_end - (size_t)&_start); |  | ||||||
| 
 |  | ||||||
| 	/* the flash offset of the blocks that are loaded by the spl */ |  | ||||||
| 	const uint32_t spl_load_offset = CONFIG_SYS_NAND_U_BOOT_OFFS + |  | ||||||
| 		DOCG4_IPL_LOAD_BLOCK_COUNT * DOCG4_BLOCK_SIZE; |  | ||||||
| 
 |  | ||||||
| 	/* total number of bytes loaded by IPL */ |  | ||||||
| 	const size_t ipl_load_size = |  | ||||||
| 		DOCG4_IPL_LOAD_BLOCK_COUNT * DOCG4_BLOCK_CAPACITY_SPL; |  | ||||||
| 
 |  | ||||||
| 	/* number of bytes of u-boot proper that was loaded by the IPL */ |  | ||||||
| 	const size_t ipl_uboot_load_size = ipl_load_size - spl_image_size; |  | ||||||
| 
 |  | ||||||
| 	/* number of remaining bytes of u-boot that the SPL must load */ |  | ||||||
| 	const size_t spl_load_size = |  | ||||||
| 		CONFIG_SYS_NAND_U_BOOT_SIZE - ipl_load_size; |  | ||||||
| 
 |  | ||||||
| 	/* memory address where we resume loading u-boot */ |  | ||||||
| 	void *const load_addr = |  | ||||||
| 		(void *)(CONFIG_SYS_NAND_U_BOOT_DST + ipl_uboot_load_size); |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Copy the portion of u-boot already read from flash by the IPL to its |  | ||||||
| 	 * correct load address. |  | ||||||
| 	 */ |  | ||||||
| 	memcpy((void *)CONFIG_SYS_NAND_U_BOOT_DST, &_end, ipl_uboot_load_size); |  | ||||||
| 
 |  | ||||||
| 	/*
 |  | ||||||
| 	 * Resume loading u-boot where the IPL left off. |  | ||||||
| 	 */ |  | ||||||
| 	nand_spl_load_image(spl_load_offset, spl_load_size, load_addr); |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_NAND_ENV_DST |  | ||||||
| 	nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, |  | ||||||
| 			    (void *)CONFIG_NAND_ENV_DST); |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_ENV_OFFSET_REDUND |  | ||||||
| 	nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE, |  | ||||||
| 			    (void *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE); |  | ||||||
| #endif |  | ||||||
| #endif |  | ||||||
| 	/*
 |  | ||||||
| 	 * Jump to U-Boot image |  | ||||||
| 	 */ |  | ||||||
| 	uboot = (void *)CONFIG_SYS_NAND_U_BOOT_START; |  | ||||||
| 	(*uboot)(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void board_init_f(ulong bootflag) |  | ||||||
| { |  | ||||||
| 	nand_boot(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif  /* CONFIG_SPL_BUILD */ |  | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| CONFIG_ARM=y |  | ||||||
| CONFIG_TARGET_PALMTREO680=y |  | ||||||
| CONFIG_SPL=y |  | ||||||
| # CONFIG_CMD_IMLS is not set |  | ||||||
| # CONFIG_CMD_XIMG is not set |  | ||||||
| # CONFIG_CMD_LOADS is not set |  | ||||||
| # CONFIG_CMD_FLASH is not set |  | ||||||
| # CONFIG_CMD_FPGA is not set |  | ||||||
| # CONFIG_CMD_SOURCE is not set |  | ||||||
| # CONFIG_CMD_SETEXPR is not set |  | ||||||
| # CONFIG_CMD_NET is not set |  | ||||||
| # CONFIG_CMD_NFS is not set |  | ||||||
|  | @ -1,270 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * Palm Treo 680 configuration file |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2013 Mike Dunn <mikedunn@newsguy.com> |  | ||||||
|  * |  | ||||||
|  * This file is released under the terms of GPL v2 and any later version. |  | ||||||
|  * See the file COPYING in the root directory of the source tree for details. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #ifndef	__CONFIG_H |  | ||||||
| #define	__CONFIG_H |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * High Level Board Configuration Options |  | ||||||
|  */ |  | ||||||
| #define CONFIG_CPU_PXA27X |  | ||||||
| #define CONFIG_PALMTREO680 |  | ||||||
| #define CONFIG_MACH_TYPE                MACH_TYPE_TREO680 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_MALLOC_LEN           (4096*1024) |  | ||||||
| 
 |  | ||||||
| #define CONFIG_LZMA |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Serial Console Configuration |  | ||||||
|  */ |  | ||||||
| #define CONFIG_PXA_SERIAL |  | ||||||
| #define CONFIG_FFUART                   1 |  | ||||||
| #define CONFIG_BAUDRATE                 9600 |  | ||||||
| #define CONFIG_SYS_BAUDRATE_TABLE       { 9600, 19200, 38400, 57600, 115200 } |  | ||||||
| #define CONFIG_CONS_INDEX               3 |  | ||||||
| 
 |  | ||||||
| /* we have nand (although technically nand *is* flash...) */ |  | ||||||
| #define CONFIG_SYS_NO_FLASH |  | ||||||
| 
 |  | ||||||
| #define CONFIG_LCD |  | ||||||
| /* #define CONFIG_KEYBOARD */  /* TODO */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Bootloader Components Configuration |  | ||||||
|  */ |  | ||||||
| #define CONFIG_CMD_ENV |  | ||||||
| #define CONFIG_CMD_MMC |  | ||||||
| #define CONFIG_CMD_NAND |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMDLINE_TAG |  | ||||||
| #define CONFIG_SETUP_MEMORY_TAGS |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * MMC Card Configuration |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_CMD_MMC |  | ||||||
| #define CONFIG_MMC |  | ||||||
| #define CONFIG_GENERIC_MMC |  | ||||||
| #define CONFIG_PXA_MMC_GENERIC |  | ||||||
| 
 |  | ||||||
| #define CONFIG_CMD_FAT |  | ||||||
| #define CONFIG_CMD_EXT2 |  | ||||||
| #define CONFIG_DOS_PARTITION |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * LCD |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_LCD |  | ||||||
| #define CONFIG_PXA_LCD |  | ||||||
| #define CONFIG_ACX544AKN |  | ||||||
| #define CONFIG_LCD_LOGO |  | ||||||
| #define LCD_BPP LCD_COLOR16 |  | ||||||
| #define CONFIG_FB_ADDR 0x5c000000    /* internal SRAM */ |  | ||||||
| #define CONFIG_CMD_BMP |  | ||||||
| #define CONFIG_SPLASH_SCREEN         /* requires "splashimage" env var */ |  | ||||||
| #define CONFIG_SPLASH_SCREEN_ALIGN   /* requires "splashpos" env var */ |  | ||||||
| #define CONFIG_VIDEO_BMP_GZIP |  | ||||||
| #define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE  (2 << 20) |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * KGDB |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_CMD_KGDB |  | ||||||
| #define CONFIG_KGDB_BAUDRATE            230400  /* kgdb serial port speed */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * HUSH Shell Configuration |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SYS_HUSH_PARSER          1 |  | ||||||
| #define CONFIG_SYS_PROMPT_HUSH_PS2      "> " |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_LONGHELP |  | ||||||
| #undef CONFIG_SYS_PROMPT |  | ||||||
| #ifdef CONFIG_SYS_HUSH_PARSER |  | ||||||
| #define CONFIG_SYS_PROMPT               "$ " |  | ||||||
| #else |  | ||||||
| #endif |  | ||||||
| #define CONFIG_SYS_CBSIZE               256 |  | ||||||
| #define CONFIG_SYS_PBSIZE               \ |  | ||||||
| 	(CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) |  | ||||||
| #define CONFIG_SYS_MAXARGS              16 |  | ||||||
| #define CONFIG_SYS_BARGSIZE             CONFIG_SYS_CBSIZE |  | ||||||
| #define CONFIG_SYS_DEVICE_NULLDEV       1 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Clock Configuration |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SYS_CPUSPEED             0x210           /* 416MHz ; N=2,L=16 */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Stack sizes |  | ||||||
|  */ |  | ||||||
| #define CONFIG_STACKSIZE                (128*1024)      /* regular stack */ |  | ||||||
| #ifdef CONFIG_USE_IRQ |  | ||||||
| #define CONFIG_STACKSIZE_IRQ            (4*1024)        /* IRQ stack */ |  | ||||||
| #define CONFIG_STACKSIZE_FIQ            (4*1024)        /* FIQ stack */ |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * DRAM Map |  | ||||||
|  */ |  | ||||||
| #define CONFIG_NR_DRAM_BANKS            1               /* 1 bank of DRAM */ |  | ||||||
| #define PHYS_SDRAM_1                    0xa0000000      /* SDRAM Bank #1 */ |  | ||||||
| #define PHYS_SDRAM_1_SIZE               0x04000000      /* 64 MB */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_DRAM_BASE            0xa0000000 |  | ||||||
| #define CONFIG_SYS_DRAM_SIZE            0x04000000      /* 64 MB DRAM */ |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_MEMTEST_START        0xa0400000      /* memtest works on */ |  | ||||||
| #define CONFIG_SYS_MEMTEST_END          0xa0800000      /* 4 ... 8 MB in DRAM */ |  | ||||||
| #define CONFIG_SYS_LOAD_ADDR            CONFIG_SYS_DRAM_BASE |  | ||||||
| #define CONFIG_SYS_SDRAM_BASE           PHYS_SDRAM_1 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * GPIO settings |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SYS_GAFR0_L_VAL  0x0E000000 |  | ||||||
| #define CONFIG_SYS_GAFR0_U_VAL  0xA500001A |  | ||||||
| #define CONFIG_SYS_GAFR1_L_VAL  0x60000002 |  | ||||||
| #define CONFIG_SYS_GAFR1_U_VAL  0xAAA07959 |  | ||||||
| #define CONFIG_SYS_GAFR2_L_VAL  0x02AAAAAA |  | ||||||
| #define CONFIG_SYS_GAFR2_U_VAL  0x41440F08 |  | ||||||
| #define CONFIG_SYS_GAFR3_L_VAL  0x56AA95FF |  | ||||||
| #define CONFIG_SYS_GAFR3_U_VAL  0x00001401 |  | ||||||
| #define CONFIG_SYS_GPCR0_VAL    0x1FF80400 |  | ||||||
| #define CONFIG_SYS_GPCR1_VAL    0x03003FC1 |  | ||||||
| #define CONFIG_SYS_GPCR2_VAL    0x01C1E000 |  | ||||||
| #define CONFIG_SYS_GPCR3_VAL    0x01C1E000 |  | ||||||
| #define CONFIG_SYS_GPDR0_VAL    0xCFF90400 |  | ||||||
| #define CONFIG_SYS_GPDR1_VAL    0xFB22BFC1 |  | ||||||
| #define CONFIG_SYS_GPDR2_VAL    0x93CDFFDF |  | ||||||
| #define CONFIG_SYS_GPDR3_VAL    0x0069FF81 |  | ||||||
| #define CONFIG_SYS_GPSR0_VAL    0x02000018 |  | ||||||
| #define CONFIG_SYS_GPSR1_VAL    0x00000000 |  | ||||||
| #define CONFIG_SYS_GPSR2_VAL    0x000C0000 |  | ||||||
| #define CONFIG_SYS_GPSR3_VAL    0x00080000 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_PSSR_VAL     0x30 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Clock settings |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SYS_CKEN         0x01ffffff |  | ||||||
| #define CONFIG_SYS_CCCR         0x02000210 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Memory settings |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SYS_MSC0_VAL     0x7ff844c8 |  | ||||||
| #define CONFIG_SYS_MSC1_VAL     0x7ff86ab4 |  | ||||||
| #define CONFIG_SYS_MSC2_VAL     0x7ff87ff8 |  | ||||||
| #define CONFIG_SYS_MDCNFG_VAL   0x0B880acd |  | ||||||
| #define CONFIG_SYS_MDREFR_VAL   0x201fa031 |  | ||||||
| #define CONFIG_SYS_MDMRS_VAL    0x00320032 |  | ||||||
| #define CONFIG_SYS_FLYCNFG_VAL  0x00000000 |  | ||||||
| #define CONFIG_SYS_SXCNFG_VAL   0x40044004 |  | ||||||
| #define CONFIG_SYS_MECR_VAL     0x00000003 |  | ||||||
| #define CONFIG_SYS_MCMEM0_VAL   0x0001c391 |  | ||||||
| #define CONFIG_SYS_MCMEM1_VAL   0x0001c391 |  | ||||||
| #define CONFIG_SYS_MCATT0_VAL   0x0001c391 |  | ||||||
| #define CONFIG_SYS_MCATT1_VAL   0x0001c391 |  | ||||||
| #define CONFIG_SYS_MCIO0_VAL    0x00014611 |  | ||||||
| #define CONFIG_SYS_MCIO1_VAL    0x0001c391 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * USB |  | ||||||
|  */ |  | ||||||
| #define CONFIG_USB_DEVICE |  | ||||||
| #define CONFIG_USB_TTY |  | ||||||
| #define CONFIG_USB_DEV_PULLUP_GPIO 114 |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * SPL |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SPL_TEXT_BASE    0xa1700000 /* IPL loads SPL here */ |  | ||||||
| #define CONFIG_SPL_STACK        0x5c040000 /* end of internal SRAM */ |  | ||||||
| #define CONFIG_SPL_NAND_SUPPORT /* build libnand for spl */ |  | ||||||
| #define CONFIG_SPL_NAND_DOCG4   /* use lean docg4 nand spl driver */ |  | ||||||
| #define CONFIG_SPL_LIBGENERIC_SUPPORT  /* spl uses memcpy */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * NAND |  | ||||||
|  */ |  | ||||||
| #define CONFIG_NAND_DOCG4 |  | ||||||
| #define CONFIG_SYS_NAND_SELF_INIT |  | ||||||
| #define CONFIG_SYS_MAX_NAND_DEVICE 1 /* only one device */ |  | ||||||
| #define CONFIG_SYS_NAND_BASE 0x00000000 /* mapped to reset vector */ |  | ||||||
| #define CONFIG_SYS_NAND_PAGE_SIZE 0x200 |  | ||||||
| #define CONFIG_SYS_NAND_BLOCK_SIZE 0x40000 |  | ||||||
| #define CONFIG_BITREVERSE       /* needed by docg4 driver */ |  | ||||||
| #define CONFIG_BCH              /* needed by docg4 driver */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * IMPORTANT NOTE: this is the size of the concatenated spl + u-boot image.  It |  | ||||||
|  * will be rounded up to the next 64k boundary (the spl flash block size), so it |  | ||||||
|  * does not have to be exact, but you must ensure that it is not less than the |  | ||||||
|  * actual image size, or it may fail to boot (bricked phone)! |  | ||||||
|  * (Tip: reduces to three blocks with lcd and mmc support removed from u-boot.) |  | ||||||
| */ |  | ||||||
| #define CONFIG_SYS_NAND_U_BOOT_SIZE 0x40000 /* four 64k flash blocks */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * This is the byte offset into the flash at which the concatenated spl + u-boot |  | ||||||
|  * image is placed.  It must be at the start of a block (256k boundary).  Blocks |  | ||||||
|  * 0 - 5 are write-protected, so we start at block 6. |  | ||||||
|  */ |  | ||||||
| #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x180000  /* block 6 */ |  | ||||||
| 
 |  | ||||||
| /* DRAM address to which u-boot proper is loaded (before it relocates itself) */ |  | ||||||
| #define CONFIG_SYS_NAND_U_BOOT_DST  0xa0000000 |  | ||||||
| #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_NAND_U_BOOT_DST |  | ||||||
| 
 |  | ||||||
| /* passed to linker by Makefile as arg to -Ttext option */ |  | ||||||
| #define CONFIG_SYS_TEXT_BASE 0xa0000000 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_INIT_SP_ADDR         0x5c040000 /* end of internal SRAM */ |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * environment |  | ||||||
|  */ |  | ||||||
| #define CONFIG_ENV_IS_NOWHERE |  | ||||||
| #define CONFIG_BUILD_ENVCRC |  | ||||||
| #define CONFIG_ENV_SIZE 0x200 |  | ||||||
| #define CONFIG_SYS_CONSOLE_IS_IN_ENV |  | ||||||
| #define CONFIG_EXTRA_ENV_SETTINGS  \ |  | ||||||
| 	"stdin=usbtty\0"           \ |  | ||||||
| 	"stdout=usbtty\0"          \ |  | ||||||
| 	"stderr=usbtty" |  | ||||||
| #define CONFIG_BOOTARGS "mtdparts=Msys_Diskonchip_G4:1536k(protected_part)ro,1024k(bootloader_part),-(filesys_part) \ |  | ||||||
| ip=192.168.11.102:::255.255.255.0:treo:usb0" |  | ||||||
| #define CONFIG_BOOTDELAY   3 |  | ||||||
| 
 |  | ||||||
| #if 0 /* example: try 2nd mmc partition, then nand */
 |  | ||||||
| #define CONFIG_BOOTCOMMAND                                              \ |  | ||||||
| 	"mmc rescan; "                                                  \ |  | ||||||
| 	"if mmcinfo && ext2load mmc 0:2 0xa1000000 uImage; then "       \ |  | ||||||
| 	    "bootm 0xa1000000; "					\ |  | ||||||
| 	"elif nand read 0xa1000000 0x280000 0x240000; then "            \ |  | ||||||
| 	    "bootm 0xa1000000; "					\ |  | ||||||
| 	"fi; " |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* u-boot lives at end of SDRAM, so use start of SDRAM for stand alone apps */ |  | ||||||
| #define CONFIG_STANDALONE_LOAD_ADDR 0xa0000000 |  | ||||||
| 
 |  | ||||||
| #define CONFIG_SYS_DCACHE_OFF |  | ||||||
| #define CONFIG_SYS_ICACHE_OFF |  | ||||||
| 
 |  | ||||||
| #endif  /* __CONFIG_H */ |  | ||||||
		Loading…
	
		Reference in New Issue