Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/mips/ingenic enable clocks as needed
details: https://anonhg.NetBSD.org/src/rev/02bc038b5cd4
branches: trunk
changeset: 337631:02bc038b5cd4
user: macallan <macallan%NetBSD.org@localhost>
date: Tue Apr 21 19:57:41 2015 +0000
description:
enable clocks as needed
diffstat:
sys/arch/mips/ingenic/apbus.c | 72 ++++++++++++++++++++++--------------------
1 files changed, 38 insertions(+), 34 deletions(-)
diffs (112 lines):
diff -r 3a16ccf839cd -r 02bc038b5cd4 sys/arch/mips/ingenic/apbus.c
--- a/sys/arch/mips/ingenic/apbus.c Tue Apr 21 19:56:01 2015 +0000
+++ b/sys/arch/mips/ingenic/apbus.c Tue Apr 21 19:57:41 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: apbus.c,v 1.11 2015/03/25 11:25:10 macallan Exp $ */
+/* $NetBSD: apbus.c,v 1.12 2015/04/21 19:57:41 macallan Exp $ */
/*-
* Copyright (c) 2014 Michael Lorenz
@@ -29,7 +29,7 @@
/* catch-all for on-chip peripherals */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: apbus.c,v 1.11 2015/03/25 11:25:10 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: apbus.c,v 1.12 2015/04/21 19:57:41 macallan Exp $");
#include "locators.h"
#define _MIPS_BUS_DMA_PRIVATE
@@ -63,29 +63,31 @@
};
typedef struct apbus_dev {
- const char *name;
- bus_addr_t addr;
- uint32_t irq;
+ const char *name; /* driver name */
+ bus_addr_t addr; /* base address */
+ uint32_t irq; /* interrupt */
+ uint32_t clk0; /* bit(s) in CLKGR0 */
+ uint32_t clk1; /* bit(s) in CLKGR1 */
} apbus_dev_t;
static const apbus_dev_t apbus_devs[] = {
- { "dwctwo", JZ_DWC2_BASE, 21},
- { "ohci", JZ_OHCI_BASE, 5 },
- { "ehci", JZ_EHCI_BASE, 20},
- { "dme", JZ_DME_BASE, -1}, /* irq via gpio abuse */
- { "jzgpio", JZ_GPIO_A_BASE, 17},
- { "jzgpio", JZ_GPIO_B_BASE, 16},
- { "jzgpio", JZ_GPIO_C_BASE, 15},
- { "jzgpio", JZ_GPIO_D_BASE, 14},
- { "jzgpio", JZ_GPIO_E_BASE, 13},
- { "jzgpio", JZ_GPIO_F_BASE, 12},
- { "jziic", JZ_SMB0_BASE, 60},
- { "jziic", JZ_SMB1_BASE, 59},
- { "jziic", JZ_SMB2_BASE, 58},
- { "jziic", JZ_SMB3_BASE, 57},
- { "jziic", JZ_SMB4_BASE, 56},
- { "jzfb", -1, -1},
- { NULL, -1, -1}
+ { "dwctwo", JZ_DWC2_BASE, 21, CLK_OTG0 | CLK_UHC, CLK_OTG1},
+ { "ohci", JZ_OHCI_BASE, 5, CLK_UHC, 0},
+ { "ehci", JZ_EHCI_BASE, 20, CLK_UHC, 0},
+ { "dme", JZ_DME_BASE, -1, 0, 0},
+ { "jzgpio", JZ_GPIO_A_BASE, 17, 0, 0},
+ { "jzgpio", JZ_GPIO_B_BASE, 16, 0, 0},
+ { "jzgpio", JZ_GPIO_C_BASE, 15, 0, 0},
+ { "jzgpio", JZ_GPIO_D_BASE, 14, 0, 0},
+ { "jzgpio", JZ_GPIO_E_BASE, 13, 0, 0},
+ { "jzgpio", JZ_GPIO_F_BASE, 12, 0, 0},
+ { "jziic", JZ_SMB0_BASE, 60, CLK_SMB0, 0},
+ { "jziic", JZ_SMB1_BASE, 59, CLK_SMB1, 0},
+ { "jziic", JZ_SMB2_BASE, 58, CLK_SMB2, 0},
+ { "jziic", JZ_SMB3_BASE, 57, 0, CLK_SMB3},
+ { "jziic", JZ_SMB4_BASE, 56, 0, CLK_SMB4},
+ { "jzfb", JZ_LCDC0_BASE, 31, CLK_LCD, CLK_HDMI},
+ { NULL, -1, -1, 0, 0}
};
void
@@ -144,20 +146,9 @@
/* enable clocks */
reg = readreg(JZ_CLKGR1);
- reg &= ~(1 << 0); /* SMB3 clock */
- reg &= ~(1 << 8); /* OTG1 clock */
- reg &= ~(1 << 11); /* AHB_MON clock */
- reg &= ~(1 << 12); /* SMB4 clock */
+ reg &= ~CLK_AHB_MON; /* AHB_MON clock */
writereg(JZ_CLKGR1, reg);
- reg = readreg(JZ_CLKGR0);
- reg &= ~(1 << 2); /* OTG0 clock */
- reg &= ~(1 << 5); /* SMB0 clock */
- reg &= ~(1 << 6); /* SMB1 clock */
- reg &= ~(1 << 24); /* UHC clock */
- reg &= ~(1 << 25); /* SMB2 clock */
- writereg(JZ_CLKGR0, reg);
-
/* wake up the USB part */
reg = readreg(JZ_OPCR);
reg |= OPCR_SPENDN0 | OPCR_SPENDN1;
@@ -206,6 +197,19 @@
aa.aa_bst = apbus_memt;
aa.aa_pclk = pclk;
+ /* enable clocks as needed */
+ if (adv->clk0 != 0) {
+ reg = readreg(JZ_CLKGR0);
+ reg &= ~adv->clk0;
+ writereg(JZ_CLKGR0, reg);
+ }
+
+ if (adv->clk1 != 0) {
+ reg = readreg(JZ_CLKGR1);
+ reg &= ~adv->clk1;
+ writereg(JZ_CLKGR1, reg);
+ }
+
(void) config_found_ia(self, "apbus", &aa, apbus_print);
}
}
Home |
Main Index |
Thread Index |
Old Index