Module Name: src Committed By: riz Date: Tue Dec 11 04:44:03 UTC 2012
Modified Files: src/sys/arch/arm/marvell [netbsd-6]: mvsoc.c mvsocreg.h Log Message: sys/arch/arm/marvell/mvsoc.c patch sys/arch/arm/marvell/mvsocreg.h patch Add CLKGATING_BIT, enable it for some 88F6281 devices, and don't configure devices if their clock is disabled. [msaitoh, ticket #737] To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.5.2.1 src/sys/arch/arm/marvell/mvsoc.c cvs rdiff -u -r1.2 -r1.2.12.1 src/sys/arch/arm/marvell/mvsocreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/marvell/mvsoc.c diff -u src/sys/arch/arm/marvell/mvsoc.c:1.5 src/sys/arch/arm/marvell/mvsoc.c:1.5.2.1 --- src/sys/arch/arm/marvell/mvsoc.c:1.5 Sun Feb 12 16:34:07 2012 +++ src/sys/arch/arm/marvell/mvsoc.c Tue Dec 11 04:44:02 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: mvsoc.c,v 1.5 2012/02/12 16:34:07 matt Exp $ */ +/* $NetBSD: mvsoc.c,v 1.5.2.1 2012/12/11 04:44:02 riz Exp $ */ /* * Copyright (c) 2007, 2008 KIYOHARA Takashi * All rights reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.5 2012/02/12 16:34:07 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mvsoc.c,v 1.5.2.1 2012/12/11 04:44:02 riz Exp $"); #include "opt_cputypes.h" #include "opt_mvsoc.h" @@ -193,6 +193,7 @@ static const struct mvsoc_periph { int unit; bus_size_t offset; int irq; + uint32_t clkpwr_bit; } mvsoc_periphs[] = { #if defined(ORION) { ORION_1(88F1181), "mvsoctmr",0, MVSOC_TMR_BASE, IRQ_DEFAULT }, @@ -333,15 +334,23 @@ static const struct mvsoc_periph { { KIRKWOOD(88F6281),"mvsocrtc",0, KIRKWOOD_RTC_BASE,IRQ_DEFAULT }, { KIRKWOOD(88F6281),"com", 0, MVSOC_COM0_BASE, KIRKWOOD_IRQ_UART0INT }, { KIRKWOOD(88F6281),"com", 1, MVSOC_COM1_BASE, KIRKWOOD_IRQ_UART1INT }, - { KIRKWOOD(88F6281),"ehci", 0, KIRKWOOD_USB_BASE,KIRKWOOD_IRQ_USB0CNT }, + { KIRKWOOD(88F6281),"ehci", 0, KIRKWOOD_USB_BASE,KIRKWOOD_IRQ_USB0CNT, + MVSOC_MLMB_CLKGATING_BIT(3) }, // { KIRKWOOD(88F6281),"gtidmac", 0, KIRKWOOD_IDMAC_BASE,? }, { KIRKWOOD(88F6281),"gttwsi", 0, MVSOC_TWSI_BASE, KIRKWOOD_IRQ_TWSI }, - { KIRKWOOD(88F6281),"mvcesa", 0, KIRKWOOD_CESA_BASE,KIRKWOOD_IRQ_SECURITYINT}, - { KIRKWOOD(88F6281),"mvgbec", 0, KIRKWOOD_GBE0_BASE,IRQ_DEFAULT }, - { KIRKWOOD(88F6281),"mvgbec", 1, KIRKWOOD_GBE1_BASE,IRQ_DEFAULT }, - { KIRKWOOD(88F6281),"mvpex", 0, MVSOC_PEX_BASE, KIRKWOOD_IRQ_PEX0INT }, - { KIRKWOOD(88F6281),"mvsata", 0, KIRKWOOD_SATAHC_BASE,KIRKWOOD_IRQ_SATA }, - { KIRKWOOD(88F6281),"mvsdio", 0, KIRKWOOD_SDIO_BASE,KIRKWOOD_IRQ_SDIOINT }, + { KIRKWOOD(88F6281),"mvcesa", 0, KIRKWOOD_CESA_BASE,KIRKWOOD_IRQ_SECURITYINT, + MVSOC_MLMB_CLKGATING_BIT(17) }, + { KIRKWOOD(88F6281),"mvgbec", 0, KIRKWOOD_GBE0_BASE,IRQ_DEFAULT, + MVSOC_MLMB_CLKGATING_BIT(0) }, + { KIRKWOOD(88F6281),"mvgbec", 1, KIRKWOOD_GBE1_BASE,IRQ_DEFAULT, + MVSOC_MLMB_CLKGATING_BIT(19) }, + { KIRKWOOD(88F6281),"mvpex", 0, MVSOC_PEX_BASE, KIRKWOOD_IRQ_PEX0INT, + MVSOC_MLMB_CLKGATING_BIT(2) }, + { KIRKWOOD(88F6281),"mvsata", 0, KIRKWOOD_SATAHC_BASE,KIRKWOOD_IRQ_SATA, + MVSOC_MLMB_CLKGATING_BIT(14) | + MVSOC_MLMB_CLKGATING_BIT(15) }, + { KIRKWOOD(88F6281),"mvsdio", 0, KIRKWOOD_SDIO_BASE,KIRKWOOD_IRQ_SDIOINT, + MVSOC_MLMB_CLKGATING_BIT(4) }, #endif #if defined(MV78XX0) @@ -381,6 +390,7 @@ mvsoc_attach(device_t parent, device_t s struct marvell_attach_args mva; uint16_t model; uint8_t rev; + uint32_t clkpwr, clkpwrbit; int i; sc->sc_dev = self; @@ -420,6 +430,20 @@ mvsoc_attach(device_t parent, device_t s if (mvsoc_periphs[i].model != model) continue; + /* Skip clock disabled devices */ + clkpwrbit = mvsoc_periphs[i].clkpwr_bit; + if (clkpwrbit != 0) { + clkpwr = read_mlmbreg(MVSOC_MLMB_CLKGATING); + + if ((clkpwr & clkpwrbit) == 0) { + aprint_normal("%s: %s%d clock disabled\n", + device_xname(self), + mvsoc_periphs[i].name, + mvsoc_periphs[i].unit); + continue; + } + } + mva.mva_name = mvsoc_periphs[i].name; mva.mva_model = model; mva.mva_revision = rev; Index: src/sys/arch/arm/marvell/mvsocreg.h diff -u src/sys/arch/arm/marvell/mvsocreg.h:1.2 src/sys/arch/arm/marvell/mvsocreg.h:1.2.12.1 --- src/sys/arch/arm/marvell/mvsocreg.h:1.2 Tue Feb 1 22:54:24 2011 +++ src/sys/arch/arm/marvell/mvsocreg.h Tue Dec 11 04:44:03 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: mvsocreg.h,v 1.2 2011/02/01 22:54:24 jakllsch Exp $ */ +/* $NetBSD: mvsocreg.h,v 1.2.12.1 2012/12/11 04:44:03 riz Exp $ */ /* * Copyright (c) 2007, 2008 KIYOHARA Takashi * All rights reserved. @@ -110,6 +110,9 @@ #define MVSOC_MLMB_MLMBICR 0x110 /*Mb-L to Mb Bridge Intr Cause*/ #define MVSOC_MLMB_MLMBIMR 0x114 /*Mb-L to Mb Bridge Intr Mask */ +#define MVSOC_MLMB_CLKGATING 0x11c /* Clock Gating Control */ +#define MVSOC_MLMB_CLKGATING_BIT(n) (1 << (n)) + #define MVSOC_MLMB_L2CFG 0x128 /* L2 Cache Config */ #define MVSOC_TMR_BASE (MVSOC_MLMB_BASE + 0x0300)