Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Librem5
uboot-imx
Commits
d5c6144f
Commit
d5c6144f
authored
Feb 26, 2016
by
Tom Rini
Browse files
Merge
git://git.denx.de/u-boot-dm
parents
38e65aeb
6796704b
Changes
21
Hide whitespace changes
Inline
Side-by-side
cmd/trace.c
View file @
d5c6144f
...
...
@@ -43,7 +43,7 @@ static int create_func_list(int argc, char * const argv[])
err
=
trace_list_functions
(
buff
+
buff_ptr
,
avail
,
&
needed
);
if
(
err
)
printf
(
"Error: truncated (%#x bytes needed)
\n
"
,
needed
);
used
=
min
(
avail
,
needed
);
used
=
min
(
avail
,
(
size_t
)
needed
);
printf
(
"Function trace dumped to %08lx, size %#zx
\n
"
,
(
ulong
)
map_to_sysmem
(
buff
+
buff_ptr
),
used
);
setenv_hex
(
"profbase"
,
map_to_sysmem
(
buff
));
...
...
@@ -67,7 +67,7 @@ static int create_call_list(int argc, char * const argv[])
err
=
trace_list_calls
(
buff
+
buff_ptr
,
avail
,
&
needed
);
if
(
err
)
printf
(
"Error: truncated (%#x bytes needed)
\n
"
,
needed
);
used
=
min
(
avail
,
needed
);
used
=
min
(
avail
,
(
size_t
)
needed
);
printf
(
"Call list dumped to %08lx, size %#zx
\n
"
,
(
ulong
)
map_to_sysmem
(
buff
+
buff_ptr
),
used
);
...
...
common/board_f.c
View file @
d5c6144f
...
...
@@ -45,6 +45,7 @@
#include <post.h>
#include <spi.h>
#include <status_led.h>
#include <timer.h>
#include <trace.h>
#include <video.h>
#include <watchdog.h>
...
...
@@ -805,6 +806,11 @@ static int initf_dm(void)
if
(
ret
)
return
ret
;
#endif
#ifdef CONFIG_TIMER_EARLY
ret
=
dm_timer_init
();
if
(
ret
)
return
ret
;
#endif
return
0
;
}
...
...
common/board_r.c
View file @
d5c6144f
...
...
@@ -46,6 +46,7 @@
#include <serial.h>
#include <spi.h>
#include <stdio_dev.h>
#include <timer.h>
#include <trace.h>
#include <watchdog.h>
#ifdef CONFIG_CMD_AMBAPP
...
...
@@ -312,13 +313,22 @@ static int initr_noncached(void)
#ifdef CONFIG_DM
static
int
initr_dm
(
void
)
{
int
ret
;
/* Save the pre-reloc driver model and start a new one */
gd
->
dm_root_f
=
gd
->
dm_root
;
gd
->
dm_root
=
NULL
;
#ifdef CONFIG_TIMER
ret
=
dm_init_and_scan
(
false
);
if
(
ret
)
return
ret
;
#ifdef CONFIG_TIMER_EARLY
gd
->
timer
=
NULL
;
ret
=
dm_timer_init
();
if
(
ret
)
return
ret
;
#endif
return
dm_init_and_scan
(
false
);
return
0
;
}
#endif
...
...
common/bootm.c
View file @
d5c6144f
...
...
@@ -201,7 +201,7 @@ static int bootm_find_os(cmd_tbl_t *cmdtp, int flag, int argc,
images
.
ep
+=
images
.
os
.
load
;
}
images
.
os
.
start
=
(
ulong
)
os_hdr
;
images
.
os
.
start
=
map_to_sysmem
(
os_hdr
)
;
return
0
;
}
...
...
common/image-fit.c
View file @
d5c6144f
...
...
@@ -851,6 +851,11 @@ static int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore)
return
0
;
}
ulong
fit_get_end
(
const
void
*
fit
)
{
return
map_to_sysmem
((
void
*
)(
fit
+
fdt_totalsize
(
fit
)));
}
/**
* fit_set_timestamp - set node timestamp property
* @fit: pointer to the FIT format image header
...
...
@@ -1030,10 +1035,15 @@ int fit_image_verify(const void *fit, int image_noffset)
strlen
(
FIT_SIG_NODENAME
)))
{
ret
=
fit_image_check_sig
(
fit
,
noffset
,
data
,
size
,
-
1
,
&
err_msg
);
if
(
ret
)
{
/*
* Show an indication on failure, but do not return
* an error. Only keys marked 'required' can cause
* an image validation failure. See the call to
* fit_image_verify_required_sigs() above.
*/
if
(
ret
)
puts
(
"- "
);
goto
error
;
}
else
puts
(
"+ "
);
}
...
...
configs/sandbox_defconfig
View file @
d5c6144f
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_PCI=y
CONFIG_DEFAULT_DEVICE_TREE="sandbox"
CONFIG_DM_PCI_COMPAT=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_FIT_SIGNATURE=y
CONFIG_BOOTSTAGE=y
CONFIG_BOOTSTAGE_REPORT=y
CONFIG_CONSOLE_RECORD=y
CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
# CONFIG_CMD_ELF is not set
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set
...
...
@@ -12,14 +15,10 @@ CONFIG_CMD_REMOTEPROC=y
CONFIG_CMD_GPIO=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_SOUND=y
CONFIG_BOOTSTAGE=y
CONFIG_BOOTSTAGE_REPORT=y
CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
CONFIG_CMD_TPM=y
CONFIG_CMD_TPM_TEST=y
CONFIG_CONSOLE_RECORD=y
CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
CONFIG_OF_CONTROL=y
CONFIG_OF_HOSTFILE=y
CONFIG_REGMAP=y
...
...
@@ -52,6 +51,7 @@ CONFIG_SPI_FLASH_SST=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_DM_ETH=y
CONFIG_DM_PCI=y
CONFIG_DM_PCI_COMPAT=y
CONFIG_PCI_SANDBOX=y
CONFIG_PINCTRL=y
CONFIG_PINCONF=y
...
...
@@ -68,6 +68,7 @@ CONFIG_SOUND=y
CONFIG_SOUND_SANDBOX=y
CONFIG_SANDBOX_SPI=y
CONFIG_TIMER=y
CONFIG_TIMER_EARLY=y
CONFIG_SANDBOX_TIMER=y
CONFIG_TPM_TIS_SANDBOX=y
CONFIG_USB=y
...
...
drivers/mtd/spi/sandbox.c
View file @
d5c6144f
...
...
@@ -142,13 +142,15 @@ static int sandbox_sf_probe(struct udevice *dev)
if
(
bus
->
seq
<
CONFIG_SANDBOX_SPI_MAX_BUS
)
spec
=
state
->
spi
[
bus
->
seq
][
cs
].
spec
;
if
(
!
spec
)
{
debug
(
"%s: No spec found for bus %d, cs %d
\n
"
,
__func__
,
bus
->
seq
,
cs
);
ret
=
-
ENOENT
;
goto
error
;
}
file
=
strchr
(
spec
,
':'
);
if
(
!
file
)
{
printf
(
"s
andbox_sf
: unable to parse file
\n
"
);
printf
(
"
%
s: unable to parse file
\n
"
,
__func__
);
ret
=
-
EINVAL
;
goto
error
;
}
...
...
@@ -174,7 +176,7 @@ static int sandbox_sf_probe(struct udevice *dev)
break
;
}
if
(
!
data
->
name
)
{
printf
(
"s
andbox_sf
: unknown flash '%*s'
\n
"
,
(
int
)
idname_len
,
printf
(
"
%
s: unknown flash '%*s'
\n
"
,
__func__
,
(
int
)
idname_len
,
spec
);
ret
=
-
EINVAL
;
goto
error
;
...
...
@@ -185,8 +187,7 @@ static int sandbox_sf_probe(struct udevice *dev)
sbsf
->
fd
=
os_open
(
pdata
->
filename
,
02
);
if
(
sbsf
->
fd
==
-
1
)
{
free
(
sbsf
);
printf
(
"sandbox_sf: unable to open file '%s'
\n
"
,
printf
(
"%s: unable to open file '%s'
\n
"
,
__func__
,
pdata
->
filename
);
ret
=
-
EIO
;
goto
error
;
...
...
@@ -553,6 +554,9 @@ static int sandbox_cmdline_cb_spi_sf(struct sandbox_state *state,
* yet. Perhaps we can figure something out.
*/
state
->
spi
[
bus
][
cs
].
spec
=
spec
;
debug
(
"%s: Setting up spec '%s' for bus %ld, cs %ld
\n
"
,
__func__
,
spec
,
bus
,
cs
);
return
0
;
}
SANDBOX_CMDLINE_OPT
(
spi_sf
,
1
,
"connect a SPI flash: <bus>:<cs>:<id>:<file>"
);
...
...
@@ -671,6 +675,8 @@ int dm_scan_other(bool pre_reloc_only)
__func__
,
busnum
,
cs
);
return
ret
;
}
debug
(
"%s: Setting up spec '%s' for bus %d, cs %d
\n
"
,
__func__
,
spec
,
busnum
,
cs
);
}
}
}
...
...
drivers/mtd/spi/sf_probe.c
View file @
d5c6144f
...
...
@@ -42,10 +42,8 @@ static int spi_flash_probe_slave(struct spi_flash *flash)
}
ret
=
spi_flash_scan
(
flash
);
if
(
ret
)
{
ret
=
-
EINVAL
;
if
(
ret
)
goto
err_read_id
;
}
#ifdef CONFIG_SPI_FLASH_MTD
ret
=
spi_flash_mtd_register
(
flash
);
...
...
drivers/mtd/spi/spi_flash.c
View file @
d5c6144f
...
...
@@ -989,7 +989,7 @@ int spi_flash_scan(struct spi_flash *flash)
ret
=
spi_flash_cmd
(
spi
,
CMD_READ_ID
,
idcode
,
sizeof
(
idcode
));
if
(
ret
)
{
printf
(
"SF: Failed to get idcodes
\n
"
);
return
-
EINVAL
;
return
ret
;
}
#ifdef DEBUG
...
...
drivers/pci/pci_auto.c
View file @
d5c6144f
...
...
@@ -30,7 +30,7 @@ void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
u8
header_type
;
int
rom_addr
;
pci_addr_t
bar_value
;
struct
pci_region
*
bar_res
;
struct
pci_region
*
bar_res
=
NULL
;
int
found_mem64
=
0
;
u16
class
;
...
...
drivers/timer/Kconfig
View file @
d5c6144f
...
...
@@ -9,6 +9,16 @@ config TIMER
will be used. The timer is usually a 32 bits free-running up
counter. There may be no real tick, and no timer interrupt.
config TIMER_EARLY
bool "Allow timer to be used early in U-Boot"
depends on TIMER
help
In some cases the timer must be accessible before driver model is
active. Examples include when using CONFIG_TRACE to trace U-Boot's
execution before driver model is set up. Enable this option to
use an early timer. These functions must be supported by your timer
driver: timer_early_get_count() and timer_early_get_rate().
config ALTERA_TIMER
bool "Altera timer support"
depends on TIMER
...
...
drivers/timer/sandbox_timer.c
View file @
d5c6144f
...
...
@@ -10,6 +10,8 @@
#include <timer.h>
#include <os.h>
#define SANDBOX_TIMER_RATE 1000000
/* system timer offset in ms */
static
unsigned
long
sandbox_timer_offset
;
...
...
@@ -18,9 +20,19 @@ void sandbox_timer_add_offset(unsigned long offset)
sandbox_timer_offset
+=
offset
;
}
static
int
sandbox_timer_get_count
(
struct
udevice
*
dev
,
u64
*
count
)
u64
notrace
timer_early_get_count
(
void
)
{
return
os_get_nsec
()
/
1000
+
sandbox_timer_offset
*
1000
;
}
unsigned
long
notrace
timer_early_get_rate
(
void
)
{
return
SANDBOX_TIMER_RATE
;
}
static
notrace
int
sandbox_timer_get_count
(
struct
udevice
*
dev
,
u64
*
count
)
{
*
count
=
os_get_nsec
()
/
1000
+
sandbox_timer_offset
*
1000
;
*
count
=
timer_early_get_count
()
;
return
0
;
}
...
...
@@ -30,7 +42,7 @@ static int sandbox_timer_probe(struct udevice *dev)
struct
timer_dev_priv
*
uc_priv
=
dev_get_uclass_priv
(
dev
);
if
(
!
uc_priv
->
clock_rate
)
uc_priv
->
clock_rate
=
1000000
;
uc_priv
->
clock_rate
=
SANDBOX_TIMER_RATE
;
return
0
;
}
...
...
drivers/timer/timer-uclass.c
View file @
d5c6144f
...
...
@@ -22,7 +22,7 @@ DECLARE_GLOBAL_DATA_PTR;
* tick, and no timer interrupt.
*/
int
timer_get_count
(
struct
udevice
*
dev
,
u64
*
count
)
int
notrace
timer_get_count
(
struct
udevice
*
dev
,
u64
*
count
)
{
const
struct
timer_ops
*
ops
=
device_get_ops
(
dev
);
...
...
@@ -32,9 +32,9 @@ int timer_get_count(struct udevice *dev, u64 *count)
return
ops
->
get_count
(
dev
,
count
);
}
unsigned
long
timer_get_rate
(
struct
udevice
*
dev
)
unsigned
long
notrace
timer_get_rate
(
struct
udevice
*
dev
)
{
struct
timer_dev_priv
*
uc_priv
=
dev
_get_
uclass_priv
(
dev
)
;
struct
timer_dev_priv
*
uc_priv
=
dev
->
uclass_priv
;
return
uc_priv
->
clock_rate
;
}
...
...
include/image.h
View file @
d5c6144f
...
...
@@ -818,10 +818,7 @@ static inline ulong fit_get_size(const void *fit)
* returns:
* end address of the FIT image (blob) in memory
*/
static
inline
ulong
fit_get_end
(
const
void
*
fit
)
{
return
(
ulong
)
fit
+
fdt_totalsize
(
fit
);
}
ulong
fit_get_end
(
const
void
*
fit
);
/**
* fit_get_name - get FIT node name
...
...
include/timer.h
View file @
d5c6144f
...
...
@@ -67,4 +67,25 @@ struct timer_dev_priv {
unsigned
long
clock_rate
;
};
/**
* timer_early_get_count() - Implement timer_get_count() before driver model
*
* If CONFIG_TIMER_EARLY is enabled, this function wil be called to return
* the current timer value before the proper driver model timer is ready.
* It should be implemented by one of the timer values. This is mostly useful
* for tracing.
*/
u64
timer_early_get_count
(
void
);
/**
* timer_early_get_rate() - Get the timer rate before driver model
*
* If CONFIG_TIMER_EARLY is enabled, this function wil be called to return
* the current timer rate in Hz before the proper driver model timer is ready.
* It should be implemented by one of the timer values. This is mostly useful
* for tracing. This corresponds to the clock_rate value in struct
* timer_dev_priv.
*/
unsigned
long
timer_early_get_rate
(
void
);
#endif
/* _TIMER_H_ */
lib/div64.c
View file @
d5c6144f
...
...
@@ -18,8 +18,9 @@
#include <div64.h>
#include <linux/types.h>
#include <linux/compiler.h>
uint32_t
__div64_32
(
uint64_t
*
n
,
uint32_t
base
)
uint32_t
notrace
__div64_32
(
uint64_t
*
n
,
uint32_t
base
)
{
uint64_t
rem
=
*
n
;
uint64_t
b
=
base
;
...
...
lib/time.c
View file @
d5c6144f
...
...
@@ -43,11 +43,17 @@ extern unsigned long __weak timer_read_counter(void);
#ifdef CONFIG_TIMER
ulong
notrace
get_tbclk
(
void
)
{
int
ret
;
if
(
!
gd
->
timer
)
{
#ifdef CONFIG_TIMER_EARLY
return
timer_early_get_rate
();
#else
int
ret
;
ret
=
dm_timer_init
();
if
(
ret
)
return
ret
;
ret
=
dm_timer_init
();
if
(
ret
)
return
ret
;
#endif
}
return
timer_get_rate
(
gd
->
timer
);
}
...
...
@@ -57,9 +63,17 @@ uint64_t notrace get_ticks(void)
u64
count
;
int
ret
;
ret
=
dm_timer_init
();
if
(
ret
)
return
ret
;
if
(
!
gd
->
timer
)
{
#ifdef CONFIG_TIMER_EARLY
return
timer_early_get_count
();
#else
int
ret
;
ret
=
dm_timer_init
();
if
(
ret
)
return
ret
;
#endif
}
ret
=
timer_get_count
(
gd
->
timer
,
&
count
);
if
(
ret
)
...
...
test/dm/Makefile
View file @
d5c6144f
...
...
@@ -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
...
...
test/image/test-fit.py
View file @
d5c6144f
...
...
@@ -108,6 +108,10 @@ base_fdt = '''
model = "Sandbox Verified Boot Test";
compatible = "sandbox";
reset@0 {
compatible = "sandbox,reset";
};
};
'''
...
...
test/trace/test-trace.sh
View file @
d5c6144f
...
...
@@ -45,7 +45,9 @@ check_results() {
# between calls 2 and 3, where tracing is paused.
# This code gets the sign of the difference between each number and
# its predecessor.
counts
=
"
$(
tr
-d
, <
${
tmp
}
|
awk
'/traced function calls/ { diff = $1 - upto; upto = $1; printf "%d ", diff < 0 ? -1 : (diff > 0 ? 1 : 0)}'
)
"
counts
=
"
$(
tr
-d
',\r'
<
${
tmp
}
|
awk
\
'/traced function calls/ { diff = $1 - upto; upto = $1; \
printf "%d ", diff < 0 ? -1 : (diff > 0 ? 1 : 0)}'
)
"
if
[
"
${
counts
}
"
!=
"1 1 0 1 "
]
;
then
fail
"trace collection error:
${
counts
}
"
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment