public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* Trouble with mtd partition
@ 2004-08-27  6:10 Ccool
  2004-08-27  8:28 ` Ian Campbell
  0 siblings, 1 reply; 3+ messages in thread
From: Ccool @ 2004-08-27  6:10 UTC (permalink / raw)
  To: linux-mtd

[-- Attachment #1: Type: text/plain, Size: 1600 bytes --]

Hello,

This trouble might look like a neebies, but I'm really having a hard time with 
this.  I installed a few options in my kernel so I could have an mtd 
character device.  I tried edit physmap.c and whenever I was never abler to 
get anything more than one big partition of my flash disk.

something like:
mtd0	01000000	00040000	"Physical map something"



I would really like it if I could have an mtd0, and also mtd1, mtd2, etc.  
like in my configuration file.  If anyone knows "a magic trick" or anything 
that could help me with that.  I cannot really work with only one big 
partition, because there is some data that I don't want to erase (bootloader) 
on the flash disk.  So if you could help me, I would appreciate it very much.

If it helps (because I surely don't understand what's happenning), it is like 
if the partition structure in the physmap.c was not taken count off.  I tried 
also to put some information into the init string, mtdparts=...  but even 
with all the examples that I found via google, I never had anything up and 
working.  If I could only have this structure working.  In attachement, there 
is my physmap.c (pretty much basic).  I've also tried with the rpxlite.c, 
because it is my board, and it did'nt work.  Actually, in rpxlite.c, I did'nt 
find any place to put my partitions structure.  My board is an RPXlite with 
16 meg of ram and 16 meg of Flash, they have mpc823e processor.  I have CW 
and DW version of this board.  As the memory map is a little different, I've 
only pu some example for the DW.

Thanks
Raphaël


[-- Attachment #2: physmap.c --]
[-- Type: text/x-csrc, Size: 4244 bytes --]

/*
 * $Id: physmap.c,v 1.21 2002/09/05 05:12:54 acurtis Exp $
 *
 * Normal mappings of chips in physical memory
 */

#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <asm/io.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/config.h>

#ifdef CONFIG_MTD_PARTITIONS
#include <linux/mtd/partitions.h>
#endif

#define WINDOW_ADDR CONFIG_MTD_PHYSMAP_START
#define WINDOW_SIZE CONFIG_MTD_PHYSMAP_LEN
#define BUSWIDTH CONFIG_MTD_PHYSMAP_BUSWIDTH

static struct mtd_info *mymtd;

__u8 physmap_read8(struct map_info *map, unsigned long ofs)
{
	return __raw_readb(map->map_priv_1 + ofs);
}

__u16 physmap_read16(struct map_info *map, unsigned long ofs)
{
	return __raw_readw(map->map_priv_1 + ofs);
}

__u32 physmap_read32(struct map_info *map, unsigned long ofs)
{
	return __raw_readl(map->map_priv_1 + ofs);
}

void physmap_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
{
	memcpy_fromio(to, map->map_priv_1 + from, len);
}

void physmap_write8(struct map_info *map, __u8 d, unsigned long adr)
{
	__raw_writeb(d, map->map_priv_1 + adr);
	mb();
}

void physmap_write16(struct map_info *map, __u16 d, unsigned long adr)
{
	__raw_writew(d, map->map_priv_1 + adr);
	mb();
}

void physmap_write32(struct map_info *map, __u32 d, unsigned long adr)
{
	__raw_writel(d, map->map_priv_1 + adr);
	mb();
}

void physmap_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len)
{
	memcpy_toio(map->map_priv_1 + to, from, len);
}

struct map_info physmap_map = {
	name: "Physically mapped flash",
	size: WINDOW_SIZE,
	buswidth: BUSWIDTH,
	read8: physmap_read8,
	read16: physmap_read16,
	read32: physmap_read32,
	copy_from: physmap_copy_from,
	write8: physmap_write8,
	write16: physmap_write16,
	write32: physmap_write32,
	copy_to: physmap_copy_to
};

#ifdef CONFIG_MTD_PARTITIONS
#ifdef CONFIG_MTD_CMDLINE_PARTS
static struct mtd_partition *mtd_parts = 0;
static int                   mtd_parts_nb = 0;
#else
static struct mtd_partition physmap_partitions[] = {
/* Put your own partition definitions here */
#if 0
	{
		name:		"boot",
		size:		0x80000,
		offset:		0,
		mask_flags:	MTD_WRITEABLE,  /* force read-only */
	}, {
		name:		"zImage",
		size:		0x100000,
		offset:		MTDPART_OFS_APPEND,
		mask_flags:	MTD_WRITEABLE,  /* force read-only */
	}, {
		name:		"ramdisk.gz",
		size:		0x300000,
		offset:		MTDPART_OFS_APPEND,
		mask_flags:	MTD_WRITEABLE,  /* force read-only */
//	}, {
//		name:		"User FS",
//		size:		MTDPART_SIZ_FULL,
//		offset:		MTDPART_OFS_APPEND,
	}
#endif
};


#define NUM_PARTITIONS	(sizeof(physmap_partitions)/sizeof(struct mtd_partition))

#endif
#endif

int __init init_physmap(void)
{
	static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", "map_rom", 0 };
	const char **type;

       	printk(KERN_NOTICE "physmap flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR);
	physmap_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);

	if (!physmap_map.map_priv_1) {
		printk("Failed to ioremap\n");
		return -EIO;
	}
	
	mymtd = 0;
	type = rom_probe_types;
	for(; !mymtd && *type; type++) {
		mymtd = do_map_probe(*type, &physmap_map);
	}
	if (mymtd) {
		mymtd->module = THIS_MODULE;

		add_mtd_device(mymtd);
#ifdef CONFIG_MTD_PARTITIONS
#ifdef CONFIG_MTD_CMDLINE_PARTS
		mtd_parts_nb = parse_cmdline_partitions(mymtd, &mtd_parts, 
							"phys");
		if (mtd_parts_nb > 0)
		{
			printk(KERN_NOTICE 
			       "Using command line partition definition\n");
			add_mtd_partitions (mymtd, mtd_parts, mtd_parts_nb);
		}
#else
		if (NUM_PARTITIONS != 0) 
		{
			printk(KERN_NOTICE 
			       "Using physmap partition definition\n");
			add_mtd_partitions (mymtd, physmap_partitions, NUM_PARTITIONS);
		}

#endif
#endif
		return 0;
	}

	iounmap((void *)physmap_map.map_priv_1);
	return -ENXIO;
}

static void __exit cleanup_physmap(void)
{
	if (mymtd) {
		del_mtd_device(mymtd);
		map_destroy(mymtd);
	}
	if (physmap_map.map_priv_1) {
		iounmap((void *)physmap_map.map_priv_1);
		physmap_map.map_priv_1 = 0;
	}
}

module_init(init_physmap);
module_exit(cleanup_physmap);


MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
MODULE_DESCRIPTION("Generic configurable MTD map driver");

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Trouble with mtd partition
  2004-08-27  6:10 Trouble with mtd partition Ccool
@ 2004-08-27  8:28 ` Ian Campbell
  2004-08-28 20:00   ` Ccool
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Campbell @ 2004-08-27  8:28 UTC (permalink / raw)
  To: Linux MTD Mailing List

> If it helps (because I surely don't understand what's happenning), it is like 
> if the partition structure in the physmap.c was not taken count off.  

The example you said had the contents of the partition structure
definition surrounded with "#if 0" / "#endif". Perhaps you should change
that to a 1.

Also make sure you have the CONFIG_MTD_PARTITIONS turned on in your
config (and CONFIG_MTD_CMDLINE_PARTS for mtdparts= if that's your
thing).

Ian.
-- 
Ian Campbell, Senior Design Engineer
                                        Web: http://www.arcom.com
Arcom, Clifton Road, 			Direct: +44 (0)1223 403 465
Cambridge CB1 7EA, United Kingdom	Phone:  +44 (0)1223 411 200

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Trouble with mtd partition
  2004-08-27  8:28 ` Ian Campbell
@ 2004-08-28 20:00   ` Ccool
  0 siblings, 0 replies; 3+ messages in thread
From: Ccool @ 2004-08-28 20:00 UTC (permalink / raw)
  To: Linux MTD Mailing List

Le 27 Août 2004 04:28, Ian Campbell a écrit :
> > If it helps (because I surely don't understand what's happenning), it is
> > like if the partition structure in the physmap.c was not taken count off.
>
> The example you said had the contents of the partition structure
> definition surrounded with "#if 0" / "#endif". Perhaps you should change
> that to a 1.
I just tried that, and it did'nt work, I still have:

/ # cat /proc/mtd                                                                                                                                       
dev:    size   erasesize  name                                                                                                                          
mtd0: 01000000 00040000 "Physically mapped flash" 

I would really like it if my mtd1,mtd2, etc partitions were working...

> Also make sure you have the CONFIG_MTD_PARTITIONS turned on in your
> config (and CONFIG_MTD_CMDLINE_PARTS for mtdparts= if that's your
> thing).

Yeah, I did that, but I think CONFIG_MTD_CMDLINE_PARTS is giving me some kind 
of error.  When I do a "dmesg" I get this message

physmap flash device: 1000000 at ff000000                                                                                                               
 Amd/Fujitsu Extended Query Table v1.2 at 0x0040                                                                                                        
number of CFI chips: 1                                                                                                                                  
cfi_cmdset_0002: Disabling fast programming due to code brokenness.                                                                                     
mtd: Giving out device 0 to Physically mapped flash                                                                                                     
$Id: ftl.c,v 1.45 2003/01/24 23:31:27 dwmw2 Exp $                                                                                                       
ftl_cs: FTL header not found.                          

As you can see, cfi_cmdset_0002 gets itself disable.  I don't know if this is 
the cause of the problem ?!?

My init string is:
Linux/PPC load: console=ttyS0,9600 nfsroot=10.0.0.2:/exports/823_new 
ip=10.0.0.10 root=/dev/nfs 
mtdparts=physmap:512k(boot)ro,1M(zImage)ro,3M(ramdisk.gz)ro 

I've read many "how to" to get this right, but this is my "best" result.  I 
really don't know what to do next.  This problem is my main reason for 
getting on this mailing-list.  If you have an idea, I'm all ears :-)

Thanks
Raphael

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-08-28 20:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-27  6:10 Trouble with mtd partition Ccool
2004-08-27  8:28 ` Ian Campbell
2004-08-28 20:00   ` Ccool

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox