Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
91896740
Commit
91896740
authored
Oct 28, 2005
by
Tony Luck
Browse files
Options
Browse Files
Download
Plain Diff
Pull altix-fpga-reset into release branch
parents
72ab373a
25732ad4
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
90 additions
and
30 deletions
+90
-30
arch/ia64/sn/kernel/tiocx.c
arch/ia64/sn/kernel/tiocx.c
+33
-29
include/asm-ia64/sn/l1.h
include/asm-ia64/sn/l1.h
+12
-0
include/asm-ia64/sn/sn_sal.h
include/asm-ia64/sn/sn_sal.h
+43
-0
include/asm-ia64/sn/tiocx.h
include/asm-ia64/sn/tiocx.h
+2
-1
No files found.
arch/ia64/sn/kernel/tiocx.c
View file @
91896740
...
@@ -183,11 +183,12 @@ int cx_driver_unregister(struct cx_drv *cx_driver)
...
@@ -183,11 +183,12 @@ int cx_driver_unregister(struct cx_drv *cx_driver)
* @part_num: device's part number
* @part_num: device's part number
* @mfg_num: device's manufacturer number
* @mfg_num: device's manufacturer number
* @hubdev: hub info associated with this device
* @hubdev: hub info associated with this device
* @bt: board type of the device
*
*
*/
*/
int
int
cx_device_register
(
nasid_t
nasid
,
int
part_num
,
int
mfg_num
,
cx_device_register
(
nasid_t
nasid
,
int
part_num
,
int
mfg_num
,
struct
hubdev_info
*
hubdev
)
struct
hubdev_info
*
hubdev
,
int
bt
)
{
{
struct
cx_dev
*
cx_dev
;
struct
cx_dev
*
cx_dev
;
...
@@ -200,6 +201,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
...
@@ -200,6 +201,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
cx_dev
->
cx_id
.
mfg_num
=
mfg_num
;
cx_dev
->
cx_id
.
mfg_num
=
mfg_num
;
cx_dev
->
cx_id
.
nasid
=
nasid
;
cx_dev
->
cx_id
.
nasid
=
nasid
;
cx_dev
->
hubdev
=
hubdev
;
cx_dev
->
hubdev
=
hubdev
;
cx_dev
->
bt
=
bt
;
cx_dev
->
dev
.
parent
=
NULL
;
cx_dev
->
dev
.
parent
=
NULL
;
cx_dev
->
dev
.
bus
=
&
tiocx_bus_type
;
cx_dev
->
dev
.
bus
=
&
tiocx_bus_type
;
...
@@ -238,7 +240,8 @@ static int cx_device_reload(struct cx_dev *cx_dev)
...
@@ -238,7 +240,8 @@ static int cx_device_reload(struct cx_dev *cx_dev)
{
{
cx_device_unregister
(
cx_dev
);
cx_device_unregister
(
cx_dev
);
return
cx_device_register
(
cx_dev
->
cx_id
.
nasid
,
cx_dev
->
cx_id
.
part_num
,
return
cx_device_register
(
cx_dev
->
cx_id
.
nasid
,
cx_dev
->
cx_id
.
part_num
,
cx_dev
->
cx_id
.
mfg_num
,
cx_dev
->
hubdev
);
cx_dev
->
cx_id
.
mfg_num
,
cx_dev
->
hubdev
,
cx_dev
->
bt
);
}
}
static
inline
uint64_t
tiocx_intr_alloc
(
nasid_t
nasid
,
int
widget
,
static
inline
uint64_t
tiocx_intr_alloc
(
nasid_t
nasid
,
int
widget
,
...
@@ -365,26 +368,20 @@ static void tio_corelet_reset(nasid_t nasid, int corelet)
...
@@ -365,26 +368,20 @@ static void tio_corelet_reset(nasid_t nasid, int corelet)
udelay
(
2000
);
udelay
(
2000
);
}
}
static
int
tiocx_btchar_get
(
int
nasid
)
static
int
is_fpga_tio
(
int
nasid
,
int
*
bt
)
{
{
moduleid_t
module_id
;
int
ioboard_type
;
geoid_t
geoid
;
int
cnodeid
;
cnodeid
=
nasid_to_cnodeid
(
nasid
);
geoid
=
cnodeid_get_geoid
(
cnodeid
);
module_id
=
geo_module
(
geoid
);
return
MODULE_GET_BTCHAR
(
module_id
);
}
static
int
is_fpga_brick
(
int
nasid
)
ioboard_type
=
ia64_sn_sysctl_ioboard_get
(
nasid
);
{
switch
(
tiocx_btchar_get
(
nasid
)
)
{
switch
(
ioboard_type
)
{
case
L1_BRICKTYPE_SA
:
case
L1_BRICKTYPE_SA
:
case
L1_BRICKTYPE_ATHENA
:
case
L1_BRICKTYPE_ATHENA
:
case
L1_BRICKTYPE_DAYTONA
:
case
L1_BOARDTYPE_DAYTONA
:
*
bt
=
ioboard_type
;
return
1
;
return
1
;
}
}
return
0
;
return
0
;
}
}
...
@@ -407,16 +404,22 @@ static int tiocx_reload(struct cx_dev *cx_dev)
...
@@ -407,16 +404,22 @@ static int tiocx_reload(struct cx_dev *cx_dev)
if
(
bitstream_loaded
(
nasid
))
{
if
(
bitstream_loaded
(
nasid
))
{
uint64_t
cx_id
;
uint64_t
cx_id
;
int
rv
;
cx_id
=
*
(
volatile
uint64_t
*
)(
TIO_SWIN_BASE
(
nasid
,
TIOCX_CORELET
)
+
rv
=
ia64_sn_sysctl_tio_clock_reset
(
nasid
);
if
(
rv
)
{
printk
(
KERN_ALERT
"CX port JTAG reset failed.
\n
"
);
}
else
{
cx_id
=
*
(
volatile
uint64_t
*
)
(
TIO_SWIN_BASE
(
nasid
,
TIOCX_CORELET
)
+
WIDGET_ID
);
WIDGET_ID
);
part_num
=
XWIDGET_PART_NUM
(
cx_id
);
part_num
=
XWIDGET_PART_NUM
(
cx_id
);
mfg_num
=
XWIDGET_MFG_NUM
(
cx_id
);
mfg_num
=
XWIDGET_MFG_NUM
(
cx_id
);
DBG
(
"part= 0x%x, mfg= 0x%x
\n
"
,
part_num
,
mfg_num
);
DBG
(
"part= 0x%x, mfg= 0x%x
\n
"
,
part_num
,
mfg_num
);
/* just ignore it if it's a CE */
/* just ignore it if it's a CE */
if
(
part_num
==
TIO_CE_ASIC_PARTNUM
)
if
(
part_num
==
TIO_CE_ASIC_PARTNUM
)
return
0
;
return
0
;
}
}
}
cx_dev
->
cx_id
.
part_num
=
part_num
;
cx_dev
->
cx_id
.
part_num
=
part_num
;
...
@@ -436,10 +439,10 @@ static ssize_t show_cxdev_control(struct device *dev, struct device_attribute *a
...
@@ -436,10 +439,10 @@ static ssize_t show_cxdev_control(struct device *dev, struct device_attribute *a
{
{
struct
cx_dev
*
cx_dev
=
to_cx_dev
(
dev
);
struct
cx_dev
*
cx_dev
=
to_cx_dev
(
dev
);
return
sprintf
(
buf
,
"0x%x 0x%x 0x%x
%d
\n
"
,
return
sprintf
(
buf
,
"0x%x 0x%x 0x%x
0x%x
\n
"
,
cx_dev
->
cx_id
.
nasid
,
cx_dev
->
cx_id
.
nasid
,
cx_dev
->
cx_id
.
part_num
,
cx_dev
->
cx_id
.
mfg_num
,
cx_dev
->
cx_id
.
part_num
,
cx_dev
->
cx_id
.
mfg_num
,
tiocx_btchar_get
(
cx_dev
->
cx_id
.
nasid
)
);
cx_dev
->
bt
);
}
}
static
ssize_t
store_cxdev_control
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
static
ssize_t
store_cxdev_control
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
...
@@ -488,11 +491,12 @@ static int __init tiocx_init(void)
...
@@ -488,11 +491,12 @@ static int __init tiocx_init(void)
for
(
cnodeid
=
0
;
cnodeid
<
MAX_COMPACT_NODES
;
cnodeid
++
)
{
for
(
cnodeid
=
0
;
cnodeid
<
MAX_COMPACT_NODES
;
cnodeid
++
)
{
nasid_t
nasid
;
nasid_t
nasid
;
int
bt
;
if
((
nasid
=
cnodeid_to_nasid
(
cnodeid
))
<
0
)
if
((
nasid
=
cnodeid_to_nasid
(
cnodeid
))
<
0
)
break
;
/* No more nasids .. bail out of loop */
break
;
/* No more nasids .. bail out of loop */
if
((
nasid
&
0x1
)
&&
is_fpga_
brick
(
nasid
))
{
if
((
nasid
&
0x1
)
&&
is_fpga_
tio
(
nasid
,
&
bt
))
{
struct
hubdev_info
*
hubdev
;
struct
hubdev_info
*
hubdev
;
struct
xwidget_info
*
widgetp
;
struct
xwidget_info
*
widgetp
;
...
@@ -512,7 +516,7 @@ static int __init tiocx_init(void)
...
@@ -512,7 +516,7 @@ static int __init tiocx_init(void)
if
(
cx_device_register
if
(
cx_device_register
(
nasid
,
widgetp
->
xwi_hwid
.
part_num
,
(
nasid
,
widgetp
->
xwi_hwid
.
part_num
,
widgetp
->
xwi_hwid
.
mfg_num
,
hubdev
)
<
0
)
widgetp
->
xwi_hwid
.
mfg_num
,
hubdev
,
bt
)
<
0
)
return
-
ENXIO
;
return
-
ENXIO
;
else
else
found_tiocx_device
++
;
found_tiocx_device
++
;
...
...
include/asm-ia64/sn/l1.h
View file @
91896740
...
@@ -35,4 +35,16 @@
...
@@ -35,4 +35,16 @@
#define L1_BRICKTYPE_ATHENA 0x2b
/* + */
#define L1_BRICKTYPE_ATHENA 0x2b
/* + */
#define L1_BRICKTYPE_DAYTONA 0x7a
/* z */
#define L1_BRICKTYPE_DAYTONA 0x7a
/* z */
/* board type response codes */
#define L1_BOARDTYPE_IP69 0x0100
/* CA */
#define L1_BOARDTYPE_IP63 0x0200
/* CB */
#define L1_BOARDTYPE_BASEIO 0x0300
/* IB */
#define L1_BOARDTYPE_PCIE2SLOT 0x0400
/* IC */
#define L1_BOARDTYPE_PCIX3SLOT 0x0500
/* ID */
#define L1_BOARDTYPE_PCIXPCIE4SLOT 0x0600
/* IE */
#define L1_BOARDTYPE_ABACUS 0x0700
/* AB */
#define L1_BOARDTYPE_DAYTONA 0x0800
/* AD */
#define L1_BOARDTYPE_INVAL (-1)
/* invalid brick type */
#endif
/* _ASM_IA64_SN_L1_H */
#endif
/* _ASM_IA64_SN_L1_H */
include/asm-ia64/sn/sn_sal.h
View file @
91896740
...
@@ -47,6 +47,7 @@
...
@@ -47,6 +47,7 @@
#define SN_SAL_CONSOLE_PUTB 0x02000028
#define SN_SAL_CONSOLE_PUTB 0x02000028
#define SN_SAL_CONSOLE_XMIT_CHARS 0x0200002a
#define SN_SAL_CONSOLE_XMIT_CHARS 0x0200002a
#define SN_SAL_CONSOLE_READC 0x0200002b
#define SN_SAL_CONSOLE_READC 0x0200002b
#define SN_SAL_SYSCTL_OP 0x02000030
#define SN_SAL_SYSCTL_MODID_GET 0x02000031
#define SN_SAL_SYSCTL_MODID_GET 0x02000031
#define SN_SAL_SYSCTL_GET 0x02000032
#define SN_SAL_SYSCTL_GET 0x02000032
#define SN_SAL_SYSCTL_IOBRICK_MODULE_GET 0x02000033
#define SN_SAL_SYSCTL_IOBRICK_MODULE_GET 0x02000033
...
@@ -100,6 +101,13 @@
...
@@ -100,6 +101,13 @@
#define SAL_INTR_ALLOC 1
#define SAL_INTR_ALLOC 1
#define SAL_INTR_FREE 2
#define SAL_INTR_FREE 2
/*
* operations available on the generic SN_SAL_SYSCTL_OP
* runtime service
*/
#define SAL_SYSCTL_OP_IOBOARD 0x0001
/* retrieve board type */
#define SAL_SYSCTL_OP_TIO_JLCK_RST 0x0002
/* issue TIO clock reset */
/*
/*
* IRouter (i.e. generalized system controller) operations
* IRouter (i.e. generalized system controller) operations
*/
*/
...
@@ -873,6 +881,41 @@ ia64_sn_sysctl_event_init(nasid_t nasid)
...
@@ -873,6 +881,41 @@ ia64_sn_sysctl_event_init(nasid_t nasid)
return
(
int
)
rv
.
v0
;
return
(
int
)
rv
.
v0
;
}
}
/*
* Ask the system controller on the specified nasid to reset
* the CX corelet clock. Only valid on TIO nodes.
*/
static
inline
int
ia64_sn_sysctl_tio_clock_reset
(
nasid_t
nasid
)
{
struct
ia64_sal_retval
rv
;
SAL_CALL_REENTRANT
(
rv
,
SN_SAL_SYSCTL_OP
,
SAL_SYSCTL_OP_TIO_JLCK_RST
,
nasid
,
0
,
0
,
0
,
0
,
0
);
if
(
rv
.
status
!=
0
)
return
(
int
)
rv
.
status
;
if
(
rv
.
v0
!=
0
)
return
(
int
)
rv
.
v0
;
return
0
;
}
/*
* Get the associated ioboard type for a given nasid.
*/
static
inline
int
ia64_sn_sysctl_ioboard_get
(
nasid_t
nasid
)
{
struct
ia64_sal_retval
rv
;
SAL_CALL_REENTRANT
(
rv
,
SN_SAL_SYSCTL_OP
,
SAL_SYSCTL_OP_IOBOARD
,
nasid
,
0
,
0
,
0
,
0
,
0
);
if
(
rv
.
v0
!=
0
)
return
(
int
)
rv
.
v0
;
if
(
rv
.
v1
!=
0
)
return
(
int
)
rv
.
v1
;
return
0
;
}
/**
/**
* ia64_sn_get_fit_compt - read a FIT entry from the PROM header
* ia64_sn_get_fit_compt - read a FIT entry from the PROM header
* @nasid: NASID of node to read
* @nasid: NASID of node to read
...
...
include/asm-ia64/sn/tiocx.h
View file @
91896740
...
@@ -19,6 +19,7 @@ struct cx_id_s {
...
@@ -19,6 +19,7 @@ struct cx_id_s {
struct
cx_dev
{
struct
cx_dev
{
struct
cx_id_s
cx_id
;
struct
cx_id_s
cx_id
;
int
bt
;
/* board/blade type */
void
*
soft
;
/* driver specific */
void
*
soft
;
/* driver specific */
struct
hubdev_info
*
hubdev
;
struct
hubdev_info
*
hubdev
;
struct
device
dev
;
struct
device
dev
;
...
@@ -59,7 +60,7 @@ struct cx_drv {
...
@@ -59,7 +60,7 @@ struct cx_drv {
extern
struct
sn_irq_info
*
tiocx_irq_alloc
(
nasid_t
,
int
,
int
,
nasid_t
,
int
);
extern
struct
sn_irq_info
*
tiocx_irq_alloc
(
nasid_t
,
int
,
int
,
nasid_t
,
int
);
extern
void
tiocx_irq_free
(
struct
sn_irq_info
*
);
extern
void
tiocx_irq_free
(
struct
sn_irq_info
*
);
extern
int
cx_device_unregister
(
struct
cx_dev
*
);
extern
int
cx_device_unregister
(
struct
cx_dev
*
);
extern
int
cx_device_register
(
nasid_t
,
int
,
int
,
struct
hubdev_info
*
);
extern
int
cx_device_register
(
nasid_t
,
int
,
int
,
struct
hubdev_info
*
,
int
);
extern
int
cx_driver_unregister
(
struct
cx_drv
*
);
extern
int
cx_driver_unregister
(
struct
cx_drv
*
);
extern
int
cx_driver_register
(
struct
cx_drv
*
);
extern
int
cx_driver_register
(
struct
cx_drv
*
);
extern
uint64_t
tiocx_dma_addr
(
uint64_t
addr
);
extern
uint64_t
tiocx_dma_addr
(
uint64_t
addr
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment