Commit 97667f57 authored by Tony Luck's avatar Tony Luck

Merge agluck-lia64.sc.intel.com:/data/home/aegl/BK/work/jesse

into agluck-lia64.sc.intel.com:/data/home/aegl/BK/linux-ia64-release-2.6.9
parents d26e0b89 0376e71d
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.9-rc1
# Tue Aug 24 15:08:24 2004
# #
# #
...@@ -126,6 +128,7 @@ CONFIG_PCI_NAMES=y ...@@ -126,6 +128,7 @@ CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG_PCI=m CONFIG_HOTPLUG_PCI=m
# CONFIG_HOTPLUG_PCI_FAKE is not set # CONFIG_HOTPLUG_PCI_FAKE is not set
CONFIG_HOTPLUG_PCI_ACPI=m CONFIG_HOTPLUG_PCI_ACPI=m
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
# CONFIG_HOTPLUG_PCI_CPCI is not set # CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_PCIE is not set # CONFIG_HOTPLUG_PCI_PCIE is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set # CONFIG_HOTPLUG_PCI_SHPC is not set
...@@ -172,6 +175,7 @@ CONFIG_BLK_DEV_LOOP=m ...@@ -172,6 +175,7 @@ CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SX8 is not set # CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=m CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_RAM_SIZE=4096
...@@ -313,6 +317,7 @@ CONFIG_BLK_DEV_MD=m ...@@ -313,6 +317,7 @@ CONFIG_BLK_DEV_MD=m
CONFIG_MD_LINEAR=m CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m CONFIG_MD_RAID1=m
# CONFIG_MD_RAID10 is not set
CONFIG_MD_RAID5=m CONFIG_MD_RAID5=m
CONFIG_MD_RAID6=m CONFIG_MD_RAID6=m
CONFIG_MD_MULTIPATH=m CONFIG_MD_MULTIPATH=m
...@@ -365,6 +370,7 @@ CONFIG_SYN_COOKIES=y ...@@ -365,6 +370,7 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set # CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set # CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set # CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set # CONFIG_NETFILTER is not set
...@@ -767,6 +773,7 @@ CONFIG_USB=m ...@@ -767,6 +773,7 @@ CONFIG_USB=m
CONFIG_USB_DEVICEFS=y CONFIG_USB_DEVICEFS=y
# CONFIG_USB_BANDWIDTH is not set # CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# #
# USB Host Controller Drivers # USB Host Controller Drivers
...@@ -919,6 +926,8 @@ CONFIG_UDF_NLS=y ...@@ -919,6 +926,8 @@ CONFIG_UDF_NLS=y
CONFIG_FAT_FS=y CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not set # CONFIG_MSDOS_FS is not set
CONFIG_VFAT_FS=y CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set # CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set # CONFIG_NTFS_RW is not set
...@@ -946,7 +955,6 @@ CONFIG_RAMFS=y ...@@ -946,7 +955,6 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set # CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set # CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
...@@ -971,6 +979,7 @@ CONFIG_EXPORTFS=m ...@@ -971,6 +979,7 @@ CONFIG_EXPORTFS=m
CONFIG_SUNRPC=m CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=m CONFIG_SMB_FS=m
CONFIG_SMB_NLS_DEFAULT=y CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437" CONFIG_SMB_NLS_REMOTE="cp437"
...@@ -1007,7 +1016,7 @@ CONFIG_EFI_PARTITION=y ...@@ -1007,7 +1016,7 @@ CONFIG_EFI_PARTITION=y
# #
CONFIG_NLS=y CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=m CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=m CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m CONFIG_NLS_CODEPAGE_850=m
...@@ -1031,7 +1040,7 @@ CONFIG_NLS_ISO8859_8=m ...@@ -1031,7 +1040,7 @@ CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m CONFIG_NLS_CODEPAGE_1251=m
# CONFIG_NLS_ASCII is not set # CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=m CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=m CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m CONFIG_NLS_ISO8859_4=m
...@@ -1068,18 +1077,18 @@ CONFIG_CRC32=y ...@@ -1068,18 +1077,18 @@ CONFIG_CRC32=y
# #
# Kernel hacking # Kernel hacking
# #
CONFIG_IA64_GRANULE_16MB=y
# CONFIG_IA64_GRANULE_64MB is not set
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
# CONFIG_IA64_PRINT_HAZARDS is not set
# CONFIG_DISABLE_VHPT is not set
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_INFO is not set
CONFIG_IA64_GRANULE_16MB=y
# CONFIG_IA64_GRANULE_64MB is not set
# CONFIG_IA64_PRINT_HAZARDS is not set
# CONFIG_DISABLE_VHPT is not set
# CONFIG_IA64_DEBUG_CMPXCHG is not set # CONFIG_IA64_DEBUG_CMPXCHG is not set
# CONFIG_IA64_DEBUG_IRQ is not set # CONFIG_IA64_DEBUG_IRQ is not set
# CONFIG_DEBUG_INFO is not set
CONFIG_SYSVIPC_COMPAT=y CONFIG_SYSVIPC_COMPAT=y
# #
...@@ -1102,11 +1111,12 @@ CONFIG_CRYPTO_DES=m ...@@ -1102,11 +1111,12 @@ CONFIG_CRYPTO_DES=m
# CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set # CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set # CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_AES_GENERIC is not set # CONFIG_CRYPTO_AES is not set
# CONFIG_CRYPTO_CAST5 is not set # CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set # CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set # CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_ARC4 is not set # CONFIG_CRYPTO_ARC4 is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_DEFLATE is not set # CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set # CONFIG_CRYPTO_CRC32C is not set
......
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (C) 1999,2001-2003 Silicon Graphics, Inc. All Rights Reserved. * Copyright (C) 1999,2001-2004 Silicon Graphics, Inc. All Rights Reserved.
* *
* Module to export the system's Firmware Interface Tables, including * Module to export the system's Firmware Interface Tables, including
* PROM revision numbers, in /proc * PROM revision numbers and banners, in /proc
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -45,9 +45,18 @@ MODULE_LICENSE("GPL"); ...@@ -45,9 +45,18 @@ MODULE_LICENSE("GPL");
# define TRACE() # define TRACE()
#endif #endif
/* Architected IA64 firmware space */
#define FW_BASE 0x00000000FF000000
#define FW_TOP 0x0000000100000000
/* Sub-regions determined by bits in Node Offset */ /* Sub-regions determined by bits in Node Offset */
#define LB_PROM_SPACE 0x0000000700000000ul /* Local LB PROM */ #define LB_PROM_SPACE 0x0000000700000000ul /* Local LB PROM */
/* Offset of PROM banner pointers in SAL A and SAL B */
#define SAL_A_BANNER_OFFSET (1 * 16)
#define SAL_B_BANNER_OFFSET (3 * 16)
#define FIT_SIGNATURE 0x2020205f5449465ful #define FIT_SIGNATURE 0x2020205f5449465ful
/* Standard Intel FIT entry types */ /* Standard Intel FIT entry types */
#define FIT_ENTRY_FIT_HEADER 0x00 /* FIT header entry */ #define FIT_ENTRY_FIT_HEADER 0x00 /* FIT header entry */
...@@ -125,6 +134,26 @@ fit_type_name(unsigned char type) ...@@ -125,6 +134,26 @@ fit_type_name(unsigned char type)
return "Unknown type"; return "Unknown type";
} }
static unsigned long
convert_fw_addr(nasid_t nasid, unsigned long addr)
{
/* snag just the node-relative offset */
addr &= ~0ul >> (63-35);
/* the pointer to SAL A is relative to IA-64 compatibility
* space. However, the PROM is mapped at a different offset
* in MMR space (both local and global)
*/
addr += 0x700000000;
return GLOBAL_MMR_ADDR(nasid, addr);
}
static int
valid_fw_addr(unsigned long addr)
{
addr &= ~(1ul << 63); /* Clear cached/uncached bit */
return (addr >= FW_BASE && addr < FW_TOP);
}
/* These two routines read the FIT table directly from the FLASH PROM /* These two routines read the FIT table directly from the FLASH PROM
* on a specific node. The PROM can only be accessed using aligned 64 * on a specific node. The PROM can only be accessed using aligned 64
* bit reads, so we do that and then shift and mask the result to get * bit reads, so we do that and then shift and mask the result to get
...@@ -194,6 +223,8 @@ dump_version(char *page, unsigned long *fit) ...@@ -194,6 +223,8 @@ dump_version(char *page, unsigned long *fit)
int nentries; int nentries;
int fentry; int fentry;
unsigned long qw; unsigned long qw;
int len;
nasid_t nasid = NASID_GET(fit);
TRACE(); TRACE();
...@@ -203,10 +234,31 @@ dump_version(char *page, unsigned long *fit) ...@@ -203,10 +234,31 @@ dump_version(char *page, unsigned long *fit)
for (fentry = 0; fentry < nentries; fentry++) { for (fentry = 0; fentry < nentries; fentry++) {
qw = readq(fit + 2 * fentry + 1); qw = readq(fit + 2 * fentry + 1);
if (FIT_TYPE(qw) == FIT_ENTRY_SAL_A) if (FIT_TYPE(qw) == FIT_ENTRY_SAL_A)
return sprintf(page, "%x.%02x\n", break;
FIT_MAJOR(qw), FIT_MINOR(qw));
} }
return 0; if (fentry >= nentries)
return 0;
len = sprintf(page, "%x.%02x\n", FIT_MAJOR(qw), FIT_MINOR(qw));
page += len;
qw = readq(fit + 2 * fentry); /* Address of SAL A */
DPRINTK("SAL A at %p\n", (void *)qw);
if (!valid_fw_addr(qw))
return len;
qw += SAL_A_BANNER_OFFSET;
qw = convert_fw_addr(nasid, qw);
DPRINTK("Banner ptr at %p\n", (void *)qw);
qw = readq(qw); /* Address of banner */
if (!valid_fw_addr(qw))
return len;
qw = convert_fw_addr(nasid, qw);
DPRINTK("Banner at %p\n", (void *)qw);
len += snprintf(page, PAGE_SIZE-len, "%s\n", (char *)qw);
return len;
} }
/* same as in proc_misc.c */ /* same as in proc_misc.c */
...@@ -278,14 +330,10 @@ lookup_fit(int nasid) ...@@ -278,14 +330,10 @@ lookup_fit(int nasid)
DPRINTK("pointer to fit at %p\n", (void *)fitp); DPRINTK("pointer to fit at %p\n", (void *)fitp);
fit_paddr = readq(fitp); fit_paddr = readq(fitp);
DPRINTK("fit pointer contains %lx\n", fit_paddr); DPRINTK("fit pointer contains %lx\n", fit_paddr);
/* snag just the node-relative offset */
fit_paddr &= ~0ul >> (63-35); BUG_ON(!valid_fw_addr(fit_paddr));
/* the pointer to the FIT is relative to IA-64 compatibility fit_vaddr = (void *)convert_fw_addr(nasid, fit_paddr);
* space. However, the PROM is mapped at a different offset
* in MMR space (both local and global)
*/
fit_paddr += 0x700000000;
fit_vaddr = (void *)GLOBAL_MMR_ADDR(nasid, fit_paddr);
DPRINTK("fit at %p\n", (void *)fit_vaddr); DPRINTK("fit at %p\n", (void *)fit_vaddr);
return fit_vaddr; return fit_vaddr;
} }
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/pagemap.h>
#include <linux/swap.h> #include <linux/swap.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment