[U-Boot] Sorry, the patch v5 of arm64 port is duplicated, please remove unwanted.
I am so sorry, the patch v5 of arm64 port is duplicated, please remove unwanted. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Failing USB devices
On 23 August 2013 04:23, Marek Vasut ma...@denx.de wrote: Dear Andrew Murray, Hello, I'm unable to use some mass storage devices with the current git version (6612ab33956ae09c5ba2fde9c1540b519625ba37) of UBoot on a TI Davinci custom board. I have 7 pen drives, and 2 of them fail. I-O DATA USB Flash Disk (0x04bb/0x0c43) ... 2 USB Device(s) found scan end scanning usb for storage devices... i=0 i=1 USB Mass Storage device detected Transport: Bulk/Bulk/Bulk Endpoints In 1 Out 2 Int 0 usb_control_msg: request: 0xFE, requesttype: 0xA1, value 0x0 index 0x0 length 0x1 Get Max LUN - len = 1, result = 0 address 2 COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0 RESET:stall inquiry returns -1 COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0 RESET:stall inquiry returns -1 COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0 RESET:stall inquiry returns -1 COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0 RESET:stall inquiry returns -1 COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0 RESET:stall inquiry returns -1 error in inquiry i=2 0 Storage Device(s) found In this case putting a delay of 1000ms in usb_stor_BBB_transport between the COMMAND and DATA phase, (in place of the conditional 5ms USB_READY delay), overcomes this issue. It seems this 1000ms delay is only required for the first COMMAND, subsequent COMMAND phases seem happy with the 5ms delay. Lexar JumpDrive 32GB (0x0424/0x2507): So the device takes too long to init itself after powering up the port. The port is powered after usb_hub_power_on, I've used CONFIG_USB_HUB_MIN_POWER_ON_DELAY to set this to a large value (10 seconds), however this has no effect on the above failure. In fact with some further testing it seems that adding the 1000ms delay anywhere inside the loop inside the usb_inquiry function overcomes the above issues. The inquiry still fails, but the subsequent BBB_reset's stop stalling - successfully reset and then the next inquiry succeeds and the storage device detected. E.g... . COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset RESET:stall inquiry returns -1 . COMMAND phase DATA phase STATUS phase !CSWSIGNATURE BBB_reset BBB_reset result 0: status 0 reset BBB_reset result 0: status 0 clearing IN endpoint BBB_reset result 0: status 0 clearing OUT endpoint BBB_reset done inquiry returns -1 . COMMAND phase DATA phase STATUS phase inquiry returns 0 ISO Vers 2, Response Data 2 COMMAND phase STATUS phase COMMAND phase DATA phase STATUS phase Read Capacity returns: 0xff3f3d00, 0x2 Capacity = 0x3d4000, blocksz = 0x200 address 2 partype: 0 Does this suggest there needs to be a larger initial delay in between the COMMAND and STATUS phase, something wrong with the BBB_reset or something else? It would be nice if you could check the spec and see if there is a way to query the device for ready condition. Although I remember we already do that. Unfortunately I do not have the spec (the USB device is an off-the-shelf pen drive). The above failure happens in the usb_inquiry function, this seems to be the first user of BBB transport and this happens before the first call to usb_test_unit_ready. Andrew Murray ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Failing USB devices
On 23 August 2013 11:54, Benoît Thébaudeau benoit.thebaud...@advansee.com wrote: Dear Marek, Andrew, ... This is the kind of issue that made me create this (discarded) patch at some point: http://patchwork.ozlabs.org/patch/176527/ Can you try it? I'm not sure that it will be helpful for your specific case. Unfortunately it has no effect. But then the STATUS phase isn't stalling in my case, it's just giving back an unexpected value for CSWSIGNATURE - I have no idea why this is. I also have this issue with some devices and mainline U-Boot. I can confirm that this is a device initialization delay issue because subsequent USB commands on the device succeed (only the single automatic U-Boot USB command that I use at boot time fails). You may be able to work around these by setting CONFIG_USB_HUB_MIN_POWER_ON_DELAY in your config file (assuming the device is behind a hub). Best regards, Benoît Andrew Murray ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] can u-boot tools fw_{printenv, setenv} work with eMMC HW partition?
On Sat, Aug 24, 2013 at 12:01:25AM -0400, Robert P. J. Day wrote: On Sat, 24 Aug 2013, Luka Perkov wrote: /dev/mmcblk0 0x6 0x2000 0x2000 ah, there's the misunderstanding. i thought we were discussing how to be able to refer *directly* to the eMMC partition boot1, as in /dev/mmcblk1boot1. it looks like what you're describing would refer instead simply to /dev/mmcblk1, correct? Even though the config is actually refering to /dev/mmcblk1 in fact it's writing/reading to /dev/mmcblk1p1 (or /dev/mmcblk1boot1) in your case. But you need to configure it properly for your MMC device. Luka ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] can u-boot tools fw_{printenv, setenv} work with eMMC HW partition?
On Sat, 24 Aug 2013, Luka Perkov wrote: On Sat, Aug 24, 2013 at 12:01:25AM -0400, Robert P. J. Day wrote: On Sat, 24 Aug 2013, Luka Perkov wrote: /dev/mmcblk0 0x6 0x2000 0x2000 ah, there's the misunderstanding. i thought we were discussing how to be able to refer *directly* to the eMMC partition boot1, as in /dev/mmcblk1boot1. it looks like what you're describing would refer instead simply to /dev/mmcblk1, correct? Even though the config is actually refering to /dev/mmcblk1 in fact it's writing/reading to /dev/mmcblk1p1 (or /dev/mmcblk1boot1) in your case. But you need to configure it properly for your MMC device. right, i can see that and that clarifies things for me. my *original* question was whether there was a way to set up /etc/fw_env.config to refer to the eMMC partition /dev/mmcblk1boot1 *directly*, treating it as a regular block partition and bypassing all the MTD-related processing. (perhaps stefano can weigh in and say whether that's how he understood what i was asking.) if you instead refer to /dev/mmcblk1, as i understand it, you're just back to the standard MTD-based access, yes? anyway, sorry if i didn't explain myself clearly the first time. rday -- Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] arm: prevent using movt/movw address loads
The movt/movw instruction can be used to hardcode an memory location in the instruction itself. The linker starts complaining about this if the compiler decides to do so: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used and it is not support by U-boot as well. Prevent their use by requiring word relocations. This allows u-boot to be build at other optimalization levels then -Os. Signed-off-by: Jeroen Hofstee jer...@myspectrum.nl Cc: tiger...@viatech.com.cn Cc: Albert ARIBAUD albert.u.b...@aribaud.net --- arch/arm/config.mk | 8 ++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/arm/config.mk b/arch/arm/config.mk index 540a119..2277c82 100644 --- a/arch/arm/config.mk +++ b/arch/arm/config.mk @@ -94,7 +94,11 @@ PLATFORM_RELFLAGS += -fno-optimize-sibling-calls endif endif -# check that only R_ARM_RELATIVE relocations are generated ifneq ($(CONFIG_SPL_BUILD),y) -ALL-y += checkarmreloc +# Check that only R_ARM_RELATIVE relocations are generated. +ALL-y += checkarmreloc +# The movt / movw can hardcode 16 bit parts of the addresses in the +# instruction. Relocation is not supported for that case, so disable +# such usage by requiring word relocations. +PLATFORM_CPPFLAGS += $(call cc-option, -mword-relocations) endif -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] can u-boot tools fw_{printenv, setenv} work with eMMC HW partition?
Hi, right, i can see that and that clarifies things for me. my *original* question was whether there was a way to set up /etc/fw_env.config to refer to the eMMC partition /dev/mmcblk1boot1 *directly*, treating it as a regular block partition and bypassing all the MTD-related processing. (perhaps stefano can weigh in and say whether that's how he understood what i was asking.) if you instead refer to /dev/mmcblk1, as i understand it, you're just back to the standard MTD-based access, yes? the /dev/mmcblk... devices are block devices and do not provide the MTD API of the kernel. I guess this is the cause for the error message you've seen. You could try strace to verify. And this is the problem why the patches Luka mentioned are required: they make fw_{printenv,setenv} aware of opening such block devices by-passing the MTD-specific stuff, that means simply open the file, write/read the data and close the file descriptor. Without these patches these tools assume that the file descriptor opened are MTD-based. You can pass what ever you want via your config, so your file could look like: /dev/mmcblk1boot1 0x0 0x4000 Since the partition is somewhere placed on the eMMC device, you can also refer to the same location using /dev/mmcblk1. In the latter case you have to calculate the offset correctly to not overwrite other data (e.g. on other partitions). Using /dev/mmcblk1boot1 as entry point the kernel should reject write requests which go beyond the partition size. BR, Michael ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] mxs_nand: Fix ECC strength for NAND flash with OOB size of 224
On a board with an i.mx28 and a Micron MT29F4G08ABAEAH4, Linux says: NAND device: Manufacturer ID: 0x2c, Chip ID: 0xdc (Micron MT29F4G08ABAEAH4), 512MiB, page size: 4096, OOB size: 224) the ECC strength is 16. root@(none):/sys/devices/virtual/mtd/mtd0# for i in ecc_strength oobsize subpagesize; do echo $i = `cat $i`; done ecc_strength = 16 oobsize = 224 subpagesize = 4096 The ECC strength was not properly discovered by U-Boot causing the data written by Linux to return an -74 (EBADMSG) when read from U-Boot. This patch fixes mxs_nand_get_ecc_strength() to function in case of a NAND flash with page_data_size = 4096 and page_oob_size= 224. Signed-off-by: Elie De Brauwer eliedebrau...@gmail.com --- drivers/mtd/nand/mxs_nand.c |3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/mtd/nand/mxs_nand.c b/drivers/mtd/nand/mxs_nand.c index 378f8c5..036c113 100644 --- a/drivers/mtd/nand/mxs_nand.c +++ b/drivers/mtd/nand/mxs_nand.c @@ -155,6 +155,9 @@ static inline uint32_t mxs_nand_get_ecc_strength(uint32_t page_data_size, if (page_oob_size == 218) return 16; + + if (page_oob_size == 224) + return 16; } return 0; -- 1.7.10.4 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 4/8] ahci: add defines for PORT_SCR_STAT register bits
From: Rob Herring rob.herr...@calxeda.com Replace hard-coded register values with proper defines for PORT_SCR_STAT register. Signed-off-by: Rob Herring rob.herr...@calxeda.com --- v2: New patch drivers/block/ahci.c | 5 +++-- include/ahci.h | 5 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index f088063..ad7e95f 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -207,7 +207,8 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) j = 0; while (j WAIT_MS_LINKUP) { tmp = readl(port_mmio + PORT_SCR_STAT); - if ((tmp 0xf) == 0x3) + tmp = PORT_SCR_STAT_DET_MASK; + if (tmp == PORT_SCR_STAT_DET_PHYRDY) break; udelay(1000); j++; @@ -258,7 +259,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) /* register linkup ports */ tmp = readl(port_mmio + PORT_SCR_STAT); debug(SATA port %d status: 0x%x\n, i, tmp); - if ((tmp 0xf) == 0x03) + if ((tmp PORT_SCR_STAT_DET_MASK) == PORT_SCR_STAT_DET_PHYRDY) probe_ent-link_port_map |= (0x01 i); } diff --git a/include/ahci.h b/include/ahci.h index 78a8c55..d76993c 100644 --- a/include/ahci.h +++ b/include/ahci.h @@ -87,6 +87,11 @@ | PORT_IRQ_DMAS_FIS | PORT_IRQ_PIOS_FIS \ | PORT_IRQ_D2H_REG_FIS +/* PORT_SCR_STAT bits */ +#define PORT_SCR_STAT_DET_MASK 0x3 +#define PORT_SCR_STAT_DET_COMINIT 0x1 +#define PORT_SCR_STAT_DET_PHYRDY 0x3 + /* PORT_CMD bits */ #define PORT_CMD_ATAPI (1 24) /* Device is ATAPI */ #define PORT_CMD_LIST_ON (1 15) /* cmd list DMA engine running */ -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 2/8] ahci: fix unaligned access
From: Rob Herring rob.herr...@calxeda.com gcc 4.7 will generate unaligned accesses to local char arrays, so make them static to avoid that. Signed-off-by: Rob Herring rob.herr...@calxeda.com Reviewed-by: Tom Rini tr...@ti.com --- v2: make hdr const drivers/block/ahci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index 02ba02f..f4d1d81 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -610,7 +610,7 @@ static void dump_ataid(hd_driveid_t *ataid) */ static int ata_scsiop_inquiry(ccb *pccb) { - u8 hdr[] = { + static const u8 hdr[] = { 0, 0, 0x5,/* claim SPC-3 version compatibility */ -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 6/8] ahci: handle COMINIT received during spin-up
From: Rob Herring rob.herr...@calxeda.com Some Intel SSDs can send a COMINIT after the initial COMRESET. This causes the link to go down and we need to re-initialize the link. Signed-off-by: Rob Herring rob.herr...@calxeda.com --- v2: Use define values for PORT_SCR drivers/block/ahci.c | 12 1 file changed, 12 insertions(+) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index 5e7d01b..a7044f2 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -243,8 +243,20 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) if (!(tmp (ATA_STAT_BUSY | ATA_STAT_DRQ))) break; udelay(1000); + tmp = readl(port_mmio + PORT_SCR_STAT); + tmp = PORT_SCR_STAT_DET_MASK; + if (tmp == PORT_SCR_STAT_DET_PHYRDY) + break; j++; } + + tmp = readl(port_mmio + PORT_SCR_STAT) PORT_SCR_STAT_DET_MASK; + if (tmp == PORT_SCR_STAT_DET_COMINIT) { + debug(SATA link %d down (COMINIT received), retrying...\n, i); + i--; + continue; + } + printf(Target spinup took %d ms.\n, j); if (j == WAIT_MS_SPINUP) debug(timeout.\n); -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 8/8] ahci: convert to use libata functions and definitions
From: Rob Herring rob.herr...@calxeda.com libata already has similar functions as implemented in the ahci code. Refactor the code to use the libata variants and remove the dependency on ata.h. Convert some defines to use the version from libata.h. Also, remove some unnecessary memset's of bss data. This is a step toward hopefully merging ahci.c and dw_ahsata.c which are essentially the same driver. Signed-off-by: Rob Herring rob.herr...@calxeda.com Reviewed-by: Tom Rini tr...@ti.com --- v2: rebase to v2013.10-rc1 drivers/block/ahci.c | 80 +-- include/ahci.h| 23 - include/configs/MPC8544DS.h | 1 + include/configs/MPC8572DS.h | 1 + include/configs/MPC8610HPCD.h | 1 + include/configs/MPC8641HPCN.h | 1 + include/configs/P2020DS.h | 1 + include/configs/coreboot.h| 1 + include/configs/highbank.h| 1 + 9 files changed, 31 insertions(+), 79 deletions(-) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index 7f78c00..8cc9379 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -16,14 +16,14 @@ #include asm/io.h #include malloc.h #include scsi.h -#include ata.h +#include libata.h #include linux/ctype.h #include ahci.h static int ata_io_flush(u8 port); struct ahci_probe_ent *probe_ent = NULL; -hd_driveid_t *ataid[AHCI_MAX_PORTS]; +u16 *ataid[AHCI_MAX_PORTS]; #define writel_with_flush(a,b) do { writel(a,b); readl(b); } while (0) @@ -240,7 +240,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) j = 0; while (j WAIT_MS_SPINUP) { tmp = readl(port_mmio + PORT_TFDATA); - if (!(tmp (ATA_STAT_BUSY | ATA_STAT_DRQ))) + if (!(tmp (ATA_BUSY | ATA_DRQ))) break; udelay(1000); tmp = readl(port_mmio + PORT_SCR_STAT); @@ -378,8 +378,6 @@ static int ahci_init_one(pci_dev_t pdev) u16 vendor; int rc; - memset((void *)ataid, 0, sizeof(hd_driveid_t *) * AHCI_MAX_PORTS); - probe_ent = malloc(sizeof(struct ahci_probe_ent)); memset(probe_ent, 0, sizeof(struct ahci_probe_ent)); probe_ent-dev = pdev; @@ -469,7 +467,7 @@ static void ahci_set_feature(u8 port) memset(fis, 0, sizeof(fis)); fis[0] = 0x27; fis[1] = 1 7; - fis[2] = ATA_CMD_SETF; + fis[2] = ATA_CMD_SET_FEATURES; fis[3] = SETFEATURES_XFER; fis[12] = __ilog2(probe_ent-udma_mask + 1) + 0x40 - 0x01; @@ -607,27 +605,6 @@ static char *ata_id_strcpy(u16 *target, u16 *src, int len) return (char *)target; } - -static void dump_ataid(hd_driveid_t *ataid) -{ - debug((49)ataid-capability = 0x%x\n, ataid-capability); - debug((53)ataid-field_valid =0x%x\n, ataid-field_valid); - debug((63)ataid-dma_mword = 0x%x\n, ataid-dma_mword); - debug((64)ataid-eide_pio_modes = 0x%x\n, ataid-eide_pio_modes); - debug((75)ataid-queue_depth = 0x%x\n, ataid-queue_depth); - debug((80)ataid-major_rev_num = 0x%x\n, ataid-major_rev_num); - debug((81)ataid-minor_rev_num = 0x%x\n, ataid-minor_rev_num); - debug((82)ataid-command_set_1 = 0x%x\n, ataid-command_set_1); - debug((83)ataid-command_set_2 = 0x%x\n, ataid-command_set_2); - debug((84)ataid-cfsse = 0x%x\n, ataid-cfsse); - debug((85)ataid-cfs_enable_1 = 0x%x\n, ataid-cfs_enable_1); - debug((86)ataid-cfs_enable_2 = 0x%x\n, ataid-cfs_enable_2); - debug((87)ataid-csf_default = 0x%x\n, ataid-csf_default); - debug((88)ataid-dma_ultra = 0x%x\n, ataid-dma_ultra); - debug((93)ataid-hw_config = 0x%x\n, ataid-hw_config); -} - - /* * SCSI INQUIRY command operation. */ @@ -641,7 +618,7 @@ static int ata_scsiop_inquiry(ccb *pccb) 95 - 4, }; u8 fis[20]; - u8 *tmpid; + u16 *tmpid; u8 port; /* Clean ccb data buffer */ @@ -656,15 +633,16 @@ static int ata_scsiop_inquiry(ccb *pccb) /* Construct the FIS */ fis[0] = 0x27; /* Host to device FIS. */ fis[1] = 1 7;/* Command FIS. */ - fis[2] = ATA_CMD_IDENT; /* Command byte. */ + fis[2] = ATA_CMD_ID_ATA; /* Command byte. */ /* Read id from sata */ port = pccb-target; - if (!(tmpid = malloc(sizeof(hd_driveid_t + tmpid = malloc(ATA_ID_WORDS * 2); + if (!tmpid) return -ENOMEM; - if (ahci_device_data_io(port, (u8 *) fis, sizeof(fis), tmpid, - sizeof(hd_driveid_t), 0)) { + if (ahci_device_data_io(port, (u8 *) fis, sizeof(fis), (u8 *)tmpid, + ATA_ID_WORDS * 2, 0)) { debug(scsi_ahci: SCSI inquiry command failure.\n); free(tmpid); return -EIO; @@ -672,13 +650,16 @@ static int ata_scsiop_inquiry(ccb *pccb)
[U-Boot] [PATCH v2 7/8] ahci: increase spin-up timeout to 20 sec
From: Rob Herring rob.herr...@calxeda.com Based on Linux libata code, most drives are less than 10 sec, but some need up to 20 sec. Signed-off-by: Rob Herring rob.herr...@calxeda.com Reviewed-by: Tom Rini tr...@ti.com --- v2: rebase to v2013.10-rc1 drivers/block/ahci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index a7044f2..7f78c00 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -38,7 +38,7 @@ hd_driveid_t *ataid[AHCI_MAX_PORTS]; #endif /* Maximum timeouts for each event */ -#define WAIT_MS_SPINUP 1 +#define WAIT_MS_SPINUP 2 #define WAIT_MS_DATAIO 5000 #define WAIT_MS_FLUSH 5000 #define WAIT_MS_LINKUP 4 -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 1/8] ahci: use ports implemented map instead of num_ports
From: Richard Gibbs richard.gi...@calxeda.com The AHCI driver was incorrectly using the Capabilities register NP (number of ports) field to determine which ports to activate. This commit changes it to correctly use the PORTS_IMPL register as a port map. Signed-off-by: Richard Gibbs richard.gi...@calxeda.com Reviewed-by: Tom Rini tr...@ti.com --- v2: rebase to v2013.10-rc1 drivers/block/ahci.c | 4 1 file changed, 4 insertions(+) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index e455ba5..02ba02f 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -119,6 +119,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) u32 tmp, cap_save, cmd; int i, j; volatile u8 *port_mmio; + u32 port_map; debug(ahci_host_init: start\n); @@ -160,6 +161,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) #endif probe_ent-cap = readl(mmio + HOST_CAP); probe_ent-port_map = readl(mmio + HOST_PORTS_IMPL); + port_map = probe_ent-port_map; probe_ent-n_ports = (probe_ent-cap 0x1f) + 1; debug(cap 0x%x port_map 0x%x n_ports %d\n, @@ -169,6 +171,8 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) probe_ent-n_ports = CONFIG_SYS_SCSI_MAX_SCSI_ID; for (i = 0; i probe_ent-n_ports; i++) { + if (!(port_map (1 i))) + continue; probe_ent-port[i].port_mmio = ahci_port_base((u32) mmio, i); port_mmio = (u8 *) probe_ent-port[i].port_mmio; ahci_setup_port(probe_ent-port[i], (unsigned long)mmio, i); -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 3/8] ahci: fix memory leak in ata_scsiop_inquiry
From: Rob Herring rob.herr...@calxeda.com This fixes a memory leak when scsi inquiry fails. Signed-off-by: Rob Herring rob.herr...@calxeda.com Reviewed-by: Tom Rini tr...@ti.com --- v2: rebase to v2013.10-rc1 drivers/block/ahci.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index f4d1d81..f088063 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -643,6 +643,7 @@ static int ata_scsiop_inquiry(ccb *pccb) if (ahci_device_data_io(port, (u8 *) fis, sizeof(fis), tmpid, sizeof(hd_driveid_t), 0)) { debug(scsi_ahci: SCSI inquiry command failure.\n); + free(tmpid); return -EIO; } -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v2 5/8] ahci: move link bring-up handling to separate function
From: Rob Herring rob.herr...@calxeda.com Move the link bring-up handling to a separate weak function in order to allow platforms to override it. This is needed on highbank platform which needs special phy handling. Signed-off-by: Rob Herring rob.herr...@calxeda.com --- v2: - Use __weak attribute instead - Fix comment formatting - Use defines added in previous patch drivers/block/ahci.c | 40 +--- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index ad7e95f..5e7d01b 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -107,6 +107,27 @@ static int waiting_for_cmd_completed(volatile u8 *offset, return (i timeout_msec) ? 0 : -1; } +int __weak ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port) +{ + u32 tmp; + int j = 0; + u8 *port_mmio = (u8 *)probe_ent-port[port].port_mmio; + + /* +* Bring up SATA link. +* SATA link bringup time is usually less than 1 ms; only very +* rarely has it taken between 1-2 ms. Never seen it above 2 ms. +*/ + while (j WAIT_MS_LINKUP) { + tmp = readl(port_mmio + PORT_SCR_STAT); + tmp = PORT_SCR_STAT_DET_MASK; + if (tmp == PORT_SCR_STAT_DET_PHYRDY) + return 0; + udelay(1000); + j++; + } + return 1; +} static int ahci_host_init(struct ahci_probe_ent *probe_ent) { @@ -117,7 +138,7 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) #endif volatile u8 *mmio = (volatile u8 *)probe_ent-mmio_base; u32 tmp, cap_save, cmd; - int i, j; + int i, j, ret; volatile u8 *port_mmio; u32 port_map; @@ -200,20 +221,9 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) cmd |= PORT_CMD_SPIN_UP; writel_with_flush(cmd, port_mmio + PORT_CMD); - /* Bring up SATA link. -* SATA link bringup time is usually less than 1 ms; only very -* rarely has it taken between 1-2 ms. Never seen it above 2 ms. -*/ - j = 0; - while (j WAIT_MS_LINKUP) { - tmp = readl(port_mmio + PORT_SCR_STAT); - tmp = PORT_SCR_STAT_DET_MASK; - if (tmp == PORT_SCR_STAT_DET_PHYRDY) - break; - udelay(1000); - j++; - } - if (j == WAIT_MS_LINKUP) { + /* Bring up SATA link. */ + ret = ahci_link_up(probe_ent, i); + if (ret) { printf(SATA link %d timeout.\n, i); continue; } else { -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Failing USB devices
On Saturday, August 24, 2013 12:51:09 PM, Andrew Murray wrote: On 23 August 2013 11:54, Benoît Thébaudeau benoit.thebaud...@advansee.com wrote: I also have this issue with some devices and mainline U-Boot. I can confirm that this is a device initialization delay issue because subsequent USB commands on the device succeed (only the single automatic U-Boot USB command that I use at boot time fails). You may be able to work around these by setting CONFIG_USB_HUB_MIN_POWER_ON_DELAY in your config file (assuming the device is behind a hub). This happens for me without any hub. Best regards, Benoît ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [RFC 3/3] ARM: do not assign gd outside of crt0.S
--- arch/arm/cpu/arm926ejs/davinci/spl.c | 3 +-- arch/arm/cpu/armv7/exynos/spl_boot.c | 6 ++ arch/arm/cpu/armv7/omap-common/hwinit-common.c | 2 -- arch/arm/cpu/armv7/omap3/board.c | 2 -- board/isee/igep0033/board.c| 1 - board/phytec/pcm051/board.c| 2 -- board/ti/am335x/board.c| 2 -- board/ti/ti814x/evm.c | 2 -- board/woodburn/woodburn.c | 3 --- 9 files changed, 3 insertions(+), 20 deletions(-) diff --git a/arch/arm/cpu/arm926ejs/davinci/spl.c b/arch/arm/cpu/arm926ejs/davinci/spl.c index 59b304e..0af3646 100644 --- a/arch/arm/cpu/arm926ejs/davinci/spl.c +++ b/arch/arm/cpu/arm926ejs/davinci/spl.c @@ -50,8 +50,7 @@ void board_init_f(ulong dummy) /* Third, we clear the BSS. */ memset(__bss_start, 0, __bss_end - __bss_start); - /* Finally, setup gd and move to the next step. */ - gd = gdata; + /* Finally move to the next step. */ board_init_r(NULL, 0); } diff --git a/arch/arm/cpu/armv7/exynos/spl_boot.c b/arch/arm/cpu/armv7/exynos/spl_boot.c index 3651c00..c0287aa 100644 --- a/arch/arm/cpu/armv7/exynos/spl_boot.c +++ b/arch/arm/cpu/armv7/exynos/spl_boot.c @@ -149,9 +149,8 @@ void memzero(void *s, size_t n) * * @param gdp Value to give to gd */ -static void setup_global_data(gd_t *gdp) +static void setup_global_data(void) { - gd = gdp; memzero((void *)gd, sizeof(gd_t)); gd-flags |= GD_FLG_RELOC; gd-baudrate = CONFIG_BAUDRATE; @@ -160,10 +159,9 @@ static void setup_global_data(gd_t *gdp) void board_init_f(unsigned long bootflag) { - __aligned(8) gd_t local_gd; __attribute__((noreturn)) void (*uboot)(void); - setup_global_data(local_gd); + setup_global_data(); if (do_lowlevel_init()) power_exit_wakeup(); diff --git a/arch/arm/cpu/armv7/omap-common/hwinit-common.c b/arch/arm/cpu/armv7/omap-common/hwinit-common.c index 85d3754..69cbfd6 100644 --- a/arch/arm/cpu/armv7/omap-common/hwinit-common.c +++ b/arch/arm/cpu/armv7/omap-common/hwinit-common.c @@ -143,8 +143,6 @@ void s_init(void) srcomp_enable(); setup_clocks_for_console(); - gd = gdata; - preloader_console_init(); do_io_settings(); #endif diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c index 7d1f8d9..3c0042d 100644 --- a/arch/arm/cpu/armv7/omap3/board.c +++ b/arch/arm/cpu/armv7/omap3/board.c @@ -240,8 +240,6 @@ void s_init(void) #endif #ifdef CONFIG_SPL_BUILD - gd = gdata; - preloader_console_init(); timer_init(); diff --git a/board/isee/igep0033/board.c b/board/isee/igep0033/board.c index c0f0c0d..8cb9e4c 100644 --- a/board/isee/igep0033/board.c +++ b/board/isee/igep0033/board.c @@ -102,7 +102,6 @@ void s_init(void) enable_uart0_pin_mux(); uart_soft_reset(); - gd = gdata; preloader_console_init(); diff --git a/board/phytec/pcm051/board.c b/board/phytec/pcm051/board.c index 6291d03..3bf45ac 100644 --- a/board/phytec/pcm051/board.c +++ b/board/phytec/pcm051/board.c @@ -113,8 +113,6 @@ void s_init(void) enable_uart0_pin_mux(); uart_soft_reset(); - gd = gdata; - preloader_console_init(); /* Initalize the board header */ diff --git a/board/ti/am335x/board.c b/board/ti/am335x/board.c index 7138d73..f11eb93 100644 --- a/board/ti/am335x/board.c +++ b/board/ti/am335x/board.c @@ -328,8 +328,6 @@ void s_init(void) uart_soft_reset(); - gd = gdata; - preloader_console_init(); /* Initalize the board header */ diff --git a/board/ti/ti814x/evm.c b/board/ti/ti814x/evm.c index 17fba5a..7800a4d 100644 --- a/board/ti/ti814x/evm.c +++ b/board/ti/ti814x/evm.c @@ -143,8 +143,6 @@ void s_init(void) /* Enable UART */ uart_enable(); - gd = gdata; - preloader_console_init(); config_dmm(evm_lisa_map_regs); diff --git a/board/woodburn/woodburn.c b/board/woodburn/woodburn.c index 2744514..3da61a4 100644 --- a/board/woodburn/woodburn.c +++ b/board/woodburn/woodburn.c @@ -137,9 +137,6 @@ void board_init_f(ulong dummy) /* Clear the BSS. */ memset(__bss_start, 0, __bss_end - __bss_start); - /* Set global data pointer. */ - gd = gdata; - preloader_console_init(); timer_init(); -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [RFC 2/3] ARM,crt0.S: optional init gd to gdata for spl
The common/spl changes gd to gdata in board_init_f. I fail to see why. The only reason I can think of to use the gdata is the case where is won't fit into the region where the stack lives. Move the init to crt0.S and make it a CONFIG. --- arch/arm/lib/crt0.S | 5 + arch/arm/lib/spl.c | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S index 98d7881..b8fa10e 100644 --- a/arch/arm/lib/crt0.S +++ b/arch/arm/lib/crt0.S @@ -67,9 +67,14 @@ ENTRY(_main) ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) #endif bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ + +#if defined(CONFIG_SPL_BUILD) defined(CONFIG_SPL_GD_GLOBAL) + ldr r8, =gdata /* SPL assigns GD directly to gdata */ +#else sub sp, #GD_SIZE/* allocate one GD above SP */ bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ mov r8, sp /* GD is above SP */ +#endif bl s_init diff --git a/arch/arm/lib/spl.c b/arch/arm/lib/spl.c index 583bdb3..52dba2f 100644 --- a/arch/arm/lib/spl.c +++ b/arch/arm/lib/spl.c @@ -15,7 +15,9 @@ /* Pointer to as well as the global data structure for SPL */ DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_SPL_GD_GLOBAL gd_t gdata __attribute__ ((section(.data))); +#endif /* * In the context of SPL, board_init_f must ensure that any clocks/etc for @@ -31,9 +33,6 @@ void __weak board_init_f(ulong dummy) /* Clear the BSS. */ memset(__bss_start, 0, __bss_end - __bss_start); - /* Set global data pointer. */ - gd = gdata; - board_init_r(NULL, 0); } -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [RFC 0/3] ARM: cleanup gd init
Hello, As I noticed at [1] gd is setup multiple times. As pointed Tom pointed out out me this actually leads to problems as well, see [2]. These patches attempt to cleanup gd usage (a bit, board_f.c is not included since that one is rather trivial), some questions I have about it: 1) The major one, do these init changes brick any board? 2) Is there any board which needs gdata as a global? 3) What to do with lowlevel_init on armv7. Hide it under a CONFIG_*, make it weak.. or just remove it completely? 4) Keep the s_init in crt0.S or move it to the board_init_f? The disadvantage of the later is that all the different board_init_f's need to call system_init. 5) Where to put the __weak s_init (or hide this under a define) Regards, Jeroen [1] http://lists.denx.de/pipermail/u-boot/2013-August/160933.html [2] http://lists.denx.de/pipermail/u-boot/2013-July/158144.html Jeroen Hofstee (3): ARM,crt0.S: call s_init instead from ctr0.S ARM,crt0.S: optional init gd to gdata for spl ARM: do not assign gd outside of crt0.S arch/arm/cpu/arm926ejs/davinci/spl.c | 3 +-- arch/arm/cpu/armv7/exynos/spl_boot.c | 6 ++ arch/arm/cpu/armv7/lowlevel_init.S | 23 +-- arch/arm/cpu/armv7/omap-common/hwinit-common.c | 2 -- arch/arm/cpu/armv7/omap3/board.c | 2 -- arch/arm/cpu/armv7/omap3/lowlevel_init.S | 8 arch/arm/cpu/armv7/rmobile/lowlevel_init.S | 6 -- arch/arm/lib/crt0.S| 8 arch/arm/lib/reset.c | 5 + arch/arm/lib/spl.c | 5 ++--- board/isee/igep0033/board.c| 1 - board/phytec/pcm051/board.c| 2 -- board/ti/am335x/board.c| 2 -- board/ti/omap5912osk/lowlevel_init.S | 11 --- board/ti/ti814x/evm.c | 2 -- board/woodburn/woodburn.c | 3 --- 16 files changed, 23 insertions(+), 66 deletions(-) -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [RFC 1/3] ARM,crt0.S: call s_init instead from ctr0.S
The only reason gd is setup before _main seems to be the call to s_init. Therefore call s_init in crt0.S after gd has been setup. (It might become system_init one day, but that has the disadvantage that all versions of board_init_f must call system_init). --- arch/arm/cpu/armv7/lowlevel_init.S | 23 +-- arch/arm/cpu/armv7/omap3/lowlevel_init.S | 8 arch/arm/cpu/armv7/rmobile/lowlevel_init.S | 6 -- arch/arm/lib/crt0.S| 3 +++ arch/arm/lib/reset.c | 5 + board/ti/omap5912osk/lowlevel_init.S | 11 --- 6 files changed, 13 insertions(+), 43 deletions(-) diff --git a/arch/arm/cpu/armv7/lowlevel_init.S b/arch/arm/cpu/armv7/lowlevel_init.S index 82b2b86..1ec7481 100644 --- a/arch/arm/cpu/armv7/lowlevel_init.S +++ b/arch/arm/cpu/armv7/lowlevel_init.S @@ -16,26 +16,5 @@ #include linux/linkage.h ENTRY(lowlevel_init) - /* -* Setup a temporary stack -*/ - ldr sp, =CONFIG_SYS_INIT_SP_ADDR - bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ -#ifdef CONFIG_SPL_BUILD - ldr r8, =gdata -#else - sub sp, #GD_SIZE - bic sp, sp, #7 - mov r8, sp -#endif - /* -* Save the old lr(passed in ip) and the current lr to stack -*/ - push{ip, lr} - - /* -* go setup pll, mux, memory -*/ - bl s_init - pop {ip, pc} + mov pc, lr ENDPROC(lowlevel_init) diff --git a/arch/arm/cpu/armv7/omap3/lowlevel_init.S b/arch/arm/cpu/armv7/omap3/lowlevel_init.S index bdf74ea..db1d4dc 100644 --- a/arch/arm/cpu/armv7/omap3/lowlevel_init.S +++ b/arch/arm/cpu/armv7/omap3/lowlevel_init.S @@ -197,22 +197,22 @@ pll_div_val5: #endif ENTRY(lowlevel_init) +#if !defined(CONFIG_SYS_NAND_BOOT) !defined(CONFIG_SYS_ONENAND_BOOT) ldr sp, SRAM_STACK str ip, [sp]/* stash ip register */ mov ip, lr /* save link reg across call */ -#if !defined(CONFIG_SYS_NAND_BOOT) !defined(CONFIG_SYS_ONENAND_BOOT) /* * No need to copy/exec the clock code - DPLL adjust already done * in NAND/oneNAND Boot. */ ldr r1, =SRAM_CLK_CODE bl cpy_clk_code -#endif /* NAND Boot */ + mov lr, ip /* restore link reg */ ldr ip, [sp]/* restore save ip */ - /* tail-call s_init to setup pll, mux, memory */ - b s_init +#endif /* NAND Boot */ + mov pc, lr ENDPROC(lowlevel_init) /* the literal pools origin */ diff --git a/arch/arm/cpu/armv7/rmobile/lowlevel_init.S b/arch/arm/cpu/armv7/rmobile/lowlevel_init.S index ff18d96..70ec22d 100644 --- a/arch/arm/cpu/armv7/rmobile/lowlevel_init.S +++ b/arch/arm/cpu/armv7/rmobile/lowlevel_init.S @@ -59,14 +59,8 @@ loop0: subs r0, r0, #1 bne loop0 - ldr sp, MERAM_STACK - b s_init - .pool .align 4 ENDPROC(lowlevel_init) .ltorg - -MERAM_STACK: - .word LOW_LEVEL_MERAM_STACK diff --git a/arch/arm/lib/crt0.S b/arch/arm/lib/crt0.S index 960d12e..98d7881 100644 --- a/arch/arm/lib/crt0.S +++ b/arch/arm/lib/crt0.S @@ -70,6 +70,9 @@ ENTRY(_main) sub sp, #GD_SIZE/* allocate one GD above SP */ bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ mov r8, sp /* GD is above SP */ + + bl s_init + mov r0, #0 bl board_init_f diff --git a/arch/arm/lib/reset.c b/arch/arm/lib/reset.c index 7a03580..d14eac9 100644 --- a/arch/arm/lib/reset.c +++ b/arch/arm/lib/reset.c @@ -35,3 +35,8 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /*NOTREACHED*/ return 0; } + +/* HACK */ +__weak void s_init(void) +{ +} diff --git a/board/ti/omap5912osk/lowlevel_init.S b/board/ti/omap5912osk/lowlevel_init.S index cad0a5a..61c8605 100644 --- a/board/ti/omap5912osk/lowlevel_init.S +++ b/board/ti/omap5912osk/lowlevel_init.S @@ -296,17 +296,6 @@ common_tc: ldr sp, SRAM_STACK bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ - /* -* Save the old lr(passed in ip) and the current lr to stack -*/ - push{ip, lr} - - /* -* go setup pll, mux, memory -*/ - bl s_init - pop {ip, pc} - /* back to arch calling code */ mov pc, lr -- 1.8.1.2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [RFC 1/3] ARM,crt0.S: call s_init instead from ctr0.S
On 08/24/2013 06:32 PM, Jeroen Hofstee wrote: /* the literal pools origin */ diff --git a/arch/arm/cpu/armv7/rmobile/lowlevel_init.S b/arch/arm/cpu/armv7/rmobile/lowlevel_init.S index ff18d96..70ec22d 100644 --- a/arch/arm/cpu/armv7/rmobile/lowlevel_init.S +++ b/arch/arm/cpu/armv7/rmobile/lowlevel_init.S @@ -59,14 +59,8 @@ loop0: subs r0, r0, #1 bne loop0 - ldr sp, MERAM_STACK - b s_init - right, this ^^^ will brick things nicely, how about returning to the caller... .pool .align 4 ENDPROC(lowlevel_init) .ltorg - -MERAM_STACK: - .word LOW_LEVEL_MERAM_STACK ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] can u-boot tools fw_{printenv, setenv} work with eMMC HW partition?
On Sat, Aug 24, 2013 at 07:37:00AM -0400, Robert P. J. Day wrote: On Sat, 24 Aug 2013, Luka Perkov wrote: On Sat, Aug 24, 2013 at 12:01:25AM -0400, Robert P. J. Day wrote: On Sat, 24 Aug 2013, Luka Perkov wrote: /dev/mmcblk0 0x6 0x2000 0x2000 ah, there's the misunderstanding. i thought we were discussing how to be able to refer *directly* to the eMMC partition boot1, as in /dev/mmcblk1boot1. it looks like what you're describing would refer instead simply to /dev/mmcblk1, correct? Even though the config is actually refering to /dev/mmcblk1 in fact it's writing/reading to /dev/mmcblk1p1 (or /dev/mmcblk1boot1) in your case. But you need to configure it properly for your MMC device. right, i can see that and that clarifies things for me. my *original* question was whether there was a way to set up /etc/fw_env.config to refer to the eMMC partition /dev/mmcblk1boot1 *directly*, treating it as a regular block partition and bypassing all the MTD-related processing. (perhaps stefano can weigh in and say whether that's how he understood what i was asking.) if you instead refer to /dev/mmcblk1, as i understand it, you're just back to the standard MTD-based access, yes? anyway, sorry if i didn't explain myself clearly the first time. AFAIK there is no fw_{printenv,setenv} support for MMC. Except if you use the patches I pointed out. Somebody please correct me if I'm wrong. Luka ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] Change of NDS32 Custodian
On Wednesday 31 July 2013 06:40:37 Marek Vasut wrote: Dear Macpaul Lin, Here is a short announcement about a change in the U-boot NDS32 custodian. I have no longer working in Andes Technology Corporation and cannot provide the community the best support on NDS32 architecture. Kuan-Yu Kuo (a.k.a. Ken Kuo) will be the next custodian of u-boot-nds32 branch. Thanks for the great support and co-working guide from Wolfgang, Tom, Po-Yu Chuang, Mike, Marek and many people. Thanks for your help which made the u-boot porting work of NDS32 architecture becomes the first open source mainline contribution of NDS32. The official custodian e-mail of NDS32 will be changed to ub...@andestech.com. Ken will send the patchwork permission request, patches to MAINTAINERS file, and update the U-boot Wiki later. Was good having you around! Thank you for your efforts! indeed ... it's been fun working with you Macpaul. hopefully we can meet up at some point and have a beer. -mike signature.asc Description: This is a digitally signed message part. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot