Anton Vorontsov wrote:
> On Wed, May 28, 2008 at 08:38:37PM +0200, Wolfgang Grandegger wrote:
>> Scott Wood wrote:
>>> On Wed, May 28, 2008 at 08:12:28PM +0200, Wolfgang Grandegger wrote:
>>>> This patch adds support for NAND FLASH on the TQM8548. It is disabled by
>>>> default and can be enabled for the TQM8548 modules. Note that the R/B pin
>>>> is not supported by that module requiring to use the specified maximum
>>>> delay time.
>>>>
>>>> Note: With NAND support enabled the size of the U-Boot image exceeds
>>>> 256 KB and TEXT_BASE must therefore be set to 0xfff80000 in config.mk,
>>>> doubling the image size :-(.
>>> What does this do differently from the code in drivers/mtd/nand/fsl_upm.c?
>> Maybe it does not support multi banks on a NAND chip. I have to check.
> 
> Me thinks that you'll have to call fsl_upm_nand_init() for each
> chip, and that's all. If not, feel free to patch it as you feel appropriate,
> I'll able to regress-test this driver on MPC8360E-RDK.

That seems not to be a minor problem. If CFG_MAX_NAND_DEVICE > 1,
board_nand_init() will be called twice with the base address from
CFG_NAND_BASE_LIST. The only problem I see is that the UPM interface is
setup twice.

>>> How much of this is board-specific?
>> Well, I already gave drivers/mtd/nand/fsl_upm.c a try but was unable to
>> get it working on this board. Therefore I decided to keep this known to
>> work driver which we have already for a while.
> 
> This isn't really an excuse to duplicate drivers. :-) This driver was
> tested on MPC8555 and MPC8360 CPUs, so it should work with no drastic
> changes. Some issues might still be there, and if so, fixes are highly
> appreciated.

I know, sniff.

>> With Linux, I had more success.
> 
> ..especially if general idea works well, we should use single driver.

I already had a closer look and realized a difference in writing the UPM
array. In fsl_upm.c there is:

  static void fsl_upm_setup(struct fsl_upm *upm)
  {
        int i;

        /* write upm array */
        out_be32(upm->mxmr, FSL_UPM_MxMR_OP_WA);

        for (i = 0; i < 64; i++) {
                out_be32(upm->mdr, upm->array[i]);
                out_8(upm->io_addr, 0x0);
        }

        /* normal operation */
        out_be32(upm->mxmr, FSL_UPM_MxMR_OP_NO);
        while (in_be32(upm->mxmr) != FSL_UPM_MxMR_OP_NO)
                eieio();
  }

But in my driver I fold the machine address into mbmr for each value:

        out_be32 (&lbc->mbmr,
                 (in_be32 (&lbc->mbmr) & ~(MxMR_OP_NORM | MxMR_MAD)) |
                  MxMR_OP_WARR | (i & MxMR_MAD));
                                  ^

Seem also that defines a duplicated :-(.

Has it been tested with an MPC85xx? I will do some more test now.

Wolfgang.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users

Reply via email to