[ARM] DNS323: Initialise 88F5182 correctly
The 88F5182 found in the DNS-323 rev B1 (and some other devices, such as the CH3SNAS) require different initialisation of the SATA controller and MPP registers. Tested on a DNS-323 rev B1. Signed-off-by: Matt Palmer <mpalmer@hezmatt.org>
This commit is contained in:
parent
a93f44c175
commit
f93e4159b1
1 changed files with 61 additions and 4 deletions
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/ata_platform.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -64,9 +65,21 @@ static struct hw_pci dns323_pci __initdata = {
|
||||||
.map_irq = dns323_pci_map_irq,
|
.map_irq = dns323_pci_map_irq,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int __init dns323_dev_id(void)
|
||||||
|
{
|
||||||
|
u32 dev, rev;
|
||||||
|
|
||||||
|
orion5x_pcie_id(&dev, &rev);
|
||||||
|
|
||||||
|
return dev;
|
||||||
|
}
|
||||||
|
|
||||||
static int __init dns323_pci_init(void)
|
static int __init dns323_pci_init(void)
|
||||||
{
|
{
|
||||||
if (machine_is_dns323())
|
/* The 5182 doesn't really use it's PCI bus, and initialising PCI
|
||||||
|
* gets in the way of initialising the SATA controller.
|
||||||
|
*/
|
||||||
|
if (machine_is_dns323() && dns323_dev_id() != MV88F5182_DEV_ID)
|
||||||
pci_common_init(&dns323_pci);
|
pci_common_init(&dns323_pci);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -283,10 +296,17 @@ static struct platform_device dns323_button_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* SATA
|
||||||
|
*/
|
||||||
|
static struct mv_sata_platform_data dns323_sata_data = {
|
||||||
|
.n_ports = 2,
|
||||||
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* General Setup
|
* General Setup
|
||||||
*/
|
*/
|
||||||
static struct orion5x_mpp_mode dns323_mpp_modes[] __initdata = {
|
static struct orion5x_mpp_mode dns323_mv88f5181_mpp_modes[] __initdata = {
|
||||||
{ 0, MPP_PCIE_RST_OUTn },
|
{ 0, MPP_PCIE_RST_OUTn },
|
||||||
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */
|
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */
|
||||||
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */
|
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */
|
||||||
|
@ -310,6 +330,30 @@ static struct orion5x_mpp_mode dns323_mpp_modes[] __initdata = {
|
||||||
{ -1 },
|
{ -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct orion5x_mpp_mode dns323_mv88f5182_mpp_modes[] __initdata = {
|
||||||
|
{ 0, MPP_UNUSED },
|
||||||
|
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */
|
||||||
|
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */
|
||||||
|
{ 3, MPP_UNUSED },
|
||||||
|
{ 4, MPP_GPIO }, /* power button LED */
|
||||||
|
{ 5, MPP_GPIO }, /* power button LED */
|
||||||
|
{ 6, MPP_GPIO }, /* GMT G751-2f overtemp */
|
||||||
|
{ 7, MPP_GPIO }, /* M41T80 nIRQ/OUT/SQW */
|
||||||
|
{ 8, MPP_GPIO }, /* triggers power off */
|
||||||
|
{ 9, MPP_GPIO }, /* power button switch */
|
||||||
|
{ 10, MPP_GPIO }, /* reset button switch */
|
||||||
|
{ 11, MPP_UNUSED },
|
||||||
|
{ 12, MPP_SATA_LED },
|
||||||
|
{ 13, MPP_SATA_LED },
|
||||||
|
{ 14, MPP_SATA_LED },
|
||||||
|
{ 15, MPP_SATA_LED },
|
||||||
|
{ 16, MPP_UNUSED },
|
||||||
|
{ 17, MPP_UNUSED },
|
||||||
|
{ 18, MPP_UNUSED },
|
||||||
|
{ 19, MPP_UNUSED },
|
||||||
|
{ -1 },
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On the DNS-323 the following devices are attached via I2C:
|
* On the DNS-323 the following devices are attached via I2C:
|
||||||
*
|
*
|
||||||
|
@ -340,8 +384,15 @@ static void __init dns323_init(void)
|
||||||
/* Setup basic Orion functions. Need to be called early. */
|
/* Setup basic Orion functions. Need to be called early. */
|
||||||
orion5x_init();
|
orion5x_init();
|
||||||
|
|
||||||
orion5x_mpp_conf(dns323_mpp_modes);
|
/* Just to be tricky, the 5182 has a completely different
|
||||||
writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */
|
* set of MPP modes to the 5181.
|
||||||
|
*/
|
||||||
|
if (dns323_dev_id() == MV88F5182_DEV_ID)
|
||||||
|
orion5x_mpp_conf(dns323_mv88f5182_mpp_modes);
|
||||||
|
else {
|
||||||
|
orion5x_mpp_conf(dns323_mv88f5181_mpp_modes);
|
||||||
|
writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */
|
||||||
|
}
|
||||||
|
|
||||||
/* setup flash mapping
|
/* setup flash mapping
|
||||||
* CS3 holds a 8 MB Spansion S29GL064M90TFIR4
|
* CS3 holds a 8 MB Spansion S29GL064M90TFIR4
|
||||||
|
@ -367,6 +418,12 @@ static void __init dns323_init(void)
|
||||||
orion5x_i2c_init();
|
orion5x_i2c_init();
|
||||||
orion5x_uart0_init();
|
orion5x_uart0_init();
|
||||||
|
|
||||||
|
/* The 5182 has it's SATA controller on-chip, and needs it's own little
|
||||||
|
* init routine.
|
||||||
|
*/
|
||||||
|
if (dns323_dev_id() == MV88F5182_DEV_ID)
|
||||||
|
orion5x_sata_init(&dns323_sata_data);
|
||||||
|
|
||||||
/* register dns323 specific power-off method */
|
/* register dns323 specific power-off method */
|
||||||
if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 ||
|
if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 ||
|
||||||
gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)
|
gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)
|
||||||
|
|
Loading…
Add table
Reference in a new issue