Merge branch 'next/driver' of git://git.linaro.org/people/arnd/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 2 Nov 2011 03:16:43 +0000 (20:16 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 2 Nov 2011 03:16:43 +0000 (20:16 -0700)
* 'next/driver' of git://git.linaro.org/people/arnd/arm-soc:
  hw_random: add driver for atmel true hardware random number generator
  ARM: at91: at91sam9g45: add trng clock and platform device
  MX53 Enable the AHCI SATA on MX53 SMD board
  MX53 Enable the AHCI SATA on MX53 LOCO board
  MX53 Enable the AHCI SATA on MX53 ARD board
  AHCI Add the AHCI SATA feature on the MX53 platforms
  Fix pata imx resource
  ARM: imx: Define functions for registering PATA
  ARM: imx: Add PATA clock support
  ARM: imx: Add PATA resources for other i.MX processors
  imx: efika: Enable pata.
  imx51: add pata clock
  imx51: add pata device

Fix up trivial conflict (new selects next to each other from separate
branches for EFIKA_COMMON) in arch/arm/mach-mx5/Kconfig

1  2 
arch/arm/mach-at91/at91sam9g45.c
arch/arm/mach-at91/at91sam9g45_devices.c
arch/arm/mach-mx5/Kconfig
arch/arm/mach-mx5/board-mx53_ard.c
arch/arm/mach-mx5/clock-mx51-mx53.c
arch/arm/mach-mx5/devices-imx51.h
arch/arm/mach-mx5/mx51_efika.c
arch/arm/plat-mxc/devices/Kconfig
arch/arm/plat-mxc/include/mach/devices-common.h

@@@ -12,7 -12,6 +12,7 @@@
  
  #include <linux/module.h>
  #include <linux/pm.h>
 +#include <linux/dma-mapping.h>
  
  #include <asm/irq.h>
  #include <asm/mach/arch.h>
@@@ -54,6 -53,11 +54,11 @@@ static struct clk pioDE_clk = 
        .pmc_mask       = 1 << AT91SAM9G45_ID_PIODE,
        .type           = CLK_TYPE_PERIPHERAL,
  };
+ static struct clk trng_clk = {
+       .name           = "trng_clk",
+       .pmc_mask       = 1 << AT91SAM9G45_ID_TRNG,
+       .type           = CLK_TYPE_PERIPHERAL,
+ };
  static struct clk usart0_clk = {
        .name           = "usart0_clk",
        .pmc_mask       = 1 << AT91SAM9G45_ID_US0,
@@@ -177,6 -181,7 +182,7 @@@ static struct clk *periph_clocks[] __in
        &pioB_clk,
        &pioC_clk,
        &pioDE_clk,
+       &trng_clk,
        &usart0_clk,
        &usart1_clk,
        &usart2_clk,
@@@ -216,6 -221,7 +222,7 @@@ static struct clk_lookup periph_clocks_
        CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tcb0_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
        CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
+       CLKDEV_CON_DEV_ID(NULL, "atmel-trng", &trng_clk),
  };
  
  static struct clk_lookup usart_clocks_lookups[] = {
@@@ -320,7 -326,6 +327,7 @@@ static void at91sam9g45_poweroff(void
  static void __init at91sam9g45_map_io(void)
  {
        at91_init_sram(0, AT91SAM9G45_SRAM_BASE, AT91SAM9G45_SRAM_SIZE);
 +      init_consistent_dma_size(SZ_4M);
  }
  
  static void __init at91sam9g45_initialize(void)
@@@ -13,7 -13,6 +13,7 @@@
  #include <asm/mach/map.h>
  
  #include <linux/dma-mapping.h>
 +#include <linux/gpio.h>
  #include <linux/platform_device.h>
  #include <linux/i2c-gpio.h>
  #include <linux/atmel-mci.h>
@@@ -22,6 -21,7 +22,6 @@@
  #include <video/atmel_lcdc.h>
  
  #include <mach/board.h>
 -#include <mach/gpio.h>
  #include <mach/at91sam9g45.h>
  #include <mach/at91sam9g45_matrix.h>
  #include <mach/at91sam9_smc.h>
@@@ -1094,6 -1094,34 +1094,34 @@@ static void __init at91_add_device_rtt(
  }
  
  
+ /* --------------------------------------------------------------------
+  *  TRNG
+  * -------------------------------------------------------------------- */
+ #if defined(CONFIG_HW_RANDOM_ATMEL) || defined(CONFIG_HW_RANDOM_ATMEL_MODULE)
+ static struct resource trng_resources[] = {
+       {
+               .start  = AT91SAM9G45_BASE_TRNG,
+               .end    = AT91SAM9G45_BASE_TRNG + SZ_16K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+ };
+ static struct platform_device at91sam9g45_trng_device = {
+       .name           = "atmel-trng",
+       .id             = -1,
+       .resource       = trng_resources,
+       .num_resources  = ARRAY_SIZE(trng_resources),
+ };
+ static void __init at91_add_device_trng(void)
+ {
+       platform_device_register(&at91sam9g45_trng_device);
+ }
+ #else
+ static void __init at91_add_device_trng(void) {}
+ #endif
  /* --------------------------------------------------------------------
   *  Watchdog
   * -------------------------------------------------------------------- */
@@@ -1583,6 -1611,7 +1611,7 @@@ static int __init at91_add_standard_dev
        at91_add_device_hdmac();
        at91_add_device_rtc();
        at91_add_device_rtt();
+       at91_add_device_trng();
        at91_add_device_watchdog();
        at91_add_device_tc();
        return 0;
@@@ -52,6 -52,7 +52,6 @@@ config MACH_MX50_RD
        select IMX_HAVE_PLATFORM_IMX_UART
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
        select IMX_HAVE_PLATFORM_SPI_IMX
 -      select IMX_HAVE_PLATFORM_FEC
        help
          Include support for MX50 reference design platform (RDP) board. This
          includes specific configurations for the board and its peripherals.
@@@ -64,11 -65,9 +64,11 @@@ comment "i.MX51 machines:
  config MACH_MX51_BABBAGE
        bool "Support MX51 BABBAGE platforms"
        select SOC_IMX51
 +      select IMX_HAVE_PLATFORM_FSL_USB2_UDC
        select IMX_HAVE_PLATFORM_IMX2_WDT
        select IMX_HAVE_PLATFORM_IMX_I2C
        select IMX_HAVE_PLATFORM_IMX_UART
 +      select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
        select IMX_HAVE_PLATFORM_SPI_IMX
        help
@@@ -92,10 -91,8 +92,10 @@@ config MACH_MX51_3D
  config MACH_EUKREA_CPUIMX51
        bool "Support Eukrea CPUIMX51 module"
        select SOC_IMX51
 +      select IMX_HAVE_PLATFORM_FSL_USB2_UDC
        select IMX_HAVE_PLATFORM_IMX_I2C
        select IMX_HAVE_PLATFORM_IMX_UART
 +      select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
        select IMX_HAVE_PLATFORM_SPI_IMX
        help
@@@ -122,12 -119,10 +122,12 @@@ endchoic
  config MACH_EUKREA_CPUIMX51SD
        bool "Support Eukrea CPUIMX51SD module"
        select SOC_IMX51
 +      select IMX_HAVE_PLATFORM_FSL_USB2_UDC
        select IMX_HAVE_PLATFORM_IMX_I2C
 -      select IMX_HAVE_PLATFORM_SPI_IMX
        select IMX_HAVE_PLATFORM_IMX_UART
 +      select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
 +      select IMX_HAVE_PLATFORM_SPI_IMX
        help
          Include support for Eukrea CPUIMX51SD platform. This includes
          specific configurations for the module and its peripherals.
@@@ -152,7 -147,7 +152,8 @@@ config MX51_EFIKA_COMMO
        bool
        select SOC_IMX51
        select IMX_HAVE_PLATFORM_IMX_UART
 +      select IMX_HAVE_PLATFORM_MXC_EHCI
+       select IMX_HAVE_PLATFORM_PATA_IMX
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
        select IMX_HAVE_PLATFORM_SPI_IMX
        select MXC_ULPI if USB_ULPI
@@@ -134,8 -134,8 +134,8 @@@ static struct resource ard_smsc911x_res
                .flags = IORESOURCE_MEM,
        },
        {
 -              .start =  gpio_to_irq(ARD_ETHERNET_INT_B),
 -              .end =  gpio_to_irq(ARD_ETHERNET_INT_B),
 +              .start =  IMX_GPIO_TO_IRQ(ARD_ETHERNET_INT_B),
 +              .end =  IMX_GPIO_TO_IRQ(ARD_ETHERNET_INT_B),
                .flags = IORESOURCE_IRQ,
        },
  };
@@@ -234,6 -234,7 +234,7 @@@ static void __init mx53_ard_board_init(
        imx53_add_imx_i2c(1, &mx53_ard_i2c2_data);
        imx53_add_imx_i2c(2, &mx53_ard_i2c3_data);
        imx_add_gpio_keys(&ard_button_data);
+       imx53_add_ahci_imx();
  }
  
  static void __init mx53_ard_timer_init(void)
@@@ -1401,6 -1401,22 +1401,22 @@@ static struct clk esdhc4_mx53_clk = 
        .secondary = &esdhc4_ipg_clk,
  };
  
+ static struct clk sata_clk = {
+       .parent = &ipg_clk,
+       .enable = _clk_max_enable,
+       .enable_reg = MXC_CCM_CCGR4,
+       .enable_shift = MXC_CCM_CCGRx_CG1_OFFSET,
+       .disable = _clk_max_disable,
+ };
+ static struct clk ahci_phy_clk = {
+       .parent = &usb_phy1_clk,
+ };
+ static struct clk ahci_dma_clk = {
+       .parent = &ahb_clk,
+ };
  DEFINE_CLOCK(mipi_esc_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG5_OFFSET, NULL, NULL, NULL, &pll2_sw_clk);
  DEFINE_CLOCK(mipi_hsc2_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG4_OFFSET, NULL, NULL, &mipi_esc_clk, &pll2_sw_clk);
  DEFINE_CLOCK(mipi_hsc1_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG3_OFFSET, NULL, NULL, &mipi_hsc2_clk, &pll2_sw_clk);
@@@ -1418,6 -1434,10 +1434,10 @@@ DEFINE_CLOCK(ipu_di0_clk, 0, MXC_CCM_CC
  DEFINE_CLOCK(ipu_di1_clk, 0, MXC_CCM_CCGR6, MXC_CCM_CCGRx_CG6_OFFSET,
                NULL, NULL, &pll3_sw_clk, NULL);
  
+ /* PATA */
+ DEFINE_CLOCK(pata_clk, 0, MXC_CCM_CCGR4, MXC_CCM_CCGRx_CG0_OFFSET,
+               NULL, NULL, &ipg_clk, &spba_clk);
  #define _REGISTER_CLOCK(d, n, c) \
         { \
                .dev_id = d, \
@@@ -1474,6 -1494,7 +1494,7 @@@ static struct clk_lookup mx51_lookups[
        _REGISTER_CLOCK("imx-ipuv3", "di0", ipu_di0_clk)
        _REGISTER_CLOCK("imx-ipuv3", "di1", ipu_di1_clk)
        _REGISTER_CLOCK(NULL, "gpc_dvfs", gpc_dvfs_clk)
+       _REGISTER_CLOCK("pata_imx", NULL, pata_clk)
  };
  
  static struct clk_lookup mx53_lookups[] = {
        _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
        _REGISTER_CLOCK("imx-ssi.2", NULL, ssi3_clk)
        _REGISTER_CLOCK("imx-keypad", NULL, dummy_clk)
+       _REGISTER_CLOCK("pata_imx", NULL, pata_clk)
+       _REGISTER_CLOCK("imx53-ahci.0", "ahci", sata_clk)
+       _REGISTER_CLOCK("imx53-ahci.0", "ahci_phy", ahci_phy_clk)
+       _REGISTER_CLOCK("imx53-ahci.0", "ahci_dma", ahci_dma_clk)
  };
  
  static void clk_tree_init(void)
@@@ -1568,7 -1593,7 +1593,7 @@@ int __init mx51_clocks_init(unsigned lo
  
        /* System timer */
        mxc_timer_init(&gpt_clk, MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR),
 -              MX51_MXC_INT_GPT);
 +              MX51_INT_GPT);
        return 0;
  }
  
@@@ -13,15 -13,9 +13,15 @@@ extern const struct imx_fec_data imx51_
  #define imx51_add_fec(pdata)  \
        imx_add_fec(&imx51_fec_data, pdata)
  
 +extern const struct imx_fsl_usb2_udc_data imx51_fsl_usb2_udc_data;
 +#define imx51_add_fsl_usb2_udc(pdata) \
 +      imx_add_fsl_usb2_udc(&imx51_fsl_usb2_udc_data, pdata)
 +
  extern const struct imx_imx_i2c_data imx51_imx_i2c_data[];
  #define imx51_add_imx_i2c(id, pdata)  \
        imx_add_imx_i2c(&imx51_imx_i2c_data[id], pdata)
 +#define imx51_add_hsi2c(pdata)        \
 +      imx51_add_imx_i2c(2, pdata)
  
  extern const struct imx_imx_ssi_data imx51_imx_ssi_data[];
  #define imx51_add_imx_ssi(id, pdata)  \
@@@ -31,13 -25,6 +31,13 @@@ extern const struct imx_imx_uart_1irq_d
  #define imx51_add_imx_uart(id, pdata) \
        imx_add_imx_uart_1irq(&imx51_imx_uart_data[id], pdata)
  
 +extern const struct imx_mxc_ehci_data imx51_mxc_ehci_otg_data;
 +#define imx51_add_mxc_ehci_otg(pdata) \
 +      imx_add_mxc_ehci(&imx51_mxc_ehci_otg_data, pdata)
 +extern const struct imx_mxc_ehci_data imx51_mxc_ehci_hs_data[];
 +#define imx51_add_mxc_ehci_hs(id, pdata)      \
 +      imx_add_mxc_ehci(&imx51_mxc_ehci_hs_data[id - 1], pdata)
 +
  extern const struct imx_mxc_nand_data imx51_mxc_nand_data;
  #define imx51_add_mxc_nand(pdata)     \
        imx_add_mxc_nand(&imx51_mxc_nand_data, pdata)
@@@ -65,3 -52,7 +65,7 @@@ extern const struct imx_mxc_pwm_data im
  extern const struct imx_imx_keypad_data imx51_imx_keypad_data;
  #define imx51_add_imx_keypad(pdata)   \
        imx_add_imx_keypad(&imx51_imx_keypad_data, pdata)
+ extern const struct imx_pata_imx_data imx51_pata_imx_data;
+ #define imx51_add_pata_imx() \
+       imx_add_pata_imx(&imx51_pata_imx_data)
  #include <linux/usb/ulpi.h>
  #include <mach/ulpi.h>
  
 -#include <asm/irq.h>
  #include <asm/setup.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
  
  #include "devices-imx51.h"
 -#include "devices.h"
  #include "efika.h"
  #include "cpu_op-mx51.h"
  
@@@ -131,7 -133,7 +131,7 @@@ static int initialize_otg_port(struct p
        u32 v;
        void __iomem *usb_base;
        void __iomem *usbother_base;
 -      usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K);
 +      usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K);
        if (!usb_base)
                return -ENOMEM;
        usbother_base = (void __iomem *)(usb_base + MX5_USBOTHER_REGS_OFFSET);
        return mx51_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY);
  }
  
 -static struct mxc_usbh_platform_data dr_utmi_config = {
 +static const struct mxc_usbh_platform_data dr_utmi_config __initconst = {
        .init   = initialize_otg_port,
        .portsc = MXC_EHCI_UTMI_16BIT,
  };
@@@ -168,7 -170,7 +168,7 @@@ static int initialize_usbh1_port(struc
        gpio_set_value(EFIKAMX_USBH1_STP, 1);
        msleep(1);
  
 -      usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K);
 +      usb_base = ioremap(MX51_USB_OTG_BASE_ADDR, SZ_4K);
        socregs_base = (void __iomem *)(usb_base + MX5_USBOTHER_REGS_OFFSET);
  
        /* The clock for the USBH1 ULPI port will come externally */
        return mx51_initialize_usb_hw(pdev->id, MXC_EHCI_ITC_NO_THRESHOLD);
  }
  
 -static struct mxc_usbh_platform_data usbh1_config = {
 +static struct mxc_usbh_platform_data usbh1_config __initdata = {
        .init   = initialize_usbh1_port,
        .portsc = MXC_EHCI_MODE_ULPI,
  };
@@@ -215,9 -217,9 +215,9 @@@ static void __init mx51_efika_usb(void
        usbh1_config.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS |
                        ULPI_OTG_DRVVBUS_EXT | ULPI_OTG_EXTVBUSIND);
  
 -      mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config);
 +      imx51_add_mxc_ehci_otg(&dr_utmi_config);
        if (usbh1_config.otg)
 -              mxc_register_device(&mxc_usbh1_device, &usbh1_config);
 +              imx51_add_mxc_ehci_hs(1, &usbh1_config);
  }
  
  static struct mtd_partition mx51_efika_spi_nor_partitions[] = {
@@@ -587,7 -589,7 +587,7 @@@ static struct spi_board_info mx51_efika
                .bus_num = 0,
                .chip_select = 0,
                .platform_data = &mx51_efika_mc13892_data,
 -              .irq = gpio_to_irq(EFIKAMX_PMIC),
 +              .irq = IMX_GPIO_TO_IRQ(EFIKAMX_PMIC),
        },
  };
  
@@@ -625,7 -627,10 +625,9 @@@ void __init efika_board_common_init(voi
                ARRAY_SIZE(mx51_efika_spi_board_info));
        imx51_add_ecspi(0, &mx51_efika_spi_pdata);
  
+       imx51_add_pata_imx();
  #if defined(CONFIG_CPU_FREQ_IMX)
        get_cpu_op = mx51_get_cpu_op;
  #endif
  }
 -
@@@ -1,6 -1,6 +1,6 @@@
  config IMX_HAVE_PLATFORM_FEC
        bool
 -      default y if ARCH_MX25 || SOC_IMX27 || SOC_IMX35 || SOC_IMX51 || SOC_IMX53
 +      default y if ARCH_MX25 || SOC_IMX27 || SOC_IMX35 || SOC_IMX50 || SOC_IMX51 || SOC_IMX53
  
  config IMX_HAVE_PLATFORM_FLEXCAN
        select HAVE_CAN_FLEXCAN if CAN
@@@ -31,6 -31,9 +31,9 @@@ config IMX_HAVE_PLATFORM_IMX_I2
  config IMX_HAVE_PLATFORM_IMX_KEYPAD
        bool
  
+ config IMX_HAVE_PLATFORM_PATA_IMX
+       bool
  config IMX_HAVE_PLATFORM_IMX_SSI
        bool
  
@@@ -76,3 -79,7 +79,7 @@@ config IMX_HAVE_PLATFORM_SDHCI_ESDHC_IM
  
  config IMX_HAVE_PLATFORM_SPI_IMX
        bool
+ config IMX_HAVE_PLATFORM_AHCI
+       bool
+       default y if ARCH_MX53
  extern struct device mxc_aips_bus;
  extern struct device mxc_ahb_bus;
  
 -struct platform_device *imx_add_platform_device_dmamask(
 +static inline struct platform_device *imx_add_platform_device_dmamask(
                const char *name, int id,
                const struct resource *res, unsigned int num_resources,
 -              const void *data, size_t size_data, u64 dmamask);
 +              const void *data, size_t size_data, u64 dmamask)
 +{
 +      struct platform_device_info pdevinfo = {
 +              .name = name,
 +              .id = id,
 +              .res = res,
 +              .num_res = num_resources,
 +              .data = data,
 +              .size_data = size_data,
 +              .dma_mask = dmamask,
 +      };
 +      return platform_device_register_full(&pdevinfo);
 +}
  
  static inline struct platform_device *imx_add_platform_device(
                const char *name, int id,
@@@ -263,6 -251,14 +263,14 @@@ struct platform_device *__init imx_add_
                const struct imx_mxc_nand_data *data,
                const struct mxc_nand_platform_data *pdata);
  
+ struct imx_pata_imx_data {
+       resource_size_t iobase;
+       resource_size_t iosize;
+       resource_size_t irq;
+ };
+ struct platform_device *__init imx_add_pata_imx(
+               const struct imx_pata_imx_data *data);
  struct imx_mxc_pwm_data {
        int id;
        resource_size_t iobase;
@@@ -313,3 -309,13 +321,13 @@@ struct platform_device *__init imx_add_
  struct platform_device *imx_add_imx_dma(void);
  struct platform_device *imx_add_imx_sdma(char *name,
        resource_size_t iobase, int irq, struct sdma_platform_data *pdata);
+ #include <linux/ahci_platform.h>
+ struct imx_ahci_imx_data {
+       const char *devid;
+       resource_size_t iobase;
+       resource_size_t irq;
+ };
+ struct platform_device *__init imx_add_ahci_imx(
+               const struct imx_ahci_imx_data *data,
+               const struct ahci_platform_data *pdata);