Commit Graph

45826 Commits

Author SHA1 Message Date
Uri Mashiach
f62d34202d imx: mx7: SPL support for i.MX7
Add configuration file and spl_boot_device function for the i.MX7 SPL.

Signed-off-by: Uri Mashiach <uri.mashiach@compulab.co.il>
(cherry picked from commit e850961371d3b18f50ca4d71daf68e3a066116c3)
2017-10-02 14:31:33 -03:00
Uri Mashiach
b4ee050163 imx: mx7: DDR controller configuration for the i.MX7 architecture
The configuration files imximage.cfg are used for the DDR controller
configuration.
Add DDR configuration function to replace the DDR controller
configuration in the imximage.cfg file. The function can be used for
DDR size detection.

Signed-off-by: Uri Mashiach <uri.mashiach@compulab.co.il>
(cherry picked from commit 125db79b96f7496e8e922b6710ee2de6cfb47363)
2017-10-02 14:31:33 -03:00
Uri Mashiach
9ad01a2efb imx: mx7: fix the CCM_ macros
The CCM_ macros use the CCM_BASE_ADDRESS macro, which doesn't exist.
Replace the CCM_BASE_ADDRESS macros with CCM_BASE_ADDR.

Signed-off-by: Uri Mashiach <uri.mashiach@compulab.co.il>
Acked-by: Igor Grinberg <grinberg@compulab.co.il>
(cherry picked from commit 194622c35f391c65728120fd4cf3b69d09c2a20a)
2017-10-02 14:31:33 -03:00
Jagan Teki
23a60cfbec icorem6_rqs: env: Return mmc devno
Instead of changing mmc devno from dts nodes better
to return the detected devno so-that env trigger the same.

Cc: Stefano Babic <sbabic@denx.de>
Cc: Tom Rini <trini@konsulko.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
(cherry picked from commit 18cdecd86739b8eb12183d86f6ee21e19427ff4d)
2017-10-02 14:31:33 -03:00
Jagan Teki
4a8723b299 icore: configs: Fix merge conflict issue
Fix for finding mmc devices on i.MX6Q icore boards
added in below comment
"icorem6: Fix to find MMC devices"
(sha1: a2b137b38d)

which is reverted in during u-boot-imx merge
" Merge git://git.denx.de/u-boot-imx"
(sha1: 6aee2ab68c)

This patch, is recreated to fix merge conflict.

Cc: Stefano Babic <sbabic@denx.de>
Cc: Tom Rini <trini@konsulko.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
(cherry picked from commit daf3cb1d066d85acf12c04a06f25442479be25a7)
2017-10-02 14:31:33 -03:00
Fabio Estevam
48e0c40604 topic_miami: Remove CONFIG_CMD_BOOTZ undef
CONFIG_CMD_BOOTZ option has been converted to defconfig, so there
is no need to undefine it in board config file anymore.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 3d413aaabe6453da063ee64e25b8d68b6bc9cac5)
2017-10-02 14:31:33 -03:00
Diego Dorta
19cdefc994 mx6sabresd: Include <usb/ehci-ci.h> header file
When compiling with W=1 the following warning is observed:

board/freescale/mx6sabresd/mx6sabresd.c:586:5: warning: no previous prototype for ‘board_ehci_hcd_init’ [-Wmissing-prototypes] int board_ehci_hcd_init(int port)

Remove this warning by including <usb/ehci-ci.h>.

Signed-off-by: Diego Dorta <diego.dorta@nxp.com>
(cherry picked from commit c5ce67d184aa7ab3992fd3a96bca9f0a21dc6729)
2017-10-02 14:31:32 -03:00
Diego Dorta
9b1dd35df2 usb: ehci-ci: Add a prototype for board_ehci_power()
When compiling with W=1 the following warning is observed:

board/freescale/mx6sabresd/mx6sabresd.c:601:5: warning: no previous prototype for ‘board_ehci_power’ [-Wmissing-prototypes] int board_ehci_power(int port, int on)

Remove this warning by adding the function prototype into usb/ehci-ci.h file.

Signed-off-by: Diego Dorta <diego.dorta@nxp.com>
(cherry picked from commit c94dc551940208a93c6cda3d59325c103b50b41f)
2017-10-02 14:31:32 -03:00
Diego Dorta
23e7d7d1c6 mx6sabresd: Include <asm/mach-imx/spi.h> header file
When compiling with W=1 the following warning is observed:

board/freescale/mx6sabresd/mx6sabresd.c:680:5: warning: no previous prototype for ‘board_spi_cs_gpio’ [-Wmissing-prototypes] int board_spi_cs_gpio(unsigned bus, unsigned cs)

Remove this warning by including <asm/mach-imx/spi.h>.

Signed-off-by: Diego Dorta <diego.dorta@nxp.com>
(cherry picked from commit 3523215a455b719c59ef745c007577ad177846bf)
2017-10-02 14:31:32 -03:00
Diego Dorta
916afc51de mx6: soc: Include <asm/bootm.h> header file
When compiling with W=1 the following warning is observed:

arch/arm/mach-imx/mx6/soc.c:213:12: warning: no previous prototype for ‘get_board_rev’ [-Wmissing-prototypes] u32 __weak get_board_rev(void)

Fix the build warning by including <asm/bootm.h>.

Signed-off-by: Diego Dorta <diego.dorta@nxp.com>
(cherry picked from commit d0b3b5b4fcb4b7d19f498045073a706676f4287e)
2017-10-02 14:31:32 -03:00
Fabio Estevam
fc7dc87a9f mx7ulp_evk: Move CONFIG_CMD_BOOTZ to Kconfig
CONFIG_CMD_BOOTZ symbol does not work in board config file
anymore, so fix this by moving it to Kconfig.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
(cherry picked from commit 87fe3cf3a285b38cefa437e385cdaa572bd10a24)
2017-10-02 14:31:32 -03:00
Diego Dorta
96fd173ca1 imx: sys_proto: Add a prototype for board_mmc_get_env_dev()
When compiling with W=1 the following warning is observed:

board/freescale/mx6sabresd/mx6sabresd.c:266:5: warning:
no previous prototype for ‘board_mmc_get_env_dev’
[-Wmissing-prototypes] int board_mmc_get_env_dev(int devno)

Remove this warning by adding the function prototype into sys_proto.h file.

Signed-off-by: Diego Dorta <diego.dorta@nxp.com>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 18b61c4e3e312711169a9b36b26630dac34ae8f5)
2017-10-02 14:31:32 -03:00
Diego Dorta
e6e4db4473 imx: Include <input.h> header file
When building with W=1 errors like the one below is seen:

board/freescale/mx6sabresd/mx6sabresd.c:546:5: warning:
no previous prototype for ‘overwrite_console’
[-Wmissing-prototypes] int overwrite_console(void)

Fix the build warnings by including <input.h>.

Signed-off-by: Diego Dorta <diego.dorta@nxp.com>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 6174017871a1894aa9c0a7fb6d850e3def3fcc94)
2017-10-02 14:31:32 -03:00
Fabio Estevam
cbc14ee959 mx6: toradex: Remove custom CONFIG_SPL_PAD_TO definition
CONFIG_SPL_PAD_TO is already defined inside "imx6_spl.h", so there
is no need to redefine it in the board config files.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Stefan Agner <stefan.agner@toradex.com>
(cherry picked from commit 73547f14bd0644e0deb260faa8c8a2f921c4bf74)
2017-10-02 14:31:32 -03:00
Fabio Estevam
c6cbcda3de README.imx6: Prefer loading SPL via the new SDP mechanism
Now that it is possible to load SPL and u-boot.img via imx_usb_loader
tool, mention this method instead of the old one that relied on ymodem.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 8db0bcd598f98fdc296264a79b75c56b54557114)
2017-10-02 14:31:19 -03:00
Fabio Estevam
d327aab07f mx53loco: Let CONFIG_DISPLAY_CPUINFO be selected
With CONFIG_DISPLAY_CPUINFO=y we get a "Reset cause" line, which
brings important information of the reboot cause.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 02daebace710084195cc8ef4b49a28583113ac9a)
2017-10-02 14:31:19 -03:00
Otavio Salvador
9f164a1a01 mx25pdk: Change root to use a single partition layout
This allow for use of wic images as generated by the wic tool inside
the OpenEmbedded.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-29 15:06:38 -03:00
Otavio Salvador
642e1ec971 mx25pdk: Remove duplicated define
The CONFIG_SYS_MMC_ENV_DEV is duplicated, drop it.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-29 14:32:15 -03:00
Otavio Salvador
bb8bb2c1bd mx25pdk: Use generic filesystem commands
This rework the board to use the generic filesystem commands instead
of forcing the use of FAT for the boot files.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-29 14:32:13 -03:00
Anatolij Gustschin
a3581b705a imx6: disable clock command and print_cpuinfo code in SPL
We do not use print_cpuinfo and clock command code in SPL,
disable it when building SPL image.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
(cherry picked from commit fbdffce800205ff27f2f7cbd377238364d6c4860)
2017-09-23 18:07:22 -03:00
Fabio Estevam
555c0086e6 colibri_imx6: Avoid calling setup_display() from SPL code
There is no need call setup_display() from SPL code, so move it to
board_init(), which executes only in U-Boot proper.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit f89f5ddb0b3b564934b4ea7c2d4bff8a8b533c37)
2017-09-23 18:07:22 -03:00
Fabio Estevam
0985fc630b apalis_imx6: Avoid calling setup_display() from SPL code
There is no need call setup_display() from SPL code, so move it to
board_init(), which executes only in U-Boot proper.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 539b2093c31749103eee6288a45a4ba3741155f7)
2017-09-23 18:07:22 -03:00
Fabio Estevam
a01e041d10 mx6cuboxi: Avoid calling setup_display() from SPL code
There is no need call setup_display() from SPL code, so move it to
board_init(), which executes only in U-Boot proper.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 23404c93e74d7f15a5731fadccb689c545b45b98)
2017-09-23 18:07:22 -03:00
Fabio Estevam
939d30becd wandboard: Avoid calling setup_display() from SPL code
There is no need call setup_display() from SPL code, so move it to
board_init(), which executes only in U-Boot proper.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 8571ed8457c17f7bea51345ec0322811232fa3e9)
2017-09-23 18:07:22 -03:00
Fabio Estevam
025f356829 cgtqmx6eval: Avoid calling setup_display() from SPL code
There is no need call setup_display() from SPL code, so move it to
board_init(), which executes only in U-Boot proper.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 9bf30fdcf2927c463a965a8d55e1e22c7f759eb5)
2017-09-23 18:07:22 -03:00
Fabio Estevam
3cfa1bd347 mx6sabresd: Avoid calling setup_display() from SPL code
There is no need call setup_display() from SPL code, so move it to
board_init(), which executes only in U-Boot proper.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 3d33dfa758b8a85e1301f43c2c349dd8c57c6f6b)
2017-09-23 18:07:22 -03:00
Fabio Estevam
6d9b99b923 mx6sabresd: Add Serial Download Protocol support
Add Serial Download Protocol support (SDP), which allows loading
SPL and u-boot.img via imx_usb_loader tool as explained in
doc/README.sdp.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 031426a7af)
2017-09-20 23:32:31 -03:00
Fabio Estevam
3766ef9cea toradex: imx6: Move g_dnl_bind_fixup() into common SPL code
Instead of having every board file to add its own g_dnl_bind_fixup()
implementation, move it to the common imx6 SPL code.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Łukasz Majewski <lukma@denx.de>
(cherry picked from commit 511db3bf5a)
2017-09-20 23:32:31 -03:00
Ian Ray
da4a0fd824 board: ge: bx50v3: set eth0 MAC address
Define i2c mux configuration.  Add new vpd_reader which is used to read
vital product data.  Read VPD from EEPROM and set eth0 MAC address.

Signed-off-by: Ian Ray <ian.ray@ge.com>
Signed-off-by: Jose Alarcon <jose.alarcon@ge.com>
(cherry picked from commit be2808c3b0)
2017-09-20 23:32:31 -03:00
Dennis Gilmore
5e57f55125 detect and setup solidrun hummingboard2
The hummingboard2 is slightly different to the cubox i and to the
hummingboard. The GPIO pin info to probe came from solidruns
for of u-boot on github.
https://github.com/SolidRun/u-boot-imx6/blob/imx6/board/solidrun/mx6_cubox-i/mx6_cubox-i.c#L569-L589
I have tested on a hummingboard-edge witha  imx6 solo and 512mb of
ram.

Signed-off-by: Dennis Gilmore <dgilmore@redhat.com>
(cherry picked from commit b1e8512e9d)
2017-09-20 23:32:31 -03:00
Anatolij Gustschin
35e7f4f0aa imx6: drop duplicated bss memset and board_init_r() call
bss section is cleared in crt0.S. board_init_r() is also
entered from crt0 code.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
Cc: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Jagan Teki <jagan@amarulasolutions.com>
Cc: Tim Harvey <tharvey@gateworks.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
(cherry picked from commit 30df9f770b)
2017-09-20 23:32:31 -03:00
Vanessa Maegima
72066ea7f5 pico-imx7d: Add "how to boot with NXP 4.1 Kernel"
The NXP 4.1 kernel needs to boot with secure boot.

Add information on how to enable secure boot mode.

Signed-off-by: Vanessa Maegima <vanessa.maegima@nxp.com>
(cherry picked from commit 0bfd4f81ae)
2017-09-20 23:32:31 -03:00
Eric Nelson
58cb0bc9f0 imx: imx7d: remove CamelCase from ENET_xMHz macros
Update these macros to use all upper-case to avoid checkpatch
warnings:

	ENET_25MHz,
	ENET_50MHz,
	ENET_125MHz,

Signed-off-by: Eric Nelson <eric@nelint.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 8590786acf)
2017-09-20 23:32:31 -03:00
Stefan Agner
2df17bffbc imx_common: detect USB serial downloader reliably
The current mechanism using SCR/GPR registers work well when
the serial downloader boot mode has been selected explicitly
(either via boot mode pins or using bmode command). However,
in case the system entered boot ROM due to unbootable primary
boot devices (e.g. empty eMMC), the SPL fails to detect that
it has been downloaded through serial loader and tries to
continue booting from eMMC:
  Trying to boot from MMC1
  mmc_load_image_raw_sector: mmc block read error
  SPL: failed to boot from all boot devices
  ### ERROR ### Please RESET the board ###

The only known way to reliably detect USB serial downloader
is by checking the USB PHY receiver block power state...

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Eric Nelson <eric@nelint.com>
(cherry picked from commit e203dcf23e)
2017-09-20 23:32:31 -03:00
Stefan Agner
5615ed0835 imx: add macro to detect whether USB PHY is active
This macro allows to detect whether the USB PHY is active. This
is helpful to detect if the boot ROM has previously started the
USB serial downloader.

The idea is taken from the mfgtool support in the NXP U-Boot:
http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/commit/?h=imx_v2016.03_4.1.15_2.0.0_ga&id=a352ed3c5184b95c4c9f7468f5fbb5f43de5e412

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Eric Nelson <eric@nelint.com>
(cherry picked from commit 7d289d6239)
2017-09-20 23:32:31 -03:00
Otavio Salvador
ed4d1d9811 Merge pull request #20 from vanmaegima/2017.09+fslc
pico-imx7d: Enable loading kernel from rootfs partition
2017-09-18 14:42:41 -03:00
Vanessa Maegima
114483afcc pico-imx7d: Enable booting from single partition
Update 'fdt_file' and 'image' location and change rootfs mmc partition
in 'finduuid' to support booting from a single partition.

Signed-off-by: Vanessa Maegima <vanessa.maegima@nxp.com>
2017-09-15 19:30:30 -03:00
Vanessa Maegima
85cdf96e1e pico-imx7d: Replace fatload command
Replace fatload with the fs generic loading interface ('load' command).

Signed-off-by: Vanessa Maegima <vanessa.maegima@nxp.com>
2017-09-15 18:24:40 -03:00
Fabio Estevam
e4a4d913e9 ipu_common: Let the MX6 IPU clock be calculated in run-time
MX6Q/QP IPU operates at 264MHz and MX6DL IPU at 198MHz.

When running a SPL target, which supports multiple MX6 variants we cannot
properly setup the IPU clock frequency via CONFIG_IPUV3_CLK option as
such decision is done in build-time currently.

Remove the CONFIG_IPUV3_CLK option and let the IPU clock frequency be
configured in run-time on mx6.

Reported-by: Eric Nelson <eric@nelint.com>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Eric Nelson <eric@nelint.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
[agust: fixed #endif in cgtqmx6eval.h]
Signed-off-by: Anatolij Gustschin <agust@denx.de>
(cherry picked from commit c7430d7d5e)
2017-09-11 16:53:26 -03:00
Vanessa Maegima
57ea8c60e4 pico-imx7d: Add support for secure boot
Add a new defconfig to enable secure boot on pico-imx7d.

Signed-off-by: Vanessa Maegima <vanessa.maegima@nxp.com>
2017-09-11 16:37:19 -03:00
Fabio Estevam
c5ad50303c mx6sabre_common: Dynamically change the video output
Use the 'hdmidetect' command in U-boot to load the appropriate
video arguments. If HDMI is connected during boot then make HDMI
as the primary framebuffer, otherwise let LVDS be the primary framebuffer.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-11 16:37:19 -03:00
Fabio Estevam
9b412b485a mx6sabre_common: Place video related settings in common code
Currently mx6sabreauto fails to find the environment variables like this:

## Error: "findfdt" not defined
switch to partitions #0, OK
mmc0 is current device
## Error: "loadbootscript" not defined
## Error: "loadimage" not defined
## Error: "netboot" not defined

Move VIDEO_ARGS/VIDEO_ARGS_SCRIPT so that they can be shared among sabresd
and sabreauto boards.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-11 16:37:19 -03:00
Fabio Berton
d3d0f38957 wandboard: Set fdt based on board_rev and board_name
New kernel linux-wandboard version 4.1.15_1.1.0_ga changed device tree
name adding board revision on file name. The new names are:

 - imx6dl-wandboard-revb1
 - imx6dl-wandboard-revc1
 - imx6q-wandboard-revb1
 - imx6q-wandboard-revc1

This fixes the Wandboard C1 revision device tree files.

Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-11 16:37:19 -03:00
Nikolay Dimitrov
199cce79e4 mx6sabresd: Enable video interfaces in bootargs
Generate kernel video bootargs for sabresd, based on a list of needed video
interfaces ("video_interfaces" U-Boot env-var). The order of initialization
and video settings can be fully customized.

Signed-off-by: Nikolay Dimitrov <picmaster@mail.bg>
2017-09-11 16:37:19 -03:00
Otavio Salvador
37d69b40ea mx6sabresd: Use LDO dtb file until LDO bypass support is added
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-11 16:37:18 -03:00
Otavio Salvador
29fffd2510 mx6slevk: Use LDO dtb file until LDO bypass support is added
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2017-09-11 16:37:18 -03:00
Tom Rini
c98ac3487e Prepare v2017.09
Signed-off-by: Tom Rini <trini@konsulko.com>
2017-09-11 14:10:40 -04:00
Jorge Ramirez-Ortiz
bbfbdb5722 MAINTAINERS: board: qcom: db410c: Maintainer changed
Replacing original author Mateusz Kulikowski
<mateusz.kulikowski@gmail.com> as db410c maintainer

Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
2017-09-11 13:34:31 -04:00
Bin Meng
584f316f11 cmd: ide: Make the first device the default one
At present the IDE device number is initialized to -1, which means
we cannot type "ide read" command before setting the device number
via "ide device #".

For convenience, let's set the first device as the default one.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
2017-09-10 12:27:43 -04:00
Bin Meng
1f4adab873 block: ide: Don't bother to create BLK device if no CDROM inserted
When there is no CDROM inserted, the block size is zero hence there
is no need to create a BLK device for it.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
2017-09-10 12:27:40 -04:00