Merge branch 'for-next/omap'
Conflicts: arch/arm/configs/am335x_beaglebone_defconfig arch/arm/configs/am335x_defconfig
This commit is contained in:
commit
7ccfe4d3a0
|
@ -167,13 +167,16 @@ KBUILD_IMAGE := barebox.ubl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
quiet_cmd_am35xx_spi_image = SPI-IMG $@
|
quiet_cmd_am35xx_spi_image = SPI-IMG $@
|
||||||
cmd_am35xx_spi_image = scripts/mk-am35xx-spi-image -a $(TEXT_BASE) $< > $@
|
cmd_am35xx_spi_image = scripts/mk-am3xxx-spi-image -s am35xx -a $(TEXT_BASE) $< > $@
|
||||||
|
|
||||||
barebox.spi: $(KBUILD_BINARY) FORCE
|
barebox.spi: $(KBUILD_BINARY) FORCE
|
||||||
$(call if_changed,am35xx_spi_image)
|
$(call if_changed,am35xx_spi_image)
|
||||||
|
|
||||||
|
MLO.spi: MLO FORCE
|
||||||
|
$(call if_changed,am35xx_spi_image)
|
||||||
|
|
||||||
ifeq ($(CONFIG_OMAP_BUILD_SPI),y)
|
ifeq ($(CONFIG_OMAP_BUILD_SPI),y)
|
||||||
KBUILD_IMAGE := barebox.spi
|
KBUILD_IMAGE := MLO.spi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
quiet_cmd_zynq_image = ZYNQ-IMG $@
|
quiet_cmd_zynq_image = ZYNQ-IMG $@
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
lwl-y += lowlevel.o
|
lwl-y += lowlevel.o
|
||||||
obj-y += board.o
|
obj-y += board.o
|
||||||
|
bbenv-y += defaultenv-beaglebone
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <globalvar.h>
|
#include <globalvar.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
#include <net.h>
|
#include <net.h>
|
||||||
|
#include <envfs.h>
|
||||||
#include <bootsource.h>
|
#include <bootsource.h>
|
||||||
#include <asm/armlinux.h>
|
#include <asm/armlinux.h>
|
||||||
#include <generated/mach-types.h>
|
#include <generated/mach-types.h>
|
||||||
|
@ -66,6 +67,8 @@ static int beaglebone_devices_init(void)
|
||||||
|
|
||||||
black = is_beaglebone_black();
|
black = is_beaglebone_black();
|
||||||
|
|
||||||
|
defaultenv_append_directory(defaultenv_beaglebone);
|
||||||
|
|
||||||
globalvar_add_simple("board.variant", black ? "boneblack" : "bone");
|
globalvar_add_simple("board.variant", black ? "boneblack" : "bone");
|
||||||
|
|
||||||
printf("detected 'BeagleBone %s'\n", black ? "Black" : "White");
|
printf("detected 'BeagleBone %s'\n", black ? "Black" : "White");
|
||||||
|
|
|
@ -147,7 +147,7 @@ static noinline int beaglebone_sram_init(void)
|
||||||
&ddr2_data);
|
&ddr2_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
am33xx_uart0_soft_reset();
|
am33xx_uart_soft_reset((void *)AM33XX_UART0_BASE);
|
||||||
am33xx_enable_uart0_pin_mux();
|
am33xx_enable_uart0_pin_mux();
|
||||||
omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
|
omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
|
||||||
putc_ll('>');
|
putc_ll('>');
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
lwl-y += lowlevel.o
|
lwl-y += lowlevel.o
|
||||||
obj-y += board.o
|
obj-y += board.o
|
||||||
|
bbenv-y += defaultenv-phycore-am335x
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <init.h>
|
#include <init.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <sizes.h>
|
#include <sizes.h>
|
||||||
|
#include <envfs.h>
|
||||||
#include <asm/armlinux.h>
|
#include <asm/armlinux.h>
|
||||||
#include <generated/mach-types.h>
|
#include <generated/mach-types.h>
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
|
@ -48,6 +49,13 @@ static struct omap_barebox_part pcm051_barebox_part = {
|
||||||
.nor_size = SZ_512K,
|
.nor_size = SZ_512K,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static char *xloadslots[] = {
|
||||||
|
"/dev/nand0.xload.bb",
|
||||||
|
"/dev/nand0.xload_backup1.bb",
|
||||||
|
"/dev/nand0.xload_backup2.bb",
|
||||||
|
"/dev/nand0.xload_backup3.bb"
|
||||||
|
};
|
||||||
|
|
||||||
static int pcm051_devices_init(void)
|
static int pcm051_devices_init(void)
|
||||||
{
|
{
|
||||||
if (!of_machine_is_compatible("phytec,pcm051"))
|
if (!of_machine_is_compatible("phytec,pcm051"))
|
||||||
|
@ -67,8 +75,11 @@ static int pcm051_devices_init(void)
|
||||||
|
|
||||||
omap_set_barebox_part(&pcm051_barebox_part);
|
omap_set_barebox_part(&pcm051_barebox_part);
|
||||||
armlinux_set_architecture(MACH_TYPE_PCM051);
|
armlinux_set_architecture(MACH_TYPE_PCM051);
|
||||||
|
defaultenv_append_directory(defaultenv_phycore_am335x);
|
||||||
|
|
||||||
am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload");
|
am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload");
|
||||||
|
am33xx_bbu_nand_xloadslots_register_handler("MLO.nand",
|
||||||
|
xloadslots, ARRAY_SIZE(xloadslots));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ static noinline void pcm051_board_init(void)
|
||||||
&MT41J256M8HX15E_2x256M8_regs,
|
&MT41J256M8HX15E_2x256M8_regs,
|
||||||
&MT41J256M8HX15E_2x256M8_data);
|
&MT41J256M8HX15E_2x256M8_data);
|
||||||
|
|
||||||
am33xx_uart0_soft_reset();
|
am33xx_uart_soft_reset((void *)AM33XX_UART0_BASE);
|
||||||
am33xx_enable_uart0_pin_mux();
|
am33xx_enable_uart0_pin_mux();
|
||||||
omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
|
omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
|
||||||
putc_ll('>');
|
putc_ll('>');
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
CONFIG_ARCH_OMAP=y
|
|
||||||
CONFIG_OMAP_MULTI_BOARDS=y
|
|
||||||
CONFIG_MACH_BEAGLEBONE=y
|
|
||||||
CONFIG_THUMB2_BAREBOX=y
|
|
||||||
CONFIG_CMD_ARM_MMUINFO=y
|
|
||||||
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
|
|
||||||
CONFIG_ARM_UNWIND=y
|
|
||||||
CONFIG_MMU=y
|
|
||||||
CONFIG_TEXT_BASE=0x8f000000
|
|
||||||
CONFIG_MALLOC_SIZE=0x0
|
|
||||||
CONFIG_MALLOC_TLSF=y
|
|
||||||
CONFIG_KALLSYMS=y
|
|
||||||
CONFIG_PROMPT="barebox> "
|
|
||||||
CONFIG_LONGHELP=y
|
|
||||||
CONFIG_HUSH_FANCY_PROMPT=y
|
|
||||||
CONFIG_CMDLINE_EDITING=y
|
|
||||||
CONFIG_AUTO_COMPLETE=y
|
|
||||||
CONFIG_MENU=y
|
|
||||||
# CONFIG_TIMESTAMP is not set
|
|
||||||
CONFIG_CONSOLE_ACTIVATE_NONE=y
|
|
||||||
CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
|
|
||||||
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/beaglebone/env"
|
|
||||||
CONFIG_CMD_EDIT=y
|
|
||||||
CONFIG_CMD_SLEEP=y
|
|
||||||
CONFIG_CMD_MSLEEP=y
|
|
||||||
CONFIG_CMD_SAVEENV=y
|
|
||||||
CONFIG_CMD_EXPORT=y
|
|
||||||
CONFIG_CMD_PRINTENV=y
|
|
||||||
CONFIG_CMD_READLINE=y
|
|
||||||
CONFIG_CMD_MENU=y
|
|
||||||
CONFIG_CMD_MENU_MANAGEMENT=y
|
|
||||||
CONFIG_CMD_TIME=y
|
|
||||||
CONFIG_CMD_LN=y
|
|
||||||
CONFIG_CMD_TFTP=y
|
|
||||||
CONFIG_CMD_FILETYPE=y
|
|
||||||
CONFIG_CMD_ECHO_E=y
|
|
||||||
CONFIG_CMD_MEMINFO=y
|
|
||||||
CONFIG_CMD_IOMEM=y
|
|
||||||
CONFIG_CMD_MM=y
|
|
||||||
CONFIG_CMD_CRC=y
|
|
||||||
CONFIG_CMD_CRC_CMP=y
|
|
||||||
CONFIG_CMD_MD5SUM=y
|
|
||||||
CONFIG_CMD_BOOTM_SHOW_TYPE=y
|
|
||||||
CONFIG_CMD_BOOTM_VERBOSE=y
|
|
||||||
CONFIG_CMD_BOOTM_INITRD=y
|
|
||||||
CONFIG_CMD_BOOTM_OFTREE=y
|
|
||||||
CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y
|
|
||||||
CONFIG_CMD_UIMAGE=y
|
|
||||||
CONFIG_CMD_RESET=y
|
|
||||||
CONFIG_CMD_GO=y
|
|
||||||
CONFIG_CMD_OFTREE=y
|
|
||||||
CONFIG_CMD_OF_PROPERTY=y
|
|
||||||
CONFIG_CMD_OF_NODE=y
|
|
||||||
CONFIG_CMD_TIMEOUT=y
|
|
||||||
CONFIG_CMD_PARTITION=y
|
|
||||||
CONFIG_CMD_MAGICVAR=y
|
|
||||||
CONFIG_CMD_MAGICVAR_HELP=y
|
|
||||||
CONFIG_CMD_GPIO=y
|
|
||||||
CONFIG_CMD_UNCOMPRESS=y
|
|
||||||
CONFIG_CMD_I2C=y
|
|
||||||
CONFIG_CMD_MIITOOL=y
|
|
||||||
CONFIG_CMD_DETECT=y
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_CMD_DHCP=y
|
|
||||||
CONFIG_CMD_PING=y
|
|
||||||
CONFIG_NET_NETCONSOLE=y
|
|
||||||
CONFIG_NET_RESOLV=y
|
|
||||||
CONFIG_OFDEVICE=y
|
|
||||||
CONFIG_OF_BAREBOX_DRIVERS=y
|
|
||||||
CONFIG_DRIVER_SERIAL_NS16550=y
|
|
||||||
CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
|
|
||||||
CONFIG_DRIVER_NET_CPSW=y
|
|
||||||
# CONFIG_SPI is not set
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_OMAP=y
|
|
||||||
CONFIG_MCI=y
|
|
||||||
CONFIG_MCI_OMAP_HSMMC=y
|
|
||||||
CONFIG_PINCTRL=y
|
|
||||||
CONFIG_PINCTRL_SINGLE=y
|
|
||||||
CONFIG_FS_TFTP=y
|
|
||||||
CONFIG_FS_NFS=y
|
|
||||||
CONFIG_FS_FAT=y
|
|
||||||
CONFIG_FS_FAT_WRITE=y
|
|
||||||
CONFIG_FS_FAT_LFN=y
|
|
|
@ -1,6 +1,7 @@
|
||||||
CONFIG_ARCH_OMAP=y
|
CONFIG_ARCH_OMAP=y
|
||||||
CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO=y
|
CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO=y
|
||||||
CONFIG_OMAP_MULTI_BOARDS=y
|
CONFIG_OMAP_MULTI_BOARDS=y
|
||||||
|
CONFIG_MACH_BEAGLEBONE=y
|
||||||
CONFIG_MACH_PCM051=y
|
CONFIG_MACH_PCM051=y
|
||||||
CONFIG_THUMB2_BAREBOX=y
|
CONFIG_THUMB2_BAREBOX=y
|
||||||
CONFIG_ARM_BOARD_APPEND_ATAG=y
|
CONFIG_ARM_BOARD_APPEND_ATAG=y
|
||||||
|
@ -13,7 +14,7 @@ CONFIG_MALLOC_SIZE=0x0
|
||||||
CONFIG_MALLOC_TLSF=y
|
CONFIG_MALLOC_TLSF=y
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
CONFIG_RELOCATABLE=y
|
CONFIG_RELOCATABLE=y
|
||||||
CONFIG_PROMPT="barebox@pcm051>"
|
CONFIG_PROMPT="barebox> "
|
||||||
CONFIG_LONGHELP=y
|
CONFIG_LONGHELP=y
|
||||||
CONFIG_HUSH_FANCY_PROMPT=y
|
CONFIG_HUSH_FANCY_PROMPT=y
|
||||||
CONFIG_CMDLINE_EDITING=y
|
CONFIG_CMDLINE_EDITING=y
|
||||||
|
@ -21,37 +22,52 @@ CONFIG_AUTO_COMPLETE=y
|
||||||
CONFIG_MENU=y
|
CONFIG_MENU=y
|
||||||
# CONFIG_TIMESTAMP is not set
|
# CONFIG_TIMESTAMP is not set
|
||||||
CONFIG_BLSPEC=y
|
CONFIG_BLSPEC=y
|
||||||
|
CONFIG_CONSOLE_ACTIVATE_NONE=y
|
||||||
CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
|
CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
|
||||||
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/phytec-phycore-am335x/env"
|
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
CONFIG_CMD_EDIT=y
|
CONFIG_CMD_EDIT=y
|
||||||
CONFIG_CMD_SLEEP=y
|
CONFIG_CMD_SLEEP=y
|
||||||
|
CONFIG_CMD_MSLEEP=y
|
||||||
CONFIG_CMD_SAVEENV=y
|
CONFIG_CMD_SAVEENV=y
|
||||||
|
CONFIG_CMD_LOADENV=y
|
||||||
CONFIG_CMD_EXPORT=y
|
CONFIG_CMD_EXPORT=y
|
||||||
CONFIG_CMD_PRINTENV=y
|
CONFIG_CMD_PRINTENV=y
|
||||||
CONFIG_CMD_READLINE=y
|
CONFIG_CMD_READLINE=y
|
||||||
|
CONFIG_CMD_READF=y
|
||||||
|
CONFIG_CMD_LET=y
|
||||||
CONFIG_CMD_MENU=y
|
CONFIG_CMD_MENU=y
|
||||||
CONFIG_CMD_MENU_MANAGEMENT=y
|
CONFIG_CMD_MENUTREE=y
|
||||||
CONFIG_CMD_TIME=y
|
CONFIG_CMD_TIME=y
|
||||||
|
CONFIG_CMD_LN=y
|
||||||
CONFIG_CMD_TFTP=y
|
CONFIG_CMD_TFTP=y
|
||||||
|
CONFIG_CMD_FILETYPE=y
|
||||||
CONFIG_CMD_ECHO_E=y
|
CONFIG_CMD_ECHO_E=y
|
||||||
CONFIG_CMD_LOADB=y
|
CONFIG_CMD_LOADB=y
|
||||||
CONFIG_CMD_MEMINFO=y
|
CONFIG_CMD_MEMINFO=y
|
||||||
CONFIG_CMD_IOMEM=y
|
CONFIG_CMD_IOMEM=y
|
||||||
|
CONFIG_CMD_MM=y
|
||||||
CONFIG_CMD_CRC=y
|
CONFIG_CMD_CRC=y
|
||||||
CONFIG_CMD_CRC_CMP=y
|
CONFIG_CMD_CRC_CMP=y
|
||||||
CONFIG_CMD_MD5SUM=y
|
CONFIG_CMD_MD5SUM=y
|
||||||
CONFIG_CMD_FLASH=y
|
CONFIG_CMD_FLASH=y
|
||||||
CONFIG_CMD_UBIFORMAT=y
|
CONFIG_CMD_UBIFORMAT=y
|
||||||
CONFIG_CMD_BOOTM_SHOW_TYPE=y
|
CONFIG_CMD_BOOTM_SHOW_TYPE=y
|
||||||
|
CONFIG_CMD_BOOTM_VERBOSE=y
|
||||||
|
CONFIG_CMD_BOOTM_INITRD=y
|
||||||
|
CONFIG_CMD_BOOTM_OFTREE=y
|
||||||
CONFIG_CMD_UIMAGE=y
|
CONFIG_CMD_UIMAGE=y
|
||||||
CONFIG_CMD_BOOTZ=y
|
CONFIG_CMD_BOOTZ=y
|
||||||
# CONFIG_CMD_BOOTU is not set
|
# CONFIG_CMD_BOOTU is not set
|
||||||
CONFIG_CMD_RESET=y
|
CONFIG_CMD_RESET=y
|
||||||
CONFIG_CMD_GO=y
|
CONFIG_CMD_GO=y
|
||||||
|
CONFIG_CMD_OFTREE=y
|
||||||
|
CONFIG_CMD_OF_PROPERTY=y
|
||||||
|
CONFIG_CMD_OF_NODE=y
|
||||||
CONFIG_CMD_BAREBOX_UPDATE=y
|
CONFIG_CMD_BAREBOX_UPDATE=y
|
||||||
CONFIG_CMD_TIMEOUT=y
|
CONFIG_CMD_TIMEOUT=y
|
||||||
CONFIG_CMD_PARTITION=y
|
CONFIG_CMD_PARTITION=y
|
||||||
|
CONFIG_CMD_MAGICVAR=y
|
||||||
|
CONFIG_CMD_MAGICVAR_HELP=y
|
||||||
CONFIG_CMD_GPIO=y
|
CONFIG_CMD_GPIO=y
|
||||||
CONFIG_CMD_UNCOMPRESS=y
|
CONFIG_CMD_UNCOMPRESS=y
|
||||||
CONFIG_CMD_I2C=y
|
CONFIG_CMD_I2C=y
|
||||||
|
@ -64,6 +80,8 @@ CONFIG_NET=y
|
||||||
CONFIG_CMD_DHCP=y
|
CONFIG_CMD_DHCP=y
|
||||||
CONFIG_NET_NFS=y
|
CONFIG_NET_NFS=y
|
||||||
CONFIG_CMD_PING=y
|
CONFIG_CMD_PING=y
|
||||||
|
CONFIG_NET_NETCONSOLE=y
|
||||||
|
CONFIG_NET_RESOLV=y
|
||||||
CONFIG_OFDEVICE=y
|
CONFIG_OFDEVICE=y
|
||||||
CONFIG_OF_BAREBOX_DRIVERS=y
|
CONFIG_OF_BAREBOX_DRIVERS=y
|
||||||
CONFIG_DRIVER_SERIAL_NS16550=y
|
CONFIG_DRIVER_SERIAL_NS16550=y
|
||||||
|
@ -87,7 +105,6 @@ CONFIG_LED_GPIO_OF=y
|
||||||
CONFIG_LED_TRIGGERS=y
|
CONFIG_LED_TRIGGERS=y
|
||||||
CONFIG_EEPROM_AT24=y
|
CONFIG_EEPROM_AT24=y
|
||||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||||
CONFIG_PINCTRL=y
|
|
||||||
CONFIG_PINCTRL_SINGLE=y
|
CONFIG_PINCTRL_SINGLE=y
|
||||||
CONFIG_BUS_OMAP_GPMC=y
|
CONFIG_BUS_OMAP_GPMC=y
|
||||||
CONFIG_FS_TFTP=y
|
CONFIG_FS_TFTP=y
|
|
@ -93,6 +93,16 @@ config BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO
|
||||||
Say Y for barebox update SPI NOR MLO handler.
|
Say Y for barebox update SPI NOR MLO handler.
|
||||||
AM35xx, AM33xx chips use big endian MLO for SPI NOR flash.
|
AM35xx, AM33xx chips use big endian MLO for SPI NOR flash.
|
||||||
|
|
||||||
|
config BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS
|
||||||
|
prompt "barebox update nand xload slots handler"
|
||||||
|
bool
|
||||||
|
depends on BAREBOX_UPDATE
|
||||||
|
help
|
||||||
|
Say Y for barebox update nand xload slots handler.
|
||||||
|
This update handler updates 4 default nand xload slots
|
||||||
|
with a single command.
|
||||||
|
The Handler also checks if the given image has a valid CH header.
|
||||||
|
|
||||||
config ARCH_TEXT_BASE
|
config ARCH_TEXT_BASE
|
||||||
hex
|
hex
|
||||||
default 0x80e80000 if MACH_OMAP343xSDP
|
default 0x80e80000 if MACH_OMAP343xSDP
|
||||||
|
|
|
@ -32,3 +32,4 @@ obj-$(CONFIG_MFD_TWL6030) += omap4_twl6030_mmc.o
|
||||||
obj-$(CONFIG_OMAP4_USBBOOT) += omap4_rom_usb.o
|
obj-$(CONFIG_OMAP4_USBBOOT) += omap4_rom_usb.o
|
||||||
obj-$(CONFIG_CMD_BOOT_ORDER) += boot_order.o
|
obj-$(CONFIG_CMD_BOOT_ORDER) += boot_order.o
|
||||||
obj-$(CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO) += am33xx_bbu_spi_mlo.o
|
obj-$(CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO) += am33xx_bbu_spi_mlo.o
|
||||||
|
obj-$(CONFIG_BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS) += am33xx_bbu_nand_xloadslots.o
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
* am33xx_bbu_nand_xloadslots.c - barebox update handler for
|
||||||
|
* the nand xload slots.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014 Wadim Egorov <w.egorov@phytec.de>, Phytec
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2
|
||||||
|
* as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <bbu.h>
|
||||||
|
#include <fs.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <filetype.h>
|
||||||
|
|
||||||
|
struct nand_bbu_handler {
|
||||||
|
struct bbu_handler bbu_handler;
|
||||||
|
char **devicefile;
|
||||||
|
int num_devicefiles;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int write_image(const char *devfile, const void *image, size_t size)
|
||||||
|
{
|
||||||
|
int fd = 0;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
fd = open(devfile, O_WRONLY);
|
||||||
|
if (fd < 0) {
|
||||||
|
pr_err("could not open %s: %s\n", devfile,
|
||||||
|
errno_str());
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = erase(fd, ~0, 0);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("could not erase %s: %s\n", devfile,
|
||||||
|
errno_str());
|
||||||
|
close(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = write(fd, image, size);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("could not write to fd %s: %s\n", devfile,
|
||||||
|
errno_str());
|
||||||
|
close(fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This handler updates all given xload slots in nand with an image.
|
||||||
|
*/
|
||||||
|
static int nand_xloadslots_update_handler(struct bbu_handler *handler,
|
||||||
|
struct bbu_data *data)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
const void *image = data->image;
|
||||||
|
size_t size = data->len;
|
||||||
|
struct nand_bbu_handler *nh;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
if (file_detect_type(image, size) != filetype_ch_image) {
|
||||||
|
pr_err("%s is not a valid ch-image\n", data->imagefile);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nh = container_of(handler, struct nand_bbu_handler, bbu_handler);
|
||||||
|
|
||||||
|
/* check if the devicefile has been overwritten */
|
||||||
|
if (strcmp(data->devicefile, nh->devicefile[0]) != 0) {
|
||||||
|
ret = bbu_confirm(data);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = write_image(data->devicefile, image, size);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < nh->num_devicefiles; i++) {
|
||||||
|
ret = write_image(nh->devicefile[i], image, size);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
||||||
|
char **devicefile,
|
||||||
|
int num_devicefiles)
|
||||||
|
{
|
||||||
|
struct nand_bbu_handler *handler;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
handler = xzalloc(sizeof(*handler));
|
||||||
|
handler->devicefile = devicefile;
|
||||||
|
handler->num_devicefiles = num_devicefiles;
|
||||||
|
handler->bbu_handler.devicefile = devicefile[0];
|
||||||
|
handler->bbu_handler.handler = nand_xloadslots_update_handler;
|
||||||
|
handler->bbu_handler.name = name;
|
||||||
|
|
||||||
|
ret = bbu_register_handler(&handler->bbu_handler);
|
||||||
|
if (ret)
|
||||||
|
free(handler);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
|
@ -32,6 +32,18 @@ static int spi_nor_mlo_handler(struct bbu_handler *handler,
|
||||||
uint32_t readbuf;
|
uint32_t readbuf;
|
||||||
int size = data->len;
|
int size = data->len;
|
||||||
void *image = data->image;
|
void *image = data->image;
|
||||||
|
uint32_t *header;
|
||||||
|
int swap = 0;
|
||||||
|
|
||||||
|
header = data->image;
|
||||||
|
if (header[5] == 0x43485345) {
|
||||||
|
swap = 0;
|
||||||
|
} else if (header[5] == 0x45534843) {
|
||||||
|
swap = 1;
|
||||||
|
} else {
|
||||||
|
if (!bbu_force(data, "Not a MLO image"))
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
dstfd = open(data->devicefile, O_WRONLY);
|
dstfd = open(data->devicefile, O_WRONLY);
|
||||||
if (dstfd < 0) {
|
if (dstfd < 0) {
|
||||||
|
@ -49,7 +61,8 @@ static int spi_nor_mlo_handler(struct bbu_handler *handler,
|
||||||
for (; size >= 0; size -= 4) {
|
for (; size >= 0; size -= 4) {
|
||||||
memcpy((char *)&readbuf, image, 4);
|
memcpy((char *)&readbuf, image, 4);
|
||||||
|
|
||||||
readbuf = cpu_to_be32(readbuf);
|
if (swap)
|
||||||
|
readbuf = cpu_to_be32(readbuf);
|
||||||
ret = write(dstfd, &readbuf, 4);
|
ret = write(dstfd, &readbuf, 4);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
perror("write");
|
perror("write");
|
||||||
|
@ -66,6 +79,41 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int spi_nor_handler(struct bbu_handler *handler,
|
||||||
|
struct bbu_data *data)
|
||||||
|
{
|
||||||
|
int fd, ret;
|
||||||
|
|
||||||
|
if (file_detect_type(data->image, data->len) != filetype_arm_barebox) {
|
||||||
|
if (!bbu_force(data, "Not an ARM barebox image"))
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd = open(data->devicefile, O_RDWR | O_CREAT);
|
||||||
|
if (fd < 0)
|
||||||
|
return fd;
|
||||||
|
|
||||||
|
debug("%s: eraseing %s from 0 to 0x%08x\n", __func__,
|
||||||
|
data->devicefile, data->len);
|
||||||
|
ret = erase(fd, data->len, 0);
|
||||||
|
if (ret) {
|
||||||
|
printf("erasing %s failed with %s\n", data->devicefile,
|
||||||
|
strerror(-ret));
|
||||||
|
goto err_close;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = write(fd, data->image, data->len);
|
||||||
|
if (ret < 0)
|
||||||
|
goto err_close;
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
err_close:
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register a am33xx MLO update handler for SPI NOR
|
* Register a am33xx MLO update handler for SPI NOR
|
||||||
*/
|
*/
|
||||||
|
@ -86,3 +134,24 @@ int am33xx_bbu_spi_nor_mlo_register_handler(const char *name, char *devicefile)
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register a am33xx update handler for SPI NOR
|
||||||
|
*/
|
||||||
|
int am33xx_bbu_spi_nor_register_handler(const char *name, char *devicefile)
|
||||||
|
{
|
||||||
|
struct bbu_handler *handler;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
handler = xzalloc(sizeof(*handler));
|
||||||
|
handler->devicefile = devicefile;
|
||||||
|
handler->name = name;
|
||||||
|
handler->handler = spi_nor_handler;
|
||||||
|
|
||||||
|
ret = bbu_register_handler(handler);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
free(handler);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
@ -141,6 +141,12 @@ static int am33xx_bootsource(void)
|
||||||
case 0x0b:
|
case 0x0b:
|
||||||
src = BOOTSOURCE_SPI;
|
src = BOOTSOURCE_SPI;
|
||||||
break;
|
break;
|
||||||
|
case 0x41:
|
||||||
|
src = BOOTSOURCE_SERIAL;
|
||||||
|
break;
|
||||||
|
case 0x44:
|
||||||
|
src = BOOTSOURCE_USB;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
src = BOOTSOURCE_UNKNOWN;
|
src = BOOTSOURCE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -220,22 +226,22 @@ int am33xx_devices_init(void)
|
||||||
#define UART_RESET (0x1 << 1)
|
#define UART_RESET (0x1 << 1)
|
||||||
#define UART_SMART_IDLE_EN (0x1 << 0x3)
|
#define UART_SMART_IDLE_EN (0x1 << 0x3)
|
||||||
|
|
||||||
void am33xx_uart0_soft_reset(void)
|
void am33xx_uart_soft_reset(void __iomem *uart_base)
|
||||||
{
|
{
|
||||||
int reg;
|
int reg;
|
||||||
|
|
||||||
reg = readl(AM33XX_UART0_BASE + UART_SYSCFG_OFFSET);
|
reg = readl(uart_base + UART_SYSCFG_OFFSET);
|
||||||
reg |= UART_RESET;
|
reg |= UART_RESET;
|
||||||
writel(reg, (AM33XX_UART0_BASE + UART_SYSCFG_OFFSET));
|
writel(reg, (uart_base + UART_SYSCFG_OFFSET));
|
||||||
|
|
||||||
while ((readl(AM33XX_UART0_BASE + UART_SYSSTS_OFFSET) &
|
while ((readl(uart_base + UART_SYSSTS_OFFSET) &
|
||||||
UART_CLK_RUNNING_MASK) != UART_CLK_RUNNING_MASK)
|
UART_CLK_RUNNING_MASK) != UART_CLK_RUNNING_MASK)
|
||||||
;
|
;
|
||||||
|
|
||||||
/* Disable smart idle */
|
/* Disable smart idle */
|
||||||
reg = readl((AM33XX_UART0_BASE + UART_SYSCFG_OFFSET));
|
reg = readl((uart_base + UART_SYSCFG_OFFSET));
|
||||||
reg |= UART_SMART_IDLE_EN;
|
reg |= UART_SMART_IDLE_EN;
|
||||||
writel(reg, (AM33XX_UART0_BASE + UART_SYSCFG_OFFSET));
|
writel(reg, (uart_base + UART_SYSCFG_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef __MACH_AM33XX_GENERIC_H
|
#ifndef __MACH_AM33XX_GENERIC_H
|
||||||
#define __MACH_AM33XX_GENERIC_H
|
#define __MACH_AM33XX_GENERIC_H
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
#include <mach/generic.h>
|
#include <mach/generic.h>
|
||||||
#include <mach/am33xx-silicon.h>
|
#include <mach/am33xx-silicon.h>
|
||||||
|
|
||||||
|
|
|
@ -228,7 +228,7 @@ struct am33xx_ddr_data {
|
||||||
u32 dll_lock_diff0;
|
u32 dll_lock_diff0;
|
||||||
};
|
};
|
||||||
|
|
||||||
void am33xx_uart0_soft_reset(void);
|
void am33xx_uart_soft_reset(void __iomem *uart_base);
|
||||||
void am33xx_config_vtp(void);
|
void am33xx_config_vtp(void);
|
||||||
void am33xx_ddr_phydata_cmd_macro(const struct am33xx_cmd_control *cmd_ctrl);
|
void am33xx_ddr_phydata_cmd_macro(const struct am33xx_cmd_control *cmd_ctrl);
|
||||||
void am33xx_config_io_ctrl(int ioctrl);
|
void am33xx_config_io_ctrl(int ioctrl);
|
||||||
|
|
|
@ -5,11 +5,30 @@
|
||||||
|
|
||||||
#ifdef CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO
|
#ifdef CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO
|
||||||
int am33xx_bbu_spi_nor_mlo_register_handler(const char *name, char *devicefile);
|
int am33xx_bbu_spi_nor_mlo_register_handler(const char *name, char *devicefile);
|
||||||
|
int am33xx_bbu_spi_nor_register_handler(const char *name, char *devicefile);
|
||||||
#else
|
#else
|
||||||
static inline int am33xx_bbu_spi_nor_mlo_register_handler(const char *name, char *devicefile)
|
static inline int am33xx_bbu_spi_nor_mlo_register_handler(const char *name, char *devicefile)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int am33xx_bbu_spi_nor_register_handler(const char *name, char *devicefile)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS
|
||||||
|
int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
||||||
|
char **devicefile,
|
||||||
|
int num_devicefiles);
|
||||||
|
#else
|
||||||
|
static inline int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
||||||
|
char **devicefile,
|
||||||
|
int num_devicefiles)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -106,8 +106,15 @@ int spi_claim_bus(struct spi_device *spi)
|
||||||
/* standard 4-wire master mode: SCK, MOSI/out, MISO/in, nCS
|
/* standard 4-wire master mode: SCK, MOSI/out, MISO/in, nCS
|
||||||
* REVISIT: this controller could support SPI_3WIRE mode.
|
* REVISIT: this controller could support SPI_3WIRE mode.
|
||||||
*/
|
*/
|
||||||
conf &= ~(OMAP3_MCSPI_CHCONF_IS|OMAP3_MCSPI_CHCONF_DPE1);
|
if (omap3_master->swap_miso_mosi) {
|
||||||
conf |= OMAP3_MCSPI_CHCONF_DPE0;
|
/* swapped */
|
||||||
|
conf |= (OMAP3_MCSPI_CHCONF_IS | OMAP3_MCSPI_CHCONF_DPE1);
|
||||||
|
conf &= ~OMAP3_MCSPI_CHCONF_DPE0;
|
||||||
|
} else {
|
||||||
|
/* bootloader default */
|
||||||
|
conf &= ~(OMAP3_MCSPI_CHCONF_IS | OMAP3_MCSPI_CHCONF_DPE1);
|
||||||
|
conf |= OMAP3_MCSPI_CHCONF_DPE0;
|
||||||
|
}
|
||||||
|
|
||||||
/* wordlength */
|
/* wordlength */
|
||||||
conf &= ~OMAP3_MCSPI_CHCONF_WL_MASK;
|
conf &= ~OMAP3_MCSPI_CHCONF_WL_MASK;
|
||||||
|
@ -343,6 +350,17 @@ static int omap3_spi_setup(struct spi_device *spi)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int omap3_spi_probe_dt(struct device_d *dev, struct omap3_spi_master *omap3_master)
|
||||||
|
{
|
||||||
|
if (!IS_ENABLED(CONFIG_OFDEVICE) || !dev->device_node)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (of_property_read_bool(dev->device_node, "ti,pindir-d0-out-d1-in"))
|
||||||
|
omap3_master->swap_miso_mosi = 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int omap3_spi_probe(struct device_d *dev)
|
static int omap3_spi_probe(struct device_d *dev)
|
||||||
{
|
{
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
|
@ -356,6 +374,8 @@ static int omap3_spi_probe(struct device_d *dev)
|
||||||
|
|
||||||
omap3_master = xzalloc(sizeof(*omap3_master));
|
omap3_master = xzalloc(sizeof(*omap3_master));
|
||||||
|
|
||||||
|
omap3_spi_probe_dt(dev, omap3_master);
|
||||||
|
|
||||||
master = &omap3_master->master;
|
master = &omap3_master->master;
|
||||||
master->dev = dev;
|
master->dev = dev;
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,7 @@ struct omap3_spi_master {
|
||||||
* offset of 0x100 between start of register space
|
* offset of 0x100 between start of register space
|
||||||
* and registers
|
* and registers
|
||||||
*/
|
*/
|
||||||
|
int swap_miso_mosi;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _OMAP3_SPI_H_ */
|
#endif /* _OMAP3_SPI_H_ */
|
||||||
|
|
|
@ -13,7 +13,7 @@ hostprogs-y += kernel-install
|
||||||
hostprogs-$(CONFIG_KALLSYMS) += kallsyms
|
hostprogs-$(CONFIG_KALLSYMS) += kallsyms
|
||||||
hostprogs-$(CONFIG_ARCH_MVEBU) += kwbimage kwboot
|
hostprogs-$(CONFIG_ARCH_MVEBU) += kwbimage kwboot
|
||||||
hostprogs-$(CONFIG_ARCH_NETX) += gen_netx_image
|
hostprogs-$(CONFIG_ARCH_NETX) += gen_netx_image
|
||||||
hostprogs-$(CONFIG_ARCH_OMAP) += omap_signGP mk-am35xx-spi-image
|
hostprogs-$(CONFIG_ARCH_OMAP) += omap_signGP mk-am3xxx-spi-image
|
||||||
hostprogs-$(CONFIG_ARCH_S5PCxx) += s5p_cksum
|
hostprogs-$(CONFIG_ARCH_S5PCxx) += s5p_cksum
|
||||||
hostprogs-$(CONFIG_ARCH_DAVINCI) += mkublheader
|
hostprogs-$(CONFIG_ARCH_DAVINCI) += mkublheader
|
||||||
hostprogs-$(CONFIG_ARCH_ZYNQ) += zynq_mkimage
|
hostprogs-$(CONFIG_ARCH_ZYNQ) += zynq_mkimage
|
||||||
|
|
|
@ -48,32 +48,66 @@
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
|
|
||||||
|
enum soc {
|
||||||
|
SOC_AM33XX,
|
||||||
|
SOC_AM35XX,
|
||||||
|
SOC_UNKNOWN,
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *soc_names[] = {
|
||||||
|
[SOC_AM33XX] = "am33xx",
|
||||||
|
[SOC_AM35XX] = "am35xx",
|
||||||
|
};
|
||||||
|
|
||||||
void usage(char *prgname)
|
void usage(char *prgname)
|
||||||
{
|
{
|
||||||
printf("usage: %s [OPTION] FILE > IMAGE\n"
|
printf("usage: %s [OPTION] FILE > IMAGE\n"
|
||||||
"\n"
|
"\n"
|
||||||
"options:\n"
|
"options:\n"
|
||||||
" -a <address> memory address for the loaded image in SRAM\n",
|
" -a <address> memory address for the loaded image in SRAM\n"
|
||||||
|
" -s <soc> SoC to use (am33xx, am35xx)\n",
|
||||||
prgname);
|
prgname);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
FILE *input;
|
FILE *input;
|
||||||
int opt;
|
int opt, i;
|
||||||
off_t pos;
|
off_t pos;
|
||||||
size_t size;
|
size_t size;
|
||||||
uint32_t addr = 0x40200000;
|
uint32_t addr = 0x40200000;
|
||||||
uint32_t temp;
|
uint32_t temp;
|
||||||
|
enum soc soc = SOC_UNKNOWN;
|
||||||
|
char *socname = NULL;
|
||||||
|
|
||||||
while((opt = getopt(argc, argv, "a:")) != -1) {
|
while((opt = getopt(argc, argv, "a:s:")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'a':
|
case 'a':
|
||||||
addr = strtoul(optarg, NULL, 0);
|
addr = strtoul(optarg, NULL, 0);
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
socname = optarg;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!socname) {
|
||||||
|
fprintf(stderr, "SoC not specified. Use -s <soc>\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
if (!strcmp(socname, soc_names[i])) {
|
||||||
|
soc = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (soc == SOC_UNKNOWN) {
|
||||||
|
fprintf(stderr, "SoC %s unknown\n", socname);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
if (optind >= argc) {
|
if (optind >= argc) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -108,12 +142,14 @@ int main(int argc, char *argv[])
|
||||||
pos = (pos + 3) & ~3;
|
pos = (pos + 3) & ~3;
|
||||||
|
|
||||||
/* image size */
|
/* image size */
|
||||||
temp = htobe32((uint32_t)pos);
|
if (soc == SOC_AM35XX) {
|
||||||
fwrite(&temp, sizeof(uint32_t), 1, stdout);
|
temp = htobe32((uint32_t)pos);
|
||||||
|
fwrite(&temp, sizeof(uint32_t), 1, stdout);
|
||||||
|
|
||||||
/* memory address */
|
/* memory address */
|
||||||
temp = htobe32(addr);
|
temp = htobe32(addr);
|
||||||
fwrite(&temp, sizeof(uint32_t), 1, stdout);
|
fwrite(&temp, sizeof(uint32_t), 1, stdout);
|
||||||
|
}
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
size = fread(&temp, 1, sizeof(uint32_t), input);
|
size = fread(&temp, 1, sizeof(uint32_t), input);
|
Loading…
Reference in New Issue