[PATCH 02/10] ARM S3C2416: Add address map and clock definitions for HSMMC0

Yauhen Kharuzhy jekhor at gmail.com
Tue Nov 30 03:21:52 EST 2010


On Tue, Nov 30, 2010 at 04:21:01PM +0900, Kukjin Kim wrote:
> Yauhen Kharuzhy wrote:
> > 
> > Define maps for HSMMC devices.
> > 
> > S3C2443 has one HSMMC device with base address 0x4A800000.
> 
> Hmm...according to data sheet, there are two SD/MMC on S3C2443.
> The base address of channel 0 is 0x4A800000 and channel 1 is 0x5A000000.
> So, need to update your patch.

No. 0x5A000000 is old-style SD Interface, HSMMC is SDHCI. They are
handled by different drivers.

> 
> > S3C2416 has HSMMC0 at 0x4AC00000 and HSMMC1 at 0x4A800000.
> > 
> > So suppose that S3C2443 has only HSMMC1.
> > 
> Hmm...
> 
> > Define clock for hsmmc0 device and register it.
> > 
> > Signed-off-by: Yauhen Kharuzhy <jekhor at gmail.com>
> 
> I meant you used different here so asked...anyway...
> 
> > ---
> >  arch/arm/mach-s3c2410/include/mach/irqs.h          |    4 ++--
> >  arch/arm/mach-s3c2410/include/mach/map.h           |    4 ++--
> >  .../mach-s3c2410/include/mach/regs-s3c2443-clock.h |    1 +
> >  arch/arm/mach-s3c2416/clock.c                      |   18
> +++++++++++++-----
> >  arch/arm/mach-s3c2443/Kconfig                      |    2 +-
> >  arch/arm/mach-s3c2443/clock.c                      |    4 ++--
> >  arch/arm/mach-s3c2443/mach-smdk2443.c              |    2 +-
> >  arch/arm/plat-s3c24xx/s3c2443-clock.c              |    2 +-
> >  8 files changed, 23 insertions(+), 14 deletions(-)
> > 
> > diff --git a/arch/arm/mach-s3c2410/include/mach/irqs.h b/arch/arm/mach-
> > s3c2410/include/mach/irqs.h
> > index 11bb0f0..e5a68ea 100644
> > --- a/arch/arm/mach-s3c2410/include/mach/irqs.h
> > +++ b/arch/arm/mach-s3c2410/include/mach/irqs.h
> > @@ -152,8 +152,8 @@
> > 
> >  #define IRQ_S3C2416_HSMMC0	S3C2410_IRQ(21)		/*
> > S3C2416/S3C2450 */
> > 
> > -#define IRQ_HSMMC0		IRQ_S3C2443_HSMMC
> > -#define IRQ_HSMMC1		IRQ_S3C2416_HSMMC0
> > +#define IRQ_HSMMC0		IRQ_S3C2416_HSMMC0
> > +#define IRQ_HSMMC1		IRQ_S3C2443_HSMMC
> > 
> Hmm...yeah, IRQ_HSMMC0 is (21) and IRQ_HSMMC1 is (20).
> 
> >  #define IRQ_S3C2443_LCD1	S3C2410_IRQSUB(14)
> >  #define IRQ_S3C2443_LCD2	S3C2410_IRQSUB(15)
> > diff --git a/arch/arm/mach-s3c2410/include/mach/map.h b/arch/arm/mach-
> > s3c2410/include/mach/map.h
> > index cd3983a..25bbf5a 100644
> > --- a/arch/arm/mach-s3c2410/include/mach/map.h
> > +++ b/arch/arm/mach-s3c2410/include/mach/map.h
> > @@ -112,8 +112,8 @@
> >  #define S3C_PA_IIC          S3C2410_PA_IIC
> >  #define S3C_PA_UART	    S3C24XX_PA_UART
> >  #define S3C_PA_USBHOST	S3C2410_PA_USBHOST
> > -#define S3C_PA_HSMMC0	    S3C2443_PA_HSMMC
> > -#define S3C_PA_HSMMC1	    S3C2416_PA_HSMMC0
> > +#define S3C_PA_HSMMC0	    S3C2416_PA_HSMMC0
> > +#define S3C_PA_HSMMC1	    S3C2443_PA_HSMMC
> 
> Please refer to my previous comment.
> S3C2443 has 2 channel.
> 
> >  #define S3C_PA_WDT	    S3C2410_PA_WATCHDOG
> >  #define S3C_PA_NAND	    S3C24XX_PA_NAND
> > 
> > diff --git a/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h
> > b/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h
> > index 101aeea..44494a5 100644
> > --- a/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h
> > +++ b/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h
> > @@ -86,6 +86,7 @@
> >  #define S3C2443_HCLKCON_LCDC		(1<<9)
> >  #define S3C2443_HCLKCON_USBH		(1<<11)
> >  #define S3C2443_HCLKCON_USBD		(1<<12)
> > +#define S3C2416_HCLKCON_HSMMC0		(1<<15)
> 
> Right.
> 
> >  #define S3C2443_HCLKCON_HSMMC		(1<<16)
> >  #define S3C2443_HCLKCON_CFC		(1<<17)
> >  #define S3C2443_HCLKCON_SSMC		(1<<18)
> > diff --git a/arch/arm/mach-s3c2416/clock.c b/arch/arm/mach-s3c2416/clock.c
> > index 7ccf5a2..3b02d85 100644
> > --- a/arch/arm/mach-s3c2416/clock.c
> > +++ b/arch/arm/mach-s3c2416/clock.c
> > @@ -38,12 +38,11 @@ static unsigned int armdiv[8] = {
> >  	[7] = 8,
> >  };
> > 
> > -/* ID to hardware numbering, 0 is HSMMC1, 1 is HSMMC0 */
> 
> Why remove?
Now 0 is HSMMC0 and 1 is HSMMC1. I think that this should be obviously
without comment.
> 
> >  static struct clksrc_clk hsmmc_div[] = {
> >  	[0] = {
> >  		.clk = {
> >  			.name	= "hsmmc-div",
> > -			.id	= 1,
> > +			.id	= 0,
> >  			.parent	= &clk_esysclk.clk,
> >  		},
> >  		.reg_div = { .reg = S3C2416_CLKDIV2, .size = 2, .shift = 6
> },
> > @@ -51,7 +50,7 @@ static struct clksrc_clk hsmmc_div[] = {
> >  	[1] = {
> >  		.clk = {
> >  			.name	= "hsmmc-div",
> > -			.id	= 0,
> > +			.id	= 1,
> >  			.parent	= &clk_esysclk.clk,
> >  		},
> >  		.reg_div = { .reg = S3C2443_CLKDIV1, .size = 2, .shift = 6
> },
> > @@ -61,7 +60,7 @@ static struct clksrc_clk hsmmc_div[] = {
> >  static struct clksrc_clk hsmmc_mux[] = {
> >  	[0] = {
> >  		.clk	= {
> > -			.id	= 1,
> > +			.id	= 0,
> >  			.name	= "hsmmc-if",
> >  			.ctrlbit = (1 << 6),
> >  			.enable = s3c2443_clkcon_enable_s,
> > @@ -77,7 +76,7 @@ static struct clksrc_clk hsmmc_mux[] = {
> >  	},
> >  	[1] = {
> >  		.clk	= {
> > -			.id	= 0,
> > +			.id	= 1,
> >  			.name	= "hsmmc-if",
> >  			.ctrlbit = (1 << 12),
> >  			.enable = s3c2443_clkcon_enable_s,
> > @@ -93,6 +92,13 @@ static struct clksrc_clk hsmmc_mux[] = {
> >  	},
> >  };
> > 
> > +static struct clk hsmmc0_clk = {
> > +	.name		= "hsmmc",
> > +	.id		= 0,
> > +	.parent		= &clk_h,
> > +	.enable		= s3c2443_clkcon_enable_h,
> > +	.ctrlbit	= S3C2416_HCLKCON_HSMMC0,
> > +};
> > 
> >  static inline unsigned int s3c2416_fclk_div(unsigned long clkcon0)
> >  {
> > @@ -130,6 +136,8 @@ void __init s3c2416_init_clocks(int xtal)
> >  	for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++)
> >  		s3c_register_clksrc(clksrcs[ptr], 1);
> > 
> > +	s3c24xx_register_clock(&hsmmc0_clk);
> > +
> >  	s3c_pwmclk_init();
> > 
> >  }
> > diff --git a/arch/arm/mach-s3c2443/Kconfig b/arch/arm/mach-s3c2443/Kconfig
> > index 4fef723..0b7f0d6 100644
> > --- a/arch/arm/mach-s3c2443/Kconfig
> > +++ b/arch/arm/mach-s3c2443/Kconfig
> > @@ -24,7 +24,7 @@ config MACH_SMDK2443
> >  	bool "SMDK2443"
> >  	select CPU_S3C2443
> >  	select MACH_SMDK
> > -	select S3C_DEV_HSMMC
> > +	select S3C_DEV_HSMMC1
> 
> Please check S3C2443's HSMMC...
> 
> >  	help
> >  	  Say Y here if you are using an SMDK2443
> > 
> > diff --git a/arch/arm/mach-s3c2443/clock.c b/arch/arm/mach-s3c2443/clock.c
> > index 0c3c0c8..f4ec6d5 100644
> > --- a/arch/arm/mach-s3c2443/clock.c
> > +++ b/arch/arm/mach-s3c2443/clock.c
> > @@ -196,7 +196,7 @@ static struct clksrc_clk clk_hsspi = {
> >  static struct clksrc_clk clk_hsmmc_div = {
> >  	.clk	= {
> >  		.name		= "hsmmc-div",
> > -		.id		= -1,
> > +		.id		= 1,
> >  		.parent		= &clk_esysclk.clk,
> >  	},
> >  	.reg_div = { .reg = S3C2443_CLKDIV1, .size = 2, .shift = 6 },
> > @@ -231,7 +231,7 @@ static int s3c2443_enable_hsmmc(struct clk *clk, int
> > enable)
> > 
> >  static struct clk clk_hsmmc = {
> >  	.name		= "hsmmc-if",
> > -	.id		= -1,
> > +	.id		= 1,
> >  	.parent		= &clk_hsmmc_div.clk,
> >  	.enable		= s3c2443_enable_hsmmc,
> >  	.ops		= &(struct clk_ops) {
> > diff --git a/arch/arm/mach-s3c2443/mach-smdk2443.c b/arch/arm/mach-
> > s3c2443/mach-smdk2443.c
> > index 4337f0a..d3b2922 100644
> > --- a/arch/arm/mach-s3c2443/mach-smdk2443.c
> > +++ b/arch/arm/mach-s3c2443/mach-smdk2443.c
> > @@ -105,7 +105,7 @@ static struct s3c2410_uartcfg smdk2443_uartcfgs[]
> > __initdata = {
> >  static struct platform_device *smdk2443_devices[] __initdata = {
> >  	&s3c_device_wdt,
> >  	&s3c_device_i2c0,
> > -	&s3c_device_hsmmc0,
> > +	&s3c_device_hsmmc1,
> >  #ifdef CONFIG_SND_SOC_SMDK2443_WM9710
> >  	&s3c_device_ac97,
> >  #endif
> > diff --git a/arch/arm/plat-s3c24xx/s3c2443-clock.c b/arch/arm/plat-
> > s3c24xx/s3c2443-clock.c
> > index 461f070..82f2d4a 100644
> > --- a/arch/arm/plat-s3c24xx/s3c2443-clock.c
> > +++ b/arch/arm/plat-s3c24xx/s3c2443-clock.c
> > @@ -271,7 +271,7 @@ static struct clk init_clocks[] = {
> >  		.ctrlbit	= S3C2443_HCLKCON_DMA5,
> >  	}, {
> >  		.name		= "hsmmc",
> > -		.id		= 0,
> > +		.id		= 1,
> >  		.parent		= &clk_h,
> >  		.enable		= s3c2443_clkcon_enable_h,
> >  		.ctrlbit	= S3C2443_HCLKCON_HSMMC,
> > --
> 

-- 
Yauhen Kharuzhy		jekhor _at_ gmail.com
			JID: jek at jabber.ru

A: No
Q: Should I quote below my post?



More information about the linux-arm-kernel mailing list