powerpc/83xx: Add eSDHC support for MPC837xE-RDB/WLAN boards

Actually, the support is already there, but it requires newer U-Boots
(to fill-in clock-frequency, and setup pin multiplexing).

Though, it appears that on RDB boards USBB pins aren't multiplexed
between USB and eSDHC (unlike MDS boards, where USB and eSDHC share
pctl and pwrfault pins).

So, for RDB boards we can safely setup pinmux and manually fill-in
clock-frequency, thus making eSDHC work even with older u-boots.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Anton Vorontsov 2009-07-25 01:42:30 +04:00 committed by Benjamin Herrenschmidt
parent c69328d4b9
commit 89f3729642
5 changed files with 30 additions and 3 deletions

View File

@ -174,7 +174,7 @@
interrupts = <42 0x8>; interrupts = <42 0x8>;
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
/* Filled in by U-Boot */ /* Filled in by U-Boot */
clock-frequency = <0>; clock-frequency = <111111111>;
}; };
}; };

View File

@ -174,7 +174,7 @@
interrupts = <42 0x8>; interrupts = <42 0x8>;
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
/* Filled in by U-Boot */ /* Filled in by U-Boot */
clock-frequency = <0>; clock-frequency = <111111111>;
}; };
}; };

View File

@ -172,7 +172,7 @@
interrupts = <42 0x8>; interrupts = <42 0x8>;
interrupt-parent = <&ipic>; interrupt-parent = <&ipic>;
/* Filled in by U-Boot */ /* Filled in by U-Boot */
clock-frequency = <0>; clock-frequency = <111111111>;
}; };
}; };

View File

@ -17,10 +17,32 @@
#include <asm/time.h> #include <asm/time.h>
#include <asm/ipic.h> #include <asm/ipic.h>
#include <asm/udbg.h> #include <asm/udbg.h>
#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h> #include <sysdev/fsl_pci.h>
#include "mpc83xx.h" #include "mpc83xx.h"
static void mpc837x_rdb_sd_cfg(void)
{
void __iomem *im;
im = ioremap(get_immrbase(), 0x1000);
if (!im) {
WARN_ON(1);
return;
}
/*
* On RDB boards (in contrast to MDS) USBB pins are used for SD only,
* so we can safely mux them away from the USB block.
*/
clrsetbits_be32(im + MPC83XX_SICRL_OFFS, MPC837X_SICRL_USBB_MASK,
MPC837X_SICRL_SD);
clrsetbits_be32(im + MPC83XX_SICRH_OFFS, MPC837X_SICRH_SPI_MASK,
MPC837X_SICRH_SD);
iounmap(im);
}
/* ************************************************************************ /* ************************************************************************
* *
* Setup the architecture * Setup the architecture
@ -42,6 +64,7 @@ static void __init mpc837x_rdb_setup_arch(void)
mpc83xx_add_bridge(np); mpc83xx_add_bridge(np);
#endif #endif
mpc837x_usb_cfg(); mpc837x_usb_cfg();
mpc837x_rdb_sd_cfg();
} }
static struct of_device_id mpc837x_ids[] = { static struct of_device_id mpc837x_ids[] = {

View File

@ -30,6 +30,8 @@
#define MPC8315_SICRL_USB_ULPI 0x00000054 #define MPC8315_SICRL_USB_ULPI 0x00000054
#define MPC837X_SICRL_USB_MASK 0xf0000000 #define MPC837X_SICRL_USB_MASK 0xf0000000
#define MPC837X_SICRL_USB_ULPI 0x50000000 #define MPC837X_SICRL_USB_ULPI 0x50000000
#define MPC837X_SICRL_USBB_MASK 0x30000000
#define MPC837X_SICRL_SD 0x20000000
/* system i/o configuration register high */ /* system i/o configuration register high */
#define MPC83XX_SICRH_OFFS 0x118 #define MPC83XX_SICRH_OFFS 0x118
@ -38,6 +40,8 @@
#define MPC831X_SICRH_USB_ULPI 0x000000a0 #define MPC831X_SICRH_USB_ULPI 0x000000a0
#define MPC8315_SICRH_USB_MASK 0x0000ff00 #define MPC8315_SICRH_USB_MASK 0x0000ff00
#define MPC8315_SICRH_USB_ULPI 0x00000000 #define MPC8315_SICRH_USB_ULPI 0x00000000
#define MPC837X_SICRH_SPI_MASK 0x00000003
#define MPC837X_SICRH_SD 0x00000001
/* USB Control Register */ /* USB Control Register */
#define FSL_USB2_CONTROL_OFFS 0x500 #define FSL_USB2_CONTROL_OFFS 0x500