mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-04 10:46:40 +03:00
Compare commits
50 Commits
v2016.01-r
...
v2016.01
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa85e826c1 | ||
|
|
a57a817406 | ||
|
|
c5f18a0b69 | ||
|
|
e6c516a973 | ||
|
|
b5e7c1e754 | ||
|
|
70f27e7f2a | ||
|
|
4b421d4ea1 | ||
|
|
d77a092dd3 | ||
|
|
b685c7348c | ||
|
|
7ba34ff09f | ||
|
|
9642b78cdf | ||
|
|
e9cdf3b85e | ||
|
|
35729218b8 | ||
|
|
fea6730e1c | ||
|
|
9d243b1481 | ||
|
|
2f231025bc | ||
|
|
90345c92a8 | ||
|
|
80dc99972b | ||
|
|
821fec0ceb | ||
|
|
7babe48252 | ||
|
|
c2b233cbec | ||
|
|
76765375d7 | ||
|
|
7207b366d5 | ||
|
|
d7b4ca2b6f | ||
|
|
f5abb40997 | ||
|
|
8c20dc4074 | ||
|
|
dd8e42900b | ||
|
|
25525ebe31 | ||
|
|
9b03701a10 | ||
|
|
c5a75339cf | ||
|
|
71105f50fe | ||
|
|
8a83487030 | ||
|
|
67ecb84ccb | ||
|
|
70caa97108 | ||
|
|
b042566dcf | ||
|
|
4cdc2c8cc0 | ||
|
|
a671c4f2be | ||
|
|
e7cc8d11ad | ||
|
|
587c3f8ebe | ||
|
|
88f91d1375 | ||
|
|
fcbe8c5674 | ||
|
|
ce2190f525 | ||
|
|
7ea191aa10 | ||
|
|
59a6ca54f5 | ||
|
|
a307760ab4 | ||
|
|
d584c68ce0 | ||
|
|
3861d784b1 | ||
|
|
8770413f38 | ||
|
|
5092158359 | ||
|
|
6a655d8e34 |
3
.mailmap
3
.mailmap
@@ -12,7 +12,7 @@ Allen Martin <amartin@nvidia.com>
|
||||
Andreas Bießmann <andreas.devel@googlemail.com>
|
||||
Aneesh V <aneesh@ti.com>
|
||||
Dirk Behme <dirk.behme@googlemail.com>
|
||||
Fabio Estevam <fabio.estevam@freescale.com>
|
||||
Fabio Estevam <fabio.estevam@nxp.com>
|
||||
Jagan Teki <402jagan@gmail.com>
|
||||
Jagan Teki <jaganna@gmail.com>
|
||||
Jagan Teki <jaganna@xilinx.com>
|
||||
@@ -28,4 +28,5 @@ Stefano Babic <sbabic@denx.de>
|
||||
TsiChung Liew <Tsi-Chung.Liew@freescale.com>
|
||||
Wolfgang Denk <wdenk>
|
||||
York Sun <yorksun@freescale.com>
|
||||
York Sun <york.sun@nxp.com>
|
||||
Łukasz Majewski <l.majewski@samsung.com>
|
||||
|
||||
@@ -239,7 +239,7 @@ S: Maintained
|
||||
T: git git://git.denx.de/u-boot-freebsd.git
|
||||
|
||||
FREESCALE QORIQ
|
||||
M: York Sun <yorksun@freescale.com>
|
||||
M: York Sun <york.sun@nxp.com>
|
||||
S: Maintained
|
||||
T: git git://git.denx.de/u-boot-fsl-qoriq.git
|
||||
|
||||
@@ -308,13 +308,13 @@ F: arch/powerpc/cpu/mpc83xx/
|
||||
F: arch/powerpc/include/asm/arch-mpc83xx/
|
||||
|
||||
POWERPC MPC85XX
|
||||
M: York Sun <yorksun@freescale.com>
|
||||
M: York Sun <york.sun@nxp.com>
|
||||
S: Maintained
|
||||
T: git git://git.denx.de/u-boot-mpc85xx.git
|
||||
F: arch/powerpc/cpu/mpc85xx/
|
||||
|
||||
POWERPC MPC86XX
|
||||
M: York Sun <yorksun@freescale.com>
|
||||
M: York Sun <york.sun@nxp.com>
|
||||
S: Maintained
|
||||
T: git git://git.denx.de/u-boot-mpc86xx.git
|
||||
F: arch/powerpc/cpu/mpc86xx/
|
||||
|
||||
4
Makefile
4
Makefile
@@ -5,7 +5,7 @@
|
||||
VERSION = 2016
|
||||
PATCHLEVEL = 01
|
||||
SUBLEVEL =
|
||||
EXTRAVERSION = -rc4
|
||||
EXTRAVERSION =
|
||||
NAME =
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@@ -1136,7 +1136,7 @@ spl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE
|
||||
$(call if_changed,mkimage)
|
||||
|
||||
ifeq ($(ARCH),arm)
|
||||
ifdef CONFIG_DM
|
||||
ifdef CONFIG_OF_CONTROL
|
||||
UBOOT_BINLOAD := u-boot-dtb.img
|
||||
else
|
||||
UBOOT_BINLOAD := u-boot.img
|
||||
|
||||
128
README
128
README
@@ -34,12 +34,14 @@ In general, all boards for which a configuration option exists in the
|
||||
Makefile have been tested to some extent and can be considered
|
||||
"working". In fact, many of them are used in production systems.
|
||||
|
||||
In case of problems see the CHANGELOG and CREDITS files to find out
|
||||
who contributed the specific port. The boards.cfg file lists board
|
||||
maintainers.
|
||||
In case of problems see the CHANGELOG file to find out who contributed
|
||||
the specific port. In addition, there are various MAINTAINERS files
|
||||
scattered throughout the U-Boot source identifying the people or
|
||||
companies responsible for various boards and subsystems.
|
||||
|
||||
Note: There is no CHANGELOG file in the actual U-Boot source tree;
|
||||
it can be created dynamically from the Git log using:
|
||||
Note: As of August, 2010, there is no longer a CHANGELOG file in the
|
||||
actual U-Boot source tree; however, it can be created dynamically
|
||||
from the Git log using:
|
||||
|
||||
make CHANGELOG
|
||||
|
||||
@@ -48,7 +50,7 @@ Where to get help:
|
||||
==================
|
||||
|
||||
In case you have questions about, problems with or contributions for
|
||||
U-Boot you should send a message to the U-Boot mailing list at
|
||||
U-Boot, you should send a message to the U-Boot mailing list at
|
||||
<u-boot@lists.denx.de>. There is also an archive of previous traffic
|
||||
on the mailing list - please search the archive before asking FAQ's.
|
||||
Please see http://lists.denx.de/pipermail/u-boot and
|
||||
@@ -58,7 +60,7 @@ http://dir.gmane.org/gmane.comp.boot-loaders.u-boot
|
||||
Where to get source code:
|
||||
=========================
|
||||
|
||||
The U-Boot source code is maintained in the git repository at
|
||||
The U-Boot source code is maintained in the Git repository at
|
||||
git://www.denx.de/git/u-boot.git ; you can browse it online at
|
||||
http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary
|
||||
|
||||
@@ -133,79 +135,24 @@ Directory Hierarchy:
|
||||
|
||||
/arch Architecture specific files
|
||||
/arc Files generic to ARC architecture
|
||||
/cpu CPU specific files
|
||||
/arc700 Files specific to ARC 700 CPUs
|
||||
/lib Architecture specific library files
|
||||
/arm Files generic to ARM architecture
|
||||
/cpu CPU specific files
|
||||
/arm720t Files specific to ARM 720 CPUs
|
||||
/arm920t Files specific to ARM 920 CPUs
|
||||
/at91 Files specific to Atmel AT91RM9200 CPU
|
||||
/imx Files specific to Freescale MC9328 i.MX CPUs
|
||||
/s3c24x0 Files specific to Samsung S3C24X0 CPUs
|
||||
/arm926ejs Files specific to ARM 926 CPUs
|
||||
/arm1136 Files specific to ARM 1136 CPUs
|
||||
/pxa Files specific to Intel XScale PXA CPUs
|
||||
/sa1100 Files specific to Intel StrongARM SA1100 CPUs
|
||||
/lib Architecture specific library files
|
||||
/avr32 Files generic to AVR32 architecture
|
||||
/cpu CPU specific files
|
||||
/lib Architecture specific library files
|
||||
/blackfin Files generic to Analog Devices Blackfin architecture
|
||||
/cpu CPU specific files
|
||||
/lib Architecture specific library files
|
||||
/m68k Files generic to m68k architecture
|
||||
/cpu CPU specific files
|
||||
/mcf52x2 Files specific to Freescale ColdFire MCF52x2 CPUs
|
||||
/mcf5227x Files specific to Freescale ColdFire MCF5227x CPUs
|
||||
/mcf532x Files specific to Freescale ColdFire MCF5329 CPUs
|
||||
/mcf5445x Files specific to Freescale ColdFire MCF5445x CPUs
|
||||
/mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs
|
||||
/lib Architecture specific library files
|
||||
/microblaze Files generic to microblaze architecture
|
||||
/cpu CPU specific files
|
||||
/lib Architecture specific library files
|
||||
/mips Files generic to MIPS architecture
|
||||
/cpu CPU specific files
|
||||
/mips32 Files specific to MIPS32 CPUs
|
||||
/mips64 Files specific to MIPS64 CPUs
|
||||
/lib Architecture specific library files
|
||||
/nds32 Files generic to NDS32 architecture
|
||||
/cpu CPU specific files
|
||||
/n1213 Files specific to Andes Technology N1213 CPUs
|
||||
/lib Architecture specific library files
|
||||
/nios2 Files generic to Altera NIOS2 architecture
|
||||
/cpu CPU specific files
|
||||
/lib Architecture specific library files
|
||||
/openrisc Files generic to OpenRISC architecture
|
||||
/cpu CPU specific files
|
||||
/lib Architecture specific library files
|
||||
/powerpc Files generic to PowerPC architecture
|
||||
/cpu CPU specific files
|
||||
/mpc5xx Files specific to Freescale MPC5xx CPUs
|
||||
/mpc5xxx Files specific to Freescale MPC5xxx CPUs
|
||||
/mpc8xx Files specific to Freescale MPC8xx CPUs
|
||||
/mpc8260 Files specific to Freescale MPC8260 CPUs
|
||||
/mpc85xx Files specific to Freescale MPC85xx CPUs
|
||||
/ppc4xx Files specific to AMCC PowerPC 4xx CPUs
|
||||
/lib Architecture specific library files
|
||||
/sandbox Files generic to HW-independent "sandbox"
|
||||
/sh Files generic to SH architecture
|
||||
/cpu CPU specific files
|
||||
/sh2 Files specific to sh2 CPUs
|
||||
/sh3 Files specific to sh3 CPUs
|
||||
/sh4 Files specific to sh4 CPUs
|
||||
/lib Architecture specific library files
|
||||
/sparc Files generic to SPARC architecture
|
||||
/cpu CPU specific files
|
||||
/leon2 Files specific to Gaisler LEON2 SPARC CPU
|
||||
/leon3 Files specific to Gaisler LEON3 SPARC CPU
|
||||
/lib Architecture specific library files
|
||||
/x86 Files generic to x86 architecture
|
||||
/cpu CPU specific files
|
||||
/lib Architecture specific library files
|
||||
/api Machine/arch independent API for external apps
|
||||
/board Board dependent files
|
||||
/common Misc architecture independent functions
|
||||
/configs Board default configuration files
|
||||
/disk Code for disk drive partition handling
|
||||
/doc Documentation (don't expect too much)
|
||||
/drivers Commonly used device drivers
|
||||
@@ -213,13 +160,12 @@ Directory Hierarchy:
|
||||
/examples Example code for standalone applications, etc.
|
||||
/fs Filesystem code (cramfs, ext2, jffs2, etc.)
|
||||
/include Header Files
|
||||
/lib Files generic to all architectures
|
||||
/libfdt Library files to support flattened device trees
|
||||
/lzma Library files to support LZMA decompression
|
||||
/lzo Library files to support LZO decompression
|
||||
/lib Library routines generic to all architectures
|
||||
/Licenses Various license files
|
||||
/net Networking code
|
||||
/post Power On Self Test
|
||||
/spl Secondary Program Loader framework
|
||||
/scripts Various build scripts and Makefiles
|
||||
/test Various unit test files
|
||||
/tools Tools to build S-Record or U-Boot images, etc.
|
||||
|
||||
Software Configuration:
|
||||
@@ -239,11 +185,11 @@ There are two classes of configuration variables:
|
||||
you don't know what you're doing; they have names beginning with
|
||||
"CONFIG_SYS_".
|
||||
|
||||
Later we will add a configuration tool - probably similar to or even
|
||||
identical to what's used for the Linux kernel. Right now, we have to
|
||||
do the configuration by hand, which means creating some symbolic
|
||||
links and editing some configuration files. We use the TQM8xxL boards
|
||||
as an example here.
|
||||
Previously, all configuration was done by hand, which involved creating
|
||||
symbolic links and editing configuration files manually. More recently,
|
||||
U-Boot has added the Kbuild infrastructure used by the Linux kernel,
|
||||
allowing you to use the "make menuconfig" command to configure your
|
||||
build.
|
||||
|
||||
|
||||
Selection of Processor Architecture and Board Type:
|
||||
@@ -257,10 +203,9 @@ Example: For a TQM823L module type:
|
||||
cd u-boot
|
||||
make TQM823L_defconfig
|
||||
|
||||
For the Cogent platform, you need to specify the CPU type as well;
|
||||
e.g. "make cogent_mpc8xx_defconfig". And also configure the cogent
|
||||
directory according to the instructions in cogent/README.
|
||||
|
||||
Note: If you're looking for the default configuration file for a board
|
||||
you're sure used to be there but is now missing, check the file
|
||||
doc/README.scrapyard for a list of no longer supported boards.
|
||||
|
||||
Sandbox Environment:
|
||||
--------------------
|
||||
@@ -277,13 +222,25 @@ Board Initialisation Flow:
|
||||
--------------------------
|
||||
|
||||
This is the intended start-up flow for boards. This should apply for both
|
||||
SPL and U-Boot proper (i.e. they both follow the same rules). At present SPL
|
||||
mostly uses a separate code path, but the funtion names and roles of each
|
||||
function are the same. Some boards or architectures may not conform to this.
|
||||
At least most ARM boards which use CONFIG_SPL_FRAMEWORK conform to this.
|
||||
SPL and U-Boot proper (i.e. they both follow the same rules).
|
||||
|
||||
Execution starts with start.S with three functions called during init after
|
||||
that. The purpose and limitations of each is described below.
|
||||
Note: "SPL" stands for "Secondary Program Loader," which is explained in
|
||||
more detail later in this file.
|
||||
|
||||
At present, SPL mostly uses a separate code path, but the function names
|
||||
and roles of each function are the same. Some boards or architectures
|
||||
may not conform to this. At least most ARM boards which use
|
||||
CONFIG_SPL_FRAMEWORK conform to this.
|
||||
|
||||
Execution typically starts with an architecture-specific (and possibly
|
||||
CPU-specific) start.S file, such as:
|
||||
|
||||
- arch/arm/cpu/armv7/start.S
|
||||
- arch/powerpc/cpu/mpc83xx/start.S
|
||||
- arch/mips/cpu/start.S
|
||||
|
||||
and so on. From there, three functions are called; the purpose and
|
||||
limitations of each of these functions are described below.
|
||||
|
||||
lowlevel_init():
|
||||
- purpose: essential init to permit execution to reach board_init_f()
|
||||
@@ -6630,7 +6587,8 @@ it:
|
||||
|
||||
* A CHANGELOG entry as plaintext (separate from the patch)
|
||||
|
||||
* For major contributions, your entry to the CREDITS file
|
||||
* For major contributions, add a MAINTAINERS file with your
|
||||
information and associated file and directory references.
|
||||
|
||||
* When you add support for a new board, don't forget to add a
|
||||
maintainer e-mail address to the boards.cfg file, too.
|
||||
|
||||
@@ -64,8 +64,31 @@ U_BOOT_DEVICES(am33xx_uarts) = {
|
||||
# endif
|
||||
# endif
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DM_GPIO
|
||||
static const struct omap_gpio_platdata am33xx_gpio[] = {
|
||||
{ 0, AM33XX_GPIO0_BASE },
|
||||
{ 1, AM33XX_GPIO1_BASE },
|
||||
{ 2, AM33XX_GPIO2_BASE },
|
||||
{ 3, AM33XX_GPIO3_BASE },
|
||||
#ifdef CONFIG_AM43XX
|
||||
{ 4, AM33XX_GPIO4_BASE },
|
||||
{ 5, AM33XX_GPIO5_BASE },
|
||||
#endif
|
||||
};
|
||||
|
||||
U_BOOT_DEVICES(am33xx_gpios) = {
|
||||
{ "gpio_omap", &am33xx_gpio[0] },
|
||||
{ "gpio_omap", &am33xx_gpio[1] },
|
||||
{ "gpio_omap", &am33xx_gpio[2] },
|
||||
{ "gpio_omap", &am33xx_gpio[3] },
|
||||
#ifdef CONFIG_AM43XX
|
||||
{ "gpio_omap", &am33xx_gpio[4] },
|
||||
{ "gpio_omap", &am33xx_gpio[5] },
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DM_GPIO
|
||||
static const struct gpio_bank gpio_bank_am33xx[] = {
|
||||
|
||||
@@ -91,6 +91,7 @@ _start:
|
||||
li r5,GD_SIZE /* parameter 3: count */
|
||||
bl memset
|
||||
|
||||
li r3, 0 /* parameter 1: bootflag */
|
||||
bl board_init_f /* run 1st part of board init code (in Flash)*/
|
||||
/* NOTREACHED - board_init_f() does not return */
|
||||
#else
|
||||
@@ -169,6 +170,7 @@ lowboot_reentry:
|
||||
/* r3: IMMR */
|
||||
bl cpu_init_f /* run low-level CPU init code (in Flash)*/
|
||||
|
||||
li r3, 0 /* parameter 1: bootflag */
|
||||
bl board_init_f /* run 1st part of board init code (in Flash)*/
|
||||
|
||||
/* NOTREACHED - board_init_f() does not return */
|
||||
|
||||
@@ -37,7 +37,7 @@ void ecc_print_status(void)
|
||||
printf("Memory Error Disable:\n");
|
||||
printf(" Multiple-Bit Error Disable: %d\n",
|
||||
(ddr->err_disable & ECC_ERROR_DISABLE_MBED) ? 1 : 0);
|
||||
printf(" Sinle-Bit Error Disable: %d\n",
|
||||
printf(" Single-Bit Error Disable: %d\n",
|
||||
(ddr->err_disable & ECC_ERROR_DISABLE_SBED) ? 1 : 0);
|
||||
printf(" Memory Select Error Disable: %d\n\n",
|
||||
(ddr->err_disable & ECC_ERROR_DISABLE_MSED) ? 1 : 0);
|
||||
@@ -273,7 +273,7 @@ int do_ecc(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
|
||||
count = simple_strtoul(argv[3], NULL, 16);
|
||||
|
||||
if ((u32) addr % 8) {
|
||||
printf("Address not alligned on "
|
||||
printf("Address not aligned on "
|
||||
"double word boundary\n");
|
||||
return 1;
|
||||
}
|
||||
@@ -312,7 +312,7 @@ int do_ecc(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
|
||||
count = simple_strtoul(argv[3], NULL, 16);
|
||||
|
||||
if ((u32) addr % 8) {
|
||||
printf("Address not alligned on "
|
||||
printf("Address not aligned on "
|
||||
"double word boundary\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ void mpc83xx_pci_init(int num_buses, struct pci_region **reg)
|
||||
int i;
|
||||
|
||||
if (num_buses > MAX_BUSES) {
|
||||
printf("%d PCI buses requsted, %d supported\n",
|
||||
printf("%d PCI buses requested, %d supported\n",
|
||||
num_buses, MAX_BUSES);
|
||||
|
||||
num_buses = MAX_BUSES;
|
||||
|
||||
@@ -23,7 +23,7 @@ void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign)
|
||||
volatile immap_t *im = (volatile immap_t *)CONFIG_SYS_IMMR;
|
||||
volatile qepio83xx_t *par_io = (volatile qepio83xx_t *)&im->qepio;
|
||||
|
||||
/* Caculate pin location and 2bit mask and dir */
|
||||
/* Calculate pin location and 2bit mask and dir */
|
||||
pin_2bit_mask = (u32)(0x3 << (NUM_OF_PINS-(pin%(NUM_OF_PINS/2)+1)*2));
|
||||
pin_2bit_dir = (u32)(dir << (NUM_OF_PINS-(pin%(NUM_OF_PINS/2)+1)*2));
|
||||
|
||||
|
||||
@@ -599,7 +599,7 @@ long int spd_sdram()
|
||||
|
||||
/*
|
||||
* Empirically set ~MCAS-to-preamble override for DDR 2.
|
||||
* Your milage will vary.
|
||||
* Your mileage will vary.
|
||||
*/
|
||||
cpo = 0;
|
||||
if (spd.mem_type == SPD_MEMTYPE_DDR2) {
|
||||
@@ -843,7 +843,7 @@ long int spd_sdram()
|
||||
|
||||
#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
|
||||
/*
|
||||
* Use timebase counter, get_timer() is not availabe
|
||||
* Use timebase counter, get_timer() is not available
|
||||
* at this point of initialization yet.
|
||||
*/
|
||||
static __inline__ unsigned long get_tbms (void)
|
||||
|
||||
@@ -170,7 +170,7 @@ int get_clocks(void)
|
||||
tsec1_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_TSEC1CM value */
|
||||
/* unknown SCCR_TSEC1CM value */
|
||||
return -2;
|
||||
}
|
||||
#endif
|
||||
@@ -191,7 +191,7 @@ int get_clocks(void)
|
||||
usbdr_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_USBDRCM value */
|
||||
/* unknown SCCR_USBDRCM value */
|
||||
return -3;
|
||||
}
|
||||
#endif
|
||||
@@ -212,7 +212,7 @@ int get_clocks(void)
|
||||
tsec2_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_TSEC2CM value */
|
||||
/* unknown SCCR_TSEC2CM value */
|
||||
return -4;
|
||||
}
|
||||
#elif defined(CONFIG_MPC8313)
|
||||
@@ -239,7 +239,7 @@ int get_clocks(void)
|
||||
usbmph_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_USBMPHCM value */
|
||||
/* unknown SCCR_USBMPHCM value */
|
||||
return -5;
|
||||
}
|
||||
|
||||
@@ -266,7 +266,7 @@ int get_clocks(void)
|
||||
enc_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_ENCCM value */
|
||||
/* unknown SCCR_ENCCM value */
|
||||
return -7;
|
||||
}
|
||||
#endif
|
||||
@@ -286,7 +286,7 @@ int get_clocks(void)
|
||||
sdhc_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_SDHCCM value */
|
||||
/* unknown SCCR_SDHCCM value */
|
||||
return -8;
|
||||
}
|
||||
#endif
|
||||
@@ -305,7 +305,7 @@ int get_clocks(void)
|
||||
tdm_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_TDMCM value */
|
||||
/* unknown SCCR_TDMCM value */
|
||||
return -8;
|
||||
}
|
||||
#endif
|
||||
@@ -345,7 +345,7 @@ int get_clocks(void)
|
||||
pciexp1_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_PCIEXP1CM value */
|
||||
/* unknown SCCR_PCIEXP1CM value */
|
||||
return -9;
|
||||
}
|
||||
|
||||
@@ -363,7 +363,7 @@ int get_clocks(void)
|
||||
pciexp2_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_PCIEXP2CM value */
|
||||
/* unknown SCCR_PCIEXP2CM value */
|
||||
return -10;
|
||||
}
|
||||
#endif
|
||||
@@ -383,7 +383,7 @@ int get_clocks(void)
|
||||
sata_clk = csb_clk / 3;
|
||||
break;
|
||||
default:
|
||||
/* unkown SCCR_SATACM value */
|
||||
/* unknown SCCR_SATA1CM value */
|
||||
return -11;
|
||||
}
|
||||
#endif
|
||||
@@ -413,7 +413,7 @@ int get_clocks(void)
|
||||
|
||||
corecnf_tab_index = ((corepll & 0x1F) << 2) | ((corepll & 0x60) >> 5);
|
||||
if (corecnf_tab_index > (sizeof(corecnf_tab) / sizeof(corecnf_t))) {
|
||||
/* corecnf_tab_index is too high, possibly worng value */
|
||||
/* corecnf_tab_index is too high, possibly wrong value */
|
||||
return -11;
|
||||
}
|
||||
switch (corecnf_tab[corecnf_tab_index].core_csb_ratio) {
|
||||
@@ -435,7 +435,7 @@ int get_clocks(void)
|
||||
core_clk = 3 * csb_clk;
|
||||
break;
|
||||
default:
|
||||
/* unkown core to csb ratio */
|
||||
/* unknown core to csb ratio */
|
||||
return -13;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ void cpu_init_f (volatile immap_t * im)
|
||||
(CONFIG_SYS_SPCR_OPT << SPCR_OPT_SHIFT);
|
||||
#endif
|
||||
|
||||
/* Enable Time Base & Decrimenter (so we will have udelay()) */
|
||||
/* Enable Time Base & Decrementer (so we will have udelay()) */
|
||||
im->sysconf.spcr |= SPCR_TBEN;
|
||||
|
||||
/* DDR control driver register */
|
||||
|
||||
@@ -279,6 +279,11 @@
|
||||
0x38 8>;
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "sandbox,timer";
|
||||
clock-frequency = <1000000>;
|
||||
};
|
||||
|
||||
uart0: serial {
|
||||
compatible = "sandbox,serial";
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
@@ -25,11 +25,15 @@ host PC (/tftpboot , for example).
|
||||
|
||||
=> sf probe
|
||||
|
||||
=> setenv serverip <server_ip_address>
|
||||
|
||||
=> setenv ipaddr <board_ip_address>
|
||||
|
||||
=> tftp 0x12000000 SPL
|
||||
|
||||
=> sf erase 0x0 0x10000
|
||||
|
||||
=> sf write 0x12000000 0x400 0x100
|
||||
=> sf write 0x12000000 0x400 0x10000
|
||||
|
||||
=> tftp 0x12000000 u-boot.img
|
||||
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
int pfuze_mode_init(struct pmic *p, u32 mode)
|
||||
{
|
||||
unsigned char offset, i, switch_num;
|
||||
u32 id, ret;
|
||||
u32 id;
|
||||
int ret;
|
||||
|
||||
pmic_reg_read(p, PFUZE100_DEVICEID, &id);
|
||||
id = id & 0xf;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
LS2080A BOARD
|
||||
M: York Sun <yorksun@freescale.com>
|
||||
M: York Sun <york.sun@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/ls2080a/
|
||||
F: include/configs/ls2080a_emu.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MPC8572DS BOARD
|
||||
M: York Sun <yorksun@freescale.com>
|
||||
M: York Sun <york.sun@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mpc8572ds/
|
||||
F: include/configs/MPC8572DS.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX25PDK BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx25pdk/
|
||||
F: include/configs/mx25pdk.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX28EVK BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx28evk/
|
||||
F: include/configs/mx28evk.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX53ARD BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx53ard/
|
||||
F: include/configs/mx53ard.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX53SMD BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx53smd/
|
||||
F: include/configs/mx53smd.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX6QSABREAUTO BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
M: Peng Fan <Peng.Fan@freescale.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx6qsabreauto/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX6SABRESD BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx6sabresd/
|
||||
F: include/configs/mx6sabresd.h
|
||||
|
||||
@@ -94,8 +94,9 @@ static void setup_iomux_enet(void)
|
||||
|
||||
/* Reset AR8031 PHY */
|
||||
gpio_direction_output(IMX_GPIO_NR(1, 25) , 0);
|
||||
udelay(500);
|
||||
mdelay(10);
|
||||
gpio_set_value(IMX_GPIO_NR(1, 25), 1);
|
||||
udelay(100);
|
||||
}
|
||||
|
||||
static iomux_v3_cfg_t const usdhc2_pads[] = {
|
||||
@@ -340,39 +341,6 @@ int board_mmc_init(bd_t *bis)
|
||||
}
|
||||
#endif
|
||||
|
||||
int mx6_rgmii_rework(struct phy_device *phydev)
|
||||
{
|
||||
unsigned short val;
|
||||
|
||||
/* To enable AR8031 ouput a 125MHz clk from CLK_25M */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
|
||||
|
||||
val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
|
||||
val &= 0xffe3;
|
||||
val |= 0x18;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, val);
|
||||
|
||||
/* introduce tx clock delay */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x5);
|
||||
val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
|
||||
val |= 0x0100;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
mx6_rgmii_rework(phydev);
|
||||
|
||||
if (phydev->drv->config)
|
||||
phydev->drv->config(phydev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_VIDEO_IPUV3)
|
||||
static void disable_lvds(struct display_info_t const *dev)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX6SLEVK BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
M: Peng Fan <Peng.Fan@freescale.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx6slevk/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX6SXSABRESD BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/mx6sxsabresd/
|
||||
F: include/configs/mx6sxsabresd.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
MX6CUBOXI BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/solidrun/mx6cuboxi/
|
||||
F: include/configs/mx6cuboxi.h
|
||||
|
||||
@@ -143,8 +143,9 @@ static void setup_iomux_enet(void)
|
||||
SETUP_IOMUX_PADS(enet_pads);
|
||||
|
||||
gpio_direction_output(ETH_PHY_RESET, 0);
|
||||
mdelay(2);
|
||||
mdelay(10);
|
||||
gpio_set_value(ETH_PHY_RESET, 1);
|
||||
udelay(100);
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
@@ -594,10 +595,6 @@ static void gpr_init(void)
|
||||
writel(0x007F007F, &iomux->gpr[7]);
|
||||
}
|
||||
|
||||
/*
|
||||
* This section requires the differentiation between Solidrun mx6 boards, but
|
||||
* for now, it will configure only for the mx6dual hummingboard version.
|
||||
*/
|
||||
static void spl_dram_init(int width)
|
||||
{
|
||||
struct mx6_ddr_sysinfo sysinfo = {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
UDOO BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/udoo/
|
||||
F: include/configs/udoo.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
WANDBOARD BOARD
|
||||
M: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
M: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
S: Maintained
|
||||
F: board/wandboard/
|
||||
F: include/configs/wandboard.h
|
||||
|
||||
@@ -121,8 +121,9 @@ static void setup_iomux_enet(void)
|
||||
|
||||
/* Reset AR8031 PHY */
|
||||
gpio_direction_output(ETH_PHY_RESET, 0);
|
||||
udelay(500);
|
||||
mdelay(10);
|
||||
gpio_set_value(ETH_PHY_RESET, 1);
|
||||
udelay(100);
|
||||
}
|
||||
|
||||
static struct fsl_esdhc_cfg usdhc_cfg[2] = {
|
||||
@@ -187,39 +188,6 @@ int board_mmc_init(bd_t *bis)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mx6_rgmii_rework(struct phy_device *phydev)
|
||||
{
|
||||
unsigned short val;
|
||||
|
||||
/* To enable AR8031 ouput a 125MHz clk from CLK_25M */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
|
||||
|
||||
val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
|
||||
val &= 0xffe3;
|
||||
val |= 0x18;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, val);
|
||||
|
||||
/* introduce tx clock delay */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x5);
|
||||
val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
|
||||
val |= 0x0100;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
mx6_rgmii_rework(phydev);
|
||||
|
||||
if (phydev->drv->config)
|
||||
phydev->drv->config(phydev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_VIDEO_IPUV3)
|
||||
struct i2c_pads_info mx6q_i2c2_pad_info = {
|
||||
.scl = {
|
||||
|
||||
@@ -931,7 +931,7 @@ static ulong mem_test_alt(vu_long *buf, ulong start_addr, ulong end_addr,
|
||||
addr[offset] = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return errs;
|
||||
}
|
||||
|
||||
static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr,
|
||||
@@ -990,7 +990,7 @@ static ulong mem_test_quick(vu_long *buf, ulong start_addr, ulong end_addr,
|
||||
val += incr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return errs;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -952,8 +952,7 @@ void fdt_del_node_and_alias(void *blob, const char *alias)
|
||||
/* Max address size we deal with */
|
||||
#define OF_MAX_ADDR_CELLS 4
|
||||
#define OF_BAD_ADDR FDT_ADDR_T_NONE
|
||||
#define OF_CHECK_COUNTS(na, ns) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS && \
|
||||
(ns) > 0)
|
||||
#define OF_CHECK_COUNTS(na) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS)
|
||||
|
||||
/* Debug utility */
|
||||
#ifdef DEBUG
|
||||
@@ -1121,7 +1120,7 @@ static u64 __of_translate_address(void *blob, int node_offset, const fdt32_t *in
|
||||
|
||||
/* Cound address cells & copy address locally */
|
||||
bus->count_cells(blob, parent, &na, &ns);
|
||||
if (!OF_CHECK_COUNTS(na, ns)) {
|
||||
if (!OF_CHECK_COUNTS(na)) {
|
||||
printf("%s: Bad cell count for %s\n", __FUNCTION__,
|
||||
fdt_get_name(blob, node_offset, NULL));
|
||||
goto bail;
|
||||
@@ -1148,7 +1147,7 @@ static u64 __of_translate_address(void *blob, int node_offset, const fdt32_t *in
|
||||
/* Get new parent bus and counts */
|
||||
pbus = &of_busses[0];
|
||||
pbus->count_cells(blob, parent, &pna, &pns);
|
||||
if (!OF_CHECK_COUNTS(pna, pns)) {
|
||||
if (!OF_CHECK_COUNTS(pna)) {
|
||||
printf("%s: Bad cell count for %s\n", __FUNCTION__,
|
||||
fdt_get_name(blob, node_offset, NULL));
|
||||
break;
|
||||
|
||||
@@ -611,6 +611,41 @@ static int usb_kbd_probe(struct udevice *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int usb_kbd_remove(struct udevice *dev)
|
||||
{
|
||||
struct usb_device *udev = dev_get_parent_priv(dev);
|
||||
struct usb_kbd_pdata *data;
|
||||
struct stdio_dev *sdev;
|
||||
int ret;
|
||||
|
||||
sdev = stdio_get_by_name(DEVNAME);
|
||||
if (!sdev) {
|
||||
ret = -ENXIO;
|
||||
goto err;
|
||||
}
|
||||
data = udev->privptr;
|
||||
if (stdio_deregister_dev(sdev, true)) {
|
||||
ret = -EPERM;
|
||||
goto err;
|
||||
}
|
||||
#ifdef CONFIG_CONSOLE_MUX
|
||||
if (iomux_doenv(stdin, getenv("stdin"))) {
|
||||
ret = -ENOLINK;
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE
|
||||
destroy_int_queue(udev, data->intq);
|
||||
#endif
|
||||
free(data->new);
|
||||
free(data);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
printf("%s: warning, ret=%d", __func__, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct udevice_id usb_kbd_ids[] = {
|
||||
{ .compatible = "usb-keyboard" },
|
||||
{ }
|
||||
@@ -621,6 +656,7 @@ U_BOOT_DRIVER(usb_kbd) = {
|
||||
.id = UCLASS_KEYBOARD,
|
||||
.of_match = usb_kbd_ids,
|
||||
.probe = usb_kbd_probe,
|
||||
.remove = usb_kbd_remove,
|
||||
};
|
||||
|
||||
static const struct usb_device_id kbd_id_table[] = {
|
||||
|
||||
@@ -65,7 +65,7 @@ static const unsigned char us_direction[256/8] = {
|
||||
static ccb usb_ccb __attribute__((aligned(ARCH_DMA_MINALIGN)));
|
||||
static __u32 CBWTag;
|
||||
|
||||
#define USB_MAX_STOR_DEV 5
|
||||
#define USB_MAX_STOR_DEV 7
|
||||
static int usb_max_devs; /* number of highest available usb device */
|
||||
|
||||
static block_dev_desc_t usb_dev_desc[USB_MAX_STOR_DEV];
|
||||
|
||||
@@ -27,7 +27,9 @@ CONFIG_RESET=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_ROCKCHIP_DWMMC=y
|
||||
CONFIG_PINCTRL=y
|
||||
# CONFIG_PINCTRL_FULL is not set
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
# CONFIG_SPL_PINCTRL_FULL is not set
|
||||
CONFIG_ROCKCHIP_PINCTRL=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_PMIC_ACT8846=y
|
||||
@@ -41,5 +43,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_DEBUG_UART_SHIFT=2
|
||||
CONFIG_SYS_NS16550=y
|
||||
CONFIG_USE_PRIVATE_LIBGCC=y
|
||||
CONFIG_USE_TINY_PRINTF=y
|
||||
CONFIG_CMD_DHRYSTONE=y
|
||||
CONFIG_ERRNO_STR=y
|
||||
CONFIG_ROCKCHIP_SPI=y
|
||||
|
||||
@@ -135,9 +135,10 @@ Booting from SPI
|
||||
|
||||
To write an image that boots from SPI flash (e.g. for the Haier Chromebook):
|
||||
|
||||
./chromebook_jerry/tools/mkimage -n rk3036 -T rkspi -d chromebook_jerry/spl/u-boot-spl-dtb.bin out
|
||||
dd if=spl.bin of=out.bin bs=128K conv=sync
|
||||
cat chromebook_jerry/u-boot-dtb.img out.bin
|
||||
./chromebook_jerry/tools/mkimage -n rk3288 -T rkspi \
|
||||
-d chromebook_jerry/spl/u-boot-spl-dtb.bin spl.bin && \
|
||||
dd if=spl.bin of=spl-out.bin bs=128K conv=sync && \
|
||||
cat spl-out.bin chromebook_jerry/u-boot-dtb.img >out.bin && \
|
||||
dd if=out.bin of=out.bin.pad bs=4M conv=sync
|
||||
|
||||
This converts the SPL image to the required SPI format by adding the Rockchip
|
||||
|
||||
@@ -31,16 +31,14 @@
|
||||
|
||||
#if defined(CONFIG_MPC8260)
|
||||
#include <asm/cpm_8260.h>
|
||||
|
||||
#define CONFIG_SYS_BOOTCOUNT_ADDR (CONFIG_SYS_IMMR + CPM_BOOTCOUNT_ADDR)
|
||||
#endif /* defined(CONFIG_MPC8260) */
|
||||
|
||||
#if defined(CONFIG_QE)
|
||||
#include <linux/immap_qe.h>
|
||||
|
||||
#define CONFIG_SYS_BOOTCOUNT_ADDR (CONFIG_SYS_IMMR + 0x110000 + \
|
||||
QE_MURAM_SIZE - 2 * sizeof(u32))
|
||||
#endif /* defined(CONFIG_MPC8360) */
|
||||
#endif /* defined(CONFIG_QE) */
|
||||
|
||||
#if defined(CONFIG_4xx)
|
||||
#define CONFIG_SYS_BOOTCOUNT_ADDR (CONFIG_SYS_OCM_DATA_ADDR + \
|
||||
@@ -60,7 +58,7 @@ __weak void bootcount_store(ulong a)
|
||||
#else
|
||||
raw_bootcount_store(reg, a);
|
||||
raw_bootcount_store(reg + 4, BOOTCOUNT_MAGIC);
|
||||
#endif
|
||||
#endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD */
|
||||
}
|
||||
|
||||
__weak ulong bootcount_load(void)
|
||||
@@ -79,6 +77,6 @@ __weak ulong bootcount_load(void)
|
||||
return 0;
|
||||
else
|
||||
return raw_bootcount_load(reg);
|
||||
#endif
|
||||
#endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD) */
|
||||
}
|
||||
#endif
|
||||
#endif /* defined(CONFIG_SYS_BOOTCOUNT_ADDR) */
|
||||
|
||||
@@ -114,3 +114,18 @@ int gpio_free(unsigned gpio)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int name_to_gpio(const char *name)
|
||||
{
|
||||
unsigned bank, pin;
|
||||
char *end;
|
||||
|
||||
bank = simple_strtoul(name, &end, 10);
|
||||
|
||||
if (!*end || *end != ':')
|
||||
return bank;
|
||||
|
||||
pin = simple_strtoul(end + 1, NULL, 10);
|
||||
|
||||
return (bank << MXS_PAD_BANK_SHIFT) | (pin << MXS_PAD_PIN_SHIFT);
|
||||
}
|
||||
|
||||
@@ -767,8 +767,8 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len)
|
||||
return ret;
|
||||
|
||||
/* Cannot unlock; would unlock larger region than requested */
|
||||
if (stm_is_locked_sr(flash, status_old, ofs - flash->erase_size,
|
||||
flash->erase_size))
|
||||
if (stm_is_locked_sr(flash, ofs - flash->erase_size, flash->erase_size,
|
||||
status_old))
|
||||
return -EINVAL;
|
||||
/*
|
||||
* Need largest pow such that:
|
||||
|
||||
@@ -51,7 +51,7 @@ static struct phy_driver AR8031_driver = {
|
||||
.uid = 0x4dd074,
|
||||
.mask = 0xffffffef,
|
||||
.features = PHY_GBIT_FEATURES,
|
||||
.config = ar8021_config,
|
||||
.config = ar8035_config,
|
||||
.startup = genphy_startup,
|
||||
.shutdown = genphy_shutdown,
|
||||
};
|
||||
|
||||
@@ -157,7 +157,7 @@ static int sb_eth_recv(struct udevice *dev, int flags, uchar **packetp)
|
||||
struct eth_sandbox_priv *priv = dev_get_priv(dev);
|
||||
|
||||
if (skip_timeout) {
|
||||
sandbox_timer_add_offset(10000UL);
|
||||
sandbox_timer_add_offset(11000UL);
|
||||
skip_timeout = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -381,7 +381,7 @@ static int imx_pcie_read_config(struct pci_controller *hose, pci_dev_t d,
|
||||
ret = imx_pcie_addr_valid(d);
|
||||
if (ret) {
|
||||
*val = 0xffffffff;
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
va_address = get_bus_address(d, where);
|
||||
|
||||
@@ -314,7 +314,7 @@ static int ls_pcie_read_config(struct pci_controller *hose, pci_dev_t d,
|
||||
|
||||
if (ls_pcie_addr_valid(hose, d)) {
|
||||
*val = 0xffffffff;
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (PCI_BUS(d) == hose->first_busno) {
|
||||
|
||||
@@ -192,7 +192,7 @@ U_BOOT_DRIVER(serial_zynq) = {
|
||||
};
|
||||
|
||||
#ifdef CONFIG_DEBUG_UART_ZYNQ
|
||||
void _debug_uart_init(void)
|
||||
static inline void _debug_uart_init(void)
|
||||
{
|
||||
struct uart_zynq *regs = (struct uart_zynq *)CONFIG_DEBUG_UART_BASE;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
#define TX_BUFFER_SIZE 0x40
|
||||
#endif
|
||||
|
||||
#define OFFSET_BITS_MASK GENMASK(24, 0)
|
||||
#define OFFSET_BITS_MASK GENMASK(23, 0)
|
||||
|
||||
#define FLASH_STATUS_WEL 0x02
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ static int read_cpu_temperature(struct udevice *dev)
|
||||
#elif defined(CONFIG_MX7)
|
||||
static int read_cpu_temperature(struct udevice *dev)
|
||||
{
|
||||
unsigned int reg, tmp, start;
|
||||
unsigned int reg, tmp;
|
||||
unsigned int raw_25c, te1;
|
||||
int temperature;
|
||||
unsigned int *priv = dev_get_priv(dev);
|
||||
@@ -169,18 +169,25 @@ static int read_cpu_temperature(struct udevice *dev)
|
||||
writel(TEMPMON_HW_ANADIG_TEMPSENSE1_FINISHED_MASK, &ccm_anatop->tempsense1_clr);
|
||||
writel(TEMPMON_HW_ANADIG_TEMPSENSE1_MEASURE_TEMP_MASK, &ccm_anatop->tempsense1_set);
|
||||
|
||||
start = get_timer(0);
|
||||
/* Wait max 100ms */
|
||||
do {
|
||||
/*
|
||||
* Since we can not rely on finish bit, use 1ms delay to get
|
||||
* temperature. From RM, 17us is enough to get data, but
|
||||
* to gurantee to get the data, delay 100ms here.
|
||||
*/
|
||||
if (soc_rev() >= CHIP_REV_1_1) {
|
||||
while ((readl(&ccm_anatop->tempsense1) &
|
||||
TEMPMON_HW_ANADIG_TEMPSENSE1_FINISHED_MASK) == 0)
|
||||
;
|
||||
reg = readl(&ccm_anatop->tempsense1);
|
||||
tmp = (reg & TEMPMON_HW_ANADIG_TEMPSENSE1_TEMP_VALUE_MASK)
|
||||
>> TEMPMON_HW_ANADIG_TEMPSENSE1_TEMP_VALUE_SHIFT;
|
||||
} while (get_timer(0) < (start + 100));
|
||||
} else {
|
||||
/*
|
||||
* Since we can not rely on finish bit, use 10ms
|
||||
* delay to get temperature. From RM, 17us is
|
||||
* enough to get data, but to gurantee to get
|
||||
* the data, delay 10ms here.
|
||||
*/
|
||||
udelay(10000);
|
||||
reg = readl(&ccm_anatop->tempsense1);
|
||||
tmp = (reg & TEMPMON_HW_ANADIG_TEMPSENSE1_TEMP_VALUE_MASK)
|
||||
>> TEMPMON_HW_ANADIG_TEMPSENSE1_TEMP_VALUE_SHIFT;
|
||||
}
|
||||
|
||||
writel(TEMPMON_HW_ANADIG_TEMPSENSE1_FINISHED_MASK, &ccm_anatop->tempsense1_clr);
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ void reset_cpu(ulong addr)
|
||||
{
|
||||
struct watchdog_regs *wdog = (struct watchdog_regs *)WDOG1_BASE_ADDR;
|
||||
|
||||
clrsetbits_le16(&wdog->wcr, 0, WCR_WDE);
|
||||
clrsetbits_le16(&wdog->wcr, WCR_WT_MSK, WCR_WDE);
|
||||
|
||||
writew(0x5555, &wdog->wsr);
|
||||
writew(0xaaaa, &wdog->wsr); /* load minimum 1/2 second timeout */
|
||||
|
||||
1
fs/fs.c
1
fs/fs.c
@@ -427,6 +427,7 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
|
||||
}
|
||||
puts("\n");
|
||||
|
||||
setenv_hex("fileaddr", addr);
|
||||
setenv_hex("filesize", len_read);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -13,5 +13,6 @@
|
||||
#define CONFIG_SPL_SPI_SUPPORT
|
||||
#define CONFIG_SPL_SPI_FLASH_SUPPORT
|
||||
#define CONFIG_SPL_SPI_LOAD
|
||||
#define CONFIG_SPI_FLASH_GIGADEVICE
|
||||
|
||||
#endif
|
||||
|
||||
@@ -476,6 +476,7 @@
|
||||
#define CONFIG_CMD_EXT2
|
||||
#define CONFIG_EHCI_IS_TDI
|
||||
#define CONFIG_USB_KEYBOARD
|
||||
#define CONFIG_SYS_STDIO_DEREGISTER
|
||||
#define CONFIG_SYS_USB_EVENT_POLL
|
||||
/* _VIA_CONTROL_EP */
|
||||
#define CONFIG_CONSOLE_MUX
|
||||
|
||||
@@ -241,6 +241,7 @@
|
||||
|
||||
#define CONFIG_IMX_THERMAL
|
||||
|
||||
#ifndef CONFIG_SPL_BUILD
|
||||
#define CONFIG_VIDEO
|
||||
#ifdef CONFIG_VIDEO
|
||||
#define CONFIG_CFB_CONSOLE
|
||||
@@ -257,5 +258,6 @@
|
||||
#define CONFIG_VIDEO_BMP_LOGO
|
||||
#define MXS_LCDIF_BASE MX6UL_LCDIF1_BASE_ADDR
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"kernel_name=norkern\0" \
|
||||
"kernel_alt_name=Image\0" \
|
||||
"kernel_addr=0x80000000\0" \
|
||||
"kernel_addr=0x80080000\0" \
|
||||
"initrd_name=ramdisk.img\0" \
|
||||
"initrd_addr=0x84000000\0" \
|
||||
"fdt_name=board.dtb\0" \
|
||||
@@ -233,7 +233,7 @@
|
||||
#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"kernel_name=Image\0" \
|
||||
"kernel_addr=0x80000000\0" \
|
||||
"kernel_addr=0x80080000\0" \
|
||||
"initrd_name=ramdisk.img\0" \
|
||||
"initrd_addr=0x88000000\0" \
|
||||
"fdt_name=devtree.dtb\0" \
|
||||
|
||||
@@ -16,3 +16,4 @@ struct watchdog_regs {
|
||||
#define WCR_WDT 0x08
|
||||
#define WCR_SRS 0x10
|
||||
#define SET_WCR_WT(x) (x << 8)
|
||||
#define WCR_WT_MSK SET_WCR_WT(0xFF)
|
||||
|
||||
@@ -32,7 +32,7 @@ int misc_write(struct udevice *dev, int offset, void *buf, int size);
|
||||
*
|
||||
* @dev: the device
|
||||
* @request: command to be sent to the device
|
||||
* @buf: pointer to buffer related to the requset
|
||||
* @buf: pointer to buffer related to the request
|
||||
* @return: 0 if OK, -ve on error
|
||||
*/
|
||||
int misc_ioctl(struct udevice *dev, unsigned long request, void *buf);
|
||||
@@ -70,7 +70,7 @@ struct misc_ops {
|
||||
*
|
||||
* @dev: the device
|
||||
* @request: command to be sent to the device
|
||||
* @buf: pointer to buffer related to the requset
|
||||
* @buf: pointer to buffer related to the request
|
||||
* @return: 0 if OK, -ve on error
|
||||
*/
|
||||
int (*ioctl)(struct udevice *dev, unsigned long request, void *buf);
|
||||
|
||||
@@ -227,7 +227,7 @@ int board_usb_cleanup(int index, enum usb_init_type init);
|
||||
|
||||
#ifdef CONFIG_USB_STORAGE
|
||||
|
||||
#define USB_MAX_STOR_DEV 5
|
||||
#define USB_MAX_STOR_DEV 7
|
||||
block_dev_desc_t *usb_stor_get_dev(int index);
|
||||
int usb_stor_scan(int mode);
|
||||
int usb_stor_info(void);
|
||||
|
||||
37
net/eth.c
37
net/eth.c
@@ -337,14 +337,30 @@ U_BOOT_ENV_CALLBACK(ethaddr, on_ethaddr);
|
||||
|
||||
int eth_init(void)
|
||||
{
|
||||
struct udevice *current;
|
||||
char *ethact = getenv("ethact");
|
||||
char *ethrotate = getenv("ethrotate");
|
||||
struct udevice *current = NULL;
|
||||
struct udevice *old_current;
|
||||
int ret = -ENODEV;
|
||||
|
||||
current = eth_get_dev();
|
||||
/*
|
||||
* When 'ethrotate' variable is set to 'no' and 'ethact' variable
|
||||
* is already set to an ethernet device, we should stick to 'ethact'.
|
||||
*/
|
||||
if ((ethrotate != NULL) && (strcmp(ethrotate, "no") == 0)) {
|
||||
if (ethact) {
|
||||
current = eth_get_dev_by_name(ethact);
|
||||
if (!current)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!current) {
|
||||
printf("No ethernet found.\n");
|
||||
return -ENODEV;
|
||||
current = eth_get_dev();
|
||||
if (!current) {
|
||||
printf("No ethernet found.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
old_current = current;
|
||||
@@ -761,8 +777,6 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
|
||||
} else if (is_valid_ethaddr(dev->enetaddr)) {
|
||||
eth_setenv_enetaddr_by_index(base_name, eth_number,
|
||||
dev->enetaddr);
|
||||
printf("\nWarning: %s using MAC address from net device\n",
|
||||
dev->name);
|
||||
} else if (is_zero_ethaddr(dev->enetaddr)) {
|
||||
#ifdef CONFIG_NET_RANDOM_ETHADDR
|
||||
net_random_ethaddr(dev->enetaddr);
|
||||
@@ -1039,6 +1053,17 @@ int eth_receive(void *packet, int length)
|
||||
static void eth_current_changed(void)
|
||||
{
|
||||
char *act = getenv("ethact");
|
||||
char *ethrotate;
|
||||
|
||||
/*
|
||||
* The call to eth_get_dev() below has a side effect of rotating
|
||||
* ethernet device if uc_priv->current == NULL. This is not what
|
||||
* we want when 'ethrotate' variable is 'no'.
|
||||
*/
|
||||
ethrotate = getenv("ethrotate");
|
||||
if ((ethrotate != NULL) && (strcmp(ethrotate, "no") == 0))
|
||||
return;
|
||||
|
||||
/* update current ethernet name */
|
||||
if (eth_get_dev()) {
|
||||
if (act == NULL || strcmp(act, eth_get_name()) != 0)
|
||||
|
||||
@@ -542,6 +542,9 @@ restart:
|
||||
#ifdef CONFIG_SHOW_ACTIVITY
|
||||
show_activity(1);
|
||||
#endif
|
||||
if (arp_timeout_check() > 0)
|
||||
time_start = get_timer(0);
|
||||
|
||||
/*
|
||||
* Check the ethernet for a new packet. The ethernet
|
||||
* receive routine will process it.
|
||||
@@ -570,10 +573,6 @@ restart:
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (arp_timeout_check() > 0) {
|
||||
time_start = get_timer(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for a timeout, and run the timeout handler
|
||||
* if we have one.
|
||||
|
||||
@@ -298,7 +298,7 @@ sub read_maintainers {
|
||||
while (<$maint>) {
|
||||
my $line = $_;
|
||||
|
||||
if ($line =~ m/^(\C):\s*(.*)/) {
|
||||
if ($line =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $type = $1;
|
||||
my $value = $2;
|
||||
|
||||
@@ -533,7 +533,7 @@ sub range_is_maintained {
|
||||
|
||||
for (my $i = $start; $i < $end; $i++) {
|
||||
my $line = $typevalue[$i];
|
||||
if ($line =~ m/^(\C):\s*(.*)/) {
|
||||
if ($line =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $type = $1;
|
||||
my $value = $2;
|
||||
if ($type eq 'S') {
|
||||
@@ -551,7 +551,7 @@ sub range_has_maintainer {
|
||||
|
||||
for (my $i = $start; $i < $end; $i++) {
|
||||
my $line = $typevalue[$i];
|
||||
if ($line =~ m/^(\C):\s*(.*)/) {
|
||||
if ($line =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $type = $1;
|
||||
my $value = $2;
|
||||
if ($type eq 'M') {
|
||||
@@ -600,7 +600,7 @@ sub get_maintainers {
|
||||
|
||||
for ($i = $start; $i < $end; $i++) {
|
||||
my $line = $typevalue[$i];
|
||||
if ($line =~ m/^(\C):\s*(.*)/) {
|
||||
if ($line =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $type = $1;
|
||||
my $value = $2;
|
||||
if ($type eq 'X') {
|
||||
@@ -615,7 +615,7 @@ sub get_maintainers {
|
||||
if (!$exclude) {
|
||||
for ($i = $start; $i < $end; $i++) {
|
||||
my $line = $typevalue[$i];
|
||||
if ($line =~ m/^(\C):\s*(.*)/) {
|
||||
if ($line =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $type = $1;
|
||||
my $value = $2;
|
||||
if ($type eq 'F') {
|
||||
@@ -917,7 +917,7 @@ sub find_first_section {
|
||||
|
||||
while ($index < @typevalue) {
|
||||
my $tv = $typevalue[$index];
|
||||
if (($tv =~ m/^(\C):\s*(.*)/)) {
|
||||
if (($tv =~ m/^([A-Z]):\s*(.*)/)) {
|
||||
last;
|
||||
}
|
||||
$index++;
|
||||
@@ -931,7 +931,7 @@ sub find_starting_index {
|
||||
|
||||
while ($index > 0) {
|
||||
my $tv = $typevalue[$index];
|
||||
if (!($tv =~ m/^(\C):\s*(.*)/)) {
|
||||
if (!($tv =~ m/^([A-Z]):\s*(.*)/)) {
|
||||
last;
|
||||
}
|
||||
$index--;
|
||||
@@ -945,7 +945,7 @@ sub find_ending_index {
|
||||
|
||||
while ($index < @typevalue) {
|
||||
my $tv = $typevalue[$index];
|
||||
if (!($tv =~ m/^(\C):\s*(.*)/)) {
|
||||
if (!($tv =~ m/^([A-Z]):\s*(.*)/)) {
|
||||
last;
|
||||
}
|
||||
$index++;
|
||||
@@ -971,7 +971,7 @@ sub get_maintainer_role {
|
||||
|
||||
for ($i = $start + 1; $i < $end; $i++) {
|
||||
my $tv = $typevalue[$i];
|
||||
if ($tv =~ m/^(\C):\s*(.*)/) {
|
||||
if ($tv =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $ptype = $1;
|
||||
my $pvalue = $2;
|
||||
if ($ptype eq "S") {
|
||||
@@ -1030,7 +1030,7 @@ sub add_categories {
|
||||
|
||||
for ($i = $start + 1; $i < $end; $i++) {
|
||||
my $tv = $typevalue[$i];
|
||||
if ($tv =~ m/^(\C):\s*(.*)/) {
|
||||
if ($tv =~ m/^([A-Z]):\s*(.*)/) {
|
||||
my $ptype = $1;
|
||||
my $pvalue = $2;
|
||||
if ($ptype eq "L") {
|
||||
@@ -1072,7 +1072,7 @@ sub add_categories {
|
||||
if ($name eq "") {
|
||||
if ($i > 0) {
|
||||
my $tv = $typevalue[$i - 1];
|
||||
if ($tv =~ m/^(\C):\s*(.*)/) {
|
||||
if ($tv =~ m/^([A-Z]):\s*(.*)/) {
|
||||
if ($1 eq "P") {
|
||||
$name = $2;
|
||||
$pvalue = format_email($name, $address, $email_usename);
|
||||
|
||||
@@ -27,8 +27,8 @@ obj-y += regmap.o
|
||||
obj-$(CONFIG_REMOTEPROC) += remoteproc.o
|
||||
obj-$(CONFIG_RESET) += reset.o
|
||||
obj-$(CONFIG_DM_RTC) += rtc.o
|
||||
obj-$(CONFIG_DM_SPI_FLASH) += sf.o
|
||||
obj-$(CONFIG_DM_SPI) += spi.o
|
||||
#obj-$(CONFIG_DM_SPI_FLASH) += sf.o
|
||||
#obj-$(CONFIG_DM_SPI) += spi.o
|
||||
obj-y += syscon.o
|
||||
obj-$(CONFIG_DM_USB) += usb.o
|
||||
obj-$(CONFIG_DM_PMIC) += pmic.o
|
||||
|
||||
@@ -108,9 +108,9 @@ static int dm_test_usb_remove(struct unit_test_state *uts)
|
||||
ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 0, &dev));
|
||||
ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 1, &dev));
|
||||
ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 2, &dev));
|
||||
ut_asserteq(5, count_usb_devices());
|
||||
ut_asserteq(6, count_usb_devices());
|
||||
ut_assertok(usb_stop());
|
||||
ut_asserteq(5, count_usb_devices());
|
||||
ut_asserteq(6, count_usb_devices());
|
||||
|
||||
/* Remove the second emulation device */
|
||||
ut_assertok(uclass_find_device_by_name(UCLASS_USB_EMUL, "flash-stick@1",
|
||||
@@ -128,9 +128,9 @@ static int dm_test_usb_remove(struct unit_test_state *uts)
|
||||
|
||||
ut_asserteq(-ENODEV, uclass_get_device(UCLASS_MASS_STORAGE, 2, &dev));
|
||||
|
||||
ut_asserteq(4, count_usb_devices());
|
||||
ut_asserteq(5, count_usb_devices());
|
||||
ut_assertok(usb_stop());
|
||||
ut_asserteq(4, count_usb_devices());
|
||||
ut_asserteq(5, count_usb_devices());
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -147,7 +147,10 @@ const char usb_tree_base[] =
|
||||
" | sandbox flash flash-stick@1\n"
|
||||
" | \n"
|
||||
" |\b+-4 Mass Storage (12 Mb/s, 100mA)\n"
|
||||
" sandbox flash flash-stick@2\n"
|
||||
" | sandbox flash flash-stick@2\n"
|
||||
" | \n"
|
||||
" |\b+-5 Human Interface (12 Mb/s, 100mA)\n"
|
||||
" sandbox keyboard keyb@3\n"
|
||||
" \n";
|
||||
|
||||
/* test that the 'usb tree' command output looks correct */
|
||||
@@ -178,7 +181,10 @@ const char usb_tree_remove[] =
|
||||
" | sandbox flash flash-stick@0\n"
|
||||
" | \n"
|
||||
" |\b+-3 Mass Storage (12 Mb/s, 100mA)\n"
|
||||
" sandbox flash flash-stick@2\n"
|
||||
" | sandbox flash flash-stick@2\n"
|
||||
" | \n"
|
||||
" |\b+-4 Human Interface (12 Mb/s, 100mA)\n"
|
||||
" sandbox keyboard keyb@3\n"
|
||||
" \n";
|
||||
|
||||
/*
|
||||
@@ -220,7 +226,10 @@ const char usb_tree_reorder[] =
|
||||
" |\b+-3 Mass Storage (12 Mb/s, 100mA)\n"
|
||||
" | sandbox flash flash-stick@2\n"
|
||||
" | \n"
|
||||
" |\b+-4 Mass Storage (12 Mb/s, 100mA)\n"
|
||||
" |\b+-4 Human Interface (12 Mb/s, 100mA)\n"
|
||||
" | sandbox keyboard keyb@3\n"
|
||||
" | \n"
|
||||
" |\b+-5 Mass Storage (12 Mb/s, 100mA)\n"
|
||||
" sandbox flash flash-stick@1\n"
|
||||
" \n";
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ RSA_OBJS-$(CONFIG_FIT_SIGNATURE) := $(addprefix lib/rsa/, \
|
||||
rsa-sign.o rsa-verify.o rsa-checksum.o \
|
||||
rsa-mod-exp.o)
|
||||
|
||||
ROCKCHIP_OBS = lib/rc4.o rkcommon.o rkimage.o rksd.o
|
||||
ROCKCHIP_OBS = lib/rc4.o rkcommon.o rkimage.o rksd.o rkspi.o
|
||||
|
||||
# common objs for dumpimage and mkimage
|
||||
dumpimage-mkimage-objs := aisimage.o \
|
||||
|
||||
@@ -54,7 +54,7 @@ static void rkspi_set_header(void *buf, struct stat *sbuf, int ifd,
|
||||
* boot ROM. Its rationale is unknown.
|
||||
*/
|
||||
for (sector = size / RKSPI_SECT_LEN - 1; sector >= 0; sector--) {
|
||||
printf("sector %u\n", sector);
|
||||
debug("sector %u\n", sector);
|
||||
memmove(buf + sector * RKSPI_SECT_LEN * 2,
|
||||
buf + sector * RKSPI_SECT_LEN,
|
||||
RKSPI_SECT_LEN);
|
||||
|
||||
Reference in New Issue
Block a user