Message ID | 1479587152-25065-35-git-send-email-sjg@chromium.org |
---|---|
State | Superseded |
Delegated to: | Bin Meng |
Headers | show |
Hi Simon, On Sun, Nov 20, 2016 at 4:25 AM, Simon Glass <sjg@chromium.org> wrote: > At present this is just an ordinary variable. We may consider making it a > fixed register in the future. > > Signed-off-by: Simon Glass <sjg@chromium.org> > --- > > Changes in v2: None > > arch/x86/cpu/x86_64/cpu.c | 13 +++++++++++++ > arch/x86/include/asm/global_data.h | 6 +++++- > 2 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/cpu/x86_64/cpu.c b/arch/x86/cpu/x86_64/cpu.c > index c1d3788..da2ad11 100644 > --- a/arch/x86/cpu/x86_64/cpu.c > +++ b/arch/x86/cpu/x86_64/cpu.c > @@ -8,6 +8,19 @@ > #include <common.h> > #include <debug_uart.h> > > +DECLARE_GLOBAL_DATA_PTR; > + > +/* Global declaration of gd */ > +struct global_data *global_data_ptr; > + > +void arch_setup_gd(gd_t *new_gd) > +{ > + global_data_ptr = new_gd; > + > + /* TODO(sjg@chromium.org): Why is this needed? */ What happens if this is not needed? Can you explain a little bit about the TODO? > + printch(' '); > +} > + > int cpu_has_64bit(void) > { > return true; > diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h > index 7434f77..ce9e5cc 100644 > --- a/arch/x86/include/asm/global_data.h > +++ b/arch/x86/include/asm/global_data.h > @@ -104,7 +104,7 @@ struct arch_global_data { > #include <asm-generic/global_data.h> > > #ifndef __ASSEMBLY__ > -# ifdef CONFIG_EFI_APP > +# if defined(CONFIG_EFI_APP) || CONFIG_IS_ENABLED(X86_64) > > #define gd global_data_ptr > > @@ -114,7 +114,11 @@ static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void) > { > gd_t *gd_ptr; > > +#if CONFIG_IS_ENABLED(X86_64) > + asm volatile("fs mov 0, %0\n" : "=r" (gd_ptr)); > +#else > asm volatile("fs movl 0, %0\n" : "=r" (gd_ptr)); > +#endif Can both of them be consolidated as one: asm volatile("fs mov 0, %0\n" : "=r" (gd_ptr)); > > return gd_ptr; > } > -- Regards, Bin
diff --git a/arch/x86/cpu/x86_64/cpu.c b/arch/x86/cpu/x86_64/cpu.c index c1d3788..da2ad11 100644 --- a/arch/x86/cpu/x86_64/cpu.c +++ b/arch/x86/cpu/x86_64/cpu.c @@ -8,6 +8,19 @@ #include <common.h> #include <debug_uart.h> +DECLARE_GLOBAL_DATA_PTR; + +/* Global declaration of gd */ +struct global_data *global_data_ptr; + +void arch_setup_gd(gd_t *new_gd) +{ + global_data_ptr = new_gd; + + /* TODO(sjg@chromium.org): Why is this needed? */ + printch(' '); +} + int cpu_has_64bit(void) { return true; diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h index 7434f77..ce9e5cc 100644 --- a/arch/x86/include/asm/global_data.h +++ b/arch/x86/include/asm/global_data.h @@ -104,7 +104,7 @@ struct arch_global_data { #include <asm-generic/global_data.h> #ifndef __ASSEMBLY__ -# ifdef CONFIG_EFI_APP +# if defined(CONFIG_EFI_APP) || CONFIG_IS_ENABLED(X86_64) #define gd global_data_ptr @@ -114,7 +114,11 @@ static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void) { gd_t *gd_ptr; +#if CONFIG_IS_ENABLED(X86_64) + asm volatile("fs mov 0, %0\n" : "=r" (gd_ptr)); +#else asm volatile("fs movl 0, %0\n" : "=r" (gd_ptr)); +#endif return gd_ptr; }
At present this is just an ordinary variable. We may consider making it a fixed register in the future. Signed-off-by: Simon Glass <sjg@chromium.org> --- Changes in v2: None arch/x86/cpu/x86_64/cpu.c | 13 +++++++++++++ arch/x86/include/asm/global_data.h | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-)