From mboxrd@z Thu Jan 1 00:00:00 1970 From: viresh.kumar@st.com (Viresh KUMAR) Date: Wed, 10 Mar 2010 11:31:22 +0530 Subject: [PATCH 02/11] ST SPEAr: Added basic header files for SPEAr3xx machine family In-Reply-To: <63386a3d1003091242i5e8786e4n1fe0d83b97d51e3b@mail.gmail.com> References: <1267592861-26911-1-git-send-email-viresh.kumar@st.com> <1267592861-26911-2-git-send-email-viresh.kumar@st.com> <1267592861-26911-3-git-send-email-viresh.kumar@st.com> <63386a3d1003091242i5e8786e4n1fe0d83b97d51e3b@mail.gmail.com> Message-ID: <4B9735B2.1030108@st.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Linus, On 3/10/2010 2:12 AM, Linus Walleij wrote: > Hi Viresh, > > 2010/3/3 Viresh KUMAR : >> (...) >> diff --git a/arch/arm/mach-spear3xx/include/mach/debug-macro.S b/arch/arm/mach-spear3xx/include/mach/debug-macro.S >> + .macro busyuart, rd, rx >> +1002: ldr \rd, [\rx, #UART01x_FR] @ FLAG REGISTER >> + tst \rd, #UART011_FR_TXFE @ TX_EMPTY >> + beq 1002b >> + .endm > > Apart from that the base offset is named SPEAR6XX_ICM1_UART0_BASE > this is the same file in 3xx and 6xx series. Can you rename the base offset > to SPEARXXX_ICM1_UART0_BASE or something similar in both machines > and move this file to plat-spear/include/plat/debug-macro.S? OK. This will be done. > > You'll probably need mach/include/mach/debug-macro.S to > #include I think. > I think so. >> diff --git a/arch/arm/mach-spear6xx/include/mach/dma.h b/arch/arm/mach-spear6xx/include/mach/dma.h >> new file mode 100644 >> index 0000000..c4afd17 >> --- /dev/null >> +++ b/arch/arm/mach-spear6xx/include/mach/dma.h >> @@ -0,0 +1,17 @@ >> +/* >> + * arch/arm/mach-spear6xx/include/mach/dma.h >> + * >> + * Generic SPEAr6XX machine family DMA support >> + * >> + * Copyright (C) 2009 ST Microelectronics >> + * Rajeev Kumar >> + * >> + * 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. >> + */ >> + >> +#ifndef __ASM_ARCH_DMA_H >> +#define __ASM_ARCH_DMA_H >> + >> +#endif /* __ASM_ARCH_DMA_H */ > > Is this file needed? (Perhaps...) Anyway, the name of that #define should > probably be __MACH_DMA_H if it shall match the filepath. > It is not required now, was required by earlier kernels. will be removed. >> (...) >> diff --git a/arch/arm/mach-spear3xx/include/mach/misc_regs.h b/arch/arm/mach-spear3xx/include/mach/misc_regs.h >> new file mode 100755 >> index 0000000..d83dae9 >> +#ifndef __ASM_MACH_MISC_REGS_H >> +#define __ASM_MACH_MISC_REGS_H > > It's not __ASM_MACH* really, but just __MACH* if it's supposed to follow > the filename... Will be done globally. > >> + >> +#include >> + >> +#define MISC_BASE VA_SPEAR3XX_ICM3_MISC_REG_BASE >> + >> +#define SOC_CFG_CTR ((unsigned int *)(MISC_BASE + 0x000)) >> +#define DIAG_CFG_CTR ((unsigned int *)(MISC_BASE + 0x004)) >> +#define PLL1_CTR ((unsigned int *)(MISC_BASE + 0x008)) >> +#define PLL1_FRQ ((unsigned int *)(MISC_BASE + 0x00C)) >> +#define PLL1_MOD ((unsigned int *)(MISC_BASE + 0x010)) >> +#define PLL2_CTR ((unsigned int *)(MISC_BASE + 0x014)) >> +/* PLL_CTR register masks */ >> +#define PLL_ENABLE 2 >> +#define PLL_MODE_SHIFT 4 >> +#define PLL_MODE_MASK 0x3 >> +#define PLL_MODE_NORMAL 0 >> +#define PLL_MODE_FRACTION 1 >> +#define PLL_MODE_DITH_DSB 2 >> +#define PLL_MODE_DITH_SSB 3 >> + >> +#define PLL2_FRQ ((unsigned int *)(MISC_BASE + 0x018)) >> +/* PLL FRQ register masks */ >> +#define PLL_DIV_N_SHIFT 0 >> +#define PLL_DIV_N_MASK 0xFF >> +#define PLL_DIV_P_SHIFT 8 >> +#define PLL_DIV_P_MASK 0x7 >> +#define PLL_NORM_FDBK_M_SHIFT 24 >> +#define PLL_NORM_FDBK_M_MASK 0xFF >> +#define PLL_DITH_FDBK_M_SHIFT 16 >> +#define PLL_DITH_FDBK_M_MASK 0xFFFF >> + >> +#define PLL2_MOD ((unsigned int *)(MISC_BASE + 0x01C)) >> +#define PLL_CLK_CFG ((unsigned int *)(MISC_BASE + 0x020)) >> +#define CORE_CLK_CFG ((unsigned int *)(MISC_BASE + 0x024)) >> +/* CORE CLK CFG register masks */ >> +#define PLL_HCLK_RATIO_SHIFT 10 >> +#define PLL_HCLK_RATIO_MASK 0x3 >> +#define HCLK_PCLK_RATIO_SHIFT 8 >> +#define HCLK_PCLK_RATIO_MASK 0x3 >> + >> +#define PERIP_CLK_CFG ((unsigned int *)(MISC_BASE + 0x028)) >> +/* PERIP_CLK_CFG register masks */ >> +#define UART_CLK_SHIFT 4 >> +#define UART_CLK_MASK 0x1 >> +#define FIRDA_CLK_SHIFT 5 >> +#define FIRDA_CLK_MASK 0x3 >> +#define GPT0_CLK_SHIFT 8 >> +#define GPT1_CLK_SHIFT 11 >> +#define GPT2_CLK_SHIFT 12 >> +#define GPT_CLK_MASK 0x1 >> +#define AUX_CLK_PLL3_MASK 0 >> +#define AUX_CLK_PLL1_MASK 1 >> + >> +#define PERIP1_CLK_ENB ((unsigned int *)(MISC_BASE + 0x02C)) >> +/* PERIP1_CLK_ENB register masks */ >> +#define UART_CLK_ENB 3 >> +#define SSP_CLK_ENB 5 >> +#define I2C_CLK_ENB 7 >> +#define JPEG_CLK_ENB 8 >> +#define FIRDA_CLK_ENB 10 >> +#define GPT1_CLK_ENB 11 >> +#define GPT2_CLK_ENB 12 >> +#define ADC_CLK_ENB 15 >> +#define RTC_CLK_ENB 17 >> +#define GPIO_CLK_ENB 18 >> +#define DMA_CLK_ENB 19 >> +#define SMI_CLK_ENB 21 >> +#define GMAC_CLK_ENB 23 >> +#define USBD_CLK_ENB 24 >> +#define USBH_CLK_ENB 25 >> +#define C3_CLK_ENB 31 >> + >> +#define SOC_CORE_ID ((unsigned int *)(MISC_BASE + 0x030)) >> +#define RAS_CLK_ENB ((unsigned int *)(MISC_BASE + 0x034)) >> +#define PERIP1_SOF_RST ((unsigned int *)(MISC_BASE + 0x038)) >> +/* PERIP1_SOF_RST register masks */ >> +#define JPEG_SOF_RST 8 >> + >> +#define SOC_USER_ID ((unsigned int *)(MISC_BASE + 0x03C)) >> +#define RAS_SOF_RST ((unsigned int *)(MISC_BASE + 0x040)) >> +#define PRSC1_CLK_CFG ((unsigned int *)(MISC_BASE + 0x044)) >> +#define PRSC2_CLK_CFG ((unsigned int *)(MISC_BASE + 0x048)) >> +#define PRSC3_CLK_CFG ((unsigned int *)(MISC_BASE + 0x04C)) >> +/* gpt synthesizer register masks */ >> +#define GPT_MSCALE_SHIFT 0 >> +#define GPT_MSCALE_MASK 0xFFF >> +#define GPT_NSCALE_SHIFT 12 >> +#define GPT_NSCALE_MASK 0xF >> + >> +#define AMEM_CLK_CFG ((unsigned int *)(MISC_BASE + 0x050)) >> +#define EXPI_CLK_CFG ((unsigned int *)(MISC_BASE + 0x054)) >> +#define CLCD_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x05C)) >> +#define FIRDA_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x060)) >> +#define UART_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x064)) >> +#define GMAC_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x068)) >> +#define RAS1_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x06C)) >> +#define RAS2_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x070)) >> +#define RAS3_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x074)) >> +#define RAS4_CLK_SYNT ((unsigned int *)(MISC_BASE + 0x078)) >> +/* aux clk synthesiser register masks for irda to ras4 */ >> +#define AUX_EQ_SEL_SHIFT 30 >> +#define AUX_EQ_SEL_MASK 1 >> +#define AUX_EQ1_SEL 0 >> +#define AUX_EQ2_SEL 1 >> +#define AUX_XSCALE_SHIFT 16 >> +#define AUX_XSCALE_MASK 0xFFF >> +#define AUX_YSCALE_SHIFT 0 >> +#define AUX_YSCALE_MASK 0xFFF >> + >> +#define ICM1_ARB_CFG ((unsigned int *)(MISC_BASE + 0x07C)) >> +#define ICM2_ARB_CFG ((unsigned int *)(MISC_BASE + 0x080)) >> +#define ICM3_ARB_CFG ((unsigned int *)(MISC_BASE + 0x084)) >> +#define ICM4_ARB_CFG ((unsigned int *)(MISC_BASE + 0x088)) >> +#define ICM5_ARB_CFG ((unsigned int *)(MISC_BASE + 0x08C)) >> +#define ICM6_ARB_CFG ((unsigned int *)(MISC_BASE + 0x090)) >> +#define ICM7_ARB_CFG ((unsigned int *)(MISC_BASE + 0x094)) >> +#define ICM8_ARB_CFG ((unsigned int *)(MISC_BASE + 0x098)) >> +#define ICM9_ARB_CFG ((unsigned int *)(MISC_BASE + 0x09C)) >> +#define DMA_CHN_CFG ((unsigned int *)(MISC_BASE + 0x0A0)) >> +#define USB2_PHY_CFG ((unsigned int *)(MISC_BASE + 0x0A4)) >> +#define GMAC_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0A8)) >> +#define EXPI_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0AC)) >> +#define PRC1_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0C0)) >> +#define PRC2_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0C4)) >> +#define PRC3_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0C8)) >> +#define PRC4_LOCK_CTR ((unsigned int *)(MISC_BASE + 0x0CC)) >> +#define PRC1_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0D0)) >> +#define PRC2_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0D4)) >> +#define PRC3_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0D8)) >> +#define PRC4_IRQ_CTR ((unsigned int *)(MISC_BASE + 0x0DC)) >> +#define PWRDOWN_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0E0)) >> +#define COMPSSTL_1V8_CFG ((unsigned int *)(MISC_BASE + 0x0E4)) >> +#define COMPSSTL_2V5_CFG ((unsigned int *)(MISC_BASE + 0x0E8)) >> +#define COMPCOR_3V3_CFG ((unsigned int *)(MISC_BASE + 0x0EC)) >> +#define SSTLPAD_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0F0)) >> +#define BIST1_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0F4)) >> +#define BIST2_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0F8)) >> +#define BIST3_CFG_CTR ((unsigned int *)(MISC_BASE + 0x0FC)) >> +#define BIST4_CFG_CTR ((unsigned int *)(MISC_BASE + 0x100)) >> +#define BIST5_CFG_CTR ((unsigned int *)(MISC_BASE + 0x104)) >> +#define BIST1_STS_RES ((unsigned int *)(MISC_BASE + 0x108)) >> +#define BIST2_STS_RES ((unsigned int *)(MISC_BASE + 0x10C)) >> +#define BIST3_STS_RES ((unsigned int *)(MISC_BASE + 0x110)) >> +#define BIST4_STS_RES ((unsigned int *)(MISC_BASE + 0x114)) >> +#define BIST5_STS_RES ((unsigned int *)(MISC_BASE + 0x118)) >> +#define SYSERR_CFG_CTR ((unsigned int *)(MISC_BASE + 0x11C)) >> + >> +#endif /* __ASM_MACH_MISC_REGS_H */ > > Personally I like to push down these definitions into the actual driver files, > so that all PLL+CLK stuff goes into clock.c, all GPT stuff into timer.c etc. > It has the convenience of easily finding everything in a single file and > at the same time surely blocking some other driver from poking around > in the same registers. Background: This file defines miscellaneous registers for spear machines. They provide features like enabling/disabling peripherals, clocks, selecting clock sources, etc. I wanted to keep this file because, i didn't wanted people using same miscellaneous registers make different macros. It is actually like a module for machines, and so this can be kept separate. > > If you want to keep this file anyway, move it from mach-spear3xx/include/mach > to just mach-spear3xx and include like this: #include "misc_regs.h" and > thus avoid the entire drivers/* tree (etc) from being able to #include > > because surely any machine-specific special driver using these very > machine-specific > registers will be in mach-spear3xx/ anyway. Surely, any standard driver will not use them. Actually we have kept clock framework code common to different machines in plat-spear. And here we need to use misc_regs.h, for this reason i kept it in mach/include/mach. Is it Okay? > >> (...) >> diff --git a/arch/arm/mach-spear3xx/include/mach/system.h b/arch/arm/mach-spear3xx/include/mach/system.h >> new file mode 100644 >> index 0000000..b7bc53f >> + >> +#ifndef __ASM_MACH_SYSTEM_H >> +#define __ASM_MACH_SYSTEM_H > > Again __MACH_SYSTEM_H > >> + >> +#include >> +#include > > In regard to earlier comment: > #include OK. > >> +#include >> + >> +static inline void arch_idle(void) >> +{ >> + /* >> + * This should do all the clock switching >> + * and wait for interrupt tricks >> + */ >> + cpu_do_idle(); >> +} >> + >> +static inline void arch_reset(char mode, const char *cmd) >> +{ >> + if (mode == 's') { >> + /* software reset, Jump into ROM at address 0 */ >> + cpu_reset(0); >> + } else { >> + /* hardware reset, Use on-chip reset capability */ >> + sysctl_soft_reset(SPEAR3XX_ICM3_SYS_CTRL_BASE); >> + } >> +} >> + >> +#endif /* __ASM_MACH_SYSTEM_H */ > > Again this file is identical to the same file for 6xx. Define a generic > SPEAR_ICM3_SYS_CTRL_BASE or so and move to > plat-spear/include/plat/system.h > OK. > (I don't know how this works, perhaps you have to have a skeleton > mach/include/mach/system.h that will just #include > for this to work.) Yes. > >> diff --git a/arch/arm/mach-spear3xx/include/mach/timex.h b/arch/arm/mach-spear3xx/include/mach/timex.h >> new file mode 100644 >> index 0000000..29708db >> --- /dev/null >> +++ b/arch/arm/mach-spear3xx/include/mach/timex.h >> @@ -0,0 +1,19 @@ >> +/* >> + * arch/arm/mach-spear3xx/include/mach/timex.h >> + * >> + * SPEAr3XX machine family specific timex definitions >> + * >> + * Copyright (C) 2009 ST Microelectronics >> + * Viresh Kumar >> + * >> + * 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. >> + */ >> + >> +#ifndef __ASM_MACH_TIMEX_H >> +#define __ASM_MACH_TIMEX_H > > Again __MACH_TIMEX_H OK > >> + >> +#define CLOCK_TICK_RATE 48000000 >> + >> +#endif /* __ASM_MACH_TIMEX_H */ >> diff --git a/arch/arm/mach-spear3xx/include/mach/uncompress.h b/arch/arm/mach-spear3xx/include/mach/uncompress.h >> new file mode 100644 >> index 0000000..08ec3b1 >> --- /dev/null >> +++ b/arch/arm/mach-spear3xx/include/mach/uncompress.h >> @@ -0,0 +1,43 @@ >> +/* >> + * arch/arm/mach-spear3xx/include/mach/uncompress.h >> + * >> + * Serial port stubs for kernel decompress status messages >> + * >> + * Copyright (C) 2009 ST Microelectronics >> + * Viresh Kumar >> + * >> + * 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 >> +#include >> +#include >> + >> +#ifndef __ASM_MACH_UNCOMPRESS_H >> +#define __ASM_MACH_UNCOMPRESS_H >> +/* >> + * This does not append a newline >> + */ >> +static inline void putc(int c) >> +{ >> + void __iomem *base = (void __iomem *)SPEAR3XX_ICM1_UART_BASE; >> + >> + while (readl(base + UART01x_FR) & UART01x_FR_TXFF) >> + barrier(); >> + >> + writel(c, base + UART01x_DR); >> +} >> + >> +static inline void flush(void) >> +{ >> +} >> + >> +/* >> + * nothing to do >> + */ >> +#define arch_decomp_setup() >> +#define arch_decomp_wdog() >> + >> +#endif /* __ASM_MACH_UNCOMPRESS_H */ > > Apart from that the base offset is named SPEAR6XX_ICM1_UART0_BASE > this is the same file in 3xx and 6xx series. Can you rename the base offset > to SPEARXXX_ICM1_UART0_BASE or something similar in both machines > and move this file to plat-spear/include/plat/uncompress.h? OK > > (Perhaps mach/include/mach/uncompress.h has to contain a single > #include I haven't tested.) yes, this is required. > >> diff --git a/arch/arm/mach-spear3xx/include/mach/vmalloc.h b/arch/arm/mach-spear3xx/include/mach/vmalloc.h >> new file mode 100644 >> index 0000000..4f236f3 >> --- /dev/null >> +++ b/arch/arm/mach-spear3xx/include/mach/vmalloc.h >> @@ -0,0 +1,22 @@ >> +/* >> + * arch/arm/mach-spear3xx/include/mach/vmalloc.h >> + * >> + * Defining Vmalloc area for SPEAr3xx machine family >> + * >> + * Copyright (C) 2009 ST Microelectronics >> + * Viresh Kumar >> + * >> + * 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. >> + */ >> + >> +#ifndef __ASM_MACH_VMALLOC_H >> +#define __ASM_MACH_VMALLOC_H > > Again __MACH_VMALLOC_H > >> + >> +#include >> + >> +#define VMALLOC_SIZE (0x30000000) >> +#define VMALLOC_END (PAGE_OFFSET + VMALLOC_SIZE) >> + >> +#endif /* __ASM_MACH_VMALLOC_H */ > > This is exactly the same file as in spear6xx again move to plat-spear. > Might need a single #include > > Most comments on this file are in relation to the 6xx header files, so they > apply to that patch as well. Mostly "move to plat-spear" stuff. Just > replace in the proper places. > > (The entry-macro is unique for both platforms though!) OK. will be done. viresh kumar.