diff options
author | Hakim Giydan <hgiydan@marvell.com> | 2016-09-08 10:20:23 -0700 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2016-09-13 16:55:53 +0200 |
commit | 449368c2f08387923575b802cc40d0538d636439 (patch) | |
tree | e65404c8786794f650fb68ea54be03bee3e36724 /src/soc/marvell/mvmap2315/pinmux.c | |
parent | 4f2754c7201ef09b1619cc8c2ae9399616374214 (diff) | |
download | coreboot-449368c2f08387923575b802cc40d0538d636439.tar.xz |
soc/marvell: Add stub implementation of MVMAP2315 SOC
Most things still need to be filled in, but this will allow
us to build boards which use this SOC.
Nvidia Tegra210 SOC and Rochchip Rk3399 SOC has been used
as templates to create this directory.
Change-Id: I8cc3e99df915bb289a2f3539db103cd6be90a0b2
Signed-off-by: Hakim Giydan <hgiydan@marvell.com>
Reviewed-on: https://review.coreboot.org/15506
Tested-by: build bot (Jenkins)
Reviewed-by: Martin Roth <martinroth@google.com>
Diffstat (limited to 'src/soc/marvell/mvmap2315/pinmux.c')
-rw-r--r-- | src/soc/marvell/mvmap2315/pinmux.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/soc/marvell/mvmap2315/pinmux.c b/src/soc/marvell/mvmap2315/pinmux.c new file mode 100644 index 0000000000..159d62e175 --- /dev/null +++ b/src/soc/marvell/mvmap2315/pinmux.c @@ -0,0 +1,64 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2016 Marvell, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <stddef.h> +#include <stdint.h> +#include <stdlib.h> + +#include <arch/io.h> +#include <soc/pinmux.h> + +void set_pinmux(struct mvmap2315_pinmux pinmux) +{ + u32 pad_num; + u32 reg = 0; + + /* pads < 160 are part of the MCU domain and not handled here + * and pads > 231 don't exist + */ + if (pinmux.pad < 160 || pinmux.pad > 231) + return; + + pad_num = pinmux.pad - 160; + + reg |= (pinmux.fun_sel << + MVMAP2315_PADWRAP_FUNC_SEL_SHIFT) & + MVMAP2315_PADWRAP_FUNC_SEL; + + reg |= (pinmux.raw_sel << + MVMAP2315_PADWRAP_RAW_SEL_SHIFT) & + MVMAP2315_PADWRAP_RAW_SEL; + + reg |= (pinmux.dgtb_sel << + MVMAP2315_PADWRAP_DGTB_SEL_SHIFT) & + MVMAP2315_PADWRAP_DGTB_SEL; + + reg |= (pinmux.slew << + MVMAP2315_PADWRAP_SLEW_SHIFT) & + MVMAP2315_PADWRAP_SLEW; + + if (!pinmux.pull_sel) { + reg &= ~MVMAP2315_PADWRAP_PD_EN; + reg &= ~MVMAP2315_PADWRAP_PU_EN; + } else if (pinmux.pull_sel == 1) { + reg |= MVMAP2315_PADWRAP_PD_EN; + reg &= ~MVMAP2315_PADWRAP_PU_EN; + } else if (pinmux.pull_sel == 2) { + reg &= ~MVMAP2315_PADWRAP_PD_EN; + reg |= MVMAP2315_PADWRAP_PU_EN; + } + + write32(&mvmap2315_pinmux->io_pad_piocfg[pad_num], reg); +} |