📄 sa1100-flash.c
字号:
/* * Flash memory access on SA11x0 based devices * * (C) 2000 Nicolas Pitre <nico@cam.org> * * $Id: sa1100-flash.c,v 1.22 2001/10/02 10:04:52 rmk Exp $ */#include <linux/config.h>#include <linux/module.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/mtd/mtd.h>#include <linux/mtd/map.h>#include <linux/mtd/partitions.h>#include <asm/hardware.h>#include <asm/io.h>#ifndef CONFIG_ARCH_SA1100#error This is for SA1100 architecture only#endif#define WINDOW_ADDR 0xe8000000static __u8 sa1100_read8(struct map_info *map, unsigned long ofs){ return readb(map->map_priv_1 + ofs);}static __u16 sa1100_read16(struct map_info *map, unsigned long ofs){ return readw(map->map_priv_1 + ofs);}static __u32 sa1100_read32(struct map_info *map, unsigned long ofs){ return readl(map->map_priv_1 + ofs);}static void sa1100_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len){ memcpy(to, (void *)(map->map_priv_1 + from), len);}static void sa1100_write8(struct map_info *map, __u8 d, unsigned long adr){ writeb(d, map->map_priv_1 + adr);}static void sa1100_write16(struct map_info *map, __u16 d, unsigned long adr){ writew(d, map->map_priv_1 + adr);}static void sa1100_write32(struct map_info *map, __u32 d, unsigned long adr){ writel(d, map->map_priv_1 + adr);}static void sa1100_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len){ memcpy((void *)(map->map_priv_1 + to), from, len);}#ifdef CONFIG_SA1100_H3600static void h3600_set_vpp(struct map_info *map, int vpp){ if (vpp) set_h3600_egpio(EGPIO_H3600_VPP_ON); else clr_h3600_egpio(EGPIO_H3600_VPP_ON);}#endif#ifdef CONFIG_SA1100_JORNADA720static void jornada720_set_vpp(int vpp){ if (vpp) PPSR |= 0x80; else PPSR &= ~0x80; PPDR |= 0x80;}#endifstatic struct map_info sa1100_map = { name: "SA1100 flash", read8: sa1100_read8, read16: sa1100_read16, read32: sa1100_read32, copy_from: sa1100_copy_from, write8: sa1100_write8, write16: sa1100_write16, write32: sa1100_write32, copy_to: sa1100_copy_to, map_priv_1: WINDOW_ADDR,};/* * Here are partition information for all known SA1100-based devices. * See include/linux/mtd/partitions.h for definition of the mtd_partition * structure. * * The *_max_flash_size is the maximum possible mapped flash size which * is not necessarily the actual flash size. It must correspond to the * value specified in the mapping definition defined by the * "struct map_desc *_io_desc" for the corresponding machine. */#ifdef CONFIG_SA1100_ASSABET/* Phase 4 Assabet has two 28F160B3 flash parts in bank 0: */static unsigned long assabet4_max_flash_size = 0x00400000;static struct mtd_partition assabet4_partitions[] = { { name: "bootloader", size: 0x00020000, offset: 0, mask_flags: MTD_WRITEABLE },{ name: "bootloader params", size: 0x00020000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "jffs", size: MTDPART_SIZ_FULL, offset: MTDPART_OFS_APPEND }};/* Phase 5 Assabet has two 28F128J3A flash parts in bank 0: */static unsigned long assabet5_max_flash_size = 0x02000000;static struct mtd_partition assabet5_partitions[] = { { name: "bootloader", size: 0x00040000, offset: 0, mask_flags: MTD_WRITEABLE },{ name: "bootloader params", size: 0x00040000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "jffs", size: MTDPART_SIZ_FULL, offset: MTDPART_OFS_APPEND }};#define assabet_max_flash_size assabet5_max_flash_size#define assabet_partitions assabet5_partitions#endif#ifdef CONFIG_SA1100_FLEXANET/* Flexanet has two 28F128J3A flash parts in bank 0: */static unsigned long flexanet_max_flash_size = 0x02000000;static struct mtd_partition flexanet_partitions[] = { { name: "bootloader", size: 0x00040000, offset: 0, mask_flags: MTD_WRITEABLE },{ name: "bootloader params", size: 0x00040000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "kernel", size: 0x000C0000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "altkernel", size: 0x000C0000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "root", size: 0x00400000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "free1", size: 0x00300000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "free2", size: 0x00300000, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE },{ name: "free3", size: MTDPART_SIZ_FULL, offset: MTDPART_OFS_APPEND, mask_flags: MTD_WRITEABLE }};#endif#ifdef CONFIG_SA1100_HUW_WEBPANELstatic unsigned long huw_webpanel_max_flash_size = 0x01000000;static struct mtd_partition huw_webpanel_partitions[] = { { name: "Loader", size: 0x00040000, offset: 0, },{ name: "Sector 1", size: 0x00040000, offset: MTDPART_OFS_APPEND, },{ size: MTDPART_SIZ_FULL, offset: MTDPART_OFS_APPEND, }};#endif /* CONFIG_SA1100_HUW_WEBPANEL */#ifdef CONFIG_SA1100_H3600static unsigned long h3600_max_flash_size = 0x02000000;static struct mtd_partition h3600_partitions[] = { { name: "H3600 boot firmware", size: 0x00040000, offset: 0, mask_flags: MTD_WRITEABLE /* force read-only */ },{ name: "H3600 kernel", size: 0x00080000, offset: 0x40000 },{ name: "H3600 params", size: 0x00040000, offset: 0xC0000 },{#ifdef CONFIG_JFFS2_FS name: "H3600 root jffs2", offset: 0x00100000, size: MTDPART_SIZ_FULL#else name: "H3600 initrd", size: 0x00100000, offset: 0x00100000 },{ name: "H3600 root cramfs", size: 0x00300000, offset: 0x00200000 },{ name: "H3600 usr cramfs", size: 0x00800000, offset: 0x00500000 },{ name: "H3600 usr local", offset: 0x00d00000, size: MTDPART_SIZ_FULL#endif }};#endif#ifdef CONFIG_SA1100_FREEBIRDstatic unsigned long freebird_max_flash_size = 0x02000000;static struct mtd_partition freebird_partitions[] = {#if CONFIG_SA1100_FREEBIRD_NEW { name: "firmware", size: 0x00040000, offset: 0, mask_flags: MTD_WRITEABLE /* force read-only */ },{ name: "kernel", size: 0x00080000, offset: 0x40000 },{ name: "params", size: 0x00040000, offset: 0xC0000 },{ name: "initrd", size: 0x00100000, offset: 0x00100000 },{ name: "root cramfs", size: 0x00300000, offset: 0x00200000 },{ name: "usr cramfs", size: 0x00C00000, offset: 0x00500000 },{ name: "local", offset: 0x01100000, size: MTDPART_SIZ_FULL }#else { offset: 0, size: 0x00040000, }, { offset: MTDPART_OFS_APPEND, size: 0x000c0000, }, { offset: MTDPART_OFS_APPEND, size: 0x00400000, }, { offset: MTDPART_OFS_APPEND, size: MTDPART_SIZ_FULL }#endif };#endif #ifdef CONFIG_SA1100_CERFstatic unsigned long cerf_max_flash_size = 0x01000000;static struct mtd_partition cerf_partitions[] = { { offset: 0, size: 0x00800000 }, { offset: MTDPART_OFS_APPEND, size: 0x00800000 }};#endif#ifdef CONFIG_SA1100_GRAPHICSCLIENTstatic unsigned long graphicsclient_max_flash_size = 0x01000000;static struct mtd_partition graphicsclient_partitions[] = { { name: "zImage", offset: 0, size: 0x100000 }, { name: "ramdisk.gz", offset: MTDPART_OFS_APPEND, size: 0x300000 }, { name: "User FS", offset: MTDPART_OFS_APPEND, size: MTDPART_SIZ_FULL }};#endif#ifdef CONFIG_SA1100_GRAPHICSMASTER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -