linux/arch/arm/mach-ep93xx/micro9.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 *  linux/arch/arm/mach-ep93xx/micro9.c
   4 *
   5 * Copyright (C) 2006 Contec Steuerungstechnik & Automation GmbH
   6 *                    Manfred Gruber <m.gruber@tirol.com>
   7 * Copyright (C) 2009 Contec Steuerungstechnik & Automation GmbH
   8 *                    Hubert Feurstein <hubert.feurstein@contec.at>
   9 */
  10
  11#include <linux/kernel.h>
  12#include <linux/init.h>
  13#include <linux/platform_device.h>
  14#include <linux/io.h>
  15
  16#include "hardware.h"
  17
  18#include <asm/mach-types.h>
  19#include <asm/mach/arch.h>
  20
  21#include "soc.h"
  22
  23/*************************************************************************
  24 * Micro9 NOR Flash
  25 *
  26 * Micro9-High has up to 64MB of 32-bit flash on CS1
  27 * Micro9-Mid has up to 64MB of either 32-bit or 16-bit flash on CS1
  28 * Micro9-Lite uses a separate MTD map driver for flash support
  29 * Micro9-Slim has up to 64MB of either 32-bit or 16-bit flash on CS1
  30 *************************************************************************/
  31static unsigned int __init micro9_detect_bootwidth(void)
  32{
  33        u32 v;
  34
  35        /* Detect the bus width of the external flash memory */
  36        v = __raw_readl(EP93XX_SYSCON_SYSCFG);
  37        if (v & EP93XX_SYSCON_SYSCFG_LCSN7)
  38                return 4; /* 32-bit */
  39        else
  40                return 2; /* 16-bit */
  41}
  42
  43static void __init micro9_register_flash(void)
  44{
  45        unsigned int width;
  46
  47        if (machine_is_micro9())
  48                width = 4;
  49        else if (machine_is_micro9m() || machine_is_micro9s())
  50                width = micro9_detect_bootwidth();
  51        else
  52                width = 0;
  53
  54        if (width)
  55                ep93xx_register_flash(width, EP93XX_CS1_PHYS_BASE, SZ_64M);
  56}
  57
  58
  59/*************************************************************************
  60 * Micro9 Ethernet
  61 *************************************************************************/
  62static struct ep93xx_eth_data __initdata micro9_eth_data = {
  63        .phy_id         = 0x1f,
  64};
  65
  66
  67static void __init micro9_init_machine(void)
  68{
  69        ep93xx_init_devices();
  70        ep93xx_register_eth(&micro9_eth_data, 1);
  71        micro9_register_flash();
  72}
  73
  74
  75#ifdef CONFIG_MACH_MICRO9H
  76MACHINE_START(MICRO9, "Contec Micro9-High")
  77        /* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
  78        .atag_offset    = 0x100,
  79        .map_io         = ep93xx_map_io,
  80        .init_irq       = ep93xx_init_irq,
  81        .init_time      = ep93xx_timer_init,
  82        .init_machine   = micro9_init_machine,
  83        .init_late      = ep93xx_init_late,
  84        .restart        = ep93xx_restart,
  85MACHINE_END
  86#endif
  87
  88#ifdef CONFIG_MACH_MICRO9M
  89MACHINE_START(MICRO9M, "Contec Micro9-Mid")
  90        /* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
  91        .atag_offset    = 0x100,
  92        .map_io         = ep93xx_map_io,
  93        .init_irq       = ep93xx_init_irq,
  94        .init_time      = ep93xx_timer_init,
  95        .init_machine   = micro9_init_machine,
  96        .init_late      = ep93xx_init_late,
  97        .restart        = ep93xx_restart,
  98MACHINE_END
  99#endif
 100
 101#ifdef CONFIG_MACH_MICRO9L
 102MACHINE_START(MICRO9L, "Contec Micro9-Lite")
 103        /* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
 104        .atag_offset    = 0x100,
 105        .map_io         = ep93xx_map_io,
 106        .init_irq       = ep93xx_init_irq,
 107        .init_time      = ep93xx_timer_init,
 108        .init_machine   = micro9_init_machine,
 109        .init_late      = ep93xx_init_late,
 110        .restart        = ep93xx_restart,
 111MACHINE_END
 112#endif
 113
 114#ifdef CONFIG_MACH_MICRO9S
 115MACHINE_START(MICRO9S, "Contec Micro9-Slim")
 116        /* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
 117        .atag_offset    = 0x100,
 118        .map_io         = ep93xx_map_io,
 119        .init_irq       = ep93xx_init_irq,
 120        .init_time      = ep93xx_timer_init,
 121        .init_machine   = micro9_init_machine,
 122        .init_late      = ep93xx_init_late,
 123        .restart        = ep93xx_restart,
 124MACHINE_END
 125#endif
 126