public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andres Salomon <dilinger@queued.net>
To: Daniel Drake <dsd@laptop.org>
Cc: tglx@linutronix.de, x86@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] OLPC: Extend BIOS signature check
Date: Wed, 22 Sep 2010 11:43:04 -0700	[thread overview]
Message-ID: <20100922114304.4afb936d@debxo> (raw)
In-Reply-To: <20100922164437.5712F9D401B@zog.reactivated.net>

On Wed, 22 Sep 2010 17:44:37 +0100 (BST)
Daniel Drake <dsd@laptop.org> wrote:

> The XO-1.5 laptop is not currently detected as an OLPC machine because
> it fails this XO-1-centric check.
> 
> Now that we have OLPC OFW support in the kernel, a more sensible
> check is to see if we found OFW during boot. This also eliminates the
> need to check the BIOS signature, since we trust the detection code
> in olpc_ofw.c
> 
> Also remove a now-meaningless codepath, as we're always going to have
> OFW support with OLPC.
> 
> Signed-off-by: Daniel Drake <dsd@laptop.org>
[...]
> diff --git a/arch/x86/kernel/olpc.c b/arch/x86/kernel/olpc.c
> index 10b4dce..52ecc3f 100644
> --- a/arch/x86/kernel/olpc.c
> +++ b/arch/x86/kernel/olpc.c
> @@ -183,7 +183,6 @@ err:
>  }
>  EXPORT_SYMBOL_GPL(olpc_ec_cmd);
>  
> -#ifdef CONFIG_OLPC_OPENFIRMWARE
>  static void __init platform_detect(void)
>  {
>  	size_t propsize;
> @@ -197,37 +196,14 @@ static void __init platform_detect(void)
>  	}
>  	olpc_platform_info.boardrev = be32_to_cpu(rev);
>  }
> -#else
> -static void __init platform_detect(void)
> -{
> -	/* stopgap until OFW support is added to the kernel */
> -	olpc_platform_info.boardrev = olpc_board(0xc2);
> -}
> -#endif
>  
>  static int __init olpc_init(void)
>  {
> -	unsigned char *romsig;
> -
> -	/* The ioremap check is dangerous; limit what we run it on */
> -	if (!is_geode() || cs5535_has_vsa2())
> +	if (!olpc_ofw_present())
>  		return 0;
>  
>  	spin_lock_init(&ec_lock);
>  
> -	romsig = ioremap(0xffffffc0, 16);
> -	if (!romsig)
> -		return 0;
> -
> -	if (strncmp(romsig, "CL1   Q", 7))
> -		goto unmap;
> -	if (strncmp(romsig+6, romsig+13, 3)) {
> -		printk(KERN_INFO "OLPC BIOS signature looks
> invalid.  "
> -				"Assuming not OLPC\n");
> -		goto unmap;
> -	}
> -
> -	printk(KERN_INFO "OLPC board with OpenFirmware %.16s\n",
> romsig); 
>  
>  	/* get the platform revision */
> @@ -250,8 +226,6 @@ static int __init olpc_init(void)
>  			olpc_platform_info.boardrev >> 4,
>  			olpc_platform_info.ecver);
>  
> -unmap:
> -	iounmap(romsig);
>  	return 0;
>  }
>  

I'm ecstatic to see this stuff go away.  However, Mitch has pointed out
that there are embedded x86 machines running OFW, so just checking for
the existence of OFW is not enough.

My suggestion would be to change to code to something like:


spin_lock_init(&ec_lock);
if (!olpc_ofw_present() && !olpc_platform_detect())
	return 0;  
olpc_platform_info.flags |= OLPC_F_PRESENT;


static int __init olpc_platform_detect(void)
{
	const char *olpc_arch = NULL;
	void *res[] = { &olpc_arch };

	/* fetch "architecture" property from / of devtree here */
 
	if (!olpc_arch || strncmp(olpc_arch, "olpc"))
		return -ENODEV;

	return platform_detect();
}

And actually, once the device-tree stuff is upstream (still pending
reviews), you can probably fetch the architecture from that rather than
calling into OFW.

> diff --git a/arch/x86/kernel/olpc_ofw.c b/arch/x86/kernel/olpc_ofw.c
> index 3218aa7..e7bfcc4 100644
> --- a/arch/x86/kernel/olpc_ofw.c
> +++ b/arch/x86/kernel/olpc_ofw.c
> @@ -74,6 +74,12 @@ int __olpc_ofw(const char *name, int nr_args,
> const void **args, int nr_res, }
>  EXPORT_SYMBOL_GPL(__olpc_ofw);
>  
> +int olpc_ofw_present(void)
> +{
> +	return olpc_ofw_cif != NULL;
> +}
> +EXPORT_SYMBOL_GPL(olpc_ofw_present);

Definitely should return a bool.

> +
>  /* OFW cif _should_ be above this address */
>  #define OFW_MIN 0xff000000
>  


      reply	other threads:[~2010-09-22 18:23 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-22 16:44 [PATCH 3/3] OLPC: Extend BIOS signature check Daniel Drake
2010-09-22 18:43 ` Andres Salomon [this message]

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=20100922114304.4afb936d@debxo \
    --to=dilinger@queued.net \
    --cc=dsd@laptop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox