Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
bb3c9d4f
Commit
bb3c9d4f
authored
Apr 08, 2010
by
Russell King
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-rmk' of
git://git.pengutronix.de/git/imx/linux-2.6
Conflicts: arch/arm/mach-mx3/mach-pcm037.c
parents
d4d9959c
b3aa111f
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
382 additions
and
70 deletions
+382
-70
arch/arm/mach-mx3/Kconfig
arch/arm/mach-mx3/Kconfig
+10
-0
arch/arm/mach-mx3/clock-imx31.c
arch/arm/mach-mx3/clock-imx31.c
+2
-3
arch/arm/mach-mx3/devices.c
arch/arm/mach-mx3/devices.c
+18
-1
arch/arm/mach-mx3/devices.h
arch/arm/mach-mx3/devices.h
+2
-1
arch/arm/mach-mx3/mach-armadillo5x0.c
arch/arm/mach-mx3/mach-armadillo5x0.c
+166
-0
arch/arm/mach-mx3/mach-mx31_3ds.c
arch/arm/mach-mx3/mach-mx31_3ds.c
+97
-19
arch/arm/mach-mx3/mach-pcm037.c
arch/arm/mach-mx3/mach-pcm037.c
+0
-1
arch/arm/mach-mx3/mx31lite-db.c
arch/arm/mach-mx3/mx31lite-db.c
+1
-1
arch/arm/mach-mx5/clock-mx51.c
arch/arm/mach-mx5/clock-mx51.c
+1
-1
arch/arm/mach-mx5/cpu.c
arch/arm/mach-mx5/cpu.c
+53
-0
arch/arm/mach-mx5/mm.c
arch/arm/mach-mx5/mm.c
+13
-19
arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
arch/arm/plat-mxc/include/mach/board-mx31_3ds.h
+3
-3
arch/arm/plat-mxc/include/mach/mx51.h
arch/arm/plat-mxc/include/mach/mx51.h
+12
-21
arch/arm/plat-mxc/include/mach/uncompress.h
arch/arm/plat-mxc/include/mach/uncompress.h
+4
-0
No files found.
arch/arm/mach-mx3/Kconfig
View file @
bb3c9d4f
...
...
@@ -62,6 +62,15 @@ config MACH_MX31_3DS
Include support for MX31PDK (3DS) platform. This includes specific
configurations for the board and its peripherals.
config MACH_MX31_3DS_MXC_NAND_USE_BBT
bool "Make the MXC NAND driver use the in flash Bad Block Table"
depends on MACH_MX31_3DS
depends on MTD_NAND_MXC
help
Enable this if you want that the MXC NAND driver uses the in flash
Bad Block Table to know what blocks are bad instead of scanning the
entire flash looking for bad block markers.
config MACH_MX31MOBOARD
bool "Support mx31moboard platforms (EPFL Mobots group)"
select ARCH_MX31
...
...
@@ -95,6 +104,7 @@ config MACH_PCM043
config MACH_ARMADILLO5X0
bool "Support Atmark Armadillo-500 Development Base Board"
select ARCH_MX31
select MXC_ULPI if USB_ULPI
help
Include support for Atmark Armadillo-500 platform. This includes
specific configurations for the board and its peripherals.
...
...
arch/arm/mach-mx3/clock-imx31.c
View file @
bb3c9d4f
...
...
@@ -468,6 +468,7 @@ static struct clk ahb_clk = {
}
DEFINE_CLOCK
(
perclk_clk
,
0
,
NULL
,
0
,
NULL
,
NULL
,
&
ipg_clk
);
DEFINE_CLOCK
(
ckil_clk
,
0
,
NULL
,
0
,
clk_ckil_get_rate
,
NULL
,
NULL
);
DEFINE_CLOCK
(
sdhc1_clk
,
0
,
MXC_CCM_CGR0
,
0
,
NULL
,
NULL
,
&
perclk_clk
);
DEFINE_CLOCK
(
sdhc2_clk
,
1
,
MXC_CCM_CGR0
,
2
,
NULL
,
NULL
,
&
perclk_clk
);
...
...
@@ -490,7 +491,7 @@ DEFINE_CLOCK(mpeg4_clk, 0, MXC_CCM_CGR1, 0, NULL, NULL, &ahb_clk);
DEFINE_CLOCK
(
mstick1_clk
,
0
,
MXC_CCM_CGR1
,
2
,
mstick1_get_rate
,
NULL
,
&
usb_pll_clk
);
DEFINE_CLOCK
(
mstick2_clk
,
1
,
MXC_CCM_CGR1
,
4
,
mstick2_get_rate
,
NULL
,
&
usb_pll_clk
);
DEFINE_CLOCK1
(
csi_clk
,
0
,
MXC_CCM_CGR1
,
6
,
csi
,
NULL
,
&
serial_pll_clk
);
DEFINE_CLOCK
(
rtc_clk
,
0
,
MXC_CCM_CGR1
,
8
,
NULL
,
NULL
,
&
ipg
_clk
);
DEFINE_CLOCK
(
rtc_clk
,
0
,
MXC_CCM_CGR1
,
8
,
NULL
,
NULL
,
&
ckil
_clk
);
DEFINE_CLOCK
(
wdog_clk
,
0
,
MXC_CCM_CGR1
,
10
,
NULL
,
NULL
,
&
ipg_clk
);
DEFINE_CLOCK
(
pwm_clk
,
0
,
MXC_CCM_CGR1
,
12
,
NULL
,
NULL
,
&
perclk_clk
);
DEFINE_CLOCK
(
usb_clk2
,
0
,
MXC_CCM_CGR1
,
18
,
usb_get_rate
,
NULL
,
&
ahb_clk
);
...
...
@@ -514,7 +515,6 @@ DEFINE_CLOCK(usb_clk1, 0, NULL, 0, usb_get_rate, NULL, &usb_pll_clk)
DEFINE_CLOCK
(
nfc_clk
,
0
,
NULL
,
0
,
nfc_get_rate
,
NULL
,
&
ahb_clk
);
DEFINE_CLOCK
(
scc_clk
,
0
,
NULL
,
0
,
NULL
,
NULL
,
&
ipg_clk
);
DEFINE_CLOCK
(
ipg_clk
,
0
,
NULL
,
0
,
ipg_get_rate
,
NULL
,
&
ahb_clk
);
DEFINE_CLOCK
(
ckil_clk
,
0
,
NULL
,
0
,
clk_ckil_get_rate
,
NULL
,
NULL
);
#define _REGISTER_CLOCK(d, n, c) \
{ \
...
...
@@ -572,7 +572,6 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK
(
NULL
,
"iim"
,
iim_clk
)
_REGISTER_CLOCK
(
NULL
,
"mpeg4"
,
mpeg4_clk
)
_REGISTER_CLOCK
(
NULL
,
"mbx"
,
mbx_clk
)
_REGISTER_CLOCK
(
"mxc_rtc"
,
NULL
,
ckil_clk
)
};
int
__init
mx31_clocks_init
(
unsigned
long
fref
)
...
...
arch/arm/mach-mx3/devices.c
View file @
bb3c9d4f
...
...
@@ -575,11 +575,26 @@ struct platform_device imx_ssi_device1 = {
.
resource
=
imx_ssi_resources1
,
};
static
int
mx3_devices_init
(
void
)
static
struct
resource
imx_wdt_resources
[]
=
{
{
.
flags
=
IORESOURCE_MEM
,
},
};
struct
platform_device
imx_wdt_device0
=
{
.
name
=
"imx-wdt"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
imx_wdt_resources
),
.
resource
=
imx_wdt_resources
,
};
static
int
__init
mx3_devices_init
(
void
)
{
if
(
cpu_is_mx31
())
{
mxc_nand_resources
[
0
].
start
=
MX31_NFC_BASE_ADDR
;
mxc_nand_resources
[
0
].
end
=
MX31_NFC_BASE_ADDR
+
0xfff
;
imx_wdt_resources
[
0
].
start
=
MX31_WDOG_BASE_ADDR
;
imx_wdt_resources
[
0
].
end
=
MX31_WDOG_BASE_ADDR
+
0x3fff
;
mxc_register_device
(
&
mxc_rnga_device
,
NULL
);
}
if
(
cpu_is_mx35
())
{
...
...
@@ -597,6 +612,8 @@ static int mx3_devices_init(void)
imx_ssi_resources0
[
1
].
end
=
MX35_INT_SSI1
;
imx_ssi_resources1
[
1
].
start
=
MX35_INT_SSI2
;
imx_ssi_resources1
[
1
].
end
=
MX35_INT_SSI2
;
imx_wdt_resources
[
0
].
start
=
MX35_WDOG_BASE_ADDR
;
imx_wdt_resources
[
0
].
end
=
MX35_WDOG_BASE_ADDR
+
0x3fff
;
}
return
0
;
...
...
arch/arm/mach-mx3/devices.h
View file @
bb3c9d4f
...
...
@@ -25,4 +25,5 @@ extern struct platform_device mxc_spi_device1;
extern
struct
platform_device
mxc_spi_device2
;
extern
struct
platform_device
imx_ssi_device0
;
extern
struct
platform_device
imx_ssi_device1
;
extern
struct
platform_device
imx_ssi_device1
;
extern
struct
platform_device
imx_wdt_device0
;
arch/arm/mach-mx3/mach-armadillo5x0.c
View file @
bb3c9d4f
...
...
@@ -36,6 +36,9 @@
#include <linux/input.h>
#include <linux/gpio_keys.h>
#include <linux/i2c.h>
#include <linux/usb/otg.h>
#include <linux/usb/ulpi.h>
#include <linux/delay.h>
#include <mach/hardware.h>
#include <asm/mach-types.h>
...
...
@@ -52,6 +55,8 @@
#include <mach/ipu.h>
#include <mach/mx3fb.h>
#include <mach/mxc_nand.h>
#include <mach/mxc_ehci.h>
#include <mach/ulpi.h>
#include "devices.h"
#include "crm_regs.h"
...
...
@@ -103,8 +108,158 @@ static int armadillo5x0_pins[] = {
/* I2C2 */
MX31_PIN_CSPI2_MOSI__SCL
,
MX31_PIN_CSPI2_MISO__SDA
,
/* OTG */
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0
,
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1
,
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2
,
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3
,
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4
,
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5
,
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6
,
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7
,
MX31_PIN_USBOTG_CLK__USBOTG_CLK
,
MX31_PIN_USBOTG_DIR__USBOTG_DIR
,
MX31_PIN_USBOTG_NXT__USBOTG_NXT
,
MX31_PIN_USBOTG_STP__USBOTG_STP
,
/* USB host 2 */
IOMUX_MODE
(
MX31_PIN_USBH2_CLK
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_DIR
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_NXT
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_STP
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_DATA0
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_DATA1
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_STXD3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SRXD3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SCK3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SFS3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_STXD6
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SRXD6
,
IOMUX_CONFIG_FUNC
),
};
/* USB */
#if defined(CONFIG_USB_ULPI)
#define OTG_RESET IOMUX_TO_GPIO(MX31_PIN_STXD4)
#define USBH2_RESET IOMUX_TO_GPIO(MX31_PIN_SCK6)
#define USBH2_CS IOMUX_TO_GPIO(MX31_PIN_GPIO1_3)
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
static
int
usbotg_init
(
struct
platform_device
*
pdev
)
{
int
err
;
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA0
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA1
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA2
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA3
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA4
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA5
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA6
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA7
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_CLK
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DIR
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_NXT
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_STP
,
USB_PAD_CFG
);
/* Chip already enabled by hardware */
/* OTG phy reset*/
err
=
gpio_request
(
OTG_RESET
,
"USB-OTG-RESET"
);
if
(
err
)
{
pr_err
(
"Failed to request the usb otg reset gpio
\n
"
);
return
err
;
}
err
=
gpio_direction_output
(
OTG_RESET
,
1
/*HIGH*/
);
if
(
err
)
{
pr_err
(
"Failed to reset the usb otg phy
\n
"
);
goto
otg_free_reset
;
}
gpio_set_value
(
OTG_RESET
,
0
/*LOW*/
);
mdelay
(
5
);
gpio_set_value
(
OTG_RESET
,
1
/*HIGH*/
);
return
0
;
otg_free_reset:
gpio_free
(
OTG_RESET
);
return
err
;
}
static
int
usbh2_init
(
struct
platform_device
*
pdev
)
{
int
err
;
mxc_iomux_set_pad
(
MX31_PIN_USBH2_CLK
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_DIR
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_NXT
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_STP
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_DATA0
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_DATA1
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_SRXD6
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_STXD6
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_SFS3
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_SCK3
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_SRXD3
,
USB_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_STXD3
,
USB_PAD_CFG
);
mxc_iomux_set_gpr
(
MUX_PGP_UH2
,
true
);
/* Enable the chip */
err
=
gpio_request
(
USBH2_CS
,
"USB-H2-CS"
);
if
(
err
)
{
pr_err
(
"Failed to request the usb host 2 CS gpio
\n
"
);
return
err
;
}
err
=
gpio_direction_output
(
USBH2_CS
,
0
/*Enabled*/
);
if
(
err
)
{
pr_err
(
"Failed to drive the usb host 2 CS gpio
\n
"
);
goto
h2_free_cs
;
}
/* H2 phy reset*/
err
=
gpio_request
(
USBH2_RESET
,
"USB-H2-RESET"
);
if
(
err
)
{
pr_err
(
"Failed to request the usb host 2 reset gpio
\n
"
);
goto
h2_free_cs
;
}
err
=
gpio_direction_output
(
USBH2_RESET
,
1
/*HIGH*/
);
if
(
err
)
{
pr_err
(
"Failed to reset the usb host 2 phy
\n
"
);
goto
h2_free_reset
;
}
gpio_set_value
(
USBH2_RESET
,
0
/*LOW*/
);
mdelay
(
5
);
gpio_set_value
(
USBH2_RESET
,
1
/*HIGH*/
);
return
0
;
h2_free_reset:
gpio_free
(
USBH2_RESET
);
h2_free_cs:
gpio_free
(
USBH2_CS
);
return
err
;
}
static
struct
mxc_usbh_platform_data
usbotg_pdata
=
{
.
init
=
usbotg_init
,
.
portsc
=
MXC_EHCI_MODE_ULPI
|
MXC_EHCI_UTMI_8BIT
,
.
flags
=
MXC_EHCI_POWER_PINS_ENABLED
|
MXC_EHCI_INTERFACE_DIFF_UNI
,
};
static
struct
mxc_usbh_platform_data
usbh2_pdata
=
{
.
init
=
usbh2_init
,
.
portsc
=
MXC_EHCI_MODE_ULPI
|
MXC_EHCI_UTMI_8BIT
,
.
flags
=
MXC_EHCI_POWER_PINS_ENABLED
|
MXC_EHCI_INTERFACE_DIFF_UNI
,
};
#endif
/* CONFIG_USB_ULPI */
/* RTC over I2C*/
#define ARMADILLO5X0_RTC_GPIO IOMUX_TO_GPIO(MX31_PIN_SRXD4)
...
...
@@ -393,6 +548,17 @@ static void __init armadillo5x0_init(void)
if
(
armadillo5x0_i2c_rtc
.
irq
==
0
)
pr_warning
(
"armadillo5x0_init: failed to get RTC IRQ
\n
"
);
i2c_register_board_info
(
1
,
&
armadillo5x0_i2c_rtc
,
1
);
/* USB */
#if defined(CONFIG_USB_ULPI)
usbotg_pdata
.
otg
=
otg_ulpi_create
(
&
mxc_ulpi_access_ops
,
USB_OTG_DRV_VBUS
|
USB_OTG_DRV_VBUS_EXT
);
usbh2_pdata
.
otg
=
otg_ulpi_create
(
&
mxc_ulpi_access_ops
,
USB_OTG_DRV_VBUS
|
USB_OTG_DRV_VBUS_EXT
);
mxc_register_device
(
&
mxc_otg_host
,
&
usbotg_pdata
);
mxc_register_device
(
&
mxc_usbh2
,
&
usbh2_pdata
);
#endif
}
static
void
__init
armadillo5x0_timer_init
(
void
)
...
...
arch/arm/mach-mx3/mach-mx31_3ds.c
View file @
bb3c9d4f
...
...
@@ -23,6 +23,9 @@
#include <linux/gpio.h>
#include <linux/smsc911x.h>
#include <linux/platform_device.h>
#include <linux/mfd/mc13783.h>
#include <linux/spi/spi.h>
#include <linux/regulator/machine.h>
#include <mach/hardware.h>
#include <asm/mach-types.h>
...
...
@@ -31,26 +34,96 @@
#include <asm/memory.h>
#include <asm/mach/map.h>
#include <mach/common.h>
#include <mach/board-mx31
pdk
.h>
#include <mach/board-mx31
_3ds
.h>
#include <mach/imx-uart.h>
#include <mach/iomux-mx3.h>
#include <mach/mxc_nand.h>
#include <mach/spi.h>
#include "devices.h"
/*!
* @file mx31
pdk
.c
* @file mx31
_3ds
.c
*
* @brief This file contains the board-specific initialization routines.
*
* @ingroup System
*/
static
int
mx31
pdk
_pins
[]
=
{
static
int
mx31
_3ds
_pins
[]
=
{
/* UART1 */
MX31_PIN_CTS1__CTS1
,
MX31_PIN_RTS1__RTS1
,
MX31_PIN_TXD1__TXD1
,
MX31_PIN_RXD1__RXD1
,
IOMUX_MODE
(
MX31_PIN_GPIO1_1
,
IOMUX_CONFIG_GPIO
),
/* SPI 1 */
MX31_PIN_CSPI2_SCLK__SCLK
,
MX31_PIN_CSPI2_MOSI__MOSI
,
MX31_PIN_CSPI2_MISO__MISO
,
MX31_PIN_CSPI2_SPI_RDY__SPI_RDY
,
MX31_PIN_CSPI2_SS0__SS0
,
MX31_PIN_CSPI2_SS2__SS2
,
/*CS for MC13783 */
/* MC13783 IRQ */
IOMUX_MODE
(
MX31_PIN_GPIO1_3
,
IOMUX_CONFIG_GPIO
),
};
/* Regulators */
static
struct
regulator_init_data
pwgtx_init
=
{
.
constraints
=
{
.
boot_on
=
1
,
.
always_on
=
1
,
},
};
static
struct
mc13783_regulator_init_data
mx31_3ds_regulators
[]
=
{
{
.
id
=
MC13783_REGU_PWGT1SPI
,
/* Power Gate for ARM core. */
.
init_data
=
&
pwgtx_init
,
},
{
.
id
=
MC13783_REGU_PWGT2SPI
,
/* Power Gate for L2 Cache. */
.
init_data
=
&
pwgtx_init
,
},
};
/* MC13783 */
static
struct
mc13783_platform_data
mc13783_pdata
__initdata
=
{
.
regulators
=
mx31_3ds_regulators
,
.
num_regulators
=
ARRAY_SIZE
(
mx31_3ds_regulators
),
.
flags
=
MC13783_USE_REGULATOR
,
};
/* SPI */
static
int
spi1_internal_chipselect
[]
=
{
MXC_SPI_CS
(
0
),
MXC_SPI_CS
(
2
),
};
static
struct
spi_imx_master
spi1_pdata
=
{
.
chipselect
=
spi1_internal_chipselect
,
.
num_chipselect
=
ARRAY_SIZE
(
spi1_internal_chipselect
),
};
static
struct
spi_board_info
mx31_3ds_spi_devs
[]
__initdata
=
{
{
.
modalias
=
"mc13783"
,
.
max_speed_hz
=
1000000
,
.
bus_num
=
1
,
.
chip_select
=
1
,
/* SS2 */
.
platform_data
=
&
mc13783_pdata
,
.
irq
=
IOMUX_TO_IRQ
(
MX31_PIN_GPIO1_3
),
.
mode
=
SPI_CS_HIGH
,
},
};
/*
* NAND Flash
*/
static
struct
mxc_nand_platform_data
imx31_3ds_nand_flash_pdata
=
{
.
width
=
1
,
.
hw_ecc
=
1
,
#ifdef MACH_MX31_3DS_MXC_NAND_USE_BBT
.
flash_bbt
=
1
,
#endif
};
static
struct
imxuart_platform_data
uart_pdata
=
{
...
...
@@ -95,7 +168,7 @@ static struct platform_device smsc911x_device = {
* LEDs, switches, interrupts for Ethernet.
*/
static
void
mx31
pdk
_expio_irq_handler
(
uint32_t
irq
,
struct
irq_desc
*
desc
)
static
void
mx31
_3ds
_expio_irq_handler
(
uint32_t
irq
,
struct
irq_desc
*
desc
)
{
uint32_t
imr_val
;
uint32_t
int_valid
;
...
...
@@ -163,7 +236,7 @@ static struct irq_chip expio_irq_chip = {
.
unmask
=
expio_unmask_irq
,
};
static
int
__init
mx31
pdk
_init_expio
(
void
)
static
int
__init
mx31
_3ds
_init_expio
(
void
)
{
int
i
;
int
ret
;
...
...
@@ -176,7 +249,7 @@ static int __init mx31pdk_init_expio(void)
return
-
ENODEV
;
}
pr_info
(
"i.MX31
PDK
Debug board detected, rev = 0x%04X
\n
"
,
pr_info
(
"i.MX31
3DS
Debug board detected, rev = 0x%04X
\n
"
,
__raw_readw
(
CPLD_CODE_VER_REG
));
/*
...
...
@@ -201,7 +274,7 @@ static int __init mx31pdk_init_expio(void)
set_irq_flags
(
i
,
IRQF_VALID
);
}
set_irq_type
(
EXPIO_PARENT_INT
,
IRQ_TYPE_LEVEL_LOW
);
set_irq_chained_handler
(
EXPIO_PARENT_INT
,
mx31
pdk
_expio_irq_handler
);
set_irq_chained_handler
(
EXPIO_PARENT_INT
,
mx31
_3ds
_expio_irq_handler
);
return
0
;
}
...
...
@@ -209,7 +282,7 @@ static int __init mx31pdk_init_expio(void)
/*
* This structure defines the MX31 memory map.
*/
static
struct
map_desc
mx31
pdk
_io_desc
[]
__initdata
=
{
static
struct
map_desc
mx31
_3ds
_io_desc
[]
__initdata
=
{
{
.
virtual
=
MX31_CS5_BASE_ADDR_VIRT
,
.
pfn
=
__phys_to_pfn
(
MX31_CS5_BASE_ADDR
),
...
...
@@ -221,10 +294,10 @@ static struct map_desc mx31pdk_io_desc[] __initdata = {
/*
* Set up static virtual mappings.
*/
static
void
__init
mx31
pdk
_map_io
(
void
)
static
void
__init
mx31
_3ds
_map_io
(
void
)
{
mx31_map_io
();
iotable_init
(
mx31
pdk_io_desc
,
ARRAY_SIZE
(
mx31pdk
_io_desc
));
iotable_init
(
mx31
_3ds_io_desc
,
ARRAY_SIZE
(
mx31_3ds
_io_desc
));
}
/*!
...
...
@@ -232,35 +305,40 @@ static void __init mx31pdk_map_io(void)
*/
static
void
__init
mxc_board_init
(
void
)
{
mxc_iomux_setup_multiple_pins
(
mx31
pdk_pins
,
ARRAY_SIZE
(
mx31pdk
_pins
),
"mx31
pdk
"
);
mxc_iomux_setup_multiple_pins
(
mx31
_3ds_pins
,
ARRAY_SIZE
(
mx31_3ds
_pins
),
"mx31
_3ds
"
);
mxc_register_device
(
&
mxc_uart_device0
,
&
uart_pdata
);
mxc_register_device
(
&
mxc_nand_device
,
&
imx31_3ds_nand_flash_pdata
);
mxc_register_device
(
&
mxc_spi_device1
,
&
spi1_pdata
);
spi_register_board_info
(
mx31_3ds_spi_devs
,
ARRAY_SIZE
(
mx31_3ds_spi_devs
));
if
(
!
mx31
pdk
_init_expio
())
if
(
!
mx31
_3ds
_init_expio
())
platform_device_register
(
&
smsc911x_device
);
}
static
void
__init
mx31
pdk
_timer_init
(
void
)
static
void
__init
mx31
_3ds
_timer_init
(
void
)
{
mx31_clocks_init
(
26000000
);
}
static
struct
sys_timer
mx31
pdk
_timer
=
{
.
init
=
mx31
pdk
_timer_init
,
static
struct
sys_timer
mx31
_3ds
_timer
=
{
.
init
=
mx31
_3ds
_timer_init
,
};
/*
* The following uses standard kernel macros defined in arch.h in order to
* initialize __mach_desc_MX31
PDK
data structure.
* initialize __mach_desc_MX31
_3DS
data structure.
*/
MACHINE_START
(
MX31_3DS
,
"Freescale MX31PDK (3DS)"
)
/* Maintainer: Freescale Semiconductor, Inc. */
.
phys_io
=
MX31_AIPS1_BASE_ADDR
,
.
io_pg_offst
=
(
MX31_AIPS1_BASE_ADDR_VIRT
>>
18
)
&
0xfffc
,
.
boot_params
=
MX3x_PHYS_OFFSET
+
0x100
,
.
map_io
=
mx31
pdk
_map_io
,
.
map_io
=
mx31
_3ds
_map_io
,
.
init_irq
=
mx31_init_irq
,
.
init_machine
=
mxc_board_init
,
.
timer
=
&
mx31
pdk
_timer
,
.
timer
=
&
mx31
_3ds
_timer
,
MACHINE_END
arch/arm/mach-mx3/mach-pcm037.c
View file @
bb3c9d4f
...
...
@@ -35,7 +35,6 @@
#include <linux/can/platform/sja1000.h>
#include <linux/usb/otg.h>
#include <linux/usb/ulpi.h>
#include <linux/fsl_devices.h>
#include <linux/gfp.h>
#include <media/soc_camera.h>
...
...
arch/arm/mach-mx3/mx31lite-db.c
View file @
bb3c9d4f
...
...
@@ -28,7 +28,6 @@
#include <linux/types.h>
#include <linux/init.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/leds.h>
#include <linux/platform_device.h>
...
...
@@ -206,5 +205,6 @@ void __init mx31lite_db_init(void)
mxc_register_device
(
&
mxcsdhc_device0
,
&
mmc_pdata
);
mxc_register_device
(
&
mxc_spi_device0
,
&
spi0_pdata
);
platform_device_register
(
&
litekit_led_device
);
mxc_register_device
(
&
imx_wdt_device0
,
NULL
);
}
arch/arm/mach-mx5/clock-mx51.c
View file @
bb3c9d4f
...
...
@@ -757,7 +757,7 @@ DEFINE_CLOCK(uart3_ipg_clk, 2, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG7_OFFSET,
/* GPT */
DEFINE_CLOCK
(
gpt_clk
,
0
,
MXC_CCM_CCGR2
,
MXC_CCM_CCGRx_CG9_OFFSET
,
NULL
,
NULL
,
&
ipg_
per
clk
,
NULL
);
NULL
,
NULL
,
&
ipg_clk
,
NULL
);
DEFINE_CLOCK
(
gpt_ipg_clk
,
0
,
MXC_CCM_CCGR2
,
MXC_CCM_CCGRx_CG10_OFFSET
,
NULL
,
NULL
,
&
ipg_clk
,
NULL
);
...
...
arch/arm/mach-mx5/cpu.c
View file @
bb3c9d4f
...
...
@@ -14,9 +14,62 @@
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <mach/hardware.h>
#include <asm/io.h>
static
int
cpu_silicon_rev
=
-
1
;
#define SI_REV 0x48
static
void
query_silicon_parameter
(
void
)
{
void
__iomem
*
rom
=
ioremap
(
MX51_IROM_BASE_ADDR
,
MX51_IROM_SIZE
);
u32
rev
;
if
(
!
rom
)
{
cpu_silicon_rev
=
-
EINVAL
;
return
;
}
rev
=
readl
(
rom
+
SI_REV
);
switch
(
rev
)
{
case
0x1
:
cpu_silicon_rev
=
MX51_CHIP_REV_1_0
;
break
;
case
0x2
:
cpu_silicon_rev
=
MX51_CHIP_REV_1_1
;
break
;
case
0x10
:
cpu_silicon_rev
=
MX51_CHIP_REV_2_0
;
break
;
case
0x20
:
cpu_silicon_rev
=
MX51_CHIP_REV_3_0
;
break
;
default:
cpu_silicon_rev
=
0
;
}
iounmap
(
rom
);
}
/*
* Returns:
* the silicon revision of the cpu
* -EINVAL - not a mx51
*/
int
mx51_revision
(
void
)
{
if
(
!
cpu_is_mx51
())
return
-
EINVAL
;
if
(
cpu_silicon_rev
==
-
1
)
query_silicon_parameter
();
return
cpu_silicon_rev
;
}
EXPORT_SYMBOL
(
mx51_revision
);
static
int
__init
post_cpu_init
(
void
)
{
unsigned
int
reg
;
...
...
arch/arm/mach-mx5/mm.c
View file @
bb3c9d4f
...
...
@@ -34,11 +34,6 @@ static struct map_desc mxc_io_desc[] __initdata = {
.
pfn
=
__phys_to_pfn
(
MX51_DEBUG_BASE_ADDR
),
.
length
=
MX51_DEBUG_SIZE
,
.
type
=
MT_DEVICE
},
{
.
virtual
=
MX51_TZIC_BASE_ADDR_VIRT
,
.
pfn
=
__phys_to_pfn
(
MX51_TZIC_BASE_ADDR
),
.
length
=
MX51_TZIC_SIZE
,
.
type
=
MT_DEVICE
},
{
.
virtual
=
MX51_AIPS1_BASE_ADDR_VIRT
,
.
pfn
=
__phys_to_pfn
(
MX51_AIPS1_BASE_ADDR
),
...
...
@@ -54,11 +49,6 @@ static struct map_desc mxc_io_desc[] __initdata = {
.
pfn
=
__phys_to_pfn
(
MX51_AIPS2_BASE_ADDR
),
.
length
=
MX51_AIPS2_SIZE
,
.
type
=
MT_DEVICE
},
{
.
virtual
=
MX51_NFC_AXI_BASE_ADDR_VIRT
,
.
pfn
=
__phys_to_pfn
(
MX51_NFC_AXI_BASE_ADDR
),
.
length
=
MX51_NFC_AXI_SIZE
,
.
type
=
MT_DEVICE
},
};
...
...
@@ -69,14 +59,6 @@ static struct map_desc mxc_io_desc[] __initdata = {
*/
void
__init
mx51_map_io
(
void
)
{
u32
tzic_addr
;
if
(
mx51_revision
()
<
MX51_CHIP_REV_2_0
)
tzic_addr
=
0x8FFFC000
;
else
tzic_addr
=
0xE0003000
;
mxc_io_desc
[
2
].
pfn
=
__phys_to_pfn
(
tzic_addr
);
mxc_set_cpu_type
(
MXC_CPU_MX51
);
mxc_iomux_v3_init
(
MX51_IO_ADDRESS
(
MX51_IOMUXC_BASE_ADDR
));
mxc_arch_reset_init
(
MX51_IO_ADDRESS
(
MX51_WDOG_BASE_ADDR
));
...
...
@@ -85,5 +67,17 @@ void __init mx51_map_io(void)
void
__init
mx51_init_irq
(
void
)
{
tzic_init_irq
(
MX51_IO_ADDRESS
(
MX51_TZIC_BASE_ADDR
));
unsigned
long
tzic_addr
;
void
__iomem
*
tzic_virt
;
if
(
mx51_revision
()
<
MX51_CHIP_REV_2_0
)
tzic_addr
=
MX51_TZIC_BASE_ADDR_TO1
;
else
tzic_addr
=
MX51_TZIC_BASE_ADDR
;
tzic_virt
=
ioremap
(
tzic_addr
,
SZ_16K
);
if
(
!
tzic_virt
)
panic
(
"unable to map TZIC interrupt controller
\n
"
);
tzic_init_irq
(
tzic_virt
);
}
arch/arm/plat-mxc/include/mach/board-mx31
pdk
.h
→
arch/arm/plat-mxc/include/mach/board-mx31
_3ds
.h
View file @
bb3c9d4f
...
...
@@ -8,8 +8,8 @@
* published by the Free Software Foundation.
*/
#ifndef __ASM_ARCH_MXC_BOARD_MX31
PDK
_H__
#define __ASM_ARCH_MXC_BOARD_MX31
PDK
_H__
#ifndef __ASM_ARCH_MXC_BOARD_MX31
_3DS
_H__
#define __ASM_ARCH_MXC_BOARD_MX31
_3DS
_H__
/* Definitions for components on the Debug board */
...
...
@@ -56,4 +56,4 @@
#define MXC_MAX_EXP_IO_LINES 16
#endif
/* __ASM_ARCH_MXC_BOARD_MX31
PDK
_H__ */
#endif
/* __ASM_ARCH_MXC_BOARD_MX31
_3DS
_H__ */
arch/arm/plat-mxc/include/mach/mx51.h
View file @
bb3c9d4f
...
...
@@ -14,7 +14,7 @@
* FB100000 70000000 1M SPBA 0
* FB000000 73F00000 1M AIPS 1
* FB200000 83F00000 1M AIPS 2
*
FA100000
8FFFC000 16K TZIC (interrupt controller)
*
8FFFC000 16K TZIC (interrupt controller)
* 90000000 256M CSD0 SDRAM/DDR
* A0000000 256M CSD1 SDRAM/DDR
* B0000000 128M CS0 Flash
...
...
@@ -23,10 +23,16 @@
* C8000000 64M CS3 Flash
* CC000000 32M CS4 SRAM
* CE000000 32M CS5 SRAM
*
F9000000
CFFF0000 64K NFC (NAND Flash AXI)
*
CFFF0000 64K NFC (NAND Flash AXI)
*
*/
/*
* IROM
*/
#define MX51_IROM_BASE_ADDR 0x0
#define MX51_IROM_SIZE SZ_64K
/*
* IRAM
*/
...
...
@@ -40,7 +46,6 @@
* NFC
*/
#define MX51_NFC_AXI_BASE_ADDR 0xCFFF0000
/* NAND flash AXI */
#define MX51_NFC_AXI_BASE_ADDR_VIRT 0xF9000000
#define MX51_NFC_AXI_SIZE SZ_64K
/*
...
...
@@ -49,9 +54,8 @@
#define MX51_GPU_BASE_ADDR 0x20000000
#define MX51_GPU2D_BASE_ADDR 0xD0000000
#define MX51_TZIC_BASE_ADDR 0x8FFFC000
#define MX51_TZIC_BASE_ADDR_VIRT 0xFA100000
#define MX51_TZIC_SIZE SZ_16K
#define MX51_TZIC_BASE_ADDR_TO1 0x8FFFC000
#define MX51_TZIC_BASE_ADDR 0xE0000000
#define MX51_DEBUG_BASE_ADDR 0x60000000
#define MX51_DEBUG_BASE_ADDR_VIRT 0xFA200000
...
...
@@ -232,12 +236,10 @@
#define MX51_IO_ADDRESS(x) \
(void __iomem *) \
(MX51_IS_MODULE(x, IRAM) ? MX51_IRAM_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, TZIC) ? MX51_TZIC_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, DEBUG) ? MX51_DEBUG_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, SPBA0) ? MX51_SPBA0_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, AIPS1) ? MX51_AIPS1_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, AIPS2) ? MX51_AIPS2_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, NFC_AXI) ? MX51_NFC_AXI_IO_ADDRESS(x) : \
MX51_IS_MODULE(x, AIPS2) ? MX51_AIPS2_IO_ADDRESS(x) : \
0xDEADBEEF)
/*
...
...
@@ -246,9 +248,6 @@
#define MX51_IRAM_IO_ADDRESS(x) \
(((x) - MX51_IRAM_BASE_ADDR) + MX51_IRAM_BASE_ADDR_VIRT)
#define MX51_TZIC_IO_ADDRESS(x) \
(((x) - MX51_TZIC_BASE_ADDR) + MX51_TZIC_BASE_ADDR_VIRT)
#define MX51_DEBUG_IO_ADDRESS(x) \
(((x) - MX51_DEBUG_BASE_ADDR) + MX51_DEBUG_BASE_ADDR_VIRT)
...
...
@@ -261,9 +260,6 @@
#define MX51_AIPS2_IO_ADDRESS(x) \
(((x) - MX51_AIPS2_BASE_ADDR) + MX51_AIPS2_BASE_ADDR_VIRT)
#define MX51_NFC_AXI_IO_ADDRESS(x) \
(((x) - MX51_NFC_AXI_BASE_ADDR) + MX51_NFC_AXI_BASE_ADDR_VIRT)
#define MX51_IS_MEM_DEVICE_NONSHARED(x) 0
/*
...
...
@@ -443,12 +439,7 @@
#if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS)
extern
unsigned
int
system_rev
;
static
inline
unsigned
int
mx51_revision
(
void
)
{
return
system_rev
;
}
extern
int
mx51_revision
(
void
);
#endif
#endif
/* __ASM_ARCH_MXC_MX51_H__ */
arch/arm/plat-mxc/include/mach/uncompress.h
View file @
bb3c9d4f
...
...
@@ -66,6 +66,7 @@ static inline void flush(void)
#define MX2X_UART1_BASE_ADDR 0x1000a000
#define MX3X_UART1_BASE_ADDR 0x43F90000
#define MX3X_UART2_BASE_ADDR 0x43F94000
#define MX51_UART1_BASE_ADDR 0x73fbc000
static
__inline__
void
__arch_decomp_setup
(
unsigned
long
arch_id
)
{
...
...
@@ -101,6 +102,9 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id)
case
MACH_TYPE_MAGX_ZN5
:
uart_base
=
MX3X_UART2_BASE_ADDR
;
break
;
case
MACH_TYPE_MX51_BABBAGE
:
uart_base
=
MX51_UART1_BASE_ADDR
;
break
;
default:
break
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment