openwrt/target/linux/orion/patches/012-rework_mpp_handling.patch
Imre Kaloz 7bb65fb9d7 add preliminary Marvell Orion support
SVN-Revision: 11352
2008-06-04 13:51:17 +00:00

584 lines
17 KiB
Diff

Instead of having board code poke directly into the MPP configuration
registers, and separately calling orion5x_gpio_set_valid_pins() to
indicate which MPP pins can be used as GPIO pins, introduce a helper
function for configuring the roles of each of the MPP pins, and have
that helper function handle gpio validity internally.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Acked-by: Sylver Bruneau <sylver.bruneau@googlemail.com>
---
arch/arm/mach-orion5x/Makefile | 2 +-
arch/arm/mach-orion5x/common.h | 2 +-
arch/arm/mach-orion5x/db88f5281-setup.c | 42 +++++----
arch/arm/mach-orion5x/dns323-setup.c | 50 +++++------
arch/arm/mach-orion5x/gpio.c | 7 +-
arch/arm/mach-orion5x/kurobox_pro-setup.c | 41 ++++----
arch/arm/mach-orion5x/mpp.c | 142 +++++++++++++++++++++++++++++
arch/arm/mach-orion5x/mpp.h | 63 +++++++++++++
arch/arm/mach-orion5x/rd88f5182-setup.c | 43 +++++----
arch/arm/mach-orion5x/ts209-setup.c | 43 +++++----
10 files changed, 321 insertions(+), 114 deletions(-)
create mode 100644 arch/arm/mach-orion5x/mpp.c
create mode 100644 arch/arm/mach-orion5x/mpp.h
--- a/arch/arm/mach-orion5x/Makefile
+++ b/arch/arm/mach-orion5x/Makefile
@@ -1,4 +1,4 @@
-obj-y += common.o addr-map.o pci.o gpio.o irq.o
+obj-y += common.o addr-map.o pci.o gpio.o irq.o mpp.o
obj-$(CONFIG_MACH_DB88F5281) += db88f5281-setup.o
obj-$(CONFIG_MACH_RD88F5182) += rd88f5182-setup.o
obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o
--- a/arch/arm/mach-orion5x/common.h
+++ b/arch/arm/mach-orion5x/common.h
@@ -48,7 +48,7 @@
* Valid GPIO pins according to MPP setup, used by machine-setup.
* (/mach-orion/gpio.c).
*/
-void orion5x_gpio_set_valid_pins(u32 pins);
+void orion5x_gpio_set_valid(unsigned pin, int valid);
void gpio_display(void); /* debug */
struct machine_desc;
--- a/arch/arm/mach-orion5x/db88f5281-setup.c
+++ b/arch/arm/mach-orion5x/db88f5281-setup.c
@@ -27,6 +27,7 @@
#include <asm/arch/orion5x.h>
#include <asm/plat-orion/orion_nand.h>
#include "common.h"
+#include "mpp.h"
/*****************************************************************************
* DB-88F5281 on board devices
@@ -305,26 +306,27 @@
*/
orion5x_init();
- /*
- * Setup Multiplexing Pins:
- * MPP0: GPIO (USB Over Current) MPP1: GPIO (USB Vbat input)
- * MPP2: PCI_REQn[2] MPP3: PCI_GNTn[2]
- * MPP4: PCI_REQn[3] MPP5: PCI_GNTn[3]
- * MPP6: GPIO (JP0, CON17.2) MPP7: GPIO (JP1, CON17.1)
- * MPP8: GPIO (JP2, CON11.2) MPP9: GPIO (JP3, CON11.3)
- * MPP10: GPIO (RTC int) MPP11: GPIO (Baud Rate Generator)
- * MPP12: GPIO (PCI int 1) MPP13: GPIO (PCI int 2)
- * MPP14: NAND_REn[2] MPP15: NAND_WEn[2]
- * MPP16: UART1_RX MPP17: UART1_TX
- * MPP18: UART1_CTS MPP19: UART1_RTS
- * MPP-DEV: DEV_D[16:31]
- */
- orion5x_write(MPP_0_7_CTRL, 0x00222203);
- orion5x_write(MPP_8_15_CTRL, 0x44000000);
- orion5x_write(MPP_16_19_CTRL, 0);
- orion5x_write(MPP_DEV_CTRL, 0);
-
- orion5x_gpio_set_valid_pins(0x00003fc3);
+ orion5x_mpp_conf(0, MPP_GPIO); /* USB Over Current */
+ orion5x_mpp_conf(1, MPP_GPIO); /* USB Vbat input */
+ orion5x_mpp_conf(2, MPP_PCI_ARB); /* PCI_REQn[2] */
+ orion5x_mpp_conf(3, MPP_PCI_ARB); /* PCI_GNTn[2] */
+ orion5x_mpp_conf(4, MPP_PCI_ARB); /* PCI_REQn[3] */
+ orion5x_mpp_conf(5, MPP_PCI_ARB); /* PCI_GNTn[3] */
+ orion5x_mpp_conf(6, MPP_GPIO); /* JP0, CON17.2 */
+ orion5x_mpp_conf(7, MPP_GPIO); /* JP1, CON17.1 */
+ orion5x_mpp_conf(8, MPP_GPIO); /* JP2, CON11.2 */
+ orion5x_mpp_conf(9, MPP_GPIO); /* JP3, CON11.3 */
+ orion5x_mpp_conf(10, MPP_GPIO); /* RTC int */
+ orion5x_mpp_conf(11, MPP_GPIO); /* Baud Rate Generator */
+ orion5x_mpp_conf(12, MPP_GPIO); /* PCI int 1 */
+ orion5x_mpp_conf(13, MPP_GPIO); /* PCI int 2 */
+ orion5x_mpp_conf(14, MPP_NAND); /* NAND_REn[2] */
+ orion5x_mpp_conf(15, MPP_NAND); /* NAND_WEn[2] */
+ orion5x_mpp_conf(16, MPP_UART); /* UART1_RX */
+ orion5x_mpp_conf(17, MPP_UART); /* UART1_TX */
+ orion5x_mpp_conf(18, MPP_UART); /* UART1_CTSn */
+ orion5x_mpp_conf(19, MPP_UART); /* UART1_RTSn */
+ orion5x_write(MPP_DEV_CTRL, 0); /* DEV_D[31:16] */
/*
* Configure peripherals.
--- a/arch/arm/mach-orion5x/dns323-setup.c
+++ b/arch/arm/mach-orion5x/dns323-setup.c
@@ -27,6 +27,7 @@
#include <asm/mach/pci.h>
#include <asm/arch/orion5x.h>
#include "common.h"
+#include "mpp.h"
#define DNS323_GPIO_LED_RIGHT_AMBER 1
#define DNS323_GPIO_LED_LEFT_AMBER 2
@@ -247,34 +248,27 @@
/* Setup basic Orion functions. Need to be called early. */
orion5x_init();
- /* set MPP to 0 as D-Link's 2.6.12.6 kernel did */
- orion5x_write(MPP_0_7_CTRL, 0);
- orion5x_write(MPP_8_15_CTRL, 0);
- orion5x_write(MPP_16_19_CTRL, 0);
- orion5x_write(MPP_DEV_CTRL, 0);
-
- /* Define used GPIO pins
-
- GPIO Map:
-
- | 0 | | PEX_RST_OUT (not controlled by GPIO)
- | 1 | Out | right amber LED (= sata ch0 LED) (low-active)
- | 2 | Out | left amber LED (= sata ch1 LED) (low-active)
- | 3 | Out | //unknown//
- | 4 | Out | power button LED (low-active, together with pin #5)
- | 5 | Out | power button LED (low-active, together with pin #4)
- | 6 | In | GMT G751-2f overtemp. shutdown signal (low-active)
- | 7 | In | M41T80 nIRQ/OUT/SQW signal
- | 8 | Out | triggers power off (high-active)
- | 9 | In | power button switch (low-active)
- | 10 | In | reset button switch (low-active)
- | 11 | Out | //unknown//
- | 12 | Out | //unknown//
- | 13 | Out | //unknown//
- | 14 | Out | //unknown//
- | 15 | Out | //unknown//
- */
- orion5x_gpio_set_valid_pins(0x07f6);
+ orion5x_mpp_conf(0, MPP_PCIE_RST_OUTn);
+ orion5x_mpp_conf(1, MPP_GPIO); /* right amber LED (sata ch0) */
+ orion5x_mpp_conf(2, MPP_GPIO); /* left amber LED (sata ch1) */
+ orion5x_mpp_conf(3, MPP_UNUSED);
+ orion5x_mpp_conf(4, MPP_GPIO); /* power button LED */
+ orion5x_mpp_conf(5, MPP_GPIO); /* power button LED */
+ orion5x_mpp_conf(6, MPP_GPIO); /* GMT G751-2f overtemp */
+ orion5x_mpp_conf(7, MPP_GPIO); /* M41T80 nIRQ/OUT/SQW */
+ orion5x_mpp_conf(8, MPP_GPIO); /* triggers power off */
+ orion5x_mpp_conf(9, MPP_GPIO); /* power button switch */
+ orion5x_mpp_conf(10, MPP_GPIO); /* reset button switch */
+ orion5x_mpp_conf(11, MPP_UNUSED);
+ orion5x_mpp_conf(12, MPP_UNUSED);
+ orion5x_mpp_conf(13, MPP_UNUSED);
+ orion5x_mpp_conf(14, MPP_UNUSED);
+ orion5x_mpp_conf(15, MPP_UNUSED);
+ orion5x_mpp_conf(16, MPP_UNUSED);
+ orion5x_mpp_conf(17, MPP_UNUSED);
+ orion5x_mpp_conf(18, MPP_UNUSED);
+ orion5x_mpp_conf(19, MPP_UNUSED);
+ orion5x_write(MPP_DEV_CTRL, 0); /* DEV_D[31:16] */
/*
* Configure peripherals.
--- a/arch/arm/mach-orion5x/gpio.c
+++ b/arch/arm/mach-orion5x/gpio.c
@@ -24,9 +24,12 @@
static unsigned long gpio_valid[BITS_TO_LONGS(GPIO_MAX)];
static const char *gpio_label[GPIO_MAX]; /* non null for allocated GPIOs */
-void __init orion5x_gpio_set_valid_pins(u32 pins)
+void __init orion5x_gpio_set_valid(unsigned pin, int valid)
{
- gpio_valid[0] = pins;
+ if (valid)
+ __set_bit(pin, gpio_valid);
+ else
+ __clear_bit(pin, gpio_valid);
}
/*
--- a/arch/arm/mach-orion5x/kurobox_pro-setup.c
+++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c
@@ -25,6 +25,7 @@
#include <asm/arch/orion5x.h>
#include <asm/plat-orion/orion_nand.h>
#include "common.h"
+#include "mpp.h"
/*****************************************************************************
* KUROBOX-PRO Info
@@ -187,26 +188,26 @@
*/
orion5x_init();
- /*
- * Setup Multiplexing Pins --
- * MPP[0-1] Not used
- * MPP[2] GPIO Micon
- * MPP[3] GPIO RTC
- * MPP[4-5] Not used
- * MPP[6] Nand Flash REn
- * MPP[7] Nand Flash WEn
- * MPP[8-11] Not used
- * MPP[12] SATA 0 presence Indication
- * MPP[13] SATA 1 presence Indication
- * MPP[14] SATA 0 active Indication
- * MPP[15] SATA 1 active indication
- * MPP[16-19] Not used
- */
- orion5x_write(MPP_0_7_CTRL, 0x44220003);
- orion5x_write(MPP_8_15_CTRL, 0x55550000);
- orion5x_write(MPP_16_19_CTRL, 0x0);
-
- orion5x_gpio_set_valid_pins(0x0000000c);
+ orion5x_mpp_conf(0, MPP_UNUSED);
+ orion5x_mpp_conf(1, MPP_UNUSED);
+ orion5x_mpp_conf(2, MPP_GPIO); /* GPIO Micon */
+ orion5x_mpp_conf(3, MPP_GPIO); /* GPIO Rtc */
+ orion5x_mpp_conf(4, MPP_UNUSED);
+ orion5x_mpp_conf(5, MPP_UNUSED);
+ orion5x_mpp_conf(6, MPP_NAND); /* NAND Flash REn */
+ orion5x_mpp_conf(7, MPP_NAND); /* NAND Flash WEn */
+ orion5x_mpp_conf(8, MPP_UNUSED);
+ orion5x_mpp_conf(9, MPP_UNUSED);
+ orion5x_mpp_conf(10, MPP_UNUSED);
+ orion5x_mpp_conf(11, MPP_UNUSED);
+ orion5x_mpp_conf(12, MPP_SATA_LED); /* SATA 0 presence */
+ orion5x_mpp_conf(13, MPP_SATA_LED); /* SATA 1 presence */
+ orion5x_mpp_conf(14, MPP_SATA_LED); /* SATA 0 active */
+ orion5x_mpp_conf(15, MPP_SATA_LED); /* SATA 1 active */
+ orion5x_mpp_conf(16, MPP_UNUSED);
+ orion5x_mpp_conf(17, MPP_UNUSED);
+ orion5x_mpp_conf(18, MPP_UNUSED);
+ orion5x_mpp_conf(19, MPP_UNUSED);
/*
* Configure peripherals.
--- /dev/null
+++ b/arch/arm/mach-orion5x/mpp.c
@@ -0,0 +1,142 @@
+/*
+ * arch/arm/mach-orion5x/mpp.c
+ *
+ * MPP functions for Marvell Orion 5x SoCs
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/mbus.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include "common.h"
+#include "mpp.h"
+
+static int is_5182(void)
+{
+ u32 dev;
+ u32 rev;
+
+ orion5x_pcie_id(&dev, &rev);
+
+ return !!(dev == MV88F5182_DEV_ID);
+}
+
+static int is_5281(void)
+{
+ u32 dev;
+ u32 rev;
+
+ orion5x_pcie_id(&dev, &rev);
+
+ return !!(dev == MV88F5281_DEV_ID);
+}
+
+static int __init determine_type_encoding(int mpp, enum orion5x_mpp_type type)
+{
+ switch (type) {
+ case MPP_UNUSED:
+ case MPP_GPIO:
+ if (mpp == 0)
+ return 3;
+ if (mpp >= 1 && mpp <= 15)
+ return 0;
+ if (mpp >= 16 && mpp <= 19) {
+ if (is_5182())
+ return 5;
+ if (type == MPP_UNUSED)
+ return 0;
+ }
+ return -1;
+
+ case MPP_PCIE_RST_OUTn:
+ if (mpp == 0)
+ return 0;
+ return -1;
+
+ case MPP_PCI_ARB:
+ if (mpp >= 0 && mpp <= 7)
+ return 2;
+ return -1;
+
+ case MPP_PCI_PMEn:
+ if (mpp == 2)
+ return 3;
+ return -1;
+
+ case MPP_GIGE:
+ if (mpp >= 8 && mpp <= 15)
+ return 1;
+ return -1;
+
+ case MPP_NAND:
+ if (is_5182() || is_5281()) {
+ if (mpp >= 4 && mpp <= 7)
+ return 4;
+ if (mpp >= 12 && mpp <= 17)
+ return 4;
+ }
+ return -1;
+
+
+ case MPP_SATA_LED:
+ if (is_5182()) {
+ if (mpp >= 4 && mpp <= 7)
+ return 5;
+ if (mpp >= 12 && mpp <= 15)
+ return 5;
+ }
+ return -1;
+
+ case MPP_UART:
+ if (mpp >= 16 && mpp <= 19)
+ return 0;
+ return -1;
+ }
+
+ printk(KERN_INFO "unknown MPP type %d\n", type);
+
+ return -1;
+}
+
+static void __init set_mpp_type(int mpp, int num_type)
+{
+ unsigned long reg;
+ u32 value;
+
+ if (mpp >= 0 && mpp <= 7)
+ reg = MPP_0_7_CTRL;
+ else if (mpp >= 8 && mpp <= 15)
+ reg = MPP_8_15_CTRL;
+ else if (mpp >= 16 && mpp <= 19)
+ reg = MPP_16_19_CTRL;
+ else
+ return;
+
+ mpp &= 7;
+
+ value = readl(reg);
+ value &= ~(0xf << (mpp << 2));
+ value |= (num_type & 0xf) << (mpp << 2);
+ writel(value, reg);
+}
+
+void __init orion5x_mpp_conf(int mpp, enum orion5x_mpp_type type)
+{
+ int num_type;
+
+ num_type = determine_type_encoding(mpp, type);
+ if (num_type < 0) {
+ printk(KERN_ERR "orion5x_mpp_conf: invalid MPP "
+ "combination (%d, %d)\n", mpp, type);
+ return;
+ }
+
+ set_mpp_type(mpp, num_type);
+
+ orion5x_gpio_set_valid(mpp, (type == MPP_GPIO) ? 1 : 0);
+}
--- /dev/null
+++ b/arch/arm/mach-orion5x/mpp.h
@@ -0,0 +1,63 @@
+#ifndef __ARCH_ORION5X_MPP_H
+#define __ARCH_ORION5X_MPP_H
+
+enum orion5x_mpp_type {
+ /*
+ * This MPP is unused.
+ */
+ MPP_UNUSED,
+
+ /*
+ * This MPP pin is used as a generic GPIO pin. Valid for
+ * MPPs 0-15 and device bus data pins 16-31. On 5182, also
+ * valid for MPPs 16-19.
+ */
+ MPP_GPIO,
+
+ /*
+ * This MPP is used as PCIe_RST_OUTn pin. Valid for
+ * MPP 0 only.
+ */
+ MPP_PCIE_RST_OUTn,
+
+ /*
+ * This MPP is used as PCI arbiter pin (REQn/GNTn.)
+ * Valid for MPPs 0-7 only.
+ */
+ MPP_PCI_ARB,
+
+ /*
+ * This MPP is used as PCI_PMEn pin. Valid for MPP 2 only.
+ */
+ MPP_PCI_PMEn,
+
+ /*
+ * This MPP is used as GigE half-duplex (COL, CRS) or GMII
+ * (RXERR, CRS, TXERR, TXD[7:4], RXD[7:4]) pin. Valid for
+ * MPPs 8-19 only.
+ */
+ MPP_GIGE,
+
+ /*
+ * This MPP is used as NAND REn/WEn pin. Valid for MPPs
+ * 4-7 and 12-17 only, and only on the 5181l/5182/5281.
+ */
+ MPP_NAND,
+
+ /*
+ * This MPP is used as a SATA presence/activity LED.
+ * Valid for MPPs 4-7 and 12-15 only, and only on the 5182.
+ */
+ MPP_SATA_LED,
+
+ /*
+ * This MPP is used as UART1 RXD/TXD/CTSn/RTSn pin.
+ * Valid for MPPs 16-19 only.
+ */
+ MPP_UART,
+};
+
+void orion5x_mpp_conf(int mpp, enum orion5x_mpp_type type);
+
+
+#endif
--- a/arch/arm/mach-orion5x/rd88f5182-setup.c
+++ b/arch/arm/mach-orion5x/rd88f5182-setup.c
@@ -26,6 +26,7 @@
#include <asm/mach/pci.h>
#include <asm/arch/orion5x.h>
#include "common.h"
+#include "mpp.h"
/*****************************************************************************
* RD-88F5182 Info
@@ -248,22 +249,28 @@
*/
orion5x_init();
+ orion5x_mpp_conf(0, MPP_GPIO); /* Debug Led */
+ orion5x_mpp_conf(1, MPP_GPIO); /* Reset Switch */
+ orion5x_mpp_conf(2, MPP_UNUSED);
+ orion5x_mpp_conf(3, MPP_GPIO); /* RTC Int */
+ orion5x_mpp_conf(4, MPP_GPIO);
+ orion5x_mpp_conf(5, MPP_GPIO);
+ orion5x_mpp_conf(6, MPP_GPIO); /* PCI_intA */
+ orion5x_mpp_conf(7, MPP_GPIO); /* PCI_intB */
+ orion5x_mpp_conf(8, MPP_UNUSED);
+ orion5x_mpp_conf(9, MPP_UNUSED);
+ orion5x_mpp_conf(10, MPP_UNUSED);
+ orion5x_mpp_conf(11, MPP_UNUSED);
+ orion5x_mpp_conf(12, MPP_SATA_LED); /* SATA 0 presence */
+ orion5x_mpp_conf(13, MPP_SATA_LED); /* SATA 1 presence */
+ orion5x_mpp_conf(14, MPP_SATA_LED); /* SATA 0 active */
+ orion5x_mpp_conf(15, MPP_SATA_LED); /* SATA 1 active */
+ orion5x_mpp_conf(16, MPP_UNUSED);
+ orion5x_mpp_conf(17, MPP_UNUSED);
+ orion5x_mpp_conf(18, MPP_UNUSED);
+ orion5x_mpp_conf(19, MPP_UNUSED);
+
/*
- * Setup Multiplexing Pins --
- * MPP[0] Debug Led (GPIO - Out)
- * MPP[1] Debug Led (GPIO - Out)
- * MPP[2] N/A
- * MPP[3] RTC_Int (GPIO - In)
- * MPP[4] GPIO
- * MPP[5] GPIO
- * MPP[6] PCI_intA (GPIO - In)
- * MPP[7] PCI_intB (GPIO - In)
- * MPP[8-11] N/A
- * MPP[12] SATA 0 presence Indication
- * MPP[13] SATA 1 presence Indication
- * MPP[14] SATA 0 active Indication
- * MPP[15] SATA 1 active indication
- * MPP[16-19] Not used
* MPP[20] PCI Clock to MV88F5182
* MPP[21] PCI Clock to mini PCI CON11
* MPP[22] USB 0 over current indication
@@ -272,12 +279,6 @@
* MPP[25] USB 0 over current enable
*/
- orion5x_write(MPP_0_7_CTRL, 0x00000003);
- orion5x_write(MPP_8_15_CTRL, 0x55550000);
- orion5x_write(MPP_16_19_CTRL, 0x5555);
-
- orion5x_gpio_set_valid_pins(0x000000fb);
-
/*
* Configure peripherals.
*/
--- a/arch/arm/mach-orion5x/ts209-setup.c
+++ b/arch/arm/mach-orion5x/ts209-setup.c
@@ -28,6 +28,7 @@
#include <asm/mach/pci.h>
#include <asm/arch/orion5x.h>
#include "common.h"
+#include "mpp.h"
#define QNAP_TS209_NOR_BOOT_BASE 0xf4000000
#define QNAP_TS209_NOR_BOOT_SIZE SZ_8M
@@ -364,33 +365,33 @@
*/
orion5x_init();
+ orion5x_mpp_conf(0, MPP_UNUSED);
+ orion5x_mpp_conf(1, MPP_GPIO); /* USB copy button */
+ orion5x_mpp_conf(2, MPP_GPIO); /* Load defaults button */
+ orion5x_mpp_conf(3, MPP_GPIO); /* GPIO RTC */
+ orion5x_mpp_conf(4, MPP_UNUSED);
+ orion5x_mpp_conf(5, MPP_UNUSED);
+ orion5x_mpp_conf(6, MPP_GPIO); /* PCI Int A */
+ orion5x_mpp_conf(7, MPP_GPIO); /* PCI Int B */
+ orion5x_mpp_conf(8, MPP_UNUSED);
+ orion5x_mpp_conf(9, MPP_UNUSED);
+ orion5x_mpp_conf(10, MPP_UNUSED);
+ orion5x_mpp_conf(11, MPP_UNUSED);
+ orion5x_mpp_conf(12, MPP_SATA_LED); /* SATA 0 presence */
+ orion5x_mpp_conf(13, MPP_SATA_LED); /* SATA 1 presence */
+ orion5x_mpp_conf(14, MPP_SATA_LED); /* SATA 0 active */
+ orion5x_mpp_conf(15, MPP_SATA_LED); /* SATA 1 active */
+ orion5x_mpp_conf(16, MPP_UART); /* UART1 RXD */
+ orion5x_mpp_conf(17, MPP_UART); /* UART1 TXD */
+ orion5x_mpp_conf(18, MPP_GPIO); /* SW_RST */
+ orion5x_mpp_conf(19, MPP_UNUSED);
+
/*
- * Setup Multiplexing Pins --
- * MPP[0] Reserved
- * MPP[1] USB copy button (0 active)
- * MPP[2] Load defaults button (0 active)
- * MPP[3] GPIO RTC
- * MPP[4-5] Reserved
- * MPP[6] PCI Int A
- * MPP[7] PCI Int B
- * MPP[8-11] Reserved
- * MPP[12] SATA 0 presence
- * MPP[13] SATA 1 presence
- * MPP[14] SATA 0 active
- * MPP[15] SATA 1 active
- * MPP[16] UART1 RXD
- * MPP[17] UART1 TXD
- * MPP[18] SW_RST (0 active)
- * MPP[19] Reserved
* MPP[20] PCI clock 0
* MPP[21] PCI clock 1
* MPP[22] USB 0 over current
* MPP[23-25] Reserved
*/
- orion5x_write(MPP_0_7_CTRL, 0x3);
- orion5x_write(MPP_8_15_CTRL, 0x55550000);
- orion5x_write(MPP_16_19_CTRL, 0x5500);
- orion5x_gpio_set_valid_pins(0x3cc0fff);
/*
* Configure peripherals.