etrax: R.I.P.

It is broken and it is not maintained by anyone since long time.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 34768
This commit is contained in:
Gabor Juhos 2012-12-18 17:54:04 +00:00
parent b86e82e5cc
commit 1080f68b2b
29 changed files with 0 additions and 8351 deletions

View file

@ -1,33 +0,0 @@
#
# Copyright (C) 2006-2011 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
ARCH:=cris
BOARD:=etrax
MAINTAINER:=Claudio Mignanti <c.mignanti@gmail.com>
BOARDNAME:=Axis ETRAX 100LX
FEATURES:=squashfs jffs2 usb broken
LINUX_VERSION:=2.6.32.33
DEVICE_TYPE=
include $(INCLUDE_DIR)/target.mk
KERNELNAME:="zImage"
define Target/Description
Build firmware images for the FOXBOARD made by acmesystems.it
endef
define Kernel/Prepare
$(call Kernel/Prepare/Default)
mkdir -p $(LINUX_DIR)/include/asm-cris
$(CP) $(LINUX_DIR)/arch/cris/include/asm/*.h $(LINUX_DIR)/include/asm-cris
mkdir -p $(LINUX_DIR)/include/asm-cris/arch
$(CP) $(LINUX_DIR)/arch/cris/include/arch-v10/arch/*.h $(LINUX_DIR)/include/asm-cris/arch
endef
$(eval $(call BuildTarget))

View file

@ -1,6 +0,0 @@
config defaults
option syn_flood 1
option input ACCEPT
option output ACCEPT
option forward REJECT

View file

@ -1,18 +0,0 @@
# Copyright (C) 2009 OpenWrt.org
config interface loopback
option ifname lo
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0
config interface lan
option ifname eth0
option type none
option proto static
option ipaddr 192.168.1.1
option netmask 255.255.255.0
# option macaddr 00:40:8c:cd:xx:xx

View file

@ -1,173 +0,0 @@
CONFIG_BITREVERSE=y
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_BOUNCE=y
# CONFIG_BRIDGE is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_CFG80211_DEFAULT_PS_VALUE=0
CONFIG_CRIS=y
# CONFIG_CRIS_MACH_ARTPEC3 is not set
CONFIG_DECOMPRESS_LZMA=y
# CONFIG_ETRAX100LX is not set
CONFIG_ETRAX100LX_V2=y
# CONFIG_ETRAXFS is not set
CONFIG_ETRAX_ARCH_V10=y
# CONFIG_ETRAX_ARCH_V32 is not set
CONFIG_ETRAX_AXISFLASHMAP=y
CONFIG_ETRAX_CMDLINE="root=/dev/mtdblock1 rootfstype=jffs2 noinitrd console=ttyS0,115200"
# CONFIG_ETRAX_CSP0_LEDS is not set
# CONFIG_ETRAX_DEBUG_PORT0 is not set
# CONFIG_ETRAX_DEBUG_PORT1 is not set
# CONFIG_ETRAX_DEBUG_PORT2 is not set
# CONFIG_ETRAX_DEBUG_PORT3 is not set
CONFIG_ETRAX_DEBUG_PORT_NULL=y
CONFIG_ETRAX_DEF_R_BUS_CONFIG=0x4
CONFIG_ETRAX_DEF_R_PORT_PA_DATA=0xf0
CONFIG_ETRAX_DEF_R_PORT_PA_DIR=0x1c
CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG=0x00
CONFIG_ETRAX_DEF_R_PORT_PB_DATA=0x03
CONFIG_ETRAX_DEF_R_PORT_PB_DIR=0xce
CONFIG_ETRAX_DEF_R_SDRAM_CONFIG=0x09603737
CONFIG_ETRAX_DEF_R_SDRAM_TIMING=0x80008002
CONFIG_ETRAX_DEF_R_WAITSTATES=0x95f8
CONFIG_ETRAX_DRAM_SIZE=32
CONFIG_ETRAX_DRAM_VIRTUAL_BASE=c0000000
CONFIG_ETRAX_ETHERNET=y
CONFIG_ETRAX_FAST_TIMER=y
CONFIG_ETRAX_FLASH1_SIZE=0
CONFIG_ETRAX_FLASH_BUSWIDTH=2
CONFIG_ETRAX_GPIO=y
# CONFIG_ETRAX_I2C is not set
# CONFIG_ETRAX_I2C_GVC is not set
# CONFIG_ETRAX_KMALLOCED_MODULES is not set
CONFIG_ETRAX_LED1G=2
CONFIG_ETRAX_LED1R=2
CONFIG_ETRAX_LED2G=3
CONFIG_ETRAX_LED2R=3
CONFIG_ETRAX_LED3G=2
CONFIG_ETRAX_LED3R=2
CONFIG_ETRAX_NANDFLASH_BUSWIDTH=1
CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY=y
# CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK is not set
# CONFIG_ETRAX_NO_LEDS is not set
CONFIG_ETRAX_PA_BUTTON_BITMASK=02
CONFIG_ETRAX_PA_CHANGEABLE_BITS=0xFF
CONFIG_ETRAX_PA_CHANGEABLE_DIR=0xFF
CONFIG_ETRAX_PA_LEDS=y
CONFIG_ETRAX_PB_CHANGEABLE_BITS=0xFF
CONFIG_ETRAX_PB_CHANGEABLE_DIR=0xFF
# CONFIG_ETRAX_PB_LEDS is not set
CONFIG_ETRAX_PTABLE_SECTOR=0
CONFIG_ETRAX_RESCUE_SER0=y
# CONFIG_ETRAX_RESCUE_SER1 is not set
# CONFIG_ETRAX_RESCUE_SER2 is not set
# CONFIG_ETRAX_RESCUE_SER3 is not set
# CONFIG_ETRAX_RS485 is not set
CONFIG_ETRAX_SDRAM=y
CONFIG_ETRAX_SER0_CD_ON_PA_BIT=-1
CONFIG_ETRAX_SER0_CD_ON_PB_BIT=-1
CONFIG_ETRAX_SER0_DSR_ON_PA_BIT=-1
CONFIG_ETRAX_SER0_DSR_ON_PB_BIT=-1
CONFIG_ETRAX_SER0_DTR_ON_PA_BIT=-1
CONFIG_ETRAX_SER0_DTR_ON_PB_BIT=-1
# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED is not set
CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_NONE=y
# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PA is not set
# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PB is not set
CONFIG_ETRAX_SER0_RI_ON_PA_BIT=-1
CONFIG_ETRAX_SER0_RI_ON_PB_BIT=-1
CONFIG_ETRAX_SER2_CD_ON_PA_BIT=-1
CONFIG_ETRAX_SER2_CD_ON_PB_BIT=-1
CONFIG_ETRAX_SER2_DSR_ON_PA_BIT=-1
CONFIG_ETRAX_SER2_DSR_ON_PB_BIT=-1
CONFIG_ETRAX_SER2_DTR_ON_PA_BIT=-1
CONFIG_ETRAX_SER2_DTR_ON_PB_BIT=-1
# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED is not set
CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_NONE=y
# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PA is not set
# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PB is not set
CONFIG_ETRAX_SER2_RI_ON_PA_BIT=-1
CONFIG_ETRAX_SER2_RI_ON_PB_BIT=-1
CONFIG_ETRAX_SER3_CD_ON_PA_BIT=-1
CONFIG_ETRAX_SER3_CD_ON_PB_BIT=-1
CONFIG_ETRAX_SER3_DSR_ON_PA_BIT=-1
CONFIG_ETRAX_SER3_DSR_ON_PB_BIT=-1
CONFIG_ETRAX_SER3_DTR_ON_PA_BIT=-1
CONFIG_ETRAX_SER3_DTR_ON_PB_BIT=-1
# CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED is not set
CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_ON_NONE=y
# CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_ON_PA is not set
# CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_ON_PB is not set
CONFIG_ETRAX_SER3_RI_ON_PA_BIT=-1
CONFIG_ETRAX_SER3_RI_ON_PB_BIT=-1
CONFIG_ETRAX_SERIAL=y
# CONFIG_ETRAX_SERIAL_FAST_TIMER is not set
# CONFIG_ETRAX_SERIAL_FLUSH_DMA_FAST is not set
CONFIG_ETRAX_SERIAL_PORT0=y
# CONFIG_ETRAX_SERIAL_PORT0_DMA0_OUT is not set
# CONFIG_ETRAX_SERIAL_PORT0_DMA1_IN is not set
# CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT is not set
# CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN is not set
CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_IN=y
CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_OUT=y
# CONFIG_ETRAX_SERIAL_PORT1 is not set
CONFIG_ETRAX_SERIAL_PORT2=y
CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT=y
CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN=y
# CONFIG_ETRAX_SERIAL_PORT2_DMA6_OUT is not set
# CONFIG_ETRAX_SERIAL_PORT2_DMA7_IN is not set
# CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_IN is not set
# CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_OUT is not set
CONFIG_ETRAX_SERIAL_PORT3=y
# CONFIG_ETRAX_SERIAL_PORT3_DMA2_OUT is not set
# CONFIG_ETRAX_SERIAL_PORT3_DMA3_IN is not set
CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT=y
CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN=y
# CONFIG_ETRAX_SERIAL_PORT3_DMA8_OUT is not set
# CONFIG_ETRAX_SERIAL_PORT3_DMA9_IN is not set
# CONFIG_ETRAX_SERIAL_PORT3_NO_DMA_IN is not set
# CONFIG_ETRAX_SERIAL_PORT3_NO_DMA_OUT is not set
CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS=5
# CONFIG_ETRAX_SOFT_SHUTDOWN is not set
# CONFIG_ETRAX_SYNCHRONOUS_SERIAL is not set
CONFIG_ETRAX_USB_HOST=y
CONFIG_ETRAX_USB_HOST_PORT1=y
CONFIG_ETRAX_USB_HOST_PORT2=y
# CONFIG_ETRAX_VCS_SIM is not set
# CONFIG_ETRAX_WATCHDOG is not set
CONFIG_FORCE_MAX_ZONEORDER=6
# CONFIG_FSNOTIFY is not set
CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_IOMAP=y
# CONFIG_GEN_RTC is not set
# CONFIG_HAMRADIO is not set
CONFIG_HAS_DMA=y
CONFIG_HAS_IOMEM=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_HAVE_IDE=y
# CONFIG_HW_RANDOM is not set
CONFIG_MTDRAM_ABS_POS=0
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTDRAM_TOTAL_SIZE=0
# CONFIG_MTD_CFI_INTELEXT is not set
CONFIG_MTD_CONCAT=y
CONFIG_MTD_MTDRAM=y
# CONFIG_NETDEV_1000 is not set
CONFIG_NLS=y
CONFIG_NLS_UTF8=y
CONFIG_NO_IOPORT=y
# CONFIG_OOM_REBOOT is not set
CONFIG_PAGEFLAGS_EXTENDED=y
# CONFIG_RTC is not set
# CONFIG_SCSI_DMA is not set
# CONFIG_SERIAL_8250 is not set
# CONFIG_SVINTO_SIM is not set
# CONFIG_SYSTEM_PROFILER is not set
# CONFIG_TREE_PREEMPT_RCU is not set
CONFIG_TREE_RCU=y
CONFIG_UID16=y
CONFIG_USB=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
# CONFIG_USB_ARCH_HAS_HCD is not set
# CONFIG_USB_ARCH_HAS_OHCI is not set
CONFIG_USB_SUPPORT=y

View file

@ -1,49 +0,0 @@
#ifndef _LINUX_ETRAXI2C_H
#define _LINUX_ETRAXI2C_H
/* etraxi2c _IOC_TYPE, bits 8 to 15 in ioctl cmd */
#define ETRAXI2C_IOCTYPE 44
/* supported ioctl _IOC_NR's */
/* in write operations, the argument contains both i2c
* slave, register and value.
*/
#define I2C_WRITEARG(slave, reg, value) (((slave) << 16) | ((reg) << 8) | (value))
#define I2C_READARG(slave, reg) (((slave) << 16) | ((reg) << 8))
#define I2C_ARGSLAVE(arg) ((arg) >> 16)
#define I2C_ARGREG(arg) (((arg) >> 8) & 0xff)
#define I2C_ARGVALUE(arg) ((arg) & 0xff)
#define I2C_WRITEREG 0x1 /* write to an I2C register */
#define I2C_READREG 0x2 /* read from an I2C register */
/*
EXAMPLE usage:
i2c_arg = I2C_WRITEARG(STA013_WRITE_ADDR, reg, val);
ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_WRITEREG), i2c_arg);
i2c_arg = I2C_READARG(STA013_READ_ADDR, reg);
val = ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg);
*/
/* Extended part */
#define I2C_READ 0x4 /* reads from I2C device */
#define I2C_WRITE 0x3 /* writes to I2C device */
#define I2C_WRITEREAD 0x5 /* writes to I2C device where to start reading */
typedef struct _I2C_DATA
{
unsigned char slave; /* I2C address (8-bit representation) of slave device */
unsigned char wbuf[256]; /* Write buffer (length = 256 bytes) */
unsigned int wlen; /* Number of bytes to write from wbuf[] */
unsigned char rbuf[256]; /* Read buffer (length = 256 bytes) */
unsigned int rlen; /* Number of bytes to read into rbuf[] */
} I2C_DATA;
#endif

View file

@ -1,20 +0,0 @@
#ifndef _I2C_ERRNO_H
#define _I2C_ERRNO_H
#define EI2CNOERRORS 0 /* All fine */
#define EI2CBUSNFREE 1 /* I2C bus not free */
#define EI2CWADDRESS 2 /* Address write failed */
#define EI2CRADDRESS 3 /* Address read failed */
#define EI2CSENDDATA 4 /* Sending data failed */
#define EI2CRECVDATA 5 /* Receiving data failed */
#define EI2CSTRTCOND 6 /* Start condition failed */
#define EI2CRSTACOND 7 /* Repeated start condition failed */
#define EI2CSTOPCOND 8 /* Stop condition failed */
#define EI2CNOSNDBYT 9 /* Number of send bytes is 0, while there's a send buffer defined */
#define EI2CNOSNDBUF 10 /* No send buffer defined, while number of send bytes is not 0 */
#define EI2CNORCVBYT 11 /* Number of receive bytes is 0, while there's a receive buffer defined */
#define EI2CNORCVBUF 12 /* No receive buffer defined, while number of receive bytes is not 0 */
#define EI2CNOACKNLD 13 /* No acknowledge received from slave */
#define EI2CNOMNUMBR 14 /* No MAJOR number received from kernel while registering the device */
#endif /* _I2C_ERRNO_H */

File diff suppressed because it is too large Load diff

View file

@ -1,30 +0,0 @@
#ifndef _I2C_H
#define _I2C_H
int i2c_init(void);
/* High level I2C actions */
int i2c_writereg(unsigned char theSlave, unsigned char theReg, unsigned char theValue);
unsigned char i2c_readreg(unsigned char theSlave, unsigned char theReg);
/* Low level I2C */
int i2c_start(void);
int i2c_stop(void);
int i2c_outbyte(unsigned char x);
unsigned char i2c_inbyte(void);
int i2c_getack(void);
void i2c_sendack(void);
void i2c_sendnack(void);
/**GVC**/
/* New low level I2C functions */
int i2c_read( unsigned char slave, unsigned char* rbuf, unsigned char rlen );
int i2c_write( unsigned char slave, unsigned char* wbuf, unsigned char wlen );
int i2c_writeread( unsigned char slave
, unsigned char* wbuf
, unsigned char wlen
, unsigned char* rbuf
, unsigned char rlen
);
/**END GVC**/
#endif /* _I2C_H */

View file

@ -1,142 +0,0 @@
/* macros for debug output */
#define hcd_dbg(hcd, fmt, args...) \
dev_info(hcd->self.controller, fmt, ## args)
#define hcd_err(hcd, fmt, args...) \
dev_err(hcd->self.controller, fmt, ## args)
#define hcd_info(hcd, fmt, args...) \
dev_info(hcd->self.controller, fmt, ## args)
#define hcd_warn(hcd, fmt, args...) \
dev_warn(hcd->self.controller, fmt, ## args)
/*
#define devdrv_dbg(fmt, args...) \
printk(KERN_INFO "usb_devdrv dbg: ");printk(fmt, ## args)
*/
#define devdrv_dbg(fmt, args...) {}
#define devdrv_err(fmt, args...) \
printk(KERN_ERR "usb_devdrv error: ");printk(fmt, ## args)
#define devdrv_info(fmt, args...) \
printk(KERN_INFO "usb_devdrv: ");printk(fmt, ## args)
#define irq_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_irq dbg: ");printk(fmt, ## args)
#define irq_err(fmt, args...) \
printk(KERN_ERR "crisv10_irq error: ");printk(fmt, ## args)
#define irq_warn(fmt, args...) \
printk(KERN_INFO "crisv10_irq warn: ");printk(fmt, ## args)
#define irq_info(fmt, args...) \
printk(KERN_INFO "crisv10_hcd: ");printk(fmt, ## args)
/*
#define rh_dbg(fmt, args...) \
printk(KERN_DEBUG "crisv10_rh dbg: ");printk(fmt, ## args)
*/
#define rh_dbg(fmt, args...) {}
#define rh_err(fmt, args...) \
printk(KERN_ERR "crisv10_rh error: ");printk(fmt, ## args)
#define rh_warn(fmt, args...) \
printk(KERN_INFO "crisv10_rh warning: ");printk(fmt, ## args)
#define rh_info(fmt, args...) \
printk(KERN_INFO "crisv10_rh: ");printk(fmt, ## args)
/*
#define tc_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_tc dbg: ");printk(fmt, ## args)
*/
#define tc_dbg(fmt, args...) {while(0){}}
#define tc_err(fmt, args...) \
printk(KERN_ERR "crisv10_tc error: ");printk(fmt, ## args)
/*
#define tc_warn(fmt, args...) \
printk(KERN_INFO "crisv10_tc warning: ");printk(fmt, ## args)
*/
#define tc_warn(fmt, args...) {while(0){}}
#define tc_info(fmt, args...) \
printk(KERN_INFO "crisv10_tc: ");printk(fmt, ## args)
/* Debug print-outs for various traffic types */
#define intr_warn(fmt, args...) \
printk(KERN_INFO "crisv10_intr warning: ");printk(fmt, ## args)
/*
#define intr_dbg(fmt, args...) \
printk(KERN_DEBUG "crisv10_intr dbg: ");printk(fmt, ## args)
*/
#define intr_dbg(fmt, args...) {while(0){}}
#define isoc_err(fmt, args...) \
printk(KERN_ERR "crisv10_isoc error: ");printk(fmt, ## args)
/*
#define isoc_warn(fmt, args...) \
printk(KERN_INFO "crisv10_isoc warning: ");printk(fmt, ## args)
*/
#define isoc_warn(fmt, args...) {while(0){}}
/*
#define isoc_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_isoc dbg: ");printk(fmt, ## args)
*/
#define isoc_dbg(fmt, args...) {while(0){}}
/*
#define timer_warn(fmt, args...) \
printk(KERN_INFO "crisv10_timer warning: ");printk(fmt, ## args)
*/
#define timer_warn(fmt, args...) {while(0){}}
/*
#define timer_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_timer dbg: ");printk(fmt, ## args)
*/
#define timer_dbg(fmt, args...) {while(0){}}
/* Debug printouts for events related to late finishing of URBs */
/*
#define late_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_late dbg: ");printk(fmt, ## args)
*/
#define late_dbg(fmt, args...) {while(0){}}
#define late_warn(fmt, args...) \
printk(KERN_INFO "crisv10_late warning: ");printk(fmt, ## args)
/*
#define errno_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_errno dbg: ");printk(fmt, ## args)
*/
#define errno_dbg(fmt, args...) {while(0){}}
#define dma_dbg(fmt, args...) \
printk(KERN_INFO "crisv10_dma dbg: ");printk(fmt, ## args)
#define dma_err(fmt, args...) \
printk(KERN_ERR "crisv10_dma error: ");printk(fmt, ## args)
#define dma_warn(fmt, args...) \
printk(KERN_INFO "crisv10_dma warning: ");printk(fmt, ## args)
#define dma_info(fmt, args...) \
printk(KERN_INFO "crisv10_dma: ");printk(fmt, ## args)
#define str_dir(pipe) \
(usb_pipeout(pipe) ? "out" : "in")
#define str_type(pipe) \
({ \
char *s = "?"; \
switch (usb_pipetype(pipe)) { \
case PIPE_ISOCHRONOUS: s = "iso"; break; \
case PIPE_INTERRUPT: s = "intr"; break; \
case PIPE_CONTROL: s = "ctrl"; break; \
case PIPE_BULK: s = "bulk"; break; \
}; \
s; \
})

File diff suppressed because it is too large Load diff

View file

@ -1,334 +0,0 @@
#ifndef __LINUX_ETRAX_USB_H
#define __LINUX_ETRAX_USB_H
#include <linux/types.h>
#include <linux/list.h>
struct USB_IN_Desc {
volatile __u16 sw_len;
volatile __u16 command;
volatile unsigned long next;
volatile unsigned long buf;
volatile __u16 hw_len;
volatile __u16 status;
};
struct USB_SB_Desc {
volatile __u16 sw_len;
volatile __u16 command;
volatile unsigned long next;
volatile unsigned long buf;
};
struct USB_EP_Desc {
volatile __u16 hw_len;
volatile __u16 command;
volatile unsigned long sub;
volatile unsigned long next;
};
/* Root Hub port status struct */
struct crisv10_rh {
volatile __u16 wPortChange[2];
volatile __u16 wPortStatusPrev[2];
};
/* HCD description */
struct crisv10_hcd {
spinlock_t lock;
__u8 num_ports;
__u8 running;
};
/* Endpoint HC private data description */
struct crisv10_ep_priv {
int epid;
};
/* Additional software state info for a USB Controller epid */
struct etrax_epid {
__u8 inuse; /* !0 = setup in Etrax and used for a endpoint */
__u8 disabled; /* !0 = Temporarly disabled to avoid resubmission */
__u8 type; /* Setup as: PIPE_BULK, PIPE_CONTROL ... */
__u8 out_traffic; /* !0 = This epid is for out traffic */
};
/* Struct to hold information of scheduled later URB completion */
struct urb_later_data {
struct delayed_work dws;
struct usb_hcd *hcd;
struct urb *urb;
int urb_num;
int status;
};
typedef enum {
STARTED,
NOT_STARTED,
UNLINK,
} crisv10_urb_state_t;
struct crisv10_urb_priv {
/* Sequence number for this URB. Every new submited URB gets this from
a incrementing counter. Used when a URB is scheduled for later finish to
be sure that the intended URB hasn't already been completed (device
drivers has a tendency to reuse URBs once they are completed, causing us
to not be able to single old ones out only based on the URB pointer.) */
__u32 urb_num;
/* The first_sb field is used for freeing all SB descriptors belonging
to an urb. The corresponding ep descriptor's sub pointer cannot be
used for this since the DMA advances the sub pointer as it processes
the sb list. */
struct USB_SB_Desc *first_sb;
/* The last_sb field referes to the last SB descriptor that belongs to
this urb. This is important to know so we can free the SB descriptors
that ranges between first_sb and last_sb. */
struct USB_SB_Desc *last_sb;
/* The rx_offset field is used in ctrl and bulk traffic to keep track
of the offset in the urb's transfer_buffer where incoming data should be
copied to. */
__u32 rx_offset;
/* Counter used in isochronous transfers to keep track of the
number of packets received/transmitted. */
__u32 isoc_packet_counter;
/* Flag that marks if this Isoc Out URB has finished it's transfer. Used
because several URBs can be finished before list is processed */
__u8 isoc_out_done;
/* This field is used to pass information about the urb's current state
between the various interrupt handlers (thus marked volatile). */
volatile crisv10_urb_state_t urb_state;
/* In Ctrl transfers consist of (at least) 3 packets: SETUP, IN and ZOUT.
When DMA8 sub-channel 2 has processed the SB list for this sequence we
get a interrupt. We also get a interrupt for In transfers and which
one of these interrupts that comes first depends of data size and device.
To be sure that we have got both interrupts before we complete the URB
we have these to flags that shows which part that has completed.
We can then check when we get one of the interrupts that if the other has
occured it's safe for us to complete the URB, otherwise we set appropriate
flag and do the completion when we get the other interrupt. */
volatile unsigned char ctrl_zout_done;
volatile unsigned char ctrl_rx_done;
/* Connection between the submitted urb and ETRAX epid number */
__u8 epid;
/* The rx_data_list field is used for periodic traffic, to hold
received data for later processing in the the complete_urb functions,
where the data us copied to the urb's transfer_buffer. Basically, we
use this intermediate storage because we don't know when it's safe to
reuse the transfer_buffer (FIXME?). */
struct list_head rx_data_list;
/* The interval time rounded up to closest 2^N */
int interval;
/* Pool of EP descriptors needed if it's a INTR transfer.
Amount of EPs in pool correspons to how many INTR that should
be inserted in TxIntrEPList (max 128, defined by MAX_INTR_INTERVAL) */
struct USB_EP_Desc* intr_ep_pool[128];
/* The mount of EPs allocated for this INTR URB */
int intr_ep_pool_length;
/* Pointer to info struct if URB is scheduled to be finished later */
struct urb_later_data* later_data;
/* Allocated bandwidth for isochronous and interrupt traffic */
int bandwidth;
};
/* This struct is for passing data from the top half to the bottom half irq
handlers */
struct crisv10_irq_reg {
struct usb_hcd* hcd;
__u32 r_usb_epid_attn;
__u8 r_usb_status;
__u16 r_usb_rh_port_status_1;
__u16 r_usb_rh_port_status_2;
__u32 r_usb_irq_mask_read;
__u32 r_usb_fm_number;
struct work_struct usb_bh;
};
/* This struct is for passing data from the isoc top half to the isoc bottom
half. */
struct crisv10_isoc_complete_data {
struct usb_hcd *hcd;
struct urb *urb;
struct work_struct usb_bh;
};
/* Entry item for URB lists for each endpint */
typedef struct urb_entry
{
struct urb *urb;
struct list_head list;
} urb_entry_t;
/* ---------------------------------------------------------------------------
Virtual Root HUB
------------------------------------------------------------------------- */
/* destination of request */
#define RH_INTERFACE 0x01
#define RH_ENDPOINT 0x02
#define RH_OTHER 0x03
#define RH_CLASS 0x20
#define RH_VENDOR 0x40
/* Requests: bRequest << 8 | bmRequestType */
#define RH_GET_STATUS 0x0080
#define RH_CLEAR_FEATURE 0x0100
#define RH_SET_FEATURE 0x0300
#define RH_SET_ADDRESS 0x0500
#define RH_GET_DESCRIPTOR 0x0680
#define RH_SET_DESCRIPTOR 0x0700
#define RH_GET_CONFIGURATION 0x0880
#define RH_SET_CONFIGURATION 0x0900
#define RH_GET_STATE 0x0280
#define RH_GET_INTERFACE 0x0A80
#define RH_SET_INTERFACE 0x0B00
#define RH_SYNC_FRAME 0x0C80
/* Our Vendor Specific Request */
#define RH_SET_EP 0x2000
/* Hub port features */
#define RH_PORT_CONNECTION 0x00
#define RH_PORT_ENABLE 0x01
#define RH_PORT_SUSPEND 0x02
#define RH_PORT_OVER_CURRENT 0x03
#define RH_PORT_RESET 0x04
#define RH_PORT_POWER 0x08
#define RH_PORT_LOW_SPEED 0x09
#define RH_C_PORT_CONNECTION 0x10
#define RH_C_PORT_ENABLE 0x11
#define RH_C_PORT_SUSPEND 0x12
#define RH_C_PORT_OVER_CURRENT 0x13
#define RH_C_PORT_RESET 0x14
/* Hub features */
#define RH_C_HUB_LOCAL_POWER 0x00
#define RH_C_HUB_OVER_CURRENT 0x01
#define RH_DEVICE_REMOTE_WAKEUP 0x00
#define RH_ENDPOINT_STALL 0x01
/* Our Vendor Specific feature */
#define RH_REMOVE_EP 0x00
#define RH_ACK 0x01
#define RH_REQ_ERR -1
#define RH_NACK 0x00
/* Field definitions for */
#define USB_IN_command__eol__BITNR 0 /* command macros */
#define USB_IN_command__eol__WIDTH 1
#define USB_IN_command__eol__no 0
#define USB_IN_command__eol__yes 1
#define USB_IN_command__intr__BITNR 3
#define USB_IN_command__intr__WIDTH 1
#define USB_IN_command__intr__no 0
#define USB_IN_command__intr__yes 1
#define USB_IN_status__eop__BITNR 1 /* status macros. */
#define USB_IN_status__eop__WIDTH 1
#define USB_IN_status__eop__no 0
#define USB_IN_status__eop__yes 1
#define USB_IN_status__eot__BITNR 5
#define USB_IN_status__eot__WIDTH 1
#define USB_IN_status__eot__no 0
#define USB_IN_status__eot__yes 1
#define USB_IN_status__error__BITNR 6
#define USB_IN_status__error__WIDTH 1
#define USB_IN_status__error__no 0
#define USB_IN_status__error__yes 1
#define USB_IN_status__nodata__BITNR 7
#define USB_IN_status__nodata__WIDTH 1
#define USB_IN_status__nodata__no 0
#define USB_IN_status__nodata__yes 1
#define USB_IN_status__epid__BITNR 8
#define USB_IN_status__epid__WIDTH 5
#define USB_EP_command__eol__BITNR 0
#define USB_EP_command__eol__WIDTH 1
#define USB_EP_command__eol__no 0
#define USB_EP_command__eol__yes 1
#define USB_EP_command__eof__BITNR 1
#define USB_EP_command__eof__WIDTH 1
#define USB_EP_command__eof__no 0
#define USB_EP_command__eof__yes 1
#define USB_EP_command__intr__BITNR 3
#define USB_EP_command__intr__WIDTH 1
#define USB_EP_command__intr__no 0
#define USB_EP_command__intr__yes 1
#define USB_EP_command__enable__BITNR 4
#define USB_EP_command__enable__WIDTH 1
#define USB_EP_command__enable__no 0
#define USB_EP_command__enable__yes 1
#define USB_EP_command__hw_valid__BITNR 5
#define USB_EP_command__hw_valid__WIDTH 1
#define USB_EP_command__hw_valid__no 0
#define USB_EP_command__hw_valid__yes 1
#define USB_EP_command__epid__BITNR 8
#define USB_EP_command__epid__WIDTH 5
#define USB_SB_command__eol__BITNR 0 /* command macros. */
#define USB_SB_command__eol__WIDTH 1
#define USB_SB_command__eol__no 0
#define USB_SB_command__eol__yes 1
#define USB_SB_command__eot__BITNR 1
#define USB_SB_command__eot__WIDTH 1
#define USB_SB_command__eot__no 0
#define USB_SB_command__eot__yes 1
#define USB_SB_command__intr__BITNR 3
#define USB_SB_command__intr__WIDTH 1
#define USB_SB_command__intr__no 0
#define USB_SB_command__intr__yes 1
#define USB_SB_command__tt__BITNR 4
#define USB_SB_command__tt__WIDTH 2
#define USB_SB_command__tt__zout 0
#define USB_SB_command__tt__in 1
#define USB_SB_command__tt__out 2
#define USB_SB_command__tt__setup 3
#define USB_SB_command__rem__BITNR 8
#define USB_SB_command__rem__WIDTH 6
#define USB_SB_command__full__BITNR 6
#define USB_SB_command__full__WIDTH 1
#define USB_SB_command__full__no 0
#define USB_SB_command__full__yes 1
#endif

View file

@ -1,5 +0,0 @@
config AXIS_FIMAGE
bool "Build fimage"
depends TARGET_etrax
default y

View file

@ -1,42 +0,0 @@
#
# Copyright (C) 2006-2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
define Image/BuildKernel
cp $(KDIR)/vmlinuz $(BIN_DIR)/$(IMG_PREFIX)-zImage
endef
define Image/Prepare
cp $(LINUX_DIR)/arch/cris/boot/zImage $(KDIR)/vmlinuz
$(MAKE) -C e100boot compile
$(MAKE) -C mkfimage compile
$(INSTALL_BIN) ./boot_linux $(BIN_DIR)
endef
define Image/Build/generic
mkfimage $(KDIR)/vmlinuz $(KDIR)/vmlinuz.tmp
cat $(KDIR)/vmlinuz.tmp $(KDIR)/root.$(1) > $(KDIR)/fimage.$(1).tmp
dd if=$(KDIR)/fimage.$(1).tmp of=$(KDIR)/fimage.$(1) bs=$(2) conv=sync
cp $(KDIR)/fimage.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1)-fimage
endef
define Image/Build/jffs2-64k
$(call prepare_generic_jffs-64k,$(KDIR)/root.jff2-64k)
$(call Image/Build/generic,$(1),4194304)
endef
define Image/Build/squashfs
$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
$(call Image/Build/generic,$(1),4194304)
endef
define Image/Build
$(call Image/Build/$(1),$(1))
endef
$(eval $(call BuildImage))

View file

@ -1,511 +0,0 @@
#!/usr/bin/perl -w
#*****************************************************************************
#!
#! FILE NAME : boot_linux
#!
#! PARAMETERS : -b <bootimage> the name of the boot image to use
#! -d <device> the interface to use, e.g., eth1
#! (defaults is eth0)
#! -f save it in flash memory at address 0x10000
#! -F save it in flash memory at address 0
#! -h show some help
#! -i <image> name of the image to use (default is fimage)
#! -o <offset> the offset in the flash where the flashing
#! starts
#! -O <offset> the offset in the image file where the
#! flashing starts from
#! -p print the resulting etrax100boot command
#! instead of executing it
#! -s <size> how much to flash (default is the size of
#! the flash minus the offset specified using
#! -o or -f)
#! -S <size> the size of the flash
#!
#! All sizes and offsets above can be specified as decimal
#! numbers, or as hexadecimal numbers by prefixing them with 0x.
#! It is also possible to use the suffixes k and M to specify
#! kilo (1024) or mega (1048576).
#!
#! DESCRIPTION: Extract the start of the image and any registers that should
#! be set from the kimage or fimage file, and then boot it.
#!
#! FUNCTIONS : convert_size
#! extract_hw_settings
#! get_dword
#! calculate_sdram_init
#! sdram_command
#! print_help
#!
#!----------------------------------------------------------------------------
#! HISTORY
#!
#! $Log: boot_linux,v $
#! Revision 1.16 2004/11/01 16:32:27 starvik
#! Corrected help text to avoid confusion
#!
#! Revision 1.15 2003/01/29 11:48:57 pkj
#! Calculate a flash size large enough for the given image if the
#! -S option is not specified.
#!
#! Revision 1.14 2002/11/18 14:40:09 pkj
#! Make use of the --loop option to etrax100boot when initialising
#! SDRAM memories. This requires a lot fewer options to be passed
#! to the boot loader.
#!
#! Revision 1.13 2002/08/15 16:29:02 pkj
#! * The -S option now accepts the size in bytes (just like the -s option).
#! For backwards compatibility it still assumes sizes of 16 and less to
#! be specified in MB.
#! * The suffixes k and M can now be used with all sizes and offsets to
#! specify them in kilo or mega.
#!
#! Revision 1.12 2002/08/15 15:27:34 pkj
#! Use $opts{'x'} instead of $opt_x.
#!
#! Revision 1.11 2002/07/04 17:06:39 pkj
#! * No longer specifies a bootfile by default (not needed any longer).
#! * Implemented option -b to specify a bootfile.
#! * Removed references to option -l (it was never implemented).
#!
#! Revision 1.10 2002/06/04 11:50:23 starvik
#! Check if mrs_data is specified in kernelconfig (necessary for MCM)
#!
#! Revision 1.9 2002/01/29 10:38:26 pkj
#! Change illegal to invalid.
#!
#! Revision 1.8 2001/09/13 12:32:10 pkj
#! * Added option -S to specify the size of the flash (in MB), as -s
#! is used to specify how much to flash nowadays.
#! * Made the default size of the flash depend on the size of the image
#! file. If it is bigger than 0x200100 then the flash is assumed to
#! be 4 MB, otherwise it is assumed to be 2 MB.
#! * Added verification of various options.
#!
#! Revision 1.7 2001/09/13 10:25:11 pkj
#! Minor clean-up.
#!
#! Revision 1.6 2001/06/29 10:05:16 pkj
#! Corrected check for SDRAM.
#!
#! Revision 1.5 2001/06/29 09:11:55 pkj
#! Synchronised boot_elinux and boot_linux.
#!
#!----------------------------------------------------------------------------
#! (C) Copyright 2001, Axis Communications AB, LUND, SWEDEN
#!****************************************************************************
#****************** INCLUDE FILES SECTION ************************************
use strict;
use Getopt::Std;
use File::Basename;
#****************** VARIABLE DECLARATION SECTION *****************************
use vars qw($my_name %opts);
use vars qw($text_start $cmd);
use vars qw($image_name $image_size);
use vars qw($offset $source_offset $flash_size $flashing_size);
use vars qw($sdram_timing_address $sdram_config_address);
use vars qw($sdram_precharge $sdram_nop $sdram_refresh $sdram_mrs);
#****************** CONSTANT SECTION *****************************************
# Register addresses
$sdram_timing_address = "b0000008";
$sdram_config_address = "b000000c";
# SDRAM commands
$sdram_precharge = 3;
$sdram_nop = 0;
$sdram_refresh = 2;
$sdram_mrs = 1;
#****************** MAIN PROGRAM SECTION *************************************
# The name of this program.
$my_name = basename($0);
# Get options
getopts('b:d:fFhi:o:O:ps:S:', \%opts);
&print_help if ($opts{'h'});
# Name and existance of the image
$image_name = ($opts{'i'} ? $opts{'i'} : 'fimage');
die "Could not find the image $image_name!\n" unless (-s $image_name);
if ($opts{'f'} || $opts{'F'})
{
$image_size = -s $image_name;
$offset = ($opts{'f'} ? 0x10000 : 0);
$offset = &convert_size($opts{'o'}) if (defined($opts{'o'}));
die("$my_name: Invalid destination offset\n") if ($offset !~ /^\d+$/);
my $base_name = basename($image_name);
if ($base_name eq 'timage' || $base_name eq 'flash1.img')
{
$source_offset = 0;
}
else
{
$source_offset = $offset;
}
$source_offset = &convert_size($opts{'O'}) if (defined($opts{'O'}));
die("$my_name: Invalid source offset\n") if ($source_offset !~ /^\d+$/);
die("$my_name: Source offset > image size\n") if ($source_offset > $image_size);
if (defined($opts{'S'}))
{
# Backwards compatibility to allow specifying the flash size in MB
# without using an M suffix
$opts{'S'} .= 'M' if ($opts{'S'} =~ /^\d+$/ && $opts{'S'} <= 16);
$flash_size = &convert_size($opts{'S'});
}
else
{
# Calculate a flash size large enough for the image without the checksum
# and HWID.
$flash_size = ($image_size - $source_offset + $offset) & 0xFFFF0000;
}
die("$my_name: Invalid flash size\n") if ($flash_size !~ /^\d+$/);
die("$my_name: Destination offset > flash size\n") if ($offset > $flash_size);
if (defined($opts{'s'}))
{
$flashing_size = &convert_size($opts{'s'});
}
else
{
$flashing_size = $flash_size - $offset;
}
die("$my_name: Invalid size to flash\n") if ($flashing_size !~ /^\d+$/);
if ($flashing_size > $flash_size - $offset)
{
$flashing_size = $flash_size - $offset;
printf("Warning: Flashing size limited to 0x%lx due to the offset (0x%lx) and flash size (0x%lx).\n", $flashing_size, $offset, $flash_size);
}
if ($flashing_size > $image_size - $source_offset)
{
$flashing_size = $image_size - $source_offset;
printf("Warning: Flashing size limited to 0x%lx due to the offset (0x%lx) and image size (0x%lx).\n", $flashing_size, $source_offset, $image_size);
}
}
# Create the command line to boot the image
if (system('./etrax100boot --help > /dev/null') == 0)
{
$cmd = './etrax100boot';
}
elsif (system('svinto_boot --help > /dev/null') == 0)
{
$cmd = 'svinto_boot';
}
else
{
die("Cannot find e100boot program in your PATH!\n");
}
$cmd .= " --device $opts{'d'}" if ($opts{'d'});
$cmd .= &extract_hw_settings;
$cmd .= " --bootfile $opts{'b'}" if ($opts{'b'});
$cmd .= " --file $image_name $text_start";
if ($opts{'f'} || $opts{'F'})
{
$cmd .= sprintf(" --flash %lx %lx %lx --jump 0",
hex($text_start) + $source_offset, $offset, $flashing_size);
}
else
{
$cmd .= " --jump $text_start";
}
if ($opts{'p'})
{
print "Command:\n$cmd\n";
}
else
{
system($cmd);
}
exit 0;
#****************** FUNCTION DEFINITION SECTION ******************************
#*****************************************************************************
##
## FUNCTION NAME: convert_size
##
##****************************************************************************
sub convert_size
{
my($arg) = @_;
my $size;
if ($arg =~ /^0x([\da-fA-F]+)([kM])?$/)
{
$size = hex($1);
}
elsif ($arg =~ /^(\d+)([kM])?$/)
{
$size = $1;
}
else
{
return -1;
}
if (!defined($2))
{
return $size;
}
elsif ($2 eq 'k')
{
return $size * 1024;
}
elsif ($2 eq 'M')
{
return $size * 1048576;
}
}
#*****************************************************************************
##
## FUNCTION NAME: extract_hw_settings
##
##****************************************************************************
sub extract_hw_settings
{
my $data;
my $dbg_port;
my $sdram_enabled;
my $return_value = "";
my $sdram_config;
# The hw information table has the following format
#
# "HW_PARAM_MAGIC"
# text_start (dword)
# serial debg port (dword)
# sdram enabled (dword)
# register address (dword)
# register value (dword)
# ...
# 0
open(FILE, "$image_name") || die("Could not open '$image_name'");
while (<FILE>)
{
if (m/HW_PARAM_MAGIC/g)
{
# Seek to first byte after magic
seek(FILE, -length($_) + pos($_), 1);
last;
}
}
$text_start = &get_dword;
$dbg_port = &get_dword;
$sdram_enabled = int(&get_dword);
while (1)
{
my $register = &get_dword;
my $value = &get_dword;
last if ($register eq "00000000");
if ($sdram_enabled)
{
if ($register eq $sdram_config_address)
{
$sdram_config = $value;
}
elsif ($register eq $sdram_timing_address)
{
$return_value .= &calculate_sdram_init($value, $sdram_config);
next;
}
}
$return_value .= " --setreg $register $value";
}
close(FILE);
return $return_value;
}
#*****************************************************************************
##
## FUNCTION NAME: get_dword
##
##****************************************************************************
sub get_dword
{
my $data;
read(FILE, $data, 4);
return unpack("H8", pack("V", unpack("N", $data)));
}
#*****************************************************************************
##
## FUNCTION NAME: calculate_sdram_init
##
##****************************************************************************
sub calculate_sdram_init
{
# Refer to ETRAX 100LX Designers Reference for a description of SDRAM
# initialization
my $sdram_init_val = hex($_[0]);
my $sdram_config_val = hex($_[1]);
my $bus_width = $sdram_config_val & 0x00800000;
my $speed;
my $cas_latency;
my $mrs_data;
my $temp;
my $return_value;
my $value;
$mrs_data = ($sdram_init_val & 0x00ff0000) >> 16;
$sdram_init_val &= 0x8000ffff; # Make sure mrs data is 0
$sdram_init_val |= 0x80000000; # Make sure sdram is enabled
$speed = $sdram_init_val & 0x1000;
$cas_latency = $sdram_init_val & 0x3;
if ($speed) # 100 MHz
{
$cas_latency += 2;
}
else # 50 MHz
{
$cas_latency += 1;
}
# Calculate value of mrs_data
# CAS latency = 2 && bus_width = 32 => 0x40
# CAS latency = 3 && bus_width = 32 => 0x60
# CAS latency = 2 && bus_width = 16 => 0x20
# CAS latency = 3 && bus_width = 16 => 0x30
if ($mrs_data == 0)
{
if ($bus_width == 0) # 16 bits
{
$mrs_data = $cas_latency == 2 ? 0x20 : 0x30;
}
else # 32 bits
{
$mrs_data = $cas_latency == 2 ? 0x40 : 0x60;
}
}
$temp = $sdram_init_val | 0x0000c000; # Disable refresh
$return_value .= &sdram_command($temp);
$return_value .= " --pause 20000";
$return_value .= &sdram_command($temp, $sdram_precharge);
$return_value .= &sdram_command($temp, $sdram_nop);
$return_value .= " --setreg +0 7";
$return_value .= " --label label1";
$return_value .= &sdram_command($temp, $sdram_refresh);
$return_value .= &sdram_command($temp, $sdram_nop);
$return_value .= " --loop +0 label1";
$return_value .= &sdram_command($temp, $sdram_mrs, $mrs_data);
$return_value .= &sdram_command($temp, $sdram_nop);
$return_value .= &sdram_command($sdram_init_val);
return $return_value;
}
#*****************************************************************************
##
## FUNCTION NAME: sdram_command
##
##****************************************************************************
sub sdram_command
{
my($temp, $value, $mrs_data) = @_;
$value ||= 0;
if ($value == $sdram_mrs)
{
$value = sprintf("%lx", $temp | ($value << 9) | ($mrs_data << 16));
}
else
{
$value = sprintf("%lx", $temp | ($value << 9));
}
return " --setreg $sdram_timing_address $value";
}
#*****************************************************************************
##
## FUNCTION NAME: print_help
##
##****************************************************************************
sub print_help
{
print "\nAXIS $my_name, ", '$Revision: 1.16 $ $Date: 2004/11/01 16:32:27 $ ', "\n";
die <<EOT;
Copyright (C) 2001-2002 Axis Communications AB
DESCRIPTION:
This program is used to boot (and flash) a linux image to a box.
It tries to extract the required ETRAX 100 settings from the image file.
SYNTAX:
$my_name [options]
OPTIONS:
-b <bootfile> : The boot image to use.
-d <device> : The network interface to use, default is eth0.
-f : Save the image in the flash memory starting at
address 0x10000.
-F : Save the image in the flash memory starting at
address 0.
-h : Print this help text.
-i <image> : The path and name of the image to use, default
is fimage.
-o <offset> : The offset in the flash where the flashing starts.
-O <offset> : The offset in the image file where the flashing
starts from.
-p : Print the resulting etrax100boot command instead
of executing it.
-s <size> : How much to flash (default is the size of the
flash minus the offset specified using -o or -f).
-S <size> : The size of the flash.
All sizes and offsets above can be specified as decimal numbers, or as
hexadecimal numbers by prefixing them with 0x. It is also possible to use
the suffixes k and M to specify kilo (1024) or mega (1048576).
EOT
}
#****************** END OF FILE boot_linux ***********************************

View file

@ -1,34 +0,0 @@
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=e100boot
PKG_VERSION:=0.1
PKG_RELEASE:=1
PKG_SOURCE:=e100boot.tar.bz2
PKG_SOURCE_URL:=http://www.acmesystems.it/download/owrt \
http://download.tuxfamily.org/crisos/repository/source/
PKG_MD5SUM:=11fd53e7824dc550e4cffbc4cd114c3e
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)
CRLF_WORKAROUND=1
include $(INCLUDE_DIR)/package.mk
define Build/Compile
make -C $(PKG_BUILD_DIR) STRIP=true
endef
define Build/InstallDev
$(INSTALL_BIN) $(PKG_BUILD_DIR)/sbl/e100boot $(BIN_DIR)/etrax100boot
endef
$(eval $(call Build/DefaultTargets))

View file

@ -1,29 +0,0 @@
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=mkfimage
PKG_VERSION:=0.1
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Build/Compile
mkdir -p $(PKG_BUILD_DIR)
cp -r ./src/* $(PKG_BUILD_DIR)
make -C $(PKG_BUILD_DIR)
endef
define Build/InstallDev
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mkfimage $(STAGING_DIR_HOST)/bin/mkfimage
endef
$(eval $(call Build/DefaultTargets))

View file

@ -1,4 +0,0 @@
all: mkfimage
gcc mkfimage.c -o mkfimage

View file

@ -1,72 +0,0 @@
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv){
unsigned char *buffer = malloc(64 * 1024);
struct stat s;
unsigned int size_vmlinux = 0, real_size_vmlinux = 0;
const unsigned char *magic_str = "ACME_PART_MAGIC";
unsigned int loop;
unsigned char *magic;
if(argc != 3){
printf("%s in out\n", argv[0]);
return 1;
}
printf("Generating image\n");
FILE *vmlinux = fopen(argv[1], "r");
FILE *vmlinux_out = fopen(argv[2], "w");
if((!vmlinux) || (!vmlinux_out)){
printf("Error opening a file\n");
return 1;
}
stat(argv[1], &s);
size_vmlinux = s.st_size;
real_size_vmlinux = (size_vmlinux & 0xffff0000) + 0x10000;
printf("vmlinux = 0x%.08X / 0x%.08X\n", size_vmlinux, real_size_vmlinux);
unsigned int t = fread(buffer, 1, 64 * 1024, vmlinux);
for(loop = 0; loop < (64 * 1024) - sizeof(magic_str); loop++){
if(buffer[loop] == magic_str[0]){
if((magic = strstr(&buffer[loop], magic_str))){
printf("Magic at 0x%.08X %p %p\n", magic - buffer, magic, buffer);
printf("Found Magic %X%X%X%X\n",
buffer[loop + strlen(magic_str)],
buffer[loop + strlen(magic_str) + 2],
buffer[loop + strlen(magic_str) + 1],
buffer[loop + strlen(magic_str) + 3]);
buffer[loop + strlen(magic_str)] = real_size_vmlinux >> 24;
buffer[loop + strlen(magic_str) + 2] = (real_size_vmlinux >> 16) & 0xff;
buffer[loop + strlen(magic_str) + 1] = (real_size_vmlinux >> 8) & 0xff;
buffer[loop + strlen(magic_str) + 3] = (real_size_vmlinux) & 0xff;
printf("Replaced with %.02X%.02X%.02X%.02X\n",
buffer[loop + strlen(magic_str)],
buffer[loop + strlen(magic_str) + 2],
buffer[loop + strlen(magic_str) + 1],
buffer[loop + strlen(magic_str) + 3]);
}
}
}
fwrite(buffer, 1, 64 * 1024, vmlinux_out);
real_size_vmlinux -= 64 * 1024;
do {
real_size_vmlinux -= 64 * 1024;
memset(buffer, 0, 64 * 1024);
fread(buffer, 1, 64 * 1024, vmlinux);
fwrite(buffer, 1, 64 * 1024, vmlinux_out);
} while (real_size_vmlinux);
return 0;
}

View file

@ -1,53 +0,0 @@
--- a/arch/cris/boot/compressed/Makefile
+++ b/arch/cris/boot/compressed/Makefile
@@ -18,7 +18,7 @@ ldflags-y += -T $(srctree)/$(src)/decomp
OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o
OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o
OBJECTS= $(OBJECTS-y) $(obj)/misc.o
-OBJCOPYFLAGS = -O binary --remove-section=.bss
+#OBJCOPYFLAGS = -O binary --remove-section=.bss
quiet_cmd_image = BUILD $@
cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@
--- a/arch/cris/boot/Makefile
+++ b/arch/cris/boot/Makefile
@@ -5,7 +5,7 @@
objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment
objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss
-OBJCOPYFLAGS = -O binary $(objcopyflags-y)
+#OBJCOPYFLAGS = -O binary $(objcopyflags-y)
subdir- := compressed rescue
@@ -17,7 +17,7 @@ $(obj)/Image: vmlinux FORCE
$(obj)/compressed/vmlinux: $(obj)/Image FORCE
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
- $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin
+# $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin
$(obj)/zImage: $(obj)/compressed/vmlinux
@cp $< $@
--- a/arch/cris/boot/rescue/Makefile
+++ b/arch/cris/boot/rescue/Makefile
@@ -14,7 +14,7 @@ arch-$(CONFIG_ETRAX_ARCH_V10) = v10
arch-$(CONFIG_ETRAX_ARCH_V32) = v32
ldflags-y += -T $(srctree)/$(src)/rescue_$(arch-y).lds
-OBJCOPYFLAGS = -O binary --remove-section=.bss
+#OBJCOPYFLAGS = -O binary --remove-section=.bss
obj-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o
obj-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o
OBJECTS := $(obj-y)
--- a/arch/cris/Makefile
+++ b/arch/cris/Makefile
@@ -40,7 +40,7 @@ endif
LD = $(CROSS_COMPILE)ld -mcrislinux
-OBJCOPYFLAGS := -O binary -R .note -R .comment -S
+OBJCOPYFLAGS := -O binary -R .bss -R .note -R .note.gnu.build-id -R .comment -S
KBUILD_AFLAGS += -mlinux -march=$(arch-y) $(inc)
KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe $(inc)

View file

@ -1,88 +0,0 @@
--- a/arch/cris/arch-v10/drivers/axisflashmap.c
+++ b/arch/cris/arch-v10/drivers/axisflashmap.c
@@ -113,7 +113,7 @@ static struct map_info map_cse1 = {
/* If no partition-table was found, we use this default-set. */
#define MAX_PARTITIONS 7
-#define NUM_DEFAULT_PARTITIONS 3
+#define NUM_DEFAULT_PARTITIONS 2
/*
* Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the
@@ -122,19 +122,14 @@ static struct map_info map_cse1 = {
*/
static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = {
{
- .name = "boot firmware",
- .size = CONFIG_ETRAX_PTABLE_SECTOR,
- .offset = 0
- },
- {
.name = "kernel",
- .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR),
- .offset = CONFIG_ETRAX_PTABLE_SECTOR
+ .size = 0x00,
+ .offset = 0
},
{
- .name = "filesystem",
- .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR,
- .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR)
+ .name = "rootfs",
+ .size = 0x200000,
+ .offset = 0x200000
}
};
@@ -281,6 +276,11 @@ static int __init init_axis_flash(void)
struct partitiontable_entry *ptable;
int use_default_ptable = 1; /* Until proven otherwise. */
const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n";
+ unsigned int kernel_part_size = 0;
+ unsigned char *flash_mem = (unsigned char*)(FLASH_CACHED_ADDR);
+ unsigned int flash_scan_count = 0;
+ const char *part_magic = "ACME_PART_MAGIC";
+ unsigned int magic_len = strlen(part_magic);
if (!(mymtd = flash_probe())) {
/* There's no reason to use this module if no flash chip can
@@ -293,6 +293,31 @@ static int __init init_axis_flash(void)
axisflash_mtd = mymtd;
}
+ /* scan flash to findout where out partition starts */
+
+ printk(KERN_INFO "Scanning flash for end of kernel magic\n");
+ for(flash_scan_count = 0; flash_scan_count < 100000; flash_scan_count++) {
+ if(strncmp(&flash_mem[flash_scan_count], part_magic, magic_len - 1) == 0) {
+ kernel_part_size = flash_mem[flash_scan_count + magic_len ];
+ kernel_part_size <<= 8;
+ kernel_part_size += flash_mem[flash_scan_count + magic_len + 2];
+ kernel_part_size <<= 8;
+ kernel_part_size += flash_mem[flash_scan_count + magic_len + 1];
+ kernel_part_size <<= 8;
+ kernel_part_size += flash_mem[flash_scan_count + magic_len + 3];
+ printk(KERN_INFO "Kernel ends at 0x%.08X\n", kernel_part_size);
+ flash_scan_count = 1100000;
+ }
+ }
+
+
+ if(kernel_part_size){
+ kernel_part_size = (kernel_part_size & 0xffff0000);
+ axis_default_partitions[0].size = kernel_part_size;
+ axis_default_partitions[1].size = mymtd->size - axis_default_partitions[0].size;
+ axis_default_partitions[1].offset = axis_default_partitions[0].size;
+ }
+
if (mymtd) {
mymtd->owner = THIS_MODULE;
ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR +
--- a/arch/cris/arch-v10/lib/hw_settings.S
+++ b/arch/cris/arch-v10/lib/hw_settings.S
@@ -60,3 +60,5 @@
.dword R_PORT_PB_SET
.dword PB_SET_VALUE
.dword 0 ; No more register values
+ .ascii "ACME_PART_MAGIC"
+ .dword 0xdeadc0de

View file

@ -1,20 +0,0 @@
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -28,6 +28,7 @@ obj-$(CONFIG_USB_FHCI_HCD) += fhci.o
obj-$(CONFIG_USB_XHCI_HCD) += xhci.o
obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
+obj-$(CONFIG_ETRAX_USB_HOST) += hc-crisv10.o
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_USB_U132_HCD) += host/
obj-$(CONFIG_USB_R8A66597_HCD) += host/
obj-$(CONFIG_USB_HWA_HCD) += host/
obj-$(CONFIG_USB_ISP1760_HCD) += host/
+obj-$(CONFIG_ETRAX_USB_HOST) += host/
obj-$(CONFIG_USB_C67X00_HCD) += c67x00/

View file

@ -1,86 +0,0 @@
--- a/arch/cris/Kconfig
+++ b/arch/cris/Kconfig
@@ -649,6 +649,8 @@ endchoice
endmenu
+menu "Device Drivers"
+
source "drivers/base/Kconfig"
# standard linux drivers
@@ -660,13 +662,19 @@ source "drivers/pnp/Kconfig"
source "drivers/block/Kconfig"
+# misc before ide - BLK_DEV_SGIIOC4 depends on SGI_IOC4
+
+source "drivers/misc/Kconfig"
+
source "drivers/ide/Kconfig"
-source "drivers/net/Kconfig"
+source "drivers/scsi/Kconfig"
-source "drivers/i2c/Kconfig"
+source "drivers/ata/Kconfig"
-source "drivers/rtc/Kconfig"
+source "drivers/net/Kconfig"
+
+source "drivers/isdn/Kconfig"
#
# input before char - char/joystick depends on it. As does USB.
@@ -675,14 +683,50 @@ source "drivers/input/Kconfig"
source "drivers/char/Kconfig"
-source "fs/Kconfig"
+source "drivers/i2c/Kconfig"
+
+#source "drivers/spi/Kconfig"
+
+source "drivers/gpio/Kconfig"
+
+source "drivers/w1/Kconfig"
+
+source "drivers/power/Kconfig"
+
+source "drivers/hwmon/Kconfig"
+
+source "drivers/thermal/Kconfig"
+
+source "drivers/watchdog/Kconfig"
+
+source "drivers/ssb/Kconfig"
+
+#source "drivers/l3/Kconfig"
+
+source "drivers/mfd/Kconfig"
+
+source "drivers/media/Kconfig"
+
+source "drivers/video/Kconfig"
+
+source "sound/Kconfig"
+
+source "drivers/hid/Kconfig"
source "drivers/usb/Kconfig"
source "drivers/uwb/Kconfig"
+source "drivers/leds/Kconfig"
+
+source "drivers/rtc/Kconfig"
+
source "drivers/staging/Kconfig"
+endmenu
+
+source "fs/Kconfig"
+
source "arch/cris/Kconfig.debug"
source "security/Kconfig"

View file

@ -1,54 +0,0 @@
--- a/arch/cris/arch-v10/drivers/Kconfig
+++ b/arch/cris/arch-v10/drivers/Kconfig
@@ -450,11 +450,31 @@ config ETRAX_I2C
i2c_arg = I2C_READARG(STA013_READ_ADDR, reg);
val = ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg);
+config ETRAX_I2C_GVC
+ bool "I2C GVC support"
+ depends on ETRAX_ARCH_V10 && !ETRAX_I2C
+ select ETRAX_I2C_USES_PB_NOT_PB_I2C
+ help
+ Enables an I2C driver with Geert Vancompernolle improvement.
+
+config ETRAX_I2C_SLAVE_DELAY
+ bool "I2C Slave delay support"
+ depends on ETRAX_I2C_GVC && EXPERIMENTAL
+ help
+ Enable this to enhanced master/slave dialog
+ Improvement by Positive Going (www.positivegoing.it) and BK srl (www.b-k.it)
+
+config ETRAX_I2C_DYN_ALLOC
+ bool "I2C major device dynamic alloc"
+ depends on ETRAX_I2C_GVC && EXPERIMENTAL
+ help
+ Enable this to dynamicaly alloc major i2c device number
+
# this is true for most products since PB-I2C seems to be somewhat
# flawed..
config ETRAX_I2C_USES_PB_NOT_PB_I2C
bool "I2C uses PB not PB-I2C"
- depends on ETRAX_I2C
+ depends on ETRAX_I2C || ETRAX_I2C_GVC
help
Select whether to use the special I2C mode in the PB I/O register or
not. This option needs to be selected in order to use some drivers
@@ -478,7 +498,7 @@ config ETRAX_I2C_CLK_PORT
config ETRAX_I2C_EEPROM
bool "I2C EEPROM (non-volatile RAM) support"
- depends on ETRAX_I2C
+ depends on ETRAX_I2C || ETRAX_I2C_GVC
help
Enables I2C EEPROM (non-volatile RAM) on PB0 and PB1 using the I2C
driver. Select size option: Probed, 2k, 8k, 16k.
--- a/arch/cris/arch-v10/drivers/Makefile
+++ b/arch/cris/arch-v10/drivers/Makefile
@@ -4,6 +4,7 @@
obj-$(CONFIG_ETRAX_AXISFLASHMAP) += axisflashmap.o
obj-$(CONFIG_ETRAX_I2C) += i2c.o
+obj-$(CONFIG_ETRAX_I2C_GVC) += i2c_gvc.o
obj-$(CONFIG_ETRAX_I2C_EEPROM) += eeprom.o
obj-$(CONFIG_ETRAX_GPIO) += gpio.o
obj-$(CONFIG_ETRAX_DS1302) += ds1302.o

View file

@ -1,44 +0,0 @@
--- a/drivers/serial/crisv10.c
+++ b/drivers/serial/crisv10.c
@@ -32,6 +32,7 @@ static char *serial_version = "$Revision
#include <linux/module.h>
#include <linux/uaccess.h>
#include <linux/io.h>
+#include <linux/device.h>
#include <asm/irq.h>
#include <asm/dma.h>
@@ -4415,6 +4416,8 @@ static const struct tty_operations rs_op
#endif
};
+static struct class *rs_class;
+
static int __init rs_init(void)
{
int i;
@@ -4548,6 +4551,24 @@ static int __init rs_init(void)
#endif
#endif /* CONFIG_SVINTO_SIM */
+ rs_class = class_create(THIS_MODULE, "rs_tty");
+#ifdef CONFIG_ETRAX_SERIAL_PORT0
+ device_create(rs_class, NULL,
+ MKDEV(TTY_MAJOR, 64), NULL, "ttyS0");
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT1
+ device_create(rs_class, NULL,
+ MKDEV(TTY_MAJOR, 65), NULL, "ttyS1");
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT2
+ device_create(rs_class, NULL,
+ MKDEV(TTY_MAJOR, 66), NULL, "ttyS2");
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT3
+ device_create(rs_class, NULL,
+ MKDEV(TTY_MAJOR, 67), NULL, "ttyS3");
+#endif
+
return 0;
}

View file

@ -1,50 +0,0 @@
--- a/arch/cris/arch-v10/drivers/gpio.c
+++ b/arch/cris/arch-v10/drivers/gpio.c
@@ -21,6 +21,7 @@
#include <linux/poll.h>
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/device.h>
#include <asm/etraxgpio.h>
#include <arch/svinto.h>
@@ -771,6 +772,8 @@ static void ioif_watcher(const unsigned
/* main driver initialization routine, called from mem.c */
+static struct class *gp_class;
+
static int __init gpio_init(void)
{
int res;
@@ -784,6 +787,8 @@ static int __init gpio_init(void)
return res;
}
+ gp_class = class_create(THIS_MODULE, "gpio_etrax");
+
/* Clear all leds */
#if defined (CONFIG_ETRAX_CSP0_LEDS) || defined (CONFIG_ETRAX_PA_LEDS) || defined (CONFIG_ETRAX_PB_LEDS)
CRIS_LED_NETWORK_SET(0);
@@ -796,6 +801,8 @@ static int __init gpio_init(void)
CRIS_LED_BIT_SET(i);
#endif
+ device_create(gp_class, NULL,
+ MKDEV(GPIO_MAJOR, 2), NULL, "leds");
#endif
/* The I/O interface allocation watcher will be called when
* registering it. */
@@ -822,6 +829,12 @@ static int __init gpio_init(void)
if (res)
printk(KERN_CRIT "err: PA irq for gpio\n");
+ device_create(gp_class, NULL,
+ MKDEV(GPIO_MAJOR, 0), NULL, "gpioa");
+ device_create(gp_class, NULL,
+ MKDEV(GPIO_MAJOR, 1), NULL, "gpiob");
+ device_create(gp_class, NULL,
+ MKDEV(GPIO_MAJOR, 3), NULL, "gpiog");
return res;
}

View file

@ -1,32 +0,0 @@
--- a/arch/cris/arch-v10/drivers/i2c.c
+++ b/arch/cris/arch-v10/drivers/i2c.c
@@ -21,6 +21,7 @@
#include <linux/fs.h>
#include <linux/string.h>
#include <linux/init.h>
+#include <linux/device.h>
#include <asm/etraxi2c.h>
@@ -678,6 +679,8 @@ i2c_init(void)
return res;
}
+static struct class *i2c_class;
+
static int __init
i2c_register(void)
{
@@ -693,7 +696,11 @@ i2c_register(void)
}
printk(KERN_INFO "I2C driver v2.2, (c) 1999-2004 Axis Communications AB\n");
-
+
+ i2c_class = class_create(THIS_MODULE, "i2c_etrax");
+ device_create(i2c_class, NULL,
+ MKDEV(I2C_MAJOR, 0), NULL, "i2c");
+
return 0;
}

View file

@ -1,27 +0,0 @@
--- a/arch/cris/include/arch-v10/arch/Kbuild
+++ b/arch/cris/include/arch-v10/arch/Kbuild
@@ -1,3 +1,5 @@
+header-y += elf.h
+header-y += ptrace.h
header-y += user.h
header-y += svinto.h
header-y += sv_addr_ag.h
--- a/arch/cris/include/asm/Kbuild
+++ b/arch/cris/include/asm/Kbuild
@@ -1,11 +1,14 @@
include include/asm-generic/Kbuild.asm
-header-y += arch-v10/
-header-y += arch-v32/
+header-y += ../arch-v10/arch/
+header-y += ../arch-v32/arch/
+header-y += elf.h
header-y += ethernet.h
+header-y += page.h
header-y += rtc.h
header-y += sync_serial.h
+header-y += user.h
unifdef-y += etraxgpio.h
unifdef-y += rs485.h

View file

@ -1,16 +0,0 @@
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/default
NAME:=Normal (default)
endef
define Profile/default/Description
Normal Foxboard setup
endef
$(eval $(call Profile,default))

View file

@ -1,16 +0,0 @@
#
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/vhdl_no_fb
NAME:=FOXVHDL no fb
endef
define Profile/vhdl_no_fb/Description
Setup the Foxboard for FOXVHDL support with no framebuffer
endef
$(eval $(call Profile,vhdl_no_fb))