Re: [U-Boot] [PATCH v6 07/10] smbios: Generate type 4 on non-x86 systems

2016-09-06 Thread Bin Meng
On Fri, Aug 19, 2016 at 7:23 AM, Alexander Graf  wrote:
> The type 4 table generation code is very x86 centric today. Refactor things
> out into the device model cpu class to allow the tables to get generated for
> other architectures as well.
>
> Signed-off-by: Alexander Graf 
>
> ---
>
> v3 -> v4:
>
>   - Use device model
>
> v4 -> v5:
>
>   - s/get_info/get_vendor/ typo
>   - s/smbios_write_type4_arch/smbios_write_type4_dm/
>
> v5 -> v6:
>
>   - Split cpu hunks into separate patches
> ---
>  include/smbios.h |  3 +++
>  lib/smbios.c | 51 ++-
>  2 files changed, 41 insertions(+), 13 deletions(-)
>

Reviewed-by: Bin Meng 
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v6 07/10] smbios: Generate type 4 on non-x86 systems

2016-08-20 Thread Simon Glass
On 18 August 2016 at 17:23, Alexander Graf  wrote:
> The type 4 table generation code is very x86 centric today. Refactor things
> out into the device model cpu class to allow the tables to get generated for
> other architectures as well.
>
> Signed-off-by: Alexander Graf 
>
> ---
>
> v3 -> v4:
>
>   - Use device model
>
> v4 -> v5:
>
>   - s/get_info/get_vendor/ typo
>   - s/smbios_write_type4_arch/smbios_write_type4_dm/
>
> v5 -> v6:
>
>   - Split cpu hunks into separate patches
> ---
>  include/smbios.h |  3 +++
>  lib/smbios.c | 51 ++-
>  2 files changed, 41 insertions(+), 13 deletions(-)

Reviewed-by: Simon Glass 

You probably don't need the _dm suffix, but it doesn't matter.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v6 07/10] smbios: Generate type 4 on non-x86 systems

2016-08-18 Thread Alexander Graf
The type 4 table generation code is very x86 centric today. Refactor things
out into the device model cpu class to allow the tables to get generated for
other architectures as well.

Signed-off-by: Alexander Graf 

---

v3 -> v4:

  - Use device model

v4 -> v5:

  - s/get_info/get_vendor/ typo
  - s/smbios_write_type4_arch/smbios_write_type4_dm/

v5 -> v6:

  - Split cpu hunks into separate patches
---
 include/smbios.h |  3 +++
 lib/smbios.c | 51 ++-
 2 files changed, 41 insertions(+), 13 deletions(-)

diff --git a/include/smbios.h b/include/smbios.h
index 5962d4c..3cbc687 100644
--- a/include/smbios.h
+++ b/include/smbios.h
@@ -139,6 +139,9 @@ struct __packed smbios_type3 {
 #define SMBIOS_PROCESSOR_STATUS_ENABLED1
 #define SMBIOS_PROCESSOR_UPGRADE_NONE  6
 
+#define SMBIOS_PROCESSOR_FAMILY_OTHER  1
+#define SMBIOS_PROCESSOR_FAMILY_UNKNOWN2
+
 struct __packed smbios_type4 {
u8 type;
u8 length;
diff --git a/lib/smbios.c b/lib/smbios.c
index 8dfd486..09a90ca 100644
--- a/lib/smbios.c
+++ b/lib/smbios.c
@@ -10,7 +10,11 @@
 #include 
 #include 
 #include 
-#include 
+#ifdef CONFIG_CPU
+#include 
+#include 
+#include 
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -152,26 +156,47 @@ static int smbios_write_type3(uintptr_t *current, int 
handle)
return len;
 }
 
+static void smbios_write_type4_dm(struct smbios_type4 *t)
+{
+   u16 processor_family = SMBIOS_PROCESSOR_FAMILY_UNKNOWN;
+   const char *vendor = "Unknown";
+   const char *name = "Unknown";
+
+#ifdef CONFIG_CPU
+   char processor_name[49];
+   char vendor_name[49];
+   struct udevice *dev = NULL;
+
+   uclass_find_first_device(UCLASS_CPU, );
+   if (dev) {
+   struct cpu_platdata *plat = dev_get_parent_platdata(dev);
+
+   if (plat->family)
+   processor_family = plat->family;
+   t->processor_id[0] = plat->id[0];
+   t->processor_id[1] = plat->id[1];
+
+   if (!cpu_get_vendor(dev, vendor_name, sizeof(vendor_name)))
+   vendor = vendor_name;
+   if (!cpu_get_desc(dev, processor_name, sizeof(processor_name)))
+   name = processor_name;
+   }
+#endif
+
+   t->processor_family = processor_family;
+   t->processor_manufacturer = smbios_add_string(t->eos, vendor);
+   t->processor_version = smbios_add_string(t->eos, name);
+}
+
 static int smbios_write_type4(uintptr_t *current, int handle)
 {
struct smbios_type4 *t = (struct smbios_type4 *)*current;
int len = sizeof(struct smbios_type4);
-   const char *vendor;
-   char *name;
-   char processor_name[CPU_MAX_NAME_LEN];
-   struct cpuid_result res;
 
memset(t, 0, sizeof(struct smbios_type4));
fill_smbios_header(t, SMBIOS_PROCESSOR_INFORMATION, len, handle);
t->processor_type = SMBIOS_PROCESSOR_TYPE_CENTRAL;
-   t->processor_family = gd->arch.x86;
-   vendor = cpu_vendor_name(gd->arch.x86_vendor);
-   t->processor_manufacturer = smbios_add_string(t->eos, vendor);
-   res = cpuid(1);
-   t->processor_id[0] = res.eax;
-   t->processor_id[1] = res.edx;
-   name = cpu_get_name(processor_name);
-   t->processor_version = smbios_add_string(t->eos, name);
+   smbios_write_type4_dm(t);
t->status = SMBIOS_PROCESSOR_STATUS_ENABLED;
t->processor_upgrade = SMBIOS_PROCESSOR_UPGRADE_NONE;
t->l1_cache_handle = 0x;
-- 
1.8.5.6

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot