Re: [RFC] Revert "i.MX: Add provisions to boot from IRAM"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 14, 2018 at 9:09 PM Andrey Smirnov <andrew.smirnov@xxxxxxxxx> wrote:
>
> After being introduced 3 years ago this feature ended up being
> "obsoleted by events" and project it was supposed to be a part of
> winded down.
>
> Revert this feature due to:
>
>   a) Lack of users
>
>   b) Existence of better way to make barebox load via SRAM as
>   intermediary step that does not require two separate images to be
>   built (.imx-sram-img)
>
> This reverts commit 903c9477a08c5655161779ef4144886928ecc7d1.
> ---
>
> I am assuming that this feature was never used by anyone but me (hence
> a) above), so it should be safe to drop it. However if this feature is
> useful to anyone, I am more than happy to keep it.
>
> Thanks,
> Andrey Smirnov
>

Sascha, any comment on this?

>  Documentation/boards/imx.rst                  | 27 ---------
>  .../arm/boards/freescale-mx51-babbage/board.c | 60 -------------------
>  .../flash-header-common.imxcfg                | 58 ------------------
>  .../flash-header-imx51-babbage-xload.imxcfg   |  3 -
>  .../flash-header-imx51-babbage.imxcfg         | 60 ++++++++++++++++++-
>  .../boards/freescale-mx51-babbage/lowlevel.c  | 25 --------
>  arch/arm/configs/imx_v7-xload_defconfig       | 31 ----------
>  arch/arm/mach-imx/Kconfig                     | 15 -----
>  arch/arm/mach-imx/Makefile                    |  1 -
>  arch/arm/mach-imx/xload.c                     | 52 ----------------
>  images/Makefile.imx                           | 19 +-----
>  11 files changed, 59 insertions(+), 292 deletions(-)
>  delete mode 100644 arch/arm/boards/freescale-mx51-babbage/flash-header-common.imxcfg
>  delete mode 100644 arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage-xload.imxcfg
>  delete mode 100644 arch/arm/configs/imx_v7-xload_defconfig
>  delete mode 100644 arch/arm/mach-imx/xload.c
>
> diff --git a/Documentation/boards/imx.rst b/Documentation/boards/imx.rst
> index b3002badf..73b0993ce 100644
> --- a/Documentation/boards/imx.rst
> +++ b/Documentation/boards/imx.rst
> @@ -105,33 +105,6 @@ Some notes about the mentioned *conditions*.
>   - ``until_any_bit_clear`` waits until ``(*addr & mask) != mask`` is true
>   - ``until_any_bit_set`` waits until ``(*addr & mask) != 0`` is true.
>
> -Internal Boot Mode Through Internal RAM(IRAM)
> ----------------------------------------------
> -
> -The Internal Boot Mode Through Internal RAM is supported on:
> -
> -* i.MX51
> -
> -As can be easily deduced from its name, the Internal Boot Mode Through
> -Internal RAM is just a variant of Internal Boot Mode so all of the
> -stated above still applies in this case. What it differs in is the following:
> -
> -* Boot process is done in two stages(First stage binary can be
> -  produced with ``imx_v7-xload_defconfig``)
> -* DCD of the first stage image is set such that the image is fetched
> -  into an unoccupied area or IRAM
> -* First stage image once uncompressed and set up will look for a
> -  second stage bootloader on the same media it booted from and start
> -  it(see mach-imx/xload.c for more details)
> -* Second stage images are just regular i.MX boot images
> -
> -Since on a typical i.MX SoC unused IRAM area is not enough to run
> -anything but a PBL this mode, due to its very limited usability,
> -serves only one purpose -- allow for a portion of a bootloader to be
> -executed without depending on DRAM to be functional. This peculiarity
> -of the mode can be used to implement various memory testing
> -scenarious.
> -
>  USB Boot
>  ^^^^^^^^
>
> diff --git a/arch/arm/boards/freescale-mx51-babbage/board.c b/arch/arm/boards/freescale-mx51-babbage/board.c
> index 915748528..e90f38e80 100644
> --- a/arch/arm/boards/freescale-mx51-babbage/board.c
> +++ b/arch/arm/boards/freescale-mx51-babbage/board.c
> @@ -167,63 +167,3 @@ static int imx51_babbage_init(void)
>         return 0;
>  }
>  coredevice_initcall(imx51_babbage_init);
> -
> -#ifdef CONFIG_ARCH_IMX_XLOAD
> -
> -static int imx51_babbage_xload_init_pinmux(void)
> -{
> -       static const iomux_v3_cfg_t pinmux[] = {
> -               /* (e)CSPI */
> -               MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI,
> -               MX51_PAD_CSPI1_MISO__ECSPI1_MISO,
> -               MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK,
> -
> -               /* (e)CSPI chip select lines */
> -               MX51_PAD_CSPI1_SS1__GPIO4_25,
> -
> -
> -               /* eSDHC 1 */
> -               MX51_PAD_SD1_CMD__SD1_CMD,
> -               MX51_PAD_SD1_CLK__SD1_CLK,
> -               MX51_PAD_SD1_DATA0__SD1_DATA0,
> -               MX51_PAD_SD1_DATA1__SD1_DATA1,
> -               MX51_PAD_SD1_DATA2__SD1_DATA2,
> -               MX51_PAD_SD1_DATA3__SD1_DATA3,
> -       };
> -
> -       mxc_iomux_v3_setup_multiple_pads(ARRAY_AND_SIZE(pinmux));
> -
> -       return 0;
> -}
> -coredevice_initcall(imx51_babbage_xload_init_pinmux);
> -
> -static int imx51_babbage_xload_init_devices(void)
> -{
> -       static int spi0_chipselects[] = {
> -               IMX_GPIO_NR(4, 25),
> -       };
> -
> -       static struct spi_imx_master spi0_pdata = {
> -               .chipselect = spi0_chipselects,
> -               .num_chipselect = ARRAY_SIZE(spi0_chipselects),
> -       };
> -
> -       static const struct spi_board_info spi0_devices[] = {
> -               {
> -                       .name           = "mtd_dataflash",
> -                       .chip_select    = 0,
> -                       .max_speed_hz   = 25 * 1000 * 1000,
> -                       .bus_num        = 0,
> -               },
> -       };
> -
> -       imx51_add_mmc0(NULL);
> -
> -       spi_register_board_info(ARRAY_AND_SIZE(spi0_devices));
> -       imx51_add_spi0(&spi0_pdata);
> -
> -       return 0;
> -}
> -device_initcall(imx51_babbage_xload_init_devices);
> -
> -#endif
> diff --git a/arch/arm/boards/freescale-mx51-babbage/flash-header-common.imxcfg b/arch/arm/boards/freescale-mx51-babbage/flash-header-common.imxcfg
> deleted file mode 100644
> index 1332b7470..000000000
> --- a/arch/arm/boards/freescale-mx51-babbage/flash-header-common.imxcfg
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -soc imx51
> -dcdofs 0x400
> -wm 32 0x73fa88a0 0x00000200
> -wm 32 0x73fa850c 0x000020c5
> -wm 32 0x73fa8510 0x000020c5
> -wm 32 0x73fa883c 0x00000002
> -wm 32 0x73fa8848 0x00000002
> -wm 32 0x73fa84b8 0x000000e7
> -wm 32 0x73fa84bc 0x00000045
> -wm 32 0x73fa84c0 0x00000045
> -wm 32 0x73fa84c4 0x00000045
> -wm 32 0x73fa84c8 0x00000045
> -wm 32 0x73fa8820 0x00000000
> -wm 32 0x73fa84a4 0x00000003
> -wm 32 0x73fa84a8 0x00000003
> -wm 32 0x73fa84ac 0x000000e3
> -wm 32 0x73fa84b0 0x000000e3
> -wm 32 0x73fa84b4 0x000000e3
> -wm 32 0x73fa84cc 0x000000e3
> -wm 32 0x73fa84d0 0x000000e2
> -wm 32 0x73fa882c 0x00000004
> -wm 32 0x73fa88a4 0x00000004
> -wm 32 0x73fa88ac 0x00000004
> -wm 32 0x73fa88b8 0x00000004
> -wm 32 0x83fd9000 0x82a20000
> -wm 32 0x83fd9008 0x82a20000
> -wm 32 0x83fd9010 0x000ad0d0
> -wm 32 0x83fd9004 0x3f3584ab
> -wm 32 0x83fd900c 0x3f3584ab
> -wm 32 0x83fd9014 0x04008008
> -wm 32 0x83fd9014 0x0000801a
> -wm 32 0x83fd9014 0x0000801b
> -wm 32 0x83fd9014 0x00448019
> -wm 32 0x83fd9014 0x07328018
> -wm 32 0x83fd9014 0x04008008
> -wm 32 0x83fd9014 0x00008010
> -wm 32 0x83fd9014 0x00008010
> -wm 32 0x83fd9014 0x06328018
> -wm 32 0x83fd9014 0x03808019
> -wm 32 0x83fd9014 0x00408019
> -wm 32 0x83fd9014 0x00008000
> -wm 32 0x83fd9014 0x0400800c
> -wm 32 0x83fd9014 0x0000801e
> -wm 32 0x83fd9014 0x0000801f
> -wm 32 0x83fd9014 0x0000801d
> -wm 32 0x83fd9014 0x0732801c
> -wm 32 0x83fd9014 0x0400800c
> -wm 32 0x83fd9014 0x00008014
> -wm 32 0x83fd9014 0x00008014
> -wm 32 0x83fd9014 0x0632801c
> -wm 32 0x83fd9014 0x0380801d
> -wm 32 0x83fd9014 0x0040801d
> -wm 32 0x83fd9014 0x00008004
> -wm 32 0x83fd9000 0xb2a20000
> -wm 32 0x83fd9008 0xb2a20000
> -wm 32 0x83fd9010 0x000ad6d0
> -wm 32 0x83fd9034 0x90000000
> -wm 32 0x83fd9014 0x00000000
> diff --git a/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage-xload.imxcfg b/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage-xload.imxcfg
> deleted file mode 100644
> index b249a7d4b..000000000
> --- a/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage-xload.imxcfg
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -loadaddr CONFIG_ARCH_IMX_UNUSED_IRAM_BASE
> -
> -#include "flash-header-common.imxcfg"
> \ No newline at end of file
> diff --git a/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage.imxcfg b/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage.imxcfg
> index cb60e4752..bac6816fe 100644
> --- a/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage.imxcfg
> +++ b/arch/arm/boards/freescale-mx51-babbage/flash-header-imx51-babbage.imxcfg
> @@ -1,3 +1,59 @@
>  loadaddr 0x90000000
> -
> -#include "flash-header-common.imxcfg"
> \ No newline at end of file
> +soc imx51
> +dcdofs 0x400
> +wm 32 0x73fa88a0 0x00000200
> +wm 32 0x73fa850c 0x000020c5
> +wm 32 0x73fa8510 0x000020c5
> +wm 32 0x73fa883c 0x00000002
> +wm 32 0x73fa8848 0x00000002
> +wm 32 0x73fa84b8 0x000000e7
> +wm 32 0x73fa84bc 0x00000045
> +wm 32 0x73fa84c0 0x00000045
> +wm 32 0x73fa84c4 0x00000045
> +wm 32 0x73fa84c8 0x00000045
> +wm 32 0x73fa8820 0x00000000
> +wm 32 0x73fa84a4 0x00000003
> +wm 32 0x73fa84a8 0x00000003
> +wm 32 0x73fa84ac 0x000000e3
> +wm 32 0x73fa84b0 0x000000e3
> +wm 32 0x73fa84b4 0x000000e3
> +wm 32 0x73fa84cc 0x000000e3
> +wm 32 0x73fa84d0 0x000000e2
> +wm 32 0x73fa882c 0x00000004
> +wm 32 0x73fa88a4 0x00000004
> +wm 32 0x73fa88ac 0x00000004
> +wm 32 0x73fa88b8 0x00000004
> +wm 32 0x83fd9000 0x82a20000
> +wm 32 0x83fd9008 0x82a20000
> +wm 32 0x83fd9010 0x000ad0d0
> +wm 32 0x83fd9004 0x3f3584ab
> +wm 32 0x83fd900c 0x3f3584ab
> +wm 32 0x83fd9014 0x04008008
> +wm 32 0x83fd9014 0x0000801a
> +wm 32 0x83fd9014 0x0000801b
> +wm 32 0x83fd9014 0x00448019
> +wm 32 0x83fd9014 0x07328018
> +wm 32 0x83fd9014 0x04008008
> +wm 32 0x83fd9014 0x00008010
> +wm 32 0x83fd9014 0x00008010
> +wm 32 0x83fd9014 0x06328018
> +wm 32 0x83fd9014 0x03808019
> +wm 32 0x83fd9014 0x00408019
> +wm 32 0x83fd9014 0x00008000
> +wm 32 0x83fd9014 0x0400800c
> +wm 32 0x83fd9014 0x0000801e
> +wm 32 0x83fd9014 0x0000801f
> +wm 32 0x83fd9014 0x0000801d
> +wm 32 0x83fd9014 0x0732801c
> +wm 32 0x83fd9014 0x0400800c
> +wm 32 0x83fd9014 0x00008014
> +wm 32 0x83fd9014 0x00008014
> +wm 32 0x83fd9014 0x0632801c
> +wm 32 0x83fd9014 0x0380801d
> +wm 32 0x83fd9014 0x0040801d
> +wm 32 0x83fd9014 0x00008004
> +wm 32 0x83fd9000 0xb2a20000
> +wm 32 0x83fd9008 0xb2a20000
> +wm 32 0x83fd9010 0x000ad6d0
> +wm 32 0x83fd9034 0x90000000
> +wm 32 0x83fd9014 0x00000000
> diff --git a/arch/arm/boards/freescale-mx51-babbage/lowlevel.c b/arch/arm/boards/freescale-mx51-babbage/lowlevel.c
> index 1c20b6a7a..132f9b08e 100644
> --- a/arch/arm/boards/freescale-mx51-babbage/lowlevel.c
> +++ b/arch/arm/boards/freescale-mx51-babbage/lowlevel.c
> @@ -3,7 +3,6 @@
>  #include <common.h>
>  #include <mach/esdctl.h>
>  #include <mach/generic.h>
> -#include <asm/cache.h>
>  #include <asm/barebox-arm-head.h>
>  #include <asm/barebox-arm.h>
>
> @@ -54,27 +53,3 @@ ENTRY_FUNCTION(start_imx51_babbage, r0, r1, r2)
>
>         imx51_barebox_entry(fdt);
>  }
> -
> -static noinline void babbage_entry(void)
> -{
> -       arm_early_mmu_cache_invalidate();
> -
> -       relocate_to_current_adr();
> -       setup_c();
> -
> -       puts_ll("lowlevel init done\n");
> -
> -       imx51_barebox_entry(NULL);
> -}
> -
> -ENTRY_FUNCTION(start_imx51_babbage_xload, r0, r1, r2)
> -{
> -       imx5_cpu_lowlevel_init();
> -
> -       if (IS_ENABLED(CONFIG_DEBUG_LL))
> -               setup_uart();
> -
> -       arm_setup_stack(0x20000000 - 16);
> -
> -       babbage_entry();
> -}
> diff --git a/arch/arm/configs/imx_v7-xload_defconfig b/arch/arm/configs/imx_v7-xload_defconfig
> deleted file mode 100644
> index dcf100d44..000000000
> --- a/arch/arm/configs/imx_v7-xload_defconfig
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -CONFIG_ARCH_IMX=y
> -CONFIG_ARCH_IMX_XLOAD=y
> -CONFIG_IMX_MULTI_BOARDS=y
> -CONFIG_MACH_FREESCALE_MX51_PDK=y
> -CONFIG_THUMB2_BAREBOX=y
> -CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
> -CONFIG_MMU=y
> -CONFIG_TEXT_BASE=0x0
> -CONFIG_MALLOC_SIZE=0x0
> -CONFIG_MALLOC_DUMMY=y
> -CONFIG_RELOCATABLE=y
> -CONFIG_SHELL_NONE=y
> -# CONFIG_ERRNO_MESSAGES is not set
> -# CONFIG_TIMESTAMP is not set
> -CONFIG_DEBUG_LL=y
> -CONFIG_MTD=y
> -# CONFIG_MTD_WRITE is not set
> -CONFIG_MTD_DATAFLASH=y
> -CONFIG_MCI=y
> -CONFIG_MCI_STARTUP=y
> -# CONFIG_MCI_WRITE is not set
> -CONFIG_MCI_IMX_ESDHC=y
> -CONFIG_EEPROM_AT25=y
> -CONFIG_WATCHDOG=y
> -CONFIG_WATCHDOG_IMX=y
> -# CONFIG_FS_RAMFS is not set
> -# CONFIG_FS_DEVFS is not set
> -CONFIG_FS_FAT=y
> -CONFIG_BOOTSTRAP=y
> -CONFIG_BOOTSTRAP_DEVFS=y
> -CONFIG_BOOTSTRAP_DISK=y
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index dec5e387e..cacdc835a 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -53,21 +53,6 @@ config ARCH_IMX_IMXIMAGE_SSL_SUPPORT
>           This enables SSL support for the imx-image tool. This is required
>           for created images for HABv3. This adds openssl to the build dependencies
>
> -config ARCH_IMX_XLOAD
> -       bool
> -       depends on ARCH_IMX51
> -       prompt "Build preloader image"
> -
> -config ARCH_IMX_UNUSED_IRAM_BASE
> -       hex
> -       depends on ARCH_IMX_XLOAD
> -       default 0x1ffe2000 if ARCH_IMX51
> -
> -config ARCH_IMX_UNUSED_IRAM_SIZE
> -       hex
> -       depends on ARCH_IMX_XLOAD
> -       default 0x16000 if ARCH_IMX51
> -
>  config ARCH_IMX_EXTERNAL_BOOT_NAND
>         bool
>         depends on ARCH_IMX25 || ARCH_IMX27 || ARCH_IMX31 || ARCH_IMX35
> diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
> index 442039a27..541a8e1ea 100644
> --- a/arch/arm/mach-imx/Makefile
> +++ b/arch/arm/mach-imx/Makefile
> @@ -17,7 +17,6 @@ lwl-$(CONFIG_ARCH_IMX6) += imx6-mmdc.o
>  obj-$(CONFIG_ARCH_IMX7) += imx7.o
>  obj-$(CONFIG_ARCH_VF610) += vf610.o
>  obj-$(CONFIG_ARCH_IMX8MQ) += imx8mq.o
> -obj-$(CONFIG_ARCH_IMX_XLOAD) += xload.o
>  obj-$(CONFIG_IMX_IIM)  += iim.o
>  obj-$(CONFIG_NAND_IMX) += nand.o
>  lwl-$(CONFIG_ARCH_IMX_EXTERNAL_BOOT_NAND) += external-nand-boot.o
> diff --git a/arch/arm/mach-imx/xload.c b/arch/arm/mach-imx/xload.c
> deleted file mode 100644
> index 921e9ade2..000000000
> --- a/arch/arm/mach-imx/xload.c
> +++ /dev/null
> @@ -1,52 +0,0 @@
> -#include <bootsource.h>
> -#include <bootstrap.h>
> -#include <common.h>
> -#include <malloc.h>
> -#include <init.h>
> -#include <envfs.h>
> -#include <linux/sizes.h>
> -#include <fs.h>
> -#include <io.h>
> -
> -#include <linux/clkdev.h>
> -#include <linux/stat.h>
> -#include <linux/clk.h>
> -
> -#include <mach/devices-imx51.h>
> -
> -static __noreturn int imx_xload(void)
> -{
> -       enum bootsource bootsource = bootsource_get();
> -       void *buf;
> -
> -       switch (bootsource) {
> -       case BOOTSOURCE_MMC:
> -               pr_info("booting from MMC\n");
> -               buf = bootstrap_read_disk("disk0.0", "fat");
> -               break;
> -       case BOOTSOURCE_SPI_NOR:
> -               pr_info("booting from SPI\n");
> -               buf = bootstrap_read_devfs("dataflash0", false,
> -                                          SZ_256K, SZ_1M, SZ_1M);
> -               break;
> -       default:
> -               pr_err("unknown bootsource %d\n", bootsource);
> -               hang();
> -       }
> -
> -       if (!buf) {
> -               pr_err("failed to load barebox.bin\n");
> -               hang();
> -       }
> -
> -       bootstrap_boot(buf, 0);
> -
> -       hang();
> -}
> -
> -static int imx_devices_init(void)
> -{
> -       barebox_main = imx_xload;
> -       return 0;
> -}
> -coredevice_initcall(imx_devices_init);
> diff --git a/images/Makefile.imx b/images/Makefile.imx
> index 43505b1ff..588139e4f 100644
> --- a/images/Makefile.imx
> +++ b/images/Makefile.imx
> @@ -5,14 +5,8 @@
>  # %.imximg - convert into i.MX image
>  # ----------------------------------------------------------------
>
> -ifdef CONFIG_ARCH_IMX_XLOAD
>  $(obj)/%.imximg: $(obj)/% FORCE
> -       $(call cmd,check_file_size,$<,$(CONFIG_ARCH_IMX_UNUSED_IRAM_SIZE))
>         $(call if_changed,imx_image,$(CFG_$(@F)),)
> -else
> -$(obj)/%.imximg: $(obj)/% FORCE
> -       $(call if_changed,imx_image,$(CFG_$(@F)),)
> -endif
>
>  $(obj)/%.simximg: $(obj)/% FORCE
>         $(call if_changed,imx_image,$(CFG_$(patsubst %.simximg,%.imximg,$(@F))),-s)
> @@ -69,18 +63,7 @@ imx-barebox-$(CONFIG_MACH_KINDLE_MX50) += barebox-kindle-ey21.img
>  pblx-$(CONFIG_MACH_FREESCALE_MX51_PDK) += start_imx51_babbage
>  CFG_start_imx51_babbage.pblx.imximg = $(board)/freescale-mx51-babbage/flash-header-imx51-babbage.imxcfg
>  FILE_barebox-freescale-imx51-babbage.img = start_imx51_babbage.pblx.imximg
> -imx-barebox-$(CONFIG_MACH_FREESCALE_MX51_PDK) += barebox-freescale-imx51-babbage.img
> -
> -pblx-$(CONFIG_MACH_FREESCALE_MX51_PDK) += start_imx51_babbage_xload
> -CFG_start_imx51_babbage_xload.pblx.imximg = $(board)/freescale-mx51-babbage/flash-header-imx51-babbage-xload.imxcfg
> -FILE_barebox-freescale-imx51-babbage-xload.img = start_imx51_babbage_xload.pblx.imximg
> -imx-xload-$(CONFIG_MACH_FREESCALE_MX51_PDK) += barebox-freescale-imx51-babbage-xload.img
> -
> -ifdef CONFIG_ARCH_IMX_XLOAD
> -image-y += $(imx-xload-y)
> -else
> -image-y += $(imx-barebox-y)
> -endif
> +image-$(CONFIG_MACH_FREESCALE_MX51_PDK) += barebox-freescale-imx51-babbage.img
>
>  pblx-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += start_imx51_genesi_efikasb
>  CFG_start_imx51_genesi_efikasb.pblx.imximg = $(board)/efika-mx-smartbook/flash-header-imx51-genesi-efikasb.imxcfg
> --
> 2.17.0
>

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux