In ext4, the file inode can store up to 4 extents. If a file requires more (due to size or fragmentation), an extent index tree is used. Currently, u-boot reads a node from each level of the extent tree for every block read, which is very inefficient when extent tree depth is > 0. This patch adds a cache for the extent tree. We cache the 1 most-recently-seen node at each extent tree level. The typical workload is sequential block access, so once we leave a given tree node, it will not be revisited. Therefore, it makes sense to just cache one node per tree level. Cached blocks are lazily allocated. The typical case is extent tree depth = 0, in which case no caching is needed and no allocations will occur. For files with extent tree depth = 1, this patch produces a ~10x improvement in read speed. For deeper extent trees, the improvement is larger. On my test device, a 3MB file which previously took 9s to read now takes 150ms. Cache size is configurable with CONFIG_EXT4_EXTENT_CACHE_SIZE. However the default of 5 (the maximum depth of well-formed extent trees) is recommended. Signed-off-by: Evan Thompson <evan.thompson@flukenetworks.com> Reviewed-by: Tom Rini <trini@konsulko.com> Cherry-picked-by: Alexandre Bard <alexandre.bard@netmodule.com> BugzID: 57904 |
||
|---|---|---|
| .. | ||
| DocBook | ||
| SPI | ||
| SPL | ||
| chromium | ||
| device-tree-bindings | ||
| driver-model | ||
| imx | ||
| mvebu | ||
| uImage.FIT | ||
| I2C_Edge_Conditions | ||
| README.440-DDR-performance | ||
| README.AMCC-eval-boards-cleanup | ||
| README.ARC | ||
| README.ARM-memory-map | ||
| README.Heterogeneous-SoCs | ||
| README.JFFS2 | ||
| README.JFFS2_NAND | ||
| README.LED | ||
| README.LED_display | ||
| README.N1213 | ||
| README.NDS32 | ||
| README.NX25 | ||
| README.NetConsole | ||
| README.OFT | ||
| README.POST | ||
| README.SNTP | ||
| README.SPL | ||
| README.TPL | ||
| README.VLAN | ||
| README.VSC3316-3308 | ||
| README.ae250 | ||
| README.ag101p | ||
| README.android-fastboot | ||
| README.android-fastboot-protocol | ||
| README.arm-caches | ||
| README.arm-relocation | ||
| README.arm64 | ||
| README.armada-secureboot | ||
| README.at91 | ||
| README.atmel_mci | ||
| README.atmel_pmecc | ||
| README.autoboot | ||
| README.b4860qds | ||
| README.bedbug | ||
| README.bitbangMII | ||
| README.blackfin | ||
| README.bootmenu | ||
| README.boston | ||
| README.bus_vcxk | ||
| README.cfi | ||
| README.chromium | ||
| README.clang | ||
| README.coccinelle | ||
| README.commands | ||
| README.commands.itest | ||
| README.commands.spl | ||
| README.console | ||
| README.davinci | ||
| README.davinci.nand_spl | ||
| README.dfutftp | ||
| README.displaying-bmps | ||
| README.distro | ||
| README.dns | ||
| README.drivers.eth | ||
| README.efi | ||
| README.enetaddr | ||
| README.esbc_validate | ||
| README.ext4 | ||
| README.falcon | ||
| README.fdt-control | ||
| README.fdt-overlays | ||
| README.fec_mxc | ||
| README.fsl-clk | ||
| README.fsl-ddr | ||
| README.fsl-dpaa | ||
| README.fsl-esdhc | ||
| README.fsl-hwconfig | ||
| README.fsl-trustzone-components | ||
| README.fsl_iim | ||
| README.fuse | ||
| README.generic-board | ||
| README.generic_usb_ohci | ||
| README.gpt | ||
| README.hwconfig | ||
| README.i2c | ||
| README.iomux | ||
| README.iscsi | ||
| README.kconfig | ||
| README.kwbimage | ||
| README.link-local | ||
| README.log | ||
| README.lynxkdi | ||
| README.m68k | ||
| README.m54418twr | ||
| README.malta | ||
| README.marubun-pcmcia | ||
| README.marvell | ||
| README.memory-test | ||
| README.menu | ||
| README.mips | ||
| README.mpc74xx | ||
| README.mpc83xx.ddrecc | ||
| README.mpc83xxads | ||
| README.mpc85xx | ||
| README.mpc85xx-sd-spi-boot | ||
| README.mpc85xx-spin-table | ||
| README.mpc85xxcds | ||
| README.multi-dtb-fit | ||
| README.mxc_ocotp | ||
| README.nand | ||
| README.nand-boot-ppc440 | ||
| README.ne2000 | ||
| README.nios2 | ||
| README.nokia_rx51 | ||
| README.nvme | ||
| README.odroid | ||
| README.omap-ulpi-viewport | ||
| README.omap3 | ||
| README.pblimage | ||
| README.plan9 | ||
| README.power-framework | ||
| README.pxe | ||
| README.qemu-arm | ||
| README.qemu-mips | ||
| README.ramboot-ppc85xx | ||
| README.rmobile | ||
| README.rockchip | ||
| README.rockusb | ||
| README.s5pc1xx | ||
| README.sata | ||
| README.sched | ||
| README.scrapyard | ||
| README.semihosting | ||
| README.serial_multi | ||
| README.sh | ||
| README.sh7752evb | ||
| README.sh7753evb | ||
| README.sha1 | ||
| README.silent | ||
| README.socfpga | ||
| README.spear | ||
| README.splashprepare | ||
| README.srio-pcie-boot-corenet | ||
| README.standalone | ||
| README.t1040-l2switch | ||
| README.ti-secure | ||
| README.trace | ||
| README.u-boot_on_efi | ||
| README.ubi | ||
| README.ubispl | ||
| README.ublimage | ||
| README.unaligned-memory-access.txt | ||
| README.uniphier | ||
| README.update | ||
| README.usb | ||
| README.vf610 | ||
| README.video | ||
| README.vxworks | ||
| README.watchdog | ||
| README.x86 | ||
| README.xtensa | ||
| README.zfs | ||
| README.zynq | ||
| bounces | ||
| feature-removal-schedule.txt | ||
| git-mailrc | ||
| kwboot.1 | ||
| mkimage.1 | ||
README.zynq
# # Xilinx ZYNQ U-Boot # # (C) Copyright 2013 Xilinx, Inc. # # SPDX-License-Identifier: GPL-2.0+ # 1. About this This document describes the information about Xilinx Zynq U-Boot - like supported boards, ML status and TODO list. 2. Zynq boards Xilinx Zynq-7000 All Programmable SoCs enable extensive system level differentiation, integration, and flexibility through hardware, software, and I/O programmability. * zc702 (single qspi, gem0, mmc) [1] * zc706 (dual parallel qspi, gem0, mmc) [2] * zed (single qspi, gem0, mmc) [3] * microzed (single qspi, gem0, mmc) [4] * zc770 - zc770-xm010 (single qspi, gem0, mmc) - zc770-xm011 (8 or 16 bit nand) - zc770-xm012 (nor) - zc770-xm013 (dual parallel qspi, gem1) 3. Building ex. configure and build for zc702 board $ make zynq_zc702_config $ make 4. Bootmode Zynq has a facility to read the bootmode from the slcr bootmode register once user is setting through jumpers on the board - see page no:1546 on [5] All possible bootmode values are defined in Table 6-2:Boot_Mode MIO Pins on [5]. board_late_init() will read the bootmode values using slcr bootmode register at runtime and assign the modeboot variable to specific bootmode string which is intern used in autoboot. SLCR bootmode register Bit[3:0] values #define ZYNQ_BM_NOR 0x02 #define ZYNQ_BM_SD 0x05 #define ZYNQ_BM_JTAG 0x0 "modeboot" variable can assign any of "norboot", "sdboot" or "jtagboot" bootmode strings at runtime. 5. Mainline status - Added basic board configurations support. - Added zynq u-boot bsp code - arch/arm/cpu/armv7/zynq - Added zynq boards named - zc70x, zed, microzed, zc770_xm010/xm011/xm012/xm013 - Added zynq drivers: serial - drivers/serial/serial_zynq.c net - drivers/net/zynq_gem.c mmc - drivers/mmc/zynq_sdhci.c spi - drivers/spi/zynq_spi.c qspi - drivers/spi/zynq_qspi.c i2c - drivers/i2c/zynq_i2c.c nand - drivers/mtd/nand/zynq_nand.c - Done proper cleanups on board configurations - Added basic FDT support for zynq boards - d-cache support for zynq_gem.c 6. TODO - Add FDT support on individual drivers [1] http://www.xilinx.com/products/boards-and-kits/EK-Z7-ZC702-G.htm [2] http://www.xilinx.com/products/boards-and-kits/EK-Z7-ZC706-G.htm [3] http://zedboard.org/product/zedboard [4] http://zedboard.org/product/microzed [5] http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf -- Jagannadha Sutradharudu Teki <jaganna@xilinx.com> Sun Dec 15 14:52:41 IST 2013