iseries: Use device tree /system-id in /proc/iSeries/config
PATCH 1/7 iseries: Use device tree /system-id in /proc/iSeries/config
We export a bunch of info in /proc/iSeries/config. Currently we pull it directly out of some iSeries specific structs, but we could use the device tree instead, this saves decoding it twice and is a little neater.
---
arch/powerpc/platforms/iseries/viopath.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-)
arch/powerpc/platforms/iseries/viopath.c +17 -10
@@ -41,8 +41,8 @@#include <asm/system.h> #include <asm/uaccess.h> +#include <asm/prom.h> #include <asm/iseries/hv_types.h> -#include <asm/iseries/it_exp_vpd_panel.h> #include <asm/iseries/hv_lp_event.h> #include <asm/iseries/hv_lp_config.h> #include <asm/iseries/mf.h>
@@ -116,6 +116,7 @@ static int proc_viopath_show(struct seq_dma_addr_t handle;HvLpEvent_Rc hvrc;DECLARE_MUTEX_LOCKED (Semaphore); +struct device_node *node; buf =kmalloc (HW_PAGE_SIZE ,GFP_KERNEL );if (!buf)
@@ -143,20 +144,26 @@ static int proc_viopath_show(struct seq_ buf[HW_PAGE_SIZE -1 ] ='\0' ;seq_printf (m,"%s" , buf); -seq_printf (m,"AVAILABLE_VETH=%x\n" , vlanMap); -seq_printf (m,"SRLNBR=%c%c%c%c%c%c%c\n" , -e2a (xItExtVpdPanel.mfgID[2 ]), -e2a (xItExtVpdPanel.mfgID[3 ]), -e2a (xItExtVpdPanel.systemSerial[1 ]), -e2a (xItExtVpdPanel.systemSerial[2 ]), -e2a (xItExtVpdPanel.systemSerial[3 ]), -e2a (xItExtVpdPanel.systemSerial[4 ]), -e2a (xItExtVpdPanel.systemSerial[5 ]));dma_unmap_single (iSeries_vio_dev, handle,HW_PAGE_SIZE ,DMA_FROM_DEVICE );kfree (buf); +seq_printf (m,"AVAILABLE_VETH=%x\n" , vlanMap); + + node =of_find_node_by_path ("/" ); + buf =NULL ; +if (node !=NULL ) + buf =get_property (node,"system-id" ,NULL ); + +if (buf ==NULL ) +seq_printf (m,"SRLNBR=<UNKNOWN>\n" ); +else +/* Skip "IBM," on front of serial number, see dt.c */ +seq_printf (m,"SRLNBR=%s\n" , buf +4 ); + +of_node_put (node); +return 0 ; }
PATCH 2/7 iseries: Move e2a()/strne2a() into their only caller
The ASCII -> EBCDIC functions, e2a() and strne2a() are now only used in dt.c, so move them in there.
---
arch/powerpc/lib/Makefile | 1 arch/powerpc/lib/e2a.c | 116 ------------------------------------ arch/powerpc/platforms/iseries/dt.c | 98 ++++++++++++++++++++++++++++++ include/asm-powerpc/system.h | 5 - 4 files changed, 97 insertions(+), 123 deletions(-)
arch/powerpc/lib/Makefile +0 -1
@@ -14,7 +14,6 @@ endif obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \ memcpy_64.o usercopy_64.o mem_64.o string.o \ strcase.o -obj-$(CONFIG_PPC_ISERIES) += e2a.o obj-$(CONFIG_XMON) += sstep.o ifeq ($(CONFIG_PPC64),y)
arch/powerpc/lib/e2a.c deleted +0 -116
116 lines not on this page · raw message
arch/powerpc/platforms/iseries/dt.c +97 -1
108 lines not on this page · raw message
include/asm-powerpc/system.h +0 -5
@@ -169,11 +169,6 @@ extern u32 booke_wdt_enabled;extern u32 booke_wdt_period;#endif /* CONFIG_BOOKE_WDT */ -/* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */ -extern unsigned char e2a (unsigned char ); -extern unsigned char *strne2a (unsigned char *dest, -const unsigned char *src,size_t n); -struct device_node ;extern void note_scsi_host (struct device_node *,void *);
PATCH 3/7 iseries: Cleanup e2a() and strne2a()
In reply to Michael Ellermane2a() was formally used by lparcfg, and so had to be exported, but isn't anymore, so don't.
e2a() and strne2a() can both be static, and __init.
And e2a can be made much more concise if we use x ... y case labels, while we're there add support for lower case letters.
---
arch/powerpc/platforms/iseries/dt.c | 92 ++++++------------------------------ 1 file changed, 17 insertions(+), 75 deletions(-)
arch/powerpc/platforms/iseries/dt.c +17 -75
@@ -80,87 +80,29 @@ static char __initdata device_type_vscsi/* EBCDIC to ASCII conversion routines */ -unsigned char e2a (unsigned char x) +static unsigned char __init e2a (unsigned char x) {switch (x) { -case 0xF0 : -return '0' ; -case 0xF1 : -return '1' ; -case 0xF2 : -return '2' ; -case 0xF3 : -return '3' ; -case 0xF4 : -return '4' ; -case 0xF5 : -return '5' ; -case 0xF6 : -return '6' ; -case 0xF7 : -return '7' ; -case 0xF8 : -return '8' ; -case 0xF9 : -return '9' ; -case 0xC1 : -return 'A' ; -case 0xC2 : -return 'B' ; -case 0xC3 : -return 'C' ; -case 0xC4 : -return 'D' ; -case 0xC5 : -return 'E' ; -case 0xC6 : -return 'F' ; -case 0xC7 : -return 'G' ; -case 0xC8 : -return 'H' ; -case 0xC9 : -return 'I' ; -case 0xD1 : -return 'J' ; -case 0xD2 : -return 'K' ; -case 0xD3 : -return 'L' ; -case 0xD4 : -return 'M' ; -case 0xD5 : -return 'N' ; -case 0xD6 : -return 'O' ; -case 0xD7 : -return 'P' ; -case 0xD8 : -return 'Q' ; -case 0xD9 : -return 'R' ; -case 0xE2 : -return 'S' ; -case 0xE3 : -return 'T' ; -case 0xE4 : -return 'U' ; -case 0xE5 : -return 'V' ; -case 0xE6 : -return 'W' ; -case 0xE7 : -return 'X' ; -case 0xE8 : -return 'Y' ; -case 0xE9 : -return 'Z' ; + case 0x81 ... 0x89: +return x -0x81 +'a' ; + case 0x91 ... 0x99: +return x -0x91 +'j' ; + case 0xA2 ... 0xA9: +return x -0xA2 +'s' ; + case 0xC1 ... 0xC9: +return x -0xC1 +'A' ; + case 0xD1 ... 0xD9: +return x -0xD1 +'J' ; + case 0xE2 ... 0xE9: +return x -0xE2 +'S' ; + case 0xF0 ... 0xF9: +return x -0xF0 +'0' ; }return ' ' ; } -EXPORT_SYMBOL (e2a); -unsigned char *strne2a (unsigned char *dest,const unsigned char *src,size_t n) +static unsigned char *__init strne2a (unsigned char *dest, +const unsigned char *src,size_t n) {int i;
PATCH 4/7 iseries: Make ItExtVpdPanel private to iSeries
In reply to Michael EllermanNo one outside platforms/iseries needs ItExtVpdPanel anymore, so move it in there. It used to be needed by lparcfg, and so was exported, but isn't needed anymore, so unexport it.
---
arch/powerpc/kernel/lparcfg.c | 1 arch/powerpc/platforms/iseries/dt.c | 2 arch/powerpc/platforms/iseries/it_exp_vpd_panel.h | 51 ++++++++++++++++++++++ arch/powerpc/platforms/iseries/lpardata.c | 3 - include/asm-powerpc/iseries/it_exp_vpd_panel.h | 51 ---------------------- 5 files changed, 53 insertions(+), 55 deletions(-)
arch/powerpc/kernel/lparcfg.c +0 -1
@@ -32,7 +32,6 @@#include <asm/rtas.h> #include <asm/system.h> #include <asm/time.h> -#include <asm/iseries/it_exp_vpd_panel.h> #include <asm/prom.h> #include <asm/vdso_datapage.h>
arch/powerpc/platforms/iseries/dt.c +1 -1
@@ -34,13 +34,13 @@#include <asm/iseries/hv_types.h> #include <asm/iseries/hv_lp_config.h> #include <asm/iseries/hv_call_xm.h> -#include <asm/iseries/it_exp_vpd_panel.h> #include <asm/udbg.h> #include "processor_vpd.h" #include "call_hpt.h" #include "call_pci.h" #include "pci.h" +#include "it_exp_vpd_panel.h" #ifdef DEBUG #define DBG(fmt...) udbg_printf(fmt)
arch/powerpc/platforms/iseries/it_exp_vpd_panel.h new file +51 -0
51 lines not on this page · raw message
arch/powerpc/platforms/iseries/lpardata.c +1 -2
@@ -18,7 +18,6 @@#include <asm/iseries/it_lp_reg_save.h> #include <asm/paca.h> #include <asm/iseries/lpar_map.h> -#include <asm/iseries/it_exp_vpd_panel.h> #include <asm/iseries/it_lp_queue.h> #include "naca.h"
@@ -27,6 +26,7 @@#include "ipl_parms.h" #include "processor_vpd.h" #include "release_data.h" +#include "it_exp_vpd_panel.h" /* The HvReleaseData is the root of the information shared between * the hypervisor and Linux.
@@ -134,7 +134,6 @@ struct ItIplParmsReal xItIplParmsReal __/* May be filled in by the hypervisor so cannot end up in the BSS */ struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data"))); -EXPORT_SYMBOL (xItExtVpdPanel);#define maxPhysicalProcessors 32
include/asm-powerpc/iseries/it_exp_vpd_panel.h deleted +0 -51
51 lines not on this page · raw message
PATCH 5/7 iseries: Make HvLpConfig_get(Primary)LpIndex functions
In reply to Michael EllermanHvLpConfig_get(Primary)LpIndex are currently static inlines that return fields from the itLpNaca, if we make them real functions we can make the itLpNaca private to iSeries.
---
arch/powerpc/platforms/iseries/hvlpconfig.c | 13 +++++++++++++ arch/powerpc/platforms/iseries/setup.c | 1 + include/asm-powerpc/iseries/hv_lp_config.h | 13 ++----------- 3 files changed, 16 insertions(+), 11 deletions(-)
arch/powerpc/platforms/iseries/hvlpconfig.c +13 -0
@@ -18,9 +18,22 @@#include <linux/module.h> #include <asm/iseries/hv_lp_config.h> +#include <asm/iseries/it_lp_naca.h> HvLpIndex HvLpConfig_getLpIndex_outline (void ) {return HvLpConfig_getLpIndex (); }EXPORT_SYMBOL (HvLpConfig_getLpIndex_outline); + +HvLpIndex HvLpConfig_getLpIndex (void ) +{ +return itLpNaca.xLpIndex; +} +EXPORT_SYMBOL (HvLpConfig_getLpIndex); + +HvLpIndex HvLpConfig_getPrimaryLpIndex (void ) +{ +return itLpNaca.xPrimaryLpIndex; +} +EXPORT_SYMBOL_GPL (HvLpConfig_getPrimaryLpIndex);
arch/powerpc/platforms/iseries/setup.c +1 -0
@@ -48,6 +48,7 @@#include <asm/iseries/hv_call_event.h> #include <asm/iseries/hv_call_xm.h> #include <asm/iseries/it_lp_queue.h> +#include <asm/iseries/it_lp_naca.h> #include <asm/iseries/mf.h> #include <asm/iseries/hv_lp_event.h> #include <asm/iseries/lpar_map.h>
include/asm-powerpc/iseries/hv_lp_config.h +2 -11
@@ -25,7 +25,6 @@#include <asm/iseries/hv_call_sc.h> #include <asm/iseries/hv_types.h> -#include <asm/iseries/it_lp_naca.h> enum { HvCallCfg_Cur =0 ,
@@ -44,16 +43,8 @@ enum {#define HvCallCfgGetHostingLpIndex HvCallCfg + 32extern HvLpIndex HvLpConfig_getLpIndex_outline (void ); - -static inline HvLpIndex HvLpConfig_getLpIndex (void ) -{ -return itLpNaca.xLpIndex; -} - -static inline HvLpIndex HvLpConfig_getPrimaryLpIndex (void ) -{ -return itLpNaca.xPrimaryLpIndex; -} +extern HvLpIndex HvLpConfig_getLpIndex (void ); +extern HvLpIndex HvLpConfig_getPrimaryLpIndex (void );static inline u64 HvLpConfig_getMsChunks (void ) {
PATCH 6/7 iseries: Move ItLpNaca into platforms/iseries
In reply to Michael EllermanMove ItLpNaca into platforms/iseries now that it's not used elsewhere.
---
arch/powerpc/kernel/setup_64.c | 1 arch/powerpc/platforms/iseries/hvlpconfig.c | 2 arch/powerpc/platforms/iseries/it_lp_naca.h | 80 ++++++++++++++++++++++++++++ arch/powerpc/platforms/iseries/lpardata.c | 3 - arch/powerpc/platforms/iseries/lpevents.c | 2 arch/powerpc/platforms/iseries/setup.c | 2 include/asm-powerpc/iseries/it_lp_naca.h | 80 ---------------------------- 7 files changed, 84 insertions(+), 86 deletions(-)
arch/powerpc/kernel/setup_64.c +0 -1
@@ -56,7 +56,6 @@#include <asm/page.h> #include <asm/mmu.h> #include <asm/lmb.h> -#include <asm/iseries/it_lp_naca.h> #include <asm/firmware.h> #include <asm/xmon.h> #include <asm/udbg.h>
arch/powerpc/platforms/iseries/hvlpconfig.c +1 -1
@@ -18,7 +18,7 @@#include <linux/module.h> #include <asm/iseries/hv_lp_config.h> -#include <asm/iseries/it_lp_naca.h> +#include "it_lp_naca.h" HvLpIndex HvLpConfig_getLpIndex_outline (void ) {
arch/powerpc/platforms/iseries/it_lp_naca.h new file +80 -0
80 lines not on this page · raw message
arch/powerpc/platforms/iseries/lpardata.c +1 -2
@@ -13,7 +13,6 @@#include <asm/processor.h> #include <asm/ptrace.h> #include <asm/abs_addr.h> -#include <asm/iseries/it_lp_naca.h> #include <asm/lppaca.h> #include <asm/iseries/it_lp_reg_save.h> #include <asm/paca.h>
@@ -27,6 +26,7 @@#include "processor_vpd.h" #include "release_data.h" #include "it_exp_vpd_panel.h" +#include "it_lp_naca.h" /* The HvReleaseData is the root of the information shared between * the hypervisor and Linux.
@@ -127,7 +127,6 @@ struct ItLpNaca itLpNaca = { (u64)instruction_access_slb_iSeries /* 0x480 I-SLB */ } }; -EXPORT_SYMBOL (itLpNaca);/* May be filled in by the hypervisor so cannot end up in the BSS */ struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
arch/powerpc/platforms/iseries/lpevents.c +1 -1
@@ -20,7 +20,7 @@#include <asm/iseries/it_lp_queue.h> #include <asm/iseries/hv_lp_event.h> #include <asm/iseries/hv_call_event.h> -#include <asm/iseries/it_lp_naca.h> +#include "it_lp_naca.h" /* * The LpQueue is used to pass event data from the hypervisor to
arch/powerpc/platforms/iseries/setup.c +1 -1
@@ -48,7 +48,6 @@#include <asm/iseries/hv_call_event.h> #include <asm/iseries/hv_call_xm.h> #include <asm/iseries/it_lp_queue.h> -#include <asm/iseries/it_lp_naca.h> #include <asm/iseries/mf.h> #include <asm/iseries/hv_lp_event.h> #include <asm/iseries/lpar_map.h>
@@ -60,6 +59,7 @@#include "irq.h" #include "vpd_areas.h" #include "processor_vpd.h" +#include "it_lp_naca.h" #include "main_store.h" #include "call_sm.h" #include "call_hpt.h"
include/asm-powerpc/iseries/it_lp_naca.h deleted +0 -80
80 lines not on this page · raw message
PATCH 7/7 iseries: Move iommu_table_cb into platforms/iseries
In reply to Michael EllermanAlthough we pass the address of an iommu_table_cb to HvCallXm_getTceTableParms, we don't actually need the structure definition anywhere except in the iseries iommu code, so move the struct in there.
---
arch/powerpc/platforms/iseries/iommu.c | 1 + arch/powerpc/platforms/iseries/iommu.h | 17 +++++++++++++++++ include/asm-powerpc/iseries/hv_call_xm.h | 17 ----------------- 3 files changed, 18 insertions(+), 17 deletions(-)
arch/powerpc/platforms/iseries/iommu.c +1 -0
@@ -36,6 +36,7 @@#include <asm/pci-bridge.h> #include <asm/iseries/hv_call_xm.h> #include <asm/iseries/iommu.h> +#include "iommu.h" static void tce_build_iSeries (struct iommu_table *tbl,long index,long npages,unsigned long uaddr,enum dma_data_direction direction)
arch/powerpc/platforms/iseries/iommu.h +17 -0
@@ -32,4 +32,21 @@ extern void iommu_table_getparms_iSeries unsigned char slotno, unsigned char virtbus, struct iommu_table *tbl); +/* +* Structure passed to HvCallXm_getTceTableParms +*/ +struct iommu_table_cb { +unsigned long itc_busno;/* Bus number for this tce table */ +unsigned long itc_start;/* Will be NULL for secondary */ +unsigned long itc_totalsize;/* Size (in pages) of whole table */ +unsigned long itc_offset;/* Index into real tce table of the +start of our section */ +unsigned long itc_size;/* Size (in pages) of our section */ +unsigned long itc_index;/* Index of this tce table */ +unsigned short itc_maxtables;/* Max num of tables for partition */ +unsigned char itc_virtbus;/* Flag to indicate virtual bus */ +unsigned char itc_slotno;/* IOA Tce Slot Index */ +unsigned char itc_rsvd[4 ]; +}; +#endif /* _PLATFORMS_ISERIES_IOMMU_H */
include/asm-powerpc/iseries/hv_call_xm.h +0 -17
@@ -16,23 +16,6 @@#define HvCallXmSetTce HvCallXm + 11#define HvCallXmSetTces HvCallXm + 13 -/* -* Structure passed to HvCallXm_getTceTableParms -*/ -struct iommu_table_cb { -unsigned long itc_busno;/* Bus number for this tce table */ -unsigned long itc_start;/* Will be NULL for secondary */ -unsigned long itc_totalsize;/* Size (in pages) of whole table */ -unsigned long itc_offset;/* Index into real tce table of the -start of our section */ -unsigned long itc_size;/* Size (in pages) of our section */ -unsigned long itc_index;/* Index of this tce table */ -unsigned short itc_maxtables;/* Max num of tables for partition */ -unsigned char itc_virtbus;/* Flag to indicate virtual bus */ -unsigned char itc_slotno;/* IOA Tce Slot Index */ -unsigned char itc_rsvd[4 ]; -}; -static inline void HvCallXm_getTceTableParms (u64 cb) {HvCall1 (HvCallXmGetTceTableParms, cb);
PATCH 1/1 iseries: Move iommu_table_cb into platforms/iseries
Although we pass the address of an iommu_table_cb to HvCallXm_getTceTableParms, we don't actually need the structure definition anywhere except in the iseries iommu code, so move the struct in there.
---
arch/powerpc/platforms/iseries/iommu.c | 17 +++++++++++++++++ include/asm-powerpc/iseries/hv_call_xm.h | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-)
arch/powerpc/platforms/iseries/iommu.c +17 -0
@@ -88,6 +88,23 @@ static void tce_free_iSeries(struct iomm }/* +* Structure passed to HvCallXm_getTceTableParms +*/ +struct iommu_table_cb { +unsigned long itc_busno;/* Bus number for this tce table */ +unsigned long itc_start;/* Will be NULL for secondary */ +unsigned long itc_totalsize;/* Size (in pages) of whole table */ +unsigned long itc_offset;/* Index into real tce table of the +start of our section */ +unsigned long itc_size;/* Size (in pages) of our section */ +unsigned long itc_index;/* Index of this tce table */ +unsigned short itc_maxtables;/* Max num of tables for partition */ +unsigned char itc_virtbus;/* Flag to indicate virtual bus */ +unsigned char itc_slotno;/* IOA Tce Slot Index */ +unsigned char itc_rsvd[4 ]; +}; + +/* * Call Hv with the architected data structure to get TCE table info. * info. Put the returned data into the Linux representation of the * TCE table data.
include/asm-powerpc/iseries/hv_call_xm.h +0 -17
@@ -16,23 +16,6 @@#define HvCallXmSetTce HvCallXm + 11#define HvCallXmSetTces HvCallXm + 13 -/* -* Structure passed to HvCallXm_getTceTableParms -*/ -struct iommu_table_cb { -unsigned long itc_busno;/* Bus number for this tce table */ -unsigned long itc_start;/* Will be NULL for secondary */ -unsigned long itc_totalsize;/* Size (in pages) of whole table */ -unsigned long itc_offset;/* Index into real tce table of the -start of our section */ -unsigned long itc_size;/* Size (in pages) of our section */ -unsigned long itc_index;/* Index of this tce table */ -unsigned short itc_maxtables;/* Max num of tables for partition */ -unsigned char itc_virtbus;/* Flag to indicate virtual bus */ -unsigned char itc_slotno;/* IOA Tce Slot Index */ -unsigned char itc_rsvd[4 ]; -}; -static inline void HvCallXm_getTceTableParms (u64 cb) {HvCall1 (HvCallXmGetTceTableParms, cb);
Hi Paulus,
Quoted 1 line · On Thu, 13 Jul 2006 17:52:01 +1000 Michael Ellerman <[email protected]>…
...
I can stage all these iSeries patches through my git tree if you like (after Michael fixes 7/7), as I have some other iSeries patches that I need to send you as well (some already sent yesterday).
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/