From: David Gibson <david@gibson.dropbear.id.au>
To: linuxppc-embedded@lists.linuxppc.org
Subject: Arctic-2 MTD driver
Date: Mon, 16 Dec 2002 13:09:22 +1100 [thread overview]
Message-ID: <20021216020922.GH4981@zax.zax> (raw)
Having committed the core support code for the Arctic-2, here come
some drivers for it. Below is an MTD map for the Arctic-2, derived
from beech-mtd.c. Essentially all it does is provide suitable
hardwired partitions.
Again, any comments before I commit this?
diff -urN /home/dgibson/kernel/linuxppc_2_4_devel/drivers/mtd/maps/Config.in linux-bartholomew/drivers/mtd/maps/Config.in
--- /home/dgibson/kernel/linuxppc_2_4_devel/drivers/mtd/maps/Config.in 2002-09-13 16:01:34.000000000 +1000
+++ linux-bartholomew/drivers/mtd/maps/Config.in 2002-12-12 15:28:27.000000000 +1100
@@ -57,6 +57,9 @@
if [ "$CONFIG_BEECH" = "y" ]; then
dep_tristate ' CFI Flash device mapped on IBM Beech' CONFIG_MTD_BEECH $CONFIG_MTD_CFI
fi
+ if [ "$CONFIG_ARCTIC2" = "y" ]; then
+ dep_tristate ' CFI Flash device mapped on IBM Arctic' CONFIG_MTD_ARCTIC $CONFIG_MTD_CFI
+ fi
dep_tristate ' CFI Flash device mapped on D-Box2' CONFIG_MTD_DBOX2 $CONFIG_MTD_CFI
dep_tristate ' CFI Flash device mapping on FlagaDM' CONFIG_MTD_CFI_FLAGADM $CONFIG_MTD_CFI
fi
diff -urN /home/dgibson/kernel/linuxppc_2_4_devel/drivers/mtd/maps/Makefile linux-bartholomew/drivers/mtd/maps/Makefile
--- /home/dgibson/kernel/linuxppc_2_4_devel/drivers/mtd/maps/Makefile 2002-09-13 16:08:05.000000000 +1000
+++ linux-bartholomew/drivers/mtd/maps/Makefile 2002-12-12 15:28:08.000000000 +1100
@@ -44,5 +44,6 @@
obj-$(CONFIG_MTD_MOT_MVP) += mot-mvp.o
obj-$(CONFIG_MTD_EBONY) += ebony.o
obj-$(CONFIG_MTD_BEECH) += beech-mtd.o
+obj-$(CONFIG_MTD_ARCTIC) += arctic-mtd.o
include $(TOPDIR)/Rules.make
diff -urN /home/dgibson/kernel/linuxppc_2_4_devel/drivers/mtd/maps/arctic-mtd.c linux-bartholomew/drivers/mtd/maps/arctic-mtd.c
--- /home/dgibson/kernel/linuxppc_2_4_devel/drivers/mtd/maps/arctic-mtd.c Thu Jan 01 10:00:00 1970
+++ linux-bartholomew/drivers/mtd/maps/arctic-mtd.c Mon Dec 16 13:08:02 2002
@@ -0,0 +1,168 @@
+/*
+ * drivers/mtd/maps/arctic-mtd.c MTD mappings and partition tables for
+ * IBM 405LP Arctic boards.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Copyright (C) 2002, International Business Machines Corporation
+ * All Rights Reserved.
+ *
+ * Bishop Brock
+ * IBM Research, Austin Center for Low-Power Computing
+ * bcbrock@us.ibm.com
+ * March 2002
+ *
+ * modified for Arctic by,
+ * David Gibson
+ * IBM OzLabs, Canberra, Australia
+ * <arctic@gibson.dropbear.id.au>
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/types.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#include <asm/io.h>
+#include <asm/ibm4xx.h>
+
+#define ARCTIC_FFS_SIZE 0x1a00000 /* 26 M */
+
+#define NAME "Arctic Linux Flash"
+#define PADDR SUBZERO_BOOTFLASH_PADDR
+#define SIZE SUBZERO_BOOTFLASH_SIZE
+#define BUSWIDTH 2
+
+/* Flash memories on these boards are memory resources, accessed big-endian. */
+
+static u8
+arctic_mtd_read8(struct map_info *map, unsigned long offset)
+{
+ return __raw_readb(map->map_priv_1 + offset);
+}
+
+static u16
+arctic_mtd_read16(struct map_info *map, unsigned long offset)
+{
+ return __raw_readw(map->map_priv_1 + offset);
+}
+
+static u32
+arctic_mtd_read32(struct map_info *map, unsigned long offset)
+{
+ return __raw_readl(map->map_priv_1 + offset);
+}
+
+static void
+arctic_mtd_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
+{
+ memcpy_fromio(to, (void *) (map->map_priv_1 + from), len);
+}
+
+static void
+arctic_mtd_write8(struct map_info *map, u8 data, unsigned long address)
+{
+ __raw_writeb(data, map->map_priv_1 + address);
+ mb();
+}
+
+static void
+arctic_mtd_write16(struct map_info *map, u16 data, unsigned long address)
+{
+ __raw_writew(data, map->map_priv_1 + address);
+ mb();
+}
+
+static void
+arctic_mtd_write32(struct map_info *map, u32 data, unsigned long address)
+{
+ __raw_writel(data, map->map_priv_1 + address);
+ mb();
+}
+
+static void
+arctic_mtd_copy_to(struct map_info *map,
+ unsigned long to, const void *from, ssize_t len)
+{
+ memcpy_toio((void *) (map->map_priv_1 + to), from, len);
+}
+
+static struct map_info arctic_mtd_map = {
+ .name = NAME,
+ .size = SIZE,
+ .buswidth = BUSWIDTH,
+ .read8 = arctic_mtd_read8,
+ .read16 = arctic_mtd_read16,
+ .read32 = arctic_mtd_read32,
+ .copy_from = arctic_mtd_copy_from,
+ .write8 = arctic_mtd_write8,
+ .write16 = arctic_mtd_write16,
+ .write32 = arctic_mtd_write32,
+ .copy_to = arctic_mtd_copy_to,
+};
+
+static struct mtd_info *arctic_mtd;
+
+static struct mtd_partition arctic_partitions[2] = {
+ { .name = "Arctic FFS",
+ .size = ARCTIC_FFS_SIZE,
+ .offset = 0,},
+ { .name = "Kernel & firmware",
+ .size = (SUBZERO_BOOTFLASH_SIZE - ARCTIC_FFS_SIZE),
+ .offset = ARCTIC_FFS_SIZE,},
+};
+
+static int __init
+init_arctic_mtd(void)
+{
+ printk("%s: 0x%08x at 0x%08x\n", NAME, SIZE, PADDR);
+
+ arctic_mtd_map.map_priv_1 = (unsigned long) ioremap(PADDR, SIZE);
+
+ if (!arctic_mtd_map.map_priv_1) {
+ printk("%s: failed to ioremap 0x%x\n", NAME, PADDR);
+ return -EIO;
+ }
+
+ printk("%s: probing %d-bit flash bus\n", NAME, BUSWIDTH * 8);
+ arctic_mtd = do_map_probe("cfi_probe", &arctic_mtd_map);
+
+ if (!arctic_mtd)
+ return -ENXIO;
+
+ arctic_mtd->module = THIS_MODULE;
+
+ return add_mtd_partitions(arctic_mtd, arctic_partitions, 2);
+}
+
+static void __exit
+cleanup_arctic_mtd(void)
+{
+ if (arctic_mtd) {
+ del_mtd_partitions(arctic_mtd);
+ map_destroy(arctic_mtd);
+ iounmap((void *) arctic_mtd_map.map_priv_1);
+ }
+}
+
+module_init(init_arctic_mtd);
+module_exit(cleanup_arctic_mtd);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("David Gibson <arctic@gibson.dropbear.id.au>");
+MODULE_DESCRIPTION("MTD map and partitions for IBM 405LP Arctic boards");
--
David Gibson | For every complex problem there is a
david@gibson.dropbear.id.au | solution which is simple, neat and
| wrong.
http://www.ozlabs.org/people/dgibson
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
next reply other threads:[~2002-12-16 2:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-12-16 2:09 David Gibson [this message]
2002-12-16 8:46 ` Arctic-2 MTD driver Marius Groeger
2002-12-16 15:01 ` Tom Rini
2002-12-16 15:28 ` Marius Groeger
2002-12-16 15:31 ` Tom Rini
2002-12-16 14:43 ` Tom Rini
2002-12-17 4:16 ` David Gibson
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=20021216020922.GH4981@zax.zax \
--to=david@gibson.dropbear.id.au \
--cc=linuxppc-embedded@lists.linuxppc.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.