All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/1] arm: add uart dcc support
Date: Sat, 7 Feb 2009 15:38:22 +0100	[thread overview]
Message-ID: <20090207143822.GA17280@game.jcrosoft.org> (raw)
In-Reply-To: <498D869A.2060909@googlemail.com>

On 14:03 Sat 07 Feb     , Dirk Behme wrote:
> Dear Jean-Christophe,
>
> Jean-Christophe PLAGNIOL-VILLARD wrote:
>
> Do you like to add some words going to git describing this patch here?  
> E.g. what DCC is and what it might be used for?
You maybe need to read arm documentation
>
>> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
>> ---
>>  common/devices.c         |    3 +
>>  drivers/serial/Makefile  |    1 +
>>  drivers/serial/arm_dcc.c |  270 ++++++++++++++++++++++++++++++++++++++++++++++
>>  include/devices.h        |    3 +
>>  lib_arm/board.c          |    3 +
>>  5 files changed, 280 insertions(+), 0 deletions(-)
>>  create mode 100644 drivers/serial/arm_dcc.c
>>
>> diff --git a/common/devices.c b/common/devices.c
>> index 38f1bbc..ba53c9b 100644
>> --- a/common/devices.c
>> +++ b/common/devices.c
>> @@ -215,6 +215,9 @@ int devices_init (void)
>>  	/* Initialize the list */
>>  	INIT_LIST_HEAD(&(devs.list));
>>  +#ifdef CONFIG_ARM_DCC_MULTI
>> +	drv_arm_dcc_init ();
>> +#endif
>>  #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
>>  	i2c_init (CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
>>  #endif
>> diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
>> index b6fd0d7..af121a2 100644
>> --- a/drivers/serial/Makefile
>> +++ b/drivers/serial/Makefile
>> @@ -25,6 +25,7 @@ include $(TOPDIR)/config.mk
>>   LIB	:= $(obj)libserial.a
>>  +COBJS-$(CONFIG_ARM_DCC) += arm_dcc.o
>
> Above you use CONFIG_ARM_DCC_MULTI, here you use CONFIG_ARM_DCC.
maybe you need to re-read the code
it's an option of the driver
>
> Why do you introduce two (new?) macros? Wouldn't one be sufficient?
no you may also need to read u-boot implementation about multiple serial and
std serial

which both are implemented here
>
> For which board do want to enable this? There is no enable of these two 
> macros in this patch?
at91 which will come after or nearly any arm cpu
> --- /dev/null
>> +++ b/drivers/serial/arm_dcc.c
>> @@ -0,0 +1,270 @@
>> +/*
>> + * Copyright (C) 2004-2007 ARM Limited.
>> + * Copyright (C) 2008 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
>
> 2009?
no I've wrote it in 2008
>
>> + *
>> + * This program is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU General Public License version 2
>> + * as published by the Free Software Foundation.
>> + *
>> + * 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.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
>> + *
>> + * As a special exception, if other files instantiate templates or use macros
>> + * or inline functions from this file, or you compile this file and link it
>> + * with other works to produce a work based on this file, this file does not
>> + * by itself cause the resulting work to be covered by the GNU General Public
>> + * License. However the source code for this file must still be made available
>> + * in accordance with section (3) of the GNU General Public License.
>> +
>> + * This exception does not invalidate any other reasons why a work based on
>> + * this file might be covered by the GNU General Public License.
>> + */
>> +
>> +#include <common.h>
>> +#include <devices.h>
>> +
>> +#define DCC_ARM9_RBIT	(1 << 0)
>> +#define DCC_ARM9_WBIT	(1 << 1)
>> +#define DCC_ARM10_RBIT	(1 << 7)
>> +#define DCC_ARM10_WBIT	(1 << 6)
>> +#define DCC_ARM11_RBIT	(1 << 30)
>> +#define DCC_ARM11_WBIT	(1 << 29)
>
> Should something like this go to a header file?
>
>> +#define read_core_id(x)	do {						\
>> +		__asm__ ("mrc p15, 0, %0, c0, c0, 0\n" : "=r" (x));	\
>> +		x = (x >> 4) & 0xFFF;					\
>
> What's about macros instead of hard coded values?
no way it's a mask
>
>> +		} while (0);
>> +
>> +/*
>> + * ARM9
>> + */
>> +#define write_arm9_dcc(x)	\
>> +		__asm__ volatile ("mcr p14, 0, %0, c1, c0, 0\n" : : "r" (x))
>> +
>> +#define read_arm9_dcc(x)	\
>> +		__asm__ volatile ("mrc p14, 0, %0, c1, c0, 0\n" : "=r" (x))
>> +
>> +#define status_arm9_dcc(x)	\
>> +		__asm__ volatile ("mrc p14, 0, %0, c0, c0, 0\n" : "=r" (x))
>> +
>> +#define can_read_arm9_dcc(x)	do {	\
>> +		status_arm9_dcc(x);	\
>> +		x &= DCC_ARM9_RBIT;	\
>> +		} while (0);
>> +
>> +#define can_write_arm9_dcc(x)	do {	\
>> +		status_arm9_dcc(x);	\
>> +		x &= DCC_ARM9_WBIT;	\
>> +		x = (x == 0);		\
>> +		} while (0);
>> +
>> +/*
>> + * ARM10
>> + */
>> +#define write_arm10_dcc(x)	\
>> +		__asm__ volatile ("mcr p14, 0, %0, c0, c5, 0\n" : : "r" (x))
>> +
>> +#define read_arm10_dcc(x)	\
>> +		__asm__ volatile ("mrc p14, 0, %0, c0, c5, 0\n" : "=r" (x))
>> +
>> +#define status_arm10_dcc(x)	\
>> +		__asm__ volatile ("mrc p14, 0, %0, c0, c1, 0\n" : "=r" (x))
>> +
>> +#define can_read_arm10_dcc(x)	do {	\
>> +		status_arm10_dcc(x);	\
>> +		x &= DCC_ARM10_RBIT;	\
>> +		} while (0);
>> +
>> +#define can_write_arm10_dcc(x)	do {	\
>> +		status_arm10_dcc(x);	\
>> +		x &= DCC_ARM10_WBIT;	\
>> +		x = (x == 0);		\
>> +		} while (0);
>> +
>> +/*
>> + * ARM11
>> + */
>> +#define write_arm11_dcc(x)	\
>> +		__asm__ volatile ("mcr p14, 0, %0, c0, c5, 0\n" : : "r" (x))
>> +
>> +#define read_arm11_dcc(x)	\
>> +		__asm__ volatile ("mrc p14, 0, %0, c0, c5, 0\n" : "=r" (x))
>> +
>> +#define status_arm11_dcc(x)	\
>> +		__asm__ volatile ("mrc p14, 0, %0, c0, c1, 0\n" : "=r" (x))
>> +
>> +#define can_read_arm11_dcc(x)	do {	\
>> +		status_arm11_dcc(x);	\
>> +		x &= DCC_ARM11_RBIT;	\
>> +		} while (0);
>> +
>> +#define can_write_arm11_dcc(x)	do {	\
>> +		status_arm11_dcc(x);	\
>> +		x &= DCC_ARM11_WBIT;	\
>> +		x = (x == 0);		\
>> +		} while (0);
>> +
>> +#define TIMEOUT_COUNT 0x4000000
>> +
>> +static enum {arm9_and_earlier, arm10, arm11_and_later} arm_type = arm9_and_earlier;
>> +
>> +#ifndef CONFIG_ARM_DCC_MULTI
>> +#define arm_dcc_init serial_init
>> +void serial_setbrg(void) {}
>> +#define arm_dcc_getc serial_getc
>> +#define arm_dcc_putc serial_putc
>> +#define arm_dcc_puts serial_puts
>> +#define arm_dcc_tstc serial_tstc
>> +#endif
>
> Why are all these #defines above in a .c file and not in a header file?
maybe because it's dual api
>
>> +int arm_dcc_init(void)
>> +{
>> +	register unsigned int id;
>> +
>> +	read_core_id(id);
>> +
>> +	if ((id & 0xF00) == 0xA00)
>
> What's about macros instead of hard coded values?
>
>> +		arm_type = arm10;
>> +	else if (id >= 0xb00)
>
> ditto
>
>> +		arm_type = arm11_and_later;
>> +	else
>> +		arm_type = arm9_and_earlier;
>> +
>> +	return 0;
>
> Can this function return something else than 0 ? If not, why then have a 
> return value?
why? it will not fail
>
>> +	if (rc == 0) {
>> +		arm_dcc_init();
>
> Here you don't check the return value of arm_dcc_init(), so it makes no 
> sense to have arm_dcc_init() returning anything?
no it will never fail
>
>> +		return 1;
>> +	}
Best Regards,
J.

  reply	other threads:[~2009-02-07 14:38 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-07 11:57 [U-Boot] [PATCH 1/1] arm: add uart dcc support Jean-Christophe PLAGNIOL-VILLARD
2009-02-07 13:03 ` Dirk Behme
2009-02-07 14:38   ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2009-02-09 22:04     ` Wolfgang Denk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090207143822.GA17280@game.jcrosoft.org \
    --to=plagnioj@jcrosoft.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.