1 /* 2 * Copyright (c) International Business Machines Corp., 2006 3 * Copyright (c) Nokia Corporation, 2007 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13 * the GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * 19 * Author: Artem Bityutskiy (Битюцкий Артём), 20 * Frank Haverkamp 21 */ 22 23 /* 24 * This file includes UBI initialization and building of UBI devices. 25 * 26 * When UBI is initialized, it attaches all the MTD devices specified as the 27 * module load parameters or the kernel boot parameters. If MTD devices were 28 * specified, UBI does not attach any MTD device, but it is possible to do 29 * later using the "UBI control device". 30 * 31 * At the moment we only attach UBI devices by scanning, which will become a 32 * bottleneck when flashes reach certain large size. Then one may improve UBI 33 * and add other methods, although it does not seem to be easy to do. 34 */ 35 36 #ifdef UBI_LINUX 37 #include <linux/err.h> 38 #include <linux/module.h> 39 #include <linux/moduleparam.h> 40 #include <linux/stringify.h> 41 #include <linux/stat.h> 42 #include <linux/miscdevice.h> 43 #include <linux/log2.h> 44 #include <linux/kthread.h> 45 #endif 46 #include <ubi_uboot.h> 47 #include "ubi.h" 48 49 #if (CONFIG_SYS_MALLOC_LEN < (512 << 10)) 50 #error Malloc area too small for UBI, increase CONFIG_SYS_MALLOC_LEN to >= 512k 51 #endif 52 53 /* Maximum length of the 'mtd=' parameter */ 54 #define MTD_PARAM_LEN_MAX 64 55 56 /** 57 * struct mtd_dev_param - MTD device parameter description data structure. 58 * @name: MTD device name or number string 59 * @vid_hdr_offs: VID header offset 60 */ 61 struct mtd_dev_param 62 { 63 char name[MTD_PARAM_LEN_MAX]; 64 int vid_hdr_offs; 65 }; 66 67 /* Numbers of elements set in the @mtd_dev_param array */ 68 static int mtd_devs = 0; 69 70 /* MTD devices specification parameters */ 71 static struct mtd_dev_param mtd_dev_param[UBI_MAX_DEVICES]; 72 73 /* Root UBI "class" object (corresponds to '/<sysfs>/class/ubi/') */ 74 struct class *ubi_class; 75 76 #ifdef UBI_LINUX 77 /* Slab cache for wear-leveling entries */ 78 struct kmem_cache *ubi_wl_entry_slab; 79 80 /* UBI control character device */ 81 static struct miscdevice ubi_ctrl_cdev = { 82 .minor = MISC_DYNAMIC_MINOR, 83 .name = "ubi_ctrl", 84 .fops = &ubi_ctrl_cdev_operations, 85 }; 86 #endif 87 88 /* All UBI devices in system */ 89 struct ubi_device *ubi_devices[UBI_MAX_DEVICES]; 90 91 #ifdef UBI_LINUX 92 /* Serializes UBI devices creations and removals */ 93 DEFINE_MUTEX(ubi_devices_mutex); 94 95 /* Protects @ubi_devices and @ubi->ref_count */ 96 static DEFINE_SPINLOCK(ubi_devices_lock); 97 98 /* "Show" method for files in '/<sysfs>/class/ubi/' */ 99 static ssize_t ubi_version_show(struct class *class, char *buf) 100 { 101 return sprintf(buf, "%d\n", UBI_VERSION); 102 } 103 104 /* UBI version attribute ('/<sysfs>/class/ubi/version') */ 105 static struct class_attribute ubi_version = 106 __ATTR(version, S_IRUGO, ubi_version_show, NULL); 107 108 static ssize_t dev_attribute_show(struct device *dev, 109 struct device_attribute *attr, char *buf); 110 111 /* UBI device attributes (correspond to files in '/<sysfs>/class/ubi/ubiX') */ 112 static struct device_attribute dev_eraseblock_size = 113 __ATTR(eraseblock_size, S_IRUGO, dev_attribute_show, NULL); 114 static struct device_attribute dev_avail_eraseblocks = 115 __ATTR(avail_eraseblocks, S_IRUGO, dev_attribute_show, NULL); 116 static struct device_attribute dev_total_eraseblocks = 117 __ATTR(total_eraseblocks, S_IRUGO, dev_attribute_show, NULL); 118 static struct device_attribute dev_volumes_count = 119 __ATTR(volumes_count, S_IRUGO, dev_attribute_show, NULL); 120 static struct device_attribute dev_max_ec = 121 __ATTR(max_ec, S_IRUGO, dev_attribute_show, NULL); 122 static struct device_attribute dev_reserved_for_bad = 123 __ATTR(reserved_for_bad, S_IRUGO, dev_attribute_show, NULL); 124 static struct device_attribute dev_bad_peb_count = 125 __ATTR(bad_peb_count, S_IRUGO, dev_attribute_show, NULL); 126 static struct device_attribute dev_max_vol_count = 127 __ATTR(max_vol_count, S_IRUGO, dev_attribute_show, NULL); 128 static struct device_attribute dev_min_io_size = 129 __ATTR(min_io_size, S_IRUGO, dev_attribute_show, NULL); 130 static struct device_attribute dev_bgt_enabled = 131 __ATTR(bgt_enabled, S_IRUGO, dev_attribute_show, NULL); 132 static struct device_attribute dev_mtd_num = 133 __ATTR(mtd_num, S_IRUGO, dev_attribute_show, NULL); 134 #endif 135 136 /** 137 * ubi_get_device - get UBI device. 138 * @ubi_num: UBI device number 139 * 140 * This function returns UBI device description object for UBI device number 141 * @ubi_num, or %NULL if the device does not exist. This function increases the 142 * device reference count to prevent removal of the device. In other words, the 143 * device cannot be removed if its reference count is not zero. 144 */ 145 struct ubi_device *ubi_get_device(int ubi_num) 146 { 147 struct ubi_device *ubi; 148 149 spin_lock(&ubi_devices_lock); 150 ubi = ubi_devices[ubi_num]; 151 if (ubi) { 152 ubi_assert(ubi->ref_count >= 0); 153 ubi->ref_count += 1; 154 get_device(&ubi->dev); 155 } 156 spin_unlock(&ubi_devices_lock); 157 158 return ubi; 159 } 160 161 /** 162 * ubi_put_device - drop an UBI device reference. 163 * @ubi: UBI device description object 164 */ 165 void ubi_put_device(struct ubi_device *ubi) 166 { 167 spin_lock(&ubi_devices_lock); 168 ubi->ref_count -= 1; 169 put_device(&ubi->dev); 170 spin_unlock(&ubi_devices_lock); 171 } 172 173 /** 174 * ubi_get_by_major - get UBI device description object by character device 175 * major number. 176 * @major: major number 177 * 178 * This function is similar to 'ubi_get_device()', but it searches the device 179 * by its major number. 180 */ 181 struct ubi_device *ubi_get_by_major(int major) 182 { 183 int i; 184 struct ubi_device *ubi; 185 186 spin_lock(&ubi_devices_lock); 187 for (i = 0; i < UBI_MAX_DEVICES; i++) { 188 ubi = ubi_devices[i]; 189 if (ubi && MAJOR(ubi->cdev.dev) == major) { 190 ubi_assert(ubi->ref_count >= 0); 191 ubi->ref_count += 1; 192 get_device(&ubi->dev); 193 spin_unlock(&ubi_devices_lock); 194 return ubi; 195 } 196 } 197 spin_unlock(&ubi_devices_lock); 198 199 return NULL; 200 } 201 202 /** 203 * ubi_major2num - get UBI device number by character device major number. 204 * @major: major number 205 * 206 * This function searches UBI device number object by its major number. If UBI 207 * device was not found, this function returns -ENODEV, otherwise the UBI device 208 * number is returned. 209 */ 210 int ubi_major2num(int major) 211 { 212 int i, ubi_num = -ENODEV; 213 214 spin_lock(&ubi_devices_lock); 215 for (i = 0; i < UBI_MAX_DEVICES; i++) { 216 struct ubi_device *ubi = ubi_devices[i]; 217 218 if (ubi && MAJOR(ubi->cdev.dev) == major) { 219 ubi_num = ubi->ubi_num; 220 break; 221 } 222 } 223 spin_unlock(&ubi_devices_lock); 224 225 return ubi_num; 226 } 227 228 #ifdef UBI_LINUX 229 /* "Show" method for files in '/<sysfs>/class/ubi/ubiX/' */ 230 static ssize_t dev_attribute_show(struct device *dev, 231 struct device_attribute *attr, char *buf) 232 { 233 ssize_t ret; 234 struct ubi_device *ubi; 235 236 /* 237 * The below code looks weird, but it actually makes sense. We get the 238 * UBI device reference from the contained 'struct ubi_device'. But it 239 * is unclear if the device was removed or not yet. Indeed, if the 240 * device was removed before we increased its reference count, 241 * 'ubi_get_device()' will return -ENODEV and we fail. 242 * 243 * Remember, 'struct ubi_device' is freed in the release function, so 244 * we still can use 'ubi->ubi_num'. 245 */ 246 ubi = container_of(dev, struct ubi_device, dev); 247 ubi = ubi_get_device(ubi->ubi_num); 248 if (!ubi) 249 return -ENODEV; 250 251 if (attr == &dev_eraseblock_size) 252 ret = sprintf(buf, "%d\n", ubi->leb_size); 253 else if (attr == &dev_avail_eraseblocks) 254 ret = sprintf(buf, "%d\n", ubi->avail_pebs); 255 else if (attr == &dev_total_eraseblocks) 256 ret = sprintf(buf, "%d\n", ubi->good_peb_count); 257 else if (attr == &dev_volumes_count) 258 ret = sprintf(buf, "%d\n", ubi->vol_count - UBI_INT_VOL_COUNT); 259 else if (attr == &dev_max_ec) 260 ret = sprintf(buf, "%d\n", ubi->max_ec); 261 else if (attr == &dev_reserved_for_bad) 262 ret = sprintf(buf, "%d\n", ubi->beb_rsvd_pebs); 263 else if (attr == &dev_bad_peb_count) 264 ret = sprintf(buf, "%d\n", ubi->bad_peb_count); 265 else if (attr == &dev_max_vol_count) 266 ret = sprintf(buf, "%d\n", ubi->vtbl_slots); 267 else if (attr == &dev_min_io_size) 268 ret = sprintf(buf, "%d\n", ubi->min_io_size); 269 else if (attr == &dev_bgt_enabled) 270 ret = sprintf(buf, "%d\n", ubi->thread_enabled); 271 else if (attr == &dev_mtd_num) 272 ret = sprintf(buf, "%d\n", ubi->mtd->index); 273 else 274 ret = -EINVAL; 275 276 ubi_put_device(ubi); 277 return ret; 278 } 279 280 /* Fake "release" method for UBI devices */ 281 static void dev_release(struct device *dev) { } 282 283 /** 284 * ubi_sysfs_init - initialize sysfs for an UBI device. 285 * @ubi: UBI device description object 286 * 287 * This function returns zero in case of success and a negative error code in 288 * case of failure. 289 */ 290 static int ubi_sysfs_init(struct ubi_device *ubi) 291 { 292 int err; 293 294 ubi->dev.release = dev_release; 295 ubi->dev.devt = ubi->cdev.dev; 296 ubi->dev.class = ubi_class; 297 sprintf(&ubi->dev.bus_id[0], UBI_NAME_STR"%d", ubi->ubi_num); 298 err = device_register(&ubi->dev); 299 if (err) 300 return err; 301 302 err = device_create_file(&ubi->dev, &dev_eraseblock_size); 303 if (err) 304 return err; 305 err = device_create_file(&ubi->dev, &dev_avail_eraseblocks); 306 if (err) 307 return err; 308 err = device_create_file(&ubi->dev, &dev_total_eraseblocks); 309 if (err) 310 return err; 311 err = device_create_file(&ubi->dev, &dev_volumes_count); 312 if (err) 313 return err; 314 err = device_create_file(&ubi->dev, &dev_max_ec); 315 if (err) 316 return err; 317 err = device_create_file(&ubi->dev, &dev_reserved_for_bad); 318 if (err) 319 return err; 320 err = device_create_file(&ubi->dev, &dev_bad_peb_count); 321 if (err) 322 return err; 323 err = device_create_file(&ubi->dev, &dev_max_vol_count); 324 if (err) 325 return err; 326 err = device_create_file(&ubi->dev, &dev_min_io_size); 327 if (err) 328 return err; 329 err = device_create_file(&ubi->dev, &dev_bgt_enabled); 330 if (err) 331 return err; 332 err = device_create_file(&ubi->dev, &dev_mtd_num); 333 return err; 334 } 335 336 /** 337 * ubi_sysfs_close - close sysfs for an UBI device. 338 * @ubi: UBI device description object 339 */ 340 static void ubi_sysfs_close(struct ubi_device *ubi) 341 { 342 device_remove_file(&ubi->dev, &dev_mtd_num); 343 device_remove_file(&ubi->dev, &dev_bgt_enabled); 344 device_remove_file(&ubi->dev, &dev_min_io_size); 345 device_remove_file(&ubi->dev, &dev_max_vol_count); 346 device_remove_file(&ubi->dev, &dev_bad_peb_count); 347 device_remove_file(&ubi->dev, &dev_reserved_for_bad); 348 device_remove_file(&ubi->dev, &dev_max_ec); 349 device_remove_file(&ubi->dev, &dev_volumes_count); 350 device_remove_file(&ubi->dev, &dev_total_eraseblocks); 351 device_remove_file(&ubi->dev, &dev_avail_eraseblocks); 352 device_remove_file(&ubi->dev, &dev_eraseblock_size); 353 device_unregister(&ubi->dev); 354 } 355 #endif 356 357 /** 358 * kill_volumes - destroy all volumes. 359 * @ubi: UBI device description object 360 */ 361 static void kill_volumes(struct ubi_device *ubi) 362 { 363 int i; 364 365 for (i = 0; i < ubi->vtbl_slots; i++) 366 if (ubi->volumes[i]) 367 ubi_free_volume(ubi, ubi->volumes[i]); 368 } 369 370 /** 371 * uif_init - initialize user interfaces for an UBI device. 372 * @ubi: UBI device description object 373 * 374 * This function returns zero in case of success and a negative error code in 375 * case of failure. 376 */ 377 static int uif_init(struct ubi_device *ubi) 378 { 379 int i, err; 380 #ifdef UBI_LINUX 381 dev_t dev; 382 #endif 383 384 sprintf(ubi->ubi_name, UBI_NAME_STR "%d", ubi->ubi_num); 385 386 /* 387 * Major numbers for the UBI character devices are allocated 388 * dynamically. Major numbers of volume character devices are 389 * equivalent to ones of the corresponding UBI character device. Minor 390 * numbers of UBI character devices are 0, while minor numbers of 391 * volume character devices start from 1. Thus, we allocate one major 392 * number and ubi->vtbl_slots + 1 minor numbers. 393 */ 394 err = alloc_chrdev_region(&dev, 0, ubi->vtbl_slots + 1, ubi->ubi_name); 395 if (err) { 396 ubi_err("cannot register UBI character devices"); 397 return err; 398 } 399 400 ubi_assert(MINOR(dev) == 0); 401 cdev_init(&ubi->cdev, &ubi_cdev_operations); 402 dbg_msg("%s major is %u", ubi->ubi_name, MAJOR(dev)); 403 ubi->cdev.owner = THIS_MODULE; 404 405 err = cdev_add(&ubi->cdev, dev, 1); 406 if (err) { 407 ubi_err("cannot add character device"); 408 goto out_unreg; 409 } 410 411 err = ubi_sysfs_init(ubi); 412 if (err) 413 goto out_sysfs; 414 415 for (i = 0; i < ubi->vtbl_slots; i++) 416 if (ubi->volumes[i]) { 417 err = ubi_add_volume(ubi, ubi->volumes[i]); 418 if (err) { 419 ubi_err("cannot add volume %d", i); 420 goto out_volumes; 421 } 422 } 423 424 return 0; 425 426 out_volumes: 427 kill_volumes(ubi); 428 out_sysfs: 429 ubi_sysfs_close(ubi); 430 cdev_del(&ubi->cdev); 431 out_unreg: 432 unregister_chrdev_region(ubi->cdev.dev, ubi->vtbl_slots + 1); 433 ubi_err("cannot initialize UBI %s, error %d", ubi->ubi_name, err); 434 return err; 435 } 436 437 /** 438 * uif_close - close user interfaces for an UBI device. 439 * @ubi: UBI device description object 440 */ 441 static void uif_close(struct ubi_device *ubi) 442 { 443 kill_volumes(ubi); 444 ubi_sysfs_close(ubi); 445 cdev_del(&ubi->cdev); 446 unregister_chrdev_region(ubi->cdev.dev, ubi->vtbl_slots + 1); 447 } 448 449 /** 450 * attach_by_scanning - attach an MTD device using scanning method. 451 * @ubi: UBI device descriptor 452 * 453 * This function returns zero in case of success and a negative error code in 454 * case of failure. 455 * 456 * Note, currently this is the only method to attach UBI devices. Hopefully in 457 * the future we'll have more scalable attaching methods and avoid full media 458 * scanning. But even in this case scanning will be needed as a fall-back 459 * attaching method if there are some on-flash table corruptions. 460 */ 461 static int attach_by_scanning(struct ubi_device *ubi) 462 { 463 int err; 464 struct ubi_scan_info *si; 465 466 si = ubi_scan(ubi); 467 if (IS_ERR(si)) 468 return PTR_ERR(si); 469 470 ubi->bad_peb_count = si->bad_peb_count; 471 ubi->good_peb_count = ubi->peb_count - ubi->bad_peb_count; 472 ubi->max_ec = si->max_ec; 473 ubi->mean_ec = si->mean_ec; 474 475 err = ubi_read_volume_table(ubi, si); 476 if (err) 477 goto out_si; 478 479 err = ubi_eba_init_scan(ubi, si); 480 if (err) 481 goto out_wl; 482 483 err = ubi_wl_init_scan(ubi, si); 484 if (err) 485 goto out_vtbl; 486 487 ubi_scan_destroy_si(si); 488 return 0; 489 490 out_vtbl: 491 vfree(ubi->vtbl); 492 out_wl: 493 ubi_wl_close(ubi); 494 out_si: 495 ubi_scan_destroy_si(si); 496 return err; 497 } 498 499 /** 500 * io_init - initialize I/O unit for a given UBI device. 501 * @ubi: UBI device description object 502 * 503 * If @ubi->vid_hdr_offset or @ubi->leb_start is zero, default offsets are 504 * assumed: 505 * o EC header is always at offset zero - this cannot be changed; 506 * o VID header starts just after the EC header at the closest address 507 * aligned to @io->hdrs_min_io_size; 508 * o data starts just after the VID header at the closest address aligned to 509 * @io->min_io_size 510 * 511 * This function returns zero in case of success and a negative error code in 512 * case of failure. 513 */ 514 static int io_init(struct ubi_device *ubi) 515 { 516 if (ubi->mtd->numeraseregions != 0) { 517 /* 518 * Some flashes have several erase regions. Different regions 519 * may have different eraseblock size and other 520 * characteristics. It looks like mostly multi-region flashes 521 * have one "main" region and one or more small regions to 522 * store boot loader code or boot parameters or whatever. I 523 * guess we should just pick the largest region. But this is 524 * not implemented. 525 */ 526 ubi_err("multiple regions, not implemented"); 527 return -EINVAL; 528 } 529 530 if (ubi->vid_hdr_offset < 0) 531 return -EINVAL; 532 533 /* 534 * Note, in this implementation we support MTD devices with 0x7FFFFFFF 535 * physical eraseblocks maximum. 536 */ 537 538 ubi->peb_size = ubi->mtd->erasesize; 539 ubi->peb_count = mtd_div_by_eb(ubi->mtd->size, ubi->mtd); 540 ubi->flash_size = ubi->mtd->size; 541 542 if (ubi->mtd->block_isbad && ubi->mtd->block_markbad) 543 ubi->bad_allowed = 1; 544 545 ubi->min_io_size = ubi->mtd->writesize; 546 ubi->hdrs_min_io_size = ubi->mtd->writesize >> ubi->mtd->subpage_sft; 547 548 /* 549 * Make sure minimal I/O unit is power of 2. Note, there is no 550 * fundamental reason for this assumption. It is just an optimization 551 * which allows us to avoid costly division operations. 552 */ 553 if (!is_power_of_2(ubi->min_io_size)) { 554 ubi_err("min. I/O unit (%d) is not power of 2", 555 ubi->min_io_size); 556 return -EINVAL; 557 } 558 559 ubi_assert(ubi->hdrs_min_io_size > 0); 560 ubi_assert(ubi->hdrs_min_io_size <= ubi->min_io_size); 561 ubi_assert(ubi->min_io_size % ubi->hdrs_min_io_size == 0); 562 563 /* Calculate default aligned sizes of EC and VID headers */ 564 ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size); 565 ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size); 566 567 dbg_msg("min_io_size %d", ubi->min_io_size); 568 dbg_msg("hdrs_min_io_size %d", ubi->hdrs_min_io_size); 569 dbg_msg("ec_hdr_alsize %d", ubi->ec_hdr_alsize); 570 dbg_msg("vid_hdr_alsize %d", ubi->vid_hdr_alsize); 571 572 if (ubi->vid_hdr_offset == 0) 573 /* Default offset */ 574 ubi->vid_hdr_offset = ubi->vid_hdr_aloffset = 575 ubi->ec_hdr_alsize; 576 else { 577 ubi->vid_hdr_aloffset = ubi->vid_hdr_offset & 578 ~(ubi->hdrs_min_io_size - 1); 579 ubi->vid_hdr_shift = ubi->vid_hdr_offset - 580 ubi->vid_hdr_aloffset; 581 } 582 583 /* Similar for the data offset */ 584 ubi->leb_start = ubi->vid_hdr_offset + UBI_EC_HDR_SIZE; 585 ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size); 586 587 dbg_msg("vid_hdr_offset %d", ubi->vid_hdr_offset); 588 dbg_msg("vid_hdr_aloffset %d", ubi->vid_hdr_aloffset); 589 dbg_msg("vid_hdr_shift %d", ubi->vid_hdr_shift); 590 dbg_msg("leb_start %d", ubi->leb_start); 591 592 /* The shift must be aligned to 32-bit boundary */ 593 if (ubi->vid_hdr_shift % 4) { 594 ubi_err("unaligned VID header shift %d", 595 ubi->vid_hdr_shift); 596 return -EINVAL; 597 } 598 599 /* Check sanity */ 600 if (ubi->vid_hdr_offset < UBI_EC_HDR_SIZE || 601 ubi->leb_start < ubi->vid_hdr_offset + UBI_VID_HDR_SIZE || 602 ubi->leb_start > ubi->peb_size - UBI_VID_HDR_SIZE || 603 ubi->leb_start & (ubi->min_io_size - 1)) { 604 ubi_err("bad VID header (%d) or data offsets (%d)", 605 ubi->vid_hdr_offset, ubi->leb_start); 606 return -EINVAL; 607 } 608 609 /* 610 * It may happen that EC and VID headers are situated in one minimal 611 * I/O unit. In this case we can only accept this UBI image in 612 * read-only mode. 613 */ 614 if (ubi->vid_hdr_offset + UBI_VID_HDR_SIZE <= ubi->hdrs_min_io_size) { 615 ubi_warn("EC and VID headers are in the same minimal I/O unit, " 616 "switch to read-only mode"); 617 ubi->ro_mode = 1; 618 } 619 620 ubi->leb_size = ubi->peb_size - ubi->leb_start; 621 622 if (!(ubi->mtd->flags & MTD_WRITEABLE)) { 623 ubi_msg("MTD device %d is write-protected, attach in " 624 "read-only mode", ubi->mtd->index); 625 ubi->ro_mode = 1; 626 } 627 628 ubi_msg("physical eraseblock size: %d bytes (%d KiB)", 629 ubi->peb_size, ubi->peb_size >> 10); 630 ubi_msg("logical eraseblock size: %d bytes", ubi->leb_size); 631 ubi_msg("smallest flash I/O unit: %d", ubi->min_io_size); 632 if (ubi->hdrs_min_io_size != ubi->min_io_size) 633 ubi_msg("sub-page size: %d", 634 ubi->hdrs_min_io_size); 635 ubi_msg("VID header offset: %d (aligned %d)", 636 ubi->vid_hdr_offset, ubi->vid_hdr_aloffset); 637 ubi_msg("data offset: %d", ubi->leb_start); 638 639 /* 640 * Note, ideally, we have to initialize ubi->bad_peb_count here. But 641 * unfortunately, MTD does not provide this information. We should loop 642 * over all physical eraseblocks and invoke mtd->block_is_bad() for 643 * each physical eraseblock. So, we skip ubi->bad_peb_count 644 * uninitialized and initialize it after scanning. 645 */ 646 647 return 0; 648 } 649 650 /** 651 * autoresize - re-size the volume which has the "auto-resize" flag set. 652 * @ubi: UBI device description object 653 * @vol_id: ID of the volume to re-size 654 * 655 * This function re-sizes the volume marked by the @UBI_VTBL_AUTORESIZE_FLG in 656 * the volume table to the largest possible size. See comments in ubi-header.h 657 * for more description of the flag. Returns zero in case of success and a 658 * negative error code in case of failure. 659 */ 660 static int autoresize(struct ubi_device *ubi, int vol_id) 661 { 662 struct ubi_volume_desc desc; 663 struct ubi_volume *vol = ubi->volumes[vol_id]; 664 int err, old_reserved_pebs = vol->reserved_pebs; 665 666 /* 667 * Clear the auto-resize flag in the volume in-memory copy of the 668 * volume table, and 'ubi_resize_volume()' will propogate this change 669 * to the flash. 670 */ 671 ubi->vtbl[vol_id].flags &= ~UBI_VTBL_AUTORESIZE_FLG; 672 673 if (ubi->avail_pebs == 0) { 674 struct ubi_vtbl_record vtbl_rec; 675 676 /* 677 * No avalilable PEBs to re-size the volume, clear the flag on 678 * flash and exit. 679 */ 680 memcpy(&vtbl_rec, &ubi->vtbl[vol_id], 681 sizeof(struct ubi_vtbl_record)); 682 err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec); 683 if (err) 684 ubi_err("cannot clean auto-resize flag for volume %d", 685 vol_id); 686 } else { 687 desc.vol = vol; 688 err = ubi_resize_volume(&desc, 689 old_reserved_pebs + ubi->avail_pebs); 690 if (err) 691 ubi_err("cannot auto-resize volume %d", vol_id); 692 } 693 694 if (err) 695 return err; 696 697 ubi_msg("volume %d (\"%s\") re-sized from %d to %d LEBs", vol_id, 698 vol->name, old_reserved_pebs, vol->reserved_pebs); 699 return 0; 700 } 701 702 /** 703 * ubi_attach_mtd_dev - attach an MTD device. 704 * @mtd_dev: MTD device description object 705 * @ubi_num: number to assign to the new UBI device 706 * @vid_hdr_offset: VID header offset 707 * 708 * This function attaches MTD device @mtd_dev to UBI and assign @ubi_num number 709 * to the newly created UBI device, unless @ubi_num is %UBI_DEV_NUM_AUTO, in 710 * which case this function finds a vacant device nubert and assings it 711 * automatically. Returns the new UBI device number in case of success and a 712 * negative error code in case of failure. 713 * 714 * Note, the invocations of this function has to be serialized by the 715 * @ubi_devices_mutex. 716 */ 717 int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, int vid_hdr_offset) 718 { 719 struct ubi_device *ubi; 720 int i, err; 721 722 /* 723 * Check if we already have the same MTD device attached. 724 * 725 * Note, this function assumes that UBI devices creations and deletions 726 * are serialized, so it does not take the &ubi_devices_lock. 727 */ 728 for (i = 0; i < UBI_MAX_DEVICES; i++) { 729 ubi = ubi_devices[i]; 730 if (ubi && mtd->index == ubi->mtd->index) { 731 dbg_err("mtd%d is already attached to ubi%d", 732 mtd->index, i); 733 return -EEXIST; 734 } 735 } 736 737 /* 738 * Make sure this MTD device is not emulated on top of an UBI volume 739 * already. Well, generally this recursion works fine, but there are 740 * different problems like the UBI module takes a reference to itself 741 * by attaching (and thus, opening) the emulated MTD device. This 742 * results in inability to unload the module. And in general it makes 743 * no sense to attach emulated MTD devices, so we prohibit this. 744 */ 745 if (mtd->type == MTD_UBIVOLUME) { 746 ubi_err("refuse attaching mtd%d - it is already emulated on " 747 "top of UBI", mtd->index); 748 return -EINVAL; 749 } 750 751 if (ubi_num == UBI_DEV_NUM_AUTO) { 752 /* Search for an empty slot in the @ubi_devices array */ 753 for (ubi_num = 0; ubi_num < UBI_MAX_DEVICES; ubi_num++) 754 if (!ubi_devices[ubi_num]) 755 break; 756 if (ubi_num == UBI_MAX_DEVICES) { 757 dbg_err("only %d UBI devices may be created", UBI_MAX_DEVICES); 758 return -ENFILE; 759 } 760 } else { 761 if (ubi_num >= UBI_MAX_DEVICES) 762 return -EINVAL; 763 764 /* Make sure ubi_num is not busy */ 765 if (ubi_devices[ubi_num]) { 766 dbg_err("ubi%d already exists", ubi_num); 767 return -EEXIST; 768 } 769 } 770 771 ubi = kzalloc(sizeof(struct ubi_device), GFP_KERNEL); 772 if (!ubi) 773 return -ENOMEM; 774 775 ubi->mtd = mtd; 776 ubi->ubi_num = ubi_num; 777 ubi->vid_hdr_offset = vid_hdr_offset; 778 ubi->autoresize_vol_id = -1; 779 780 mutex_init(&ubi->buf_mutex); 781 mutex_init(&ubi->ckvol_mutex); 782 mutex_init(&ubi->volumes_mutex); 783 spin_lock_init(&ubi->volumes_lock); 784 785 ubi_msg("attaching mtd%d to ubi%d", mtd->index, ubi_num); 786 787 err = io_init(ubi); 788 if (err) 789 goto out_free; 790 791 err = -ENOMEM; 792 ubi->peb_buf1 = vmalloc(ubi->peb_size); 793 if (!ubi->peb_buf1) 794 goto out_free; 795 796 ubi->peb_buf2 = vmalloc(ubi->peb_size); 797 if (!ubi->peb_buf2) 798 goto out_free; 799 800 #ifdef CONFIG_MTD_UBI_DEBUG 801 mutex_init(&ubi->dbg_buf_mutex); 802 ubi->dbg_peb_buf = vmalloc(ubi->peb_size); 803 if (!ubi->dbg_peb_buf) 804 goto out_free; 805 #endif 806 807 err = attach_by_scanning(ubi); 808 if (err) { 809 dbg_err("failed to attach by scanning, error %d", err); 810 goto out_free; 811 } 812 813 if (ubi->autoresize_vol_id != -1) { 814 err = autoresize(ubi, ubi->autoresize_vol_id); 815 if (err) 816 goto out_detach; 817 } 818 819 err = uif_init(ubi); 820 if (err) 821 goto out_detach; 822 823 ubi->bgt_thread = kthread_create(ubi_thread, ubi, ubi->bgt_name); 824 if (IS_ERR(ubi->bgt_thread)) { 825 err = PTR_ERR(ubi->bgt_thread); 826 ubi_err("cannot spawn \"%s\", error %d", ubi->bgt_name, 827 err); 828 goto out_uif; 829 } 830 831 ubi_msg("attached mtd%d to ubi%d", mtd->index, ubi_num); 832 ubi_msg("MTD device name: \"%s\"", mtd->name); 833 ubi_msg("MTD device size: %llu MiB", ubi->flash_size >> 20); 834 ubi_msg("number of good PEBs: %d", ubi->good_peb_count); 835 ubi_msg("number of bad PEBs: %d", ubi->bad_peb_count); 836 ubi_msg("max. allowed volumes: %d", ubi->vtbl_slots); 837 ubi_msg("wear-leveling threshold: %d", CONFIG_MTD_UBI_WL_THRESHOLD); 838 ubi_msg("number of internal volumes: %d", UBI_INT_VOL_COUNT); 839 ubi_msg("number of user volumes: %d", 840 ubi->vol_count - UBI_INT_VOL_COUNT); 841 ubi_msg("available PEBs: %d", ubi->avail_pebs); 842 ubi_msg("total number of reserved PEBs: %d", ubi->rsvd_pebs); 843 ubi_msg("number of PEBs reserved for bad PEB handling: %d", 844 ubi->beb_rsvd_pebs); 845 ubi_msg("max/mean erase counter: %d/%d", ubi->max_ec, ubi->mean_ec); 846 847 /* Enable the background thread */ 848 if (!DBG_DISABLE_BGT) { 849 ubi->thread_enabled = 1; 850 wake_up_process(ubi->bgt_thread); 851 } 852 853 ubi_devices[ubi_num] = ubi; 854 return ubi_num; 855 856 out_uif: 857 uif_close(ubi); 858 out_detach: 859 ubi_eba_close(ubi); 860 ubi_wl_close(ubi); 861 vfree(ubi->vtbl); 862 out_free: 863 vfree(ubi->peb_buf1); 864 vfree(ubi->peb_buf2); 865 #ifdef CONFIG_MTD_UBI_DEBUG 866 vfree(ubi->dbg_peb_buf); 867 #endif 868 kfree(ubi); 869 return err; 870 } 871 872 /** 873 * ubi_detach_mtd_dev - detach an MTD device. 874 * @ubi_num: UBI device number to detach from 875 * @anyway: detach MTD even if device reference count is not zero 876 * 877 * This function destroys an UBI device number @ubi_num and detaches the 878 * underlying MTD device. Returns zero in case of success and %-EBUSY if the 879 * UBI device is busy and cannot be destroyed, and %-EINVAL if it does not 880 * exist. 881 * 882 * Note, the invocations of this function has to be serialized by the 883 * @ubi_devices_mutex. 884 */ 885 int ubi_detach_mtd_dev(int ubi_num, int anyway) 886 { 887 struct ubi_device *ubi; 888 889 if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES) 890 return -EINVAL; 891 892 spin_lock(&ubi_devices_lock); 893 ubi = ubi_devices[ubi_num]; 894 if (!ubi) { 895 spin_unlock(&ubi_devices_lock); 896 return -EINVAL; 897 } 898 899 if (ubi->ref_count) { 900 if (!anyway) { 901 spin_unlock(&ubi_devices_lock); 902 return -EBUSY; 903 } 904 /* This may only happen if there is a bug */ 905 ubi_err("%s reference count %d, destroy anyway", 906 ubi->ubi_name, ubi->ref_count); 907 } 908 ubi_devices[ubi_num] = NULL; 909 spin_unlock(&ubi_devices_lock); 910 911 ubi_assert(ubi_num == ubi->ubi_num); 912 dbg_msg("detaching mtd%d from ubi%d", ubi->mtd->index, ubi_num); 913 914 /* 915 * Before freeing anything, we have to stop the background thread to 916 * prevent it from doing anything on this device while we are freeing. 917 */ 918 if (ubi->bgt_thread) 919 kthread_stop(ubi->bgt_thread); 920 921 uif_close(ubi); 922 ubi_eba_close(ubi); 923 ubi_wl_close(ubi); 924 vfree(ubi->vtbl); 925 put_mtd_device(ubi->mtd); 926 vfree(ubi->peb_buf1); 927 vfree(ubi->peb_buf2); 928 #ifdef CONFIG_MTD_UBI_DEBUG 929 vfree(ubi->dbg_peb_buf); 930 #endif 931 ubi_msg("mtd%d is detached from ubi%d", ubi->mtd->index, ubi->ubi_num); 932 kfree(ubi); 933 return 0; 934 } 935 936 /** 937 * find_mtd_device - open an MTD device by its name or number. 938 * @mtd_dev: name or number of the device 939 * 940 * This function tries to open and MTD device described by @mtd_dev string, 941 * which is first treated as an ASCII number, and if it is not true, it is 942 * treated as MTD device name. Returns MTD device description object in case of 943 * success and a negative error code in case of failure. 944 */ 945 static struct mtd_info * __init open_mtd_device(const char *mtd_dev) 946 { 947 struct mtd_info *mtd; 948 int mtd_num; 949 char *endp; 950 951 mtd_num = simple_strtoul(mtd_dev, &endp, 0); 952 if (*endp != '\0' || mtd_dev == endp) { 953 /* 954 * This does not look like an ASCII integer, probably this is 955 * MTD device name. 956 */ 957 mtd = get_mtd_device_nm(mtd_dev); 958 } else 959 mtd = get_mtd_device(NULL, mtd_num); 960 961 return mtd; 962 } 963 964 int __init ubi_init(void) 965 { 966 int err, i, k; 967 968 /* Ensure that EC and VID headers have correct size */ 969 BUILD_BUG_ON(sizeof(struct ubi_ec_hdr) != 64); 970 BUILD_BUG_ON(sizeof(struct ubi_vid_hdr) != 64); 971 972 if (mtd_devs > UBI_MAX_DEVICES) { 973 ubi_err("too many MTD devices, maximum is %d", UBI_MAX_DEVICES); 974 return -EINVAL; 975 } 976 977 /* Create base sysfs directory and sysfs files */ 978 ubi_class = class_create(THIS_MODULE, UBI_NAME_STR); 979 if (IS_ERR(ubi_class)) { 980 err = PTR_ERR(ubi_class); 981 ubi_err("cannot create UBI class"); 982 goto out; 983 } 984 985 err = class_create_file(ubi_class, &ubi_version); 986 if (err) { 987 ubi_err("cannot create sysfs file"); 988 goto out_class; 989 } 990 991 err = misc_register(&ubi_ctrl_cdev); 992 if (err) { 993 ubi_err("cannot register device"); 994 goto out_version; 995 } 996 997 #ifdef UBI_LINUX 998 ubi_wl_entry_slab = kmem_cache_create("ubi_wl_entry_slab", 999 sizeof(struct ubi_wl_entry), 1000 0, 0, NULL); 1001 if (!ubi_wl_entry_slab) 1002 goto out_dev_unreg; 1003 #endif 1004 1005 /* Attach MTD devices */ 1006 for (i = 0; i < mtd_devs; i++) { 1007 struct mtd_dev_param *p = &mtd_dev_param[i]; 1008 struct mtd_info *mtd; 1009 1010 cond_resched(); 1011 1012 mtd = open_mtd_device(p->name); 1013 if (IS_ERR(mtd)) { 1014 err = PTR_ERR(mtd); 1015 goto out_detach; 1016 } 1017 1018 mutex_lock(&ubi_devices_mutex); 1019 err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, 1020 p->vid_hdr_offs); 1021 mutex_unlock(&ubi_devices_mutex); 1022 if (err < 0) { 1023 put_mtd_device(mtd); 1024 ubi_err("cannot attach mtd%d", mtd->index); 1025 goto out_detach; 1026 } 1027 } 1028 1029 return 0; 1030 1031 out_detach: 1032 for (k = 0; k < i; k++) 1033 if (ubi_devices[k]) { 1034 mutex_lock(&ubi_devices_mutex); 1035 ubi_detach_mtd_dev(ubi_devices[k]->ubi_num, 1); 1036 mutex_unlock(&ubi_devices_mutex); 1037 } 1038 #ifdef UBI_LINUX 1039 kmem_cache_destroy(ubi_wl_entry_slab); 1040 out_dev_unreg: 1041 #endif 1042 misc_deregister(&ubi_ctrl_cdev); 1043 out_version: 1044 class_remove_file(ubi_class, &ubi_version); 1045 out_class: 1046 class_destroy(ubi_class); 1047 out: 1048 mtd_devs = 0; 1049 ubi_err("UBI error: cannot initialize UBI, error %d", err); 1050 return err; 1051 } 1052 module_init(ubi_init); 1053 1054 void __exit ubi_exit(void) 1055 { 1056 int i; 1057 1058 for (i = 0; i < UBI_MAX_DEVICES; i++) 1059 if (ubi_devices[i]) { 1060 mutex_lock(&ubi_devices_mutex); 1061 ubi_detach_mtd_dev(ubi_devices[i]->ubi_num, 1); 1062 mutex_unlock(&ubi_devices_mutex); 1063 } 1064 kmem_cache_destroy(ubi_wl_entry_slab); 1065 misc_deregister(&ubi_ctrl_cdev); 1066 class_remove_file(ubi_class, &ubi_version); 1067 class_destroy(ubi_class); 1068 mtd_devs = 0; 1069 } 1070 module_exit(ubi_exit); 1071 1072 /** 1073 * bytes_str_to_int - convert a string representing number of bytes to an 1074 * integer. 1075 * @str: the string to convert 1076 * 1077 * This function returns positive resulting integer in case of success and a 1078 * negative error code in case of failure. 1079 */ 1080 static int __init bytes_str_to_int(const char *str) 1081 { 1082 char *endp; 1083 unsigned long result; 1084 1085 result = simple_strtoul(str, &endp, 0); 1086 if (str == endp || result < 0) { 1087 printk(KERN_ERR "UBI error: incorrect bytes count: \"%s\"\n", 1088 str); 1089 return -EINVAL; 1090 } 1091 1092 switch (*endp) { 1093 case 'G': 1094 result *= 1024; 1095 case 'M': 1096 result *= 1024; 1097 case 'K': 1098 result *= 1024; 1099 if (endp[1] == 'i' && endp[2] == 'B') 1100 endp += 2; 1101 case '\0': 1102 break; 1103 default: 1104 printk(KERN_ERR "UBI error: incorrect bytes count: \"%s\"\n", 1105 str); 1106 return -EINVAL; 1107 } 1108 1109 return result; 1110 } 1111 1112 /** 1113 * ubi_mtd_param_parse - parse the 'mtd=' UBI parameter. 1114 * @val: the parameter value to parse 1115 * @kp: not used 1116 * 1117 * This function returns zero in case of success and a negative error code in 1118 * case of error. 1119 */ 1120 int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp) 1121 { 1122 int i, len; 1123 struct mtd_dev_param *p; 1124 char buf[MTD_PARAM_LEN_MAX]; 1125 char *pbuf = &buf[0]; 1126 char *tokens[2] = {NULL, NULL}; 1127 1128 if (!val) 1129 return -EINVAL; 1130 1131 if (mtd_devs == UBI_MAX_DEVICES) { 1132 printk(KERN_ERR "UBI error: too many parameters, max. is %d\n", 1133 UBI_MAX_DEVICES); 1134 return -EINVAL; 1135 } 1136 1137 len = strnlen(val, MTD_PARAM_LEN_MAX); 1138 if (len == MTD_PARAM_LEN_MAX) { 1139 printk(KERN_ERR "UBI error: parameter \"%s\" is too long, " 1140 "max. is %d\n", val, MTD_PARAM_LEN_MAX); 1141 return -EINVAL; 1142 } 1143 1144 if (len == 0) { 1145 printk(KERN_WARNING "UBI warning: empty 'mtd=' parameter - " 1146 "ignored\n"); 1147 return 0; 1148 } 1149 1150 strcpy(buf, val); 1151 1152 /* Get rid of the final newline */ 1153 if (buf[len - 1] == '\n') 1154 buf[len - 1] = '\0'; 1155 1156 for (i = 0; i < 2; i++) 1157 tokens[i] = strsep(&pbuf, ","); 1158 1159 if (pbuf) { 1160 printk(KERN_ERR "UBI error: too many arguments at \"%s\"\n", 1161 val); 1162 return -EINVAL; 1163 } 1164 1165 p = &mtd_dev_param[mtd_devs]; 1166 strcpy(&p->name[0], tokens[0]); 1167 1168 if (tokens[1]) 1169 p->vid_hdr_offs = bytes_str_to_int(tokens[1]); 1170 1171 if (p->vid_hdr_offs < 0) 1172 return p->vid_hdr_offs; 1173 1174 mtd_devs += 1; 1175 return 0; 1176 } 1177 1178 module_param_call(mtd, ubi_mtd_param_parse, NULL, NULL, 000); 1179 MODULE_PARM_DESC(mtd, "MTD devices to attach. Parameter format: " 1180 "mtd=<name|num>[,<vid_hdr_offs>].\n" 1181 "Multiple \"mtd\" parameters may be specified.\n" 1182 "MTD devices may be specified by their number or name.\n" 1183 "Optional \"vid_hdr_offs\" parameter specifies UBI VID " 1184 "header position and data starting position to be used " 1185 "by UBI.\n" 1186 "Example: mtd=content,1984 mtd=4 - attach MTD device" 1187 "with name \"content\" using VID header offset 1984, and " 1188 "MTD device number 4 with default VID header offset."); 1189 1190 MODULE_VERSION(__stringify(UBI_VERSION)); 1191 MODULE_DESCRIPTION("UBI - Unsorted Block Images"); 1192 MODULE_AUTHOR("Artem Bityutskiy"); 1193 MODULE_LICENSE("GPL"); 1194