From: Ccool <ccool@ninjatech.biz>
To: linux-mtd@lists.infradead.org
Subject: Trouble with mtd partition
Date: Fri, 27 Aug 2004 02:10:53 -0400 [thread overview]
Message-ID: <200408270210.53632.ccool@ninjatech.biz> (raw)
[-- 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");
next reply other threads:[~2004-08-27 6:17 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-27 6:10 Ccool [this message]
2004-08-27 8:28 ` Trouble with mtd partition Ian Campbell
2004-08-28 20:00 ` Ccool
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200408270210.53632.ccool@ninjatech.biz \
--to=ccool@ninjatech.biz \
--cc=linux-mtd@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox