* [U-Boot] [PATCH V6] MX35: add support for flea3 board
From: Stefano Babic @ 2011-10-24 9:58 UTC (permalink / raw)
To: u-boot
In-Reply-To: <1316166383-11314-1-git-send-email-sbabic@denx.de>
The flea3 board is a custom board by CarMediaLab used
in automotive.
Network (FEC), NOR, NAND and SPI are supported.
Signed-off-by: Stefano Babic <sbabic@denx.de>
---
Changes since V5:
- drop sdelay after discussion on ML (W. Denk, A. Aribaud)
- modify dram initialization to work with both CSD0 and CSD1
- set GPIO3_1 to High due to hardware changes
Changes since V4:
- boards.cfg maust have a new entry only for flea3 (Fabio Estevam)
Changes since V3:
- fix checkpatch warnings (Wolfgang Denk)
Changes since V2:
- put the board into manufacturer's directory (CarMediaLab)
Changes since V1:
- add missing entry in MAINTAINERS (F. Estevam)
MAINTAINERS | 1 +
board/CarMediaLab/flea3/Makefile | 49 ++++++
board/CarMediaLab/flea3/flea3.c | 289 +++++++++++++++++++++++++++++++
board/CarMediaLab/flea3/lowlevel_init.S | 79 +++++++++
boards.cfg | 1 +
include/configs/flea3.h | 286 ++++++++++++++++++++++++++++++
6 files changed, 705 insertions(+), 0 deletions(-)
create mode 100644 board/CarMediaLab/flea3/Makefile
create mode 100644 board/CarMediaLab/flea3/flea3.c
create mode 100644 board/CarMediaLab/flea3/lowlevel_init.S
create mode 100644 include/configs/flea3.h
diff --git a/MAINTAINERS b/MAINTAINERS
index cd0dd91..804b899 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -560,6 +560,7 @@ Albert ARIBAUD <albert.u.boot@aribaud.net>
Stefano Babic <sbabic@denx.de>
ea20 davinci
+ flea3 i.MX35
mx35pdk i.MX35
mx51evk i.MX51
polaris xscale/pxa
diff --git a/board/CarMediaLab/flea3/Makefile b/board/CarMediaLab/flea3/Makefile
new file mode 100644
index 0000000..f5ad494
--- /dev/null
+++ b/board/CarMediaLab/flea3/Makefile
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
+#
+# (C) Copyright 2008-2009 Freescale Semiconductor, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+COBJS := flea3.o
+SOBJS := lowlevel_init.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/CarMediaLab/flea3/flea3.c b/board/CarMediaLab/flea3/flea3.c
new file mode 100644
index 0000000..64f4b57
--- /dev/null
+++ b/board/CarMediaLab/flea3/flea3.c
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
+ *
+ * (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
+ *
+ * Copyright (C) 2011, Stefano Babic <sbabic@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/errno.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/mx35_pins.h>
+#include <asm/arch/iomux.h>
+#include <i2c.h>
+#include <linux/types.h>
+#include <asm/gpio.h>
+#include <asm/arch/sys_proto.h>
+#include <netdev.h>
+
+#ifndef CONFIG_BOARD_EARLY_INIT_F
+#error "CONFIG_BOARD_EARLY_INIT_F must be set for this board"
+#endif
+
+#define CCM_CCMR_CONFIG 0x003F4208
+
+#define ESDCTL_DDR2_CONFIG 0x007FFC3F
+#define ESDCTL_0x92220000 0x92220000
+#define ESDCTL_0xA2220000 0xA2220000
+#define ESDCTL_0xB2220000 0xB2220000
+#define ESDCTL_0x82228080 0x82228080
+#define ESDCTL_DDR2_EMR2 0x04000000
+#define ESDCTL_DDR2_EMR3 0x06000000
+#define ESDCTL_PRECHARGE 0x00000400
+#define ESDCTL_DDR2_EN_DLL 0x02000400
+#define ESDCTL_DDR2_RESET_DLL 0x00000333
+#define ESDCTL_DDR2_MR 0x00000233
+#define ESDCTL_DDR2_OCD_DEFAULT 0x02000780
+#define ESDCTL_DELAY_LINE5 0x00F49F00
+
+static inline void dram_wait(unsigned int count)
+{
+ volatile unsigned int wait = count;
+
+ while (wait--)
+ ;
+}
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int dram_init(void)
+{
+ gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1,
+ PHYS_SDRAM_1_SIZE);
+
+ return 0;
+}
+
+static void board_setup_sdram_bank(u32 start_address)
+
+{
+ struct esdc_regs *esdc = (struct esdc_regs *)ESDCTL_BASE_ADDR;
+ u32 *cfg_reg, *ctl_reg;
+ u32 val;
+
+ switch (start_address) {
+ case CSD0_BASE_ADDR:
+ cfg_reg = &esdc->esdcfg0;
+ ctl_reg = &esdc->esdctl0;
+ break;
+ case CSD1_BASE_ADDR:
+ cfg_reg = &esdc->esdcfg1;
+ ctl_reg = &esdc->esdctl1;
+ break;
+ default:
+ return;
+ }
+
+ /* Initialize MISC register for DDR2 */
+ val = ESDC_MISC_RST | ESDC_MISC_MDDR_EN | ESDC_MISC_MDDR_DL_RST |
+ ESDC_MISC_DDR_EN | ESDC_MISC_DDR2_EN;
+ writel(val, &esdc->esdmisc);
+ val &= ~(ESDC_MISC_RST | ESDC_MISC_MDDR_DL_RST);
+ writel(val, &esdc->esdmisc);
+
+ /*
+ * according to DDR2 specs, wait a while before
+ * the PRECHARGE_ALL command
+ */
+ dram_wait(0x20000);
+
+ /* Load DDR2 config and timing */
+ writel(ESDCTL_DDR2_CONFIG, cfg_reg);
+
+ /* Precharge ALL */
+ writel(ESDCTL_0x92220000,
+ ctl_reg);
+ writel(0xda, start_address + ESDCTL_PRECHARGE);
+
+ /* Load mode */
+ writel(ESDCTL_0xB2220000,
+ ctl_reg);
+ writeb(0xda, start_address + ESDCTL_DDR2_EMR2); /* EMRS2 */
+ writeb(0xda, start_address + ESDCTL_DDR2_EMR3); /* EMRS3 */
+ writeb(0xda, start_address + ESDCTL_DDR2_EN_DLL); /* Enable DLL */
+ writeb(0xda, start_address + ESDCTL_DDR2_RESET_DLL); /* Reset DLL */
+
+ /* Precharge ALL */
+ writel(ESDCTL_0x92220000,
+ ctl_reg);
+ writel(0xda, start_address + ESDCTL_PRECHARGE);
+
+ /* Set mode auto refresh : at least two refresh are required */
+ writel(ESDCTL_0xA2220000,
+ ctl_reg);
+ writel(0xda, start_address);
+ writel(0xda, start_address);
+
+ writel(ESDCTL_0xB2220000,
+ ctl_reg);
+ writeb(0xda, start_address + ESDCTL_DDR2_MR);
+ writeb(0xda, start_address + ESDCTL_DDR2_OCD_DEFAULT);
+
+ /* OCD mode exit */
+ writeb(0xda, start_address + ESDCTL_DDR2_EN_DLL); /* Enable DLL */
+
+ /* Set normal mode */
+ writel(ESDCTL_0x82228080,
+ ctl_reg);
+
+ dram_wait(0x20000);
+
+ /* Do not set delay lines, only for MDDR */
+}
+
+static void board_setup_sdram(void)
+{
+ struct esdc_regs *esdc = (struct esdc_regs *)ESDCTL_BASE_ADDR;
+
+ /* Initialize with default values both CSD0/1 */
+ writel(0x2000, &esdc->esdctl0);
+ writel(0x2000, &esdc->esdctl1);
+
+ board_setup_sdram_bank(CSD1_BASE_ADDR);
+}
+
+static void setup_iomux_uart3(void)
+{
+ mxc_request_iomux(MX35_PIN_RTS2_UART3_RXD_MUX, MUX_CONFIG_ALT7);
+ mxc_request_iomux(MX35_PIN_CTS2_UART3_TXD_MUX, MUX_CONFIG_ALT7);
+}
+
+static void setup_iomux_i2c(void)
+{
+ int pad;
+
+ mxc_request_iomux(MX35_PIN_I2C1_CLK, MUX_CONFIG_SION);
+ mxc_request_iomux(MX35_PIN_I2C1_DAT, MUX_CONFIG_SION);
+
+ pad = (PAD_CTL_HYS_SCHMITZ | PAD_CTL_PKE_ENABLE \
+ | PAD_CTL_PUE_PUD | PAD_CTL_ODE_OpenDrain);
+
+ mxc_iomux_set_pad(MX35_PIN_I2C1_CLK, pad);
+ mxc_iomux_set_pad(MX35_PIN_I2C1_DAT, pad);
+
+ mxc_request_iomux(MX35_PIN_TX3_RX2, MUX_CONFIG_ALT1);
+ mxc_request_iomux(MX35_PIN_TX2_RX3, MUX_CONFIG_ALT1);
+
+ mxc_iomux_set_pad(MX35_PIN_TX3_RX2, pad);
+ mxc_iomux_set_pad(MX35_PIN_TX2_RX3, pad);
+}
+
+
+static void setup_iomux_spi(void)
+{
+ mxc_request_iomux(MX35_PIN_CSPI1_MOSI, MUX_CONFIG_SION);
+ mxc_request_iomux(MX35_PIN_CSPI1_MISO, MUX_CONFIG_SION);
+ mxc_request_iomux(MX35_PIN_CSPI1_SS0, MUX_CONFIG_SION);
+ mxc_request_iomux(MX35_PIN_CSPI1_SS1, MUX_CONFIG_SION);
+ mxc_request_iomux(MX35_PIN_CSPI1_SCLK, MUX_CONFIG_SION);
+}
+
+static void setup_iomux_fec(void)
+{
+ /* setup pins for FEC */
+ mxc_request_iomux(MX35_PIN_FEC_TX_CLK, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RX_CLK, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RX_DV, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_COL, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RDATA0, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_TDATA0, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_TX_EN, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_MDC, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_MDIO, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_TX_ERR, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RX_ERR, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_CRS, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RDATA1, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_TDATA1, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RDATA2, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_TDATA2, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_RDATA3, MUX_CONFIG_FUNC);
+ mxc_request_iomux(MX35_PIN_FEC_TDATA3, MUX_CONFIG_FUNC);
+
+}
+
+int board_early_init_f(void)
+{
+ struct ccm_regs *ccm =
+ (struct ccm_regs *)IMX_CCM_BASE;
+
+ /* setup GPIO3_1 to set HighVCore signal */
+ mxc_request_iomux(MX35_PIN_ATA_DATA1, MUX_CONFIG_ALT5);
+ gpio_direction_output(65, 1);
+
+ /* initialize PLL and clock configuration */
+ writel(CCM_CCMR_CONFIG, &ccm->ccmr);
+
+ writel(CCM_MPLL_532_HZ, &ccm->mpctl);
+ writel(CCM_PPLL_300_HZ, &ccm->ppctl);
+
+ /* Set the core to run at 532 Mhz */
+ writel(0x00001000, &ccm->pdr0);
+
+ /* Set-up RAM */
+ board_setup_sdram();
+
+ /* enable clocks */
+ writel(readl(&ccm->cgr0) |
+ MXC_CCM_CGR0_EMI_MASK |
+ MXC_CCM_CGR0_EDI0_MASK |
+ MXC_CCM_CGR0_EPIT1_MASK,
+ &ccm->cgr0);
+
+ writel(readl(&ccm->cgr1) |
+ MXC_CCM_CGR1_FEC_MASK |
+ MXC_CCM_CGR1_GPIO1_MASK |
+ MXC_CCM_CGR1_GPIO2_MASK |
+ MXC_CCM_CGR1_GPIO3_MASK |
+ MXC_CCM_CGR1_I2C1_MASK |
+ MXC_CCM_CGR1_I2C2_MASK |
+ MXC_CCM_CGR1_I2C3_MASK,
+ &ccm->cgr1);
+
+ /* Set-up NAND */
+ __raw_writel(readl(&ccm->rcsr) | MXC_CCM_RCSR_NFC_FMS, &ccm->rcsr);
+
+ /* Set pinmux for the required peripherals */
+ setup_iomux_uart3();
+ setup_iomux_i2c();
+ setup_iomux_fec();
+ setup_iomux_spi();
+
+ return 0;
+}
+
+int board_init(void)
+{
+ /* address of boot parameters */
+ gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+
+ return 0;
+}
+
+u32 get_board_rev(void)
+{
+ int rev = 0;
+
+ return (get_cpu_rev() & ~(0xF << 8)) | (rev & 0xF) << 8;
+}
diff --git a/board/CarMediaLab/flea3/lowlevel_init.S b/board/CarMediaLab/flea3/lowlevel_init.S
new file mode 100644
index 0000000..2f42fc9
--- /dev/null
+++ b/board/CarMediaLab/flea3/lowlevel_init.S
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
+ *
+ * (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
+ *
+ * Copyright (C) 2011, Stefano Babic <sbabic@denx.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <asm-offsets.h>
+#include <asm/arch/imx-regs.h>
+#include <generated/asm-offsets.h>
+
+/*
+ * Configuration for the flea3 board.
+ * These defines are used by the included macros and must
+ * be defined first
+ */
+#define AIPS_MPR_CONFIG 0x77777777
+#define AIPS_OPACR_CONFIG 0x00000000
+
+/* MPR - priority is M4 > M2 > M3 > M5 > M0 > M1 */
+#define MAX_MPR_CONFIG 0x00302154
+
+/* SGPCR - always park on last master */
+#define MAX_SGPCR_CONFIG 0x00000010
+
+/* MGPCR - restore default values */
+#define MAX_MGPCR_CONFIG 0x00000000
+
+/*
+ * M3IF Control Register (M3IFCTL)
+ * MRRP[0] = L2CC0 not on priority list (0 << 0) = 0x00000000
+ * MRRP[1] = L2CC1 not on priority list (0 << 0) = 0x00000000
+ * MRRP[2] = MBX not on priority list (0 << 0) = 0x00000000
+ * MRRP[3] = MAX1 not on priority list (0 << 0) = 0x00000000
+ * MRRP[4] = SDMA not on priority list (0 << 0) = 0x00000000
+ * MRRP[5] = MPEG4 not on priority list (0 << 0) = 0x00000000
+ * MRRP[6] = IPU1 on priority list (1 << 6) = 0x00000040
+ * MRRP[7] = IPU2 not on priority list (0 << 0) = 0x00000000
+ * ------------
+ * 0x00000040
+ */
+#define M3IF_CONFIG 0x00000040
+
+#define CCM_PDR0_CONFIG 0x00801000
+
+/*
+ * includes MX35 utility macros
+ */
+#include <asm/arch/lowlevel_macro.S>
+
+.globl lowlevel_init
+lowlevel_init:
+
+ core_init
+
+ init_aips
+
+ init_max
+
+ init_m3if
+
+ mov pc, lr
diff --git a/boards.cfg b/boards.cfg
index da3c2a0..07865ad 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -42,6 +42,7 @@ imx31_litekit arm arm1136 - logicpd
imx31_phycore arm arm1136 - - mx31
imx31_phycore_eet arm arm1136 imx31_phycore - mx31 imx31_phycore:IMX31_PHYCORE_EET
mx31pdk arm arm1136 - freescale mx31 mx31pdk:NAND_U_BOOT
+flea3 arm arm1136 - CarMediaLab mx35
mx35pdk arm arm1136 - freescale mx35
mx35pdk_nand arm arm1136 mx35pdk freescale mx35 mx35pdk:NAND_U_BOOT
omap2420h4 arm arm1136 - ti omap24xx
diff --git a/include/configs/flea3.h b/include/configs/flea3.h
new file mode 100644
index 0000000..d88c578
--- /dev/null
+++ b/include/configs/flea3.h
@@ -0,0 +1,286 @@
+/*
+ * (C) Copyright 2011, Stefano Babic <sbabic@denx.de>
+ *
+ * (C) Copyright 2008-2010 Freescale Semiconductor, Inc.
+ *
+ * Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
+ *
+ * Configuration for the flea3 board.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <asm/arch/imx-regs.h>
+
+ /* High Level Configuration Options */
+#define CONFIG_ARM1136 /* This is an arm1136 CPU core */
+#define CONFIG_MX35
+#define CONFIG_MX35_HCLK_FREQ 24000000
+
+#define CONFIG_SYS_DCACHE_OFF
+
+#define CONFIG_DISPLAY_CPUINFO
+
+/* Only in case the value is not present in mach-types.h */
+#ifndef MACH_TYPE_FLEA3
+#define MACH_TYPE_FLEA3 3668
+#endif
+
+#define CONFIG_MACH_TYPE MACH_TYPE_FLEA3
+
+/* Set TEXT at the beginning of the NOR flash */
+#define CONFIG_SYS_TEXT_BASE 0xA0000000
+
+#define CONFIG_SYS_64BIT_VSPRINTF
+
+/* This is required to setup the ESDC controller */
+#define CONFIG_BOARD_EARLY_INIT_F
+
+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
+#define CONFIG_REVISION_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+
+/*
+ * Size of malloc() pool
+ */
+#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 1024 * 1024)
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_HARD_I2C
+#define CONFIG_I2C_MXC
+#define CONFIG_SYS_I2C_MX35_PORT3
+#define CONFIG_SYS_I2C_SPEED 100000
+#define CONFIG_SYS_I2C_SLAVE 0xfe
+#define CONFIG_MXC_SPI
+#define CONFIG_MXC_GPIO
+
+/*
+ * UART (console)
+ */
+#define CONFIG_MXC_UART
+#define CONFIG_SYS_MX35_UART3
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_BAUDRATE 115200
+#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
+
+/*
+ * Command definition
+ */
+
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_DNS
+
+#define CONFIG_CMD_NAND
+
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_SPI
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_NET_RETRY_COUNT 100
+
+#define CONFIG_BOOTDELAY 3
+
+#define CONFIG_LOADADDR 0x90800000 /* loadaddr env var */
+
+
+/*
+ * Ethernet on SOC (FEC)
+ */
+#define CONFIG_NET_MULTI
+#define CONFIG_FEC_MXC
+#define IMX_FEC_BASE FEC_BASE_ADDR
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_MICREL
+#define CONFIG_FEC_MXC_PHYADDR 0x1
+
+#define CONFIG_MII
+#define CONFIG_DISCOVER_PHY
+
+#define CONFIG_ARP_TIMEOUT 200UL
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_PROMPT "flea3 U-Boot > "
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_SYS_HUSH_PARSER /* Use the HUSH parser */
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
+
+#define CONFIG_SYS_MEMTEST_START 0 /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END 0x10000
+
+#undef CONFIG_SYS_CLKS_IN_HZ /* everything, incl board info, in Hz */
+
+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+
+#define CONFIG_SYS_HZ 1000
+
+
+/*
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE (128 * 1024) /* regular stack */
+
+/*
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS 1
+#define PHYS_SDRAM_1 CSD1_BASE_ADDR
+#define PHYS_SDRAM_1_SIZE (128 * 1024 * 1024)
+
+#define CONFIG_SYS_SDRAM_BASE CSD1_BASE_ADDR
+#define CONFIG_SYS_INIT_RAM_ADDR (IRAM_BASE_ADDR + 0x10000)
+#define CONFIG_SYS_INIT_RAM_SIZE (IRAM_SIZE / 2)
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_SIZE - \
+ GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
+ CONFIG_SYS_GBL_DATA_OFFSET)
+
+/*
+ * MTD Command for mtdparts
+ */
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_FLASH_CFI_MTD
+#define CONFIG_MTD_PARTITIONS
+#define MTDIDS_DEFAULT "nand0=mxc_nand,nor0=physmap-flash.0"
+#define MTDPARTS_DEFAULT "mtdparts=mxc_nand:196m(root1)," \
+ "196m(root2),-(user);" \
+ "physmap-flash.0:512k(u-boot),64k(env1)," \
+ "64k(env2),3776k(kernel1),3776k(kernel2)"
+/*
+ * FLASH and environment organization
+ */
+#define CONFIG_SYS_FLASH_BASE CS0_BASE_ADDR
+#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */
+#define CONFIG_SYS_MAX_FLASH_SECT 512 /* max number of sectors on one chip */
+/* Monitor at beginning of flash */
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_MONITOR_LEN (512 * 1024)
+
+#define CONFIG_ENV_SECT_SIZE (64 * 1024)
+#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
+
+/* Address and size of Redundant Environment Sector */
+#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
+
+#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE + \
+ CONFIG_SYS_MONITOR_LEN)
+
+#define CONFIG_ENV_IS_IN_FLASH
+
+/*
+ * CFI FLASH driver setup
+ */
+#define CONFIG_SYS_FLASH_CFI /* Flash memory is CFI compliant */
+#define CONFIG_FLASH_CFI_DRIVER
+
+/* A non-standard buffered write algorithm */
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE /* faster */
+#define CONFIG_SYS_FLASH_PROTECTION /* Use hardware sector protection */
+
+/*
+ * NAND FLASH driver setup
+ */
+#define CONFIG_NAND_MXC
+#define CONFIG_NAND_MXC_V1_1
+#define CONFIG_MXC_NAND_REGS_BASE (NFC_BASE_ADDR)
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+#define CONFIG_SYS_NAND_BASE (NFC_BASE_ADDR)
+#define CONFIG_MXC_NAND_HWECC
+#define CONFIG_SYS_NAND_LARGEPAGE
+
+/*
+ * Default environment and default scripts
+ * to update uboot and load kernel
+ */
+#define xstr(s) str(s)
+#define str(s) #s
+
+#define CONFIG_HOSTNAME flea3
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "netdev=eth0\0" \
+ "nfsargs=setenv bootargs root=/dev/nfs rw " \
+ "nfsroot=${serverip}:${rootpath}\0" \
+ "ramargs=setenv bootargs root=/dev/ram rw\0" \
+ "addip_sta=setenv bootargs ${bootargs} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \
+ ":${hostname}:${netdev}:off panic=1\0" \
+ "addip_dyn=setenv bootargs ${bootargs} ip=dhcp\0" \
+ "addip=if test -n ${ipdyn};then run addip_dyn;" \
+ "else run addip_sta;fi\0" \
+ "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0" \
+ "addtty=setenv bootargs ${bootargs}" \
+ " console=ttymxc0,${baudrate}\0" \
+ "addmisc=setenv bootargs ${bootargs} ${misc}\0" \
+ "loadaddr=90800000\0" \
+ "kernel_addr_r=90800000\0" \
+ "hostname=" xstr(CONFIG_HOSTNAME) "\0" \
+ "bootfile=" xstr(CONFIG_HOSTNAME) "/uImage\0" \
+ "ramdisk_file=" xstr(CONFIG_HOSTNAME) "/uRamdisk\0" \
+ "flash_self=run ramargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr} ${ramdisk_addr}\0" \
+ "flash_nfs=run nfsargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr}\0" \
+ "net_nfs=tftp ${kernel_addr_r} ${bootfile}; " \
+ "run nfsargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr_r}\0" \
+ "net_self_load=tftp ${kernel_addr_r} ${bootfile};" \
+ "tftp ${ramdisk_addr_r} ${ramdisk_file};\0" \
+ "net_self=if run net_self_load;then " \
+ "run ramargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr_r} ${ramdisk_addr_r};" \
+ "else echo Images not loades;fi\0" \
+ "u-boot=" xstr(CONFIG_HOSTNAME) "/u-boot.bin\0" \
+ "load=tftp ${loadaddr} ${u-boot}\0" \
+ "uboot_addr=" xstr(CONFIG_SYS_MONITOR_BASE) "\0" \
+ "update=protect off ${uboot_addr} +40000;" \
+ "erase ${uboot_addr} +40000;" \
+ "cp.b ${loadaddr} ${uboot_addr} ${filesize}\0" \
+ "upd=if run load;then echo Updating u-boot;if run update;" \
+ "then echo U-Boot updated;" \
+ "else echo Error updating u-boot !;" \
+ "echo Board without bootloader !!;" \
+ "fi;" \
+ "else echo U-Boot not downloaded..exiting;fi\0" \
+ "bootcmd=run net_nfs\0"
+
+#endif /* __CONFIG_H */
--
1.7.1
^ permalink raw reply related
* Re: [PATCH V2 04/11] libxl, Introduce dm-version xenstore key.
From: Ian Campbell @ 2011-10-24 9:58 UTC (permalink / raw)
To: Anthony PERARD; +Cc: Xen Devel, Stefano Stabellini
In-Reply-To: <1319133573-25891-5-git-send-email-anthony.perard@citrix.com>
On Thu, 2011-10-20 at 18:59 +0100, Anthony PERARD wrote:
> The all key is /libxl/$domid/dm-version.
>
> The /libxl/$domid dir is created with the domain and should be only accessible
> by the toolstack domain.
>
> This come with libxl__device_model_version_running helper function.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> tools/libxl/libxl.c | 2 ++
> tools/libxl/libxl_create.c | 28 ++++++++++++++++++++++++++++
> tools/libxl/libxl_internal.c | 19 +++++++++++++++++++
> tools/libxl/libxl_internal.h | 5 +++++
> 4 files changed, 54 insertions(+), 0 deletions(-)
>
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index 064fbc4..50b97c2 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -777,6 +777,8 @@ int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid, int force)
> if (!xs_rm(ctx->xsh, XBT_NULL, dom_path))
> LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "xs_rm failed for %s", dom_path);
>
> + xs_rm(ctx->xsh, XBT_NULL, libxl__sprintf(&gc, "/libxl/%d", domid));
> +
> libxl__userdata_destroyall(&gc, domid);
>
> rc = xc_domain_destroy(ctx->xch, domid);
> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index 68d0fc3..bed991c 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -322,6 +322,9 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_create_info *info,
> xs_transaction_t t = 0;
> xen_domain_handle_t handle;
>
> + struct xs_permissions libxlperm[1];
> + char *libxl_path = NULL;
> +
The variable declaration block has little sections of perms and *_path
-- you might as well include those there. libxlperm might be better
called noperm (assuming that really is it's meaning, xs's permission
scheme confuses the hell out of me).
> assert(!libxl_domid_valid_guest(*domid));
>
> uuid_string = libxl__uuid2string(gc, info->uuid);
> @@ -368,6 +371,15 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_create_info *info,
> goto out;
> }
>
> + libxl_path = libxl__sprintf(gc, "/libxl/%i", *domid);
This is probably worthy of a little helper, similar to
libxl__xs_get_dom_path(). (/vm/blah ought to have one too but doesn't).
> + if (!libxl_path) {
> + LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot allocate create paths");
> + rc = ERROR_FAIL;
> + goto out;
> + }
> + libxlperm[0].id = 0;
> + libxlperm[0].perms = XS_PERM_NONE;
> +
> roperm[0].id = 0;
> roperm[0].perms = XS_PERM_NONE;
> roperm[1].id = *domid;
> @@ -386,6 +398,10 @@ retry_transaction:
> xs_mkdir(ctx->xsh, t, vm_path);
> xs_set_permissions(ctx->xsh, t, vm_path, roperm, ARRAY_SIZE(roperm));
>
> + xs_rm(ctx->xsh, t, libxl_path);
> + xs_mkdir(ctx->xsh, t, libxl_path);
> + xs_set_permissions(ctx->xsh, t, libxl_path, libxlperm, ARRAY_SIZE(libxlperm));
> +
> xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/vm", dom_path), vm_path, strlen(vm_path));
> rc = libxl__domain_rename(gc, *domid, 0, info->name, t);
> if (rc)
> @@ -429,6 +445,16 @@ retry_transaction:
> return rc;
> }
>
> +static int store_libxl_entry(libxl__gc *gc, uint32_t domid,
> + libxl_device_model_info *dm_info)
> +{
> + char *path = NULL;
> +
> + path = libxl__sprintf(gc, "/libxl/%i/dm-version", domid);
> + return libxl__xs_write(gc, XBT_NULL, path, libxl__strdup(gc,
> + libxl_device_model_version_to_string(dm_info->device_model_version)));
> +}
> +
> static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
> libxl_console_ready cb, void *priv,
> uint32_t *domid_out, int restore_fd)
> @@ -485,6 +511,8 @@ static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
> goto error_out;
> }
>
> + store_libxl_entry(gc, domid, dm_info);
> +
> for (i = 0; i < d_config->num_disks; i++) {
> ret = libxl_device_disk_add(ctx, domid, &d_config->disks[i]);
> if (ret) {
> diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c
> index 3993d8e..5d0a2d4 100644
> --- a/tools/libxl/libxl_internal.c
> +++ b/tools/libxl/libxl_internal.c
> @@ -319,6 +319,25 @@ int libxl__fd_set_cloexec(int fd)
> return fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
> }
>
> +libxl_device_model_version libxl__device_model_version_running(libxl__gc *gc,
> + uint32_t domid)
> +{
> + char *path = NULL;
> + char *dm_version = NULL;
> + libxl_device_model_version value;
> +
> + path = libxl__sprintf(gc, "/libxl/%d/dm-version", domid);
> + dm_version = libxl__xs_read(gc, XBT_NULL, path);
> + if (!dm_version) {
> + return LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
> + }
> +
> + if (libxl_device_model_version_from_string(dm_version, &value) < 0) {
I think this should be a fatal error, if you've managed to read
something from this key and it isn't one of the expect values then
something bad has happened.
> + return LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL;
> + }
> + return value;
> +}
> +
> /*
> * Local variables:
> * mode: C
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index 2e26ac6..5720b31 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -554,6 +554,11 @@ _hidden void libxl__json_object_free(libxl__gc *gc, libxl__json_object *obj);
>
> _hidden libxl__json_object *libxl__json_parse(libxl__gc *gc, const char *s);
>
> + /* Based on /local/domain/$domid/dm-version xenstore key
> + * default is qemu xen traditional */
> +_hidden libxl_device_model_version
> +libxl__device_model_version_running(libxl__gc *gc, uint32_t domid);
> +
> #endif
>
> /*
^ permalink raw reply
* Re: Bluetooth tree url change
From: Stephen Rothwell @ 2011-10-24 9:58 UTC (permalink / raw)
To: Gustavo Padovan; +Cc: linux-next
In-Reply-To: <20111020025727.GA3077@joana>
[-- Attachment #1: Type: text/plain, Size: 433 bytes --]
Hi Gustavo,
On Thu, 20 Oct 2011 00:57:27 -0200 Gustavo Padovan <padovan@profusion.mobi> wrote:
>
> The bluetooth-next tree now has a new url, I drop the "-2.6" suffix when I
> moved back to kernel.org
>
> git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-next.git
OK, I have switched to this now.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* [BUG] Invalid file descriptor.
From: Daniel Wagner @ 2011-10-24 9:49 UTC (permalink / raw)
To: linux-wireless
To whom it might concern,
if bluez is running without an agent and the remote device tries to
connect to bluez you are able to trigger the "Invalid file descriptor".
bluetoothd[30869]: src/event.c:btd_event_bonding_complete() status 0x00
bluetoothd[30869]: src/adapter.c:adapter_get_device() A0:4E:04:F6:F5:05
bluetoothd[30869]: src/device.c:device_bonding_complete() bonding (nil)
status 0x00
bluetoothd[30869]: audio/manager.c:hf_io_cb() Authorization denied!
(bluetoothd:30869): GLib-WARNING **: Invalid file descriptor.
bluetoothd[30869]: plugins/hciops.c:disconn_complete() handle 44 status 0x00
bluetoothd[30869]: src/event.c:btd_event_disconn_complete()
bluetoothd[30869]: src/adapter.c:adapter_remove_connection()
cheers,
daniel
ps: I was told to report all crashes and bugs I find. Be prepared. I am
a very capable finding bugs :)
^ permalink raw reply
* Quick Fair Queue Scheduler maturity and examples
From: Karel Rericha @ 2011-10-24 9:58 UTC (permalink / raw)
To: netfilter
Hi list,
has anyone some experience about QFQ and its maturity ? I was not able
to find anything more than patches and papers, real world examples and
info are nonexistent.
Thanks, Karel
^ permalink raw reply
* Re: [Qemu-devel] Question about intermediate code generation in qemu (tcg)
From: Carter Cheng @ 2011-10-24 9:59 UTC (permalink / raw)
To: Peter Maydell; +Cc: qemu-devel
In-Reply-To: <CAFEAcA-Hja+bSoDy6ypQx3vsGbZS9L1gdz6UrM8FR5XbFhOq_w@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1133 bytes --]
Thanks Peter.
On Mon, Oct 24, 2011 at 7:39 PM, Peter Maydell <peter.maydell@linaro.org>wrote:
> On 24 October 2011 07:46, Carter Cheng <cartercheng@gmail.com> wrote:
> > I was wondering if someone could help me understand some aspects of the
> > current qemu code generation routines. How are floating point and SSE ops
> > currently handled? I do not see specific tcg routines for these cases(the
> > README seems to indicate that FP and vector ops are not handled using the
> > current IL).
>
> FP instructions are generally turned into code which calls out to
> a "helper function" written in C which emulates the floating point
> arithmetic -- see target-i386/op_helper.c for the x87 ops and
> target-i386/ops_sse.h for the SSE ops. (Some simple arithmetic
> vector ops might be done by generating inline code; ARM does this
> but I haven't checked target-i386.) IEEE arithmetic emulation
> is done in fpu/ but you probably don't need to look at the actual
> implementation...
>
> In the TCG intermediate representation there's no special support
> for float/double types -- they're just passed around as i32/i64.
>
> -- PMM
>
[-- Attachment #2: Type: text/html, Size: 1589 bytes --]
^ permalink raw reply
* qemu-kvm guest which won't 'cont' (emulation failure?)
From: Chris Webb @ 2011-10-24 10:00 UTC (permalink / raw)
To: qemu-devel, kvm
I have a qemu-kvm guest (apparently a Ubuntu 11.04 x86-64 install) which has
stopped and refuses to continue:
(qemu) info status
VM status: paused
(qemu) cont
(qemu) info status
VM status: paused
The host is running linux 2.6.39.2 with qemu-kvm 0.14.1 on 24-core Opteron
6176 box, and has nine other 2GB production guests on it running absolutely
fine.
It's been a while since I've seen one of these. When I last saw a cluster of
them, they were emulation failures (big real mode instructions, maybe?). I
also remember a message about abnormal exit in the dmesg previously, but I
don't have that here. This time, there is no host kernel output at all, just
the paused guest.
I have qemu monitor access and can even strace the relevant qemu process if
necessary: is it possible to use this to diagnose what's caused this guest
to stop, e.g. the unsupported instruction if it's an emulation failure?
Cheers,
Chris.
^ permalink raw reply
* [Qemu-devel] qemu-kvm guest which won't 'cont' (emulation failure?)
From: Chris Webb @ 2011-10-24 10:00 UTC (permalink / raw)
To: qemu-devel, kvm
I have a qemu-kvm guest (apparently a Ubuntu 11.04 x86-64 install) which has
stopped and refuses to continue:
(qemu) info status
VM status: paused
(qemu) cont
(qemu) info status
VM status: paused
The host is running linux 2.6.39.2 with qemu-kvm 0.14.1 on 24-core Opteron
6176 box, and has nine other 2GB production guests on it running absolutely
fine.
It's been a while since I've seen one of these. When I last saw a cluster of
them, they were emulation failures (big real mode instructions, maybe?). I
also remember a message about abnormal exit in the dmesg previously, but I
don't have that here. This time, there is no host kernel output at all, just
the paused guest.
I have qemu monitor access and can even strace the relevant qemu process if
necessary: is it possible to use this to diagnose what's caused this guest
to stop, e.g. the unsupported instruction if it's an emulation failure?
Cheers,
Chris.
^ permalink raw reply
* [PATCH] arm/tegra: Add device-tree support for TrimSlice board
From: Stephen Warren @ 2011-10-24 10:01 UTC (permalink / raw)
To: Olof Johansson, Colin Cross
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-tegra-u79uwXL29TY76Z2rM5mHXA, Stephen Warren
* Add device-tree file for TrimSlice
* Add that to the list of .dts files to build
* Update board-dt.c to recognize TrimSlice board name
Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
arch/arm/boot/dts/tegra-trimslice.dts | 38 +++++++++++++++++++++++++++++++++
arch/arm/mach-tegra/Makefile.boot | 1 +
arch/arm/mach-tegra/board-dt.c | 3 ++
3 files changed, 42 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/boot/dts/tegra-trimslice.dts
diff --git a/arch/arm/boot/dts/tegra-trimslice.dts b/arch/arm/boot/dts/tegra-trimslice.dts
new file mode 100644
index 0000000..d3d0d20
--- /dev/null
+++ b/arch/arm/boot/dts/tegra-trimslice.dts
@@ -0,0 +1,38 @@
+/dts-v1/;
+
+/memreserve/ 0x1c000000 0x04000000;
+/include/ "tegra20.dtsi"
+
+/ {
+ model = "Compulab TrimSlice board";
+ compatible = "compulab,trimslice", "nvidia,tegra20";
+
+ chosen {
+ bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk0p1 rw rootwait";
+ };
+
+ memory@0 {
+ reg = < 0x00000000 0x40000000 >;
+ };
+
+ i2c@7000c000 {
+ clock-frequency = <400000>;
+ };
+
+ i2c@7000c400 {
+ clock-frequency = <400000>;
+ };
+
+ i2c@7000c500 {
+ clock-frequency = <400000>;
+ };
+
+ serial@70006000 {
+ clock-frequency = < 216000000 >;
+ };
+
+ sdhci@c8000600 {
+ cd-gpios = <&gpio 121 0>;
+ wp-gpios = <&gpio 122 0>;
+ };
+};
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot
index bd12c9f..9f177a4 100644
--- a/arch/arm/mach-tegra/Makefile.boot
+++ b/arch/arm/mach-tegra/Makefile.boot
@@ -4,4 +4,5 @@ initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000
dtb-$(CONFIG_MACH_HARMONY) += tegra-harmony.dtb
dtb-$(CONFIG_MACH_SEABOARD) += tegra-seaboard.dtb
+dtb-$(CONFIG_MACH_TRIMSLICE) += tegra-trimslice.dtb
dtb-$(CONFIG_MACH_VENTANA) += tegra-ventana.dtb
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c
index 0d22212..9ac4ed7 100644
--- a/arch/arm/mach-tegra/board-dt.c
+++ b/arch/arm/mach-tegra/board-dt.c
@@ -47,6 +47,7 @@
void harmony_pinmux_init(int is_dt);
void seaboard_pinmux_init(int is_dt);
+void trimslice_pinmux_init(int is_dt);
void ventana_pinmux_init(int is_dt);
struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
@@ -84,6 +85,7 @@ static struct {
char *machine;
void (*init)(int is_dt);
} pinmux_configs[] = {
+ { "compulab,trimslice", trimslice_pinmux_init },
{ "nvidia,harmony", harmony_pinmux_init },
{ "nvidia,seaboard", seaboard_pinmux_init },
{ "nvidia,ventana", ventana_pinmux_init },
@@ -120,6 +122,7 @@ static void __init tegra_dt_init(void)
}
static const char * tegra_dt_board_compat[] = {
+ "compulab,trimslice",
"nvidia,harmony",
"nvidia,seaboard",
"nvidia,ventana",
--
1.7.4.1
^ permalink raw reply related
* [PATCH] arm/tegra: Add device-tree support for TrimSlice board
From: Stephen Warren @ 2011-10-24 10:01 UTC (permalink / raw)
To: linux-arm-kernel
* Add device-tree file for TrimSlice
* Add that to the list of .dts files to build
* Update board-dt.c to recognize TrimSlice board name
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
arch/arm/boot/dts/tegra-trimslice.dts | 38 +++++++++++++++++++++++++++++++++
arch/arm/mach-tegra/Makefile.boot | 1 +
arch/arm/mach-tegra/board-dt.c | 3 ++
3 files changed, 42 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/boot/dts/tegra-trimslice.dts
diff --git a/arch/arm/boot/dts/tegra-trimslice.dts b/arch/arm/boot/dts/tegra-trimslice.dts
new file mode 100644
index 0000000..d3d0d20
--- /dev/null
+++ b/arch/arm/boot/dts/tegra-trimslice.dts
@@ -0,0 +1,38 @@
+/dts-v1/;
+
+/memreserve/ 0x1c000000 0x04000000;
+/include/ "tegra20.dtsi"
+
+/ {
+ model = "Compulab TrimSlice board";
+ compatible = "compulab,trimslice", "nvidia,tegra20";
+
+ chosen {
+ bootargs = "vmalloc=192M video=tegrafb console=ttyS0,115200n8 root=/dev/mmcblk0p1 rw rootwait";
+ };
+
+ memory at 0 {
+ reg = < 0x00000000 0x40000000 >;
+ };
+
+ i2c at 7000c000 {
+ clock-frequency = <400000>;
+ };
+
+ i2c at 7000c400 {
+ clock-frequency = <400000>;
+ };
+
+ i2c at 7000c500 {
+ clock-frequency = <400000>;
+ };
+
+ serial at 70006000 {
+ clock-frequency = < 216000000 >;
+ };
+
+ sdhci at c8000600 {
+ cd-gpios = <&gpio 121 0>;
+ wp-gpios = <&gpio 122 0>;
+ };
+};
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot
index bd12c9f..9f177a4 100644
--- a/arch/arm/mach-tegra/Makefile.boot
+++ b/arch/arm/mach-tegra/Makefile.boot
@@ -4,4 +4,5 @@ initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000
dtb-$(CONFIG_MACH_HARMONY) += tegra-harmony.dtb
dtb-$(CONFIG_MACH_SEABOARD) += tegra-seaboard.dtb
+dtb-$(CONFIG_MACH_TRIMSLICE) += tegra-trimslice.dtb
dtb-$(CONFIG_MACH_VENTANA) += tegra-ventana.dtb
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c
index 0d22212..9ac4ed7 100644
--- a/arch/arm/mach-tegra/board-dt.c
+++ b/arch/arm/mach-tegra/board-dt.c
@@ -47,6 +47,7 @@
void harmony_pinmux_init(int is_dt);
void seaboard_pinmux_init(int is_dt);
+void trimslice_pinmux_init(int is_dt);
void ventana_pinmux_init(int is_dt);
struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
@@ -84,6 +85,7 @@ static struct {
char *machine;
void (*init)(int is_dt);
} pinmux_configs[] = {
+ { "compulab,trimslice", trimslice_pinmux_init },
{ "nvidia,harmony", harmony_pinmux_init },
{ "nvidia,seaboard", seaboard_pinmux_init },
{ "nvidia,ventana", ventana_pinmux_init },
@@ -120,6 +122,7 @@ static void __init tegra_dt_init(void)
}
static const char * tegra_dt_board_compat[] = {
+ "compulab,trimslice",
"nvidia,harmony",
"nvidia,seaboard",
"nvidia,ventana",
--
1.7.4.1
^ permalink raw reply related
* Re: [PATCH V2 10/11] libxl_qmp, Introduce libxl__qmp_pci_add.
From: Ian Campbell @ 2011-10-24 10:01 UTC (permalink / raw)
To: Anthony PERARD; +Cc: Xen Devel, Stefano Stabellini
In-Reply-To: <1319133573-25891-11-git-send-email-anthony.perard@citrix.com>
On Thu, 2011-10-20 at 18:59 +0100, Anthony PERARD wrote:
> This function insert a PCI passthrough device in qemu.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> tools/libxl/libxl_internal.h | 4 ++
> tools/libxl/libxl_qmp.c | 107 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 105 insertions(+), 0 deletions(-)
>
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index 849b251..09f618f 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -119,6 +119,9 @@ typedef struct {
> } libxl__device;
>
> #define XC_PCI_BDF "0x%x, 0x%x, 0x%x, 0x%x"
> +#define PCI_DEVFN(slot, func) ((((slot) & 0x1f) << 3) | ((func) & 0x07))
> +#define PCI_SLOT(devfn) (((devfn) >> 3) & 0x1f)
> +#define PCI_FUNC(devfn) ((devfn) & 0x07)
> #define AUTO_PHP_SLOT 0x100
> #define SYSFS_PCI_DEV "/sys/bus/pci/devices"
> #define SYSFS_PCIBACK_DRIVER "/sys/bus/pci/drivers/pciback"
> @@ -444,6 +447,7 @@ _hidden libxl__qmp_handler *libxl__qmp_initialize(libxl_ctx *ctx,
> uint32_t domid);
> /* ask to QEMU the serial port information and store it in xenstore. */
> _hidden int libxl__qmp_query_serial(libxl__qmp_handler *qmp);
> +_hidden int libxl__qmp_pci_add(libxl__gc *gc, int d, libxl_device_pci *pcidev);
> /* close and free the QMP handler */
> _hidden void libxl__qmp_close(libxl__qmp_handler *qmp);
> /* remove the socket file, if the file has already been removed,
> diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
> index 547cd53..bce7e16 100644
> --- a/tools/libxl/libxl_qmp.c
> +++ b/tools/libxl/libxl_qmp.c
> @@ -41,6 +41,7 @@
> */
>
> #define QMP_RECEIVE_BUFFER_SIZE 4096
> +#define PCI_PT_QDEV_ID "pci-pt-%02x_%02x.%01x"
>
> typedef int (*qmp_callback_t)(libxl__qmp_handler *qmp,
> const libxl__json_object *tree,
> @@ -619,6 +620,112 @@ int libxl__qmp_query_serial(libxl__qmp_handler *qmp)
> return rc;
> }
>
> +static int pci_add_callback(libxl__qmp_handler *qmp,
> + const libxl__json_object *response, void *opaque)
> +{
> + libxl_device_pci *pcidev = opaque;
> + const libxl__json_object *bus = NULL;
> + libxl__gc gc = LIBXL_INIT_GC(qmp->ctx);
> + int i, j, rc = -1;
> + char *asked_id = libxl__sprintf(&gc, PCI_PT_QDEV_ID,
> + pcidev->bus, pcidev->dev, pcidev->func);
> +
> + for (i = 0; (bus = libxl__json_array_get(response, i)); i++) {
> + const libxl__json_object *devices = NULL;
> + const libxl__json_object *device = NULL;
> + const libxl__json_object *o = NULL;
> + const char *id = NULL;
> +
> + devices = libxl__json_map_get("devices", bus, JSON_ARRAY);
> +
> + for (j = 0; (device = libxl__json_array_get(devices, j)); j++) {
> + o = libxl__json_map_get("qdev_id", device, JSON_STRING);
> + id = libxl__json_object_get_string(o);
> +
> + if (id && strcmp(asked_id, id) == 0) {
> + int dev_slot, dev_func;
> +
> + o = libxl__json_map_get("slot", device, JSON_INTEGER);
> + if (!o)
> + goto out;
> + dev_slot = libxl__json_object_get_integer(o);
> + o = libxl__json_map_get("function", device, JSON_INTEGER);
> + if (!o)
> + goto out;
> + dev_func = libxl__json_object_get_integer(o);
> +
> + pcidev->vdevfn = PCI_DEVFN(dev_slot, dev_func);
> +
> + rc = 0;
> + goto out;
> + }
> + }
> + }
> +
> +
> +out:
> + libxl__free_all(&gc);
> + return rc;
> +}
> +
> +int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev)
> +{
> + libxl__qmp_handler *qmp = NULL;
> + flexarray_t *parameters = NULL;
> + libxl_key_value_list args = NULL;
> + char *hostaddr = NULL;
> + int rc = 0;
> + qmp_request_handle request = {
> + .callback = pci_add_callback,
> + .opaque = pcidev,
> + };
> +
> + qmp = libxl__qmp_initialize(libxl__gc_owner(gc), domid);
> + if (!qmp)
> + return -1;
> +
> + hostaddr = libxl__sprintf(gc, "%04x:%02x:%02x.%01x", pcidev->domain,
> + pcidev->bus, pcidev->dev, pcidev->func);
> + if (!hostaddr)
> + return -1;
> +
> + parameters = flexarray_make(6, 1);
> + flexarray_append_pair(parameters, "driver", "xen-pci-passthrough");
> + flexarray_append_pair(parameters, "id",
> + libxl__sprintf(gc, PCI_PT_QDEV_ID,
> + pcidev->bus, pcidev->dev,
> + pcidev->func));
> + flexarray_append_pair(parameters, "hostaddr", hostaddr);
> + if (pcidev->vdevfn) {
> + flexarray_append_pair(parameters, "addr",
> + libxl__sprintf(gc, "%x.%x",
> + PCI_SLOT(pcidev->vdevfn),
> + PCI_FUNC(pcidev->vdevfn)));
> + }
> + args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count);
> + if (!args)
> + return -1;
> +
> + rc = qmp_synchronous_send(qmp, "device_add", &args, NULL, qmp->timeout);
> + if (rc == 0) {
> + rc = qmp_synchronous_send(qmp, "query-pci", NULL,
> + &request, qmp->timeout);
> + if (rc == 0) {
> + rc = request.rc;
> + }
Is every caller going to want this behaviour? Perhaps it belongs in
qmp_sync..._send?
> + }
> +
> + flexarray_free(parameters);
> + libxl__qmp_close(qmp);
> + return rc;
> +}
> +
> int libxl__qmp_initializations(libxl_ctx *ctx, uint32_t domid)
> {
> libxl__qmp_handler *qmp = NULL;
^ permalink raw reply
* Re: getroot for ZFS without libzfs?
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2011-10-24 10:01 UTC (permalink / raw)
To: grub-devel
In-Reply-To: <CAOfDtXOFuXCsPQ3A4MrYz1+XjgQOECZqs009ackzi4V2r5=SYw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 948 bytes --]
On 15.10.2011 18:59, Robert Millan wrote:
> Hi,
>
> Please test / comment on proof-of-concept attached patch, it gets rid
> of libzfs dependency in GRUB.
>
It looks like this patch would map all zpools with the same name to the
same device. That's a problem since system may have several
identically-named pools or misdetect a pool somewhere where there is none.
> The approach is to implement a disk abstraction, like LVM does, but in
> this case a very simple one (passthrough). Then grub-probe et al can
> obtain their information from this abstraction layer like they
> currently do with LVM or mdRAID, but they don't need the device node
> list anymore (since it's filled with a full scan, as with LVM).
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 294 bytes --]
^ permalink raw reply
* Re: [PATCH RFC V2 4/5] kvm guest : Added configuration support to enable debug information for KVM Guests
From: Sasha Levin @ 2011-10-24 10:01 UTC (permalink / raw)
To: Raghavendra K T
Cc: Peter Zijlstra, Virtualization, H. Peter Anvin,
Jeremy Fitzhardinge, Dave Jiang, KVM, x86, Ingo Molnar,
Avi Kivity, Rik van Riel, Stefano Stabellini, Srivatsa Vaddagiri,
Xen, Sedat Dilek, Thomas Gleixner, Yinghai Lu,
Konrad Rzeszutek Wilk, Greg Kroah-Hartman, LKML, Suzuki Poulose
In-Reply-To: <20111023190700.16364.7548.sendpatchset@oc5400248562.ibm.com>
On Mon, 2011-10-24 at 00:37 +0530, Raghavendra K T wrote:
> Added configuration support to enable debug information
> for KVM Guests in debugfs
>
> Signed-off-by: Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
> Signed-off-by: Suzuki Poulose <suzuki@in.ibm.com>
> Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
> ---
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 1f03f82..ed34269 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -562,6 +562,15 @@ config KVM_GUEST
> This option enables various optimizations for running under the KVM
> hypervisor.
>
> +config KVM_DEBUG_FS
> + bool "Enable debug information for KVM Guests in debugfs"
> + depends on KVM_GUEST
Shouldn't it depend on DEBUG_FS as well?
> + default n
> + ---help---
> + This option enables collection of various statistics for KVM guest.
> + Statistics are displayed in debugfs filesystem. Enabling this option
> + may incur significant overhead.
> +
> source "arch/x86/lguest/Kconfig"
>
> config PARAVIRT
--
Sasha.
^ permalink raw reply
* Re: [PATCH RFC V2 3/5] kvm hypervisor : Add two hypercalls to support pv-ticketlock
From: Sasha Levin @ 2011-10-24 10:01 UTC (permalink / raw)
To: Raghavendra K T
Cc: KVM, Peter Zijlstra, Virtualization, H. Peter Anvin,
Jeremy Fitzhardinge, Dave Jiang, x86, Ingo Molnar, Avi Kivity,
Rik van Riel, Stefano Stabellini, Srivatsa Vaddagiri, Xen,
Sedat Dilek, Thomas Gleixner, Yinghai Lu, Konrad Rzeszutek Wilk,
Greg Kroah-Hartman, LKML, Suzuki Poulose
In-Reply-To: <20111023190558.16364.2136.sendpatchset@oc5400248562.ibm.com>
On Mon, 2011-10-24 at 00:35 +0530, Raghavendra K T wrote:
> Add two hypercalls to KVM hypervisor to support pv-ticketlocks.
>
> KVM_HC_WAIT_FOR_KICK blocks the calling vcpu until another vcpu kicks it or it
> is woken up because of an event like interrupt.
>
> KVM_HC_KICK_CPU allows the calling vcpu to kick another vcpu.
>
> The presence of these hypercalls is indicated to guest via
> KVM_FEATURE_WAIT_FOR_KICK/KVM_CAP_WAIT_FOR_KICK.
>
> Qemu needs a corresponding patch to pass up the presence of this feature to
> guest via cpuid. Patch to qemu will be sent separately.
>
> There is no Xen/KVM hypercall interface to await kick from.
>
> Signed-off-by: Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
> Signed-off-by: Suzuki Poulose <suzuki@in.ibm.com>
> Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
> ---
> diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h
> index 734c376..2874c19 100644
> --- a/arch/x86/include/asm/kvm_para.h
> +++ b/arch/x86/include/asm/kvm_para.h
> @@ -16,12 +16,14 @@
> #define KVM_FEATURE_CLOCKSOURCE 0
> #define KVM_FEATURE_NOP_IO_DELAY 1
> #define KVM_FEATURE_MMU_OP 2
> +
> /* This indicates that the new set of kvmclock msrs
> * are available. The use of 0x11 and 0x12 is deprecated
> */
> #define KVM_FEATURE_CLOCKSOURCE2 3
> #define KVM_FEATURE_ASYNC_PF 4
> #define KVM_FEATURE_STEAL_TIME 5
> +#define KVM_FEATURE_WAIT_FOR_KICK 6
>
> /* The last 8 bits are used to indicate how to interpret the flags field
> * in pvclock structure. If no bits are set, all flags are ignored.
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 84a28ea..b43fd18 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -2077,6 +2077,7 @@ int kvm_dev_ioctl_check_extension(long ext)
> case KVM_CAP_XSAVE:
> case KVM_CAP_ASYNC_PF:
> case KVM_CAP_GET_TSC_KHZ:
> + case KVM_CAP_WAIT_FOR_KICK:
> r = 1;
> break;
> case KVM_CAP_COALESCED_MMIO:
> @@ -2548,7 +2549,8 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
> (1 << KVM_FEATURE_NOP_IO_DELAY) |
> (1 << KVM_FEATURE_CLOCKSOURCE2) |
> (1 << KVM_FEATURE_ASYNC_PF) |
> - (1 << KVM_FEATURE_CLOCKSOURCE_STABLE_BIT);
> + (1 << KVM_FEATURE_CLOCKSOURCE_STABLE_BIT) |
> + (1 << KVM_FEATURE_WAIT_FOR_KICK);
>
> if (sched_info_on())
> entry->eax |= (1 << KVM_FEATURE_STEAL_TIME);
> @@ -5231,6 +5233,61 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
> return 1;
> }
>
> +/*
> + * kvm_pv_wait_for_kick_op : Block until kicked by either a KVM_HC_KICK_CPU
> + * hypercall or a event like interrupt.
> + *
> + * @vcpu : vcpu which is blocking.
> + */
> +static void kvm_pv_wait_for_kick_op(struct kvm_vcpu *vcpu)
> +{
> + DEFINE_WAIT(wait);
> +
> + /*
> + * Blocking on vcpu->wq allows us to wake up sooner if required to
> + * service pending events (like interrupts).
> + *
> + * Also set state to TASK_INTERRUPTIBLE before checking vcpu->kicked to
> + * avoid racing with kvm_pv_kick_cpu_op().
> + */
> + prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
> +
> + /*
> + * Somebody has already tried kicking us. Acknowledge that
> + * and terminate the wait.
> + */
> + if (vcpu->kicked) {
> + vcpu->kicked = 0;
> + goto end_wait;
> + }
> +
> + /* Let's wait for either KVM_HC_KICK_CPU or someother event
> + * to wake us up.
> + */
> +
> + srcu_read_unlock(&vcpu->kvm->srcu, vcpu->srcu_idx);
> + schedule();
> + vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
> +
> +end_wait:
> + finish_wait(&vcpu->wq, &wait);
> +}
> +
> +/*
> + * kvm_pv_kick_cpu_op: Kick a vcpu.
> + *
> + * @cpu - vcpu to be kicked.
> + */
> +static void kvm_pv_kick_cpu_op(struct kvm *kvm, int cpu)
> +{
> + struct kvm_vcpu *vcpu = kvm_get_vcpu(kvm, cpu);
> +
> + if (vcpu) {
> + vcpu->kicked = 1;
I'm not sure about it, but maybe we want a memory barrier over here?
> + wake_up_interruptible(&vcpu->wq);
> + }
> +}
--
Sasha.
^ permalink raw reply
* Re: [PATCH 1/1] [virt] virtio-blk: Use ida to allocate disk index
From: Michael S. Tsirkin @ 2011-10-24 10:02 UTC (permalink / raw)
To: Rusty Russell
Cc: Tejun Heo, virtualization, kvm, linux-kernel, Jens Axboe,
Greg Kroah-Hartman
In-Reply-To: <20111019101220.GE25794@redhat.com>
On Wed, Oct 19, 2011 at 12:12:20PM +0200, Michael S. Tsirkin wrote:
> On Thu, Jun 09, 2011 at 06:41:56AM -0400, Mark Wu wrote:
> > On 06/09/2011 05:14 AM, Tejun Heo wrote:
> > > Hello,
> > >
> > > On Thu, Jun 09, 2011 at 08:51:05AM +0930, Rusty Russell wrote:
> > >> On Wed, 08 Jun 2011 09:08:29 -0400, Mark Wu <dwu@redhat.com> wrote:
> > >>> Hi Rusty,
> > >>> Yes, I can't figure out an instance of disk probing in parallel either, but as
> > >>> per the following commit, I think we still need use lock for safety. What's your opinion?
> > >>>
> > >>> commit 4034cc68157bfa0b6622efe368488d3d3e20f4e6
> > >>> Author: Tejun Heo <tj@kernel.org>
> > >>> Date: Sat Feb 21 11:04:45 2009 +0900
> > >>>
> > >>> [SCSI] sd: revive sd_index_lock
> > >>>
> > >>> Commit f27bac2761cab5a2e212dea602d22457a9aa6943 which converted sd to
> > >>> use ida instead of idr incorrectly removed sd_index_lock around id
> > >>> allocation and free. idr/ida do have internal locks but they protect
> > >>> their free object lists not the allocation itself. The caller is
> > >>> responsible for that. This missing synchronization led to the same id
> > >>> being assigned to multiple devices leading to oops.
> > >>
> > >> I'm confused. Tejun, Greg, anyone can probes happen in parallel?
> > >>
> > >> If so, I'll have to review all my drivers.
> > >
> > > Unless async is explicitly used, probe happens sequentially. IOW, if
> > > there's no async_schedule() call, things won't happen in parallel.
> > > That said, I think it wouldn't be such a bad idea to protect ida with
> > > spinlock regardless unless the probe code explicitly requires
> > > serialization.
> > >
> > > Thanks.
> > >
> > Since virtio blk driver doesn't use async probe, it needn't use spinlock to protect ida.
> > So remove the lock from patch.
> >
> > >From fbb396df9dbf8023f1b268be01b43529a3993d57 Mon Sep 17 00:00:00 2001
> > From: Mark Wu <dwu@redhat.com>
> > Date: Thu, 9 Jun 2011 06:34:07 -0400
> > Subject: [PATCH 1/1] [virt] virtio-blk: Use ida to allocate disk index
> >
> > Current index allocation in virtio-blk is based on a monotonically
> > increasing variable "index". It could cause some confusion about disk
> > name in the case of hot-plugging disks. And it's impossible to find the
> > lowest available index by just maintaining a simple index. So it's
> > changed to use ida to allocate index via referring to the index
> > allocation in scsi disk.
> >
> > Signed-off-by: Mark Wu <dwu@redhat.com>
>
> Acked-by: Michael S. Tsirkin <mst@redhat.com>
>
> This got lost in the noise and missed 3.1 which is unfortunate.
> How about we apply this as is and look at cleanups as a next step?
Rusty, any opinion on merging this for 3.2?
I expect merge window will open right after the summit,
so need to decide soon ...
> > ---
> > drivers/block/virtio_blk.c | 28 +++++++++++++++++++++++-----
> > 1 files changed, 23 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
> > index 079c088..bf81ab6 100644
> > --- a/drivers/block/virtio_blk.c
> > +++ b/drivers/block/virtio_blk.c
> > @@ -8,10 +8,13 @@
> > #include <linux/scatterlist.h>
> > #include <linux/string_helpers.h>
> > #include <scsi/scsi_cmnd.h>
> > +#include <linux/idr.h>
> >
> > #define PART_BITS 4
> >
> > -static int major, index;
> > +static int major;
> > +static DEFINE_IDA(vd_index_ida);
> > +
> > struct workqueue_struct *virtblk_wq;
> >
> > struct virtio_blk
> > @@ -23,6 +26,7 @@ struct virtio_blk
> >
> > /* The disk structure for the kernel. */
> > struct gendisk *disk;
> > + u32 index;
> >
> > /* Request tracking. */
> > struct list_head reqs;
> > @@ -343,12 +347,23 @@ static int __devinit virtblk_probe(struct virtio_device *vdev)
> > struct request_queue *q;
> > int err;
> > u64 cap;
> > - u32 v, blk_size, sg_elems, opt_io_size;
> > + u32 v, blk_size, sg_elems, opt_io_size, index;
> > u16 min_io_size;
> > u8 physical_block_exp, alignment_offset;
> >
> > - if (index_to_minor(index) >= 1 << MINORBITS)
> > - return -ENOSPC;
> > + do {
> > + if (!ida_pre_get(&vd_index_ida, GFP_KERNEL))
> > + return -ENOMEM;
> > + err = ida_get_new(&vd_index_ida, &index);
> > + } while (err == -EAGAIN);
> > +
> > + if (err)
> > + return err;
> > +
> > + if (index_to_minor(index) >= 1 << MINORBITS) {
> > + err = -ENOSPC;
> > + goto out_free_index;
> > + }
> >
> > /* We need to know how many segments before we allocate. */
> > err = virtio_config_val(vdev, VIRTIO_BLK_F_SEG_MAX,
> > @@ -421,7 +436,7 @@ static int __devinit virtblk_probe(struct virtio_device *vdev)
> > vblk->disk->private_data = vblk;
> > vblk->disk->fops = &virtblk_fops;
> > vblk->disk->driverfs_dev = &vdev->dev;
> > - index++;
> > + vblk->index = index;
> >
> > /* configure queue flush support */
> > if (virtio_has_feature(vdev, VIRTIO_BLK_F_FLUSH))
> > @@ -516,6 +531,8 @@ out_free_vq:
> > vdev->config->del_vqs(vdev);
> > out_free_vblk:
> > kfree(vblk);
> > +out_free_index:
> > + ida_remove(&vd_index_ida, index);
> > out:
> > return err;
> > }
> > @@ -538,6 +555,7 @@ static void __devexit virtblk_remove(struct virtio_device *vdev)
> > mempool_destroy(vblk->pool);
> > vdev->config->del_vqs(vdev);
> > kfree(vblk);
> > + ida_remove(&vd_index_ida, vblk->index);
> > }
> >
> > static const struct virtio_device_id id_table[] = {
> > --
> > 1.7.1
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe kvm" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH 1/1] [virt] virtio-blk: Use ida to allocate disk index
From: Jens Axboe @ 2011-10-24 10:02 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Rusty Russell, Tejun Heo, virtualization, kvm, linux-kernel,
Greg Kroah-Hartman
In-Reply-To: <20111024100238.GA27444@redhat.com>
On 2011-10-24 12:02, Michael S. Tsirkin wrote:
> On Wed, Oct 19, 2011 at 12:12:20PM +0200, Michael S. Tsirkin wrote:
>> On Thu, Jun 09, 2011 at 06:41:56AM -0400, Mark Wu wrote:
>>> On 06/09/2011 05:14 AM, Tejun Heo wrote:
>>>> Hello,
>>>>
>>>> On Thu, Jun 09, 2011 at 08:51:05AM +0930, Rusty Russell wrote:
>>>>> On Wed, 08 Jun 2011 09:08:29 -0400, Mark Wu <dwu@redhat.com> wrote:
>>>>>> Hi Rusty,
>>>>>> Yes, I can't figure out an instance of disk probing in parallel either, but as
>>>>>> per the following commit, I think we still need use lock for safety. What's your opinion?
>>>>>>
>>>>>> commit 4034cc68157bfa0b6622efe368488d3d3e20f4e6
>>>>>> Author: Tejun Heo <tj@kernel.org>
>>>>>> Date: Sat Feb 21 11:04:45 2009 +0900
>>>>>>
>>>>>> [SCSI] sd: revive sd_index_lock
>>>>>>
>>>>>> Commit f27bac2761cab5a2e212dea602d22457a9aa6943 which converted sd to
>>>>>> use ida instead of idr incorrectly removed sd_index_lock around id
>>>>>> allocation and free. idr/ida do have internal locks but they protect
>>>>>> their free object lists not the allocation itself. The caller is
>>>>>> responsible for that. This missing synchronization led to the same id
>>>>>> being assigned to multiple devices leading to oops.
>>>>>
>>>>> I'm confused. Tejun, Greg, anyone can probes happen in parallel?
>>>>>
>>>>> If so, I'll have to review all my drivers.
>>>>
>>>> Unless async is explicitly used, probe happens sequentially. IOW, if
>>>> there's no async_schedule() call, things won't happen in parallel.
>>>> That said, I think it wouldn't be such a bad idea to protect ida with
>>>> spinlock regardless unless the probe code explicitly requires
>>>> serialization.
>>>>
>>>> Thanks.
>>>>
>>> Since virtio blk driver doesn't use async probe, it needn't use spinlock to protect ida.
>>> So remove the lock from patch.
>>>
>>> >From fbb396df9dbf8023f1b268be01b43529a3993d57 Mon Sep 17 00:00:00 2001
>>> From: Mark Wu <dwu@redhat.com>
>>> Date: Thu, 9 Jun 2011 06:34:07 -0400
>>> Subject: [PATCH 1/1] [virt] virtio-blk: Use ida to allocate disk index
>>>
>>> Current index allocation in virtio-blk is based on a monotonically
>>> increasing variable "index". It could cause some confusion about disk
>>> name in the case of hot-plugging disks. And it's impossible to find the
>>> lowest available index by just maintaining a simple index. So it's
>>> changed to use ida to allocate index via referring to the index
>>> allocation in scsi disk.
>>>
>>> Signed-off-by: Mark Wu <dwu@redhat.com>
>>
>> Acked-by: Michael S. Tsirkin <mst@redhat.com>
>>
>> This got lost in the noise and missed 3.1 which is unfortunate.
>> How about we apply this as is and look at cleanups as a next step?
>
> Rusty, any opinion on merging this for 3.2?
> I expect merge window will open right after the summit,
I can toss it into for-3.2/drivers, if there's consensus to do that now.
--
Jens Axboe
^ permalink raw reply
* Re: [Xenomai-help] installing xenomai on pandaboard
From: Robert @ 2011-10-24 10:04 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai
In-Reply-To: <4EA53424.6050803@domain.hid>
Dnia 24 października 2011 11:47 Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org> napisał(a):
> On 10/24/2011 11:16 AM, Robert wrote:
> >
> >
> > Dnia 24 października 2011 10:33 Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org> napisał(a):
> >
> >> On 10/24/2011 09:53 AM, Robert wrote:
> >>>
> >>>
> >>>
> >>> Dnia 20 września 2011 20:13 Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org> napisał(a):
> >>>
> >>>> On 09/20/2011 07:26 PM, Robert wrote:
> >>>>> Can someone help me installing xenomai on panda?
> >>>>>
> >>>>> What should I do, to install xenomai on ubuntu host?
> >>>>> Download kernel from kernel.org and patch it with xenomai and adeos-patch, or download kernel from git repository, or download ubuntu image-omap4 via apt-get source?
> >>>>>
> >>>>> The last one would download 2.6.38 kernel, but there is no adeos patch for this version yet.
> >>>>> It is also possible to download 2.6.37-9, but the same problem.
> >>>>
> >>>> The upcoming xenomai 2.6.0 supports panda. It should be released real
> >>>> soon now, in the mean-time, you can try xenomai 2.6.0-rc3.
> >>>>
> >>>>
> >>>
> >>> Hi again,
> >>> I have downloaded xenomai 2.6.0-rc5, and kernel 2.6.38.8 from kernel.org to ubuntu 11.04 on pandaboard.
> >>> Patched it with adeos included in xeno package.
> >>>
> >>> Compiled the kernel, modules and copied uImage to boot partition.
> >>> After reboot i got the following dmesg | grep -i xeno:
> >>> user@domain.hid
> >>> [ 1.195556] I-pipe: Domain Xenomai registered.
> >>> [ 1.195587] Xenomai: hal/arm started.
> >>> [ 1.195861] Xenomai: scheduling class idle registered.
> >>> [ 1.195861] Xenomai: scheduling class rt registered.
> >>> [ 1.199798] Xenomai: real-time nucleus v2.6.0-rc5 (head) loaded.
> >>> [ 1.199798] Xenomai: debug mode enabled.
> >>> [ 1.590240] Xenomai: native skin init failed, code -19.
> >>> [ 1.590270] Xenomai: starting POSIX services.
> >>> [ 1.980804] Xenomai: POSIX skin init failed, code -19.
> >>> [ 2.371429] Xenomai: RTDM skin init failed, code -19.
> >>>
> >>> user@domain.hid
> >>> user@domain.hid
> >>> user@domain.hid
> >>>
> >>> user@domain.hid
> >>> /usr/xenomai/bin/xeno-test-run-wrapper: 19: source: not found
> >>> ./xeno-test failed: dead child 1238 not found!
> >>
> >> That is surprising, what shell do you use? Have you copied all files
> >> installed by xenomai on the board root filesystem?
> >
> > I'm using bash.
> > What do you mean, by all files? I just ran make and make install.
>
> I take it you are not cross-compiling then? Anyway, to understand the
> bug in xeno-test, you should try adding "set -x" in
> xeno-test-run-wrapper, on the second line.
+ script=./xeno-test
+ shift
+ source ./xeno-test
/usr/xenomai/bin/xeno-test-run-wrapper: 1: source: not found
./xeno-test failed: dead child 10486 not found!
> >
> >
> >>>
> >>> user@domain.hid
> >>> Xenomai: incompatible feature set
> >>> (userland requires "kuser_tsc fastsynch nosmp", kernel provides "sa1100 v6 eabi
> >>> kuser_tsc fastsynch smp", missing="nosmp").
> >>>
> >>> Should I disable smp in kernel config?
> >>
> >> That, or more likely enable smp in user-space configuration.
> >>
> > Now I try to compile without smp.
>
> I would recommend not to do that. SMP is better tested than !SMP. And
> anyway, it is a bit stupid to only use one core on the dual-core OMAP4.
>
>
I thought it may cause a problems. So, what to do now?
config file looks good?
^ permalink raw reply
* Re: [PATCH v2 3/5] regulator: helper routine to extract regulator_init_data
From: Rajendra Nayak @ 2011-10-24 10:05 UTC (permalink / raw)
To: Mark Brown
Cc: Grant Likely, Shawn Guo, patches, tony, devicetree-discuss,
linux-kernel, linux-omap, lrg, linux-arm-kernel
In-Reply-To: <20111024091924.GA6148@opensource.wolfsonmicro.com>
On Monday 24 October 2011 02:49 PM, Mark Brown wrote:
> On Mon, Oct 24, 2011 at 02:23:50PM +0530, Rajendra Nayak wrote:
>
>> How about the driver passing the of_node to be associated with the
>> regulator, as part of regulator_desc, to the regulator core,
>> instead of this complete DT search and the restriction of having
>> to match DT node names with names in regulator_desc.
>
> regulator_desc should be const so that we handle multiple instances of
> the same device nicely. We could pass the information in as an argument
> I guess.
Ok, will do. The only downside being that all existing users would
need to be changed.
^ permalink raw reply
* [PATCH v2 3/5] regulator: helper routine to extract regulator_init_data
From: Rajendra Nayak @ 2011-10-24 10:05 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20111024091924.GA6148@opensource.wolfsonmicro.com>
On Monday 24 October 2011 02:49 PM, Mark Brown wrote:
> On Mon, Oct 24, 2011 at 02:23:50PM +0530, Rajendra Nayak wrote:
>
>> How about the driver passing the of_node to be associated with the
>> regulator, as part of regulator_desc, to the regulator core,
>> instead of this complete DT search and the restriction of having
>> to match DT node names with names in regulator_desc.
>
> regulator_desc should be const so that we handle multiple instances of
> the same device nicely. We could pass the information in as an argument
> I guess.
Ok, will do. The only downside being that all existing users would
need to be changed.
^ permalink raw reply
* [PATCH] dt: Add empty of_match_node() macro
From: Grant Likely @ 2011-10-24 10:06 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1319450012-13033-1-git-send-email-nicolas.ferre@atmel.com>
On Mon, Oct 24, 2011 at 11:53 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> Add an empty macro for of_match_node() that will save
> some '#ifdef CONFIG_OF' for non-dt builds.
>
> I have chosen to use a macro instead of a function to
> be able to avoid defining the first parameter.
> In fact, this "struct of_device_id *" first parameter
> is usualy not defined as well on non-dt builds.
>
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> ?include/linux/of.h | ? ?1 +
> ?1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/of.h b/include/linux/of.h
> index 736b747..92c40a1 100644
> --- a/include/linux/of.h
> +++ b/include/linux/of.h
> @@ -303,6 +303,7 @@ static inline struct device_node *of_parse_phandle(struct device_node *np,
> ?}
>
> ?#define of_match_ptr(_ptr) ? ? NULL
> +#define of_match_node(_matches, _node) NULL
Where possible, I prefer to code to be written in C, not PP. :-)
static inline please.
g.
^ permalink raw reply
* Re: [PATCH] dt: Add empty of_match_node() macro
From: Grant Likely @ 2011-10-24 10:06 UTC (permalink / raw)
To: Nicolas Ferre; +Cc: devicetree-discuss, linux-kernel, linux-arm-kernel
In-Reply-To: <1319450012-13033-1-git-send-email-nicolas.ferre@atmel.com>
On Mon, Oct 24, 2011 at 11:53 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> Add an empty macro for of_match_node() that will save
> some '#ifdef CONFIG_OF' for non-dt builds.
>
> I have chosen to use a macro instead of a function to
> be able to avoid defining the first parameter.
> In fact, this "struct of_device_id *" first parameter
> is usualy not defined as well on non-dt builds.
>
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> include/linux/of.h | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/of.h b/include/linux/of.h
> index 736b747..92c40a1 100644
> --- a/include/linux/of.h
> +++ b/include/linux/of.h
> @@ -303,6 +303,7 @@ static inline struct device_node *of_parse_phandle(struct device_node *np,
> }
>
> #define of_match_ptr(_ptr) NULL
> +#define of_match_node(_matches, _node) NULL
Where possible, I prefer to code to be written in C, not PP. :-)
static inline please.
g.
^ permalink raw reply
* [PATCH] mmc: mmci: Improve runtime PM support
From: Ulf Hansson @ 2011-10-24 10:06 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20111024094203.GI9893@n2100.arm.linux.org.uk>
Russell King - ARM Linux wrote:
> On Mon, Oct 24, 2011 at 11:36:01AM +0200, Ulf Hansson wrote:
>> Russell King - ARM Linux wrote:
>>> I repeat: if you cut power to the card, you have to re-initialize it.
>>> Re-initialization takes quite a bit of time to re-detect and setup
>>> the card. You'd also need to re-configure things like the transfer
>>> mode and so forth.
>> Right now host->vcc (vmmc) regulator is controlling the power to card.
>> Not the MCIPWR register!
>
> Maybe for you, but that's not the case on all platforms.
>
> You *really* need to get out of the idea that just because your
> implementation works one way that everything works that way. You're
> working on a cross-SoC cross-platform driver, and you need to take
> account of how other platforms work.
Sorry for being a pain in the ass. :-) I am thinking of the above, even
if it not seems like that.
>
> In that case, there *are* platforms which the MCIPWR register does
> indeed control power to the card - and setting this to zero _will_
> power down the card.
>
>> I would be very surprised if any hardware has this kind of setup, that
>> the PL180 itself controls a regulator.
>
> ARM dev boards all use the MCIPWR bits to control an external power
> switch - there's no adjustment of the voltage except via soldered
> links on the board.
That explains it!
My believe was that since the bits for controlling the voltage levels
etc was not used (which is replaced with directions bits for
ST-version), this functionality was not used either.
Could you maybe elaborate a bit of how the power is controlled in the
ARM dev boards? Would it be possible to control such a switch in "GPIO"
manner instead? For example via the vdd_handler or similar?
I will also think if and see if is feasible to re-design and see if this
hole feature can be controlled by the variant struct instead. My feeling
is although it can be kind of messy. But let's see...
BR
Ulf Hansson
^ permalink raw reply
* Re: [PATCH] dt: Add empty of_match_node() macro
From: Grant Likely @ 2011-10-24 10:06 UTC (permalink / raw)
To: Nicolas Ferre
Cc: robherring2, linux-kernel, linux-arm-kernel, devicetree-discuss
In-Reply-To: <1319450012-13033-1-git-send-email-nicolas.ferre@atmel.com>
On Mon, Oct 24, 2011 at 11:53 AM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> Add an empty macro for of_match_node() that will save
> some '#ifdef CONFIG_OF' for non-dt builds.
>
> I have chosen to use a macro instead of a function to
> be able to avoid defining the first parameter.
> In fact, this "struct of_device_id *" first parameter
> is usualy not defined as well on non-dt builds.
>
> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> include/linux/of.h | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/of.h b/include/linux/of.h
> index 736b747..92c40a1 100644
> --- a/include/linux/of.h
> +++ b/include/linux/of.h
> @@ -303,6 +303,7 @@ static inline struct device_node *of_parse_phandle(struct device_node *np,
> }
>
> #define of_match_ptr(_ptr) NULL
> +#define of_match_node(_matches, _node) NULL
Where possible, I prefer to code to be written in C, not PP. :-)
static inline please.
g.
^ permalink raw reply
* Re: [PATCH] mmc: mmci: Improve runtime PM support
From: Ulf Hansson @ 2011-10-24 10:06 UTC (permalink / raw)
To: Russell King - ARM Linux
Cc: Sebastian Rasmussen, linux-mmc@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, Lee Jones
In-Reply-To: <20111024094203.GI9893@n2100.arm.linux.org.uk>
Russell King - ARM Linux wrote:
> On Mon, Oct 24, 2011 at 11:36:01AM +0200, Ulf Hansson wrote:
>> Russell King - ARM Linux wrote:
>>> I repeat: if you cut power to the card, you have to re-initialize it.
>>> Re-initialization takes quite a bit of time to re-detect and setup
>>> the card. You'd also need to re-configure things like the transfer
>>> mode and so forth.
>> Right now host->vcc (vmmc) regulator is controlling the power to card.
>> Not the MCIPWR register!
>
> Maybe for you, but that's not the case on all platforms.
>
> You *really* need to get out of the idea that just because your
> implementation works one way that everything works that way. You're
> working on a cross-SoC cross-platform driver, and you need to take
> account of how other platforms work.
Sorry for being a pain in the ass. :-) I am thinking of the above, even
if it not seems like that.
>
> In that case, there *are* platforms which the MCIPWR register does
> indeed control power to the card - and setting this to zero _will_
> power down the card.
>
>> I would be very surprised if any hardware has this kind of setup, that
>> the PL180 itself controls a regulator.
>
> ARM dev boards all use the MCIPWR bits to control an external power
> switch - there's no adjustment of the voltage except via soldered
> links on the board.
That explains it!
My believe was that since the bits for controlling the voltage levels
etc was not used (which is replaced with directions bits for
ST-version), this functionality was not used either.
Could you maybe elaborate a bit of how the power is controlled in the
ARM dev boards? Would it be possible to control such a switch in "GPIO"
manner instead? For example via the vdd_handler or similar?
I will also think if and see if is feasible to re-design and see if this
hole feature can be controlled by the variant struct instead. My feeling
is although it can be kind of messy. But let's see...
BR
Ulf Hansson
^ permalink raw reply
* Re: cryptodev tree on github
From: Stephen Rothwell @ 2011-10-24 10:06 UTC (permalink / raw)
To: Herbert Xu; +Cc: davem, linux-crypto
In-Reply-To: <20111021082016.GA13483@gondor.apana.org.au>
[-- Attachment #1: Type: text/plain, Size: 632 bytes --]
Hi Herbert,
On Fri, 21 Oct 2011 10:20:16 +0200 Herbert Xu <herbert@gondor.apana.org.au> wrote:
>
> On Sun, Sep 25, 2011 at 02:50:23PM +1000, Herbert Xu wrote:
> > Stephen Rothwell <sfr@canb.auug.org.au> wrote:
> >
> > > Are you also going to move crypto-curent?
> >
> > I'll create that soon. I'll let you know when it happens.
>
> The crypto-current tree is now up at
>
> git://github.com/herbertx/crypto.git
I have switched to that now. Please let me know if/when you switch back
to kernel.org.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.