Blame view

arch/mips/cavium-octeon/flash_setup.c 1.89 KB
5b3b16880   David Daney   MIPS: Add Cavium ...
1
2
3
4
5
6
7
8
9
10
  /*
   *   Octeon Bootbus flash setup
   *
   * This file is subject to the terms and conditions of the GNU General Public
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
   *
   * Copyright (C) 2007, 2008 Cavium Networks
   */
  #include <linux/kernel.h>
cae39d138   Paul Gortmaker   mips: add export....
11
  #include <linux/export.h>
5b3b16880   David Daney   MIPS: Add Cavium ...
12
13
14
15
16
17
18
19
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/map.h>
  #include <linux/mtd/partitions.h>
  
  #include <asm/octeon/octeon.h>
  
  static struct map_info flash_map;
  static struct mtd_info *mymtd;
5b3b16880   David Daney   MIPS: Add Cavium ...
20
21
22
23
24
25
26
  static const char *part_probe_types[] = {
  	"cmdlinepart",
  #ifdef CONFIG_MTD_REDBOOT_PARTS
  	"RedBoot",
  #endif
  	NULL
  };
5b3b16880   David Daney   MIPS: Add Cavium ...
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  
  /**
   * Module/ driver initialization.
   *
   * Returns Zero on success
   */
  static int __init flash_init(void)
  {
  	/*
  	 * Read the bootbus region 0 setup to determine the base
  	 * address of the flash.
  	 */
  	union cvmx_mio_boot_reg_cfgx region_cfg;
  	region_cfg.u64 = cvmx_read_csr(CVMX_MIO_BOOT_REG_CFGX(0));
  	if (region_cfg.s.en) {
  		/*
  		 * The bootloader always takes the flash and sets its
  		 * address so the entire flash fits below
  		 * 0x1fc00000. This way the flash aliases to
  		 * 0x1fc00000 for booting. Software can access the
  		 * full flash at the true address, while core boot can
  		 * access 4MB.
  		 */
  		/* Use this name so old part lines work */
  		flash_map.name = "phys_mapped_flash";
  		flash_map.phys = region_cfg.s.base << 16;
  		flash_map.size = 0x1fc00000 - flash_map.phys;
  		flash_map.bankwidth = 1;
  		flash_map.virt = ioremap(flash_map.phys, flash_map.size);
  		pr_notice("Bootbus flash: Setting flash for %luMB flash at "
12e22e8e6   Ralf Baechle   MIPS: Stop using ...
57
58
  			  "0x%08llx
  ", flash_map.size >> 20, flash_map.phys);
5b3b16880   David Daney   MIPS: Add Cavium ...
59
60
61
62
  		simple_map_init(&flash_map);
  		mymtd = do_map_probe("cfi_probe", &flash_map);
  		if (mymtd) {
  			mymtd->owner = THIS_MODULE;
b2f909419   David Daney   MIPS: Octeon: Fix...
63
64
  			mtd_device_parse_register(mymtd, part_probe_types,
  						  0, NULL, 0);
5b3b16880   David Daney   MIPS: Add Cavium ...
65
66
67
68
69
70
71
72
73
  		} else {
  			pr_err("Failed to register MTD device for flash
  ");
  		}
  	}
  	return 0;
  }
  
  late_initcall(flash_init);